Merge "Add benchmark for progress indicators" into androidx-main
diff --git a/appsearch/appsearch-local-storage/src/androidTest/java/androidx/appsearch/localstorage/AppSearchImplTest.java b/appsearch/appsearch-local-storage/src/androidTest/java/androidx/appsearch/localstorage/AppSearchImplTest.java
index c2eac42..d20b0f7 100644
--- a/appsearch/appsearch-local-storage/src/androidTest/java/androidx/appsearch/localstorage/AppSearchImplTest.java
+++ b/appsearch/appsearch-local-storage/src/androidTest/java/androidx/appsearch/localstorage/AppSearchImplTest.java
@@ -2269,7 +2269,6 @@
VisibilityDocument visibilityDocument = new VisibilityDocument.Builder("schema")
.setNotDisplayedBySystem(true)
.addVisibleToPackage(new PackageIdentifier("pkgBar", new byte[32]))
- .setCreationTimestampMillis(12345L)
.build();
// Insert schema for package A and B.
@@ -2314,13 +2313,11 @@
new VisibilityDocument.Builder("packageA$database/schema")
.setNotDisplayedBySystem(true)
.addVisibleToPackage(new PackageIdentifier("pkgBar", new byte[32]))
- .setCreationTimestampMillis(12345L)
.build();
VisibilityDocument expectedVisibilityDocumentB =
new VisibilityDocument.Builder("packageB$database/schema")
.setNotDisplayedBySystem(true)
.addVisibleToPackage(new PackageIdentifier("pkgBar", new byte[32]))
- .setCreationTimestampMillis(12345L)
.build();
assertThat(mAppSearchImpl.mVisibilityStoreLocked
.getVisibility("packageA$database/schema"))
@@ -4243,7 +4240,6 @@
VisibilityDocument visibilityDocument = new VisibilityDocument.Builder("Email")
.setNotDisplayedBySystem(true)
.addVisibleToPackage(new PackageIdentifier("pkgBar", new byte[32]))
- .setCreationTimestampMillis(12345L)
.build();
List<AppSearchSchema> schemas =
Collections.singletonList(new AppSearchSchema.Builder("Email").build());
@@ -4264,17 +4260,17 @@
VisibilityDocument expectedDocument = new VisibilityDocument.Builder(prefix + "Email")
.setNotDisplayedBySystem(true)
.addVisibleToPackage(new PackageIdentifier("pkgBar", new byte[32]))
- .setCreationTimestampMillis(12345L)
.build();
assertThat(mAppSearchImpl.mVisibilityStoreLocked.getVisibility(prefix + "Email"))
.isEqualTo(expectedDocument);
// Verify the VisibilityDocument is saved to AppSearchImpl.
- VisibilityDocument actualDocument = new VisibilityDocument(mAppSearchImpl.getDocument(
+ VisibilityDocument actualDocument =
+ new VisibilityDocument.Builder(mAppSearchImpl.getDocument(
VisibilityStore.VISIBILITY_PACKAGE_NAME,
VisibilityStore.VISIBILITY_DATABASE_NAME,
VisibilityDocument.NAMESPACE,
/*id=*/ prefix + "Email",
- /*typePropertyPaths=*/ Collections.emptyMap()));
+ /*typePropertyPaths=*/ Collections.emptyMap())).build();
assertThat(actualDocument).isEqualTo(expectedDocument);
}
@@ -4284,7 +4280,6 @@
VisibilityDocument visibilityDocument1 = new VisibilityDocument.Builder("Email1")
.setNotDisplayedBySystem(true)
.addVisibleToPackage(new PackageIdentifier("pkgBar", new byte[32]))
- .setCreationTimestampMillis(12345L)
.build();
List<AppSearchSchema> schemas1 =
Collections.singletonList(new AppSearchSchema.Builder("Email1").build());
@@ -4305,24 +4300,23 @@
VisibilityDocument expectedDocument1 = new VisibilityDocument.Builder(prefix1 + "Email1")
.setNotDisplayedBySystem(true)
.addVisibleToPackage(new PackageIdentifier("pkgBar", new byte[32]))
- .setCreationTimestampMillis(12345L)
.build();
assertThat(mAppSearchImpl.mVisibilityStoreLocked.getVisibility(prefix1 + "Email1"))
.isEqualTo(expectedDocument1);
// Verify the VisibilityDocument is saved to AppSearchImpl.
- VisibilityDocument actualDocument1 = new VisibilityDocument(mAppSearchImpl.getDocument(
+ VisibilityDocument actualDocument1 =
+ new VisibilityDocument.Builder(mAppSearchImpl.getDocument(
VisibilityStore.VISIBILITY_PACKAGE_NAME,
VisibilityStore.VISIBILITY_DATABASE_NAME,
VisibilityDocument.NAMESPACE,
/*id=*/ prefix1 + "Email1",
- /*typePropertyPaths=*/ Collections.emptyMap()));
+ /*typePropertyPaths=*/ Collections.emptyMap())).build();
assertThat(actualDocument1).isEqualTo(expectedDocument1);
// Create Visibility Document for Email2
VisibilityDocument visibilityDocument2 = new VisibilityDocument.Builder("Email2")
.setNotDisplayedBySystem(false)
.addVisibleToPackage(new PackageIdentifier("pkgFoo", new byte[32]))
- .setCreationTimestampMillis(54321L)
.build();
List<AppSearchSchema> schemas2 =
Collections.singletonList(new AppSearchSchema.Builder("Email2").build());
@@ -4343,29 +4337,29 @@
VisibilityDocument expectedDocument2 = new VisibilityDocument.Builder(prefix2 + "Email2")
.setNotDisplayedBySystem(false)
.addVisibleToPackage(new PackageIdentifier("pkgFoo", new byte[32]))
- .setCreationTimestampMillis(54321)
.build();
assertThat(mAppSearchImpl.mVisibilityStoreLocked.getVisibility(prefix2 + "Email2"))
.isEqualTo(expectedDocument2);
// Verify the VisibilityDocument is saved to AppSearchImpl.
- VisibilityDocument actualDocument2 = new VisibilityDocument(mAppSearchImpl.getDocument(
+ VisibilityDocument actualDocument2 = new VisibilityDocument.Builder(
+ mAppSearchImpl.getDocument(
VisibilityStore.VISIBILITY_PACKAGE_NAME,
VisibilityStore.VISIBILITY_DATABASE_NAME,
VisibilityDocument.NAMESPACE,
/*id=*/ prefix2 + "Email2",
- /*typePropertyPaths=*/ Collections.emptyMap()));
+ /*typePropertyPaths=*/ Collections.emptyMap())).build();
assertThat(actualDocument2).isEqualTo(expectedDocument2);
// Check the existing visibility document retains.
assertThat(mAppSearchImpl.mVisibilityStoreLocked.getVisibility(prefix1 + "Email1"))
.isEqualTo(expectedDocument1);
// Verify the VisibilityDocument is saved to AppSearchImpl.
- actualDocument1 = new VisibilityDocument(mAppSearchImpl.getDocument(
+ actualDocument1 = new VisibilityDocument.Builder(mAppSearchImpl.getDocument(
VisibilityStore.VISIBILITY_PACKAGE_NAME,
VisibilityStore.VISIBILITY_DATABASE_NAME,
VisibilityDocument.NAMESPACE,
/*id=*/ prefix1 + "Email1",
- /*typePropertyPaths=*/ Collections.emptyMap()));
+ /*typePropertyPaths=*/ Collections.emptyMap())).build();
assertThat(actualDocument1).isEqualTo(expectedDocument1);
}
@@ -4375,7 +4369,6 @@
VisibilityDocument visibilityDocument = new VisibilityDocument.Builder("Email")
.setNotDisplayedBySystem(true)
.addVisibleToPackage(new PackageIdentifier("pkgBar", new byte[32]))
- .setCreationTimestampMillis(12345L)
.build();
List<AppSearchSchema> schemas =
@@ -4395,17 +4388,17 @@
VisibilityDocument expectedDocument = new VisibilityDocument.Builder(prefix + "Email")
.setNotDisplayedBySystem(true)
.addVisibleToPackage(new PackageIdentifier("pkgBar", new byte[32]))
- .setCreationTimestampMillis(12345L)
.build();
assertThat(mAppSearchImpl.mVisibilityStoreLocked.getVisibility(prefix + "Email"))
.isEqualTo(expectedDocument);
// Verify the VisibilityDocument is saved to AppSearchImpl.
- VisibilityDocument actualDocument = new VisibilityDocument(mAppSearchImpl.getDocument(
+ VisibilityDocument actualDocument =
+ new VisibilityDocument.Builder(mAppSearchImpl.getDocument(
VisibilityStore.VISIBILITY_PACKAGE_NAME,
VisibilityStore.VISIBILITY_DATABASE_NAME,
VisibilityDocument.NAMESPACE,
/*id=*/ prefix + "Email",
- /*typePropertyPaths=*/ Collections.emptyMap()));
+ /*typePropertyPaths=*/ Collections.emptyMap())).build();
assertThat(actualDocument).isEqualTo(expectedDocument);
// Set schema Email and its all-default visibility document to AppSearch database1
@@ -4439,7 +4432,6 @@
VisibilityDocument visibilityDocument = new VisibilityDocument.Builder("Email")
.setNotDisplayedBySystem(true)
.addVisibleToPackage(new PackageIdentifier("pkgBar", new byte[32]))
- .setCreationTimestampMillis(12345L)
.build();
List<AppSearchSchema> schemas =
@@ -4458,17 +4450,17 @@
VisibilityDocument expectedDocument = new VisibilityDocument.Builder(prefix + "Email")
.setNotDisplayedBySystem(true)
.addVisibleToPackage(new PackageIdentifier("pkgBar", new byte[32]))
- .setCreationTimestampMillis(12345L)
.build();
assertThat(mAppSearchImpl.mVisibilityStoreLocked.getVisibility(prefix + "Email"))
.isEqualTo(expectedDocument);
// Verify the VisibilityDocument is saved to AppSearchImpl.
- VisibilityDocument actualDocument = new VisibilityDocument(mAppSearchImpl.getDocument(
+ VisibilityDocument actualDocument =
+ new VisibilityDocument.Builder(mAppSearchImpl.getDocument(
VisibilityStore.VISIBILITY_PACKAGE_NAME,
VisibilityStore.VISIBILITY_DATABASE_NAME,
VisibilityDocument.NAMESPACE,
/*id=*/ prefix + "Email",
- /*typePropertyPaths=*/ Collections.emptyMap()));
+ /*typePropertyPaths=*/ Collections.emptyMap())).build();
assertThat(actualDocument).isEqualTo(expectedDocument);
// remove the schema and visibility setting from AppSearch
@@ -4511,7 +4503,6 @@
VisibilityDocument visibilityDocument = new VisibilityDocument.Builder("Email")
.setNotDisplayedBySystem(true)
.addVisibleToPackage(new PackageIdentifier("pkgBar", new byte[32]))
- .setCreationTimestampMillis(12345L)
.build();
List<AppSearchSchema> schemas =
Collections.singletonList(new AppSearchSchema.Builder("Email").build());
@@ -4541,18 +4532,18 @@
VisibilityDocument expectedDocument = new VisibilityDocument.Builder(prefix + "Email")
.setNotDisplayedBySystem(true)
.addVisibleToPackage(new PackageIdentifier("pkgBar", new byte[32]))
- .setCreationTimestampMillis(12345L)
.build();
assertThat(mAppSearchImpl.mVisibilityStoreLocked.getVisibility(prefix + "Email"))
.isEqualTo(expectedDocument);
// Verify the VisibilityDocument is saved to AppSearchImpl.
- VisibilityDocument actualDocument = new VisibilityDocument(mAppSearchImpl.getDocument(
+ VisibilityDocument actualDocument =
+ new VisibilityDocument.Builder(mAppSearchImpl.getDocument(
VisibilityStore.VISIBILITY_PACKAGE_NAME,
VisibilityStore.VISIBILITY_DATABASE_NAME,
VisibilityDocument.NAMESPACE,
/*id=*/ prefix + "Email",
- /*typePropertyPaths=*/ Collections.emptyMap()));
+ /*typePropertyPaths=*/ Collections.emptyMap())).build();
assertThat(actualDocument).isEqualTo(expectedDocument);
// remove schema and visibility document
diff --git a/appsearch/appsearch-local-storage/src/androidTest/java/androidx/appsearch/localstorage/visibilitystore/VisibilityStoreMigrationHelperFromV0Test.java b/appsearch/appsearch-local-storage/src/androidTest/java/androidx/appsearch/localstorage/visibilitystore/VisibilityStoreMigrationHelperFromV0Test.java
index d516e81..77772c4 100644
--- a/appsearch/appsearch-local-storage/src/androidTest/java/androidx/appsearch/localstorage/visibilitystore/VisibilityStoreMigrationHelperFromV0Test.java
+++ b/appsearch/appsearch-local-storage/src/androidTest/java/androidx/appsearch/localstorage/visibilitystore/VisibilityStoreMigrationHelperFromV0Test.java
@@ -134,31 +134,29 @@
ALWAYS_OPTIMIZE,
/*visibilityChecker=*/null);
- VisibilityDocument actualDocument1 = new VisibilityDocument(
+ VisibilityDocument actualDocument1 = new VisibilityDocument.Builder(
appSearchImpl.getDocument(
VisibilityStore.VISIBILITY_PACKAGE_NAME,
VisibilityStore.VISIBILITY_DATABASE_NAME,
VisibilityDocument.NAMESPACE,
/*id=*/ prefix + "Schema1",
- /*typePropertyPaths=*/ Collections.emptyMap()));
- VisibilityDocument actualDocument2 = new VisibilityDocument(
+ /*typePropertyPaths=*/ Collections.emptyMap())).build();
+ VisibilityDocument actualDocument2 = new VisibilityDocument.Builder(
appSearchImpl.getDocument(
VisibilityStore.VISIBILITY_PACKAGE_NAME,
VisibilityStore.VISIBILITY_DATABASE_NAME,
VisibilityDocument.NAMESPACE,
/*id=*/ prefix + "Schema2",
- /*typePropertyPaths=*/ Collections.emptyMap()));
+ /*typePropertyPaths=*/ Collections.emptyMap())).build();
VisibilityDocument expectedDocument1 =
new VisibilityDocument.Builder(/*id=*/ prefix + "Schema1")
.setNotDisplayedBySystem(true)
- .setCreationTimestampMillis(actualDocument1.getCreationTimestampMillis())
.addVisibleToPackage(new PackageIdentifier(packageNameFoo, sha256CertFoo))
.build();
VisibilityDocument expectedDocument2 =
new VisibilityDocument.Builder(/*id=*/ prefix + "Schema2")
.setNotDisplayedBySystem(true)
- .setCreationTimestampMillis(actualDocument2.getCreationTimestampMillis())
.addVisibleToPackage(new PackageIdentifier(packageNameBar, sha256CertBar))
.build();
assertThat(actualDocument1).isEqualTo(expectedDocument1);
diff --git a/appsearch/appsearch-local-storage/src/androidTest/java/androidx/appsearch/localstorage/visibilitystore/VisibilityStoreMigrationHelperFromV1Test.java b/appsearch/appsearch-local-storage/src/androidTest/java/androidx/appsearch/localstorage/visibilitystore/VisibilityStoreMigrationHelperFromV1Test.java
index 56086d4..c5bd8ac 100644
--- a/appsearch/appsearch-local-storage/src/androidTest/java/androidx/appsearch/localstorage/visibilitystore/VisibilityStoreMigrationHelperFromV1Test.java
+++ b/appsearch/appsearch-local-storage/src/androidTest/java/androidx/appsearch/localstorage/visibilitystore/VisibilityStoreMigrationHelperFromV1Test.java
@@ -128,13 +128,13 @@
ALWAYS_OPTIMIZE,
/*visibilityChecker=*/null);
- VisibilityDocument actualDocument = new VisibilityDocument(
+ VisibilityDocument actualDocument = new VisibilityDocument.Builder(
appSearchImpl.getDocument(
VisibilityStore.VISIBILITY_PACKAGE_NAME,
VisibilityStore.VISIBILITY_DATABASE_NAME,
VisibilityDocument.NAMESPACE,
/*id=*/ prefix + "Schema",
- /*typePropertyPaths=*/ Collections.emptyMap()));
+ /*typePropertyPaths=*/ Collections.emptyMap())).build();
assertThat(actualDocument.isNotDisplayedBySystem()).isTrue();
assertThat(actualDocument.getPackageNames()).asList().containsExactly(packageNameFoo,
diff --git a/appsearch/appsearch-local-storage/src/androidTest/java/androidx/appsearch/localstorage/visibilitystore/VisibilityStoreTest.java b/appsearch/appsearch-local-storage/src/androidTest/java/androidx/appsearch/localstorage/visibilitystore/VisibilityStoreTest.java
index 721b3ad..17e8a15 100644
--- a/appsearch/appsearch-local-storage/src/androidTest/java/androidx/appsearch/localstorage/visibilitystore/VisibilityStoreTest.java
+++ b/appsearch/appsearch-local-storage/src/androidTest/java/androidx/appsearch/localstorage/visibilitystore/VisibilityStoreTest.java
@@ -110,12 +110,13 @@
assertThat(mVisibilityStore.getVisibility(prefix + "Email"))
.isEqualTo(visibilityDocument);
// Verify the VisibilityDocument is saved to AppSearchImpl.
- VisibilityDocument actualDocument = new VisibilityDocument(mAppSearchImpl.getDocument(
+ VisibilityDocument actualDocument =
+ new VisibilityDocument.Builder(mAppSearchImpl.getDocument(
VisibilityStore.VISIBILITY_PACKAGE_NAME,
VisibilityStore.VISIBILITY_DATABASE_NAME,
VisibilityDocument.NAMESPACE,
/*id=*/ prefix + "Email",
- /*typePropertyPaths=*/ Collections.emptyMap()));
+ /*typePropertyPaths=*/ Collections.emptyMap())).build();
assertThat(actualDocument).isEqualTo(visibilityDocument);
}
@@ -130,12 +131,13 @@
assertThat(mVisibilityStore.getVisibility("Email"))
.isEqualTo(visibilityDocument);
// Verify the VisibilityDocument is saved to AppSearchImpl.
- VisibilityDocument actualDocument = new VisibilityDocument(mAppSearchImpl.getDocument(
+ VisibilityDocument actualDocument = new VisibilityDocument.Builder(
+ mAppSearchImpl.getDocument(
VisibilityStore.VISIBILITY_PACKAGE_NAME,
VisibilityStore.VISIBILITY_DATABASE_NAME,
VisibilityDocument.NAMESPACE,
/*id=*/ "Email",
- /*typePropertyPaths=*/ Collections.emptyMap()));
+ /*typePropertyPaths=*/ Collections.emptyMap())).build();
assertThat(actualDocument).isEqualTo(visibilityDocument);
mVisibilityStore.removeVisibility(ImmutableSet.of(visibilityDocument.getId()));
diff --git a/appsearch/appsearch-local-storage/src/main/java/androidx/appsearch/localstorage/AppSearchImpl.java b/appsearch/appsearch-local-storage/src/main/java/androidx/appsearch/localstorage/AppSearchImpl.java
index 8b136a3..b64bab8 100644
--- a/appsearch/appsearch-local-storage/src/main/java/androidx/appsearch/localstorage/AppSearchImpl.java
+++ b/appsearch/appsearch-local-storage/src/main/java/androidx/appsearch/localstorage/AppSearchImpl.java
@@ -813,10 +813,9 @@
// fake the id, they can only mess their own app. That's totally allowed and
// they can do this via the public API too.
String prefixedSchemaType = prefix + unPrefixedDocument.getId();
- prefixedVisibilityDocuments.add(new VisibilityDocument(
- unPrefixedDocument.toBuilder()
- .setId(prefixedSchemaType)
- .build()));
+ prefixedVisibilityDocuments.add(
+ new VisibilityDocument.Builder(
+ unPrefixedDocument).setId(prefixedSchemaType).build());
// This schema has visibility settings. We should keep it from the removal list.
deprecatedVisibilityDocuments.remove(prefixedSchemaType);
}
diff --git a/appsearch/appsearch-local-storage/src/main/java/androidx/appsearch/localstorage/visibilitystore/VisibilityStore.java b/appsearch/appsearch-local-storage/src/main/java/androidx/appsearch/localstorage/visibilitystore/VisibilityStore.java
index b44cc3e..e3d5916 100644
--- a/appsearch/appsearch-local-storage/src/main/java/androidx/appsearch/localstorage/visibilitystore/VisibilityStore.java
+++ b/appsearch/appsearch-local-storage/src/main/java/androidx/appsearch/localstorage/visibilitystore/VisibilityStore.java
@@ -165,7 +165,7 @@
mAppSearchImpl.putDocument(
VISIBILITY_PACKAGE_NAME,
VISIBILITY_DATABASE_NAME,
- prefixedVisibilityDocument,
+ prefixedVisibilityDocument.toGenericDocument(),
/*sendChangeNotifications=*/ false,
/*logger=*/ null);
mVisibilityDocumentMap.put(prefixedVisibilityDocument.getId(),
@@ -226,13 +226,13 @@
VisibilityDocument visibilityDocument;
try {
// Note: We use the other clients' prefixed schema type as ids
- visibilityDocument = new VisibilityDocument(
+ visibilityDocument = new VisibilityDocument.Builder(
mAppSearchImpl.getDocument(
VISIBILITY_PACKAGE_NAME,
VISIBILITY_DATABASE_NAME,
VisibilityDocument.NAMESPACE,
/*id=*/ prefixedSchemaType,
- /*typePropertyPaths=*/ Collections.emptyMap()));
+ /*typePropertyPaths=*/ Collections.emptyMap())).build();
} catch (AppSearchException e) {
if (e.getResultCode() == RESULT_NOT_FOUND) {
// The schema has all default setting and we won't have a VisibilityDocument for
@@ -274,7 +274,7 @@
mAppSearchImpl.putDocument(
VISIBILITY_PACKAGE_NAME,
VISIBILITY_DATABASE_NAME,
- migratedDocument,
+ migratedDocument.toGenericDocument(),
/*sendChangeNotifications=*/ false,
/*logger=*/ null);
}
diff --git a/appsearch/appsearch/src/main/java/androidx/appsearch/app/VisibilityDocument.java b/appsearch/appsearch/src/main/java/androidx/appsearch/app/VisibilityDocument.java
index f794752..2bea91f 100644
--- a/appsearch/appsearch/src/main/java/androidx/appsearch/app/VisibilityDocument.java
+++ b/appsearch/appsearch/src/main/java/androidx/appsearch/app/VisibilityDocument.java
@@ -15,19 +15,23 @@
*/
package androidx.appsearch.app;
-import android.os.Bundle;
+import android.os.Parcel;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.annotation.RestrictTo;
import androidx.appsearch.annotation.CanIgnoreReturnValue;
+import androidx.appsearch.safeparcel.AbstractSafeParcelable;
+import androidx.appsearch.safeparcel.SafeParcelable;
+import androidx.appsearch.safeparcel.stub.StubCreators.VisibilityDocumentCreator;
import androidx.collection.ArraySet;
-import androidx.core.util.Preconditions;
import java.util.ArrayList;
+import java.util.Arrays;
import java.util.Collections;
import java.util.List;
import java.util.Map;
+import java.util.Objects;
import java.util.Set;
/**
@@ -35,7 +39,11 @@
* @exportToFramework:hide
*/
@RestrictTo(RestrictTo.Scope.LIBRARY_GROUP)
-public class VisibilityDocument extends GenericDocument {
[email protected](creator = "VisibilityDocumentCreator")
+public final class VisibilityDocument extends AbstractSafeParcelable {
+ @NonNull
+ public static final VisibilityDocumentCreator CREATOR = new VisibilityDocumentCreator();
+
/**
* The Schema type for documents that hold AppSearch's metadata, such as visibility settings.
*/
@@ -92,53 +100,107 @@
.build())
.build();
- public VisibilityDocument(@NonNull GenericDocument genericDocument) {
- super(genericDocument);
+ @NonNull
+ @Field(id = 1, getter = "getId")
+ private String mId;
+
+ @Field(id = 2, getter = "isNotDisplayedBySystem")
+ private final boolean mIsNotDisplayedBySystem;
+
+ @NonNull
+ @Field(id = 3, getter = "getPackageNames")
+ private final String[] mPackageNames;
+
+ @NonNull
+ @Field(id = 4, getter = "getSha256Certs")
+ private final byte[][] mSha256Certs;
+
+ @Nullable
+ @Field(id = 5, getter = "getPermissionDocuments")
+ private final VisibilityPermissionDocument[] mPermissionDocuments;
+
+ @Nullable
+ // We still need to convert this class to a GenericDocument until we completely treat it
+ // differently in AppSearchImpl.
+ // TODO(b/298118943) Remove this once internally we don't use GenericDocument to store
+ // visibility information.
+ private GenericDocument mGenericDocument;
+
+ @Nullable
+ private Integer mHashCode;
+
+ @Constructor
+ VisibilityDocument(
+ @Param(id = 1) @NonNull String id,
+ @Param(id = 2) boolean isNotDisplayedBySystem,
+ @Param(id = 3) @NonNull String[] packageNames,
+ @Param(id = 4) @NonNull byte[][] sha256Certs,
+ @Param(id = 5) @Nullable VisibilityPermissionDocument[] permissionDocuments) {
+ mId = Objects.requireNonNull(id);
+ mIsNotDisplayedBySystem = isNotDisplayedBySystem;
+ mPackageNames = Objects.requireNonNull(packageNames);
+ mSha256Certs = Objects.requireNonNull(sha256Certs);
+ mPermissionDocuments = permissionDocuments;
}
- public VisibilityDocument(@NonNull Bundle bundle) {
- super(bundle);
+ /**
+ * Gets the id for this VisibilityDocument.
+ *
+ * <p>This is being used as the document id when we convert a {@link VisibilityDocument}
+ * to a {@link GenericDocument}.
+ */
+ @NonNull
+ public String getId() {
+ return mId;
}
/** Returns whether this schema is visible to the system. */
public boolean isNotDisplayedBySystem() {
- return getPropertyBoolean(NOT_DISPLAYED_BY_SYSTEM_PROPERTY);
+ return mIsNotDisplayedBySystem;
}
/**
- * Returns a package name array which could access this schema. Use {@link #getSha256Certs()}
- * to get package's sha 256 certs. The same index of package names array and sha256Certs array
+ * Returns a package name array which could access this schema. Use {@link #getSha256Certs()} to
+ * get package's sha 256 certs. The same index of package names array and sha256Certs array
* represents same package.
*/
@NonNull
public String[] getPackageNames() {
- return Preconditions.checkNotNull(getPropertyStringArray(PACKAGE_NAME_PROPERTY));
+ return mPackageNames;
}
/**
- * Returns a package sha256Certs array which could access this schema. Use
- * {@link #getPackageNames()} to get package's name. The same index of package names array
- * and sha256Certs array represents same package.
+ * Returns a package sha256Certs array which could access this schema. Use {@link
+ * #getPackageNames()} to get package's name. The same index of package names array and
+ * sha256Certs array represents same package.
*/
@NonNull
public byte[][] getSha256Certs() {
- return Preconditions.checkNotNull(getPropertyBytesArray(SHA_256_CERT_PROPERTY));
+ return mSha256Certs;
+ }
+
+ /** Gets a list of {@link VisibilityDocument}.
+ *
+ * <p>A {@link VisibilityDocument} holds all required permissions for the caller need to have
+ * to access the schema this {@link VisibilityDocument} presents.
+ */
+ @Nullable
+ VisibilityPermissionDocument[] getPermissionDocuments() {
+ return mPermissionDocuments;
}
/**
- * Returns an array of Android Permissions that caller mush hold to access the schema
- * this {@link VisibilityDocument} represents.
+ * Returns an array of Android Permissions that caller mush hold to access the schema this
+ * {@link VisibilityDocument} represents.
*/
- @Nullable
+ @NonNull
public Set<Set<Integer>> getVisibleToPermissions() {
- GenericDocument[] permissionDocuments = getPropertyDocumentArray(PERMISSION_PROPERTY);
- if (permissionDocuments == null) {
+ if (mPermissionDocuments == null) {
return Collections.emptySet();
}
- Set<Set<Integer>> visibleToPermissions = new ArraySet<>(permissionDocuments.length);
- for (GenericDocument permissionDocument : permissionDocuments) {
- Set<Integer> requiredPermissions = new VisibilityPermissionDocument(
- permissionDocument).getAllRequiredPermissions();
+ Set<Set<Integer>> visibleToPermissions = new ArraySet<>(mPermissionDocuments.length);
+ for (VisibilityPermissionDocument permissionDocument : mPermissionDocuments) {
+ Set<Integer> requiredPermissions = permissionDocument.getAllRequiredPermissions();
if (requiredPermissions != null) {
visibleToPermissions.add(requiredPermissions);
}
@@ -146,92 +208,7 @@
return visibleToPermissions;
}
- /** Builder for {@link VisibilityDocument}. */
- public static class Builder extends GenericDocument.Builder<Builder> {
- private final Set<PackageIdentifier> mPackageIdentifiers = new ArraySet<>();
-
- /**
- * Creates a {@link Builder} for a {@link VisibilityDocument}.
- *
- * @param id The SchemaType of the {@link AppSearchSchema} that this
- * {@link VisibilityDocument} represents. The package and database prefix will be
- * added in server side. We are using prefixed schema type to be the final id of
- * this {@link VisibilityDocument}.
- */
- public Builder(@NonNull String id) {
- super(NAMESPACE, id, SCHEMA_TYPE);
- }
-
- /** Sets whether this schema has opted out of platform surfacing. */
- @CanIgnoreReturnValue
- @NonNull
- public Builder setNotDisplayedBySystem(boolean notDisplayedBySystem) {
- return setPropertyBoolean(NOT_DISPLAYED_BY_SYSTEM_PROPERTY,
- notDisplayedBySystem);
- }
-
- /** Add {@link PackageIdentifier} of packages which has access to this schema. */
- @CanIgnoreReturnValue
- @NonNull
- public Builder addVisibleToPackages(@NonNull Set<PackageIdentifier> packageIdentifiers) {
- Preconditions.checkNotNull(packageIdentifiers);
- mPackageIdentifiers.addAll(packageIdentifiers);
- return this;
- }
-
- /** Add {@link PackageIdentifier} of packages which has access to this schema. */
- @CanIgnoreReturnValue
- @NonNull
- public Builder addVisibleToPackage(@NonNull PackageIdentifier packageIdentifier) {
- Preconditions.checkNotNull(packageIdentifier);
- mPackageIdentifiers.add(packageIdentifier);
- return this;
- }
-
- /**
- * Sets required permission sets for a package needs to hold to the schema this
- * {@link VisibilityDocument} represents.
- *
- * <p> The querier could have access if they holds ALL required permissions of ANY of the
- * individual value sets.
- */
- @CanIgnoreReturnValue
- @NonNull
- public Builder setVisibleToPermissions(@NonNull Set<Set<Integer>> visibleToPermissions) {
- Preconditions.checkNotNull(visibleToPermissions);
- VisibilityPermissionDocument[] permissionDocuments =
- new VisibilityPermissionDocument[visibleToPermissions.size()];
- int i = 0;
- for (Set<Integer> allRequiredPermissions : visibleToPermissions) {
- permissionDocuments[i++] = new VisibilityPermissionDocument
- .Builder(NAMESPACE, /*id=*/String.valueOf(i))
- .setVisibleToAllRequiredPermissions(allRequiredPermissions)
- .build();
- }
- setPropertyDocument(PERMISSION_PROPERTY, permissionDocuments);
- return this;
- }
-
- /** Build a {@link VisibilityDocument} */
- @Override
- @NonNull
- public VisibilityDocument build() {
- String[] packageNames = new String[mPackageIdentifiers.size()];
- byte[][] sha256Certs = new byte[mPackageIdentifiers.size()][32];
- int i = 0;
- for (PackageIdentifier packageIdentifier : mPackageIdentifiers) {
- packageNames[i] = packageIdentifier.getPackageName();
- sha256Certs[i] = packageIdentifier.getSha256Certificate();
- ++i;
- }
- setPropertyString(PACKAGE_NAME_PROPERTY, packageNames);
- setPropertyBytes(SHA_256_CERT_PROPERTY, sha256Certs);
- return new VisibilityDocument(super.build());
- }
- }
-
-
- /** Build the List of {@link VisibilityDocument} from visibility settings. */
+ /** Build the List of {@link VisibilityDocument} from visibility settings. */
@NonNull
public static List<VisibilityDocument> toVisibilityDocuments(
@NonNull SetSchemaRequest setSchemaRequest) {
@@ -241,13 +218,11 @@
setSchemaRequest.getSchemasVisibleToPackages();
Map<String, Set<Set<Integer>>> schemasVisibleToPermissions =
setSchemaRequest.getRequiredPermissionsForSchemaTypeVisibility();
-
List<VisibilityDocument> visibilityDocuments = new ArrayList<>(searchSchemas.size());
-
for (AppSearchSchema searchSchema : searchSchemas) {
String schemaType = searchSchema.getSchemaType();
VisibilityDocument.Builder documentBuilder =
- new VisibilityDocument.Builder(/*id=*/searchSchema.getSchemaType());
+ new VisibilityDocument.Builder(/*id=*/ searchSchema.getSchemaType());
documentBuilder.setNotDisplayedBySystem(
schemasNotDisplayedBySystem.contains(schemaType));
@@ -263,4 +238,209 @@
}
return visibilityDocuments;
}
+
+ /**
+ * Generates a {@link GenericDocument} from the current class.
+ *
+ * <p>This conversion is needed until we don't treat Visibility related documents as
+ * {@link GenericDocument}s internally.
+ */
+ @NonNull
+ public GenericDocument toGenericDocument() {
+ if (mGenericDocument == null) {
+ GenericDocument.Builder<?> builder = new GenericDocument.Builder<>(
+ NAMESPACE, mId, SCHEMA_TYPE);
+ builder.setPropertyBoolean(NOT_DISPLAYED_BY_SYSTEM_PROPERTY, mIsNotDisplayedBySystem);
+ builder.setPropertyString(PACKAGE_NAME_PROPERTY, mPackageNames);
+ builder.setPropertyBytes(SHA_256_CERT_PROPERTY, mSha256Certs);
+
+ // Generate an array of GenericDocument for VisibilityPermissionDocument.
+ if (mPermissionDocuments != null) {
+ GenericDocument[] permissionGenericDocs =
+ new GenericDocument[mPermissionDocuments.length];
+ for (int i = 0; i < mPermissionDocuments.length; ++i) {
+ permissionGenericDocs[i] = mPermissionDocuments[i].toGenericDocument();
+ }
+ builder.setPropertyDocument(PERMISSION_PROPERTY, permissionGenericDocs);
+ }
+
+ // The creationTimestamp doesn't matter for Visibility documents.
+ // But to make tests pass, we set it 0 so two GenericDocuments generated from
+ // the same VisibilityDocument can be same.
+ builder.setCreationTimestampMillis(0L);
+
+ mGenericDocument = builder.build();
+ }
+ return mGenericDocument;
+ }
+
+ @Override
+ public int hashCode() {
+ if (mHashCode == null) {
+ mHashCode = Objects.hash(
+ mId,
+ mIsNotDisplayedBySystem,
+ Arrays.hashCode(mPackageNames),
+ Arrays.deepHashCode(mSha256Certs),
+ Arrays.hashCode(mPermissionDocuments));
+ }
+ return mHashCode;
+ }
+
+ @Override
+ public boolean equals(@Nullable Object other) {
+ if (this == other) {
+ return true;
+ }
+ if (!(other instanceof VisibilityDocument)) {
+ return false;
+ }
+ VisibilityDocument otherVisibilityDocument = (VisibilityDocument) other;
+ return mId.equals(otherVisibilityDocument.mId)
+ && mIsNotDisplayedBySystem == otherVisibilityDocument.mIsNotDisplayedBySystem
+ && Arrays.equals(
+ mPackageNames, otherVisibilityDocument.mPackageNames)
+ && Arrays.deepEquals(
+ mSha256Certs, otherVisibilityDocument.mSha256Certs)
+ && Arrays.equals(
+ mPermissionDocuments, otherVisibilityDocument.mPermissionDocuments);
+ }
+
+ @Override
+ public void writeToParcel(@NonNull Parcel dest, int flags) {
+ VisibilityDocumentCreator.writeToParcel(this, dest, flags);
+ }
+
+ /** Builder for {@link VisibilityDocument}. */
+ public static final class Builder {
+ private final Set<PackageIdentifier> mPackageIdentifiers = new ArraySet<>();
+ private String mId;
+ private boolean mIsNotDisplayedBySystem;
+ private VisibilityPermissionDocument[] mPermissionDocuments;
+
+ /**
+ * Creates a {@link Builder} for a {@link VisibilityDocument}.
+ *
+ * @param id The SchemaType of the {@link AppSearchSchema} that this {@link
+ * VisibilityDocument} represents. The package and database prefix will be added in
+ * server side. We are using prefixed schema type to be the final id of this {@link
+ * VisibilityDocument}.
+ */
+ public Builder(@NonNull String id) {
+ mId = Objects.requireNonNull(id);
+ }
+
+ /**
+ * Constructs a {@link VisibilityDocument} from a {@link GenericDocument}.
+ *
+ * <p>This constructor is still needed until we don't treat Visibility related documents as
+ * {@link GenericDocument}s internally.
+ */
+ public Builder(@NonNull GenericDocument genericDocument) {
+ Objects.requireNonNull(genericDocument);
+
+ mId = genericDocument.getId();
+ mIsNotDisplayedBySystem = genericDocument.getPropertyBoolean(
+ NOT_DISPLAYED_BY_SYSTEM_PROPERTY);
+
+ String[] packageNames = genericDocument.getPropertyStringArray(PACKAGE_NAME_PROPERTY);
+ byte[][] sha256Certs = genericDocument.getPropertyBytesArray(SHA_256_CERT_PROPERTY);
+ for (int i = 0; i < packageNames.length; ++i) {
+ mPackageIdentifiers.add(new PackageIdentifier(packageNames[i], sha256Certs[i]));
+ }
+
+ GenericDocument[] permissionDocs =
+ genericDocument.getPropertyDocumentArray(PERMISSION_PROPERTY);
+ if (permissionDocs != null) {
+ mPermissionDocuments = new VisibilityPermissionDocument[permissionDocs.length];
+ for (int i = 0; i < permissionDocs.length; ++i) {
+ mPermissionDocuments[i] = new VisibilityPermissionDocument.Builder(
+ permissionDocs[i]).build();
+ }
+ }
+ }
+
+ public Builder(@NonNull VisibilityDocument visibilityDocument) {
+ Objects.requireNonNull(visibilityDocument);
+
+ mIsNotDisplayedBySystem = visibilityDocument.mIsNotDisplayedBySystem;
+ mPermissionDocuments = visibilityDocument.mPermissionDocuments;
+ for (int i = 0; i < visibilityDocument.mPackageNames.length; ++i) {
+ mPackageIdentifiers.add(new PackageIdentifier(visibilityDocument.mPackageNames[i],
+ visibilityDocument.mSha256Certs[i]));
+ }
+ }
+
+ /** Sets id. */
+ @CanIgnoreReturnValue
+ @NonNull
+ public Builder setId(@NonNull String id) {
+ mId = Objects.requireNonNull(id);
+ return this;
+ }
+
+ /** Sets whether this schema has opted out of platform surfacing. */
+ @CanIgnoreReturnValue
+ @NonNull
+ public Builder setNotDisplayedBySystem(boolean notDisplayedBySystem) {
+ mIsNotDisplayedBySystem = notDisplayedBySystem;
+ return this;
+ }
+
+ /** Add {@link PackageIdentifier} of packages which has access to this schema. */
+ @CanIgnoreReturnValue
+ @NonNull
+ public Builder addVisibleToPackages(@NonNull Set<PackageIdentifier> packageIdentifiers) {
+ mPackageIdentifiers.addAll(Objects.requireNonNull(packageIdentifiers));
+ return this;
+ }
+
+ /** Add {@link PackageIdentifier} of packages which has access to this schema. */
+ @CanIgnoreReturnValue
+ @NonNull
+ public Builder addVisibleToPackage(@NonNull PackageIdentifier packageIdentifier) {
+ mPackageIdentifiers.add(Objects.requireNonNull(packageIdentifier));
+ return this;
+ }
+
+ /**
+ * Sets required permission sets for a package needs to hold to the schema this {@link
+ * VisibilityDocument} represents.
+ *
+ * <p>The querier could have access if they holds ALL required permissions of ANY of the
+ * individual value sets.
+ */
+ @CanIgnoreReturnValue
+ @NonNull
+ public Builder setVisibleToPermissions(@NonNull Set<Set<Integer>> visibleToPermissions) {
+ Objects.requireNonNull(visibleToPermissions);
+ mPermissionDocuments =
+ new VisibilityPermissionDocument[visibleToPermissions.size()];
+ int i = 0;
+ for (Set<Integer> allRequiredPermissions : visibleToPermissions) {
+ mPermissionDocuments[i++] =
+ new VisibilityPermissionDocument.Builder(
+ NAMESPACE, /*id=*/ String.valueOf(i))
+ .setVisibleToAllRequiredPermissions(allRequiredPermissions)
+ .build();
+ }
+ return this;
+ }
+
+ /** Build a {@link VisibilityDocument} */
+ @NonNull
+ public VisibilityDocument build() {
+ String[] packageNames = new String[mPackageIdentifiers.size()];
+ byte[][] sha256Certs = new byte[mPackageIdentifiers.size()][32];
+ int i = 0;
+ for (PackageIdentifier packageIdentifier : mPackageIdentifiers) {
+ packageNames[i] = packageIdentifier.getPackageName();
+ sha256Certs[i] = packageIdentifier.getSha256Certificate();
+ ++i;
+ }
+ return new VisibilityDocument(mId, mIsNotDisplayedBySystem,
+ packageNames, sha256Certs, mPermissionDocuments);
+ }
+ }
}
+
diff --git a/appsearch/appsearch/src/main/java/androidx/appsearch/app/VisibilityPermissionDocument.java b/appsearch/appsearch/src/main/java/androidx/appsearch/app/VisibilityPermissionDocument.java
index 80a6a2e..54269fd 100644
--- a/appsearch/appsearch/src/main/java/androidx/appsearch/app/VisibilityPermissionDocument.java
+++ b/appsearch/appsearch/src/main/java/androidx/appsearch/app/VisibilityPermissionDocument.java
@@ -16,12 +16,19 @@
package androidx.appsearch.app;
+import android.os.Parcel;
+
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.annotation.RestrictTo;
import androidx.appsearch.annotation.CanIgnoreReturnValue;
+import androidx.appsearch.safeparcel.AbstractSafeParcelable;
+import androidx.appsearch.safeparcel.SafeParcelable;
+import androidx.appsearch.safeparcel.stub.StubCreators.VisibilityPermissionDocumentCreator;
import androidx.collection.ArraySet;
+import java.util.Arrays;
+import java.util.Objects;
import java.util.Set;
/**
@@ -30,7 +37,11 @@
* @exportToFramework:hide
*/
@RestrictTo(RestrictTo.Scope.LIBRARY_GROUP)
-public class VisibilityPermissionDocument extends GenericDocument {
[email protected](creator = "VisibilityPermissionDocumentCreator")
+public final class VisibilityPermissionDocument extends AbstractSafeParcelable {
+ @NonNull
+ public static final VisibilityPermissionDocumentCreator CREATOR =
+ new VisibilityPermissionDocumentCreator();
/**
* The Schema type for documents that hold AppSearch's metadata, such as visibility settings.
@@ -53,49 +64,79 @@
.build())
.build();
- VisibilityPermissionDocument(@NonNull GenericDocument genericDocument) {
- super(genericDocument);
+ @NonNull
+ @Field(id = 1, getter = "getId")
+ private final String mId;
+
+ @NonNull
+ @Field(id = 2, getter = "getNamespace")
+ private final String mNamespace;
+
+ @Nullable
+ @Field(id = 3, getter = "getAllRequiredPermissionsInts")
+ // SafeParcelable doesn't support Set<Integer>, so we have to convert it to int[].
+ private final int[] mAllRequiredPermissions;
+
+ @Nullable
+ // We still need to convert this class to a GenericDocument until we completely treat it
+ // differently in AppSearchImpl.
+ // TODO(b/298118943) Remove this once internally we don't use GenericDocument to store
+ // visibility information.
+ private GenericDocument mGenericDocument;
+
+ @Nullable
+ private Integer mHashCode;
+
+ @Constructor
+ VisibilityPermissionDocument(
+ @Param(id = 1) @NonNull String id,
+ @Param(id = 2) @NonNull String namespace,
+ @Param(id = 3) @Nullable int[] allRequiredPermissions) {
+ mId = Objects.requireNonNull(id);
+ mNamespace = Objects.requireNonNull(namespace);
+ mAllRequiredPermissions = allRequiredPermissions;
}
/**
- * Returns an array of Android Permissions that caller mush hold to access the schema
- * that the outer {@link VisibilityDocument} represents.
+ * Gets the id for this {@link VisibilityPermissionDocument}.
+ *
+ * <p>This is being used as the document id when we convert a
+ * {@link VisibilityPermissionDocument} to a {@link GenericDocument}.
+ */
+ @NonNull
+ public String getId() {
+ return mId;
+ }
+
+ /**
+ * Gets the namespace for this {@link VisibilityPermissionDocument}.
+ *
+ * <p>This is being used as the namespace when we convert a
+ * {@link VisibilityPermissionDocument} to a {@link GenericDocument}.
+ */
+ @NonNull
+ public String getNamespace() {
+ return mNamespace;
+ }
+
+ /** Gets the required Android Permissions in an int array. */
+ @Nullable
+ int[] getAllRequiredPermissionsInts() {
+ return mAllRequiredPermissions;
+ }
+
+ /**
+ * Returns an array of Android Permissions that caller mush hold to access the schema that the
+ * outer {@link VisibilityDocument} represents.
*/
@Nullable
public Set<Integer> getAllRequiredPermissions() {
- return toInts(getPropertyLongArray(ALL_REQUIRED_PERMISSIONS_PROPERTY));
- }
-
- /** Builder for {@link VisibilityPermissionDocument}. */
- public static class Builder extends GenericDocument.Builder<Builder> {
-
- /**
- * Creates a {@link VisibilityDocument.Builder} for a {@link VisibilityDocument}.
- */
- public Builder(@NonNull String namespace, @NonNull String id) {
- super(namespace, id, SCHEMA_TYPE);
- }
-
- /** Sets whether this schema has opted out of platform surfacing. */
- @CanIgnoreReturnValue
- @NonNull
- public Builder setVisibleToAllRequiredPermissions(
- @NonNull Set<Integer> allRequiredPermissions) {
- setPropertyLong(ALL_REQUIRED_PERMISSIONS_PROPERTY, toLongs(allRequiredPermissions));
- return this;
- }
-
- /** Build a {@link VisibilityPermissionDocument} */
- @Override
- @NonNull
- public VisibilityPermissionDocument build() {
- return new VisibilityPermissionDocument(super.build());
- }
+ return toIntegerSet(mAllRequiredPermissions);
}
@NonNull
- static long[] toLongs(@NonNull Set<Integer> properties) {
- long[] outputs = new long[properties.size()];
+ private static int[] toInts(@NonNull Set<Integer> properties) {
+ int[] outputs = new int[properties.size()];
int i = 0;
for (int property : properties) {
outputs[i++] = property;
@@ -104,14 +145,125 @@
}
@Nullable
- private static Set<Integer> toInts(@Nullable long[] properties) {
+ private static Set<Integer> toIntegerSet(@Nullable int[] properties) {
if (properties == null) {
return null;
}
Set<Integer> outputs = new ArraySet<>(properties.length);
- for (long property : properties) {
- outputs.add((int) property);
+ for (int property : properties) {
+ outputs.add(property);
}
return outputs;
}
+
+ /**
+ * Generates a {@link GenericDocument} from the current class.
+ *
+ * <p>This conversion is needed until we don't treat Visibility related documents as
+ * {@link GenericDocument}s internally.
+ */
+ @NonNull
+ public GenericDocument toGenericDocument() {
+ if (mGenericDocument == null) {
+ GenericDocument.Builder<?> builder = new GenericDocument.Builder<>(
+ mNamespace, mId, SCHEMA_TYPE);
+
+ if (mAllRequiredPermissions != null) {
+ // GenericDocument only supports long, so int[] needs to be converted to
+ // long[] here.
+ long[] longs = new long[mAllRequiredPermissions.length];
+ for (int i = 0; i < mAllRequiredPermissions.length; ++i) {
+ longs[i] = mAllRequiredPermissions[i];
+ }
+ builder.setPropertyLong(ALL_REQUIRED_PERMISSIONS_PROPERTY, longs);
+ }
+
+ mGenericDocument = builder.build();
+ }
+ return mGenericDocument;
+ }
+
+ @Override
+ public int hashCode() {
+ if (mHashCode == null) {
+ mHashCode = Objects.hash(mId, mNamespace, Arrays.hashCode(mAllRequiredPermissions));
+ }
+ return mHashCode;
+ }
+
+ @Override
+ public boolean equals(@Nullable Object other) {
+ if (this == other) {
+ return true;
+ }
+ if (!(other instanceof VisibilityPermissionDocument)) {
+ return false;
+ }
+ VisibilityPermissionDocument otherVisibilityPermissionDocument =
+ (VisibilityPermissionDocument) other;
+ return mId.equals(otherVisibilityPermissionDocument.mId)
+ && mNamespace.equals(otherVisibilityPermissionDocument.mNamespace)
+ && Arrays.equals(
+ mAllRequiredPermissions,
+ otherVisibilityPermissionDocument.mAllRequiredPermissions);
+ }
+
+ @Override
+ public void writeToParcel(@NonNull Parcel dest, int flags) {
+ VisibilityPermissionDocumentCreator.writeToParcel(this, dest, flags);
+ }
+
+ /** Builder for {@link VisibilityPermissionDocument}. */
+ public static final class Builder {
+ private String mId;
+ private String mNamespace;
+ private int[] mAllRequiredPermissions;
+
+ /**
+ * Constructs a {@link VisibilityPermissionDocument} from a {@link GenericDocument}.
+ *
+ * <p>This constructor is still needed until we don't treat Visibility related documents as
+ * {@link GenericDocument}s internally.
+ */
+ public Builder(@NonNull GenericDocument genericDocument) {
+ Objects.requireNonNull(genericDocument);
+ mId = genericDocument.getId();
+ mNamespace = genericDocument.getNamespace();
+ // GenericDocument only supports long[], so we need to convert it back to int[].
+ long[] longs = genericDocument.getPropertyLongArray(
+ ALL_REQUIRED_PERMISSIONS_PROPERTY);
+ if (longs != null) {
+ mAllRequiredPermissions = new int[longs.length];
+ for (int i = 0; i < longs.length; ++i) {
+ mAllRequiredPermissions[i] = (int) longs[i];
+ }
+ }
+ }
+
+ /** Creates a {@link VisibilityDocument.Builder} for a {@link VisibilityDocument}. */
+ public Builder(@NonNull String namespace, @NonNull String id) {
+ mNamespace = Objects.requireNonNull(namespace);
+ mId = Objects.requireNonNull(id);
+ }
+
+ /**
+ * Sets a set of Android Permissions that caller mush hold to access the schema that the
+ * outer {@link VisibilityDocument} represents.
+ */
+ @CanIgnoreReturnValue
+ @NonNull
+ public Builder setVisibleToAllRequiredPermissions(
+ @NonNull Set<Integer> allRequiredPermissions) {
+ mAllRequiredPermissions = toInts(Objects.requireNonNull(allRequiredPermissions));
+ return this;
+ }
+
+ /** Builds a {@link VisibilityPermissionDocument} */
+ @NonNull
+ public VisibilityPermissionDocument build() {
+ return new VisibilityPermissionDocument(mId,
+ mNamespace,
+ mAllRequiredPermissions);
+ }
+ }
}
diff --git a/appsearch/appsearch/src/main/java/androidx/appsearch/safeparcel/stub/StubCreators.java b/appsearch/appsearch/src/main/java/androidx/appsearch/safeparcel/stub/StubCreators.java
index c4f9241..b60c9e4 100644
--- a/appsearch/appsearch/src/main/java/androidx/appsearch/safeparcel/stub/StubCreators.java
+++ b/appsearch/appsearch/src/main/java/androidx/appsearch/safeparcel/stub/StubCreators.java
@@ -74,4 +74,12 @@
/** Stub creator for {@link GenericDocumentParcel}. */
public static class GenericDocumentParcelCreator extends AbstractCreator {
}
+
+ /** Stub creator for {@link androidx.appsearch.app.VisibilityPermissionDocument}. */
+ public static class VisibilityPermissionDocumentCreator extends AbstractCreator {
+ }
+
+ /** Stub creator for {@link androidx.appsearch.app.VisibilityDocument}. */
+ public static class VisibilityDocumentCreator extends AbstractCreator {
+ }
}
diff --git a/bluetooth/integration-tests/testapp/src/main/java/androidx/bluetooth/integration/testapp/ui/advertiser/AdvertiserFragment.kt b/bluetooth/integration-tests/testapp/src/main/java/androidx/bluetooth/integration/testapp/ui/advertiser/AdvertiserFragment.kt
index 66cddcb..6a0139f 100644
--- a/bluetooth/integration-tests/testapp/src/main/java/androidx/bluetooth/integration/testapp/ui/advertiser/AdvertiserFragment.kt
+++ b/bluetooth/integration-tests/testapp/src/main/java/androidx/bluetooth/integration/testapp/ui/advertiser/AdvertiserFragment.kt
@@ -46,7 +46,6 @@
import androidx.recyclerview.widget.DividerItemDecoration
import androidx.recyclerview.widget.LinearLayoutManager
import com.google.android.material.tabs.TabLayout
-import java.nio.ByteBuffer
import java.util.UUID
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.Dispatchers
@@ -321,10 +320,19 @@
// Permissions are handled by MainActivity requestBluetoothPermissions
@SuppressLint("MissingPermission")
private fun startAdvertise() {
+ Log.d(TAG, "startAdvertise() called")
+
advertiseJob = advertiseScope.launch {
+ Log.d(
+ TAG, "bluetoothLe.advertise() called with: " +
+ "viewModel.advertiseParams = ${viewModel.advertiseParams}"
+ )
+
isAdvertising = true
bluetoothLe.advertise(viewModel.advertiseParams) {
+ Log.d(TAG, "bluetoothLe.advertise result: AdvertiseResult = $it")
+
when (it) {
BluetoothLe.ADVERTISE_STARTED -> {
toast("ADVERTISE_STARTED").show()
@@ -355,6 +363,8 @@
}
private fun onAddGattService() {
+ Log.d(TAG, "onAddGattService() called")
+
val editTextUuid = EditText(requireActivity())
editTextUuid.hint = getString(R.string.service_uuid)
@@ -386,6 +396,11 @@
}
private fun onAddGattCharacteristic(bluetoothGattService: GattService) {
+ Log.d(
+ TAG, "onAddGattCharacteristic() called with: " +
+ "bluetoothGattService = $bluetoothGattService"
+ )
+
val view = layoutInflater.inflate(R.layout.dialog_add_characteristic, null)
val editTextUuid = view.findViewById<EditText>(R.id.edit_text_uuid)
@@ -457,24 +472,73 @@
Log.d(TAG, "openGattServer() called")
gattServerJob = gattServerScope.launch {
+ Log.d(
+ TAG, "bluetoothLe.openGattServer() called with: " +
+ "viewModel.gattServerServices = ${viewModel.gattServerServices}"
+ )
+
isGattServerOpen = true
bluetoothLe.openGattServer(viewModel.gattServerServices) {
+ Log.d(
+ TAG, "bluetoothLe.openGattServer() called with: " +
+ "viewModel.gattServerServices = ${viewModel.gattServerServices}"
+ )
+
connectRequests.collect {
+ Log.d(TAG, "connectRequests.collected: GattServerConnectRequest = $it")
+
launch {
it.accept {
- requests.collect {
- // TODO(b/269390098): handle request correctly
- when (it) {
- is GattServerRequest.ReadCharacteristic ->
- it.sendResponse(
- ByteBuffer.allocate(Int.SIZE_BYTES).putInt(1).array()
+ Log.d(
+ TAG, "GattServerConnectRequest accepted: " +
+ "GattServerSessionScope = $it"
+ )
+
+ requests.collect { gattServerRequest ->
+ Log.d(
+ TAG, "requests collected: " +
+ "gattServerRequest = $gattServerRequest"
+ )
+
+ // TODO(b/269390098): Handle requests correctly
+ when (gattServerRequest) {
+ is GattServerRequest.ReadCharacteristic -> {
+ val characteristic = gattServerRequest.characteristic
+
+ val value = viewModel.readGattCharacteristicValue(
+ characteristic
)
- is GattServerRequest.WriteCharacteristics ->
- it.sendResponse()
+ toast(
+ "Read value: ${value.decodeToString()} " +
+ "for characteristic = ${characteristic.uuid}"
+ ).show()
- else -> throw NotImplementedError("unknown request")
+ gattServerRequest.sendResponse(value)
+ }
+
+ is GattServerRequest.WriteCharacteristics -> {
+ val characteristic =
+ gattServerRequest.parts[0].characteristic
+ val value = gattServerRequest.parts[0].value
+
+ toast(
+ "Writing value: ${value.decodeToString()} " +
+ "to characteristic = ${characteristic.uuid}"
+ ).show()
+
+ viewModel.updateGattCharacteristicValue(
+ characteristic,
+ value
+ )
+
+ gattServerRequest.sendResponse()
+ }
+
+ else -> {
+ throw NotImplementedError("Unknown request")
+ }
}
}
}
diff --git a/bluetooth/integration-tests/testapp/src/main/java/androidx/bluetooth/integration/testapp/ui/advertiser/AdvertiserViewModel.kt b/bluetooth/integration-tests/testapp/src/main/java/androidx/bluetooth/integration/testapp/ui/advertiser/AdvertiserViewModel.kt
index 99cb7f8..324c27f 100644
--- a/bluetooth/integration-tests/testapp/src/main/java/androidx/bluetooth/integration/testapp/ui/advertiser/AdvertiserViewModel.kt
+++ b/bluetooth/integration-tests/testapp/src/main/java/androidx/bluetooth/integration/testapp/ui/advertiser/AdvertiserViewModel.kt
@@ -65,6 +65,9 @@
private val _gattServerServices = mutableListOf<GattService>()
val gattServerServices: List<GattService> = _gattServerServices
+ private val gattServerServicesCharacteristicValueMap =
+ mutableMapOf<GattCharacteristic, ByteArray>()
+
fun removeAdvertiseDataAtIndex(index: Int) {
val manufacturerDataSize = manufacturerDatas.size
val serviceDataSize = serviceDatas.size
@@ -91,4 +94,12 @@
}
)
}
+
+ fun readGattCharacteristicValue(characteristic: GattCharacteristic): ByteArray {
+ return gattServerServicesCharacteristicValueMap[characteristic] ?: ByteArray(0)
+ }
+
+ fun updateGattCharacteristicValue(characteristic: GattCharacteristic, value: ByteArray) {
+ gattServerServicesCharacteristicValueMap[characteristic] = value
+ }
}
diff --git a/bluetooth/integration-tests/testapp/src/main/java/androidx/bluetooth/integration/testapp/ui/common/ByteArray.kt b/bluetooth/integration-tests/testapp/src/main/java/androidx/bluetooth/integration/testapp/ui/common/ByteArray.kt
deleted file mode 100644
index 40b8f5b..0000000
--- a/bluetooth/integration-tests/testapp/src/main/java/androidx/bluetooth/integration/testapp/ui/common/ByteArray.kt
+++ /dev/null
@@ -1,20 +0,0 @@
-/*
- * Copyright 2023 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 androidx.bluetooth.integration.testapp.ui.common
-
-fun ByteArray.toHexString(): String =
- joinToString(separator = " ", prefix = "0x") { String.format("%02X", it) }
diff --git a/bluetooth/integration-tests/testapp/src/main/java/androidx/bluetooth/integration/testapp/ui/scanner/DeviceServiceCharacteristicsAdapter.kt b/bluetooth/integration-tests/testapp/src/main/java/androidx/bluetooth/integration/testapp/ui/scanner/DeviceServiceCharacteristicsAdapter.kt
index 7dc418f..4a9a85e 100644
--- a/bluetooth/integration-tests/testapp/src/main/java/androidx/bluetooth/integration/testapp/ui/scanner/DeviceServiceCharacteristicsAdapter.kt
+++ b/bluetooth/integration-tests/testapp/src/main/java/androidx/bluetooth/integration/testapp/ui/scanner/DeviceServiceCharacteristicsAdapter.kt
@@ -26,7 +26,6 @@
import androidx.bluetooth.integration.testapp.R
import androidx.bluetooth.integration.testapp.data.connection.DeviceConnection
import androidx.bluetooth.integration.testapp.data.connection.OnClickCharacteristic
-import androidx.bluetooth.integration.testapp.ui.common.toHexString
import androidx.core.view.isVisible
import androidx.recyclerview.widget.RecyclerView
@@ -133,10 +132,7 @@
val value = deviceConnection.valueFor(characteristic)
layoutValue.isVisible = value != null
- textViewValue.text = buildString {
- append("toHexString: " + value?.toHexString() + "\n")
- append("decodeToString: " + value?.decodeToString())
- }
+ textViewValue.text = value?.decodeToString()
}
}
}
diff --git a/bluetooth/integration-tests/testapp/src/main/java/androidx/bluetooth/integration/testapp/ui/scanner/ScannerFragment.kt b/bluetooth/integration-tests/testapp/src/main/java/androidx/bluetooth/integration/testapp/ui/scanner/ScannerFragment.kt
index 186431f..69ac0f4 100644
--- a/bluetooth/integration-tests/testapp/src/main/java/androidx/bluetooth/integration/testapp/ui/scanner/ScannerFragment.kt
+++ b/bluetooth/integration-tests/testapp/src/main/java/androidx/bluetooth/integration/testapp/ui/scanner/ScannerFragment.kt
@@ -47,6 +47,7 @@
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.Job
+import kotlinx.coroutines.awaitCancellation
import kotlinx.coroutines.cancel
import kotlinx.coroutines.launch
@@ -191,19 +192,33 @@
@SuppressLint("MissingPermission")
private fun startScan() {
+ Log.d(TAG, "startScan() called")
+
scanJob = scanScope.launch {
+ Log.d(TAG, "bluetoothLe.scan() called")
+
isScanning = true
- bluetoothLe.scan()
- .collect {
- Log.d(TAG, "ScanResult collected: $it")
+ try {
+ bluetoothLe.scan()
+ .collect {
+ Log.d(TAG, "bluetoothLe.scan() collected: ScanResult = $it")
- viewModel.addScanResultIfNew(it)
+ viewModel.addScanResultIfNew(it)
+ }
+ } catch (exception: Exception) {
+ isScanning = false
+
+ if (exception is CancellationException) {
+ Log.e(TAG, "bluetoothLe.scan() CancellationException", exception)
}
+ }
}
}
private fun onClickScanResult(bluetoothDevice: BluetoothDevice) {
+ Log.d(TAG, "onClickScanResult() called with: bluetoothDevice = $bluetoothDevice")
+
isScanning = false
val index = viewModel.addDeviceConnectionIfNew(bluetoothDevice)
@@ -226,6 +241,8 @@
@SuppressLint("MissingPermission")
private fun addNewTab(bluetoothDevice: BluetoothDevice): Tab {
+ Log.d(TAG, "addNewTab() called with: bluetoothDevice = $bluetoothDevice")
+
val deviceId = bluetoothDevice.id.toString()
val deviceName = bluetoothDevice.name
@@ -238,6 +255,8 @@
textViewName?.text = deviceName
textViewName?.isVisible = deviceName.isNullOrEmpty().not()
customView?.findViewById<Button>(R.id.image_button_remove)?.setOnClickListener {
+ Log.d(TAG, "removeTab() called with: bluetoothDevice = $bluetoothDevice")
+
viewModel.remove(bluetoothDevice)
binding.tabLayout.removeTab(newTab)
}
@@ -257,8 +276,13 @@
}
try {
+ Log.d(
+ TAG, "bluetoothLe.connectGatt() called with: " +
+ "deviceConnection.bluetoothDevice = ${deviceConnection.bluetoothDevice}"
+ )
+
bluetoothLe.connectGatt(deviceConnection.bluetoothDevice) {
- Log.d(TAG, "connectGatt result: services() = $services")
+ Log.d(TAG, "bluetoothLe.connectGatt result: services() = $services")
deviceConnection.status = Status.CONNECTED
deviceConnection.services = services
@@ -268,73 +292,107 @@
// TODO(ofy) Improve this. Remove OnClickCharacteristic as it's not ideal
// to hold so many OnClickCharacteristic and difficult to use with Compose.
- deviceConnection.onClickReadCharacteristic =
- object : OnClickCharacteristic {
- override fun onClick(
- deviceConnection: DeviceConnection,
- characteristic: GattCharacteristic
- ) {
- connectScope.launch {
- val result = readCharacteristic(characteristic)
- Log.d(TAG, "readCharacteristic() called with: result = $result")
+ deviceConnection.onClickReadCharacteristic = object : OnClickCharacteristic {
+ override fun onClick(
+ deviceConnection: DeviceConnection,
+ characteristic: GattCharacteristic
+ ) {
+ Log.d(
+ TAG, "onClick() called with: " +
+ "deviceConnection = $deviceConnection, " +
+ "characteristic = $characteristic"
+ )
- deviceConnection.storeValueFor(
- characteristic,
- result.getOrNull()
- )
- launch(Dispatchers.Main) {
- updateDeviceUI(deviceConnection)
- }
+ connectScope.launch {
+ Log.d(
+ TAG, "readCharacteristic() called with: " +
+ "characteristic = $characteristic"
+ )
+
+ val result = readCharacteristic(characteristic)
+
+ Log.d(TAG, "readCharacteristic() result: result = $result")
+
+ deviceConnection.storeValueFor(
+ characteristic,
+ result.getOrNull()
+ )
+ launch(Dispatchers.Main) {
+ updateDeviceUI(deviceConnection)
}
}
}
+ }
// TODO(ofy) Improve this. Remove OnClickCharacteristic as it's not ideal
// to hold so many OnClickCharacteristic and difficult to use with Compose.
- deviceConnection.onClickWriteCharacteristic =
- object : OnClickCharacteristic {
- override fun onClick(
- deviceConnection: DeviceConnection,
- characteristic: GattCharacteristic
- ) {
- val view = layoutInflater.inflate(
- R.layout.dialog_write_characteristic,
- null
- )
- val editTextValue =
- view.findViewById<EditText>(R.id.edit_text_value)
+ deviceConnection.onClickWriteCharacteristic = object : OnClickCharacteristic {
+ override fun onClick(
+ deviceConnection: DeviceConnection,
+ characteristic: GattCharacteristic
+ ) {
+ Log.d(
+ TAG, "onClick() called with: " +
+ "deviceConnection = $deviceConnection, " +
+ "characteristic = $characteristic"
+ )
- AlertDialog.Builder(requireContext())
- .setTitle(getString(R.string.write))
- .setView(view)
- .setPositiveButton(getString(R.string.write)) { _, _ ->
- val editTextValueString = editTextValue.text.toString()
- val value = editTextValueString.toByteArray()
+ val view = layoutInflater.inflate(
+ R.layout.dialog_write_characteristic,
+ null
+ )
+ val editTextValue =
+ view.findViewById<EditText>(R.id.edit_text_value)
- connectScope.launch {
- val result = writeCharacteristic(
- characteristic,
- value
+ AlertDialog.Builder(requireContext())
+ .setTitle(getString(R.string.write))
+ .setView(view)
+ .setPositiveButton(getString(R.string.write)) { _, _ ->
+ val editTextValueString = editTextValue.text.toString()
+ val value = editTextValueString.toByteArray()
+
+ connectScope.launch {
+ Log.d(
+ TAG, "writeCharacteristic() called with: " +
+ "characteristic = $characteristic, " +
+ "value = ${value.decodeToString()}"
+ )
+
+ val result = writeCharacteristic(characteristic, value)
+
+ Log.d(
+ TAG, "writeCharacteristic() result: " +
+ "result = $result"
+ )
+
+ launch(Dispatchers.Main) {
+ toast(
+ "Called write with: $editTextValueString, " +
+ "result = $result"
)
- Log.d(TAG, "writeCharacteristic() called with: " +
- "result = $result")
- launch(Dispatchers.Main) {
- toast("Called write with: `$editTextValueString`")
- .show()
- }
+ .show()
}
}
- .setNegativeButton(getString(R.string.cancel), null)
- .create()
- .show()
- }
+ }
+ .setNegativeButton(getString(R.string.cancel), null)
+ .create()
+ .show()
}
+ }
+
+ awaitCancellation()
}
} catch (exception: Exception) {
if (exception is CancellationException) {
- Log.d(TAG, "connectGatt() CancellationException")
+ Log.e(TAG, "connectGatt() CancellationException", exception)
+
+ deviceConnection.status = Status.DISCONNECTED
+ launch(Dispatchers.Main) {
+ updateDeviceUI(deviceConnection)
+ }
} else {
Log.e(TAG, "connectGatt() exception", exception)
+
deviceConnection.status = Status.DISCONNECTED
launch(Dispatchers.Main) {
updateDeviceUI(deviceConnection)
@@ -365,11 +423,13 @@
binding.textViewDeviceConnectionStatus.setTextColor(getColor(R.color.green_500))
binding.buttonReconnect.isVisible = true
}
+
Status.CONNECTING -> {
binding.progressIndicatorDeviceConnection.isVisible = true
binding.textViewDeviceConnectionStatus.text = getString(R.string.connecting)
binding.textViewDeviceConnectionStatus.setTextColor(getColor(R.color.indigo_500))
}
+
Status.CONNECTED -> {
binding.textViewDeviceConnectionStatus.text = getString(R.string.connected)
binding.textViewDeviceConnectionStatus.setTextColor(getColor(R.color.indigo_500))
diff --git a/bluetooth/integration-tests/testapp/src/main/res/layout/dialog_write_characteristic.xml b/bluetooth/integration-tests/testapp/src/main/res/layout/dialog_write_characteristic.xml
index c61798e..4426518 100644
--- a/bluetooth/integration-tests/testapp/src/main/res/layout/dialog_write_characteristic.xml
+++ b/bluetooth/integration-tests/testapp/src/main/res/layout/dialog_write_characteristic.xml
@@ -15,27 +15,16 @@
limitations under the License.
-->
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:paddingStart="16dp"
android:paddingTop="8dp"
android:paddingEnd="16dp">
- <TextView
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:text="0x"
- android:textColor="@color/black"
- android:textSize="21sp"
- tools:ignore="HardcodedText" />
-
<EditText
android:id="@+id/edit_text_value"
android:layout_width="match_parent"
android:layout_height="wrap_content"
- android:layout_marginStart="4dp"
- android:layout_marginEnd="4dp"
android:hint="@string/value"
android:inputType="text" />
diff --git a/buildSrc/imports/README.md b/buildSrc/imports/README.md
new file mode 100644
index 0000000..7de92c8
--- /dev/null
+++ b/buildSrc/imports/README.md
@@ -0,0 +1,3 @@
+This directory contains projects that just mirror the corresponding project in the main build in ../..
+
+This may be useful if a project in ../.. creates a plugin that another project wants to apply
diff --git a/buildSrc/imports/baseline-profile-gradle-plugin/build.gradle b/buildSrc/imports/baseline-profile-gradle-plugin/build.gradle
new file mode 100644
index 0000000..c40a849
--- /dev/null
+++ b/buildSrc/imports/baseline-profile-gradle-plugin/build.gradle
@@ -0,0 +1,34 @@
+apply from: "../../shared.gradle"
+apply plugin: "java-gradle-plugin"
+
+sourceSets {
+ main.java.srcDirs += "${supportRootFolder}" +
+ "/benchmark/baseline-profile-gradle-plugin/src/main/kotlin"
+ main.resources.srcDirs += "${supportRootFolder}" +
+ "/benchmark/baseline-profile-gradle-plugin/src/main/resources"
+}
+
+gradlePlugin {
+ plugins {
+ baselineProfileProducer {
+ id = "androidx.baselineprofile.producer"
+ implementationClass = "androidx.baselineprofile.gradle.producer.BaselineProfileProducerPlugin"
+ }
+ baselineProfileConsumer {
+ id = "androidx.baselineprofile.consumer"
+ implementationClass = "androidx.baselineprofile.gradle.consumer.BaselineProfileConsumerPlugin"
+ }
+ baselineProfileAppTarget {
+ id = "androidx.baselineprofile.apptarget"
+ implementationClass = "androidx.baselineprofile.gradle.apptarget.BaselineProfileAppTargetPlugin"
+ }
+ baselineProfileWrapper {
+ id = "androidx.baselineprofile"
+ implementationClass = "androidx.baselineprofile.gradle.wrapper.BaselineProfileWrapperPlugin"
+ }
+ }
+}
+
+validatePlugins {
+ enableStricterValidation = true
+}
diff --git a/buildSrc/imports/benchmark-darwin-plugin/build.gradle b/buildSrc/imports/benchmark-darwin-plugin/build.gradle
new file mode 100644
index 0000000..3dd24f0
--- /dev/null
+++ b/buildSrc/imports/benchmark-darwin-plugin/build.gradle
@@ -0,0 +1,24 @@
+apply from: "../../shared.gradle"
+apply plugin: "java-gradle-plugin"
+
+sourceSets {
+ main.java.srcDirs += "${supportRootFolder}/benchmark/benchmark-darwin-gradle-plugin/src/main/kotlin"
+ main.resources.srcDirs += "${supportRootFolder}/benchmark/benchmark-darwin-gradle-plugin/src/main/resources"
+}
+
+dependencies {
+ implementation(libs.apacheCommonsMath)
+}
+
+gradlePlugin {
+ plugins {
+ darwinBenchmark {
+ id = "androidx.benchmark.darwin"
+ implementationClass = "androidx.benchmark.darwin.gradle.DarwinBenchmarkPlugin"
+ }
+ }
+}
+
+validatePlugins {
+ enableStricterValidation = true
+}
diff --git a/buildSrc/imports/benchmark-gradle-plugin/build.gradle b/buildSrc/imports/benchmark-gradle-plugin/build.gradle
new file mode 100644
index 0000000..98ad0ec
--- /dev/null
+++ b/buildSrc/imports/benchmark-gradle-plugin/build.gradle
@@ -0,0 +1,20 @@
+apply from: "../../shared.gradle"
+apply plugin: "java-gradle-plugin"
+
+sourceSets {
+ main.java.srcDirs += "${supportRootFolder}/benchmark/gradle-plugin/src/main/kotlin"
+ main.resources.srcDirs += "${supportRootFolder}/benchmark/gradle-plugin/src/main/resources"
+}
+
+gradlePlugin {
+ plugins {
+ benchmark {
+ id = "androidx.benchmark"
+ implementationClass = "androidx.benchmark.gradle.BenchmarkPlugin"
+ }
+ }
+}
+
+validatePlugins {
+ enableStricterValidation = true
+}
diff --git a/buildSrc/imports/compose-icons/build.gradle b/buildSrc/imports/compose-icons/build.gradle
new file mode 100644
index 0000000..2c17324
--- /dev/null
+++ b/buildSrc/imports/compose-icons/build.gradle
@@ -0,0 +1,6 @@
+apply from: "../../shared.gradle"
+
+sourceSets {
+ main.java.srcDirs += "${supportRootFolder}/compose/material/material/icons/generator/src/main" +
+ "/kotlin"
+}
diff --git a/buildSrc/imports/glance-layout-generator/build.gradle b/buildSrc/imports/glance-layout-generator/build.gradle
new file mode 100644
index 0000000..71f1bec
--- /dev/null
+++ b/buildSrc/imports/glance-layout-generator/build.gradle
@@ -0,0 +1,6 @@
+apply from: "../../shared.gradle"
+
+sourceSets {
+ main.java.srcDirs += "${supportRootFolder}/glance/glance-appwidget/glance-layout-generator/" +
+ "src/main/kotlin"
+}
diff --git a/buildSrc/imports/inspection-gradle-plugin/build.gradle b/buildSrc/imports/inspection-gradle-plugin/build.gradle
new file mode 100644
index 0000000..572e990
--- /dev/null
+++ b/buildSrc/imports/inspection-gradle-plugin/build.gradle
@@ -0,0 +1,21 @@
+apply from: "../../shared.gradle"
+apply plugin: "java-gradle-plugin"
+
+sourceSets {
+ main.java.srcDirs += "${supportRootFolder}/inspection/inspection-gradle-plugin/src/main/kotlin"
+ main.resources.srcDirs += "${supportRootFolder}/inspection/inspection-gradle-plugin/src/main" +
+ "/resources"
+}
+
+gradlePlugin {
+ plugins {
+ inspection {
+ id = "androidx.inspection"
+ implementationClass = "androidx.inspection.gradle.InspectionPlugin"
+ }
+ }
+}
+
+validatePlugins {
+ enableStricterValidation = true
+}
diff --git a/buildSrc/imports/stableaidl-gradle-plugin/build.gradle b/buildSrc/imports/stableaidl-gradle-plugin/build.gradle
new file mode 100644
index 0000000..22f5967
--- /dev/null
+++ b/buildSrc/imports/stableaidl-gradle-plugin/build.gradle
@@ -0,0 +1,19 @@
+apply from: "../../shared.gradle"
+apply plugin: "java-gradle-plugin"
+
+sourceSets {
+ main.java.srcDirs += "${supportRootFolder}/stableaidl/stableaidl-gradle-plugin/src/main/java"
+}
+
+gradlePlugin {
+ plugins {
+ stableaidl {
+ id = "androidx.stableaidl"
+ implementationClass = "androidx.stableaidl.StableAidlPlugin"
+ }
+ }
+}
+
+validatePlugins {
+ enableStricterValidation = true
+}
diff --git a/buildSrc/out.gradle b/buildSrc/out.gradle
index e0f12c2..8fd588f 100644
--- a/buildSrc/out.gradle
+++ b/buildSrc/out.gradle
@@ -44,7 +44,7 @@
def (outDir, buildSrcOut) = getOutDir(subdir)
project.ext.buildSrcOut = buildSrcOut
project.ext.outDir = outDir
- def pathAsFilepath = project.path.replace(":", "").replaceAll(":", "/")
+ def pathAsFilepath = project.path.replaceFirst(":", "").replaceAll(":", "/")
project.layout.buildDirectory.set(new File(buildSrcOut, "$pathAsFilepath/build").getCanonicalFile())
}
diff --git a/buildSrc/plugins/README.md b/buildSrc/plugins/README.md
index 68b1cc4..363e1b4 100644
--- a/buildSrc/plugins/README.md
+++ b/buildSrc/plugins/README.md
@@ -1,3 +1,5 @@
This is the :buildSrc:plugins project
It contains plugins to be applied by various other projects in this repository
+
+The plugins in this project do not get published to remote repositories
diff --git a/buildSrc/plugins/build.gradle b/buildSrc/plugins/build.gradle
index f5ca9cf..d09f782 100644
--- a/buildSrc/plugins/build.gradle
+++ b/buildSrc/plugins/build.gradle
@@ -2,6 +2,13 @@
dependencies {
implementation(project(":public"))
+ api project(":imports:baseline-profile-gradle-plugin")
+ api project(":imports:benchmark-darwin-plugin")
+ api project(":imports:benchmark-gradle-plugin")
+ api project(":imports:compose-icons")
+ api project(":imports:glance-layout-generator")
+ api project(":imports:inspection-gradle-plugin")
+ api project(":imports:stableaidl-gradle-plugin")
}
apply from: "../shared.gradle"
diff --git a/buildSrc/private/build.gradle b/buildSrc/private/build.gradle
index 21d6482..2c576dd 100644
--- a/buildSrc/private/build.gradle
+++ b/buildSrc/private/build.gradle
@@ -1,7 +1,15 @@
apply plugin: "kotlin"
+apply plugin: "java-gradle-plugin"
dependencies {
implementation(project(":public"))
+ implementation(project(":imports:benchmark-gradle-plugin"))
+ implementation(project(":imports:inspection-gradle-plugin"))
+ implementation(project(":imports:stableaidl-gradle-plugin"))
+}
+
+validatePlugins {
+ enableStricterValidation = true
}
apply from: "../shared.gradle"
diff --git a/buildSrc/private/src/main/kotlin/androidx/build/AndroidXComposeImplPlugin.kt b/buildSrc/private/src/main/kotlin/androidx/build/AndroidXComposeImplPlugin.kt
index 2d1760f..b199df3 100644
--- a/buildSrc/private/src/main/kotlin/androidx/build/AndroidXComposeImplPlugin.kt
+++ b/buildSrc/private/src/main/kotlin/androidx/build/AndroidXComposeImplPlugin.kt
@@ -109,9 +109,7 @@
// Disable ListIterator if we are not in a matching path, or we are in an
// unpublished project
- if (
- ignoreListIteratorFilter.any { path.contains(it) } || !isPublished
- ) {
+ if (ignoreListIteratorFilter.any { path.contains(it) } || !isPublished) {
disable.add("ListIterator")
}
}
diff --git a/buildSrc/private/src/main/kotlin/androidx/build/AndroidXExtension.kt b/buildSrc/private/src/main/kotlin/androidx/build/AndroidXExtension.kt
index 038ad3c..9b30b5a 100644
--- a/buildSrc/private/src/main/kotlin/androidx/build/AndroidXExtension.kt
+++ b/buildSrc/private/src/main/kotlin/androidx/build/AndroidXExtension.kt
@@ -411,8 +411,8 @@
get() = kotlinTarget.map { project.getVersionByName(it.catalogVersion) }
/**
- * Whether to validate the androidx configuration block using validateProjectParser. This
- * should always be set to true unless we are temporarily working around a bug.
+ * Whether to validate the androidx configuration block using validateProjectParser. This should
+ * always be set to true unless we are temporarily working around a bug.
*/
var runProjectParser: Boolean = true
diff --git a/buildSrc/private/src/main/kotlin/androidx/build/AndroidXImplPlugin.kt b/buildSrc/private/src/main/kotlin/androidx/build/AndroidXImplPlugin.kt
index 1051dfc..97eced4 100644
--- a/buildSrc/private/src/main/kotlin/androidx/build/AndroidXImplPlugin.kt
+++ b/buildSrc/private/src/main/kotlin/androidx/build/AndroidXImplPlugin.kt
@@ -34,6 +34,7 @@
import androidx.build.testConfiguration.TestModule
import androidx.build.testConfiguration.addAppApkToTestConfigGeneration
import androidx.build.testConfiguration.configureTestConfigGeneration
+import androidx.build.uptodatedness.TaskUpToDateValidator
import com.android.build.api.artifact.SingleArtifact
import com.android.build.api.variant.AndroidComponentsExtension
import com.android.build.api.variant.ApplicationAndroidComponentsExtension
@@ -78,6 +79,7 @@
import org.gradle.api.tasks.testing.Test
import org.gradle.api.tasks.testing.logging.TestExceptionFormat
import org.gradle.api.tasks.testing.logging.TestLogEvent
+import org.gradle.build.event.BuildEventsListenerRegistry
import org.gradle.jvm.tasks.Jar
import org.gradle.kotlin.dsl.KotlinClosure1
import org.gradle.kotlin.dsl.create
@@ -92,6 +94,7 @@
import org.jetbrains.kotlin.gradle.dsl.KotlinVersion
import org.jetbrains.kotlin.gradle.plugin.KotlinBasePluginWrapper
import org.jetbrains.kotlin.gradle.plugin.KotlinMultiplatformPluginWrapper
+import org.jetbrains.kotlin.gradle.plugin.mpp.KotlinAndroidTarget
import org.jetbrains.kotlin.gradle.plugin.mpp.KotlinNativeTargetWithSimulatorTests
import org.jetbrains.kotlin.gradle.tasks.CInteropProcess
import org.jetbrains.kotlin.gradle.tasks.KotlinCompilationTask
@@ -102,9 +105,11 @@
* A plugin which enables all of the Gradle customizations for AndroidX. This plugin reacts to other
* plugins being added and adds required and optional functionality.
*/
-class AndroidXImplPlugin
+abstract class AndroidXImplPlugin
@Inject
constructor(private val componentFactory: SoftwareComponentFactory) : Plugin<Project> {
+ @get:javax.inject.Inject abstract val registry: BuildEventsListenerRegistry
+
override fun apply(project: Project) {
if (project.isRoot)
throw Exception("Root project should use AndroidXRootImplPlugin instead")
@@ -169,6 +174,7 @@
}
}
project.disallowAccidentalAndroidDependenciesInKmpProject(kmpExtension)
+ TaskUpToDateValidator.setup(project, registry)
}
private fun Project.registerProjectOrArtifact() {
@@ -308,7 +314,7 @@
if (details.requested.group == "org.jetbrains.kotlin") {
if (
details.requested.group == "org.jetbrains.kotlin" &&
- details.requested.version == null
+ details.requested.version == null
) {
details.useVersion(kotlinVersionStringProvider.get())
}
@@ -1158,9 +1164,10 @@
}
val Project.androidExtension: AndroidComponentsExtension<*, *, *>
- get() = extensions.findByType<LibraryAndroidComponentsExtension>()
- ?: extensions.findByType<ApplicationAndroidComponentsExtension>()
- ?: throw IllegalArgumentException("Failed to find any registered Android extension")
+ get() =
+ extensions.findByType<LibraryAndroidComponentsExtension>()
+ ?: extensions.findByType<ApplicationAndroidComponentsExtension>()
+ ?: throw IllegalArgumentException("Failed to find any registered Android extension")
val Project.multiplatformExtension
get() = extensions.findByType(KotlinMultiplatformExtension::class.java)
@@ -1260,10 +1267,16 @@
?.findByName("androidTest")
?.let { if (it.kotlin.files.isNotEmpty()) return true }
- // check kotlin-multiplatform androidInstrumentedTest source set
- multiplatformExtension?.apply {
- sourceSets.findByName("androidInstrumentedTest")?.let {
- if (it.kotlin.files.isNotEmpty()) return true
+ // check kotlin-multiplatform androidInstrumentedTest target source sets
+ multiplatformExtension?.let { extension ->
+ val instrumentedTestSourceSets = extension
+ .targets
+ .filterIsInstance<KotlinAndroidTarget>()
+ .mapNotNull {
+ target -> target.compilations.findByName("debugAndroidTest")
+ }.flatMap { compilation -> compilation.allKotlinSourceSets }
+ if (instrumentedTestSourceSets.any { it.kotlin.files.isNotEmpty() }) {
+ return true
}
}
@@ -1278,9 +1291,7 @@
}
}
-/**
- * Verifies we don't accidentially write "implementation" instead of "commonMainImplementation"
- */
+/** Verifies we don't accidentially write "implementation" instead of "commonMainImplementation" */
fun Project.disallowAccidentalAndroidDependenciesInKmpProject(
kmpExtension: AndroidXMultiplatformExtension
) {
@@ -1288,15 +1299,16 @@
if (kmpExtension.supportedPlatforms.isNotEmpty()) {
val androidConfiguration = project.configurations.findByName("implementation")
if (androidConfiguration != null) {
- if (
- androidConfiguration.dependencies.isNotEmpty() ||
- androidConfiguration.dependencyConstraints.isNotEmpty()
- ) {
- throw GradleException(
- "The 'implementation' Configuration should not be used in a " +
- "multiplatform project: this Configuration is declared by the " +
- "Android plugin rather than the kmp plugin. Did you mean " +
- "'commonMainImplementation'?")
+ if (
+ androidConfiguration.dependencies.isNotEmpty() ||
+ androidConfiguration.dependencyConstraints.isNotEmpty()
+ ) {
+ throw GradleException(
+ "The 'implementation' Configuration should not be used in a " +
+ "multiplatform project: this Configuration is declared by the " +
+ "Android plugin rather than the kmp plugin. Did you mean " +
+ "'commonMainImplementation'?"
+ )
}
}
}
diff --git a/buildSrc/private/src/main/kotlin/androidx/build/AndroidXRootImplPlugin.kt b/buildSrc/private/src/main/kotlin/androidx/build/AndroidXRootImplPlugin.kt
index 9eb83d2..c26c469 100644
--- a/buildSrc/private/src/main/kotlin/androidx/build/AndroidXRootImplPlugin.kt
+++ b/buildSrc/private/src/main/kotlin/androidx/build/AndroidXRootImplPlugin.kt
@@ -26,7 +26,6 @@
import androidx.build.playground.VerifyPlaygroundGradleConfigurationTask
import androidx.build.studio.StudioTask.Companion.registerStudioTask
import androidx.build.testConfiguration.registerOwnersServiceTasks
-import androidx.build.uptodatedness.TaskUpToDateValidator
import androidx.build.uptodatedness.cacheEvenIfNoOutputs
import com.android.Version.ANDROID_GRADLE_PLUGIN_VERSION
import java.io.File
@@ -38,12 +37,9 @@
import org.gradle.api.plugins.JvmEcosystemPlugin
import org.gradle.api.tasks.bundling.Zip
import org.gradle.api.tasks.bundling.ZipEntryCompression
-import org.gradle.build.event.BuildEventsListenerRegistry
import org.gradle.kotlin.dsl.extra
abstract class AndroidXRootImplPlugin : Plugin<Project> {
- @get:javax.inject.Inject abstract val registry: BuildEventsListenerRegistry
-
override fun apply(project: Project) {
if (!project.isRoot) {
throw Exception("This plugin should only be applied to root project")
@@ -161,8 +157,6 @@
registerStudioTask()
- TaskUpToDateValidator.setup(project, registry)
-
project.tasks.register("listTaskOutputs", ListTaskOutputsTask::class.java) { task ->
task.setOutput(File(project.getDistributionDirectory(), "task_outputs.txt"))
task.removePrefix(project.getCheckoutRoot().path)
diff --git a/buildSrc/private/src/main/kotlin/androidx/build/Ktlint.kt b/buildSrc/private/src/main/kotlin/androidx/build/Ktlint.kt
index 2846580..383eeb8 100644
--- a/buildSrc/private/src/main/kotlin/androidx/build/Ktlint.kt
+++ b/buildSrc/private/src/main/kotlin/androidx/build/Ktlint.kt
@@ -45,9 +45,7 @@
val bundlingAttribute: Attribute<String> =
Attribute.of("org.gradle.dependency.bundling", String::class.java)
-/**
- * JVM Args needed to run it on JVM 17+
- */
+/** JVM Args needed to run it on JVM 17+ */
private fun JavaExecSpec.addKtlintJvmArgs() {
this.jvmArgs("--add-opens=java.base/java.lang=ALL-UNNAMED")
}
@@ -179,8 +177,7 @@
val subdirectories = overrideSubdirectories
if (subdirectories.isNullOrEmpty()) return@let
subdirectories.map { arguments.add("$it/$InputDir/$IncludedFiles") }
- }
- ?: arguments.add("$InputDir/$IncludedFiles")
+ } ?: arguments.add("$InputDir/$IncludedFiles")
ExcludedDirectoryGlobs.mapTo(arguments) { "!$InputDir/$it" }
return arguments
diff --git a/buildSrc/private/src/main/kotlin/androidx/build/LintConfiguration.kt b/buildSrc/private/src/main/kotlin/androidx/build/LintConfiguration.kt
index a307c9d..f1b1677 100644
--- a/buildSrc/private/src/main/kotlin/androidx/build/LintConfiguration.kt
+++ b/buildSrc/private/src/main/kotlin/androidx/build/LintConfiguration.kt
@@ -37,9 +37,7 @@
import org.jetbrains.kotlin.gradle.plugin.KotlinSourceSet
import org.jetbrains.kotlin.tooling.core.withClosure
-/**
- * Single entry point to Android Lint configuration.
- */
+/** Single entry point to Android Lint configuration. */
fun Project.configureLint() {
project.plugins.all { plugin ->
when (plugin) {
@@ -48,53 +46,52 @@
// Only configure non-multiplatform Java projects via JavaPlugin. Multiplatform
// projects targeting Java (e.g. `jvm { withJava() }`) are configured via
// KotlinBasePlugin.
- is JavaPlugin -> if (project.multiplatformExtension == null) {
- configureNonAndroidProjectForLint()
- }
+ is JavaPlugin ->
+ if (project.multiplatformExtension == null) {
+ configureNonAndroidProjectForLint()
+ }
// Only configure non-Android multiplatform projects via KotlinBasePlugin.
// Multiplatform projects targeting Android (e.g. `id("com.android.library")`) are
// configured via AppPlugin or LibraryPlugin.
- is KotlinBasePlugin -> if (
- project.multiplatformExtension != null &&
- !project.plugins.hasPlugin(AppPlugin::class.java) &&
- !project.plugins.hasPlugin(LibraryPlugin::class.java)
- ) {
- configureNonAndroidProjectForLint()
+ is KotlinBasePlugin ->
+ if (
+ project.multiplatformExtension != null &&
+ !project.plugins.hasPlugin(AppPlugin::class.java) &&
+ !project.plugins.hasPlugin(LibraryPlugin::class.java)
+ ) {
+ configureNonAndroidProjectForLint()
+ }
+ }
+ }
+}
+
+/** Android Lint configuration entry point for Android projects. */
+private fun Project.configureAndroidProjectForLint(isLibrary: Boolean) =
+ androidExtension.finalizeDsl { extension ->
+ // The lintAnalyze task is used by `androidx-studio-integration-lint.sh`.
+ tasks.register("lintAnalyze") { task -> task.enabled = false }
+
+ configureLint(extension.lint, isLibrary)
+
+ // We already run lintDebug, we don't need to run lint on the release variant.
+ tasks.named("lint").configure { task -> task.enabled = false }
+
+ afterEvaluate {
+ registerLintDebugIfNeededAfterEvaluate()
+
+ if (extension.buildFeatures.aidl == true) {
+ configureLintForAidlAfterEvaluate()
}
}
}
-}
-/**
- * Android Lint configuration entry point for Android projects.
- */
-private fun Project.configureAndroidProjectForLint(
- isLibrary: Boolean
-) = androidExtension.finalizeDsl { extension ->
- // The lintAnalyze task is used by `androidx-studio-integration-lint.sh`.
- tasks.register("lintAnalyze") { task -> task.enabled = false }
-
- configureLint(extension.lint, isLibrary)
-
- // We already run lintDebug, we don't need to run lint on the release variant.
- tasks.named("lint").configure { task -> task.enabled = false }
-
- afterEvaluate {
- registerLintDebugIfNeededAfterEvaluate()
-
- if (extension.buildFeatures.aidl == true) {
- configureLintForAidlAfterEvaluate()
- }
- }
-}
-
-/**
- * Android Lint configuration entry point for non-Android projects.
- */
+/** Android Lint configuration entry point for non-Android projects. */
private fun Project.configureNonAndroidProjectForLint() = afterEvaluate {
// TODO(aurimas): remove this workaround for b/293900782 after upgrading to AGP 8.2.0-beta01
- if (path == ":collection:collection-benchmark-kmp" ||
- path == ":benchmark:benchmark-darwin-samples") {
+ if (
+ path == ":collection:collection-benchmark-kmp" ||
+ path == ":benchmark:benchmark-darwin-samples"
+ ) {
return@afterEvaluate
}
// The lint plugin expects certain configurations and source sets which are only added by
@@ -147,8 +144,9 @@
}
}
-private fun String.camelCase() =
- replaceFirstChar { if (it.isLowerCase()) it.titlecase() else it.toString() }
+private fun String.camelCase() = replaceFirstChar {
+ if (it.isLowerCase()) it.titlecase() else it.toString()
+}
/**
* If the project is targeting Android and using the AIDL build feature, installs AIDL source
@@ -186,9 +184,7 @@
// Also configure the model writing task, so that we don't run into mismatches between
// analyzed sources in one module and a downstream module
- project.tasks.withType<LintModelWriterTask>().configureEach {
- it.variantInputs.addSourceSets()
- }
+ project.tasks.withType<LintModelWriterTask>().configureEach { it.variantInputs.addSourceSets() }
}
/**
@@ -208,10 +204,8 @@
// Synthesize target configurations based on multiplatform configurations.
val kmpApiElements = kmpTargets.map { it.apiElementsConfigurationName }
val kmpRuntimeElements = kmpTargets.map { it.runtimeElementsConfigurationName }
- listOf(
- kmpRuntimeElements to "runtimeElements",
- kmpApiElements to "apiElements"
- ).forEach { (kmpConfigNames, targetConfigName) ->
+ listOf(kmpRuntimeElements to "runtimeElements", kmpApiElements to "apiElements").forEach {
+ (kmpConfigNames, targetConfigName) ->
project.configurations.maybeCreate(targetConfigName).apply {
kmpConfigNames
.mapNotNull { configName -> project.configurations.findByName(configName) }
@@ -220,12 +214,11 @@
}
// Synthesize source sets based on multiplatform source sets.
- val javaExtension = project.extensions.findByType(JavaPluginExtension::class.java)
- ?: throw GradleException("Failed to find extension of type 'JavaPluginExtension'")
- listOf(
- "main" to "main",
- "test" to "test"
- ).forEach { (kmpCompilationName, targetSourceSetName) ->
+ val javaExtension =
+ project.extensions.findByType(JavaPluginExtension::class.java)
+ ?: throw GradleException("Failed to find extension of type 'JavaPluginExtension'")
+ listOf("main" to "main", "test" to "test").forEach { (kmpCompilationName, targetSourceSetName)
+ ->
javaExtension.sourceSets.maybeCreate(targetSourceSetName).apply {
kmpTargets
.mapNotNull { target -> target.compilations.findByName(kmpCompilationName) }
@@ -249,15 +242,14 @@
val multiplatformExtension = project.multiplatformExtension ?: return
multiplatformExtension.targets.findByName("android") ?: return
- val androidMain = multiplatformExtension.sourceSets.findByName("androidMain")
- ?: throw GradleException("Failed to find source set with name 'androidMain'")
+ val androidMain =
+ multiplatformExtension.sourceSets.findByName("androidMain")
+ ?: throw GradleException("Failed to find source set with name 'androidMain'")
// Get all the source sets androidMain transitively / directly depends on.
val dependencySourceSets = androidMain.withClosure(KotlinSourceSet::dependsOn)
- /**
- * Helper function to add the missing sourcesets to this [VariantInputs]
- */
+ /** Helper function to add the missing sourcesets to this [VariantInputs] */
fun VariantInputs.addSourceSets() {
// Each variant has a source provider for the variant (such as debug) and the 'main'
// variant. The actual files that Lint will run on is both of these providers
@@ -277,9 +269,7 @@
// Also configure the model writing task, so that we don't run into mismatches between
// analyzed sources in one module and a downstream module
- project.tasks.withType<LintModelWriterTask>().configureEach {
- it.variantInputs.addSourceSets()
- }
+ project.tasks.withType<LintModelWriterTask>().configureEach { it.variantInputs.addSourceSets() }
}
private fun Project.configureLint(lint: Lint, isLibrary: Boolean) {
@@ -295,9 +285,7 @@
project.dependencies.add("lintChecks", lintChecksProject)
- afterEvaluate {
- addSourceSetsForAndroidMultiplatformAfterEvaluate()
- }
+ afterEvaluate { addSourceSetsForAndroidMultiplatformAfterEvaluate() }
// The purpose of this specific project is to test that lint is running, so
// it contains expected violations that we do not want to trigger a build failure
diff --git a/buildSrc/private/src/main/kotlin/androidx/build/MavenUploadHelper.kt b/buildSrc/private/src/main/kotlin/androidx/build/MavenUploadHelper.kt
index 9380bb9..f0b4877 100644
--- a/buildSrc/private/src/main/kotlin/androidx/build/MavenUploadHelper.kt
+++ b/buildSrc/private/src/main/kotlin/androidx/build/MavenUploadHelper.kt
@@ -443,9 +443,7 @@
scm.url.set("https://cs.android.com/androidx/platform/frameworks/support")
scm.connection.set(ANDROID_GIT_URL)
}
- pom.organization { org ->
- org.name.set("The Android Open Source Project")
- }
+ pom.organization { org -> org.name.set("The Android Open Source Project") }
pom.developers { devs ->
devs.developer { dev -> dev.name.set("The Android Open Source Project") }
}
diff --git a/buildSrc/private/src/main/kotlin/androidx/build/ProjectExt.kt b/buildSrc/private/src/main/kotlin/androidx/build/ProjectExt.kt
index 274498d..a852523 100644
--- a/buildSrc/private/src/main/kotlin/androidx/build/ProjectExt.kt
+++ b/buildSrc/private/src/main/kotlin/androidx/build/ProjectExt.kt
@@ -56,6 +56,5 @@
@Suppress("UNCHECKED_CAST")
return LazyTaskRegistry.get(project).once(name) {
tasks.register(name, T::class.java) { onConfigure(it) }.also(onRegister)
- }
- ?: tasks.named(name) as TaskProvider<T>
+ } ?: tasks.named(name) as TaskProvider<T>
}
diff --git a/buildSrc/private/src/main/kotlin/androidx/build/SourceJarTaskHelper.kt b/buildSrc/private/src/main/kotlin/androidx/build/SourceJarTaskHelper.kt
index 04c4da3..fed3cc0 100644
--- a/buildSrc/private/src/main/kotlin/androidx/build/SourceJarTaskHelper.kt
+++ b/buildSrc/private/src/main/kotlin/androidx/build/SourceJarTaskHelper.kt
@@ -98,9 +98,10 @@
}
}
- val disableNames = setOf(
- "releaseSourcesJar",
- )
+ val disableNames =
+ setOf(
+ "releaseSourcesJar",
+ )
disableUnusedSourceJarTasks(disableNames)
}
@@ -134,9 +135,10 @@
}
registerSourcesVariant(sourceJar)
- val disableNames = setOf(
- "kotlinSourcesJar",
- )
+ val disableNames =
+ setOf(
+ "kotlinSourcesJar",
+ )
disableUnusedSourceJarTasks(disableNames)
}
@@ -171,9 +173,10 @@
task.metaInf.from(metadataFile)
}
registerMultiplatformSourcesVariant(sourceJar)
- val disableNames = setOf(
- "kotlinSourcesJar",
- )
+ val disableNames =
+ setOf(
+ "kotlinSourcesJar",
+ )
disableUnusedSourceJarTasks(disableNames)
}
@@ -273,9 +276,8 @@
}
}
}
- val sourceSetMetadata = mapOf(
- "sourceSets" to sourceSetsByName.keys.sorted().map { sourceSetsByName[it] }
- )
+ val sourceSetMetadata =
+ mapOf("sourceSets" to sourceSetsByName.keys.sorted().map { sourceSetsByName[it] })
val gson = GsonBuilder().setPrettyPrinting().create()
return gson.toJson(sourceSetMetadata)
}
diff --git a/buildSrc/private/src/main/kotlin/androidx/build/VersionFileWriterTask.kt b/buildSrc/private/src/main/kotlin/androidx/build/VersionFileWriterTask.kt
index 427f566..867c3ea 100644
--- a/buildSrc/private/src/main/kotlin/androidx/build/VersionFileWriterTask.kt
+++ b/buildSrc/private/src/main/kotlin/androidx/build/VersionFileWriterTask.kt
@@ -77,8 +77,9 @@
}
libraryAndroidComponentsExtension.onVariants {
- it.sources
- .resources!!
- .addGeneratedSourceDirectory(writeVersionFile, VersionFileWriterTask::outputDir)
+ it.sources.resources!!.addGeneratedSourceDirectory(
+ writeVersionFile,
+ VersionFileWriterTask::outputDir
+ )
}
}
diff --git a/buildSrc/private/src/main/kotlin/androidx/build/buildInfo/CreateLibraryBuildInfoFileTask.kt b/buildSrc/private/src/main/kotlin/androidx/build/buildInfo/CreateLibraryBuildInfoFileTask.kt
index fb6620e..544e835b 100644
--- a/buildSrc/private/src/main/kotlin/androidx/build/buildInfo/CreateLibraryBuildInfoFileTask.kt
+++ b/buildSrc/private/src/main/kotlin/androidx/build/buildInfo/CreateLibraryBuildInfoFileTask.kt
@@ -235,7 +235,9 @@
.sortedWith(compareBy({ it.groupId }, { it.artifactId }, { it.version }))
private fun String?.isAndroidXDependency() =
- this != null && startsWith("androidx.") && !startsWith("androidx.test") &&
+ this != null &&
+ startsWith("androidx.") &&
+ !startsWith("androidx.test") &&
!startsWith("androidx.databinding")
/* For androidx release notes, the most common use case is to track and publish the last sha
diff --git a/buildSrc/private/src/main/kotlin/androidx/build/checkapi/ApiTasks.kt b/buildSrc/private/src/main/kotlin/androidx/build/checkapi/ApiTasks.kt
index 9e3f7cc..3e8cdbe 100644
--- a/buildSrc/private/src/main/kotlin/androidx/build/checkapi/ApiTasks.kt
+++ b/buildSrc/private/src/main/kotlin/androidx/build/checkapi/ApiTasks.kt
@@ -157,8 +157,7 @@
val variant =
config.library.libraryVariants.find {
it.name == Release.DEFAULT_PUBLISH_CONFIG
- }
- ?: return@afterEvaluate
+ } ?: return@afterEvaluate
javaInputs =
JavaCompileInputs.fromLibraryVariant(
diff --git a/buildSrc/private/src/main/kotlin/androidx/build/dackka/DackkaTask.kt b/buildSrc/private/src/main/kotlin/androidx/build/dackka/DackkaTask.kt
index 144ed14..ddd8188 100644
--- a/buildSrc/private/src/main/kotlin/androidx/build/dackka/DackkaTask.kt
+++ b/buildSrc/private/src/main/kotlin/androidx/build/dackka/DackkaTask.kt
@@ -154,8 +154,7 @@
sourceLinks = emptyList()
)
}
- }
- ?: emptyList()
+ } ?: emptyList()
return listOf(
DokkaInputModels.SourceSet(
id = sourceSetIdForSourceSet("main"),
diff --git a/buildSrc/private/src/main/kotlin/androidx/build/dackka/DokkaInputModels.kt b/buildSrc/private/src/main/kotlin/androidx/build/dackka/DokkaInputModels.kt
index 22a3626..2aa8bf3 100644
--- a/buildSrc/private/src/main/kotlin/androidx/build/dackka/DokkaInputModels.kt
+++ b/buildSrc/private/src/main/kotlin/androidx/build/dackka/DokkaInputModels.kt
@@ -15,7 +15,6 @@
*/
@file:Suppress("unused") // used by gson
-
package androidx.build.dackka
import com.google.gson.annotations.SerializedName
diff --git a/buildSrc/private/src/main/kotlin/androidx/build/dackka/GenerateMetadataTask.kt b/buildSrc/private/src/main/kotlin/androidx/build/dackka/GenerateMetadataTask.kt
index 1304305..9b46153 100644
--- a/buildSrc/private/src/main/kotlin/androidx/build/dackka/GenerateMetadataTask.kt
+++ b/buildSrc/private/src/main/kotlin/androidx/build/dackka/GenerateMetadataTask.kt
@@ -59,15 +59,13 @@
@TaskAction
fun generate() {
- val entries = createEntries(
- getArtifactIds().get(),
- getArtifactFiles().get(),
- multiplatform = false
- ) + createEntries(
- getMultiplatformArtifactIds().get(),
- getMultiplatformArtifactFiles().get(),
- multiplatform = true
- )
+ val entries =
+ createEntries(getArtifactIds().get(), getArtifactFiles().get(), multiplatform = false) +
+ createEntries(
+ getMultiplatformArtifactIds().get(),
+ getMultiplatformArtifactFiles().get(),
+ multiplatform = true
+ )
val gson =
if (DEBUG) {
@@ -99,15 +97,17 @@
val componentId = (id.componentIdentifier as ModuleComponentIdentifier)
// Fetch the list of files contained in the .jar file
- val fileList = ZipFile(file).entries().toList().map {
- if (multiplatform) {
- // Paths for multiplatform will start with a directory for the platform (e.g.
- // "commonMain"), while Dackka only sees the part of the path after this.
- it.name.substringAfter("/")
- } else {
- it.name
+ val fileList =
+ ZipFile(file).entries().toList().map {
+ if (multiplatform) {
+ // Paths for multiplatform will start with a directory for the platform
+ // (e.g.
+ // "commonMain"), while Dackka only sees the part of the path after this.
+ it.name.substringAfter("/")
+ } else {
+ it.name
+ }
}
- }
MetadataEntry(
groupId = componentId.group,
diff --git a/buildSrc/private/src/main/kotlin/androidx/build/dependencyTracker/AffectedModuleDetector.kt b/buildSrc/private/src/main/kotlin/androidx/build/dependencyTracker/AffectedModuleDetector.kt
index 432cb50..cc96c2e 100644
--- a/buildSrc/private/src/main/kotlin/androidx/build/dependencyTracker/AffectedModuleDetector.kt
+++ b/buildSrc/private/src/main/kotlin/androidx/build/dependencyTracker/AffectedModuleDetector.kt
@@ -303,9 +303,10 @@
projectGraph = parameters.projectGraph,
dependencyTracker = parameters.dependencyTracker,
logger = logger.toLogger(),
- cobuiltTestPaths = parameters.cobuiltTestPaths
- ?: AffectedModuleDetectorImpl.COBUILT_TEST_PATHS,
- alwaysBuildIfExists = parameters.alwaysBuildIfExists
+ cobuiltTestPaths =
+ parameters.cobuiltTestPaths ?: AffectedModuleDetectorImpl.COBUILT_TEST_PATHS,
+ alwaysBuildIfExists =
+ parameters.alwaysBuildIfExists
?: AffectedModuleDetectorImpl.ALWAYS_BUILD_IF_EXISTS,
ignoredPaths = parameters.ignoredPaths ?: AffectedModuleDetectorImpl.IGNORED_PATHS,
changedFilesProvider = changedFilesProvider
diff --git a/buildSrc/private/src/main/kotlin/androidx/build/docs/AndroidXDocsImplPlugin.kt b/buildSrc/private/src/main/kotlin/androidx/build/docs/AndroidXDocsImplPlugin.kt
index e6ccb06..f7c959e 100644
--- a/buildSrc/private/src/main/kotlin/androidx/build/docs/AndroidXDocsImplPlugin.kt
+++ b/buildSrc/private/src/main/kotlin/androidx/build/docs/AndroidXDocsImplPlugin.kt
@@ -472,12 +472,12 @@
task.getArtifactFiles().set(artifacts.map { result -> result.map { it.file } })
val multiplatformArtifacts =
multiplatformDocsConfiguration.incoming.artifacts.resolvedArtifacts
- task.getMultiplatformArtifactIds().set(multiplatformArtifacts.map { result ->
- result.map { it.id }
- })
- task.getMultiplatformArtifactFiles().set(multiplatformArtifacts.map { result ->
- result.map { it.file }
- })
+ task
+ .getMultiplatformArtifactIds()
+ .set(multiplatformArtifacts.map { result -> result.map { it.id } })
+ task
+ .getMultiplatformArtifactFiles()
+ .set(multiplatformArtifacts.map { result -> result.map { it.file } })
task.destinationFile.set(getMetadataRegularFile(project))
}
@@ -487,10 +487,11 @@
val dackkaTask =
project.tasks.register("docs", DackkaTask::class.java) { task ->
var taskStartTime: LocalDateTime? = null
- task.argsJsonFile = File(
- project.rootProject.getDistributionDirectory(),
- "dackkaArgs-${project.name}.json"
- )
+ task.argsJsonFile =
+ File(
+ project.rootProject.getDistributionDirectory(),
+ "dackkaArgs-${project.name}.json"
+ )
task.apply {
dependsOn(unzipJvmSourcesTask)
dependsOn(unzipSamplesTask)
diff --git a/buildSrc/private/src/main/kotlin/androidx/build/sbom/Sbom.kt b/buildSrc/private/src/main/kotlin/androidx/build/sbom/Sbom.kt
index 7b470d9..5a9bc80 100644
--- a/buildSrc/private/src/main/kotlin/androidx/build/sbom/Sbom.kt
+++ b/buildSrc/private/src/main/kotlin/androidx/build/sbom/Sbom.kt
@@ -215,24 +215,22 @@
val allowPublicRepos = System.getenv("ALLOW_PUBLIC_REPOS") != null
val sbomPublishDir = project.getSbomPublishDir()
- val sbomBuiltFile = project.layout.buildDirectory.file(
- "spdx/release.spdx.json"
- ).get().getAsFile()
+ val sbomBuiltFile =
+ project.layout.buildDirectory.file("spdx/release.spdx.json").get().getAsFile()
- val publishTask = project.tasks.register("exportSboms", Copy::class.java) { publishTask ->
- publishTask.destinationDir = sbomPublishDir
- val sbomBuildDir = sbomBuiltFile.parentFile
- publishTask.from(sbomBuildDir)
- publishTask.rename(sbomBuiltFile.name, "$projectName-$projectVersion.spdx.json")
+ val publishTask =
+ project.tasks.register("exportSboms", Copy::class.java) { publishTask ->
+ publishTask.destinationDir = sbomPublishDir
+ val sbomBuildDir = sbomBuiltFile.parentFile
+ publishTask.from(sbomBuildDir)
+ publishTask.rename(sbomBuiltFile.name, "$projectName-$projectVersion.spdx.json")
- publishTask.doFirst {
- if (!sbomBuiltFile.exists()) {
- throw GradleException(
- "sbom file does not exist: $sbomBuiltFile"
- )
+ publishTask.doFirst {
+ if (!sbomBuiltFile.exists()) {
+ throw GradleException("sbom file does not exist: $sbomBuiltFile")
+ }
}
}
- }
project.tasks.withType(SpdxSbomTask::class.java).configureEach { task ->
val sbomProjectDir = project.projectDir
@@ -302,9 +300,7 @@
target.getConfigurations().set(sbomConfigurations)
}
project.addToBuildOnServer(tasks.named("spdxSbomForRelease"))
- publishTask.configure { task ->
- task.dependsOn("spdxSbomForRelease")
- }
+ publishTask.configure { task -> task.dependsOn("spdxSbomForRelease") }
}
}
diff --git a/buildSrc/private/src/main/kotlin/androidx/build/testConfiguration/AndroidTestConfigBuilder.kt b/buildSrc/private/src/main/kotlin/androidx/build/testConfiguration/AndroidTestConfigBuilder.kt
index 6f9f82c..d4e7a1eb 100644
--- a/buildSrc/private/src/main/kotlin/androidx/build/testConfiguration/AndroidTestConfigBuilder.kt
+++ b/buildSrc/private/src/main/kotlin/androidx/build/testConfiguration/AndroidTestConfigBuilder.kt
@@ -41,10 +41,13 @@
fun applicationId(applicationId: String) = apply { this.applicationId = applicationId }
- fun isMicrobenchmark(isMicrobenchmark: Boolean) =
- apply { this.isMicrobenchmark = isMicrobenchmark }
- fun isMacrobenchmark(isMacrobenchmark: Boolean) =
- apply { this.isMacrobenchmark = isMacrobenchmark }
+ fun isMicrobenchmark(isMicrobenchmark: Boolean) = apply {
+ this.isMicrobenchmark = isMicrobenchmark
+ }
+
+ fun isMacrobenchmark(isMacrobenchmark: Boolean) = apply {
+ this.isMacrobenchmark = isMacrobenchmark
+ }
fun isPostsubmit(isPostsubmit: Boolean) = apply { this.isPostsubmit = isPostsubmit }
@@ -251,7 +254,8 @@
<option name="run-command-timeout" value="240000" />
</target_preparer>
-""".trimIndent()
+"""
+ .trimIndent()
private fun benchmarkPostInstallCommand(packageName: String): String {
return "cmd package compile -f -m speed $packageName"
diff --git a/buildSrc/private/src/main/kotlin/androidx/build/testConfiguration/OwnersService.kt b/buildSrc/private/src/main/kotlin/androidx/build/testConfiguration/OwnersService.kt
index 10a9cc1..51091b6 100644
--- a/buildSrc/private/src/main/kotlin/androidx/build/testConfiguration/OwnersService.kt
+++ b/buildSrc/private/src/main/kotlin/androidx/build/testConfiguration/OwnersService.kt
@@ -41,9 +41,13 @@
// media service/client tests are created from multiple projects, so we get multiple
// entries with the same TestModule.name. This code merges all the TestModule.path entries
// across the test modules with the same name.
- val data = testModules.groupBy { it.name }.map {
- TestModule(name = it.key, path = it.value.flatMap { module -> module.path })
- }.associateBy { it.name }
+ val data =
+ testModules
+ .groupBy { it.name }
+ .map {
+ TestModule(name = it.key, path = it.value.flatMap { module -> module.path })
+ }
+ .associateBy { it.name }
return gson.toJson(data)
}
diff --git a/buildSrc/private/src/main/kotlin/androidx/build/testConfiguration/TestSuiteConfiguration.kt b/buildSrc/private/src/main/kotlin/androidx/build/testConfiguration/TestSuiteConfiguration.kt
index ce67a56..1af36c1 100644
--- a/buildSrc/private/src/main/kotlin/androidx/build/testConfiguration/TestSuiteConfiguration.kt
+++ b/buildSrc/private/src/main/kotlin/androidx/build/testConfiguration/TestSuiteConfiguration.kt
@@ -300,21 +300,19 @@
if (!clientToT && !serviceToT) return
testModules.add(
TestModule(
- name = getJsonName(
- clientToT = clientToT,
- serviceToT = serviceToT,
- clientTests = true
- ),
+ name =
+ getJsonName(clientToT = clientToT, serviceToT = serviceToT, clientTests = true),
path = listOf(projectDir.toRelativeString(getSupportRootFolder()))
)
)
testModules.add(
TestModule(
- name = getJsonName(
- clientToT = clientToT,
- serviceToT = serviceToT,
- clientTests = false
- ),
+ name =
+ getJsonName(
+ clientToT = clientToT,
+ serviceToT = serviceToT,
+ clientTests = false
+ ),
path = listOf(projectDir.toRelativeString(getSupportRootFolder()))
)
)
diff --git a/buildSrc/private/src/main/kotlin/androidx/build/uptodatedness/TaskUpToDateValidator.kt b/buildSrc/private/src/main/kotlin/androidx/build/uptodatedness/TaskUpToDateValidator.kt
index 8fa0772..b51596da 100644
--- a/buildSrc/private/src/main/kotlin/androidx/build/uptodatedness/TaskUpToDateValidator.kt
+++ b/buildSrc/private/src/main/kotlin/androidx/build/uptodatedness/TaskUpToDateValidator.kt
@@ -253,18 +253,18 @@
DONT_TRY_RERUNNING_TASK_TYPES.contains(task::class.qualifiedName))
}
- fun setup(rootProject: Project, registry: BuildEventsListenerRegistry) {
- if (!shouldEnable(rootProject)) {
+ fun setup(project: Project, registry: BuildEventsListenerRegistry) {
+ if (!shouldEnable(project)) {
return
}
val validate =
- rootProject.providers
+ project.providers
.environmentVariable(DISALLOW_TASK_EXECUTION_VAR_NAME)
.map { true }
.orElse(false)
// create listener for validating that any task that reran was expected to rerun
val validatorProvider =
- rootProject.gradle.sharedServices.registerIfAbsent(
+ project.gradle.sharedServices.registerIfAbsent(
"TaskUpToDateValidator",
TaskUpToDateValidator::class.java
) { spec ->
@@ -273,10 +273,8 @@
registry.onTaskCompletion(validatorProvider)
// skip rerunning tasks that are known to be unnecessary to rerun
- rootProject.allprojects { subproject ->
- subproject.tasks.configureEach { task ->
- task.onlyIf { shouldTryRerunningTask(task) || !validate.get() }
- }
+ project.tasks.configureEach { task ->
+ task.onlyIf { shouldTryRerunningTask(task) || !validate.get() }
}
}
}
diff --git a/buildSrc/public/build.gradle b/buildSrc/public/build.gradle
index 75091cd..6779c30 100644
--- a/buildSrc/public/build.gradle
+++ b/buildSrc/public/build.gradle
@@ -1,76 +1 @@
apply from: "../shared.gradle"
-
-sourceSets {
-
- // Benchmark
- main.java.srcDirs += "${supportRootFolder}/benchmark/gradle-plugin/src/main/kotlin"
- main.resources.srcDirs += "${supportRootFolder}/benchmark/gradle-plugin/src/main/resources"
-
- // Benchmark darwin
- main.java.srcDirs += "${supportRootFolder}/benchmark/benchmark-darwin-gradle-plugin/src/main/kotlin"
- main.resources.srcDirs += "${supportRootFolder}/benchmark/benchmark-darwin-gradle-plugin/src/main/resources"
-
- // Baseline profile
- main.java.srcDirs += "${supportRootFolder}" +
- "/benchmark/baseline-profile-gradle-plugin/src/main/kotlin"
- main.resources.srcDirs += "${supportRootFolder}" +
- "/benchmark/baseline-profile-gradle-plugin/src/main/resources"
-
- // Inspection
- main.java.srcDirs += "${supportRootFolder}/inspection/inspection-gradle-plugin/src/main/kotlin"
- main.resources.srcDirs += "${supportRootFolder}/inspection/inspection-gradle-plugin/src/main" +
- "/resources"
-
- // Compose
- main.java.srcDirs += "${supportRootFolder}/compose/material/material/icons/generator/src/main" +
- "/kotlin"
-
- // Glance
- main.java.srcDirs += "${supportRootFolder}/glance/glance-appwidget/glance-layout-generator/" +
- "src/main/kotlin"
-
- // Stable AIDL
- main.java.srcDirs += "${supportRootFolder}/stableaidl/stableaidl-gradle-plugin/src/main/java"
-}
-
-dependencies {
- // This is for androidx.benchmark.darwin
- implementation(libs.apacheCommonsMath)
-}
-
-gradlePlugin {
- plugins {
- benchmark {
- id = "androidx.benchmark"
- implementationClass = "androidx.benchmark.gradle.BenchmarkPlugin"
- }
- baselineProfileProducer {
- id = "androidx.baselineprofile.producer"
- implementationClass = "androidx.baselineprofile.gradle.producer.BaselineProfileProducerPlugin"
- }
- baselineProfileConsumer {
- id = "androidx.baselineprofile.consumer"
- implementationClass = "androidx.baselineprofile.gradle.consumer.BaselineProfileConsumerPlugin"
- }
- baselineProfileAppTarget {
- id = "androidx.baselineprofile.apptarget"
- implementationClass = "androidx.baselineprofile.gradle.apptarget.BaselineProfileAppTargetPlugin"
- }
- baselineProfileWrapper {
- id = "androidx.baselineprofile"
- implementationClass = "androidx.baselineprofile.gradle.wrapper.BaselineProfileWrapperPlugin"
- }
- inspection {
- id = "androidx.inspection"
- implementationClass = "androidx.inspection.gradle.InspectionPlugin"
- }
- darwinBenchmark {
- id = "androidx.benchmark.darwin"
- implementationClass = "androidx.benchmark.darwin.gradle.DarwinBenchmarkPlugin"
- }
- stableaidl {
- id = "androidx.stableaidl"
- implementationClass = "androidx.stableaidl.StableAidlPlugin"
- }
- }
-}
diff --git a/buildSrc/public/src/main/kotlin/androidx/build/ApkCopyHelper.kt b/buildSrc/public/src/main/kotlin/androidx/build/ApkCopyHelper.kt
index 4a65f8d..8d29c124 100644
--- a/buildSrc/public/src/main/kotlin/androidx/build/ApkCopyHelper.kt
+++ b/buildSrc/public/src/main/kotlin/androidx/build/ApkCopyHelper.kt
@@ -70,8 +70,7 @@
}
project.addToBuildOnServer(apkCopy)
}
- }
- ?: throw Exception("Unable to set up app APK copying")
+ } ?: throw Exception("Unable to set up app APK copying")
}
fun setupTestApkCopy(project: Project) {
diff --git a/buildSrc/public/src/main/kotlin/androidx/build/BundleInsideHelper.kt b/buildSrc/public/src/main/kotlin/androidx/build/BundleInsideHelper.kt
index dfcb8e5..060a487 100644
--- a/buildSrc/public/src/main/kotlin/androidx/build/BundleInsideHelper.kt
+++ b/buildSrc/public/src/main/kotlin/androidx/build/BundleInsideHelper.kt
@@ -51,8 +51,8 @@
* Used project are expected
*
* @param relocations a list of package relocations to apply
- * @param dropResourcesWithSuffix used to drop Java resources if they match this suffix,
- * null means no filtering
+ * @param dropResourcesWithSuffix used to drop Java resources if they match this suffix, null
+ * means no filtering
* @receiver the project that should bundle jars specified by this configuration
* @see forInsideAar(String, String)
*/
@@ -77,8 +77,8 @@
*
* @param from specifies from which package the rename should happen
* @param to specifies to which package to put the renamed classes
- * @param dropResourcesWithSuffix used to drop Java resources if they match this suffix,
- * null means no filtering
+ * @param dropResourcesWithSuffix used to drop Java resources if they match this suffix, null
+ * means no filtering
* @receiver the project that should bundle jars specified by these configurations
*/
@JvmStatic
@@ -100,18 +100,19 @@
*
* @param from specifies from which package the rename should happen
* @param to specifies to which package to put the renamed classes
- * @param dropResourcesWithSuffix used to drop Java resources if they match this suffix,
- * null means no filtering
+ * @param dropResourcesWithSuffix used to drop Java resources if they match this suffix, null
+ * means no filtering
* @receiver the project that should bundle jars specified by these configurations
*/
@JvmStatic
fun Project.forInsideJar(from: String, to: String, dropResourcesWithSuffix: String?) {
val bundle = configurations.create(CONFIGURATION_NAME)
- val repackage = configureRepackageTaskForType(
- relocations = listOf(Relocation(from, to)),
- configuration = bundle,
- dropResourcesWithSuffix = dropResourcesWithSuffix
- )
+ val repackage =
+ configureRepackageTaskForType(
+ relocations = listOf(Relocation(from, to)),
+ configuration = bundle,
+ dropResourcesWithSuffix = dropResourcesWithSuffix
+ )
dependencies.add("compileOnly", files(repackage.flatMap { it.archiveFile }))
dependencies.add("testImplementation", files(repackage.flatMap { it.archiveFile }))
@@ -143,7 +144,8 @@
* KMP Version of [Project.forInsideJar]. See those docs for details.
*
* @param dropResourcesWithSuffix used to drop Java resources if they match this suffix,
- * * null means no filtering
+ * * null means no filtering
+ *
* TODO(b/237104605): bundleInside is a global configuration. Should figure out how to make it
* work properly with kmp and source sets so it can reside inside a sourceSet dependency.
*/
@@ -152,18 +154,18 @@
val kmpExtension =
extensions.findByType<KotlinMultiplatformExtension>() ?: error("kmp only")
val bundle = configurations.create(CONFIGURATION_NAME)
- val repackage = configureRepackageTaskForType(
- relocations = listOf(Relocation(from, to)),
- configuration = bundle,
- dropResourcesWithSuffix = dropResourcesWithSuffix
- )
+ val repackage =
+ configureRepackageTaskForType(
+ relocations = listOf(Relocation(from, to)),
+ configuration = bundle,
+ dropResourcesWithSuffix = dropResourcesWithSuffix
+ )
// To account for KMP structure we need to find the jvm specific target
// and add the repackaged archive files to only their compilations.
val jvmTarget =
kmpExtension.targets.firstOrNull { it.platformType == KotlinPlatformType.jvm }
- as? KotlinJvmTarget
- ?: error("cannot find jvm target")
+ as? KotlinJvmTarget ?: error("cannot find jvm target")
jvmTarget.compilations["main"].defaultSourceSet {
dependencies { compileOnly(files(repackage.flatMap { it.archiveFile })) }
}
@@ -234,7 +236,7 @@
relocations: List<Relocation>,
configuration: Configuration,
dropResourcesWithSuffix: String?
- ): TaskProvider<ShadowJar> {
+ ): TaskProvider<ShadowJar> {
return tasks.register(REPACKAGE_TASK_NAME, ShadowJar::class.java) { task ->
task.apply {
configurations = listOf(configuration)
@@ -252,9 +254,7 @@
}
internal class DontIncludeResourceTransformer : Transformer {
- @Optional
- @Input
- var dropResourcesWithSuffix: String? = null
+ @Optional @Input var dropResourcesWithSuffix: String? = null
override fun getName(): String {
return "DontIncludeResourceTransformer"
diff --git a/buildSrc/settings.gradle b/buildSrc/settings.gradle
index df55a68..8a1ea9b 100644
--- a/buildSrc/settings.gradle
+++ b/buildSrc/settings.gradle
@@ -18,6 +18,13 @@
include ":plugins"
include ":private"
include ":public"
+include ":imports:benchmark-gradle-plugin"
+include ":imports:benchmark-darwin-plugin"
+include ":imports:baseline-profile-gradle-plugin"
+include ":imports:inspection-gradle-plugin"
+include ":imports:compose-icons"
+include ":imports:glance-layout-generator"
+include ":imports:stableaidl-gradle-plugin"
dependencyResolutionManagement {
versionCatalogs {
diff --git a/buildSrc/shared.gradle b/buildSrc/shared.gradle
index f907dd2..0c85b7a 100644
--- a/buildSrc/shared.gradle
+++ b/buildSrc/shared.gradle
@@ -3,11 +3,10 @@
import org.jetbrains.kotlin.gradle.tasks.KotlinCompile
apply plugin: "kotlin"
-apply plugin: "java-gradle-plugin"
buildscript {
- project.ext.supportRootFolder = project.projectDir.getParentFile().getParentFile()
- apply from: "../repos.gradle"
+ project.ext.supportRootFolder = buildscript.sourceFile.parentFile.parentFile
+ apply from: "${buildscript.sourceFile.parent}/repos.gradle"
repos.addMavenRepositories(repositories)
dependencies {
classpath(libs.kotlinGradlePluginz)
@@ -17,10 +16,10 @@
dependencies {
implementation(project(":jetpad-integration"))
}
-apply from: "../out.gradle"
+apply from: "${buildscript.sourceFile.parent}/out.gradle"
init.chooseBuildSrcBuildDir()
-apply from: "../shared-dependencies.gradle"
+apply from: "${buildscript.sourceFile.parent}/shared-dependencies.gradle"
java {
sourceCompatibility = JavaVersion.VERSION_17
@@ -32,10 +31,6 @@
task.preserveFileTimestamps = false
}
-validatePlugins {
- enableStricterValidation = true
-}
-
project.repos.addMavenRepositories(project.repositories)
tasks.withType(KotlinCompile).configureEach {
kotlinOptions {
diff --git a/camera/camera-camera2-pipe-integration/src/main/java/androidx/camera/camera2/pipe/integration/adapter/CameraInfoAdapter.kt b/camera/camera-camera2-pipe-integration/src/main/java/androidx/camera/camera2/pipe/integration/adapter/CameraInfoAdapter.kt
index b34d763..57ccca4 100644
--- a/camera/camera-camera2-pipe-integration/src/main/java/androidx/camera/camera2/pipe/integration/adapter/CameraInfoAdapter.kt
+++ b/camera/camera-camera2-pipe-integration/src/main/java/androidx/camera/camera2/pipe/integration/adapter/CameraInfoAdapter.kt
@@ -54,7 +54,6 @@
import androidx.camera.core.DynamicRange.SDR
import androidx.camera.core.ExposureState
import androidx.camera.core.FocusMeteringAction
-import androidx.camera.core.PreviewCapabilities
import androidx.camera.core.ZoomState
import androidx.camera.core.impl.CameraCaptureCallback
import androidx.camera.core.impl.CameraInfoInternal
@@ -213,10 +212,6 @@
return setOf(SDR)
}
- override fun getPreviewCapabilities(): PreviewCapabilities = PreviewCapabilities {
- isPreviewStabilizationSupported
- }
-
override fun isPreviewStabilizationSupported(): Boolean {
val availableVideoStabilizationModes = cameraProperties.metadata[
CameraCharacteristics.CONTROL_AVAILABLE_VIDEO_STABILIZATION_MODES]
diff --git a/camera/camera-camera2-pipe-integration/src/test/java/androidx/camera/camera2/pipe/integration/compat/ZoomCompatTest.kt b/camera/camera-camera2-pipe-integration/src/test/java/androidx/camera/camera2/pipe/integration/compat/ZoomCompatTest.kt
index c6b3b8d4..52c5535 100644
--- a/camera/camera-camera2-pipe-integration/src/test/java/androidx/camera/camera2/pipe/integration/compat/ZoomCompatTest.kt
+++ b/camera/camera-camera2-pipe-integration/src/test/java/androidx/camera/camera2/pipe/integration/compat/ZoomCompatTest.kt
@@ -20,6 +20,7 @@
import android.hardware.camera2.CaptureRequest
import android.hardware.camera2.CaptureResult
import android.os.Build
+import androidx.camera.camera2.pipe.CameraExtensionMetadata
import androidx.camera.camera2.pipe.CameraId
import androidx.camera.camera2.pipe.CameraMetadata
import androidx.camera.camera2.pipe.Metadata
@@ -61,6 +62,9 @@
get() = TODO("Not yet implemented")
override val physicalRequestKeys: Set<CaptureRequest.Key<*>>
get() = TODO("Not yet implemented")
+ override val supportedExtensions: Set<Int>
+ get() = TODO("Not yet implemented")
+
override val requestKeys: Set<CaptureRequest.Key<*>>
get() = TODO("Not yet implemented")
override val resultKeys: Set<CaptureResult.Key<*>>
@@ -72,6 +76,14 @@
TODO("Not yet implemented")
}
+ override suspend fun getExtensionMetadata(extension: Int): CameraExtensionMetadata {
+ TODO("Not yet implemented")
+ }
+
+ override fun awaitExtensionMetadata(extension: Int): CameraExtensionMetadata {
+ TODO("Not yet implemented")
+ }
+
override fun <T> get(key: CameraCharacteristics.Key<T>): T? {
println("throwingCameraMetadata get: key = $key")
if (
diff --git a/camera/camera-camera2-pipe-integration/src/test/java/androidx/camera/camera2/pipe/integration/compat/workaround/FlashAvailabilityCheckerTest.kt b/camera/camera-camera2-pipe-integration/src/test/java/androidx/camera/camera2/pipe/integration/compat/workaround/FlashAvailabilityCheckerTest.kt
index 132aeb3..3a9a837 100644
--- a/camera/camera-camera2-pipe-integration/src/test/java/androidx/camera/camera2/pipe/integration/compat/workaround/FlashAvailabilityCheckerTest.kt
+++ b/camera/camera-camera2-pipe-integration/src/test/java/androidx/camera/camera2/pipe/integration/compat/workaround/FlashAvailabilityCheckerTest.kt
@@ -20,6 +20,7 @@
import android.hardware.camera2.CaptureRequest
import android.hardware.camera2.CaptureResult
import android.os.Build
+import androidx.camera.camera2.pipe.CameraExtensionMetadata
import androidx.camera.camera2.pipe.CameraId
import androidx.camera.camera2.pipe.CameraMetadata
import androidx.camera.camera2.pipe.Metadata
@@ -112,13 +113,26 @@
override val isRedacted: Boolean = false
override val physicalCameraIds: Set<CameraId> = physicalMetadata.keys
+ override val supportedExtensions: Set<Int>
+ get() = TODO("b/299356087 - Add support for fake extension metadata")
+
override suspend fun getPhysicalMetadata(cameraId: CameraId): CameraMetadata =
physicalMetadata[cameraId]!!
override fun awaitPhysicalMetadata(cameraId: CameraId): CameraMetadata =
physicalMetadata[cameraId]!!
- override fun <T : Any> unwrapAs(type: KClass<T>): T? = null
+ override suspend fun getExtensionMetadata(extension: Int): CameraExtensionMetadata {
+ TODO("b/299356087 - Add support for fake extension metadata")
+ }
+
+ override fun awaitExtensionMetadata(extension: Int): CameraExtensionMetadata {
+ TODO("b/299356087 - Add support for fake extension metadata")
+ }
+
+ override fun <T : Any> unwrapAs(type: KClass<T>): T? {
+ TODO("Not yet implemented")
+ }
}
companion object {
diff --git a/camera/camera-camera2-pipe-testing/src/main/java/androidx/camera/camera2/pipe/testing/FakeMetadata.kt b/camera/camera-camera2-pipe-testing/src/main/java/androidx/camera/camera2/pipe/testing/FakeMetadata.kt
index e631d09..c097a17 100644
--- a/camera/camera-camera2-pipe-testing/src/main/java/androidx/camera/camera2/pipe/testing/FakeMetadata.kt
+++ b/camera/camera-camera2-pipe-testing/src/main/java/androidx/camera/camera2/pipe/testing/FakeMetadata.kt
@@ -25,6 +25,7 @@
import android.hardware.camera2.TotalCaptureResult
import android.view.Surface
import androidx.annotation.RequiresApi
+import androidx.camera.camera2.pipe.CameraExtensionMetadata
import androidx.camera.camera2.pipe.CameraId
import androidx.camera.camera2.pipe.CameraMetadata
import androidx.camera.camera2.pipe.FrameInfo
@@ -84,6 +85,7 @@
override val sessionKeys: Set<CaptureRequest.Key<*>> = emptySet(),
val physicalMetadata: Map<CameraId, CameraMetadata> = emptyMap(),
override val physicalRequestKeys: Set<CaptureRequest.Key<*>> = emptySet(),
+ override val supportedExtensions: Set<Int> = emptySet(),
) : FakeMetadata(metadata), CameraMetadata {
override fun <T> get(key: CameraCharacteristics.Key<T>): T? = characteristics[key] as T?
@@ -94,12 +96,21 @@
override val isRedacted: Boolean = false
override val physicalCameraIds: Set<CameraId> = physicalMetadata.keys
+
override suspend fun getPhysicalMetadata(cameraId: CameraId): CameraMetadata =
physicalMetadata[cameraId]!!
override fun awaitPhysicalMetadata(cameraId: CameraId): CameraMetadata =
physicalMetadata[cameraId]!!
+ override suspend fun getExtensionMetadata(extension: Int): CameraExtensionMetadata {
+ TODO("b/299356087 - Add support for fake extension metadata")
+ }
+
+ override fun awaitExtensionMetadata(extension: Int): CameraExtensionMetadata {
+ TODO("b/299356087 - Add support for fake extension metadata")
+ }
+
override fun <T : Any> unwrapAs(type: KClass<T>): T? = null
}
diff --git a/camera/camera-camera2-pipe/src/main/java/androidx/camera/camera2/pipe/CameraExtensionMetadata.kt b/camera/camera-camera2-pipe/src/main/java/androidx/camera/camera2/pipe/CameraExtensionMetadata.kt
new file mode 100644
index 0000000..6d6d0bb
--- /dev/null
+++ b/camera/camera-camera2-pipe/src/main/java/androidx/camera/camera2/pipe/CameraExtensionMetadata.kt
@@ -0,0 +1,49 @@
+/*
+ * 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.
+ */
+
+@file:RequiresApi(31) // TODO(b/200306659): Remove and replace with annotation on package-info.java
+
+package androidx.camera.camera2.pipe
+
+import android.hardware.camera2.CameraExtensionCharacteristics
+import android.hardware.camera2.CaptureRequest
+import android.hardware.camera2.CaptureResult
+import android.util.Size
+import androidx.annotation.RequiresApi
+import androidx.annotation.RestrictTo
+
+/**
+ * [CameraExtensionMetadata] is a compatibility wrapper around [CameraExtensionCharacteristics].
+ *
+ * Applications should, in most situations, prefer using this interface to unwrapping and
+ * using the underlying [CameraExtensionCharacteristics] object directly. Implementation(s) of this
+ * interface provide compatibility guarantees and performance improvements over using
+ * [CameraExtensionCharacteristics] directly. This allows code to get reasonable behavior for all
+ * properties across all OS levels and makes behavior that depends on [CameraExtensionMetadata]
+ * easier to test and reason about.
+ */
+@RestrictTo(RestrictTo.Scope.LIBRARY_GROUP)
+interface CameraExtensionMetadata : Metadata, UnsafeWrapper {
+ val camera: CameraId
+ val isRedacted: Boolean
+ val cameraExtension: Int
+
+ val requestKeys: Set<CaptureRequest.Key<*>>
+ val resultKeys: Set<CaptureResult.Key<*>>
+
+ fun getOutputSizes(imageFormat: Int): Set<Size>
+ fun getOutputSizes(klass: Class<*>): Set<Size>
+}
diff --git a/camera/camera-camera2-pipe/src/main/java/androidx/camera/camera2/pipe/CameraMetadata.kt b/camera/camera-camera2-pipe/src/main/java/androidx/camera/camera2/pipe/CameraMetadata.kt
index 57e6259..2ba2457 100644
--- a/camera/camera-camera2-pipe/src/main/java/androidx/camera/camera2/pipe/CameraMetadata.kt
+++ b/camera/camera-camera2-pipe/src/main/java/androidx/camera/camera2/pipe/CameraMetadata.kt
@@ -48,9 +48,12 @@
val physicalCameraIds: Set<CameraId>
val physicalRequestKeys: Set<CaptureRequest.Key<*>>
+ val supportedExtensions: Set<Int>
suspend fun getPhysicalMetadata(cameraId: CameraId): CameraMetadata
fun awaitPhysicalMetadata(cameraId: CameraId): CameraMetadata
+ suspend fun getExtensionMetadata(extension: Int): CameraExtensionMetadata
+ fun awaitExtensionMetadata(extension: Int): CameraExtensionMetadata
companion object {
/**
diff --git a/camera/camera-camera2-pipe/src/main/java/androidx/camera/camera2/pipe/compat/ApiCompat.kt b/camera/camera-camera2-pipe/src/main/java/androidx/camera/camera2/pipe/compat/ApiCompat.kt
index 20bdb3d..1fcfbd4 100644
--- a/camera/camera-camera2-pipe/src/main/java/androidx/camera/camera2/pipe/compat/ApiCompat.kt
+++ b/camera/camera-camera2-pipe/src/main/java/androidx/camera/camera2/pipe/compat/ApiCompat.kt
@@ -21,6 +21,7 @@
import android.hardware.camera2.CameraCaptureSession
import android.hardware.camera2.CameraCharacteristics
import android.hardware.camera2.CameraDevice
+import android.hardware.camera2.CameraExtensionCharacteristics
import android.hardware.camera2.CameraExtensionSession
import android.hardware.camera2.CameraManager
import android.hardware.camera2.CaptureRequest
@@ -314,6 +315,13 @@
@JvmStatic
@DoNotInline
+ fun getCameraExtensionCharacteristics(
+ cameraManager: CameraManager,
+ cameraId: String
+ ): CameraExtensionCharacteristics = cameraManager.getCameraExtensionCharacteristics(cameraId)
+
+ @JvmStatic
+ @DoNotInline
fun newExtensionSessionConfiguration(
extensionMode: Int,
outputs: List<OutputConfiguration?>,
@@ -322,6 +330,29 @@
): ExtensionSessionConfiguration {
return ExtensionSessionConfiguration(extensionMode, outputs, executor, stateCallback)
}
+
+ @JvmStatic
+ @DoNotInline
+ fun getSupportedExtensions(
+ extensionCharacteristics: CameraExtensionCharacteristics
+ ): List<Int> = extensionCharacteristics.supportedExtensions
+
+ @JvmStatic
+ @DoNotInline
+ fun getExtensionSupportedSizes(
+ extensionCharacteristics: CameraExtensionCharacteristics,
+ extension: Int,
+ imageFormat: Int
+ ): List<Size> = extensionCharacteristics.getExtensionSupportedSizes(extension, imageFormat)
+
+ @JvmStatic
+ @DoNotInline
+ fun getExtensionSupportedSizes(
+ extensionCharacteristics: CameraExtensionCharacteristics,
+ extension: Int,
+ klass: Class<*>
+ ): List<Size> =
+ extensionCharacteristics.getExtensionSupportedSizes(extension, klass)
}
@RequiresApi(Build.VERSION_CODES.TIRAMISU)
@@ -379,4 +410,30 @@
fun getTimestampBase(outputConfig: OutputConfiguration): Int {
return outputConfig.timestampBase
}
+
+ @JvmStatic
+ @DoNotInline
+ fun getAvailableCaptureRequestKeys(
+ extensionCharacteristics: CameraExtensionCharacteristics,
+ extension: Int
+ ): Set<CaptureRequest.Key<Any>> =
+ extensionCharacteristics.getAvailableCaptureRequestKeys(extension)
+
+ @JvmStatic
+ @DoNotInline
+ fun getAvailableCaptureResultKeys(
+ extensionCharacteristics: CameraExtensionCharacteristics,
+ extension: Int
+ ): Set<CaptureResult.Key<Any>> =
+ extensionCharacteristics.getAvailableCaptureResultKeys(extension)
+}
+
+@RequiresApi(Build.VERSION_CODES.UPSIDE_DOWN_CAKE)
+internal object Api34Compat {
+ @JvmStatic
+ @DoNotInline
+ fun isPostviewAvailable(
+ extensionCharacteristics: CameraExtensionCharacteristics,
+ extension: Int
+ ): Boolean = extensionCharacteristics.isPostviewAvailable(extension)
}
diff --git a/camera/camera-camera2-pipe/src/main/java/androidx/camera/camera2/pipe/compat/Camera2CameraExtensionMetadata.kt b/camera/camera-camera2-pipe/src/main/java/androidx/camera/camera2/pipe/compat/Camera2CameraExtensionMetadata.kt
new file mode 100644
index 0000000..2dc7595
--- /dev/null
+++ b/camera/camera-camera2-pipe/src/main/java/androidx/camera/camera2/pipe/compat/Camera2CameraExtensionMetadata.kt
@@ -0,0 +1,144 @@
+/*
+ * 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 androidx.camera.camera2.pipe.compat
+
+import android.hardware.camera2.CameraExtensionCharacteristics
+import android.hardware.camera2.CaptureRequest
+import android.hardware.camera2.CaptureResult
+import android.os.Build
+import android.util.Size
+import androidx.annotation.GuardedBy
+import androidx.annotation.RequiresApi
+import androidx.camera.camera2.pipe.CameraExtensionMetadata
+import androidx.camera.camera2.pipe.CameraId
+import androidx.camera.camera2.pipe.Metadata
+import androidx.camera.camera2.pipe.core.Debug
+import androidx.camera.camera2.pipe.core.Log
+import kotlin.reflect.KClass
+
+/**
+ * This implementation provides access to [CameraExtensionMetadata] and lazy caching of
+ * properties that are either expensive to create and access, or that only exist on newer versions
+ * of the OS. This allows all fields to be accessed and return reasonable values on all OS versions.
+ */
+@RequiresApi(Build.VERSION_CODES.S)
+// TODO(b/200306659): Remove and replace with annotation on package-info.java
+internal class Camera2CameraExtensionMetadata(
+ override val camera: CameraId,
+ override val isRedacted: Boolean,
+ override val cameraExtension: Int,
+ private val extensionCharacteristics: CameraExtensionCharacteristics,
+ private val metadata: Map<Metadata.Key<*>, Any?>
+) : CameraExtensionMetadata {
+ @GuardedBy("supportedExtensionSizesByFormat")
+ private val supportedExtensionSizesByFormat = mutableMapOf<Int, Lazy<Set<Size>>>()
+
+ @GuardedBy("supportedExtensionSizesByClass")
+ private val supportedExtensionSizesByClass = mutableMapOf<Class<*>, Lazy<Set<Size>>>()
+
+ // TODO: b/299356087 - this here may need a switch statement on the key
+ @Suppress("UNCHECKED_CAST")
+ override fun <T> get(key: Metadata.Key<T>): T? = metadata[key] as T?
+
+ @Suppress("UNCHECKED_CAST")
+ override fun <T> getOrDefault(key: Metadata.Key<T>, default: T): T =
+ metadata[key] as T? ?: default
+
+ @Suppress("UNCHECKED_CAST")
+ override fun <T : Any> unwrapAs(type: KClass<T>): T? =
+ when (type) {
+ CameraExtensionCharacteristics::class -> extensionCharacteristics as T
+ else -> null
+ }
+
+ override val requestKeys: Set<CaptureRequest.Key<*>>
+ get() = _requestKeys.value
+ override val resultKeys: Set<CaptureResult.Key<*>>
+ get() = _resultKeys.value
+
+ override fun getOutputSizes(imageFormat: Int): Set<Size> {
+ val supportedExtensionSizes = synchronized(supportedExtensionSizesByFormat) {
+ supportedExtensionSizesByFormat.getOrPut(imageFormat) {
+ lazy(LazyThreadSafetyMode.PUBLICATION) {
+ Api31Compat.getExtensionSupportedSizes(
+ extensionCharacteristics,
+ cameraExtension,
+ imageFormat
+ ).toSet()
+ }
+ }
+ }
+ return supportedExtensionSizes.value
+ }
+
+ override fun getOutputSizes(klass: Class<*>): Set<Size> {
+ val supportedExtensionSizes = synchronized(supportedExtensionSizesByClass) {
+ supportedExtensionSizesByClass.getOrPut(klass) {
+ lazy(LazyThreadSafetyMode.PUBLICATION) {
+ Api31Compat.getExtensionSupportedSizes(
+ extensionCharacteristics,
+ cameraExtension,
+ klass
+ ).toSet()
+ }
+ }
+ }
+ return supportedExtensionSizes.value
+ }
+
+ private val _requestKeys: Lazy<Set<CaptureRequest.Key<*>>> =
+ lazy(LazyThreadSafetyMode.PUBLICATION) {
+ try {
+ Debug.trace("Camera-$camera#availableCaptureRequestKeys") {
+ if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) {
+ Api33Compat.getAvailableCaptureRequestKeys(
+ extensionCharacteristics,
+ cameraExtension
+ ).toSet()
+ } else {
+ emptySet()
+ }
+ }
+ } catch (e: AssertionError) {
+ Log.warn(e) {
+ "Failed to getAvailableCaptureRequestKeys from Camera-$camera"
+ }
+ emptySet()
+ }
+ }
+
+ private val _resultKeys: Lazy<Set<CaptureResult.Key<*>>> =
+ lazy(LazyThreadSafetyMode.PUBLICATION) {
+ try {
+ Debug.trace("Camera-$camera#availableCaptureResultKeys") {
+ if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) {
+ Api33Compat.getAvailableCaptureResultKeys(
+ extensionCharacteristics,
+ cameraExtension
+ ).toSet()
+ } else {
+ emptySet()
+ }
+ }
+ } catch (e: AssertionError) {
+ Log.warn(e) {
+ "Failed to getAvailableCaptureResultKeys from Camera-$camera"
+ }
+ emptySet()
+ }
+ }
+}
diff --git a/camera/camera-camera2-pipe/src/main/java/androidx/camera/camera2/pipe/compat/Camera2CameraMetadata.kt b/camera/camera-camera2-pipe/src/main/java/androidx/camera/camera2/pipe/compat/Camera2CameraMetadata.kt
index 7274b3b..892e1da 100644
--- a/camera/camera-camera2-pipe/src/main/java/androidx/camera/camera2/pipe/compat/Camera2CameraMetadata.kt
+++ b/camera/camera-camera2-pipe/src/main/java/androidx/camera/camera2/pipe/compat/Camera2CameraMetadata.kt
@@ -17,12 +17,14 @@
package androidx.camera.camera2.pipe.compat
import android.hardware.camera2.CameraCharacteristics
+import android.hardware.camera2.CameraExtensionCharacteristics
import android.hardware.camera2.CaptureRequest
import android.hardware.camera2.CaptureResult
import android.os.Build
import android.util.ArrayMap
import androidx.annotation.GuardedBy
import androidx.annotation.RequiresApi
+import androidx.camera.camera2.pipe.CameraExtensionMetadata
import androidx.camera.camera2.pipe.CameraId
import androidx.camera.camera2.pipe.CameraMetadata
import androidx.camera.camera2.pipe.Metadata
@@ -47,7 +49,10 @@
@GuardedBy("values")
private val values = ArrayMap<CameraCharacteristics.Key<*>, Any?>()
- // TODO: b/275575818 - this here may need a switch statement on the key
+ @GuardedBy("extensionCache")
+ private val extensionCache = ArrayMap<Int, CameraExtensionMetadata>()
+
+ // TODO: b/299356087 - this here may need a switch statement on the key
@Suppress("UNCHECKED_CAST")
override fun <T> get(key: Metadata.Key<T>): T? = metadata[key] as T?
@@ -106,6 +111,8 @@
get() = _physicalCameraIds.value
override val physicalRequestKeys: Set<CaptureRequest.Key<*>>
get() = _physicalRequestKeys.value
+ override val supportedExtensions: Set<Int>
+ get() = _supportedExtensions.value
override suspend fun getPhysicalMetadata(cameraId: CameraId): CameraMetadata {
check(physicalCameraIds.contains(cameraId)) {
@@ -121,6 +128,51 @@
return metadataProvider.awaitCameraMetadata(cameraId)
}
+ private fun getExtensionCharacteristics(): CameraExtensionCharacteristics {
+ return metadataProvider.getCameraExtensionCharacteristics(camera)
+ }
+
+ override suspend fun getExtensionMetadata(extension: Int): CameraExtensionMetadata {
+ val existing = synchronized(extensionCache) { extensionCache[extension] }
+ return if (existing != null) {
+ existing
+ } else {
+ val extensionMetadata = metadataProvider.getCameraExtensionMetadata(camera, extension)
+ synchronized(extensionCache) { extensionCache[extension] = extensionMetadata }
+ extensionMetadata
+ }
+ }
+
+ override fun awaitExtensionMetadata(extension: Int): CameraExtensionMetadata {
+ val existing = synchronized(extensionCache) { extensionCache[extension] }
+ return if (existing != null) {
+ existing
+ } else {
+ val extensionMetadata = metadataProvider.awaitCameraExtensionMetadata(camera, extension)
+ synchronized(extensionCache) { extensionCache[extension] = extensionMetadata }
+ extensionMetadata
+ }
+ }
+
+ private val _supportedExtensions: Lazy<Set<Int>> =
+ lazy(LazyThreadSafetyMode.PUBLICATION) {
+ try {
+ Debug.trace("Camera-$camera#supportedExtensions") {
+ if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.S) {
+ val extensionCharacteristics = getExtensionCharacteristics()
+ Api31Compat.getSupportedExtensions(extensionCharacteristics).toSet()
+ } else {
+ emptySet()
+ }
+ }
+ } catch (e: AssertionError) {
+ Log.warn(e) {
+ "Failed to getSupportedExtensions from Camera-$camera"
+ }
+ emptySet()
+ }
+ }
+
private val _keys: Lazy<Set<CameraCharacteristics.Key<*>>> =
lazy(LazyThreadSafetyMode.PUBLICATION) {
try {
diff --git a/camera/camera-camera2-pipe/src/main/java/androidx/camera/camera2/pipe/compat/Camera2MetadataCache.kt b/camera/camera-camera2-pipe/src/main/java/androidx/camera/camera2/pipe/compat/Camera2MetadataCache.kt
index ba3953d7..ce3d323 100644
--- a/camera/camera-camera2-pipe/src/main/java/androidx/camera/camera2/pipe/compat/Camera2MetadataCache.kt
+++ b/camera/camera-camera2-pipe/src/main/java/androidx/camera/camera2/pipe/compat/Camera2MetadataCache.kt
@@ -18,12 +18,14 @@
import android.content.Context
import android.hardware.camera2.CameraCharacteristics
+import android.hardware.camera2.CameraExtensionCharacteristics
import android.hardware.camera2.CameraManager
import android.os.Build
import android.util.ArrayMap
import androidx.annotation.GuardedBy
import androidx.annotation.RequiresApi
import androidx.camera.camera2.pipe.CameraError
+import androidx.camera.camera2.pipe.CameraExtensionMetadata
import androidx.camera.camera2.pipe.CameraId
import androidx.camera.camera2.pipe.CameraMetadata
import androidx.camera.camera2.pipe.CameraPipe
@@ -41,10 +43,11 @@
import kotlinx.coroutines.withContext
/**
- * Provides caching and querying of [CameraMetadata] via Camera2.
+ * Provides caching and querying of [CameraMetadata] and [CameraExtensionMetadata]
+ * via Camera2.
*
* This class is thread safe and provides suspending functions for querying and accessing
- * [CameraMetadata].
+ * [CameraMetadata] and [CameraExtensionMetadata].
*/
@RequiresApi(21) // TODO(b/200306659): Remove and replace with annotation on package-info.java
@Singleton
@@ -57,9 +60,16 @@
private val cameraMetadataConfig: CameraPipe.CameraMetadataConfig,
private val timeSource: TimeSource
) : Camera2MetadataProvider {
+
@GuardedBy("cache")
private val cache = ArrayMap<String, CameraMetadata>()
+ @GuardedBy("extensionCache")
+ private val extensionCache = ArrayMap<String, CameraExtensionMetadata>()
+
+ @GuardedBy("extensionCharacteristicsCache")
+ private val extensionCharacteristicsCache = ArrayMap<String, CameraExtensionCharacteristics>()
+
override suspend fun getCameraMetadata(cameraId: CameraId): CameraMetadata {
synchronized(cache) {
val existing = cache[cameraId.value]
@@ -72,6 +82,23 @@
return withContext(threads.backgroundDispatcher) { awaitCameraMetadata(cameraId) }
}
+ override suspend fun getCameraExtensionMetadata(
+ cameraId: CameraId,
+ extension: Int
+ ): CameraExtensionMetadata {
+ synchronized(extensionCache) {
+ val existing = extensionCache[cameraId.value]
+ if (existing != null) {
+ return existing
+ }
+ }
+
+ // Suspend and query CameraExtensionMetadata on a background thread.
+ return withContext(threads.backgroundDispatcher) {
+ awaitCameraExtensionMetadata(cameraId, extension)
+ }
+ }
+
override fun awaitCameraMetadata(cameraId: CameraId): CameraMetadata {
return Debug.trace("Camera-${cameraId.value}#awaitMetadata") {
synchronized(cache) {
@@ -88,7 +115,36 @@
}
}
- private fun createCameraMetadata(cameraId: CameraId, redacted: Boolean): Camera2CameraMetadata {
+ override fun awaitCameraExtensionMetadata(
+ cameraId: CameraId,
+ extension: Int
+ ): CameraExtensionMetadata {
+ if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.S) {
+ return Debug.trace("Camera-${cameraId.value}#awaitExtensionMetadata") {
+ synchronized(extensionCache) {
+ val existing = extensionCache[cameraId.value]
+ if (existing != null) {
+ return@trace existing
+ } else if (!isMetadataRedacted()) {
+ val result = createCameraExtensionMetadata(cameraId, false, extension)
+ extensionCache[cameraId.value] = result
+ return@trace result
+ }
+ }
+ return@trace createCameraExtensionMetadata(cameraId, true, extension)
+ }
+ } else {
+ throw Exception(
+ "Extension sessions are only supported on Android S or higher. " +
+ "Device SDK is ${Build.VERSION.SDK_INT}"
+ )
+ }
+ }
+
+ private fun createCameraMetadata(
+ cameraId: CameraId,
+ redacted: Boolean
+ ): Camera2CameraMetadata {
val start = Timestamps.now(timeSource)
return Debug.trace("Camera-${cameraId.value}#readCameraMetadata") {
@@ -153,6 +209,77 @@
}
}
+ @RequiresApi(Build.VERSION_CODES.S)
+ private fun createCameraExtensionMetadata(
+ cameraId: CameraId,
+ redacted: Boolean,
+ extension: Int
+ ): Camera2CameraExtensionMetadata {
+ val start = Timestamps.now(timeSource)
+
+ return Debug.trace("Camera-${cameraId.value}#readCameraExtensionMetadata") {
+ try {
+ Log.debug { "Loading extension metadata for $cameraId" }
+
+ val extensionCharacteristics = getCameraExtensionCharacteristics(cameraId)
+
+ val extensionMetadata =
+ Camera2CameraExtensionMetadata(
+ cameraId,
+ redacted,
+ extension,
+ extensionCharacteristics,
+ emptyMap()
+ )
+
+ Log.info {
+ val duration = Timestamps.now(timeSource) - start
+ val redactedString =
+ when (redacted) {
+ false -> ""
+ true -> " (redacted)"
+ }
+ "Loaded extension metadata for $cameraId in " +
+ "${duration.formatMs()}$redactedString"
+ }
+
+ return@trace extensionMetadata
+ } catch (throwable: Throwable) {
+ throw IllegalStateException(
+ "Failed to load extension metadata " +
+ "for $cameraId!", throwable
+ )
+ }
+ }
+ }
+
+ @RequiresApi(Build.VERSION_CODES.S)
+ override fun getCameraExtensionCharacteristics(
+ cameraId: CameraId
+ ): CameraExtensionCharacteristics {
+ synchronized(extensionCharacteristicsCache) {
+ val existing = extensionCharacteristicsCache[cameraId.value]
+ if (existing != null) {
+ return existing
+ }
+ }
+ Log.debug { "Retrieving CameraExtensionCharacteristics for $cameraId" }
+ val cameraManager =
+ cameraPipeContext.getSystemService(Context.CAMERA_SERVICE) as CameraManager
+
+ val extensionCharacteristics = Api31Compat
+ .getCameraExtensionCharacteristics(cameraManager, cameraId.value)
+
+ // This technically shouldn't be null per documentation, but we suspect it could be
+ // under certain devices in certain situations.
+ @Suppress("RedundantRequireNotNullCall")
+ checkNotNull(extensionCharacteristics) {
+ "Failed to get CameraExtensionCharacteristics for $cameraId!"
+ }
+
+ return extensionCharacteristics
+ }
+
private fun isMetadataRedacted(): Boolean = !permissions.hasCameraPermission
private fun shouldBlockSensorOrientationCache(characteristics: CameraCharacteristics): Boolean {
diff --git a/camera/camera-camera2-pipe/src/main/java/androidx/camera/camera2/pipe/compat/Camera2MetadataProvider.kt b/camera/camera-camera2-pipe/src/main/java/androidx/camera/camera2/pipe/compat/Camera2MetadataProvider.kt
index 4680eef..0ef832f 100644
--- a/camera/camera-camera2-pipe/src/main/java/androidx/camera/camera2/pipe/compat/Camera2MetadataProvider.kt
+++ b/camera/camera-camera2-pipe/src/main/java/androidx/camera/camera2/pipe/compat/Camera2MetadataProvider.kt
@@ -16,7 +16,9 @@
package androidx.camera.camera2.pipe.compat
+import android.hardware.camera2.CameraExtensionCharacteristics
import androidx.annotation.RequiresApi
+import androidx.camera.camera2.pipe.CameraExtensionMetadata
import androidx.camera.camera2.pipe.CameraId
import androidx.camera.camera2.pipe.CameraMetadata
@@ -30,4 +32,22 @@
* Attempt to retrieve [CameraMetadata], blocking the calling thread if it is not yet available.
*/
fun awaitCameraMetadata(cameraId: CameraId): CameraMetadata
+
+ /** Attempt to retrieve [CameraExtensionCharacteristics] */
+ fun getCameraExtensionCharacteristics(cameraId: CameraId): CameraExtensionCharacteristics
+
+ /**
+ * Attempt to retrieve [CameraExtensionMetadata], blocking the calling thread if it is
+ * not yet available.
+ */
+ suspend fun getCameraExtensionMetadata(
+ cameraId: CameraId,
+ extension: Int
+ ): CameraExtensionMetadata
+
+ /**
+ * Attempt to retrieve [CameraExtensionMetadata], blocking the calling thread if it is
+ * not yet available.
+ */
+ fun awaitCameraExtensionMetadata(cameraId: CameraId, extension: Int): CameraExtensionMetadata
}
diff --git a/camera/camera-camera2-pipe/src/main/java/androidx/camera/camera2/pipe/compat/Camera2Quirks.kt b/camera/camera-camera2-pipe/src/main/java/androidx/camera/camera2/pipe/compat/Camera2Quirks.kt
index bb36212..d6b4bec 100644
--- a/camera/camera-camera2-pipe/src/main/java/androidx/camera/camera2/pipe/compat/Camera2Quirks.kt
+++ b/camera/camera-camera2-pipe/src/main/java/androidx/camera/camera2/pipe/compat/Camera2Quirks.kt
@@ -106,5 +106,21 @@
Build.MANUFACTURER]?.contains(Build.DEVICE) == true &&
Build.VERSION.SDK_INT < Build.VERSION_CODES.UPSIDE_DOWN_CAKE
}
+
+ /**
+ * A quirk that calls CameraExtensionCharacteristics before opening an Extension session.
+ * This is an issue in the Android camera framework where Camera2 has a global variable
+ * recording if advanced extensions are supported or not, and the variable is updated
+ * the first time CameraExtensionCharacteristics are queried. If CameraExtensionCharacteristics
+ * are not queried and therefore the variable is not set, Camera2 will fall back to basic
+ * extensions, even if they are not supported, causing the session creation to fail.
+ *
+ * - Bug(s): b/293473614
+ * - Device(s): All devices that support advanced extensions
+ * - API levels: Before 34 (U)
+ */
+ internal fun shouldGetExtensionCharacteristicsBeforeSession(): Boolean {
+ return Build.VERSION.SDK_INT <= Build.VERSION_CODES.UPSIDE_DOWN_CAKE
+ }
}
}
diff --git a/camera/camera-camera2-pipe/src/main/java/androidx/camera/camera2/pipe/compat/CaptureSessionFactory.kt b/camera/camera-camera2-pipe/src/main/java/androidx/camera/camera2/pipe/compat/CaptureSessionFactory.kt
index 59e63f2..96484ad 100644
--- a/camera/camera-camera2-pipe/src/main/java/androidx/camera/camera2/pipe/compat/CaptureSessionFactory.kt
+++ b/camera/camera-camera2-pipe/src/main/java/androidx/camera/camera2/pipe/compat/CaptureSessionFactory.kt
@@ -422,6 +422,23 @@
)
}
+ val extensionMode = checkNotNull(
+ graphConfig.sessionParameters
+ [CameraPipeKeys.camera2ExtensionMode] as? Int
+ ) {
+ "The CameraPipeKeys.camera2ExtensionMode must be set in the sessionParameters of the " +
+ "CameraGraph.Config when creating an Extension CameraGraph."
+ }
+
+ val cameraMetadata = camera2MetadataProvider.awaitCameraMetadata(cameraDevice.cameraId)
+
+ val supportedExtensions = cameraMetadata.supportedExtensions
+
+ check(extensionMode in supportedExtensions) {
+ "$cameraDevice does not support extension mode $extensionMode. Supported " +
+ "extensions are ${supportedExtensions.stream()}"
+ }
+
val outputs = buildOutputConfigurations(
graphConfig,
streamGraph,
@@ -437,16 +454,6 @@
check(graphConfig.input == null) { "Reprocessing is not supported for Extensions" }
- val extensionMode = checkNotNull(
- graphConfig.sessionParameters
- [CameraPipeKeys.camera2ExtensionMode] as? Int
- ) {
- "The CameraPipeKeys.camera2ExtensionMode must be set in the sessionParameters of the " +
- "CameraGraph.Config when creating an Extension CameraGraph."
- }
-
- // TODO: b/275575818 - check camera supports extension mode from metadata
-
val extensionSessionState = ExtensionSessionState(captureSessionState)
val sessionConfig =
diff --git a/camera/camera-camera2-pipe/src/test/java/androidx/camera/camera2/pipe/compat/CaptureSessionFactoryTest.kt b/camera/camera-camera2-pipe/src/test/java/androidx/camera/camera2/pipe/compat/CaptureSessionFactoryTest.kt
index dcf8a14..dace6c2 100644
--- a/camera/camera-camera2-pipe/src/test/java/androidx/camera/camera2/pipe/compat/CaptureSessionFactoryTest.kt
+++ b/camera/camera-camera2-pipe/src/test/java/androidx/camera/camera2/pipe/compat/CaptureSessionFactoryTest.kt
@@ -20,11 +20,13 @@
import android.content.Context
import android.graphics.SurfaceTexture
+import android.hardware.camera2.CameraExtensionCharacteristics
import android.os.Build
import android.os.Looper
import android.util.Size
import android.view.Surface
import androidx.annotation.RequiresApi
+import androidx.camera.camera2.pipe.CameraExtensionMetadata
import androidx.camera.camera2.pipe.CameraGraph
import androidx.camera.camera2.pipe.CameraGraph.Flags.FinalizeSessionOnCloseBehavior
import androidx.camera.camera2.pipe.CameraId
@@ -210,5 +212,25 @@
override fun awaitCameraMetadata(cameraId: CameraId): CameraMetadata {
return fakeCamera.metadata
}
+
+ override fun getCameraExtensionCharacteristics(
+ cameraId: CameraId
+ ): CameraExtensionCharacteristics {
+ TODO("b/299356087 - Add support for fake extension metadata")
+ }
+
+ override suspend fun getCameraExtensionMetadata(
+ cameraId: CameraId,
+ extension: Int
+ ): CameraExtensionMetadata {
+ TODO("b/299356087 - Add support for fake extension metadata")
+ }
+
+ override fun awaitCameraExtensionMetadata(
+ cameraId: CameraId,
+ extension: Int
+ ): CameraExtensionMetadata {
+ TODO("b/299356087 - Add support for fake extension metadata")
+ }
}
}
diff --git a/camera/camera-camera2-pipe/src/test/java/androidx/camera/camera2/pipe/compat/RetryingCameraStateOpenerTest.kt b/camera/camera-camera2-pipe/src/test/java/androidx/camera/camera2/pipe/compat/RetryingCameraStateOpenerTest.kt
index 7fff5c7..276a508 100644
--- a/camera/camera-camera2-pipe/src/test/java/androidx/camera/camera2/pipe/compat/RetryingCameraStateOpenerTest.kt
+++ b/camera/camera-camera2-pipe/src/test/java/androidx/camera/camera2/pipe/compat/RetryingCameraStateOpenerTest.kt
@@ -18,6 +18,7 @@
import android.hardware.camera2.CameraAccessException
import android.hardware.camera2.CameraDevice
+import android.hardware.camera2.CameraExtensionCharacteristics
import android.os.Build
import androidx.camera.camera2.pipe.CameraError
import androidx.camera.camera2.pipe.CameraError.Companion.ERROR_CAMERA_DISABLED
@@ -28,6 +29,7 @@
import androidx.camera.camera2.pipe.CameraError.Companion.ERROR_DO_NOT_DISTURB_ENABLED
import androidx.camera.camera2.pipe.CameraError.Companion.ERROR_ILLEGAL_ARGUMENT_EXCEPTION
import androidx.camera.camera2.pipe.CameraError.Companion.ERROR_SECURITY_EXCEPTION
+import androidx.camera.camera2.pipe.CameraExtensionMetadata
import androidx.camera.camera2.pipe.CameraId
import androidx.camera.camera2.pipe.CameraMetadata
import androidx.camera.camera2.pipe.core.DurationNs
@@ -64,6 +66,26 @@
override fun awaitCameraMetadata(cameraId: CameraId): CameraMetadata =
FakeCameraMetadata(cameraId = cameraId)
+
+ override fun getCameraExtensionCharacteristics(
+ cameraId: CameraId
+ ): CameraExtensionCharacteristics {
+ TODO("b/299356087 - Add support for fake extension metadata")
+ }
+
+ override suspend fun getCameraExtensionMetadata(
+ cameraId: CameraId,
+ extension: Int
+ ): CameraExtensionMetadata {
+ TODO("b/299356087 - Add support for fake extension metadata")
+ }
+
+ override fun awaitCameraExtensionMetadata(
+ cameraId: CameraId,
+ extension: Int
+ ): CameraExtensionMetadata {
+ TODO("b/299356087 - Add support for fake extension metadata")
+ }
}
// TODO(lnishan): Consider mocking this object when Mockito works well with value classes.
diff --git a/camera/camera-camera2-pipe/src/test/java/androidx/camera/camera2/pipe/testing/FakeCameraMetadataProvider.kt b/camera/camera-camera2-pipe/src/test/java/androidx/camera/camera2/pipe/testing/FakeCameraMetadataProvider.kt
index 686adee..bfcc2d6 100644
--- a/camera/camera-camera2-pipe/src/test/java/androidx/camera/camera2/pipe/testing/FakeCameraMetadataProvider.kt
+++ b/camera/camera-camera2-pipe/src/test/java/androidx/camera/camera2/pipe/testing/FakeCameraMetadataProvider.kt
@@ -16,7 +16,9 @@
package androidx.camera.camera2.pipe.testing
+import android.hardware.camera2.CameraExtensionCharacteristics
import androidx.annotation.RequiresApi
+import androidx.camera.camera2.pipe.CameraExtensionMetadata
import androidx.camera.camera2.pipe.CameraId
import androidx.camera.camera2.pipe.CameraMetadata
import androidx.camera.camera2.pipe.compat.Camera2MetadataProvider
@@ -24,7 +26,8 @@
/** Utility class for providing fake metadata for tests. */
@RequiresApi(21)
class FakeCameraMetadataProvider(
- private val fakeMetadata: Map<CameraId, CameraMetadata> = emptyMap()
+ private val fakeMetadata: Map<CameraId, CameraMetadata> = emptyMap(),
+ private val fakeExtensionMetadata: Map<CameraId, CameraExtensionMetadata> = emptyMap()
) : Camera2MetadataProvider {
override suspend fun getCameraMetadata(cameraId: CameraId): CameraMetadata =
awaitCameraMetadata(cameraId)
@@ -33,4 +36,24 @@
checkNotNull(fakeMetadata[cameraId]) {
"Failed to find metadata for $cameraId. Available fakeMetadata is $fakeMetadata"
}
+
+ override fun getCameraExtensionCharacteristics(
+ cameraId: CameraId
+ ): CameraExtensionCharacteristics {
+ TODO("b/299356087 - Add support for fake extension metadata")
+ }
+
+ override suspend fun getCameraExtensionMetadata(
+ cameraId: CameraId,
+ extension: Int
+ ): CameraExtensionMetadata = awaitCameraExtensionMetadata(cameraId, extension)
+
+ override fun awaitCameraExtensionMetadata(
+ cameraId: CameraId,
+ extension: Int
+ ): CameraExtensionMetadata =
+ checkNotNull(fakeExtensionMetadata[cameraId]) {
+ "Failed to find extension metadata for $cameraId. Available " +
+ "fakeExtensionMetadata is $fakeExtensionMetadata"
+ }
}
diff --git a/camera/camera-camera2/src/main/java/androidx/camera/camera2/internal/Camera2CameraInfoImpl.java b/camera/camera-camera2/src/main/java/androidx/camera/camera2/internal/Camera2CameraInfoImpl.java
index edcf484..ffffd60 100644
--- a/camera/camera-camera2/src/main/java/androidx/camera/camera2/internal/Camera2CameraInfoImpl.java
+++ b/camera/camera-camera2/src/main/java/androidx/camera/camera2/internal/Camera2CameraInfoImpl.java
@@ -22,6 +22,7 @@
import static android.hardware.camera2.CameraMetadata.REQUEST_AVAILABLE_CAPABILITIES_PRIVATE_REPROCESSING;
import static android.hardware.camera2.CameraMetadata.SENSOR_INFO_TIMESTAMP_SOURCE_REALTIME;
import static android.hardware.camera2.CameraMetadata.SENSOR_INFO_TIMESTAMP_SOURCE_UNKNOWN;
+
import static androidx.camera.camera2.internal.ZslUtil.isCapabilitySupported;
import android.hardware.camera2.CameraCharacteristics;
@@ -55,7 +56,6 @@
import androidx.camera.core.ExposureState;
import androidx.camera.core.FocusMeteringAction;
import androidx.camera.core.Logger;
-import androidx.camera.core.PreviewCapabilities;
import androidx.camera.core.ZoomState;
import androidx.camera.core.impl.CameraCaptureCallback;
import androidx.camera.core.impl.CameraInfoInternal;
@@ -508,12 +508,6 @@
}
}
- @NonNull
- @Override
- public PreviewCapabilities getPreviewCapabilities() {
- return Camera2PreviewCapabilities.from(this);
- }
-
@Override
public boolean isVideoStabilizationSupported() {
int[] availableVideoStabilizationModes =
diff --git a/camera/camera-camera2/src/main/java/androidx/camera/camera2/internal/Camera2PreviewCapabilities.java b/camera/camera-camera2/src/main/java/androidx/camera/camera2/internal/Camera2PreviewCapabilities.java
deleted file mode 100644
index 6bf963f..0000000
--- a/camera/camera-camera2/src/main/java/androidx/camera/camera2/internal/Camera2PreviewCapabilities.java
+++ /dev/null
@@ -1,47 +0,0 @@
-/*
- * Copyright 2023 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 androidx.camera.camera2.internal;
-
-import androidx.annotation.NonNull;
-import androidx.annotation.RequiresApi;
-import androidx.camera.core.CameraInfo;
-import androidx.camera.core.PreviewCapabilities;
-import androidx.camera.core.impl.CameraInfoInternal;
-
-/**
- * Camera2 implementation of {@link PreviewCapabilities}.
- */
-@RequiresApi(21) // TODO(b/200306659): Remove and replace with annotation on package-info.java
-public class Camera2PreviewCapabilities implements PreviewCapabilities {
-
- private final boolean mIsStabilizationSupported;
-
- Camera2PreviewCapabilities(@NonNull CameraInfoInternal cameraInfoInternal) {
- mIsStabilizationSupported = cameraInfoInternal.isPreviewStabilizationSupported();
- }
-
- @NonNull
- static Camera2PreviewCapabilities from(@NonNull CameraInfo cameraInfo) {
- return new Camera2PreviewCapabilities((CameraInfoInternal) cameraInfo);
- }
-
-
- @Override
- public boolean isStabilizationSupported() {
- return mIsStabilizationSupported;
- }
-}
diff --git a/camera/camera-core/api/current.txt b/camera/camera-core/api/current.txt
index adace2b..ec3b0bf 100644
--- a/camera/camera-core/api/current.txt
+++ b/camera/camera-core/api/current.txt
@@ -136,6 +136,7 @@
@RequiresApi(21) public final class CameraXConfig {
method public androidx.camera.core.CameraSelector? getAvailableCamerasLimiter(androidx.camera.core.CameraSelector?);
method public java.util.concurrent.Executor? getCameraExecutor(java.util.concurrent.Executor?);
+ method public long getCameraOpenRetryMaxTimeoutInMsWhileResuming(long);
method public int getMinimumLoggingLevel();
method public android.os.Handler? getSchedulerHandler(android.os.Handler?);
}
@@ -145,6 +146,7 @@
method public static androidx.camera.core.CameraXConfig.Builder fromConfig(androidx.camera.core.CameraXConfig);
method public androidx.camera.core.CameraXConfig.Builder setAvailableCamerasLimiter(androidx.camera.core.CameraSelector);
method public androidx.camera.core.CameraXConfig.Builder setCameraExecutor(java.util.concurrent.Executor);
+ method public androidx.camera.core.CameraXConfig.Builder setCameraOpenRetryMaxTimeoutInMsWhileResuming(long);
method public androidx.camera.core.CameraXConfig.Builder setMinimumLoggingLevel(@IntRange(from=android.util.Log.DEBUG, to=android.util.Log.ERROR) int);
method public androidx.camera.core.CameraXConfig.Builder setSchedulerHandler(android.os.Handler);
}
diff --git a/camera/camera-core/api/restricted_current.txt b/camera/camera-core/api/restricted_current.txt
index adace2b..ec3b0bf 100644
--- a/camera/camera-core/api/restricted_current.txt
+++ b/camera/camera-core/api/restricted_current.txt
@@ -136,6 +136,7 @@
@RequiresApi(21) public final class CameraXConfig {
method public androidx.camera.core.CameraSelector? getAvailableCamerasLimiter(androidx.camera.core.CameraSelector?);
method public java.util.concurrent.Executor? getCameraExecutor(java.util.concurrent.Executor?);
+ method public long getCameraOpenRetryMaxTimeoutInMsWhileResuming(long);
method public int getMinimumLoggingLevel();
method public android.os.Handler? getSchedulerHandler(android.os.Handler?);
}
@@ -145,6 +146,7 @@
method public static androidx.camera.core.CameraXConfig.Builder fromConfig(androidx.camera.core.CameraXConfig);
method public androidx.camera.core.CameraXConfig.Builder setAvailableCamerasLimiter(androidx.camera.core.CameraSelector);
method public androidx.camera.core.CameraXConfig.Builder setCameraExecutor(java.util.concurrent.Executor);
+ method public androidx.camera.core.CameraXConfig.Builder setCameraOpenRetryMaxTimeoutInMsWhileResuming(long);
method public androidx.camera.core.CameraXConfig.Builder setMinimumLoggingLevel(@IntRange(from=android.util.Log.DEBUG, to=android.util.Log.ERROR) int);
method public androidx.camera.core.CameraXConfig.Builder setSchedulerHandler(android.os.Handler);
}
diff --git a/camera/camera-core/src/main/java/androidx/camera/core/CameraInfo.java b/camera/camera-core/src/main/java/androidx/camera/core/CameraInfo.java
index 4d7519d..105bde1 100644
--- a/camera/camera-core/src/main/java/androidx/camera/core/CameraInfo.java
+++ b/camera/camera-core/src/main/java/androidx/camera/core/CameraInfo.java
@@ -298,17 +298,6 @@
}
/**
- * Returns {@link PreviewCapabilities} to query preview stream related device capability.
- *
- * @return {@link PreviewCapabilities}
- */
- @NonNull
- @RestrictTo(Scope.LIBRARY_GROUP)
- default PreviewCapabilities getPreviewCapabilities() {
- return PreviewCapabilities.EMPTY;
- }
-
- /**
* Returns if {@link ImageFormat#PRIVATE} reprocessing is supported on the device.
*
* @return true if supported, otherwise false.
diff --git a/camera/camera-core/src/main/java/androidx/camera/core/CameraX.java b/camera/camera-core/src/main/java/androidx/camera/core/CameraX.java
index 7da7c2d..62a81c7 100644
--- a/camera/camera-core/src/main/java/androidx/camera/core/CameraX.java
+++ b/camera/camera-core/src/main/java/androidx/camera/core/CameraX.java
@@ -302,7 +302,7 @@
CameraSelector availableCamerasLimiter =
mCameraXConfig.getAvailableCamerasLimiter(null);
long cameraOpenRetryMaxTimeoutInMs =
- mCameraXConfig.getCameraOpenRetryMaxTimeoutInMsWhileOccupied(-1L);
+ mCameraXConfig.getCameraOpenRetryMaxTimeoutInMsWhileResuming(-1L);
mCameraFactory = cameraFactoryProvider.newInstance(mAppContext,
cameraThreadConfig, availableCamerasLimiter, cameraOpenRetryMaxTimeoutInMs);
CameraDeviceSurfaceManager.Provider surfaceManagerProvider =
diff --git a/camera/camera-core/src/main/java/androidx/camera/core/CameraXConfig.java b/camera/camera-core/src/main/java/androidx/camera/core/CameraXConfig.java
index 902db41..c198fe0 100644
--- a/camera/camera-core/src/main/java/androidx/camera/core/CameraXConfig.java
+++ b/camera/camera-core/src/main/java/androidx/camera/core/CameraXConfig.java
@@ -109,9 +109,9 @@
"camerax.core.appConfig.availableCamerasLimiter",
CameraSelector.class);
- static final Option<Long> OPTION_CAMERA_OPEN_RETRY_MAX_TIMEOUT_IN_MILLIS_WHILE_OCCUPIED =
+ static final Option<Long> OPTION_CAMERA_OPEN_RETRY_MAX_TIMEOUT_IN_MILLIS_WHILE_RESUMING =
Option.create(
- "camerax.core.appConfig.cameraOpenRetryMaxTimeoutInMsWhileOccupied",
+ "camerax.core.appConfig.cameraOpenRetryMaxTimeoutInMsWhileResuming",
long.class);
// *********************************************************************************************
@@ -199,11 +199,10 @@
/**
* Returns the camera open retry maximum timeout in milliseconds.
*
- * @see Builder#setCameraOpenRetryMaxTimeoutInMsWhileOccupied(long)
+ * @see Builder#setCameraOpenRetryMaxTimeoutInMsWhileResuming(long)
*/
- @RestrictTo(Scope.LIBRARY_GROUP)
- public long getCameraOpenRetryMaxTimeoutInMsWhileOccupied(long valueIfMissing) {
- return mConfig.retrieveOption(OPTION_CAMERA_OPEN_RETRY_MAX_TIMEOUT_IN_MILLIS_WHILE_OCCUPIED,
+ public long getCameraOpenRetryMaxTimeoutInMsWhileResuming(long valueIfMissing) {
+ return mConfig.retrieveOption(OPTION_CAMERA_OPEN_RETRY_MAX_TIMEOUT_IN_MILLIS_WHILE_RESUMING,
valueIfMissing);
}
@@ -381,16 +380,29 @@
}
/**
- * Sets the camera open retry maximum timeout in milliseconds.
+ * Sets the camera open retry maximum timeout in milliseconds. This is only needed when
+ * users don't want to retry camera opening for a long time.
*
- * By default, the retry maximum timeout is 30 minutes when in active resume mode.
+ * <p>When {@link androidx.lifecycle.LifecycleOwner} is in ON_RESUME state, CameraX will
+ * actively retry opening the camera periodically to resume, until there is
+ * non-recoverable errors happening and then move to pending open state waiting for the
+ * next camera available after timeout.
+ *
+ * <p>When in active resuming mode, it will periodically retry opening the
+ * camera regardless of the camera availability.
+ * Elapsed time <= 2 minutes -> retry once per 1 second.
+ * Elapsed time 2 to 5 minutes -> retry once per 2 seconds.
+ * Elapsed time > 5 minutes -> retry once per 4 seconds.
+ * Retry will stop after 30 minutes.
+ *
+ * <p>When not in active resuming state, the camera will be attempted to be opened every
+ * 700ms for 10 seconds. This value cannot currently be changed.
*
*/
- @RestrictTo(Scope.LIBRARY_GROUP)
@NonNull
- public Builder setCameraOpenRetryMaxTimeoutInMsWhileOccupied(long valueIfMissing) {
+ public Builder setCameraOpenRetryMaxTimeoutInMsWhileResuming(long valueIfMissing) {
getMutableConfig().insertOption(
- OPTION_CAMERA_OPEN_RETRY_MAX_TIMEOUT_IN_MILLIS_WHILE_OCCUPIED, valueIfMissing);
+ OPTION_CAMERA_OPEN_RETRY_MAX_TIMEOUT_IN_MILLIS_WHILE_RESUMING, valueIfMissing);
return this;
}
diff --git a/camera/camera-core/src/main/java/androidx/camera/core/Preview.java b/camera/camera-core/src/main/java/androidx/camera/core/Preview.java
index c39b5cb..00e66e9 100644
--- a/camera/camera-core/src/main/java/androidx/camera/core/Preview.java
+++ b/camera/camera-core/src/main/java/androidx/camera/core/Preview.java
@@ -87,6 +87,7 @@
import androidx.camera.core.impl.StreamSpec;
import androidx.camera.core.impl.UseCaseConfig;
import androidx.camera.core.impl.UseCaseConfigFactory;
+import androidx.camera.core.impl.capability.PreviewCapabilitiesImpl;
import androidx.camera.core.impl.stabilization.StabilizationMode;
import androidx.camera.core.impl.utils.executor.CameraXExecutors;
import androidx.camera.core.internal.TargetConfig;
@@ -673,6 +674,17 @@
}
/**
+ * Returns {@link PreviewCapabilities} to query preview stream related device capability.
+ *
+ * @return {@link PreviewCapabilities}
+ */
+ @NonNull
+ @RestrictTo(Scope.LIBRARY_GROUP)
+ public static PreviewCapabilities getPreviewCapabilities(@NonNull CameraInfo cameraInfo) {
+ return PreviewCapabilitiesImpl.from(cameraInfo);
+ }
+
+ /**
* Returns whether video stabilization is enabled for preview stream.
*/
@RestrictTo(Scope.LIBRARY_GROUP)
diff --git a/camera/camera-core/src/main/java/androidx/camera/core/PreviewCapabilities.java b/camera/camera-core/src/main/java/androidx/camera/core/PreviewCapabilities.java
index c07fb66..bd81ee7 100644
--- a/camera/camera-core/src/main/java/androidx/camera/core/PreviewCapabilities.java
+++ b/camera/camera-core/src/main/java/androidx/camera/core/PreviewCapabilities.java
@@ -18,7 +18,6 @@
import android.hardware.camera2.CaptureRequest;
-import androidx.annotation.NonNull;
import androidx.annotation.RequiresApi;
import androidx.annotation.RestrictTo;
@@ -39,8 +38,4 @@
* @see CaptureRequest#CONTROL_VIDEO_STABILIZATION_MODE
*/
boolean isStabilizationSupported();
-
- /** An empty implementation. */
- @NonNull
- PreviewCapabilities EMPTY = () -> false;
}
diff --git a/camera/camera-core/src/main/java/androidx/camera/core/impl/ForwardingCameraInfo.java b/camera/camera-core/src/main/java/androidx/camera/core/impl/ForwardingCameraInfo.java
index 0bd54ec..5ce2595 100644
--- a/camera/camera-core/src/main/java/androidx/camera/core/impl/ForwardingCameraInfo.java
+++ b/camera/camera-core/src/main/java/androidx/camera/core/impl/ForwardingCameraInfo.java
@@ -27,7 +27,6 @@
import androidx.camera.core.ExperimentalZeroShutterLag;
import androidx.camera.core.ExposureState;
import androidx.camera.core.FocusMeteringAction;
-import androidx.camera.core.PreviewCapabilities;
import androidx.camera.core.ZoomState;
import androidx.lifecycle.LiveData;
@@ -203,10 +202,4 @@
public boolean isVideoStabilizationSupported() {
return mCameraInfoInternal.isVideoStabilizationSupported();
}
-
- @NonNull
- @Override
- public PreviewCapabilities getPreviewCapabilities() {
- return mCameraInfoInternal.getPreviewCapabilities();
- }
}
diff --git a/camera/camera-core/src/main/java/androidx/camera/core/impl/capability/PreviewCapabilitiesImpl.java b/camera/camera-core/src/main/java/androidx/camera/core/impl/capability/PreviewCapabilitiesImpl.java
new file mode 100644
index 0000000..f410a6a
--- /dev/null
+++ b/camera/camera-core/src/main/java/androidx/camera/core/impl/capability/PreviewCapabilitiesImpl.java
@@ -0,0 +1,53 @@
+/*
+ * Copyright 2023 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 androidx.camera.core.impl.capability;
+
+import androidx.annotation.NonNull;
+import androidx.annotation.RequiresApi;
+import androidx.annotation.RestrictTo;
+import androidx.camera.core.CameraInfo;
+import androidx.camera.core.Preview;
+import androidx.camera.core.PreviewCapabilities;
+import androidx.camera.core.impl.CameraInfoInternal;
+
+/**
+ * Implementation of {@link PreviewCapabilities}. It delegates to {@link CameraInfoInternal} to
+ * retrieve {@link Preview} related capabilities.
+ */
+@RestrictTo(RestrictTo.Scope.LIBRARY_GROUP)
+@RequiresApi(21)
+public class PreviewCapabilitiesImpl implements PreviewCapabilities {
+
+ private boolean mIsStabilizationSupported;
+
+ PreviewCapabilitiesImpl(@NonNull CameraInfoInternal cameraInfoInternal) {
+ mIsStabilizationSupported = cameraInfoInternal.isPreviewStabilizationSupported();
+ }
+
+ /**
+ * Gets {@link PreviewCapabilities} by the {@link CameraInfo}.
+ */
+ @NonNull
+ public static PreviewCapabilities from(@NonNull CameraInfo cameraInfo) {
+ return new PreviewCapabilitiesImpl((CameraInfoInternal) cameraInfo);
+ }
+
+ @Override
+ public boolean isStabilizationSupported() {
+ return mIsStabilizationSupported;
+ }
+}
diff --git a/camera/camera-core/src/test/java/androidx/camera/core/CameraXConfigTest.java b/camera/camera-core/src/test/java/androidx/camera/core/CameraXConfigTest.java
index 6d1ddbe..300e148 100644
--- a/camera/camera-core/src/test/java/androidx/camera/core/CameraXConfigTest.java
+++ b/camera/camera-core/src/test/java/androidx/camera/core/CameraXConfigTest.java
@@ -109,10 +109,10 @@
@Test
public void canGetCameraOpenRetryMaxTimeoutInMsWhileOccupied() {
CameraXConfig cameraXConfig = new CameraXConfig.Builder()
- .setCameraOpenRetryMaxTimeoutInMsWhileOccupied(1000L)
+ .setCameraOpenRetryMaxTimeoutInMsWhileResuming(1000L)
.build();
- assertThat(cameraXConfig.getCameraOpenRetryMaxTimeoutInMsWhileOccupied(-1L))
+ assertThat(cameraXConfig.getCameraOpenRetryMaxTimeoutInMsWhileResuming(-1L))
.isEqualTo(1000L);
}
}
diff --git a/camera/camera-extensions-stub/src/main/java/androidx/camera/extensions/impl/advanced/Camera2OutputConfigImplBuilder.java b/camera/camera-extensions-stub/src/main/java/androidx/camera/extensions/impl/advanced/Camera2OutputConfigImplBuilder.java
index 8640874..a4ac439 100644
--- a/camera/camera-extensions-stub/src/main/java/androidx/camera/extensions/impl/advanced/Camera2OutputConfigImplBuilder.java
+++ b/camera/camera-extensions-stub/src/main/java/androidx/camera/extensions/impl/advanced/Camera2OutputConfigImplBuilder.java
@@ -183,6 +183,9 @@
public void setSurfaceSharingConfigs(
@Nullable List<Camera2OutputConfigImpl> surfaceSharingConfigs) {
+ if (surfaceSharingConfigs != null) {
+ surfaceSharingConfigs = new ArrayList<>(surfaceSharingConfigs);
+ }
mSurfaceSharingConfigs = surfaceSharingConfigs;
}
}
diff --git a/camera/camera-extensions-stub/src/main/java/androidx/camera/extensions/impl/advanced/Camera2SessionConfigImplBuilder.java b/camera/camera-extensions-stub/src/main/java/androidx/camera/extensions/impl/advanced/Camera2SessionConfigImplBuilder.java
index d1bb69a..12bf312 100644
--- a/camera/camera-extensions-stub/src/main/java/androidx/camera/extensions/impl/advanced/Camera2SessionConfigImplBuilder.java
+++ b/camera/camera-extensions-stub/src/main/java/androidx/camera/extensions/impl/advanced/Camera2SessionConfigImplBuilder.java
@@ -115,8 +115,8 @@
Camera2SessionConfigImplImpl(@NonNull Camera2SessionConfigImplBuilder builder) {
mSessionTemplateId = builder.getSessionTemplateId();
- mSessionParameters = builder.getSessionParameters();
- mCamera2OutputConfigs = builder.getCamera2OutputConfigs();
+ mSessionParameters = new HashMap<>(builder.getSessionParameters());
+ mCamera2OutputConfigs = new ArrayList<>(builder.getCamera2OutputConfigs());
mSessionType = builder.getSessionType();
}
diff --git a/camera/camera-view/api/current.txt b/camera/camera-view/api/current.txt
index 6184aeb..c835ac9 100644
--- a/camera/camera-view/api/current.txt
+++ b/camera/camera-view/api/current.txt
@@ -11,13 +11,16 @@
method @MainThread public java.util.concurrent.Executor? getImageAnalysisBackgroundExecutor();
method @MainThread public int getImageAnalysisBackpressureStrategy();
method @MainThread public int getImageAnalysisImageQueueDepth();
- method @MainThread public androidx.camera.view.CameraController.OutputSize? getImageAnalysisTargetSize();
+ method @MainThread public androidx.camera.core.resolutionselector.ResolutionSelector? getImageAnalysisResolutionSelector();
+ method @Deprecated @MainThread public androidx.camera.view.CameraController.OutputSize? getImageAnalysisTargetSize();
method @MainThread public int getImageCaptureFlashMode();
method @MainThread public java.util.concurrent.Executor? getImageCaptureIoExecutor();
method @MainThread public int getImageCaptureMode();
- method @MainThread public androidx.camera.view.CameraController.OutputSize? getImageCaptureTargetSize();
+ method @MainThread public androidx.camera.core.resolutionselector.ResolutionSelector? getImageCaptureResolutionSelector();
+ method @Deprecated @MainThread public androidx.camera.view.CameraController.OutputSize? getImageCaptureTargetSize();
method public com.google.common.util.concurrent.ListenableFuture<java.lang.Void!> getInitializationFuture();
- method @MainThread public androidx.camera.view.CameraController.OutputSize? getPreviewTargetSize();
+ method @MainThread public androidx.camera.core.resolutionselector.ResolutionSelector? getPreviewResolutionSelector();
+ method @Deprecated @MainThread public androidx.camera.view.CameraController.OutputSize? getPreviewTargetSize();
method @MainThread public androidx.lifecycle.LiveData<java.lang.Integer!> getTapToFocusState();
method @MainThread public androidx.lifecycle.LiveData<java.lang.Integer!> getTorchState();
method @MainThread public androidx.camera.video.QualitySelector getVideoCaptureQualitySelector();
@@ -36,14 +39,17 @@
method @MainThread public void setImageAnalysisBackgroundExecutor(java.util.concurrent.Executor?);
method @MainThread public void setImageAnalysisBackpressureStrategy(int);
method @MainThread public void setImageAnalysisImageQueueDepth(int);
- method @MainThread public void setImageAnalysisTargetSize(androidx.camera.view.CameraController.OutputSize?);
+ method @MainThread public void setImageAnalysisResolutionSelector(androidx.camera.core.resolutionselector.ResolutionSelector?);
+ method @Deprecated @MainThread public void setImageAnalysisTargetSize(androidx.camera.view.CameraController.OutputSize?);
method @MainThread public void setImageCaptureFlashMode(int);
method @MainThread public void setImageCaptureIoExecutor(java.util.concurrent.Executor?);
method @MainThread public void setImageCaptureMode(int);
- method @MainThread public void setImageCaptureTargetSize(androidx.camera.view.CameraController.OutputSize?);
+ method @MainThread public void setImageCaptureResolutionSelector(androidx.camera.core.resolutionselector.ResolutionSelector?);
+ method @Deprecated @MainThread public void setImageCaptureTargetSize(androidx.camera.view.CameraController.OutputSize?);
method @MainThread public com.google.common.util.concurrent.ListenableFuture<java.lang.Void!> setLinearZoom(@FloatRange(from=0.0f, to=1.0f) float);
method @MainThread public void setPinchToZoomEnabled(boolean);
- method @MainThread public void setPreviewTargetSize(androidx.camera.view.CameraController.OutputSize?);
+ method @MainThread public void setPreviewResolutionSelector(androidx.camera.core.resolutionselector.ResolutionSelector?);
+ method @Deprecated @MainThread public void setPreviewTargetSize(androidx.camera.view.CameraController.OutputSize?);
method @MainThread public void setTapToFocusEnabled(boolean);
method @MainThread public void setVideoCaptureQualitySelector(androidx.camera.video.QualitySelector);
method @MainThread public com.google.common.util.concurrent.ListenableFuture<java.lang.Void!> setZoomRatio(float);
@@ -63,12 +69,12 @@
field public static final int VIDEO_CAPTURE = 4; // 0x4
}
- @RequiresApi(21) public static final class CameraController.OutputSize {
- ctor public CameraController.OutputSize(android.util.Size);
- ctor public CameraController.OutputSize(int);
- method public int getAspectRatio();
- method public android.util.Size? getResolution();
- field public static final int UNASSIGNED_ASPECT_RATIO = -1; // 0xffffffff
+ @Deprecated @RequiresApi(21) public static final class CameraController.OutputSize {
+ ctor @Deprecated public CameraController.OutputSize(android.util.Size);
+ ctor @Deprecated public CameraController.OutputSize(int);
+ method @Deprecated public int getAspectRatio();
+ method @Deprecated public android.util.Size? getResolution();
+ field @Deprecated public static final int UNASSIGNED_ASPECT_RATIO = -1; // 0xffffffff
}
@RequiresApi(21) public final class LifecycleCameraController extends androidx.camera.view.CameraController {
diff --git a/camera/camera-view/api/restricted_current.txt b/camera/camera-view/api/restricted_current.txt
index 6184aeb..c835ac9 100644
--- a/camera/camera-view/api/restricted_current.txt
+++ b/camera/camera-view/api/restricted_current.txt
@@ -11,13 +11,16 @@
method @MainThread public java.util.concurrent.Executor? getImageAnalysisBackgroundExecutor();
method @MainThread public int getImageAnalysisBackpressureStrategy();
method @MainThread public int getImageAnalysisImageQueueDepth();
- method @MainThread public androidx.camera.view.CameraController.OutputSize? getImageAnalysisTargetSize();
+ method @MainThread public androidx.camera.core.resolutionselector.ResolutionSelector? getImageAnalysisResolutionSelector();
+ method @Deprecated @MainThread public androidx.camera.view.CameraController.OutputSize? getImageAnalysisTargetSize();
method @MainThread public int getImageCaptureFlashMode();
method @MainThread public java.util.concurrent.Executor? getImageCaptureIoExecutor();
method @MainThread public int getImageCaptureMode();
- method @MainThread public androidx.camera.view.CameraController.OutputSize? getImageCaptureTargetSize();
+ method @MainThread public androidx.camera.core.resolutionselector.ResolutionSelector? getImageCaptureResolutionSelector();
+ method @Deprecated @MainThread public androidx.camera.view.CameraController.OutputSize? getImageCaptureTargetSize();
method public com.google.common.util.concurrent.ListenableFuture<java.lang.Void!> getInitializationFuture();
- method @MainThread public androidx.camera.view.CameraController.OutputSize? getPreviewTargetSize();
+ method @MainThread public androidx.camera.core.resolutionselector.ResolutionSelector? getPreviewResolutionSelector();
+ method @Deprecated @MainThread public androidx.camera.view.CameraController.OutputSize? getPreviewTargetSize();
method @MainThread public androidx.lifecycle.LiveData<java.lang.Integer!> getTapToFocusState();
method @MainThread public androidx.lifecycle.LiveData<java.lang.Integer!> getTorchState();
method @MainThread public androidx.camera.video.QualitySelector getVideoCaptureQualitySelector();
@@ -36,14 +39,17 @@
method @MainThread public void setImageAnalysisBackgroundExecutor(java.util.concurrent.Executor?);
method @MainThread public void setImageAnalysisBackpressureStrategy(int);
method @MainThread public void setImageAnalysisImageQueueDepth(int);
- method @MainThread public void setImageAnalysisTargetSize(androidx.camera.view.CameraController.OutputSize?);
+ method @MainThread public void setImageAnalysisResolutionSelector(androidx.camera.core.resolutionselector.ResolutionSelector?);
+ method @Deprecated @MainThread public void setImageAnalysisTargetSize(androidx.camera.view.CameraController.OutputSize?);
method @MainThread public void setImageCaptureFlashMode(int);
method @MainThread public void setImageCaptureIoExecutor(java.util.concurrent.Executor?);
method @MainThread public void setImageCaptureMode(int);
- method @MainThread public void setImageCaptureTargetSize(androidx.camera.view.CameraController.OutputSize?);
+ method @MainThread public void setImageCaptureResolutionSelector(androidx.camera.core.resolutionselector.ResolutionSelector?);
+ method @Deprecated @MainThread public void setImageCaptureTargetSize(androidx.camera.view.CameraController.OutputSize?);
method @MainThread public com.google.common.util.concurrent.ListenableFuture<java.lang.Void!> setLinearZoom(@FloatRange(from=0.0f, to=1.0f) float);
method @MainThread public void setPinchToZoomEnabled(boolean);
- method @MainThread public void setPreviewTargetSize(androidx.camera.view.CameraController.OutputSize?);
+ method @MainThread public void setPreviewResolutionSelector(androidx.camera.core.resolutionselector.ResolutionSelector?);
+ method @Deprecated @MainThread public void setPreviewTargetSize(androidx.camera.view.CameraController.OutputSize?);
method @MainThread public void setTapToFocusEnabled(boolean);
method @MainThread public void setVideoCaptureQualitySelector(androidx.camera.video.QualitySelector);
method @MainThread public com.google.common.util.concurrent.ListenableFuture<java.lang.Void!> setZoomRatio(float);
@@ -63,12 +69,12 @@
field public static final int VIDEO_CAPTURE = 4; // 0x4
}
- @RequiresApi(21) public static final class CameraController.OutputSize {
- ctor public CameraController.OutputSize(android.util.Size);
- ctor public CameraController.OutputSize(int);
- method public int getAspectRatio();
- method public android.util.Size? getResolution();
- field public static final int UNASSIGNED_ASPECT_RATIO = -1; // 0xffffffff
+ @Deprecated @RequiresApi(21) public static final class CameraController.OutputSize {
+ ctor @Deprecated public CameraController.OutputSize(android.util.Size);
+ ctor @Deprecated public CameraController.OutputSize(int);
+ method @Deprecated public int getAspectRatio();
+ method @Deprecated public android.util.Size? getResolution();
+ field @Deprecated public static final int UNASSIGNED_ASPECT_RATIO = -1; // 0xffffffff
}
@RequiresApi(21) public final class LifecycleCameraController extends androidx.camera.view.CameraController {
diff --git a/camera/camera-view/src/main/java/androidx/camera/view/CameraController.java b/camera/camera-view/src/main/java/androidx/camera/view/CameraController.java
index b76e3c6..c6636f8 100644
--- a/camera/camera-view/src/main/java/androidx/camera/view/CameraController.java
+++ b/camera/camera-view/src/main/java/androidx/camera/view/CameraController.java
@@ -20,7 +20,6 @@
import static androidx.camera.core.impl.utils.executor.CameraXExecutors.directExecutor;
import static androidx.camera.core.impl.utils.executor.CameraXExecutors.mainThreadExecutor;
import static androidx.camera.core.impl.utils.futures.Futures.transform;
-import static androidx.camera.view.CameraController.OutputSize.UNASSIGNED_ASPECT_RATIO;
import static androidx.core.content.ContextCompat.getMainExecutor;
import android.Manifest;
@@ -69,6 +68,8 @@
import androidx.camera.core.impl.utils.Threads;
import androidx.camera.core.impl.utils.futures.FutureCallback;
import androidx.camera.core.impl.utils.futures.Futures;
+import androidx.camera.core.resolutionselector.ResolutionSelector;
+import androidx.camera.core.resolutionselector.ResolutionStrategy;
import androidx.camera.lifecycle.ProcessCameraProvider;
import androidx.camera.video.FileDescriptorOutputOptions;
import androidx.camera.video.FileOutputOptions;
@@ -224,6 +225,8 @@
@Nullable
OutputSize mPreviewTargetSize;
+ @Nullable
+ ResolutionSelector mPreviewResolutionSelector;
// Synthetic access
@SuppressWarnings("WeakerAccess")
@@ -232,6 +235,8 @@
@Nullable
OutputSize mImageCaptureTargetSize;
+ @Nullable
+ ResolutionSelector mImageCaptureResolutionSelector;
@Nullable
Executor mImageCaptureIoExecutor;
@@ -250,6 +255,8 @@
@Nullable
OutputSize mImageAnalysisTargetSize;
+ @Nullable
+ ResolutionSelector mImageAnalysisResolutionSelector;
@NonNull
VideoCapture<Recorder> mVideoCapture;
@@ -483,6 +490,17 @@
}
/**
+ * Sets the {@link ResolutionSelector} on the config.
+ */
+ private void setResolutionSelector(@NonNull ImageOutputConfig.Builder<?> builder,
+ @Nullable ResolutionSelector resolutionSelector) {
+ if (resolutionSelector == null) {
+ return;
+ }
+ builder.setResolutionSelector(resolutionSelector);
+ }
+
+ /**
* Sets the target aspect ratio or target resolution based on {@link OutputSize}.
*/
private void setTargetOutputSize(@NonNull ImageOutputConfig.Builder<?> builder,
@@ -492,7 +510,7 @@
}
if (outputSize.getResolution() != null) {
builder.setTargetResolution(outputSize.getResolution());
- } else if (outputSize.getAspectRatio() != UNASSIGNED_ASPECT_RATIO) {
+ } else if (outputSize.getAspectRatio() != OutputSize.UNASSIGNED_ASPECT_RATIO) {
builder.setTargetAspectRatio(outputSize.getAspectRatio());
} else {
Logger.e(TAG, "Invalid target surface size. " + outputSize);
@@ -572,8 +590,10 @@
* @param targetSize the intended output size for {@link Preview}.
* @see Preview.Builder#setTargetAspectRatio(int)
* @see Preview.Builder#setTargetResolution(Size)
+ * @deprecated Use {@link #setPreviewResolutionSelector(ResolutionSelector)} instead.
*/
@MainThread
+ @Deprecated
public void setPreviewTargetSize(@Nullable OutputSize targetSize) {
checkMainThread();
if (isOutputSizeEqual(mPreviewTargetSize, targetSize)) {
@@ -587,8 +607,11 @@
/**
* Returns the intended output size for {@link Preview} set by
* {@link #setPreviewTargetSize(OutputSize)}, or null if not set.
+ *
+ * @deprecated Use {@link #getPreviewResolutionSelector()} instead.
*/
@MainThread
+ @Deprecated
@Nullable
public OutputSize getPreviewTargetSize() {
checkMainThread();
@@ -596,6 +619,45 @@
}
/**
+ * Sets the {@link ResolutionSelector} for {@link Preview}.
+ *
+ * <p>CameraX uses this value as a hint to select the resolution for preview. The actual
+ * output may differ from the requested value due to device constraints. When set to null,
+ * CameraX will use the default config of {@link Preview}. By default, the selected resolution
+ * will be limited by the {@code PREVIEW} size which is defined as the best size match to the
+ * device's screen resolution, or to 1080p (1920x1080), whichever is smaller.
+ *
+ * <p>Changing the value will reconfigure the camera which will cause additional latency. To
+ * avoid this, set the value before controller is bound to lifecycle.
+ *
+ * @see Preview.Builder#setResolutionSelector(ResolutionSelector)
+ */
+ @MainThread
+ public void setPreviewResolutionSelector(@Nullable ResolutionSelector resolutionSelector) {
+ checkMainThread();
+ if (mPreviewResolutionSelector == resolutionSelector) {
+ return;
+ }
+ mPreviewResolutionSelector = resolutionSelector;
+ unbindPreviewAndRecreate();
+ startCameraAndTrackStates();
+ }
+
+ /**
+ * Returns the {@link ResolutionSelector} for {@link Preview}.
+ *
+ * <p>This method returns the value set by
+ * {@link #setPreviewResolutionSelector(ResolutionSelector)}. It returns {@code null} if
+ * the value has not been set.
+ */
+ @Nullable
+ @MainThread
+ public ResolutionSelector getPreviewResolutionSelector() {
+ checkMainThread();
+ return mPreviewResolutionSelector;
+ }
+
+ /**
* Unbinds {@link Preview} and recreates with the latest parameters.
*/
private void unbindPreviewAndRecreate() {
@@ -604,6 +666,7 @@
}
Preview.Builder builder = new Preview.Builder();
setTargetOutputSize(builder, mPreviewTargetSize);
+ setResolutionSelector(builder, mPreviewResolutionSelector);
mPreview = builder.build();
}
@@ -769,8 +832,10 @@
* To avoid this, set the value before controller is bound to lifecycle.
*
* @param targetSize the intended image size for {@link ImageCapture}.
+ * @deprecated Use {@link #setImageCaptureResolutionSelector(ResolutionSelector)} instead.
*/
@MainThread
+ @Deprecated
public void setImageCaptureTargetSize(@Nullable OutputSize targetSize) {
checkMainThread();
if (isOutputSizeEqual(mImageCaptureTargetSize, targetSize)) {
@@ -784,7 +849,10 @@
/**
* Returns the intended output size for {@link ImageCapture} set by
* {@link #setImageCaptureTargetSize(OutputSize)}, or null if not set.
+ *
+ * @deprecated Use {@link #getImageCaptureResolutionSelector()} instead.
*/
+ @Deprecated
@MainThread
@Nullable
public OutputSize getImageCaptureTargetSize() {
@@ -793,6 +861,45 @@
}
/**
+ * Sets the {@link ResolutionSelector} for {@link ImageCapture}.
+ *
+ * <p>CameraX uses this value as a hint to select the resolution for captured images. The actual
+ * output may differ from the requested value due to device constraints. When set to null,
+ * CameraX will use the default config of {@link ImageCapture}. The default resolution
+ * strategy for ImageCapture is {@link ResolutionStrategy#HIGHEST_AVAILABLE_STRATEGY}, which
+ * will select the largest available resolution to use.
+ *
+ * <p>Changing the value will reconfigure the camera which will cause additional latency. To
+ * avoid this, set the value before controller is bound to lifecycle.
+ *
+ * @see ImageCapture.Builder#setResolutionSelector(ResolutionSelector)
+ */
+ @MainThread
+ public void setImageCaptureResolutionSelector(@Nullable ResolutionSelector resolutionSelector) {
+ checkMainThread();
+ if (mImageCaptureResolutionSelector == resolutionSelector) {
+ return;
+ }
+ mImageCaptureResolutionSelector = resolutionSelector;
+ unbindImageCaptureAndRecreate(getImageCaptureMode());
+ startCameraAndTrackStates();
+ }
+
+ /**
+ * Returns the {@link ResolutionSelector} for {@link ImageCapture}.
+ *
+ * <p>This method returns the value set by
+ * {@link #setImageCaptureResolutionSelector} (ResolutionSelector)}. It returns {@code null} if
+ * the value has not been set.
+ */
+ @MainThread
+ @Nullable
+ public ResolutionSelector getImageCaptureResolutionSelector() {
+ checkMainThread();
+ return mImageCaptureResolutionSelector;
+ }
+
+ /**
* Sets the default executor that will be used for {@link ImageCapture} IO tasks.
*
* <p> This executor will be used for any IO tasks specifically for {@link ImageCapture},
@@ -835,6 +942,7 @@
}
ImageCapture.Builder builder = new ImageCapture.Builder().setCaptureMode(imageCaptureMode);
setTargetOutputSize(builder, mImageCaptureTargetSize);
+ setResolutionSelector(builder, mImageCaptureResolutionSelector);
if (mImageCaptureIoExecutor != null) {
builder.setIoExecutor(mImageCaptureIoExecutor);
}
@@ -1016,8 +1124,10 @@
* @param targetSize the intended output size for {@link ImageAnalysis}.
* @see ImageAnalysis.Builder#setTargetAspectRatio(int)
* @see ImageAnalysis.Builder#setTargetResolution(Size)
+ * @deprecated Use {@link #setImageAnalysisResolutionSelector(ResolutionSelector)} instead.
*/
@MainThread
+ @Deprecated
public void setImageAnalysisTargetSize(@Nullable OutputSize targetSize) {
checkMainThread();
if (isOutputSizeEqual(mImageAnalysisTargetSize, targetSize)) {
@@ -1033,15 +1143,60 @@
/**
* Returns the intended output size for {@link ImageAnalysis} set by
* {@link #setImageAnalysisTargetSize(OutputSize)}, or null if not set.
+ *
+ * @deprecated Use {@link #getImageAnalysisResolutionSelector()} instead.
*/
@MainThread
@Nullable
+ @Deprecated
public OutputSize getImageAnalysisTargetSize() {
checkMainThread();
return mImageAnalysisTargetSize;
}
/**
+ * Sets the {@link ResolutionSelector} for {@link ImageAnalysis}.
+ *
+ * <p>CameraX uses this value as a hint to select the resolution for images. The actual
+ * output may differ from the requested value due to device constraints. When set to null,
+ * CameraX will use the default config of {@link ImageAnalysis}. ImageAnalysis has a default
+ * {@link ResolutionStrategy} with bound size as 640x480 and fallback rule of
+ * {@link ResolutionStrategy#FALLBACK_RULE_CLOSEST_HIGHER_THEN_LOWER}.
+ *
+ * <p>Changing the value will reconfigure the camera which will cause additional latency. To
+ * avoid this, set the value before controller is bound to lifecycle.
+ *
+ * @see ImageAnalysis.Builder#setResolutionSelector(ResolutionSelector)
+ */
+ @MainThread
+ public void setImageAnalysisResolutionSelector(
+ @Nullable ResolutionSelector resolutionSelector) {
+ checkMainThread();
+ if (mImageAnalysisResolutionSelector == resolutionSelector) {
+ return;
+ }
+ mImageAnalysisResolutionSelector = resolutionSelector;
+ unbindImageAnalysisAndRecreate(
+ mImageAnalysis.getBackpressureStrategy(),
+ mImageAnalysis.getImageQueueDepth());
+ startCameraAndTrackStates();
+ }
+
+ /**
+ * Returns the {@link ResolutionSelector} for {@link ImageAnalysis}.
+ *
+ * <p>This method returns the value set by
+ * {@link #setImageAnalysisResolutionSelector(ResolutionSelector)}. It returns {@code null} if
+ * the value has not been set.
+ */
+ @MainThread
+ @Nullable
+ public ResolutionSelector getImageAnalysisResolutionSelector() {
+ checkMainThread();
+ return mImageAnalysisResolutionSelector;
+ }
+
+ /**
* Sets the executor that will be used for {@link ImageAnalysis} background tasks.
*
* <p>If not set, the background executor will default to an automatically generated
@@ -1090,6 +1245,7 @@
.setBackpressureStrategy(strategy)
.setImageQueueDepth(imageQueueDepth);
setTargetOutputSize(builder, mImageAnalysisTargetSize);
+ setResolutionSelector(builder, mImageAnalysisResolutionSelector);
if (mAnalysisBackgroundExecutor != null) {
builder.setBackgroundExecutor(mAnalysisBackgroundExecutor);
}
@@ -2031,7 +2187,9 @@
* @see #setImageAnalysisTargetSize(OutputSize)
* @see #setPreviewTargetSize(OutputSize)
* @see #setImageCaptureTargetSize(OutputSize)
+ * @deprecated Use {@link ResolutionSelector} instead.
*/
+ @Deprecated
@RequiresApi(21) // TODO(b/200306659): Remove and replace with annotation on package-info.java
public static final class OutputSize {
diff --git a/camera/camera-view/src/test/java/androidx/camera/view/CameraControllerTest.kt b/camera/camera-view/src/test/java/androidx/camera/view/CameraControllerTest.kt
index 9033f3e..f699b54 100644
--- a/camera/camera-view/src/test/java/androidx/camera/view/CameraControllerTest.kt
+++ b/camera/camera-view/src/test/java/androidx/camera/view/CameraControllerTest.kt
@@ -36,6 +36,8 @@
import androidx.camera.core.impl.ImageOutputConfig
import androidx.camera.core.impl.utils.executor.CameraXExecutors.directExecutor
import androidx.camera.core.impl.utils.executor.CameraXExecutors.mainThreadExecutor
+import androidx.camera.core.resolutionselector.AspectRatioStrategy
+import androidx.camera.core.resolutionselector.ResolutionSelector
import androidx.camera.testing.fakes.FakeCamera
import androidx.camera.testing.fakes.FakeCameraControl
import androidx.camera.testing.impl.fakes.FakeLifecycleOwner
@@ -71,11 +73,14 @@
}
private val previewViewTransform = Matrix().also { it.postRotate(90F) }
-
private val context = ApplicationProvider.getApplicationContext<Context>()
private lateinit var controller: LifecycleCameraController
+ @Suppress("deprecation")
private val targetSizeWithAspectRatio =
CameraController.OutputSize(AspectRatio.RATIO_16_9)
+ private val resolutionSelector = ResolutionSelector.Builder()
+ .setAspectRatioStrategy(AspectRatioStrategy.RATIO_16_9_FALLBACK_AUTO_STRATEGY).build()
+ @Suppress("deprecation")
private val targetSizeWithResolution =
CameraController.OutputSize(Size(1080, 1960))
private val targetVideoQuality = Quality.HIGHEST
@@ -307,6 +312,37 @@
@UiThreadTest
@Test
+ fun setPreviewResolutionSelector() {
+ controller.previewResolutionSelector = resolutionSelector
+ assertThat(controller.previewResolutionSelector).isEqualTo(resolutionSelector)
+
+ val config = controller.mPreview.currentConfig as ImageOutputConfig
+ assertThat(config.resolutionSelector).isEqualTo(resolutionSelector)
+ }
+
+ @UiThreadTest
+ @Test
+ fun setAnalysisResolutionSelector() {
+ controller.imageAnalysisResolutionSelector = resolutionSelector
+ assertThat(controller.imageAnalysisResolutionSelector).isEqualTo(resolutionSelector)
+
+ val config = controller.mImageAnalysis.currentConfig as ImageOutputConfig
+ assertThat(config.resolutionSelector).isEqualTo(resolutionSelector)
+ }
+
+ @UiThreadTest
+ @Test
+ fun setImageCaptureResolutionSelector() {
+ controller.imageCaptureResolutionSelector = resolutionSelector
+ assertThat(controller.imageCaptureResolutionSelector).isEqualTo(resolutionSelector)
+
+ val config = controller.mImageCapture.currentConfig as ImageOutputConfig
+ assertThat(config.resolutionSelector).isEqualTo(resolutionSelector)
+ }
+
+ @UiThreadTest
+ @Test
+ @Suppress("deprecation")
fun setPreviewAspectRatio() {
controller.previewTargetSize = targetSizeWithAspectRatio
assertThat(controller.previewTargetSize).isEqualTo(targetSizeWithAspectRatio)
@@ -317,6 +353,7 @@
@UiThreadTest
@Test
+ @Suppress("deprecation")
fun setPreviewResolution() {
controller.previewTargetSize = targetSizeWithResolution
assertThat(controller.previewTargetSize).isEqualTo(targetSizeWithResolution)
@@ -327,6 +364,7 @@
@UiThreadTest
@Test
+ @Suppress("deprecation")
fun setAnalysisAspectRatio() {
controller.imageAnalysisTargetSize = targetSizeWithAspectRatio
assertThat(controller.imageAnalysisTargetSize).isEqualTo(targetSizeWithAspectRatio)
@@ -365,6 +403,7 @@
@UiThreadTest
@Test
+ @Suppress("deprecation")
fun setImageCaptureResolution() {
controller.imageCaptureTargetSize = targetSizeWithResolution
assertThat(controller.imageCaptureTargetSize).isEqualTo(targetSizeWithResolution)
@@ -375,6 +414,7 @@
@UiThreadTest
@Test
+ @Suppress("deprecation")
fun setImageCaptureAspectRatio() {
controller.imageCaptureTargetSize = targetSizeWithAspectRatio
assertThat(controller.imageCaptureTargetSize).isEqualTo(targetSizeWithAspectRatio)
diff --git a/camera/integration-tests/coretestapp/src/main/java/androidx/camera/integration/core/CameraXActivity.java b/camera/integration-tests/coretestapp/src/main/java/androidx/camera/integration/core/CameraXActivity.java
index e20ec12..d53a766 100644
--- a/camera/integration-tests/coretestapp/src/main/java/androidx/camera/integration/core/CameraXActivity.java
+++ b/camera/integration-tests/coretestapp/src/main/java/androidx/camera/integration/core/CameraXActivity.java
@@ -35,6 +35,7 @@
import static androidx.camera.video.VideoRecordEvent.Finalize.ERROR_INSUFFICIENT_STORAGE;
import static androidx.camera.video.VideoRecordEvent.Finalize.ERROR_NONE;
import static androidx.camera.video.VideoRecordEvent.Finalize.ERROR_SOURCE_INACTIVE;
+
import static java.util.Objects.requireNonNull;
import android.Manifest;
@@ -1135,7 +1136,7 @@
mZslToggle.setEnabled(mPhotoToggle.isChecked());
mCameraDirectionButton.setEnabled(getCameraInfo() != null);
mPreviewStabilizationToggle.setEnabled(mCamera != null
- && mCamera.getCameraInfo().getPreviewCapabilities().isStabilizationSupported());
+ && Preview.getPreviewCapabilities(getCameraInfo()).isStabilizationSupported());
mTorchButton.setEnabled(isFlashAvailable());
// Flash button
mFlashButton.setEnabled(mPhotoToggle.isChecked() && isFlashAvailable());
diff --git a/camera/integration-tests/viewtestapp/build.gradle b/camera/integration-tests/viewtestapp/build.gradle
index 1c44751..b2073c2 100644
--- a/camera/integration-tests/viewtestapp/build.gradle
+++ b/camera/integration-tests/viewtestapp/build.gradle
@@ -80,7 +80,7 @@
implementation("androidx.appcompat:appcompat:1.3.0")
// Compose UI
- implementation(project(":compose:runtime:runtime"))
+ implementation("androidx.compose.runtime:runtime:1.4.0")
implementation("androidx.compose.ui:ui:1.4.0")
implementation("androidx.compose.material:material:1.4.0")
implementation("androidx.compose.ui:ui-tooling:1.4.0")
diff --git a/collection/collection-benchmark/src/androidInstrumentedTest/kotlin/androidx/collection/ScatterMapBenchmarkTest.kt b/collection/collection-benchmark/src/androidInstrumentedTest/kotlin/androidx/collection/ScatterMapBenchmarkTest.kt
index 47cb642..85cdc2a 100644
--- a/collection/collection-benchmark/src/androidInstrumentedTest/kotlin/androidx/collection/ScatterMapBenchmarkTest.kt
+++ b/collection/collection-benchmark/src/androidInstrumentedTest/kotlin/androidx/collection/ScatterMapBenchmarkTest.kt
@@ -50,6 +50,11 @@
benchmark.runCollectionBenchmark(ScatterMapForEachBenchmark(sourceSet))
}
+ @Test
+ fun compute() {
+ benchmark.runCollectionBenchmark(ScatterMapComputeBenchmark(sourceSet))
+ }
+
companion object {
@JvmStatic
@Parameters(name = "size={0}")
diff --git a/collection/collection-benchmark/src/commonMain/kotlin/androidx/collection/ScatterMapBenchmarks.kt b/collection/collection-benchmark/src/commonMain/kotlin/androidx/collection/ScatterMapBenchmarks.kt
index 8e38d63..4820ca1 100644
--- a/collection/collection-benchmark/src/commonMain/kotlin/androidx/collection/ScatterMapBenchmarks.kt
+++ b/collection/collection-benchmark/src/commonMain/kotlin/androidx/collection/ScatterMapBenchmarks.kt
@@ -84,6 +84,24 @@
}
}
+internal class ScatterMapComputeBenchmark(
+ private val dataSet: Array<String>
+) : CollectionBenchmark {
+ private val map = MutableScatterMap<String, String>()
+
+ init {
+ for (testValue in dataSet) {
+ map[testValue] = testValue
+ }
+ }
+
+ override fun measuredBlock() {
+ for (testValue in dataSet) {
+ map.compute(testValue) { _, v -> v ?: testValue }
+ }
+ }
+}
+
internal fun createDataSet(
size: Int
): Array<String> = Array(size) { index ->
diff --git a/collection/collection/api/current.txt b/collection/collection/api/current.txt
index 53cd0b5..92a279f 100644
--- a/collection/collection/api/current.txt
+++ b/collection/collection/api/current.txt
@@ -1618,6 +1618,7 @@
ctor public MutableScatterMap(optional int initialCapacity);
method public java.util.Map<K,V> asMutableMap();
method public void clear();
+ method public inline boolean compute(K key, kotlin.jvm.functions.Function2<? super K,? super V,? extends V> computeBlock);
method public inline V getOrPut(K key, kotlin.jvm.functions.Function0<? extends V> defaultValue);
method public inline operator void minusAssign(androidx.collection.ObjectList<K> keys);
method public inline operator void minusAssign(androidx.collection.ScatterSet<K> keys);
@@ -1639,7 +1640,7 @@
method public void putAll(kotlin.sequences.Sequence<? extends kotlin.Pair<? extends K,? extends V>> pairs);
method public V? remove(K key);
method public boolean remove(K key, V value);
- method public void removeIf(kotlin.jvm.functions.Function2<? super K,? super V,java.lang.Boolean> predicate);
+ method public inline void removeIf(kotlin.jvm.functions.Function2<? super K,? super V,java.lang.Boolean> predicate);
method public operator void set(K key, V value);
method public int trim();
}
diff --git a/collection/collection/api/restricted_current.txt b/collection/collection/api/restricted_current.txt
index b1ab5c9..c1f728a9 100644
--- a/collection/collection/api/restricted_current.txt
+++ b/collection/collection/api/restricted_current.txt
@@ -1690,6 +1690,8 @@
ctor public MutableScatterMap(optional int initialCapacity);
method public java.util.Map<K,V> asMutableMap();
method public void clear();
+ method public inline boolean compute(K key, kotlin.jvm.functions.Function2<? super K,? super V,? extends V> computeBlock);
+ method @kotlin.PublishedApi internal int findInsertIndex(K key);
method public inline V getOrPut(K key, kotlin.jvm.functions.Function0<? extends V> defaultValue);
method public inline operator void minusAssign(androidx.collection.ObjectList<K> keys);
method public inline operator void minusAssign(androidx.collection.ScatterSet<K> keys);
@@ -1711,7 +1713,8 @@
method public void putAll(kotlin.sequences.Sequence<? extends kotlin.Pair<? extends K,? extends V>> pairs);
method public V? remove(K key);
method public boolean remove(K key, V value);
- method public void removeIf(kotlin.jvm.functions.Function2<? super K,? super V,java.lang.Boolean> predicate);
+ method public inline void removeIf(kotlin.jvm.functions.Function2<? super K,? super V,java.lang.Boolean> predicate);
+ method @kotlin.PublishedApi internal V? removeValueAt(int index);
method public operator void set(K key, V value);
method public int trim();
}
diff --git a/collection/collection/src/commonMain/kotlin/androidx/collection/ScatterMap.kt b/collection/collection/src/commonMain/kotlin/androidx/collection/ScatterMap.kt
index 547f6a3..13839a5 100644
--- a/collection/collection/src/commonMain/kotlin/androidx/collection/ScatterMap.kt
+++ b/collection/collection/src/commonMain/kotlin/androidx/collection/ScatterMap.kt
@@ -840,6 +840,34 @@
}
/**
+ * Retrieves a value for [key] and computes a new value based on the existing value (or
+ * `null` if the key is not in the map). The computed value is then stored in the map for the
+ * given [key].
+ *
+ * @return `true` if the value was inserted and `false` if the existing value was replaced.
+ */
+ public inline fun compute(key: K, computeBlock: (key: K, value: V?) -> V): Boolean {
+ val index = findInsertIndex(key)
+ val inserting = index < 0
+
+ @Suppress("UNCHECKED_CAST")
+ val computedValue = computeBlock(
+ key,
+ if (inserting) null else values[index] as V
+ )
+
+ // Skip Array.set() if key is already there
+ if (inserting) {
+ val insertionIndex = index.inv()
+ keys[insertionIndex] = key
+ values[insertionIndex] = computedValue
+ } else {
+ values[index] = computedValue
+ }
+ return inserting
+ }
+
+ /**
* Creates a new mapping from [key] to [value] in this map. If [key] is
* already present in the map, the association is modified and the previously
* associated value is replaced with [value]. If [key] is not present, a new
@@ -847,7 +875,9 @@
* and cause allocations.
*/
public operator fun set(key: K, value: V) {
- val index = findAbsoluteInsertIndex(key)
+ val index = findInsertIndex(key).let { index ->
+ if (index < 0) index.inv() else index
+ }
keys[index] = key
values[index] = value
}
@@ -861,7 +891,9 @@
* or `null` if the key was not present in the map.
*/
public fun put(key: K, value: V): V? {
- val index = findAbsoluteInsertIndex(key)
+ val index = findInsertIndex(key).let { index ->
+ if (index < 0) index.inv() else index
+ }
val oldValue = values[index]
keys[index] = key
values[index] = value
@@ -987,7 +1019,7 @@
/**
* Removes any mapping for which the specified [predicate] returns true.
*/
- public fun removeIf(predicate: (K, V) -> Boolean) {
+ public inline fun removeIf(predicate: (K, V) -> Boolean) {
forEachIndexed { index ->
@Suppress("UNCHECKED_CAST")
if (predicate(keys[index] as K, values[index] as V)) {
@@ -1048,7 +1080,8 @@
}
}
- private fun removeValueAt(index: Int): V? {
+ @PublishedApi
+ internal fun removeValueAt(index: Int): V? {
_size -= 1
// TODO: We could just mark the entry as empty if there's a group
@@ -1079,11 +1112,12 @@
/**
* Scans the hash table to find the index at which we can store a value
* for the give [key]. If the key already exists in the table, its index
- * will be returned, otherwise the index of an empty slot will be returned.
+ * will be returned, otherwise the `index.inv()` of an empty slot will be returned.
* Calling this function may cause the internal storage to be reallocated
* if the table is full.
*/
- private fun findAbsoluteInsertIndex(key: K): Int {
+ @PublishedApi
+ internal fun findInsertIndex(key: K): Int {
val hash = hash(key)
val hash1 = h1(hash)
val hash2 = h2(hash)
@@ -1121,7 +1155,7 @@
growthLimit -= if (isEmpty(metadata, index)) 1 else 0
writeMetadata(index, hash2.toLong())
- return index
+ return index.inv()
}
/**
diff --git a/collection/collection/src/commonTest/kotlin/androidx/collection/ScatterMapTest.kt b/collection/collection/src/commonTest/kotlin/androidx/collection/ScatterMapTest.kt
index ec03f0d..aba57d8 100644
--- a/collection/collection/src/commonTest/kotlin/androidx/collection/ScatterMapTest.kt
+++ b/collection/collection/src/commonTest/kotlin/androidx/collection/ScatterMapTest.kt
@@ -333,6 +333,39 @@
}
@Test
+ fun compute() {
+ val map = MutableScatterMap<String, String?>()
+ map["Hello"] = "World"
+
+ var inserting = map.compute("Hello") { _, _ ->
+ "New World"
+ }
+ assertEquals("New World", map["Hello"])
+ assertFalse(inserting)
+
+ inserting = map.compute("Bonjour") { _, _ ->
+ "Monde"
+ }
+ assertEquals("Monde", map["Bonjour"])
+ assertTrue(inserting)
+
+ map.compute("Bonjour") { _, v ->
+ v ?: "Welt"
+ }
+ assertEquals("Monde", map["Bonjour"])
+
+ map.compute("Hallo") { _, _ ->
+ null
+ }
+ assertNull(map["Hallo"])
+
+ map.compute("Hallo") { _, v ->
+ v ?: "Welt"
+ }
+ assertEquals("Welt", map["Hallo"])
+ }
+
+ @Test
fun remove() {
val map = MutableScatterMap<String?, String?>()
assertNull(map.remove("Hello"))
diff --git a/compose/animation/animation-core/build.gradle b/compose/animation/animation-core/build.gradle
index 9547fc0..09f7c49 100644
--- a/compose/animation/animation-core/build.gradle
+++ b/compose/animation/animation-core/build.gradle
@@ -99,10 +99,6 @@
}
}
- // TODO(b/214407011): These dependencies leak into instrumented tests as well. If you
- // need to add Robolectric (which must be kept out of androidAndroidTest), use a top
- // level dependencies block instead:
- // `dependencies { testImplementation(libs.robolectric) }`
androidUnitTest {
dependsOn(jvmTest)
dependencies {
diff --git a/compose/animation/animation-graphics/build.gradle b/compose/animation/animation-graphics/build.gradle
index 9126638..4eae2cb 100644
--- a/compose/animation/animation-graphics/build.gradle
+++ b/compose/animation/animation-graphics/build.gradle
@@ -104,10 +104,6 @@
}
}
- // TODO(b/214407011): These dependencies leak into instrumented tests as well. If you
- // need to add Robolectric (which must be kept out of androidAndroidTest), use a top
- // level dependencies block instead:
- // `dependencies { testImplementation(libs.robolectric) }`
androidUnitTest {
dependsOn(jvmTest)
dependencies {
diff --git a/compose/animation/animation/build.gradle b/compose/animation/animation/build.gradle
index 929927e..ba9d7f0 100644
--- a/compose/animation/animation/build.gradle
+++ b/compose/animation/animation/build.gradle
@@ -101,10 +101,6 @@
}
}
- // TODO(b/214407011): These dependencies leak into instrumented tests as well. If you
- // need to add Robolectric (which must be kept out of androidAndroidTest), use a top
- // level dependencies block instead:
- // `dependencies { testImplementation(libs.robolectric) }`
androidUnitTest {
dependsOn(jvmTest)
dependencies {
diff --git a/compose/animation/animation/src/androidInstrumentedTest/kotlin/androidx/compose/animation/AnimatedContentTest.kt b/compose/animation/animation/src/androidInstrumentedTest/kotlin/androidx/compose/animation/AnimatedContentTest.kt
index 67921dc..2f62fcb 100644
--- a/compose/animation/animation/src/androidInstrumentedTest/kotlin/androidx/compose/animation/AnimatedContentTest.kt
+++ b/compose/animation/animation/src/androidInstrumentedTest/kotlin/androidx/compose/animation/AnimatedContentTest.kt
@@ -36,8 +36,8 @@
import androidx.compose.foundation.layout.width
import androidx.compose.foundation.layout.wrapContentSize
import androidx.compose.material3.Scaffold
+import androidx.compose.material3.SecondaryTabRow
import androidx.compose.material3.Surface
-import androidx.compose.material3.TabRow
import androidx.compose.material3.Text
import androidx.compose.runtime.CompositionLocalProvider
import androidx.compose.runtime.DisposableEffect
@@ -597,7 +597,7 @@
topBar = {},
floatingActionButton = {}
) {
- TabRow(selectedTabIndex = 0) {
+ SecondaryTabRow(selectedTabIndex = 0) {
repeat(15) {
Text(it.toString(), Modifier.width(100.dp))
}
diff --git a/compose/compiler/compiler-hosted/integration-tests/src/test/java/androidx/compose/compiler/plugins/kotlin/ComposerParamTransformTests.kt b/compose/compiler/compiler-hosted/integration-tests/src/test/java/androidx/compose/compiler/plugins/kotlin/ComposerParamTransformTests.kt
index 56f2f39..fe41bf6 100644
--- a/compose/compiler/compiler-hosted/integration-tests/src/test/java/androidx/compose/compiler/plugins/kotlin/ComposerParamTransformTests.kt
+++ b/compose/compiler/compiler-hosted/integration-tests/src/test/java/androidx/compose/compiler/plugins/kotlin/ComposerParamTransformTests.kt
@@ -387,8 +387,10 @@
return 123
}
}
- val g = object {
- fun H() { }
+ val g = <block>{
+ object {
+ fun H() { }
+ }
}
}
fun I(block: Function0<Unit>) {
diff --git a/compose/compiler/compiler-hosted/integration-tests/src/test/java/androidx/compose/compiler/plugins/kotlin/ControlFlowTransformTests.kt b/compose/compiler/compiler-hosted/integration-tests/src/test/java/androidx/compose/compiler/plugins/kotlin/ControlFlowTransformTests.kt
index 2eaec85..b7e808b 100644
--- a/compose/compiler/compiler-hosted/integration-tests/src/test/java/androidx/compose/compiler/plugins/kotlin/ControlFlowTransformTests.kt
+++ b/compose/compiler/compiler-hosted/integration-tests/src/test/java/androidx/compose/compiler/plugins/kotlin/ControlFlowTransformTests.kt
@@ -1710,28 +1710,30 @@
if (isTraceInProgress()) {
traceEventStart(<>, %changed, -1, <>)
}
- val y = val tmp0_subject = x
- when {
- tmp0_subject == 0 -> {
- %composer.startReplaceableGroup(<>)
- sourceInformation(%composer, "<R(a)>")
- val tmp0_group = R(a, %composer, 0)
- %composer.endReplaceableGroup()
- tmp0_group
- }
- tmp0_subject == 0b0001 -> {
- %composer.startReplaceableGroup(<>)
- sourceInformation(%composer, "<R(b)>")
- val tmp1_group = R(b, %composer, 0)
- %composer.endReplaceableGroup()
- tmp1_group
- }
- else -> {
- %composer.startReplaceableGroup(<>)
- sourceInformation(%composer, "<R(c)>")
- val tmp2_group = R(c, %composer, 0)
- %composer.endReplaceableGroup()
- tmp2_group
+ val y = <block>{
+ val tmp0_subject = x
+ when {
+ tmp0_subject == 0 -> {
+ %composer.startReplaceableGroup(<>)
+ sourceInformation(%composer, "<R(a)>")
+ val tmp0_group = R(a, %composer, 0)
+ %composer.endReplaceableGroup()
+ tmp0_group
+ }
+ tmp0_subject == 0b0001 -> {
+ %composer.startReplaceableGroup(<>)
+ sourceInformation(%composer, "<R(b)>")
+ val tmp1_group = R(b, %composer, 0)
+ %composer.endReplaceableGroup()
+ tmp1_group
+ }
+ else -> {
+ %composer.startReplaceableGroup(<>)
+ sourceInformation(%composer, "<R(c)>")
+ val tmp2_group = R(c, %composer, 0)
+ %composer.endReplaceableGroup()
+ tmp2_group
+ }
}
}
if (isTraceInProgress()) {
@@ -2002,16 +2004,18 @@
if (isTraceInProgress()) {
traceEventStart(<>, %changed, -1, <>)
}
- val y = val <elvis> = x
- val tmp0_group = when {
- <elvis> == null -> {
- R(%composer, 0)
+ val y = <block>{
+ val <elvis> = x
+ val tmp0_group = when {
+ <elvis> == null -> {
+ R(%composer, 0)
+ }
+ else -> {
+ <elvis>
+ }
}
- else -> {
- <elvis>
- }
+ tmp0_group
}
- tmp0_group
if (isTraceInProgress()) {
traceEventEnd()
}
@@ -3794,12 +3798,13 @@
if (isTraceInProgress()) {
traceEventStart(<>, %changed, -1, <>)
}
- val y =
- %composer.startMovableGroup(<>, x)
- sourceInformation(%composer, "<R()>")
- val tmp0 = R(%composer, 0)
- %composer.endMovableGroup()
- tmp0
+ val y = <block>{
+ %composer.startMovableGroup(<>, x)
+ sourceInformation(%composer, "<R()>")
+ val tmp0 = R(%composer, 0)
+ %composer.endMovableGroup()
+ tmp0
+ }
P(y, %composer, 0)
if (isTraceInProgress()) {
traceEventEnd()
@@ -3830,22 +3835,23 @@
if (isTraceInProgress()) {
traceEventStart(<>, %changed, -1, <>)
}
- val tmp0 =
- val tmp4_group = if (x > 0) {
- val tmp3_group = if (%composer.startReplaceableGroup(<>)
- sourceInformation(%composer, "<B()>")
- val tmp1_group = B(%composer, 0)
- %composer.endReplaceableGroup()
- tmp1_group) 1 else if (%composer.startReplaceableGroup(<>)
- sourceInformation(%composer, "<B()>")
- val tmp2_group = B(%composer, 0)
- %composer.endReplaceableGroup()
- tmp2_group) 2 else 3
- tmp3_group
- } else {
- 4
+ val tmp0 = <block>{
+ val tmp4_group = if (x > 0) {
+ val tmp3_group = if (%composer.startReplaceableGroup(<>)
+ sourceInformation(%composer, "<B()>")
+ val tmp1_group = B(%composer, 0)
+ %composer.endReplaceableGroup()
+ tmp1_group) 1 else if (%composer.startReplaceableGroup(<>)
+ sourceInformation(%composer, "<B()>")
+ val tmp2_group = B(%composer, 0)
+ %composer.endReplaceableGroup()
+ tmp2_group) 2 else 3
+ tmp3_group
+ } else {
+ 4
+ }
+ tmp4_group
}
- tmp4_group
if (isTraceInProgress()) {
traceEventEnd()
}
@@ -4151,13 +4157,14 @@
if (isTraceInProgress()) {
traceEventStart(<>, %changed, -1, <>)
}
- val tmp0 =
- val tmp1_group = x.let { it: Int ->
- A(%composer, 0)
- val tmp0_return = 123
- tmp0_return
+ val tmp0 = <block>{
+ val tmp1_group = x.let { it: Int ->
+ A(%composer, 0)
+ val tmp0_return = 123
+ tmp0_return
+ }
+ tmp1_group
}
- tmp1_group
if (isTraceInProgress()) {
traceEventEnd()
}
@@ -6195,17 +6202,19 @@
if (isTraceInProgress()) {
traceEventStart(<>, %dirty, -1, <>)
}
- Test(%composer.startReplaceableGroup(<>)
- sourceInformation(%composer, "<rememb...>")
- val tmp0_group = if (param == null) {
- remember({
- ""
- }, %composer, 0)
- } else {
- null
- }
- %composer.endReplaceableGroup()
- tmp0_group, %composer, 0)
+ Test(<block>{
+ %composer.startReplaceableGroup(<>)
+ sourceInformation(%composer, "<rememb...>")
+ val tmp0_group = if (param == null) {
+ remember({
+ ""
+ }, %composer, 0)
+ } else {
+ null
+ }
+ %composer.endReplaceableGroup()
+ tmp0_group
+ }, %composer, 0)
if (isTraceInProgress()) {
traceEventEnd()
}
@@ -6249,25 +6258,29 @@
if (isTraceInProgress()) {
traceEventStart(<>, %changed, -1, <>)
}
- val tmp0 = Test(%composer.startReplaceableGroup(<>)
- sourceInformation(%composer, "<Test(>")
- val tmp2_group = if (param == null) {
- Test(%composer.startReplaceableGroup(<>)
- sourceInformation(%composer, "<rememb...>")
- val tmp1_group = if (param == null) {
- remember({
- ""
+ val tmp0 = Test(<block>{
+ %composer.startReplaceableGroup(<>)
+ sourceInformation(%composer, "<Test(>")
+ val tmp2_group = if (param == null) {
+ Test(<block>{
+ %composer.startReplaceableGroup(<>)
+ sourceInformation(%composer, "<rememb...>")
+ val tmp1_group = if (param == null) {
+ remember({
+ ""
+ }, %composer, 0)
+ } else {
+ null
+ }
+ %composer.endReplaceableGroup()
+ tmp1_group
}, %composer, 0)
} else {
null
}
%composer.endReplaceableGroup()
- tmp1_group, %composer, 0)
- } else {
- null
- }
- %composer.endReplaceableGroup()
- tmp2_group, %composer, 0)
+ tmp2_group
+ }, %composer, 0)
if (isTraceInProgress()) {
traceEventEnd()
}
diff --git a/compose/compiler/compiler-hosted/integration-tests/src/test/java/androidx/compose/compiler/plugins/kotlin/FunctionBodySkippingTransformTests.kt b/compose/compiler/compiler-hosted/integration-tests/src/test/java/androidx/compose/compiler/plugins/kotlin/FunctionBodySkippingTransformTests.kt
index 7ae8e40..17edcd0 100644
--- a/compose/compiler/compiler-hosted/integration-tests/src/test/java/androidx/compose/compiler/plugins/kotlin/FunctionBodySkippingTransformTests.kt
+++ b/compose/compiler/compiler-hosted/integration-tests/src/test/java/androidx/compose/compiler/plugins/kotlin/FunctionBodySkippingTransformTests.kt
@@ -332,33 +332,35 @@
"""
fun Example(a: A) {
used(a)
- Example(class <no name provided> : A {
- @Composable
- override fun compute(it: Int, %composer: Composer?, %changed: Int) {
- %composer = %composer.startRestartGroup(<>)
- sourceInformation(%composer, "C(compute)<comput...>:Test.kt")
- val %dirty = %changed
- if (%changed and 0b1110 === 0) {
- %dirty = %dirty or if (%composer.changed(it)) 0b0100 else 0b0010
- }
- if (%dirty and 0b1011 !== 0b0010 || !%composer.skipping) {
- if (isTraceInProgress()) {
- traceEventStart(<>, %dirty, -1, <>)
+ Example(<block>{
+ class <no name provided> : A {
+ @Composable
+ override fun compute(it: Int, %composer: Composer?, %changed: Int) {
+ %composer = %composer.startRestartGroup(<>)
+ sourceInformation(%composer, "C(compute)<comput...>:Test.kt")
+ val %dirty = %changed
+ if (%changed and 0b1110 === 0) {
+ %dirty = %dirty or if (%composer.changed(it)) 0b0100 else 0b0010
}
- a.compute(it, %composer, 0b1110 and %dirty)
- if (isTraceInProgress()) {
- traceEventEnd()
+ if (%dirty and 0b1011 !== 0b0010 || !%composer.skipping) {
+ if (isTraceInProgress()) {
+ traceEventStart(<>, %dirty, -1, <>)
+ }
+ a.compute(it, %composer, 0b1110 and %dirty)
+ if (isTraceInProgress()) {
+ traceEventEnd()
+ }
+ } else {
+ %composer.skipToGroupEnd()
}
- } else {
- %composer.skipToGroupEnd()
- }
- val tmp0_rcvr = <this>
- %composer.endRestartGroup()?.updateScope { %composer: Composer?, %force: Int ->
- tmp0_rcvr.compute(it, %composer, updateChangedFlags(%changed or 0b0001))
+ val tmp0_rcvr = <this>
+ %composer.endRestartGroup()?.updateScope { %composer: Composer?, %force: Int ->
+ tmp0_rcvr.compute(it, %composer, updateChangedFlags(%changed or 0b0001))
+ }
}
}
- }
- <no name provided>())
+ <no name provided>()
+ })
}
"""
)
@@ -423,27 +425,29 @@
if (isTraceInProgress()) {
traceEventStart(<>, %changed, -1, <>)
}
- Button(class <no name provided> : ButtonColors {
- @Composable
- override fun getColor(%composer: Composer?, %changed: Int): Color {
- %composer.startReplaceableGroup(<>)
- sourceInformation(%composer, "C(getColor)<condit...>:Test.kt")
- if (isTraceInProgress()) {
- traceEventStart(<>, %changed, -1, <>)
+ Button(<block>{
+ class <no name provided> : ButtonColors {
+ @Composable
+ override fun getColor(%composer: Composer?, %changed: Int): Color {
+ %composer.startReplaceableGroup(<>)
+ sourceInformation(%composer, "C(getColor)<condit...>:Test.kt")
+ if (isTraceInProgress()) {
+ traceEventStart(<>, %changed, -1, <>)
+ }
+ val tmp0 = if (condition(%composer, 0)) {
+ Companion.Red
+ } else {
+ Companion.Blue
+ }
+ if (isTraceInProgress()) {
+ traceEventEnd()
+ }
+ %composer.endReplaceableGroup()
+ return tmp0
}
- val tmp0 = if (condition(%composer, 0)) {
- Companion.Red
- } else {
- Companion.Blue
- }
- if (isTraceInProgress()) {
- traceEventEnd()
- }
- %composer.endReplaceableGroup()
- return tmp0
}
- }
- <no name provided>(), %composer, 0)
+ <no name provided>()
+ }, %composer, 0)
if (isTraceInProgress()) {
traceEventEnd()
}
@@ -1147,7 +1151,9 @@
if (isTraceInProgress()) {
traceEventStart(<>, %changed, -1, <>)
}
- val id = object
+ val id = <block>{
+ object
+ }
if (isTraceInProgress()) {
traceEventEnd()
}
diff --git a/compose/compiler/compiler-hosted/integration-tests/src/test/java/androidx/compose/compiler/plugins/kotlin/FunctionalInterfaceTransformTests.kt b/compose/compiler/compiler-hosted/integration-tests/src/test/java/androidx/compose/compiler/plugins/kotlin/FunctionalInterfaceTransformTests.kt
index dc95588..e454cb2 100644
--- a/compose/compiler/compiler-hosted/integration-tests/src/test/java/androidx/compose/compiler/plugins/kotlin/FunctionalInterfaceTransformTests.kt
+++ b/compose/compiler/compiler-hosted/integration-tests/src/test/java/androidx/compose/compiler/plugins/kotlin/FunctionalInterfaceTransformTests.kt
@@ -81,33 +81,35 @@
if (isTraceInProgress()) {
traceEventStart(<>, %changed, -1, <>)
}
- Test(class <no name provided> : TestContent {
- @Composable
- override fun Content(%this%Test: String, %composer: Composer?, %changed: Int) {
- %composer = %composer.startRestartGroup(<>)
- sourceInformation(%composer, "C(Content):Test.kt")
- val %dirty = %changed
- if (%changed and 0b1110 === 0) {
- %dirty = %dirty or if (%composer.changed(%this%Test)) 0b0100 else 0b0010
- }
- if (%dirty and 0b1011 !== 0b0010 || !%composer.skipping) {
- if (isTraceInProgress()) {
- traceEventStart(<>, %dirty, -1, <>)
+ Test(<block>{
+ class <no name provided> : TestContent {
+ @Composable
+ override fun Content(%this%Test: String, %composer: Composer?, %changed: Int) {
+ %composer = %composer.startRestartGroup(<>)
+ sourceInformation(%composer, "C(Content):Test.kt")
+ val %dirty = %changed
+ if (%changed and 0b1110 === 0) {
+ %dirty = %dirty or if (%composer.changed(%this%Test)) 0b0100 else 0b0010
}
- %this%Test.length
- if (isTraceInProgress()) {
- traceEventEnd()
+ if (%dirty and 0b1011 !== 0b0010 || !%composer.skipping) {
+ if (isTraceInProgress()) {
+ traceEventStart(<>, %dirty, -1, <>)
+ }
+ %this%Test.length
+ if (isTraceInProgress()) {
+ traceEventEnd()
+ }
+ } else {
+ %composer.skipToGroupEnd()
}
- } else {
- %composer.skipToGroupEnd()
- }
- val tmp0_rcvr = <this>
- %composer.endRestartGroup()?.updateScope { %composer: Composer?, %force: Int ->
- tmp0_rcvr.Content(%this%Test, %composer, updateChangedFlags(%changed or 0b0001))
+ val tmp0_rcvr = <this>
+ %composer.endRestartGroup()?.updateScope { %composer: Composer?, %force: Int ->
+ tmp0_rcvr.Content(%this%Test, %composer, updateChangedFlags(%changed or 0b0001))
+ }
}
}
- }
- <no name provided>(), %composer, 0)
+ <no name provided>()
+ }, %composer, 0)
if (isTraceInProgress()) {
traceEventEnd()
}
@@ -186,33 +188,35 @@
abstract fun compute(value: Int, %composer: Composer?, %changed: Int)
}
fun Example(a: A) {
- Example(class <no name provided> : A {
- @Composable
- override fun compute(it: Int, %composer: Composer?, %changed: Int) {
- %composer = %composer.startRestartGroup(<>)
- sourceInformation(%composer, "C(compute)<comput...>:Test.kt")
- val %dirty = %changed
- if (%changed and 0b1110 === 0) {
- %dirty = %dirty or if (%composer.changed(it)) 0b0100 else 0b0010
- }
- if (%dirty and 0b1011 !== 0b0010 || !%composer.skipping) {
- if (isTraceInProgress()) {
- traceEventStart(<>, %dirty, -1, <>)
+ Example(<block>{
+ class <no name provided> : A {
+ @Composable
+ override fun compute(it: Int, %composer: Composer?, %changed: Int) {
+ %composer = %composer.startRestartGroup(<>)
+ sourceInformation(%composer, "C(compute)<comput...>:Test.kt")
+ val %dirty = %changed
+ if (%changed and 0b1110 === 0) {
+ %dirty = %dirty or if (%composer.changed(it)) 0b0100 else 0b0010
}
- a.compute(it, %composer, 0b1110 and %dirty)
- if (isTraceInProgress()) {
- traceEventEnd()
+ if (%dirty and 0b1011 !== 0b0010 || !%composer.skipping) {
+ if (isTraceInProgress()) {
+ traceEventStart(<>, %dirty, -1, <>)
+ }
+ a.compute(it, %composer, 0b1110 and %dirty)
+ if (isTraceInProgress()) {
+ traceEventEnd()
+ }
+ } else {
+ %composer.skipToGroupEnd()
}
- } else {
- %composer.skipToGroupEnd()
- }
- val tmp0_rcvr = <this>
- %composer.endRestartGroup()?.updateScope { %composer: Composer?, %force: Int ->
- tmp0_rcvr.compute(it, %composer, updateChangedFlags(%changed or 0b0001))
+ val tmp0_rcvr = <this>
+ %composer.endRestartGroup()?.updateScope { %composer: Composer?, %force: Int ->
+ tmp0_rcvr.compute(it, %composer, updateChangedFlags(%changed or 0b0001))
+ }
}
}
- }
- <no name provided>())
+ <no name provided>()
+ })
}
"""
)
@@ -247,33 +251,35 @@
static val %stable: Int = 0
}
fun test() {
- Repro().test(class <no name provided> : Consumer<Any?> {
- @Composable
- override fun consume(string: String, %composer: Composer?, %changed: Int) {
- %composer = %composer.startRestartGroup(<>)
- sourceInformation(%composer, "C(consume):Test.kt")
- val %dirty = %changed
- if (%changed and 0b1110 === 0) {
- %dirty = %dirty or if (%composer.changed(string)) 0b0100 else 0b0010
- }
- if (%dirty and 0b1011 !== 0b0010 || !%composer.skipping) {
- if (isTraceInProgress()) {
- traceEventStart(<>, %dirty, -1, <>)
+ Repro().test(<block>{
+ class <no name provided> : Consumer<Any?> {
+ @Composable
+ override fun consume(string: String, %composer: Composer?, %changed: Int) {
+ %composer = %composer.startRestartGroup(<>)
+ sourceInformation(%composer, "C(consume):Test.kt")
+ val %dirty = %changed
+ if (%changed and 0b1110 === 0) {
+ %dirty = %dirty or if (%composer.changed(string)) 0b0100 else 0b0010
}
- println(string)
- if (isTraceInProgress()) {
- traceEventEnd()
+ if (%dirty and 0b1011 !== 0b0010 || !%composer.skipping) {
+ if (isTraceInProgress()) {
+ traceEventStart(<>, %dirty, -1, <>)
+ }
+ println(string)
+ if (isTraceInProgress()) {
+ traceEventEnd()
+ }
+ } else {
+ %composer.skipToGroupEnd()
}
- } else {
- %composer.skipToGroupEnd()
- }
- val tmp0_rcvr = <this>
- %composer.endRestartGroup()?.updateScope { %composer: Composer?, %force: Int ->
- tmp0_rcvr.consume(string, %composer, updateChangedFlags(%changed or 0b0001))
+ val tmp0_rcvr = <this>
+ %composer.endRestartGroup()?.updateScope { %composer: Composer?, %force: Int ->
+ tmp0_rcvr.consume(string, %composer, updateChangedFlags(%changed or 0b0001))
+ }
}
}
- }
- <no name provided>())
+ <no name provided>()
+ })
}
"""
)
@@ -418,29 +424,31 @@
if (isTraceInProgress()) {
traceEventStart(<>, %changed, -1, <>)
}
- Example(class <no name provided> : Consumer {
- @Composable
- override fun invoke(<unused var>: Int, %composer: Composer?, %changed: Int) {
- %composer = %composer.startRestartGroup(<>)
- sourceInformation(%composer, "C(invoke):Test.kt")
- if (%changed and 0b0001 !== 0 || !%composer.skipping) {
- if (isTraceInProgress()) {
- traceEventStart(<>, %changed, -1, <>)
+ Example(<block>{
+ class <no name provided> : Consumer {
+ @Composable
+ override fun invoke(<unused var>: Int, %composer: Composer?, %changed: Int) {
+ %composer = %composer.startRestartGroup(<>)
+ sourceInformation(%composer, "C(invoke):Test.kt")
+ if (%changed and 0b0001 !== 0 || !%composer.skipping) {
+ if (isTraceInProgress()) {
+ traceEventStart(<>, %changed, -1, <>)
+ }
+ Unit
+ if (isTraceInProgress()) {
+ traceEventEnd()
+ }
+ } else {
+ %composer.skipToGroupEnd()
}
- Unit
- if (isTraceInProgress()) {
- traceEventEnd()
+ val tmp0_rcvr = <this>
+ %composer.endRestartGroup()?.updateScope { %composer: Composer?, %force: Int ->
+ tmp0_rcvr.invoke(<unused var>, %composer, updateChangedFlags(%changed or 0b0001))
}
- } else {
- %composer.skipToGroupEnd()
- }
- val tmp0_rcvr = <this>
- %composer.endRestartGroup()?.updateScope { %composer: Composer?, %force: Int ->
- tmp0_rcvr.invoke(<unused var>, %composer, updateChangedFlags(%changed or 0b0001))
}
}
- }
- <no name provided>(), %composer, 0)
+ <no name provided>()
+ }, %composer, 0)
if (isTraceInProgress()) {
traceEventEnd()
}
diff --git a/compose/compiler/compiler-hosted/integration-tests/src/test/java/androidx/compose/compiler/plugins/kotlin/RememberIntrinsicTransformTests.kt b/compose/compiler/compiler-hosted/integration-tests/src/test/java/androidx/compose/compiler/plugins/kotlin/RememberIntrinsicTransformTests.kt
index 606659a..7088bdb 100644
--- a/compose/compiler/compiler-hosted/integration-tests/src/test/java/androidx/compose/compiler/plugins/kotlin/RememberIntrinsicTransformTests.kt
+++ b/compose/compiler/compiler-hosted/integration-tests/src/test/java/androidx/compose/compiler/plugins/kotlin/RememberIntrinsicTransformTests.kt
@@ -82,24 +82,35 @@
@NonRestartableComposable
fun app(x: Boolean, %composer: Composer?, %changed: Int) {
%composer.startReplaceableGroup(<>)
- sourceInformation(%composer, "C(app)<rememb...>:Test.kt")
+ sourceInformation(%composer, "C(app):Test.kt")
if (isTraceInProgress()) {
traceEventStart(<>, %changed, -1, <>)
}
- val a = %composer.startReplaceableGroup(<>)
- sourceInformation(%composer, "<rememb...>")
- val tmp0_group = if (x) {
- remember({
- 1
- }, %composer, 0)
- } else {
- 2
+ val a = <block>{
+ %composer.startReplaceableGroup(<>)
+ val tmp1_group = if (x) {
+ %composer.startReplaceableGroup(<>)
+ sourceInformation(%composer, "C(app):Test.kt")
+ val tmp0_group = %composer.cache(false) {
+ 1
+ }
+ %composer.endReplaceableGroup()
+ tmp0_group
+ } else {
+ 2
+ }
+ %composer.endReplaceableGroup()
+ tmp1_group
}
- %composer.endReplaceableGroup()
- tmp0_group
- val b = remember({
- 2
- }, %composer, 0)
+ val b = <block>{
+ %composer.startReplaceableGroup(<>)
+ sourceInformation(%composer, "C(app):Test.kt")
+ val tmp2_group = %composer.cache(false) {
+ 2
+ }
+ %composer.endReplaceableGroup()
+ tmp2_group
+ }
if (isTraceInProgress()) {
traceEventEnd()
}
@@ -139,8 +150,14 @@
if (isTraceInProgress()) {
traceEventStart(<>, %changed, -1, <>)
}
- val deferred = %composer.cache(%changed and 0b1110 xor 0b0110 > 4 && %composer.changed(key) || %changed and 0b0110 === 0b0100 or %changed and 0b01110000 xor 0b00110000 > 32 && %composer.changed(pendingResource) || %changed and 0b00110000 === 0b00100000 or %changed and 0b001110000000 xor 0b000110000000 > 256 && %composer.changed(failedResource) || %changed and 0b000110000000 === 0b000100000000) {
- 123
+ val deferred = <block>{
+ %composer.startReplaceableGroup(<>)
+ sourceInformation(%composer, "C(loadResourceInternal)P(1,2):Test.kt")
+ val tmp1_group = %composer.cache(%changed and 0b1110 xor 0b0110 > 4 && %composer.changed(key) || %changed and 0b0110 === 0b0100 or %changed and 0b01110000 xor 0b00110000 > 32 && %composer.changed(pendingResource) || %changed and 0b00110000 === 0b00100000 or %changed and 0b001110000000 xor 0b000110000000 > 256 && %composer.changed(failedResource) || %changed and 0b000110000000 === 0b000100000000) {
+ 123
+ }
+ %composer.endReplaceableGroup()
+ tmp1_group
}
val tmp0 = deferred > 10
if (isTraceInProgress()) {
@@ -186,9 +203,13 @@
if (isTraceInProgress()) {
traceEventStart(<>, %dirty, -1, <>)
}
- %composer.cache(%dirty and 0b1110 === 0b0100) {
+ %composer.startReplaceableGroup(<>)
+ sourceInformation(%composer, "C(test1):Test.kt")
+ val tmp0_group = %composer.cache(%dirty and 0b1110 === 0b0100) {
1
}
+ %composer.endReplaceableGroup()
+ tmp0_group
if (isTraceInProgress()) {
traceEventEnd()
}
@@ -206,9 +227,13 @@
if (isTraceInProgress()) {
traceEventStart(<>, %changed, -1, <>)
}
- %composer.cache(%composer.changed(x)) {
+ %composer.startReplaceableGroup(<>)
+ sourceInformation(%composer, "C(test2):Test.kt")
+ val tmp0_group = %composer.cache(%composer.changed(x)) {
1
}
+ %composer.endReplaceableGroup()
+ tmp0_group
if (isTraceInProgress()) {
traceEventEnd()
}
@@ -228,9 +253,13 @@
if (isTraceInProgress()) {
traceEventStart(<>, %dirty, -1, <>)
}
- %composer.cache(%dirty and 0b1110 === 0b0100 || %dirty and 0b1000 !== 0 && %composer.changed(x)) {
+ %composer.startReplaceableGroup(<>)
+ sourceInformation(%composer, "C(test3):Test.kt")
+ val tmp0_group = %composer.cache(%dirty and 0b1110 === 0b0100 || %dirty and 0b1000 !== 0 && %composer.changed(x)) {
1
}
+ %composer.endReplaceableGroup()
+ tmp0_group
if (isTraceInProgress()) {
traceEventEnd()
}
@@ -279,9 +308,13 @@
if (isTraceInProgress()) {
traceEventStart(<>, %changed, -1, <>)
}
- %composer.cache(%changed and 0b1110 xor 0b0110 > 4 && %composer.changed(x) || %changed and 0b0110 === 0b0100) {
+ %composer.startReplaceableGroup(<>)
+ sourceInformation(%composer, "C(test1):Test.kt")
+ val tmp0_group = %composer.cache(%changed and 0b1110 xor 0b0110 > 4 && %composer.changed(x) || %changed and 0b0110 === 0b0100) {
1
}
+ %composer.endReplaceableGroup()
+ tmp0_group
if (isTraceInProgress()) {
traceEventEnd()
}
@@ -295,9 +328,13 @@
if (isTraceInProgress()) {
traceEventStart(<>, %changed, -1, <>)
}
- %composer.cache(%composer.changed(x)) {
+ %composer.startReplaceableGroup(<>)
+ sourceInformation(%composer, "C(test2):Test.kt")
+ val tmp0_group = %composer.cache(%composer.changed(x)) {
1
}
+ %composer.endReplaceableGroup()
+ tmp0_group
if (isTraceInProgress()) {
traceEventEnd()
}
@@ -311,9 +348,13 @@
if (isTraceInProgress()) {
traceEventStart(<>, %changed, -1, <>)
}
- %composer.cache(%changed and 0b1110 xor 0b0110 > 4 && %composer.changed(x) || %changed and 0b0110 === 0b0100) {
+ %composer.startReplaceableGroup(<>)
+ sourceInformation(%composer, "C(test3):Test.kt")
+ val tmp0_group = %composer.cache(%changed and 0b1110 xor 0b0110 > 4 && %composer.changed(x) || %changed and 0b0110 === 0b0100) {
1
}
+ %composer.endReplaceableGroup()
+ tmp0_group
if (isTraceInProgress()) {
traceEventEnd()
}
@@ -339,8 +380,14 @@
if (isTraceInProgress()) {
traceEventStart(<>, %changed, -1, <>)
}
- val tmp0 = %composer.cache(%changed and 0b1110 xor 0b0110 > 4 && %composer.changed(a) || %changed and 0b0110 === 0b0100 or %changed and 0b01110000 xor 0b00110000 > 32 && %composer.changed(b) || %changed and 0b00110000 === 0b00100000) {
- Foo(a, b)
+ val tmp0 = <block>{
+ %composer.startReplaceableGroup(<>)
+ sourceInformation(%composer, "C(rememberFoo):Test.kt")
+ val tmp1_group = %composer.cache(%changed and 0b1110 xor 0b0110 > 4 && %composer.changed(a) || %changed and 0b0110 === 0b0100 or %changed and 0b01110000 xor 0b00110000 > 32 && %composer.changed(b) || %changed and 0b00110000 === 0b00100000) {
+ Foo(a, b)
+ }
+ %composer.endReplaceableGroup()
+ tmp1_group
}
if (isTraceInProgress()) {
traceEventEnd()
@@ -370,21 +417,39 @@
@Composable
fun Test(%composer: Composer?, %changed: Int) {
%composer = %composer.startRestartGroup(<>)
- sourceInformation(%composer, "C(Test)<A()>,<rememb...>:Test.kt")
+ sourceInformation(%composer, "C(Test):Test.kt")
if (%changed !== 0 || !%composer.skipping) {
if (isTraceInProgress()) {
traceEventStart(<>, %changed, -1, <>)
}
- val foo = %composer.cache(false) {
- Foo()
+ val foo = <block>{
+ %composer.startReplaceableGroup(<>)
+ sourceInformation(%composer, "C(Test)<A()>:Test.kt")
+ val tmp0_group = %composer.cache(false) {
+ Foo()
+ }
+ %composer.endReplaceableGroup()
+ tmp0_group
}
- val bar = %composer.cache(false) {
- Foo()
+ val bar = <block>{
+ %composer.startReplaceableGroup(<>)
+ sourceInformation(%composer, "C(Test):Test.kt")
+ val tmp1_group = %composer.cache(false) {
+ Foo()
+ }
+ %composer.endReplaceableGroup()
+ tmp1_group
}
A(%composer, 0)
- val bam = remember({
- Foo()
- }, %composer, 0)
+ val bam = <block>{
+ %composer.startReplaceableGroup(<>)
+ sourceInformation(%composer, "C(Test):Test.kt")
+ val tmp2_group = %composer.cache(false) {
+ Foo()
+ }
+ %composer.endReplaceableGroup()
+ tmp2_group
+ }
if (isTraceInProgress()) {
traceEventEnd()
}
@@ -423,8 +488,14 @@
}
val a = someInt()
val b = someInt()
- val foo = %composer.cache(%composer.changed(a) or %composer.changed(b)) {
- Foo(a, b)
+ val foo = <block>{
+ %composer.startReplaceableGroup(<>)
+ sourceInformation(%composer, "C(Test):Test.kt")
+ val tmp0_group = %composer.cache(%composer.changed(a) or %composer.changed(b)) {
+ Foo(a, b)
+ }
+ %composer.endReplaceableGroup()
+ tmp0_group
}
if (isTraceInProgress()) {
traceEventEnd()
@@ -455,14 +526,20 @@
@Composable
fun Test(%composer: Composer?, %changed: Int) {
%composer = %composer.startRestartGroup(<>)
- sourceInformation(%composer, "C(Test)<CInt()...>,<rememb...>:Test.kt")
+ sourceInformation(%composer, "C(Test):Test.kt")
if (%changed !== 0 || !%composer.skipping) {
if (isTraceInProgress()) {
traceEventStart(<>, %changed, -1, <>)
}
- val foo = remember(CInt(%composer, 0), {
- Foo()
- }, %composer, 0)
+ val foo = <block>{
+ %composer.startReplaceableGroup(<>)
+ sourceInformation(%composer, "C(Test)<CInt()...>:Test.kt")
+ val tmp0_group = %composer.cache(%composer.changed(CInt(%composer, 0))) {
+ Foo()
+ }
+ %composer.endReplaceableGroup()
+ tmp0_group
+ }
if (isTraceInProgress()) {
traceEventEnd()
}
@@ -496,15 +573,21 @@
@Composable
fun Test(%composer: Composer?, %changed: Int) {
%composer = %composer.startRestartGroup(<>)
- sourceInformation(%composer, "C(Test)<curren...>,<rememb...>:Test.kt")
+ sourceInformation(%composer, "C(Test):Test.kt")
if (%changed !== 0 || !%composer.skipping) {
if (isTraceInProgress()) {
traceEventStart(<>, %changed, -1, <>)
}
val bar = compositionLocalBar.<get-current>(%composer, 0b0110)
- val foo = remember(bar, {
- Foo()
- }, %composer, 0)
+ val foo = <block>{
+ %composer.startReplaceableGroup(<>)
+ sourceInformation(%composer, "C(Test)<curren...>:Test.kt")
+ val tmp0_group = %composer.cache(%composer.changed(bar)) {
+ Foo()
+ }
+ %composer.endReplaceableGroup()
+ tmp0_group
+ }
if (isTraceInProgress()) {
traceEventEnd()
}
@@ -537,14 +620,20 @@
@Composable
fun Test(%composer: Composer?, %changed: Int) {
%composer = %composer.startRestartGroup(<>)
- sourceInformation(%composer, "C(Test)<curren...>,<rememb...>:Test.kt")
+ sourceInformation(%composer, "C(Test):Test.kt")
if (%changed !== 0 || !%composer.skipping) {
if (isTraceInProgress()) {
traceEventStart(<>, %changed, -1, <>)
}
- val foo = remember(compositionLocalBar.<get-current>(%composer, 0b0110), {
- Foo()
- }, %composer, 0)
+ val foo = <block>{
+ %composer.startReplaceableGroup(<>)
+ sourceInformation(%composer, "C(Test)<curren...>:Test.kt")
+ val tmp0_group = %composer.cache(%composer.changed(compositionLocalBar.<get-current>(%composer, 0b0110))) {
+ Foo()
+ }
+ %composer.endReplaceableGroup()
+ tmp0_group
+ }
if (isTraceInProgress()) {
traceEventEnd()
}
@@ -575,15 +664,21 @@
@Composable
fun Test(%composer: Composer?, %changed: Int) {
%composer = %composer.startRestartGroup(<>)
- sourceInformation(%composer, "C(Test)<A()>,<rememb...>:Test.kt")
+ sourceInformation(%composer, "C(Test):Test.kt")
if (%changed !== 0 || !%composer.skipping) {
if (isTraceInProgress()) {
traceEventStart(<>, %changed, -1, <>)
}
A(%composer, 0)
- val foo = remember({
- Foo()
- }, %composer, 0)
+ val foo = <block>{
+ %composer.startReplaceableGroup(<>)
+ sourceInformation(%composer, "C(Test)<A()>:Test.kt")
+ val tmp0_group = %composer.cache(false) {
+ Foo()
+ }
+ %composer.endReplaceableGroup()
+ tmp0_group
+ }
if (isTraceInProgress()) {
traceEventEnd()
}
@@ -616,7 +711,7 @@
@Composable
fun Test(condition: Boolean, %composer: Composer?, %changed: Int) {
%composer = %composer.startRestartGroup(<>)
- sourceInformation(%composer, "C(Test)<A()>,<rememb...>:Test.kt")
+ sourceInformation(%composer, "C(Test):Test.kt")
val %dirty = %changed
if (%changed and 0b1110 === 0) {
%dirty = %dirty or if (%composer.changed(condition)) 0b0100 else 0b0010
@@ -627,9 +722,15 @@
}
A(%composer, 0)
if (condition) {
- val foo = remember({
- Foo()
- }, %composer, 0)
+ val foo = <block>{
+ %composer.startReplaceableGroup(<>)
+ sourceInformation(%composer, "C(Test)<A()>:Test.kt")
+ val tmp0_group = %composer.cache(false) {
+ Foo()
+ }
+ %composer.endReplaceableGroup()
+ tmp0_group
+ }
}
if (isTraceInProgress()) {
traceEventEnd()
@@ -663,7 +764,7 @@
@Composable
fun Test(condition: Boolean, %composer: Composer?, %changed: Int) {
%composer = %composer.startRestartGroup(<>)
- sourceInformation(%composer, "C(Test)<A()>,<rememb...>:Test.kt")
+ sourceInformation(%composer, "C(Test):Test.kt")
val %dirty = %changed
if (%changed and 0b1110 === 0) {
%dirty = %dirty or if (%composer.changed(condition)) 0b0100 else 0b0010
@@ -674,9 +775,15 @@
}
if (condition) {
A(%composer, 0)
- val foo = remember({
- Foo()
- }, %composer, 0)
+ val foo = <block>{
+ %composer.startReplaceableGroup(<>)
+ sourceInformation(%composer, "C(Test)<A()>:Test.kt")
+ val tmp0_group = %composer.cache(false) {
+ Foo()
+ }
+ %composer.endReplaceableGroup()
+ tmp0_group
+ }
}
if (isTraceInProgress()) {
traceEventEnd()
@@ -710,16 +817,22 @@
@Composable
fun Test(items: List<Int>, %composer: Composer?, %changed: Int) {
%composer = %composer.startRestartGroup(<>)
- sourceInformation(%composer, "C(Test)*<rememb...>:Test.kt")
+ sourceInformation(%composer, "C(Test):Test.kt")
if (isTraceInProgress()) {
traceEventStart(<>, %changed, -1, <>)
}
val <iterator> = items.iterator()
while (<iterator>.hasNext()) {
val item = <iterator>.next()
- val foo = remember({
- Foo()
- }, %composer, 0)
+ val foo = <block>{
+ %composer.startReplaceableGroup(<>)
+ sourceInformation(%composer, "C(Test):Test.kt")
+ val tmp0_group = %composer.cache(false) {
+ Foo()
+ }
+ %composer.endReplaceableGroup()
+ tmp0_group
+ }
print(foo)
print(item)
}
@@ -754,16 +867,22 @@
@Composable
fun Test(items: List<Int>, %composer: Composer?, %changed: Int) {
%composer = %composer.startRestartGroup(<>)
- sourceInformation(%composer, "C(Test)*<rememb...>,<A()>:Test.kt")
+ sourceInformation(%composer, "C(Test):Test.kt")
if (isTraceInProgress()) {
traceEventStart(<>, %changed, -1, <>)
}
val <iterator> = items.iterator()
while (<iterator>.hasNext()) {
val item = <iterator>.next()
- val foo = remember({
- Foo()
- }, %composer, 0)
+ val foo = <block>{
+ %composer.startReplaceableGroup(<>)
+ sourceInformation(%composer, "C(Test)*<A()>:Test.kt")
+ val tmp0_group = %composer.cache(false) {
+ Foo()
+ }
+ %composer.endReplaceableGroup()
+ tmp0_group
+ }
A(%composer, 0)
print(foo)
print(item)
@@ -798,8 +917,14 @@
if (isTraceInProgress()) {
traceEventStart(<>, %changed, -1, <>)
}
- val foo = %composer.cache(false) {
- Foo()
+ val foo = <block>{
+ %composer.startReplaceableGroup(<>)
+ sourceInformation(%composer, "C(Test):Test.kt")
+ val tmp0_group = %composer.cache(false) {
+ Foo()
+ }
+ %composer.endReplaceableGroup()
+ tmp0_group
}
used(items)
if (isTraceInProgress()) {
@@ -846,8 +971,14 @@
if (isTraceInProgress()) {
traceEventStart(<>, %dirty, -1, <>)
}
- val foo = %composer.cache(%dirty and 0b1110 === 0b0100 or %dirty and 0b01110000 === 0b00100000 or %dirty and 0b001110000000 === 0b000100000000 or %dirty and 0b0001110000000000 === 0b100000000000) {
- Foo()
+ val foo = <block>{
+ %composer.startReplaceableGroup(<>)
+ sourceInformation(%composer, "C(Test):Test.kt")
+ val tmp0_group = %composer.cache(%dirty and 0b1110 === 0b0100 or %dirty and 0b01110000 === 0b00100000 or %dirty and 0b001110000000 === 0b000100000000 or %dirty and 0b0001110000000000 === 0b100000000000) {
+ Foo()
+ }
+ %composer.endReplaceableGroup()
+ tmp0_group
}
if (isTraceInProgress()) {
traceEventEnd()
@@ -922,8 +1053,14 @@
traceEventStart(<>, %dirty, -1, <>)
}
val a = InlineInt(123)
- val foo = %composer.cache(%dirty and 0b1110 === 0b0100) {
- Foo()
+ val foo = <block>{
+ %composer.startReplaceableGroup(<>)
+ sourceInformation(%composer, "C(Test)P(0:InlineInt):Test.kt")
+ val tmp0_group = %composer.cache(%dirty and 0b1110 === 0b0100) {
+ Foo()
+ }
+ %composer.endReplaceableGroup()
+ tmp0_group
}
if (isTraceInProgress()) {
traceEventEnd()
@@ -966,13 +1103,25 @@
}
val a = someInt()
val b = someInt()
- val foo = %composer.cache(%composer.changed(a) or %composer.changed(b)) {
- Foo(a, b)
+ val foo = <block>{
+ %composer.startReplaceableGroup(<>)
+ sourceInformation(%composer, "C(Test):Test.kt")
+ val tmp0_group = %composer.cache(%composer.changed(a) or %composer.changed(b)) {
+ Foo(a, b)
+ }
+ %composer.endReplaceableGroup()
+ tmp0_group
}
val c = someInt()
val d = someInt()
- val bar = %composer.cache(%composer.changed(c) or %composer.changed(d)) {
- Foo(c, d)
+ val bar = <block>{
+ %composer.startReplaceableGroup(<>)
+ sourceInformation(%composer, "C(Test):Test.kt")
+ val tmp1_group = %composer.cache(%composer.changed(c) or %composer.changed(d)) {
+ Foo(c, d)
+ }
+ %composer.endReplaceableGroup()
+ tmp1_group
}
if (isTraceInProgress()) {
traceEventEnd()
@@ -1014,8 +1163,14 @@
traceEventStart(<>, %dirty, -1, <>)
}
val b = someInt()
- val foo = %composer.cache(%dirty and 0b1110 === 0b0100 or %composer.changed(b)) {
- Foo(a, b)
+ val foo = <block>{
+ %composer.startReplaceableGroup(<>)
+ sourceInformation(%composer, "C(Test):Test.kt")
+ val tmp0_group = %composer.cache(%dirty and 0b1110 === 0b0100 or %composer.changed(b)) {
+ Foo(a, b)
+ }
+ %composer.endReplaceableGroup()
+ tmp0_group
}
if (isTraceInProgress()) {
traceEventEnd()
@@ -1052,8 +1207,14 @@
traceEventStart(<>, %changed, -1, <>)
}
val b = someInt()
- val tmp0 = %composer.cache(%changed and 0b1110 xor 0b0110 > 4 && %composer.changed(a) || %changed and 0b0110 === 0b0100 or %composer.changed(b)) {
- Foo(a, b)
+ val tmp0 = <block>{
+ %composer.startReplaceableGroup(<>)
+ sourceInformation(%composer, "C(Test):Test.kt")
+ val tmp1_group = %composer.cache(%changed and 0b1110 xor 0b0110 > 4 && %composer.changed(a) || %changed and 0b0110 === 0b0100 or %composer.changed(b)) {
+ Foo(a, b)
+ }
+ %composer.endReplaceableGroup()
+ tmp1_group
}
if (isTraceInProgress()) {
traceEventEnd()
@@ -1086,12 +1247,17 @@
if (isTraceInProgress()) {
traceEventStart(<>, %dirty, -1, <>)
}
- used(%composer.cache(%dirty and 0b1110 === 0b0100) {
- {
- a
+ used(<block>{
+ %composer.startReplaceableGroup(<>)
+ sourceInformation(%composer, "C(Test):Test.kt")
+ val tmp0_group = %composer.cache(%dirty and 0b1110 === 0b0100) {
+ {
+ a
+ }
}
- }
- )
+ %composer.endReplaceableGroup()
+ tmp0_group
+ })
if (isTraceInProgress()) {
traceEventEnd()
}
@@ -1129,7 +1295,13 @@
if (isTraceInProgress()) {
traceEventStart(<>, %dirty, -1, <>)
}
- used(%composer.cache(%dirty and 0b1110 === 0b0100, effect))
+ used(<block>{
+ %composer.startReplaceableGroup(<>)
+ sourceInformation(%composer, "C(Test):Test.kt")
+ val tmp0_group = %composer.cache(%dirty and 0b1110 === 0b0100, effect)
+ %composer.endReplaceableGroup()
+ tmp0_group
+ })
if (isTraceInProgress()) {
traceEventEnd()
}
@@ -1167,10 +1339,15 @@
if (isTraceInProgress()) {
traceEventStart(<>, %dirty, -1, <>)
}
- used(%composer.cache(%dirty and 0b1110 === 0b0100) {
- effect()
- }
- )
+ used(<block>{
+ %composer.startReplaceableGroup(<>)
+ sourceInformation(%composer, "C(Test):Test.kt")
+ val tmp0_group = %composer.cache(%dirty and 0b1110 === 0b0100) {
+ effect()
+ }
+ %composer.endReplaceableGroup()
+ tmp0_group
+ })
if (isTraceInProgress()) {
traceEventEnd()
}
@@ -1207,7 +1384,13 @@
if (isTraceInProgress()) {
traceEventStart(<>, %dirty, -1, <>)
}
- used(%composer.cache(%dirty and 0b1110 === 0b0100, a::value))
+ used(<block>{
+ %composer.startReplaceableGroup(<>)
+ sourceInformation(%composer, "C(Test):Test.kt")
+ val tmp0_group = %composer.cache(%dirty and 0b1110 === 0b0100, a::value)
+ %composer.endReplaceableGroup()
+ tmp0_group
+ })
if (isTraceInProgress()) {
traceEventEnd()
}
@@ -1239,7 +1422,7 @@
@Composable
fun Test(a: Int, %composer: Composer?, %changed: Int, %default: Int) {
%composer = %composer.startRestartGroup(<>)
- sourceInformation(%composer, "C(Test)<rememb...>:Test.kt")
+ sourceInformation(%composer, "C(Test):Test.kt")
val %dirty = %changed
if (%changed and 0b1110 === 0) {
%dirty = %dirty or if (%default and 0b0001 === 0 && %composer.changed(a)) 0b0100 else 0b0010
@@ -1261,9 +1444,15 @@
if (isTraceInProgress()) {
traceEventStart(<>, %dirty, -1, <>)
}
- val foo = remember({
- Foo()
- }, %composer, 0)
+ val foo = <block>{
+ %composer.startReplaceableGroup(<>)
+ sourceInformation(%composer, "C(Test):Test.kt")
+ val tmp0_group = %composer.cache(false) {
+ Foo()
+ }
+ %composer.endReplaceableGroup()
+ tmp0_group
+ }
used(foo)
used(a)
if (isTraceInProgress()) {
@@ -1294,17 +1483,31 @@
%composer = %composer.startRestartGroup(<>)
sourceInformation(%composer, "C(Test):Test.kt")
val %dirty = %changed
- if (%default and 0b0001 !== 0) {
- %dirty = %dirty or 0b0110
- } else if (%changed and 0b1110 === 0) {
- %dirty = %dirty or if (%composer.changed(a)) 0b0100 else 0b0010
+ if (%changed and 0b1110 === 0) {
+ %dirty = %dirty or if (%default and 0b0001 === 0 && %composer.changed(a)) 0b0100 else 0b0010
}
if (%dirty and 0b1011 !== 0b0010 || !%composer.skipping) {
- if (%default and 0b0001 !== 0) {
- a = %composer.cache(false) {
- 0
+ %composer.startDefaults()
+ if (%changed and 0b0001 === 0 || %composer.defaultsInvalid) {
+ if (%default and 0b0001 !== 0) {
+ a = <block>{
+ %composer.startReplaceableGroup(<>)
+ sourceInformation(%composer, "C(Test):Test.kt")
+ val tmp0_group = %composer.cache(false) {
+ 0
+ }
+ %composer.endReplaceableGroup()
+ tmp0_group
+ }
+ %dirty = %dirty and 0b1110.inv()
+ }
+ } else {
+ %composer.skipToGroupEnd()
+ if (%default and 0b0001 !== 0) {
+ %dirty = %dirty and 0b1110.inv()
}
}
+ %composer.endDefaults()
if (isTraceInProgress()) {
traceEventStart(<>, %dirty, -1, <>)
}
@@ -1340,43 +1543,59 @@
@Composable
fun Test(a: Int, b: Int, c: Int, %composer: Composer?, %changed: Int, %default: Int) {
%composer = %composer.startRestartGroup(<>)
- sourceInformation(%composer, "C(Test)<SomeCo...>,<rememb...>:Test.kt")
+ sourceInformation(%composer, "C(Test):Test.kt")
val %dirty = %changed
- if (%default and 0b0001 !== 0) {
- %dirty = %dirty or 0b0110
- } else if (%changed and 0b1110 === 0) {
- %dirty = %dirty or if (%composer.changed(a)) 0b0100 else 0b0010
+ if (%changed and 0b1110 === 0) {
+ %dirty = %dirty or if (%default and 0b0001 === 0 && %composer.changed(a)) 0b0100 else 0b0010
}
if (%changed and 0b01110000 === 0) {
%dirty = %dirty or if (%default and 0b0010 === 0 && %composer.changed(b)) 0b00100000 else 0b00010000
}
- if (%default and 0b0100 !== 0) {
- %dirty = %dirty or 0b000110000000
- } else if (%changed and 0b001110000000 === 0) {
- %dirty = %dirty or if (%composer.changed(c)) 0b000100000000 else 0b10000000
+ if (%changed and 0b001110000000 === 0) {
+ %dirty = %dirty or if (%default and 0b0100 === 0 && %composer.changed(c)) 0b000100000000 else 0b10000000
}
if (%dirty and 0b001011011011 !== 0b10010010 || !%composer.skipping) {
%composer.startDefaults()
if (%changed and 0b0001 === 0 || %composer.defaultsInvalid) {
if (%default and 0b0001 !== 0) {
- a = %composer.cache(false) {
- 0
+ a = <block>{
+ %composer.startReplaceableGroup(<>)
+ sourceInformation(%composer, "C(Test)<SomeCo...>:Test.kt")
+ val tmp0_group = %composer.cache(false) {
+ 0
+ }
+ %composer.endReplaceableGroup()
+ tmp0_group
}
+ %dirty = %dirty and 0b1110.inv()
}
if (%default and 0b0010 !== 0) {
b = SomeComposable(%composer, 0)
%dirty = %dirty and 0b01110000.inv()
}
if (%default and 0b0100 !== 0) {
- c = remember({
- 0
- }, %composer, 0)
+ c = <block>{
+ %composer.startReplaceableGroup(<>)
+ sourceInformation(%composer, "C(Test):Test.kt")
+ val tmp1_group = %composer.cache(false) {
+ 0
+ }
+ %composer.endReplaceableGroup()
+ tmp1_group
+ }
+ %dirty = %dirty and 0b001110000000.inv()
}
} else {
%composer.skipToGroupEnd()
+ if (%default and 0b0001 !== 0) {
+ %dirty = %dirty and 0b1110.inv()
+ }
if (%default and 0b0010 !== 0) {
%dirty = %dirty and 0b01110000.inv()
}
+ if (%default and 0b0100 !== 0) {
+ %dirty = %dirty and 0b001110000000.inv()
+ }
}
%composer.endDefaults()
if (isTraceInProgress()) {
@@ -1427,7 +1646,7 @@
@Composable
fun Test(a: Boolean, visible: Boolean, onDismiss: Function0<Unit>, %composer: Composer?, %changed: Int) {
%composer = %composer.startRestartGroup(<>)
- sourceInformation(%composer, "C(Test)P(!1,2)<someCo...>,<{>:Test.kt")
+ sourceInformation(%composer, "C(Test)P(!1,2):Test.kt")
val %dirty = %changed
if (%changed and 0b1110 === 0) {
%dirty = %dirty or if (%composer.changed(a)) 0b0100 else 0b0010
@@ -1446,19 +1665,26 @@
val a = someComposableValue(%composer, 0)
used(a)
val m = Modifier()
- val dismissModifier =
- val tmp0_group = if (visible) {
- m.pointerInput(Unit, remember(onDismiss, {
- {
- detectTapGestures {
- onDismiss()
+ val dismissModifier = <block>{
+ val tmp1_group = if (visible) {
+ m.pointerInput(Unit, <block>{
+ %composer.startReplaceableGroup(<>)
+ sourceInformation(%composer, "C(Test)P(!1,2)<someCo...>:Test.kt")
+ val tmp0_group = %composer.cache(%dirty and 0b001110000000 === 0b000100000000) {
+ {
+ detectTapGestures {
+ onDismiss()
+ }
+ }
}
- }
- }, %composer, 0b1110 and %dirty shr 0b0110))
- } else {
- m
+ %composer.endReplaceableGroup()
+ tmp0_group
+ })
+ } else {
+ m
+ }
+ tmp1_group
}
- tmp0_group
used(dismissModifier)
}
if (isTraceInProgress()) {
@@ -1470,7 +1696,8 @@
%composer.endRestartGroup()?.updateScope { %composer: Composer?, %force: Int ->
Test(a, visible, onDismiss, %composer, updateChangedFlags(%changed or 0b0001))
}
- } """
+ }
+ """
)
@Test
@@ -1501,7 +1728,7 @@
@Composable
fun Test(a: Int, b: Foo?, c: Int, %composer: Composer?, %changed: Int, %default: Int) {
%composer = %composer.startRestartGroup(<>)
- sourceInformation(%composer, "C(Test)<used(s...>:Test.kt")
+ sourceInformation(%composer, "C(Test):Test.kt")
val %dirty = %changed
if (%default and 0b0001 !== 0) {
%dirty = %dirty or 0b0110
@@ -1531,8 +1758,14 @@
if (isTraceInProgress()) {
traceEventStart(<>, %dirty, -1, <>)
}
- val s = %composer.cache(%dirty and 0b1110 === 0b0100 or %dirty and 0b01110000 === 0b00100000 or %dirty and 0b001110000000 === 0b000100000000) {
- Any()
+ val s = <block>{
+ %composer.startReplaceableGroup(<>)
+ sourceInformation(%composer, "C(Test)<used(s...>:Test.kt")
+ val tmp0_group = %composer.cache(%dirty and 0b1110 === 0b0100 or %dirty and 0b01110000 === 0b00100000 or %dirty and 0b001110000000 === 0b000100000000) {
+ Any()
+ }
+ %composer.endReplaceableGroup()
+ tmp0_group
}
used(s, %composer, 0b1000)
if (isTraceInProgress()) {
@@ -1575,7 +1808,7 @@
@Composable
fun Test(a: Int, b: Foo?, c: Int, %composer: Composer?, %changed: Int, %default: Int) {
%composer = %composer.startRestartGroup(<>)
- sourceInformation(%composer, "C(Test)<rememb...>,<used(s...>:Test.kt")
+ sourceInformation(%composer, "C(Test):Test.kt")
val %dirty = %changed
if (%default and 0b0001 !== 0) {
%dirty = %dirty or 0b0110
@@ -1613,9 +1846,15 @@
if (isTraceInProgress()) {
traceEventStart(<>, %dirty, -1, <>)
}
- val s = remember(a, b, c, {
- Any()
- }, %composer, 0b1110 and %dirty or 0b01110000 and %dirty or 0b001110000000 and %dirty)
+ val s = <block>{
+ %composer.startReplaceableGroup(<>)
+ sourceInformation(%composer, "C(Test)<used(s...>:Test.kt")
+ val tmp0_group = %composer.cache(%dirty and 0b1110 === 0b0100 or %dirty and 0b01110000 === 0b00100000 or %dirty and 0b001110000000 === 0b000100000000) {
+ Any()
+ }
+ %composer.endReplaceableGroup()
+ tmp0_group
+ }
used(s, %composer, 0b1000)
if (isTraceInProgress()) {
traceEventEnd()
@@ -1647,7 +1886,7 @@
@Composable
fun Test(condition: Boolean, %composer: Composer?, %changed: Int) {
%composer = %composer.startRestartGroup(<>)
- sourceInformation(%composer, "C(Test)<rememb...>,<Text("...>:Test.kt")
+ sourceInformation(%composer, "C(Test):Test.kt")
val %dirty = %changed
if (%changed and 0b1110 === 0) {
%dirty = %dirty or if (%composer.changed(condition)) 0b0100 else 0b0010
@@ -1656,10 +1895,16 @@
if (isTraceInProgress()) {
traceEventStart(<>, %dirty, -1, <>)
}
- val value = %composer.cache(false) {
- mutableStateOf(
- value = false
- )
+ val value = <block>{
+ %composer.startReplaceableGroup(<>)
+ sourceInformation(%composer, "C(Test)<Text("...>:Test.kt")
+ val tmp0_group = %composer.cache(false) {
+ mutableStateOf(
+ value = false
+ )
+ }
+ %composer.endReplaceableGroup()
+ tmp0_group
}
if (!value.value && !condition) {
if (isTraceInProgress()) {
@@ -1670,11 +1915,17 @@
}
return
}
- val value2 = remember({
- mutableStateOf(
- value = false
- )
- }, %composer, 0)
+ val value2 = <block>{
+ %composer.startReplaceableGroup(<>)
+ sourceInformation(%composer, "C(Test):Test.kt")
+ val tmp1_group = %composer.cache(false) {
+ mutableStateOf(
+ value = false
+ )
+ }
+ %composer.endReplaceableGroup()
+ tmp1_group
+ }
Text("Text %{value.value}, %{value2.value}", %composer, 0)
if (isTraceInProgress()) {
traceEventEnd()
@@ -1718,7 +1969,7 @@
@Composable
fun Test(strings: Array<out String>, %composer: Composer?, %changed: Int) {
%composer = %composer.startRestartGroup(<>)
- sourceInformation(%composer, "C(Test)<rememb...>,<Text("...>:Test.kt")
+ sourceInformation(%composer, "C(Test):Test.kt")
val %dirty = %changed
%composer.startMovableGroup(<>, strings.size)
val <iterator> = strings.iterator()
@@ -1734,11 +1985,17 @@
if (isTraceInProgress()) {
traceEventStart(<>, %dirty, -1, <>)
}
- val show = remember({
- mutableStateOf(
- value = false
- )
- }, %composer, 0)
+ val show = <block>{
+ %composer.startReplaceableGroup(<>)
+ sourceInformation(%composer, "C(Test)<Text("...>:Test.kt")
+ val tmp0_group = %composer.cache(false) {
+ mutableStateOf(
+ value = false
+ )
+ }
+ %composer.endReplaceableGroup()
+ tmp0_group
+ }
if (show.value) {
Text("Showing", %composer, 0b0110)
}
@@ -1777,29 +2034,37 @@
val content: Function3<@[ParameterName(name = 'a')] SomeUnstableClass, Composer, Int, Unit> = ComposableSingletons%TestKt.lambda-1
internal object ComposableSingletons%TestKt {
val lambda-1: Function3<${if (useFir) "@[ParameterName(name = 'a')] " else ""}SomeUnstableClass, Composer, Int, Unit> = composableLambdaInstance(<>, false) { it: ${if (useFir) "@[ParameterName(name = 'a')] " else ""}SomeUnstableClass, %composer: Composer?, %changed: Int ->
- sourceInformation(%composer, "C<rememb...>:Test.kt")
+ sourceInformation(%composer, "C:Test.kt")
if (isTraceInProgress()) {
traceEventStart(<>, %changed, -1, <>)
}
%composer.startReplaceableGroup(<>)
- sourceInformation(%composer, "*<rememb...>")
val <iterator> = 0 until count.iterator()
while (<iterator>.hasNext()) {
val index = <iterator>.next()
- val i = remember({
- index
- }, %composer, 0)
+ val i = <block>{
+ %composer.startReplaceableGroup(<>)
+ val tmp0_group = %composer.cache(false) {
+ index
+ }
+ %composer.endReplaceableGroup()
+ tmp0_group
+ }
}
%composer.endReplaceableGroup()
- val a = remember({
- 1
- }, %composer, 0)
+ val a = <block>{
+ %composer.startReplaceableGroup(<>)
+ val tmp1_group = %composer.cache(false) {
+ 1
+ }
+ %composer.endReplaceableGroup()
+ tmp1_group
+ }
if (isTraceInProgress()) {
traceEventEnd()
}
}
}
-
"""
)
@@ -1824,16 +2089,21 @@
val content: Function3<@[ParameterName(name = 'a')] SomeUnstableClass, Composer, Int, Unit> = ComposableSingletons%TestKt.lambda-1
internal object ComposableSingletons%TestKt {
val lambda-1: Function3<${if (useFir) "@[ParameterName(name = 'a')] " else ""}SomeUnstableClass, Composer, Int, Unit> = composableLambdaInstance(<>, false) { it: ${if (useFir) "@[ParameterName(name = 'a')] " else ""}SomeUnstableClass, %composer: Composer?, %changed: Int ->
- sourceInformation(%composer, "C*<rememb...>:Test.kt")
+ sourceInformation(%composer, "C:Test.kt")
if (isTraceInProgress()) {
traceEventStart(<>, %changed, -1, <>)
}
val <iterator> = 0 until count.iterator()
while (<iterator>.hasNext()) {
val index = <iterator>.next()
- val i = remember({
- index
- }, %composer, 0)
+ val i = <block>{
+ %composer.startReplaceableGroup(<>)
+ val tmp0_group = %composer.cache(false) {
+ index
+ }
+ %composer.endReplaceableGroup()
+ tmp0_group
+ }
}
if (isTraceInProgress()) {
traceEventEnd()
diff --git a/compose/compiler/compiler-hosted/integration-tests/src/test/java/androidx/compose/compiler/plugins/kotlin/TargetAnnotationsTransformTests.kt b/compose/compiler/compiler-hosted/integration-tests/src/test/java/androidx/compose/compiler/plugins/kotlin/TargetAnnotationsTransformTests.kt
index 702c1f3..b898d94 100644
--- a/compose/compiler/compiler-hosted/integration-tests/src/test/java/androidx/compose/compiler/plugins/kotlin/TargetAnnotationsTransformTests.kt
+++ b/compose/compiler/compiler-hosted/integration-tests/src/test/java/androidx/compose/compiler/plugins/kotlin/TargetAnnotationsTransformTests.kt
@@ -452,54 +452,58 @@
if (isTraceInProgress()) {
traceEventStart(<>, %changed, -1, <>)
}
- OpenCustom(class <no name provided> : CustomComposable {
- @Composable
- @ComposableTarget(applier = "UI")
- override fun call(%composer: Composer?, %changed: Int) {
- %composer = %composer.startRestartGroup(<>)
- sourceInformation(%composer, "C(call)<Text("...>:Test.kt")
- if (%changed and 0b0001 !== 0 || !%composer.skipping) {
- if (isTraceInProgress()) {
- traceEventStart(<>, %changed, -1, <>)
+ OpenCustom(<block>{
+ class <no name provided> : CustomComposable {
+ @Composable
+ @ComposableTarget(applier = "UI")
+ override fun call(%composer: Composer?, %changed: Int) {
+ %composer = %composer.startRestartGroup(<>)
+ sourceInformation(%composer, "C(call)<Text("...>:Test.kt")
+ if (%changed and 0b0001 !== 0 || !%composer.skipping) {
+ if (isTraceInProgress()) {
+ traceEventStart(<>, %changed, -1, <>)
+ }
+ Text("Test", %composer, 0b0110)
+ if (isTraceInProgress()) {
+ traceEventEnd()
+ }
+ } else {
+ %composer.skipToGroupEnd()
}
- Text("Test", %composer, 0b0110)
- if (isTraceInProgress()) {
- traceEventEnd()
+ val tmp0_rcvr = <this>
+ %composer.endRestartGroup()?.updateScope { %composer: Composer?, %force: Int ->
+ tmp0_rcvr.call(%composer, updateChangedFlags(%changed or 0b0001))
}
- } else {
- %composer.skipToGroupEnd()
- }
- val tmp0_rcvr = <this>
- %composer.endRestartGroup()?.updateScope { %composer: Composer?, %force: Int ->
- tmp0_rcvr.call(%composer, updateChangedFlags(%changed or 0b0001))
}
}
- }
- <no name provided>(), %composer, 0)
- ClosedCustom(class <no name provided> : CustomComposable {
- @Composable
- @ComposableTarget(applier = "UI")
- override fun call(%composer: Composer?, %changed: Int) {
- %composer = %composer.startRestartGroup(<>)
- sourceInformation(%composer, "C(call)<Text("...>:Test.kt")
- if (%changed and 0b0001 !== 0 || !%composer.skipping) {
- if (isTraceInProgress()) {
- traceEventStart(<>, %changed, -1, <>)
+ <no name provided>()
+ }, %composer, 0)
+ ClosedCustom(<block>{
+ class <no name provided> : CustomComposable {
+ @Composable
+ @ComposableTarget(applier = "UI")
+ override fun call(%composer: Composer?, %changed: Int) {
+ %composer = %composer.startRestartGroup(<>)
+ sourceInformation(%composer, "C(call)<Text("...>:Test.kt")
+ if (%changed and 0b0001 !== 0 || !%composer.skipping) {
+ if (isTraceInProgress()) {
+ traceEventStart(<>, %changed, -1, <>)
+ }
+ Text("Test", %composer, 0b0110)
+ if (isTraceInProgress()) {
+ traceEventEnd()
+ }
+ } else {
+ %composer.skipToGroupEnd()
}
- Text("Test", %composer, 0b0110)
- if (isTraceInProgress()) {
- traceEventEnd()
+ val tmp0_rcvr = <this>
+ %composer.endRestartGroup()?.updateScope { %composer: Composer?, %force: Int ->
+ tmp0_rcvr.call(%composer, updateChangedFlags(%changed or 0b0001))
}
- } else {
- %composer.skipToGroupEnd()
- }
- val tmp0_rcvr = <this>
- %composer.endRestartGroup()?.updateScope { %composer: Composer?, %force: Int ->
- tmp0_rcvr.call(%composer, updateChangedFlags(%changed or 0b0001))
}
}
- }
- <no name provided>(), %composer, 0)
+ <no name provided>()
+ }, %composer, 0)
if (isTraceInProgress()) {
traceEventEnd()
}
diff --git a/compose/compiler/compiler-hosted/src/main/java/androidx/compose/compiler/plugins/kotlin/lower/ComposableFunctionBodyTransformer.kt b/compose/compiler/compiler-hosted/src/main/java/androidx/compose/compiler/plugins/kotlin/lower/ComposableFunctionBodyTransformer.kt
index 1b4c6c2f..6eba0bd 100644
--- a/compose/compiler/compiler-hosted/src/main/java/androidx/compose/compiler/plugins/kotlin/lower/ComposableFunctionBodyTransformer.kt
+++ b/compose/compiler/compiler-hosted/src/main/java/androidx/compose/compiler/plugins/kotlin/lower/ComposableFunctionBodyTransformer.kt
@@ -865,11 +865,6 @@
val emitTraceMarkers = traceEventMarkersEnabled && !scope.function.isInline
- scope.updateIntrinsiceRememberSafety(
- !mightUseDefaultGroup(false, scope, defaultParam) &&
- !mightUseVarArgsGroup(false, scope)
- )
-
transformed = transformed.apply {
transformChildrenVoid()
}
@@ -1012,11 +1007,6 @@
val emitTraceMarkers = traceEventMarkersEnabled && !scope.isInlinedLambda
- scope.updateIntrinsiceRememberSafety(
- !mightUseDefaultGroup(canSkipExecution, scope, null) &&
- !mightUseVarArgsGroup(canSkipExecution, scope)
- )
-
// we must transform the body first, since that will allow us to see whether or not we
// are using the dispatchReceiverParameter or the extensionReceiverParameter
val transformed = nonReturningBody.apply {
@@ -1176,11 +1166,6 @@
val defaultScope = transformDefaults(scope)
- scope.updateIntrinsiceRememberSafety(
- !mightUseDefaultGroup(true, scope, defaultParam) &&
- !mightUseVarArgsGroup(true, scope)
- )
-
// we must transform the body first, since that will allow us to see whether or not we
// are using the dispatchReceiverParameter or the extensionReceiverParameter
val transformed = nonReturningBody.apply {
@@ -2509,7 +2494,7 @@
private fun mutableStatementContainer() = mutableStatementContainer(context)
- private fun encounteredComposableCall(withGroups: Boolean, isCached: Boolean) {
+ private fun encounteredComposableCall(withGroups: Boolean) {
var scope: Scope? = currentScope
// it is important that we only report "withGroups: false" for the _nearest_ scope, and
// every scope above that it effectively means there was a group even if it is false
@@ -2517,14 +2502,14 @@
loop@ while (scope != null) {
when (scope) {
is Scope.FunctionScope -> {
- scope.recordComposableCall(groups, isCached)
+ scope.recordComposableCall(groups)
groups = true
if (!scope.isInlinedLambda) {
break@loop
}
}
is Scope.BlockScope -> {
- scope.recordComposableCall(groups, isCached)
+ scope.recordComposableCall(groups)
groups = true
}
is Scope.ClassScope -> {
@@ -2637,7 +2622,6 @@
}
}
}
- scope.updateIntrinsiceRememberSafety(false)
break@loop
}
if (scope.isInlinedLambda && scope.inComposableCall) {
@@ -2902,7 +2886,6 @@
encounteredComposableCall(
withGroups = !expression.symbol.owner.hasReadOnlyAnnotation,
- isCached = false
)
val ownerFn = expression.symbol.owner
@@ -3031,36 +3014,7 @@
} ?: expression
}
- private fun canElideRememberGroup(): Boolean {
- var scope: Scope? = currentScope
- loop@ while (scope != null) {
- when (scope) {
- is Scope.FunctionScope -> {
- return if (
- !scope.isIntrinsiceRememberSafe
- ) {
- false
- } else !scope.isInlinedLambda
- }
- is Scope.ParametersScope -> {
- return scope.isIntrinsiceRememberSafe
- }
- is Scope.CaptureScope -> {
- scope = scope.parent
- continue
- }
- else -> {
- // Any other scope type the behavior is undefined and we cannot rely on
- // intrinsic behavior
- return false
- }
- }
- }
- return false
- }
-
private fun visitRememberCall(expression: IrCall): IrExpression {
- if (!canElideRememberGroup()) return visitNormalComposableCall(expression)
val inputArgs = mutableListOf<IrExpression>()
var hasSpreadArgs = false
var calculationArg: IrExpression? = null
@@ -3077,6 +3031,7 @@
param.name.identifier == "calculation" -> {
calculationArg = arg
}
+
arg is IrVararg -> {
inputArgs.addAll(
arg.elements.mapNotNull {
@@ -3089,6 +3044,7 @@
}
)
}
+
else -> {
inputArgs.add(arg)
}
@@ -3099,20 +3055,18 @@
inputArgs[i] = inputArgs[i].transform(this, null)
}
+ encounteredComposableCall(withGroups = true)
+
if (calculationArg == null) {
- encounteredComposableCall(withGroups = true, isCached = false)
recordCallInSource(call = expression)
return expression
}
- if (hasSpreadArgs || !canElideRememberGroup()) {
- encounteredComposableCall(withGroups = true, isCached = false)
+ if (hasSpreadArgs) {
recordCallInSource(call = expression)
calculationArg.transform(this, null)
return expression
}
- encounteredComposableCall(withGroups = false, isCached = true)
-
// Build the change parameters as if this was a call to remember to ensure the
// use of the $dirty flags are calculated correctly.
inputArgs.map { paramMetaOf(it, isProvided = true) }.also {
@@ -3127,20 +3081,28 @@
// We can only rely on the $changed or $dirty if the flags are correctly updated in
// the restart function or the result of replacing remember with cached will be
// different.
- val changedTestFunction = if (updateChangedFlagsFunction == null) ::irChanged
- else ::irChangedOrInferredChanged
+ val changedTestFunction =
+ if (updateChangedFlagsFunction == null) {
+ ::irChanged
+ } else {
+ ::irChangedOrInferredChanged
+ }
val invalidExpr = inputArgs
.mapNotNull(changedTestFunction)
.reduceOrNull { acc, changed -> irBooleanOr(acc, changed) }
?: irConst(false)
+ val blockScope = currentFunctionScope
return irCache(
expression.startOffset,
expression.endOffset,
expression.type,
invalidExpr,
calculationArg.transform(this, null)
+ ).wrap(
+ before = listOf(irStartReplaceableGroup(expression, blockScope)),
+ after = listOf(irEndReplaceableGroup(scope = blockScope))
)
}
@@ -3220,7 +3182,7 @@
}
private fun visitKeyCall(expression: IrCall): IrExpression {
- encounteredComposableCall(withGroups = true, isCached = false)
+ encounteredComposableCall(withGroups = true)
val keyArgs = mutableListOf<IrExpression>()
var blockArg: IrExpression? = null
for (i in 0 until expression.valueArgumentsCount) {
@@ -4048,14 +4010,11 @@
makeEnd?.let { realizeEndCalls(it) }
}
- fun recordComposableCall(withGroups: Boolean, isCached: Boolean) {
+ fun recordComposableCall(withGroups: Boolean) {
hasComposableCalls = true
if (withGroups) {
hasComposableCallsWithGroups = true
}
- if (isIntrinsiceRememberSafe && (withGroups || !isCached)) {
- isIntrinsiceRememberSafe = false
- }
if (coalescableChilds.isNotEmpty()) {
// if a call happens after the coalescable child group, then we should
// realize the group of the coalescable child
@@ -4153,8 +4112,6 @@
var hasDefaultsGroup = false
var hasComposableCallsWithGroups = false
private set
- var isIntrinsiceRememberSafe = true
- private set
var hasComposableCalls = false
private set
var hasReturn = false
@@ -4163,11 +4120,6 @@
protected set
private var coalescableChilds = mutableListOf<CoalescableGroupInfo>()
- fun updateIntrinsiceRememberSafety(stillSafe: Boolean) {
- if (isIntrinsiceRememberSafe && !stillSafe)
- isIntrinsiceRememberSafe = false
- }
-
class CoalescableGroupInfo(
private val scope: BlockScope,
private val realizeGroup: () -> Unit,
diff --git a/compose/compiler/compiler-hosted/src/main/java/androidx/compose/compiler/plugins/kotlin/lower/IrSourcePrinter.kt b/compose/compiler/compiler-hosted/src/main/java/androidx/compose/compiler/plugins/kotlin/lower/IrSourcePrinter.kt
index 841ab83a..23f989c 100644
--- a/compose/compiler/compiler-hosted/src/main/java/androidx/compose/compiler/plugins/kotlin/lower/IrSourcePrinter.kt
+++ b/compose/compiler/compiler-hosted/src/main/java/androidx/compose/compiler/plugins/kotlin/lower/IrSourcePrinter.kt
@@ -571,7 +571,7 @@
}
}
else -> {
- arg.print()
+ arg.printWithExplicitBlock()
}
}
if (i < arguments.size - 1) print(", ")
@@ -585,6 +585,18 @@
}
}
+ fun IrElement.printWithExplicitBlock() {
+ when (this) {
+ is IrBlock -> {
+ println("<block>{")
+ indented { print() }
+ println()
+ print("}")
+ }
+ else -> print()
+ }
+ }
+
override fun visitFunctionExpression(expression: IrFunctionExpression) {
expression.function.printAsLambda()
}
@@ -925,7 +937,7 @@
print(declaration.normalizedName)
declaration.initializer?.let {
print(" = ")
- it.print()
+ it.printWithExplicitBlock()
}
}
@@ -968,7 +980,7 @@
print(type.renderSrc())
declaration.initializer?.let {
print(" = ")
- it.print()
+ it.printWithExplicitBlock()
}
}
@@ -989,7 +1001,7 @@
print(".")
print(expression.symbol.owner.name)
print(" = ")
- expression.value.print()
+ expression.value.printWithExplicitBlock()
}
override fun visitGetEnumValue(expression: IrGetEnumValue) {
@@ -1002,7 +1014,7 @@
override fun visitSetValue(expression: IrSetValue) {
print(expression.symbol.owner.normalizedName)
print(" = ")
- expression.value.print()
+ expression.value.printWithExplicitBlock()
}
override fun visitExpressionBody(body: IrExpressionBody) {
diff --git a/compose/foundation/foundation-layout/build.gradle b/compose/foundation/foundation-layout/build.gradle
index 320eead..6fd8ce2 100644
--- a/compose/foundation/foundation-layout/build.gradle
+++ b/compose/foundation/foundation-layout/build.gradle
@@ -96,10 +96,6 @@
}
}
- // TODO(b/214407011): These dependencies leak into instrumented tests as well. If you
- // need to add Robolectric (which must be kept out of androidAndroidTest), use a top
- // level dependencies block instead:
- // `dependencies { testImplementation(libs.robolectric) }`
androidUnitTest {
dependsOn(jvmTest)
dependencies {
diff --git a/compose/foundation/foundation/api/current.txt b/compose/foundation/foundation/api/current.txt
index 6d6be6c..a93f95a 100644
--- a/compose/foundation/foundation/api/current.txt
+++ b/compose/foundation/foundation/api/current.txt
@@ -1546,6 +1546,7 @@
}
public static final class InputTransformation.Companion {
+ method @SuppressCompatibility @androidx.compose.foundation.ExperimentalFoundationApi @androidx.compose.runtime.Stable public androidx.compose.foundation.text2.input.InputTransformation byValue(kotlin.jvm.functions.Function2<? super java.lang.CharSequence,? super java.lang.CharSequence,? extends java.lang.CharSequence> transformation);
}
public final class InputTransformationKt {
@@ -1574,7 +1575,7 @@
method public void placeCursorAfterCodepointAt(int index);
method public void placeCursorBeforeCharAt(int index);
method public void placeCursorBeforeCodepointAt(int index);
- method public void replace(int start, int end, String text);
+ method public void replace(int start, int end, CharSequence text);
method public void revertAllChanges();
method public void selectCharsIn(long range);
method public void selectCodepointsIn(long range);
@@ -1655,7 +1656,7 @@
public final class TextFieldStateKt {
method @SuppressCompatibility @androidx.compose.foundation.ExperimentalFoundationApi public static void clearText(androidx.compose.foundation.text2.input.TextFieldState);
method @SuppressCompatibility @androidx.compose.foundation.ExperimentalFoundationApi public static suspend Object? forEachTextValue(androidx.compose.foundation.text2.input.TextFieldState, kotlin.jvm.functions.Function2<? super androidx.compose.foundation.text2.input.TextFieldCharSequence,? super kotlin.coroutines.Continuation<? super kotlin.Unit>,?> block, kotlin.coroutines.Continuation<?>);
- method @SuppressCompatibility @androidx.compose.foundation.ExperimentalFoundationApi @androidx.compose.runtime.Composable public static androidx.compose.foundation.text2.input.TextFieldState rememberTextFieldState();
+ method @SuppressCompatibility @androidx.compose.foundation.ExperimentalFoundationApi @androidx.compose.runtime.Composable public static androidx.compose.foundation.text2.input.TextFieldState rememberTextFieldState(optional String initialText, optional long initialSelectionInChars);
method @SuppressCompatibility @androidx.compose.foundation.ExperimentalFoundationApi public static void setTextAndPlaceCursorAtEnd(androidx.compose.foundation.text2.input.TextFieldState, String text);
method @SuppressCompatibility @androidx.compose.foundation.ExperimentalFoundationApi public static void setTextAndSelectAll(androidx.compose.foundation.text2.input.TextFieldState, String text);
method @SuppressCompatibility @androidx.compose.foundation.ExperimentalFoundationApi public static kotlinx.coroutines.flow.Flow<androidx.compose.foundation.text2.input.TextFieldCharSequence> textAsFlow(androidx.compose.foundation.text2.input.TextFieldState);
diff --git a/compose/foundation/foundation/api/restricted_current.txt b/compose/foundation/foundation/api/restricted_current.txt
index 8728d1b..f5a39ab 100644
--- a/compose/foundation/foundation/api/restricted_current.txt
+++ b/compose/foundation/foundation/api/restricted_current.txt
@@ -1548,6 +1548,7 @@
}
public static final class InputTransformation.Companion {
+ method @SuppressCompatibility @androidx.compose.foundation.ExperimentalFoundationApi @androidx.compose.runtime.Stable public androidx.compose.foundation.text2.input.InputTransformation byValue(kotlin.jvm.functions.Function2<? super java.lang.CharSequence,? super java.lang.CharSequence,? extends java.lang.CharSequence> transformation);
}
public final class InputTransformationKt {
@@ -1576,7 +1577,7 @@
method public void placeCursorAfterCodepointAt(int index);
method public void placeCursorBeforeCharAt(int index);
method public void placeCursorBeforeCodepointAt(int index);
- method public void replace(int start, int end, String text);
+ method public void replace(int start, int end, CharSequence text);
method public void revertAllChanges();
method public void selectCharsIn(long range);
method public void selectCodepointsIn(long range);
@@ -1659,7 +1660,7 @@
public final class TextFieldStateKt {
method @SuppressCompatibility @androidx.compose.foundation.ExperimentalFoundationApi public static void clearText(androidx.compose.foundation.text2.input.TextFieldState);
method @SuppressCompatibility @androidx.compose.foundation.ExperimentalFoundationApi public static suspend Object? forEachTextValue(androidx.compose.foundation.text2.input.TextFieldState, kotlin.jvm.functions.Function2<? super androidx.compose.foundation.text2.input.TextFieldCharSequence,? super kotlin.coroutines.Continuation<? super kotlin.Unit>,?> block, kotlin.coroutines.Continuation<?>);
- method @SuppressCompatibility @androidx.compose.foundation.ExperimentalFoundationApi @androidx.compose.runtime.Composable public static androidx.compose.foundation.text2.input.TextFieldState rememberTextFieldState();
+ method @SuppressCompatibility @androidx.compose.foundation.ExperimentalFoundationApi @androidx.compose.runtime.Composable public static androidx.compose.foundation.text2.input.TextFieldState rememberTextFieldState(optional String initialText, optional long initialSelectionInChars);
method @SuppressCompatibility @androidx.compose.foundation.ExperimentalFoundationApi public static void setTextAndPlaceCursorAtEnd(androidx.compose.foundation.text2.input.TextFieldState, String text);
method @SuppressCompatibility @androidx.compose.foundation.ExperimentalFoundationApi public static void setTextAndSelectAll(androidx.compose.foundation.text2.input.TextFieldState, String text);
method @SuppressCompatibility @androidx.compose.foundation.ExperimentalFoundationApi public static kotlinx.coroutines.flow.Flow<androidx.compose.foundation.text2.input.TextFieldCharSequence> textAsFlow(androidx.compose.foundation.text2.input.TextFieldState);
diff --git a/compose/foundation/foundation/build.gradle b/compose/foundation/foundation/build.gradle
index a6d0d8f..6f236f4 100644
--- a/compose/foundation/foundation/build.gradle
+++ b/compose/foundation/foundation/build.gradle
@@ -112,10 +112,6 @@
}
}
- // TODO(b/214407011): These dependencies leak into instrumented tests as well. If you
- // need to add Robolectric (which must be kept out of androidAndroidTest), use a top
- // level dependencies block instead:
- // `dependencies { testImplementation(libs.robolectric) }`
androidUnitTest {
dependsOn(jvmTest)
dependencies {
diff --git a/compose/foundation/foundation/integration-tests/foundation-demos/build.gradle b/compose/foundation/foundation/integration-tests/foundation-demos/build.gradle
index 4382106..589736d 100644
--- a/compose/foundation/foundation/integration-tests/foundation-demos/build.gradle
+++ b/compose/foundation/foundation/integration-tests/foundation-demos/build.gradle
@@ -40,6 +40,7 @@
implementation(project(":compose:ui:ui-tooling-preview"))
debugImplementation(project(":compose:ui:ui-tooling"))
implementation(project(":internal-testutils-fonts"))
+ implementation(project(":collection:collection"))
}
android {
diff --git a/compose/foundation/foundation/integration-tests/foundation-demos/src/main/java/androidx/compose/foundation/demos/text/ComposeMinTouchTargetTextSelectionDemo.kt b/compose/foundation/foundation/integration-tests/foundation-demos/src/main/java/androidx/compose/foundation/demos/text/ComposeMinTouchTargetTextSelectionDemo.kt
new file mode 100644
index 0000000..4930e80
--- /dev/null
+++ b/compose/foundation/foundation/integration-tests/foundation-demos/src/main/java/androidx/compose/foundation/demos/text/ComposeMinTouchTargetTextSelectionDemo.kt
@@ -0,0 +1,205 @@
+/*
+ * Copyright 2023 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 androidx.compose.foundation.demos.text
+
+import androidx.collection.MutableLongList
+import androidx.collection.longListOf
+import androidx.compose.foundation.border
+import androidx.compose.foundation.layout.Arrangement
+import androidx.compose.foundation.layout.Box
+import androidx.compose.foundation.layout.Column
+import androidx.compose.foundation.layout.fillMaxSize
+import androidx.compose.foundation.layout.padding
+import androidx.compose.foundation.text.selection.SelectionContainer
+import androidx.compose.material.LocalTextStyle
+import androidx.compose.material.Slider
+import androidx.compose.material.Text
+import androidx.compose.runtime.Composable
+import androidx.compose.runtime.CompositionLocalProvider
+import androidx.compose.runtime.getValue
+import androidx.compose.runtime.mutableFloatStateOf
+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.drawBehind
+import androidx.compose.ui.geometry.Offset
+import androidx.compose.ui.geometry.Size
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.drawscope.Stroke
+import androidx.compose.ui.platform.LocalViewConfiguration
+import androidx.compose.ui.platform.ViewConfiguration
+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 androidx.compose.ui.unit.DpSize
+import androidx.compose.ui.unit.dp
+
+private const val alpha = 0.4f
+
+private val Red = Color(0xffE13C56)
+private val Orange = Color(0xffE16D3C)
+private val Yellow = Color(0xffE0AE04)
+private val Green = Color(0xff78AA04)
+private val Blue = Color(0xff4A7DCF)
+private val Indigo = Color(0xff3F0FB7)
+private val Purple = Color(0xff7B4397)
+
+private fun Long.toColor(): Color = Color(toULong())
+private fun Color.toLong(): Long = value.toLong()
+
+// red is used for the selection container color
+private val Rainbow = longListOf(
+ Orange.toLong(),
+ Yellow.toLong(),
+ Green.toLong(),
+ Blue.toLong(),
+ Indigo.toLong(),
+ Purple.toLong(),
+)
+
+@Composable
+fun MinTouchTargetTextSelection() {
+ Column(
+ Modifier
+ .fillMaxSize()
+ .padding(horizontal = 32.dp, vertical = 8.dp)
+ ) {
+ Text(
+ buildAnnotatedString {
+ append("The ")
+ appendWithColor(Red, "solid red")
+ append(" rectangle borders the ")
+ appendCode("SelectionContainer")
+ append(". The inner ")
+ appendRainbowText("solid rainbow")
+ append(" border is the bounds of each individual ")
+ appendCode("Text")
+ append(" with the matching text color. The outer ")
+ appendRainbowText("faded rainbow", alpha)
+ append(" and ")
+ appendWithColor(Red.copy(alpha), "faded red")
+ append(" borders are the minimum touch target space for the associated ")
+ appendCode("Text")
+ append(" or ")
+ appendCode("SelectionContainer")
+ append(
+ """
+ |. We expect that touch selection gestures in the touch target space,
+ | but not directly on the
+ | """.trimMargin().replace("\n", "")
+ )
+ appendCode("Text")
+ append(
+ """
+ |, will still start a selection and not crash. The below slider adjusts
+ | the minimum touch target size between 0 and 100 dp.
+ |""".trimMargin().replace("\n", "")
+ )
+ },
+ )
+ var minTouchSideLength by remember { mutableFloatStateOf(48f) }
+ Slider(
+ value = minTouchSideLength,
+ onValueChange = { minTouchSideLength = it },
+ valueRange = 0f..100f
+ )
+ Box(modifier = Modifier.fillMaxSize(), contentAlignment = Alignment.Center) {
+ val length = minTouchSideLength.dp
+ OverrideMinimumTouchTarget(DpSize(length, length)) {
+ MinTouchTargetInTextSelection()
+ }
+ }
+ }
+}
+
+@Composable
+private fun OverrideMinimumTouchTarget(size: DpSize, content: @Composable () -> Unit) {
+ val viewConfiguration = LocalViewConfiguration.current
+ val viewConfigurationOverride = DelegatedViewConfiguration(viewConfiguration, size)
+ CompositionLocalProvider(LocalViewConfiguration provides viewConfigurationOverride, content)
+}
+
+@Composable
+private fun MinTouchTargetInTextSelection() {
+ val minimumTouchTarget = LocalViewConfiguration.current.minimumTouchTargetSize
+ SelectionContainer(
+ Modifier
+ .border(1.dp, Red)
+ .padding(1.dp)
+ .drawMinTouchTargetBorderBehind(Red.copy(alpha), minimumTouchTarget)
+ ) {
+ Column(
+ verticalArrangement = Arrangement.spacedBy(4.dp)
+ ) {
+ Rainbow.forEachIndexed { index, long ->
+ val color = long.toColor()
+ val fadedColor = color.copy(alpha)
+ Text(
+ text = "Text",
+ style = LocalTextStyle.current.merge(color = color),
+ modifier = Modifier
+ // offset the texts horizontally, else the borders will heavily overlap
+ .padding(start = (index * 6).dp)
+ .border(1.dp, color)
+ // Padding between text and border so they aren't touching
+ .padding(1.dp)
+ .drawMinTouchTargetBorderBehind(fadedColor, minimumTouchTarget)
+ )
+ }
+ }
+ }
+}
+
+/**
+ * Draw a 1 dp unfilled rect around the minimum touch target.
+ */
+private fun Modifier.drawMinTouchTargetBorderBehind(
+ color: Color,
+ minimumTouchTarget: DpSize
+): Modifier = drawBehind {
+ val minTouchTargetCoercedSize = Size(
+ width = size.width.coerceAtLeast(minimumTouchTarget.width.toPx()),
+ height = size.height.coerceAtLeast(minimumTouchTarget.height.toPx())
+ )
+ val topLeft = Offset(
+ x = (size.width - minTouchTargetCoercedSize.width) / 2,
+ y = (size.height - minTouchTargetCoercedSize.height) / 2
+ )
+ drawRect(color, topLeft, minTouchTargetCoercedSize, style = Stroke(1.dp.toPx()))
+}
+
+private fun AnnotatedString.Builder.appendRainbowText(text: String, alpha: Float = 1f) {
+ val size = Rainbow.size
+ val colors = Rainbow.fold(MutableLongList(size)) { list, long ->
+ list.also { list += long.toColor().copy(alpha).toLong() }
+ }
+ text.forEachIndexed { index, char ->
+ val long = colors[index % size]
+ withStyle(SpanStyle(color = long.toColor())) {
+ append(char)
+ }
+ }
+}
+
+private class DelegatedViewConfiguration(
+ delegate: ViewConfiguration,
+ minimumTouchTargetSizeOverride: DpSize,
+) : ViewConfiguration by delegate {
+ override val minimumTouchTargetSize: DpSize = minimumTouchTargetSizeOverride
+}
diff --git a/compose/foundation/foundation/integration-tests/foundation-demos/src/main/java/androidx/compose/foundation/demos/text/ComposeTextSelection.kt b/compose/foundation/foundation/integration-tests/foundation-demos/src/main/java/androidx/compose/foundation/demos/text/ComposeTextSelection.kt
index f6f0295..5a6bb7f 100644
--- a/compose/foundation/foundation/integration-tests/foundation-demos/src/main/java/androidx/compose/foundation/demos/text/ComposeTextSelection.kt
+++ b/compose/foundation/foundation/integration-tests/foundation-demos/src/main/java/androidx/compose/foundation/demos/text/ComposeTextSelection.kt
@@ -33,6 +33,7 @@
import androidx.compose.runtime.Composable
import androidx.compose.ui.Modifier
import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.text.AnnotatedString
import androidx.compose.ui.text.SpanStyle
import androidx.compose.ui.text.TextStyle
import androidx.compose.ui.text.buildAnnotatedString
@@ -58,18 +59,6 @@
Text(
modifier = textBorderModifier,
text = buildAnnotatedString {
- fun appendWithColor(color: Color, text: String) {
- withStyle(SpanStyle(color = color)) {
- append(text)
- }
- }
-
- fun appendCode(text: String) {
- withStyle(SpanStyle(fontFamily = FontFamily.Monospace)) {
- append(text)
- }
- }
-
appendWithColor(Color.Green, "Green")
append(" borders represent a ")
appendCode("SelectionContainer")
@@ -318,3 +307,15 @@
DisableSelection(content)
}
}
+
+internal fun AnnotatedString.Builder.appendWithColor(color: Color, text: String) {
+ withStyle(SpanStyle(color = color)) {
+ append(text)
+ }
+}
+
+internal fun AnnotatedString.Builder.appendCode(text: String) {
+ withStyle(SpanStyle(fontFamily = FontFamily.Monospace)) {
+ append(text)
+ }
+}
diff --git a/compose/foundation/foundation/integration-tests/foundation-demos/src/main/java/androidx/compose/foundation/demos/text/TextDemos.kt b/compose/foundation/foundation/integration-tests/foundation-demos/src/main/java/androidx/compose/foundation/demos/text/TextDemos.kt
index a67bc75..89b65ea 100644
--- a/compose/foundation/foundation/integration-tests/foundation-demos/src/main/java/androidx/compose/foundation/demos/text/TextDemos.kt
+++ b/compose/foundation/foundation/integration-tests/foundation-demos/src/main/java/androidx/compose/foundation/demos/text/TextDemos.kt
@@ -157,6 +157,9 @@
ComposableDemo("Scrollable Column Text Selection") {
TextScrollableColumnSelectionDemo()
},
+ ComposableDemo("Selection Minimum Touch Target") {
+ MinTouchTargetTextSelection()
+ },
)
),
DemoCategory(
diff --git a/compose/foundation/foundation/integration-tests/foundation-demos/src/main/java/androidx/compose/foundation/demos/text2/BasicTextField2FilterDemos.kt b/compose/foundation/foundation/integration-tests/foundation-demos/src/main/java/androidx/compose/foundation/demos/text2/BasicTextField2FilterDemos.kt
index 749c2d79..fc5d40d2 100644
--- a/compose/foundation/foundation/integration-tests/foundation-demos/src/main/java/androidx/compose/foundation/demos/text2/BasicTextField2FilterDemos.kt
+++ b/compose/foundation/foundation/integration-tests/foundation-demos/src/main/java/androidx/compose/foundation/demos/text2/BasicTextField2FilterDemos.kt
@@ -28,7 +28,9 @@
import androidx.compose.foundation.rememberScrollState
import androidx.compose.foundation.samples.BasicTextField2ChangeIterationSample
import androidx.compose.foundation.samples.BasicTextField2ChangeReverseIterationSample
-import androidx.compose.foundation.samples.BasicTextField2CustomFilterSample
+import androidx.compose.foundation.samples.BasicTextField2CustomInputTransformationSample
+import androidx.compose.foundation.samples.BasicTextField2InputTransformationByValueChooseSample
+import androidx.compose.foundation.samples.BasicTextField2InputTransformationByValueReplaceSample
import androidx.compose.foundation.text.KeyboardOptions
import androidx.compose.foundation.text2.BasicTextField2
import androidx.compose.foundation.text2.input.InputTransformation
@@ -71,7 +73,17 @@
TagLine(tag = "Custom (type backwards with prompt)")
Box(demoTextFieldModifiers, propagateMinConstraints = true) {
- BasicTextField2CustomFilterSample()
+ BasicTextField2CustomInputTransformationSample()
+ }
+
+ TagLine(tag = "Custom (string,string->string with replacement)")
+ Box(demoTextFieldModifiers, propagateMinConstraints = true) {
+ BasicTextField2InputTransformationByValueReplaceSample()
+ }
+
+ TagLine(tag = "Custom (string,string->string with choice)")
+ Box(demoTextFieldModifiers, propagateMinConstraints = true) {
+ BasicTextField2InputTransformationByValueChooseSample()
}
TagLine(tag = "Change tracking (change logging sample)")
diff --git a/compose/foundation/foundation/samples/src/main/java/androidx/compose/foundation/samples/BasicTextField2Samples.kt b/compose/foundation/foundation/samples/src/main/java/androidx/compose/foundation/samples/BasicTextField2Samples.kt
index b0ffb63..9c1b77b 100644
--- a/compose/foundation/foundation/samples/src/main/java/androidx/compose/foundation/samples/BasicTextField2Samples.kt
+++ b/compose/foundation/foundation/samples/src/main/java/androidx/compose/foundation/samples/BasicTextField2Samples.kt
@@ -171,10 +171,9 @@
}
}
-// TODO convert to InputTransformation
@Sampled
@Composable
-fun BasicTextField2CustomFilterSample() {
+fun BasicTextField2CustomInputTransformationSample() {
val state = remember { TextFieldState() }
BasicTextField2(state, inputTransformation = { _, new ->
// A filter that always places newly-input text at the start of the string, after a
@@ -213,7 +212,33 @@
}
@Sampled
-fun BasicTextField2FilterChainingSample() {
+@Composable
+fun BasicTextField2InputTransformationByValueReplaceSample() {
+ val state = remember { TextFieldState() }
+ BasicTextField2(
+ state,
+ // Convert tabs to spaces.
+ inputTransformation = InputTransformation.byValue { _, proposed ->
+ proposed.replace("""\t""".toRegex(), " ")
+ }
+ )
+}
+
+@Sampled
+@Composable
+fun BasicTextField2InputTransformationByValueChooseSample() {
+ val state = remember { TextFieldState() }
+ BasicTextField2(
+ state,
+ // Reject whitespace.
+ inputTransformation = InputTransformation.byValue { current, proposed ->
+ if ("""\s""".toRegex() in proposed) current else proposed
+ }
+ )
+}
+
+@Sampled
+fun BasicTextField2InputTransformationChainingSample() {
val removeFirstEFilter = InputTransformation { _, new ->
val index = new.asCharSequence().indexOf('e')
if (index != -1) {
diff --git a/compose/foundation/foundation/src/androidInstrumentedTest/kotlin/androidx/compose/foundation/text/selection/gestures/MultiTextMinTouchBoundsSelectionGesturesTest.kt b/compose/foundation/foundation/src/androidInstrumentedTest/kotlin/androidx/compose/foundation/text/selection/gestures/MultiTextMinTouchBoundsSelectionGesturesTest.kt
new file mode 100644
index 0000000..4fecf01
--- /dev/null
+++ b/compose/foundation/foundation/src/androidInstrumentedTest/kotlin/androidx/compose/foundation/text/selection/gestures/MultiTextMinTouchBoundsSelectionGesturesTest.kt
@@ -0,0 +1,193 @@
+/*
+ * Copyright 2023 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 androidx.compose.foundation.text.selection.gestures
+
+import androidx.compose.foundation.layout.Arrangement
+import androidx.compose.foundation.layout.Column
+import androidx.compose.foundation.text.BasicText
+import androidx.compose.foundation.text.selection.Selection
+import androidx.compose.foundation.text.selection.SelectionContainer
+import androidx.compose.foundation.text.selection.gestures.MultiTextMinTouchBoundsSelectionGesturesTest.ExpectedText.EITHER
+import androidx.compose.foundation.text.selection.gestures.MultiTextMinTouchBoundsSelectionGesturesTest.ExpectedText.FIRST
+import androidx.compose.foundation.text.selection.gestures.MultiTextMinTouchBoundsSelectionGesturesTest.ExpectedText.SECOND
+import androidx.compose.foundation.text.selection.gestures.MultiTextMinTouchBoundsSelectionGesturesTest.TestHorizontal.CENTER
+import androidx.compose.foundation.text.selection.gestures.MultiTextMinTouchBoundsSelectionGesturesTest.TestHorizontal.LEFT
+import androidx.compose.foundation.text.selection.gestures.MultiTextMinTouchBoundsSelectionGesturesTest.TestHorizontal.RIGHT
+import androidx.compose.foundation.text.selection.gestures.MultiTextMinTouchBoundsSelectionGesturesTest.TestVertical.ABOVE
+import androidx.compose.foundation.text.selection.gestures.MultiTextMinTouchBoundsSelectionGesturesTest.TestVertical.BELOW
+import androidx.compose.foundation.text.selection.gestures.MultiTextMinTouchBoundsSelectionGesturesTest.TestVertical.NO_OVERLAP_BELONGS_TO_FIRST
+import androidx.compose.foundation.text.selection.gestures.MultiTextMinTouchBoundsSelectionGesturesTest.TestVertical.NO_OVERLAP_BELONGS_TO_SECOND
+import androidx.compose.foundation.text.selection.gestures.MultiTextMinTouchBoundsSelectionGesturesTest.TestVertical.ON_FIRST
+import androidx.compose.foundation.text.selection.gestures.MultiTextMinTouchBoundsSelectionGesturesTest.TestVertical.ON_SECOND
+import androidx.compose.foundation.text.selection.gestures.MultiTextMinTouchBoundsSelectionGesturesTest.TestVertical.OVERLAP_BELONGS_TO_FIRST
+import androidx.compose.foundation.text.selection.gestures.MultiTextMinTouchBoundsSelectionGesturesTest.TestVertical.OVERLAP_BELONGS_TO_SECOND
+import androidx.compose.foundation.text.selection.gestures.MultiTextMinTouchBoundsSelectionGesturesTest.TestVertical.OVERLAP_EQUIDISTANT
+import androidx.compose.runtime.Composable
+import androidx.compose.runtime.CompositionLocalProvider
+import androidx.compose.runtime.mutableStateOf
+import androidx.compose.testutils.TestViewConfiguration
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.geometry.Offset
+import androidx.compose.ui.platform.LocalViewConfiguration
+import androidx.compose.ui.platform.testTag
+import androidx.compose.ui.test.longClick
+import androidx.compose.ui.text.TextStyle
+import androidx.compose.ui.text.style.ResolvedTextDirection
+import androidx.compose.ui.unit.DpSize
+import androidx.compose.ui.unit.dp
+import androidx.compose.ui.unit.sp
+import androidx.test.filters.MediumTest
+import com.google.common.truth.Truth.assertThat
+import org.junit.Test
+import org.junit.runner.RunWith
+import org.junit.runners.Parameterized
+
+@MediumTest
+@RunWith(Parameterized::class)
+internal class MultiTextMinTouchBoundsSelectionGesturesTest(
+ private val horizontal: TestHorizontal,
+ private val vertical: TestVertical,
+ private val expectedText: ExpectedText,
+) : AbstractSelectionGesturesTest() {
+ // dp and sp is the same with our density
+ private val dpLen = 20.dp
+ private val spLen = 20.sp
+
+ /**
+ * When two 20x20 texts are stacked with 20 space between,
+ * we want the touch targets to overlap a little for this test,
+ * so we pick a minTouchTarget size of an additional 12 on each side.
+ *
+ * With this setup, on the y-axis:
+ * * 0..20 is the first text
+ * * 40..60 is the second text
+ * * -12..32 is the first minTouchTarget
+ * * 28..72 is the second minTouchTarget
+ *
+ * Given the above:
+ * * 21..27 belongs solely to the first text
+ * * 29 overlaps both, but is closer to the first text
+ * * 30 overlaps both, and is equidistant to both
+ * * 31 overlaps both, but is closer to the second text
+ * * 32..39 belongs solely to the second text
+ */
+ private val touchTargetDpLen = dpLen + 12.dp * 2
+
+ enum class TestHorizontal(val x: Float) {
+ LEFT(-6f),
+ CENTER(10f),
+ RIGHT(26f)
+ }
+
+ enum class TestVertical(val y: Float) {
+ ABOVE(-6f),
+ ON_FIRST(10f),
+ NO_OVERLAP_BELONGS_TO_FIRST(25f),
+ OVERLAP_BELONGS_TO_FIRST(29f),
+ OVERLAP_EQUIDISTANT(30f),
+ OVERLAP_BELONGS_TO_SECOND(31f),
+ NO_OVERLAP_BELONGS_TO_SECOND(35f),
+ ON_SECOND(50f),
+ BELOW(66f),
+ }
+
+ enum class ExpectedText(val selectableId: Long?) {
+ FIRST(1L),
+ SECOND(2L),
+ EITHER(null),
+ }
+
+ override val pointerAreaTag = "selectionContainer"
+ private val text = "A"
+ private val textStyle = TextStyle(fontSize = spLen, fontFamily = fontFamily)
+ private val minTouchTargetSize = DpSize(touchTargetDpLen, touchTargetDpLen)
+ private val testViewConfiguration =
+ TestViewConfiguration(minimumTouchTargetSize = minTouchTargetSize)
+
+ private val selection = mutableStateOf<Selection?>(null)
+
+ @Composable
+ override fun Content() {
+ SelectionContainer(
+ selection = selection.value,
+ onSelectionChange = { selection.value = it },
+ modifier = Modifier.testTag(pointerAreaTag)
+ ) {
+ CompositionLocalProvider(LocalViewConfiguration provides testViewConfiguration) {
+ Column(verticalArrangement = Arrangement.spacedBy(dpLen)) {
+ repeat(2) { BasicText(text = text, style = textStyle) }
+ }
+ }
+ }
+ }
+
+ companion object {
+ @JvmStatic
+ @Parameterized.Parameters(name = "horizontal={0}, vertical={1} expectedId={2}")
+ fun data(): Collection<Array<Any>> = listOf(
+ arrayOf(LEFT, ABOVE, FIRST),
+ arrayOf(LEFT, ON_FIRST, FIRST),
+ arrayOf(LEFT, NO_OVERLAP_BELONGS_TO_FIRST, FIRST),
+ arrayOf(LEFT, OVERLAP_BELONGS_TO_FIRST, FIRST),
+ arrayOf(LEFT, OVERLAP_EQUIDISTANT, EITHER),
+ arrayOf(LEFT, OVERLAP_BELONGS_TO_SECOND, SECOND),
+ arrayOf(LEFT, NO_OVERLAP_BELONGS_TO_SECOND, SECOND),
+ arrayOf(LEFT, ON_SECOND, SECOND),
+ arrayOf(LEFT, BELOW, SECOND),
+ arrayOf(CENTER, ABOVE, FIRST),
+ arrayOf(CENTER, ON_FIRST, FIRST),
+ arrayOf(CENTER, NO_OVERLAP_BELONGS_TO_FIRST, FIRST),
+ arrayOf(CENTER, OVERLAP_BELONGS_TO_FIRST, FIRST),
+ arrayOf(CENTER, OVERLAP_EQUIDISTANT, EITHER),
+ arrayOf(CENTER, OVERLAP_BELONGS_TO_SECOND, SECOND),
+ arrayOf(CENTER, NO_OVERLAP_BELONGS_TO_SECOND, SECOND),
+ arrayOf(CENTER, ON_SECOND, SECOND),
+ arrayOf(CENTER, BELOW, SECOND),
+ arrayOf(RIGHT, ABOVE, FIRST),
+ arrayOf(RIGHT, ON_FIRST, FIRST),
+ arrayOf(RIGHT, NO_OVERLAP_BELONGS_TO_FIRST, FIRST),
+ arrayOf(RIGHT, OVERLAP_BELONGS_TO_FIRST, FIRST),
+ arrayOf(RIGHT, OVERLAP_EQUIDISTANT, EITHER),
+ arrayOf(RIGHT, OVERLAP_BELONGS_TO_SECOND, SECOND),
+ arrayOf(RIGHT, NO_OVERLAP_BELONGS_TO_SECOND, SECOND),
+ arrayOf(RIGHT, ON_SECOND, SECOND),
+ arrayOf(RIGHT, BELOW, SECOND),
+ )
+ }
+
+ @Test
+ fun minTouchTargetSelectionGestureTest() {
+ performTouchGesture { longClick(Offset(horizontal.x, vertical.y)) }
+
+ val expectedSelectableId = expectedText.selectableId
+ if (expectedSelectableId == null) {
+ // verify something is selected
+ assertThat(selection).isNotNull()
+ } else {
+ assertSelectedSelectableIs(expectedSelectableId)
+ }
+ }
+
+ private fun assertSelectedSelectableIs(selectableId: Long) {
+ val expectedSelection = Selection(
+ start = Selection.AnchorInfo(ResolvedTextDirection.Ltr, 0, selectableId),
+ end = Selection.AnchorInfo(ResolvedTextDirection.Ltr, 1, selectableId),
+ handlesCrossed = false,
+ )
+ assertThat(selection.value).isEqualTo(expectedSelection)
+ }
+}
diff --git a/compose/foundation/foundation/src/androidInstrumentedTest/kotlin/androidx/compose/foundation/text2/BasicTextField2SemanticsTest.kt b/compose/foundation/foundation/src/androidInstrumentedTest/kotlin/androidx/compose/foundation/text2/BasicTextField2SemanticsTest.kt
index 0cc7865..c9f0c93 100644
--- a/compose/foundation/foundation/src/androidInstrumentedTest/kotlin/androidx/compose/foundation/text2/BasicTextField2SemanticsTest.kt
+++ b/compose/foundation/foundation/src/androidInstrumentedTest/kotlin/androidx/compose/foundation/text2/BasicTextField2SemanticsTest.kt
@@ -325,7 +325,7 @@
@Test
fun selectionSemanticsAreSet_afterRecomposition() {
- val state = TextFieldState("hello")
+ val state = TextFieldState("hello", initialSelectionInChars = TextRange.Zero)
rule.setContent {
BasicTextField2(
state = state,
@@ -425,8 +425,8 @@
@Test
fun semanticsAreSet_afterStateObjectChanges() {
- val state1 = TextFieldState("hello")
- val state2 = TextFieldState("world", TextRange(2))
+ val state1 = TextFieldState("hello", initialSelectionInChars = TextRange.Zero)
+ val state2 = TextFieldState("world", initialSelectionInChars = TextRange(2))
var chosenState by mutableStateOf(true)
rule.setContent {
BasicTextField2(
diff --git a/compose/foundation/foundation/src/androidInstrumentedTest/kotlin/androidx/compose/foundation/text2/TextFieldStateRestorationTest.kt b/compose/foundation/foundation/src/androidInstrumentedTest/kotlin/androidx/compose/foundation/text2/RememberTextFieldStateTest.kt
similarity index 60%
rename from compose/foundation/foundation/src/androidInstrumentedTest/kotlin/androidx/compose/foundation/text2/TextFieldStateRestorationTest.kt
rename to compose/foundation/foundation/src/androidInstrumentedTest/kotlin/androidx/compose/foundation/text2/RememberTextFieldStateTest.kt
index 8e49735..3f7526e 100644
--- a/compose/foundation/foundation/src/androidInstrumentedTest/kotlin/androidx/compose/foundation/text2/TextFieldStateRestorationTest.kt
+++ b/compose/foundation/foundation/src/androidInstrumentedTest/kotlin/androidx/compose/foundation/text2/RememberTextFieldStateTest.kt
@@ -34,7 +34,7 @@
@OptIn(ExperimentalFoundationApi::class)
@SmallTest
@RunWith(AndroidJUnit4::class)
-class TextFieldStateRestorationTest {
+class RememberTextFieldStateTest {
@get:Rule
val rule = createComposeRule()
@@ -42,6 +42,22 @@
private val restorationTester = StateRestorationTester(rule)
@Test
+ fun rememberTextFieldState_withInitialTextAndSelection() {
+ lateinit var state: TextFieldState
+ rule.setContent {
+ state = rememberTextFieldState(
+ initialText = "hello",
+ initialSelectionInChars = TextRange(2)
+ )
+ }
+
+ rule.runOnIdle {
+ assertThat(state.text.toString()).isEqualTo("hello")
+ assertThat(state.text.selectionInChars).isEqualTo(TextRange(2))
+ }
+ }
+
+ @Test
fun rememberTextFieldState_restoresTextAndSelection() {
lateinit var originalState: TextFieldState
lateinit var restoredState: TextFieldState
@@ -68,4 +84,35 @@
assertThat(restoredState.text.selectionInChars).isEqualTo(TextRange(0, 12))
}
}
+
+ @Test
+ fun rememberTextFieldState_withInitialTextAndSelection_restoresTextAndSelection() {
+ lateinit var originalState: TextFieldState
+ lateinit var restoredState: TextFieldState
+ var rememberCount = 0
+ restorationTester.setContent {
+ val state = rememberTextFieldState(
+ initialText = "this should be ignored",
+ initialSelectionInChars = TextRange.Zero
+ )
+ if (remember { rememberCount++ } == 0) {
+ originalState = state
+ } else {
+ restoredState = state
+ }
+ }
+ rule.runOnIdle {
+ originalState.edit {
+ replace(0, length, "hello, world")
+ selectAll()
+ }
+ }
+
+ restorationTester.emulateSavedInstanceStateRestore()
+
+ rule.runOnIdle {
+ assertThat(restoredState.text.toString()).isEqualTo("hello, world")
+ assertThat(restoredState.text.selectionInChars).isEqualTo(TextRange(0, 12))
+ }
+ }
}
diff --git a/compose/foundation/foundation/src/androidInstrumentedTest/kotlin/androidx/compose/foundation/text2/input/internal/selection/TextFieldCursorHandleTest.kt b/compose/foundation/foundation/src/androidInstrumentedTest/kotlin/androidx/compose/foundation/text2/input/internal/selection/TextFieldCursorHandleTest.kt
index 7c12b07..7d62418 100644
--- a/compose/foundation/foundation/src/androidInstrumentedTest/kotlin/androidx/compose/foundation/text2/input/internal/selection/TextFieldCursorHandleTest.kt
+++ b/compose/foundation/foundation/src/androidInstrumentedTest/kotlin/androidx/compose/foundation/text2/input/internal/selection/TextFieldCursorHandleTest.kt
@@ -373,7 +373,7 @@
@Test
fun cursorHandle_disappearsOnVerticalScroll() {
- state = TextFieldState("hello hello hello hello")
+ state = TextFieldState("hello hello hello hello", initialSelectionInChars = TextRange.Zero)
val scrollState = ScrollState(0)
lateinit var scope: CoroutineScope
rule.setContent {
@@ -404,7 +404,7 @@
@Test
fun cursorHandle_disappearsOnHorizontalScroll() = with(rule.density) {
- state = TextFieldState("hello hello hello hello")
+ state = TextFieldState("hello hello hello hello", initialSelectionInChars = TextRange.Zero)
val scrollState = ScrollState(0)
lateinit var scope: CoroutineScope
rule.setContent {
@@ -435,7 +435,7 @@
@Test
fun cursorHandle_reappearsOnVerticalScroll() {
- state = TextFieldState("hello hello hello hello")
+ state = TextFieldState("hello hello hello hello", initialSelectionInChars = TextRange.Zero)
val scrollState = ScrollState(0)
rule.setContent {
BasicTextField2(
@@ -470,7 +470,7 @@
@Test
fun cursorHandle_reappearsOnHorizontalScroll() {
- state = TextFieldState("hello hello hello hello")
+ state = TextFieldState("hello hello hello hello", initialSelectionInChars = TextRange.Zero)
val scrollState = ScrollState(0)
rule.setContent {
BasicTextField2(
diff --git a/compose/foundation/foundation/src/androidInstrumentedTest/kotlin/androidx/compose/foundation/text2/input/internal/selection/TextFieldMagnifierTest.kt b/compose/foundation/foundation/src/androidInstrumentedTest/kotlin/androidx/compose/foundation/text2/input/internal/selection/TextFieldMagnifierTest.kt
index 9ad8a84..bdc7203 100644
--- a/compose/foundation/foundation/src/androidInstrumentedTest/kotlin/androidx/compose/foundation/text2/input/internal/selection/TextFieldMagnifierTest.kt
+++ b/compose/foundation/foundation/src/androidInstrumentedTest/kotlin/androidx/compose/foundation/text2/input/internal/selection/TextFieldMagnifierTest.kt
@@ -151,7 +151,10 @@
"\u05D0\u05D1\u05D2\u05D3"
val tag = "BasicTextField2"
- val state = TextFieldState("$fillerWord $fillerWord $fillerWord ".repeat(10))
+ val state = TextFieldState(
+ "$fillerWord $fillerWord $fillerWord ".repeat(10),
+ initialSelectionInChars = TextRange.Zero
+ )
rule.setContent {
CompositionLocalProvider(LocalLayoutDirection provides layoutDirection) {
diff --git a/compose/foundation/foundation/src/androidUnitTest/kotlin/androidx/compose/foundation/text2/input/InputTransformationTest.kt b/compose/foundation/foundation/src/androidUnitTest/kotlin/androidx/compose/foundation/text2/input/InputTransformationTest.kt
index 6a7defe..d25548f 100644
--- a/compose/foundation/foundation/src/androidUnitTest/kotlin/androidx/compose/foundation/text2/input/InputTransformationTest.kt
+++ b/compose/foundation/foundation/src/androidUnitTest/kotlin/androidx/compose/foundation/text2/input/InputTransformationTest.kt
@@ -164,4 +164,56 @@
assertThat(chain.keyboardOptions).isSameInstanceAs(options2)
}
+
+ @Test
+ fun byValue_reverts_whenReturnsCurrent() {
+ val transformation = InputTransformation.byValue { current, _ -> current }
+ val current = TextFieldCharSequence("a")
+ val proposed = TextFieldCharSequence("ab")
+ val buffer = TextFieldBuffer(sourceValue = current, initialValue = proposed)
+
+ transformation.transformInput(current, buffer)
+
+ assertThat(buffer.changes.changeCount).isEqualTo(0)
+ assertThat(buffer.toString()).isEqualTo(current.toString())
+ }
+
+ @Test
+ fun byValue_appliesChanges_whenReturnsSameContentAsCurrent() {
+ val transformation = InputTransformation.byValue { _, _ -> "a" }
+ val current = TextFieldCharSequence("a")
+ val proposed = TextFieldCharSequence("ab")
+ val buffer = TextFieldBuffer(sourceValue = current, initialValue = proposed)
+
+ transformation.transformInput(current, buffer)
+
+ assertThat(buffer.changes.changeCount).isEqualTo(1)
+ assertThat(buffer.toString()).isEqualTo(current.toString())
+ }
+
+ @Test
+ fun byValue_noops_whenReturnsProposed() {
+ val transformation = InputTransformation.byValue { _, _ -> "ab" }
+ val current = TextFieldCharSequence("a")
+ val proposed = TextFieldCharSequence("ab")
+ val buffer = TextFieldBuffer(sourceValue = current, initialValue = proposed)
+
+ transformation.transformInput(current, buffer)
+
+ assertThat(buffer.changes.changeCount).isEqualTo(0)
+ assertThat(buffer.toString()).isEqualTo(proposed.toString())
+ }
+
+ @Test
+ fun byValue_appliesChanges_whenDifferentCharSequenceReturned() {
+ val transformation = InputTransformation.byValue { _, _ -> "c" }
+ val current = TextFieldCharSequence("a")
+ val proposed = TextFieldCharSequence("ab")
+ val buffer = TextFieldBuffer(sourceValue = current, initialValue = proposed)
+
+ transformation.transformInput(current, buffer)
+
+ assertThat(buffer.changes.changeCount).isEqualTo(1)
+ assertThat(buffer.toString()).isEqualTo("c")
+ }
}
diff --git a/compose/foundation/foundation/src/androidUnitTest/kotlin/androidx/compose/foundation/text2/input/TextFieldStateTest.kt b/compose/foundation/foundation/src/androidUnitTest/kotlin/androidx/compose/foundation/text2/input/TextFieldStateTest.kt
index cc832fb..d46c060 100644
--- a/compose/foundation/foundation/src/androidUnitTest/kotlin/androidx/compose/foundation/text2/input/TextFieldStateTest.kt
+++ b/compose/foundation/foundation/src/androidUnitTest/kotlin/androidx/compose/foundation/text2/input/TextFieldStateTest.kt
@@ -43,8 +43,24 @@
private val state = TextFieldState()
@Test
- fun initialValue() {
+ fun defaultInitialTextAndSelection() {
+ val state = TextFieldState()
assertThat(state.text.toString()).isEqualTo("")
+ assertThat(state.text.selectionInChars).isEqualTo(TextRange.Zero)
+ }
+
+ @Test
+ fun customInitialTextAndDefaultSelection() {
+ val state = TextFieldState(initialText = "hello")
+ assertThat(state.text.toString()).isEqualTo("hello")
+ assertThat(state.text.selectionInChars).isEqualTo(TextRange(5))
+ }
+
+ @Test
+ fun customInitialTextAndSelection() {
+ val state = TextFieldState(initialText = "hello", initialSelectionInChars = TextRange(0, 1))
+ assertThat(state.text.toString()).isEqualTo("hello")
+ assertThat(state.text.selectionInChars).isEqualTo(TextRange(0, 1))
}
@Test
diff --git a/compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/text/modifiers/TextAnnotatedStringNode.kt b/compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/text/modifiers/TextAnnotatedStringNode.kt
index 67f75f7..6c3c817 100644
--- a/compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/text/modifiers/TextAnnotatedStringNode.kt
+++ b/compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/text/modifiers/TextAnnotatedStringNode.kt
@@ -225,6 +225,7 @@
) {
if (textChanged || (drawChanged && semanticsTextLayoutResult != null)) {
if (isAttached) {
+ // isAttached check because invalidateSemantics will throw otherwise
invalidateSemantics()
}
}
@@ -241,6 +242,7 @@
placeholders = placeholders
)
if (isAttached) {
+ // isAttached check because invalidateMeasurement will throw otherwise
invalidateMeasurement()
}
invalidateDraw()
diff --git a/compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/text/modifiers/TextStringSimpleNode.kt b/compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/text/modifiers/TextStringSimpleNode.kt
index 2d39051..b9511fb 100644
--- a/compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/text/modifiers/TextStringSimpleNode.kt
+++ b/compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/text/modifiers/TextStringSimpleNode.kt
@@ -185,6 +185,7 @@
) {
if (textChanged || (drawChanged && semanticsTextLayoutResult != null)) {
if (isAttached) {
+ // isAttached check because invalidateSemantics will throw otherwise
invalidateSemantics()
}
}
@@ -200,6 +201,7 @@
minLines = minLines
)
if (isAttached) {
+ // isAttached check because invalidateMeasurement will throw otherwise
invalidateMeasurement()
}
invalidateDraw()
diff --git a/compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/text/selection/SelectionManager.kt b/compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/text/selection/SelectionManager.kt
index 5bf0b16..9ed470a 100644
--- a/compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/text/selection/SelectionManager.kt
+++ b/compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/text/selection/SelectionManager.kt
@@ -229,7 +229,17 @@
}
selectionRegistrar.onSelectionUpdateStartCallback =
- { isInTouchMode, layoutCoordinates, position, selectionMode ->
+ { isInTouchMode, layoutCoordinates, rawPosition, selectionMode ->
+ val textRect = with(layoutCoordinates.size) {
+ Rect(0f, 0f, width.toFloat(), height.toFloat())
+ }
+
+ val position = if (textRect.containsInclusive(rawPosition)) {
+ rawPosition
+ } else {
+ rawPosition.coerceIn(textRect)
+ }
+
val positionInContainer = convertToContainerCoordinates(
layoutCoordinates,
position
diff --git a/compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/text2/input/InputTransformation.kt b/compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/text2/input/InputTransformation.kt
index cb2939c..0859bd3 100644
--- a/compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/text2/input/InputTransformation.kt
+++ b/compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/text2/input/InputTransformation.kt
@@ -34,7 +34,7 @@
* - [InputTransformation].[maxLengthInCodepoints]`()`
* - [InputTransformation].[allCaps]`()`
*
- * @sample androidx.compose.foundation.samples.BasicTextField2CustomFilterSample
+ * @sample androidx.compose.foundation.samples.BasicTextField2CustomInputTransformationSample
*/
@ExperimentalFoundationApi
@Stable
@@ -58,7 +58,54 @@
*/
fun transformInput(originalValue: TextFieldCharSequence, valueWithChanges: TextFieldBuffer)
- companion object
+ companion object {
+ /**
+ * Creates an [InputTransformation] from a function that accepts both the old and proposed
+ * [TextFieldCharSequence] and returns the [TextFieldCharSequence] to use for the field.
+ *
+ * [transformation] can return either `old`, `proposed`, or a completely different value.
+ *
+ * The selection or cursor will be updated automatically. For more control of selection
+ * implement [InputTransformation] directly.
+ *
+ * @sample androidx.compose.foundation.samples.BasicTextField2InputTransformationByValueChooseSample
+ * @sample androidx.compose.foundation.samples.BasicTextField2InputTransformationByValueReplaceSample
+ */
+ @ExperimentalFoundationApi
+ @Stable
+ fun byValue(
+ transformation: (
+ current: CharSequence,
+ proposed: CharSequence
+ ) -> CharSequence
+ ): InputTransformation = InputTransformationByValue(transformation)
+ }
+}
+
+@OptIn(ExperimentalFoundationApi::class)
+private data class InputTransformationByValue(
+ val transformation: (
+ old: CharSequence,
+ proposed: CharSequence
+ ) -> CharSequence
+) : InputTransformation {
+ override fun transformInput(
+ originalValue: TextFieldCharSequence,
+ valueWithChanges: TextFieldBuffer
+ ) {
+ val proposed = valueWithChanges.toTextFieldCharSequence()
+ val accepted = transformation(originalValue, proposed)
+ when {
+ // These are reference comparisons – text comparison will be done by setTextIfChanged.
+ accepted === proposed -> return
+ accepted === originalValue -> valueWithChanges.revertAllChanges()
+ else -> {
+ valueWithChanges.setTextIfChanged(accepted)
+ }
+ }
+ }
+
+ override fun toString(): String = "InputTransformation.byValue(transformation=$transformation)"
}
/**
@@ -68,7 +115,7 @@
* The returned filter will use the [KeyboardOptions] from [next] if non-null, otherwise it will
* use the options from this transformation.
*
- * @sample androidx.compose.foundation.samples.BasicTextField2FilterChainingSample
+ * @sample androidx.compose.foundation.samples.BasicTextField2InputTransformationChainingSample
*
* @param next The [InputTransformation] that will be ran after this one.
*/
@@ -88,7 +135,7 @@
* The returned filter will use the [KeyboardOptions] from [next] if non-null, otherwise it will
* use the options from this transformation.
*
- * @sample androidx.compose.foundation.samples.BasicTextField2FilterChainingSample
+ * @sample androidx.compose.foundation.samples.BasicTextField2InputTransformationChainingSample
*
* @param next The [InputTransformation] that will be ran after this one.
*/
diff --git a/compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/text2/input/TextFieldBuffer.kt b/compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/text2/input/TextFieldBuffer.kt
index a332068..7257d0e 100644
--- a/compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/text2/input/TextFieldBuffer.kt
+++ b/compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/text2/input/TextFieldBuffer.kt
@@ -123,7 +123,7 @@
* @see insert
* @see delete
*/
- fun replace(start: Int, end: Int, text: String) {
+ fun replace(start: Int, end: Int, text: CharSequence) {
replace(start, end, text, 0, text.length)
}
diff --git a/compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/text2/input/TextFieldState.kt b/compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/text2/input/TextFieldState.kt
index 82885f3..d41f228 100644
--- a/compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/text2/input/TextFieldState.kt
+++ b/compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/text2/input/TextFieldState.kt
@@ -68,7 +68,7 @@
constructor(
initialText: String = "",
- initialSelectionInChars: TextRange = TextRange.Zero
+ initialSelectionInChars: TextRange = TextRange(initialText.length)
) : this(initialText, initialSelectionInChars, TextUndoManager())
/**
@@ -466,10 +466,12 @@
*/
@ExperimentalFoundationApi
@Composable
-fun rememberTextFieldState(): TextFieldState =
- rememberSaveable(saver = TextFieldState.Saver) {
- TextFieldState()
- }
+fun rememberTextFieldState(
+ initialText: String = "",
+ initialSelectionInChars: TextRange = TextRange(initialText.length)
+): TextFieldState = rememberSaveable(saver = TextFieldState.Saver) {
+ TextFieldState(initialText, initialSelectionInChars)
+}
/**
* Sets the text in this [TextFieldState] to [text], replacing any text that was previously there,
diff --git a/compose/material/material-ripple/build.gradle b/compose/material/material-ripple/build.gradle
index f4f8356..3402ddc 100644
--- a/compose/material/material-ripple/build.gradle
+++ b/compose/material/material-ripple/build.gradle
@@ -100,10 +100,6 @@
}
}
- // TODO(b/214407011): These dependencies leak into instrumented tests as well. If you
- // need to add Robolectric (which must be kept out of androidAndroidTest), use a top
- // level dependencies block instead:
- // `dependencies { testImplementation(libs.robolectric) }`
androidUnitTest {
dependsOn(jvmTest)
dependencies {
diff --git a/compose/material/material/build.gradle b/compose/material/material/build.gradle
index 577c4b8..7697ff4 100644
--- a/compose/material/material/build.gradle
+++ b/compose/material/material/build.gradle
@@ -123,10 +123,6 @@
}
}
- // TODO(b/214407011): These dependencies leak into instrumented tests as well. If you
- // need to add Robolectric (which must be kept out of androidAndroidTest), use a top
- // level dependencies block instead:
- // `dependencies { testImplementation(libs.robolectric) }`
androidUnitTest {
dependsOn(jvmTest)
dependencies {
diff --git a/compose/material/material/src/commonMain/kotlin/androidx/compose/material/Icon.kt b/compose/material/material/src/commonMain/kotlin/androidx/compose/material/Icon.kt
index efa929b..a1ad2e6 100644
--- a/compose/material/material/src/commonMain/kotlin/androidx/compose/material/Icon.kt
+++ b/compose/material/material/src/commonMain/kotlin/androidx/compose/material/Icon.kt
@@ -133,8 +133,9 @@
modifier: Modifier = Modifier,
tint: Color = LocalContentColor.current.copy(alpha = LocalContentAlpha.current)
) {
- // TODO: b/149735981 semantics for content description
- val colorFilter = if (tint == Color.Unspecified) null else ColorFilter.tint(tint)
+ val colorFilter = remember(tint) {
+ if (tint == Color.Unspecified) null else ColorFilter.tint(tint)
+ }
val semantics = if (contentDescription != null) {
Modifier.semantics {
this.contentDescription = contentDescription
diff --git a/compose/material3/benchmark/src/androidTest/java/androidx/compose/material3/benchmark/TabRowBenchmark.kt b/compose/material3/benchmark/src/androidTest/java/androidx/compose/material3/benchmark/TabRowBenchmark.kt
index 05c800e..7e5d45e 100644
--- a/compose/material3/benchmark/src/androidTest/java/androidx/compose/material3/benchmark/TabRowBenchmark.kt
+++ b/compose/material3/benchmark/src/androidTest/java/androidx/compose/material3/benchmark/TabRowBenchmark.kt
@@ -17,8 +17,8 @@
package androidx.compose.material3.benchmark
import androidx.compose.material3.MaterialTheme
+import androidx.compose.material3.PrimaryTabRow
import androidx.compose.material3.Tab
-import androidx.compose.material3.TabRow
import androidx.compose.material3.Text
import androidx.compose.runtime.Composable
import androidx.compose.runtime.getValue
@@ -58,7 +58,7 @@
@Composable
override fun MeasuredContent() {
val titles = listOf("TAB 1", "TAB 2", "TAB 3")
- TabRow(selectedTabIndex = state) {
+ PrimaryTabRow(selectedTabIndex = state) {
titles.forEachIndexed { index, title ->
Tab(
text = { Text(title) },
diff --git a/compose/material3/material3-adaptive/api/current.txt b/compose/material3/material3-adaptive/api/current.txt
index c21a89f..1921972 100644
--- a/compose/material3/material3-adaptive/api/current.txt
+++ b/compose/material3/material3-adaptive/api/current.txt
@@ -200,8 +200,8 @@
}
@SuppressCompatibility @androidx.compose.material3.adaptive.ExperimentalMaterial3AdaptiveApi public final class ThreePaneScaffoldDefaults {
+ method public androidx.compose.material3.adaptive.ThreePaneScaffoldAdaptStrategies adaptStrategies(optional androidx.compose.material3.adaptive.AdaptStrategy primaryPaneAdaptStrategy, optional androidx.compose.material3.adaptive.AdaptStrategy secondaryPaneAdaptStrategy, optional androidx.compose.material3.adaptive.AdaptStrategy tertiaryPaneAdaptStrategy);
method public androidx.compose.material3.adaptive.ThreePaneScaffoldArrangement getListDetailLayoutArrangement();
- method public androidx.compose.material3.adaptive.ThreePaneScaffoldAdaptStrategies threePaneScaffoldAdaptStrategies(optional androidx.compose.material3.adaptive.AdaptStrategy primaryPaneAdaptStrategy, optional androidx.compose.material3.adaptive.AdaptStrategy secondaryPaneAdaptStrategy, optional androidx.compose.material3.adaptive.AdaptStrategy tertiaryPaneAdaptStrategy);
property public final androidx.compose.material3.adaptive.ThreePaneScaffoldArrangement ListDetailLayoutArrangement;
field public static final androidx.compose.material3.adaptive.ThreePaneScaffoldDefaults INSTANCE;
}
diff --git a/compose/material3/material3-adaptive/api/restricted_current.txt b/compose/material3/material3-adaptive/api/restricted_current.txt
index c21a89f..1921972 100644
--- a/compose/material3/material3-adaptive/api/restricted_current.txt
+++ b/compose/material3/material3-adaptive/api/restricted_current.txt
@@ -200,8 +200,8 @@
}
@SuppressCompatibility @androidx.compose.material3.adaptive.ExperimentalMaterial3AdaptiveApi public final class ThreePaneScaffoldDefaults {
+ method public androidx.compose.material3.adaptive.ThreePaneScaffoldAdaptStrategies adaptStrategies(optional androidx.compose.material3.adaptive.AdaptStrategy primaryPaneAdaptStrategy, optional androidx.compose.material3.adaptive.AdaptStrategy secondaryPaneAdaptStrategy, optional androidx.compose.material3.adaptive.AdaptStrategy tertiaryPaneAdaptStrategy);
method public androidx.compose.material3.adaptive.ThreePaneScaffoldArrangement getListDetailLayoutArrangement();
- method public androidx.compose.material3.adaptive.ThreePaneScaffoldAdaptStrategies threePaneScaffoldAdaptStrategies(optional androidx.compose.material3.adaptive.AdaptStrategy primaryPaneAdaptStrategy, optional androidx.compose.material3.adaptive.AdaptStrategy secondaryPaneAdaptStrategy, optional androidx.compose.material3.adaptive.AdaptStrategy tertiaryPaneAdaptStrategy);
property public final androidx.compose.material3.adaptive.ThreePaneScaffoldArrangement ListDetailLayoutArrangement;
field public static final androidx.compose.material3.adaptive.ThreePaneScaffoldDefaults INSTANCE;
}
diff --git a/compose/material3/material3-adaptive/src/androidMain/kotlin/androidx/compose/material3/adaptive/AndroidPosture.android.kt b/compose/material3/material3-adaptive/src/androidMain/kotlin/androidx/compose/material3/adaptive/AndroidPosture.android.kt
index 629d238..f7077cf 100644
--- a/compose/material3/material3-adaptive/src/androidMain/kotlin/androidx/compose/material3/adaptive/AndroidPosture.android.kt
+++ b/compose/material3/material3-adaptive/src/androidMain/kotlin/androidx/compose/material3/adaptive/AndroidPosture.android.kt
@@ -45,12 +45,15 @@
isTableTop = true
}
val hingeBounds = it.bounds.toComposeRect()
- allHingeBounds.add(hingeBounds)
- if (it.isSeparating) {
- separatingHingeBounds.add(hingeBounds)
- }
- if (it.occlusionType == FoldingFeature.OcclusionType.FULL) {
- occludingHingeBounds.add(hingeBounds)
+ // TODO(conradchen): Figure out how to deal with horizontal hinges
+ if (it.orientation == FoldingFeature.Orientation.VERTICAL) {
+ allHingeBounds.add(hingeBounds)
+ if (it.isSeparating) {
+ separatingHingeBounds.add(hingeBounds)
+ }
+ if (it.occlusionType == FoldingFeature.OcclusionType.FULL) {
+ occludingHingeBounds.add(hingeBounds)
+ }
}
}
return Posture(
diff --git a/compose/material3/material3-adaptive/src/commonMain/kotlin/androidx/compose/material3/adaptive/ThreePaneScaffold.kt b/compose/material3/material3-adaptive/src/commonMain/kotlin/androidx/compose/material3/adaptive/ThreePaneScaffold.kt
index 3dcc396..82e419f 100644
--- a/compose/material3/material3-adaptive/src/commonMain/kotlin/androidx/compose/material3/adaptive/ThreePaneScaffold.kt
+++ b/compose/material3/material3-adaptive/src/commonMain/kotlin/androidx/compose/material3/adaptive/ThreePaneScaffold.kt
@@ -117,6 +117,8 @@
val layoutPhysicalPartitions = mutableListOf<Rect>()
var actualLeft = layoutBounds.left + outerVerticalGutterSize
var actualRight = layoutBounds.right - outerVerticalGutterSize
+ val actualTop = layoutBounds.top + outerHorizontalGutterSize
+ val actualBottom = layoutBounds.bottom - outerHorizontalGutterSize
// Assume hinge bounds are sorted from left to right, non-overlapped.
layoutDirective.excludedBounds.fastForEach { hingeBound ->
if (hingeBound.left <= actualLeft) {
@@ -133,7 +135,7 @@
// The hinge is inside the layout, add the current partition to the list and
// move the left edge of the next partition to the right of the hinge.
layoutPhysicalPartitions.add(
- Rect(actualLeft, layoutBounds.top, hingeBound.left, layoutBounds.bottom)
+ Rect(actualLeft, actualTop, hingeBound.left, actualBottom)
)
actualLeft +=
max(hingeBound.right, hingeBound.left + innerVerticalGutterSize)
@@ -142,10 +144,12 @@
if (actualLeft < actualRight) {
// The last partition
layoutPhysicalPartitions.add(
- Rect(actualLeft, layoutBounds.top, actualRight, layoutBounds.bottom)
+ Rect(actualLeft, actualTop, actualRight, actualBottom)
)
}
- if (layoutPhysicalPartitions.size == 1) {
+ if (layoutPhysicalPartitions.size == 0) {
+ // Display nothing
+ } else if (layoutPhysicalPartitions.size == 1) {
measureAndPlacePanes(
layoutPhysicalPartitions[0],
innerVerticalGutterSize,
@@ -266,7 +270,7 @@
}
private fun Placeable.PlacementScope.getLocalBounds(bounds: Rect): IntRect {
- return bounds.translate(coordinates!!.localToWindow(Offset.Zero)).roundToIntRect()
+ return bounds.translate(coordinates!!.windowToLocal(Offset.Zero)).roundToIntRect()
}
private class PaneMeasurable(
@@ -325,7 +329,7 @@
* @param secondaryPaneAdaptStrategy the adapt strategy of the secondary pane
* @param tertiaryPaneAdaptStrategy the adapt strategy of the tertiary pane
*/
- fun threePaneScaffoldAdaptStrategies(
+ fun adaptStrategies(
primaryPaneAdaptStrategy: AdaptStrategy = AdaptStrategy.Hide,
secondaryPaneAdaptStrategy: AdaptStrategy = AdaptStrategy.Hide,
tertiaryPaneAdaptStrategy: AdaptStrategy = AdaptStrategy.Hide,
diff --git a/compose/material3/material3-adaptive/src/commonMain/kotlin/androidx/compose/material3/adaptive/ThreePaneScaffoldValue.kt b/compose/material3/material3-adaptive/src/commonMain/kotlin/androidx/compose/material3/adaptive/ThreePaneScaffoldValue.kt
index 66b6f06..d7326ea 100644
--- a/compose/material3/material3-adaptive/src/commonMain/kotlin/androidx/compose/material3/adaptive/ThreePaneScaffoldValue.kt
+++ b/compose/material3/material3-adaptive/src/commonMain/kotlin/androidx/compose/material3/adaptive/ThreePaneScaffoldValue.kt
@@ -52,7 +52,7 @@
fun calculateThreePaneScaffoldValue(
maxHorizontalPartitions: Int,
adaptStrategies: ThreePaneScaffoldAdaptStrategies =
- ThreePaneScaffoldDefaults.threePaneScaffoldAdaptStrategies(),
+ ThreePaneScaffoldDefaults.adaptStrategies(),
currentFocus: ThreePaneScaffoldRole? = null,
): ThreePaneScaffoldValue {
var expandedCount = if (currentFocus != null) 1 else 0
diff --git a/compose/material3/material3/api/current.txt b/compose/material3/material3/api/current.txt
index f4017d9..f4b4426a 100644
--- a/compose/material3/material3/api/current.txt
+++ b/compose/material3/material3/api/current.txt
@@ -124,6 +124,7 @@
method @androidx.compose.runtime.Composable public androidx.compose.ui.graphics.Shape getExpandedShape();
method @androidx.compose.runtime.Composable public androidx.compose.ui.graphics.Shape getHiddenShape();
method @androidx.compose.runtime.Composable public long getScrimColor();
+ method public float getSheetMaxWidth();
method public float getSheetPeekHeight();
method @androidx.compose.runtime.Composable public androidx.compose.foundation.layout.WindowInsets getWindowInsets();
property @androidx.compose.runtime.Composable public final long ContainerColor;
@@ -131,13 +132,14 @@
property @androidx.compose.runtime.Composable public final androidx.compose.ui.graphics.Shape ExpandedShape;
property @androidx.compose.runtime.Composable public final androidx.compose.ui.graphics.Shape HiddenShape;
property @androidx.compose.runtime.Composable public final long ScrimColor;
+ property public final float SheetMaxWidth;
property public final float SheetPeekHeight;
property @androidx.compose.runtime.Composable public final androidx.compose.foundation.layout.WindowInsets windowInsets;
field public static final androidx.compose.material3.BottomSheetDefaults INSTANCE;
}
public final class BottomSheetScaffoldKt {
- method @SuppressCompatibility @androidx.compose.material3.ExperimentalMaterial3Api @androidx.compose.runtime.Composable public static void BottomSheetScaffold(kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.ColumnScope,kotlin.Unit> sheetContent, optional androidx.compose.ui.Modifier modifier, optional androidx.compose.material3.BottomSheetScaffoldState scaffoldState, optional float sheetPeekHeight, optional androidx.compose.ui.graphics.Shape sheetShape, optional long sheetContainerColor, optional long sheetContentColor, optional float sheetTonalElevation, optional float sheetShadowElevation, optional kotlin.jvm.functions.Function0<kotlin.Unit>? sheetDragHandle, optional boolean sheetSwipeEnabled, optional kotlin.jvm.functions.Function0<kotlin.Unit>? topBar, optional kotlin.jvm.functions.Function1<? super androidx.compose.material3.SnackbarHostState,kotlin.Unit> snackbarHost, optional long containerColor, optional long contentColor, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.PaddingValues,kotlin.Unit> content);
+ method @SuppressCompatibility @androidx.compose.material3.ExperimentalMaterial3Api @androidx.compose.runtime.Composable public static void BottomSheetScaffold(kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.ColumnScope,kotlin.Unit> sheetContent, optional androidx.compose.ui.Modifier modifier, optional androidx.compose.material3.BottomSheetScaffoldState scaffoldState, optional float sheetPeekHeight, optional float sheetMaxWidth, optional androidx.compose.ui.graphics.Shape sheetShape, optional long sheetContainerColor, optional long sheetContentColor, optional float sheetTonalElevation, optional float sheetShadowElevation, optional kotlin.jvm.functions.Function0<kotlin.Unit>? sheetDragHandle, optional boolean sheetSwipeEnabled, optional kotlin.jvm.functions.Function0<kotlin.Unit>? topBar, optional kotlin.jvm.functions.Function1<? super androidx.compose.material3.SnackbarHostState,kotlin.Unit> snackbarHost, optional long containerColor, optional long contentColor, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.PaddingValues,kotlin.Unit> content);
method @SuppressCompatibility @androidx.compose.material3.ExperimentalMaterial3Api @androidx.compose.runtime.Composable public static androidx.compose.material3.BottomSheetScaffoldState rememberBottomSheetScaffoldState(optional androidx.compose.material3.SheetState bottomSheetState, optional androidx.compose.material3.SnackbarHostState snackbarHostState);
method @SuppressCompatibility @androidx.compose.material3.ExperimentalMaterial3Api @androidx.compose.runtime.Composable public static androidx.compose.material3.SheetState rememberStandardBottomSheetState(optional androidx.compose.material3.SheetValue initialValue, optional kotlin.jvm.functions.Function1<? super androidx.compose.material3.SheetValue,java.lang.Boolean> confirmValueChange, optional boolean skipHiddenState);
}
@@ -951,7 +953,7 @@
}
public final class ModalBottomSheet_androidKt {
- method @SuppressCompatibility @androidx.compose.material3.ExperimentalMaterial3Api @androidx.compose.runtime.Composable public static void ModalBottomSheet(kotlin.jvm.functions.Function0<kotlin.Unit> onDismissRequest, optional androidx.compose.ui.Modifier modifier, optional androidx.compose.material3.SheetState sheetState, optional androidx.compose.ui.graphics.Shape shape, optional long containerColor, optional long contentColor, optional float tonalElevation, optional long scrimColor, optional kotlin.jvm.functions.Function0<kotlin.Unit>? dragHandle, optional androidx.compose.foundation.layout.WindowInsets windowInsets, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.ColumnScope,kotlin.Unit> content);
+ method @SuppressCompatibility @androidx.compose.material3.ExperimentalMaterial3Api @androidx.compose.runtime.Composable public static void ModalBottomSheet(kotlin.jvm.functions.Function0<kotlin.Unit> onDismissRequest, optional androidx.compose.ui.Modifier modifier, optional androidx.compose.material3.SheetState sheetState, optional float sheetMaxWidth, optional androidx.compose.ui.graphics.Shape shape, optional long containerColor, optional long contentColor, optional float tonalElevation, optional long scrimColor, optional kotlin.jvm.functions.Function0<kotlin.Unit>? dragHandle, optional androidx.compose.foundation.layout.WindowInsets windowInsets, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.ColumnScope,kotlin.Unit> content);
method @SuppressCompatibility @androidx.compose.material3.ExperimentalMaterial3Api @androidx.compose.runtime.Composable public static androidx.compose.material3.SheetState rememberModalBottomSheetState(optional boolean skipPartiallyExpanded, optional kotlin.jvm.functions.Function1<? super androidx.compose.material3.SheetValue,java.lang.Boolean> confirmValueChange);
}
@@ -1607,17 +1609,31 @@
method @Deprecated @androidx.compose.runtime.Composable public void Indicator(optional androidx.compose.ui.Modifier modifier, optional float height, optional long color);
method @androidx.compose.runtime.Composable public void PrimaryIndicator(optional androidx.compose.ui.Modifier modifier, optional float width, optional float height, optional long color, optional androidx.compose.ui.graphics.Shape shape);
method @androidx.compose.runtime.Composable public void SecondaryIndicator(optional androidx.compose.ui.Modifier modifier, optional float height, optional long color);
- method @androidx.compose.runtime.Composable public long getContainerColor();
- method @androidx.compose.runtime.Composable public long getContentColor();
+ method @Deprecated @androidx.compose.runtime.Composable public long getContainerColor();
+ method @Deprecated @androidx.compose.runtime.Composable public long getContentColor();
+ method @androidx.compose.runtime.Composable public long getPrimaryContainerColor();
+ method @androidx.compose.runtime.Composable public long getPrimaryContentColor();
+ method public float getScrollableTabRowEdgeStartPadding();
+ method @androidx.compose.runtime.Composable public long getSecondaryContainerColor();
+ method @androidx.compose.runtime.Composable public long getSecondaryContentColor();
method public androidx.compose.ui.Modifier tabIndicatorOffset(androidx.compose.ui.Modifier, androidx.compose.material3.TabPosition currentTabPosition);
- property @androidx.compose.runtime.Composable public final long containerColor;
- property @androidx.compose.runtime.Composable public final long contentColor;
+ property public final float ScrollableTabRowEdgeStartPadding;
+ property @Deprecated @androidx.compose.runtime.Composable public final long containerColor;
+ property @Deprecated @androidx.compose.runtime.Composable public final long contentColor;
+ property @androidx.compose.runtime.Composable public final long primaryContainerColor;
+ property @androidx.compose.runtime.Composable public final long primaryContentColor;
+ property @androidx.compose.runtime.Composable public final long secondaryContainerColor;
+ property @androidx.compose.runtime.Composable public final long secondaryContentColor;
field public static final androidx.compose.material3.TabRowDefaults INSTANCE;
}
public final class TabRowKt {
- method @androidx.compose.runtime.Composable public static void ScrollableTabRow(int selectedTabIndex, optional androidx.compose.ui.Modifier modifier, optional long containerColor, optional long contentColor, optional float edgePadding, optional kotlin.jvm.functions.Function1<? super java.util.List<androidx.compose.material3.TabPosition>,kotlin.Unit> indicator, optional kotlin.jvm.functions.Function0<kotlin.Unit> divider, kotlin.jvm.functions.Function0<kotlin.Unit> tabs);
- method @androidx.compose.runtime.Composable public static void TabRow(int selectedTabIndex, optional androidx.compose.ui.Modifier modifier, optional long containerColor, optional long contentColor, optional kotlin.jvm.functions.Function1<? super java.util.List<androidx.compose.material3.TabPosition>,kotlin.Unit> indicator, optional kotlin.jvm.functions.Function0<kotlin.Unit> divider, kotlin.jvm.functions.Function0<kotlin.Unit> tabs);
+ method @androidx.compose.runtime.Composable public static void PrimaryScrollableTabRow(int selectedTabIndex, optional androidx.compose.ui.Modifier modifier, optional androidx.compose.foundation.ScrollState scrollState, optional long containerColor, optional long contentColor, optional float edgePadding, optional kotlin.jvm.functions.Function1<? super java.util.List<androidx.compose.material3.TabPosition>,kotlin.Unit> indicator, optional kotlin.jvm.functions.Function0<kotlin.Unit> divider, kotlin.jvm.functions.Function0<kotlin.Unit> tabs);
+ method @androidx.compose.runtime.Composable public static void PrimaryTabRow(int selectedTabIndex, optional androidx.compose.ui.Modifier modifier, optional long containerColor, optional long contentColor, optional kotlin.jvm.functions.Function1<? super java.util.List<androidx.compose.material3.TabPosition>,kotlin.Unit> indicator, optional kotlin.jvm.functions.Function0<kotlin.Unit> divider, kotlin.jvm.functions.Function0<kotlin.Unit> tabs);
+ method @Deprecated @androidx.compose.runtime.Composable public static void ScrollableTabRow(int selectedTabIndex, optional androidx.compose.ui.Modifier modifier, optional long containerColor, optional long contentColor, optional float edgePadding, optional kotlin.jvm.functions.Function1<? super java.util.List<androidx.compose.material3.TabPosition>,kotlin.Unit> indicator, optional kotlin.jvm.functions.Function0<kotlin.Unit> divider, kotlin.jvm.functions.Function0<kotlin.Unit> tabs);
+ method @androidx.compose.runtime.Composable public static void SecondaryScrollableTabRow(int selectedTabIndex, optional androidx.compose.ui.Modifier modifier, optional androidx.compose.foundation.ScrollState scrollState, optional long containerColor, optional long contentColor, optional float edgePadding, optional kotlin.jvm.functions.Function1<? super java.util.List<androidx.compose.material3.TabPosition>,kotlin.Unit> indicator, optional kotlin.jvm.functions.Function0<kotlin.Unit> divider, kotlin.jvm.functions.Function0<kotlin.Unit> tabs);
+ method @androidx.compose.runtime.Composable public static void SecondaryTabRow(int selectedTabIndex, optional androidx.compose.ui.Modifier modifier, optional long containerColor, optional long contentColor, optional kotlin.jvm.functions.Function1<? super java.util.List<androidx.compose.material3.TabPosition>,kotlin.Unit> indicator, optional kotlin.jvm.functions.Function0<kotlin.Unit> divider, kotlin.jvm.functions.Function0<kotlin.Unit> tabs);
+ method @Deprecated @androidx.compose.runtime.Composable public static void TabRow(int selectedTabIndex, optional androidx.compose.ui.Modifier modifier, optional long containerColor, optional long contentColor, optional kotlin.jvm.functions.Function1<? super java.util.List<androidx.compose.material3.TabPosition>,kotlin.Unit> indicator, optional kotlin.jvm.functions.Function0<kotlin.Unit> divider, kotlin.jvm.functions.Function0<kotlin.Unit> tabs);
}
@androidx.compose.runtime.Immutable public final class TextFieldColors {
diff --git a/compose/material3/material3/api/restricted_current.txt b/compose/material3/material3/api/restricted_current.txt
index f4017d9..f4b4426a 100644
--- a/compose/material3/material3/api/restricted_current.txt
+++ b/compose/material3/material3/api/restricted_current.txt
@@ -124,6 +124,7 @@
method @androidx.compose.runtime.Composable public androidx.compose.ui.graphics.Shape getExpandedShape();
method @androidx.compose.runtime.Composable public androidx.compose.ui.graphics.Shape getHiddenShape();
method @androidx.compose.runtime.Composable public long getScrimColor();
+ method public float getSheetMaxWidth();
method public float getSheetPeekHeight();
method @androidx.compose.runtime.Composable public androidx.compose.foundation.layout.WindowInsets getWindowInsets();
property @androidx.compose.runtime.Composable public final long ContainerColor;
@@ -131,13 +132,14 @@
property @androidx.compose.runtime.Composable public final androidx.compose.ui.graphics.Shape ExpandedShape;
property @androidx.compose.runtime.Composable public final androidx.compose.ui.graphics.Shape HiddenShape;
property @androidx.compose.runtime.Composable public final long ScrimColor;
+ property public final float SheetMaxWidth;
property public final float SheetPeekHeight;
property @androidx.compose.runtime.Composable public final androidx.compose.foundation.layout.WindowInsets windowInsets;
field public static final androidx.compose.material3.BottomSheetDefaults INSTANCE;
}
public final class BottomSheetScaffoldKt {
- method @SuppressCompatibility @androidx.compose.material3.ExperimentalMaterial3Api @androidx.compose.runtime.Composable public static void BottomSheetScaffold(kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.ColumnScope,kotlin.Unit> sheetContent, optional androidx.compose.ui.Modifier modifier, optional androidx.compose.material3.BottomSheetScaffoldState scaffoldState, optional float sheetPeekHeight, optional androidx.compose.ui.graphics.Shape sheetShape, optional long sheetContainerColor, optional long sheetContentColor, optional float sheetTonalElevation, optional float sheetShadowElevation, optional kotlin.jvm.functions.Function0<kotlin.Unit>? sheetDragHandle, optional boolean sheetSwipeEnabled, optional kotlin.jvm.functions.Function0<kotlin.Unit>? topBar, optional kotlin.jvm.functions.Function1<? super androidx.compose.material3.SnackbarHostState,kotlin.Unit> snackbarHost, optional long containerColor, optional long contentColor, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.PaddingValues,kotlin.Unit> content);
+ method @SuppressCompatibility @androidx.compose.material3.ExperimentalMaterial3Api @androidx.compose.runtime.Composable public static void BottomSheetScaffold(kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.ColumnScope,kotlin.Unit> sheetContent, optional androidx.compose.ui.Modifier modifier, optional androidx.compose.material3.BottomSheetScaffoldState scaffoldState, optional float sheetPeekHeight, optional float sheetMaxWidth, optional androidx.compose.ui.graphics.Shape sheetShape, optional long sheetContainerColor, optional long sheetContentColor, optional float sheetTonalElevation, optional float sheetShadowElevation, optional kotlin.jvm.functions.Function0<kotlin.Unit>? sheetDragHandle, optional boolean sheetSwipeEnabled, optional kotlin.jvm.functions.Function0<kotlin.Unit>? topBar, optional kotlin.jvm.functions.Function1<? super androidx.compose.material3.SnackbarHostState,kotlin.Unit> snackbarHost, optional long containerColor, optional long contentColor, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.PaddingValues,kotlin.Unit> content);
method @SuppressCompatibility @androidx.compose.material3.ExperimentalMaterial3Api @androidx.compose.runtime.Composable public static androidx.compose.material3.BottomSheetScaffoldState rememberBottomSheetScaffoldState(optional androidx.compose.material3.SheetState bottomSheetState, optional androidx.compose.material3.SnackbarHostState snackbarHostState);
method @SuppressCompatibility @androidx.compose.material3.ExperimentalMaterial3Api @androidx.compose.runtime.Composable public static androidx.compose.material3.SheetState rememberStandardBottomSheetState(optional androidx.compose.material3.SheetValue initialValue, optional kotlin.jvm.functions.Function1<? super androidx.compose.material3.SheetValue,java.lang.Boolean> confirmValueChange, optional boolean skipHiddenState);
}
@@ -951,7 +953,7 @@
}
public final class ModalBottomSheet_androidKt {
- method @SuppressCompatibility @androidx.compose.material3.ExperimentalMaterial3Api @androidx.compose.runtime.Composable public static void ModalBottomSheet(kotlin.jvm.functions.Function0<kotlin.Unit> onDismissRequest, optional androidx.compose.ui.Modifier modifier, optional androidx.compose.material3.SheetState sheetState, optional androidx.compose.ui.graphics.Shape shape, optional long containerColor, optional long contentColor, optional float tonalElevation, optional long scrimColor, optional kotlin.jvm.functions.Function0<kotlin.Unit>? dragHandle, optional androidx.compose.foundation.layout.WindowInsets windowInsets, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.ColumnScope,kotlin.Unit> content);
+ method @SuppressCompatibility @androidx.compose.material3.ExperimentalMaterial3Api @androidx.compose.runtime.Composable public static void ModalBottomSheet(kotlin.jvm.functions.Function0<kotlin.Unit> onDismissRequest, optional androidx.compose.ui.Modifier modifier, optional androidx.compose.material3.SheetState sheetState, optional float sheetMaxWidth, optional androidx.compose.ui.graphics.Shape shape, optional long containerColor, optional long contentColor, optional float tonalElevation, optional long scrimColor, optional kotlin.jvm.functions.Function0<kotlin.Unit>? dragHandle, optional androidx.compose.foundation.layout.WindowInsets windowInsets, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.ColumnScope,kotlin.Unit> content);
method @SuppressCompatibility @androidx.compose.material3.ExperimentalMaterial3Api @androidx.compose.runtime.Composable public static androidx.compose.material3.SheetState rememberModalBottomSheetState(optional boolean skipPartiallyExpanded, optional kotlin.jvm.functions.Function1<? super androidx.compose.material3.SheetValue,java.lang.Boolean> confirmValueChange);
}
@@ -1607,17 +1609,31 @@
method @Deprecated @androidx.compose.runtime.Composable public void Indicator(optional androidx.compose.ui.Modifier modifier, optional float height, optional long color);
method @androidx.compose.runtime.Composable public void PrimaryIndicator(optional androidx.compose.ui.Modifier modifier, optional float width, optional float height, optional long color, optional androidx.compose.ui.graphics.Shape shape);
method @androidx.compose.runtime.Composable public void SecondaryIndicator(optional androidx.compose.ui.Modifier modifier, optional float height, optional long color);
- method @androidx.compose.runtime.Composable public long getContainerColor();
- method @androidx.compose.runtime.Composable public long getContentColor();
+ method @Deprecated @androidx.compose.runtime.Composable public long getContainerColor();
+ method @Deprecated @androidx.compose.runtime.Composable public long getContentColor();
+ method @androidx.compose.runtime.Composable public long getPrimaryContainerColor();
+ method @androidx.compose.runtime.Composable public long getPrimaryContentColor();
+ method public float getScrollableTabRowEdgeStartPadding();
+ method @androidx.compose.runtime.Composable public long getSecondaryContainerColor();
+ method @androidx.compose.runtime.Composable public long getSecondaryContentColor();
method public androidx.compose.ui.Modifier tabIndicatorOffset(androidx.compose.ui.Modifier, androidx.compose.material3.TabPosition currentTabPosition);
- property @androidx.compose.runtime.Composable public final long containerColor;
- property @androidx.compose.runtime.Composable public final long contentColor;
+ property public final float ScrollableTabRowEdgeStartPadding;
+ property @Deprecated @androidx.compose.runtime.Composable public final long containerColor;
+ property @Deprecated @androidx.compose.runtime.Composable public final long contentColor;
+ property @androidx.compose.runtime.Composable public final long primaryContainerColor;
+ property @androidx.compose.runtime.Composable public final long primaryContentColor;
+ property @androidx.compose.runtime.Composable public final long secondaryContainerColor;
+ property @androidx.compose.runtime.Composable public final long secondaryContentColor;
field public static final androidx.compose.material3.TabRowDefaults INSTANCE;
}
public final class TabRowKt {
- method @androidx.compose.runtime.Composable public static void ScrollableTabRow(int selectedTabIndex, optional androidx.compose.ui.Modifier modifier, optional long containerColor, optional long contentColor, optional float edgePadding, optional kotlin.jvm.functions.Function1<? super java.util.List<androidx.compose.material3.TabPosition>,kotlin.Unit> indicator, optional kotlin.jvm.functions.Function0<kotlin.Unit> divider, kotlin.jvm.functions.Function0<kotlin.Unit> tabs);
- method @androidx.compose.runtime.Composable public static void TabRow(int selectedTabIndex, optional androidx.compose.ui.Modifier modifier, optional long containerColor, optional long contentColor, optional kotlin.jvm.functions.Function1<? super java.util.List<androidx.compose.material3.TabPosition>,kotlin.Unit> indicator, optional kotlin.jvm.functions.Function0<kotlin.Unit> divider, kotlin.jvm.functions.Function0<kotlin.Unit> tabs);
+ method @androidx.compose.runtime.Composable public static void PrimaryScrollableTabRow(int selectedTabIndex, optional androidx.compose.ui.Modifier modifier, optional androidx.compose.foundation.ScrollState scrollState, optional long containerColor, optional long contentColor, optional float edgePadding, optional kotlin.jvm.functions.Function1<? super java.util.List<androidx.compose.material3.TabPosition>,kotlin.Unit> indicator, optional kotlin.jvm.functions.Function0<kotlin.Unit> divider, kotlin.jvm.functions.Function0<kotlin.Unit> tabs);
+ method @androidx.compose.runtime.Composable public static void PrimaryTabRow(int selectedTabIndex, optional androidx.compose.ui.Modifier modifier, optional long containerColor, optional long contentColor, optional kotlin.jvm.functions.Function1<? super java.util.List<androidx.compose.material3.TabPosition>,kotlin.Unit> indicator, optional kotlin.jvm.functions.Function0<kotlin.Unit> divider, kotlin.jvm.functions.Function0<kotlin.Unit> tabs);
+ method @Deprecated @androidx.compose.runtime.Composable public static void ScrollableTabRow(int selectedTabIndex, optional androidx.compose.ui.Modifier modifier, optional long containerColor, optional long contentColor, optional float edgePadding, optional kotlin.jvm.functions.Function1<? super java.util.List<androidx.compose.material3.TabPosition>,kotlin.Unit> indicator, optional kotlin.jvm.functions.Function0<kotlin.Unit> divider, kotlin.jvm.functions.Function0<kotlin.Unit> tabs);
+ method @androidx.compose.runtime.Composable public static void SecondaryScrollableTabRow(int selectedTabIndex, optional androidx.compose.ui.Modifier modifier, optional androidx.compose.foundation.ScrollState scrollState, optional long containerColor, optional long contentColor, optional float edgePadding, optional kotlin.jvm.functions.Function1<? super java.util.List<androidx.compose.material3.TabPosition>,kotlin.Unit> indicator, optional kotlin.jvm.functions.Function0<kotlin.Unit> divider, kotlin.jvm.functions.Function0<kotlin.Unit> tabs);
+ method @androidx.compose.runtime.Composable public static void SecondaryTabRow(int selectedTabIndex, optional androidx.compose.ui.Modifier modifier, optional long containerColor, optional long contentColor, optional kotlin.jvm.functions.Function1<? super java.util.List<androidx.compose.material3.TabPosition>,kotlin.Unit> indicator, optional kotlin.jvm.functions.Function0<kotlin.Unit> divider, kotlin.jvm.functions.Function0<kotlin.Unit> tabs);
+ method @Deprecated @androidx.compose.runtime.Composable public static void TabRow(int selectedTabIndex, optional androidx.compose.ui.Modifier modifier, optional long containerColor, optional long contentColor, optional kotlin.jvm.functions.Function1<? super java.util.List<androidx.compose.material3.TabPosition>,kotlin.Unit> indicator, optional kotlin.jvm.functions.Function0<kotlin.Unit> divider, kotlin.jvm.functions.Function0<kotlin.Unit> tabs);
}
@androidx.compose.runtime.Immutable public final class TextFieldColors {
diff --git a/compose/material3/material3/build.gradle b/compose/material3/material3/build.gradle
index 28b67ea..4c22ca1 100644
--- a/compose/material3/material3/build.gradle
+++ b/compose/material3/material3/build.gradle
@@ -111,10 +111,6 @@
}
}
- // TODO(b/214407011): These dependencies leak into instrumented tests as well. If you
- // need to add Robolectric (which must be kept out of androidAndroidTest), use a top
- // level dependencies block instead:
- // `dependencies { testImplementation(libs.robolectric) }`
androidUnitTest {
dependsOn(jvmTest)
dependencies {
diff --git a/compose/material3/material3/integration-tests/material3-catalog/src/main/java/androidx/compose/material3/catalog/library/model/Examples.kt b/compose/material3/material3/integration-tests/material3-catalog/src/main/java/androidx/compose/material3/catalog/library/model/Examples.kt
index 2e8c6a2..a8b34ca 100644
--- a/compose/material3/material3/integration-tests/material3-catalog/src/main/java/androidx/compose/material3/catalog/library/model/Examples.kt
+++ b/compose/material3/material3/integration-tests/material3-catalog/src/main/java/androidx/compose/material3/catalog/library/model/Examples.kt
@@ -75,7 +75,6 @@
import androidx.compose.material3.samples.FilterChipWithLeadingIconSample
import androidx.compose.material3.samples.FloatingActionButtonSample
import androidx.compose.material3.samples.IconButtonSample
-import androidx.compose.material3.samples.IconTabs
import androidx.compose.material3.samples.IconToggleButtonSample
import androidx.compose.material3.samples.IndeterminateCircularProgressIndicatorSample
import androidx.compose.material3.samples.IndeterminateLinearProgressIndicatorSample
@@ -106,7 +105,7 @@
import androidx.compose.material3.samples.PlainTooltipSample
import androidx.compose.material3.samples.PlainTooltipWithManualInvocationSample
import androidx.compose.material3.samples.PrimaryIconTabs
-import androidx.compose.material3.samples.PrimaryTabs
+import androidx.compose.material3.samples.PrimaryTextTabs
import androidx.compose.material3.samples.RadioButtonSample
import androidx.compose.material3.samples.RadioGroupSample
import androidx.compose.material3.samples.RangeSliderSample
@@ -119,11 +118,11 @@
import androidx.compose.material3.samples.ScaffoldWithMultilineSnackbar
import androidx.compose.material3.samples.ScaffoldWithSimpleSnackbar
import androidx.compose.material3.samples.ScrollingFancyIndicatorContainerTabs
-import androidx.compose.material3.samples.ScrollingPrimaryTabs
-import androidx.compose.material3.samples.ScrollingSecondaryTabs
-import androidx.compose.material3.samples.ScrollingTextTabs
+import androidx.compose.material3.samples.ScrollingPrimaryTextTabs
+import androidx.compose.material3.samples.ScrollingSecondaryTextTabs
import androidx.compose.material3.samples.SearchBarSample
-import androidx.compose.material3.samples.SecondaryTabs
+import androidx.compose.material3.samples.SecondaryIconTabs
+import androidx.compose.material3.samples.SecondaryTextTabs
import androidx.compose.material3.samples.SegmentedButtonMultiSelectSample
import androidx.compose.material3.samples.SegmentedButtonSingleSelectSample
import androidx.compose.material3.samples.SimpleBottomAppBar
@@ -151,7 +150,6 @@
import androidx.compose.material3.samples.TextFieldWithPlaceholder
import androidx.compose.material3.samples.TextFieldWithPrefixAndSuffix
import androidx.compose.material3.samples.TextFieldWithSupportingText
-import androidx.compose.material3.samples.TextTabs
import androidx.compose.material3.samples.ThreeLineListItemWithExtendedSupporting
import androidx.compose.material3.samples.ThreeLineListItemWithOverlineAndSupporting
import androidx.compose.material3.samples.TimeInputSample
@@ -954,11 +952,11 @@
private const val TabsExampleSourceUrl = "$SampleSourceUrl/TabSamples.kt"
val TabsExamples = listOf(
Example(
- name = ::PrimaryTabs.name,
+ name = ::PrimaryTextTabs.name,
description = TabsExampleDescription,
sourceUrl = TabsExampleSourceUrl
) {
- PrimaryTabs()
+ PrimaryTextTabs()
},
Example(
name = ::PrimaryIconTabs.name,
@@ -968,25 +966,18 @@
PrimaryIconTabs()
},
Example(
- name = ::SecondaryTabs.name,
+ name = ::SecondaryTextTabs.name,
description = TabsExampleDescription,
sourceUrl = TabsExampleSourceUrl
) {
- SecondaryTabs()
+ SecondaryTextTabs()
},
Example(
- name = ::TextTabs.name,
+ name = ::SecondaryIconTabs.name,
description = TabsExampleDescription,
sourceUrl = TabsExampleSourceUrl
) {
- TextTabs()
- },
- Example(
- name = ::IconTabs.name,
- description = TabsExampleDescription,
- sourceUrl = TabsExampleSourceUrl
- ) {
- IconTabs()
+ SecondaryIconTabs()
},
Example(
name = ::TextAndIconTabs.name,
@@ -1003,25 +994,18 @@
LeadingIconTabs()
},
Example(
- name = ::ScrollingPrimaryTabs.name,
+ name = ::ScrollingPrimaryTextTabs.name,
description = TabsExampleDescription,
sourceUrl = TabsExampleSourceUrl
) {
- ScrollingPrimaryTabs()
+ ScrollingPrimaryTextTabs()
},
Example(
- name = ::ScrollingSecondaryTabs.name,
+ name = ::ScrollingSecondaryTextTabs.name,
description = TabsExampleDescription,
sourceUrl = TabsExampleSourceUrl
) {
- ScrollingSecondaryTabs()
- },
- Example(
- name = ::ScrollingTextTabs.name,
- description = TabsExampleDescription,
- sourceUrl = TabsExampleSourceUrl
- ) {
- ScrollingTextTabs()
+ ScrollingSecondaryTextTabs()
},
Example(
name = ::FancyTabs.name,
diff --git a/compose/material3/material3/samples/src/main/java/androidx/compose/material3/samples/TabSamples.kt b/compose/material3/material3/samples/src/main/java/androidx/compose/material3/samples/TabSamples.kt
index f92469a..4cef431 100644
--- a/compose/material3/material3/samples/src/main/java/androidx/compose/material3/samples/TabSamples.kt
+++ b/compose/material3/material3/samples/src/main/java/androidx/compose/material3/samples/TabSamples.kt
@@ -42,10 +42,12 @@
import androidx.compose.material3.Icon
import androidx.compose.material3.LeadingIconTab
import androidx.compose.material3.MaterialTheme
-import androidx.compose.material3.ScrollableTabRow
+import androidx.compose.material3.PrimaryScrollableTabRow
+import androidx.compose.material3.PrimaryTabRow
+import androidx.compose.material3.SecondaryScrollableTabRow
+import androidx.compose.material3.SecondaryTabRow
import androidx.compose.material3.Tab
import androidx.compose.material3.TabPosition
-import androidx.compose.material3.TabRow
import androidx.compose.material3.TabRowDefaults
import androidx.compose.material3.TabRowDefaults.tabIndicatorOffset
import androidx.compose.material3.Text
@@ -63,19 +65,12 @@
@Preview
@Composable
-fun PrimaryTabs() {
+@Sampled
+fun PrimaryTextTabs() {
var state by remember { mutableStateOf(0) }
val titles = listOf("Tab 1", "Tab 2", "Tab 3 with lots of text")
Column {
- TabRow(selectedTabIndex = state, indicator = @Composable { tabPositions ->
- if (state < tabPositions.size) {
- val width by animateDpAsState(targetValue = tabPositions[state].contentWidth)
- TabRowDefaults.PrimaryIndicator(
- modifier = Modifier.tabIndicatorOffset(tabPositions[state]),
- width = width
- )
- }
- }) {
+ PrimaryTabRow(selectedTabIndex = state) {
titles.forEachIndexed { index, title ->
Tab(
selected = state == index,
@@ -98,14 +93,7 @@
var state by remember { mutableStateOf(0) }
val icons = listOf(Icons.Filled.Favorite, Icons.Filled.Favorite, Icons.Filled.Favorite)
Column {
- TabRow(selectedTabIndex = state, indicator = @Composable { tabPositions ->
- if (state < tabPositions.size) {
- TabRowDefaults.PrimaryIndicator(
- modifier = Modifier.tabIndicatorOffset(tabPositions[state]),
- width = tabPositions[state].contentWidth
- )
- }
- }) {
+ PrimaryTabRow(selectedTabIndex = state) {
icons.forEachIndexed { index, icon ->
Tab(
selected = state == index,
@@ -119,11 +107,12 @@
@Preview
@Composable
-fun SecondaryTabs() {
+@Sampled
+fun SecondaryTextTabs() {
var state by remember { mutableStateOf(0) }
val titles = listOf("Tab 1", "Tab 2", "Tab 3 with lots of text")
Column {
- TabRow(selectedTabIndex = state) {
+ SecondaryTabRow(selectedTabIndex = state) {
titles.forEachIndexed { index, title ->
Tab(
selected = state == index,
@@ -147,7 +136,7 @@
var state by remember { mutableStateOf(0) }
val titles = listOf("Tab 1", "Tab 2", "Tab 3 with lots of text")
Column {
- TabRow(selectedTabIndex = state) {
+ PrimaryTabRow(selectedTabIndex = state) {
titles.forEachIndexed { index, title ->
Tab(
selected = state == index,
@@ -166,11 +155,11 @@
@Preview
@Composable
-fun IconTabs() {
+fun SecondaryIconTabs() {
var state by remember { mutableStateOf(0) }
val icons = listOf(Icons.Filled.Favorite, Icons.Filled.Favorite, Icons.Filled.Favorite)
Column {
- TabRow(selectedTabIndex = state) {
+ SecondaryTabRow(selectedTabIndex = state) {
icons.forEachIndexed { index, icon ->
Tab(
selected = state == index,
@@ -197,7 +186,7 @@
"Tab 3 with lots of text" to Icons.Filled.Favorite
)
Column {
- TabRow(selectedTabIndex = state) {
+ PrimaryTabRow(selectedTabIndex = state) {
titlesAndIcons.forEachIndexed { index, (title, icon) ->
Tab(
selected = state == index,
@@ -225,7 +214,7 @@
"Tab 3 with lots of text" to Icons.Filled.Favorite
)
Column {
- ScrollableTabRow(selectedTabIndex = state) {
+ PrimaryScrollableTabRow(selectedTabIndex = state) {
titlesAndIcons.forEachIndexed { index, (title, icon) ->
LeadingIconTab(
selected = state == index,
@@ -245,7 +234,7 @@
@Preview
@Composable
-fun ScrollingPrimaryTabs() {
+fun ScrollingPrimaryTextTabs() {
var state by remember { mutableStateOf(0) }
val titles = listOf(
"Tab 1",
@@ -260,7 +249,7 @@
"Tab 10"
)
Column {
- ScrollableTabRow(selectedTabIndex = state, indicator = @Composable { tabPositions ->
+ PrimaryScrollableTabRow(selectedTabIndex = state, indicator = @Composable { tabPositions ->
if (state < tabPositions.size) {
val width by animateDpAsState(targetValue = tabPositions[state].contentWidth)
TabRowDefaults.PrimaryIndicator(
@@ -287,7 +276,7 @@
@Preview
@Composable
-fun ScrollingSecondaryTabs() {
+fun ScrollingSecondaryTextTabs() {
var state by remember { mutableStateOf(0) }
val titles = listOf(
"Tab 1",
@@ -302,7 +291,7 @@
"Tab 10"
)
Column {
- ScrollableTabRow(selectedTabIndex = state) {
+ SecondaryScrollableTabRow(selectedTabIndex = state) {
titles.forEachIndexed { index, title ->
Tab(
selected = state == index,
@@ -336,7 +325,7 @@
"Tab 10"
)
Column {
- ScrollableTabRow(selectedTabIndex = state) {
+ PrimaryScrollableTabRow(selectedTabIndex = state) {
titles.forEachIndexed { index, title ->
Tab(
selected = state == index,
@@ -360,7 +349,7 @@
var state by remember { mutableStateOf(0) }
val titles = listOf("Tab 1", "Tab 2", "Tab 3")
Column {
- TabRow(selectedTabIndex = state) {
+ SecondaryTabRow(selectedTabIndex = state) {
titles.forEachIndexed { index, title ->
FancyTab(
title = title,
@@ -393,7 +382,7 @@
}
Column {
- TabRow(
+ SecondaryTabRow(
selectedTabIndex = state,
indicator = indicator
) {
@@ -425,7 +414,7 @@
}
Column {
- TabRow(
+ SecondaryTabRow(
selectedTabIndex = state,
indicator = indicator
) {
@@ -466,7 +455,7 @@
}
Column {
- ScrollableTabRow(
+ SecondaryScrollableTabRow(
selectedTabIndex = state,
indicator = indicator
) {
diff --git a/compose/material3/material3/src/androidInstrumentedTest/kotlin/androidx/compose/material3/BottomSheetScaffoldTest.kt b/compose/material3/material3/src/androidInstrumentedTest/kotlin/androidx/compose/material3/BottomSheetScaffoldTest.kt
index 6735b7d..abc29a9 100644
--- a/compose/material3/material3/src/androidInstrumentedTest/kotlin/androidx/compose/material3/BottomSheetScaffoldTest.kt
+++ b/compose/material3/material3/src/androidInstrumentedTest/kotlin/androidx/compose/material3/BottomSheetScaffoldTest.kt
@@ -38,7 +38,12 @@
import androidx.compose.foundation.verticalScroll
import androidx.compose.material3.tokens.SheetBottomTokens
import androidx.compose.runtime.CompositionLocalProvider
+import androidx.compose.runtime.MutableState
+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.testutils.assertContainsColor
import androidx.compose.testutils.assertShape
import androidx.compose.ui.Modifier
@@ -53,6 +58,7 @@
import androidx.compose.ui.layout.LayoutCoordinates
import androidx.compose.ui.layout.onGloballyPositioned
import androidx.compose.ui.layout.positionInRoot
+import androidx.compose.ui.platform.LocalContext
import androidx.compose.ui.platform.LocalDensity
import androidx.compose.ui.platform.testTag
import androidx.compose.ui.semantics.SemanticsActions
@@ -64,6 +70,7 @@
import androidx.compose.ui.test.assertTopPositionInRootIsEqualTo
import androidx.compose.ui.test.assertWidthIsEqualTo
import androidx.compose.ui.test.captureToImage
+import androidx.compose.ui.test.getUnclippedBoundsInRoot
import androidx.compose.ui.test.junit4.StateRestorationTester
import androidx.compose.ui.test.junit4.createAndroidComposeRule
import androidx.compose.ui.test.onNodeWithContentDescription
@@ -74,9 +81,11 @@
import androidx.compose.ui.test.swipeDown
import androidx.compose.ui.test.swipeUp
import androidx.compose.ui.unit.Density
+import androidx.compose.ui.unit.Dp
import androidx.compose.ui.unit.IntSize
import androidx.compose.ui.unit.coerceAtMost
import androidx.compose.ui.unit.dp
+import androidx.compose.ui.unit.width
import androidx.compose.ui.zIndex
import androidx.test.ext.junit.runners.AndroidJUnit4
import androidx.test.filters.MediumTest
@@ -664,6 +673,55 @@
}
}
+ @Test
+ fun bottomSheetScaffold_landscape_filledWidth_sheetFillsEntireWidth() {
+ rule.activity.requestedOrientation = ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE
+ val latch = CountDownLatch(1)
+
+ rule.activity.application.registerComponentCallbacks(object : ComponentCallbacks2 {
+ override fun onConfigurationChanged(p0: Configuration) {
+ latch.countDown()
+ }
+
+ override fun onLowMemory() {
+ // NO-OP
+ }
+
+ override fun onTrimMemory(p0: Int) {
+ // NO-OP
+ }
+ })
+
+ try {
+ latch.await(1500, TimeUnit.MILLISECONDS)
+ var screenWidthPx by mutableStateOf(0)
+ rule.setContent {
+ val context = LocalContext.current
+ screenWidthPx = context.resources.displayMetrics.widthPixels
+ BottomSheetScaffold(
+ sheetMaxWidth = Dp.Unspecified,
+ sheetContent = {
+ Box(
+ Modifier
+ .testTag(sheetTag)
+ .fillMaxHeight(0.4f)
+ )
+ }
+ ) {
+ Text("body")
+ }
+ }
+
+ val sheet = rule.onNodeWithTag(sheetTag).onParent().getUnclippedBoundsInRoot()
+ val sheetWidthPx = with(rule.density) { sheet.width.roundToPx() }
+ assertThat(sheetWidthPx).isEqualTo(screenWidthPx)
+ } catch (e: InterruptedException) {
+ TestCase.fail("Unable to verify sheet width in landscape orientation")
+ } finally {
+ rule.activity.requestedOrientation = ActivityInfo.SCREEN_ORIENTATION_PORTRAIT
+ }
+ }
+
@SdkSuppress(minSdkVersion = Build.VERSION_CODES.O)
@Test
fun bottomSheetScaffold_testNestedScrollConnection() {
@@ -757,6 +815,38 @@
.assertContainsColor(expectedPostScrolledContainerColor)
}
+ @Test
+ fun bottomSheetScaffold_sheetMaxWidth_sizeChanges_snapsToNewTarget() {
+ lateinit var sheetMaxWidth: MutableState<Dp>
+ var screenWidth by mutableStateOf(0.dp)
+ rule.setContent {
+ sheetMaxWidth = remember { mutableStateOf(0.dp) }
+ val context = LocalContext.current
+ val density = LocalDensity.current
+ screenWidth = with(density) { context.resources.displayMetrics.widthPixels.toDp() }
+ BottomSheetScaffold(
+ sheetContent = {
+ Box(
+ Modifier
+ .fillMaxSize()
+ .testTag(sheetTag))
+ },
+ sheetPeekHeight = peekHeight,
+ sheetMaxWidth = sheetMaxWidth.value,
+ sheetDragHandle = null
+ ) {
+ Text("Content")
+ }
+ }
+
+ for (dp in listOf(0.dp, 200.dp, 400.dp)) {
+ sheetMaxWidth.value = dp
+ val sheetWidth = rule.onNodeWithTag(sheetTag).getUnclippedBoundsInRoot().width
+ val expectedSheetWidth = minOf(sheetMaxWidth.value, screenWidth)
+ assertThat(sheetWidth).isEqualTo(expectedSheetWidth)
+ }
+ }
+
@SdkSuppress(minSdkVersion = Build.VERSION_CODES.O)
@Test
fun bottomSheetScaffold_slotsPositionedAppropriately() {
diff --git a/compose/material3/material3/src/androidInstrumentedTest/kotlin/androidx/compose/material3/ModalBottomSheetTest.kt b/compose/material3/material3/src/androidInstrumentedTest/kotlin/androidx/compose/material3/ModalBottomSheetTest.kt
index ba00bd7..88f53b6 100644
--- a/compose/material3/material3/src/androidInstrumentedTest/kotlin/androidx/compose/material3/ModalBottomSheetTest.kt
+++ b/compose/material3/material3/src/androidInstrumentedTest/kotlin/androidx/compose/material3/ModalBottomSheetTest.kt
@@ -51,6 +51,7 @@
import androidx.compose.ui.layout.onSizeChanged
import androidx.compose.ui.platform.LocalConfiguration
import androidx.compose.ui.platform.LocalContext
+import androidx.compose.ui.platform.LocalDensity
import androidx.compose.ui.platform.LocalLayoutDirection
import androidx.compose.ui.platform.testTag
import androidx.compose.ui.semantics.SemanticsActions
@@ -70,6 +71,7 @@
import androidx.compose.ui.test.performTouchInput
import androidx.compose.ui.test.swipeDown
import androidx.compose.ui.test.swipeUp
+import androidx.compose.ui.unit.Dp
import androidx.compose.ui.unit.LayoutDirection
import androidx.compose.ui.unit.Velocity
import androidx.compose.ui.unit.coerceAtMost
@@ -208,7 +210,7 @@
}
@Test
- fun modalBottomSheet_wideScreen_sheetRespectsMaxWidthAndIsCentered() {
+ fun modalBottomSheet_wideScreen_fixedMaxWidth_sheetRespectsMaxWidthAndIsCentered() {
rule.activity.requestedOrientation = ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE
val latch = CountDownLatch(1)
@@ -267,6 +269,56 @@
}
@Test
+ fun modalBottomSheet_wideScreen_filledWidth_sheetFillsEntireWidth() {
+ rule.activity.requestedOrientation = ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE
+ val latch = CountDownLatch(1)
+
+ rule.activity.application.registerComponentCallbacks(object : ComponentCallbacks2 {
+ override fun onConfigurationChanged(p0: Configuration) {
+ latch.countDown()
+ }
+
+ override fun onLowMemory() {
+ // NO-OP
+ }
+
+ override fun onTrimMemory(p0: Int) {
+ // NO-OP
+ }
+ })
+
+ try {
+ latch.await(1500, TimeUnit.MILLISECONDS)
+ var screenWidthPx by mutableStateOf(0)
+ rule.setContent {
+ val context = LocalContext.current
+ screenWidthPx = context.resources.displayMetrics.widthPixels
+ val windowInsets = if (edgeToEdgeWrapper.edgeToEdgeEnabled)
+ WindowInsets(0) else BottomSheetDefaults.windowInsets
+ ModalBottomSheet(
+ onDismissRequest = {},
+ sheetMaxWidth = Dp.Unspecified,
+ windowInsets = windowInsets
+ ) {
+ Box(
+ Modifier
+ .testTag(sheetTag)
+ .fillMaxHeight(0.4f)
+ )
+ }
+ }
+
+ val sheet = rule.onNodeWithTag(sheetTag).onParent().getUnclippedBoundsInRoot()
+ val sheetWidthPx = with(rule.density) { sheet.width.roundToPx() }
+ assertThat(sheetWidthPx).isEqualTo(screenWidthPx)
+ } catch (e: InterruptedException) {
+ fail("Unable to verify sheet width in landscape orientation")
+ } finally {
+ rule.activity.requestedOrientation = ActivityInfo.SCREEN_ORIENTATION_PORTRAIT
+ }
+ }
+
+ @Test
fun modalBottomSheet_defaultStateForSmallContentIsFullExpanded() {
lateinit var sheetState: SheetState
var height by mutableStateOf(0.dp)
@@ -451,6 +503,38 @@
}
@Test
+ fun modalBottomSheet_sheetMaxWidth_sizeChanges_snapsToNewTarget() {
+ lateinit var sheetMaxWidth: MutableState<Dp>
+ var screenWidth by mutableStateOf(0.dp)
+ rule.setContent {
+ val windowInsets = if (edgeToEdgeWrapper.edgeToEdgeEnabled)
+ WindowInsets(0) else BottomSheetDefaults.windowInsets
+ sheetMaxWidth = remember { mutableStateOf(0.dp) }
+ val context = LocalContext.current
+ val density = LocalDensity.current
+ screenWidth = with(density) { context.resources.displayMetrics.widthPixels.toDp() }
+ ModalBottomSheet(
+ onDismissRequest = {},
+ sheetMaxWidth = sheetMaxWidth.value,
+ windowInsets = windowInsets
+ ) {
+ Box(
+ Modifier
+ .fillMaxWidth()
+ .testTag(sheetTag)
+ )
+ }
+ }
+
+ for (dp in listOf(0.dp, 200.dp, 400.dp)) {
+ sheetMaxWidth.value = dp
+ val sheetWidth = rule.onNodeWithTag(sheetTag).getUnclippedBoundsInRoot().width
+ val expectedSheetWidth = minOf(sheetMaxWidth.value, screenWidth)
+ assertThat(sheetWidth).isEqualTo(expectedSheetWidth)
+ }
+ }
+
+ @Test
fun modalBottomSheet_emptySheet_expandDoesNotAnimate() {
lateinit var state: SheetState
lateinit var scope: CoroutineScope
diff --git a/compose/material3/material3/src/androidInstrumentedTest/kotlin/androidx/compose/material3/TabScreenshotTest.kt b/compose/material3/material3/src/androidInstrumentedTest/kotlin/androidx/compose/material3/TabScreenshotTest.kt
index 318b5c0..dec8676 100644
--- a/compose/material3/material3/src/androidInstrumentedTest/kotlin/androidx/compose/material3/TabScreenshotTest.kt
+++ b/compose/material3/material3/src/androidInstrumentedTest/kotlin/androidx/compose/material3/TabScreenshotTest.kt
@@ -32,7 +32,6 @@
import androidx.compose.ui.graphics.Color
import androidx.compose.ui.platform.testTag
import androidx.compose.ui.semantics.semantics
-import androidx.compose.ui.test.ExperimentalTestApi
import androidx.compose.ui.test.captureToImage
import androidx.compose.ui.test.junit4.createComposeRule
import androidx.compose.ui.test.onNodeWithTag
@@ -49,7 +48,6 @@
@LargeTest
@RunWith(AndroidJUnit4::class)
@SdkSuppress(minSdkVersion = Build.VERSION_CODES.O)
-@OptIn(ExperimentalTestApi::class)
class TabScreenshotTest {
@get:Rule
@@ -547,7 +545,7 @@
Modifier
.semantics(mergeDescendants = true) {}
.testTag(TAG)) {
- TabRow(selectedTabIndex = 0, indicator = @Composable { tabPositions ->
+ PrimaryTabRow(selectedTabIndex = 0, indicator = @Composable { tabPositions ->
TabRowDefaults.PrimaryIndicator(
modifier = Modifier.tabIndicatorOffset(tabPositions[0]),
width = tabPositions[0].contentWidth
@@ -587,7 +585,7 @@
Modifier
.semantics(mergeDescendants = true) {}
.testTag(TAG)) {
- TabRow(selectedTabIndex = 0) {
+ SecondaryTabRow(selectedTabIndex = 0) {
Tab(
selected = true,
onClick = {},
@@ -628,7 +626,7 @@
Modifier
.semantics(mergeDescendants = true) {}
.testTag(TAG)) {
- TabRow(selectedTabIndex = 0,
+ PrimaryTabRow(selectedTabIndex = 0,
containerColor = containerColor,
indicator = @Composable { tabPositions ->
TabRowDefaults.PrimaryIndicator(
@@ -683,7 +681,7 @@
Modifier
.semantics(mergeDescendants = true) {}
.testTag(TAG)) {
- TabRow(selectedTabIndex = 0,
+ SecondaryTabRow(selectedTabIndex = 0,
containerColor = containerColor,
indicator = @Composable { tabPositions ->
TabRowDefaults.SecondaryIndicator(
@@ -732,7 +730,7 @@
Modifier
.semantics(mergeDescendants = true) {}
.testTag(TAG)) {
- TabRow(selectedTabIndex = 0, indicator = @Composable { tabPositions ->
+ PrimaryTabRow(selectedTabIndex = 0, indicator = @Composable { tabPositions ->
TabRowDefaults.PrimaryIndicator(
modifier = Modifier.tabIndicatorOffset(tabPositions[0]),
width = tabPositions[0].contentWidth
@@ -776,7 +774,7 @@
Modifier
.semantics(mergeDescendants = true) {}
.testTag(TAG)) {
- TabRow(selectedTabIndex = 0) {
+ SecondaryTabRow(selectedTabIndex = 0) {
LeadingIconTab(
selected = true,
onClick = {},
@@ -814,7 +812,7 @@
Modifier
.semantics(mergeDescendants = true) {}
.testTag(TAG)) {
- ScrollableTabRow(selectedTabIndex = 0, indicator = @Composable { tabPositions ->
+ PrimaryScrollableTabRow(selectedTabIndex = 0, indicator = @Composable { tabPositions ->
TabRowDefaults.PrimaryIndicator(
modifier = Modifier.tabIndicatorOffset(tabPositions[0]),
width = tabPositions[0].contentWidth
@@ -854,7 +852,7 @@
Modifier
.semantics(mergeDescendants = true) {}
.testTag(TAG)) {
- ScrollableTabRow(selectedTabIndex = 0) {
+ SecondaryScrollableTabRow(selectedTabIndex = 0) {
Tab(
selected = true,
onClick = {},
diff --git a/compose/material3/material3/src/androidInstrumentedTest/kotlin/androidx/compose/material3/TabTest.kt b/compose/material3/material3/src/androidInstrumentedTest/kotlin/androidx/compose/material3/TabTest.kt
index f7c70cc..a1b41ed 100644
--- a/compose/material3/material3/src/androidInstrumentedTest/kotlin/androidx/compose/material3/TabTest.kt
+++ b/compose/material3/material3/src/androidInstrumentedTest/kotlin/androidx/compose/material3/TabTest.kt
@@ -101,7 +101,7 @@
@Test
fun defaultSemantics() {
rule.setMaterialContent(lightColorScheme()) {
- TabRow(0) {
+ SecondaryTabRow(0) {
Tab(
selected = true,
onClick = {},
@@ -146,7 +146,7 @@
@Test
fun leadingIconTab_defaultSemantics() {
rule.setMaterialContent(lightColorScheme()) {
- TabRow(0) {
+ SecondaryTabRow(0) {
LeadingIconTab(
selected = true,
onClick = {},
@@ -260,7 +260,7 @@
}
Box(Modifier.testTag("tabRow")) {
- TabRow(
+ SecondaryTabRow(
selectedTabIndex = state,
indicator = indicator
) {
@@ -304,7 +304,7 @@
val divider = @Composable { HorizontalDivider(Modifier.testTag("divider")) }
Box(Modifier.testTag("tabRow")) {
- TabRow(
+ SecondaryTabRow(
modifier = Modifier.height(tabRowHeight),
selectedTabIndex = 0,
divider = divider
@@ -338,7 +338,7 @@
val titles = listOf("TAB")
Box {
- TabRow(
+ SecondaryTabRow(
modifier = Modifier.testTag("tabRow"),
selectedTabIndex = state
) {
@@ -369,7 +369,7 @@
val titles = listOf("TAB")
Box {
- TabRow(
+ SecondaryTabRow(
modifier = Modifier.testTag("tabRow"),
selectedTabIndex = state
) {
@@ -409,7 +409,7 @@
val titles = listOf("Two line \n text")
Box {
- TabRow(
+ SecondaryTabRow(
modifier = Modifier.testTag("tabRow"),
selectedTabIndex = state
) {
@@ -438,7 +438,7 @@
fun leadingIconTab_textAndIconPosition() {
rule.setMaterialContent(lightColorScheme()) {
Box {
- TabRow(
+ SecondaryTabRow(
modifier = Modifier.testTag("tabRow"),
selectedTabIndex = 0
) {
@@ -495,7 +495,7 @@
}
Box {
- ScrollableTabRow(
+ SecondaryScrollableTabRow(
modifier = Modifier.testTag("tabRow"),
selectedTabIndex = state,
indicator = indicator
@@ -542,7 +542,7 @@
val divider = @Composable { HorizontalDivider(Modifier.testTag("divider")) }
Box(Modifier.testTag("tabRow")) {
- ScrollableTabRow(
+ SecondaryScrollableTabRow(
modifier = Modifier.height(tabRowHeight),
selectedTabIndex = 0,
divider = divider
@@ -687,7 +687,7 @@
.setMaterialContent(lightColorScheme()) {
var state by remember { mutableStateOf(9) }
val titles = List(10) { "Tab ${it + 1}" }
- ScrollableTabRow(selectedTabIndex = state) {
+ SecondaryScrollableTabRow(selectedTabIndex = state) {
titles.forEachIndexed { index, title ->
Tab(
selected = state == index,
@@ -757,7 +757,7 @@
}
Box {
- ScrollableTabRow(
+ SecondaryScrollableTabRow(
selectedTabIndex = state,
indicator = indicator
) {
@@ -881,7 +881,7 @@
.heightIn(max = height)
.testTag("Tabs")
) {
- TabRow(selectedTabIndex = state) {
+ SecondaryTabRow(selectedTabIndex = state) {
titles.forEachIndexed { index, title ->
Tab(
selected = state == index,
@@ -913,7 +913,7 @@
.heightIn(max = height)
.testTag("Tabs")
) {
- ScrollableTabRow(selectedTabIndex = state) {
+ SecondaryScrollableTabRow(selectedTabIndex = state) {
titles.forEachIndexed { index, title ->
Tab(
selected = state == index,
@@ -936,7 +936,7 @@
@Test
fun tabRow_noTabsHasHeightZero() {
rule.setMaterialContent(lightColorScheme()) {
- TabRow(
+ SecondaryTabRow(
modifier = Modifier.testTag("tabRow"),
selectedTabIndex = 0
) {}
diff --git a/compose/material3/material3/src/androidMain/kotlin/androidx/compose/material3/ModalBottomSheet.android.kt b/compose/material3/material3/src/androidMain/kotlin/androidx/compose/material3/ModalBottomSheet.android.kt
index 0a96b40..712b615 100644
--- a/compose/material3/material3/src/androidMain/kotlin/androidx/compose/material3/ModalBottomSheet.android.kt
+++ b/compose/material3/material3/src/androidMain/kotlin/androidx/compose/material3/ModalBottomSheet.android.kt
@@ -110,6 +110,8 @@
* animates to [Hidden].
* @param modifier Optional [Modifier] for the bottom sheet.
* @param sheetState The state of the bottom sheet.
+ * @param sheetMaxWidth [Dp] that defines what the maximum width the sheet will take.
+ * Pass in [Dp.Unspecified] for a sheet that spans the entire screen width.
* @param shape The shape of the bottom sheet.
* @param containerColor The color used for the background of this bottom sheet
* @param contentColor The preferred color for content inside this bottom sheet. Defaults to either
@@ -128,6 +130,7 @@
onDismissRequest: () -> Unit,
modifier: Modifier = Modifier,
sheetState: SheetState = rememberModalBottomSheetState(),
+ sheetMaxWidth: Dp = BottomSheetDefaults.SheetMaxWidth,
shape: Shape = BottomSheetDefaults.ExpandedShape,
containerColor: Color = BottomSheetDefaults.ContainerColor,
contentColor: Color = contentColorFor(containerColor),
@@ -178,7 +181,7 @@
val bottomSheetPaneTitle = getString(string = Strings.BottomSheetPaneTitle)
Surface(
modifier = modifier
- .widthIn(max = BottomSheetMaxWidth)
+ .widthIn(max = sheetMaxWidth)
.fillMaxWidth()
.align(Alignment.TopCenter)
.semantics { paneTitle = bottomSheetPaneTitle }
diff --git a/compose/material3/material3/src/commonMain/kotlin/androidx/compose/material3/BottomSheetScaffold.kt b/compose/material3/material3/src/commonMain/kotlin/androidx/compose/material3/BottomSheetScaffold.kt
index fe98619..aeb70ce 100644
--- a/compose/material3/material3/src/commonMain/kotlin/androidx/compose/material3/BottomSheetScaffold.kt
+++ b/compose/material3/material3/src/commonMain/kotlin/androidx/compose/material3/BottomSheetScaffold.kt
@@ -71,6 +71,8 @@
* @param modifier the [Modifier] to be applied to this scaffold
* @param scaffoldState the state of the bottom sheet scaffold
* @param sheetPeekHeight the height of the bottom sheet when it is collapsed
+ * @param sheetMaxWidth [Dp] that defines what the maximum width the sheet will take.
+ * Pass in [Dp.Unspecified] for a sheet that spans the entire screen width.
* @param sheetShape the shape of the bottom sheet
* @param sheetContainerColor the background color of the bottom sheet
* @param sheetContentColor the preferred content color provided by the bottom sheet to its
@@ -101,6 +103,7 @@
modifier: Modifier = Modifier,
scaffoldState: BottomSheetScaffoldState = rememberBottomSheetScaffoldState(),
sheetPeekHeight: Dp = BottomSheetDefaults.SheetPeekHeight,
+ sheetMaxWidth: Dp = BottomSheetDefaults.SheetMaxWidth,
sheetShape: Shape = BottomSheetDefaults.ExpandedShape,
sheetContainerColor: Color = BottomSheetDefaults.ContainerColor,
sheetContentColor: Color = contentColorFor(sheetContainerColor),
@@ -133,6 +136,7 @@
StandardBottomSheet(
state = scaffoldState.bottomSheetState,
peekHeight = sheetPeekHeight,
+ sheetMaxWidth = sheetMaxWidth,
sheetSwipeEnabled = sheetSwipeEnabled,
calculateAnchors = { sheetSize ->
val sheetHeight = sheetSize.height
@@ -217,6 +221,7 @@
@Suppress("PrimitiveInLambda")
calculateAnchors: (sheetSize: IntSize) -> DraggableAnchors<SheetValue>,
peekHeight: Dp,
+ sheetMaxWidth: Dp,
sheetSwipeEnabled: Boolean,
shape: Shape,
containerColor: Color,
@@ -232,7 +237,7 @@
Surface(
modifier = Modifier
- .widthIn(max = BottomSheetMaxWidth)
+ .widthIn(max = sheetMaxWidth)
.fillMaxWidth()
.requiredHeightIn(min = peekHeight)
.nestedScroll(
diff --git a/compose/material3/material3/src/commonMain/kotlin/androidx/compose/material3/Icon.kt b/compose/material3/material3/src/commonMain/kotlin/androidx/compose/material3/Icon.kt
index 7f18a7d..6dbbbf7 100644
--- a/compose/material3/material3/src/commonMain/kotlin/androidx/compose/material3/Icon.kt
+++ b/compose/material3/material3/src/commonMain/kotlin/androidx/compose/material3/Icon.kt
@@ -135,7 +135,9 @@
modifier: Modifier = Modifier,
tint: Color = LocalContentColor.current
) {
- val colorFilter = if (tint == Color.Unspecified) null else ColorFilter.tint(tint)
+ val colorFilter = remember(tint) {
+ if (tint == Color.Unspecified) null else ColorFilter.tint(tint)
+ }
val semantics =
if (contentDescription != null) {
Modifier.semantics {
diff --git a/compose/material3/material3/src/commonMain/kotlin/androidx/compose/material3/SheetDefaults.kt b/compose/material3/material3/src/commonMain/kotlin/androidx/compose/material3/SheetDefaults.kt
index 53d48be..3adb86b 100644
--- a/compose/material3/material3/src/commonMain/kotlin/androidx/compose/material3/SheetDefaults.kt
+++ b/compose/material3/material3/src/commonMain/kotlin/androidx/compose/material3/SheetDefaults.kt
@@ -372,6 +372,11 @@
val SheetPeekHeight = 56.dp
/**
+ * The default max width used by [ModalBottomSheet] and [BottomSheetScaffold]
+ */
+ val SheetMaxWidth = 640.dp
+
+ /**
* Default insets to be used and consumed by the [ModalBottomSheet] window.
*/
val windowInsets: WindowInsets
@@ -495,4 +500,3 @@
}
private val DragHandleVerticalPadding = 22.dp
-internal val BottomSheetMaxWidth = 640.dp
diff --git a/compose/material3/material3/src/commonMain/kotlin/androidx/compose/material3/TabRow.kt b/compose/material3/material3/src/commonMain/kotlin/androidx/compose/material3/TabRow.kt
index 861e5d4..ba78bb7e 100644
--- a/compose/material3/material3/src/commonMain/kotlin/androidx/compose/material3/TabRow.kt
+++ b/compose/material3/material3/src/commonMain/kotlin/androidx/compose/material3/TabRow.kt
@@ -35,6 +35,7 @@
import androidx.compose.foundation.selection.selectableGroup
import androidx.compose.material3.TabRowDefaults.tabIndicatorOffset
import androidx.compose.material3.tokens.PrimaryNavigationTabTokens
+import androidx.compose.material3.tokens.SecondaryNavigationTabTokens
import androidx.compose.runtime.Composable
import androidx.compose.runtime.Immutable
import androidx.compose.runtime.getValue
@@ -61,6 +62,150 @@
import kotlinx.coroutines.launch
/**
+ * <a href="https://m3.material.io/components/tabs/overview" class="external" target="_blank">Material Design Fixed Primary tabs</a>
+ *
+ * Primary tabs are placed at the top of the content pane under a top app bar. They display the main
+ * content destinations. Fixed tabs display all tabs in a set simultaneously. They are best for
+ * switching between related content quickly, such as between transportation methods in a map. To
+ * navigate between fixed tabs, tap an individual tab, or swipe left or right in the content area.
+ *
+ * A TabRow contains a row of [Tab]s, and displays an indicator underneath the currently
+ * selected tab. A TabRow places its tabs evenly spaced along the entire row, with each tab
+ * taking up an equal amount of space. See [PrimaryScrollableTabRow] for a tab row that does not
+ * enforce equal size, and allows scrolling to tabs that do not fit on screen.
+ *
+ * A simple example with text tabs looks like:
+ *
+ * @sample androidx.compose.material3.samples.PrimaryTextTabs
+ *
+ * You can also provide your own custom tab, such as:
+ *
+ * @sample androidx.compose.material3.samples.FancyTabs
+ *
+ * Where the custom tab itself could look like:
+ *
+ * @sample androidx.compose.material3.samples.FancyTab
+ *
+ * As well as customizing the tab, you can also provide a custom [indicator], to customize
+ * the indicator displayed for a tab. [indicator] will be placed to fill the entire TabRow, so it
+ * should internally take care of sizing and positioning the indicator to match changes to
+ * [selectedTabIndex].
+ *
+ * For example, given an indicator that draws a rounded rectangle near the edges of the [Tab]:
+ *
+ * @sample androidx.compose.material3.samples.FancyIndicator
+ *
+ * We can reuse [TabRowDefaults.tabIndicatorOffset] and just provide this indicator,
+ * as we aren't changing how the size and position of the indicator changes between tabs:
+ *
+ * @sample androidx.compose.material3.samples.FancyIndicatorTabs
+ *
+ * You may also want to use a custom transition, to allow you to dynamically change the
+ * appearance of the indicator as it animates between tabs, such as changing its color or size.
+ * [indicator] is stacked on top of the entire TabRow, so you just need to provide a custom
+ * transition that animates the offset of the indicator from the start of the TabRow. For
+ * example, take the following example that uses a transition to animate the offset, width, and
+ * color of the same FancyIndicator from before, also adding a physics based 'spring' effect to
+ * the indicator in the direction of motion:
+ *
+ * @sample androidx.compose.material3.samples.FancyAnimatedIndicator
+ *
+ * We can now just pass this indicator directly to TabRow:
+ *
+ * @sample androidx.compose.material3.samples.FancyIndicatorContainerTabs
+ *
+ * @param selectedTabIndex the index of the currently selected tab
+ * @param modifier the [Modifier] to be applied to this tab row
+ * @param containerColor the color used for the background of this tab row. Use [Color.Transparent]
+ * to have no color.
+ * @param contentColor the preferred color for content inside this tab row. Defaults to either the
+ * matching content color for [containerColor], or to the current [LocalContentColor] if
+ * [containerColor] is not a color from the theme.
+ * @param indicator the indicator that represents which tab is currently selected. By default this
+ * will be a [TabRowDefaults.PrimaryIndicator], using a [TabRowDefaults.tabIndicatorOffset] modifier
+ * to animate its position.
+ * @param divider the divider displayed at the bottom of the tab row. This provides a layer of
+ * separation between the tab row and the content displayed underneath.
+ * @param tabs the tabs inside this tab row. Typically this will be multiple [Tab]s. Each element
+ * inside this lambda will be measured and placed evenly across the row, each taking up equal space.
+ */
+@Composable
+fun PrimaryTabRow(
+ selectedTabIndex: Int,
+ modifier: Modifier = Modifier,
+ containerColor: Color = TabRowDefaults.primaryContainerColor,
+ contentColor: Color = TabRowDefaults.primaryContentColor,
+ indicator: @Composable (tabPositions: List<TabPosition>) -> Unit = @Composable { tabPositions ->
+ if (selectedTabIndex < tabPositions.size) {
+ val width by animateDpAsState(targetValue = tabPositions[selectedTabIndex].contentWidth)
+ TabRowDefaults.PrimaryIndicator(
+ Modifier.tabIndicatorOffset(tabPositions[selectedTabIndex]),
+ width = width
+ )
+ }
+ },
+ divider: @Composable () -> Unit = @Composable {
+ HorizontalDivider()
+ },
+ tabs: @Composable () -> Unit
+) {
+ TabRowImpl(modifier, containerColor, contentColor, indicator, divider, tabs)
+}
+
+/**
+ * <a href="https://m3.material.io/components/tabs/overview" class="external" target="_blank">Material Design Fixed Secondary tabs</a>
+ *
+ * Secondary tabs are used within a content area to further separate related content and establish
+ * hierarchy. Fixed tabs display all tabs in a set simultaneously. To navigate between fixed tabs,
+ * tap an individual tab, or swipe left or right in the content area.
+ *
+ * A TabRow contains a row of [Tab]s, and displays an indicator underneath the currently
+ * selected tab. A Fixed TabRow places its tabs evenly spaced along the entire row, with each tab
+ * taking up an equal amount of space. See [SecondaryScrollableTabRow] for a tab row that does not
+ * enforce equal size, and allows scrolling to tabs that do not fit on screen.
+ *
+ * A simple example with text tabs looks like:
+ *
+ * @sample androidx.compose.material3.samples.SecondaryTextTabs
+ *
+ * @param selectedTabIndex the index of the currently selected tab
+ * @param modifier the [Modifier] to be applied to this tab row
+ * @param containerColor the color used for the background of this tab row. Use [Color.Transparent]
+ * to have no color.
+ * @param contentColor the preferred color for content inside this tab row. Defaults to either the
+ * matching content color for [containerColor], or to the current [LocalContentColor] if
+ * [containerColor] is not a color from the theme.
+ * @param indicator the indicator that represents which tab is currently selected. By default this
+ * will be a [TabRowDefaults.SecondaryIndicator], using a [TabRowDefaults.tabIndicatorOffset]
+ * modifier to animate its position. Note that this indicator will be forced to fill up the entire
+ * tab row, so you should use [TabRowDefaults.tabIndicatorOffset] or similar to animate the actual
+ * drawn indicator inside this space, and provide an offset from the start.
+ * @param divider the divider displayed at the bottom of the tab row. This provides a layer of
+ * separation between the tab row and the content displayed underneath.
+ * @param tabs the tabs inside this tab row. Typically this will be multiple [Tab]s. Each element
+ * inside this lambda will be measured and placed evenly across the row, each taking up equal space.
+ */
+@Composable
+fun SecondaryTabRow(
+ selectedTabIndex: Int,
+ modifier: Modifier = Modifier,
+ containerColor: Color = TabRowDefaults.secondaryContainerColor,
+ contentColor: Color = TabRowDefaults.secondaryContentColor,
+ indicator: @Composable (tabPositions: List<TabPosition>) -> Unit = @Composable { tabPositions ->
+ if (selectedTabIndex < tabPositions.size) {
+ TabRowDefaults.SecondaryIndicator(
+ Modifier.tabIndicatorOffset(tabPositions[selectedTabIndex])
+ )
+ }
+ },
+ divider: @Composable () -> Unit = @Composable {
+ HorizontalDivider()
+ },
+ tabs: @Composable () -> Unit
+) {
+ TabRowImpl(modifier, containerColor, contentColor, indicator, divider, tabs)
+}
+/**
* <a href="https://m3.material.io/components/tabs/overview" class="external" target="_blank">Material Design tabs</a>
*
* Material Design fixed tabs.
@@ -122,21 +267,26 @@
* matching content color for [containerColor], or to the current [LocalContentColor] if
* [containerColor] is not a color from the theme.
* @param indicator the indicator that represents which tab is currently selected. By default this
- * will be a [TabRowDefaults.SecondaryIndicator], using a [TabRowDefaults.tabIndicatorOffset] modifier to
- * animate its position. Note that this indicator will be forced to fill up the entire tab row, so
- * you should use [TabRowDefaults.tabIndicatorOffset] or similar to animate the actual drawn
- * indicator inside this space, and provide an offset from the start.
+ * will be a [TabRowDefaults.SecondaryIndicator], using a [TabRowDefaults.tabIndicatorOffset]
+ * modifier to animate its position. Note that this indicator will be forced to fill up the entire
+ * tab row, so you should use [TabRowDefaults.tabIndicatorOffset] or similar to animate the actual
+ * drawn indicator inside this space, and provide an offset from the start.
* @param divider the divider displayed at the bottom of the tab row. This provides a layer of
* separation between the tab row and the content displayed underneath.
* @param tabs the tabs inside this tab row. Typically this will be multiple [Tab]s. Each element
* inside this lambda will be measured and placed evenly across the row, each taking up equal space.
*/
+@Deprecated(
+ level = DeprecationLevel.WARNING,
+ message = "This TabRow implementation is misaligned with spec. Please use PrimaryTabRow for " +
+ "primary tabs and SecondaryTabRow for secondary tabs."
+)
@Composable
fun TabRow(
selectedTabIndex: Int,
modifier: Modifier = Modifier,
- containerColor: Color = TabRowDefaults.containerColor,
- contentColor: Color = TabRowDefaults.contentColor,
+ containerColor: Color = TabRowDefaults.primaryContainerColor,
+ contentColor: Color = TabRowDefaults.primaryContentColor,
indicator: @Composable (tabPositions: List<TabPosition>) -> Unit = @Composable { tabPositions ->
if (selectedTabIndex < tabPositions.size) {
TabRowDefaults.SecondaryIndicator(
@@ -219,6 +369,140 @@
}
/**
+ * <a href="https://m3.material.io/components/tabs/overview" class="external" target="_blank">Material Design Scrollable Primary tabs</a>
+ *
+ * Primary tabs are placed at the top of the content pane under a top app bar. They display the main
+ * content destinations. When a set of tabs cannot fit on screen, use scrollable tabs. Scrollable
+ * tabs can use longer text labels and a larger number of tabs. They are best used for browsing on
+ * touch interfaces.
+ *
+ * A scrollable tab row contains a row of [Tab]s, and displays an indicator underneath the currently
+ * selected tab. A scrollable tab row places its tabs offset from the starting edge, and allows
+ * scrolling to tabs that are placed off screen. For a fixed tab row that does not allow
+ * scrolling, and evenly places its tabs, see [PrimaryTabRow].
+ *
+ * @param selectedTabIndex the index of the currently selected tab
+ * @param modifier the [Modifier] to be applied to this tab row
+ * @param scrollState the [ScrollState] of this tab row
+ * @param containerColor the color used for the background of this tab row. Use [Color.Transparent]
+ * to have no color.
+ * @param contentColor the preferred color for content inside this tab row. Defaults to either the
+ * matching content color for [containerColor], or to the current [LocalContentColor] if
+ * [containerColor] is not a color from the theme.
+ * @param edgePadding the padding between the starting and ending edge of the scrollable tab row,
+ * and the tabs inside the row. This padding helps inform the user that this tab row can be
+ * scrolled, unlike a [TabRow].
+ * @param indicator the indicator that represents which tab is currently selected. By default this
+ * will be a [TabRowDefaults.PrimaryIndicator], using a [TabRowDefaults.tabIndicatorOffset] modifier
+ * to animate its position.
+ * @param divider the divider displayed at the bottom of the tab row. This provides a layer of
+ * separation between the tab row and the content displayed underneath.
+ * @param tabs the tabs inside this tab row. Typically this will be multiple [Tab]s. Each element
+ * inside this lambda will be measured and placed evenly across the row, each taking up equal space.
+ */
+@Composable
+fun PrimaryScrollableTabRow(
+ selectedTabIndex: Int,
+ modifier: Modifier = Modifier,
+ scrollState: ScrollState = rememberScrollState(),
+ containerColor: Color = TabRowDefaults.primaryContainerColor,
+ contentColor: Color = TabRowDefaults.primaryContentColor,
+ edgePadding: Dp = TabRowDefaults.ScrollableTabRowEdgeStartPadding,
+ indicator: @Composable (tabPositions: List<TabPosition>) -> Unit = @Composable { tabPositions ->
+ if (selectedTabIndex < tabPositions.size) {
+ val width by animateDpAsState(targetValue = tabPositions[selectedTabIndex].contentWidth)
+ TabRowDefaults.PrimaryIndicator(
+ Modifier.tabIndicatorOffset(tabPositions[selectedTabIndex]),
+ width = width
+ )
+ }
+ },
+ divider: @Composable () -> Unit = @Composable {
+ HorizontalDivider()
+ },
+ tabs: @Composable () -> Unit
+) {
+ ScrollableTabRowImp(
+ selectedTabIndex = selectedTabIndex,
+ indicator = indicator,
+ modifier = modifier,
+ containerColor = containerColor,
+ contentColor = contentColor,
+ edgePadding = edgePadding,
+ divider = divider,
+ tabs = tabs,
+ scrollState = scrollState,
+ )
+}
+
+/**
+ * <a href="https://m3.material.io/components/tabs/overview" class="external" target="_blank">Material Design Scrollable Secondary tabs</a>
+ *
+ * Material Design scrollable tabs.
+ *
+ * Secondary tabs are used within a content area to further separate related content and establish
+ * hierarchy. When a set of tabs cannot fit on screen, use scrollable tabs. Scrollable tabs can use
+ * longer text labels and a larger number of tabs. They are best used for browsing on touch
+ * interfaces.
+ *
+ * A scrollabel tab row contains a row of [Tab]s, and displays an indicator underneath the currently
+ * selected tab. A scrollable tab row places its tabs offset from the starting edge, and allows
+ * scrolling to tabs that are placed off screen. For a fixed tab row that does not allow
+ * scrolling, and evenly places its tabs, see [SecondaryTabRow].
+ *
+ * @param selectedTabIndex the index of the currently selected tab
+ * @param modifier the [Modifier] to be applied to this tab row
+ * @param scrollState the [ScrollState] of this tab row
+ * @param containerColor the color used for the background of this tab row. Use [Color.Transparent]
+ * to have no color.
+ * @param contentColor the preferred color for content inside this tab row. Defaults to either the
+ * matching content color for [containerColor], or to the current [LocalContentColor] if
+ * [containerColor] is not a color from the theme.
+ * @param edgePadding the padding between the starting and ending edge of the scrollable tab row,
+ * and the tabs inside the row. This padding helps inform the user that this tab row can be
+ * scrolled, unlike a [TabRow].
+ * @param indicator the indicator that represents which tab is currently selected. By default this
+ * will be a [TabRowDefaults.SecondaryIndicator], using a [TabRowDefaults.tabIndicatorOffset]
+ * modifier to animate its position. Note that this indicator will be forced to fill up the entire
+ * tab row, so you should use [TabRowDefaults.tabIndicatorOffset] or similar to animate the actual
+ * drawn indicator inside this space, and provide an offset from the start.
+ * @param divider the divider displayed at the bottom of the tab row. This provides a layer of
+ * separation between the tab row and the content displayed underneath.
+ * @param tabs the tabs inside this tab row. Typically this will be multiple [Tab]s. Each element
+ * inside this lambda will be measured and placed evenly across the row, each taking up equal space.
+ */
+@Composable
+fun SecondaryScrollableTabRow(
+ selectedTabIndex: Int,
+ modifier: Modifier = Modifier,
+ scrollState: ScrollState = rememberScrollState(),
+ containerColor: Color = TabRowDefaults.secondaryContainerColor,
+ contentColor: Color = TabRowDefaults.secondaryContentColor,
+ edgePadding: Dp = TabRowDefaults.ScrollableTabRowEdgeStartPadding,
+ indicator: @Composable (tabPositions: List<TabPosition>) -> Unit = @Composable { tabPositions ->
+ TabRowDefaults.SecondaryIndicator(
+ Modifier.tabIndicatorOffset(tabPositions[selectedTabIndex])
+ )
+ },
+ divider: @Composable () -> Unit = @Composable {
+ HorizontalDivider()
+ },
+ tabs: @Composable () -> Unit
+) {
+ ScrollableTabRowImp(
+ selectedTabIndex = selectedTabIndex,
+ indicator = indicator,
+ modifier = modifier,
+ containerColor = containerColor,
+ contentColor = contentColor,
+ edgePadding = edgePadding,
+ divider = divider,
+ tabs = tabs,
+ scrollState = scrollState
+ )
+}
+
+/**
* <a href="https://m3.material.io/components/tabs/overview" class="external" target="_blank">Material Design tabs</a>
*
* Material Design scrollable tabs.
@@ -251,13 +535,18 @@
* @param tabs the tabs inside this tab row. Typically this will be multiple [Tab]s. Each element
* inside this lambda will be measured and placed evenly across the row, each taking up equal space.
*/
+@Deprecated(
+ level = DeprecationLevel.WARNING,
+ message = "This ScrollableTabRow implementation is misaligned with spec. Please use " +
+ "PrimaryScrollableTabRow for primary tabs and SecondaryScrollableTabRow for secondary tabs."
+)
@Composable
fun ScrollableTabRow(
selectedTabIndex: Int,
modifier: Modifier = Modifier,
- containerColor: Color = TabRowDefaults.containerColor,
- contentColor: Color = TabRowDefaults.contentColor,
- edgePadding: Dp = ScrollableTabRowPadding,
+ containerColor: Color = TabRowDefaults.primaryContainerColor,
+ contentColor: Color = TabRowDefaults.primaryContentColor,
+ edgePadding: Dp = TabRowDefaults.ScrollableTabRowEdgeStartPadding,
indicator: @Composable (tabPositions: List<TabPosition>) -> Unit = @Composable { tabPositions ->
TabRowDefaults.SecondaryIndicator(
Modifier.tabIndicatorOffset(tabPositions[selectedTabIndex])
@@ -268,12 +557,38 @@
},
tabs: @Composable () -> Unit
) {
+ ScrollableTabRowImp(
+ selectedTabIndex = selectedTabIndex,
+ indicator = indicator,
+ modifier = modifier,
+ containerColor = containerColor,
+ contentColor = contentColor,
+ edgePadding = edgePadding,
+ divider = divider,
+ tabs = tabs,
+ scrollState = rememberScrollState()
+ )
+}
+
+@Composable
+private fun ScrollableTabRowImp(
+ selectedTabIndex: Int,
+ indicator: @Composable (tabPositions: List<TabPosition>) -> Unit,
+ modifier: Modifier = Modifier,
+ containerColor: Color = TabRowDefaults.primaryContainerColor,
+ contentColor: Color = TabRowDefaults.primaryContentColor,
+ edgePadding: Dp = TabRowDefaults.ScrollableTabRowEdgeStartPadding,
+ divider: @Composable () -> Unit = @Composable {
+ HorizontalDivider()
+ },
+ tabs: @Composable () -> Unit,
+ scrollState: ScrollState,
+) {
Surface(
modifier = modifier,
color = containerColor,
contentColor = contentColor
) {
- val scrollState = rememberScrollState()
val coroutineScope = rememberCoroutineScope()
val scrollableTabData = remember(scrollState, coroutineScope) {
ScrollableTabData(
@@ -412,16 +727,49 @@
* Contains default implementations and values used for TabRow.
*/
object TabRowDefaults {
+ /**
+ * The default padding from the starting edge before a tab in a [ScrollableTabRow].
+ */
+ val ScrollableTabRowEdgeStartPadding = 52.dp
+
/** Default container color of a tab row. */
+ @Deprecated(
+ message = "Use TabRowDefaults.primaryContainerColor instead",
+ replaceWith = ReplaceWith("primaryContainerColor")
+ )
val containerColor: Color
@Composable get() =
PrimaryNavigationTabTokens.ContainerColor.value
+ /** Default container color of a [PrimaryTabRow]. */
+ val primaryContainerColor: Color
+ @Composable get() =
+ PrimaryNavigationTabTokens.ContainerColor.value
+
+ /** Default container color of a [SecondaryTabRow]. */
+ val secondaryContainerColor: Color
+ @Composable get() =
+ SecondaryNavigationTabTokens.ContainerColor.value
+
/** Default content color of a tab row. */
+ @Deprecated(
+ message = "Use TabRowDefaults.primaryContentColor instead",
+ replaceWith = ReplaceWith("primaryContentColor")
+ )
val contentColor: Color
@Composable get() =
PrimaryNavigationTabTokens.ActiveLabelTextColor.value
+ /** Default content color of a [PrimaryTabRow]. */
+ val primaryContentColor: Color
+ @Composable get() =
+ PrimaryNavigationTabTokens.ActiveLabelTextColor.value
+
+ /** Default content color of a [SecondaryTabRow]. */
+ val secondaryContentColor: Color
+ @Composable get() =
+ SecondaryNavigationTabTokens.ActiveLabelTextColor.value
+
/**
* Default indicator, which will be positioned at the bottom of the [TabRow], on top of the
* divider.
@@ -488,8 +836,7 @@
fun SecondaryIndicator(
modifier: Modifier = Modifier,
height: Dp = PrimaryNavigationTabTokens.ActiveIndicatorHeight,
- color: Color =
- MaterialTheme.colorScheme.fromToken(PrimaryNavigationTabTokens.ActiveIndicatorColor)
+ color: Color = PrimaryNavigationTabTokens.ActiveIndicatorColor.value
) {
Box(
modifier
@@ -596,11 +943,6 @@
private val ScrollableTabRowMinimumTabWidth = 90.dp
/**
- * The default padding from the starting edge before a tab in a [ScrollableTabRow].
- */
-private val ScrollableTabRowPadding = 52.dp
-
-/**
* [AnimationSpec] used when scrolling to a tab that is not fully visible.
*/
private val ScrollableTabRowScrollSpec: AnimationSpec<Float> = tween(
diff --git a/compose/runtime/runtime-saveable/build.gradle b/compose/runtime/runtime-saveable/build.gradle
index ace0562..9c6d445 100644
--- a/compose/runtime/runtime-saveable/build.gradle
+++ b/compose/runtime/runtime-saveable/build.gradle
@@ -93,10 +93,6 @@
}
}
- // TODO(b/214407011): These dependencies leak into instrumented tests as well. If you
- // need to add Robolectric (which must be kept out of androidAndroidTest), use a top
- // level dependencies block instead:
- // `dependencies { testImplementation(libs.robolectric) }`
androidUnitTest {
dependsOn(jvmTest)
dependencies {
diff --git a/compose/runtime/runtime/build.gradle b/compose/runtime/runtime/build.gradle
index 9da1a17..aa06ba0 100644
--- a/compose/runtime/runtime/build.gradle
+++ b/compose/runtime/runtime/build.gradle
@@ -37,12 +37,13 @@
dependencies {
implementation(libs.kotlinStdlibCommon)
implementation(libs.kotlinCoroutinesCore)
+ implementation(project(":collection:collection"))
}
}
commonTest {
dependencies {
- implementation kotlin("test")
+ implementation kotlin("test-junit")
implementation(libs.kotlinCoroutinesTest)
implementation(libs.kotlinReflect)
}
@@ -72,12 +73,10 @@
}
}
-
androidMain {
dependsOn(jvmMain)
dependencies {
api(libs.kotlinCoroutinesAndroid)
- api("androidx.annotation:annotation:1.1.0")
}
}
diff --git a/compose/runtime/runtime/src/androidInstrumentedTest/kotlin/androidx/compose/runtime/snapshots/ParcelableMutableStateTests.kt b/compose/runtime/runtime/src/androidInstrumentedTest/kotlin/androidx/compose/runtime/snapshots/ParcelableMutableStateTests.kt
index 42e45c5..ea749aa 100644
--- a/compose/runtime/runtime/src/androidInstrumentedTest/kotlin/androidx/compose/runtime/snapshots/ParcelableMutableStateTests.kt
+++ b/compose/runtime/runtime/src/androidInstrumentedTest/kotlin/androidx/compose/runtime/snapshots/ParcelableMutableStateTests.kt
@@ -23,7 +23,7 @@
import androidx.compose.runtime.neverEqualPolicy
import androidx.compose.runtime.referentialEqualityPolicy
import androidx.compose.runtime.structuralEqualityPolicy
-import kotlin.test.assertEquals
+import org.junit.Assert.assertEquals
import org.junit.Test
import org.junit.runner.RunWith
import org.junit.runners.Parameterized
diff --git a/compose/runtime/runtime/src/androidInstrumentedTest/kotlin/androidx/compose/runtime/snapshots/ParcelablePrimitiveMutableStateTests.kt b/compose/runtime/runtime/src/androidInstrumentedTest/kotlin/androidx/compose/runtime/snapshots/ParcelablePrimitiveMutableStateTests.kt
index 0dc3606..b074391 100644
--- a/compose/runtime/runtime/src/androidInstrumentedTest/kotlin/androidx/compose/runtime/snapshots/ParcelablePrimitiveMutableStateTests.kt
+++ b/compose/runtime/runtime/src/androidInstrumentedTest/kotlin/androidx/compose/runtime/snapshots/ParcelablePrimitiveMutableStateTests.kt
@@ -22,7 +22,7 @@
import androidx.compose.runtime.mutableFloatStateOf
import androidx.compose.runtime.mutableIntStateOf
import androidx.compose.runtime.mutableLongStateOf
-import kotlin.test.assertEquals
+import org.junit.Assert.assertEquals
import org.junit.Test
class ParcelablePrimitiveMutableStateTests {
@@ -59,7 +59,7 @@
state.doubleValue = 1.5
val restored = recreateViaParcel(state)
- assertEquals(1.5, restored.doubleValue)
+ assertEquals(1.5, restored.doubleValue, 0.0)
}
private inline fun <reified T> recreateViaParcel(value: T): T {
diff --git a/compose/runtime/runtime/src/commonMain/kotlin/androidx/compose/runtime/Composition.kt b/compose/runtime/runtime/src/commonMain/kotlin/androidx/compose/runtime/Composition.kt
index e806853..d5a32ab 100644
--- a/compose/runtime/runtime/src/commonMain/kotlin/androidx/compose/runtime/Composition.kt
+++ b/compose/runtime/runtime/src/commonMain/kotlin/androidx/compose/runtime/Composition.kt
@@ -20,7 +20,7 @@
import androidx.compose.runtime.changelist.ChangeList
import androidx.compose.runtime.collection.IdentityArrayMap
import androidx.compose.runtime.collection.IdentityArraySet
-import androidx.compose.runtime.collection.IdentityScopeMap
+import androidx.compose.runtime.collection.ScopeMap
import androidx.compose.runtime.collection.fastForEach
import androidx.compose.runtime.snapshots.fastAll
import androidx.compose.runtime.snapshots.fastAny
@@ -471,12 +471,13 @@
* A map of observable objects to the [RecomposeScope]s that observe the object. If the key
* object is modified the associated scopes should be invalidated.
*/
- private val observations = IdentityScopeMap<RecomposeScopeImpl>()
+ private val observations = ScopeMap<RecomposeScopeImpl>()
/**
* Used for testing. Returns the objects that are observed
*/
- internal val observedObjects get() = observations.values.filterNotNull()
+ internal val observedObjects
+ @TestOnly @Suppress("AsCollectionCall") get() = observations.map.asMap().keys
/**
* A set of scopes that were invalidated conditionally (that is they were invalidated by a
@@ -489,18 +490,19 @@
/**
* A map of object read during derived states to the corresponding derived state.
*/
- private val derivedStates = IdentityScopeMap<DerivedState<*>>()
+ private val derivedStates = ScopeMap<DerivedState<*>>()
/**
* Used for testing. Returns dependencies of derived states that are currently observed.
*/
- internal val derivedStateDependencies get() = derivedStates.values.filterNotNull()
+ internal val derivedStateDependencies
+ @TestOnly @Suppress("AsCollectionCall") get() = derivedStates.map.asMap().keys
/**
* Used for testing. Returns the conditional scopes being tracked by the composer
*/
- internal val conditionalScopes: List<RecomposeScopeImpl> get() =
- conditionallyInvalidatedScopes.toList()
+ internal val conditionalScopes: List<RecomposeScopeImpl>
+ @TestOnly get() = conditionallyInvalidatedScopes.toList()
/**
* A list of changes calculated by [Composer] to be applied to the [Applier] and the
@@ -526,7 +528,7 @@
* scopes that were already dismissed by composition and should be ignored in the next call
* to [recordModificationsOf].
*/
- private val observationsProcessed = IdentityScopeMap<RecomposeScopeImpl>()
+ private val observationsProcessed = ScopeMap<RecomposeScopeImpl>()
/**
* A map of the invalid [RecomposeScope]s. If this map is non-empty the current state of
@@ -856,21 +858,21 @@
}
if (forgetConditionalScopes && conditionallyInvalidatedScopes.isNotEmpty()) {
- observations.removeValueIf { scope ->
+ observations.removeScopeIf { scope ->
scope in conditionallyInvalidatedScopes || invalidated?.let { scope in it } == true
}
conditionallyInvalidatedScopes.clear()
cleanUpDerivedStateObservations()
} else {
invalidated?.let {
- observations.removeValueIf { scope -> scope in it }
+ observations.removeScopeIf { scope -> scope in it }
cleanUpDerivedStateObservations()
}
}
}
private fun cleanUpDerivedStateObservations() {
- derivedStates.removeValueIf { derivedState -> derivedState !in observations }
+ derivedStates.removeScopeIf { derivedState -> derivedState !in observations }
if (conditionallyInvalidatedScopes.isNotEmpty()) {
conditionallyInvalidatedScopes.removeValueIf { scope -> !scope.isConditional }
}
@@ -979,7 +981,7 @@
if (pendingInvalidScopes) {
trace("Compose:unobserve") {
pendingInvalidScopes = false
- observations.removeValueIf { scope -> !scope.valid }
+ observations.removeScopeIf { scope -> !scope.valid }
cleanUpDerivedStateObservations()
}
}
diff --git a/compose/runtime/runtime/src/commonMain/kotlin/androidx/compose/runtime/collection/IdentityScopeMap.kt b/compose/runtime/runtime/src/commonMain/kotlin/androidx/compose/runtime/collection/IdentityScopeMap.kt
deleted file mode 100644
index 3ee5190..0000000
--- a/compose/runtime/runtime/src/commonMain/kotlin/androidx/compose/runtime/collection/IdentityScopeMap.kt
+++ /dev/null
@@ -1,331 +0,0 @@
-/*
- * Copyright 2020 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 androidx.compose.runtime.collection
-
-import androidx.compose.runtime.identityHashCode
-import kotlin.contracts.ExperimentalContracts
-
-/**
- * Maps values to a set of scopes using the [identityHashCode] for both the value and the
- * scope for uniqueness.
- */
-@OptIn(ExperimentalContracts::class)
-internal class IdentityScopeMap<T : Any> {
- /**
- * The array of indices into [values] and [scopeSets], in the order that they are sorted
- * in the [IdentityScopeMap]. The length of the used values is [size], and all remaining values
- * are the unused indices in [values] and [scopeSets].
- */
- var valueOrder: IntArray = IntArray(50) { it }
- private set
-
- /**
- * The [identityHashCode] for the keys in the collection. We never use the actual
- * values
- */
- var values: Array<Any?> = arrayOfNulls(50)
- private set
-
- /**
- * The [IdentityArraySet]s for values, in the same index order as [values], indexed
- * by [valueOrder]. The consumed values may extend beyond [size] if a value has been removed.
- */
- var scopeSets: Array<IdentityArraySet<T>?> = arrayOfNulls(50)
- private set
-
- /**
- * The number of values in the map.
- */
- var size = 0
-
- /**
- * Returns the [IdentityArraySet] for the value at the given [index] order in the map.
- */
- private fun scopeSetAt(index: Int): IdentityArraySet<T> {
- return scopeSets[valueOrder[index]]!!
- }
-
- /**
- * Adds a [value]/[scope] pair to the map and returns `true` if it was added or `false` if
- * it already existed.
- */
- fun add(value: Any, scope: T): Boolean {
- val valueSet = getOrCreateIdentitySet(value)
- return valueSet.add(scope)
- }
-
- /**
- * Returns true if any scopes are associated with [element]
- */
- operator fun contains(element: Any): Boolean = find(element) >= 0
-
- /**
- * Executes [block] for all scopes mapped to the given [value].
- */
- inline fun forEachScopeOf(value: Any, block: (scope: T) -> Unit) {
- val index = find(value)
- if (index >= 0) {
- scopeSetAt(index).fastForEach(block)
- }
- }
-
- /**
- * Returns the existing [IdentityArraySet] for the given [value] or creates a new one
- * and insertes it into the map and returns it.
- */
- private fun getOrCreateIdentitySet(value: Any): IdentityArraySet<T> {
- val size = size
- val valueOrder = valueOrder
- val values = values
- val scopeSets = scopeSets
-
- val index: Int
- if (size > 0) {
- index = find(value)
-
- if (index >= 0) {
- return scopeSetAt(index)
- }
- } else {
- index = -1
- }
-
- val insertIndex = -(index + 1)
-
- if (size < valueOrder.size) {
- val valueIndex = valueOrder[size]
- values[valueIndex] = value
- val scopeSet = scopeSets[valueIndex] ?: IdentityArraySet<T>().also {
- scopeSets[valueIndex] = it
- }
-
- // insert into the right location in keyOrder
- if (insertIndex < size) {
- valueOrder.copyInto(
- destination = valueOrder,
- destinationOffset = insertIndex + 1,
- startIndex = insertIndex,
- endIndex = size
- )
- }
- valueOrder[insertIndex] = valueIndex
- this.size++
- return scopeSet
- }
-
- // We have to increase the size of all arrays
- val newSize = valueOrder.size * 2
- val valueIndex = size
- val newScopeSets = scopeSets.copyOf(newSize)
- val scopeSet = IdentityArraySet<T>()
- newScopeSets[valueIndex] = scopeSet
- val newValues = values.copyOf(newSize)
- newValues[valueIndex] = value
-
- val newKeyOrder = IntArray(newSize)
- for (i in size + 1 until newSize) {
- newKeyOrder[i] = i
- }
-
- if (insertIndex < size) {
- valueOrder.copyInto(
- destination = newKeyOrder,
- destinationOffset = insertIndex + 1,
- startIndex = insertIndex,
- endIndex = size
- )
- }
- newKeyOrder[insertIndex] = valueIndex
- if (insertIndex > 0) {
- valueOrder.copyInto(
- destination = newKeyOrder,
- endIndex = insertIndex
- )
- }
- this.scopeSets = newScopeSets
- this.values = newValues
- this.valueOrder = newKeyOrder
- this.size++
- return scopeSet
- }
-
- /**
- * Removes all values and scopes from the map
- */
- fun clear() {
- val scopeSets = scopeSets
- val valueOrder = valueOrder
- val values = values
-
- for (i in scopeSets.indices) {
- scopeSets[i]?.clear()
- valueOrder[i] = i
- values[i] = null
- }
-
- size = 0
- }
-
- /**
- * Remove [scope] from the scope set for [value]. If the scope set is empty after [scope] has
- * been remove the reference to [value] is removed as well.
- *
- * @param value the key of the scope map
- * @param scope the scope being removed
- * @return true if the value was removed from the scope
- */
- fun remove(value: Any, scope: T): Boolean {
- val index = find(value)
-
- val valueOrder = valueOrder
- val scopeSets = scopeSets
- val values = values
- val size = size
- if (index >= 0) {
- val valueOrderIndex = valueOrder[index]
- val set = scopeSets[valueOrderIndex] ?: return false
- val removed = set.remove(scope)
- if (set.size == 0) {
- val startIndex = index + 1
- val endIndex = size
- if (startIndex < endIndex) {
- valueOrder.copyInto(
- destination = valueOrder,
- destinationOffset = index,
- startIndex = startIndex,
- endIndex = endIndex
- )
- }
- val newSize = size - 1
- valueOrder[newSize] = valueOrderIndex
- values[valueOrderIndex] = null
- this.size = newSize
- }
- return removed
- }
- return false
- }
-
- /**
- * Removes all scopes that match [predicate]. If all scopes for a given value have been
- * removed, that value is removed also.
- */
- inline fun removeValueIf(predicate: (scope: T) -> Boolean) {
- removingScopes { scopeSet ->
- scopeSet.removeValueIf(predicate)
- }
- }
-
- /**
- * Removes given scope from all sets. If all scopes for a given value are removed, that value
- * is removed as well.
- */
- fun removeScope(scope: T) {
- removingScopes { scopeSet ->
- scopeSet.remove(scope)
- }
- }
-
- private inline fun removingScopes(removalOperation: (IdentityArraySet<T>) -> Unit) {
- val valueOrder = valueOrder
- val scopeSets = scopeSets
- val values = values
- var destinationIndex = 0
- for (i in 0 until size) {
- val valueIndex = valueOrder[i]
- val set = scopeSets[valueIndex]!!
- removalOperation(set)
- if (set.size > 0) {
- if (destinationIndex != i) {
- // We'll bubble-up the now-free key-order by swapping the index with the one
- // we're copying from. This means that the set can be reused later.
- val destinationKeyOrder = valueOrder[destinationIndex]
- valueOrder[destinationIndex] = valueIndex
- valueOrder[i] = destinationKeyOrder
- }
- destinationIndex++
- }
- }
- // Remove hard references to values that are no longer in the map
- for (i in destinationIndex until size) {
- values[valueOrder[i]] = null
- }
- size = destinationIndex
- }
-
- /**
- * Returns the index into [valueOrder] of the found [value] of the
- * value, or the negative index - 1 of the position in which it would be if it were found.
- */
- private fun find(value: Any?): Int {
- val valueIdentity = identityHashCode(value)
- var low = 0
- var high = size - 1
-
- val values = values
- val valueOrder = valueOrder
- while (low <= high) {
- val mid = (low + high).ushr(1)
- val midValue = values[valueOrder[mid]]
- val midValHash = identityHashCode(midValue)
- when {
- midValHash < valueIdentity -> low = mid + 1
- midValHash > valueIdentity -> high = mid - 1
- value === midValue -> return mid
- else -> return findExactIndex(mid, value, valueIdentity)
- }
- }
- return -(low + 1)
- }
-
- /**
- * When multiple items share the same [identityHashCode], then we must find the specific
- * index of the target item. This method assumes that [midIndex] has already been checked
- * for an exact match for [value], but will look at nearby values to find the exact item index.
- * If no match is found, the negative index - 1 of the position in which it would be will
- * be returned, which is always after the last item with the same [identityHashCode].
- */
- private fun findExactIndex(midIndex: Int, value: Any?, valueHash: Int): Int {
- val values = values
- val valueOrder = valueOrder
-
- // hunt down first
- for (i in midIndex - 1 downTo 0) {
- val v = values[valueOrder[i]]
- if (v === value) {
- return i
- }
- if (identityHashCode(v) != valueHash) {
- break // we've gone too far
- }
- }
-
- for (i in midIndex + 1 until size) {
- val v = values[valueOrder[i]]
- if (v === value) {
- return i
- }
- if (identityHashCode(v) != valueHash) {
- // We've gone too far. We should insert here.
- return -(i + 1)
- }
- }
-
- // We should insert at the end
- return -(size + 1)
- }
-}
diff --git a/compose/runtime/runtime/src/commonMain/kotlin/androidx/compose/runtime/collection/ScopeMap.kt b/compose/runtime/runtime/src/commonMain/kotlin/androidx/compose/runtime/collection/ScopeMap.kt
new file mode 100644
index 0000000..bd07de2
--- /dev/null
+++ b/compose/runtime/runtime/src/commonMain/kotlin/androidx/compose/runtime/collection/ScopeMap.kt
@@ -0,0 +1,146 @@
+/*
+ * Copyright 2023 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 androidx.compose.runtime.collection
+
+import androidx.collection.MutableScatterSet
+import androidx.collection.mutableScatterMapOf
+
+/**
+ * Maps values to a set of scopes.
+ */
+internal class ScopeMap<T : Any> {
+ val map = mutableScatterMapOf<Any, Any>()
+
+ /**
+ * The number of values in the map.
+ */
+ val size get() = map.size
+
+ /**
+ * Adds a [key]/[scope] pair to the map and returns `true` if it was added or `false` if
+ * it already existed.
+ */
+ fun add(key: Any, scope: T): Boolean =
+ map.compute(key) { _, value ->
+ when (value) {
+ null -> scope
+ is MutableScatterSet<*> -> {
+ @Suppress("UNCHECKED_CAST")
+ (value as MutableScatterSet<T>).add(scope)
+ value
+ }
+ else -> {
+ if (value !== scope) {
+ val set = MutableScatterSet<T>()
+ @Suppress("UNCHECKED_CAST")
+ set.add(value as T)
+ set.add(scope)
+ set
+ } else {
+ value
+ }
+ }
+ }
+ }
+
+ /**
+ * Returns true if any scopes are associated with [element]
+ */
+ operator fun contains(element: Any): Boolean = map.containsKey(element)
+
+ /**
+ * Executes [block] for all scopes mapped to the given [key].
+ */
+ inline fun forEachScopeOf(key: Any, block: (scope: T) -> Unit) {
+ when (val value = map[key]) {
+ null -> { /* do nothing */ }
+ is MutableScatterSet<*> -> {
+ @Suppress("UNCHECKED_CAST")
+ (value as MutableScatterSet<T>).forEach(block)
+ }
+ else -> {
+ @Suppress("UNCHECKED_CAST")
+ block(value as T)
+ }
+ }
+ }
+
+ /**
+ * Removes all values and scopes from the map
+ */
+ fun clear() {
+ map.clear()
+ }
+
+ /**
+ * Remove [scope] from the scope set for [key]. If the scope set is empty after [scope] has
+ * been remove the reference to [key] is removed as well.
+ *
+ * @param key the key of the scope map
+ * @param scope the scope being removed
+ * @return true if the value was removed from the scope
+ */
+ fun remove(key: Any, scope: T): Boolean {
+ val value = map[key] ?: return false
+ return when (value) {
+ is MutableScatterSet<*> -> {
+ @Suppress("UNCHECKED_CAST")
+ val set = value as MutableScatterSet<T>
+
+ val removed = set.remove(scope)
+ if (removed && set.isEmpty()) {
+ map.remove(key)
+ }
+ return removed
+ }
+ scope -> {
+ map.remove(key)
+ true
+ }
+ else -> false
+ }
+ }
+
+ /**
+ * Removes all scopes that match [predicate]. If all scopes for a given value have been
+ * removed, that value is removed also.
+ */
+ inline fun removeScopeIf(crossinline predicate: (scope: T) -> Boolean) {
+ map.removeIf { _, value ->
+ when (value) {
+ is MutableScatterSet<*> -> {
+ @Suppress("UNCHECKED_CAST")
+ val set = value as MutableScatterSet<T>
+ set.removeIf(predicate)
+ set.isEmpty()
+ }
+ else -> {
+ @Suppress("UNCHECKED_CAST")
+ predicate(value as T)
+ }
+ }
+ }
+ }
+
+ /**
+ * Removes given scope from all sets. If all scopes for a given value are removed, that value
+ * is removed as well.
+ */
+ fun removeScope(scope: T) {
+ removeScopeIf { it === scope }
+ }
+}
diff --git a/compose/runtime/runtime/src/commonMain/kotlin/androidx/compose/runtime/snapshots/SnapshotStateObserver.kt b/compose/runtime/runtime/src/commonMain/kotlin/androidx/compose/runtime/snapshots/SnapshotStateObserver.kt
index c346941..80c43ea 100644
--- a/compose/runtime/runtime/src/commonMain/kotlin/androidx/compose/runtime/snapshots/SnapshotStateObserver.kt
+++ b/compose/runtime/runtime/src/commonMain/kotlin/androidx/compose/runtime/snapshots/SnapshotStateObserver.kt
@@ -23,7 +23,7 @@
import androidx.compose.runtime.collection.IdentityArrayIntMap
import androidx.compose.runtime.collection.IdentityArrayMap
import androidx.compose.runtime.collection.IdentityArraySet
-import androidx.compose.runtime.collection.IdentityScopeMap
+import androidx.compose.runtime.collection.ScopeMap
import androidx.compose.runtime.collection.fastForEach
import androidx.compose.runtime.collection.mutableVectorOf
import androidx.compose.runtime.composeRuntimeError
@@ -378,7 +378,7 @@
/**
* Values that have been read during the scope's [SnapshotStateObserver.observeReads].
*/
- private val valueToScopes = IdentityScopeMap<Any>()
+ private val valueToScopes = ScopeMap<Any>()
/**
* Reverse index (scope -> values) for faster scope invalidation.
@@ -422,7 +422,7 @@
/**
* Invalidation index from state objects to derived states reading them.
*/
- private val dependencyToDerivedStates = IdentityScopeMap<DerivedState<*>>()
+ private val dependencyToDerivedStates = ScopeMap<DerivedState<*>>()
/**
* Last derived state value recorded during read.
diff --git a/compose/runtime/runtime/src/nonEmulatorCommonTest/kotlin/androidx/compose/runtime/collection/IdentityScopeMapTest.kt b/compose/runtime/runtime/src/nonEmulatorCommonTest/kotlin/androidx/compose/runtime/collection/ScopeMapTest.kt
similarity index 66%
rename from compose/runtime/runtime/src/nonEmulatorCommonTest/kotlin/androidx/compose/runtime/collection/IdentityScopeMapTest.kt
rename to compose/runtime/runtime/src/nonEmulatorCommonTest/kotlin/androidx/compose/runtime/collection/ScopeMapTest.kt
index 01ef6a8..9c3887b 100644
--- a/compose/runtime/runtime/src/nonEmulatorCommonTest/kotlin/androidx/compose/runtime/collection/IdentityScopeMapTest.kt
+++ b/compose/runtime/runtime/src/nonEmulatorCommonTest/kotlin/androidx/compose/runtime/collection/ScopeMapTest.kt
@@ -1,5 +1,5 @@
/*
- * Copyright 2020 The Android Open Source Project
+ * Copyright 2023 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.
@@ -16,24 +16,21 @@
package androidx.compose.runtime.collection
-import kotlin.test.AfterTest
import kotlin.test.Test
import kotlin.test.assertEquals
import kotlin.test.assertFalse
-import kotlin.test.assertNotNull
-import kotlin.test.assertNull
import kotlin.test.assertTrue
import kotlin.test.fail
-class IdentityScopeMapTest {
- private val map = IdentityScopeMap<Scope>()
+class ScopeMapTest {
+ private val map = ScopeMap<Scope>()
private val scopeList = listOf(Scope(10), Scope(12), Scope(1), Scope(30), Scope(10))
private val valueList = listOf(Value("A"), Value("B"))
@Test
fun emptyConstruction() {
- val m = IdentityScopeMap<Test>()
+ val m = ScopeMap<Scope>()
assertEquals(0, m.size)
}
@@ -83,8 +80,7 @@
map.add(valueList[1], scopeList[1])
map.clear()
assertEquals(0, map.size)
- assertEquals(0, map.scopeSets[0]!!.size)
- assertEquals(0, map.scopeSets[1]!!.size)
+ assertEquals(0, map.map.size)
}
@Test
@@ -115,17 +111,16 @@
map.add(valueC, scopeList[3])
// remove a scope that won't cause any values to be removed:
- map.removeValueIf { scope ->
+ map.removeScopeIf { scope ->
scope === scopeList[1]
}
assertEquals(3, map.size)
// remove the last scope in a set:
- map.removeValueIf { scope ->
+ map.removeScopeIf { scope ->
scope === scopeList[2]
}
assertEquals(2, map.size)
- assertEquals(0, map.scopeSets[map.valueOrder[2]]!!.size)
map.forEachScopeOf(valueList[1]) {
fail("There shouldn't be any scopes for this value")
@@ -146,39 +141,6 @@
assertFalse(Value("D") in map)
}
- /**
- * Validate the test maintains the internal assumptions of the map.
- */
- @AfterTest
- fun validateMap() {
- // Ensure that no duplicates exist in value-order and all indexes are represented
- val pendingRepresentation = mutableSetOf(*map.values.indices.toList().toTypedArray())
- map.valueOrder.forEach {
- assertTrue(it in pendingRepresentation, "Index $it was duplicated")
- pendingRepresentation.remove(it)
- }
- assertTrue(pendingRepresentation.isEmpty(), "Not all indexes are in the valueOrder map")
-
- // Ensure values are non-null and sets are not empty for index < size and values are
- // null and sets are empty or missing for >= size
- val size = map.size
- map.valueOrder.forEachIndexed { index, order ->
- val value = map.values[order]
- val set = map.scopeSets[order]
- if (index < size) {
- assertNotNull(value, "A value was unexpectedly null")
- assertNotNull(set, "A set was unexpectedly null")
- assertTrue(set.size > 0, "An empty set wasn't collected")
- } else {
- assertNull(value, "A reference to a removed value was retained")
- assertTrue(
- actual = set == null || set.size == 0,
- message = "A non-empty set was dropped"
- )
- }
- }
- }
-
- data class Scope(val item: Int)
- data class Value(val s: String)
+ class Scope(val item: Int)
+ class Value(val s: String)
}
diff --git a/compose/test-utils/build.gradle b/compose/test-utils/build.gradle
index b33c4c9..8e330f4 100644
--- a/compose/test-utils/build.gradle
+++ b/compose/test-utils/build.gradle
@@ -93,10 +93,6 @@
}
}
- // TODO(b/214407011): These dependencies leak into instrumented tests as well. If you
- // need to add Robolectric (which must be kept out of androidAndroidTest), use a top
- // level dependencies block instead:
- // `dependencies { testImplementation(libs.robolectric) }`
androidUnitTest {
dependsOn(jvmTest)
dependencies {
diff --git a/compose/ui/ui-graphics/build.gradle b/compose/ui/ui-graphics/build.gradle
index 897e9f3..32a9ec6 100644
--- a/compose/ui/ui-graphics/build.gradle
+++ b/compose/ui/ui-graphics/build.gradle
@@ -104,10 +104,6 @@
}
}
- // TODO(b/214407011): These dependencies leak into instrumented tests as well. If you
- // need to add Robolectric (which must be kept out of androidAndroidTest), use a top
- // level dependencies block instead:
- // `dependencies { testImplementation(libs.robolectric) }`
androidUnitTest {
dependsOn(jvmTest)
dependencies {
diff --git a/compose/ui/ui-test-junit4/build.gradle b/compose/ui/ui-test-junit4/build.gradle
index a65f822..b1ae030 100644
--- a/compose/ui/ui-test-junit4/build.gradle
+++ b/compose/ui/ui-test-junit4/build.gradle
@@ -108,10 +108,6 @@
}
}
- // TODO(b/214407011): These dependencies leak into instrumented tests as well. If you
- // need to add Robolectric (which must be kept out of androidAndroidTest), use a top
- // level dependencies block instead:
- // `dependencies { testImplementation(libs.robolectric) }`
androidUnitTest {
dependsOn(jvmTest)
dependencies {
@@ -119,6 +115,7 @@
implementation(project(":compose:material:material"))
implementation(project(":compose:test-utils"))
implementation(libs.truth)
+ implementation(libs.robolectric)
}
}
@@ -146,12 +143,6 @@
namespace "androidx.compose.ui.test.junit4"
}
-dependencies {
- // Can't declare this in kotlin { sourceSets { androidUnitTest.dependencies { .. } } } as that
- // leaks into instrumented tests (b/214407011)
- testImplementation(libs.robolectric)
-}
-
androidx {
name = "Compose Testing for JUnit4"
type = LibraryType.PUBLISHED_TEST_LIBRARY
diff --git a/compose/ui/ui-test/build.gradle b/compose/ui/ui-test/build.gradle
index 56b3e50..d4ba7ab 100644
--- a/compose/ui/ui-test/build.gradle
+++ b/compose/ui/ui-test/build.gradle
@@ -110,14 +110,11 @@
}
}
- // TODO(b/214407011): These dependencies leak into instrumented tests as well. If you
- // need to add Robolectric (which must be kept out of androidAndroidTest), use a top
- // level dependencies block instead:
- // `dependencies { testImplementation(libs.robolectric) }`
androidUnitTest {
dependsOn(jvmTest)
dependsOn(androidCommonTest)
dependencies {
+ implementation(libs.robolectric)
implementation(libs.mockitoCore4)
implementation(libs.mockitoKotlin4)
}
@@ -143,12 +140,6 @@
namespace "androidx.compose.ui.test"
}
-dependencies {
- // Can't declare this in kotlin { sourceSets { androidUnitTest.dependencies { .. } } } as that
- // leaks into instrumented tests (b/214407011)
- testImplementation(libs.robolectric)
-}
-
androidx {
name = "Compose Testing"
type = LibraryType.PUBLISHED_TEST_LIBRARY
diff --git a/compose/ui/ui-text/build.gradle b/compose/ui/ui-text/build.gradle
index d4383a4..42c6734 100644
--- a/compose/ui/ui-text/build.gradle
+++ b/compose/ui/ui-text/build.gradle
@@ -112,11 +112,6 @@
}
}
-
- // TODO(b/214407011): These dependencies leak into instrumented tests as well. If you
- // need to add Robolectric (which must be kept out of androidAndroidTest), use a top
- // level dependencies block instead:
- // `dependencies { testImplementation(libs.robolectric) }`
androidUnitTest {
dependsOn(jvmTest)
dependencies {
@@ -127,6 +122,8 @@
implementation(libs.truth)
implementation(libs.kotlinReflect)
implementation(libs.kotlinTest)
+ implementation(libs.mockitoCore4)
+ implementation(libs.mockitoKotlin4)
}
}
@@ -149,13 +146,6 @@
}
}
-dependencies {
- // Can't declare this in kotlin { sourceSets { androidUnitTest.dependencies { .. } } } as that
- // leaks into instrumented tests (b/214407011)
- testImplementation(libs.mockitoCore4)
- testImplementation(libs.mockitoKotlin4)
-}
-
androidx {
name = "Compose UI Text"
type = LibraryType.PUBLISHED_LIBRARY
diff --git a/compose/ui/ui-unit/build.gradle b/compose/ui/ui-unit/build.gradle
index d87b7b3..c651119 100644
--- a/compose/ui/ui-unit/build.gradle
+++ b/compose/ui/ui-unit/build.gradle
@@ -92,10 +92,6 @@
}
}
- // TODO(b/214407011): These dependencies leak into instrumented tests as well. If you
- // need to add Robolectric (which must be kept out of androidAndroidTest), use a top
- // level dependencies block instead:
- // `dependencies { testImplementation(libs.robolectric) }`
androidUnitTest {
dependsOn(jvmTest)
dependencies {
diff --git a/compose/ui/ui-util/build.gradle b/compose/ui/ui-util/build.gradle
index 1f53f9b..79dac70 100644
--- a/compose/ui/ui-util/build.gradle
+++ b/compose/ui/ui-util/build.gradle
@@ -76,10 +76,6 @@
}
}
- // TODO(b/214407011): These dependencies leak into instrumented tests as well. If you
- // need to add Robolectric (which must be kept out of androidAndroidTest), use a top
- // level dependencies block instead:
- // `dependencies { testImplementation(libs.robolectric) }`
androidUnitTest {
dependsOn(jvmTest)
dependencies {
diff --git a/compose/ui/ui/build.gradle b/compose/ui/ui/build.gradle
index f78c397..4b899a0 100644
--- a/compose/ui/ui/build.gradle
+++ b/compose/ui/ui/build.gradle
@@ -151,10 +151,6 @@
}
}
- // TODO(b/214407011): These dependencies leak into instrumented tests as well. If you
- // need to add Robolectric (which must be kept out of androidAndroidTest), use a top
- // level dependencies block instead:
- // `dependencies { testImplementation(libs.robolectric) }`
androidUnitTest {
dependsOn(jvmTest)
dependencies {
@@ -164,6 +160,9 @@
implementation(libs.junit)
implementation(libs.truth)
implementation(libs.kotlinTest)
+ implementation(libs.robolectric)
+ implementation(libs.mockitoCore4)
+ implementation(libs.mockitoKotlin4)
implementation(project(":compose:ui:ui-test-junit4"))
implementation(project(":internal-testutils-fonts"))
implementation(project(":compose:test-utils"))
@@ -210,12 +209,6 @@
dependencies {
lintChecks(project(":compose:ui:ui-lint"))
lintPublish(project(":compose:ui:ui-lint"))
-
- // Can't declare this in kotlin { sourceSets { androidUnitTest.dependencies { .. } } } as that
- // leaks into instrumented tests (b/214407011)
- testImplementation(libs.robolectric)
- testImplementation(libs.mockitoCore4)
- testImplementation(libs.mockitoKotlin4)
}
androidx {
diff --git a/compose/ui/ui/src/androidInstrumentedTest/kotlin/androidx/compose/ui/draw/GraphicsLayerTest.kt b/compose/ui/ui/src/androidInstrumentedTest/kotlin/androidx/compose/ui/draw/GraphicsLayerTest.kt
index cff9158..0d97c19 100644
--- a/compose/ui/ui/src/androidInstrumentedTest/kotlin/androidx/compose/ui/draw/GraphicsLayerTest.kt
+++ b/compose/ui/ui/src/androidInstrumentedTest/kotlin/androidx/compose/ui/draw/GraphicsLayerTest.kt
@@ -1456,6 +1456,68 @@
}
}
+ // Repro test for b/298520326. Unfortunately, this test does not successfully reproduce the
+ // issue prior to the "fix", so is not a valid regression test. The act of calling
+ // `captureToImage()` causes the bug to disappear.
+ @SdkSuppress(minSdkVersion = Build.VERSION_CODES.O)
+ @Test
+ fun removingGraphicsLayerInvalidatesParentLayer2() {
+ var toggle by mutableStateOf(false)
+ val size = 100
+ rule.setContent {
+ val sizeDp = with(LocalDensity.current) { size.toDp() }
+ Box(
+ Modifier
+ .testTag("outer")
+ .layout { measurable, constraints ->
+ val placeable = measurable.measure(constraints)
+ layout(placeable.width, placeable.height) {
+ placeable.place(0, 0)
+ }
+ }
+ .then(
+ if (toggle) Modifier
+ .graphicsLayer(scaleX = 1f)
+ .layout { measurable, constraints ->
+ val placeable = measurable.measure(constraints)
+ layout(placeable.width, placeable.height) {
+ placeable.place(0, 0)
+ }
+ }
+ else Modifier
+ )
+ ) {
+ Box(
+ Modifier
+ .background(Color.Red)
+ .size(sizeDp)
+ )
+ }
+ }
+
+ val pt = (size * 0.5f).roundToInt()
+
+ rule.onNodeWithTag("outer").captureToImage().asAndroidBitmap().apply {
+ assertEquals(Color.Red.toArgb(), getPixel(pt, pt))
+ }
+
+ rule.runOnIdle {
+ toggle = !toggle
+ }
+
+ rule.onNodeWithTag("outer").captureToImage().asAndroidBitmap().apply {
+ assertEquals(Color.Red.toArgb(), getPixel(pt, pt))
+ }
+
+ rule.runOnIdle {
+ toggle = !toggle
+ }
+
+ rule.onNodeWithTag("outer").captureToImage().asAndroidBitmap().apply {
+ assertEquals(Color.Red.toArgb(), getPixel(pt, pt))
+ }
+ }
+
@Test
fun removingGraphicsLayerModifierResetsItsAction() {
var addGraphicsLayer by mutableStateOf(true)
diff --git a/compose/ui/ui/src/commonMain/kotlin/androidx/compose/ui/node/NodeCoordinator.kt b/compose/ui/ui/src/commonMain/kotlin/androidx/compose/ui/node/NodeCoordinator.kt
index 21fc6f7c..06a3094 100644
--- a/compose/ui/ui/src/commonMain/kotlin/androidx/compose/ui/node/NodeCoordinator.kt
+++ b/compose/ui/ui/src/commonMain/kotlin/androidx/compose/ui/node/NodeCoordinator.kt
@@ -935,6 +935,13 @@
*/
fun onRelease() {
released = true
+ // It is important to call invalidateParentLayer() here, even though updateLayerBlock() may
+ // call it. The reason is because we end up calling this from the bottom up, which means
+ // that if we have two layout modifiers getting removed, where the parent one has a layer
+ // and the bottom one doesn't, the parent layer gets invalidated but then removed, leaving
+ // no layers invalidated. By always calling this, we ensure that after all nodes are
+ // removed at least one layer is invalidated.
+ invalidateParentLayer()
if (layer != null) {
updateLayerBlock(null)
}
diff --git a/constraintlayout/constraintlayout-compose/build.gradle b/constraintlayout/constraintlayout-compose/build.gradle
index 52093a5..c005e38 100644
--- a/constraintlayout/constraintlayout-compose/build.gradle
+++ b/constraintlayout/constraintlayout-compose/build.gradle
@@ -79,11 +79,6 @@
}
}
-
- // TODO(b/214407011): These dependencies leak into instrumented tests as well. If you
- // need to add Robolectric (which must be kept out of androidAndroidTest), use a top
- // level dependencies block instead:
- // `dependencies { testImplementation(libs.robolectric) }`
androidUnitTest {
dependsOn(jvmTest)
dependencies {
diff --git a/datastore/datastore-core/src/androidInstrumentedTest/kotlin/androidx/datastore/core/multiprocess/MultiProcessTestRule.kt b/datastore/datastore-core/src/androidInstrumentedTest/kotlin/androidx/datastore/core/multiprocess/MultiProcessTestRule.kt
index 0bbcdbc..9e6f1b8 100644
--- a/datastore/datastore-core/src/androidInstrumentedTest/kotlin/androidx/datastore/core/multiprocess/MultiProcessTestRule.kt
+++ b/datastore/datastore-core/src/androidInstrumentedTest/kotlin/androidx/datastore/core/multiprocess/MultiProcessTestRule.kt
@@ -20,10 +20,13 @@
import androidx.datastore.core.twoWayIpc.TwoWayIpcService
import androidx.datastore.core.twoWayIpc.TwoWayIpcService2
import androidx.test.platform.app.InstrumentationRegistry
+import java.util.concurrent.atomic.AtomicBoolean
import kotlin.time.Duration.Companion.seconds
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.Job
+import kotlinx.coroutines.async
+import kotlinx.coroutines.awaitAll
import kotlinx.coroutines.cancel
import kotlinx.coroutines.runBlocking
import kotlinx.coroutines.sync.Mutex
@@ -37,6 +40,7 @@
* are properly closed after test.
*/
class MultiProcessTestRule : TestWatcher() {
+ private val didRunTest = AtomicBoolean(false)
private val context = InstrumentationRegistry.getInstrumentation().context
// use a real scope, it is too hard to use a TestScope when we cannot control the IPC
@@ -53,8 +57,17 @@
fun runTest(block: suspend CoroutineScope.() -> Unit) {
// don't use datastore scope here as it will not finish by itself.
runBlocking {
- withTimeout(TEST_TIMEOUT) {
- block()
+ check(didRunTest.compareAndSet(false, true)) {
+ "Cannot call runTest multiple times"
+ }
+ try {
+ withTimeout(TEST_TIMEOUT) {
+ block()
+ }
+ } finally {
+ connections.map {
+ async { it.disconnect() }
+ }.awaitAll()
}
}
}
@@ -75,9 +88,6 @@
override fun finished(description: Description) {
super.finished(description)
- connections.forEach {
- it.disconnect()
- }
datastoreScope.cancel()
}
diff --git a/datastore/datastore-core/src/androidInstrumentedTest/kotlin/androidx/datastore/core/twoWayIpc/CompositeServiceSubjectModel.kt b/datastore/datastore-core/src/androidInstrumentedTest/kotlin/androidx/datastore/core/twoWayIpc/CompositeServiceSubjectModel.kt
index 7bc55d8..d0b22c7 100644
--- a/datastore/datastore-core/src/androidInstrumentedTest/kotlin/androidx/datastore/core/twoWayIpc/CompositeServiceSubjectModel.kt
+++ b/datastore/datastore-core/src/androidInstrumentedTest/kotlin/androidx/datastore/core/twoWayIpc/CompositeServiceSubjectModel.kt
@@ -37,4 +37,22 @@
operator fun <T> set(key: Key<T>, value: T?) {
data[key] = value
}
+
+ /**
+ * Gets the value with [key] and atomically creates it if [key] is not set.
+ */
+ @Suppress("UNCHECKED_CAST")
+ fun <T> getOrPut(key: Key<T>, create: () -> T): T {
+ data[key]?.let {
+ return it as T
+ }
+ synchronized(this) {
+ data[key]?.let {
+ return it as T
+ }
+ return create().also {
+ data[key] = it
+ }
+ }
+ }
}
diff --git a/datastore/datastore-core/src/androidInstrumentedTest/kotlin/androidx/datastore/core/twoWayIpc/InterProcessCompletable.kt b/datastore/datastore-core/src/androidInstrumentedTest/kotlin/androidx/datastore/core/twoWayIpc/InterProcessCompletable.kt
index f6209bd..1204f02 100644
--- a/datastore/datastore-core/src/androidInstrumentedTest/kotlin/androidx/datastore/core/twoWayIpc/InterProcessCompletable.kt
+++ b/datastore/datastore-core/src/androidInstrumentedTest/kotlin/androidx/datastore/core/twoWayIpc/InterProcessCompletable.kt
@@ -26,7 +26,7 @@
* across processes.
*/
@Parcelize
-internal class InterProcessCompletable<T : Parcelable> constructor(
+internal class InterProcessCompletable<T : Parcelable>(
private val key: String = UUID.randomUUID().toString(),
) : Parcelable {
suspend fun complete(subject: TwoWayIpcSubject, value: T) {
@@ -95,16 +95,11 @@
}
}
-@Suppress("PrivatePropertyName")
private val COMPLETABLE_CONTROLLER_KEY =
CompositeServiceSubjectModel.Key<CrossProcessCompletableController>()
private val TwoWayIpcSubject.crossProcessCompletableController: CrossProcessCompletableController
get() {
- if (!data.contains(COMPLETABLE_CONTROLLER_KEY)) {
- synchronized(this) {
- data[COMPLETABLE_CONTROLLER_KEY] =
- CrossProcessCompletableController(this)
- }
+ return data.getOrPut(COMPLETABLE_CONTROLLER_KEY) {
+ CrossProcessCompletableController(this)
}
- return data[COMPLETABLE_CONTROLLER_KEY]
}
diff --git a/datastore/datastore-core/src/androidInstrumentedTest/kotlin/androidx/datastore/core/twoWayIpc/TwoWayIpcConnection.kt b/datastore/datastore-core/src/androidInstrumentedTest/kotlin/androidx/datastore/core/twoWayIpc/TwoWayIpcConnection.kt
index b9e34a5..7b13f7e 100644
--- a/datastore/datastore-core/src/androidInstrumentedTest/kotlin/androidx/datastore/core/twoWayIpc/TwoWayIpcConnection.kt
+++ b/datastore/datastore-core/src/androidInstrumentedTest/kotlin/androidx/datastore/core/twoWayIpc/TwoWayIpcConnection.kt
@@ -68,7 +68,10 @@
}
}
- fun disconnect() {
+ suspend fun disconnect() {
+ sendMessage(Message.obtain().also {
+ it.what = TwoWayIpcService.MSG_DESTROY_SUBJECTS
+ })
context.unbindService(this)
}
diff --git a/datastore/datastore-core/src/androidInstrumentedTest/kotlin/androidx/datastore/core/twoWayIpc/TwoWayIpcService.kt b/datastore/datastore-core/src/androidInstrumentedTest/kotlin/androidx/datastore/core/twoWayIpc/TwoWayIpcService.kt
index a47b9a3..a9262d0 100644
--- a/datastore/datastore-core/src/androidInstrumentedTest/kotlin/androidx/datastore/core/twoWayIpc/TwoWayIpcService.kt
+++ b/datastore/datastore-core/src/androidInstrumentedTest/kotlin/androidx/datastore/core/twoWayIpc/TwoWayIpcService.kt
@@ -24,6 +24,11 @@
import android.os.Messenger
import androidx.lifecycle.LifecycleService
import androidx.lifecycle.lifecycleScope
+import kotlinx.coroutines.CoroutineScope
+import kotlinx.coroutines.Dispatchers
+import kotlinx.coroutines.Job
+import kotlinx.coroutines.cancelAndJoin
+import kotlinx.coroutines.launch
/**
* Another service of the same type, that runs in another separate
@@ -44,6 +49,8 @@
*/
open class TwoWayIpcService : LifecycleService() {
private val subjects = mutableListOf<TwoWayIpcSubject>()
+ private val jobForSubjects = Job()
+ private val scopeForSubjects = CoroutineScope(jobForSubjects + Dispatchers.IO)
private val messenger: Messenger = Messenger(
Handler(
Looper.getMainLooper()
@@ -51,7 +58,7 @@
// make a copy to prevent recycling
when (incoming.what) {
MSG_CREATE_SUBJECT -> {
- val subject = TwoWayIpcSubject(lifecycleScope).also {
+ val subject = TwoWayIpcSubject(scopeForSubjects).also {
subjects.add(it)
}
@@ -66,6 +73,24 @@
}
incoming.replyTo.send(response)
}
+ MSG_DESTROY_SUBJECTS -> {
+ val incomingCopy = Message.obtain().also {
+ it.copyFrom(incoming)
+ }
+ lifecycleScope.launch {
+ IpcLogger.log("destroying subjects")
+ try {
+ jobForSubjects.cancelAndJoin()
+ IpcLogger.log("destroyed subjects")
+ } finally {
+ incomingCopy.replyTo.send(
+ Message.obtain().also {
+ it.data.putBoolean("closed", true)
+ }
+ )
+ }
+ }
+ }
else -> error("unknown message type ${incoming.what}")
}
@@ -79,5 +104,6 @@
companion object {
const val MSG_CREATE_SUBJECT = 500
+ const val MSG_DESTROY_SUBJECTS = 501
}
}
diff --git a/development/collection-consumer/.gitignore b/development/collection-consumer/.gitignore
deleted file mode 100644
index e0d53d8..0000000
--- a/development/collection-consumer/.gitignore
+++ /dev/null
@@ -1,3 +0,0 @@
-.gradle
-.idea
-build
diff --git a/development/collection-consumer/README.md b/development/collection-consumer/README.md
deleted file mode 100644
index 75586e0..0000000
--- a/development/collection-consumer/README.md
+++ /dev/null
@@ -1,33 +0,0 @@
-## Testing collection KMP release
-
-This project helps to validate a newly-staged version of the KMP build of androidx.collection. Here's how!
-
-### Stage the release
-- Create a new global release in production or autopush JetPad (TODO: more info about how)
-- Schedule a library group release attached to the global release for androidx.collect (TODO: ditto)
-- You cannot stage unless the _global_ ADMRS config allowlists the KMP targets. If necessary, you may need to
- create, have reviewed, and submit a CL like [this one](https://critique.corp.google.com/cl/474557118).
- - It can take around 30 minutes between submission and updating the loaded allowlist in ADMRS, so be patient.
-- Then:
- - Start with [prod](go/jetpad) or [autopush](go/jetpad-autopush)
- - `Release Dates` > `Browse Release Date`
- - Click `Release Information` for the global release you created above
- - `Stage to ADMRS`
- - `Compose BOM?` No (not relevant to our test)
- - Answer "Yes" to "really staging"
-- At this point, you will either see an error in the first ~20 seconds if something is wrong with our stuff, or
- ADMRS will go quietly do things for a few minutes, resulting in an email to `[email protected]`.
-
-### Test the staged release
-- Check out this repo (if you haven't): `git clone sso://user/saff`
-- The email has [instructions](go/adt-redir) for how to set up a proxy server for the staged maven repo.
-- Once that's done, if necessary, edit the androidx.collection version in build.gradle.kts
-- To test JVM:
- - `./gradlew installDist`
- - `./build/install/collection-consumer/bin/collection-consumer`
-- To test native:
- - `./gradlew nativeBinaries`
- - `build/bin/native/releaseExecutable/collection-consumer.kexe`
-- You can look back at the stdout for the adt-redir proxy server to assure yourself that the androidx dependencies
- are being loaded through the proxy.
-- Profit??!
\ No newline at end of file
diff --git a/development/collection-consumer/build.gradle.kts b/development/collection-consumer/build.gradle.kts
deleted file mode 100644
index beef228..0000000
--- a/development/collection-consumer/build.gradle.kts
+++ /dev/null
@@ -1,63 +0,0 @@
-plugins {
- kotlin("multiplatform") version "1.7.10"
- application
-}
-
-group = "net.saff"
-version = "1.0-SNAPSHOT"
-
-repositories {
- maven {
- url = uri("http://localhost:1480")
- isAllowInsecureProtocol = true
- }
- mavenCentral()
- google()
-}
-
-kotlin {
- val hostOs = System.getProperty("os.name")
- val isMingwX64 = hostOs.startsWith("Windows")
- val nativeTarget = when {
- hostOs == "Mac OS X" -> macosX64("native")
- hostOs == "Linux" -> linuxX64("native")
- isMingwX64 -> mingwX64("native")
- else -> throw GradleException("Host OS is not supported in Kotlin/Native.")
- }
-
- nativeTarget.apply {
- binaries {
- executable {
- entryPoint = "main"
- }
- }
- }
- jvm {
- compilations.all {
- kotlinOptions.jvmTarget = "1.8"
- }
- withJava()
- testRuns["test"].executionTask.configure {
- useJUnitPlatform()
- }
- }
- sourceSets {
- val nativeMain by getting
- val commonMain by getting {
- dependencies {
- implementation("androidx.collection:collection:1.3.0-alpha03")
- }
- }
- val nativeTest by getting
- val jvmMain by getting
- val jvmTest by getting {
- dependencies {
- implementation(kotlin("test"))
- }
- }
- }
-}
-
-application {
- mainClass.set("MainKt")
-}
diff --git a/development/collection-consumer/gradle.properties b/development/collection-consumer/gradle.properties
deleted file mode 100644
index 415b6be..0000000
--- a/development/collection-consumer/gradle.properties
+++ /dev/null
@@ -1,5 +0,0 @@
-kotlin.code.style=official
-kotlin.mpp.enableGranularSourceSetsMetadata=true
-kotlin.native.enableDependencyPropagation=false
-kotlin.js.generate.executable.default=false
-kotlin.native.binary.memoryModel=experimental
\ No newline at end of file
diff --git a/development/collection-consumer/gradle/wrapper/gradle-wrapper.jar b/development/collection-consumer/gradle/wrapper/gradle-wrapper.jar
deleted file mode 100644
index 41d9927..0000000
--- a/development/collection-consumer/gradle/wrapper/gradle-wrapper.jar
+++ /dev/null
Binary files differ
diff --git a/development/collection-consumer/gradle/wrapper/gradle-wrapper.properties b/development/collection-consumer/gradle/wrapper/gradle-wrapper.properties
deleted file mode 100644
index aa991fc..0000000
--- a/development/collection-consumer/gradle/wrapper/gradle-wrapper.properties
+++ /dev/null
@@ -1,5 +0,0 @@
-distributionBase=GRADLE_USER_HOME
-distributionPath=wrapper/dists
-distributionUrl=https\://services.gradle.org/distributions/gradle-7.4.2-bin.zip
-zipStoreBase=GRADLE_USER_HOME
-zipStorePath=wrapper/dists
diff --git a/development/collection-consumer/gradlew b/development/collection-consumer/gradlew
deleted file mode 100755
index 1b6c787..0000000
--- a/development/collection-consumer/gradlew
+++ /dev/null
@@ -1,234 +0,0 @@
-#!/bin/sh
-
-#
-# Copyright © 2015-2021 the original 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 POSIX generated by Gradle.
-#
-# Important for running:
-#
-# (1) You need a POSIX-compliant shell to run this script. If your /bin/sh is
-# noncompliant, but you have some other compliant shell such as ksh or
-# bash, then to run this script, type that shell name before the whole
-# command line, like:
-#
-# ksh Gradle
-#
-# Busybox and similar reduced shells will NOT work, because this script
-# requires all of these POSIX shell features:
-# * functions;
-# * expansions «$var», «${var}», «${var:-default}», «${var+SET}»,
-# «${var#prefix}», «${var%suffix}», and «$( cmd )»;
-# * compound commands having a testable exit status, especially «case»;
-# * various built-in commands including «command», «set», and «ulimit».
-#
-# Important for patching:
-#
-# (2) This script targets any POSIX shell, so it avoids extensions provided
-# by Bash, Ksh, etc; in particular arrays are avoided.
-#
-# The "traditional" practice of packing multiple parameters into a
-# space-separated string is a well documented source of bugs and security
-# problems, so this is (mostly) avoided, by progressively accumulating
-# options in "$@", and eventually passing that to Java.
-#
-# Where the inherited environment variables (DEFAULT_JVM_OPTS, JAVA_OPTS,
-# and GRADLE_OPTS) rely on word-splitting, this is performed explicitly;
-# see the in-line comments for details.
-#
-# There are tweaks for specific operating systems such as AIX, CygWin,
-# Darwin, MinGW, and NonStop.
-#
-# (3) This script is generated from the Groovy template
-# https://github.com/gradle/gradle/blob/master/subprojects/plugins/src/main/resources/org/gradle/api/internal/plugins/unixStartScript.txt
-# within the Gradle project.
-#
-# You can find Gradle at https://github.com/gradle/gradle/.
-#
-##############################################################################
-
-# Attempt to set APP_HOME
-
-# Resolve links: $0 may be a link
-app_path=$0
-
-# Need this for daisy-chained symlinks.
-while
- APP_HOME=${app_path%"${app_path##*/}"} # leaves a trailing /; empty if no leading path
- [ -h "$app_path" ]
-do
- ls=$( ls -ld "$app_path" )
- link=${ls#*' -> '}
- case $link in #(
- /*) app_path=$link ;; #(
- *) app_path=$APP_HOME$link ;;
- esac
-done
-
-APP_HOME=$( cd "${APP_HOME:-./}" && pwd -P ) || exit
-
-APP_NAME="Gradle"
-APP_BASE_NAME=${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 "$*"
-} >&2
-
-die () {
- echo
- echo "$*"
- echo
- exit 1
-} >&2
-
-# 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 ;; #(
- MSYS* | 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" && ! "$darwin" && ! "$nonstop" ; then
- case $MAX_FD in #(
- max*)
- MAX_FD=$( ulimit -H -n ) ||
- warn "Could not query maximum file descriptor limit"
- esac
- case $MAX_FD in #(
- '' | soft) :;; #(
- *)
- ulimit -n "$MAX_FD" ||
- warn "Could not set maximum file descriptor limit to $MAX_FD"
- esac
-fi
-
-# Collect all arguments for the java command, stacking in reverse order:
-# * args from the command line
-# * the main class name
-# * -classpath
-# * -D...appname settings
-# * --module-path (only if needed)
-# * DEFAULT_JVM_OPTS, JAVA_OPTS, and GRADLE_OPTS environment variables.
-
-# For Cygwin or MSYS, switch paths to Windows format before running java
-if "$cygwin" || "$msys" ; then
- APP_HOME=$( cygpath --path --mixed "$APP_HOME" )
- CLASSPATH=$( cygpath --path --mixed "$CLASSPATH" )
-
- JAVACMD=$( cygpath --unix "$JAVACMD" )
-
- # Now convert the arguments - kludge to limit ourselves to /bin/sh
- for arg do
- if
- case $arg in #(
- -*) false ;; # don't mess with options #(
- /?*) t=${arg#/} t=/${t%%/*} # looks like a POSIX filepath
- [ -e "$t" ] ;; #(
- *) false ;;
- esac
- then
- arg=$( cygpath --path --ignore --mixed "$arg" )
- fi
- # Roll the args list around exactly as many times as the number of
- # args, so each arg winds up back in the position where it started, but
- # possibly modified.
- #
- # NB: a `for` loop captures its iteration list before it begins, so
- # changing the positional parameters here affects neither the number of
- # iterations, nor the values presented in `arg`.
- shift # remove old arg
- set -- "$@" "$arg" # push replacement arg
- done
-fi
-
-# Collect all arguments for the java command;
-# * $DEFAULT_JVM_OPTS, $JAVA_OPTS, and $GRADLE_OPTS can contain fragments of
-# shell script including quotes and variable substitutions, so put them in
-# double quotes to make sure that they get re-expanded; and
-# * put everything else in single quotes, so that it's not re-expanded.
-
-set -- \
- "-Dorg.gradle.appname=$APP_BASE_NAME" \
- -classpath "$CLASSPATH" \
- org.gradle.wrapper.GradleWrapperMain \
- "$@"
-
-# Use "xargs" to parse quoted args.
-#
-# With -n1 it outputs one arg per line, with the quotes and backslashes removed.
-#
-# In Bash we could simply go:
-#
-# readarray ARGS < <( xargs -n1 <<<"$var" ) &&
-# set -- "${ARGS[@]}" "$@"
-#
-# but POSIX shell has neither arrays nor command substitution, so instead we
-# post-process each arg (as a line of input to sed) to backslash-escape any
-# character that might be a shell metacharacter, then use eval to reverse
-# that process (while maintaining the separation between arguments), and wrap
-# the whole thing up as a single "set" statement.
-#
-# This will of course break if any of these variables contains a newline or
-# an unmatched quote.
-#
-
-eval "set -- $(
- printf '%s\n' "$DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS" |
- xargs -n1 |
- sed ' s~[^-[:alnum:]+,./:=@_]~\\&~g; ' |
- tr '\n' ' '
- )" '"$@"'
-
-exec "$JAVACMD" "$@"
diff --git a/development/collection-consumer/gradlew.bat b/development/collection-consumer/gradlew.bat
deleted file mode 100644
index ac1b06f..0000000
--- a/development/collection-consumer/gradlew.bat
+++ /dev/null
@@ -1,89 +0,0 @@
-@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/development/collection-consumer/settings.gradle.kts b/development/collection-consumer/settings.gradle.kts
deleted file mode 100644
index 8268b87..0000000
--- a/development/collection-consumer/settings.gradle.kts
+++ /dev/null
@@ -1,3 +0,0 @@
-
-rootProject.name = "collection-consumer"
-
diff --git a/development/collection-consumer/src/commonMain/kotlin/list.kt b/development/collection-consumer/src/commonMain/kotlin/list.kt
deleted file mode 100644
index 6be7048..0000000
--- a/development/collection-consumer/src/commonMain/kotlin/list.kt
+++ /dev/null
@@ -1,21 +0,0 @@
-import androidx.collection.LongSparseArray
-import androidx.collection.LruCache
-
-fun runCache(): String {
- val cache = object : LruCache<Int, String>(2) {
- override fun create(key: Int): String? {
- return "x".repeat(key)
- }
- }
- cache[1]
- cache[2]
- cache[3]
- return cache.snapshot().toString()
-}
-
-fun runSparseArray(): String {
- val array = LongSparseArray<String>()
- array.put(0L, "zero")
- array.put(1L, "one")
- return array.toString()
-}
\ No newline at end of file
diff --git a/development/collection-consumer/src/jvmMain/kotlin/Main.kt b/development/collection-consumer/src/jvmMain/kotlin/Main.kt
deleted file mode 100644
index 64fe0c0..0000000
--- a/development/collection-consumer/src/jvmMain/kotlin/Main.kt
+++ /dev/null
@@ -1,7 +0,0 @@
-fun main() {
- println("Hello, Kotlin/JVM!")
- println("LongSparseArray:")
- println(runSparseArray())
- println("LruCache:")
- println(runCache())
-}
\ No newline at end of file
diff --git a/development/collection-consumer/src/nativeMain/kotlin/Main.kt b/development/collection-consumer/src/nativeMain/kotlin/Main.kt
deleted file mode 100644
index b5e96e8..0000000
--- a/development/collection-consumer/src/nativeMain/kotlin/Main.kt
+++ /dev/null
@@ -1,7 +0,0 @@
-fun main() {
- println("Hello, Kotlin/Native!")
- println("LongSparseArray:")
- println(runSparseArray())
- println("LruCache:")
- println(runCache())
-}
\ No newline at end of file
diff --git a/fragment/integration-tests/testapp/build.gradle b/fragment/integration-tests/testapp/build.gradle
index c282c9e..6f03e89 100644
--- a/fragment/integration-tests/testapp/build.gradle
+++ b/fragment/integration-tests/testapp/build.gradle
@@ -27,7 +27,7 @@
dependencies {
implementation(libs.kotlinStdlib)
implementation(project(":fragment:fragment-ktx"))
- implementation("androidx.transition:transition:1.3.0")
+ implementation(project(":transition:transition"))
implementation("androidx.recyclerview:recyclerview:1.1.0")
debugImplementation(project(":fragment:fragment-testing-manifest"))
diff --git a/fragment/integration-tests/testapp/src/main/java/androidx/fragment/testapp/kittenfragmenttransitions/DetailsFragment.kt b/fragment/integration-tests/testapp/src/main/java/androidx/fragment/testapp/kittenfragmenttransitions/DetailsFragment.kt
index 7c64d96..cb00c925 100644
--- a/fragment/integration-tests/testapp/src/main/java/androidx/fragment/testapp/kittenfragmenttransitions/DetailsFragment.kt
+++ b/fragment/integration-tests/testapp/src/main/java/androidx/fragment/testapp/kittenfragmenttransitions/DetailsFragment.kt
@@ -22,6 +22,7 @@
import androidx.core.os.bundleOf
import androidx.fragment.app.Fragment
import androidx.fragment.testapp.R
+import androidx.transition.Fade
/**
* Display details for a given kitten
@@ -45,6 +46,9 @@
5 -> image.setImageResource(R.drawable.placekitten_5)
6 -> image.setImageResource(R.drawable.placekitten_6)
}
+
+ enterTransition = Fade()
+ exitTransition = Fade()
}
companion object {
diff --git a/fragment/integration-tests/testapp/src/main/java/androidx/fragment/testapp/kittenfragmenttransitions/DetailsTransition.kt b/fragment/integration-tests/testapp/src/main/java/androidx/fragment/testapp/kittenfragmenttransitions/DetailsTransition.kt
index 3d1826c..cbf785e 100644
--- a/fragment/integration-tests/testapp/src/main/java/androidx/fragment/testapp/kittenfragmenttransitions/DetailsTransition.kt
+++ b/fragment/integration-tests/testapp/src/main/java/androidx/fragment/testapp/kittenfragmenttransitions/DetailsTransition.kt
@@ -21,7 +21,6 @@
import androidx.annotation.RequiresApi
import androidx.transition.ChangeBounds
import androidx.transition.ChangeImageTransform
-import androidx.transition.ChangeTransform
import androidx.transition.TransitionSet
/**
@@ -43,9 +42,8 @@
private fun init() {
ordering = ORDERING_TOGETHER
- duration = 2000
+ duration = 500
addTransition(ChangeBounds())
- .addTransition(ChangeTransform())
.addTransition(ChangeImageTransform())
}
}
diff --git a/fragment/integration-tests/testapp/src/main/java/androidx/fragment/testapp/kittenfragmenttransitions/GridFragment.kt b/fragment/integration-tests/testapp/src/main/java/androidx/fragment/testapp/kittenfragmenttransitions/GridFragment.kt
index 0787b3b..29da31f 100644
--- a/fragment/integration-tests/testapp/src/main/java/androidx/fragment/testapp/kittenfragmenttransitions/GridFragment.kt
+++ b/fragment/integration-tests/testapp/src/main/java/androidx/fragment/testapp/kittenfragmenttransitions/GridFragment.kt
@@ -42,6 +42,8 @@
adapter = KittenGridAdapter(callback)
layoutManager = GridLayoutManager(context, 2)
}
+ enterTransition = Fade()
+ exitTransition = Fade()
// View is created so postpone the transition
postponeEnterTransition()
OneShotPreDrawListener.add(view.parent as ViewGroup) {
diff --git a/fragment/integration-tests/testapp/src/main/java/androidx/fragment/testapp/kittenfragmenttransitions/KittenTransitionMainFragment.kt b/fragment/integration-tests/testapp/src/main/java/androidx/fragment/testapp/kittenfragmenttransitions/KittenTransitionMainFragment.kt
index 13dc5a3..1ad58d1 100644
--- a/fragment/integration-tests/testapp/src/main/java/androidx/fragment/testapp/kittenfragmenttransitions/KittenTransitionMainFragment.kt
+++ b/fragment/integration-tests/testapp/src/main/java/androidx/fragment/testapp/kittenfragmenttransitions/KittenTransitionMainFragment.kt
@@ -15,10 +15,29 @@
*/
package androidx.fragment.testapp.kittenfragmenttransitions
+import android.os.Bundle
+import android.view.LayoutInflater
+import android.view.View
+import android.view.ViewGroup
import androidx.fragment.app.Fragment
+import androidx.fragment.app.commit
import androidx.fragment.testapp.R
/**
* Main activity that holds our fragments
*/
-class KittenTransitionMainFragment : Fragment(R.layout.kitten_activity_main)
+class KittenTransitionMainFragment : Fragment(R.layout.kitten_activity_main) {
+ override fun onCreateView(
+ inflater: LayoutInflater,
+ container: ViewGroup?,
+ savedInstanceState: Bundle?
+ ): View? {
+ if (savedInstanceState == null) {
+ parentFragmentManager.beginTransaction()
+ .setPrimaryNavigationFragment(this)
+ .commit()
+ }
+
+ return super.onCreateView(inflater, container, savedInstanceState)
+ }
+}
diff --git a/glance/glance-appwidget-proto/src/main/proto/layout.proto b/glance/glance-appwidget-proto/src/main/proto/layout.proto
index fe5760a..4fa2d16 100644
--- a/glance/glance-appwidget-proto/src/main/proto/layout.proto
+++ b/glance/glance-appwidget-proto/src/main/proto/layout.proto
@@ -26,6 +26,7 @@
bool hasAction = 9;
repeated LayoutNode children = 7;
bool has_image_description = 10;
+ bool has_image_color_filter = 11;
}
enum ContentScale {
diff --git a/glance/glance-appwidget/integration-tests/demos/src/main/java/androidx/glance/appwidget/demos/ImageAppWidget.kt b/glance/glance-appwidget/integration-tests/demos/src/main/java/androidx/glance/appwidget/demos/ImageAppWidget.kt
index 4409f8c..bc136c1 100644
--- a/glance/glance-appwidget/integration-tests/demos/src/main/java/androidx/glance/appwidget/demos/ImageAppWidget.kt
+++ b/glance/glance-appwidget/integration-tests/demos/src/main/java/androidx/glance/appwidget/demos/ImageAppWidget.kt
@@ -31,6 +31,7 @@
import androidx.glance.Image
import androidx.glance.ImageProvider
import androidx.glance.LocalContext
+import androidx.glance.action.clickable
import androidx.glance.appwidget.GlanceAppWidget
import androidx.glance.appwidget.GlanceAppWidgetReceiver
import androidx.glance.appwidget.SizeMode
@@ -86,17 +87,27 @@
@Composable
private fun Header() {
val context = LocalContext.current
+ var shouldTintHeaderIcon by remember { mutableStateOf(true) }
+
Row(
horizontalAlignment = Alignment.CenterHorizontally,
verticalAlignment = Alignment.CenterVertically,
modifier = GlanceModifier.fillMaxWidth().background(Color.White)
) {
+ // Demonstrates toggling application of color filter on an image
Image(
provider = ImageProvider(R.drawable.ic_android),
contentDescription = null,
- colorFilter = ColorFilter.tint(
- ColorProvider(day = Color.Green, night = Color.Blue)
- ),
+ colorFilter = if (shouldTintHeaderIcon) {
+ ColorFilter.tint(
+ ColorProvider(day = Color.Green, night = Color.Blue)
+ )
+ } else {
+ null
+ },
+ modifier = GlanceModifier.clickable {
+ shouldTintHeaderIcon = !shouldTintHeaderIcon
+ }
)
Text(
text = context.getString(R.string.image_widget_name),
diff --git a/glance/glance-appwidget/src/androidTest/kotlin/androidx/glance/appwidget/AppWidgetHostRule.kt b/glance/glance-appwidget/src/androidTest/kotlin/androidx/glance/appwidget/AppWidgetHostRule.kt
index 712acdc..eb7d9a4 100644
--- a/glance/glance-appwidget/src/androidTest/kotlin/androidx/glance/appwidget/AppWidgetHostRule.kt
+++ b/glance/glance-appwidget/src/androidTest/kotlin/androidx/glance/appwidget/AppWidgetHostRule.kt
@@ -37,6 +37,7 @@
import androidx.test.uiautomator.UiDevice
import androidx.work.WorkManager
import androidx.work.testing.WorkManagerTestInitHelper
+import com.google.common.truth.Truth
import com.google.common.truth.Truth.assertThat
import java.lang.ref.WeakReference
import java.util.concurrent.CountDownLatch
@@ -44,7 +45,9 @@
import kotlin.test.assertIs
import kotlin.test.fail
import kotlinx.coroutines.Dispatchers
+import kotlinx.coroutines.channels.Channel
import kotlinx.coroutines.withContext
+import kotlinx.coroutines.withTimeoutOrNull
import org.junit.rules.RuleChain
import org.junit.rules.TestRule
import org.junit.runner.Description
@@ -331,4 +334,38 @@
mHostView.childCount > 0
}
}
+
+ /**
+ * Waits for given condition to be true and throws [AssertionError] with given message if not
+ * satisfied within the default timeout.
+ */
+ suspend fun waitAndTestForCondition(
+ errorMessage: String,
+ timeoutMs: Long = 600,
+ condition: (TestAppWidgetHostView) -> Boolean
+ ) {
+ val resume = Channel<Unit>(Channel.CONFLATED)
+ fun test() = condition(mHostView)
+ val onDrawListener = ViewTreeObserver.OnDrawListener {
+ if (test()) resume.trySend(Unit)
+ }
+
+ onHostActivity {
+ // If test is already true, do not wait for the next draw to resume
+ if (test()) resume.trySend(Unit)
+ mHostView.viewTreeObserver.addOnDrawListener(onDrawListener)
+ }
+ try {
+ val status = withTimeoutOrNull<Boolean?>(timeoutMs) {
+ resume.receive()
+ true
+ }
+
+ Truth.assertWithMessage(errorMessage).that(status).isEqualTo(true)
+ } finally {
+ onHostActivity {
+ mHostView.viewTreeObserver.removeOnDrawListener(onDrawListener)
+ }
+ }
+ }
}
diff --git a/glance/glance-appwidget/src/androidTest/kotlin/androidx/glance/appwidget/ImageTest.kt b/glance/glance-appwidget/src/androidTest/kotlin/androidx/glance/appwidget/ImageTest.kt
new file mode 100644
index 0000000..45735c7
--- /dev/null
+++ b/glance/glance-appwidget/src/androidTest/kotlin/androidx/glance/appwidget/ImageTest.kt
@@ -0,0 +1,82 @@
+/*
+ * Copyright 2023 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 androidx.glance.appwidget
+
+import android.widget.ImageView
+import androidx.compose.runtime.collectAsState
+import androidx.compose.runtime.getValue
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.unit.dp
+import androidx.glance.ColorFilter
+import androidx.glance.GlanceModifier
+import androidx.glance.GlanceTheme
+import androidx.glance.Image
+import androidx.glance.appwidget.test.R
+import androidx.glance.background
+import androidx.glance.layout.Column
+import androidx.glance.layout.size
+import androidx.test.filters.MediumTest
+import androidx.test.filters.SdkSuppress
+import kotlinx.coroutines.flow.MutableStateFlow
+import kotlinx.coroutines.runBlocking
+import org.junit.Rule
+import org.junit.Test
+
+@SdkSuppress(minSdkVersion = 29)
+@MediumTest
+class ImageTest {
+
+ @get:Rule
+ val mHostRule = AppWidgetHostRule()
+
+ @Test
+ fun colorFilter_toggle() = runBlocking {
+ val shouldTintImageFlow = MutableStateFlow(true)
+ TestGlanceAppWidget.uiDefinition = {
+ val shouldTint by shouldTintImageFlow.collectAsState()
+ Column(modifier = GlanceModifier.size(100.dp).background(Color.DarkGray)) {
+ Image(
+ provider = androidx.glance.ImageProvider(R.drawable.oval),
+ contentDescription = null,
+ modifier = GlanceModifier.size(24.dp),
+ colorFilter = if (shouldTint) {
+ ColorFilter.tint(GlanceTheme.colors.onSurface)
+ } else {
+ null
+ }
+ )
+ }
+ }
+ mHostRule.startHost()
+
+ mHostRule.waitAndTestForCondition(
+ errorMessage = "No ImageView with colorFilter != null was found"
+ ) { hostView ->
+ val child = hostView.findChildByType<ImageView>()
+ child != null && child.colorFilter != null
+ }
+
+ shouldTintImageFlow.emit(false)
+
+ mHostRule.waitAndTestForCondition(
+ errorMessage = "No ImageView with colorFilter == null was found"
+ ) { hostView ->
+ val child = hostView.findChildByType<ImageView>()
+ child != null && child.colorFilter == null
+ }
+ }
+}
diff --git a/glance/glance-appwidget/src/main/java/androidx/glance/appwidget/WidgetLayout.kt b/glance/glance-appwidget/src/main/java/androidx/glance/appwidget/WidgetLayout.kt
index 49e0d30..01cb60e 100644
--- a/glance/glance-appwidget/src/main/java/androidx/glance/appwidget/WidgetLayout.kt
+++ b/glance/glance-appwidget/src/main/java/androidx/glance/appwidget/WidgetLayout.kt
@@ -253,6 +253,7 @@
else -> error("Unknown content scale ${element.contentScale}")
}
hasImageDescription = !element.isDecorative()
+ hasImageColorFilter = element.colorFilterParams != null
}
private fun LayoutNode.Builder.setColumnNode(element: EmittableColumn) {
diff --git a/glance/glance-appwidget/src/test/kotlin/androidx/glance/appwidget/WidgetLayoutTest.kt b/glance/glance-appwidget/src/test/kotlin/androidx/glance/appwidget/WidgetLayoutTest.kt
index 759b8a7..2bbfbe4 100644
--- a/glance/glance-appwidget/src/test/kotlin/androidx/glance/appwidget/WidgetLayoutTest.kt
+++ b/glance/glance-appwidget/src/test/kotlin/androidx/glance/appwidget/WidgetLayoutTest.kt
@@ -21,7 +21,9 @@
import android.os.Build
import androidx.compose.ui.unit.dp
import androidx.glance.Button
+import androidx.glance.ColorFilter
import androidx.glance.GlanceModifier
+import androidx.glance.GlanceTheme
import androidx.glance.Image
import androidx.glance.ImageProvider
import androidx.glance.action.actionStartActivity
@@ -207,6 +209,33 @@
}
@Test
+ fun testChange_imageColorFilter() = fakeCoroutineScope.runTest {
+ val appId = 999
+ val root = runTestingComposition {
+ Column {
+ Image(
+ ImageProvider(R.drawable.oval),
+ colorFilter = ColorFilter.tint(GlanceTheme.colors.onSurface),
+ contentDescription = null
+ )
+ }
+ }
+ val root2 = runTestingComposition {
+ Column {
+ Image(
+ ImageProvider(R.drawable.oval),
+ colorFilter = null,
+ contentDescription = null
+ )
+ }
+ }
+
+ val layoutConfig = LayoutConfiguration.create(context, appId)
+ assertThat(layoutConfig.addLayout(root)).isEqualTo(0)
+ assertThat(layoutConfig.addLayout(root2)).isEqualTo(1)
+ }
+
+ @Test
fun testChange_columnAlignment() = fakeCoroutineScope.runTest {
val appId = 999
val root = runTestingComposition {
diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml
index b756b0c..e9a0401 100644
--- a/gradle/libs.versions.toml
+++ b/gradle/libs.versions.toml
@@ -47,7 +47,7 @@
kotlinCoroutines = "1.7.1"
kotlinSerialization = "1.3.3"
ksp = "1.9.0-1.0.13"
-ktfmt = "0.44"
+ktfmt = "0.45"
ktlint = "0.49.1"
leakcanary = "2.8.1"
media3 = "1.0.0-beta03"
diff --git a/gradle/verification-keyring.keys b/gradle/verification-keyring.keys
index b17f0ce..d7b83bd 100644
--- a/gradle/verification-keyring.keys
+++ b/gradle/verification-keyring.keys
@@ -3701,6 +3701,32 @@
=rjff
-----END PGP PUBLIC KEY BLOCK-----
+pub EE92349AD86DE446
+sub E68665C8F91BDE69
+-----BEGIN PGP PUBLIC KEY BLOCK-----
+Version: BCPG v1.68
+
+mQENBGO91akBCADDDpIrW/IohUSJNDu9VOUlnfEOm5VS49uqM0uucLi0BeAhy1Fo
+P6Yg1cJkcK66DtnUoTM/JJLyDzJRlKnniLrYCkw8ScvtPdA5cQKJTY5ecn+9ouR2
+SC9GkBMgagbCScP1xE45q5FO+z4kwmcERIKOQ687VAk64QM6hJCupfAd6SqS/X0Q
+SGttTNtmj7YBpfnU5iFX05Hj8Zkk7CX439xltO8uJNyBlDVbuUZc3/kRowKPVuuo
+TK2mzllVPzE/YT6NUY04wQPmRJx0uWZQUyDBZeckdurpSImdd7sik6Wf6zVGvxvg
+MC4oMufZ3EM8R4dssRSIUfnBaQ2o1LS+GVxjABEBAAG5AQ0EY73VqQEIANJPIYj9
+IsxKKOWLOkWvxAg9o9krIkohBMaOGRsx4RxQyArOCUoaG/qsG3aVOi8wML8hQK6q
+oXADJ6FBGxQ67G8pperzRSj1O3BJILB6Fd1X8w40S6hSvUAZs+DM1FMuD4mf6ydu
+yZUVIghGRExNeSb/vfn4KVPqdSAD7uWeQiIUYveaXrwot8+U8tRNgv+LQpCjhm5h
+vWyIuxxpI+k5N07V9y0yRGWiBbgqdmfHVwdEbUSM0sMYUJUZKW+iwf5tZig9LZu3
+HAf/vyXjBWG6zkkjwO8onKFLuhL4jkygHGSawJHwYRgtlknUZ0DMVc451bbhuFHE
+0dcgQCdAYJsI66MAEQEAAYkBPAQYAQgAJhYhBOsbPecXE8nsLofMJu6SNJrYbeRG
+BQJjvdWpAhsMBQkDwmcAAAoJEO6SNJrYbeRGNC0H/1JBKZZ8+JLGcGefchsEWxcN
+RN8yBtDtDM8pEsC99Pt+vzLaAYYFbPVKpzr57zIxZvtm8mUbWOa4Z8eHtzLRQEFi
+rKuvd47YUPOyHtfdeccr0e7iQQ2rpRmOVrnkKu4LHI+f4jFEm+Pe+3CyLYe/tBKK
+eBOKjRAWpQi7Jz1GQUuu9JFu4fUphzz0z5LybGHa1T7QZ+2ew8kqLl8EEeZAq4x/
+bulbaX050vfsgULn1X9AECW0CX/OafvFuSrEZsLUSw0KzmzqMPOLMXOh/EZsop17
+DqhGe5NO7GoCns3XxqjpggME9eCEQooeKHlLCAkX2/XttwVSRlrNsdVb82iKy7E=
+=M4QQ
+-----END PGP PUBLIC KEY BLOCK-----
+
pub EE9E7DC9D92FC896
sub 3B7272A25F20140F
-----BEGIN PGP PUBLIC KEY BLOCK-----
diff --git a/gradle/verification-metadata.xml b/gradle/verification-metadata.xml
index d3b3695..2bd15c7 100644
--- a/gradle/verification-metadata.xml
+++ b/gradle/verification-metadata.xml
@@ -438,6 +438,7 @@
<trusted-key id="ea0b70b5050192c98cfa7e4f3f36885c24df4b75" group="org.mozilla"/>
<trusted-key id="ea23db1360d9029481e7f2efecdfea3cb4493b94" group="jline"/>
<trusted-key id="eaa526b91dd83ba3e1b9636fa730529ca355a63e" group="org.ccil.cowan.tagsoup"/>
+ <trusted-key id="eb1b3de71713c9ec2e87cc26ee92349ad86de446" group="com.google.j2objc"/>
<trusted-key id="ec86f41279f2ec8ffd2f54906ccc36cc6c69fc17" group="com.google"/>
<trusted-key id="ee0ca873074092f806f59b65d364abaa39a47320" group="com.google.errorprone"/>
<trusted-key id="f06e94a01b835825e6ab4da369b8e32e23138662" group="org.spdx"/>
diff --git a/hilt/hilt-common/api/1.1.0-beta01.txt b/hilt/hilt-common/api/1.1.0-beta01.txt
new file mode 100644
index 0000000..5b7216f
--- /dev/null
+++ b/hilt/hilt-common/api/1.1.0-beta01.txt
@@ -0,0 +1,8 @@
+// Signature format: 4.0
+package androidx.hilt.work {
+
+ @dagger.hilt.GeneratesRootInput @java.lang.annotation.Retention(java.lang.annotation.RetentionPolicy.CLASS) @java.lang.annotation.Target(java.lang.annotation.ElementType.TYPE) public @interface HiltWorker {
+ }
+
+}
+
diff --git a/hilt/hilt-common/api/restricted_1.1.0-beta01.txt b/hilt/hilt-common/api/restricted_1.1.0-beta01.txt
new file mode 100644
index 0000000..5b7216f
--- /dev/null
+++ b/hilt/hilt-common/api/restricted_1.1.0-beta01.txt
@@ -0,0 +1,8 @@
+// Signature format: 4.0
+package androidx.hilt.work {
+
+ @dagger.hilt.GeneratesRootInput @java.lang.annotation.Retention(java.lang.annotation.RetentionPolicy.CLASS) @java.lang.annotation.Target(java.lang.annotation.ElementType.TYPE) public @interface HiltWorker {
+ }
+
+}
+
diff --git a/hilt/hilt-compiler/build.gradle b/hilt/hilt-compiler/build.gradle
index aec41ba..39dfec8 100644
--- a/hilt/hilt-compiler/build.gradle
+++ b/hilt/hilt-compiler/build.gradle
@@ -32,7 +32,7 @@
kapt(libs.autoService)
compileOnly(libs.gradleIncapHelper)
kapt(libs.gradleIncapHelperProcessor)
- implementation(project(":room:room-compiler-processing"))
+ implementation("androidx.room:room-compiler-processing:2.6.0-beta01")
implementation(libs.javapoet)
implementation(libs.kspApi)
diff --git a/hilt/hilt-navigation-compose/api/1.1.0-beta01.txt b/hilt/hilt-navigation-compose/api/1.1.0-beta01.txt
new file mode 100644
index 0000000..99cdd72
--- /dev/null
+++ b/hilt/hilt-navigation-compose/api/1.1.0-beta01.txt
@@ -0,0 +1,9 @@
+// Signature format: 4.0
+package androidx.hilt.navigation.compose {
+
+ public final class HiltViewModelKt {
+ method @androidx.compose.runtime.Composable public static inline <reified VM extends androidx.lifecycle.ViewModel> VM hiltViewModel(optional androidx.lifecycle.ViewModelStoreOwner viewModelStoreOwner, optional String? key);
+ }
+
+}
+
diff --git a/hilt/hilt-navigation-compose/api/res-1.1.0-beta01.txt b/hilt/hilt-navigation-compose/api/res-1.1.0-beta01.txt
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/hilt/hilt-navigation-compose/api/res-1.1.0-beta01.txt
diff --git a/hilt/hilt-navigation-compose/api/restricted_1.1.0-beta01.txt b/hilt/hilt-navigation-compose/api/restricted_1.1.0-beta01.txt
new file mode 100644
index 0000000..40d2a82
--- /dev/null
+++ b/hilt/hilt-navigation-compose/api/restricted_1.1.0-beta01.txt
@@ -0,0 +1,10 @@
+// Signature format: 4.0
+package androidx.hilt.navigation.compose {
+
+ public final class HiltViewModelKt {
+ method @androidx.compose.runtime.Composable @kotlin.PublishedApi internal static androidx.lifecycle.ViewModelProvider.Factory? createHiltViewModelFactory(androidx.lifecycle.ViewModelStoreOwner viewModelStoreOwner);
+ method @androidx.compose.runtime.Composable public static inline <reified VM extends androidx.lifecycle.ViewModel> VM hiltViewModel(optional androidx.lifecycle.ViewModelStoreOwner viewModelStoreOwner, optional String? key);
+ }
+
+}
+
diff --git a/hilt/hilt-navigation-fragment/api/1.1.0-beta01.txt b/hilt/hilt-navigation-fragment/api/1.1.0-beta01.txt
new file mode 100644
index 0000000..7cbc428
--- /dev/null
+++ b/hilt/hilt-navigation-fragment/api/1.1.0-beta01.txt
@@ -0,0 +1,9 @@
+// Signature format: 4.0
+package androidx.hilt.navigation.fragment {
+
+ public final class HiltNavGraphViewModelLazyKt {
+ method @MainThread public static inline <reified VM extends androidx.lifecycle.ViewModel> kotlin.Lazy<VM> hiltNavGraphViewModels(androidx.fragment.app.Fragment, @IdRes int navGraphId);
+ }
+
+}
+
diff --git a/hilt/hilt-navigation-fragment/api/res-1.1.0-beta01.txt b/hilt/hilt-navigation-fragment/api/res-1.1.0-beta01.txt
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/hilt/hilt-navigation-fragment/api/res-1.1.0-beta01.txt
diff --git a/hilt/hilt-navigation-fragment/api/restricted_1.1.0-beta01.txt b/hilt/hilt-navigation-fragment/api/restricted_1.1.0-beta01.txt
new file mode 100644
index 0000000..7cbc428
--- /dev/null
+++ b/hilt/hilt-navigation-fragment/api/restricted_1.1.0-beta01.txt
@@ -0,0 +1,9 @@
+// Signature format: 4.0
+package androidx.hilt.navigation.fragment {
+
+ public final class HiltNavGraphViewModelLazyKt {
+ method @MainThread public static inline <reified VM extends androidx.lifecycle.ViewModel> kotlin.Lazy<VM> hiltNavGraphViewModels(androidx.fragment.app.Fragment, @IdRes int navGraphId);
+ }
+
+}
+
diff --git a/hilt/hilt-navigation/api/1.1.0-beta01.txt b/hilt/hilt-navigation/api/1.1.0-beta01.txt
new file mode 100644
index 0000000..551dabc
--- /dev/null
+++ b/hilt/hilt-navigation/api/1.1.0-beta01.txt
@@ -0,0 +1,10 @@
+// Signature format: 4.0
+package androidx.hilt.navigation {
+
+ public final class HiltViewModelFactory {
+ method public static androidx.lifecycle.ViewModelProvider.Factory create(android.content.Context context, androidx.lifecycle.ViewModelProvider.Factory delegateFactory);
+ method public static androidx.lifecycle.ViewModelProvider.Factory create(android.content.Context context, androidx.navigation.NavBackStackEntry navBackStackEntry);
+ }
+
+}
+
diff --git a/hilt/hilt-navigation/api/res-1.1.0-beta01.txt b/hilt/hilt-navigation/api/res-1.1.0-beta01.txt
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/hilt/hilt-navigation/api/res-1.1.0-beta01.txt
diff --git a/hilt/hilt-navigation/api/restricted_1.1.0-beta01.txt b/hilt/hilt-navigation/api/restricted_1.1.0-beta01.txt
new file mode 100644
index 0000000..551dabc
--- /dev/null
+++ b/hilt/hilt-navigation/api/restricted_1.1.0-beta01.txt
@@ -0,0 +1,10 @@
+// Signature format: 4.0
+package androidx.hilt.navigation {
+
+ public final class HiltViewModelFactory {
+ method public static androidx.lifecycle.ViewModelProvider.Factory create(android.content.Context context, androidx.lifecycle.ViewModelProvider.Factory delegateFactory);
+ method public static androidx.lifecycle.ViewModelProvider.Factory create(android.content.Context context, androidx.navigation.NavBackStackEntry navBackStackEntry);
+ }
+
+}
+
diff --git a/hilt/hilt-work/api/1.1.0-beta01.txt b/hilt/hilt-work/api/1.1.0-beta01.txt
new file mode 100644
index 0000000..09dc5535
--- /dev/null
+++ b/hilt/hilt-work/api/1.1.0-beta01.txt
@@ -0,0 +1,9 @@
+// Signature format: 4.0
+package androidx.hilt.work {
+
+ public final class HiltWorkerFactory extends androidx.work.WorkerFactory {
+ method public androidx.work.ListenableWorker? createWorker(android.content.Context, String, androidx.work.WorkerParameters);
+ }
+
+}
+
diff --git a/hilt/hilt-work/api/res-1.1.0-beta01.txt b/hilt/hilt-work/api/res-1.1.0-beta01.txt
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/hilt/hilt-work/api/res-1.1.0-beta01.txt
diff --git a/hilt/hilt-work/api/restricted_1.1.0-beta01.txt b/hilt/hilt-work/api/restricted_1.1.0-beta01.txt
new file mode 100644
index 0000000..db6037f
--- /dev/null
+++ b/hilt/hilt-work/api/restricted_1.1.0-beta01.txt
@@ -0,0 +1,13 @@
+// Signature format: 4.0
+package androidx.hilt.work {
+
+ public final class HiltWorkerFactory extends androidx.work.WorkerFactory {
+ method public androidx.work.ListenableWorker? createWorker(android.content.Context, String, androidx.work.WorkerParameters);
+ }
+
+ @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public interface WorkerAssistedFactory<T extends androidx.work.ListenableWorker> {
+ method public T create(android.content.Context, androidx.work.WorkerParameters);
+ }
+
+}
+
diff --git a/libraryversions.toml b/libraryversions.toml
index 366525d..94aaac9 100644
--- a/libraryversions.toml
+++ b/libraryversions.toml
@@ -41,7 +41,7 @@
CORE_REMOTEVIEWS = "1.1.0-alpha01"
CORE_ROLE = "1.2.0-alpha01"
CORE_SPLASHSCREEN = "1.1.0-alpha02"
-CORE_TELECOM = "1.0.0-alpha01"
+CORE_TELECOM = "1.0.0-alpha02"
CORE_UWB = "1.0.0-alpha08"
CREDENTIALS = "1.2.0-rc01"
CREDENTIALS_FIDO_QUARANTINE = "1.0.0-alpha01"
@@ -72,9 +72,9 @@
HEALTH_CONNECT = "1.1.0-alpha05"
HEALTH_SERVICES_CLIENT = "1.1.0-alpha02"
HEIFWRITER = "1.1.0-alpha03"
-HILT = "1.1.0-alpha02"
-HILT_NAVIGATION = "1.1.0-alpha03"
-HILT_NAVIGATION_COMPOSE = "1.1.0-alpha02"
+HILT = "1.1.0-beta01"
+HILT_NAVIGATION = "1.1.0-beta01"
+HILT_NAVIGATION_COMPOSE = "1.1.0-beta01"
INPUT_MOTIONPREDICTION = "1.0.0-beta03"
INSPECTION = "1.0.0"
INTERPOLATOR = "1.1.0-alpha01"
diff --git a/lifecycle/lifecycle-compiler/build.gradle b/lifecycle/lifecycle-compiler/build.gradle
index b5ac1f6..5a4e902 100644
--- a/lifecycle/lifecycle-compiler/build.gradle
+++ b/lifecycle/lifecycle-compiler/build.gradle
@@ -30,23 +30,23 @@
testImplementation(libs.jsr250)
}
-// The following tasks are used to regenerate src/test/test-data/lib/src/test-library.jar
-// and is run manually when these jars need updating.
+// The following tasks are used to create test-library.jar used by ValidCasesTest.kt
// We actually need to compile :lifecycle:lifecycle-common, but compileJava is easier
-tasks.register("compileTestLibrarySource", JavaCompile).configure {
- dependsOn(compileJava)
- source "src/test/test-data/lib/src"
- classpath = project.compileJava.classpath
- destinationDirectory.set(new File(project.buildDir, "test-data/lib/classes"))
+def compileTestLibrarySource = tasks.register("compileTestLibrarySource", JavaCompile) {
+ it.dependsOn(compileJava)
+ it.source "src/test/test-data/lib/src"
+ it.classpath = project.compileJava.classpath
+ it.destinationDirectory.set(layout.buildDirectory.dir("test-data-lib-classes"))
}
-tasks.register("jarTestLibrarySource", Jar).configure {
- dependsOn("compileTestLibrarySource")
- from compileTestLibrarySource.destinationDir
- archiveFileName.set("test-library.jar")
- destinationDirectory.set(file("src/test/test-data/lib/"))
+def testLibraryJar = tasks.register("jarTestLibrarySource", Jar) {
+ it.from(compileTestLibrarySource.map { it.destinationDirectory })
+ it.archiveFileName.set("test-library.jar")
+ it.destinationDirectory.set(layout.buildDirectory.dir("test-data-lib-jar"))
}
+sourceSets.test.output.dir(testLibraryJar.map { it.destinationDirectory })
+
tasks.withType(Test).configureEach {
// https://github.com/google/compile-testing/issues/222
it.jvmArgs "--add-opens=jdk.compiler/com.sun.tools.javac.api=ALL-UNNAMED"
diff --git a/lifecycle/lifecycle-compiler/src/test/kotlin/androidx/lifecycle/ValidCasesTest.kt b/lifecycle/lifecycle-compiler/src/test/kotlin/androidx/lifecycle/ValidCasesTest.kt
index 1889a41..a24d8b9 100644
--- a/lifecycle/lifecycle-compiler/src/test/kotlin/androidx/lifecycle/ValidCasesTest.kt
+++ b/lifecycle/lifecycle-compiler/src/test/kotlin/androidx/lifecycle/ValidCasesTest.kt
@@ -155,8 +155,10 @@
}
}
- private fun libraryClasspathFiles() =
- getSystemClasspathFiles() + File("src/test/test-data/lib/test-library.jar")
+ private fun libraryClasspathFiles(): Set<File> {
+ val testLibrary = ValidCasesTest::class.java.classLoader.getResource("test-library.jar")
+ return getSystemClasspathFiles() + File(testLibrary!!.toURI())
+ }
private fun getSystemClasspathFiles(): Set<File> {
val pathSeparator = System.getProperty("path.separator")
diff --git a/lifecycle/lifecycle-compiler/src/test/test-data/lib/src/test/library/LibraryBaseObserver.java b/lifecycle/lifecycle-compiler/src/test/test-data/lib/src/test/library/LibraryBaseObserver.java
index 94d3643..0794b8e 100644
--- a/lifecycle/lifecycle-compiler/src/test/test-data/lib/src/test/library/LibraryBaseObserver.java
+++ b/lifecycle/lifecycle-compiler/src/test/test-data/lib/src/test/library/LibraryBaseObserver.java
@@ -24,6 +24,7 @@
import androidx.lifecycle.LifecycleOwner;
import androidx.lifecycle.OnLifecycleEvent;
+@SuppressWarnings("deprecation")
public class LibraryBaseObserver implements LifecycleObserver {
@OnLifecycleEvent(ON_START)
public void doOnStart() {
diff --git a/lifecycle/lifecycle-compiler/src/test/test-data/lib/src/test/library/LibraryBaseObserver_LifecycleAdapter.java b/lifecycle/lifecycle-compiler/src/test/test-data/lib/src/test/library/LibraryBaseObserver_LifecycleAdapter.java
index 5412e29..52ba23ab 100644
--- a/lifecycle/lifecycle-compiler/src/test/test-data/lib/src/test/library/LibraryBaseObserver_LifecycleAdapter.java
+++ b/lifecycle/lifecycle-compiler/src/test/test-data/lib/src/test/library/LibraryBaseObserver_LifecycleAdapter.java
@@ -20,8 +20,9 @@
import androidx.lifecycle.Lifecycle;
import androidx.lifecycle.LifecycleOwner;
import java.lang.Override;
-import javax.annotation.Generated;
+import javax.annotation.processing.Generated;
+@SuppressWarnings("deprecation")
@Generated("androidx.lifecycle.LifecycleProcessor")
public class LibraryBaseObserver_LifecycleAdapter implements GenericLifecycleObserver {
final LibraryBaseObserver mReceiver;
diff --git a/lifecycle/lifecycle-compiler/src/test/test-data/lib/src/test/library/ObserverNoAdapter.java b/lifecycle/lifecycle-compiler/src/test/test-data/lib/src/test/library/ObserverNoAdapter.java
index 75004ac..daec0e2 100644
--- a/lifecycle/lifecycle-compiler/src/test/test-data/lib/src/test/library/ObserverNoAdapter.java
+++ b/lifecycle/lifecycle-compiler/src/test/test-data/lib/src/test/library/ObserverNoAdapter.java
@@ -23,6 +23,7 @@
import androidx.lifecycle.LifecycleOwner;
import androidx.lifecycle.OnLifecycleEvent;
+@SuppressWarnings("deprecation")
public class ObserverNoAdapter implements LifecycleObserver {
@OnLifecycleEvent(ON_STOP)
public void doOnStop() {
diff --git a/lifecycle/lifecycle-compiler/src/test/test-data/lib/src/test/library/PPObserverNoAdapter.java b/lifecycle/lifecycle-compiler/src/test/test-data/lib/src/test/library/PPObserverNoAdapter.java
index 382e3d8..9f9dc00 100644
--- a/lifecycle/lifecycle-compiler/src/test/test-data/lib/src/test/library/PPObserverNoAdapter.java
+++ b/lifecycle/lifecycle-compiler/src/test/test-data/lib/src/test/library/PPObserverNoAdapter.java
@@ -24,6 +24,7 @@
import androidx.lifecycle.LifecycleOwner;
import androidx.lifecycle.OnLifecycleEvent;
+@SuppressWarnings("deprecation")
public class PPObserverNoAdapter implements LifecycleObserver {
@OnLifecycleEvent(ON_START)
protected void doOnStart() {
diff --git a/lifecycle/lifecycle-compiler/src/test/test-data/lib/src/test/library/PPObserverWithAdapter.java b/lifecycle/lifecycle-compiler/src/test/test-data/lib/src/test/library/PPObserverWithAdapter.java
index 828e9c0..da10478 100644
--- a/lifecycle/lifecycle-compiler/src/test/test-data/lib/src/test/library/PPObserverWithAdapter.java
+++ b/lifecycle/lifecycle-compiler/src/test/test-data/lib/src/test/library/PPObserverWithAdapter.java
@@ -24,6 +24,7 @@
import androidx.lifecycle.LifecycleOwner;
import androidx.lifecycle.OnLifecycleEvent;
+@SuppressWarnings("deprecation")
public class PPObserverWithAdapter implements LifecycleObserver {
@OnLifecycleEvent(ON_START)
protected void doOnStart() {
diff --git a/lifecycle/lifecycle-compiler/src/test/test-data/lib/test-library.jar b/lifecycle/lifecycle-compiler/src/test/test-data/lib/test-library.jar
deleted file mode 100644
index 587dbd5..0000000
--- a/lifecycle/lifecycle-compiler/src/test/test-data/lib/test-library.jar
+++ /dev/null
Binary files differ
diff --git a/paging/paging-common/build.gradle b/paging/paging-common/build.gradle
index be57c54..7601d0b 100644
--- a/paging/paging-common/build.gradle
+++ b/paging/paging-common/build.gradle
@@ -76,8 +76,8 @@
dependsOn(commonTest)
dependencies {
implementation(libs.junit)
- implementation(libs.mockitoCore4)
- implementation(libs.mockitoKotlin4)
+ implementation(libs.mockitoCore)
+ implementation(libs.mockitoKotlin)
implementation(project(":internal-testutils-common"))
implementation(project(":internal-testutils-ktx"))
}
diff --git a/privacysandbox/sdkruntime/sdkruntime-client/src/androidTest/java/androidx/privacysandbox/sdkruntime/client/SdkSandboxManagerCompatTest.kt b/privacysandbox/sdkruntime/sdkruntime-client/src/androidTest/java/androidx/privacysandbox/sdkruntime/client/SdkSandboxManagerCompatTest.kt
index a7e1317..5ee872d 100644
--- a/privacysandbox/sdkruntime/sdkruntime-client/src/androidTest/java/androidx/privacysandbox/sdkruntime/client/SdkSandboxManagerCompatTest.kt
+++ b/privacysandbox/sdkruntime/sdkruntime-client/src/androidTest/java/androidx/privacysandbox/sdkruntime/client/SdkSandboxManagerCompatTest.kt
@@ -21,6 +21,7 @@
import android.os.Binder
import android.os.Build
import android.os.Bundle
+import androidx.privacysandbox.sdkruntime.client.activity.LocalSdkActivityHandlerRegistry
import androidx.privacysandbox.sdkruntime.client.activity.SdkActivity
import androidx.privacysandbox.sdkruntime.client.loader.CatchingSdkActivityHandler
import androidx.privacysandbox.sdkruntime.client.loader.asTestSdk
@@ -242,6 +243,31 @@
}
@Test
+ fun unloadSdk_unregisterActivityHandlers() {
+ val context = ApplicationProvider.getApplicationContext<Context>()
+ val managerCompat = SdkSandboxManagerCompat.from(context)
+
+ val packageName = TestSdkConfigs.forSdkName("v4").packageName
+ val localSdk = runBlocking {
+ managerCompat.loadSdk(
+ packageName,
+ Bundle()
+ )
+ }
+
+ val testSdk = localSdk.asTestSdk()
+ val token = testSdk.registerSdkSandboxActivityHandler(CatchingSdkActivityHandler())
+
+ val registeredBefore = LocalSdkActivityHandlerRegistry.isRegistered(token)
+ assertThat(registeredBefore).isTrue()
+
+ managerCompat.unloadSdk(packageName)
+
+ val registeredAfter = LocalSdkActivityHandlerRegistry.isRegistered(token)
+ assertThat(registeredAfter).isFalse()
+ }
+
+ @Test
// TODO(b/249982507) DexmakerMockitoInline requires P+. Rewrite to support P-
@SdkSuppress(minSdkVersion = Build.VERSION_CODES.P)
fun addSdkSandboxProcessDeathCallback_whenSandboxNotAvailable_dontDelegateToSandbox() {
diff --git a/privacysandbox/sdkruntime/sdkruntime-client/src/androidTest/java/androidx/privacysandbox/sdkruntime/client/activity/LocalSdkActivityStarterTest.kt b/privacysandbox/sdkruntime/sdkruntime-client/src/androidTest/java/androidx/privacysandbox/sdkruntime/client/activity/LocalSdkActivityStarterTest.kt
index 3f49f5d..c94614e 100644
--- a/privacysandbox/sdkruntime/sdkruntime-client/src/androidTest/java/androidx/privacysandbox/sdkruntime/client/activity/LocalSdkActivityStarterTest.kt
+++ b/privacysandbox/sdkruntime/sdkruntime-client/src/androidTest/java/androidx/privacysandbox/sdkruntime/client/activity/LocalSdkActivityStarterTest.kt
@@ -50,7 +50,10 @@
@Test
fun tryStart_whenHandlerRegistered_startSdkActivityAndReturnTrue() {
val handler = TestHandler()
- val registeredToken = LocalSdkActivityHandlerRegistry.register(handler)
+ val registeredToken = LocalSdkActivityHandlerRegistry.register(
+ "LocalSdkActivityStarterTest.sdk",
+ handler
+ )
val startResult = with(ActivityScenario.launch(EmptyActivity::class.java)) {
withActivity {
diff --git a/privacysandbox/sdkruntime/sdkruntime-client/src/androidTest/java/androidx/privacysandbox/sdkruntime/client/controller/LocalControllerTest.kt b/privacysandbox/sdkruntime/sdkruntime-client/src/androidTest/java/androidx/privacysandbox/sdkruntime/client/controller/LocalControllerTest.kt
index e7e0b13..1d4260a 100644
--- a/privacysandbox/sdkruntime/sdkruntime-client/src/androidTest/java/androidx/privacysandbox/sdkruntime/client/controller/LocalControllerTest.kt
+++ b/privacysandbox/sdkruntime/sdkruntime-client/src/androidTest/java/androidx/privacysandbox/sdkruntime/client/controller/LocalControllerTest.kt
@@ -43,7 +43,7 @@
fun setUp() {
locallyLoadedSdks = LocallyLoadedSdks()
appOwnedSdkRegistry = StubAppOwnedSdkInterfaceRegistry()
- controller = LocalController(locallyLoadedSdks, appOwnedSdkRegistry)
+ controller = LocalController(SDK_PACKAGE_NAME, locallyLoadedSdks, appOwnedSdkRegistry)
}
@Test
@@ -88,6 +88,34 @@
}
@Test
+ fun registerSdkSandboxActivityHandler_registerWithCorrectSdkPackageName() {
+ val token =
+ controller.registerSdkSandboxActivityHandler(object : SdkSandboxActivityHandlerCompat {
+ override fun onActivityCreated(activityHolder: ActivityHolder) {
+ // do nothing
+ }
+ })
+
+ val anotherSdkController = LocalController(
+ "LocalControllerTest.anotherSdk",
+ locallyLoadedSdks,
+ appOwnedSdkRegistry
+ )
+ val anotherSdkHandler = object : SdkSandboxActivityHandlerCompat {
+ override fun onActivityCreated(activityHolder: ActivityHolder) {
+ // do nothing
+ }
+ }
+ val anotherSdkToken =
+ anotherSdkController.registerSdkSandboxActivityHandler(anotherSdkHandler)
+
+ LocalSdkActivityHandlerRegistry.unregisterAllActivityHandlersForSdk(SDK_PACKAGE_NAME)
+
+ assertThat(LocalSdkActivityHandlerRegistry.isRegistered(token)).isFalse()
+ assertThat(LocalSdkActivityHandlerRegistry.isRegistered(anotherSdkToken)).isTrue()
+ }
+
+ @Test
fun unregisterSdkSandboxActivityHandler_delegateToLocalSdkActivityHandlerRegistry() {
val handler = object : SdkSandboxActivityHandlerCompat {
override fun onActivityCreated(activityHolder: ActivityHolder) {
@@ -129,4 +157,8 @@
override fun getAppOwnedSdkSandboxInterfaces(): List<AppOwnedSdkSandboxInterfaceCompat> =
appOwnedSdks
}
+
+ companion object {
+ private const val SDK_PACKAGE_NAME = "LocalControllerTest.sdk"
+ }
}
diff --git a/privacysandbox/sdkruntime/sdkruntime-client/src/androidTest/java/androidx/privacysandbox/sdkruntime/client/loader/LocalSdkProviderTest.kt b/privacysandbox/sdkruntime/sdkruntime-client/src/androidTest/java/androidx/privacysandbox/sdkruntime/client/loader/LocalSdkProviderTest.kt
index 646f891..7fdaba7 100644
--- a/privacysandbox/sdkruntime/sdkruntime-client/src/androidTest/java/androidx/privacysandbox/sdkruntime/client/loader/LocalSdkProviderTest.kt
+++ b/privacysandbox/sdkruntime/sdkruntime-client/src/androidTest/java/androidx/privacysandbox/sdkruntime/client/loader/LocalSdkProviderTest.kt
@@ -304,7 +304,9 @@
val sdkLoader = SdkLoader(
TestClassLoaderFactory(testStorage),
context,
- controller
+ object : SdkLoader.ControllerFactory {
+ override fun createControllerFor(sdkConfig: LocalSdkConfig) = controller
+ }
)
return sdkLoader.loadSdk(sdkConfig)
}
diff --git a/privacysandbox/sdkruntime/sdkruntime-client/src/androidTest/java/androidx/privacysandbox/sdkruntime/client/loader/SdkLoaderTest.kt b/privacysandbox/sdkruntime/sdkruntime-client/src/androidTest/java/androidx/privacysandbox/sdkruntime/client/loader/SdkLoaderTest.kt
index e693b00..ff79f98 100644
--- a/privacysandbox/sdkruntime/sdkruntime-client/src/androidTest/java/androidx/privacysandbox/sdkruntime/client/loader/SdkLoaderTest.kt
+++ b/privacysandbox/sdkruntime/sdkruntime-client/src/androidTest/java/androidx/privacysandbox/sdkruntime/client/loader/SdkLoaderTest.kt
@@ -50,7 +50,7 @@
val context = ApplicationProvider.getApplicationContext<Context>()
sdkLoader = SdkLoader.create(
context = context,
- controller = NoOpImpl(),
+ controllerFactory = NoOpFactory,
)
testSdkConfig = TestSdkConfigs.CURRENT_WITH_RESOURCES
@@ -127,7 +127,7 @@
val context = ApplicationProvider.getApplicationContext<Context>()
val sdkLoaderWithLowSpaceMode = SdkLoader.create(
context = context,
- controller = NoOpImpl(),
+ controllerFactory = NoOpFactory,
lowSpaceThreshold = Long.MAX_VALUE
)
@@ -141,7 +141,7 @@
fun testLowSpace_notFailApi27() {
val sdkLoaderWithLowSpaceMode = SdkLoader.create(
context = ApplicationProvider.getApplicationContext(),
- controller = NoOpImpl(),
+ controllerFactory = NoOpFactory,
lowSpaceThreshold = Long.MAX_VALUE
)
@@ -152,6 +152,10 @@
assertThat(entryPointClass).isNotNull()
}
+ private object NoOpFactory : SdkLoader.ControllerFactory {
+ override fun createControllerFor(sdkConfig: LocalSdkConfig) = NoOpImpl()
+ }
+
private class NoOpImpl : SdkSandboxControllerCompat.SandboxControllerImpl {
override fun getSandboxedSdks(): List<SandboxedSdkCompat> {
throw UnsupportedOperationException("NoOp")
diff --git a/privacysandbox/sdkruntime/sdkruntime-client/src/main/java/androidx/privacysandbox/sdkruntime/client/SdkSandboxManagerCompat.kt b/privacysandbox/sdkruntime/sdkruntime-client/src/main/java/androidx/privacysandbox/sdkruntime/client/SdkSandboxManagerCompat.kt
index 8414411..e3106df 100644
--- a/privacysandbox/sdkruntime/sdkruntime-client/src/main/java/androidx/privacysandbox/sdkruntime/client/SdkSandboxManagerCompat.kt
+++ b/privacysandbox/sdkruntime/sdkruntime-client/src/main/java/androidx/privacysandbox/sdkruntime/client/SdkSandboxManagerCompat.kt
@@ -29,10 +29,11 @@
import androidx.annotation.RequiresApi
import androidx.annotation.RequiresExtension
import androidx.core.os.asOutcomeReceiver
+import androidx.privacysandbox.sdkruntime.client.activity.LocalSdkActivityHandlerRegistry
import androidx.privacysandbox.sdkruntime.client.activity.LocalSdkActivityStarter
import androidx.privacysandbox.sdkruntime.client.config.LocalSdkConfigsHolder
import androidx.privacysandbox.sdkruntime.client.controller.AppOwnedSdkRegistry
-import androidx.privacysandbox.sdkruntime.client.controller.LocalController
+import androidx.privacysandbox.sdkruntime.client.controller.LocalControllerFactory
import androidx.privacysandbox.sdkruntime.client.controller.LocallyLoadedSdks
import androidx.privacysandbox.sdkruntime.client.controller.impl.LocalAppOwnedSdkRegistry
import androidx.privacysandbox.sdkruntime.client.controller.impl.PlatformAppOwnedSdkRegistry
@@ -163,6 +164,7 @@
platformApi.unloadSdk(sdkName)
} else {
localEntry.sdkProvider.beforeUnloadSdk()
+ LocalSdkActivityHandlerRegistry.unregisterAllActivityHandlersForSdk(sdkName)
}
}
@@ -450,8 +452,8 @@
} else {
LocalAppOwnedSdkRegistry()
}
- val controller = LocalController(localSdks, appOwnedSdkRegistry)
- val sdkLoader = SdkLoader.create(context, controller)
+ val controllerFactory = LocalControllerFactory(localSdks, appOwnedSdkRegistry)
+ val sdkLoader = SdkLoader.create(context, controllerFactory)
val platformApi = PlatformApiFactory.create(context)
instance = SdkSandboxManagerCompat(
platformApi,
diff --git a/privacysandbox/sdkruntime/sdkruntime-client/src/main/java/androidx/privacysandbox/sdkruntime/client/activity/LocalSdkActivityHandlerRegistry.kt b/privacysandbox/sdkruntime/sdkruntime-client/src/main/java/androidx/privacysandbox/sdkruntime/client/activity/LocalSdkActivityHandlerRegistry.kt
index 7b2b726..b3006b9 100644
--- a/privacysandbox/sdkruntime/sdkruntime-client/src/main/java/androidx/privacysandbox/sdkruntime/client/activity/LocalSdkActivityHandlerRegistry.kt
+++ b/privacysandbox/sdkruntime/sdkruntime-client/src/main/java/androidx/privacysandbox/sdkruntime/client/activity/LocalSdkActivityHandlerRegistry.kt
@@ -32,22 +32,25 @@
private val mapsLock = Any()
@GuardedBy("mapsLock")
- private val handlerToToken =
- hashMapOf<SdkSandboxActivityHandlerCompat, IBinder>()
+ private val handlerToHandlerInfo =
+ hashMapOf<SdkSandboxActivityHandlerCompat, HandlerInfo>()
@GuardedBy("mapsLock")
private val tokenToHandler =
hashMapOf<IBinder, SdkSandboxActivityHandlerCompat>()
- fun register(handler: SdkSandboxActivityHandlerCompat): IBinder =
+ fun register(
+ sdkPackageName: String,
+ handler: SdkSandboxActivityHandlerCompat
+ ): IBinder =
synchronized(mapsLock) {
- val existingToken = handlerToToken[handler]
- if (existingToken != null) {
- return existingToken
+ val existingInfo = handlerToHandlerInfo[handler]
+ if (existingInfo != null) {
+ return existingInfo.token
}
val token = Binder()
- handlerToToken[handler] = token
+ handlerToHandlerInfo[handler] = HandlerInfo(token, sdkPackageName)
tokenToHandler[token] = handler
return token
@@ -55,12 +58,23 @@
fun unregister(handler: SdkSandboxActivityHandlerCompat) =
synchronized(mapsLock) {
- val unregisteredToken = handlerToToken.remove(handler)
- if (unregisteredToken != null) {
- tokenToHandler.remove(unregisteredToken)
+ val unregisteredInfo = handlerToHandlerInfo.remove(handler)
+ if (unregisteredInfo != null) {
+ tokenToHandler.remove(unregisteredInfo.token)
}
}
+ fun unregisterAllActivityHandlersForSdk(sdkPackageName: String) = synchronized(mapsLock) {
+ val it = handlerToHandlerInfo.values.iterator()
+ while (it.hasNext()) {
+ val next = it.next()
+ if (next.sdkPackageName == sdkPackageName) {
+ it.remove()
+ tokenToHandler.remove(next.token)
+ }
+ }
+ }
+
fun isRegistered(token: IBinder): Boolean =
synchronized(mapsLock) {
return tokenToHandler.containsKey(token)
@@ -80,4 +94,9 @@
?: throw IllegalStateException("There is no registered handler to notify")
handler.onActivityCreated(activityHolder)
}
+
+ private data class HandlerInfo(
+ val token: IBinder,
+ val sdkPackageName: String
+ )
}
diff --git a/privacysandbox/sdkruntime/sdkruntime-client/src/main/java/androidx/privacysandbox/sdkruntime/client/controller/LocalController.kt b/privacysandbox/sdkruntime/sdkruntime-client/src/main/java/androidx/privacysandbox/sdkruntime/client/controller/LocalController.kt
index 59cc703..c079804 100644
--- a/privacysandbox/sdkruntime/sdkruntime-client/src/main/java/androidx/privacysandbox/sdkruntime/client/controller/LocalController.kt
+++ b/privacysandbox/sdkruntime/sdkruntime-client/src/main/java/androidx/privacysandbox/sdkruntime/client/controller/LocalController.kt
@@ -27,6 +27,7 @@
* Local implementation that will be injected to locally loaded SDKs.
*/
internal class LocalController(
+ private val sdkPackageName: String,
private val locallyLoadedSdks: LocallyLoadedSdks,
private val appOwnedSdkRegistry: AppOwnedSdkRegistry
) : SdkSandboxControllerCompat.SandboxControllerImpl {
@@ -41,7 +42,7 @@
override fun registerSdkSandboxActivityHandler(
handlerCompat: SdkSandboxActivityHandlerCompat
): IBinder {
- return LocalSdkActivityHandlerRegistry.register(handlerCompat)
+ return LocalSdkActivityHandlerRegistry.register(sdkPackageName, handlerCompat)
}
override fun unregisterSdkSandboxActivityHandler(
diff --git a/privacysandbox/sdkruntime/sdkruntime-client/src/main/java/androidx/privacysandbox/sdkruntime/client/controller/LocalControllerFactory.kt b/privacysandbox/sdkruntime/sdkruntime-client/src/main/java/androidx/privacysandbox/sdkruntime/client/controller/LocalControllerFactory.kt
new file mode 100644
index 0000000..e6d1f0c
--- /dev/null
+++ b/privacysandbox/sdkruntime/sdkruntime-client/src/main/java/androidx/privacysandbox/sdkruntime/client/controller/LocalControllerFactory.kt
@@ -0,0 +1,35 @@
+/*
+ * Copyright 2023 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 androidx.privacysandbox.sdkruntime.client.controller
+
+import androidx.privacysandbox.sdkruntime.client.config.LocalSdkConfig
+import androidx.privacysandbox.sdkruntime.client.loader.SdkLoader
+import androidx.privacysandbox.sdkruntime.core.controller.SdkSandboxControllerCompat
+
+/**
+ * Create [LocalController] instance for specific sdk.
+ */
+internal class LocalControllerFactory(
+ private val locallyLoadedSdks: LocallyLoadedSdks,
+ private val appOwnedSdkRegistry: AppOwnedSdkRegistry
+) : SdkLoader.ControllerFactory {
+ override fun createControllerFor(
+ sdkConfig: LocalSdkConfig
+ ): SdkSandboxControllerCompat.SandboxControllerImpl {
+ return LocalController(sdkConfig.packageName, locallyLoadedSdks, appOwnedSdkRegistry)
+ }
+}
diff --git a/privacysandbox/sdkruntime/sdkruntime-client/src/main/java/androidx/privacysandbox/sdkruntime/client/loader/SdkLoader.kt b/privacysandbox/sdkruntime/sdkruntime-client/src/main/java/androidx/privacysandbox/sdkruntime/client/loader/SdkLoader.kt
index 596830e..adf7a7ee 100644
--- a/privacysandbox/sdkruntime/sdkruntime-client/src/main/java/androidx/privacysandbox/sdkruntime/client/loader/SdkLoader.kt
+++ b/privacysandbox/sdkruntime/sdkruntime-client/src/main/java/androidx/privacysandbox/sdkruntime/client/loader/SdkLoader.kt
@@ -29,13 +29,19 @@
internal class SdkLoader internal constructor(
private val classLoaderFactory: ClassLoaderFactory,
private val appContext: Context,
- private val controller: SdkSandboxControllerCompat.SandboxControllerImpl
+ private val controllerFactory: ControllerFactory
) {
internal interface ClassLoaderFactory {
fun createClassLoaderFor(sdkConfig: LocalSdkConfig, parent: ClassLoader): ClassLoader
}
+ internal interface ControllerFactory {
+ fun createControllerFor(
+ sdkConfig: LocalSdkConfig
+ ): SdkSandboxControllerCompat.SandboxControllerImpl
+ }
+
/**
* Loading SDK in separate classloader:
* 1. Create classloader for sdk;
@@ -94,6 +100,7 @@
sdkVersion: Int,
sdkConfig: LocalSdkConfig
): LocalSdkProvider {
+ val controller = controllerFactory.createControllerFor(sdkConfig)
SandboxControllerInjector.inject(sdkClassLoader, sdkVersion, controller)
return SdkProviderV1.create(sdkClassLoader, sdkConfig, appContext)
}
@@ -120,7 +127,7 @@
*/
fun create(
context: Context,
- controller: SdkSandboxControllerCompat.SandboxControllerImpl,
+ controllerFactory: ControllerFactory,
lowSpaceThreshold: Long = 100 * 1024 * 1024
): SdkLoader {
val cachedLocalSdkStorage = CachedLocalSdkStorage.create(
@@ -134,7 +141,7 @@
fallback = InMemorySdkClassLoaderFactory.create(context)
)
)
- return SdkLoader(classLoaderFactory, context, controller)
+ return SdkLoader(classLoaderFactory, context, controllerFactory)
}
}
}
diff --git a/privacysandbox/ui/ui-client/src/main/java/androidx/privacysandbox/ui/client/SandboxedUiAdapterFactory.kt b/privacysandbox/ui/ui-client/src/main/java/androidx/privacysandbox/ui/client/SandboxedUiAdapterFactory.kt
index 4722066..194a413 100644
--- a/privacysandbox/ui/ui-client/src/main/java/androidx/privacysandbox/ui/client/SandboxedUiAdapterFactory.kt
+++ b/privacysandbox/ui/ui-client/src/main/java/androidx/privacysandbox/ui/client/SandboxedUiAdapterFactory.kt
@@ -79,10 +79,26 @@
* [LocalAdapter] fetches UI from a provider living on same process as the client but on a
* different class loader.
*/
- private class LocalAdapter(private val adapterInterface: ISandboxedUiAdapter) :
+ private class LocalAdapter(adapterInterface: ISandboxedUiAdapter) :
SandboxedUiAdapter {
private val uiProviderBinder = adapterInterface.asBinder()
+ private val targetSessionClientClass = Class.forName(
+ SandboxedUiAdapter.SessionClient::class.java.name,
+ /* initialize = */ false,
+ uiProviderBinder.javaClass.classLoader
+ )
+
+ // The adapterInterface provided must have a openSession method on its class.
+ // Since the object itself has been instantiated on a different classloader, we
+ // need reflection to get hold of it.
+ private val openSessionMethod: Method = Class.forName(
+ SandboxedUiAdapter::class.java.name,
+ /*initialize=*/ false,
+ uiProviderBinder.javaClass.classLoader
+ ).getMethod("openSession", Context::class.java, IBinder::class.java, Int::class.java,
+ Int::class.java, Boolean::class.java, Executor::class.java, targetSessionClientClass)
+
@SuppressLint("BanUncheckedReflection") // using reflection on library classes
override fun openSession(
context: Context,
@@ -94,28 +110,13 @@
client: SandboxedUiAdapter.SessionClient
) {
try {
- // openSession call needs to be forwarded to uiProvider object instantiated
- // on a different classloader.
- val uiProviderClassLoader = uiProviderBinder.javaClass.classLoader
- val classOnUiProviderClassLoader = Class.forName(uiProviderBinder::class.java.name,
- /*initialize=*/false, uiProviderBinder.javaClass.classLoader)
- val openSessionMethod = classOnUiProviderClassLoader.methods.first {
- method -> method.name.equals("openSession")
- }
-
// We can't pass the client object as-is since it's been created on a different
// classloader.
- val targetSessionClientClass = Class.forName(
- SandboxedUiAdapter.SessionClient::class.java.name,
- /*initialize=*/ false,
- uiProviderClassLoader
- )
val sessionClientProxy = Proxy.newProxyInstance(
- uiProviderClassLoader,
+ uiProviderBinder.javaClass.classLoader,
arrayOf(targetSessionClientClass),
SessionClientProxyHandler(client)
)
-
openSessionMethod.invoke(uiProviderBinder, context, windowInputToken, initialWidth,
initialHeight, isZOrderOnTop, clientExecutor, sessionClientProxy)
} catch (exception: Throwable) {
@@ -123,53 +124,35 @@
}
}
- private inner class SessionClientProxyHandler(
+ private class SessionClientProxyHandler(
private val origClient: SandboxedUiAdapter.SessionClient,
) : InvocationHandler {
@SuppressLint("BanUncheckedReflection") // using reflection on library classes
- override fun invoke(proxy: Any, method: Method, args: Array<Any>?): Any? {
+ override fun invoke(proxy: Any, method: Method, args: Array<Any>?): Any {
return when (method.name) {
"onSessionOpened" -> {
- args!! // This method will always have an argument, so safe to !!
-
// We have to forward the call to original client, but it won't
- // recognize Session class on targetClassLoader. We need another proxy.
- val origSessionClass = Class.forName(
- SandboxedUiAdapter.Session::class.java.name,
- /*initialize=*/ false,
- origClient.javaClass.classLoader
- )
- val sessionProxy = Proxy.newProxyInstance(
- origClient.javaClass.classLoader,
- arrayOf(origSessionClass),
- SessionProxyHandler(args[0])
- )
-
- val methodOrig = origClient.javaClass.getMethod("onSessionOpened",
- SandboxedUiAdapter.Session::class.java)
- methodOrig.invoke(origClient, sessionProxy)
+ // recognize Session class on targetClassLoader. We need proxy for it
+ // on local ClassLoader.
+ args!! // This method will always have an argument, so safe to !!
+ origClient.onSessionOpened(SessionProxy(args[0]))
}
"onSessionError" -> {
args!! // This method will always have an argument, so safe to !!
-
val throwable = args[0] as Throwable
- val methodOrig = origClient.javaClass.getMethod("onSessionError",
- Throwable::class.java)
- methodOrig.invoke(origClient, throwable)
+ origClient.onSessionError(throwable)
}
"onResizeRequested" -> {
args!! // This method will always have an argument, so safe to !!
-
- val methodOrig = origClient.javaClass.getMethod("onResizeRequested",
- Int::class.java, Int::class.java)
- methodOrig.invoke(origClient, args[0], args[1])
+ val width = args[0] as Int
+ val height = args[1] as Int
+ origClient.onResizeRequested(width, height)
}
- "toString" -> {
- origClient.javaClass.getMethod("toString").invoke(origClient)
- }
+ "toString" -> origClient.toString()
+ "equals" -> proxy === args?.get(0)
+ "hashCode" -> hashCode()
else -> {
- // TODO(b/282918647): Implement other methods required
throw UnsupportedOperationException(
"Unexpected method call object:$proxy, method: $method, args: $args"
)
@@ -179,52 +162,51 @@
}
/**
- * Create [SandboxedUiAdapter.Session] on [targetClassLoader] that proxies to [origClient]
+ * Create [SandboxedUiAdapter.Session] that proxies to [origSession]
*/
- private inner class SessionProxyHandler(
- private val origClient: Any,
- ) : InvocationHandler {
+ private class SessionProxy(
+ private val origSession: Any,
+ ) : SandboxedUiAdapter.Session {
+
+ private val targetClass = Class.forName(
+ SandboxedUiAdapter.Session::class.java.name,
+ /* initialize = */ false,
+ origSession.javaClass.classLoader
+ ).also {
+ it.cast(origSession)
+ }
+
+ private val getViewMethod = targetClass.getMethod("getView")
+ private val notifyResizedMethod = targetClass.getMethod(
+ "notifyResized", Int::class.java, Int::class.java)
+ private val notifyZOrderChangedMethod =
+ targetClass.getMethod("notifyZOrderChanged", Boolean::class.java)
+ private val notifyConfigurationChangedMethod = targetClass.getMethod(
+ "notifyConfigurationChanged", Configuration::class.java)
+ private val closeMethod = targetClass.getMethod("close")
+
+ override val view: View
+ @SuppressLint("BanUncheckedReflection") // using reflection on library classes
+ get() = getViewMethod.invoke(origSession) as View
@SuppressLint("BanUncheckedReflection") // using reflection on library classes
- override fun invoke(proxy: Any, method: Method, args: Array<Any>?): Any? {
- return when (method.name) {
- "close" -> {
- origClient.javaClass.getMethod("close").invoke(origClient)
- }
- "getView" -> {
- origClient.javaClass.getMethod("getView").invoke(origClient)
- }
- "notifyResized" -> {
- args!! // This method will always have an argument, so safe to !!
+ override fun notifyResized(width: Int, height: Int) {
+ notifyResizedMethod.invoke(origSession, width, height)
+ }
- val methodOrig = origClient.javaClass.getMethod("notifyResized",
- Int::class.java, Int::class.java)
- methodOrig.invoke(origClient, args[0], args[1])
- }
- "notifyZOrderChanged" -> {
- args!! // This method will always have an argument, so safe to !!
+ @SuppressLint("BanUncheckedReflection") // using reflection on library classes
+ override fun notifyZOrderChanged(isZOrderOnTop: Boolean) {
+ notifyZOrderChangedMethod.invoke(origSession, isZOrderOnTop)
+ }
- val methodOrig = origClient.javaClass.getMethod("notifyZOrderChanged",
- Boolean::class.java)
- methodOrig.invoke(origClient, args[0])
- }
- "notifyConfigurationChanged" -> {
- args!! // This method will always have an argument, so safe to !!
+ @SuppressLint("BanUncheckedReflection") // using reflection on library classes
+ override fun notifyConfigurationChanged(configuration: Configuration) {
+ notifyConfigurationChangedMethod.invoke(origSession, configuration)
+ }
- val methodOrig = origClient.javaClass.getMethod(
- "notifyConfigurationChanged", Configuration::class.java)
- methodOrig.invoke(origClient, args[0])
- }
- "toString" -> {
- origClient.javaClass.getMethod("toString").invoke(origClient)
- }
- else -> {
- // TODO(b/282918647): Implement other methods required
- throw UnsupportedOperationException(
- "Unexpected method call object:$proxy, method: $method, args: $args"
- )
- }
- }
+ @SuppressLint("BanUncheckedReflection") // using reflection on library classes
+ override fun close() {
+ closeMethod.invoke(origSession)
}
}
}
diff --git a/privacysandbox/ui/ui-provider/src/main/java/androidx/privacysandbox/ui/provider/BinderAdapterDelegate.kt b/privacysandbox/ui/ui-provider/src/main/java/androidx/privacysandbox/ui/provider/BinderAdapterDelegate.kt
index 77138eb..5134d71 100644
--- a/privacysandbox/ui/ui-provider/src/main/java/androidx/privacysandbox/ui/provider/BinderAdapterDelegate.kt
+++ b/privacysandbox/ui/ui-provider/src/main/java/androidx/privacysandbox/ui/provider/BinderAdapterDelegate.kt
@@ -55,14 +55,14 @@
private class BinderAdapterDelegate(
private val sandboxContext: Context,
private val adapter: SandboxedUiAdapter
-) : ISandboxedUiAdapter.Stub() {
+) : ISandboxedUiAdapter.Stub(), SandboxedUiAdapter {
companion object {
private const val TAG = "BinderAdapterDelegate"
private const val FRAME_TIMEOUT_MILLIS = 1000.toLong()
}
- fun openSession(
+ override fun openSession(
context: Context,
windowInputToken: IBinder,
initialWidth: Int,
diff --git a/privacysandbox/ui/ui-tests/src/androidTest/java/androidx/privacysandbox/ui/tests/endtoend/IntegrationTests.kt b/privacysandbox/ui/ui-tests/src/androidTest/java/androidx/privacysandbox/ui/tests/endtoend/IntegrationTests.kt
index 7ac66fe..cc642bb 100644
--- a/privacysandbox/ui/ui-tests/src/androidTest/java/androidx/privacysandbox/ui/tests/endtoend/IntegrationTests.kt
+++ b/privacysandbox/ui/ui-tests/src/androidTest/java/androidx/privacysandbox/ui/tests/endtoend/IntegrationTests.kt
@@ -257,7 +257,7 @@
)
// Notify resized from the client
- testSessionClient.session.notifyResized(INITIAL_WIDTH + 10, INITIAL_HEIGHT + 10)
+ testSessionClient.session?.notifyResized(INITIAL_WIDTH + 10, INITIAL_HEIGHT + 10)
// Verify Session received the request
val testSession = sdkAdapter.session as TestSandboxedUiAdapter.TestSession
@@ -267,6 +267,27 @@
.isEqualTo(INITIAL_HEIGHT + 10)
}
+ @Test
+ fun testSessionClientProxy_methodsOnObjectClass() {
+ // Only makes sense when a dynamic proxy is involved in the flow
+ assumeTrue(invokeBackwardsCompatFlow)
+
+ val testSessionClient = TestSessionClient()
+ val sdkAdapter = createAdapterAndEstablishSession(
+ viewForSession = null,
+ testSessionClient = testSessionClient
+ )
+
+ // Verify toString, hashCode and equals have been implemented for dynamic proxy
+ val testSession = sdkAdapter.session as TestSandboxedUiAdapter.TestSession
+ val client = testSession.sessionClient
+ assertThat(client.toString()).isEqualTo(testSessionClient.toString())
+
+ assertThat(client.equals(client)).isTrue()
+ assertThat(client).isNotEqualTo(testSessionClient)
+ assertThat(client.hashCode()).isEqualTo(client.hashCode())
+ }
+
private fun getCoreLibInfoFromAdapter(sdkAdapter: SandboxedUiAdapter): Bundle {
val bundle = sdkAdapter.toCoreLibInfo(context)
bundle.putBoolean(TEST_ONLY_USE_REMOTE_ADAPTER, !invokeBackwardsCompatFlow)
@@ -488,7 +509,11 @@
private val sessionOpenedLatch = CountDownLatch(1)
private val resizeRequestedLatch = CountDownLatch(1)
- lateinit var session: SandboxedUiAdapter.Session
+ var session: SandboxedUiAdapter.Session? = null
+ get() {
+ sessionOpenedLatch.await(TIMEOUT, TimeUnit.MILLISECONDS)
+ return field
+ }
val isSessionOpened: Boolean
get() = sessionOpenedLatch.await(TIMEOUT, TimeUnit.MILLISECONDS)
diff --git a/room/room-compiler-processing-testing/src/main/java/androidx/room/compiler/processing/util/runner/JavacCompilationTestRunner.kt b/room/room-compiler-processing-testing/src/main/java/androidx/room/compiler/processing/util/runner/JavacCompilationTestRunner.kt
index d025f34..74a92c3 100644
--- a/room/room-compiler-processing-testing/src/main/java/androidx/room/compiler/processing/util/runner/JavacCompilationTestRunner.kt
+++ b/room/room-compiler-processing-testing/src/main/java/androidx/room/compiler/processing/util/runner/JavacCompilationTestRunner.kt
@@ -46,9 +46,9 @@
// synthesize a source to trigger compilation
listOf(
Source.java(
- qName = "foo.bar.SyntheticSource",
+ qName = "xprocessing.generated.SyntheticSource",
code = """
- package foo.bar;
+ package xprocessing.generated;
public class SyntheticSource {}
""".trimIndent()
)
diff --git a/room/room-compiler-processing/src/main/java/androidx/room/compiler/processing/XMemberContainer.kt b/room/room-compiler-processing/src/main/java/androidx/room/compiler/processing/XMemberContainer.kt
index 6d7cca4..b8f60a7 100644
--- a/room/room-compiler-processing/src/main/java/androidx/room/compiler/processing/XMemberContainer.kt
+++ b/room/room-compiler-processing/src/main/java/androidx/room/compiler/processing/XMemberContainer.kt
@@ -56,4 +56,14 @@
* representing this container does not exist (e.g. a top level Kotlin source file)
*/
val type: XType?
+
+ /**
+ * Returns true if this member container's origin is Java source or class
+ */
+ fun isFromJava(): Boolean
+
+ /**
+ * Returns true if this member container's origin is Kotlin source or class
+ */
+ fun isFromKotlin(): Boolean
}
diff --git a/room/room-compiler-processing/src/main/java/androidx/room/compiler/processing/XProcessingEnv.kt b/room/room-compiler-processing/src/main/java/androidx/room/compiler/processing/XProcessingEnv.kt
index 4b1a7e9..ec76f56 100644
--- a/room/room-compiler-processing/src/main/java/androidx/room/compiler/processing/XProcessingEnv.kt
+++ b/room/room-compiler-processing/src/main/java/androidx/room/compiler/processing/XProcessingEnv.kt
@@ -225,5 +225,14 @@
*/
fun getTypeElementsFromPackage(packageName: String): List<XTypeElement>
- // TODO: Add support for getting top level members in a package
+ /**
+ * Returns [XElement]s with the given package name. Note that this call can be expensive.
+ *
+ * @param packageName the package name to look up.
+ *
+ * @return A list of [XElement] with matching package name. This will return declarations
+ * from both dependencies and source. If the package is not found an empty list will be
+ * returned.
+ */
+ fun getElementsFromPackage(packageName: String): List<XElement>
}
diff --git a/room/room-compiler-processing/src/main/java/androidx/room/compiler/processing/javac/JavacProcessingEnv.kt b/room/room-compiler-processing/src/main/java/androidx/room/compiler/processing/javac/JavacProcessingEnv.kt
index 1f614c7..9151355 100644
--- a/room/room-compiler-processing/src/main/java/androidx/room/compiler/processing/javac/JavacProcessingEnv.kt
+++ b/room/room-compiler-processing/src/main/java/androidx/room/compiler/processing/javac/JavacProcessingEnv.kt
@@ -94,6 +94,10 @@
.map { wrapTypeElement(it) }
}
+ override fun getElementsFromPackage(packageName: String): List<XElement> {
+ return getTypeElementsFromPackage(packageName)
+ }
+
override fun findType(qName: String): XType? {
// check for primitives first
PRIMITIVE_TYPES[qName]?.let {
diff --git a/room/room-compiler-processing/src/main/java/androidx/room/compiler/processing/javac/JavacTypeElement.kt b/room/room-compiler-processing/src/main/java/androidx/room/compiler/processing/javac/JavacTypeElement.kt
index 506fcb2..f404202 100644
--- a/room/room-compiler-processing/src/main/java/androidx/room/compiler/processing/javac/JavacTypeElement.kt
+++ b/room/room-compiler-processing/src/main/java/androidx/room/compiler/processing/javac/JavacTypeElement.kt
@@ -276,6 +276,14 @@
}
}
+ override fun isFromJava(): Boolean {
+ return element.asType().kind != TypeKind.ERROR && !hasAnnotation(Metadata::class)
+ }
+
+ override fun isFromKotlin(): Boolean {
+ return element.asType().kind != TypeKind.ERROR && hasAnnotation(Metadata::class)
+ }
+
class DefaultJavacTypeElement(
env: JavacProcessingEnv,
element: TypeElement
diff --git a/room/room-compiler-processing/src/main/java/androidx/room/compiler/processing/ksp/KspFileMemberContainer.kt b/room/room-compiler-processing/src/main/java/androidx/room/compiler/processing/ksp/KspFileMemberContainer.kt
index 7a61c7b..cd86cce 100644
--- a/room/room-compiler-processing/src/main/java/androidx/room/compiler/processing/ksp/KspFileMemberContainer.kt
+++ b/room/room-compiler-processing/src/main/java/androidx/room/compiler/processing/ksp/KspFileMemberContainer.kt
@@ -103,4 +103,8 @@
}?.value?.toString() ?: fileName.replace(".kt", "Kt")
}
}
+
+ override fun isFromJava(): Boolean = false
+
+ override fun isFromKotlin(): Boolean = true
}
diff --git a/room/room-compiler-processing/src/main/java/androidx/room/compiler/processing/ksp/KspProcessingEnv.kt b/room/room-compiler-processing/src/main/java/androidx/room/compiler/processing/ksp/KspProcessingEnv.kt
index dafd994..b1bd1eac 100644
--- a/room/room-compiler-processing/src/main/java/androidx/room/compiler/processing/ksp/KspProcessingEnv.kt
+++ b/room/room-compiler-processing/src/main/java/androidx/room/compiler/processing/ksp/KspProcessingEnv.kt
@@ -17,6 +17,7 @@
package androidx.room.compiler.processing.ksp
import androidx.room.compiler.processing.XConstructorType
+import androidx.room.compiler.processing.XElement
import androidx.room.compiler.processing.XExecutableType
import androidx.room.compiler.processing.XFiler
import androidx.room.compiler.processing.XMessager
@@ -35,6 +36,8 @@
import com.google.devtools.ksp.symbol.KSAnnotation
import com.google.devtools.ksp.symbol.KSClassDeclaration
import com.google.devtools.ksp.symbol.KSFile
+import com.google.devtools.ksp.symbol.KSFunctionDeclaration
+import com.google.devtools.ksp.symbol.KSPropertyDeclaration
import com.google.devtools.ksp.symbol.KSType
import com.google.devtools.ksp.symbol.KSTypeAlias
import com.google.devtools.ksp.symbol.KSTypeArgument
@@ -203,6 +206,18 @@
return arrayTypeFactory.createWithComponentType(type)
}
+ @OptIn(KspExperimental::class)
+ override fun getElementsFromPackage(packageName: String): List<XElement> {
+ return resolver.getDeclarationsFromPackage(packageName).map {
+ when (it) {
+ is KSClassDeclaration -> wrapClassDeclaration(it)
+ is KSPropertyDeclaration -> KspFieldElement.create(this, it)
+ is KSFunctionDeclaration -> KspMethodElement.create(this, it)
+ else -> error("Unknown element type")
+ }
+ }.toList()
+ }
+
/**
* Wraps the given `ksType`.
*
diff --git a/room/room-compiler-processing/src/main/java/androidx/room/compiler/processing/ksp/KspTypeElement.kt b/room/room-compiler-processing/src/main/java/androidx/room/compiler/processing/ksp/KspTypeElement.kt
index 51f1463..9d4aba5 100644
--- a/room/room-compiler-processing/src/main/java/androidx/room/compiler/processing/ksp/KspTypeElement.kt
+++ b/room/room-compiler-processing/src/main/java/androidx/room/compiler/processing/ksp/KspTypeElement.kt
@@ -49,7 +49,9 @@
import com.google.devtools.ksp.symbol.KSPropertyDeclaration
import com.google.devtools.ksp.symbol.KSValueParameter
import com.google.devtools.ksp.symbol.Modifier
+import com.google.devtools.ksp.symbol.Origin.JAVA
import com.google.devtools.ksp.symbol.Origin.JAVA_LIB
+import com.google.devtools.ksp.symbol.Origin.KOTLIN
import com.google.devtools.ksp.symbol.Origin.KOTLIN_LIB
import com.squareup.javapoet.ClassName
import com.squareup.kotlinpoet.javapoet.JClassName
@@ -396,6 +398,20 @@
.toList()
}
+ override fun isFromJava(): Boolean {
+ return when (declaration.origin) {
+ JAVA, JAVA_LIB -> true
+ else -> false
+ }
+ }
+
+ override fun isFromKotlin(): Boolean {
+ return when (declaration.origin) {
+ KOTLIN, KOTLIN_LIB -> true
+ else -> false
+ }
+ }
+
private class DefaultKspTypeElement(
env: KspProcessingEnv,
declaration: KSClassDeclaration
diff --git a/room/room-compiler-processing/src/main/java/androidx/room/compiler/processing/ksp/synthetic/KspSyntheticFileMemberContainer.kt b/room/room-compiler-processing/src/main/java/androidx/room/compiler/processing/ksp/synthetic/KspSyntheticFileMemberContainer.kt
index cb2432f..958c1df 100644
--- a/room/room-compiler-processing/src/main/java/androidx/room/compiler/processing/ksp/synthetic/KspSyntheticFileMemberContainer.kt
+++ b/room/room-compiler-processing/src/main/java/androidx/room/compiler/processing/ksp/synthetic/KspSyntheticFileMemberContainer.kt
@@ -120,4 +120,8 @@
override fun hasAnnotationWithPackage(pkg: String): Boolean {
return false
}
+
+ override fun isFromJava(): Boolean = false
+
+ override fun isFromKotlin(): Boolean = true
}
diff --git a/room/room-compiler-processing/src/test/java/androidx/room/compiler/processing/XElementTest.kt b/room/room-compiler-processing/src/test/java/androidx/room/compiler/processing/XElementTest.kt
index 1763a8b..e83bbbe 100644
--- a/room/room-compiler-processing/src/test/java/androidx/room/compiler/processing/XElementTest.kt
+++ b/room/room-compiler-processing/src/test/java/androidx/room/compiler/processing/XElementTest.kt
@@ -30,6 +30,7 @@
import androidx.room.compiler.processing.util.XTestInvocation
import androidx.room.compiler.processing.util.asJClassName
import androidx.room.compiler.processing.util.compileFiles
+import androidx.room.compiler.processing.util.getDeclaredField
import androidx.room.compiler.processing.util.getField
import androidx.room.compiler.processing.util.getMethodByJvmName
import androidx.room.compiler.processing.util.getParameter
@@ -1030,6 +1031,185 @@
}
}
+ @Test
+ fun isFromJavaOrKotlin() {
+ val javaSource = Source.java(
+ "foo.bar.Foo",
+ """
+ package foo.bar;
+ class Foo {
+ void f(String a) {}
+ static class Nested {}
+ }
+ """.trimIndent()
+ )
+ val kotlinSource = Source.kotlin(
+ "Bar.kt",
+ """
+ package foo.bar
+ fun tlf(a: String) = "hello"
+ class Bar {
+ var p: String = "hello"
+ fun f(a: String) {}
+ suspend fun sf(a: String) {}
+ class Nested
+ }
+ fun Bar.ef(a: String) {}
+ """.trimIndent()
+ )
+ runProcessorTestHelper(
+ listOf(javaSource, kotlinSource)
+ ) { invocation, _ ->
+ // Java
+ invocation.processingEnv.requireTypeElement("foo.bar.Foo").let {
+ assertThat(it.closestMemberContainer.isFromJava()).isTrue()
+ assertThat(it.closestMemberContainer.isFromKotlin()).isFalse()
+ it.getMethodByJvmName("f").let {
+ assertThat(it.closestMemberContainer.isFromJava()).isTrue()
+ assertThat(it.closestMemberContainer.isFromKotlin()).isFalse()
+ }
+ }
+ invocation.processingEnv.requireTypeElement("foo.bar.Foo.Nested").let {
+ assertThat(it.closestMemberContainer.isFromJava()).isTrue()
+ assertThat(it.closestMemberContainer.isFromKotlin()).isFalse()
+ }
+
+ // Kotlin
+ invocation.processingEnv.requireTypeElement("foo.bar.Bar").let {
+ assertThat(it.isFromJava()).isFalse()
+ assertThat(it.isFromKotlin()).isTrue()
+ it.getDeclaredField("p").let {
+ assertThat(it.closestMemberContainer.isFromJava()).isFalse()
+ assertThat(it.closestMemberContainer.isFromKotlin()).isTrue()
+ it.setter!!.let {
+ assertThat(it.closestMemberContainer.isFromJava()).isFalse()
+ assertThat(it.closestMemberContainer.isFromKotlin()).isTrue()
+ }
+ it.getter!!.let {
+ assertThat(it.closestMemberContainer.isFromJava()).isFalse()
+ assertThat(it.closestMemberContainer.isFromKotlin()).isTrue()
+ }
+ }
+ it.getMethodByJvmName("f").let {
+ assertThat(it.closestMemberContainer.isFromJava()).isFalse()
+ assertThat(it.closestMemberContainer.isFromKotlin()).isTrue()
+
+ it.parameters.single().let {
+ assertThat(it.closestMemberContainer.isFromJava()).isFalse()
+ assertThat(it.closestMemberContainer.isFromKotlin()).isTrue()
+ }
+ }
+ it.getMethodByJvmName("sf").let {
+ assertThat(it.closestMemberContainer.isFromJava()).isFalse()
+ assertThat(it.closestMemberContainer.isFromKotlin()).isTrue()
+
+ it.parameters.forEach {
+ assertThat(it.closestMemberContainer.isFromJava()).isFalse()
+ assertThat(it.closestMemberContainer.isFromKotlin()).isTrue()
+ }
+ }
+ }
+ invocation.processingEnv.requireTypeElement("foo.bar.Bar.Nested").let {
+ assertThat(it.closestMemberContainer.isFromJava()).isFalse()
+ assertThat(it.closestMemberContainer.isFromKotlin()).isTrue()
+ }
+
+ // Kotlin top-level elements
+ if (invocation.isKsp) {
+ val topLevelElements = invocation.processingEnv.getElementsFromPackage("foo.bar")
+ topLevelElements.single {
+ it.name == "tlf"
+ }.let {
+ assertThat(it.closestMemberContainer.isFromJava()).isFalse()
+ assertThat(it.closestMemberContainer.isFromKotlin()).isTrue()
+ }
+ topLevelElements.single {
+ it.name == "ef"
+ }.let {
+ assertThat(it.closestMemberContainer.isFromJava()).isFalse()
+ assertThat(it.closestMemberContainer.isFromKotlin()).isTrue()
+ (it as XMethodElement).parameters.forEach {
+ assertThat(it.closestMemberContainer.isFromJava()).isFalse()
+ assertThat(it.closestMemberContainer.isFromKotlin()).isTrue()
+ }
+ }
+ } else {
+ invocation.processingEnv.requireTypeElement("foo.bar.BarKt").let {
+ assertThat(it.closestMemberContainer.isFromJava()).isFalse()
+ assertThat(it.closestMemberContainer.isFromKotlin()).isTrue()
+
+ it.getMethodByJvmName("tlf").let {
+ assertThat(it.closestMemberContainer.isFromJava()).isFalse()
+ assertThat(it.closestMemberContainer.isFromKotlin()).isTrue()
+
+ it.parameters.single().let {
+ assertThat(it.closestMemberContainer.isFromJava()).isFalse()
+ assertThat(it.closestMemberContainer.isFromKotlin()).isTrue()
+ }
+ }
+
+ it.getMethodByJvmName("ef").let {
+ assertThat(it.closestMemberContainer.isFromJava()).isFalse()
+ assertThat(it.closestMemberContainer.isFromKotlin()).isTrue()
+
+ it.parameters.forEach {
+ assertThat(it.closestMemberContainer.isFromJava()).isFalse()
+ assertThat(it.closestMemberContainer.isFromKotlin()).isTrue()
+ }
+ }
+ }
+ }
+ }
+ }
+
+ @Test
+ fun isFromJavaOrKotlinErrorTypes() {
+ val javaSource = Source.java(
+ "foo.bar.Foo",
+ """
+ package foo.bar;
+ class Foo {
+ DoNotExist ep;
+ }
+ """.trimIndent()
+ )
+ val kotlinSource = Source.kotlin(
+ "Bar.kt",
+ """
+ package foo.bar
+ class Bar {
+ val ep: DoNotExist = TODO()
+ }
+ """.trimIndent()
+ )
+ // Can't use runProcessorTestHelper() as we can't compile the files referencing an
+ // error type
+ runProcessorTest(
+ listOf(javaSource, kotlinSource)
+ ) { invocation ->
+ // Java
+ invocation.processingEnv.requireTypeElement("foo.bar.Foo").let {
+ it.getField("ep").type.typeElement!!.let {
+ assertThat(it.closestMemberContainer.isFromJava()).isFalse()
+ assertThat(it.closestMemberContainer.isFromKotlin()).isFalse()
+ }
+ }
+
+ // Kotlin
+ invocation.processingEnv.requireTypeElement("foo.bar.Bar").let {
+ it.getField("ep").type.typeElement!!.let {
+ if (invocation.isKsp) {
+ assertThat(it.closestMemberContainer.isFromJava()).isFalse()
+ assertThat(it.closestMemberContainer.isFromKotlin()).isFalse()
+ }
+ }
+ }
+ invocation.assertCompilationResult {
+ compilationDidFail()
+ }
+ }
+ }
+
private val enclosingElementJavaSource = Source.java(
"foo.bar.Test",
"""
diff --git a/room/room-compiler-processing/src/test/java/androidx/room/compiler/processing/XRoundEnvTest.kt b/room/room-compiler-processing/src/test/java/androidx/room/compiler/processing/XRoundEnvTest.kt
index 6a33c86..f123888 100644
--- a/room/room-compiler-processing/src/test/java/androidx/room/compiler/processing/XRoundEnvTest.kt
+++ b/room/room-compiler-processing/src/test/java/androidx/room/compiler/processing/XRoundEnvTest.kt
@@ -22,6 +22,7 @@
import androidx.room.compiler.codegen.XTypeName
import androidx.room.compiler.processing.testcode.OtherAnnotation
import androidx.room.compiler.processing.util.Source
+import androidx.room.compiler.processing.util.compileFiles
import androidx.room.compiler.processing.util.getDeclaredMethodByJvmName
import androidx.room.compiler.processing.util.runKspTest
import androidx.room.compiler.processing.util.runProcessorTest
@@ -279,7 +280,7 @@
}
@Test
- fun getElementsFromPackageIncludesSources() {
+ fun getTypeElementsFromPackageIncludesSources() {
val source = Source.kotlin(
"foo/Baz.kt",
"""
@@ -295,12 +296,12 @@
)
assertThat(
elements
- ).contains(targetElement)
+ ).containsExactly(targetElement)
}
}
@Test
- fun getElementsFromPackageIncludesBinaries() {
+ fun getTypeElementsFromPackageIncludesBinaries() {
runProcessorTest { testInvocation ->
val kspElements = testInvocation.processingEnv.getTypeElementsFromPackage(
"com.google.devtools.ksp.processing"
@@ -317,7 +318,7 @@
}
@Test
- fun getElementsFromPackageReturnsEmptyListForUnknownPackage() {
+ fun getTypeElementsFromPackageReturnsEmptyListForUnknownPackage() {
runProcessorTest { testInvocation ->
val kspElements = testInvocation.processingEnv.getTypeElementsFromPackage(
"com.example.unknown.package"
@@ -328,6 +329,69 @@
}
@Test
+ fun getElementsFromPackageInSource() {
+ val source = Source.kotlin(
+ "Foo.kt",
+ """
+ package foo.bar
+ val p: Int = TODO()
+ fun f(): String = TODO()
+ """.trimIndent()
+ )
+ runProcessorTest(listOf(source)) { invocation ->
+ val elements = invocation.processingEnv.getElementsFromPackage(
+ "foo.bar"
+ )
+ if (invocation.isKsp) {
+ assertThat(
+ elements.map { it.name }
+ ).containsExactly("p", "f")
+ } else {
+ assertThat(
+ elements.map { it.name }
+ ).containsExactly("FooKt")
+ }
+ }
+ }
+
+ @Test
+ fun getElementsFromPackageInClass() {
+ val source = Source.kotlin(
+ "Foo.kt",
+ """
+ package foo.bar
+ val p: Int = TODO()
+ fun f(): String = TODO()
+ """.trimIndent()
+ )
+ runProcessorTest(classpath = compileFiles(listOf(source))) { invocation ->
+ val elements = invocation.processingEnv.getElementsFromPackage(
+ "foo.bar"
+ )
+ if (invocation.isKsp) {
+ assertThat(
+ elements.map { it.name }
+ ).containsExactly("p", "f")
+ } else {
+ assertThat(
+ elements.map { it.name }
+ ).containsExactly("FooKt")
+ }
+ }
+ }
+
+ @Test
+ fun getElementsFromPackageReturnsEmptyListForUnknownPackage() {
+ runProcessorTest { testInvocation ->
+ val elements = testInvocation.processingEnv.getElementsFromPackage(
+ "com.example.unknown.package"
+ )
+
+ assertThat(elements).isEmpty()
+ }
+ }
+
+ @Test
fun getAnnotatedParamElements() {
runProcessorTest(
listOf(
diff --git a/tv/integration-tests/playground/src/main/java/androidx/tv/integration/playground/TextField.kt b/tv/integration-tests/playground/src/main/java/androidx/tv/integration/playground/TextField.kt
index 472ba2f..de4d6e1 100644
--- a/tv/integration-tests/playground/src/main/java/androidx/tv/integration/playground/TextField.kt
+++ b/tv/integration-tests/playground/src/main/java/androidx/tv/integration/playground/TextField.kt
@@ -37,10 +37,14 @@
import androidx.compose.runtime.setValue
import androidx.compose.ui.Modifier
import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.text.input.ImeAction
+import androidx.compose.ui.text.input.KeyboardType
import androidx.compose.ui.unit.dp
import androidx.tv.foundation.ExperimentalTvFoundationApi
import androidx.tv.foundation.text.AndroidImeOptions
import androidx.tv.foundation.text.TvKeyboardAlignment
+import androidx.tv.material3.ExperimentalTvMaterial3Api
+import androidx.tv.material3.MaterialTheme
@Composable
fun TextFieldContent() {
@@ -52,8 +56,9 @@
}
item {
LazyColumn(verticalArrangement = Arrangement.spacedBy(20.dp)) {
- item { SampleTextField(label = "Email") }
- item { SampleTextField(label = "Password") }
+ item { SampleTextField(label = "Name") }
+ item { SampleTextField(label = "Email", keyboardType = KeyboardType.Email) }
+ item { SampleTextField(label = "Password", keyboardType = KeyboardType.Password) }
item { SampleButton(text = "Submit") }
}
}
@@ -65,9 +70,9 @@
}
}
-@OptIn(ExperimentalTvFoundationApi::class)
+@OptIn(ExperimentalTvFoundationApi::class, ExperimentalTvMaterial3Api::class)
@Composable
-fun SampleTextField(label: String) {
+fun SampleTextField(label: String, keyboardType: KeyboardType = KeyboardType.Text) {
var text by remember { mutableStateOf("") }
OutlinedTextField(
@@ -81,12 +86,24 @@
Text("$label...")
},
keyboardOptions = KeyboardOptions(
- platformImeOptions = AndroidImeOptions(TvKeyboardAlignment.Left)
+ keyboardType = keyboardType,
+ platformImeOptions = AndroidImeOptions(TvKeyboardAlignment.Left),
+ imeAction = ImeAction.Next
),
colors = OutlinedTextFieldDefaults.colors(
- focusedBorderColor = Color.Cyan,
- focusedLabelColor = Color.Cyan,
- cursorColor = Color.White
+ unfocusedTextColor = MaterialTheme.colorScheme.onSurface,
+ focusedTextColor = MaterialTheme.colorScheme.onSurface,
+ unfocusedBorderColor = MaterialTheme.colorScheme.border,
+ focusedBorderColor = MaterialTheme.colorScheme.primary,
+ unfocusedLabelColor = MaterialTheme.colorScheme.onSurfaceVariant,
+ focusedLabelColor = MaterialTheme.colorScheme.primary,
+ cursorColor = MaterialTheme.colorScheme.primary,
+ unfocusedLeadingIconColor = MaterialTheme.colorScheme.onSurfaceVariant,
+ focusedLeadingIconColor = MaterialTheme.colorScheme.onSurfaceVariant,
+ unfocusedTrailingIconColor = MaterialTheme.colorScheme.onSurfaceVariant,
+ focusedTrailingIconColor = MaterialTheme.colorScheme.onSurfaceVariant,
+ errorLabelColor = MaterialTheme.colorScheme.error,
+ errorBorderColor = MaterialTheme.colorScheme.error
)
)
}
diff --git a/tv/tv-foundation/src/main/baseline-prof.txt b/tv/tv-foundation/src/main/baseline-prof.txt
new file mode 100644
index 0000000..970cd8b
--- /dev/null
+++ b/tv/tv-foundation/src/main/baseline-prof.txt
@@ -0,0 +1,5623 @@
+HPLandroidx/collection/ArrayMap$EntrySet;-><init>(Ljava/util/Map;I)V
+HPLandroidx/compose/foundation/layout/SizeElement;->equals(Ljava/lang/Object;)Z
+HPLandroidx/compose/runtime/ComposerImpl$CompositionContextImpl;->unregisterComposer$runtime_release(Landroidx/compose/runtime/Composer;)V
+HPLandroidx/compose/runtime/ComposerImpl$CompositionContextImpl;->unregisterComposition$runtime_release(Landroidx/compose/runtime/CompositionImpl;)V
+HPLandroidx/compose/runtime/ComposerImpl;->dispose$runtime_release()V
+HPLandroidx/compose/runtime/CompositionImpl;->dispose()V
+HPLandroidx/compose/runtime/Recomposer;->unregisterComposition$runtime_release(Landroidx/compose/runtime/CompositionImpl;)V
+HPLandroidx/compose/runtime/SlotWriter$groupSlots$1;-><init>(IILandroidx/compose/runtime/SlotWriter;)V
+HPLandroidx/compose/runtime/SlotWriter$groupSlots$1;->hasNext()Z
+HPLandroidx/compose/runtime/SlotWriter$groupSlots$1;->next()Ljava/lang/Object;
+HPLandroidx/compose/runtime/SlotWriter;->removeGroup()Z
+HPLandroidx/compose/runtime/SlotWriter;->removeGroups(II)Z
+HPLandroidx/compose/runtime/SlotWriter;->removeSlots(III)V
+HPLandroidx/compose/runtime/SlotWriter;->skipGroup()I
+HPLandroidx/compose/runtime/internal/ComposableLambdaImpl;->trackRead(Landroidx/compose/runtime/Composer;)V
+HPLandroidx/compose/runtime/snapshots/TransparentObserverMutableSnapshot;->getCurrentSnapshot()Landroidx/compose/runtime/snapshots/MutableSnapshot;
+HPLandroidx/compose/ui/focus/FocusOwnerImpl$moveFocus$foundNextItem$1;->invoke(Landroidx/compose/ui/layout/BeyondBoundsLayout$BeyondBoundsScope;)Ljava/lang/Boolean;
+HPLandroidx/compose/ui/layout/Placeable$PlacementScope;->placeWithLayer-aW-9-wM$default(Landroidx/compose/ui/layout/Placeable$PlacementScope;Landroidx/compose/ui/layout/Placeable;J)V
+HPLandroidx/compose/ui/modifier/BackwardsCompatLocalMap;->get$ui_release(Landroidx/compose/ui/modifier/ProvidableModifierLocal;)Ljava/lang/Object;
+HPLandroidx/compose/ui/node/LayoutNode;->detach$ui_release()V
+HPLandroidx/compose/ui/node/LayoutNode;->onChildRemoved(Landroidx/compose/ui/node/LayoutNode;)V
+HPLandroidx/compose/ui/node/LayoutNode;->removeAll$ui_release()V
+HPLandroidx/compose/ui/node/LayoutNode;->removeAt$ui_release(II)V
+HPLandroidx/compose/ui/node/MeasureAndLayoutDelegate;->requestRemeasure(Landroidx/compose/ui/node/LayoutNode;Z)Z
+HPLandroidx/compose/ui/node/UiApplier;->clear()V
+HPLandroidx/compose/ui/platform/AndroidComposeView;->getFocusedRect(Landroid/graphics/Rect;)V
+HPLandroidx/tv/foundation/lazy/layout/LazyLayoutBeyondBoundsInfo$Interval;-><init>(II)V
+HPLandroidx/tv/foundation/lazy/list/LazyLayoutBeyondBoundsModifierLocal$layout$2;-><init>(Landroidx/tv/foundation/lazy/list/LazyLayoutBeyondBoundsModifierLocal;Lkotlin/jvm/internal/Ref$ObjectRef;I)V
+HPLandroidx/tv/foundation/lazy/list/LazyLayoutBeyondBoundsModifierLocal$layout$2;->getHasMoreContent()Z
+HPLandroidx/tv/foundation/lazy/list/LazyLayoutBeyondBoundsModifierLocal;->hasMoreContent-FR3nfPY(Landroidx/tv/foundation/lazy/layout/LazyLayoutBeyondBoundsInfo$Interval;I)Z
+HPLandroidx/tv/foundation/lazy/list/LazyLayoutBeyondBoundsModifierLocal;->isForward-4vf7U8o(I)Z
+HPLandroidx/tv/foundation/lazy/list/LazyListBeyondBoundsState;->getFirstPlacedIndex()I
+HPLandroidx/tv/foundation/lazy/list/LazyListBeyondBoundsState;->getHasVisibleItems()Z
+HPLandroidx/tv/foundation/lazy/list/LazyListBeyondBoundsState;->getItemCount()I
+HPLandroidx/tv/foundation/lazy/list/LazyListBeyondBoundsState;->getLastPlacedIndex()I
+HPLandroidx/tv/foundation/lazy/list/LazyListBeyondBoundsState;->remeasure()V
+HPLcom/example/tvcomposebasedtests/JankStatsAggregator;->issueJankReport(Ljava/lang/String;)V
+HPLcom/google/gson/Gson$3;->write(Lcom/google/gson/stream/JsonWriter;Ljava/lang/Boolean;)V
+HPLcom/google/gson/Gson$3;->write(Lcom/google/gson/stream/JsonWriter;Ljava/lang/Number;)V
+HPLcom/google/gson/Gson$3;->write(Lcom/google/gson/stream/JsonWriter;Ljava/lang/Object;)V
+HPLcom/google/gson/Gson;->getAdapter(Lcom/google/gson/reflect/TypeToken;)Lcom/google/gson/TypeAdapter;
+HPLcom/google/gson/JsonArray;-><init>()V
+HPLcom/google/gson/JsonArray;->iterator()Ljava/util/Iterator;
+HPLcom/google/gson/JsonObject;-><init>()V
+HPLcom/google/gson/JsonPrimitive;-><init>(Ljava/lang/Boolean;)V
+HPLcom/google/gson/JsonPrimitive;-><init>(Ljava/lang/Number;)V
+HPLcom/google/gson/JsonPrimitive;->getAsNumber()Ljava/lang/Number;
+HPLcom/google/gson/internal/LinkedTreeMap$LinkedTreeMapIterator;-><init>(Lcom/google/gson/internal/LinkedTreeMap;)V
+HPLcom/google/gson/internal/LinkedTreeMap$LinkedTreeMapIterator;->hasNext()Z
+HPLcom/google/gson/internal/LinkedTreeMap$Node;-><init>(Z)V
+HPLcom/google/gson/internal/LinkedTreeMap$Node;-><init>(ZLcom/google/gson/internal/LinkedTreeMap$Node;Ljava/lang/Object;Lcom/google/gson/internal/LinkedTreeMap$Node;Lcom/google/gson/internal/LinkedTreeMap$Node;)V
+HPLcom/google/gson/internal/LinkedTreeMap$Node;->getValue()Ljava/lang/Object;
+HPLcom/google/gson/internal/LinkedTreeMap;-><init>(Z)V
+HPLcom/google/gson/internal/LinkedTreeMap;->entrySet()Ljava/util/Set;
+HPLcom/google/gson/internal/LinkedTreeMap;->put(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
+HPLcom/google/gson/internal/LinkedTreeMap;->rebalance(Lcom/google/gson/internal/LinkedTreeMap$Node;Z)V
+HPLcom/google/gson/internal/LinkedTreeMap;->replaceInParent(Lcom/google/gson/internal/LinkedTreeMap$Node;Lcom/google/gson/internal/LinkedTreeMap$Node;)V
+HPLcom/google/gson/internal/LinkedTreeMap;->rotateLeft(Lcom/google/gson/internal/LinkedTreeMap$Node;)V
+HPLcom/google/gson/internal/LinkedTreeMap;->rotateRight(Lcom/google/gson/internal/LinkedTreeMap$Node;)V
+HPLcom/google/gson/internal/bind/JsonTreeWriter;-><init>()V
+HPLcom/google/gson/internal/bind/JsonTreeWriter;->beginArray()V
+HPLcom/google/gson/internal/bind/JsonTreeWriter;->endArray()V
+HPLcom/google/gson/internal/bind/JsonTreeWriter;->endObject()V
+HPLcom/google/gson/internal/bind/JsonTreeWriter;->get()Lcom/google/gson/JsonElement;
+HPLcom/google/gson/internal/bind/JsonTreeWriter;->name(Ljava/lang/String;)V
+HPLcom/google/gson/internal/bind/JsonTreeWriter;->peek()Lcom/google/gson/JsonElement;
+HPLcom/google/gson/internal/bind/JsonTreeWriter;->put(Lcom/google/gson/JsonElement;)V
+HPLcom/google/gson/internal/bind/JsonTreeWriter;->value(J)V
+HPLcom/google/gson/internal/bind/ReflectiveTypeAdapterFactory$1;->write(Lcom/google/gson/stream/JsonWriter;Ljava/lang/Object;)V
+HPLcom/google/gson/internal/bind/ReflectiveTypeAdapterFactory$Adapter;->write(Lcom/google/gson/stream/JsonWriter;Ljava/lang/Object;)V
+HPLcom/google/gson/internal/bind/TypeAdapters$34$1;->write(Lcom/google/gson/stream/JsonWriter;Ljava/lang/Object;)V
+HPLcom/google/gson/internal/bind/TypeAdapters$EnumTypeAdapter;-><init>(Lcom/google/gson/Gson;Lcom/google/gson/TypeAdapter;Ljava/lang/reflect/Type;)V
+HPLcom/google/gson/reflect/TypeToken;-><init>(Ljava/lang/reflect/Type;)V
+HPLcom/google/gson/reflect/TypeToken;->equals(Ljava/lang/Object;)Z
+HPLcom/google/gson/reflect/TypeToken;->hashCode()I
+HPLcom/google/gson/stream/JsonWriter;-><init>(Ljava/io/Writer;)V
+HPLcom/google/gson/stream/JsonWriter;->beforeValue()V
+HPLcom/google/gson/stream/JsonWriter;->beginArray()V
+HPLcom/google/gson/stream/JsonWriter;->beginObject()V
+HPLcom/google/gson/stream/JsonWriter;->close(IIC)V
+HPLcom/google/gson/stream/JsonWriter;->endObject()V
+HPLcom/google/gson/stream/JsonWriter;->peek()I
+HPLcom/google/gson/stream/JsonWriter;->string(Ljava/lang/String;)V
+HPLcom/google/gson/stream/JsonWriter;->value(Ljava/lang/Number;)V
+HPLcom/google/gson/stream/JsonWriter;->value(Z)V
+HPLcom/google/gson/stream/JsonWriter;->writeDeferredName()V
+HPLkotlin/ResultKt;->canonicalize(Ljava/lang/reflect/Type;)Ljava/lang/reflect/Type;
+HPLkotlin/ResultKt;->getRawType(Ljava/lang/reflect/Type;)Ljava/lang/Class;
+HPLkotlin/TuplesKt;->fastFilter(Ljava/util/ArrayList;Lkotlin/jvm/functions/Function1;)Ljava/util/ArrayList;
+HPLkotlin/TuplesKt;->removeCurrentGroup(Landroidx/compose/runtime/SlotWriter;Landroidx/compose/runtime/CompositionImpl$RememberEventDispatcher;)V
+HPLkotlin/collections/ArrayDeque;->add(ILjava/lang/Object;)V
+HPLkotlin/collections/CollectionsKt___CollectionsKt;->first(Ljava/util/List;)Ljava/lang/Object;
+HSPL_COROUTINE/ArtificialStackFrames;-><init>(I)V
+HSPL_COROUTINE/ArtificialStackFrames;-><init>(II)V
+HSPLandroidx/activity/ComponentActivity$$ExternalSyntheticLambda0;-><init>(ILjava/lang/Object;)V
+HSPLandroidx/activity/ComponentActivity$$ExternalSyntheticLambda1;-><init>(Landroidx/activity/ComponentActivity;)V
+HSPLandroidx/activity/ComponentActivity$$ExternalSyntheticLambda2;-><init>(ILjava/lang/Object;)V
+HSPLandroidx/activity/ComponentActivity$$ExternalSyntheticLambda3;-><init>(Landroidx/activity/ComponentActivity;)V
+HSPLandroidx/activity/ComponentActivity$$ExternalSyntheticLambda3;->onContextAvailable()V
+HSPLandroidx/activity/ComponentActivity$1;-><init>(Landroid/view/KeyEvent$Callback;I)V
+HSPLandroidx/activity/ComponentActivity$2;-><init>()V
+HSPLandroidx/activity/ComponentActivity$3;-><init>(Landroidx/activity/ComponentActivity;)V
+HSPLandroidx/activity/ComponentActivity$3;->onStateChanged(Landroidx/lifecycle/LifecycleOwner;Landroidx/lifecycle/Lifecycle$Event;)V
+HSPLandroidx/activity/ComponentActivity$4;-><init>(Landroidx/activity/ComponentActivity;)V
+HSPLandroidx/activity/ComponentActivity$4;->onStateChanged(Landroidx/lifecycle/LifecycleOwner;Landroidx/lifecycle/Lifecycle$Event;)V
+HSPLandroidx/activity/ComponentActivity$5;-><init>(Landroidx/activity/ComponentActivity;)V
+HSPLandroidx/activity/ComponentActivity$5;->onStateChanged(Landroidx/lifecycle/LifecycleOwner;Landroidx/lifecycle/Lifecycle$Event;)V
+HSPLandroidx/activity/ComponentActivity$ReportFullyDrawnExecutorApi16Impl;-><init>(Landroidx/activity/ComponentActivity;)V
+HSPLandroidx/activity/ComponentActivity$ReportFullyDrawnExecutorApi16Impl;->onDraw()V
+HSPLandroidx/activity/ComponentActivity$ReportFullyDrawnExecutorApi16Impl;->viewCreated(Landroid/view/View;)V
+HSPLandroidx/activity/ComponentActivity;-><init>()V
+HSPLandroidx/activity/ComponentActivity;->ensureViewModelStore()V
+HSPLandroidx/activity/ComponentActivity;->getLifecycle()Landroidx/lifecycle/LifecycleRegistry;
+HSPLandroidx/activity/ComponentActivity;->getViewModelStore()Landroidx/lifecycle/ViewModelStore;
+HSPLandroidx/activity/ComponentActivity;->initViewTreeOwners()V
+HSPLandroidx/activity/ComponentActivity;->onCreate(Landroid/os/Bundle;)V
+HSPLandroidx/activity/ComponentActivity;->setContentView(Landroid/view/View;Landroid/view/ViewGroup$LayoutParams;)V
+HSPLandroidx/activity/FullyDrawnReporter;-><init>(Landroidx/activity/ComponentActivity$ReportFullyDrawnExecutorApi16Impl;Landroidx/activity/ComponentActivity$$ExternalSyntheticLambda1;)V
+HSPLandroidx/activity/OnBackPressedDispatcher;-><init>(Landroidx/activity/ComponentActivity$1;)V
+HSPLandroidx/activity/compose/ComponentActivityKt;-><clinit>()V
+HSPLandroidx/activity/compose/ComponentActivityKt;->setContent$default(Landroidx/activity/ComponentActivity;Landroidx/compose/runtime/internal/ComposableLambdaImpl;)V
+HSPLandroidx/activity/contextaware/ContextAwareHelper;-><init>()V
+HSPLandroidx/activity/result/ActivityResult$1;-><init>(I)V
+HSPLandroidx/arch/core/executor/ArchTaskExecutor;-><init>()V
+HSPLandroidx/arch/core/executor/ArchTaskExecutor;->getInstance()Landroidx/arch/core/executor/ArchTaskExecutor;
+HSPLandroidx/arch/core/executor/DefaultTaskExecutor$1;-><init>()V
+HSPLandroidx/arch/core/executor/DefaultTaskExecutor;-><init>()V
+HSPLandroidx/arch/core/internal/FastSafeIterableMap;-><init>()V
+HSPLandroidx/arch/core/internal/FastSafeIterableMap;->get(Ljava/lang/Object;)Landroidx/arch/core/internal/SafeIterableMap$Entry;
+HSPLandroidx/arch/core/internal/FastSafeIterableMap;->remove(Ljava/lang/Object;)Ljava/lang/Object;
+HSPLandroidx/arch/core/internal/SafeIterableMap$AscendingIterator;-><init>(Landroidx/arch/core/internal/SafeIterableMap$Entry;Landroidx/arch/core/internal/SafeIterableMap$Entry;I)V
+HSPLandroidx/arch/core/internal/SafeIterableMap$Entry;-><init>(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;
+HSPLandroidx/arch/core/internal/SafeIterableMap$IteratorWithAdditions;-><init>(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;->supportRemove(Landroidx/arch/core/internal/SafeIterableMap$Entry;)V
+HSPLandroidx/arch/core/internal/SafeIterableMap$ListIterator;-><init>(Landroidx/arch/core/internal/SafeIterableMap$Entry;Landroidx/arch/core/internal/SafeIterableMap$Entry;)V
+HSPLandroidx/arch/core/internal/SafeIterableMap$ListIterator;->hasNext()Z
+HSPLandroidx/arch/core/internal/SafeIterableMap;-><init>()V
+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;->remove(Ljava/lang/Object;)Ljava/lang/Object;
+HSPLandroidx/collection/ArraySet;-><clinit>()V
+HSPLandroidx/collection/ArraySet;-><init>()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(ILjava/lang/Object;)I
+HSPLandroidx/collection/ArraySet;->toArray()[Ljava/lang/Object;
+HSPLandroidx/collection/LongSparseArray;-><clinit>()V
+HSPLandroidx/collection/LongSparseArray;-><init>(I)V
+HSPLandroidx/collection/SimpleArrayMap;-><init>()V
+HSPLandroidx/collection/SparseArrayCompat;-><clinit>()V
+HSPLandroidx/collection/SparseArrayCompat;-><init>()V
+HSPLandroidx/compose/animation/FlingCalculator;-><init>(FLandroidx/compose/ui/unit/Density;)V
+HSPLandroidx/compose/animation/FlingCalculatorKt;-><clinit>()V
+HSPLandroidx/compose/animation/SingleValueAnimationKt;-><clinit>()V
+HSPLandroidx/compose/animation/SingleValueAnimationKt;->animateColorAsState-euL9pac(JLjava/lang/String;Landroidx/compose/runtime/Composer;I)Landroidx/compose/runtime/State;
+HSPLandroidx/compose/animation/SplineBasedFloatDecayAnimationSpec;-><init>(Landroidx/compose/ui/unit/Density;)V
+HSPLandroidx/compose/animation/SplineBasedFloatDecayAnimationSpec_androidKt;-><clinit>()V
+HSPLandroidx/compose/animation/core/Animatable$runAnimation$2;-><init>(Landroidx/compose/animation/core/Animatable;Ljava/lang/Object;Landroidx/compose/animation/core/Animation;JLkotlin/jvm/functions/Function1;Lkotlin/coroutines/Continuation;)V
+HSPLandroidx/compose/animation/core/Animatable$runAnimation$2;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
+HSPLandroidx/compose/animation/core/Animatable$runAnimation$2;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;
+HSPLandroidx/compose/animation/core/Animatable;-><init>(Ljava/lang/Object;Landroidx/compose/animation/core/TwoWayConverterImpl;Ljava/lang/Object;)V
+HSPLandroidx/compose/animation/core/Animatable;->animateTo$default(Landroidx/compose/animation/core/Animatable;Ljava/lang/Object;Landroidx/compose/animation/core/AnimationSpec;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
+HSPLandroidx/compose/animation/core/Animatable;->getValue()Ljava/lang/Object;
+HSPLandroidx/compose/animation/core/AnimateAsStateKt$animateValueAsState$2;-><init>(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$3$1;-><init>(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;
+HSPLandroidx/compose/animation/core/AnimateAsStateKt$animateValueAsState$3;-><init>(Lkotlinx/coroutines/channels/Channel;Landroidx/compose/animation/core/Animatable;Landroidx/compose/runtime/State;Landroidx/compose/runtime/State;Lkotlin/coroutines/Continuation;)V
+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;
+HSPLandroidx/compose/animation/core/AnimateAsStateKt;-><clinit>()V
+HSPLandroidx/compose/animation/core/AnimateAsStateKt;->animateDpAsState-AjpBEmI(FLjava/lang/String;Landroidx/compose/runtime/Composer;II)Landroidx/compose/runtime/State;
+HSPLandroidx/compose/animation/core/AnimateAsStateKt;->animateFloatAsState(FLandroidx/compose/animation/core/TweenSpec;Ljava/lang/String;Landroidx/compose/runtime/Composer;II)Landroidx/compose/runtime/State;
+HSPLandroidx/compose/animation/core/AnimateAsStateKt;->animateValueAsState(Ljava/lang/Object;Landroidx/compose/animation/core/TwoWayConverterImpl;Landroidx/compose/animation/core/AnimationSpec;Ljava/lang/Float;Ljava/lang/String;Lkotlin/jvm/functions/Function1;Landroidx/compose/runtime/Composer;II)Landroidx/compose/runtime/State;
+HSPLandroidx/compose/animation/core/Animation;->isFinishedFromNanos(J)Z
+HSPLandroidx/compose/animation/core/AnimationEndReason$EnumUnboxingLocalUtility;-><clinit>()V
+HSPLandroidx/compose/animation/core/AnimationEndReason$EnumUnboxingLocalUtility;->compareTo(II)I
+HSPLandroidx/compose/animation/core/AnimationEndReason$EnumUnboxingLocalUtility;->ordinal(I)I
+HSPLandroidx/compose/animation/core/AnimationEndReason$EnumUnboxingLocalUtility;->values(I)[I
+HSPLandroidx/compose/animation/core/AnimationResult;-><init>(Landroidx/compose/animation/core/AnimationState;I)V
+HSPLandroidx/compose/animation/core/AnimationScope;-><init>(Ljava/lang/Object;Landroidx/compose/animation/core/TwoWayConverterImpl;Landroidx/compose/animation/core/AnimationVector;JLjava/lang/Object;JLandroidx/compose/animation/core/SuspendAnimationKt$animate$7;)V
+HSPLandroidx/compose/animation/core/AnimationScope;->getValue()Ljava/lang/Object;
+HSPLandroidx/compose/animation/core/AnimationState;-><init>(Landroidx/compose/animation/core/TwoWayConverterImpl;Ljava/lang/Object;Landroidx/compose/animation/core/AnimationVector;I)V
+HSPLandroidx/compose/animation/core/AnimationState;-><init>(Landroidx/compose/animation/core/TwoWayConverterImpl;Ljava/lang/Object;Landroidx/compose/animation/core/AnimationVector;JJZ)V
+HSPLandroidx/compose/animation/core/AnimationState;->getValue()Ljava/lang/Object;
+HSPLandroidx/compose/animation/core/AnimationVector1D;-><init>(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;->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(FI)V
+HSPLandroidx/compose/animation/core/AnimationVector2D;-><init>(FF)V
+HSPLandroidx/compose/animation/core/AnimationVector3D;-><init>(FFF)V
+HSPLandroidx/compose/animation/core/AnimationVector4D;-><init>(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;->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(FI)V
+HSPLandroidx/compose/animation/core/ComplexDouble;-><init>(DD)V
+HSPLandroidx/compose/animation/core/CubicBezierEasing;-><init>(FFF)V
+HSPLandroidx/compose/animation/core/CubicBezierEasing;->equals(Ljava/lang/Object;)Z
+HSPLandroidx/compose/animation/core/CubicBezierEasing;->transform(F)F
+HSPLandroidx/compose/animation/core/DecayAnimationSpecImpl;-><init>(Landroidx/compose/animation/SplineBasedFloatDecayAnimationSpec;)V
+HSPLandroidx/compose/animation/core/EasingKt;-><clinit>()V
+HSPLandroidx/compose/animation/core/FloatSpringSpec;-><init>(FFF)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
+HSPLandroidx/compose/animation/core/FloatTweenSpec;-><init>(IILandroidx/compose/animation/core/Easing;)V
+HSPLandroidx/compose/animation/core/FloatTweenSpec;->getValueFromNanos(JFFF)F
+HSPLandroidx/compose/animation/core/FloatTweenSpec;->getVelocityFromNanos(JFFF)F
+HSPLandroidx/compose/animation/core/MutatorMutex$Mutator;-><init>(ILkotlinx/coroutines/Job;)V
+HSPLandroidx/compose/animation/core/MutatorMutex$mutate$2;-><init>(ILandroidx/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;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;
+HSPLandroidx/compose/animation/core/MutatorMutex;-><init>()V
+HSPLandroidx/compose/animation/core/SpringSimulation;-><init>()V
+HSPLandroidx/compose/animation/core/SpringSimulation;->updateValues-IJZedt4$animation_core_release(FFJ)J
+HSPLandroidx/compose/animation/core/SpringSpec;-><init>(FFLjava/lang/Object;)V
+HSPLandroidx/compose/animation/core/SpringSpec;->equals(Ljava/lang/Object;)Z
+HSPLandroidx/compose/animation/core/SpringSpec;->vectorize(Landroidx/compose/animation/core/TwoWayConverterImpl;)Landroidx/compose/animation/core/VectorizedFiniteAnimationSpec;
+HSPLandroidx/compose/animation/core/SuspendAnimationKt$animate$4;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;
+HSPLandroidx/compose/animation/core/SuspendAnimationKt$animate$6;-><init>(Lkotlin/jvm/internal/Ref$ObjectRef;Ljava/lang/Object;Landroidx/compose/animation/core/Animation;Landroidx/compose/animation/core/AnimationVector;Landroidx/compose/animation/core/AnimationState;FLkotlin/jvm/functions/Function1;)V
+HSPLandroidx/compose/animation/core/SuspendAnimationKt$animate$6;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
+HSPLandroidx/compose/animation/core/SuspendAnimationKt$animate$7;-><init>(Landroidx/compose/animation/core/AnimationState;I)V
+HSPLandroidx/compose/animation/core/SuspendAnimationKt$animate$9;-><init>(Lkotlin/jvm/internal/Ref$ObjectRef;FLandroidx/compose/animation/core/Animation;Landroidx/compose/animation/core/AnimationState;Lkotlin/jvm/functions/Function1;)V
+HSPLandroidx/compose/animation/core/SuspendAnimationKt$animate$9;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
+HSPLandroidx/compose/animation/core/TargetBasedAnimation;-><init>(Landroidx/compose/animation/core/AnimationSpec;Landroidx/compose/animation/core/TwoWayConverterImpl;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/TwoWayConverterImpl;
+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
+HSPLandroidx/compose/animation/core/TweenSpec;-><init>(IILandroidx/compose/animation/core/Easing;)V
+HSPLandroidx/compose/animation/core/TweenSpec;->equals(Ljava/lang/Object;)Z
+HSPLandroidx/compose/animation/core/TweenSpec;->vectorize(Landroidx/compose/animation/core/TwoWayConverterImpl;)Landroidx/compose/animation/core/VectorizedFiniteAnimationSpec;
+HSPLandroidx/compose/animation/core/TwoWayConverterImpl;-><init>(Landroidx/compose/foundation/ImageKt$Image$1$1;Lkotlin/jvm/functions/Function1;)V
+HSPLandroidx/compose/animation/core/VectorConvertersKt;-><clinit>()V
+HSPLandroidx/compose/animation/core/VectorizedFloatAnimationSpec;-><init>(Landroidx/compose/animation/core/FloatAnimationSpec;)V
+HSPLandroidx/compose/animation/core/VectorizedFloatAnimationSpec;-><init>(Landroidx/compose/ui/input/pointer/util/PointerIdArray;)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;
+HSPLandroidx/compose/animation/core/VectorizedSpringSpec;-><init>(FFLandroidx/compose/animation/core/AnimationVector;)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()V
+HSPLandroidx/compose/animation/core/VectorizedTweenSpec;-><init>(IILandroidx/compose/animation/core/Easing;)V
+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;
+HSPLandroidx/compose/animation/core/VisibilityThresholdsKt;-><clinit>()V
+HSPLandroidx/compose/foundation/AndroidEdgeEffectOverscrollEffect$effectModifier$1;-><init>(Landroidx/compose/foundation/AndroidEdgeEffectOverscrollEffect;Lkotlin/coroutines/Continuation;)V
+HSPLandroidx/compose/foundation/AndroidEdgeEffectOverscrollEffect$onNewSize$1;-><init>(Landroidx/compose/foundation/AndroidEdgeEffectOverscrollEffect;)V
+HSPLandroidx/compose/foundation/AndroidEdgeEffectOverscrollEffect$onNewSize$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
+HSPLandroidx/compose/foundation/AndroidEdgeEffectOverscrollEffect;-><init>(Landroid/content/Context;Landroidx/compose/foundation/OverscrollConfiguration;)V
+HSPLandroidx/compose/foundation/AndroidEdgeEffectOverscrollEffect;->animateToRelease()V
+HSPLandroidx/compose/foundation/AndroidEdgeEffectOverscrollEffect;->getEffectModifier()Landroidx/compose/ui/Modifier;
+HSPLandroidx/compose/foundation/AndroidEdgeEffectOverscrollEffect;->invalidateOverscroll()V
+HSPLandroidx/compose/foundation/AndroidOverscrollKt;-><clinit>()V
+HSPLandroidx/compose/foundation/Api31Impl;-><clinit>()V
+HSPLandroidx/compose/foundation/Api31Impl;->create(Landroid/content/Context;Landroid/util/AttributeSet;)Landroid/widget/EdgeEffect;
+HSPLandroidx/compose/foundation/Api31Impl;->getDistance(Landroid/widget/EdgeEffect;)F
+HSPLandroidx/compose/foundation/BackgroundElement;-><init>(JLandroidx/compose/ui/graphics/Shape;)V
+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/ui/Modifier$Node;)V
+HSPLandroidx/compose/foundation/BackgroundNode;-><init>(JLandroidx/compose/ui/graphics/Brush;FLandroidx/compose/ui/graphics/Shape;)V
+HSPLandroidx/compose/foundation/BackgroundNode;->draw(Landroidx/compose/ui/graphics/drawscope/ContentDrawScope;)V
+HSPLandroidx/compose/foundation/BorderKt$drawRectBorder$1;-><init>(Landroidx/compose/ui/graphics/Brush;JJLkotlin/ResultKt;)V
+HSPLandroidx/compose/foundation/BorderKt$drawRectBorder$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
+HSPLandroidx/compose/foundation/BorderModifierNode;-><init>(FLandroidx/compose/ui/graphics/Brush;Landroidx/compose/ui/graphics/Shape;)V
+HSPLandroidx/compose/foundation/BorderModifierNodeElement;-><init>(FLandroidx/compose/ui/graphics/Brush;Landroidx/compose/ui/graphics/Shape;)V
+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/ui/Modifier$Node;)V
+HSPLandroidx/compose/foundation/BorderStroke;-><init>(FLandroidx/compose/ui/graphics/SolidColor;)V
+HSPLandroidx/compose/foundation/ClipScrollableContainerKt;-><clinit>()V
+HSPLandroidx/compose/foundation/DrawOverscrollModifier;-><init>(Landroidx/compose/foundation/AndroidEdgeEffectOverscrollEffect;)V
+HSPLandroidx/compose/foundation/DrawOverscrollModifier;->draw(Landroidx/compose/ui/graphics/drawscope/ContentDrawScope;)V
+HSPLandroidx/compose/foundation/FocusableElement;-><init>(Landroidx/compose/foundation/interaction/MutableInteractionSourceImpl;)V
+HSPLandroidx/compose/foundation/FocusableElement;->create()Landroidx/compose/ui/Modifier$Node;
+HSPLandroidx/compose/foundation/FocusableElement;->equals(Ljava/lang/Object;)Z
+HSPLandroidx/compose/foundation/FocusableInteractionNode$emitWithFallback$1;-><init>(Landroidx/compose/foundation/interaction/MutableInteractionSourceImpl;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;
+HSPLandroidx/compose/foundation/FocusableInteractionNode;-><init>(Landroidx/compose/foundation/interaction/MutableInteractionSourceImpl;)V
+HSPLandroidx/compose/foundation/FocusableInteractionNode;->emitWithFallback(Landroidx/compose/foundation/interaction/MutableInteractionSourceImpl;Landroidx/compose/foundation/interaction/Interaction;)V
+HSPLandroidx/compose/foundation/FocusableKt$FocusableInNonTouchModeElement$1;-><init>()V
+HSPLandroidx/compose/foundation/FocusableKt;-><clinit>()V
+HSPLandroidx/compose/foundation/FocusableKt;->focusable$default(Landroidx/compose/ui/Modifier;Landroidx/compose/foundation/interaction/MutableInteractionSourceImpl;I)Landroidx/compose/ui/Modifier;
+HSPLandroidx/compose/foundation/FocusableNode$onFocusEvent$1;-><init>(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;
+HSPLandroidx/compose/foundation/FocusableNode;-><init>(Landroidx/compose/foundation/interaction/MutableInteractionSourceImpl;)V
+HSPLandroidx/compose/foundation/FocusableNode;->onFocusEvent(Landroidx/compose/ui/focus/FocusStateImpl;)V
+HSPLandroidx/compose/foundation/FocusableNode;->onGloballyPositioned(Landroidx/compose/ui/node/NodeCoordinator;)V
+HSPLandroidx/compose/foundation/FocusableNode;->onPlaced(Landroidx/compose/ui/node/NodeCoordinator;)V
+HSPLandroidx/compose/foundation/FocusablePinnableContainerNode;->onReset()V
+HSPLandroidx/compose/foundation/FocusableSemanticsNode;-><init>()V
+HSPLandroidx/compose/foundation/FocusedBoundsKt;-><clinit>()V
+HSPLandroidx/compose/foundation/FocusedBoundsNode;->onGloballyPositioned(Landroidx/compose/ui/node/NodeCoordinator;)V
+HSPLandroidx/compose/foundation/FocusedBoundsObserverNode;-><init>(Lkotlin/collections/AbstractMap$toString$1;)V
+HSPLandroidx/compose/foundation/FocusedBoundsObserverNode;->getProvidedValues()Landroidx/tv/material3/TabKt;
+HSPLandroidx/compose/foundation/FocusedBoundsObserverNode;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
+HSPLandroidx/compose/foundation/ImageKt$Image$1$1;-><clinit>()V
+HSPLandroidx/compose/foundation/ImageKt$Image$1$1;-><init>(I)V
+HSPLandroidx/compose/foundation/ImageKt$Image$1$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
+HSPLandroidx/compose/foundation/ImageKt$Image$1;-><clinit>()V
+HSPLandroidx/compose/foundation/ImageKt$Image$1;->measure-3p2s80s(Landroidx/compose/ui/layout/MeasureScope;Ljava/util/List;J)Landroidx/compose/ui/layout/MeasureResult;
+HSPLandroidx/compose/foundation/ImageKt;->Image(Landroidx/compose/ui/graphics/painter/Painter;Ljava/lang/String;Landroidx/compose/ui/Modifier;Landroidx/compose/ui/Alignment;Landroidx/compose/ui/layout/ContentScale;FLandroidx/compose/ui/graphics/BlendModeColorFilter;Landroidx/compose/runtime/Composer;II)V
+HSPLandroidx/compose/foundation/ImageKt;->background-bw27NRU(Landroidx/compose/ui/Modifier;JLandroidx/compose/ui/graphics/Shape;)Landroidx/compose/ui/Modifier;
+HSPLandroidx/compose/foundation/ImageKt;->checkScrollableContainerConstraints-K40F9xA(JLandroidx/compose/foundation/gestures/Orientation;)V
+HSPLandroidx/compose/foundation/ImageKt;->create(Landroid/content/Context;)Landroid/widget/EdgeEffect;
+HSPLandroidx/compose/foundation/ImageKt;->getDistanceCompat(Landroid/widget/EdgeEffect;)F
+HSPLandroidx/compose/foundation/IndicationKt$indication$2;-><init>(Ljava/lang/Object;ILjava/lang/Object;)V
+HSPLandroidx/compose/foundation/IndicationKt$indication$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
+HSPLandroidx/compose/foundation/IndicationKt;-><clinit>()V
+HSPLandroidx/compose/foundation/IndicationModifier;-><init>(Landroidx/compose/foundation/IndicationInstance;)V
+HSPLandroidx/compose/foundation/IndicationModifier;->draw(Landroidx/compose/ui/graphics/drawscope/ContentDrawScope;)V
+HSPLandroidx/compose/foundation/MutatePriority;-><clinit>()V
+HSPLandroidx/compose/foundation/MutatePriority;-><init>(ILjava/lang/String;)V
+HSPLandroidx/compose/foundation/MutatorMutex$Mutator;-><init>(Landroidx/compose/foundation/MutatePriority;Lkotlinx/coroutines/Job;)V
+HSPLandroidx/compose/foundation/MutatorMutex$mutateWith$2;-><init>(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;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;
+HSPLandroidx/compose/foundation/MutatorMutex;-><init>()V
+HSPLandroidx/compose/foundation/OverscrollConfiguration;-><init>()V
+HSPLandroidx/compose/foundation/OverscrollConfigurationKt;-><clinit>()V
+HSPLandroidx/compose/foundation/ScrollKt$rememberScrollState$1$1;-><init>(I)V
+HSPLandroidx/compose/foundation/ScrollKt$rememberScrollState$1$1;->invoke()Ljava/lang/Object;
+HSPLandroidx/compose/foundation/ScrollKt$scroll$2$semantics$1$1;-><init>(ZLkotlinx/coroutines/CoroutineScope;Landroidx/tv/foundation/lazy/layout/LazyLayoutSemanticState;)V
+HSPLandroidx/compose/foundation/ScrollKt$scroll$2$semantics$1;-><init>(ZZZLandroidx/compose/foundation/ScrollState;Lkotlinx/coroutines/CoroutineScope;)V
+HSPLandroidx/compose/foundation/ScrollKt$scroll$2;-><init>(Landroidx/compose/foundation/ScrollState;Landroidx/compose/foundation/gestures/FlingBehavior;ZZ)V
+HSPLandroidx/compose/foundation/ScrollKt$scroll$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
+HSPLandroidx/compose/foundation/ScrollState$canScrollForward$2;-><init>(Landroidx/compose/foundation/ScrollState;I)V
+HSPLandroidx/compose/foundation/ScrollState;-><clinit>()V
+HSPLandroidx/compose/foundation/ScrollState;-><init>(I)V
+HSPLandroidx/compose/foundation/ScrollState;->getValue()I
+HSPLandroidx/compose/foundation/ScrollingLayoutElement;-><init>(Landroidx/compose/foundation/ScrollState;ZZ)V
+HSPLandroidx/compose/foundation/ScrollingLayoutElement;->create()Landroidx/compose/ui/Modifier$Node;
+HSPLandroidx/compose/foundation/ScrollingLayoutNode;-><init>(Landroidx/compose/foundation/ScrollState;ZZ)V
+HSPLandroidx/compose/foundation/ScrollingLayoutNode;->measure-3p2s80s(Landroidx/compose/ui/layout/MeasureScope;Landroidx/compose/ui/layout/Measurable;J)Landroidx/compose/ui/layout/MeasureResult;
+HSPLandroidx/compose/foundation/gestures/BringIntoViewRequestPriorityQueue;-><init>()V
+HSPLandroidx/compose/foundation/gestures/BringIntoViewRequestPriorityQueue;->cancelAndRemoveAll(Ljava/util/concurrent/CancellationException;)V
+HSPLandroidx/compose/foundation/gestures/BringIntoViewSpec$Companion$DefaultBringIntoViewSpec$1;-><init>()V
+HSPLandroidx/compose/foundation/gestures/BringIntoViewSpec$Companion$DefaultBringIntoViewSpec$1;->calculateScrollDistance(FFF)F
+HSPLandroidx/compose/foundation/gestures/BringIntoViewSpec$Companion$DefaultBringIntoViewSpec$1;->getScrollAnimationSpec()Landroidx/compose/animation/core/AnimationSpec;
+HSPLandroidx/compose/foundation/gestures/BringIntoViewSpec$Companion;-><clinit>()V
+HSPLandroidx/compose/foundation/gestures/BringIntoViewSpec;-><clinit>()V
+HSPLandroidx/compose/foundation/gestures/ContentInViewNode$Request;-><init>(Landroidx/compose/foundation/relocation/BringIntoViewResponderNode$bringChildIntoView$2$1$1;Lkotlinx/coroutines/CancellableContinuationImpl;)V
+HSPLandroidx/compose/foundation/gestures/ContentInViewNode$launchAnimation$2$1;-><init>(Landroidx/compose/foundation/gestures/ContentInViewNode;Lkotlinx/coroutines/Job;Lkotlin/coroutines/Continuation;)V
+HSPLandroidx/compose/foundation/gestures/ContentInViewNode$launchAnimation$2$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation;
+HSPLandroidx/compose/foundation/gestures/ContentInViewNode$launchAnimation$2$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
+HSPLandroidx/compose/foundation/gestures/ContentInViewNode$launchAnimation$2$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;
+HSPLandroidx/compose/foundation/gestures/ContentInViewNode$launchAnimation$2;-><init>(Landroidx/compose/foundation/gestures/ContentInViewNode;Lkotlin/coroutines/Continuation;)V
+HSPLandroidx/compose/foundation/gestures/ContentInViewNode$launchAnimation$2;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation;
+HSPLandroidx/compose/foundation/gestures/ContentInViewNode$launchAnimation$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
+HSPLandroidx/compose/foundation/gestures/ContentInViewNode$launchAnimation$2;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;
+HSPLandroidx/compose/foundation/gestures/ContentInViewNode;-><init>(Landroidx/compose/foundation/gestures/Orientation;Landroidx/compose/foundation/gestures/ScrollableState;ZLandroidx/compose/foundation/gestures/BringIntoViewSpec;)V
+HSPLandroidx/compose/foundation/gestures/ContentInViewNode;->access$calculateScrollDelta(Landroidx/compose/foundation/gestures/ContentInViewNode;)F
+HSPLandroidx/compose/foundation/gestures/ContentInViewNode;->isMaxVisible-O0kMr_c(Landroidx/compose/ui/geometry/Rect;J)Z
+HSPLandroidx/compose/foundation/gestures/ContentInViewNode;->launchAnimation()V
+HSPLandroidx/compose/foundation/gestures/ContentInViewNode;->onPlaced(Landroidx/compose/ui/node/NodeCoordinator;)V
+HSPLandroidx/compose/foundation/gestures/ContentInViewNode;->onRemeasured-ozmzZPI(J)V
+HSPLandroidx/compose/foundation/gestures/ContentInViewNode;->relocationOffset-BMxPBkI(Landroidx/compose/ui/geometry/Rect;J)J
+HSPLandroidx/compose/foundation/gestures/DefaultFlingBehavior;-><init>(Landroidx/compose/animation/core/DecayAnimationSpecImpl;)V
+HSPLandroidx/compose/foundation/gestures/DefaultScrollableState$scroll$2$1;-><init>(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(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
+HSPLandroidx/compose/foundation/gestures/DefaultScrollableState$scroll$2$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;
+HSPLandroidx/compose/foundation/gestures/DefaultScrollableState$scroll$2;-><init>(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;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;
+HSPLandroidx/compose/foundation/gestures/DefaultScrollableState$scrollScope$1;-><init>(Landroidx/compose/foundation/gestures/DefaultScrollableState;)V
+HSPLandroidx/compose/foundation/gestures/DefaultScrollableState$scrollScope$1;->scrollBy(F)F
+HSPLandroidx/compose/foundation/gestures/DefaultScrollableState;-><init>(Lkotlin/collections/AbstractMap$toString$1;)V
+HSPLandroidx/compose/foundation/gestures/DefaultScrollableState;->scroll(Landroidx/compose/foundation/MutatePriority;Lkotlin/jvm/functions/Function2;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
+HSPLandroidx/compose/foundation/gestures/DraggableKt$awaitDrag$2;-><init>(ILjava/lang/Object;Ljava/lang/Object;Z)V
+HSPLandroidx/compose/foundation/gestures/DraggableKt$awaitDrag$2;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
+HSPLandroidx/compose/foundation/gestures/DraggableNode$onAttach$1;-><init>(Landroidx/compose/foundation/gestures/DraggableNode;Lkotlin/coroutines/Continuation;)V
+HSPLandroidx/compose/foundation/gestures/DraggableNode$onAttach$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation;
+HSPLandroidx/compose/foundation/gestures/DraggableNode$onAttach$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;
+HSPLandroidx/compose/foundation/gestures/DraggableNode$pointerInputNode$1;-><init>(Landroidx/compose/foundation/gestures/DraggableNode;Lkotlin/coroutines/Continuation;)V
+HSPLandroidx/compose/foundation/gestures/DraggableNode;-><init>(Landroidx/compose/foundation/gestures/ScrollDraggableState;Landroidx/compose/foundation/gestures/Orientation;ZLandroidx/compose/foundation/interaction/MutableInteractionSourceImpl;Landroidx/compose/ui/node/LayoutNode$_foldedChildren$1;Landroidx/compose/foundation/gestures/ScrollableKt$NoOpOnDragStarted$1;Landroidx/compose/foundation/gestures/ScrollableGesturesNode$onDragStopped$1;)V
+HSPLandroidx/compose/foundation/gestures/DraggableNode;->onAttach()V
+HSPLandroidx/compose/foundation/gestures/ModifierLocalScrollableContainerProvider;-><init>(Z)V
+HSPLandroidx/compose/foundation/gestures/ModifierLocalScrollableContainerProvider;->getProvidedValues()Landroidx/tv/material3/TabKt;
+HSPLandroidx/compose/foundation/gestures/MouseWheelScrollNode$1;-><init>(Landroidx/compose/foundation/gestures/MouseWheelScrollNode;Lkotlin/coroutines/Continuation;)V
+HSPLandroidx/compose/foundation/gestures/MouseWheelScrollNode;-><init>(Landroidx/compose/foundation/gestures/ScrollingLogic;)V
+HSPLandroidx/compose/foundation/gestures/MouseWheelScrollNode;->onAttach()V
+HSPLandroidx/compose/foundation/gestures/Orientation;-><clinit>()V
+HSPLandroidx/compose/foundation/gestures/Orientation;-><init>(ILjava/lang/String;)V
+HSPLandroidx/compose/foundation/gestures/ScrollDraggableState;-><init>(Landroidx/compose/foundation/gestures/ScrollingLogic;)V
+HSPLandroidx/compose/foundation/gestures/ScrollableElement;-><init>(Landroidx/compose/foundation/gestures/ScrollableState;Landroidx/compose/foundation/gestures/Orientation;Landroidx/compose/foundation/OverscrollEffect;ZZLandroidx/compose/foundation/gestures/FlingBehavior;Landroidx/compose/foundation/interaction/MutableInteractionSourceImpl;Landroidx/compose/foundation/gestures/BringIntoViewSpec;)V
+HSPLandroidx/compose/foundation/gestures/ScrollableElement;->create()Landroidx/compose/ui/Modifier$Node;
+HSPLandroidx/compose/foundation/gestures/ScrollableGesturesNode$onDragStopped$1;-><init>(Landroidx/compose/foundation/gestures/ScrollableGesturesNode;Lkotlin/coroutines/Continuation;)V
+HSPLandroidx/compose/foundation/gestures/ScrollableGesturesNode;-><init>(Landroidx/compose/foundation/gestures/ScrollingLogic;Landroidx/compose/foundation/gestures/Orientation;ZLandroidx/compose/ui/input/nestedscroll/NestedScrollDispatcher;Landroidx/compose/foundation/interaction/MutableInteractionSourceImpl;)V
+HSPLandroidx/compose/foundation/gestures/ScrollableKt$NoOpOnDragStarted$1;-><init>(ILkotlin/coroutines/Continuation;)V
+HSPLandroidx/compose/foundation/gestures/ScrollableKt$UnityDensity$1;->getDensity()F
+HSPLandroidx/compose/foundation/gestures/ScrollableKt;-><clinit>()V
+HSPLandroidx/compose/foundation/gestures/ScrollableKt;->scrollable$default(Landroidx/compose/foundation/gestures/ScrollableState;Landroidx/compose/foundation/gestures/Orientation;Landroidx/compose/foundation/OverscrollEffect;ZZLandroidx/compose/foundation/gestures/FlingBehavior;Landroidx/compose/foundation/interaction/MutableInteractionSourceImpl;Landroidx/tv/foundation/TvBringIntoViewSpec;I)Landroidx/compose/ui/Modifier;
+HSPLandroidx/compose/foundation/gestures/ScrollableNestedScrollConnection;-><init>(Landroidx/compose/foundation/gestures/ScrollingLogic;Z)V
+HSPLandroidx/compose/foundation/gestures/ScrollableNode;-><init>(Landroidx/compose/foundation/gestures/ScrollableState;Landroidx/compose/foundation/gestures/Orientation;Landroidx/compose/foundation/OverscrollEffect;ZZLandroidx/compose/foundation/gestures/FlingBehavior;Landroidx/compose/foundation/interaction/MutableInteractionSourceImpl;Landroidx/compose/foundation/gestures/BringIntoViewSpec;)V
+HSPLandroidx/compose/foundation/gestures/ScrollableNode;->applyFocusProperties(Landroidx/compose/ui/focus/FocusProperties;)V
+HSPLandroidx/compose/foundation/gestures/ScrollableNode;->onAttach()V
+HSPLandroidx/compose/foundation/gestures/ScrollableState;->scroll$default(Landroidx/compose/foundation/gestures/ScrollableState;Lkotlin/jvm/functions/Function2;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
+HSPLandroidx/compose/foundation/gestures/ScrollingLogic;-><init>(Landroidx/compose/foundation/gestures/ScrollableState;Landroidx/compose/foundation/gestures/Orientation;Landroidx/compose/foundation/OverscrollEffect;ZLandroidx/compose/foundation/gestures/FlingBehavior;Landroidx/compose/ui/input/nestedscroll/NestedScrollDispatcher;)V
+HSPLandroidx/compose/foundation/gestures/UpdatableAnimationState$animateToZero$1;-><init>(Landroidx/compose/foundation/gestures/UpdatableAnimationState;Lkotlin/coroutines/Continuation;)V
+HSPLandroidx/compose/foundation/gestures/UpdatableAnimationState$animateToZero$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;
+HSPLandroidx/compose/foundation/gestures/UpdatableAnimationState$animateToZero$4;-><init>(Landroidx/compose/foundation/gestures/UpdatableAnimationState;FLkotlin/jvm/functions/Function1;)V
+HSPLandroidx/compose/foundation/gestures/UpdatableAnimationState$animateToZero$4;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
+HSPLandroidx/compose/foundation/gestures/UpdatableAnimationState;-><clinit>()V
+HSPLandroidx/compose/foundation/gestures/UpdatableAnimationState;-><init>(Landroidx/compose/animation/core/AnimationSpec;)V
+HSPLandroidx/compose/foundation/gestures/UpdatableAnimationState;->animateToZero(Landroidx/compose/foundation/layout/OffsetNode$measure$1;Landroidx/compose/ui/node/LayoutNode$_foldedChildren$1;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
+HSPLandroidx/compose/foundation/interaction/FocusInteraction$Unfocus;-><init>(Landroidx/compose/foundation/interaction/FocusInteraction$Focus;)V
+HSPLandroidx/compose/foundation/interaction/FocusInteractionKt$collectIsFocusedAsState$1$1$1;-><init>(Ljava/util/ArrayList;Landroidx/compose/runtime/MutableState;I)V
+HSPLandroidx/compose/foundation/interaction/FocusInteractionKt$collectIsFocusedAsState$1$1$1;->emit(Landroidx/compose/foundation/interaction/Interaction;)Ljava/lang/Object;
+HSPLandroidx/compose/foundation/interaction/FocusInteractionKt$collectIsFocusedAsState$1$1$1;->emit(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
+HSPLandroidx/compose/foundation/interaction/FocusInteractionKt$collectIsFocusedAsState$1$1;-><init>(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;
+HSPLandroidx/compose/foundation/interaction/MutableInteractionSourceImpl;-><init>()V
+HSPLandroidx/compose/foundation/interaction/MutableInteractionSourceImpl;->emit(Landroidx/compose/foundation/interaction/Interaction;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
+HSPLandroidx/compose/foundation/interaction/PressInteraction$Press;-><init>(J)V
+HSPLandroidx/compose/foundation/interaction/PressInteractionKt$collectIsPressedAsState$1$1;-><init>(Landroidx/compose/foundation/interaction/InteractionSource;Landroidx/compose/runtime/MutableState;Lkotlin/coroutines/Continuation;)V
+HSPLandroidx/compose/foundation/interaction/PressInteractionKt$collectIsPressedAsState$1$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation;
+HSPLandroidx/compose/foundation/interaction/PressInteractionKt$collectIsPressedAsState$1$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;
+HSPLandroidx/compose/foundation/layout/Arrangement$Center$1;-><init>(I)V
+HSPLandroidx/compose/foundation/layout/Arrangement$Center$1;->arrange(ILandroidx/compose/ui/unit/Density;Landroidx/compose/ui/unit/LayoutDirection;[I[I)V
+HSPLandroidx/compose/foundation/layout/Arrangement$Center$1;->getSpacing-D9Ej5fM()F
+HSPLandroidx/compose/foundation/layout/Arrangement$End$1;-><init>(I)V
+HSPLandroidx/compose/foundation/layout/Arrangement$SpacedAligned;-><init>(F)V
+HSPLandroidx/compose/foundation/layout/Arrangement$SpacedAligned;->arrange(ILandroidx/compose/ui/unit/Density;Landroidx/compose/ui/unit/LayoutDirection;[I[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
+HSPLandroidx/compose/foundation/layout/Arrangement$Top$1;-><init>(I)V
+HSPLandroidx/compose/foundation/layout/Arrangement$Top$1;->arrange(Landroidx/compose/ui/unit/Density;I[I[I)V
+HSPLandroidx/compose/foundation/layout/Arrangement;-><clinit>()V
+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/BoxKt$Box$2;-><init>(IILjava/lang/Object;)V
+HSPLandroidx/compose/foundation/layout/BoxKt$Box$2;->invoke(Landroidx/compose/runtime/Composer;I)V
+HSPLandroidx/compose/foundation/layout/BoxKt$Box$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
+HSPLandroidx/compose/foundation/layout/BoxKt$EmptyBoxMeasurePolicy$1;-><clinit>()V
+HSPLandroidx/compose/foundation/layout/BoxKt$EmptyBoxMeasurePolicy$1;->measure-3p2s80s(Landroidx/compose/ui/layout/MeasureScope;Ljava/util/List;J)Landroidx/compose/ui/layout/MeasureResult;
+HSPLandroidx/compose/foundation/layout/BoxKt$boxMeasurePolicy$1$2;-><init>(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$2;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
+HSPLandroidx/compose/foundation/layout/BoxKt$boxMeasurePolicy$1;-><init>(Z)V
+HSPLandroidx/compose/foundation/layout/BoxKt$boxMeasurePolicy$1;->measure-3p2s80s(Landroidx/compose/ui/layout/MeasureScope;Ljava/util/List;J)Landroidx/compose/ui/layout/MeasureResult;
+HSPLandroidx/compose/foundation/layout/BoxKt;-><clinit>()V
+HSPLandroidx/compose/foundation/layout/BoxKt;->Box(Landroidx/compose/ui/Modifier;Landroidx/compose/runtime/Composer;I)V
+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;->rememberBoxMeasurePolicy(ZLandroidx/compose/runtime/Composer;)Landroidx/compose/ui/layout/MeasurePolicy;
+HSPLandroidx/compose/foundation/layout/BoxScopeInstance;-><clinit>()V
+HSPLandroidx/compose/foundation/layout/ColumnKt;-><clinit>()V
+HSPLandroidx/compose/foundation/layout/ColumnKt;->columnMeasurePolicy(Landroidx/compose/foundation/layout/Arrangement$Vertical;Landroidx/compose/runtime/Composer;)Landroidx/compose/ui/layout/MeasurePolicy;
+HSPLandroidx/compose/foundation/layout/CrossAxisAlignment$VerticalCrossAxisAlignment;-><init>(ILjava/lang/Object;)V
+HSPLandroidx/compose/foundation/layout/CrossAxisAlignment$VerticalCrossAxisAlignment;->align$foundation_layout_release(ILandroidx/compose/ui/unit/LayoutDirection;)I
+HSPLandroidx/compose/foundation/layout/FillElement;-><init>(IF)V
+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/FillNode;-><init>(IF)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/HorizontalAlignElement;-><init>()V
+HSPLandroidx/compose/foundation/layout/HorizontalAlignElement;->create()Landroidx/compose/ui/Modifier$Node;
+HSPLandroidx/compose/foundation/layout/HorizontalAlignElement;->equals(Ljava/lang/Object;)Z
+HSPLandroidx/compose/foundation/layout/HorizontalAlignNode;-><init>(Landroidx/compose/ui/Alignment$Horizontal;)V
+HSPLandroidx/compose/foundation/layout/HorizontalAlignNode;->modifyParentData(Ljava/lang/Object;)Ljava/lang/Object;
+HSPLandroidx/compose/foundation/layout/OffsetElement;-><init>(FF)V
+HSPLandroidx/compose/foundation/layout/OffsetElement;->create()Landroidx/compose/ui/Modifier$Node;
+HSPLandroidx/compose/foundation/layout/OffsetElement;->equals(Ljava/lang/Object;)Z
+HSPLandroidx/compose/foundation/layout/OffsetKt;->Spacer(Landroidx/compose/ui/Modifier;Landroidx/compose/runtime/Composer;)V
+HSPLandroidx/compose/foundation/layout/OffsetKt;->access$intrinsicSize(Ljava/util/List;Landroidx/compose/ui/CombinedModifier$toString$1;Landroidx/compose/ui/CombinedModifier$toString$1;IIII)I
+HSPLandroidx/compose/foundation/layout/OffsetKt;->getRowColumnParentData(Landroidx/compose/ui/layout/Measurable;)Landroidx/compose/foundation/layout/RowColumnParentData;
+HSPLandroidx/compose/foundation/layout/OffsetKt;->getWeight(Landroidx/compose/foundation/layout/RowColumnParentData;)F
+HSPLandroidx/compose/foundation/layout/OffsetKt;->offset-VpY3zN4(Landroidx/compose/ui/Modifier;FF)Landroidx/compose/ui/Modifier;
+HSPLandroidx/compose/foundation/layout/OffsetKt;->padding-3ABfNKs(Landroidx/compose/ui/Modifier;F)Landroidx/compose/ui/Modifier;
+HSPLandroidx/compose/foundation/layout/OffsetKt;->padding-VpY3zN4(FF)Landroidx/compose/ui/Modifier;
+HSPLandroidx/compose/foundation/layout/OffsetKt;->size(Landroidx/compose/ui/Alignment;Z)Landroidx/compose/foundation/layout/WrapContentElement;
+HSPLandroidx/compose/foundation/layout/OffsetKt;->toBoxConstraints-OenEA2s(JI)J
+HSPLandroidx/compose/foundation/layout/OffsetNode$measure$1;-><init>(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;I)V
+HSPLandroidx/compose/foundation/layout/OffsetNode$measure$1;->invoke(Landroidx/compose/ui/layout/Placeable$PlacementScope;)V
+HSPLandroidx/compose/foundation/layout/OffsetNode$measure$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
+HSPLandroidx/compose/foundation/layout/OffsetNode;-><init>(FFZ)V
+HSPLandroidx/compose/foundation/layout/OffsetNode;->measure-3p2s80s(Landroidx/compose/ui/layout/MeasureScope;Landroidx/compose/ui/layout/Measurable;J)Landroidx/compose/ui/layout/MeasureResult;
+HSPLandroidx/compose/foundation/layout/PaddingElement;-><init>(FFFF)V
+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/PaddingNode;-><init>(FFFFZ)V
+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/PaddingValuesImpl;-><init>(FFFF)V
+HSPLandroidx/compose/foundation/layout/RowColumnImplKt$rowColumnMeasurePolicy$1;-><init>(ILkotlin/jvm/functions/Function5;FLandroidx/compose/foundation/layout/CrossAxisAlignment$VerticalCrossAxisAlignment;)V
+HSPLandroidx/compose/foundation/layout/RowColumnImplKt$rowColumnMeasurePolicy$1;->maxIntrinsicHeight(Landroidx/compose/ui/node/NodeCoordinator;Ljava/util/List;I)I
+HSPLandroidx/compose/foundation/layout/RowColumnImplKt$rowColumnMeasurePolicy$1;->measure-3p2s80s(Landroidx/compose/ui/layout/MeasureScope;Ljava/util/List;J)Landroidx/compose/ui/layout/MeasureResult;
+HSPLandroidx/compose/foundation/layout/RowColumnMeasureHelperResult;-><init>(III[I)V
+HSPLandroidx/compose/foundation/layout/RowColumnMeasurementHelper;-><init>(ILkotlin/jvm/functions/Function5;FILandroidx/compose/foundation/layout/OffsetKt;Ljava/util/List;[Landroidx/compose/ui/layout/Placeable;)V
+HSPLandroidx/compose/foundation/layout/RowColumnParentData;-><init>()V
+HSPLandroidx/compose/foundation/layout/RowKt$DefaultRowMeasurePolicy$1;-><clinit>()V
+HSPLandroidx/compose/foundation/layout/RowKt$DefaultRowMeasurePolicy$1;-><init>(I)V
+HSPLandroidx/compose/foundation/layout/RowKt$DefaultRowMeasurePolicy$1;->invoke(ILandroidx/compose/ui/unit/Density;Landroidx/compose/ui/unit/LayoutDirection;[I[I)V
+HSPLandroidx/compose/foundation/layout/RowKt$DefaultRowMeasurePolicy$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/io/Serializable;)Ljava/lang/Object;
+HSPLandroidx/compose/foundation/layout/RowKt$rowMeasurePolicy$1$1;-><init>(ILjava/lang/Object;)V
+HSPLandroidx/compose/foundation/layout/RowKt$rowMeasurePolicy$1$1;->invoke(ILandroidx/compose/ui/unit/Density;Landroidx/compose/ui/unit/LayoutDirection;[I[I)V
+HSPLandroidx/compose/foundation/layout/RowKt$rowMeasurePolicy$1$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/io/Serializable;)Ljava/lang/Object;
+HSPLandroidx/compose/foundation/layout/RowKt;-><clinit>()V
+HSPLandroidx/compose/foundation/layout/RowKt;->rowMeasurePolicy(Landroidx/compose/foundation/layout/Arrangement$Horizontal;Landroidx/compose/ui/BiasAlignment$Vertical;Landroidx/compose/runtime/Composer;)Landroidx/compose/ui/layout/MeasurePolicy;
+HSPLandroidx/compose/foundation/layout/RowScopeInstance;-><clinit>()V
+HSPLandroidx/compose/foundation/layout/SizeElement;-><init>(FFFFI)V
+HSPLandroidx/compose/foundation/layout/SizeElement;->create()Landroidx/compose/ui/Modifier$Node;
+HSPLandroidx/compose/foundation/layout/SizeKt;-><clinit>()V
+HSPLandroidx/compose/foundation/layout/SizeKt;->fillMaxWidth$default(Landroidx/compose/ui/Modifier;)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;->width-3ABfNKs(Landroidx/compose/ui/Modifier;F)Landroidx/compose/ui/Modifier;
+HSPLandroidx/compose/foundation/layout/SizeKt;->wrapContentSize$default(Landroidx/compose/ui/Modifier;)Landroidx/compose/ui/Modifier;
+HSPLandroidx/compose/foundation/layout/SizeNode;-><init>(FFFFZ)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/SpacerMeasurePolicy;-><clinit>()V
+HSPLandroidx/compose/foundation/layout/SpacerMeasurePolicy;->measure-3p2s80s(Landroidx/compose/ui/layout/MeasureScope;Ljava/util/List;J)Landroidx/compose/ui/layout/MeasureResult;
+HSPLandroidx/compose/foundation/layout/WrapContentElement;-><init>(IZLcom/example/tvcomposebasedtests/tvComponents/AppKt$App$1;Ljava/lang/Object;)V
+HSPLandroidx/compose/foundation/layout/WrapContentElement;->create()Landroidx/compose/ui/Modifier$Node;
+HSPLandroidx/compose/foundation/layout/WrapContentElement;->equals(Ljava/lang/Object;)Z
+HSPLandroidx/compose/foundation/layout/WrapContentNode$measure$1;-><init>(Landroidx/compose/foundation/layout/WrapContentNode;ILandroidx/compose/ui/layout/Placeable;ILandroidx/compose/ui/layout/MeasureScope;)V
+HSPLandroidx/compose/foundation/layout/WrapContentNode$measure$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
+HSPLandroidx/compose/foundation/layout/WrapContentNode;-><init>(IZLkotlin/jvm/functions/Function2;)V
+HSPLandroidx/compose/foundation/layout/WrapContentNode;->measure-3p2s80s(Landroidx/compose/ui/layout/MeasureScope;Landroidx/compose/ui/layout/Measurable;J)Landroidx/compose/ui/layout/MeasureResult;
+HSPLandroidx/compose/foundation/lazy/layout/DefaultLazyKey;-><clinit>()V
+HSPLandroidx/compose/foundation/lazy/layout/DefaultLazyKey;-><init>(I)V
+HSPLandroidx/compose/foundation/lazy/layout/DefaultLazyKey;->equals(Ljava/lang/Object;)Z
+HSPLandroidx/compose/foundation/lazy/layout/DefaultLazyKey;->hashCode()I
+HSPLandroidx/compose/foundation/lazy/layout/IntervalList$Interval;-><init>(IILandroidx/compose/foundation/lazy/layout/LazyLayoutIntervalContent$Interval;)V
+HSPLandroidx/compose/foundation/lazy/layout/LazyLayoutItemContentFactory$CachedItemContent;-><init>(Landroidx/compose/foundation/lazy/layout/LazyLayoutItemContentFactory;ILjava/lang/Object;Ljava/lang/Object;)V
+HSPLandroidx/compose/foundation/lazy/layout/LazyLayoutItemContentFactory$CachedItemContent;->getContent()Lkotlin/jvm/functions/Function2;
+HSPLandroidx/compose/foundation/lazy/layout/LazyLayoutItemContentFactory;-><init>(Landroidx/compose/runtime/saveable/SaveableStateHolder;Landroidx/compose/foundation/lazy/layout/LazyLayoutKt$LazyLayout$3$itemContentFactory$1$1;)V
+HSPLandroidx/compose/foundation/lazy/layout/LazyLayoutItemContentFactory;->getContent(Ljava/lang/Object;ILjava/lang/Object;)Lkotlin/jvm/functions/Function2;
+HSPLandroidx/compose/foundation/lazy/layout/LazyLayoutItemContentFactory;->getContentType(Ljava/lang/Object;)Ljava/lang/Object;
+HSPLandroidx/compose/foundation/lazy/layout/LazyLayoutItemReusePolicy;-><init>(Landroidx/compose/foundation/lazy/layout/LazyLayoutItemContentFactory;)V
+HSPLandroidx/compose/foundation/lazy/layout/LazyLayoutItemReusePolicy;->areCompatible(Ljava/lang/Object;Ljava/lang/Object;)Z
+HSPLandroidx/compose/foundation/lazy/layout/LazyLayoutItemReusePolicy;->getSlotsToRetain(Landroidx/compose/ui/layout/SubcomposeSlotReusePolicy$SlotIdsSet;)V
+HSPLandroidx/compose/foundation/lazy/layout/LazyLayoutKt$LazyLayout$3$2$1;-><init>(Ljava/lang/Object;ILjava/lang/Object;)V
+HSPLandroidx/compose/foundation/lazy/layout/LazyLayoutKt$LazyLayout$3$2$1;->invoke(Landroidx/compose/runtime/Composer;I)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$itemContentFactory$1$1;-><init>(Landroidx/compose/runtime/State;I)V
+HSPLandroidx/compose/foundation/lazy/layout/LazyLayoutKt$LazyLayout$3$itemContentFactory$1$1;->invoke()Ljava/lang/Object;
+HSPLandroidx/compose/foundation/lazy/layout/LazyLayoutKt$LazyLayout$3;-><init>(Landroidx/compose/foundation/lazy/layout/LazyLayoutPrefetchState;Landroidx/compose/ui/Modifier;Lkotlin/jvm/functions/Function2;ILandroidx/compose/runtime/MutableState;)V
+HSPLandroidx/compose/foundation/lazy/layout/LazyLayoutKt$LazyLayout$3;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
+HSPLandroidx/compose/foundation/lazy/layout/LazyLayoutMeasureScopeImpl;-><init>(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;->isLookingAhead()Z
+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(JI)Ljava/util/List;
+HSPLandroidx/compose/foundation/lazy/layout/LazyLayoutMeasureScopeImpl;->roundToPx-0680j_4(F)I
+HSPLandroidx/compose/foundation/lazy/layout/LazyLayoutPinnableItem;-><init>(Ljava/lang/Object;Landroidx/compose/foundation/lazy/layout/LazyLayoutPinnedItemList;)V
+HSPLandroidx/compose/foundation/lazy/layout/LazyLayoutPinnableItem;->getPinsCount()I
+HSPLandroidx/compose/foundation/lazy/layout/LazyLayoutPinnableItem;->pin()Landroidx/compose/foundation/lazy/layout/LazyLayoutPinnableItem;
+HSPLandroidx/compose/foundation/lazy/layout/LazyLayoutPinnableItem;->release()V
+HSPLandroidx/compose/foundation/lazy/layout/LazyLayoutPinnedItemList;-><init>()V
+HSPLandroidx/compose/foundation/lazy/layout/LazyLayoutPinnedItemList;->get(I)Ljava/lang/Object;
+HSPLandroidx/compose/foundation/lazy/layout/LazyLayoutPinnedItemList;->isEmpty()Z
+HSPLandroidx/compose/foundation/lazy/layout/LazyLayoutPinnedItemList;->size()I
+HSPLandroidx/compose/foundation/lazy/layout/LazyLayoutPrefetchState;->schedulePrefetch-0kLqBqw(JI)Landroidx/compose/foundation/lazy/layout/LazyLayoutPrefetchState$PrefetchHandle;
+HSPLandroidx/compose/foundation/lazy/layout/LazyLayoutPrefetcher$PrefetchRequest;-><init>(IJ)V
+HSPLandroidx/compose/foundation/lazy/layout/LazyLayoutPrefetcher$PrefetchRequest;->cancel()V
+HSPLandroidx/compose/foundation/lazy/layout/LazyLayoutPrefetcher;-><init>(Landroidx/compose/foundation/lazy/layout/LazyLayoutPrefetchState;Landroidx/compose/ui/layout/SubcomposeLayoutState;Landroidx/compose/foundation/lazy/layout/LazyLayoutItemContentFactory;Landroid/view/View;)V
+HSPLandroidx/compose/foundation/lazy/layout/LazyLayoutPrefetcher;->doFrame(J)V
+HSPLandroidx/compose/foundation/lazy/layout/LazyLayoutPrefetcher;->onRemembered()V
+HSPLandroidx/compose/foundation/lazy/layout/LazyLayoutPrefetcher;->run()V
+HSPLandroidx/compose/foundation/lazy/layout/LazySaveableStateHolder$1;-><init>(Landroidx/compose/runtime/saveable/SaveableStateRegistry;I)V
+HSPLandroidx/compose/foundation/lazy/layout/LazySaveableStateHolder$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
+HSPLandroidx/compose/foundation/lazy/layout/LazySaveableStateHolder$SaveableStateProvider$2$invoke$$inlined$onDispose$1;-><init>(Ljava/lang/Object;ILjava/lang/Object;)V
+HSPLandroidx/compose/foundation/lazy/layout/LazySaveableStateHolder$SaveableStateProvider$2$invoke$$inlined$onDispose$1;->dispose()V
+HSPLandroidx/compose/foundation/lazy/layout/LazySaveableStateHolder;-><init>(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;->canBeSaved(Ljava/lang/Object;)Z
+HSPLandroidx/compose/foundation/lazy/layout/LazySaveableStateHolder;->consumeRestored(Ljava/lang/String;)Ljava/lang/Object;
+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/SaveableStateRegistryImpl$registerProvider$3;
+HSPLandroidx/compose/foundation/lazy/layout/MutableIntervalList;-><init>()V
+HSPLandroidx/compose/foundation/lazy/layout/MutableIntervalList;->addInterval(ILandroidx/compose/foundation/lazy/layout/LazyLayoutIntervalContent$Interval;)V
+HSPLandroidx/compose/foundation/lazy/layout/MutableIntervalList;->checkIndexBounds(I)V
+HSPLandroidx/compose/foundation/lazy/layout/MutableIntervalList;->get(I)Landroidx/compose/foundation/lazy/layout/IntervalList$Interval;
+HSPLandroidx/compose/foundation/relocation/BringIntoViewChildNode;-><init>()V
+HSPLandroidx/compose/foundation/relocation/BringIntoViewChildNode;->getLayoutCoordinates()Landroidx/compose/ui/layout/LayoutCoordinates;
+HSPLandroidx/compose/foundation/relocation/BringIntoViewChildNode;->onPlaced(Landroidx/compose/ui/node/NodeCoordinator;)V
+HSPLandroidx/compose/foundation/relocation/BringIntoViewKt;-><clinit>()V
+HSPLandroidx/compose/foundation/relocation/BringIntoViewRequesterImpl$bringIntoView$1;-><init>(Landroidx/compose/foundation/relocation/BringIntoViewRequesterImpl;Lkotlin/coroutines/Continuation;)V
+HSPLandroidx/compose/foundation/relocation/BringIntoViewRequesterImpl$bringIntoView$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;
+HSPLandroidx/compose/foundation/relocation/BringIntoViewRequesterImpl;-><init>()V
+HSPLandroidx/compose/foundation/relocation/BringIntoViewRequesterImpl;->bringIntoView(Landroidx/compose/ui/geometry/Rect;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
+HSPLandroidx/compose/foundation/relocation/BringIntoViewRequesterNode;-><init>(Landroidx/compose/foundation/relocation/BringIntoViewRequesterImpl;)V
+HSPLandroidx/compose/foundation/relocation/BringIntoViewRequesterNode;->onAttach()V
+HSPLandroidx/compose/foundation/relocation/BringIntoViewRequesterNode;->onDetach()V
+HSPLandroidx/compose/foundation/relocation/BringIntoViewResponderNode$bringChildIntoView$2$1$1;-><init>(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()Ljava/lang/Object;
+HSPLandroidx/compose/foundation/relocation/BringIntoViewResponderNode$bringChildIntoView$2$1;-><init>(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;
+HSPLandroidx/compose/foundation/relocation/BringIntoViewResponderNode$bringChildIntoView$2$2;-><init>(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;
+HSPLandroidx/compose/foundation/relocation/BringIntoViewResponderNode$bringChildIntoView$2;-><init>(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;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;
+HSPLandroidx/compose/foundation/relocation/BringIntoViewResponderNode$bringChildIntoView$parentRect$1;-><init>(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;I)V
+HSPLandroidx/compose/foundation/relocation/BringIntoViewResponderNode$bringChildIntoView$parentRect$1;->invoke()Ljava/lang/Object;
+HSPLandroidx/compose/foundation/relocation/BringIntoViewResponderNode;-><init>(Landroidx/compose/foundation/gestures/ContentInViewNode;)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(Landroidx/compose/ui/layout/LayoutCoordinates;Lkotlin/jvm/functions/Function0;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
+HSPLandroidx/compose/foundation/relocation/BringIntoViewResponderNode;->getProvidedValues()Landroidx/tv/material3/TabKt;
+HSPLandroidx/compose/foundation/relocation/BringIntoViewResponder_androidKt$defaultBringIntoViewParent$1;-><init>(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;
+HSPLandroidx/compose/foundation/shape/CornerBasedShape;-><init>(Landroidx/compose/foundation/shape/CornerSize;Landroidx/compose/foundation/shape/CornerSize;Landroidx/compose/foundation/shape/CornerSize;Landroidx/compose/foundation/shape/CornerSize;)V
+HSPLandroidx/compose/foundation/shape/CornerBasedShape;->createOutline-Pq9zytI(JLandroidx/compose/ui/unit/LayoutDirection;Landroidx/compose/ui/unit/Density;)Landroidx/compose/ui/graphics/BrushKt;
+HSPLandroidx/compose/foundation/shape/DpCornerSize;-><init>(F)V
+HSPLandroidx/compose/foundation/shape/PercentCornerSize;-><init>(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
+HSPLandroidx/compose/foundation/shape/RoundedCornerShape;->equals(Ljava/lang/Object;)Z
+HSPLandroidx/compose/foundation/shape/RoundedCornerShapeKt;-><clinit>()V
+HSPLandroidx/compose/foundation/shape/RoundedCornerShapeKt;->RoundedCornerShape-0680j_4(F)Landroidx/compose/foundation/shape/RoundedCornerShape;
+HSPLandroidx/compose/foundation/text/EmptyMeasurePolicy;-><clinit>()V
+HSPLandroidx/compose/foundation/text/EmptyMeasurePolicy;->measure-3p2s80s(Landroidx/compose/ui/layout/MeasureScope;Ljava/util/List;J)Landroidx/compose/ui/layout/MeasureResult;
+HSPLandroidx/compose/foundation/text/modifiers/InlineDensity;-><clinit>()V
+HSPLandroidx/compose/foundation/text/modifiers/MultiParagraphLayoutCache;-><init>(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;->intrinsicHeight(ILandroidx/compose/ui/unit/LayoutDirection;)I
+HSPLandroidx/compose/foundation/text/modifiers/MultiParagraphLayoutCache;->layoutText-K40F9xA(JLandroidx/compose/ui/unit/LayoutDirection;)Landroidx/compose/ui/text/MultiParagraph;
+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/TextAnnotatedStringElement;-><init>(Landroidx/compose/ui/text/AnnotatedString;Landroidx/compose/ui/text/TextStyle;Landroidx/compose/ui/text/font/FontFamily$Resolver;Lkotlin/jvm/functions/Function1;IZII)V
+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/ui/Modifier$Node;)V
+HSPLandroidx/compose/foundation/text/modifiers/TextAnnotatedStringNode;-><init>(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;)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;->getTextSubstitution()Landroidx/compose/foundation/text/modifiers/TextAnnotatedStringNode$TextSubstitutionValue;
+HSPLandroidx/compose/foundation/text/modifiers/TextAnnotatedStringNode;->maxIntrinsicHeight(Landroidx/compose/ui/layout/IntrinsicMeasureScope;Landroidx/compose/ui/layout/Measurable;I)I
+HSPLandroidx/compose/foundation/text/modifiers/TextAnnotatedStringNode;->maxIntrinsicWidth(Landroidx/compose/ui/layout/IntrinsicMeasureScope;Landroidx/compose/ui/layout/Measurable;I)I
+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;)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/selection/SelectionRegistrarKt;-><clinit>()V
+HSPLandroidx/compose/foundation/text/selection/TextSelectionColors;-><init>(JJ)V
+HSPLandroidx/compose/foundation/text/selection/TextSelectionColorsKt;-><clinit>()V
+HSPLandroidx/compose/material/ripple/PlatformRipple;-><init>(ZFLandroidx/compose/runtime/MutableState;)V
+HSPLandroidx/compose/material/ripple/RippleAlpha;-><init>(FFFF)V
+HSPLandroidx/compose/material/ripple/RippleKt;-><clinit>()V
+HSPLandroidx/compose/material/ripple/RippleThemeKt;-><clinit>()V
+HSPLandroidx/compose/material3/ColorScheme;-><init>(JJJJJJJJJJJJJJJJJJJJJJJJJJJJJ)V
+HSPLandroidx/compose/material3/ColorScheme;->getBackground-0d7_KjU()J
+HSPLandroidx/compose/material3/ColorScheme;->getPrimary-0d7_KjU()J
+HSPLandroidx/compose/material3/ColorScheme;->getSurface-0d7_KjU()J
+HSPLandroidx/compose/material3/ColorSchemeKt;-><clinit>()V
+HSPLandroidx/compose/material3/ColorSchemeKt;->darkColorScheme-G1PFc-w$default(JJJI)Landroidx/compose/material3/ColorScheme;
+HSPLandroidx/compose/material3/MaterialRippleTheme;-><clinit>()V
+HSPLandroidx/compose/material3/MaterialThemeKt$MaterialTheme$2;-><init>(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Lkotlin/jvm/functions/Function2;III)V
+HSPLandroidx/compose/material3/ShapeDefaults;-><clinit>()V
+HSPLandroidx/compose/material3/Shapes;-><init>(Landroidx/compose/foundation/shape/RoundedCornerShape;Landroidx/compose/foundation/shape/RoundedCornerShape;Landroidx/compose/foundation/shape/RoundedCornerShape;I)V
+HSPLandroidx/compose/material3/ShapesKt$LocalShapes$1;-><clinit>()V
+HSPLandroidx/compose/material3/ShapesKt$LocalShapes$1;-><init>(I)V
+HSPLandroidx/compose/material3/ShapesKt$LocalShapes$1;->invoke()Landroidx/compose/ui/node/LayoutNode;
+HSPLandroidx/compose/material3/ShapesKt$LocalShapes$1;->invoke()Ljava/lang/Object;
+HSPLandroidx/compose/material3/ShapesKt;-><clinit>()V
+HSPLandroidx/compose/material3/TextKt$ProvideTextStyle$1;-><init>(IILjava/lang/Object;Ljava/lang/Object;)V
+HSPLandroidx/compose/material3/TextKt$ProvideTextStyle$1;->invoke(Landroidx/compose/runtime/Composer;I)V
+HSPLandroidx/compose/material3/TextKt$ProvideTextStyle$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
+HSPLandroidx/compose/material3/TextKt$Text$1;-><clinit>()V
+HSPLandroidx/compose/material3/TextKt$Text$1;-><init>()V
+HSPLandroidx/compose/material3/TextKt$Text$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
+HSPLandroidx/compose/material3/TextKt;-><clinit>()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-fLXpl1I(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;JIZILkotlin/jvm/functions/Function1;Landroidx/compose/ui/text/TextStyle;Landroidx/compose/runtime/Composer;III)V
+HSPLandroidx/compose/material3/Typography;-><init>(Landroidx/compose/ui/text/TextStyle;I)V
+HSPLandroidx/compose/material3/TypographyKt;-><clinit>()V
+HSPLandroidx/compose/material3/tokens/ColorDarkTokens;-><clinit>()V
+HSPLandroidx/compose/material3/tokens/PaletteTokens;-><clinit>()V
+HSPLandroidx/compose/material3/tokens/ShapeTokens;-><clinit>()V
+HSPLandroidx/compose/material3/tokens/TypeScaleTokens;-><clinit>()V
+HSPLandroidx/compose/material3/tokens/TypefaceTokens;-><clinit>()V
+HSPLandroidx/compose/material3/tokens/TypographyTokens;-><clinit>()V
+HSPLandroidx/compose/runtime/Anchor;-><init>(I)V
+HSPLandroidx/compose/runtime/BroadcastFrameClock$FrameAwaiter;-><init>(Lkotlin/jvm/functions/Function1;Lkotlinx/coroutines/CancellableContinuationImpl;)V
+HSPLandroidx/compose/runtime/BroadcastFrameClock;-><init>(Landroidx/compose/runtime/Pending$keyMap$2;)V
+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;->sendFrame(J)V
+HSPLandroidx/compose/runtime/BroadcastFrameClock;->withFrameNanos(Lkotlin/jvm/functions/Function1;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
+HSPLandroidx/compose/runtime/ComposableSingletons$CompositionKt;-><clinit>()V
+HSPLandroidx/compose/runtime/ComposerImpl$CompositionContextHolder;-><init>(Landroidx/compose/runtime/ComposerImpl$CompositionContextImpl;)V
+HSPLandroidx/compose/runtime/ComposerImpl$CompositionContextHolder;->onRemembered()V
+HSPLandroidx/compose/runtime/ComposerImpl$CompositionContextImpl;-><init>(Landroidx/compose/runtime/ComposerImpl;IZLandroidx/compose/runtime/CompositionObserverHolder;)V
+HSPLandroidx/compose/runtime/ComposerImpl$CompositionContextImpl;->composeInitial$runtime_release(Landroidx/compose/runtime/CompositionImpl;Landroidx/compose/runtime/internal/ComposableLambdaImpl;)V
+HSPLandroidx/compose/runtime/ComposerImpl$CompositionContextImpl;->doneComposing$runtime_release()V
+HSPLandroidx/compose/runtime/ComposerImpl$CompositionContextImpl;->getCollectingParameterInformation$runtime_release()Z
+HSPLandroidx/compose/runtime/ComposerImpl$CompositionContextImpl;->getCompositionLocalScope$runtime_release()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;->getObserverHolder$runtime_release()Landroidx/compose/runtime/CompositionObserverHolder;
+HSPLandroidx/compose/runtime/ComposerImpl$CompositionContextImpl;->invalidate$runtime_release(Landroidx/compose/runtime/CompositionImpl;)V
+HSPLandroidx/compose/runtime/ComposerImpl$CompositionContextImpl;->registerComposer$runtime_release(Landroidx/compose/runtime/ComposerImpl;)V
+HSPLandroidx/compose/runtime/ComposerImpl$CompositionContextImpl;->startComposing$runtime_release()V
+HSPLandroidx/compose/runtime/ComposerImpl$derivedStateObserver$1;-><init>(ILjava/lang/Object;)V
+HSPLandroidx/compose/runtime/ComposerImpl$derivedStateObserver$1;->done()V
+HSPLandroidx/compose/runtime/ComposerImpl$derivedStateObserver$1;->start()V
+HSPLandroidx/compose/runtime/ComposerImpl;-><init>(Landroidx/compose/ui/node/UiApplier;Landroidx/compose/runtime/CompositionContext;Landroidx/compose/runtime/SlotTable;Ljava/util/HashSet;Landroidx/compose/runtime/changelist/ChangeList;Landroidx/compose/runtime/changelist/ChangeList;Landroidx/compose/runtime/CompositionImpl;)V
+HSPLandroidx/compose/runtime/ComposerImpl;->apply(Ljava/lang/Object;Lkotlin/jvm/functions/Function2;)V
+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;->cleanUpCompose()V
+HSPLandroidx/compose/runtime/ComposerImpl;->compoundKeyOf(III)I
+HSPLandroidx/compose/runtime/ComposerImpl;->consume(Landroidx/compose/runtime/ProvidableCompositionLocal;)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;->deactivateToEndGroup(Z)V
+HSPLandroidx/compose/runtime/ComposerImpl;->doCompose(Landroidx/core/content/res/ComplexColorCompat;Landroidx/compose/runtime/internal/ComposableLambdaImpl;)V
+HSPLandroidx/compose/runtime/ComposerImpl;->doRecordDownsFor(II)V
+HSPLandroidx/compose/runtime/ComposerImpl;->endDefaults()V
+HSPLandroidx/compose/runtime/ComposerImpl;->endRestartGroup()Landroidx/compose/runtime/RecomposeScopeImpl;
+HSPLandroidx/compose/runtime/ComposerImpl;->endReusableGroup()V
+HSPLandroidx/compose/runtime/ComposerImpl;->endRoot()V
+HSPLandroidx/compose/runtime/ComposerImpl;->enterGroup(ZLandroidx/compose/runtime/Pending;)V
+HSPLandroidx/compose/runtime/ComposerImpl;->getCurrentRecomposeScope$runtime_release()Landroidx/compose/runtime/RecomposeScopeImpl;
+HSPLandroidx/compose/runtime/ComposerImpl;->getDefaultsInvalid()Z
+HSPLandroidx/compose/runtime/ComposerImpl;->getSkipping()Z
+HSPLandroidx/compose/runtime/ComposerImpl;->nextSlot()Ljava/lang/Object;
+HSPLandroidx/compose/runtime/ComposerImpl;->recompose$runtime_release(Landroidx/core/content/res/ComplexColorCompat;)Z
+HSPLandroidx/compose/runtime/ComposerImpl;->recomposeToGroupEnd()V
+HSPLandroidx/compose/runtime/ComposerImpl;->recordUpsAndDowns(III)V
+HSPLandroidx/compose/runtime/ComposerImpl;->skipCurrentGroup()V
+HSPLandroidx/compose/runtime/ComposerImpl;->skipReaderToGroupEnd()V
+HSPLandroidx/compose/runtime/ComposerImpl;->skipToGroupEnd()V
+HSPLandroidx/compose/runtime/ComposerImpl;->start-BaiHCIY(IILandroidx/compose/runtime/OpaqueKey;Ljava/lang/Object;)V
+HSPLandroidx/compose/runtime/ComposerImpl;->startDefaults()V
+HSPLandroidx/compose/runtime/ComposerImpl;->startGroup(ILandroidx/compose/runtime/OpaqueKey;)V
+HSPLandroidx/compose/runtime/ComposerImpl;->startReaderGroup(Ljava/lang/Object;Z)V
+HSPLandroidx/compose/runtime/ComposerImpl;->startReplaceableGroup(I)V
+HSPLandroidx/compose/runtime/ComposerImpl;->startRestartGroup(I)Landroidx/compose/runtime/ComposerImpl;
+HSPLandroidx/compose/runtime/ComposerImpl;->startReusableGroup(Ljava/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(Ljava/lang/Object;ILjava/lang/Object;)V
+HSPLandroidx/compose/runtime/ComposerImpl;->updateCompoundKeyWhenWeEnterGroupKeyHash(I)V
+HSPLandroidx/compose/runtime/ComposerImpl;->updateCompoundKeyWhenWeExitGroup(Ljava/lang/Object;ILjava/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/internal/PersistentCompositionLocalHashMap;)Landroidx/compose/runtime/internal/PersistentCompositionLocalHashMap;
+HSPLandroidx/compose/runtime/ComposerImpl;->updatedNodeCount(I)I
+HSPLandroidx/compose/runtime/ComposerImpl;->useNode()V
+HSPLandroidx/compose/runtime/CompositionContext;->doneComposing$runtime_release()V
+HSPLandroidx/compose/runtime/CompositionContext;->getCompositionLocalScope$runtime_release()Landroidx/compose/runtime/PersistentCompositionLocalMap;
+HSPLandroidx/compose/runtime/CompositionContext;->getObserverHolder$runtime_release()Landroidx/compose/runtime/CompositionObserverHolder;
+HSPLandroidx/compose/runtime/CompositionContext;->registerComposer$runtime_release(Landroidx/compose/runtime/ComposerImpl;)V
+HSPLandroidx/compose/runtime/CompositionContext;->startComposing$runtime_release()V
+HSPLandroidx/compose/runtime/CompositionContextKt;-><clinit>()V
+HSPLandroidx/compose/runtime/CompositionImpl$RememberEventDispatcher;-><init>(Ljava/util/HashSet;)V
+HSPLandroidx/compose/runtime/CompositionImpl$RememberEventDispatcher;->dispatchAbandons()V
+HSPLandroidx/compose/runtime/CompositionImpl$RememberEventDispatcher;->dispatchRememberObservers()V
+HSPLandroidx/compose/runtime/CompositionImpl;-><init>(Landroidx/compose/runtime/CompositionContext;Landroidx/compose/ui/node/UiApplier;)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(Landroidx/compose/runtime/changelist/ChangeList;)V
+HSPLandroidx/compose/runtime/CompositionImpl;->applyLateChanges()V
+HSPLandroidx/compose/runtime/CompositionImpl;->changesApplied()V
+HSPLandroidx/compose/runtime/CompositionImpl;->cleanUpDerivedStateObservations()V
+HSPLandroidx/compose/runtime/CompositionImpl;->composeContent(Landroidx/compose/runtime/internal/ComposableLambdaImpl;)V
+HSPLandroidx/compose/runtime/CompositionImpl;->drainPendingModificationsForCompositionLocked()V
+HSPLandroidx/compose/runtime/CompositionImpl;->drainPendingModificationsLocked()V
+HSPLandroidx/compose/runtime/CompositionImpl;->getHasInvalidations()Z
+HSPLandroidx/compose/runtime/CompositionImpl;->invalidate$enumunboxing$(Landroidx/compose/runtime/RecomposeScopeImpl;Ljava/lang/Object;)I
+HSPLandroidx/compose/runtime/CompositionImpl;->invalidateChecked$enumunboxing$(Landroidx/compose/runtime/RecomposeScopeImpl;Landroidx/compose/runtime/Anchor;Ljava/lang/Object;)I
+HSPLandroidx/compose/runtime/CompositionImpl;->invalidateScopeOfLocked(Ljava/lang/Object;)V
+HSPLandroidx/compose/runtime/CompositionImpl;->isDisposed()Z
+HSPLandroidx/compose/runtime/CompositionImpl;->observer()V
+HSPLandroidx/compose/runtime/CompositionImpl;->observesAnyOf(Landroidx/compose/runtime/collection/IdentityArraySet;)Z
+HSPLandroidx/compose/runtime/CompositionImpl;->recompose()Z
+HSPLandroidx/compose/runtime/CompositionImpl;->recomposeScopeReleased()V
+HSPLandroidx/compose/runtime/CompositionImpl;->recordModificationsOf(Landroidx/compose/runtime/collection/IdentityArraySet;)V
+HSPLandroidx/compose/runtime/CompositionImpl;->recordReadOf(Ljava/lang/Object;)V
+HSPLandroidx/compose/runtime/CompositionImpl;->recordWriteOf(Ljava/lang/Object;)V
+HSPLandroidx/compose/runtime/CompositionImpl;->setContent(Lkotlin/jvm/functions/Function2;)V
+HSPLandroidx/compose/runtime/CompositionKt;-><clinit>()V
+HSPLandroidx/compose/runtime/CompositionLocal;-><init>(Lkotlin/jvm/functions/Function0;)V
+HSPLandroidx/compose/runtime/CompositionLocalMap$Companion;-><clinit>()V
+HSPLandroidx/compose/runtime/CompositionLocalMap;-><clinit>()V
+HSPLandroidx/compose/runtime/CompositionObserverHolder;-><init>()V
+HSPLandroidx/compose/runtime/CompositionScopedCoroutineScopeCanceller;-><init>(Lkotlinx/coroutines/internal/ContextScope;)V
+HSPLandroidx/compose/runtime/CompositionScopedCoroutineScopeCanceller;->onRemembered()V
+HSPLandroidx/compose/runtime/DerivedSnapshotState$ResultRecord;-><clinit>()V
+HSPLandroidx/compose/runtime/DerivedSnapshotState$ResultRecord;-><init>()V
+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;->isValid(Landroidx/compose/runtime/DerivedSnapshotState;Landroidx/compose/runtime/snapshots/Snapshot;)Z
+HSPLandroidx/compose/runtime/DerivedSnapshotState$ResultRecord;->readableHash(Landroidx/compose/runtime/DerivedSnapshotState;Landroidx/compose/runtime/snapshots/Snapshot;)I
+HSPLandroidx/compose/runtime/DerivedSnapshotState;-><init>(Landroidx/compose/runtime/ReferentialEqualityPolicy;Lkotlin/jvm/functions/Function0;)V
+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/DerivedSnapshotState$ResultRecord;
+HSPLandroidx/compose/runtime/DerivedSnapshotState;->getFirstStateRecord()Landroidx/compose/runtime/snapshots/StateRecord;
+HSPLandroidx/compose/runtime/DerivedSnapshotState;->getValue()Ljava/lang/Object;
+HSPLandroidx/compose/runtime/DerivedSnapshotState;->prependStateRecord(Landroidx/compose/runtime/snapshots/StateRecord;)V
+HSPLandroidx/compose/runtime/DisposableEffectImpl;-><init>(Lkotlin/jvm/functions/Function1;)V
+HSPLandroidx/compose/runtime/DisposableEffectImpl;->onForgotten()V
+HSPLandroidx/compose/runtime/DisposableEffectImpl;->onRemembered()V
+HSPLandroidx/compose/runtime/DynamicProvidableCompositionLocal;-><init>(Landroidx/compose/runtime/SnapshotMutationPolicy;Lkotlin/jvm/functions/Function0;)V
+HSPLandroidx/compose/runtime/DynamicProvidableCompositionLocal;->updatedStateOf$runtime_release(Ljava/lang/Object;Landroidx/compose/runtime/State;)Landroidx/compose/runtime/State;
+HSPLandroidx/compose/runtime/GroupInfo;-><init>(III)V
+HSPLandroidx/compose/runtime/IntStack;-><init>()V
+HSPLandroidx/compose/runtime/IntStack;-><init>(I)V
+HSPLandroidx/compose/runtime/IntStack;->getSize()I
+HSPLandroidx/compose/runtime/IntStack;->pop()I
+HSPLandroidx/compose/runtime/IntStack;->push(I)V
+HSPLandroidx/compose/runtime/IntStack;->pushDiagonal(III)V
+HSPLandroidx/compose/runtime/IntStack;->pushRange(IIII)V
+HSPLandroidx/compose/runtime/IntStack;->quickSort(II)V
+HSPLandroidx/compose/runtime/IntStack;->swapDiagonal(II)V
+HSPLandroidx/compose/runtime/Invalidation;-><init>(Landroidx/compose/runtime/RecomposeScopeImpl;ILandroidx/compose/runtime/collection/IdentityArraySet;)V
+HSPLandroidx/compose/runtime/KeyInfo;-><init>(ILjava/lang/Object;II)V
+HSPLandroidx/compose/runtime/Latch$await$2$2;-><init>(Ljava/lang/Object;ILjava/lang/Object;)V
+HSPLandroidx/compose/runtime/Latch$await$2$2;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
+HSPLandroidx/compose/runtime/Latch$await$2$2;->invoke(Ljava/lang/Throwable;)V
+HSPLandroidx/compose/runtime/Latch;-><init>()V
+HSPLandroidx/compose/runtime/Latch;-><init>(I)V
+HSPLandroidx/compose/runtime/Latch;->add(Landroidx/compose/ui/node/LayoutNode;)V
+HSPLandroidx/compose/runtime/Latch;->contains(Landroidx/compose/ui/node/LayoutNode;)Z
+HSPLandroidx/compose/runtime/Latch;->pop()Landroidx/compose/ui/node/LayoutNode;
+HSPLandroidx/compose/runtime/Latch;->remove(Landroidx/compose/ui/node/LayoutNode;)Z
+HSPLandroidx/compose/runtime/LaunchedEffectImpl;-><init>(Lkotlin/coroutines/CoroutineContext;Lkotlin/jvm/functions/Function2;)V
+HSPLandroidx/compose/runtime/LaunchedEffectImpl;->onForgotten()V
+HSPLandroidx/compose/runtime/LaunchedEffectImpl;->onRemembered()V
+HSPLandroidx/compose/runtime/LazyValueHolder;-><init>(Lkotlin/jvm/functions/Function0;)V
+HSPLandroidx/compose/runtime/LazyValueHolder;->getValue()Ljava/lang/Object;
+HSPLandroidx/compose/runtime/MonotonicFrameClock;->getKey()Lkotlin/coroutines/CoroutineContext$Key;
+HSPLandroidx/compose/runtime/OpaqueKey;-><init>(Ljava/lang/String;)V
+HSPLandroidx/compose/runtime/OpaqueKey;->equals(Ljava/lang/Object;)Z
+HSPLandroidx/compose/runtime/OpaqueKey;->hashCode()I
+HSPLandroidx/compose/runtime/ParcelableSnapshotMutableFloatState;-><clinit>()V
+HSPLandroidx/compose/runtime/ParcelableSnapshotMutableIntState;-><clinit>()V
+HSPLandroidx/compose/runtime/ParcelableSnapshotMutableState;-><clinit>()V
+HSPLandroidx/compose/runtime/PausableMonotonicFrameClock$withFrameNanos$1;-><init>(Landroidx/compose/runtime/PausableMonotonicFrameClock;Lkotlin/coroutines/Continuation;)V
+HSPLandroidx/compose/runtime/PausableMonotonicFrameClock$withFrameNanos$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;
+HSPLandroidx/compose/runtime/PausableMonotonicFrameClock;-><init>(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;->withFrameNanos(Lkotlin/jvm/functions/Function1;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
+HSPLandroidx/compose/runtime/Pending$keyMap$2;-><init>(ILjava/lang/Object;)V
+HSPLandroidx/compose/runtime/Pending$keyMap$2;->invoke()Ljava/lang/Object;
+HSPLandroidx/compose/runtime/Pending;-><init>(ILjava/util/ArrayList;)V
+HSPLandroidx/compose/runtime/ProduceStateScopeImpl;-><init>(Landroidx/compose/runtime/MutableState;Lkotlin/coroutines/CoroutineContext;)V
+HSPLandroidx/compose/runtime/ProduceStateScopeImpl;->setValue(Ljava/lang/Object;)V
+HSPLandroidx/compose/runtime/ProvidableCompositionLocal;->provides(Ljava/lang/Object;)Landroidx/compose/runtime/ProvidedValue;
+HSPLandroidx/compose/runtime/ProvidedValue;-><init>(Landroidx/compose/runtime/CompositionLocal;Ljava/lang/Object;Z)V
+HSPLandroidx/compose/runtime/RecomposeScopeImpl$end$1$2;-><init>(IILjava/lang/Object;Ljava/lang/Object;)V
+HSPLandroidx/compose/runtime/RecomposeScopeImpl$end$1$2;-><init>(Landroidx/compose/runtime/DerivedSnapshotState;Landroidx/core/content/res/ComplexColorCompat;I)V
+HSPLandroidx/compose/runtime/RecomposeScopeImpl$end$1$2;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
+HSPLandroidx/compose/runtime/RecomposeScopeImpl;-><init>(Landroidx/compose/runtime/CompositionImpl;)V
+HSPLandroidx/compose/runtime/RecomposeScopeImpl;->invalidateForResult$enumunboxing$(Ljava/lang/Object;)I
+HSPLandroidx/compose/runtime/Recomposer$State;-><clinit>()V
+HSPLandroidx/compose/runtime/Recomposer$State;-><init>(ILjava/lang/String;)V
+HSPLandroidx/compose/runtime/Recomposer$effectJob$1$1;-><init>(ILjava/lang/Object;)V
+HSPLandroidx/compose/runtime/Recomposer$effectJob$1$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
+HSPLandroidx/compose/runtime/Recomposer$join$2;-><init>(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(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
+HSPLandroidx/compose/runtime/Recomposer$join$2;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;
+HSPLandroidx/compose/runtime/Recomposer$performRecompose$1$1;-><init>(Ljava/lang/Object;ILjava/lang/Object;)V
+HSPLandroidx/compose/runtime/Recomposer$performRecompose$1$1;->invoke()Ljava/lang/Object;
+HSPLandroidx/compose/runtime/Recomposer$performRecompose$1$1;->invoke()V
+HSPLandroidx/compose/runtime/Recomposer$recompositionRunner$2$3;-><init>(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;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;
+HSPLandroidx/compose/runtime/Recomposer$recompositionRunner$2$unregisterApplyObserver$1;-><init>(ILjava/lang/Object;)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;)V
+HSPLandroidx/compose/runtime/Recomposer$recompositionRunner$2;-><init>(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;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;
+HSPLandroidx/compose/runtime/Recomposer$runRecomposeAndApplyChanges$2$1;-><init>(Landroidx/compose/runtime/Recomposer;Landroidx/compose/runtime/collection/IdentityArraySet;Landroidx/compose/runtime/collection/IdentityArraySet;Ljava/util/List;Ljava/util/List;Ljava/util/Set;Ljava/util/List;Ljava/util/Set;)V
+HSPLandroidx/compose/runtime/Recomposer$runRecomposeAndApplyChanges$2$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
+HSPLandroidx/compose/runtime/Recomposer$runRecomposeAndApplyChanges$2;-><init>(Landroidx/compose/runtime/Recomposer;Lkotlin/coroutines/Continuation;)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;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;
+HSPLandroidx/compose/runtime/Recomposer;-><clinit>()V
+HSPLandroidx/compose/runtime/Recomposer;-><init>(Lkotlin/coroutines/CoroutineContext;)V
+HSPLandroidx/compose/runtime/Recomposer;->access$performRecompose(Landroidx/compose/runtime/Recomposer;Landroidx/compose/runtime/CompositionImpl;Landroidx/compose/runtime/collection/IdentityArraySet;)Landroidx/compose/runtime/CompositionImpl;
+HSPLandroidx/compose/runtime/Recomposer;->access$recordComposerModifications(Landroidx/compose/runtime/Recomposer;)Z
+HSPLandroidx/compose/runtime/Recomposer;->applyAndCheck(Landroidx/compose/runtime/snapshots/MutableSnapshot;)V
+HSPLandroidx/compose/runtime/Recomposer;->composeInitial$runtime_release(Landroidx/compose/runtime/CompositionImpl;Landroidx/compose/runtime/internal/ComposableLambdaImpl;)V
+HSPLandroidx/compose/runtime/Recomposer;->deriveStateLocked()Lkotlinx/coroutines/CancellableContinuation;
+HSPLandroidx/compose/runtime/Recomposer;->getCollectingParameterInformation$runtime_release()Z
+HSPLandroidx/compose/runtime/Recomposer;->getCompoundHashKey$runtime_release()I
+HSPLandroidx/compose/runtime/Recomposer;->getEffectCoroutineContext()Lkotlin/coroutines/CoroutineContext;
+HSPLandroidx/compose/runtime/Recomposer;->getHasBroadcastFrameClockAwaitersLocked()Z
+HSPLandroidx/compose/runtime/Recomposer;->getHasSchedulingWork()Z
+HSPLandroidx/compose/runtime/Recomposer;->getKnownCompositions()Ljava/util/List;
+HSPLandroidx/compose/runtime/Recomposer;->invalidate$runtime_release(Landroidx/compose/runtime/CompositionImpl;)V
+HSPLandroidx/compose/runtime/Recomposer;->performInitialMovableContentInserts(Landroidx/compose/runtime/CompositionImpl;)V
+HSPLandroidx/compose/runtime/ReferentialEqualityPolicy;-><clinit>()V
+HSPLandroidx/compose/runtime/ReferentialEqualityPolicy;->equivalent(Ljava/lang/Object;Ljava/lang/Object;)Z
+HSPLandroidx/compose/runtime/SkippableUpdater;-><init>(Landroidx/compose/runtime/Composer;)V
+HSPLandroidx/compose/runtime/SlotReader;-><init>(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;->close()V
+HSPLandroidx/compose/runtime/SlotReader;->endGroup()V
+HSPLandroidx/compose/runtime/SlotReader;->getGroupAux()Ljava/lang/Object;
+HSPLandroidx/compose/runtime/SlotReader;->getGroupKey()I
+HSPLandroidx/compose/runtime/SlotReader;->groupGet(II)Ljava/lang/Object;
+HSPLandroidx/compose/runtime/SlotReader;->groupSize(I)I
+HSPLandroidx/compose/runtime/SlotReader;->isNode(I)Z
+HSPLandroidx/compose/runtime/SlotReader;->node(I)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;->skipGroup()I
+HSPLandroidx/compose/runtime/SlotReader;->skipToGroupEnd()V
+HSPLandroidx/compose/runtime/SlotReader;->startGroup()V
+HSPLandroidx/compose/runtime/SlotTable;-><init>()V
+HSPLandroidx/compose/runtime/SlotTable;->anchorIndex(Landroidx/compose/runtime/Anchor;)I
+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/SlotWriter;-><clinit>()V
+HSPLandroidx/compose/runtime/SlotWriter;-><init>(Landroidx/compose/runtime/SlotTable;)V
+HSPLandroidx/compose/runtime/SlotWriter;->advanceBy(I)V
+HSPLandroidx/compose/runtime/SlotWriter;->anchor(I)Landroidx/compose/runtime/Anchor;
+HSPLandroidx/compose/runtime/SlotWriter;->auxIndex([II)I
+HSPLandroidx/compose/runtime/SlotWriter;->beginInsert()V
+HSPLandroidx/compose/runtime/SlotWriter;->close()V
+HSPLandroidx/compose/runtime/SlotWriter;->dataIndex([II)I
+HSPLandroidx/compose/runtime/SlotWriter;->dataIndexToDataAddress(I)I
+HSPLandroidx/compose/runtime/SlotWriter;->endInsert()V
+HSPLandroidx/compose/runtime/SlotWriter;->getSize$runtime_release()I
+HSPLandroidx/compose/runtime/SlotWriter;->groupIndexToAddress(I)I
+HSPLandroidx/compose/runtime/SlotWriter;->groupSize(I)I
+HSPLandroidx/compose/runtime/SlotWriter;->markGroup$default(Landroidx/compose/runtime/SlotWriter;)V
+HSPLandroidx/compose/runtime/SlotWriter;->moveFrom(Landroidx/compose/runtime/SlotTable;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;->parent(I)I
+HSPLandroidx/compose/runtime/SlotWriter;->parent([II)I
+HSPLandroidx/compose/runtime/SlotWriter;->recalculateMarks()V
+HSPLandroidx/compose/runtime/SlotWriter;->set(IILjava/lang/Object;)Ljava/lang/Object;
+HSPLandroidx/compose/runtime/SlotWriter;->skipToGroupEnd()V
+HSPLandroidx/compose/runtime/SlotWriter;->slotIndex([II)I
+HSPLandroidx/compose/runtime/SlotWriter;->updateAux(Ljava/lang/Object;)V
+HSPLandroidx/compose/runtime/SlotWriter;->updateContainsMark(I)V
+HSPLandroidx/compose/runtime/SlotWriter;->updateNodeOfGroup(ILjava/lang/Object;)V
+HSPLandroidx/compose/runtime/SnapshotMutableFloatStateImpl$FloatStateStateRecord;-><init>(F)V
+HSPLandroidx/compose/runtime/SnapshotMutableFloatStateImpl;-><init>(F)V
+HSPLandroidx/compose/runtime/SnapshotMutableFloatStateImpl;->setFloatValue(F)V
+HSPLandroidx/compose/runtime/SnapshotMutableIntStateImpl$IntStateStateRecord;-><init>(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;-><init>(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
+HSPLandroidx/compose/runtime/SnapshotMutableStateImpl$StateStateRecord;-><init>(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;-><init>(Ljava/lang/Object;Landroidx/compose/runtime/SnapshotMutationPolicy;)V
+HSPLandroidx/compose/runtime/SnapshotMutableStateImpl;->getFirstStateRecord()Landroidx/compose/runtime/snapshots/StateRecord;
+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
+HSPLandroidx/compose/runtime/SnapshotStateKt__DerivedStateKt;-><clinit>()V
+HSPLandroidx/compose/runtime/SnapshotStateKt__ProduceStateKt$produceState$3;-><init>(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;
+HSPLandroidx/compose/runtime/SnapshotStateKt__SnapshotFlowKt$collectAsState$1$1;-><init>(Landroidx/compose/runtime/ProduceStateScopeImpl;I)V
+HSPLandroidx/compose/runtime/SnapshotStateKt__SnapshotFlowKt$collectAsState$1$1;->emit(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
+HSPLandroidx/compose/runtime/SnapshotStateKt__SnapshotFlowKt$collectAsState$1;-><init>(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(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
+HSPLandroidx/compose/runtime/SnapshotStateKt__SnapshotFlowKt$collectAsState$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;
+HSPLandroidx/compose/runtime/Stack;-><init>()V
+HSPLandroidx/compose/runtime/Stack;-><init>(I)V
+HSPLandroidx/compose/runtime/Stack;-><init>(II)V
+HSPLandroidx/compose/runtime/Stack;-><init>(ILjava/lang/Object;)V
+HSPLandroidx/compose/runtime/Stack;-><init>(Landroid/content/Context;)V
+HSPLandroidx/compose/runtime/Stack;-><init>(Ljava/nio/ByteBuffer;)V
+HSPLandroidx/compose/runtime/Stack;->clear()V
+HSPLandroidx/compose/runtime/Stack;->load(Lokhttp3/MediaType;)V
+HSPLandroidx/compose/runtime/Stack;->pop()Ljava/lang/Object;
+HSPLandroidx/compose/runtime/Stack;->readUnsignedInt()J
+HSPLandroidx/compose/runtime/Stack;->skip(I)V
+HSPLandroidx/compose/runtime/StaticProvidableCompositionLocal;->updatedStateOf$runtime_release(Ljava/lang/Object;Landroidx/compose/runtime/State;)Landroidx/compose/runtime/State;
+HSPLandroidx/compose/runtime/StaticValueHolder;-><init>(Ljava/lang/Object;)V
+HSPLandroidx/compose/runtime/StaticValueHolder;->equals(Ljava/lang/Object;)Z
+HSPLandroidx/compose/runtime/StaticValueHolder;->getValue()Ljava/lang/Object;
+HSPLandroidx/compose/runtime/StructuralEqualityPolicy;-><clinit>()V
+HSPLandroidx/compose/runtime/StructuralEqualityPolicy;->equivalent(Ljava/lang/Object;Ljava/lang/Object;)Z
+HSPLandroidx/compose/runtime/changelist/ChangeList;-><init>()V
+HSPLandroidx/compose/runtime/changelist/ChangeList;->executeAndFlushAllPendingChanges(Landroidx/compose/runtime/Applier;Landroidx/compose/runtime/SlotWriter;Landroidx/compose/runtime/CompositionImpl$RememberEventDispatcher;)V
+HSPLandroidx/compose/runtime/changelist/ChangeList;->isEmpty()Z
+HSPLandroidx/compose/runtime/changelist/ComposerChangeListWriter;-><init>(Landroidx/compose/runtime/ComposerImpl;Landroidx/compose/runtime/changelist/ChangeList;)V
+HSPLandroidx/compose/runtime/changelist/ComposerChangeListWriter;->moveUp()V
+HSPLandroidx/compose/runtime/changelist/ComposerChangeListWriter;->pushPendingUpsAndDowns()V
+HSPLandroidx/compose/runtime/changelist/ComposerChangeListWriter;->realizeNodeMovementOperations()V
+HSPLandroidx/compose/runtime/changelist/ComposerChangeListWriter;->realizeOperationLocation(Z)V
+HSPLandroidx/compose/runtime/changelist/FixupList;-><init>()V
+HSPLandroidx/compose/runtime/changelist/Operation$AdvanceSlotsBy;-><clinit>()V
+HSPLandroidx/compose/runtime/changelist/Operation$AdvanceSlotsBy;-><init>()V
+HSPLandroidx/compose/runtime/changelist/Operation$AdvanceSlotsBy;->execute(Landroidx/compose/runtime/changelist/Operations$OpIterator;Landroidx/compose/runtime/Applier;Landroidx/compose/runtime/SlotWriter;Landroidx/compose/runtime/CompositionImpl$RememberEventDispatcher;)V
+HSPLandroidx/compose/runtime/changelist/Operation$DeactivateCurrentGroup;-><clinit>()V
+HSPLandroidx/compose/runtime/changelist/Operation$DeactivateCurrentGroup;-><init>()V
+HSPLandroidx/compose/runtime/changelist/Operation$DeactivateCurrentGroup;->execute(Landroidx/compose/runtime/changelist/Operations$OpIterator;Landroidx/compose/runtime/Applier;Landroidx/compose/runtime/SlotWriter;Landroidx/compose/runtime/CompositionImpl$RememberEventDispatcher;)V
+HSPLandroidx/compose/runtime/changelist/Operation$Downs;-><clinit>()V
+HSPLandroidx/compose/runtime/changelist/Operation$Downs;-><init>()V
+HSPLandroidx/compose/runtime/changelist/Operation$Downs;->execute(Landroidx/compose/runtime/changelist/Operations$OpIterator;Landroidx/compose/runtime/Applier;Landroidx/compose/runtime/SlotWriter;Landroidx/compose/runtime/CompositionImpl$RememberEventDispatcher;)V
+HSPLandroidx/compose/runtime/changelist/Operation$InsertNodeFixup;-><clinit>()V
+HSPLandroidx/compose/runtime/changelist/Operation$InsertNodeFixup;-><init>()V
+HSPLandroidx/compose/runtime/changelist/Operation$InsertNodeFixup;->execute(Landroidx/compose/runtime/changelist/Operations$OpIterator;Landroidx/compose/runtime/Applier;Landroidx/compose/runtime/SlotWriter;Landroidx/compose/runtime/CompositionImpl$RememberEventDispatcher;)V
+HSPLandroidx/compose/runtime/changelist/Operation$InsertSlotsWithFixups;-><clinit>()V
+HSPLandroidx/compose/runtime/changelist/Operation$InsertSlotsWithFixups;-><init>()V
+HSPLandroidx/compose/runtime/changelist/Operation$InsertSlotsWithFixups;->execute(Landroidx/compose/runtime/changelist/Operations$OpIterator;Landroidx/compose/runtime/Applier;Landroidx/compose/runtime/SlotWriter;Landroidx/compose/runtime/CompositionImpl$RememberEventDispatcher;)V
+HSPLandroidx/compose/runtime/changelist/Operation$PostInsertNodeFixup;-><clinit>()V
+HSPLandroidx/compose/runtime/changelist/Operation$PostInsertNodeFixup;-><init>()V
+HSPLandroidx/compose/runtime/changelist/Operation$PostInsertNodeFixup;->execute(Landroidx/compose/runtime/changelist/Operations$OpIterator;Landroidx/compose/runtime/Applier;Landroidx/compose/runtime/SlotWriter;Landroidx/compose/runtime/CompositionImpl$RememberEventDispatcher;)V
+HSPLandroidx/compose/runtime/changelist/Operation$Remember;-><clinit>()V
+HSPLandroidx/compose/runtime/changelist/Operation$Remember;-><init>()V
+HSPLandroidx/compose/runtime/changelist/Operation$Remember;->execute(Landroidx/compose/runtime/changelist/Operations$OpIterator;Landroidx/compose/runtime/Applier;Landroidx/compose/runtime/SlotWriter;Landroidx/compose/runtime/CompositionImpl$RememberEventDispatcher;)V
+HSPLandroidx/compose/runtime/changelist/Operation$SideEffect;-><clinit>()V
+HSPLandroidx/compose/runtime/changelist/Operation$SideEffect;-><init>()V
+HSPLandroidx/compose/runtime/changelist/Operation$SideEffect;->execute(Landroidx/compose/runtime/changelist/Operations$OpIterator;Landroidx/compose/runtime/Applier;Landroidx/compose/runtime/SlotWriter;Landroidx/compose/runtime/CompositionImpl$RememberEventDispatcher;)V
+HSPLandroidx/compose/runtime/changelist/Operation$UpdateAuxData;-><clinit>()V
+HSPLandroidx/compose/runtime/changelist/Operation$UpdateAuxData;-><init>()V
+HSPLandroidx/compose/runtime/changelist/Operation$UpdateAuxData;->execute(Landroidx/compose/runtime/changelist/Operations$OpIterator;Landroidx/compose/runtime/Applier;Landroidx/compose/runtime/SlotWriter;Landroidx/compose/runtime/CompositionImpl$RememberEventDispatcher;)V
+HSPLandroidx/compose/runtime/changelist/Operation$UpdateNode;-><clinit>()V
+HSPLandroidx/compose/runtime/changelist/Operation$UpdateNode;-><init>()V
+HSPLandroidx/compose/runtime/changelist/Operation$UpdateNode;->execute(Landroidx/compose/runtime/changelist/Operations$OpIterator;Landroidx/compose/runtime/Applier;Landroidx/compose/runtime/SlotWriter;Landroidx/compose/runtime/CompositionImpl$RememberEventDispatcher;)V
+HSPLandroidx/compose/runtime/changelist/Operation$UpdateValue;-><clinit>()V
+HSPLandroidx/compose/runtime/changelist/Operation$UpdateValue;-><init>()V
+HSPLandroidx/compose/runtime/changelist/Operation$UpdateValue;->execute(Landroidx/compose/runtime/changelist/Operations$OpIterator;Landroidx/compose/runtime/Applier;Landroidx/compose/runtime/SlotWriter;Landroidx/compose/runtime/CompositionImpl$RememberEventDispatcher;)V
+HSPLandroidx/compose/runtime/changelist/Operation$Ups;-><clinit>()V
+HSPLandroidx/compose/runtime/changelist/Operation$Ups;-><init>()V
+HSPLandroidx/compose/runtime/changelist/Operation$Ups;->execute(Landroidx/compose/runtime/changelist/Operations$OpIterator;Landroidx/compose/runtime/Applier;Landroidx/compose/runtime/SlotWriter;Landroidx/compose/runtime/CompositionImpl$RememberEventDispatcher;)V
+HSPLandroidx/compose/runtime/changelist/Operation$UseCurrentNode;-><clinit>()V
+HSPLandroidx/compose/runtime/changelist/Operation$UseCurrentNode;-><init>()V
+HSPLandroidx/compose/runtime/changelist/Operation$UseCurrentNode;->execute(Landroidx/compose/runtime/changelist/Operations$OpIterator;Landroidx/compose/runtime/Applier;Landroidx/compose/runtime/SlotWriter;Landroidx/compose/runtime/CompositionImpl$RememberEventDispatcher;)V
+HSPLandroidx/compose/runtime/changelist/Operation;-><init>(II)V
+HSPLandroidx/compose/runtime/changelist/Operation;-><init>(III)V
+HSPLandroidx/compose/runtime/changelist/Operations$OpIterator;-><init>(Landroidx/compose/runtime/changelist/Operations;)V
+HSPLandroidx/compose/runtime/changelist/Operations$OpIterator;->getInt-w8GmfQM(I)I
+HSPLandroidx/compose/runtime/changelist/Operations$OpIterator;->getObject-31yXWZQ(I)Ljava/lang/Object;
+HSPLandroidx/compose/runtime/changelist/Operations;-><init>()V
+HSPLandroidx/compose/runtime/changelist/Operations;->access$createExpectedArgMask(Landroidx/compose/runtime/changelist/Operations;I)I
+HSPLandroidx/compose/runtime/changelist/Operations;->clear()V
+HSPLandroidx/compose/runtime/changelist/Operations;->executeAndFlushAllPendingOperations(Landroidx/compose/runtime/Applier;Landroidx/compose/runtime/SlotWriter;Landroidx/compose/runtime/CompositionImpl$RememberEventDispatcher;)V
+HSPLandroidx/compose/runtime/changelist/Operations;->peekOperation()Landroidx/compose/runtime/changelist/Operation;
+HSPLandroidx/compose/runtime/changelist/Operations;->push(Landroidx/compose/runtime/changelist/Operation;)V
+HSPLandroidx/compose/runtime/changelist/Operations;->pushOp(Landroidx/compose/runtime/changelist/Operation;)V
+HSPLandroidx/compose/runtime/collection/IdentityArrayIntMap;-><init>()V
+HSPLandroidx/compose/runtime/collection/IdentityArrayIntMap;->add(ILjava/lang/Object;)I
+HSPLandroidx/compose/runtime/collection/IdentityArrayMap$asMap$1$entries$1$iterator$1$1;-><init>(Ljava/lang/Object;Ljava/lang/Object;)V
+HSPLandroidx/compose/runtime/collection/IdentityArrayMap$asMap$1$entries$1$iterator$1$1;->getKey()Ljava/lang/Object;
+HSPLandroidx/compose/runtime/collection/IdentityArrayMap$asMap$1$entries$1$iterator$1$1;->getValue()Ljava/lang/Object;
+HSPLandroidx/compose/runtime/collection/IdentityArraySet;-><init>()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;->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/MutableVector$MutableVectorList;-><init>(Landroidx/compose/runtime/collection/MutableVector;)V
+HSPLandroidx/compose/runtime/collection/MutableVector$MutableVectorList;->get(I)Ljava/lang/Object;
+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
+HSPLandroidx/compose/runtime/collection/MutableVector$VectorListIterator;-><init>(ILjava/util/List;)V
+HSPLandroidx/compose/runtime/collection/MutableVector$VectorListIterator;->hasNext()Z
+HSPLandroidx/compose/runtime/collection/MutableVector$VectorListIterator;->next()Ljava/lang/Object;
+HSPLandroidx/compose/runtime/collection/MutableVector;-><init>([Ljava/lang/Object;)V
+HSPLandroidx/compose/runtime/collection/MutableVector;->add(ILjava/lang/Object;)V
+HSPLandroidx/compose/runtime/collection/MutableVector;->add(Ljava/lang/Object;)V
+HSPLandroidx/compose/runtime/collection/MutableVector;->addAll(ILandroidx/compose/runtime/collection/MutableVector;)V
+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;->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/external/kotlinx/collections/immutable/implementations/immutableList/SmallPersistentVector;-><clinit>()V
+HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableList/SmallPersistentVector;-><init>([Ljava/lang/Object;)V
+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;->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;->removeAt(I)Landroidx/compose/runtime/external/kotlinx/collections/immutable/PersistentList;
+HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/PersistentHashMap;-><clinit>()V
+HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/PersistentHashMap;-><init>(Landroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/TrieNode;I)V
+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;->get(Ljava/lang/Object;)Ljava/lang/Object;
+HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/PersistentHashMap;->put(Ljava/lang/Object;Landroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/persistentOrderedSet/Links;)Landroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/PersistentHashMap;
+HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/PersistentHashMapBaseIterator;-><init>(Landroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/TrieNode;[Landroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/TrieNodeBaseIterator;)V
+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;
+HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/PersistentHashMapBuilder;-><init>(Landroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/PersistentHashMap;)V
+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;->setSize(I)V
+HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/PersistentHashMapKeys;-><init>(Landroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/PersistentHashMap;I)V
+HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/PersistentHashMapKeys;->getSize()I
+HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/PersistentHashMapKeys;->iterator()Ljava/util/Iterator;
+HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/PersistentHashMapKeysIterator;-><init>(Landroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/TrieNode;I)V
+HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/TrieNode;-><clinit>()V
+HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/TrieNode;-><init>(II[Ljava/lang/Object;L_COROUTINE/ArtificialStackFrames;)V
+HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/TrieNode;->bufferMoveEntryToNode(IIILjava/lang/Object;Ljava/lang/Object;IL_COROUTINE/ArtificialStackFrames;)[Ljava/lang/Object;
+HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/TrieNode;->containsKey(IILjava/lang/Object;)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;->entryKeyIndex$runtime_release(I)I
+HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/TrieNode;->get(IILjava/lang/Object;)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;->makeNode(ILjava/lang/Object;Ljava/lang/Object;ILjava/lang/Object;Ljava/lang/Object;IL_COROUTINE/ArtificialStackFrames;)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;->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(IILjava/lang/Object;Ljava/lang/Object;)Landroidx/compose/ui/input/pointer/util/PointerIdArray;
+HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/TrieNode;->valueAtKeyIndex(I)Ljava/lang/Object;
+HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/TrieNodeBaseIterator;-><init>()V
+HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/TrieNodeBaseIterator;->reset(II[Ljava/lang/Object;)V
+HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/TrieNodeKeysIterator;-><init>(I)V
+HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/TrieNodeKeysIterator;->next()Ljava/lang/Object;
+HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/persistentOrderedSet/Links;-><init>(Ljava/lang/Object;Ljava/lang/Object;)V
+HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/persistentOrderedSet/PersistentOrderedSet;-><clinit>()V
+HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/persistentOrderedSet/PersistentOrderedSet;-><init>(Ljava/lang/Object;Ljava/lang/Object;Landroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/PersistentHashMap;)V
+HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/persistentOrderedSet/PersistentOrderedSet;->getSize()I
+HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/internal/DeltaCounter;-><init>()V
+HSPLandroidx/compose/runtime/internal/ComposableLambdaImpl;-><init>(IZ)V
+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;Ljava/lang/Object;)Ljava/lang/Object;
+HSPLandroidx/compose/runtime/internal/ComposableLambdaImpl;->update(Lkotlin/jvm/internal/Lambda;)V
+HSPLandroidx/compose/runtime/internal/PersistentCompositionLocalHashMap$Builder;-><init>(Landroidx/compose/runtime/internal/PersistentCompositionLocalHashMap;)V
+HSPLandroidx/compose/runtime/internal/PersistentCompositionLocalHashMap$Builder;->build()Landroidx/compose/runtime/internal/PersistentCompositionLocalHashMap;
+HSPLandroidx/compose/runtime/internal/PersistentCompositionLocalHashMap;-><clinit>()V
+HSPLandroidx/compose/runtime/internal/PersistentCompositionLocalHashMap;->containsKey(Ljava/lang/Object;)Z
+HSPLandroidx/compose/runtime/internal/PersistentCompositionLocalHashMap;->get(Ljava/lang/Object;)Ljava/lang/Object;
+HSPLandroidx/compose/runtime/internal/PersistentCompositionLocalHashMap;->putValue(Landroidx/compose/runtime/CompositionLocal;Landroidx/compose/runtime/State;)Landroidx/compose/runtime/internal/PersistentCompositionLocalHashMap;
+HSPLandroidx/compose/runtime/internal/ThreadMap;-><init>(I[J[Ljava/lang/Object;)V
+HSPLandroidx/compose/runtime/internal/ThreadMap;->find(J)I
+HSPLandroidx/compose/runtime/internal/ThreadMap;->newWith(JLjava/lang/Object;)Landroidx/compose/runtime/internal/ThreadMap;
+HSPLandroidx/compose/runtime/saveable/ListSaverKt$listSaver$1;-><init>(Lkotlin/coroutines/CoroutineContext$plus$1;)V
+HSPLandroidx/compose/runtime/saveable/ListSaverKt$listSaver$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
+HSPLandroidx/compose/runtime/saveable/RememberSaveableKt$rememberSaveable$1;-><init>(Landroidx/compose/runtime/saveable/SaveableHolder;Landroidx/compose/runtime/saveable/SaverKt$Saver$1;Landroidx/compose/runtime/saveable/SaveableStateRegistry;Ljava/lang/String;Ljava/lang/Object;[Ljava/lang/Object;)V
+HSPLandroidx/compose/runtime/saveable/RememberSaveableKt$rememberSaveable$1;->invoke()Ljava/lang/Object;
+HSPLandroidx/compose/runtime/saveable/SaveableHolder;-><init>(Landroidx/compose/runtime/saveable/SaverKt$Saver$1;Landroidx/compose/runtime/saveable/SaveableStateRegistry;Ljava/lang/String;Ljava/lang/Object;[Ljava/lang/Object;)V
+HSPLandroidx/compose/runtime/saveable/SaveableHolder;->invoke()Ljava/lang/Object;
+HSPLandroidx/compose/runtime/saveable/SaveableHolder;->onRemembered()V
+HSPLandroidx/compose/runtime/saveable/SaveableHolder;->register()V
+HSPLandroidx/compose/runtime/saveable/SaveableStateHolderImpl$RegistryHolder$registry$1;-><init>(Landroidx/compose/runtime/saveable/SaveableStateHolderImpl;)V
+HSPLandroidx/compose/runtime/saveable/SaveableStateHolderImpl$RegistryHolder;-><init>(Landroidx/compose/runtime/saveable/SaveableStateHolderImpl;Ljava/lang/Object;)V
+HSPLandroidx/compose/runtime/saveable/SaveableStateHolderImpl$SaveableStateProvider$1$1$invoke$$inlined$onDispose$1;-><init>(Landroidx/compose/runtime/saveable/SaveableStateHolderImpl$RegistryHolder;Landroidx/compose/runtime/saveable/SaveableStateHolderImpl;Ljava/lang/Object;)V
+HSPLandroidx/compose/runtime/saveable/SaveableStateHolderImpl$SaveableStateProvider$1$1$invoke$$inlined$onDispose$1;->dispose()V
+HSPLandroidx/compose/runtime/saveable/SaveableStateHolderImpl;-><clinit>()V
+HSPLandroidx/compose/runtime/saveable/SaveableStateHolderImpl;-><init>(Ljava/util/Map;)V
+HSPLandroidx/compose/runtime/saveable/SaveableStateHolderImpl;->SaveableStateProvider(Ljava/lang/Object;Lkotlin/jvm/functions/Function2;Landroidx/compose/runtime/Composer;I)V
+HSPLandroidx/compose/runtime/saveable/SaveableStateRegistryImpl$registerProvider$3;-><init>(Landroidx/compose/runtime/saveable/SaveableStateRegistryImpl;Ljava/lang/String;Lkotlin/jvm/functions/Function0;)V
+HSPLandroidx/compose/runtime/saveable/SaveableStateRegistryImpl;-><init>(Ljava/util/Map;Lkotlin/jvm/functions/Function1;)V
+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/SaveableStateRegistryImpl$registerProvider$3;
+HSPLandroidx/compose/runtime/saveable/SaveableStateRegistryKt;-><clinit>()V
+HSPLandroidx/compose/runtime/saveable/SaverKt$Saver$1;-><init>(Lkotlin/jvm/functions/Function2;Lkotlin/jvm/functions/Function1;)V
+HSPLandroidx/compose/runtime/saveable/SaverKt;-><clinit>()V
+HSPLandroidx/compose/runtime/snapshots/GlobalSnapshot$1$1$1;-><init>(ILjava/util/List;)V
+HSPLandroidx/compose/runtime/snapshots/GlobalSnapshot$1$1$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
+HSPLandroidx/compose/runtime/snapshots/GlobalSnapshot;-><init>(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/MutableSnapshot;-><clinit>()V
+HSPLandroidx/compose/runtime/snapshots/MutableSnapshot;-><init>(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()Lokhttp3/MediaType;
+HSPLandroidx/compose/runtime/snapshots/MutableSnapshot;->closeLocked$runtime_release()V
+HSPLandroidx/compose/runtime/snapshots/MutableSnapshot;->dispose()V
+HSPLandroidx/compose/runtime/snapshots/MutableSnapshot;->getModified$runtime_release()Landroidx/compose/runtime/collection/IdentityArraySet;
+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/HashMap;Landroidx/compose/runtime/snapshots/SnapshotIdSet;)Lokhttp3/MediaType;
+HSPLandroidx/compose/runtime/snapshots/MutableSnapshot;->nestedDeactivated$runtime_release()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;->releasePinnedSnapshotsForCloseLocked$runtime_release()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/Snapshot$Companion$$ExternalSyntheticLambda0;-><init>(Lkotlin/jvm/internal/Lambda;I)V
+HSPLandroidx/compose/runtime/snapshots/Snapshot;-><init>(ILandroidx/compose/runtime/snapshots/SnapshotIdSet;)V
+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;->makeCurrent()Landroidx/compose/runtime/snapshots/Snapshot;
+HSPLandroidx/compose/runtime/snapshots/Snapshot;->restoreCurrent(Landroidx/compose/runtime/snapshots/Snapshot;)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/SnapshotApplyResult$Success;-><clinit>()V
+HSPLandroidx/compose/runtime/snapshots/SnapshotDoubleIndexHeap;-><init>()V
+HSPLandroidx/compose/runtime/snapshots/SnapshotDoubleIndexHeap;->add(I)I
+HSPLandroidx/compose/runtime/snapshots/SnapshotDoubleIndexHeap;->swap(II)V
+HSPLandroidx/compose/runtime/snapshots/SnapshotIdSet;-><clinit>()V
+HSPLandroidx/compose/runtime/snapshots/SnapshotIdSet;-><init>(JJI[I)V
+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;->or(Landroidx/compose/runtime/snapshots/SnapshotIdSet;)Landroidx/compose/runtime/snapshots/SnapshotIdSet;
+HSPLandroidx/compose/runtime/snapshots/SnapshotIdSet;->set(I)Landroidx/compose/runtime/snapshots/SnapshotIdSet;
+HSPLandroidx/compose/runtime/snapshots/SnapshotKt$mergedReadObserver$1;-><init>(Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function1;I)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
+HSPLandroidx/compose/runtime/snapshots/SnapshotKt;-><clinit>()V
+HSPLandroidx/compose/runtime/snapshots/SnapshotKt;->access$advanceGlobalSnapshot()V
+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/HashMap;
+HSPLandroidx/compose/runtime/snapshots/SnapshotKt;->access$validateOpen(Landroidx/compose/runtime/snapshots/Snapshot;)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(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;->currentSnapshot()Landroidx/compose/runtime/snapshots/Snapshot;
+HSPLandroidx/compose/runtime/snapshots/SnapshotKt;->mergedReadObserver(Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function1;Z)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;->notifyWrite(Landroidx/compose/runtime/snapshots/Snapshot;Landroidx/compose/runtime/snapshots/StateObject;)V
+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;->writableRecord(Landroidx/compose/runtime/snapshots/StateRecord;Landroidx/compose/runtime/snapshots/StateObject;Landroidx/compose/runtime/snapshots/Snapshot;)Landroidx/compose/runtime/snapshots/StateRecord;
+HSPLandroidx/compose/runtime/snapshots/SnapshotStateList$StateListStateRecord;-><init>(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$addAll$1;-><init>(Landroidx/compose/ui/layout/Placeable;II)V
+HSPLandroidx/compose/runtime/snapshots/SnapshotStateList$addAll$1;->invoke(Landroidx/compose/ui/layout/Placeable$PlacementScope;)V
+HSPLandroidx/compose/runtime/snapshots/SnapshotStateList$addAll$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
+HSPLandroidx/compose/runtime/snapshots/SnapshotStateList;-><init>()V
+HSPLandroidx/compose/runtime/snapshots/SnapshotStateList;->add(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;->getReadable$runtime_release()Landroidx/compose/runtime/snapshots/SnapshotStateList$StateListStateRecord;
+HSPLandroidx/compose/runtime/snapshots/SnapshotStateList;->isEmpty()Z
+HSPLandroidx/compose/runtime/snapshots/SnapshotStateList;->prependStateRecord(Landroidx/compose/runtime/snapshots/StateRecord;)V
+HSPLandroidx/compose/runtime/snapshots/SnapshotStateList;->remove(Ljava/lang/Object;)Z
+HSPLandroidx/compose/runtime/snapshots/SnapshotStateList;->size()I
+HSPLandroidx/compose/runtime/snapshots/SnapshotStateListKt;-><clinit>()V
+HSPLandroidx/compose/runtime/snapshots/SnapshotStateObserver$ObservedScopeMap;-><init>(Lkotlin/jvm/functions/Function1;)V
+HSPLandroidx/compose/runtime/snapshots/SnapshotStateObserver$ObservedScopeMap;->observe(Ljava/lang/Object;Lkotlin/collections/AbstractMap$toString$1;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;ILjava/lang/Object;Landroidx/compose/runtime/collection/IdentityArrayIntMap;)V
+HSPLandroidx/compose/runtime/snapshots/SnapshotStateObserver$ObservedScopeMap;->removeScopeIf()V
+HSPLandroidx/compose/runtime/snapshots/SnapshotStateObserver;-><init>(Landroidx/compose/ui/platform/AndroidComposeView$focusOwner$1;)V
+HSPLandroidx/compose/runtime/snapshots/SnapshotStateObserver;->access$drainChanges(Landroidx/compose/runtime/snapshots/SnapshotStateObserver;)Z
+HSPLandroidx/compose/runtime/snapshots/StateRecord;-><init>()V
+HSPLandroidx/compose/runtime/snapshots/TransparentObserverMutableSnapshot;-><init>(Landroidx/compose/runtime/snapshots/MutableSnapshot;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function1;ZZ)V
+HSPLandroidx/compose/runtime/snapshots/TransparentObserverMutableSnapshot;->apply()Lokhttp3/MediaType;
+HSPLandroidx/compose/runtime/snapshots/TransparentObserverMutableSnapshot;->dispose()V
+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;
+HSPLandroidx/compose/runtime/tooling/InspectionTablesKt;-><clinit>()V
+HSPLandroidx/compose/ui/BiasAlignment$Horizontal;-><init>(F)V
+HSPLandroidx/compose/ui/BiasAlignment$Horizontal;->align(IILandroidx/compose/ui/unit/LayoutDirection;)I
+HSPLandroidx/compose/ui/BiasAlignment$Horizontal;->equals(Ljava/lang/Object;)Z
+HSPLandroidx/compose/ui/BiasAlignment$Vertical;-><init>(F)V
+HSPLandroidx/compose/ui/BiasAlignment$Vertical;->equals(Ljava/lang/Object;)Z
+HSPLandroidx/compose/ui/BiasAlignment;-><init>(FF)V
+HSPLandroidx/compose/ui/BiasAlignment;->align-KFBX0sM(JJLandroidx/compose/ui/unit/LayoutDirection;)J
+HSPLandroidx/compose/ui/BiasAlignment;->equals(Ljava/lang/Object;)Z
+HSPLandroidx/compose/ui/CombinedModifier$toString$1;-><clinit>()V
+HSPLandroidx/compose/ui/CombinedModifier$toString$1;-><init>(I)V
+HSPLandroidx/compose/ui/CombinedModifier$toString$1;->invoke(Landroidx/compose/ui/layout/Measurable;I)Ljava/lang/Integer;
+HSPLandroidx/compose/ui/CombinedModifier$toString$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
+HSPLandroidx/compose/ui/CombinedModifier;-><init>(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/ComposedModifier;-><init>(Lkotlin/jvm/functions/Function3;)V
+HSPLandroidx/compose/ui/Modifier$Companion;-><clinit>()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;
+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;
+HSPLandroidx/compose/ui/Modifier$Node;-><init>()V
+HSPLandroidx/compose/ui/Modifier$Node;->getCoroutineScope()Lkotlinx/coroutines/CoroutineScope;
+HSPLandroidx/compose/ui/Modifier$Node;->getShouldAutoInvalidate()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;->updateCoordinator$ui_release(Landroidx/compose/ui/node/NodeCoordinator;)V
+HSPLandroidx/compose/ui/Modifier;->then(Landroidx/compose/ui/Modifier;)Landroidx/compose/ui/Modifier;
+HSPLandroidx/compose/ui/MotionDurationScale;->getKey()Lkotlin/coroutines/CoroutineContext$Key;
+HSPLandroidx/compose/ui/ZIndexElement;-><init>()V
+HSPLandroidx/compose/ui/ZIndexElement;->create()Landroidx/compose/ui/Modifier$Node;
+HSPLandroidx/compose/ui/ZIndexElement;->equals(Ljava/lang/Object;)Z
+HSPLandroidx/compose/ui/ZIndexNode$measure$1;-><init>(Ljava/lang/Object;ILjava/lang/Object;)V
+HSPLandroidx/compose/ui/ZIndexNode$measure$1;->invoke(Landroidx/compose/ui/layout/Placeable$PlacementScope;)V
+HSPLandroidx/compose/ui/ZIndexNode$measure$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
+HSPLandroidx/compose/ui/ZIndexNode$measure$1;->invoke(Ljava/lang/Throwable;)V
+HSPLandroidx/compose/ui/ZIndexNode;-><init>(F)V
+HSPLandroidx/compose/ui/ZIndexNode;->measure-3p2s80s(Landroidx/compose/ui/layout/MeasureScope;Landroidx/compose/ui/layout/Measurable;J)Landroidx/compose/ui/layout/MeasureResult;
+HSPLandroidx/compose/ui/autofill/AndroidAutofill;-><init>(Landroid/view/View;Landroidx/compose/ui/autofill/AutofillTree;)V
+HSPLandroidx/compose/ui/autofill/AutofillCallback;-><clinit>()V
+HSPLandroidx/compose/ui/autofill/AutofillCallback;->register(Landroidx/compose/ui/autofill/AndroidAutofill;)V
+HSPLandroidx/compose/ui/autofill/AutofillTree;-><init>()V
+HSPLandroidx/compose/ui/draw/CacheDrawModifierNodeImpl;-><init>(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;->getDensity()Landroidx/compose/ui/unit/Density;
+HSPLandroidx/compose/ui/draw/CacheDrawModifierNodeImpl;->getLayoutDirection()Landroidx/compose/ui/unit/LayoutDirection;
+HSPLandroidx/compose/ui/draw/CacheDrawModifierNodeImpl;->getSize-NH-jbRc()J
+HSPLandroidx/compose/ui/draw/CacheDrawModifierNodeImpl;->invalidateDrawCache()V
+HSPLandroidx/compose/ui/draw/CacheDrawModifierNodeImpl;->onMeasureResultChanged()V
+HSPLandroidx/compose/ui/draw/CacheDrawScope$onDrawBehind$1;-><init>(ILkotlin/jvm/functions/Function1;)V
+HSPLandroidx/compose/ui/draw/CacheDrawScope$onDrawBehind$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
+HSPLandroidx/compose/ui/draw/CacheDrawScope;-><init>()V
+HSPLandroidx/compose/ui/draw/CacheDrawScope;->getDensity()F
+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/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;
+HSPLandroidx/compose/ui/draw/ClipKt;->drawWithCache(Landroidx/compose/ui/Modifier;Lkotlin/jvm/functions/Function1;)Landroidx/compose/ui/Modifier;
+HSPLandroidx/compose/ui/draw/ClipKt;->paint$default(Landroidx/compose/ui/Modifier;Landroidx/compose/ui/graphics/painter/Painter;Landroidx/compose/ui/Alignment;Landroidx/compose/ui/layout/ContentScale;FLandroidx/compose/ui/graphics/BlendModeColorFilter;)Landroidx/compose/ui/Modifier;
+HSPLandroidx/compose/ui/draw/DrawResult;-><init>(Lkotlin/jvm/functions/Function1;)V
+HSPLandroidx/compose/ui/draw/DrawWithCacheElement;-><init>(Lkotlin/jvm/functions/Function1;)V
+HSPLandroidx/compose/ui/draw/DrawWithCacheElement;->create()Landroidx/compose/ui/Modifier$Node;
+HSPLandroidx/compose/ui/draw/DrawWithCacheElement;->equals(Ljava/lang/Object;)Z
+HSPLandroidx/compose/ui/draw/EmptyBuildDrawCacheParams;-><clinit>()V
+HSPLandroidx/compose/ui/draw/PainterElement;-><init>(Landroidx/compose/ui/graphics/painter/Painter;ZLandroidx/compose/ui/Alignment;Landroidx/compose/ui/layout/ContentScale;FLandroidx/compose/ui/graphics/BlendModeColorFilter;)V
+HSPLandroidx/compose/ui/draw/PainterElement;->create()Landroidx/compose/ui/Modifier$Node;
+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/PainterNode$measure$1;-><init>(Landroidx/compose/ui/layout/Placeable;I)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;
+HSPLandroidx/compose/ui/draw/PainterNode;-><init>(Landroidx/compose/ui/graphics/painter/Painter;ZLandroidx/compose/ui/Alignment;Landroidx/compose/ui/layout/ContentScale;FLandroidx/compose/ui/graphics/BlendModeColorFilter;)V
+HSPLandroidx/compose/ui/draw/PainterNode;->draw(Landroidx/compose/ui/graphics/drawscope/ContentDrawScope;)V
+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/focus/FocusChangedElement;-><init>(Lkotlin/jvm/functions/Function1;)V
+HSPLandroidx/compose/ui/focus/FocusChangedElement;->create()Landroidx/compose/ui/Modifier$Node;
+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/FocusChangedNode;-><init>(Lkotlin/jvm/functions/Function1;)V
+HSPLandroidx/compose/ui/focus/FocusChangedNode;->onFocusEvent(Landroidx/compose/ui/focus/FocusStateImpl;)V
+HSPLandroidx/compose/ui/focus/FocusDirection;-><init>(I)V
+HSPLandroidx/compose/ui/focus/FocusInvalidationManager;-><init>(Landroidx/compose/ui/platform/AndroidComposeView$focusOwner$1;)V
+HSPLandroidx/compose/ui/focus/FocusInvalidationManager;->scheduleInvalidation(Ljava/util/LinkedHashSet;Ljava/lang/Object;)V
+HSPLandroidx/compose/ui/focus/FocusModifierKt;->beamBeats-I7lrPNg(Landroidx/compose/ui/geometry/Rect;Landroidx/compose/ui/geometry/Rect;Landroidx/compose/ui/geometry/Rect;I)Z
+HSPLandroidx/compose/ui/focus/FocusModifierKt;->beamBeats_I7lrPNg$inSourceBeam(ILandroidx/compose/ui/geometry/Rect;Landroidx/compose/ui/geometry/Rect;)Z
+HSPLandroidx/compose/ui/focus/FocusModifierKt;->clearFocus(Landroidx/compose/ui/focus/FocusTargetNode;ZZ)Z
+HSPLandroidx/compose/ui/focus/FocusModifierKt;->collectAccessibleChildren(Landroidx/compose/ui/node/DelegatableNode;Landroidx/compose/runtime/collection/MutableVector;)V
+HSPLandroidx/compose/ui/focus/FocusModifierKt;->findActiveFocusNode(Landroidx/compose/ui/focus/FocusTargetNode;)Landroidx/compose/ui/focus/FocusTargetNode;
+HSPLandroidx/compose/ui/focus/FocusModifierKt;->findBestCandidate-4WY_MpI(Landroidx/compose/runtime/collection/MutableVector;Landroidx/compose/ui/geometry/Rect;I)Landroidx/compose/ui/focus/FocusTargetNode;
+HSPLandroidx/compose/ui/focus/FocusModifierKt;->findChildCorrespondingToFocusEnter--OM-vw8(Landroidx/compose/ui/focus/FocusTargetNode;ILkotlin/jvm/functions/Function1;)Z
+HSPLandroidx/compose/ui/focus/FocusModifierKt;->focusRect(Landroidx/compose/ui/focus/FocusTargetNode;)Landroidx/compose/ui/geometry/Rect;
+HSPLandroidx/compose/ui/focus/FocusModifierKt;->generateAndSearchChildren-4C6V_qg$1(Landroidx/compose/ui/focus/FocusTargetNode;Landroidx/compose/ui/focus/FocusTargetNode;ILkotlin/jvm/functions/Function1;)Z
+HSPLandroidx/compose/ui/focus/FocusModifierKt;->getActiveChild(Landroidx/compose/ui/focus/FocusTargetNode;)Landroidx/compose/ui/focus/FocusTargetNode;
+HSPLandroidx/compose/ui/focus/FocusModifierKt;->getFocusState(Landroidx/compose/ui/focus/FocusEventModifierNode;)Landroidx/compose/ui/focus/FocusStateImpl;
+HSPLandroidx/compose/ui/focus/FocusModifierKt;->grantFocus(Landroidx/compose/ui/focus/FocusTargetNode;)V
+HSPLandroidx/compose/ui/focus/FocusModifierKt;->invalidateFocusEvent(Landroidx/compose/ui/focus/FocusEventModifierNode;)V
+HSPLandroidx/compose/ui/focus/FocusModifierKt;->isBetterCandidate_I7lrPNg$isCandidate(ILandroidx/compose/ui/geometry/Rect;Landroidx/compose/ui/geometry/Rect;)Z
+HSPLandroidx/compose/ui/focus/FocusModifierKt;->isBetterCandidate_I7lrPNg$weightedDistance(ILandroidx/compose/ui/geometry/Rect;Landroidx/compose/ui/geometry/Rect;)J
+HSPLandroidx/compose/ui/focus/FocusModifierKt;->isEligibleForFocusSearch(Landroidx/compose/ui/focus/FocusTargetNode;)Z
+HSPLandroidx/compose/ui/focus/FocusModifierKt;->onFocusChanged(Landroidx/compose/ui/Modifier;Lkotlin/jvm/functions/Function1;)Landroidx/compose/ui/Modifier;
+HSPLandroidx/compose/ui/focus/FocusModifierKt;->performCustomClearFocus-Mxy_nc0(Landroidx/compose/ui/focus/FocusTargetNode;I)I
+HSPLandroidx/compose/ui/focus/FocusModifierKt;->performCustomEnter-Mxy_nc0(Landroidx/compose/ui/focus/FocusTargetNode;I)I
+HSPLandroidx/compose/ui/focus/FocusModifierKt;->performCustomRequestFocus-Mxy_nc0(Landroidx/compose/ui/focus/FocusTargetNode;I)I
+HSPLandroidx/compose/ui/focus/FocusModifierKt;->performRequestFocus(Landroidx/compose/ui/focus/FocusTargetNode;)Z
+HSPLandroidx/compose/ui/focus/FocusModifierKt;->refreshFocusEventNodes(Landroidx/compose/ui/focus/FocusTargetNode;)V
+HSPLandroidx/compose/ui/focus/FocusModifierKt;->requestFocusForChild(Landroidx/compose/ui/focus/FocusTargetNode;Landroidx/compose/ui/focus/FocusTargetNode;)Z
+HSPLandroidx/compose/ui/focus/FocusModifierKt;->requireActiveChild(Landroidx/compose/ui/focus/FocusTargetNode;)Landroidx/compose/ui/focus/FocusTargetNode;
+HSPLandroidx/compose/ui/focus/FocusModifierKt;->requireTransactionManager(Landroidx/compose/ui/focus/FocusTargetNode;)Lcom/google/gson/internal/ConstructorConstructor;
+HSPLandroidx/compose/ui/focus/FocusModifierKt;->searchBeyondBounds--OM-vw8(Landroidx/compose/ui/focus/FocusTargetNode;ILandroidx/compose/ui/focus/FocusOwnerImpl$moveFocus$foundNextItem$1;)Ljava/lang/Object;
+HSPLandroidx/compose/ui/focus/FocusModifierKt;->searchChildren-4C6V_qg$1(Landroidx/compose/ui/focus/FocusTargetNode;Landroidx/compose/ui/focus/FocusTargetNode;ILkotlin/jvm/functions/Function1;)Z
+HSPLandroidx/compose/ui/focus/FocusModifierKt;->twoDimensionalFocusSearch--OM-vw8(Landroidx/compose/ui/focus/FocusTargetNode;ILandroidx/compose/ui/focus/FocusOwnerImpl$moveFocus$foundNextItem$1;)Ljava/lang/Boolean;
+HSPLandroidx/compose/ui/focus/FocusOwnerImpl$modifier$1;-><init>(Landroidx/compose/ui/focus/FocusOwnerImpl;)V
+HSPLandroidx/compose/ui/focus/FocusOwnerImpl$modifier$1;->create()Landroidx/compose/ui/Modifier$Node;
+HSPLandroidx/compose/ui/focus/FocusOwnerImpl$moveFocus$foundNextItem$1;-><init>(Landroidx/compose/ui/focus/FocusTargetNode;Ljava/lang/Object;ILjava/lang/Object;I)V
+HSPLandroidx/compose/ui/focus/FocusOwnerImpl$moveFocus$foundNextItem$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
+HSPLandroidx/compose/ui/focus/FocusOwnerImpl;-><init>(Landroidx/compose/ui/platform/AndroidComposeView$focusOwner$1;)V
+HSPLandroidx/compose/ui/focus/FocusOwnerImpl;->moveFocus-3ESFkO8(I)Z
+HSPLandroidx/compose/ui/focus/FocusProperties$exit$1;-><clinit>()V
+HSPLandroidx/compose/ui/focus/FocusProperties$exit$1;-><init>(I)V
+HSPLandroidx/compose/ui/focus/FocusProperties$exit$1;->invoke(Landroidx/compose/ui/node/AlignmentLinesOwner;)V
+HSPLandroidx/compose/ui/focus/FocusProperties$exit$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
+HSPLandroidx/compose/ui/focus/FocusProperties$exit$1;->invoke-3ESFkO8()Landroidx/compose/ui/focus/FocusRequester;
+HSPLandroidx/compose/ui/focus/FocusPropertiesImpl;-><init>()V
+HSPLandroidx/compose/ui/focus/FocusPropertiesImpl;->setCanFocus(Z)V
+HSPLandroidx/compose/ui/focus/FocusRequester;-><clinit>()V
+HSPLandroidx/compose/ui/focus/FocusRequester;-><init>()V
+HSPLandroidx/compose/ui/focus/FocusStateImpl;-><clinit>()V
+HSPLandroidx/compose/ui/focus/FocusStateImpl;-><init>(ILjava/lang/String;)V
+HSPLandroidx/compose/ui/focus/FocusStateImpl;->isFocused()Z
+HSPLandroidx/compose/ui/focus/FocusTargetNode$FocusTargetElement;-><clinit>()V
+HSPLandroidx/compose/ui/focus/FocusTargetNode$FocusTargetElement;-><init>()V
+HSPLandroidx/compose/ui/focus/FocusTargetNode$FocusTargetElement;->create()Landroidx/compose/ui/Modifier$Node;
+HSPLandroidx/compose/ui/focus/FocusTargetNode$FocusTargetElement;->equals(Ljava/lang/Object;)Z
+HSPLandroidx/compose/ui/focus/FocusTargetNode;-><init>()V
+HSPLandroidx/compose/ui/focus/FocusTargetNode;->fetchFocusProperties$ui_release()Landroidx/compose/ui/focus/FocusPropertiesImpl;
+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
+HSPLandroidx/compose/ui/geometry/CornerRadius;-><clinit>()V
+HSPLandroidx/compose/ui/geometry/CornerRadius;->getX-impl(J)F
+HSPLandroidx/compose/ui/geometry/CornerRadius;->getY-impl(J)F
+HSPLandroidx/compose/ui/geometry/MutableRect;-><init>()V
+HSPLandroidx/compose/ui/geometry/MutableRect;->isEmpty()Z
+HSPLandroidx/compose/ui/geometry/Offset;-><clinit>()V
+HSPLandroidx/compose/ui/geometry/Offset;->getX-impl(J)F
+HSPLandroidx/compose/ui/geometry/Offset;->getY-impl(J)F
+HSPLandroidx/compose/ui/geometry/Rect;-><clinit>()V
+HSPLandroidx/compose/ui/geometry/Rect;-><init>(FFFF)V
+HSPLandroidx/compose/ui/geometry/Rect;->equals(Ljava/lang/Object;)Z
+HSPLandroidx/compose/ui/geometry/Rect;->intersect(Landroidx/compose/ui/geometry/Rect;)Landroidx/compose/ui/geometry/Rect;
+HSPLandroidx/compose/ui/geometry/Rect;->translate(FF)Landroidx/compose/ui/geometry/Rect;
+HSPLandroidx/compose/ui/geometry/Rect;->translate-k-4lQ0M(J)Landroidx/compose/ui/geometry/Rect;
+HSPLandroidx/compose/ui/geometry/RoundRect;-><clinit>()V
+HSPLandroidx/compose/ui/geometry/RoundRect;-><init>(FFFFJJJJ)V
+HSPLandroidx/compose/ui/geometry/Size;-><clinit>()V
+HSPLandroidx/compose/ui/geometry/Size;-><init>(J)V
+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/graphics/AndroidCanvas;-><init>()V
+HSPLandroidx/compose/ui/graphics/AndroidCanvas;->drawImageRect-HPBpro0(Landroidx/compose/ui/graphics/ImageBitmap;JJJJLandroidx/compose/ui/graphics/AndroidPaint;)V
+HSPLandroidx/compose/ui/graphics/AndroidCanvas;->drawRect(FFFFLandroidx/compose/ui/graphics/AndroidPaint;)V
+HSPLandroidx/compose/ui/graphics/AndroidCanvas;->drawRoundRect(FFFFFFLandroidx/compose/ui/graphics/AndroidPaint;)V
+HSPLandroidx/compose/ui/graphics/AndroidCanvas;->restore()V
+HSPLandroidx/compose/ui/graphics/AndroidCanvas;->save()V
+HSPLandroidx/compose/ui/graphics/AndroidCanvas;->scale(FF)V
+HSPLandroidx/compose/ui/graphics/AndroidCanvas;->translate(FF)V
+HSPLandroidx/compose/ui/graphics/AndroidCanvas_androidKt;-><clinit>()V
+HSPLandroidx/compose/ui/graphics/AndroidImageBitmap;-><init>(Landroid/graphics/Bitmap;)V
+HSPLandroidx/compose/ui/graphics/AndroidPaint;-><init>(Landroid/graphics/Paint;)V
+HSPLandroidx/compose/ui/graphics/AndroidPaint;->setAlpha(F)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;->setStyle-k9PVt8s(I)V
+HSPLandroidx/compose/ui/graphics/AndroidPaint_androidKt$WhenMappings;-><clinit>()V
+HSPLandroidx/compose/ui/graphics/BlockGraphicsLayerElement;-><init>(Lkotlin/jvm/functions/Function1;)V
+HSPLandroidx/compose/ui/graphics/BlockGraphicsLayerElement;->create()Landroidx/compose/ui/Modifier$Node;
+HSPLandroidx/compose/ui/graphics/BlockGraphicsLayerElement;->equals(Ljava/lang/Object;)Z
+HSPLandroidx/compose/ui/graphics/BlockGraphicsLayerModifier;-><init>(Lkotlin/jvm/functions/Function1;)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/Brush;-><init>()V
+HSPLandroidx/compose/ui/graphics/BrushKt;-><clinit>()V
+HSPLandroidx/compose/ui/graphics/BrushKt;->Color$default(III)J
+HSPLandroidx/compose/ui/graphics/BrushKt;->Color(FFFFLandroidx/compose/ui/graphics/colorspace/ColorSpace;)J
+HSPLandroidx/compose/ui/graphics/BrushKt;->Color(I)J
+HSPLandroidx/compose/ui/graphics/BrushKt;->Color(J)J
+HSPLandroidx/compose/ui/graphics/BrushKt;->Paint()Landroidx/compose/ui/graphics/AndroidPaint;
+HSPLandroidx/compose/ui/graphics/BrushKt;->drawOutline-wDX37Ww$default(Landroidx/compose/ui/graphics/drawscope/DrawScope;Landroidx/compose/ui/graphics/BrushKt;J)V
+HSPLandroidx/compose/ui/graphics/BrushKt;->graphicsLayer(Landroidx/compose/ui/Modifier;Lkotlin/jvm/functions/Function1;)Landroidx/compose/ui/Modifier;
+HSPLandroidx/compose/ui/graphics/BrushKt;->graphicsLayer-Ap8cVGQ$default(Landroidx/compose/ui/Modifier;FFLandroidx/compose/ui/graphics/Shape;ZI)Landroidx/compose/ui/Modifier;
+HSPLandroidx/compose/ui/graphics/BrushKt;->setFrom-tU-YjHk(Landroid/graphics/Matrix;[F)V
+HSPLandroidx/compose/ui/graphics/BrushKt;->toArgb-8_81llA(J)I
+HSPLandroidx/compose/ui/graphics/CanvasZHelper$$ExternalSyntheticApiModelOutline0;->m$1(Landroid/graphics/RenderNode;)I
+HSPLandroidx/compose/ui/graphics/CanvasZHelper$$ExternalSyntheticApiModelOutline0;->m$1(Landroid/graphics/RenderNode;F)V
+HSPLandroidx/compose/ui/graphics/CanvasZHelper$$ExternalSyntheticApiModelOutline0;->m$1(Landroid/graphics/RenderNode;I)V
+HSPLandroidx/compose/ui/graphics/CanvasZHelper$$ExternalSyntheticApiModelOutline0;->m$2(Landroid/graphics/RenderNode;F)V
+HSPLandroidx/compose/ui/graphics/CanvasZHelper$$ExternalSyntheticApiModelOutline0;->m$2(Landroid/graphics/RenderNode;I)V
+HSPLandroidx/compose/ui/graphics/CanvasZHelper$$ExternalSyntheticApiModelOutline0;->m$3(Landroid/graphics/RenderNode;F)V
+HSPLandroidx/compose/ui/graphics/CanvasZHelper$$ExternalSyntheticApiModelOutline0;->m$4(Landroid/graphics/RenderNode;F)V
+HSPLandroidx/compose/ui/graphics/CanvasZHelper$$ExternalSyntheticApiModelOutline0;->m$5(Landroid/graphics/RenderNode;F)V
+HSPLandroidx/compose/ui/graphics/CanvasZHelper$$ExternalSyntheticApiModelOutline0;->m$6(Landroid/graphics/RenderNode;F)V
+HSPLandroidx/compose/ui/graphics/CanvasZHelper$$ExternalSyntheticApiModelOutline0;->m$7(Landroid/graphics/RenderNode;F)V
+HSPLandroidx/compose/ui/graphics/CanvasZHelper$$ExternalSyntheticApiModelOutline0;->m$8(Landroid/graphics/RenderNode;F)V
+HSPLandroidx/compose/ui/graphics/CanvasZHelper$$ExternalSyntheticApiModelOutline0;->m(Landroid/graphics/Canvas;Landroid/graphics/RenderNode;)V
+HSPLandroidx/compose/ui/graphics/CanvasZHelper$$ExternalSyntheticApiModelOutline0;->m(Landroid/graphics/RenderNode;)I
+HSPLandroidx/compose/ui/graphics/CanvasZHelper$$ExternalSyntheticApiModelOutline0;->m(Landroid/graphics/RenderNode;)V
+HSPLandroidx/compose/ui/graphics/CanvasZHelper$$ExternalSyntheticApiModelOutline0;->m(Landroid/graphics/RenderNode;)Z
+HSPLandroidx/compose/ui/graphics/CanvasZHelper$$ExternalSyntheticApiModelOutline0;->m(Landroid/graphics/RenderNode;F)V
+HSPLandroidx/compose/ui/graphics/CanvasZHelper$$ExternalSyntheticApiModelOutline0;->m(Landroid/graphics/RenderNode;I)V
+HSPLandroidx/compose/ui/graphics/CanvasZHelper$$ExternalSyntheticApiModelOutline0;->m(Landroid/graphics/RenderNode;Z)V
+HSPLandroidx/compose/ui/graphics/CanvasZHelper$$ExternalSyntheticApiModelOutline0;->m(Landroid/view/View;)V
+HSPLandroidx/compose/ui/graphics/Color;-><clinit>()V
+HSPLandroidx/compose/ui/graphics/Color;-><init>(J)V
+HSPLandroidx/compose/ui/graphics/Color;->convert-vNxB06k(JLandroidx/compose/ui/graphics/colorspace/ColorSpace;)J
+HSPLandroidx/compose/ui/graphics/Color;->copy-wmQWz5c$default(JF)J
+HSPLandroidx/compose/ui/graphics/Color;->equals(Ljava/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/ColorSpaceVerificationHelper$$ExternalSyntheticLambda1;-><init>(ILjava/lang/Object;)V
+HSPLandroidx/compose/ui/graphics/Float16;-><clinit>()V
+HSPLandroidx/compose/ui/graphics/Float16;->constructor-impl(F)S
+HSPLandroidx/compose/ui/graphics/Float16;->toFloat-impl(S)F
+HSPLandroidx/compose/ui/graphics/GraphicsLayerElement;-><init>(FFFFFFFFFFJLandroidx/compose/ui/graphics/Shape;ZJJI)V
+HSPLandroidx/compose/ui/graphics/GraphicsLayerElement;->create()Landroidx/compose/ui/Modifier$Node;
+HSPLandroidx/compose/ui/graphics/GraphicsLayerElement;->equals(Ljava/lang/Object;)Z
+HSPLandroidx/compose/ui/graphics/GraphicsLayerElement;->update(Landroidx/compose/ui/Modifier$Node;)V
+HSPLandroidx/compose/ui/graphics/GraphicsLayerScopeKt;-><clinit>()V
+HSPLandroidx/compose/ui/graphics/Matrix;->constructor-impl$default()[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/Outline$Rectangle;-><init>(Landroidx/compose/ui/geometry/Rect;)V
+HSPLandroidx/compose/ui/graphics/Outline$Rounded;-><init>(Landroidx/compose/ui/geometry/RoundRect;)V
+HSPLandroidx/compose/ui/graphics/RectangleShapeKt$RectangleShape$1;-><init>(I)V
+HSPLandroidx/compose/ui/graphics/RectangleShapeKt$RectangleShape$1;->createOutline-Pq9zytI(JLandroidx/compose/ui/unit/LayoutDirection;Landroidx/compose/ui/unit/Density;)Landroidx/compose/ui/graphics/BrushKt;
+HSPLandroidx/compose/ui/graphics/ReusableGraphicsLayerScope;-><init>()V
+HSPLandroidx/compose/ui/graphics/Shadow;-><clinit>()V
+HSPLandroidx/compose/ui/graphics/Shadow;-><init>(JJF)V
+HSPLandroidx/compose/ui/graphics/Shadow;->equals(Ljava/lang/Object;)Z
+HSPLandroidx/compose/ui/graphics/SimpleGraphicsLayerModifier$layerBlock$1;-><init>(Landroidx/compose/ui/graphics/SimpleGraphicsLayerModifier;)V
+HSPLandroidx/compose/ui/graphics/SimpleGraphicsLayerModifier$layerBlock$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
+HSPLandroidx/compose/ui/graphics/SimpleGraphicsLayerModifier;-><init>(FFFFFFFFFFJLandroidx/compose/ui/graphics/Shape;ZJJI)V
+HSPLandroidx/compose/ui/graphics/SimpleGraphicsLayerModifier;->getShouldAutoInvalidate()Z
+HSPLandroidx/compose/ui/graphics/SimpleGraphicsLayerModifier;->measure-3p2s80s(Landroidx/compose/ui/layout/MeasureScope;Landroidx/compose/ui/layout/Measurable;J)Landroidx/compose/ui/layout/MeasureResult;
+HSPLandroidx/compose/ui/graphics/SolidColor;-><init>(J)V
+HSPLandroidx/compose/ui/graphics/SolidColor;->applyTo-Pq9zytI(FJLandroidx/compose/ui/graphics/AndroidPaint;)V
+HSPLandroidx/compose/ui/graphics/SolidColor;->equals(Ljava/lang/Object;)Z
+HSPLandroidx/compose/ui/graphics/TransformOrigin;-><clinit>()V
+HSPLandroidx/compose/ui/graphics/colorspace/Adaptation;-><clinit>()V
+HSPLandroidx/compose/ui/graphics/colorspace/Adaptation;-><init>([F)V
+HSPLandroidx/compose/ui/graphics/colorspace/ColorModel;-><clinit>()V
+HSPLandroidx/compose/ui/graphics/colorspace/ColorModel;->equals-impl0(JJ)Z
+HSPLandroidx/compose/ui/graphics/colorspace/ColorSpace;-><init>(Ljava/lang/String;JI)V
+HSPLandroidx/compose/ui/graphics/colorspace/ColorSpace;->equals(Ljava/lang/Object;)Z
+HSPLandroidx/compose/ui/graphics/colorspace/ColorSpace;->isSrgb()Z
+HSPLandroidx/compose/ui/graphics/colorspace/ColorSpaces;-><clinit>()V
+HSPLandroidx/compose/ui/graphics/colorspace/Connector$Companion$identity$1;-><init>(Landroidx/compose/ui/graphics/colorspace/ColorSpace;)V
+HSPLandroidx/compose/ui/graphics/colorspace/Connector;-><clinit>()V
+HSPLandroidx/compose/ui/graphics/colorspace/Connector;-><init>(Landroidx/compose/ui/graphics/colorspace/ColorSpace;Landroidx/compose/ui/graphics/colorspace/ColorSpace;I)V
+HSPLandroidx/compose/ui/graphics/colorspace/Connector;-><init>(Landroidx/compose/ui/graphics/colorspace/ColorSpace;Landroidx/compose/ui/graphics/colorspace/ColorSpace;Landroidx/compose/ui/graphics/colorspace/ColorSpace;[F)V
+HSPLandroidx/compose/ui/graphics/colorspace/Connector;->transformToColor-wmQWz5c$ui_graphics_release(FFFF)J
+HSPLandroidx/compose/ui/graphics/colorspace/Lab;-><init>()V
+HSPLandroidx/compose/ui/graphics/colorspace/Oklab;-><clinit>()V
+HSPLandroidx/compose/ui/graphics/colorspace/Oklab;-><init>()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
+HSPLandroidx/compose/ui/graphics/colorspace/Rgb$$ExternalSyntheticLambda0;-><init>(Landroidx/compose/ui/graphics/colorspace/Rgb;I)V
+HSPLandroidx/compose/ui/graphics/colorspace/Rgb$$ExternalSyntheticLambda0;->invoke(D)D
+HSPLandroidx/compose/ui/graphics/colorspace/Rgb$$ExternalSyntheticLambda1;-><init>(Landroidx/compose/ui/graphics/colorspace/TransferParameters;I)V
+HSPLandroidx/compose/ui/graphics/colorspace/Rgb$$ExternalSyntheticLambda1;->invoke(D)D
+HSPLandroidx/compose/ui/graphics/colorspace/Rgb$$ExternalSyntheticLambda2;-><init>(DI)V
+HSPLandroidx/compose/ui/graphics/colorspace/Rgb$eotf$1;-><init>(Landroidx/compose/ui/graphics/colorspace/Rgb;I)V
+HSPLandroidx/compose/ui/graphics/colorspace/Rgb;-><clinit>()V
+HSPLandroidx/compose/ui/graphics/colorspace/Rgb;-><init>(Ljava/lang/String;[FLandroidx/compose/ui/graphics/colorspace/WhitePoint;DFFI)V
+HSPLandroidx/compose/ui/graphics/colorspace/Rgb;-><init>(Ljava/lang/String;[FLandroidx/compose/ui/graphics/colorspace/WhitePoint;Landroidx/compose/ui/graphics/colorspace/TransferParameters;I)V
+HSPLandroidx/compose/ui/graphics/colorspace/Rgb;-><init>(Ljava/lang/String;[FLandroidx/compose/ui/graphics/colorspace/WhitePoint;[FLandroidx/compose/ui/graphics/colorspace/DoubleFunction;Landroidx/compose/ui/graphics/colorspace/DoubleFunction;FFLandroidx/compose/ui/graphics/colorspace/TransferParameters;I)V
+HSPLandroidx/compose/ui/graphics/colorspace/Rgb;->equals(Ljava/lang/Object;)Z
+HSPLandroidx/compose/ui/graphics/colorspace/Rgb;->getMaxValue(I)F
+HSPLandroidx/compose/ui/graphics/colorspace/Rgb;->getMinValue(I)F
+HSPLandroidx/compose/ui/graphics/colorspace/Rgb;->isSrgb()Z
+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
+HSPLandroidx/compose/ui/graphics/colorspace/TransferParameters;-><init>(DDDDD)V
+HSPLandroidx/compose/ui/graphics/colorspace/TransferParameters;-><init>(DDDDDDD)V
+HSPLandroidx/compose/ui/graphics/colorspace/WhitePoint;-><init>(FF)V
+HSPLandroidx/compose/ui/graphics/colorspace/WhitePoint;->toXyz$ui_graphics_release()[F
+HSPLandroidx/compose/ui/graphics/colorspace/Xyz;-><init>()V
+HSPLandroidx/compose/ui/graphics/drawscope/CanvasDrawScope$DrawParams;-><init>()V
+HSPLandroidx/compose/ui/graphics/drawscope/CanvasDrawScope$drawContext$1;-><init>(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;->setSize-uvyYCjk(J)V
+HSPLandroidx/compose/ui/graphics/drawscope/CanvasDrawScope;-><init>()V
+HSPLandroidx/compose/ui/graphics/drawscope/CanvasDrawScope;->configurePaint-2qPWKa0$default(Landroidx/compose/ui/graphics/drawscope/CanvasDrawScope;JLkotlin/ResultKt;FLandroidx/compose/ui/graphics/BlendModeColorFilter;I)Landroidx/compose/ui/graphics/AndroidPaint;
+HSPLandroidx/compose/ui/graphics/drawscope/CanvasDrawScope;->configurePaint-swdJneE$default(Landroidx/compose/ui/graphics/drawscope/CanvasDrawScope;Landroidx/compose/ui/graphics/Brush;Lkotlin/ResultKt;FLandroidx/compose/ui/graphics/BlendModeColorFilter;I)Landroidx/compose/ui/graphics/AndroidPaint;
+HSPLandroidx/compose/ui/graphics/drawscope/CanvasDrawScope;->configurePaint-swdJneE(Landroidx/compose/ui/graphics/Brush;Lkotlin/ResultKt;FLandroidx/compose/ui/graphics/BlendModeColorFilter;II)Landroidx/compose/ui/graphics/AndroidPaint;
+HSPLandroidx/compose/ui/graphics/drawscope/CanvasDrawScope;->drawImage-AZ2fEMs(Landroidx/compose/ui/graphics/ImageBitmap;JJJJFLkotlin/ResultKt;Landroidx/compose/ui/graphics/BlendModeColorFilter;II)V
+HSPLandroidx/compose/ui/graphics/drawscope/CanvasDrawScope;->drawRect-AsUm42w(Landroidx/compose/ui/graphics/Brush;JJFLkotlin/ResultKt;Landroidx/compose/ui/graphics/BlendModeColorFilter;I)V
+HSPLandroidx/compose/ui/graphics/drawscope/CanvasDrawScope;->drawRect-n-J9OG0(JJJFLkotlin/ResultKt;Landroidx/compose/ui/graphics/BlendModeColorFilter;I)V
+HSPLandroidx/compose/ui/graphics/drawscope/CanvasDrawScope;->drawRoundRect-u-Aw5IA(JJJJLkotlin/ResultKt;FLandroidx/compose/ui/graphics/BlendModeColorFilter;I)V
+HSPLandroidx/compose/ui/graphics/drawscope/CanvasDrawScope;->getDensity()F
+HSPLandroidx/compose/ui/graphics/drawscope/CanvasDrawScope;->getDrawContext()Landroidx/compose/ui/graphics/drawscope/CanvasDrawScope$drawContext$1;
+HSPLandroidx/compose/ui/graphics/drawscope/CanvasDrawScope;->getFontScale()F
+HSPLandroidx/compose/ui/graphics/drawscope/CanvasDrawScope;->selectPaint(Lkotlin/ResultKt;)Landroidx/compose/ui/graphics/AndroidPaint;
+HSPLandroidx/compose/ui/graphics/drawscope/CanvasDrawScopeKt$asDrawTransform$1;-><init>(Landroidx/compose/ui/graphics/drawscope/CanvasDrawScope$drawContext$1;)V
+HSPLandroidx/compose/ui/graphics/drawscope/CanvasDrawScopeKt$asDrawTransform$1;->inset(FFFF)V
+HSPLandroidx/compose/ui/graphics/drawscope/CanvasDrawScopeKt$asDrawTransform$1;->scale-0AR0LA0(FFJ)V
+HSPLandroidx/compose/ui/graphics/drawscope/CanvasDrawScopeKt$asDrawTransform$1;->translate(FF)V
+HSPLandroidx/compose/ui/graphics/drawscope/DrawScope;->drawImage-AZ2fEMs$default(Landroidx/compose/ui/graphics/drawscope/DrawScope;Landroidx/compose/ui/graphics/ImageBitmap;JJJFLandroidx/compose/ui/graphics/BlendModeColorFilter;II)V
+HSPLandroidx/compose/ui/graphics/drawscope/DrawScope;->drawRect-AsUm42w$default(Landroidx/compose/ui/graphics/drawscope/DrawScope;Landroidx/compose/ui/graphics/Brush;JJFLkotlin/ResultKt;I)V
+HSPLandroidx/compose/ui/graphics/drawscope/DrawScope;->drawRect-n-J9OG0$default(Landroidx/compose/ui/graphics/drawscope/DrawScope;JJI)V
+HSPLandroidx/compose/ui/graphics/drawscope/DrawScope;->getCenter-F1C5BW0()J
+HSPLandroidx/compose/ui/graphics/drawscope/DrawScope;->getSize-NH-jbRc()J
+HSPLandroidx/compose/ui/graphics/drawscope/DrawScope;->offsetSize-PENXr5M(JJ)J
+HSPLandroidx/compose/ui/graphics/drawscope/Fill;-><clinit>()V
+HSPLandroidx/compose/ui/graphics/drawscope/Stroke;-><init>(FFIII)V
+HSPLandroidx/compose/ui/graphics/drawscope/Stroke;->equals(Ljava/lang/Object;)Z
+HSPLandroidx/compose/ui/graphics/painter/BitmapPainter;-><init>(Landroidx/compose/ui/graphics/ImageBitmap;)V
+HSPLandroidx/compose/ui/graphics/painter/BitmapPainter;->equals(Ljava/lang/Object;)Z
+HSPLandroidx/compose/ui/graphics/painter/BitmapPainter;->getIntrinsicSize-NH-jbRc()J
+HSPLandroidx/compose/ui/graphics/painter/BitmapPainter;->onDraw(Landroidx/compose/ui/graphics/drawscope/DrawScope;)V
+HSPLandroidx/compose/ui/graphics/painter/Painter;-><init>()V
+HSPLandroidx/compose/ui/input/InputMode;-><init>(I)V
+HSPLandroidx/compose/ui/input/InputMode;->equals(Ljava/lang/Object;)Z
+HSPLandroidx/compose/ui/input/InputModeManagerImpl;-><init>(I)V
+HSPLandroidx/compose/ui/input/key/Key;-><clinit>()V
+HSPLandroidx/compose/ui/input/key/Key;->equals-impl0(JJ)Z
+HSPLandroidx/compose/ui/input/key/KeyEvent;-><init>(Landroid/view/KeyEvent;)V
+HSPLandroidx/compose/ui/input/key/KeyInputElement;-><init>(Lkotlin/jvm/functions/Function1;)V
+HSPLandroidx/compose/ui/input/key/KeyInputElement;->create()Landroidx/compose/ui/Modifier$Node;
+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/KeyInputNode;-><init>(Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function1;)V
+HSPLandroidx/compose/ui/input/key/Key_androidKt;->Key(I)J
+HSPLandroidx/compose/ui/input/key/Key_androidKt;->onKeyEvent(Landroidx/compose/ui/Modifier;Lkotlin/jvm/functions/Function1;)Landroidx/compose/ui/Modifier;
+HSPLandroidx/compose/ui/input/nestedscroll/NestedScrollDispatcher;-><init>()V
+HSPLandroidx/compose/ui/input/nestedscroll/NestedScrollNode;-><init>(Landroidx/compose/foundation/gestures/ScrollableNestedScrollConnection;Landroidx/compose/ui/input/nestedscroll/NestedScrollDispatcher;)V
+HSPLandroidx/compose/ui/input/nestedscroll/NestedScrollNode;->getProvidedValues()Landroidx/tv/material3/TabKt;
+HSPLandroidx/compose/ui/input/nestedscroll/NestedScrollNode;->onAttach()V
+HSPLandroidx/compose/ui/input/nestedscroll/NestedScrollNodeKt;-><clinit>()V
+HSPLandroidx/compose/ui/input/pointer/AndroidPointerIconType;-><init>(I)V
+HSPLandroidx/compose/ui/input/pointer/MotionEventAdapter;-><init>()V
+HSPLandroidx/compose/ui/input/pointer/NodeParent;-><init>()V
+HSPLandroidx/compose/ui/input/pointer/PointerEvent;-><init>(Ljava/util/List;Lcom/google/gson/internal/ConstructorConstructor;)V
+HSPLandroidx/compose/ui/input/pointer/PointerIcon;-><clinit>()V
+HSPLandroidx/compose/ui/input/pointer/PointerKeyboardModifiers;-><init>(I)V
+HSPLandroidx/compose/ui/input/pointer/PointerKeyboardModifiers;->equals(Ljava/lang/Object;)Z
+HSPLandroidx/compose/ui/input/pointer/SuspendPointerInputElement;-><init>(Ljava/lang/Object;Lokhttp3/MediaType;Lkotlin/jvm/functions/Function2;I)V
+HSPLandroidx/compose/ui/input/pointer/SuspendPointerInputElement;->create()Landroidx/compose/ui/Modifier$Node;
+HSPLandroidx/compose/ui/input/pointer/SuspendingPointerInputFilterKt;-><clinit>()V
+HSPLandroidx/compose/ui/input/pointer/SuspendingPointerInputFilterKt;->pointerInput(Landroidx/compose/ui/Modifier;Ljava/lang/Object;Lkotlin/jvm/functions/Function2;)Landroidx/compose/ui/Modifier;
+HSPLandroidx/compose/ui/input/pointer/SuspendingPointerInputModifierNodeImpl;-><init>(Lkotlin/jvm/functions/Function2;)V
+HSPLandroidx/compose/ui/input/pointer/util/PointerIdArray;-><init>(FF)V
+HSPLandroidx/compose/ui/input/pointer/util/PointerIdArray;-><init>(FFLandroidx/compose/animation/core/AnimationVector;)V
+HSPLandroidx/compose/ui/input/pointer/util/PointerIdArray;-><init>(I[Landroidx/core/provider/FontsContractCompat$FontInfo;)V
+HSPLandroidx/compose/ui/input/pointer/util/PointerIdArray;-><init>(Landroidx/compose/animation/core/FloatAnimationSpec;)V
+HSPLandroidx/compose/ui/input/pointer/util/PointerIdArray;-><init>(Landroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/TrieNode;I)V
+HSPLandroidx/compose/ui/input/pointer/util/PointerIdArray;->get(I)Landroidx/compose/animation/core/FloatAnimationSpec;
+HSPLandroidx/compose/ui/input/pointer/util/VelocityTracker1D;-><init>()V
+HSPLandroidx/compose/ui/input/pointer/util/VelocityTracker;-><init>()V
+HSPLandroidx/compose/ui/input/rotary/RotaryInputElement;-><init>()V
+HSPLandroidx/compose/ui/input/rotary/RotaryInputElement;->create()Landroidx/compose/ui/Modifier$Node;
+HSPLandroidx/compose/ui/input/rotary/RotaryInputModifierKt;->onRotaryScrollEvent()Landroidx/compose/ui/Modifier;
+HSPLandroidx/compose/ui/input/rotary/RotaryInputNode;-><init>(Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function1;)V
+HSPLandroidx/compose/ui/layout/AlignmentLine;-><init>(Lkotlin/jvm/functions/Function2;)V
+HSPLandroidx/compose/ui/layout/AlignmentLineKt$FirstBaseline$1;-><clinit>()V
+HSPLandroidx/compose/ui/layout/AlignmentLineKt$FirstBaseline$1;-><init>()V
+HSPLandroidx/compose/ui/layout/AlignmentLineKt$LastBaseline$1;-><clinit>()V
+HSPLandroidx/compose/ui/layout/AlignmentLineKt$LastBaseline$1;-><init>()V
+HSPLandroidx/compose/ui/layout/AlignmentLineKt;-><clinit>()V
+HSPLandroidx/compose/ui/layout/BeyondBoundsLayoutKt;-><clinit>()V
+HSPLandroidx/compose/ui/layout/ComposableSingletons$SubcomposeLayoutKt;-><clinit>()V
+HSPLandroidx/compose/ui/layout/DefaultIntrinsicMeasurable;-><init>(Landroidx/compose/ui/layout/Measurable;Ljava/lang/Enum;Ljava/lang/Enum;I)V
+HSPLandroidx/compose/ui/layout/DefaultIntrinsicMeasurable;->getParentData()Ljava/lang/Object;
+HSPLandroidx/compose/ui/layout/FixedSizeIntrinsicsPlaceable;-><init>(III)V
+HSPLandroidx/compose/ui/layout/IntrinsicMinMax;-><clinit>()V
+HSPLandroidx/compose/ui/layout/IntrinsicMinMax;-><init>(ILjava/lang/String;)V
+HSPLandroidx/compose/ui/layout/IntrinsicWidthHeight;-><clinit>()V
+HSPLandroidx/compose/ui/layout/IntrinsicWidthHeight;-><init>(ILjava/lang/String;)V
+HSPLandroidx/compose/ui/layout/IntrinsicsMeasureScope;-><init>(Landroidx/compose/ui/layout/IntrinsicMeasureScope;Landroidx/compose/ui/unit/LayoutDirection;)V
+HSPLandroidx/compose/ui/layout/IntrinsicsMeasureScope;->roundToPx-0680j_4(F)I
+HSPLandroidx/compose/ui/layout/LayoutElement;-><init>(Lkotlin/jvm/functions/Function3;)V
+HSPLandroidx/compose/ui/layout/LayoutElement;->create()Landroidx/compose/ui/Modifier$Node;
+HSPLandroidx/compose/ui/layout/LayoutElement;->equals(Ljava/lang/Object;)Z
+HSPLandroidx/compose/ui/layout/LayoutKt$materializerOf$1;-><init>(Landroidx/compose/ui/Modifier;I)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;)V
+HSPLandroidx/compose/ui/layout/LayoutKt;->ScaleFactor(FF)J
+HSPLandroidx/compose/ui/layout/LayoutKt;->SubcomposeLayout(Landroidx/compose/ui/Modifier;Lkotlin/jvm/functions/Function2;Landroidx/compose/runtime/Composer;II)V
+HSPLandroidx/compose/ui/layout/LayoutKt;->SubcomposeLayout(Landroidx/compose/ui/layout/SubcomposeLayoutState;Landroidx/compose/ui/Modifier;Lkotlin/jvm/functions/Function2;Landroidx/compose/runtime/Composer;II)V
+HSPLandroidx/compose/ui/layout/LayoutKt;->findRootCoordinates(Landroidx/compose/ui/node/NodeCoordinator;)Landroidx/compose/ui/layout/LayoutCoordinates;
+HSPLandroidx/compose/ui/layout/LayoutKt;->layout(Landroidx/compose/ui/Modifier;Lkotlin/jvm/functions/Function3;)Landroidx/compose/ui/Modifier;
+HSPLandroidx/compose/ui/layout/LayoutKt;->modifierMaterializerOf(Landroidx/compose/ui/Modifier;)Landroidx/compose/runtime/internal/ComposableLambdaImpl;
+HSPLandroidx/compose/ui/layout/LayoutKt;->times-UQTWf7w(JJ)J
+HSPLandroidx/compose/ui/layout/LayoutModifierImpl;-><init>(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/LayoutNodeSubcompositionsState$NodeState;-><init>(Ljava/lang/Object;Landroidx/compose/runtime/internal/ComposableLambdaImpl;)V
+HSPLandroidx/compose/ui/layout/LayoutNodeSubcompositionsState$PostLookaheadMeasureScopeImpl;-><init>(Landroidx/compose/ui/layout/LayoutNodeSubcompositionsState;)V
+HSPLandroidx/compose/ui/layout/LayoutNodeSubcompositionsState$Scope;-><init>(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;->isLookingAhead()Z
+HSPLandroidx/compose/ui/layout/LayoutNodeSubcompositionsState$Scope;->subcompose(Ljava/lang/Object;Lkotlin/jvm/functions/Function2;)Ljava/util/List;
+HSPLandroidx/compose/ui/layout/LayoutNodeSubcompositionsState$createMeasurePolicy$1$measure-3p2s80s$$inlined$createMeasureResult$1;-><init>(Landroidx/compose/ui/layout/MeasureResult;Landroidx/compose/ui/layout/LayoutNodeSubcompositionsState;ILandroidx/compose/ui/layout/MeasureResult;I)V
+HSPLandroidx/compose/ui/layout/LayoutNodeSubcompositionsState$createMeasurePolicy$1$measure-3p2s80s$$inlined$createMeasureResult$1;->getAlignmentLines()Ljava/util/Map;
+HSPLandroidx/compose/ui/layout/LayoutNodeSubcompositionsState$createMeasurePolicy$1$measure-3p2s80s$$inlined$createMeasureResult$1;->getHeight()I
+HSPLandroidx/compose/ui/layout/LayoutNodeSubcompositionsState$createMeasurePolicy$1$measure-3p2s80s$$inlined$createMeasureResult$1;->getWidth()I
+HSPLandroidx/compose/ui/layout/LayoutNodeSubcompositionsState$createMeasurePolicy$1$measure-3p2s80s$$inlined$createMeasureResult$1;->placeChildren()V
+HSPLandroidx/compose/ui/layout/LayoutNodeSubcompositionsState$createMeasurePolicy$1;-><init>(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;
+HSPLandroidx/compose/ui/layout/LayoutNodeSubcompositionsState$precompose$1;-><init>(Landroidx/compose/ui/layout/LayoutNodeSubcompositionsState;Ljava/lang/Object;)V
+HSPLandroidx/compose/ui/layout/LayoutNodeSubcompositionsState$precompose$1;->dispose()V
+HSPLandroidx/compose/ui/layout/LayoutNodeSubcompositionsState$precompose$1;->premeasure-0kLqBqw(JI)V
+HSPLandroidx/compose/ui/layout/LayoutNodeSubcompositionsState;-><init>(Landroidx/compose/ui/node/LayoutNode;Landroidx/compose/ui/layout/SubcomposeSlotReusePolicy;)V
+HSPLandroidx/compose/ui/layout/LayoutNodeSubcompositionsState;->disposeOrReuseStartingFromIndex(I)V
+HSPLandroidx/compose/ui/layout/LayoutNodeSubcompositionsState;->makeSureStateIsConsistent()V
+HSPLandroidx/compose/ui/layout/LayoutNodeSubcompositionsState;->precompose(Ljava/lang/Object;Lkotlin/jvm/functions/Function2;)Landroidx/compose/ui/layout/LayoutNodeSubcompositionsState$precompose$1;
+HSPLandroidx/compose/ui/layout/LayoutNodeSubcompositionsState;->subcompose(Landroidx/compose/ui/node/LayoutNode;Ljava/lang/Object;Lkotlin/jvm/functions/Function2;)V
+HSPLandroidx/compose/ui/layout/LayoutNodeSubcompositionsState;->takeNodeFromReusables(Ljava/lang/Object;)Landroidx/compose/ui/node/LayoutNode;
+HSPLandroidx/compose/ui/layout/MeasurePolicy;->maxIntrinsicHeight(Landroidx/compose/ui/node/NodeCoordinator;Ljava/util/List;I)I
+HSPLandroidx/compose/ui/layout/MeasureScope$layout$1;-><init>(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
+HSPLandroidx/compose/ui/layout/MeasureScope;->layout$default(Landroidx/compose/ui/layout/MeasureScope;IILkotlin/jvm/functions/Function1;)Landroidx/compose/ui/layout/MeasureResult;
+HSPLandroidx/compose/ui/layout/MeasureScope;->layout(IILjava/util/Map;Lkotlin/jvm/functions/Function1;)Landroidx/compose/ui/layout/MeasureResult;
+HSPLandroidx/compose/ui/layout/OnSizeChangedModifier;-><init>(Landroidx/compose/foundation/AndroidEdgeEffectOverscrollEffect$onNewSize$1;)V
+HSPLandroidx/compose/ui/layout/PinnableContainerKt;-><clinit>()V
+HSPLandroidx/compose/ui/layout/Placeable$PlacementScope$Companion;->access$configureForPlacingForAlignment(Landroidx/compose/ui/node/LookaheadCapablePlaceable;)Z
+HSPLandroidx/compose/ui/layout/Placeable$PlacementScope;-><clinit>()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;J)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;II)V
+HSPLandroidx/compose/ui/layout/Placeable$PlacementScope;->placeRelativeWithLayer$default(Landroidx/compose/ui/layout/Placeable$PlacementScope;Landroidx/compose/ui/layout/Placeable;II)V
+HSPLandroidx/compose/ui/layout/Placeable$PlacementScope;->placeRelativeWithLayer-aW-9-wM$default(Landroidx/compose/ui/layout/Placeable$PlacementScope;Landroidx/compose/ui/layout/Placeable;J)V
+HSPLandroidx/compose/ui/layout/Placeable$PlacementScope;->placeWithLayer$default(Landroidx/compose/ui/layout/Placeable$PlacementScope;Landroidx/compose/ui/layout/Placeable;IILkotlin/jvm/functions/Function1;I)V
+HSPLandroidx/compose/ui/layout/Placeable;-><init>()V
+HSPLandroidx/compose/ui/layout/Placeable;->getMeasuredHeight()I
+HSPLandroidx/compose/ui/layout/Placeable;->getMeasuredWidth()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
+HSPLandroidx/compose/ui/layout/PlaceableKt;-><clinit>()V
+HSPLandroidx/compose/ui/layout/RootMeasurePolicy$measure$2;-><init>(ILjava/lang/Object;)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;
+HSPLandroidx/compose/ui/layout/RootMeasurePolicy;-><clinit>()V
+HSPLandroidx/compose/ui/layout/RootMeasurePolicy;-><init>()V
+HSPLandroidx/compose/ui/layout/RootMeasurePolicy;->measure-3p2s80s(Landroidx/compose/ui/layout/MeasureScope;Ljava/util/List;J)Landroidx/compose/ui/layout/MeasureResult;
+HSPLandroidx/compose/ui/layout/ScaleFactor;-><clinit>()V
+HSPLandroidx/compose/ui/layout/SubcomposeLayoutKt$SubcomposeLayout$2;-><init>(Ljava/lang/Object;ILjava/lang/Object;II)V
+HSPLandroidx/compose/ui/layout/SubcomposeLayoutKt$SubcomposeLayout$2;->invoke(Landroidx/compose/runtime/Composer;I)V
+HSPLandroidx/compose/ui/layout/SubcomposeLayoutKt$SubcomposeLayout$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
+HSPLandroidx/compose/ui/layout/SubcomposeLayoutKt$SubcomposeLayout$4;-><init>(ILjava/lang/Object;)V
+HSPLandroidx/compose/ui/layout/SubcomposeLayoutKt$SubcomposeLayout$4;->invoke()Ljava/lang/Object;
+HSPLandroidx/compose/ui/layout/SubcomposeLayoutKt$SubcomposeLayout$5$1$invoke$$inlined$onDispose$1;-><init>(ILjava/lang/Object;)V
+HSPLandroidx/compose/ui/layout/SubcomposeLayoutKt$SubcomposeLayout$5$1$invoke$$inlined$onDispose$1;->dispose()V
+HSPLandroidx/compose/ui/layout/SubcomposeLayoutState$setRoot$1;-><init>(Landroidx/compose/ui/layout/SubcomposeLayoutState;I)V
+HSPLandroidx/compose/ui/layout/SubcomposeLayoutState$setRoot$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
+HSPLandroidx/compose/ui/layout/SubcomposeLayoutState;-><init>(Landroidx/compose/ui/layout/SubcomposeSlotReusePolicy;)V
+HSPLandroidx/compose/ui/layout/SubcomposeLayoutState;->getState()Landroidx/compose/ui/layout/LayoutNodeSubcompositionsState;
+HSPLandroidx/compose/ui/layout/SubcomposeSlotReusePolicy$SlotIdsSet;-><init>()V
+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;
+HSPLandroidx/compose/ui/modifier/BackwardsCompatLocalMap;-><init>(Landroidx/compose/ui/modifier/ModifierLocalProvider;)V
+HSPLandroidx/compose/ui/modifier/BackwardsCompatLocalMap;->contains$ui_release(Landroidx/compose/ui/modifier/ModifierLocal;)Z
+HSPLandroidx/compose/ui/modifier/EmptyMap;-><clinit>()V
+HSPLandroidx/compose/ui/modifier/EmptyMap;->contains$ui_release(Landroidx/compose/ui/modifier/ModifierLocal;)Z
+HSPLandroidx/compose/ui/modifier/ModifierLocal;-><init>(Landroidx/compose/material3/ShapesKt$LocalShapes$1;)V
+HSPLandroidx/compose/ui/modifier/ModifierLocalManager;-><init>(Landroidx/compose/ui/node/Owner;)V
+HSPLandroidx/compose/ui/modifier/ModifierLocalModifierNode;->getCurrent(Landroidx/compose/ui/modifier/ProvidableModifierLocal;)Ljava/lang/Object;
+HSPLandroidx/compose/ui/modifier/ModifierLocalModifierNode;->getProvidedValues()Landroidx/tv/material3/TabKt;
+HSPLandroidx/compose/ui/modifier/SingleLocalMap;-><init>(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/ProvidableModifierLocal;)Ljava/lang/Object;
+HSPLandroidx/compose/ui/node/AlignmentLines;-><init>(Landroidx/compose/ui/node/AlignmentLinesOwner;)V
+HSPLandroidx/compose/ui/node/AlignmentLines;->getQueried$ui_release()Z
+HSPLandroidx/compose/ui/node/AlignmentLines;->getRequired$ui_release()Z
+HSPLandroidx/compose/ui/node/AlignmentLines;->onAlignmentsChanged()V
+HSPLandroidx/compose/ui/node/AlignmentLines;->recalculateQueryOwner()V
+HSPLandroidx/compose/ui/node/BackwardsCompatNode;-><init>(Landroidx/compose/ui/Modifier$Element;)V
+HSPLandroidx/compose/ui/node/BackwardsCompatNode;->draw(Landroidx/compose/ui/graphics/drawscope/ContentDrawScope;)V
+HSPLandroidx/compose/ui/node/BackwardsCompatNode;->getProvidedValues()Landroidx/tv/material3/TabKt;
+HSPLandroidx/compose/ui/node/BackwardsCompatNode;->initializeModifier(Z)V
+HSPLandroidx/compose/ui/node/BackwardsCompatNode;->onAttach()V
+HSPLandroidx/compose/ui/node/BackwardsCompatNode;->onGloballyPositioned(Landroidx/compose/ui/node/NodeCoordinator;)V
+HSPLandroidx/compose/ui/node/BackwardsCompatNode;->onMeasureResultChanged()V
+HSPLandroidx/compose/ui/node/BackwardsCompatNode;->onPlaced(Landroidx/compose/ui/node/NodeCoordinator;)V
+HSPLandroidx/compose/ui/node/BackwardsCompatNode;->onRemeasured-ozmzZPI(J)V
+HSPLandroidx/compose/ui/node/BackwardsCompatNode;->unInitializeModifier()V
+HSPLandroidx/compose/ui/node/CanFocusChecker;-><clinit>()V
+HSPLandroidx/compose/ui/node/CanFocusChecker;->setCanFocus(Z)V
+HSPLandroidx/compose/ui/node/ComposeUiNode$Companion;-><clinit>()V
+HSPLandroidx/compose/ui/node/ComposeUiNode;-><clinit>()V
+HSPLandroidx/compose/ui/node/DelegatingNode;-><init>()V
+HSPLandroidx/compose/ui/node/DelegatingNode;->delegate(Landroidx/compose/ui/Modifier$Node;)V
+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/DrawModifierNode;->onMeasureResultChanged()V
+HSPLandroidx/compose/ui/node/HitTestResult;-><init>()V
+HSPLandroidx/compose/ui/node/InnerNodeCoordinator;-><clinit>()V
+HSPLandroidx/compose/ui/node/InnerNodeCoordinator;-><init>(Landroidx/compose/ui/node/LayoutNode;)V
+HSPLandroidx/compose/ui/node/InnerNodeCoordinator;->getTail()Landroidx/compose/ui/Modifier$Node;
+HSPLandroidx/compose/ui/node/InnerNodeCoordinator;->maxIntrinsicHeight(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
+HSPLandroidx/compose/ui/node/IntrinsicsPolicy;-><init>(Landroidx/compose/ui/node/LayoutNode;)V
+HSPLandroidx/compose/ui/node/IntrinsicsPolicy;->measurePolicyFromState()Landroidx/compose/ui/layout/MeasurePolicy;
+HSPLandroidx/compose/ui/node/LayerPositionalProperties;-><init>()V
+HSPLandroidx/compose/ui/node/LayoutAwareModifierNode;->onRemeasured-ozmzZPI(J)V
+HSPLandroidx/compose/ui/node/LayoutModifierNode;->maxIntrinsicHeight(Landroidx/compose/ui/layout/IntrinsicMeasureScope;Landroidx/compose/ui/layout/Measurable;I)I
+HSPLandroidx/compose/ui/node/LayoutModifierNode;->maxIntrinsicWidth(Landroidx/compose/ui/layout/IntrinsicMeasureScope;Landroidx/compose/ui/layout/Measurable;I)I
+HSPLandroidx/compose/ui/node/LayoutModifierNodeCoordinator;-><clinit>()V
+HSPLandroidx/compose/ui/node/LayoutModifierNodeCoordinator;-><init>(Landroidx/compose/ui/node/LayoutNode;Landroidx/compose/ui/node/LayoutModifierNode;)V
+HSPLandroidx/compose/ui/node/LayoutModifierNodeCoordinator;->getTail()Landroidx/compose/ui/Modifier$Node;
+HSPLandroidx/compose/ui/node/LayoutModifierNodeCoordinator;->maxIntrinsicHeight(I)I
+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/LayoutNode$$ExternalSyntheticLambda0;-><init>(I)V
+HSPLandroidx/compose/ui/node/LayoutNode$$ExternalSyntheticLambda0;->compare(Ljava/lang/Object;Ljava/lang/Object;)I
+HSPLandroidx/compose/ui/node/LayoutNode$Companion$ErrorMeasurePolicy$1;-><init>()V
+HSPLandroidx/compose/ui/node/LayoutNode$NoIntrinsicsMeasurePolicy;-><init>(Ljava/lang/String;)V
+HSPLandroidx/compose/ui/node/LayoutNode$WhenMappings;-><clinit>()V
+HSPLandroidx/compose/ui/node/LayoutNode$_foldedChildren$1;-><init>(ILjava/lang/Object;)V
+HSPLandroidx/compose/ui/node/LayoutNode$_foldedChildren$1;->invoke()Ljava/lang/Object;
+HSPLandroidx/compose/ui/node/LayoutNode$_foldedChildren$1;->invoke()V
+HSPLandroidx/compose/ui/node/LayoutNode;-><clinit>()V
+HSPLandroidx/compose/ui/node/LayoutNode;-><init>(IZ)V
+HSPLandroidx/compose/ui/node/LayoutNode;-><init>(ZI)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;->draw$ui_release(Landroidx/compose/ui/graphics/Canvas;)V
+HSPLandroidx/compose/ui/node/LayoutNode;->forceRemeasure()V
+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;->getFoldedChildren$ui_release()Ljava/util/List;
+HSPLandroidx/compose/ui/node/LayoutNode;->getMeasuredByParent$ui_release$enumunboxing$()I
+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;->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;->insertAt$ui_release(ILandroidx/compose/ui/node/LayoutNode;)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;->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;->move$ui_release(III)V
+HSPLandroidx/compose/ui/node/LayoutNode;->onZSortedChildrenInvalidated$ui_release()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;ZI)V
+HSPLandroidx/compose/ui/node/LayoutNode;->rescheduleRemeasureOrRelayout$ui_release(Landroidx/compose/ui/node/LayoutNode;)V
+HSPLandroidx/compose/ui/node/LayoutNode;->resetSubtreeIntrinsicsUsage$ui_release()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;->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;->setViewConfiguration(Landroidx/compose/ui/platform/ViewConfiguration;)V
+HSPLandroidx/compose/ui/node/LayoutNode;->updateChildrenIfDirty$ui_release()V
+HSPLandroidx/compose/ui/node/LayoutNodeDrawScope;-><init>()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;JJJJFLkotlin/ResultKt;Landroidx/compose/ui/graphics/BlendModeColorFilter;II)V
+HSPLandroidx/compose/ui/node/LayoutNodeDrawScope;->drawRect-AsUm42w(Landroidx/compose/ui/graphics/Brush;JJFLkotlin/ResultKt;Landroidx/compose/ui/graphics/BlendModeColorFilter;I)V
+HSPLandroidx/compose/ui/node/LayoutNodeDrawScope;->drawRect-n-J9OG0(JJJFLkotlin/ResultKt;Landroidx/compose/ui/graphics/BlendModeColorFilter;I)V
+HSPLandroidx/compose/ui/node/LayoutNodeDrawScope;->drawRoundRect-u-Aw5IA(JJJJLkotlin/ResultKt;FLandroidx/compose/ui/graphics/BlendModeColorFilter;I)V
+HSPLandroidx/compose/ui/node/LayoutNodeDrawScope;->getCenter-F1C5BW0()J
+HSPLandroidx/compose/ui/node/LayoutNodeDrawScope;->getDensity()F
+HSPLandroidx/compose/ui/node/LayoutNodeDrawScope;->getFontScale()F
+HSPLandroidx/compose/ui/node/LayoutNodeDrawScope;->getLayoutDirection()Landroidx/compose/ui/unit/LayoutDirection;
+HSPLandroidx/compose/ui/node/LayoutNodeDrawScope;->getSize-NH-jbRc()J
+HSPLandroidx/compose/ui/node/LayoutNodeLayoutDelegate$MeasurePassDelegate$placeOuterCoordinator$1;-><init>(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;-><init>(Landroidx/compose/ui/node/LayoutNodeLayoutDelegate;)V
+HSPLandroidx/compose/ui/node/LayoutNodeLayoutDelegate$MeasurePassDelegate;->forEachChildAlignmentLinesOwner(Lkotlin/jvm/functions/Function1;)V
+HSPLandroidx/compose/ui/node/LayoutNodeLayoutDelegate$MeasurePassDelegate;->getAlignmentLines()Landroidx/compose/ui/node/LookaheadAlignmentLines;
+HSPLandroidx/compose/ui/node/LayoutNodeLayoutDelegate$MeasurePassDelegate;->getChildDelegates$ui_release()Ljava/util/List;
+HSPLandroidx/compose/ui/node/LayoutNodeLayoutDelegate$MeasurePassDelegate;->getInnerCoordinator()Landroidx/compose/ui/node/InnerNodeCoordinator;
+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;->layoutChildren()V
+HSPLandroidx/compose/ui/node/LayoutNodeLayoutDelegate$MeasurePassDelegate;->markNodeAndSubtreeAsPlaced()V
+HSPLandroidx/compose/ui/node/LayoutNodeLayoutDelegate$MeasurePassDelegate;->markSubtreeAsNotPlaced()V
+HSPLandroidx/compose/ui/node/LayoutNodeLayoutDelegate$MeasurePassDelegate;->maxIntrinsicHeight(I)I
+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;->onIntrinsicsQueried()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$performMeasure$2;-><init>(Landroidx/compose/ui/node/LayoutNodeLayoutDelegate;JI)V
+HSPLandroidx/compose/ui/node/LayoutNodeLayoutDelegate$performMeasure$2;->invoke()Ljava/lang/Object;
+HSPLandroidx/compose/ui/node/LayoutNodeLayoutDelegate$performMeasure$2;->invoke()V
+HSPLandroidx/compose/ui/node/LayoutNodeLayoutDelegate;-><init>(Landroidx/compose/ui/node/LayoutNode;)V
+HSPLandroidx/compose/ui/node/LayoutNodeLayoutDelegate;->getOuterCoordinator()Landroidx/compose/ui/node/NodeCoordinator;
+HSPLandroidx/compose/ui/node/LayoutNodeLayoutDelegate;->isOutMostLookaheadRoot(Landroidx/compose/ui/node/LayoutNode;)Z
+HSPLandroidx/compose/ui/node/LayoutNodeLayoutDelegate;->setCoordinatesAccessedDuringModifierPlacement(Z)V
+HSPLandroidx/compose/ui/node/LayoutNodeLayoutDelegate;->setCoordinatesAccessedDuringPlacement(Z)V
+HSPLandroidx/compose/ui/node/LayoutNodeLayoutDelegate;->updateParentData()V
+HSPLandroidx/compose/ui/node/LookaheadAlignmentLines;-><init>(Landroidx/compose/ui/node/AlignmentLinesOwner;I)V
+HSPLandroidx/compose/ui/node/LookaheadCapablePlaceable;->invalidateAlignmentLinesFromPositionChange(Landroidx/compose/ui/node/NodeCoordinator;)V
+HSPLandroidx/compose/ui/node/LookaheadCapablePlaceable;->isLookingAhead()Z
+HSPLandroidx/compose/ui/node/MeasureAndLayoutDelegate;-><init>(Landroidx/compose/ui/node/LayoutNode;)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;->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;->recurseRemeasure(Landroidx/compose/ui/node/LayoutNode;)V
+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;->requestRelayout(Landroidx/compose/ui/node/LayoutNode;Z)Z
+HSPLandroidx/compose/ui/node/MeasureAndLayoutDelegate;->updateRootConstraints-BRTryo0(J)V
+HSPLandroidx/compose/ui/node/NodeChain$Differ;-><init>(Landroidx/compose/ui/node/NodeChain;Landroidx/compose/ui/Modifier$Node;ILandroidx/compose/runtime/collection/MutableVector;Landroidx/compose/runtime/collection/MutableVector;Z)V
+HSPLandroidx/compose/ui/node/NodeChain$Differ;->areItemsTheSame(II)Z
+HSPLandroidx/compose/ui/node/NodeChain;-><init>(Landroidx/compose/ui/node/LayoutNode;)V
+HSPLandroidx/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;->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;->has-H91voCI$ui_release(I)Z
+HSPLandroidx/compose/ui/node/NodeChain;->runAttachLifecycle()V
+HSPLandroidx/compose/ui/node/NodeChain;->syncCoordinators()V
+HSPLandroidx/compose/ui/node/NodeChain;->updateNode(Landroidx/compose/ui/Modifier$Element;Landroidx/compose/ui/Modifier$Element;Landroidx/compose/ui/Modifier$Node;)V
+HSPLandroidx/compose/ui/node/NodeChainKt;-><clinit>()V
+HSPLandroidx/compose/ui/node/NodeChainKt;->actionForModifiers(Landroidx/compose/ui/Modifier$Element;Landroidx/compose/ui/Modifier$Element;)I
+HSPLandroidx/compose/ui/node/NodeCoordinator$invoke$1;-><init>(Ljava/lang/Object;ILjava/lang/Object;)V
+HSPLandroidx/compose/ui/node/NodeCoordinator$invoke$1;->invoke()Ljava/lang/Object;
+HSPLandroidx/compose/ui/node/NodeCoordinator$invoke$1;->invoke()V
+HSPLandroidx/compose/ui/node/NodeCoordinator;-><clinit>()V
+HSPLandroidx/compose/ui/node/NodeCoordinator;-><init>(Landroidx/compose/ui/node/LayoutNode;)V
+HSPLandroidx/compose/ui/node/NodeCoordinator;->ancestorToLocal(Landroidx/compose/ui/node/NodeCoordinator;Landroidx/compose/ui/geometry/MutableRect;Z)V
+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;->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;->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;->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;->getSize-YbymL2g()J
+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;->invalidateLayer()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;->isValidOwnerScope()Z
+HSPLandroidx/compose/ui/node/NodeCoordinator;->localBoundingBoxOf(Landroidx/compose/ui/layout/LayoutCoordinates;Z)Landroidx/compose/ui/geometry/Rect;
+HSPLandroidx/compose/ui/node/NodeCoordinator;->localToRoot-MK-Hz9U(J)J
+HSPLandroidx/compose/ui/node/NodeCoordinator;->onCoordinatesUsed$ui_release()V
+HSPLandroidx/compose/ui/node/NodeCoordinator;->onMeasured()V
+HSPLandroidx/compose/ui/node/NodeCoordinator;->onPlaced()V
+HSPLandroidx/compose/ui/node/NodeCoordinator;->placeSelf-f8xVGno(JFLkotlin/jvm/functions/Function1;)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;->toParentPosition-MK-Hz9U(J)J
+HSPLandroidx/compose/ui/node/NodeCoordinator;->updateLayerParameters(Z)V
+HSPLandroidx/compose/ui/node/NodeMeasuringIntrinsics$IntrinsicMinMax;-><clinit>()V
+HSPLandroidx/compose/ui/node/NodeMeasuringIntrinsics$IntrinsicMinMax;-><init>(ILjava/lang/String;)V
+HSPLandroidx/compose/ui/node/NodeMeasuringIntrinsics$IntrinsicWidthHeight;-><clinit>()V
+HSPLandroidx/compose/ui/node/NodeMeasuringIntrinsics$IntrinsicWidthHeight;-><init>(ILjava/lang/String;)V
+HSPLandroidx/compose/ui/node/ObserverNodeOwnerScope;-><init>(Landroidx/compose/ui/node/ObserverModifierNode;)V
+HSPLandroidx/compose/ui/node/ObserverNodeOwnerScope;->isValidOwnerScope()Z
+HSPLandroidx/compose/ui/node/OnPositionedDispatcher$Companion$DepthComparator;-><clinit>()V
+HSPLandroidx/compose/ui/node/OnPositionedDispatcher$Companion$DepthComparator;->compare(Ljava/lang/Object;Ljava/lang/Object;)I
+HSPLandroidx/compose/ui/node/OnPositionedDispatcher;-><init>()V
+HSPLandroidx/compose/ui/node/OnPositionedDispatcher;->dispatchHierarchy(Landroidx/compose/ui/node/LayoutNode;)V
+HSPLandroidx/compose/ui/node/Owner;->measureAndLayout$default(Landroidx/compose/ui/node/Owner;)V
+HSPLandroidx/compose/ui/node/OwnerSnapshotObserver;-><init>(Landroidx/compose/ui/platform/AndroidComposeView$focusOwner$1;)V
+HSPLandroidx/compose/ui/node/OwnerSnapshotObserver;->observeLayoutModifierSnapshotReads$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/TailModifierNode;-><init>()V
+HSPLandroidx/compose/ui/node/TailModifierNode;->onAttach()V
+HSPLandroidx/compose/ui/node/TailModifierNode;->onDetach()V
+HSPLandroidx/compose/ui/node/UiApplier;-><init>(Landroidx/compose/ui/node/LayoutNode;)V
+HSPLandroidx/compose/ui/node/UiApplier;->down(Ljava/lang/Object;)V
+HSPLandroidx/compose/ui/node/UiApplier;->getCurrent()Ljava/lang/Object;
+HSPLandroidx/compose/ui/node/UiApplier;->insertBottomUp(ILjava/lang/Object;)V
+HSPLandroidx/compose/ui/node/UiApplier;->insertTopDown(ILjava/lang/Object;)V
+HSPLandroidx/compose/ui/node/UiApplier;->onEndChanges()V
+HSPLandroidx/compose/ui/node/UiApplier;->up()V
+HSPLandroidx/compose/ui/platform/AbstractComposeView;-><init>(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;->checkAddView()V
+HSPLandroidx/compose/ui/platform/AbstractComposeView;->ensureCompositionCreated()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
+HSPLandroidx/compose/ui/platform/AndroidAccessibilityManager;-><init>(Landroid/content/Context;)V
+HSPLandroidx/compose/ui/platform/AndroidClipboardManager;-><init>(Landroid/content/Context;)V
+HSPLandroidx/compose/ui/platform/AndroidComposeView$$ExternalSyntheticApiModelOutline0;->m(Landroid/content/res/Configuration;)I
+HSPLandroidx/compose/ui/platform/AndroidComposeView$$ExternalSyntheticApiModelOutline0;->m(Landroid/graphics/RenderNode;)V
+HSPLandroidx/compose/ui/platform/AndroidComposeView$$ExternalSyntheticApiModelOutline0;->m(Landroid/view/View;Landroid/view/translation/ViewTranslationCallback;)V
+HSPLandroidx/compose/ui/platform/AndroidComposeView$$ExternalSyntheticLambda1;-><init>(Landroidx/compose/ui/platform/AndroidComposeView;)V
+HSPLandroidx/compose/ui/platform/AndroidComposeView$$ExternalSyntheticLambda1;->onGlobalLayout()V
+HSPLandroidx/compose/ui/platform/AndroidComposeView$$ExternalSyntheticLambda2;-><init>(Landroidx/compose/ui/platform/AndroidComposeView;)V
+HSPLandroidx/compose/ui/platform/AndroidComposeView$$ExternalSyntheticLambda3;-><init>(Landroidx/compose/ui/platform/AndroidComposeView;)V
+HSPLandroidx/compose/ui/platform/AndroidComposeView$$ExternalSyntheticLambda3;->onTouchModeChanged(Z)V
+HSPLandroidx/compose/ui/platform/AndroidComposeView$ViewTreeOwners;-><init>(Landroidx/lifecycle/LifecycleOwner;Landroidx/savedstate/SavedStateRegistryOwner;)V
+HSPLandroidx/compose/ui/platform/AndroidComposeView$focusOwner$1;-><init>(Landroidx/compose/ui/platform/AndroidComposeView;I)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
+HSPLandroidx/compose/ui/platform/AndroidComposeView$pointerIconService$1;-><init>(Landroidx/compose/ui/platform/AndroidComposeView;)V
+HSPLandroidx/compose/ui/platform/AndroidComposeView$viewTreeOwners$2;-><init>(Landroidx/compose/ui/platform/AndroidComposeView;I)V
+HSPLandroidx/compose/ui/platform/AndroidComposeView$viewTreeOwners$2;->invoke()Ljava/lang/Object;
+HSPLandroidx/compose/ui/platform/AndroidComposeView;-><clinit>()V
+HSPLandroidx/compose/ui/platform/AndroidComposeView;-><init>(Landroid/content/Context;Lkotlin/coroutines/CoroutineContext;)V
+HSPLandroidx/compose/ui/platform/AndroidComposeView;->access$get_viewTreeOwners(Landroidx/compose/ui/platform/AndroidComposeView;)Landroidx/compose/ui/platform/AndroidComposeView$ViewTreeOwners;
+HSPLandroidx/compose/ui/platform/AndroidComposeView;->convertMeasureSpec-I7RO_PI(I)J
+HSPLandroidx/compose/ui/platform/AndroidComposeView;->dispatchDraw(Landroid/graphics/Canvas;)V
+HSPLandroidx/compose/ui/platform/AndroidComposeView;->dispatchKeyEvent(Landroid/view/KeyEvent;)Z
+HSPLandroidx/compose/ui/platform/AndroidComposeView;->dispatchKeyEventPreIme(Landroid/view/KeyEvent;)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;->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;->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;->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;->getSoftwareKeyboardController()Landroidx/compose/ui/platform/SoftwareKeyboardController;
+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;->invalidateLayers(Landroidx/compose/ui/node/LayoutNode;)V
+HSPLandroidx/compose/ui/platform/AndroidComposeView;->invalidateLayoutNodeMeasurement(Landroidx/compose/ui/node/LayoutNode;)V
+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;->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;->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;->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;->recycle$ui_release(Landroidx/compose/ui/node/OwnedLayer;)V
+HSPLandroidx/compose/ui/platform/AndroidComposeView;->scheduleMeasureAndLayout(Landroidx/compose/ui/node/LayoutNode;)V
+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;->updatePositionCacheAndDispatch()V
+HSPLandroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat$$ExternalSyntheticLambda1;-><init>(Landroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat;)V
+HSPLandroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat$$ExternalSyntheticLambda2;-><init>(Landroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat;)V
+HSPLandroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat$1;-><init>(ILjava/lang/Object;)V
+HSPLandroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat$1;->onViewAttachedToWindow(Landroid/view/View;)V
+HSPLandroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat$MyNodeProvider;-><init>(Landroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat;)V
+HSPLandroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat$SemanticsNodeCopy;-><init>(Landroidx/compose/ui/semantics/SemanticsNode;Ljava/util/Map;)V
+HSPLandroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat$boundsUpdatesEventLoop$1;-><init>(Landroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat;Lkotlin/coroutines/Continuation;)V
+HSPLandroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat;-><clinit>()V
+HSPLandroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat;-><init>(Landroidx/compose/ui/platform/AndroidComposeView;)V
+HSPLandroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat;->boundsUpdatesEventLoop(Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
+HSPLandroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat;->getAccessibilityNodeProvider(Landroid/view/View;)Landroidx/core/view/accessibility/AccessibilityNodeProviderCompat;
+HSPLandroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat;->isEnabledForAccessibility()Z
+HSPLandroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat;->onStart(Landroidx/lifecycle/LifecycleOwner;)V
+HSPLandroidx/compose/ui/platform/AndroidComposeViewForceDarkModeQ;-><clinit>()V
+HSPLandroidx/compose/ui/platform/AndroidComposeViewForceDarkModeQ;->disallowForceDark(Landroid/view/View;)V
+HSPLandroidx/compose/ui/platform/AndroidComposeViewTranslationCallbackS;-><clinit>()V
+HSPLandroidx/compose/ui/platform/AndroidComposeViewTranslationCallbackS;->setViewTranslationCallback(Landroid/view/View;Landroid/view/translation/ViewTranslationCallback;)V
+HSPLandroidx/compose/ui/platform/AndroidComposeViewVerificationHelperMethodsO;-><clinit>()V
+HSPLandroidx/compose/ui/platform/AndroidComposeViewVerificationHelperMethodsO;->focusable(Landroid/view/View;IZ)V
+HSPLandroidx/compose/ui/platform/AndroidCompositionLocals_androidKt$obtainImageVectorCache$callbacks$1$1;-><init>(Landroid/content/res/Configuration;Landroidx/compose/ui/res/ImageVectorCache;)V
+HSPLandroidx/compose/ui/platform/AndroidCompositionLocals_androidKt;-><clinit>()V
+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/AndroidUiDispatcher$dispatchCallback$1;-><init>(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
+HSPLandroidx/compose/ui/platform/AndroidUiDispatcher;-><clinit>()V
+HSPLandroidx/compose/ui/platform/AndroidUiDispatcher;-><init>(Landroid/view/Choreographer;Landroid/os/Handler;)V
+HSPLandroidx/compose/ui/platform/AndroidUiDispatcher;->access$performTrampolineDispatch(Landroidx/compose/ui/platform/AndroidUiDispatcher;)V
+HSPLandroidx/compose/ui/platform/AndroidUiDispatcher;->dispatch(Lkotlin/coroutines/CoroutineContext;Ljava/lang/Runnable;)V
+HSPLandroidx/compose/ui/platform/AndroidUiFrameClock$withFrameNanos$2$callback$1;-><init>(Lkotlinx/coroutines/CancellableContinuationImpl;Landroidx/compose/ui/platform/AndroidUiFrameClock;Lkotlin/jvm/functions/Function1;)V
+HSPLandroidx/compose/ui/platform/AndroidUiFrameClock$withFrameNanos$2$callback$1;->doFrame(J)V
+HSPLandroidx/compose/ui/platform/AndroidUiFrameClock;-><init>(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;->minusKey(Lkotlin/coroutines/CoroutineContext$Key;)Lkotlin/coroutines/CoroutineContext;
+HSPLandroidx/compose/ui/platform/AndroidUiFrameClock;->withFrameNanos(Lkotlin/jvm/functions/Function1;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
+HSPLandroidx/compose/ui/platform/AndroidViewConfiguration;-><init>(Landroid/view/ViewConfiguration;)V
+HSPLandroidx/compose/ui/platform/CalculateMatrixToWindowApi29;-><init>()V
+HSPLandroidx/compose/ui/platform/ComposableSingletons$Wrapper_androidKt;-><clinit>()V
+HSPLandroidx/compose/ui/platform/ComposeView;-><init>(Landroid/content/Context;)V
+HSPLandroidx/compose/ui/platform/ComposeView;->Content(Landroidx/compose/runtime/Composer;I)V
+HSPLandroidx/compose/ui/platform/ComposeView;->getShouldCreateCompositionOnAttachedToWindow()Z
+HSPLandroidx/compose/ui/platform/ComposeView;->setContent(Lkotlin/jvm/functions/Function2;)V
+HSPLandroidx/compose/ui/platform/CompositionLocalsKt;-><clinit>()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/DisposableSaveableStateRegistry;-><init>(Landroidx/compose/runtime/saveable/SaveableStateRegistryImpl;Landroidx/compose/ui/platform/DisposableSaveableStateRegistry_androidKt$DisposableSaveableStateRegistry$1;)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/SaveableStateRegistryImpl$registerProvider$3;
+HSPLandroidx/compose/ui/platform/DisposableSaveableStateRegistry_androidKt$DisposableSaveableStateRegistry$1;-><init>(ZLandroidx/savedstate/SavedStateRegistry;Ljava/lang/String;)V
+HSPLandroidx/compose/ui/platform/GlobalSnapshotManager$ensureStarted$1;-><init>(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;
+HSPLandroidx/compose/ui/platform/GlobalSnapshotManager;-><clinit>()V
+HSPLandroidx/compose/ui/platform/InspectableModifier;-><init>()V
+HSPLandroidx/compose/ui/platform/LayerMatrixCache;-><init>(Landroidx/compose/ui/text/SaversKt$ColorSaver$1;)V
+HSPLandroidx/compose/ui/platform/LayerMatrixCache;->calculateMatrix-GrdbGEg(Ljava/lang/Object;)[F
+HSPLandroidx/compose/ui/platform/LayerMatrixCache;->invalidate()V
+HSPLandroidx/compose/ui/platform/MotionDurationScaleImpl;-><init>()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/OutlineResolver;-><init>(Landroidx/compose/ui/unit/Density;)V
+HSPLandroidx/compose/ui/platform/OutlineResolver;->getOutline()Landroid/graphics/Outline;
+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;->updateCache()V
+HSPLandroidx/compose/ui/platform/RenderNodeApi29;-><init>()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;->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;->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
+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()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
+HSPLandroidx/compose/ui/platform/RenderNodeApi29VerificationHelper;-><clinit>()V
+HSPLandroidx/compose/ui/platform/RenderNodeApi29VerificationHelper;->setRenderEffect(Landroid/graphics/RenderNode;Landroidx/compose/ui/graphics/RenderEffect;)V
+HSPLandroidx/compose/ui/platform/RenderNodeLayer;-><init>(Landroidx/compose/ui/platform/AndroidComposeView;Lkotlin/jvm/functions/Function1;Landroidx/compose/ui/node/LayoutNode$_foldedChildren$1;)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;->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(Landroidx/compose/ui/node/LayoutNode$_foldedChildren$1;Lkotlin/jvm/functions/Function1;)V
+HSPLandroidx/compose/ui/platform/RenderNodeLayer;->setDirty(Z)V
+HSPLandroidx/compose/ui/platform/RenderNodeLayer;->updateDisplayList()V
+HSPLandroidx/compose/ui/platform/RenderNodeLayer;->updateLayerProperties-dDxr-wY(FFFFFFFFFFJLandroidx/compose/ui/graphics/Shape;ZJJILandroidx/compose/ui/unit/LayoutDirection;Landroidx/compose/ui/unit/Density;)V
+HSPLandroidx/compose/ui/platform/ViewLayer;-><clinit>()V
+HSPLandroidx/compose/ui/platform/WeakCache;-><init>()V
+HSPLandroidx/compose/ui/platform/WeakCache;-><init>(I)V
+HSPLandroidx/compose/ui/platform/WeakCache;-><init>(Landroidx/compose/ui/node/InnerNodeCoordinator;)V
+HSPLandroidx/compose/ui/platform/WeakCache;-><init>(Ljava/lang/Object;ILjava/lang/Object;)V
+HSPLandroidx/compose/ui/platform/WeakCache;->add(Landroidx/compose/ui/node/LayoutNode;Z)V
+HSPLandroidx/compose/ui/platform/WeakCache;->clearWeakReferences()V
+HSPLandroidx/compose/ui/platform/WeakCache;->get$1()Ljava/lang/Object;
+HSPLandroidx/compose/ui/platform/WeakCache;->set(Ljava/lang/Object;)V
+HSPLandroidx/compose/ui/platform/WindowInfoImpl;-><clinit>()V
+HSPLandroidx/compose/ui/platform/WindowInfoImpl;-><init>()V
+HSPLandroidx/compose/ui/platform/WindowRecomposerPolicy$createAndInstallWindowRecomposer$unsetJob$1;-><init>(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;
+HSPLandroidx/compose/ui/platform/WindowRecomposerPolicy;-><clinit>()V
+HSPLandroidx/compose/ui/platform/WindowRecomposer_androidKt$createLifecycleAwareWindowRecomposer$1;-><init>(Landroid/view/View;Landroidx/compose/runtime/Recomposer;)V
+HSPLandroidx/compose/ui/platform/WindowRecomposer_androidKt$createLifecycleAwareWindowRecomposer$1;->onViewAttachedToWindow(Landroid/view/View;)V
+HSPLandroidx/compose/ui/platform/WindowRecomposer_androidKt$createLifecycleAwareWindowRecomposer$2$WhenMappings;-><clinit>()V
+HSPLandroidx/compose/ui/platform/WindowRecomposer_androidKt$createLifecycleAwareWindowRecomposer$2$onStateChanged$1$1$1;-><init>(Lkotlinx/coroutines/flow/StateFlow;Landroidx/compose/ui/platform/MotionDurationScaleImpl;Lkotlin/coroutines/Continuation;)V
+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;
+HSPLandroidx/compose/ui/platform/WindowRecomposer_androidKt$createLifecycleAwareWindowRecomposer$2$onStateChanged$1;-><init>(Lkotlin/jvm/internal/Ref$ObjectRef;Landroidx/compose/runtime/Recomposer;Landroidx/lifecycle/LifecycleOwner;Landroidx/compose/ui/platform/WindowRecomposer_androidKt$createLifecycleAwareWindowRecomposer$2;Landroid/view/View;Lkotlin/coroutines/Continuation;)V
+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;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;
+HSPLandroidx/compose/ui/platform/WindowRecomposer_androidKt$createLifecycleAwareWindowRecomposer$2;-><init>(Lkotlinx/coroutines/internal/ContextScope;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
+HSPLandroidx/compose/ui/platform/WindowRecomposer_androidKt$getAnimationScaleFlowFor$1$1$1;-><init>(Landroid/content/ContentResolver;Landroid/net/Uri;Landroidx/emoji2/text/FontRequestEmojiCompatConfig$FontRequestMetadataLoader$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;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;
+HSPLandroidx/compose/ui/platform/WindowRecomposer_androidKt;-><clinit>()V
+HSPLandroidx/compose/ui/platform/WindowRecomposer_androidKt;->access$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/WrappedComposition$setContent$1$1$1;-><init>(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;
+HSPLandroidx/compose/ui/platform/WrappedComposition$setContent$1$1;-><init>(Landroidx/compose/ui/platform/WrappedComposition;Lkotlin/jvm/functions/Function2;I)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;
+HSPLandroidx/compose/ui/platform/WrappedComposition$setContent$1;-><init>(Ljava/lang/Object;ILjava/lang/Object;)V
+HSPLandroidx/compose/ui/platform/WrappedComposition$setContent$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
+HSPLandroidx/compose/ui/platform/WrappedComposition;-><init>(Landroidx/compose/ui/platform/AndroidComposeView;Landroidx/compose/runtime/CompositionImpl;)V
+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
+HSPLandroidx/compose/ui/platform/WrapperRenderNodeLayerHelperMethods;-><clinit>()V
+HSPLandroidx/compose/ui/platform/WrapperRenderNodeLayerHelperMethods;->onDescendantInvalidated(Landroidx/compose/ui/platform/AndroidComposeView;)V
+HSPLandroidx/compose/ui/platform/WrapperVerificationHelperMethods;-><clinit>()V
+HSPLandroidx/compose/ui/platform/WrapperVerificationHelperMethods;->attributeSourceResourceMap(Landroid/view/View;)Ljava/util/Map;
+HSPLandroidx/compose/ui/platform/Wrapper_androidKt;-><clinit>()V
+HSPLandroidx/compose/ui/platform/Wrapper_androidKt;->setContent(Landroidx/compose/ui/platform/AbstractComposeView;Landroidx/compose/runtime/CompositionContext;Landroidx/compose/runtime/internal/ComposableLambdaImpl;)Landroidx/compose/runtime/Composition;
+HSPLandroidx/compose/ui/res/ImageVectorCache;-><init>()V
+HSPLandroidx/compose/ui/semantics/AppendedSemanticsElement;-><init>(Lkotlin/jvm/functions/Function1;Z)V
+HSPLandroidx/compose/ui/semantics/AppendedSemanticsElement;->create()Landroidx/compose/ui/Modifier$Node;
+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/CollectionInfo;-><init>(II)V
+HSPLandroidx/compose/ui/semantics/CoreSemanticsModifierNode;-><init>(ZLkotlin/jvm/functions/Function1;)V
+HSPLandroidx/compose/ui/semantics/EmptySemanticsElement;-><clinit>()V
+HSPLandroidx/compose/ui/semantics/EmptySemanticsElement;-><init>()V
+HSPLandroidx/compose/ui/semantics/EmptySemanticsElement;->create()Landroidx/compose/ui/Modifier$Node;
+HSPLandroidx/compose/ui/semantics/ScrollAxisRange;-><init>(Lkotlin/jvm/functions/Function0;Lkotlin/jvm/functions/Function0;Z)V
+HSPLandroidx/compose/ui/semantics/SemanticsConfiguration;-><init>()V
+HSPLandroidx/compose/ui/semantics/SemanticsConfiguration;->contains(Landroidx/compose/ui/semantics/SemanticsPropertyKey;)Z
+HSPLandroidx/compose/ui/semantics/SemanticsModifierKt;-><clinit>()V
+HSPLandroidx/compose/ui/semantics/SemanticsNode;-><init>(Landroidx/compose/ui/Modifier$Node;ZLandroidx/compose/ui/node/LayoutNode;Landroidx/compose/ui/semantics/SemanticsConfiguration;)V
+HSPLandroidx/compose/ui/semantics/SemanticsNode;->fillOneLayerOfSemanticsWrappers(Landroidx/compose/ui/node/LayoutNode;Ljava/util/ArrayList;)V
+HSPLandroidx/compose/ui/semantics/SemanticsNode;->getChildren(ZZ)Ljava/util/List;
+HSPLandroidx/compose/ui/semantics/SemanticsNode;->getReplacedChildren$ui_release()Ljava/util/List;
+HSPLandroidx/compose/ui/semantics/SemanticsNode;->isMergingSemanticsOfDescendants()Z
+HSPLandroidx/compose/ui/semantics/SemanticsNode;->unmergedChildren$ui_release(Z)Ljava/util/List;
+HSPLandroidx/compose/ui/semantics/SemanticsOwner;-><init>(Landroidx/compose/ui/node/LayoutNode;)V
+HSPLandroidx/compose/ui/semantics/SemanticsOwner;->getUnmergedRootSemanticsNode()Landroidx/compose/ui/semantics/SemanticsNode;
+HSPLandroidx/compose/ui/semantics/SemanticsProperties;-><clinit>()V
+HSPLandroidx/compose/ui/semantics/SemanticsPropertyKey;-><init>(Ljava/lang/String;)V
+HSPLandroidx/compose/ui/semantics/SemanticsPropertyKey;-><init>(Ljava/lang/String;Lkotlin/jvm/functions/Function2;)V
+HSPLandroidx/compose/ui/text/AndroidParagraph;-><init>(Landroidx/compose/ui/text/platform/AndroidParagraphIntrinsics;IZJ)V
+HSPLandroidx/compose/ui/text/AndroidParagraph;->constructTextLayout(IILandroid/text/TextUtils$TruncateAt;IIIII)Landroidx/compose/ui/text/android/TextLayout;
+HSPLandroidx/compose/ui/text/AndroidParagraph;->getHeight()F
+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;Lkotlin/ResultKt;I)V
+HSPLandroidx/compose/ui/text/AnnotatedString$Range;-><init>(IILjava/lang/Object;)V
+HSPLandroidx/compose/ui/text/AnnotatedString$Range;-><init>(Ljava/lang/Object;IILjava/lang/String;)V
+HSPLandroidx/compose/ui/text/AnnotatedString;-><init>(Ljava/lang/String;Ljava/util/List;Ljava/util/List;Ljava/util/List;)V
+HSPLandroidx/compose/ui/text/AnnotatedString;->equals(Ljava/lang/Object;)Z
+HSPLandroidx/compose/ui/text/AnnotatedStringKt;-><clinit>()V
+HSPLandroidx/compose/ui/text/EmojiSupportMatch;-><init>(I)V
+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;Lkotlin/ResultKt;)V
+HSPLandroidx/compose/ui/text/MultiParagraphIntrinsics$maxIntrinsicWidth$2;-><init>(Landroidx/compose/ui/text/MultiParagraphIntrinsics;I)V
+HSPLandroidx/compose/ui/text/MultiParagraphIntrinsics$maxIntrinsicWidth$2;->invoke$1()Ljava/lang/Float;
+HSPLandroidx/compose/ui/text/MultiParagraphIntrinsics$maxIntrinsicWidth$2;->invoke()Ljava/lang/Object;
+HSPLandroidx/compose/ui/text/MultiParagraphIntrinsics;-><init>(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;->getHasStaleResolvedFonts()Z
+HSPLandroidx/compose/ui/text/MultiParagraphIntrinsics;->getMaxIntrinsicWidth()F
+HSPLandroidx/compose/ui/text/ParagraphInfo;-><init>(Landroidx/compose/ui/text/AndroidParagraph;IIIIFF)V
+HSPLandroidx/compose/ui/text/ParagraphIntrinsicInfo;-><init>(Landroidx/compose/ui/text/platform/AndroidParagraphIntrinsics;II)V
+HSPLandroidx/compose/ui/text/ParagraphStyle;-><init>(Landroidx/compose/ui/text/style/TextAlign;Landroidx/compose/ui/text/style/TextDirection;JLandroidx/compose/ui/text/style/TextIndent;Landroidx/compose/ui/text/PlatformParagraphStyle;Landroidx/compose/ui/text/style/LineHeightStyle;Landroidx/compose/ui/text/style/LineBreak;Landroidx/compose/ui/text/style/Hyphens;Landroidx/compose/ui/text/style/TextMotion;)V
+HSPLandroidx/compose/ui/text/ParagraphStyle;->equals(Ljava/lang/Object;)Z
+HSPLandroidx/compose/ui/text/ParagraphStyle;->merge(Landroidx/compose/ui/text/ParagraphStyle;)Landroidx/compose/ui/text/ParagraphStyle;
+HSPLandroidx/compose/ui/text/ParagraphStyleKt;-><clinit>()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/PlatformParagraphStyle;-><init>(I)V
+HSPLandroidx/compose/ui/text/PlatformParagraphStyle;->equals(Ljava/lang/Object;)Z
+HSPLandroidx/compose/ui/text/PlatformTextStyle;-><init>(Landroidx/compose/ui/text/PlatformParagraphStyle;)V
+HSPLandroidx/compose/ui/text/SaversKt$ColorSaver$1;-><clinit>()V
+HSPLandroidx/compose/ui/text/SaversKt$ColorSaver$1;-><init>(I)V
+HSPLandroidx/compose/ui/text/SaversKt$ColorSaver$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
+HSPLandroidx/compose/ui/text/SaversKt$ColorSaver$2;-><clinit>()V
+HSPLandroidx/compose/ui/text/SaversKt$ColorSaver$2;-><init>(I)V
+HSPLandroidx/compose/ui/text/SaversKt$ColorSaver$2;->invoke(Landroidx/compose/ui/node/LayoutNode;)V
+HSPLandroidx/compose/ui/text/SaversKt$ColorSaver$2;->invoke(Ljava/lang/Object;)Ljava/lang/Boolean;
+HSPLandroidx/compose/ui/text/SaversKt$ColorSaver$2;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
+HSPLandroidx/compose/ui/text/SpanStyle;-><init>(JJLandroidx/compose/ui/text/font/FontWeight;Landroidx/compose/ui/text/font/FontStyle;Landroidx/compose/ui/text/font/FontSynthesis;Landroidx/compose/ui/text/font/FontFamily;Ljava/lang/String;JLandroidx/compose/ui/text/style/BaselineShift;Landroidx/compose/ui/text/style/TextGeometricTransform;Landroidx/compose/ui/text/intl/LocaleList;JLandroidx/compose/ui/text/style/TextDecoration;Landroidx/compose/ui/graphics/Shadow;I)V
+HSPLandroidx/compose/ui/text/SpanStyle;-><init>(JJLandroidx/compose/ui/text/font/FontWeight;Landroidx/compose/ui/text/font/FontStyle;Landroidx/compose/ui/text/font/FontSynthesis;Landroidx/compose/ui/text/font/FontFamily;Ljava/lang/String;JLandroidx/compose/ui/text/style/BaselineShift;Landroidx/compose/ui/text/style/TextGeometricTransform;Landroidx/compose/ui/text/intl/LocaleList;JLandroidx/compose/ui/text/style/TextDecoration;Landroidx/compose/ui/graphics/Shadow;Lkotlin/ResultKt;)V
+HSPLandroidx/compose/ui/text/SpanStyle;-><init>(Landroidx/compose/ui/text/style/TextForegroundStyle;JLandroidx/compose/ui/text/font/FontWeight;Landroidx/compose/ui/text/font/FontStyle;Landroidx/compose/ui/text/font/FontSynthesis;Landroidx/compose/ui/text/font/FontFamily;Ljava/lang/String;JLandroidx/compose/ui/text/style/BaselineShift;Landroidx/compose/ui/text/style/TextGeometricTransform;Landroidx/compose/ui/text/intl/LocaleList;JLandroidx/compose/ui/text/style/TextDecoration;Landroidx/compose/ui/graphics/Shadow;Lkotlin/ResultKt;)V
+HSPLandroidx/compose/ui/text/SpanStyle;->equals(Ljava/lang/Object;)Z
+HSPLandroidx/compose/ui/text/SpanStyle;->getColor-0d7_KjU()J
+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;
+HSPLandroidx/compose/ui/text/SpanStyleKt;-><clinit>()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;Lkotlin/ResultKt;)Landroidx/compose/ui/text/SpanStyle;
+HSPLandroidx/compose/ui/text/TextLayoutInput;-><init>(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/TextLayoutResult;-><init>(Landroidx/compose/ui/text/TextLayoutInput;Landroidx/compose/ui/text/MultiParagraph;J)V
+HSPLandroidx/compose/ui/text/TextRange;-><clinit>()V
+HSPLandroidx/compose/ui/text/TextRange;->getEnd-impl(J)I
+HSPLandroidx/compose/ui/text/TextStyle;-><clinit>()V
+HSPLandroidx/compose/ui/text/TextStyle;-><init>(JJLandroidx/compose/ui/text/font/FontWeight;Landroidx/compose/ui/text/font/FontStyle;Landroidx/compose/ui/text/font/FontFamily;JLandroidx/compose/ui/text/style/TextDecoration;Landroidx/compose/ui/text/style/TextAlign;JI)V
+HSPLandroidx/compose/ui/text/TextStyle;-><init>(JLandroidx/compose/ui/text/font/FontWeight;Landroidx/compose/ui/text/font/DefaultFontFamily;I)V
+HSPLandroidx/compose/ui/text/TextStyle;-><init>(Landroidx/compose/ui/text/SpanStyle;Landroidx/compose/ui/text/ParagraphStyle;)V
+HSPLandroidx/compose/ui/text/TextStyle;-><init>(Landroidx/compose/ui/text/SpanStyle;Landroidx/compose/ui/text/ParagraphStyle;Landroidx/compose/ui/text/PlatformTextStyle;)V
+HSPLandroidx/compose/ui/text/TextStyle;->equals(Ljava/lang/Object;)Z
+HSPLandroidx/compose/ui/text/TextStyle;->getColor-0d7_KjU()J
+HSPLandroidx/compose/ui/text/TextStyle;->merge(Landroidx/compose/ui/text/TextStyle;)Landroidx/compose/ui/text/TextStyle;
+HSPLandroidx/compose/ui/text/TextStyle;->merge-Z1GrekI$default(IJJJJLandroidx/compose/ui/text/TextStyle;Landroidx/compose/ui/text/font/FontFamily;Landroidx/compose/ui/text/font/FontStyle;Landroidx/compose/ui/text/font/FontWeight;Landroidx/compose/ui/text/style/TextAlign;Landroidx/compose/ui/text/style/TextDecoration;)Landroidx/compose/ui/text/TextStyle;
+HSPLandroidx/compose/ui/text/android/BoringLayoutFactoryDefault;->create(Ljava/lang/CharSequence;Landroid/text/TextPaint;ILandroid/text/Layout$Alignment;FFLandroid/text/BoringLayout$Metrics;ZLandroid/text/TextUtils$TruncateAt;I)Landroid/text/BoringLayout;
+HSPLandroidx/compose/ui/text/android/BoringLayoutFactoryDefault;->isBoring(Ljava/lang/CharSequence;Landroid/text/TextPaint;Landroid/text/TextDirectionHeuristic;)Landroid/text/BoringLayout$Metrics;
+HSPLandroidx/compose/ui/text/android/LayoutIntrinsics;-><init>(Ljava/lang/CharSequence;Landroidx/compose/ui/text/platform/AndroidTextPaint;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/Paint29$$ExternalSyntheticApiModelOutline0;->m$1(Landroid/graphics/RenderNode;)F
+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)V
+HSPLandroidx/compose/ui/text/android/Paint29$$ExternalSyntheticApiModelOutline0;->m$2(Landroid/graphics/RenderNode;)V
+HSPLandroidx/compose/ui/text/android/Paint29$$ExternalSyntheticApiModelOutline0;->m$2(Landroid/graphics/RenderNode;F)V
+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;)V
+HSPLandroidx/compose/ui/text/android/Paint29$$ExternalSyntheticApiModelOutline0;->m()Landroid/graphics/RenderNode;
+HSPLandroidx/compose/ui/text/android/Paint29$$ExternalSyntheticApiModelOutline0;->m(Landroid/graphics/Paint;Ljava/lang/CharSequence;IILandroid/graphics/Rect;)V
+HSPLandroidx/compose/ui/text/android/Paint29$$ExternalSyntheticApiModelOutline0;->m(Landroid/graphics/RenderNode;)F
+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)V
+HSPLandroidx/compose/ui/text/android/Paint29$$ExternalSyntheticApiModelOutline0;->m(Landroid/graphics/RenderNode;I)V
+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/Matrix;)V
+HSPLandroidx/compose/ui/text/android/Paint29$$ExternalSyntheticApiModelOutline0;->m(Landroid/graphics/RenderNode;Landroid/graphics/Outline;)V
+HSPLandroidx/compose/ui/text/android/Paint29$$ExternalSyntheticApiModelOutline0;->m(Landroid/graphics/RenderNode;Z)V
+HSPLandroidx/compose/ui/text/android/Paint29$$ExternalSyntheticApiModelOutline0;->m(Landroid/view/View;)Ljava/util/Map;
+HSPLandroidx/compose/ui/text/android/Paint29;->getTextBounds(Landroid/graphics/Paint;Ljava/lang/CharSequence;IILandroid/graphics/Rect;)V
+HSPLandroidx/compose/ui/text/android/StaticLayoutFactory23;->create(Landroidx/compose/ui/text/android/StaticLayoutParams;)Landroid/text/StaticLayout;
+HSPLandroidx/compose/ui/text/android/StaticLayoutFactory26;->setJustificationMode(Landroid/text/StaticLayout$Builder;I)V
+HSPLandroidx/compose/ui/text/android/StaticLayoutFactory28;->setUseLineSpacingFromFallbacks(Landroid/text/StaticLayout$Builder;Z)V
+HSPLandroidx/compose/ui/text/android/StaticLayoutParams;-><init>(Ljava/lang/CharSequence;IILandroidx/compose/ui/text/platform/AndroidTextPaint;ILandroid/text/TextDirectionHeuristic;Landroid/text/Layout$Alignment;ILandroid/text/TextUtils$TruncateAt;IFFIZZIIII[I[I)V
+HSPLandroidx/compose/ui/text/android/TextAlignmentAdapter;-><clinit>()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/TextLayout;-><init>(Ljava/lang/CharSequence;FLandroidx/compose/ui/text/platform/AndroidTextPaint;ILandroid/text/TextUtils$TruncateAt;IZIIIIIILandroidx/compose/ui/text/android/LayoutIntrinsics;)V
+HSPLandroidx/compose/ui/text/android/TextLayout;->getHeight()I
+HSPLandroidx/compose/ui/text/android/TextLayout;->getLineBaseline(I)F
+HSPLandroidx/compose/ui/text/android/TextLayout;->getText()Ljava/lang/CharSequence;
+HSPLandroidx/compose/ui/text/android/TextLayoutKt;-><clinit>()V
+HSPLandroidx/compose/ui/text/android/TextLayoutKt;->getTextDirectionHeuristic(I)Landroid/text/TextDirectionHeuristic;
+HSPLandroidx/compose/ui/text/android/style/LineHeightStyleSpan;-><init>(FIZZF)V
+HSPLandroidx/compose/ui/text/android/style/LineHeightStyleSpan;->chooseHeight(Ljava/lang/CharSequence;IIIILandroid/graphics/Paint$FontMetricsInt;)V
+HSPLandroidx/compose/ui/text/caches/LruCache;-><init>()V
+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;->size()I
+HSPLandroidx/compose/ui/text/caches/SimpleArrayMap;-><init>()V
+HSPLandroidx/compose/ui/text/font/AndroidFontResolveInterceptor;-><init>(I)V
+HSPLandroidx/compose/ui/text/font/AndroidFontResolveInterceptor;->interceptFontWeight(Landroidx/compose/ui/text/font/FontWeight;)Landroidx/compose/ui/text/font/FontWeight;
+HSPLandroidx/compose/ui/text/font/AsyncTypefaceCache;-><init>()V
+HSPLandroidx/compose/ui/text/font/FontFamily;-><clinit>()V
+HSPLandroidx/compose/ui/text/font/FontFamilyResolverImpl;-><init>(Landroidx/compose/ui/unit/Dp$Companion;Landroidx/compose/ui/text/font/AndroidFontResolveInterceptor;)V
+HSPLandroidx/compose/ui/text/font/FontFamilyResolverImpl;->resolve(Landroidx/compose/ui/text/font/TypefaceRequest;)Landroidx/compose/ui/text/font/TypefaceResult;
+HSPLandroidx/compose/ui/text/font/FontFamilyResolverImpl;->resolve-DPcqOEQ(Landroidx/compose/ui/text/font/FontFamily;Landroidx/compose/ui/text/font/FontWeight;II)Landroidx/compose/ui/text/font/TypefaceResult;
+HSPLandroidx/compose/ui/text/font/FontFamilyResolverKt;-><clinit>()V
+HSPLandroidx/compose/ui/text/font/FontListFontFamilyTypefaceAdapter$special$$inlined$CoroutineExceptionHandler$1;-><init>()V
+HSPLandroidx/compose/ui/text/font/FontListFontFamilyTypefaceAdapter;-><clinit>()V
+HSPLandroidx/compose/ui/text/font/FontListFontFamilyTypefaceAdapter;-><init>(Landroidx/compose/ui/text/font/AsyncTypefaceCache;)V
+HSPLandroidx/compose/ui/text/font/FontStyle;-><init>(I)V
+HSPLandroidx/compose/ui/text/font/FontSynthesis;-><init>(I)V
+HSPLandroidx/compose/ui/text/font/FontWeight;-><clinit>()V
+HSPLandroidx/compose/ui/text/font/FontWeight;-><init>(I)V
+HSPLandroidx/compose/ui/text/font/FontWeight;->equals(Ljava/lang/Object;)Z
+HSPLandroidx/compose/ui/text/font/PlatformResolveInterceptor$Companion;-><clinit>()V
+HSPLandroidx/compose/ui/text/font/PlatformResolveInterceptor;-><clinit>()V
+HSPLandroidx/compose/ui/text/font/TypefaceRequest;-><init>(Landroidx/compose/ui/text/font/FontFamily;Landroidx/compose/ui/text/font/FontWeight;IILjava/lang/Object;)V
+HSPLandroidx/compose/ui/text/font/TypefaceRequest;->equals(Ljava/lang/Object;)Z
+HSPLandroidx/compose/ui/text/font/TypefaceRequest;->hashCode()I
+HSPLandroidx/compose/ui/text/font/TypefaceResult$Immutable;-><init>(Ljava/lang/Object;Z)V
+HSPLandroidx/compose/ui/text/input/InputMethodManagerImpl;-><init>(Landroid/view/View;)V
+HSPLandroidx/compose/ui/text/input/TextFieldValue;-><clinit>()V
+HSPLandroidx/compose/ui/text/input/TextFieldValue;-><init>(Landroidx/compose/ui/text/AnnotatedString;JLandroidx/compose/ui/text/TextRange;)V
+HSPLandroidx/compose/ui/text/input/TextInputService;-><init>()V
+HSPLandroidx/compose/ui/text/input/TextInputServiceAndroid;-><init>(Landroid/view/View;Landroidx/compose/ui/input/pointer/PositionCalculator;)V
+HSPLandroidx/compose/ui/text/input/TextInputServiceAndroid_androidKt$$ExternalSyntheticLambda0;-><init>(Ljava/lang/Runnable;I)V
+HSPLandroidx/compose/ui/text/input/TextInputServiceAndroid_androidKt$$ExternalSyntheticLambda0;->doFrame(J)V
+HSPLandroidx/compose/ui/text/intl/AndroidLocale;-><init>(Ljava/util/Locale;)V
+HSPLandroidx/compose/ui/text/intl/AndroidLocaleDelegateAPI24;-><init>()V
+HSPLandroidx/compose/ui/text/intl/AndroidLocaleDelegateAPI24;->getCurrent()Landroidx/compose/ui/text/intl/LocaleList;
+HSPLandroidx/compose/ui/text/intl/Locale;-><init>(Landroidx/compose/ui/text/intl/AndroidLocale;)V
+HSPLandroidx/compose/ui/text/intl/LocaleList;-><init>(Ljava/util/List;)V
+HSPLandroidx/compose/ui/text/intl/LocaleList;->equals(Ljava/lang/Object;)Z
+HSPLandroidx/compose/ui/text/intl/PlatformLocaleKt;-><clinit>()V
+HSPLandroidx/compose/ui/text/platform/AndroidParagraphHelper_androidKt;-><clinit>()V
+HSPLandroidx/compose/ui/text/platform/AndroidParagraphIntrinsics$resolveTypeface$1;-><init>(Landroidx/compose/ui/text/platform/AndroidParagraphIntrinsics;)V
+HSPLandroidx/compose/ui/text/platform/AndroidParagraphIntrinsics;-><init>(Landroidx/compose/ui/text/TextStyle;Landroidx/compose/ui/text/font/FontFamily$Resolver;Landroidx/compose/ui/unit/Density;Ljava/lang/String;Ljava/util/List;Ljava/util/List;)V
+HSPLandroidx/compose/ui/text/platform/AndroidParagraphIntrinsics;->getHasStaleResolvedFonts()Z
+HSPLandroidx/compose/ui/text/platform/AndroidParagraphIntrinsics;->getMaxIntrinsicWidth()F
+HSPLandroidx/compose/ui/text/platform/AndroidTextPaint;-><init>(F)V
+HSPLandroidx/compose/ui/text/platform/AndroidTextPaint;->setBrush-12SF9DM(Landroidx/compose/ui/graphics/Brush;JF)V
+HSPLandroidx/compose/ui/text/platform/AndroidTextPaint;->setDrawStyle(Lkotlin/ResultKt;)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
+HSPLandroidx/compose/ui/text/platform/DefaultImpl$getFontLoadState$initCallback$1;-><init>(Landroidx/compose/runtime/ParcelableSnapshotMutableState;Landroidx/compose/ui/text/platform/DefaultImpl;)V
+HSPLandroidx/compose/ui/text/platform/DefaultImpl;-><init>()V
+HSPLandroidx/compose/ui/text/platform/DefaultImpl;->getFontLoadState()Landroidx/compose/runtime/State;
+HSPLandroidx/compose/ui/text/platform/EmojiCompatStatus;-><clinit>()V
+HSPLandroidx/compose/ui/text/platform/ImmutableBool;-><init>(Z)V
+HSPLandroidx/compose/ui/text/platform/ImmutableBool;->getValue()Ljava/lang/Object;
+HSPLandroidx/compose/ui/text/platform/URLSpanCache;-><init>()V
+HSPLandroidx/compose/ui/text/platform/extensions/LocaleListHelperMethods;-><clinit>()V
+HSPLandroidx/compose/ui/text/style/BaselineShift;-><init>(F)V
+HSPLandroidx/compose/ui/text/style/ColorStyle;-><init>(J)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
+HSPLandroidx/compose/ui/text/style/Hyphens;-><init>(I)V
+HSPLandroidx/compose/ui/text/style/Hyphens;->equals(Ljava/lang/Object;)Z
+HSPLandroidx/compose/ui/text/style/LineBreak$Strategy;-><init>(I)V
+HSPLandroidx/compose/ui/text/style/LineBreak$Strictness;-><init>(I)V
+HSPLandroidx/compose/ui/text/style/LineBreak$WordBreak;-><init>(I)V
+HSPLandroidx/compose/ui/text/style/LineBreak;-><init>(I)V
+HSPLandroidx/compose/ui/text/style/LineBreak;->equals(Ljava/lang/Object;)Z
+HSPLandroidx/compose/ui/text/style/LineHeightStyle$Alignment;-><clinit>()V
+HSPLandroidx/compose/ui/text/style/LineHeightStyle$Alignment;->constructor-impl(F)V
+HSPLandroidx/compose/ui/text/style/LineHeightStyle;-><clinit>()V
+HSPLandroidx/compose/ui/text/style/LineHeightStyle;-><init>(F)V
+HSPLandroidx/compose/ui/text/style/TextAlign;-><init>(I)V
+HSPLandroidx/compose/ui/text/style/TextAlign;->equals(Ljava/lang/Object;)Z
+HSPLandroidx/compose/ui/text/style/TextDecoration;-><clinit>()V
+HSPLandroidx/compose/ui/text/style/TextDecoration;-><init>(I)V
+HSPLandroidx/compose/ui/text/style/TextDecoration;->equals(Ljava/lang/Object;)Z
+HSPLandroidx/compose/ui/text/style/TextDirection;-><init>(I)V
+HSPLandroidx/compose/ui/text/style/TextDirection;->equals(Ljava/lang/Object;)Z
+HSPLandroidx/compose/ui/text/style/TextForegroundStyle$Unspecified;-><clinit>()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
+HSPLandroidx/compose/ui/text/style/TextGeometricTransform;-><clinit>()V
+HSPLandroidx/compose/ui/text/style/TextGeometricTransform;-><init>(FF)V
+HSPLandroidx/compose/ui/text/style/TextGeometricTransform;->equals(Ljava/lang/Object;)Z
+HSPLandroidx/compose/ui/text/style/TextIndent;-><clinit>()V
+HSPLandroidx/compose/ui/text/style/TextIndent;-><init>(JJ)V
+HSPLandroidx/compose/ui/text/style/TextIndent;->equals(Ljava/lang/Object;)Z
+HSPLandroidx/compose/ui/text/style/TextMotion;-><clinit>()V
+HSPLandroidx/compose/ui/text/style/TextMotion;-><init>(IZ)V
+HSPLandroidx/compose/ui/text/style/TextMotion;->equals(Ljava/lang/Object;)Z
+HSPLandroidx/compose/ui/unit/Constraints;-><clinit>()V
+HSPLandroidx/compose/ui/unit/Constraints;-><init>(J)V
+HSPLandroidx/compose/ui/unit/Constraints;->copy-Zbe2FdA$default(JIIIII)J
+HSPLandroidx/compose/ui/unit/Constraints;->equals-impl0(JJ)Z
+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/Density;->roundToPx-0680j_4(F)I
+HSPLandroidx/compose/ui/unit/Density;->toDp-u2uoSUM(I)F
+HSPLandroidx/compose/ui/unit/Density;->toPx--R2X_6o(J)F
+HSPLandroidx/compose/ui/unit/Density;->toPx-0680j_4(F)F
+HSPLandroidx/compose/ui/unit/DensityImpl;-><init>(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
+HSPLandroidx/compose/ui/unit/Dp$Companion;-><clinit>()V
+HSPLandroidx/compose/ui/unit/Dp$Companion;-><init>(Landroid/content/Context;)V
+HSPLandroidx/compose/ui/unit/Dp$Companion;->access$getIsShowingLayoutBounds()Z
+HSPLandroidx/compose/ui/unit/Dp$Companion;->area([F)F
+HSPLandroidx/compose/ui/unit/Dp$Companion;->bitsNeedForSize(I)I
+HSPLandroidx/compose/ui/unit/Dp$Companion;->createAndroidTypefaceApi28-RetOiIg(Ljava/lang/String;Landroidx/compose/ui/text/font/FontWeight;I)Landroid/graphics/Typeface;
+HSPLandroidx/compose/ui/unit/Dp$Companion;->createConstraints-Zbe2FdA$ui_unit_release(IIII)J
+HSPLandroidx/compose/ui/unit/Dp$Companion;->fixed-JhjzzOo(II)J
+HSPLandroidx/compose/ui/unit/Dp$Companion;->observe(Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function0;)Ljava/lang/Object;
+HSPLandroidx/compose/ui/unit/Dp;-><init>(F)V
+HSPLandroidx/compose/ui/unit/Dp;->equals(Ljava/lang/Object;)Z
+HSPLandroidx/compose/ui/unit/Dp;->equals-impl0(FF)Z
+HSPLandroidx/compose/ui/unit/DpOffset;-><clinit>()V
+HSPLandroidx/compose/ui/unit/DpRect;-><init>(FFFF)V
+HSPLandroidx/compose/ui/unit/DpRect;->equals(Ljava/lang/Object;)Z
+HSPLandroidx/compose/ui/unit/IntOffset;-><clinit>()V
+HSPLandroidx/compose/ui/unit/IntOffset;-><init>(J)V
+HSPLandroidx/compose/ui/unit/IntOffset;->getY-impl(J)I
+HSPLandroidx/compose/ui/unit/IntSize;-><init>(J)V
+HSPLandroidx/compose/ui/unit/IntSize;->equals-impl0(JJ)Z
+HSPLandroidx/compose/ui/unit/IntSize;->getHeight-impl(J)I
+HSPLandroidx/compose/ui/unit/LayoutDirection;-><clinit>()V
+HSPLandroidx/compose/ui/unit/LayoutDirection;-><init>(ILjava/lang/String;)V
+HSPLandroidx/compose/ui/unit/TextUnit;-><clinit>()V
+HSPLandroidx/compose/ui/unit/TextUnit;->equals-impl0(JJ)Z
+HSPLandroidx/compose/ui/unit/TextUnit;->getType-UIouoOA(J)J
+HSPLandroidx/compose/ui/unit/TextUnit;->getValue-impl(J)F
+HSPLandroidx/compose/ui/unit/TextUnitType;-><init>(J)V
+HSPLandroidx/compose/ui/unit/TextUnitType;->equals-impl0(JJ)Z
+HSPLandroidx/core/app/ComponentActivity;-><init>()V
+HSPLandroidx/core/app/ComponentActivity;->dispatchKeyEvent(Landroid/view/KeyEvent;)Z
+HSPLandroidx/core/app/ComponentActivity;->onCreate(Landroid/os/Bundle;)V
+HSPLandroidx/core/app/ComponentActivity;->superDispatchKeyEvent(Landroid/view/KeyEvent;)Z
+HSPLandroidx/core/app/CoreComponentFactory;-><init>()V
+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;
+HSPLandroidx/core/content/res/ComplexColorCompat;-><init>()V
+HSPLandroidx/core/content/res/ComplexColorCompat;-><init>(I)V
+HSPLandroidx/core/content/res/ComplexColorCompat;-><init>(Ljava/lang/Object;)V
+HSPLandroidx/core/content/res/ComplexColorCompat;->find(Ljava/lang/Object;)I
+HSPLandroidx/core/content/res/ComplexColorCompat;->get(Ljava/lang/Object;)Ljava/lang/Object;
+HSPLandroidx/core/content/res/ComplexColorCompat;->set(Ljava/lang/Object;Ljava/lang/Object;)V
+HSPLandroidx/core/graphics/TypefaceCompat;-><clinit>()V
+HSPLandroidx/core/graphics/TypefaceCompatApi29Impl;-><init>()V
+HSPLandroidx/core/graphics/TypefaceCompatApi29Impl;->createFromFontInfo(Landroid/content/Context;[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
+HSPLandroidx/core/graphics/TypefaceCompatUtil$Api19Impl;->openFileDescriptor(Landroid/content/ContentResolver;Landroid/net/Uri;Ljava/lang/String;Landroid/os/CancellationSignal;)Landroid/os/ParcelFileDescriptor;
+HSPLandroidx/core/os/BuildCompat$Extensions30Impl$$ExternalSyntheticApiModelOutline0;->m$1()I
+HSPLandroidx/core/os/BuildCompat$Extensions30Impl$$ExternalSyntheticApiModelOutline0;->m$2()I
+HSPLandroidx/core/os/BuildCompat$Extensions30Impl$$ExternalSyntheticApiModelOutline0;->m$3()I
+HSPLandroidx/core/os/BuildCompat$Extensions30Impl$$ExternalSyntheticApiModelOutline0;->m()I
+HSPLandroidx/core/os/BuildCompat$Extensions30Impl;-><clinit>()V
+HSPLandroidx/core/os/BuildCompat;-><clinit>()V
+HSPLandroidx/core/os/BuildCompat;->isAtLeastT()Z
+HSPLandroidx/core/os/TraceCompat$Api18Impl;->beginSection(Ljava/lang/String;)V
+HSPLandroidx/core/os/TraceCompat$Api18Impl;->endSection()V
+HSPLandroidx/core/os/TraceCompat;-><clinit>()V
+HSPLandroidx/core/provider/CallbackWithHandler$2;-><init>(ILjava/util/ArrayList;)V
+HSPLandroidx/core/provider/CallbackWithHandler$2;-><init>(Ljava/util/List;ILjava/lang/Throwable;)V
+HSPLandroidx/core/provider/CallbackWithHandler$2;->run()V
+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;
+HSPLandroidx/core/provider/FontRequest;-><init>(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/util/List;)V
+HSPLandroidx/core/provider/FontsContractCompat$FontInfo;-><init>(Landroid/net/Uri;IIZI)V
+HSPLandroidx/core/view/AccessibilityDelegateCompat$AccessibilityDelegateAdapter;-><init>(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;->sendAccessibilityEvent(Landroid/view/View;I)V
+HSPLandroidx/core/view/AccessibilityDelegateCompat$AccessibilityDelegateAdapter;->sendAccessibilityEventUnchecked(Landroid/view/View;Landroid/view/accessibility/AccessibilityEvent;)V
+HSPLandroidx/core/view/AccessibilityDelegateCompat;-><clinit>()V
+HSPLandroidx/core/view/AccessibilityDelegateCompat;-><init>()V
+HSPLandroidx/core/view/MenuHostHelper;-><init>(Landroidx/activity/ComponentActivity$$ExternalSyntheticLambda0;)V
+HSPLandroidx/core/view/MenuHostHelper;-><init>(Ljava/lang/reflect/Method;Ljava/lang/reflect/Method;Ljava/lang/reflect/Method;)V
+HSPLandroidx/core/view/ViewCompat$$ExternalSyntheticLambda0;-><init>(I)V
+HSPLandroidx/core/view/ViewCompat$$ExternalSyntheticLambda0;->invoke(D)D
+HSPLandroidx/core/view/ViewCompat$Api29Impl;->getContentCaptureSession(Landroid/view/View;)Landroid/view/contentcapture/ContentCaptureSession;
+HSPLandroidx/core/view/ViewCompat$Api30Impl;->setImportantForContentCapture(Landroid/view/View;I)V
+HSPLandroidx/core/view/ViewCompat;-><clinit>()V
+HSPLandroidx/core/view/accessibility/AccessibilityNodeProviderCompat;-><init>(Ljava/lang/Object;)V
+HSPLandroidx/customview/poolingcontainer/PoolingContainerListenerHolder;-><init>()V
+HSPLandroidx/emoji2/text/ConcurrencyHelpers$$ExternalSyntheticLambda0;-><init>(Ljava/lang/String;)V
+HSPLandroidx/emoji2/text/ConcurrencyHelpers$$ExternalSyntheticLambda0;->newThread(Ljava/lang/Runnable;)Ljava/lang/Thread;
+HSPLandroidx/emoji2/text/ConcurrencyHelpers$Handler28Impl;->createAsync(Landroid/os/Looper;)Landroid/os/Handler;
+HSPLandroidx/emoji2/text/DefaultGlyphChecker;-><clinit>()V
+HSPLandroidx/emoji2/text/DefaultGlyphChecker;-><init>()V
+HSPLandroidx/emoji2/text/EmojiCompat$CompatInternal19$1;-><init>(Landroidx/emoji2/text/EmojiCompat$CompatInternal19;)V
+HSPLandroidx/emoji2/text/EmojiCompat$CompatInternal19$1;->onLoaded(Landroidx/emoji2/text/MetadataRepo;)V
+HSPLandroidx/emoji2/text/EmojiCompat$CompatInternal19;-><init>(Landroidx/emoji2/text/EmojiCompat;)V
+HSPLandroidx/emoji2/text/EmojiCompat$CompatInternal19;->process(Ljava/lang/CharSequence;IZ)Ljava/lang/CharSequence;
+HSPLandroidx/emoji2/text/EmojiCompat$Config;-><init>(Landroidx/emoji2/text/EmojiCompat$MetadataRepoLoader;)V
+HSPLandroidx/emoji2/text/EmojiCompat;-><clinit>()V
+HSPLandroidx/emoji2/text/EmojiCompat;-><init>(Landroidx/emoji2/text/FontRequestEmojiCompatConfig;)V
+HSPLandroidx/emoji2/text/EmojiCompat;->get()Landroidx/emoji2/text/EmojiCompat;
+HSPLandroidx/emoji2/text/EmojiCompat;->getLoadState()I
+HSPLandroidx/emoji2/text/EmojiCompat;->load()V
+HSPLandroidx/emoji2/text/EmojiCompat;->onMetadataLoadSuccess()V
+HSPLandroidx/emoji2/text/EmojiCompatInitializer$1;-><init>(Landroidx/emoji2/text/EmojiCompatInitializer;Landroidx/lifecycle/Lifecycle;)V
+HSPLandroidx/emoji2/text/EmojiCompatInitializer$1;->onResume(Landroidx/lifecycle/LifecycleOwner;)V
+HSPLandroidx/emoji2/text/EmojiCompatInitializer$BackgroundDefaultLoader$$ExternalSyntheticLambda0;-><init>(Landroidx/compose/runtime/Stack;Lokhttp3/MediaType;Ljava/util/concurrent/ThreadPoolExecutor;)V
+HSPLandroidx/emoji2/text/EmojiCompatInitializer$BackgroundDefaultLoader$$ExternalSyntheticLambda0;->run()V
+HSPLandroidx/emoji2/text/EmojiCompatInitializer$BackgroundDefaultLoader$1;-><init>(Lokhttp3/MediaType;Ljava/util/concurrent/ThreadPoolExecutor;)V
+HSPLandroidx/emoji2/text/EmojiCompatInitializer$BackgroundDefaultLoader$1;->onLoaded(Landroidx/emoji2/text/MetadataRepo;)V
+HSPLandroidx/emoji2/text/EmojiCompatInitializer$LoadEmojiCompatRunnable;->run()V
+HSPLandroidx/emoji2/text/EmojiCompatInitializer;-><init>()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;->dependencies()Ljava/util/List;
+HSPLandroidx/emoji2/text/EmojiProcessor$EmojiProcessAddSpanCallback;-><init>(Landroidx/emoji2/text/UnprecomputeTextOnModificationSpannable;Lkotlin/ULong$Companion;)V
+HSPLandroidx/emoji2/text/EmojiProcessor$EmojiProcessAddSpanCallback;->getResult()Ljava/lang/Object;
+HSPLandroidx/emoji2/text/EmojiProcessor$ProcessorSm;-><init>(Landroidx/emoji2/text/MetadataRepo$Node;Z[I)V
+HSPLandroidx/emoji2/text/EmojiProcessor$ProcessorSm;->shouldUseEmojiPresentationStyleForSingleCodepoint()Z
+HSPLandroidx/emoji2/text/EmojiProcessor;-><init>(Landroidx/compose/ui/node/LayoutNode;)V
+HSPLandroidx/emoji2/text/EmojiProcessor;-><init>(Landroidx/emoji2/text/MetadataRepo;Lkotlin/ULong$Companion;Landroidx/emoji2/text/DefaultGlyphChecker;Ljava/util/Set;)V
+HSPLandroidx/emoji2/text/EmojiProcessor;->process(Ljava/lang/String;IIIZLandroidx/emoji2/text/EmojiProcessor$EmojiProcessCallback;)Ljava/lang/Object;
+HSPLandroidx/emoji2/text/FontRequestEmojiCompatConfig$FontRequestMetadataLoader$$ExternalSyntheticLambda0;-><init>(Landroidx/emoji2/text/FontRequestEmojiCompatConfig$FontRequestMetadataLoader;I)V
+HSPLandroidx/emoji2/text/FontRequestEmojiCompatConfig$FontRequestMetadataLoader$$ExternalSyntheticLambda0;->run()V
+HSPLandroidx/emoji2/text/FontRequestEmojiCompatConfig$FontRequestMetadataLoader$1;-><init>(Lkotlinx/coroutines/channels/BufferedChannel;Landroid/os/Handler;I)V
+HSPLandroidx/emoji2/text/FontRequestEmojiCompatConfig$FontRequestMetadataLoader;-><init>(Landroid/content/Context;Landroidx/core/provider/FontRequest;)V
+HSPLandroidx/emoji2/text/FontRequestEmojiCompatConfig$FontRequestMetadataLoader;->cleanUp()V
+HSPLandroidx/emoji2/text/FontRequestEmojiCompatConfig$FontRequestMetadataLoader;->load(Lokhttp3/MediaType;)V
+HSPLandroidx/emoji2/text/FontRequestEmojiCompatConfig$FontRequestMetadataLoader;->loadInternal()V
+HSPLandroidx/emoji2/text/FontRequestEmojiCompatConfig$FontRequestMetadataLoader;->retrieveFontInfo()Landroidx/core/provider/FontsContractCompat$FontInfo;
+HSPLandroidx/emoji2/text/FontRequestEmojiCompatConfig;-><clinit>()V
+HSPLandroidx/emoji2/text/FontRequestEmojiCompatConfig;-><init>(Landroid/content/Context;)V
+HSPLandroidx/emoji2/text/FontRequestEmojiCompatConfig;-><init>(Landroid/content/Context;Landroidx/core/provider/FontRequest;)V
+HSPLandroidx/emoji2/text/MetadataRepo$Node;-><init>(I)V
+HSPLandroidx/emoji2/text/MetadataRepo$Node;->put(Landroidx/emoji2/text/TypefaceEmojiRasterizer;II)V
+HSPLandroidx/emoji2/text/MetadataRepo;-><init>(Landroid/graphics/Typeface;Landroidx/emoji2/text/flatbuffer/MetadataList;)V
+HSPLandroidx/emoji2/text/TypefaceEmojiRasterizer;-><clinit>()V
+HSPLandroidx/emoji2/text/TypefaceEmojiRasterizer;-><init>(Landroidx/emoji2/text/MetadataRepo;I)V
+HSPLandroidx/emoji2/text/TypefaceEmojiRasterizer;->getCodepointAt(I)I
+HSPLandroidx/emoji2/text/TypefaceEmojiRasterizer;->getCodepointsLength()I
+HSPLandroidx/emoji2/text/TypefaceEmojiRasterizer;->getMetadataItem()Landroidx/emoji2/text/flatbuffer/MetadataItem;
+HSPLandroidx/emoji2/text/flatbuffer/Table;-><init>()V
+HSPLandroidx/emoji2/text/flatbuffer/Table;->__offset(I)I
+HSPLandroidx/lifecycle/DefaultLifecycleObserver;->onResume(Landroidx/lifecycle/LifecycleOwner;)V
+HSPLandroidx/lifecycle/DefaultLifecycleObserver;->onStart(Landroidx/lifecycle/LifecycleOwner;)V
+HSPLandroidx/lifecycle/DefaultLifecycleObserverAdapter$WhenMappings;-><clinit>()V
+HSPLandroidx/lifecycle/DefaultLifecycleObserverAdapter;-><init>(Landroidx/lifecycle/DefaultLifecycleObserver;Landroidx/lifecycle/LifecycleEventObserver;)V
+HSPLandroidx/lifecycle/DefaultLifecycleObserverAdapter;->onStateChanged(Landroidx/lifecycle/LifecycleOwner;Landroidx/lifecycle/Lifecycle$Event;)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
+HSPLandroidx/lifecycle/Lifecycle$Event$Companion;->upFrom(Landroidx/lifecycle/Lifecycle$State;)Landroidx/lifecycle/Lifecycle$Event;
+HSPLandroidx/lifecycle/Lifecycle$Event$WhenMappings;-><clinit>()V
+HSPLandroidx/lifecycle/Lifecycle$Event;-><clinit>()V
+HSPLandroidx/lifecycle/Lifecycle$Event;-><init>(ILjava/lang/String;)V
+HSPLandroidx/lifecycle/Lifecycle$Event;->getTargetState()Landroidx/lifecycle/Lifecycle$State;
+HSPLandroidx/lifecycle/Lifecycle$Event;->values()[Landroidx/lifecycle/Lifecycle$Event;
+HSPLandroidx/lifecycle/Lifecycle$State;-><clinit>()V
+HSPLandroidx/lifecycle/Lifecycle$State;-><init>(ILjava/lang/String;)V
+HSPLandroidx/lifecycle/Lifecycle;-><init>()V
+HSPLandroidx/lifecycle/LifecycleDestroyedException;-><init>(I)V
+HSPLandroidx/lifecycle/LifecycleDestroyedException;-><init>(II)V
+HSPLandroidx/lifecycle/LifecycleDestroyedException;->fillInStackTrace()Ljava/lang/Throwable;
+HSPLandroidx/lifecycle/LifecycleDispatcher$DispatcherActivityCallback;-><init>()V
+HSPLandroidx/lifecycle/LifecycleDispatcher$DispatcherActivityCallback;->onActivityCreated(Landroid/app/Activity;Landroid/os/Bundle;)V
+HSPLandroidx/lifecycle/LifecycleDispatcher;-><clinit>()V
+HSPLandroidx/lifecycle/LifecycleRegistry$ObserverWithState;-><init>(Landroidx/lifecycle/LifecycleObserver;Landroidx/lifecycle/Lifecycle$State;)V
+HSPLandroidx/lifecycle/LifecycleRegistry$ObserverWithState;->dispatchEvent(Landroidx/lifecycle/LifecycleOwner;Landroidx/lifecycle/Lifecycle$Event;)V
+HSPLandroidx/lifecycle/LifecycleRegistry;-><init>(Landroidx/lifecycle/LifecycleOwner;)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;->handleLifecycleEvent(Landroidx/lifecycle/Lifecycle$Event;)V
+HSPLandroidx/lifecycle/LifecycleRegistry;->moveToState(Landroidx/lifecycle/Lifecycle$State;)V
+HSPLandroidx/lifecycle/LifecycleRegistry;->removeObserver(Landroidx/lifecycle/LifecycleObserver;)V
+HSPLandroidx/lifecycle/LifecycleRegistry;->sync()V
+HSPLandroidx/lifecycle/Lifecycling;-><clinit>()V
+HSPLandroidx/lifecycle/ProcessLifecycleInitializer;-><init>()V
+HSPLandroidx/lifecycle/ProcessLifecycleInitializer;->create(Landroid/content/Context;)Ljava/lang/Object;
+HSPLandroidx/lifecycle/ProcessLifecycleInitializer;->dependencies()Ljava/util/List;
+HSPLandroidx/lifecycle/ProcessLifecycleOwner$Api29Impl;->registerActivityLifecycleCallbacks(Landroid/app/Activity;Landroid/app/Application$ActivityLifecycleCallbacks;)V
+HSPLandroidx/lifecycle/ProcessLifecycleOwner$attach$1$onActivityPreCreated$1;-><init>(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
+HSPLandroidx/lifecycle/ProcessLifecycleOwner$attach$1;-><init>(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
+HSPLandroidx/lifecycle/ProcessLifecycleOwner$initializationListener$1;-><init>(Landroidx/lifecycle/ProcessLifecycleOwner;)V
+HSPLandroidx/lifecycle/ProcessLifecycleOwner;-><clinit>()V
+HSPLandroidx/lifecycle/ProcessLifecycleOwner;-><init>()V
+HSPLandroidx/lifecycle/ProcessLifecycleOwner;->activityResumed$lifecycle_process_release()V
+HSPLandroidx/lifecycle/ProcessLifecycleOwner;->getLifecycle()Landroidx/lifecycle/LifecycleRegistry;
+HSPLandroidx/lifecycle/ReportFragment$LifecycleCallbacks;-><clinit>()V
+HSPLandroidx/lifecycle/ReportFragment$LifecycleCallbacks;-><init>()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
+HSPLandroidx/lifecycle/ReportFragment;-><init>()V
+HSPLandroidx/lifecycle/ReportFragment;->dispatch(Landroidx/lifecycle/Lifecycle$Event;)V
+HSPLandroidx/lifecycle/ReportFragment;->onActivityCreated(Landroid/os/Bundle;)V
+HSPLandroidx/lifecycle/ReportFragment;->onResume()V
+HSPLandroidx/lifecycle/ReportFragment;->onStart()V
+HSPLandroidx/lifecycle/SavedStateHandleAttacher;-><init>(Landroidx/lifecycle/SavedStateHandlesProvider;)V
+HSPLandroidx/lifecycle/SavedStateHandleAttacher;->onStateChanged(Landroidx/lifecycle/LifecycleOwner;Landroidx/lifecycle/Lifecycle$Event;)V
+HSPLandroidx/lifecycle/SavedStateHandlesProvider;-><init>(Landroidx/savedstate/SavedStateRegistry;Landroidx/lifecycle/ViewModelStoreOwner;)V
+HSPLandroidx/lifecycle/SavedStateHandlesVM;-><init>()V
+HSPLandroidx/lifecycle/ViewModelStore;-><init>()V
+HSPLandroidx/lifecycle/viewmodel/CreationExtras$Empty;-><clinit>()V
+HSPLandroidx/lifecycle/viewmodel/CreationExtras;-><init>()V
+HSPLandroidx/lifecycle/viewmodel/MutableCreationExtras;-><init>(Landroidx/lifecycle/viewmodel/CreationExtras;)V
+HSPLandroidx/lifecycle/viewmodel/ViewModelInitializer;-><init>(Ljava/lang/Class;)V
+HSPLandroidx/metrics/performance/DelegatingFrameMetricsListener;-><init>(Ljava/util/ArrayList;)V
+HSPLandroidx/metrics/performance/DelegatingFrameMetricsListener;->onFrameMetricsAvailable(Landroid/view/Window;Landroid/view/FrameMetrics;I)V
+HSPLandroidx/metrics/performance/FrameData;-><init>(JJZLjava/util/ArrayList;)V
+HSPLandroidx/metrics/performance/FrameDataApi24;-><init>(JJJZLjava/util/ArrayList;)V
+HSPLandroidx/metrics/performance/FrameDataApi31;-><init>(JJJJZLjava/util/ArrayList;)V
+HSPLandroidx/metrics/performance/FrameDataApi31;->copy()Landroidx/metrics/performance/FrameData;
+HSPLandroidx/metrics/performance/JankStats;-><init>(Landroid/view/Window;Lcom/example/tvcomposebasedtests/JankStatsAggregator$listener$1;)V
+HSPLandroidx/metrics/performance/JankStats;->logFrameData$metrics_performance_release(Landroidx/metrics/performance/FrameData;)V
+HSPLandroidx/metrics/performance/JankStatsApi16Impl;-><init>(Landroidx/metrics/performance/JankStats;Landroid/view/View;)V
+HSPLandroidx/metrics/performance/JankStatsApi22Impl;-><init>(Landroidx/metrics/performance/JankStats;Landroid/view/View;)V
+HSPLandroidx/metrics/performance/JankStatsApi24Impl$$ExternalSyntheticLambda0;-><init>(Landroidx/metrics/performance/JankStatsApi24Impl;Landroidx/metrics/performance/JankStats;)V
+HSPLandroidx/metrics/performance/JankStatsApi24Impl$$ExternalSyntheticLambda0;->onFrameMetricsAvailable(Landroid/view/Window;Landroid/view/FrameMetrics;I)V
+HSPLandroidx/metrics/performance/JankStatsApi24Impl;-><init>(Landroidx/metrics/performance/JankStats;Landroid/view/View;Landroid/view/Window;)V
+HSPLandroidx/metrics/performance/JankStatsApi24Impl;->getOrCreateFrameMetricsListenerDelegator(Landroid/view/Window;)Landroidx/metrics/performance/DelegatingFrameMetricsListener;
+HSPLandroidx/metrics/performance/JankStatsApi24Impl;->setupFrameTimer(Z)V
+HSPLandroidx/metrics/performance/JankStatsApi26Impl;-><init>(Landroidx/metrics/performance/JankStats;Landroid/view/View;Landroid/view/Window;)V
+HSPLandroidx/metrics/performance/JankStatsApi26Impl;->getFrameStartTime$metrics_performance_release(Landroid/view/FrameMetrics;)J
+HSPLandroidx/metrics/performance/JankStatsApi31Impl;-><init>(Landroidx/metrics/performance/JankStats;Landroid/view/View;Landroid/view/Window;)V
+HSPLandroidx/metrics/performance/JankStatsApi31Impl;->getExpectedFrameDuration(Landroid/view/FrameMetrics;)J
+HSPLandroidx/metrics/performance/JankStatsApi31Impl;->getFrameData$metrics_performance_release(JJLandroid/view/FrameMetrics;)Landroidx/metrics/performance/FrameDataApi24;
+HSPLandroidx/metrics/performance/PerformanceMetricsState;-><init>()V
+HSPLandroidx/metrics/performance/PerformanceMetricsState;->addFrameState(JJLjava/util/ArrayList;Ljava/util/ArrayList;)V
+HSPLandroidx/metrics/performance/PerformanceMetricsState;->cleanupSingleFrameStates$metrics_performance_release()V
+HSPLandroidx/metrics/performance/PerformanceMetricsState;->getIntervalStates$metrics_performance_release(JJLjava/util/ArrayList;)V
+HSPLandroidx/profileinstaller/ProfileInstallerInitializer$$ExternalSyntheticLambda0;-><init>(Ljava/lang/Object;ILjava/lang/Object;)V
+HSPLandroidx/profileinstaller/ProfileInstallerInitializer$$ExternalSyntheticLambda0;->run()V
+HSPLandroidx/profileinstaller/ProfileInstallerInitializer$$ExternalSyntheticLambda1;-><init>(Landroid/content/Context;I)V
+HSPLandroidx/profileinstaller/ProfileInstallerInitializer$Choreographer16Impl;->postFrameCallback(Ljava/lang/Runnable;)V
+HSPLandroidx/profileinstaller/ProfileInstallerInitializer$Handler28Impl;->createAsync(Landroid/os/Looper;)Landroid/os/Handler;
+HSPLandroidx/profileinstaller/ProfileInstallerInitializer;-><init>()V
+HSPLandroidx/profileinstaller/ProfileInstallerInitializer;->create(Landroid/content/Context;)Ljava/lang/Object;
+HSPLandroidx/profileinstaller/ProfileInstallerInitializer;->dependencies()Ljava/util/List;
+HSPLandroidx/savedstate/Recreator;-><init>(Landroidx/savedstate/SavedStateRegistryOwner;)V
+HSPLandroidx/savedstate/Recreator;->onStateChanged(Landroidx/lifecycle/LifecycleOwner;Landroidx/lifecycle/Lifecycle$Event;)V
+HSPLandroidx/savedstate/SavedStateRegistry$$ExternalSyntheticLambda0;-><init>(Landroidx/savedstate/SavedStateRegistry;)V
+HSPLandroidx/savedstate/SavedStateRegistry$$ExternalSyntheticLambda0;->onStateChanged(Landroidx/lifecycle/LifecycleOwner;Landroidx/lifecycle/Lifecycle$Event;)V
+HSPLandroidx/savedstate/SavedStateRegistry;-><init>()V
+HSPLandroidx/savedstate/SavedStateRegistry;->consumeRestoredStateForKey(Ljava/lang/String;)Landroid/os/Bundle;
+HSPLandroidx/savedstate/SavedStateRegistry;->registerSavedStateProvider(Ljava/lang/String;Landroidx/savedstate/SavedStateRegistry$SavedStateProvider;)V
+HSPLandroidx/savedstate/SavedStateRegistryController;-><init>(Landroidx/savedstate/SavedStateRegistryOwner;)V
+HSPLandroidx/savedstate/SavedStateRegistryController;->performAttach()V
+HSPLandroidx/startup/AppInitializer;-><clinit>()V
+HSPLandroidx/startup/AppInitializer;-><init>(Landroid/content/Context;)V
+HSPLandroidx/startup/AppInitializer;->discoverAndInitialize(Landroid/os/Bundle;)V
+HSPLandroidx/startup/AppInitializer;->doInitialize(Ljava/lang/Class;Ljava/util/HashSet;)Ljava/lang/Object;
+HSPLandroidx/startup/AppInitializer;->getInstance(Landroid/content/Context;)Landroidx/startup/AppInitializer;
+HSPLandroidx/startup/InitializationProvider;-><init>()V
+HSPLandroidx/startup/InitializationProvider;->onCreate()Z
+HSPLandroidx/tracing/Trace$$ExternalSyntheticApiModelOutline0;->m()Z
+HSPLandroidx/tracing/Trace$$ExternalSyntheticApiModelOutline0;->m(Landroid/app/Activity;Landroidx/lifecycle/ReportFragment$LifecycleCallbacks;)V
+HSPLandroidx/tv/foundation/PivotOffsets;-><init>()V
+HSPLandroidx/tv/foundation/TvBringIntoViewSpec;-><init>(Landroidx/tv/foundation/PivotOffsets;Z)V
+HSPLandroidx/tv/foundation/TvBringIntoViewSpec;->calculateScrollDistance(FFF)F
+HSPLandroidx/tv/foundation/TvBringIntoViewSpec;->getScrollAnimationSpec()Landroidx/compose/animation/core/AnimationSpec;
+HSPLandroidx/tv/foundation/lazy/grid/LazyGridItemPlacementAnimator;-><init>(I)V
+HSPLandroidx/tv/foundation/lazy/grid/LazyGridItemPlacementAnimator;->reset()V
+HSPLandroidx/tv/foundation/lazy/grid/LazyGridKt$rememberLazyGridMeasurePolicy$1$1$3;-><init>(Landroidx/compose/foundation/lazy/layout/LazyLayoutMeasureScopeImpl;JIII)V
+HSPLandroidx/tv/foundation/lazy/grid/LazyGridKt$rememberLazyGridMeasurePolicy$1$1$3;->invoke(IILkotlin/jvm/functions/Function1;)Landroidx/compose/ui/layout/MeasureResult;
+HSPLandroidx/tv/foundation/lazy/grid/LazyGridKt$rememberLazyGridMeasurePolicy$1$1$3;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
+HSPLandroidx/tv/foundation/lazy/grid/LazyGridScrollPosition;-><init>(III)V
+HSPLandroidx/tv/foundation/lazy/grid/LazyGridScrollPosition;->getIndex()I
+HSPLandroidx/tv/foundation/lazy/grid/LazyGridScrollPosition;->setIndex(I)V
+HSPLandroidx/tv/foundation/lazy/grid/LazyGridScrollPosition;->update(II)V
+HSPLandroidx/tv/foundation/lazy/grid/TvLazyGridState$remeasurementModifier$1;-><init>(Landroidx/compose/foundation/gestures/ScrollableState;I)V
+HSPLandroidx/tv/foundation/lazy/layout/AwaitFirstLayoutModifier$waitForFirstLayout$1;-><init>(Landroidx/tv/foundation/lazy/layout/AwaitFirstLayoutModifier;Lkotlin/coroutines/Continuation;)V
+HSPLandroidx/tv/foundation/lazy/layout/AwaitFirstLayoutModifier;->waitForFirstLayout(Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
+HSPLandroidx/tv/foundation/lazy/layout/LazyLayoutNearestRangeState;-><clinit>()V
+HSPLandroidx/tv/foundation/lazy/layout/LazyLayoutNearestRangeState;-><init>(III)V
+HSPLandroidx/tv/foundation/lazy/layout/LazyLayoutNearestRangeState;->getValue()Ljava/lang/Object;
+HSPLandroidx/tv/foundation/lazy/layout/LazyLayoutNearestRangeState;->update(I)V
+HSPLandroidx/tv/foundation/lazy/layout/LazyLayoutSemanticsKt$LazyLayoutSemanticState$1;-><init>(Landroidx/tv/foundation/lazy/list/TvLazyListState;Z)V
+HSPLandroidx/tv/foundation/lazy/layout/LazyLayoutSemanticsKt$LazyLayoutSemanticState$1;->collectionInfo()Landroidx/compose/ui/semantics/CollectionInfo;
+HSPLandroidx/tv/foundation/lazy/layout/LazyLayoutSemanticsKt$lazyLayoutSemantics$1$1;-><init>(Landroidx/tv/material3/TabKt$Tab$3$1;ZLandroidx/compose/ui/semantics/ScrollAxisRange;Landroidx/compose/foundation/ScrollKt$scroll$2$semantics$1$1;Landroidx/compose/foundation/layout/OffsetNode$measure$1;Landroidx/compose/ui/semantics/CollectionInfo;)V
+HSPLandroidx/tv/foundation/lazy/layout/NearestRangeKeyIndexMap$2$1;-><init>(IILjava/util/HashMap;Landroidx/tv/foundation/lazy/layout/NearestRangeKeyIndexMap;)V
+HSPLandroidx/tv/foundation/lazy/layout/NearestRangeKeyIndexMap$2$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
+HSPLandroidx/tv/foundation/lazy/layout/NearestRangeKeyIndexMap;-><init>(Lkotlin/ranges/IntRange;Landroidx/tv/material3/TabKt;)V
+HSPLandroidx/tv/foundation/lazy/layout/NearestRangeKeyIndexMap;->getKey(I)Ljava/lang/Object;
+HSPLandroidx/tv/foundation/lazy/list/EmptyLazyListLayoutInfo;-><clinit>()V
+HSPLandroidx/tv/foundation/lazy/list/LazyLayoutBeyondBoundsModifierLocal;-><clinit>()V
+HSPLandroidx/tv/foundation/lazy/list/LazyLayoutBeyondBoundsModifierLocal;-><init>(Landroidx/tv/foundation/lazy/list/LazyLayoutBeyondBoundsState;Landroidx/compose/runtime/Stack;ZLandroidx/compose/ui/unit/LayoutDirection;Landroidx/compose/foundation/gestures/Orientation;)V
+HSPLandroidx/tv/foundation/lazy/list/LazyLayoutBeyondBoundsModifierLocal;->getKey()Landroidx/compose/ui/modifier/ProvidableModifierLocal;
+HSPLandroidx/tv/foundation/lazy/list/LazyListBeyondBoundsState;-><init>(Landroidx/tv/foundation/lazy/list/TvLazyListState;I)V
+HSPLandroidx/tv/foundation/lazy/list/LazyListItemProviderImpl;-><init>(Landroidx/tv/foundation/lazy/list/TvLazyListState;Landroidx/tv/foundation/lazy/list/TvLazyListIntervalContent;Landroidx/tv/foundation/lazy/list/TvLazyListItemScopeImpl;Landroidx/tv/foundation/lazy/layout/NearestRangeKeyIndexMap;)V
+HSPLandroidx/tv/foundation/lazy/list/LazyListItemProviderImpl;->Item(ILjava/lang/Object;Landroidx/compose/runtime/Composer;I)V
+HSPLandroidx/tv/foundation/lazy/list/LazyListItemProviderImpl;->equals(Ljava/lang/Object;)Z
+HSPLandroidx/tv/foundation/lazy/list/LazyListItemProviderImpl;->getContentType(I)Ljava/lang/Object;
+HSPLandroidx/tv/foundation/lazy/list/LazyListItemProviderImpl;->getItemCount()I
+HSPLandroidx/tv/foundation/lazy/list/LazyListItemProviderImpl;->getKey(I)Ljava/lang/Object;
+HSPLandroidx/tv/foundation/lazy/list/LazyListKt$rememberLazyListMeasurePolicy$1$1$measuredItemProvider$1;-><init>(JZLandroidx/tv/foundation/lazy/list/LazyListItemProviderImpl;Landroidx/compose/foundation/lazy/layout/LazyLayoutMeasureScopeImpl;IILandroidx/compose/ui/Alignment$Horizontal;Landroidx/compose/ui/Alignment$Vertical;ZIIJ)V
+HSPLandroidx/tv/foundation/lazy/list/LazyListKt$rememberLazyListMeasurePolicy$1$1$measuredItemProvider$1;->getAndMeasure(I)Landroidx/tv/foundation/lazy/list/LazyListMeasuredItem;
+HSPLandroidx/tv/foundation/lazy/list/LazyListKt$rememberLazyListMeasurePolicy$1$1;-><init>(Landroidx/tv/foundation/lazy/list/TvLazyListState;ZLandroidx/compose/foundation/layout/PaddingValuesImpl;ZLkotlin/reflect/KProperty0;Landroidx/compose/foundation/layout/Arrangement$Vertical;Landroidx/compose/foundation/layout/Arrangement$Horizontal;ILandroidx/compose/ui/Alignment$Horizontal;Landroidx/compose/ui/Alignment$Vertical;)V
+HSPLandroidx/tv/foundation/lazy/list/LazyListKt$rememberLazyListMeasurePolicy$1$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
+HSPLandroidx/tv/foundation/lazy/list/LazyListMeasureResult;-><init>(Landroidx/tv/foundation/lazy/list/LazyListMeasuredItem;IZFLandroidx/compose/ui/layout/MeasureResult;FLjava/util/List;II)V
+HSPLandroidx/tv/foundation/lazy/list/LazyListMeasureResult;->getAlignmentLines()Ljava/util/Map;
+HSPLandroidx/tv/foundation/lazy/list/LazyListMeasureResult;->getHeight()I
+HSPLandroidx/tv/foundation/lazy/list/LazyListMeasureResult;->getTotalItemsCount()I
+HSPLandroidx/tv/foundation/lazy/list/LazyListMeasureResult;->getVisibleItemsInfo()Ljava/util/List;
+HSPLandroidx/tv/foundation/lazy/list/LazyListMeasureResult;->getWidth()I
+HSPLandroidx/tv/foundation/lazy/list/LazyListMeasureResult;->placeChildren()V
+HSPLandroidx/tv/foundation/lazy/list/LazyListMeasuredItem;-><init>(ILjava/util/List;ZLandroidx/compose/ui/Alignment$Horizontal;Landroidx/compose/ui/Alignment$Vertical;Landroidx/compose/ui/unit/LayoutDirection;ZIIIJLjava/lang/Object;Ljava/lang/Object;)V
+HSPLandroidx/tv/foundation/lazy/list/LazyListMeasuredItem;->getParentData(I)V
+HSPLandroidx/tv/foundation/lazy/list/LazyListMeasuredItem;->place(Landroidx/compose/ui/layout/Placeable$PlacementScope;)V
+HSPLandroidx/tv/foundation/lazy/list/LazyListMeasuredItem;->position(III)V
+HSPLandroidx/tv/foundation/lazy/list/LazyListStateKt$rememberTvLazyListState$1$1;-><init>(III)V
+HSPLandroidx/tv/foundation/lazy/list/LazyListStateKt$rememberTvLazyListState$1$1;->invoke()Ljava/lang/Object;
+HSPLandroidx/tv/foundation/lazy/list/LazyListStateKt;-><clinit>()V
+HSPLandroidx/tv/foundation/lazy/list/LazyListStateKt;->rememberTvLazyListState(Landroidx/compose/runtime/Composer;)Landroidx/tv/foundation/lazy/list/TvLazyListState;
+HSPLandroidx/tv/foundation/lazy/list/TvLazyListInterval;-><init>(Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function1;Landroidx/compose/runtime/internal/ComposableLambdaImpl;)V
+HSPLandroidx/tv/foundation/lazy/list/TvLazyListInterval;->getKey()Lkotlin/jvm/functions/Function1;
+HSPLandroidx/tv/foundation/lazy/list/TvLazyListInterval;->getType()Lkotlin/jvm/functions/Function1;
+HSPLandroidx/tv/foundation/lazy/list/TvLazyListIntervalContent;-><init>(Lkotlin/jvm/functions/Function1;)V
+HSPLandroidx/tv/foundation/lazy/list/TvLazyListIntervalContent;->getIntervals()Landroidx/compose/foundation/lazy/layout/MutableIntervalList;
+HSPLandroidx/tv/foundation/lazy/list/TvLazyListItemScopeImpl;-><init>()V
+HSPLandroidx/tv/foundation/lazy/list/TvLazyListScope;->items$default(Landroidx/tv/foundation/lazy/list/TvLazyListScope;ILandroidx/compose/runtime/internal/ComposableLambdaImpl;)V
+HSPLandroidx/tv/foundation/lazy/list/TvLazyListState$scroll$1;-><init>(Landroidx/tv/foundation/lazy/list/TvLazyListState;Lkotlin/coroutines/Continuation;)V
+HSPLandroidx/tv/foundation/lazy/list/TvLazyListState$scroll$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;
+HSPLandroidx/tv/foundation/lazy/list/TvLazyListState;-><clinit>()V
+HSPLandroidx/tv/foundation/lazy/list/TvLazyListState;-><init>(II)V
+HSPLandroidx/tv/foundation/lazy/list/TvLazyListState;->applyMeasureResult$tv_foundation_release(Landroidx/tv/foundation/lazy/list/LazyListMeasureResult;Z)V
+HSPLandroidx/tv/foundation/lazy/list/TvLazyListState;->getCanScrollBackward()Z
+HSPLandroidx/tv/foundation/lazy/list/TvLazyListState;->getCanScrollForward()Z
+HSPLandroidx/tv/foundation/lazy/list/TvLazyListState;->scroll(Landroidx/compose/foundation/MutatePriority;Lkotlin/jvm/functions/Function2;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
+HSPLandroidx/tv/material3/Border;-><clinit>()V
+HSPLandroidx/tv/material3/Border;-><init>(Landroidx/compose/foundation/BorderStroke;FLandroidx/compose/ui/graphics/Shape;)V
+HSPLandroidx/tv/material3/Border;->equals(Ljava/lang/Object;)Z
+HSPLandroidx/tv/material3/ColorScheme;-><init>(JJJJJJJJJJJJJJJJJJJJJJJJJJJJJ)V
+HSPLandroidx/tv/material3/ColorScheme;->getInverseSurface-0d7_KjU()J
+HSPLandroidx/tv/material3/ColorScheme;->getOnSurface-0d7_KjU()J
+HSPLandroidx/tv/material3/ColorScheme;->getSurface-0d7_KjU()J
+HSPLandroidx/tv/material3/ColorSchemeKt$LocalColorScheme$1;-><clinit>()V
+HSPLandroidx/tv/material3/ColorSchemeKt$LocalColorScheme$1;-><init>(I)V
+HSPLandroidx/tv/material3/ColorSchemeKt$LocalColorScheme$1;->invoke()Ljava/lang/Object;
+HSPLandroidx/tv/material3/ColorSchemeKt;-><clinit>()V
+HSPLandroidx/tv/material3/ColorSchemeKt;->contentColorFor-ek8zF_U(JLandroidx/compose/runtime/Composer;)J
+HSPLandroidx/tv/material3/ContentColorKt;-><clinit>()V
+HSPLandroidx/tv/material3/Glow;-><clinit>()V
+HSPLandroidx/tv/material3/Glow;-><init>(JF)V
+HSPLandroidx/tv/material3/Glow;->equals(Ljava/lang/Object;)Z
+HSPLandroidx/tv/material3/GlowIndication;-><init>(JLandroidx/compose/ui/graphics/Shape;FFF)V
+HSPLandroidx/tv/material3/GlowIndication;->rememberUpdatedInstance(Landroidx/compose/foundation/interaction/InteractionSource;Landroidx/compose/runtime/Composer;)Landroidx/compose/foundation/IndicationInstance;
+HSPLandroidx/tv/material3/GlowIndicationInstance;-><init>(JLandroidx/compose/ui/graphics/Shape;Landroidx/compose/ui/unit/Density;FFF)V
+HSPLandroidx/tv/material3/GlowIndicationInstance;->drawIndication(Landroidx/compose/ui/graphics/drawscope/ContentDrawScope;)V
+HSPLandroidx/tv/material3/ScaleIndication;-><init>(F)V
+HSPLandroidx/tv/material3/ScaleIndicationInstance;-><init>(F)V
+HSPLandroidx/tv/material3/ScaleIndicationInstance;->drawIndication(Landroidx/compose/ui/graphics/drawscope/ContentDrawScope;)V
+HSPLandroidx/tv/material3/ScaleIndicationTokens;-><clinit>()V
+HSPLandroidx/tv/material3/ShapesKt$LocalShapes$1;-><clinit>()V
+HSPLandroidx/tv/material3/ShapesKt$LocalShapes$1;-><init>(I)V
+HSPLandroidx/tv/material3/ShapesKt$LocalShapes$1;->invoke()Ljava/lang/Object;
+HSPLandroidx/tv/material3/SurfaceKt$Surface$4;-><init>(ZLkotlin/jvm/functions/Function1;Landroidx/compose/ui/Modifier;ZLkotlin/jvm/functions/Function0;FLandroidx/tv/material3/ToggleableSurfaceShape;Landroidx/tv/material3/ToggleableSurfaceColors;Landroidx/tv/material3/ToggleableSurfaceScale;Landroidx/tv/material3/ToggleableSurfaceBorder;Landroidx/tv/material3/ToggleableSurfaceGlow;Landroidx/compose/foundation/interaction/MutableInteractionSourceImpl;Lkotlin/jvm/functions/Function3;III)V
+HSPLandroidx/tv/material3/SurfaceKt$SurfaceImpl$2$2$1;-><init>(ILjava/lang/Object;)V
+HSPLandroidx/tv/material3/SurfaceKt$SurfaceImpl$2$2$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
+HSPLandroidx/tv/material3/SurfaceKt$SurfaceImpl$2$4$1;-><init>(Landroidx/compose/ui/graphics/Shape;JI)V
+HSPLandroidx/tv/material3/SurfaceKt$SurfaceImpl$2$4$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
+HSPLandroidx/tv/material3/SurfaceKt$SurfaceImpl$2$5$1;-><init>(FLandroidx/compose/ui/graphics/Shape;)V
+HSPLandroidx/tv/material3/SurfaceKt$SurfaceImpl$2$5$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
+HSPLandroidx/tv/material3/SurfaceKt$SurfaceImpl$2;-><init>(JILandroidx/compose/ui/Modifier;Landroidx/compose/foundation/interaction/MutableInteractionSourceImpl;FLandroidx/tv/material3/Glow;Landroidx/compose/ui/graphics/Shape;Landroidx/tv/material3/Border;FLandroidx/compose/runtime/MutableState;ZLkotlin/jvm/functions/Function3;I)V
+HSPLandroidx/tv/material3/SurfaceKt$SurfaceImpl$3;-><init>(Landroidx/compose/ui/Modifier;ZZLandroidx/compose/ui/graphics/Shape;JJFLandroidx/tv/material3/Border;Landroidx/tv/material3/Glow;FLandroidx/compose/foundation/interaction/MutableInteractionSourceImpl;Lkotlin/jvm/functions/Function3;III)V
+HSPLandroidx/tv/material3/SurfaceKt$SurfaceImpl$3;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
+HSPLandroidx/tv/material3/SurfaceKt$handleDPadEnter$2$1;-><init>(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;I)V
+HSPLandroidx/tv/material3/SurfaceKt$handleDPadEnter$2$1;->invoke(Landroidx/compose/animation/core/AnimationScope;)V
+HSPLandroidx/tv/material3/SurfaceKt$handleDPadEnter$2$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
+HSPLandroidx/tv/material3/SurfaceKt$handleDPadEnter$2$2;-><init>(Lkotlinx/coroutines/CoroutineScope;Lkotlin/jvm/functions/Function0;Lkotlin/jvm/functions/Function0;Lkotlin/jvm/functions/Function1;ZLandroidx/compose/foundation/interaction/MutableInteractionSourceImpl;Landroidx/compose/foundation/interaction/PressInteraction$Press;Landroidx/compose/runtime/MutableState;)V
+HSPLandroidx/tv/material3/SurfaceKt$handleDPadEnter$2$2;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
+HSPLandroidx/tv/material3/SurfaceKt$handleDPadEnter$2;-><init>(Landroidx/compose/foundation/interaction/MutableInteractionSourceImpl;Lkotlin/jvm/functions/Function0;Lkotlin/jvm/functions/Function0;Lkotlin/jvm/functions/Function1;ZZ)V
+HSPLandroidx/tv/material3/SurfaceKt$handleDPadEnter$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
+HSPLandroidx/tv/material3/SurfaceKt$tvToggleable$1$1;-><init>(Landroidx/compose/ui/platform/AndroidComposeView;Z)V
+HSPLandroidx/tv/material3/SurfaceKt$tvToggleable$1$2;-><init>(Lkotlin/jvm/functions/Function0;I)V
+HSPLandroidx/tv/material3/SurfaceKt$tvToggleable$1$2;->invoke()Ljava/lang/Object;
+HSPLandroidx/tv/material3/SurfaceKt$tvToggleable$1;-><init>(ZLkotlin/jvm/functions/Function1;ZLkotlin/jvm/functions/Function0;)V
+HSPLandroidx/tv/material3/SurfaceKt;-><clinit>()V
+HSPLandroidx/tv/material3/SurfaceKt;->Surface-xYaah8o(ZLkotlin/jvm/functions/Function1;Landroidx/compose/ui/Modifier;ZLkotlin/jvm/functions/Function0;FLandroidx/tv/material3/ToggleableSurfaceShape;Landroidx/tv/material3/ToggleableSurfaceColors;Landroidx/tv/material3/ToggleableSurfaceScale;Landroidx/tv/material3/ToggleableSurfaceBorder;Landroidx/tv/material3/ToggleableSurfaceGlow;Landroidx/compose/foundation/interaction/MutableInteractionSourceImpl;Lkotlin/jvm/functions/Function3;Landroidx/compose/runtime/Composer;III)V
+HSPLandroidx/tv/material3/SurfaceKt;->Surface_xYaah8o$lambda$4(Landroidx/compose/runtime/MutableState;)Z
+HSPLandroidx/tv/material3/SurfaceKt;->Surface_xYaah8o$lambda$5(Landroidx/compose/runtime/MutableState;)Z
+HSPLandroidx/tv/material3/SurfaceKt;->access$surfaceColorAtElevation-CLU3JFs(JFLandroidx/compose/runtime/Composer;)J
+HSPLandroidx/tv/material3/TabColors;-><init>(JJJJJJJJ)V
+HSPLandroidx/tv/material3/TabKt$Tab$1;-><clinit>()V
+HSPLandroidx/tv/material3/TabKt$Tab$1;-><init>()V
+HSPLandroidx/tv/material3/TabKt$Tab$3$1;-><init>(Lkotlin/jvm/functions/Function0;I)V
+HSPLandroidx/tv/material3/TabKt$Tab$3$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
+HSPLandroidx/tv/material3/TabKt$Tab$4$1;-><init>(IZ)V
+HSPLandroidx/tv/material3/TabKt$Tab$4$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
+HSPLandroidx/tv/material3/TabKt$Tab$6;-><init>(Lkotlin/jvm/functions/Function3;I)V
+HSPLandroidx/tv/material3/TabKt$Tab$6;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
+HSPLandroidx/tv/material3/TabKt$Tab$7;-><init>(Landroidx/tv/material3/TabRowScopeImpl;ZLkotlin/jvm/functions/Function0;Landroidx/compose/ui/Modifier;Lkotlin/jvm/functions/Function0;ZLandroidx/tv/material3/TabColors;Landroidx/compose/foundation/interaction/MutableInteractionSourceImpl;Lkotlin/jvm/functions/Function3;II)V
+HSPLandroidx/tv/material3/TabKt;-><clinit>()V
+HSPLandroidx/tv/material3/TabKt;->BasicText-BpD7jsM(Ljava/lang/String;Landroidx/compose/ui/Modifier;Landroidx/compose/ui/text/TextStyle;Lkotlin/jvm/functions/Function1;IZILandroidx/compose/runtime/Composer;II)V
+HSPLandroidx/tv/material3/TabKt;->BasicText-VhcvRP8(Ljava/lang/String;Landroidx/compose/ui/Modifier;Landroidx/compose/ui/text/TextStyle;Lkotlin/jvm/functions/Function1;IZIILandroidx/compose/runtime/Composer;II)V
+HSPLandroidx/tv/material3/TabKt;->DisposableEffect(Ljava/lang/Object;Lkotlin/jvm/functions/Function1;Landroidx/compose/runtime/Composer;)V
+HSPLandroidx/tv/material3/TabKt;->LaunchedEffect(Ljava/lang/Object;Ljava/lang/Object;Lkotlin/jvm/functions/Function2;Landroidx/compose/runtime/Composer;)V
+HSPLandroidx/tv/material3/TabKt;->LaunchedEffect(Ljava/lang/Object;Lkotlin/jvm/functions/Function2;Landroidx/compose/runtime/Composer;)V
+HSPLandroidx/tv/material3/TabKt;->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
+HSPLandroidx/tv/material3/TabKt;->LazyLayoutPrefetcher(Landroidx/compose/foundation/lazy/layout/LazyLayoutPrefetchState;Landroidx/compose/foundation/lazy/layout/LazyLayoutItemContentFactory;Landroidx/compose/ui/layout/SubcomposeLayoutState;Landroidx/compose/runtime/Composer;I)V
+HSPLandroidx/tv/material3/TabKt;->SideEffect(Lkotlin/jvm/functions/Function0;Landroidx/compose/runtime/Composer;)V
+HSPLandroidx/tv/material3/TabKt;->Tab(Landroidx/tv/material3/TabRowScopeImpl;ZLkotlin/jvm/functions/Function0;Landroidx/compose/ui/Modifier;Lkotlin/jvm/functions/Function0;ZLandroidx/tv/material3/TabColors;Landroidx/compose/foundation/interaction/MutableInteractionSourceImpl;Lkotlin/jvm/functions/Function3;Landroidx/compose/runtime/Composer;II)V
+HSPLandroidx/tv/material3/TabKt;->TabRow-pAZo6Ak(ILandroidx/compose/ui/Modifier;JJLkotlin/jvm/functions/Function2;Lkotlin/jvm/functions/Function4;Lkotlin/jvm/functions/Function3;Landroidx/compose/runtime/Composer;II)V
+HSPLandroidx/tv/material3/TabKt;->access$binarySearch(ILandroidx/compose/runtime/collection/MutableVector;)I
+HSPLandroidx/tv/material3/TabKt;->animate(Landroidx/compose/animation/core/AnimationState;Landroidx/compose/animation/core/Animation;JLkotlin/jvm/functions/Function1;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
+HSPLandroidx/tv/material3/TabKt;->callWithFrameNanos(Landroidx/compose/animation/core/Animation;Lkotlin/jvm/functions/Function1;Landroidx/compose/animation/core/SuspendAnimationKt$animate$4;)Ljava/lang/Object;
+HSPLandroidx/tv/material3/TabKt;->collectIsFocusedAsState(Landroidx/compose/foundation/interaction/InteractionSource;Landroidx/compose/runtime/Composer;I)Landroidx/compose/runtime/MutableState;
+HSPLandroidx/tv/material3/TabKt;->complexSqrt(D)Landroidx/compose/animation/core/ComplexDouble;
+HSPLandroidx/tv/material3/TabKt;->copy(Landroidx/compose/animation/core/AnimationVector;)Landroidx/compose/animation/core/AnimationVector;
+HSPLandroidx/tv/material3/TabKt;->createCompositionCoroutineScope(Landroidx/compose/runtime/Composer;)Lkotlinx/coroutines/internal/ContextScope;
+HSPLandroidx/tv/material3/TabKt;->derivedStateObservers()Landroidx/compose/runtime/collection/MutableVector;
+HSPLandroidx/tv/material3/TabKt;->doAnimationFrameWithScale(Landroidx/compose/animation/core/AnimationScope;JFLandroidx/compose/animation/core/Animation;Landroidx/compose/animation/core/AnimationState;Lkotlin/jvm/functions/Function1;)V
+HSPLandroidx/tv/material3/TabKt;->finalConstraints-tfFHcEY(JZIF)J
+HSPLandroidx/tv/material3/TabKt;->getContentType(I)Ljava/lang/Object;
+HSPLandroidx/tv/material3/TabKt;->getDurationScale(Lkotlin/coroutines/CoroutineContext;)F
+HSPLandroidx/tv/material3/TabKt;->getPoolingContainerListenerHolder(Landroid/view/View;)Landroidx/customview/poolingcontainer/PoolingContainerListenerHolder;
+HSPLandroidx/tv/material3/TabKt;->mutableStateOf$default(Ljava/lang/Object;)Landroidx/compose/runtime/ParcelableSnapshotMutableState;
+HSPLandroidx/tv/material3/TabKt;->read(Landroidx/compose/runtime/PersistentCompositionLocalMap;Landroidx/compose/runtime/ProvidableCompositionLocal;)Ljava/lang/Object;
+HSPLandroidx/tv/material3/TabKt;->rememberSaveable([Ljava/lang/Object;Landroidx/compose/runtime/saveable/SaverKt$Saver$1;Lkotlin/jvm/functions/Function0;Landroidx/compose/runtime/Composer;)Ljava/lang/Object;
+HSPLandroidx/tv/material3/TabKt;->rememberUpdatedState(Ljava/lang/Object;Landroidx/compose/runtime/Composer;)Landroidx/compose/runtime/MutableState;
+HSPLandroidx/tv/material3/TabKt;->resumeCancellableWith(Lkotlin/coroutines/Continuation;Ljava/lang/Object;Lkotlin/jvm/functions/Function1;)V
+HSPLandroidx/tv/material3/TabKt;->spring$default(FLjava/lang/Comparable;I)Landroidx/compose/animation/core/SpringSpec;
+HSPLandroidx/tv/material3/TabKt;->tween$default(ILandroidx/compose/animation/core/Easing;)Landroidx/compose/animation/core/TweenSpec;
+HSPLandroidx/tv/material3/TabKt;->updateCompositionMap([Landroidx/compose/runtime/ProvidedValue;Landroidx/compose/runtime/PersistentCompositionLocalMap;Landroidx/compose/runtime/PersistentCompositionLocalMap;)Landroidx/compose/runtime/internal/PersistentCompositionLocalHashMap;
+HSPLandroidx/tv/material3/TabKt;->updateState(Landroidx/compose/animation/core/AnimationScope;Landroidx/compose/animation/core/AnimationState;)V
+HSPLandroidx/tv/material3/TabKt;->withFrameNanos(Lkotlin/jvm/functions/Function1;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
+HSPLandroidx/tv/material3/TabRowDefaults$PillIndicator$1;-><init>(Landroidx/tv/material3/TabRowDefaults;Landroidx/compose/ui/unit/DpRect;ZLandroidx/compose/ui/Modifier;JJII)V
+HSPLandroidx/tv/material3/TabRowDefaults$PillIndicator$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
+HSPLandroidx/tv/material3/TabRowDefaults;-><clinit>()V
+HSPLandroidx/tv/material3/TabRowDefaults;->PillIndicator-jA1GFJw(Landroidx/compose/ui/unit/DpRect;ZLandroidx/compose/ui/Modifier;JJLandroidx/compose/runtime/Composer;II)V
+HSPLandroidx/tv/material3/TabRowKt$TabRow$1;-><init>(I)V
+HSPLandroidx/tv/material3/TabRowKt$TabRow$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
+HSPLandroidx/tv/material3/TabRowKt$TabRow$2$1$1;-><init>(Landroidx/compose/runtime/MutableState;I)V
+HSPLandroidx/tv/material3/TabRowKt$TabRow$2$1$1;->invoke(Landroidx/compose/ui/focus/FocusState;)V
+HSPLandroidx/tv/material3/TabRowKt$TabRow$2$1$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
+HSPLandroidx/tv/material3/TabRowKt$TabRow$2$2$1$1$2;-><init>(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;II)V
+HSPLandroidx/tv/material3/TabRowKt$TabRow$2$2$1$1$2;-><init>(Lkotlin/jvm/functions/Function4;Ljava/util/ArrayList;ILandroidx/compose/runtime/MutableState;)V
+HSPLandroidx/tv/material3/TabRowKt$TabRow$2$2$1$1$2;->invoke(Landroidx/compose/runtime/Composer;I)V
+HSPLandroidx/tv/material3/TabRowKt$TabRow$2$2$1$1$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
+HSPLandroidx/tv/material3/TabRowKt$TabRow$2$2$1$1;-><init>(Ljava/util/ArrayList;Landroidx/compose/ui/layout/SubcomposeMeasureScope;Ljava/util/ArrayList;ILkotlin/jvm/functions/Function4;ILandroidx/compose/runtime/MutableState;II)V
+HSPLandroidx/tv/material3/TabRowKt$TabRow$2$2$1$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
+HSPLandroidx/tv/material3/TabRowKt$TabRow$2$2$1$separators$1;-><init>(IILkotlin/jvm/functions/Function1;)V
+HSPLandroidx/tv/material3/TabRowKt$TabRow$2$2$1$separators$1;-><init>(ILkotlin/jvm/functions/Function2;I)V
+HSPLandroidx/tv/material3/TabRowKt$TabRow$2$2$1$separators$1;->invoke(Landroidx/compose/runtime/Composer;I)V
+HSPLandroidx/tv/material3/TabRowKt$TabRow$2$2$1$separators$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
+HSPLandroidx/tv/material3/TabRowKt$TabRow$2$2$1;-><init>(Landroidx/compose/runtime/MutableState;Lkotlin/jvm/functions/Function3;ILkotlin/jvm/functions/Function2;Lkotlin/jvm/functions/Function4;)V
+HSPLandroidx/tv/material3/TabRowKt$TabRow$2$2$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
+HSPLandroidx/tv/material3/TabRowKt$TabRow$2;-><init>(Landroidx/compose/ui/Modifier;JLandroidx/compose/foundation/ScrollState;Landroidx/compose/runtime/MutableState;Lkotlin/jvm/functions/Function3;Lkotlin/jvm/functions/Function2;Lkotlin/jvm/functions/Function4;I)V
+HSPLandroidx/tv/material3/TabRowKt$TabRow$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
+HSPLandroidx/tv/material3/TabRowKt$TabRow$3;-><init>(ILandroidx/compose/ui/Modifier;JJLkotlin/jvm/functions/Function2;Lkotlin/jvm/functions/Function4;Lkotlin/jvm/functions/Function3;II)V
+HSPLandroidx/tv/material3/TabRowScopeImpl;-><init>(Z)V
+HSPLandroidx/tv/material3/TabRowSlots;-><clinit>()V
+HSPLandroidx/tv/material3/TabRowSlots;-><init>(ILjava/lang/String;)V
+HSPLandroidx/tv/material3/TextKt$Text$1;-><clinit>()V
+HSPLandroidx/tv/material3/TextKt$Text$1;-><init>()V
+HSPLandroidx/tv/material3/TextKt$Text$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
+HSPLandroidx/tv/material3/TextKt$Text$2;-><init>(Ljava/lang/String;Landroidx/compose/ui/Modifier;JJLandroidx/compose/ui/text/font/FontStyle;Landroidx/compose/ui/text/font/FontWeight;Landroidx/compose/ui/text/font/FontFamily;JLandroidx/compose/ui/text/style/TextDecoration;Landroidx/compose/ui/text/style/TextAlign;JIZILkotlin/jvm/functions/Function1;Landroidx/compose/ui/text/TextStyle;IIII)V
+HSPLandroidx/tv/material3/TextKt;-><clinit>()V
+HSPLandroidx/tv/material3/TextKt;->Text-fLXpl1I(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;JIZILkotlin/jvm/functions/Function1;Landroidx/compose/ui/text/TextStyle;Landroidx/compose/runtime/Composer;III)V
+HSPLandroidx/tv/material3/ToggleableSurfaceBorder;-><init>(Landroidx/tv/material3/Border;Landroidx/tv/material3/Border;Landroidx/tv/material3/Border;Landroidx/tv/material3/Border;Landroidx/tv/material3/Border;Landroidx/tv/material3/Border;Landroidx/tv/material3/Border;Landroidx/tv/material3/Border;Landroidx/tv/material3/Border;Landroidx/tv/material3/Border;)V
+HSPLandroidx/tv/material3/ToggleableSurfaceColors;-><init>(JJJJJJJJJJJJJJ)V
+HSPLandroidx/tv/material3/ToggleableSurfaceColors;->equals(Ljava/lang/Object;)Z
+HSPLandroidx/tv/material3/ToggleableSurfaceGlow;-><init>(Landroidx/tv/material3/Glow;Landroidx/tv/material3/Glow;Landroidx/tv/material3/Glow;Landroidx/tv/material3/Glow;Landroidx/tv/material3/Glow;Landroidx/tv/material3/Glow;)V
+HSPLandroidx/tv/material3/ToggleableSurfaceScale;-><clinit>()V
+HSPLandroidx/tv/material3/ToggleableSurfaceScale;-><init>(FFFFFFFFFF)V
+HSPLandroidx/tv/material3/ToggleableSurfaceShape;-><init>(Landroidx/compose/ui/graphics/Shape;Landroidx/compose/ui/graphics/Shape;Landroidx/compose/ui/graphics/Shape;Landroidx/compose/ui/graphics/Shape;Landroidx/compose/ui/graphics/Shape;Landroidx/compose/ui/graphics/Shape;Landroidx/compose/ui/graphics/Shape;Landroidx/compose/ui/graphics/Shape;Landroidx/compose/ui/graphics/Shape;Landroidx/compose/ui/graphics/Shape;)V
+HSPLandroidx/tv/material3/ToggleableSurfaceShape;->equals(Ljava/lang/Object;)Z
+HSPLandroidx/tv/material3/tokens/ColorLightTokens;-><clinit>()V
+HSPLandroidx/tv/material3/tokens/Elevation;-><clinit>()V
+HSPLandroidx/tv/material3/tokens/PaletteTokens;-><clinit>()V
+HSPLandroidx/tv/material3/tokens/ShapeTokens$BorderDefaultShape$1;-><clinit>()V
+HSPLandroidx/tv/material3/tokens/ShapeTokens$BorderDefaultShape$1;-><init>(I)V
+HSPLandroidx/tv/material3/tokens/ShapeTokens$BorderDefaultShape$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
+HSPLandroidx/tv/material3/tokens/ShapeTokens$BorderDefaultShape$1;->invoke(Ljava/util/List;II)Ljava/lang/Integer;
+HSPLandroidx/tv/material3/tokens/ShapeTokens$BorderDefaultShape$1;->invoke-3p2s80s(Landroidx/compose/ui/layout/MeasureScope;Landroidx/compose/ui/layout/Measurable;J)Landroidx/compose/ui/layout/MeasureResult;
+HSPLandroidx/tv/material3/tokens/TypographyTokensKt;-><clinit>()V
+HSPLcom/example/tvcomposebasedtests/ComposableSingletons$MainActivityKt;-><clinit>()V
+HSPLcom/example/tvcomposebasedtests/ComposableSingletons$UtilsKt$lambda-1$1;-><clinit>()V
+HSPLcom/example/tvcomposebasedtests/ComposableSingletons$UtilsKt$lambda-1$1;-><init>(I)V
+HSPLcom/example/tvcomposebasedtests/ComposableSingletons$UtilsKt$lambda-1$1;->invoke(Landroidx/tv/foundation/lazy/list/TvLazyListItemScopeImpl;ILandroidx/compose/runtime/Composer;I)V
+HSPLcom/example/tvcomposebasedtests/ComposableSingletons$UtilsKt$lambda-1$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
+HSPLcom/example/tvcomposebasedtests/Config;-><init>(Landroid/content/Context;Landroidx/activity/ComponentActivity;II)V
+HSPLcom/example/tvcomposebasedtests/Config;->toString()Ljava/lang/String;
+HSPLcom/example/tvcomposebasedtests/JankStatsAggregator$listener$1;-><init>(Lcom/example/tvcomposebasedtests/JankStatsAggregator;)V
+HSPLcom/example/tvcomposebasedtests/JankStatsAggregator;-><init>(Landroid/view/Window;Lcom/example/tvcomposebasedtests/MainActivity$jankReportListener$1;)V
+HSPLcom/example/tvcomposebasedtests/MainActivity$jankReportListener$1;-><init>(Lcom/example/tvcomposebasedtests/MainActivity;)V
+HSPLcom/example/tvcomposebasedtests/MainActivity$startFrameMetrics$listener$1;-><init>(Lcom/example/tvcomposebasedtests/MainActivity;)V
+HSPLcom/example/tvcomposebasedtests/MainActivity$startFrameMetrics$listener$1;->onFrameMetricsAvailable(Landroid/view/Window;Landroid/view/FrameMetrics;I)V
+HSPLcom/example/tvcomposebasedtests/MainActivity;-><init>()V
+HSPLcom/example/tvcomposebasedtests/MainActivity;->onCreate(Landroid/os/Bundle;)V
+HSPLcom/example/tvcomposebasedtests/MainActivity;->onResume()V
+HSPLcom/example/tvcomposebasedtests/UtilsKt$AddJankMetrics$1$2;-><init>(ILjava/lang/Object;)V
+HSPLcom/example/tvcomposebasedtests/UtilsKt$AddJankMetrics$1$2;->emit(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
+HSPLcom/example/tvcomposebasedtests/UtilsKt$ScrollingRow$1$1$1;-><init>(II)V
+HSPLcom/example/tvcomposebasedtests/UtilsKt$ScrollingRow$1$1$1;->invoke(Landroidx/tv/foundation/lazy/list/TvLazyListScope;)V
+HSPLcom/example/tvcomposebasedtests/UtilsKt$ScrollingRow$1$1$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
+HSPLcom/example/tvcomposebasedtests/UtilsKt$ScrollingRow$2;-><init>(III)V
+HSPLcom/example/tvcomposebasedtests/UtilsKt$ScrollingRow$2;->invoke(Landroidx/compose/runtime/Composer;I)V
+HSPLcom/example/tvcomposebasedtests/UtilsKt$ScrollingRow$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
+HSPLcom/example/tvcomposebasedtests/UtilsKt;-><clinit>()V
+HSPLcom/example/tvcomposebasedtests/tvComponents/AppKt$App$1;-><init>(ILjava/lang/Object;)V
+HSPLcom/example/tvcomposebasedtests/tvComponents/AppKt$App$1;->invoke(Landroidx/compose/runtime/Composer;I)V
+HSPLcom/example/tvcomposebasedtests/tvComponents/AppKt$App$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
+HSPLcom/example/tvcomposebasedtests/tvComponents/AppKt$App$1;->invoke-5SAbXVA(JLandroidx/compose/ui/unit/LayoutDirection;)J
+HSPLcom/example/tvcomposebasedtests/tvComponents/ComposableSingletons$LazyContainersKt;-><clinit>()V
+HSPLcom/example/tvcomposebasedtests/tvComponents/ComposableSingletons$TopNavigationKt;-><clinit>()V
+HSPLcom/example/tvcomposebasedtests/tvComponents/Navigation;-><clinit>()V
+HSPLcom/example/tvcomposebasedtests/tvComponents/Navigation;-><init>(Ljava/lang/String;ILjava/lang/String;Landroidx/compose/runtime/internal/ComposableLambdaImpl;)V
+HSPLcom/example/tvcomposebasedtests/tvComponents/Navigation;->values()[Lcom/example/tvcomposebasedtests/tvComponents/Navigation;
+HSPLcom/example/tvcomposebasedtests/tvComponents/TopNavigationKt$PillIndicatorTabRow$1$1$1$1;-><init>(ILkotlin/jvm/functions/Function1;)V
+HSPLcom/example/tvcomposebasedtests/tvComponents/TopNavigationKt$PillIndicatorTabRow$1$1$1$1;->invoke()Ljava/lang/Object;
+HSPLcom/example/tvcomposebasedtests/tvComponents/TopNavigationKt$PillIndicatorTabRow$1;-><init>(IILjava/util/List;Lkotlin/jvm/functions/Function1;)V
+HSPLcom/example/tvcomposebasedtests/tvComponents/TopNavigationKt$PillIndicatorTabRow$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
+HSPLcom/example/tvcomposebasedtests/tvComponents/TopNavigationKt$TopNavigation$3$1;-><init>(Lkotlin/jvm/functions/Function1;Landroidx/compose/runtime/MutableState;Lkotlin/coroutines/Continuation;)V
+HSPLcom/example/tvcomposebasedtests/tvComponents/TopNavigationKt$TopNavigation$3$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation;
+HSPLcom/example/tvcomposebasedtests/tvComponents/TopNavigationKt$TopNavigation$3$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;
+HSPLcom/google/gson/internal/ConstructorConstructor;-><init>()V
+HSPLcom/google/gson/internal/ConstructorConstructor;->access$commitTransaction(Lcom/google/gson/internal/ConstructorConstructor;)V
+HSPLcom/google/gson/internal/LinkedTreeMap$1;-><init>(I)V
+HSPLcom/google/gson/internal/LinkedTreeMap$1;->compare(Ljava/lang/Object;Ljava/lang/Object;)I
+HSPLkotlin/Pair;-><init>(Ljava/lang/Object;Ljava/lang/Object;)V
+HSPLkotlin/Result$Failure;-><init>(Ljava/lang/Throwable;)V
+HSPLkotlin/Result;->exceptionOrNull-impl(Ljava/lang/Object;)Ljava/lang/Throwable;
+HSPLkotlin/ResultKt$$ExternalSyntheticCheckNotZero0;->m$1()Ljava/util/Iterator;
+HSPLkotlin/ResultKt$$ExternalSyntheticCheckNotZero0;->m(III)I
+HSPLkotlin/ResultKt$$ExternalSyntheticCheckNotZero0;->m(ILjava/lang/String;)V
+HSPLkotlin/ResultKt$$ExternalSyntheticCheckNotZero0;->m(Ljava/lang/Object;)V
+HSPLkotlin/ResultKt$$ExternalSyntheticCheckNotZero0;->stringValueOf$1(I)Ljava/lang/String;
+HSPLkotlin/ResultKt$$ExternalSyntheticCheckNotZero0;->stringValueOf$2(I)Ljava/lang/String;
+HSPLkotlin/ResultKt$$ExternalSyntheticCheckNotZero0;->valueOf$1(Ljava/lang/String;)I
+HSPLkotlin/ResultKt$$ExternalSyntheticCheckNotZero0;->valueOf(Ljava/lang/String;)I
+HSPLkotlin/ResultKt;-><clinit>()V
+HSPLkotlin/ResultKt;-><init>(Landroidx/metrics/performance/JankStats;)V
+HSPLkotlin/ResultKt;->App(Landroidx/compose/runtime/Composer;I)V
+HSPLkotlin/ResultKt;->Constraints$default(III)J
+HSPLkotlin/ResultKt;->Constraints(IIII)J
+HSPLkotlin/ResultKt;->Density(Landroid/content/Context;)Landroidx/compose/ui/unit/DensityImpl;
+HSPLkotlin/ResultKt;->DpOffset-YgX7TsA(FF)J
+HSPLkotlin/ResultKt;->IntOffset(II)J
+HSPLkotlin/ResultKt;->IntSize(II)J
+HSPLkotlin/ResultKt;->MaterialTheme(Landroidx/compose/material3/ColorScheme;Landroidx/compose/material3/Shapes;Landroidx/compose/material3/Typography;Lkotlin/jvm/functions/Function2;Landroidx/compose/runtime/Composer;II)V
+HSPLkotlin/ResultKt;->SampleCardItem(ILandroidx/compose/runtime/Composer;I)V
+HSPLkotlin/ResultKt;->SampleTvLazyRow(ILandroidx/compose/runtime/Composer;I)V
+HSPLkotlin/ResultKt;->TvLazyRow(Landroidx/compose/ui/Modifier;Landroidx/tv/foundation/lazy/list/TvLazyListState;Landroidx/compose/foundation/layout/PaddingValuesImpl;ZLandroidx/compose/foundation/layout/Arrangement$Horizontal;Landroidx/compose/ui/Alignment$Vertical;ZLandroidx/tv/foundation/PivotOffsets;Lkotlin/jvm/functions/Function1;Landroidx/compose/runtime/Composer;II)V
+HSPLkotlin/ResultKt;->access$getHasEmojiCompat(Landroidx/compose/ui/text/TextStyle;)Z
+HSPLkotlin/ResultKt;->areEqual(Ljava/lang/Object;Ljava/lang/Object;)Z
+HSPLkotlin/ResultKt;->canBeSavedToBundle(Ljava/lang/Object;)Z
+HSPLkotlin/ResultKt;->checkArgument(Ljava/lang/String;Z)V
+HSPLkotlin/ResultKt;->checkElementIndex$runtime_release(II)V
+HSPLkotlin/ResultKt;->checkNotNull$1(Ljava/lang/Object;Ljava/lang/String;)V
+HSPLkotlin/ResultKt;->checkNotNull(Ljava/lang/Object;)V
+HSPLkotlin/ResultKt;->checkNotNull(Ljava/lang/Object;Ljava/lang/String;)V
+HSPLkotlin/ResultKt;->checkNotNullExpressionValue(Ljava/lang/Object;Ljava/lang/String;)V
+HSPLkotlin/ResultKt;->checkNotNullParameter(Ljava/lang/Object;Ljava/lang/String;)V
+HSPLkotlin/ResultKt;->compare(II)I
+HSPLkotlin/ResultKt;->constrain-4WqzIAM(JJ)J
+HSPLkotlin/ResultKt;->constrainHeight-K40F9xA(JI)I
+HSPLkotlin/ResultKt;->constrainWidth-K40F9xA(JI)I
+HSPLkotlin/ResultKt;->create(Landroid/content/Context;)Landroidx/emoji2/text/FontRequestEmojiCompatConfig;
+HSPLkotlin/ResultKt;->createCoroutineUnintercepted(Ljava/lang/Object;Lkotlin/coroutines/Continuation;Lkotlin/jvm/functions/Function2;)Lkotlin/coroutines/Continuation;
+HSPLkotlin/ResultKt;->createFailure(Ljava/lang/Throwable;)Lkotlin/Result$Failure;
+HSPLkotlin/ResultKt;->distinctUntilChanged(Lkotlinx/coroutines/flow/Flow;)Lkotlinx/coroutines/flow/Flow;
+HSPLkotlin/ResultKt;->emitAllImpl$FlowKt__ChannelsKt(Lkotlinx/coroutines/flow/FlowCollector;Lkotlinx/coroutines/channels/ProducerCoroutine;ZLkotlin/coroutines/Continuation;)Ljava/lang/Object;
+HSPLkotlin/ResultKt;->ensureActive(Lkotlin/coroutines/CoroutineContext;)V
+HSPLkotlin/ResultKt;->findIndexByKey$1(Landroidx/compose/foundation/lazy/layout/LazyLayoutItemProvider;Ljava/lang/Object;I)I
+HSPLkotlin/ResultKt;->first(Lkotlinx/coroutines/flow/Flow;Lkotlin/jvm/functions/Function2;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
+HSPLkotlin/ResultKt;->get(Landroid/view/View;)Landroidx/lifecycle/LifecycleOwner;
+HSPLkotlin/ResultKt;->getExclusions()Ljava/util/Set;
+HSPLkotlin/ResultKt;->getJob(Lkotlin/coroutines/CoroutineContext;)Lkotlinx/coroutines/Job;
+HSPLkotlin/ResultKt;->getOrCreateCancellableContinuation(Lkotlin/coroutines/Continuation;)Lkotlinx/coroutines/CancellableContinuationImpl;
+HSPLkotlin/ResultKt;->getProgressionLastElement(III)I
+HSPLkotlin/ResultKt;->getSp(D)J
+HSPLkotlin/ResultKt;->getSp(I)J
+HSPLkotlin/ResultKt;->hasFontAttributes(Landroidx/compose/ui/text/SpanStyle;)Z
+HSPLkotlin/ResultKt;->intercepted(Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation;
+HSPLkotlin/ResultKt;->isEnabled()Z
+HSPLkotlin/ResultKt;->isUnspecified--R2X_6o(J)Z
+HSPLkotlin/ResultKt;->launch$default(Lkotlinx/coroutines/CoroutineScope;Lkotlinx/coroutines/android/HandlerContext;ILkotlin/jvm/functions/Function2;I)Lkotlinx/coroutines/StandaloneCoroutine;
+HSPLkotlin/ResultKt;->launch(Lkotlinx/coroutines/CoroutineScope;Lkotlin/coroutines/CoroutineContext;ILkotlin/jvm/functions/Function2;)Lkotlinx/coroutines/StandaloneCoroutine;
+HSPLkotlin/ResultKt;->lazyLayoutSemantics(Landroidx/compose/ui/Modifier;Lkotlin/reflect/KProperty0;Landroidx/tv/foundation/lazy/layout/LazyLayoutSemanticState;Landroidx/compose/foundation/gestures/Orientation;ZZLandroidx/compose/runtime/Composer;)Landroidx/compose/ui/Modifier;
+HSPLkotlin/ResultKt;->mapCapacity(I)I
+HSPLkotlin/ResultKt;->materializeModifier(Landroidx/compose/runtime/Composer;Landroidx/compose/ui/Modifier;)Landroidx/compose/ui/Modifier;
+HSPLkotlin/ResultKt;->mmap(Landroid/content/Context;Landroid/net/Uri;)Ljava/nio/MappedByteBuffer;
+HSPLkotlin/ResultKt;->offset-NN6Ew-U(IIJ)J
+HSPLkotlin/ResultKt;->overscrollEffect(Landroidx/compose/runtime/Composer;)Landroidx/compose/foundation/OverscrollEffect;
+HSPLkotlin/ResultKt;->pack(FJ)J
+HSPLkotlin/ResultKt;->plus(Lkotlin/coroutines/CoroutineContext;Lkotlin/coroutines/CoroutineContext;)Lkotlin/coroutines/CoroutineContext;
+HSPLkotlin/ResultKt;->read(Ljava/nio/MappedByteBuffer;)Landroidx/emoji2/text/flatbuffer/MetadataList;
+HSPLkotlin/ResultKt;->recoverResult(Ljava/lang/Object;)Ljava/lang/Object;
+HSPLkotlin/ResultKt;->requireOwner(Landroidx/compose/ui/node/LayoutNode;)Landroidx/compose/ui/node/Owner;
+HSPLkotlin/ResultKt;->resolveLineHeightInPx-o2QH7mI(JFLandroidx/compose/ui/unit/Density;)F
+HSPLkotlin/ResultKt;->restoreThreadContext(Lkotlin/coroutines/CoroutineContext;Ljava/lang/Object;)V
+HSPLkotlin/ResultKt;->resume(Lkotlinx/coroutines/DispatchedTask;Lkotlin/coroutines/Continuation;Z)V
+HSPLkotlin/ResultKt;->roundToInt(F)I
+HSPLkotlin/ResultKt;->scrollableWithPivot(Landroidx/compose/ui/Modifier;Landroidx/compose/foundation/gestures/ScrollableState;Landroidx/compose/foundation/gestures/Orientation;Landroidx/tv/foundation/PivotOffsets;ZZ)Landroidx/compose/ui/Modifier;
+HSPLkotlin/ResultKt;->startUndispatchedOrReturn(Lkotlinx/coroutines/internal/ScopeCoroutine;Lkotlinx/coroutines/internal/ScopeCoroutine;Lkotlin/jvm/functions/Function2;)Ljava/lang/Object;
+HSPLkotlin/ResultKt;->stateIn(Lkotlinx/coroutines/flow/SafeFlow;Lkotlinx/coroutines/internal/ContextScope;Lkotlinx/coroutines/flow/StartedWhileSubscribed;Ljava/lang/Float;)Lkotlinx/coroutines/flow/ReadonlyStateFlow;
+HSPLkotlin/ResultKt;->systemProp$default(Ljava/lang/String;IIII)I
+HSPLkotlin/ResultKt;->systemProp(Ljava/lang/String;JJJ)J
+HSPLkotlin/ResultKt;->threadContextElements(Lkotlin/coroutines/CoroutineContext;)Ljava/lang/Object;
+HSPLkotlin/ResultKt;->throwOnFailure(Ljava/lang/Object;)V
+HSPLkotlin/ResultKt;->toSize-ozmzZPI(J)J
+HSPLkotlin/ResultKt;->ulongToDouble(J)D
+HSPLkotlin/ResultKt;->updateThreadContext(Lkotlin/coroutines/CoroutineContext;Ljava/lang/Object;)Ljava/lang/Object;
+HSPLkotlin/ResultKt;->withContext(Lkotlin/coroutines/CoroutineContext;Lkotlin/jvm/functions/Function2;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
+HSPLkotlin/SynchronizedLazyImpl;-><init>(Lkotlin/jvm/functions/Function0;)V
+HSPLkotlin/SynchronizedLazyImpl;->getValue()Ljava/lang/Object;
+HSPLkotlin/TuplesKt;-><clinit>()V
+HSPLkotlin/TuplesKt;->CornerRadius(FF)J
+HSPLkotlin/TuplesKt;->LazyList(Landroidx/compose/ui/Modifier;Landroidx/tv/foundation/lazy/list/TvLazyListState;Landroidx/compose/foundation/layout/PaddingValuesImpl;ZZZILandroidx/tv/foundation/PivotOffsets;Landroidx/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
+HSPLkotlin/TuplesKt;->PillIndicatorTabRow(Ljava/util/List;ILkotlin/jvm/functions/Function1;Landroidx/compose/runtime/Composer;I)V
+HSPLkotlin/TuplesKt;->Rect-tz77jQw(JJ)Landroidx/compose/ui/geometry/Rect;
+HSPLkotlin/TuplesKt;->ScrollPositionUpdater(Lkotlin/jvm/functions/Function0;Landroidx/tv/foundation/lazy/list/TvLazyListState;Landroidx/compose/runtime/Composer;I)V
+HSPLkotlin/TuplesKt;->Size(FF)J
+HSPLkotlin/TuplesKt;->TopNavigation(Lkotlin/jvm/functions/Function1;Landroidx/compose/runtime/Composer;II)V
+HSPLkotlin/TuplesKt;->access$addLayoutNodeChildren(Landroidx/compose/runtime/collection/MutableVector;Landroidx/compose/ui/Modifier$Node;)V
+HSPLkotlin/TuplesKt;->access$insertEntryAtIndex([Ljava/lang/Object;ILjava/lang/Object;Ljava/lang/Object;)[Ljava/lang/Object;
+HSPLkotlin/TuplesKt;->access$pop(Landroidx/compose/runtime/collection/MutableVector;)Landroidx/compose/ui/Modifier$Node;
+HSPLkotlin/TuplesKt;->access$removeRange(Ljava/util/ArrayList;II)V
+HSPLkotlin/TuplesKt;->asLayoutModifierNode(Landroidx/compose/ui/Modifier$Node;)Landroidx/compose/ui/node/LayoutModifierNode;
+HSPLkotlin/TuplesKt;->autoInvalidateInsertedNode(Landroidx/compose/ui/Modifier$Node;)V
+HSPLkotlin/TuplesKt;->autoInvalidateNodeIncludingDelegates(Landroidx/compose/ui/Modifier$Node;II)V
+HSPLkotlin/TuplesKt;->autoInvalidateNodeSelf(Landroidx/compose/ui/Modifier$Node;II)V
+HSPLkotlin/TuplesKt;->autoInvalidateUpdatedNode(Landroidx/compose/ui/Modifier$Node;)V
+HSPLkotlin/TuplesKt;->beforeCheckcastToFunctionOfArity(ILjava/lang/Object;)V
+HSPLkotlin/TuplesKt;->binarySearch([II)I
+HSPLkotlin/TuplesKt;->bitsForSlot(II)I
+HSPLkotlin/TuplesKt;->calculateLazyLayoutPinnedIndices(Landroidx/compose/foundation/lazy/layout/LazyLayoutItemProvider;Landroidx/compose/foundation/lazy/layout/LazyLayoutPinnedItemList;Landroidx/compose/runtime/Stack;)Ljava/util/List;
+HSPLkotlin/TuplesKt;->calculateNodeKindSetFrom(Landroidx/compose/ui/Modifier$Element;)I
+HSPLkotlin/TuplesKt;->calculateNodeKindSetFrom(Landroidx/compose/ui/Modifier$Node;)I
+HSPLkotlin/TuplesKt;->calculateNodeKindSetFromIncludingDelegates(Landroidx/compose/ui/Modifier$Node;)I
+HSPLkotlin/TuplesKt;->checkRadix(I)V
+HSPLkotlin/TuplesKt;->coerceIn(DDD)D
+HSPLkotlin/TuplesKt;->coerceIn(FFF)F
+HSPLkotlin/TuplesKt;->coerceIn(III)I
+HSPLkotlin/TuplesKt;->compareValues(Ljava/lang/Comparable;Ljava/lang/Comparable;)I
+HSPLkotlin/TuplesKt;->composableLambda(Landroidx/compose/runtime/Composer;ILkotlin/jvm/internal/Lambda;)Landroidx/compose/runtime/internal/ComposableLambdaImpl;
+HSPLkotlin/TuplesKt;->composableLambdaInstance(ILkotlin/jvm/internal/Lambda;Z)Landroidx/compose/runtime/internal/ComposableLambdaImpl;
+HSPLkotlin/TuplesKt;->currentValueOf(Landroidx/compose/ui/node/CompositionLocalConsumerModifierNode;Landroidx/compose/runtime/ProvidableCompositionLocal;)Ljava/lang/Object;
+HSPLkotlin/TuplesKt;->findLocation(ILjava/util/List;)I
+HSPLkotlin/TuplesKt;->findSegmentInternal(Lkotlinx/coroutines/internal/Segment;JLkotlin/jvm/functions/Function2;)Ljava/lang/Object;
+HSPLkotlin/TuplesKt;->get(Lkotlin/coroutines/CoroutineContext$Element;Lkotlin/coroutines/CoroutineContext$Key;)Lkotlin/coroutines/CoroutineContext$Element;
+HSPLkotlin/TuplesKt;->getCenter-uvyYCjk(J)J
+HSPLkotlin/TuplesKt;->getEllipsizedLeftPadding(Landroid/text/Layout;ILandroid/graphics/Paint;)F
+HSPLkotlin/TuplesKt;->getEllipsizedRightPadding(Landroid/text/Layout;ILandroid/graphics/Paint;)F
+HSPLkotlin/TuplesKt;->getIncludeSelfInTraversal-H91voCI(I)Z
+HSPLkotlin/TuplesKt;->getLastIndex(Ljava/util/List;)I
+HSPLkotlin/TuplesKt;->invalidateDraw(Landroidx/compose/ui/node/DrawModifierNode;)V
+HSPLkotlin/TuplesKt;->invalidateMeasurement(Landroidx/compose/ui/node/LayoutModifierNode;)V
+HSPLkotlin/TuplesKt;->invalidateSemantics(Landroidx/compose/ui/node/SemanticsModifierNode;)V
+HSPLkotlin/TuplesKt;->isWhitespace(C)Z
+HSPLkotlin/TuplesKt;->lazy(Lkotlin/jvm/functions/Function0;)Lkotlin/Lazy;
+HSPLkotlin/TuplesKt;->listOf(Ljava/lang/Object;)Ljava/util/List;
+HSPLkotlin/TuplesKt;->listOf([Ljava/lang/Object;)Ljava/util/List;
+HSPLkotlin/TuplesKt;->minusKey(Lkotlin/coroutines/CoroutineContext$Element;Lkotlin/coroutines/CoroutineContext$Key;)Lkotlin/coroutines/CoroutineContext;
+HSPLkotlin/TuplesKt;->observeReads(Landroidx/compose/ui/Modifier$Node;Lkotlin/jvm/functions/Function0;)V
+HSPLkotlin/TuplesKt;->painterResource(ILandroidx/compose/runtime/Composer;)Landroidx/compose/ui/graphics/painter/Painter;
+HSPLkotlin/TuplesKt;->replacableWith(Landroidx/compose/runtime/RecomposeScope;Landroidx/compose/runtime/RecomposeScopeImpl;)Z
+HSPLkotlin/TuplesKt;->requireCoordinator-64DMado(Landroidx/compose/ui/node/DelegatableNode;I)Landroidx/compose/ui/node/NodeCoordinator;
+HSPLkotlin/TuplesKt;->requireLayoutNode(Landroidx/compose/ui/node/DelegatableNode;)Landroidx/compose/ui/node/LayoutNode;
+HSPLkotlin/TuplesKt;->requireOwner(Landroidx/compose/ui/node/DelegatableNode;)Landroidx/compose/ui/node/Owner;
+HSPLkotlin/TuplesKt;->resolveDefaults(Landroidx/compose/ui/text/TextStyle;Landroidx/compose/ui/unit/LayoutDirection;)Landroidx/compose/ui/text/TextStyle;
+HSPLkotlin/TuplesKt;->runtimeCheck(Z)V
+HSPLkotlin/TuplesKt;->until(II)Lkotlin/ranges/IntRange;
+HSPLkotlin/ULong$Companion;-><init>()V
+HSPLkotlin/ULong$Companion;-><init>(I)V
+HSPLkotlin/ULong$Companion;-><init>(II)V
+HSPLkotlin/ULong$Companion;->checkElementIndex$kotlin_stdlib(II)V
+HSPLkotlin/ULong$Companion;->computeScaleFactor-H7hwNQA(JJ)J
+HSPLkotlin/ULong$Companion;->dispatch$lifecycle_runtime_release(Landroid/app/Activity;Landroidx/lifecycle/Lifecycle$Event;)V
+HSPLkotlin/ULong$Companion;->getHolderForHierarchy(Landroid/view/View;)Landroidx/metrics/performance/PerformanceMetricsState$Holder;
+HSPLkotlin/ULong$Companion;->injectIfNeededIn(Landroid/app/Activity;)V
+HSPLkotlin/UNINITIALIZED_VALUE;-><clinit>()V
+HSPLkotlin/Unit;-><clinit>()V
+HSPLkotlin/UnsafeLazyImpl;-><init>(Lkotlin/jvm/functions/Function0;)V
+HSPLkotlin/UnsafeLazyImpl;->getValue()Ljava/lang/Object;
+HSPLkotlin/collections/AbstractCollection;->isEmpty()Z
+HSPLkotlin/collections/AbstractCollection;->size()I
+HSPLkotlin/collections/AbstractList;->equals(Ljava/lang/Object;)Z
+HSPLkotlin/collections/AbstractMap$toString$1;-><init>(ILjava/lang/Object;)V
+HSPLkotlin/collections/AbstractMap$toString$1;->invoke()Landroidx/compose/runtime/DisposableEffectResult;
+HSPLkotlin/collections/AbstractMap$toString$1;->invoke(F)Ljava/lang/Float;
+HSPLkotlin/collections/AbstractMap$toString$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
+HSPLkotlin/collections/AbstractMap$toString$1;->invoke(Ljava/lang/Object;)V
+HSPLkotlin/collections/AbstractMap;->entrySet()Ljava/util/Set;
+HSPLkotlin/collections/AbstractMap;->equals(Ljava/lang/Object;)Z
+HSPLkotlin/collections/AbstractMap;->size()I
+HSPLkotlin/collections/AbstractMutableList;-><init>()V
+HSPLkotlin/collections/AbstractMutableList;->size()I
+HSPLkotlin/collections/AbstractSet;->equals(Ljava/lang/Object;)Z
+HSPLkotlin/collections/ArrayDeque;-><clinit>()V
+HSPLkotlin/collections/ArrayDeque;-><init>()V
+HSPLkotlin/collections/ArrayDeque;->addLast(Ljava/lang/Object;)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/ArraysKt___ArraysKt;->asList([Ljava/lang/Object;)Ljava/util/List;
+HSPLkotlin/collections/ArraysKt___ArraysKt;->collectionSizeOrDefault(Ljava/lang/Iterable;)I
+HSPLkotlin/collections/ArraysKt___ArraysKt;->copyInto$default([I[III)V
+HSPLkotlin/collections/ArraysKt___ArraysKt;->copyInto$default([Ljava/lang/Object;[Ljava/lang/Object;III)V
+HSPLkotlin/collections/ArraysKt___ArraysKt;->copyInto([I[IIII)V
+HSPLkotlin/collections/ArraysKt___ArraysKt;->copyInto([Ljava/lang/Object;[Ljava/lang/Object;III)V
+HSPLkotlin/collections/ArraysKt___ArraysKt;->fill$default([Ljava/lang/Object;)V
+HSPLkotlin/collections/ArraysKt___ArraysKt;->fill(II[Ljava/lang/Object;)V
+HSPLkotlin/collections/ArraysKt___ArraysKt;->indexOf([Ljava/lang/Object;Ljava/lang/Object;)I
+HSPLkotlin/collections/CollectionsKt__MutableCollectionsJVMKt;->sortWith(Ljava/util/List;Ljava/util/Comparator;)V
+HSPLkotlin/collections/CollectionsKt__ReversedViewsKt;->addAll(Ljava/lang/Iterable;Ljava/util/Collection;)V
+HSPLkotlin/collections/CollectionsKt___CollectionsKt;->firstOrNull(Ljava/util/List;)Ljava/lang/Object;
+HSPLkotlin/collections/CollectionsKt___CollectionsKt;->last(Ljava/util/List;)Ljava/lang/Object;
+HSPLkotlin/collections/CollectionsKt___CollectionsKt;->plus(Ljava/util/List;Ljava/io/Serializable;)Ljava/util/ArrayList;
+HSPLkotlin/collections/CollectionsKt___CollectionsKt;->toIntArray(Ljava/util/ArrayList;)[I
+HSPLkotlin/collections/EmptyList;-><clinit>()V
+HSPLkotlin/collections/EmptyList;->contains(Ljava/lang/Object;)Z
+HSPLkotlin/collections/EmptyList;->isEmpty()Z
+HSPLkotlin/collections/EmptyList;->size()I
+HSPLkotlin/collections/EmptyList;->toArray()[Ljava/lang/Object;
+HSPLkotlin/collections/EmptyMap;-><clinit>()V
+HSPLkotlin/collections/EmptyMap;->isEmpty()Z
+HSPLkotlin/collections/EmptyMap;->size()I
+HSPLkotlin/coroutines/AbstractCoroutineContextElement;-><init>(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;
+HSPLkotlin/coroutines/AbstractCoroutineContextKey;-><init>(Lkotlin/coroutines/CoroutineContext$Key;Lkotlin/jvm/functions/Function1;)V
+HSPLkotlin/coroutines/CombinedContext;-><init>(Lkotlin/coroutines/CoroutineContext$Element;Lkotlin/coroutines/CoroutineContext;)V
+HSPLkotlin/coroutines/CombinedContext;->fold(Ljava/lang/Object;Lkotlin/jvm/functions/Function2;)Ljava/lang/Object;
+HSPLkotlin/coroutines/CombinedContext;->minusKey(Lkotlin/coroutines/CoroutineContext$Key;)Lkotlin/coroutines/CoroutineContext;
+HSPLkotlin/coroutines/CombinedContext;->plus(Lkotlin/coroutines/CoroutineContext;)Lkotlin/coroutines/CoroutineContext;
+HSPLkotlin/coroutines/CoroutineContext$plus$1;-><clinit>()V
+HSPLkotlin/coroutines/CoroutineContext$plus$1;-><init>(I)V
+HSPLkotlin/coroutines/CoroutineContext$plus$1;->invoke(Landroidx/compose/runtime/Composer;I)V
+HSPLkotlin/coroutines/CoroutineContext$plus$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
+HSPLkotlin/coroutines/EmptyCoroutineContext;-><clinit>()V
+HSPLkotlin/coroutines/EmptyCoroutineContext;->fold(Ljava/lang/Object;Lkotlin/jvm/functions/Function2;)Ljava/lang/Object;
+HSPLkotlin/coroutines/EmptyCoroutineContext;->plus(Lkotlin/coroutines/CoroutineContext;)Lkotlin/coroutines/CoroutineContext;
+HSPLkotlin/coroutines/intrinsics/CoroutineSingletons;-><clinit>()V
+HSPLkotlin/coroutines/intrinsics/CoroutineSingletons;-><init>(ILjava/lang/String;)V
+HSPLkotlin/coroutines/jvm/internal/BaseContinuationImpl;-><init>(Lkotlin/coroutines/Continuation;)V
+HSPLkotlin/coroutines/jvm/internal/BaseContinuationImpl;->resumeWith(Ljava/lang/Object;)V
+HSPLkotlin/coroutines/jvm/internal/CompletedContinuation;-><clinit>()V
+HSPLkotlin/coroutines/jvm/internal/ContinuationImpl;-><init>(Lkotlin/coroutines/Continuation;)V
+HSPLkotlin/coroutines/jvm/internal/ContinuationImpl;-><init>(Lkotlin/coroutines/Continuation;Lkotlin/coroutines/CoroutineContext;)V
+HSPLkotlin/coroutines/jvm/internal/ContinuationImpl;->getContext()Lkotlin/coroutines/CoroutineContext;
+HSPLkotlin/coroutines/jvm/internal/ContinuationImpl;->releaseIntercepted()V
+HSPLkotlin/coroutines/jvm/internal/SuspendLambda;-><init>(ILkotlin/coroutines/Continuation;)V
+HSPLkotlin/coroutines/jvm/internal/SuspendLambda;->getArity()I
+HSPLkotlin/jvm/internal/ArrayIterator;-><init>(ILjava/lang/Object;)V
+HSPLkotlin/jvm/internal/ArrayIterator;->hasNext()Z
+HSPLkotlin/jvm/internal/ArrayIterator;->next()Ljava/lang/Object;
+HSPLkotlin/jvm/internal/CallableReference$NoReceiver;-><clinit>()V
+HSPLkotlin/jvm/internal/CallableReference;-><init>(Ljava/lang/Object;Ljava/lang/Class;Ljava/lang/String;Ljava/lang/String;Z)V
+HSPLkotlin/jvm/internal/ClassReference;-><clinit>()V
+HSPLkotlin/jvm/internal/ClassReference;-><init>(Ljava/lang/Class;)V
+HSPLkotlin/jvm/internal/ClassReference;->getJClass()Ljava/lang/Class;
+HSPLkotlin/jvm/internal/FunctionReferenceImpl;-><init>(ILjava/lang/Class;Ljava/lang/String;Ljava/lang/String;I)V
+HSPLkotlin/jvm/internal/Lambda;-><init>(I)V
+HSPLkotlin/jvm/internal/Lambda;->getArity()I
+HSPLkotlin/jvm/internal/PropertyReference0Impl;->invoke()Ljava/lang/Object;
+HSPLkotlin/jvm/internal/PropertyReference;-><init>(Ljava/lang/Object;Ljava/lang/Class;Ljava/lang/String;Ljava/lang/String;I)V
+HSPLkotlin/jvm/internal/PropertyReference;->equals(Ljava/lang/Object;)Z
+HSPLkotlin/jvm/internal/Reflection;-><clinit>()V
+HSPLkotlin/jvm/internal/Reflection;->getOrCreateKotlinClass(Ljava/lang/Class;)Lkotlin/jvm/internal/ClassReference;
+HSPLkotlin/random/FallbackThreadLocalRandom$implStorage$1;-><init>(I)V
+HSPLkotlin/ranges/IntProgression;-><init>(III)V
+HSPLkotlin/ranges/IntProgression;->iterator()Ljava/util/Iterator;
+HSPLkotlin/ranges/IntProgressionIterator;-><init>(III)V
+HSPLkotlin/ranges/IntProgressionIterator;->hasNext()Z
+HSPLkotlin/ranges/IntProgressionIterator;->nextInt()I
+HSPLkotlin/ranges/IntRange;-><clinit>()V
+HSPLkotlin/ranges/IntRange;-><init>(II)V
+HSPLkotlin/ranges/IntRange;->equals(Ljava/lang/Object;)Z
+HSPLkotlin/ranges/IntRange;->isEmpty()Z
+HSPLkotlin/sequences/ConstrainedOnceSequence;-><init>(Lkotlin/sequences/SequencesKt__SequencesKt$asSequence$$inlined$Sequence$1;)V
+HSPLkotlin/sequences/ConstrainedOnceSequence;->iterator()Ljava/util/Iterator;
+HSPLkotlin/sequences/FilteringSequence$iterator$1;-><init>(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;
+HSPLkotlin/sequences/FilteringSequence;-><init>(Lkotlin/sequences/GeneratorSequence;)V
+HSPLkotlin/sequences/GeneratorSequence$iterator$1;-><init>(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;
+HSPLkotlin/sequences/GeneratorSequence;-><init>(Landroidx/compose/ui/node/LayoutNode$_foldedChildren$1;Lkotlin/jvm/functions/Function1;)V
+HSPLkotlin/sequences/GeneratorSequence;-><init>(Lkotlin/sequences/Sequence;Lkotlin/jvm/functions/Function1;)V
+HSPLkotlin/sequences/GeneratorSequence;->iterator()Ljava/util/Iterator;
+HSPLkotlin/sequences/SequencesKt;->firstOrNull(Lkotlin/sequences/FilteringSequence;)Ljava/lang/Object;
+HSPLkotlin/sequences/SequencesKt;->mapNotNull(Lkotlin/sequences/Sequence;Lkotlinx/coroutines/CoroutineDispatcher$Key$1;)Lkotlin/sequences/FilteringSequence;
+HSPLkotlin/sequences/SequencesKt;->toList(Lkotlin/sequences/Sequence;)Ljava/util/List;
+HSPLkotlin/sequences/SequencesKt__SequencesKt$asSequence$$inlined$Sequence$1;-><init>(ILjava/lang/Object;)V
+HSPLkotlin/sequences/SequencesKt__SequencesKt$asSequence$$inlined$Sequence$1;->iterator()Ljava/util/Iterator;
+HSPLkotlin/sequences/TransformingSequence$iterator$1;-><init>(Lkotlin/sequences/GeneratorSequence;)V
+HSPLkotlin/sequences/TransformingSequence$iterator$1;->hasNext()Z
+HSPLkotlin/sequences/TransformingSequence$iterator$1;->next()Ljava/lang/Object;
+HSPLkotlin/text/StringsKt__IndentKt$getIndentFunction$2;-><init>(ILjava/lang/String;)V
+HSPLkotlin/text/StringsKt__RegexExtensionsKt;->generateSequence(Ljava/lang/Object;Lkotlin/jvm/functions/Function1;)Lkotlin/sequences/Sequence;
+HSPLkotlin/text/StringsKt__StringsKt;->endsWith$default(Ljava/lang/CharSequence;Ljava/lang/String;)Z
+HSPLkotlin/text/StringsKt__StringsKt;->getLastIndex(Ljava/lang/CharSequence;)I
+HSPLkotlin/text/StringsKt__StringsKt;->indexOf(Ljava/lang/CharSequence;Ljava/lang/String;IZ)I
+HSPLkotlin/text/StringsKt__StringsKt;->isBlank(Ljava/lang/CharSequence;)Z
+HSPLkotlin/text/StringsKt__StringsKt;->replace$default(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;
+HSPLkotlin/text/StringsKt__StringsKt;->substringAfterLast$default(Ljava/lang/String;)Ljava/lang/String;
+HSPLkotlin/text/StringsKt___StringsKt;->last(Ljava/lang/CharSequence;)C
+HSPLkotlinx/coroutines/AbstractCoroutine;-><init>(Lkotlin/coroutines/CoroutineContext;Z)V
+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$enumunboxing$(ILkotlinx/coroutines/AbstractCoroutine;Lkotlin/jvm/functions/Function2;)V
+HSPLkotlinx/coroutines/Active;-><clinit>()V
+HSPLkotlinx/coroutines/BlockingEventLoop;-><init>(Ljava/lang/Thread;)V
+HSPLkotlinx/coroutines/CancelHandler;-><init>()V
+HSPLkotlinx/coroutines/CancellableContinuationImpl;-><clinit>()V
+HSPLkotlinx/coroutines/CancellableContinuationImpl;-><init>(ILkotlin/coroutines/Continuation;)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;->completeResume(Ljava/lang/Object;)V
+HSPLkotlinx/coroutines/CancellableContinuationImpl;->detachChild$kotlinx_coroutines_core()V
+HSPLkotlinx/coroutines/CancellableContinuationImpl;->dispatchResume(I)V
+HSPLkotlinx/coroutines/CancellableContinuationImpl;->getContinuationCancellationCause(Lkotlinx/coroutines/JobSupport;)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;->getResult()Ljava/lang/Object;
+HSPLkotlinx/coroutines/CancellableContinuationImpl;->getSuccessfulResult$kotlinx_coroutines_core(Ljava/lang/Object;)Ljava/lang/Object;
+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;->isReusable()Z
+HSPLkotlinx/coroutines/CancellableContinuationImpl;->releaseClaimedReusableContinuation$kotlinx_coroutines_core()V
+HSPLkotlinx/coroutines/CancellableContinuationImpl;->resumeImpl(Ljava/lang/Object;ILkotlin/jvm/functions/Function1;)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;
+HSPLkotlinx/coroutines/CancellableContinuationImpl;->takeState$kotlinx_coroutines_core()Ljava/lang/Object;
+HSPLkotlinx/coroutines/CancellableContinuationImpl;->tryResume(Ljava/lang/Object;Lkotlin/jvm/functions/Function1;)Lkotlinx/coroutines/internal/Symbol;
+HSPLkotlinx/coroutines/CancelledContinuation;-><clinit>()V
+HSPLkotlinx/coroutines/CancelledContinuation;-><init>(Lkotlin/coroutines/Continuation;Ljava/lang/Throwable;Z)V
+HSPLkotlinx/coroutines/ChildContinuation;-><init>(Lkotlinx/coroutines/CancellableContinuationImpl;)V
+HSPLkotlinx/coroutines/ChildContinuation;->invoke(Ljava/lang/Throwable;)V
+HSPLkotlinx/coroutines/ChildHandleNode;-><init>(Lkotlinx/coroutines/JobSupport;)V
+HSPLkotlinx/coroutines/ChildHandleNode;->childCancelled(Ljava/lang/Throwable;)Z
+HSPLkotlinx/coroutines/ChildHandleNode;->invoke(Ljava/lang/Throwable;)V
+HSPLkotlinx/coroutines/CompletedContinuation;-><init>(Ljava/lang/Object;Lkotlinx/coroutines/CancelHandler;Lkotlin/jvm/functions/Function1;Ljava/lang/Object;Ljava/lang/Throwable;)V
+HSPLkotlinx/coroutines/CompletedContinuation;-><init>(Ljava/lang/Object;Lkotlinx/coroutines/CancelHandler;Lkotlin/jvm/functions/Function1;Ljava/util/concurrent/CancellationException;I)V
+HSPLkotlinx/coroutines/CompletedExceptionally;-><clinit>()V
+HSPLkotlinx/coroutines/CompletedExceptionally;-><init>(Ljava/lang/Throwable;Z)V
+HSPLkotlinx/coroutines/CoroutineContextKt$foldCopies$1;-><clinit>()V
+HSPLkotlinx/coroutines/CoroutineContextKt$foldCopies$1;-><init>(I)V
+HSPLkotlinx/coroutines/CoroutineContextKt$foldCopies$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
+HSPLkotlinx/coroutines/CoroutineDispatcher$Key$1;-><clinit>()V
+HSPLkotlinx/coroutines/CoroutineDispatcher$Key$1;-><init>(I)V
+HSPLkotlinx/coroutines/CoroutineDispatcher$Key$1;->invoke(Landroid/view/View;)Landroid/view/View;
+HSPLkotlinx/coroutines/CoroutineDispatcher$Key$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
+HSPLkotlinx/coroutines/CoroutineDispatcher$Key;-><init>(I)V
+HSPLkotlinx/coroutines/CoroutineDispatcher;-><clinit>()V
+HSPLkotlinx/coroutines/CoroutineDispatcher;-><init>()V
+HSPLkotlinx/coroutines/CoroutineDispatcher;->get(Lkotlin/coroutines/CoroutineContext$Key;)Lkotlin/coroutines/CoroutineContext$Element;
+HSPLkotlinx/coroutines/CoroutineDispatcher;->isDispatchNeeded()Z
+HSPLkotlinx/coroutines/CoroutineDispatcher;->minusKey(Lkotlin/coroutines/CoroutineContext$Key;)Lkotlin/coroutines/CoroutineContext;
+HSPLkotlinx/coroutines/DefaultExecutor;-><clinit>()V
+HSPLkotlinx/coroutines/DefaultExecutorKt;-><clinit>()V
+HSPLkotlinx/coroutines/DispatchedTask;-><init>(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(Ljava/lang/Throwable;Ljava/lang/Throwable;)V
+HSPLkotlinx/coroutines/DispatchedTask;->run()V
+HSPLkotlinx/coroutines/Dispatchers;-><clinit>()V
+HSPLkotlinx/coroutines/Empty;-><init>(Z)V
+HSPLkotlinx/coroutines/Empty;->getList()Lkotlinx/coroutines/NodeList;
+HSPLkotlinx/coroutines/Empty;->isActive()Z
+HSPLkotlinx/coroutines/EventLoopImplBase;-><clinit>()V
+HSPLkotlinx/coroutines/EventLoopImplBase;-><init>()V
+HSPLkotlinx/coroutines/EventLoopImplPlatform;-><init>()V
+HSPLkotlinx/coroutines/EventLoopImplPlatform;->decrementUseCount(Z)V
+HSPLkotlinx/coroutines/EventLoopImplPlatform;->incrementUseCount(Z)V
+HSPLkotlinx/coroutines/EventLoopImplPlatform;->isUnconfinedLoopActive()Z
+HSPLkotlinx/coroutines/EventLoopImplPlatform;->processUnconfinedEvent()Z
+HSPLkotlinx/coroutines/ExecutorCoroutineDispatcher$Key$1;-><clinit>()V
+HSPLkotlinx/coroutines/ExecutorCoroutineDispatcher$Key$1;-><init>(I)V
+HSPLkotlinx/coroutines/ExecutorCoroutineDispatcher$Key$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
+HSPLkotlinx/coroutines/ExecutorCoroutineDispatcher;-><clinit>()V
+HSPLkotlinx/coroutines/GlobalScope;-><clinit>()V
+HSPLkotlinx/coroutines/GlobalScope;->getCoroutineContext()Lkotlin/coroutines/CoroutineContext;
+HSPLkotlinx/coroutines/InvokeOnCancel;-><init>(ILjava/lang/Object;)V
+HSPLkotlinx/coroutines/InvokeOnCancel;->invoke(Ljava/lang/Throwable;)V
+HSPLkotlinx/coroutines/InvokeOnCompletion;-><init>(ILjava/lang/Object;)V
+HSPLkotlinx/coroutines/JobImpl;-><init>(Lkotlinx/coroutines/Job;)V
+HSPLkotlinx/coroutines/JobImpl;->getHandlesException$kotlinx_coroutines_core()Z
+HSPLkotlinx/coroutines/JobImpl;->getOnCancelComplete$kotlinx_coroutines_core()Z
+HSPLkotlinx/coroutines/JobNode;-><init>()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/JobSupport$ChildCompletion;-><init>(Lkotlinx/coroutines/JobSupport;Lkotlinx/coroutines/JobSupport$Finishing;Lkotlinx/coroutines/ChildHandleNode;Ljava/lang/Object;)V
+HSPLkotlinx/coroutines/JobSupport$ChildCompletion;->invoke(Ljava/lang/Throwable;)V
+HSPLkotlinx/coroutines/JobSupport$Finishing;-><clinit>()V
+HSPLkotlinx/coroutines/JobSupport$Finishing;-><init>(Lkotlinx/coroutines/NodeList;Ljava/lang/Throwable;)V
+HSPLkotlinx/coroutines/JobSupport$Finishing;->addExceptionLocked(Ljava/lang/Throwable;)V
+HSPLkotlinx/coroutines/JobSupport$Finishing;->getList()Lkotlinx/coroutines/NodeList;
+HSPLkotlinx/coroutines/JobSupport$Finishing;->getRootCause()Ljava/lang/Throwable;
+HSPLkotlinx/coroutines/JobSupport$Finishing;->isCancelling()Z
+HSPLkotlinx/coroutines/JobSupport$Finishing;->isCompleting()Z
+HSPLkotlinx/coroutines/JobSupport$Finishing;->sealLocked(Ljava/lang/Throwable;)Ljava/util/ArrayList;
+HSPLkotlinx/coroutines/JobSupport$addLastAtomic$$inlined$addLastIf$1;-><init>(Lkotlinx/coroutines/internal/LockFreeLinkedListNode;Lkotlinx/coroutines/JobSupport;Ljava/lang/Object;)V
+HSPLkotlinx/coroutines/JobSupport$addLastAtomic$$inlined$addLastIf$1;->complete(Ljava/lang/Object;Ljava/lang/Object;)V
+HSPLkotlinx/coroutines/JobSupport$addLastAtomic$$inlined$addLastIf$1;->prepare(Ljava/lang/Object;)Lkotlinx/coroutines/internal/Symbol;
+HSPLkotlinx/coroutines/JobSupport;-><clinit>()V
+HSPLkotlinx/coroutines/JobSupport;-><init>(Z)V
+HSPLkotlinx/coroutines/JobSupport;->addLastAtomic(Ljava/lang/Object;Lkotlinx/coroutines/NodeList;Lkotlinx/coroutines/JobNode;)Z
+HSPLkotlinx/coroutines/JobSupport;->afterCompletion(Ljava/lang/Object;)V
+HSPLkotlinx/coroutines/JobSupport;->afterResume(Ljava/lang/Object;)V
+HSPLkotlinx/coroutines/JobSupport;->cancel(Ljava/util/concurrent/CancellationException;)V
+HSPLkotlinx/coroutines/JobSupport;->cancelImpl$kotlinx_coroutines_core(Ljava/lang/Object;)Z
+HSPLkotlinx/coroutines/JobSupport;->cancelInternal(Ljava/util/concurrent/CancellationException;)V
+HSPLkotlinx/coroutines/JobSupport;->cancelParent(Ljava/lang/Throwable;)Z
+HSPLkotlinx/coroutines/JobSupport;->childCancelled(Ljava/lang/Throwable;)Z
+HSPLkotlinx/coroutines/JobSupport;->completeStateFinalization(Lkotlinx/coroutines/Incomplete;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;->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;->getFinalRootCause(Lkotlinx/coroutines/JobSupport$Finishing;Ljava/util/ArrayList;)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;->getState$kotlinx_coroutines_core()Ljava/lang/Object;
+HSPLkotlinx/coroutines/JobSupport;->initParentJob(Lkotlinx/coroutines/Job;)V
+HSPLkotlinx/coroutines/JobSupport;->invokeOnCompletion(ZZLkotlin/jvm/functions/Function1;)Lkotlinx/coroutines/DisposableHandle;
+HSPLkotlinx/coroutines/JobSupport;->isActive()Z
+HSPLkotlinx/coroutines/JobSupport;->isScopedCoroutine()Z
+HSPLkotlinx/coroutines/JobSupport;->makeCompletingOnce$kotlinx_coroutines_core(Ljava/lang/Object;)Ljava/lang/Object;
+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;->onCompletionInternal(Ljava/lang/Object;)V
+HSPLkotlinx/coroutines/JobSupport;->plus(Lkotlin/coroutines/CoroutineContext;)Lkotlin/coroutines/CoroutineContext;
+HSPLkotlinx/coroutines/JobSupport;->promoteSingleToNodeList(Lkotlinx/coroutines/JobNode;)V
+HSPLkotlinx/coroutines/JobSupport;->startInternal(Ljava/lang/Object;)I
+HSPLkotlinx/coroutines/JobSupport;->tryMakeCompleting(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
+HSPLkotlinx/coroutines/JobSupport;->tryWaitForChild(Lkotlinx/coroutines/JobSupport$Finishing;Lkotlinx/coroutines/ChildHandleNode;Ljava/lang/Object;)Z
+HSPLkotlinx/coroutines/NodeList;-><init>()V
+HSPLkotlinx/coroutines/NodeList;->getList()Lkotlinx/coroutines/NodeList;
+HSPLkotlinx/coroutines/NodeList;->isActive()Z
+HSPLkotlinx/coroutines/NodeList;->isRemoved()Z
+HSPLkotlinx/coroutines/NonDisposableHandle;-><clinit>()V
+HSPLkotlinx/coroutines/NonDisposableHandle;->dispose()V
+HSPLkotlinx/coroutines/ThreadLocalEventLoop;-><clinit>()V
+HSPLkotlinx/coroutines/ThreadLocalEventLoop;->getEventLoop$kotlinx_coroutines_core()Lkotlinx/coroutines/EventLoopImplPlatform;
+HSPLkotlinx/coroutines/Unconfined;-><clinit>()V
+HSPLkotlinx/coroutines/UndispatchedCoroutine;-><init>(Lkotlin/coroutines/Continuation;Lkotlin/coroutines/CoroutineContext;)V
+HSPLkotlinx/coroutines/UndispatchedMarker;-><clinit>()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;
+HSPLkotlinx/coroutines/android/AndroidDispatcherFactory;-><init>()V
+HSPLkotlinx/coroutines/android/AndroidDispatcherFactory;->createDispatcher(Ljava/util/List;)Lkotlinx/coroutines/MainCoroutineDispatcher;
+HSPLkotlinx/coroutines/android/HandlerContext;-><init>(Landroid/os/Handler;)V
+HSPLkotlinx/coroutines/android/HandlerContext;-><init>(Landroid/os/Handler;Ljava/lang/String;Z)V
+HSPLkotlinx/coroutines/android/HandlerContext;->dispatch(Lkotlin/coroutines/CoroutineContext;Ljava/lang/Runnable;)V
+HSPLkotlinx/coroutines/android/HandlerContext;->isDispatchNeeded()Z
+HSPLkotlinx/coroutines/android/HandlerDispatcherKt;-><clinit>()V
+HSPLkotlinx/coroutines/android/HandlerDispatcherKt;->asHandler(Landroid/os/Looper;)Landroid/os/Handler;
+HSPLkotlinx/coroutines/channels/BufferOverflow;-><clinit>()V
+HSPLkotlinx/coroutines/channels/BufferOverflow;-><init>(ILjava/lang/String;)V
+HSPLkotlinx/coroutines/channels/BufferedChannel$BufferedChannelIterator;-><init>(Lkotlinx/coroutines/channels/BufferedChannel;)V
+HSPLkotlinx/coroutines/channels/BufferedChannel$BufferedChannelIterator;->hasNext(Lkotlin/coroutines/jvm/internal/ContinuationImpl;)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;-><clinit>()V
+HSPLkotlinx/coroutines/channels/BufferedChannel;-><init>(ILkotlin/jvm/functions/Function1;)V
+HSPLkotlinx/coroutines/channels/BufferedChannel;->access$findSegmentSend(Lkotlinx/coroutines/channels/BufferedChannel;JLkotlinx/coroutines/channels/ChannelSegment;)Lkotlinx/coroutines/channels/ChannelSegment;
+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;->dropFirstElementUntilTheSpecifiedCellIsInTheBuffer(J)V
+HSPLkotlinx/coroutines/channels/BufferedChannel;->expandBuffer()V
+HSPLkotlinx/coroutines/channels/BufferedChannel;->findSegmentReceive(JLkotlinx/coroutines/channels/ChannelSegment;)Lkotlinx/coroutines/channels/ChannelSegment;
+HSPLkotlinx/coroutines/channels/BufferedChannel;->getBufferEndCounter()J
+HSPLkotlinx/coroutines/channels/BufferedChannel;->getReceiversCounter$kotlinx_coroutines_core()J
+HSPLkotlinx/coroutines/channels/BufferedChannel;->getSendersCounter$kotlinx_coroutines_core()J
+HSPLkotlinx/coroutines/channels/BufferedChannel;->incCompletedExpandBufferAttempts(J)V
+HSPLkotlinx/coroutines/channels/BufferedChannel;->isClosed(JZ)Z
+HSPLkotlinx/coroutines/channels/BufferedChannel;->isClosedForReceive()Z
+HSPLkotlinx/coroutines/channels/BufferedChannel;->isRendezvousOrUnlimited()Z
+HSPLkotlinx/coroutines/channels/BufferedChannel;->iterator()Lkotlinx/coroutines/channels/BufferedChannel$BufferedChannelIterator;
+HSPLkotlinx/coroutines/channels/BufferedChannel;->receive(Lkotlin/coroutines/jvm/internal/SuspendLambda;)Ljava/lang/Object;
+HSPLkotlinx/coroutines/channels/BufferedChannel;->send(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
+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;->updateCellReceive(Lkotlinx/coroutines/channels/ChannelSegment;IJLjava/lang/Object;)Ljava/lang/Object;
+HSPLkotlinx/coroutines/channels/BufferedChannel;->waitExpandBufferCompletion$kotlinx_coroutines_core(J)V
+HSPLkotlinx/coroutines/channels/BufferedChannelKt$createSegmentFunction$1;-><clinit>()V
+HSPLkotlinx/coroutines/channels/BufferedChannelKt$createSegmentFunction$1;-><init>()V
+HSPLkotlinx/coroutines/channels/BufferedChannelKt$createSegmentFunction$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
+HSPLkotlinx/coroutines/channels/BufferedChannelKt;-><clinit>()V
+HSPLkotlinx/coroutines/channels/BufferedChannelKt;->tryResume0(Lkotlinx/coroutines/CancellableContinuation;Ljava/lang/Object;Lkotlin/jvm/functions/Function1;)Z
+HSPLkotlinx/coroutines/channels/Channel$Factory;-><clinit>()V
+HSPLkotlinx/coroutines/channels/Channel;-><clinit>()V
+HSPLkotlinx/coroutines/channels/ChannelSegment;-><init>(JLkotlinx/coroutines/channels/ChannelSegment;Lkotlinx/coroutines/channels/BufferedChannel;I)V
+HSPLkotlinx/coroutines/channels/ChannelSegment;->casState$kotlinx_coroutines_core(Ljava/lang/Object;ILjava/lang/Object;)Z
+HSPLkotlinx/coroutines/channels/ChannelSegment;->getNumberOfSlots()I
+HSPLkotlinx/coroutines/channels/ChannelSegment;->getState$kotlinx_coroutines_core(I)Ljava/lang/Object;
+HSPLkotlinx/coroutines/channels/ChannelSegment;->onCancellation(ILkotlin/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(ILkotlinx/coroutines/internal/Symbol;)V
+HSPLkotlinx/coroutines/channels/ConflatedBufferedChannel;-><init>(ILkotlinx/coroutines/channels/BufferOverflow;Lkotlin/jvm/functions/Function1;)V
+HSPLkotlinx/coroutines/channels/ConflatedBufferedChannel;->trySend-JP2dKIU(Ljava/lang/Object;)Ljava/lang/Object;
+HSPLkotlinx/coroutines/channels/ConflatedBufferedChannel;->trySendImpl-Mj0NB7M(Ljava/lang/Object;Z)Ljava/lang/Object;
+HSPLkotlinx/coroutines/channels/ProducerCoroutine;-><init>(Lkotlin/coroutines/CoroutineContext;Lkotlinx/coroutines/channels/BufferedChannel;)V
+HSPLkotlinx/coroutines/channels/ProducerCoroutine;->iterator()Lkotlinx/coroutines/channels/BufferedChannel$BufferedChannelIterator;
+HSPLkotlinx/coroutines/channels/ProducerCoroutine;->send(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
+HSPLkotlinx/coroutines/flow/AbstractFlow$collect$1;-><init>(Lkotlinx/coroutines/flow/SafeFlow;Lkotlin/coroutines/Continuation;)V
+HSPLkotlinx/coroutines/flow/DistinctFlowImpl$collect$2$emit$1;-><init>(Lkotlinx/coroutines/flow/DistinctFlowImpl$collect$2;Lkotlin/coroutines/Continuation;)V
+HSPLkotlinx/coroutines/flow/DistinctFlowImpl$collect$2;-><init>(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;
+HSPLkotlinx/coroutines/flow/DistinctFlowImpl;-><init>(Lkotlinx/coroutines/flow/Flow;)V
+HSPLkotlinx/coroutines/flow/DistinctFlowImpl;->collect(Lkotlinx/coroutines/flow/FlowCollector;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
+HSPLkotlinx/coroutines/flow/FlowKt__ChannelsKt$emitAllImpl$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;
+HSPLkotlinx/coroutines/flow/FlowKt__LimitKt$dropWhile$$inlined$unsafeFlow$1;-><init>(Lkotlinx/coroutines/flow/internal/ChannelFlowTransformLatest;Lkotlinx/coroutines/flow/StartedWhileSubscribed$command$2;)V
+HSPLkotlinx/coroutines/flow/FlowKt__LimitKt$dropWhile$$inlined$unsafeFlow$1;->collect(Lkotlinx/coroutines/flow/FlowCollector;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
+HSPLkotlinx/coroutines/flow/FlowKt__LimitKt$dropWhile$1$1$emit$1;-><init>(Lkotlinx/coroutines/flow/FlowKt__LimitKt$dropWhile$1$1;Lkotlin/coroutines/Continuation;)V
+HSPLkotlinx/coroutines/flow/FlowKt__LimitKt$dropWhile$1$1;-><init>(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;
+HSPLkotlinx/coroutines/flow/FlowKt__MergeKt$mapLatest$1;-><init>(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;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;
+HSPLkotlinx/coroutines/flow/FlowKt__MergeKt;-><clinit>()V
+HSPLkotlinx/coroutines/flow/FlowKt__ReduceKt$first$$inlined$collectWhile$2$1;-><init>(Lkotlinx/coroutines/flow/FlowKt__ReduceKt$first$$inlined$collectWhile$2;Lkotlin/coroutines/Continuation;)V
+HSPLkotlinx/coroutines/flow/FlowKt__ReduceKt$first$$inlined$collectWhile$2;-><init>(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;
+HSPLkotlinx/coroutines/flow/FlowKt__ShareKt$launchSharing$1$2;-><init>(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;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;
+HSPLkotlinx/coroutines/flow/FlowKt__ShareKt$launchSharing$1;-><init>(Lkotlinx/coroutines/flow/SharingStarted;Lkotlinx/coroutines/flow/Flow;Lkotlinx/coroutines/flow/MutableSharedFlow;Ljava/lang/Object;Lkotlin/coroutines/Continuation;)V
+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;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;
+HSPLkotlinx/coroutines/flow/ReadonlyStateFlow;-><init>(Lkotlinx/coroutines/flow/StateFlowImpl;)V
+HSPLkotlinx/coroutines/flow/ReadonlyStateFlow;->collect(Lkotlinx/coroutines/flow/FlowCollector;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
+HSPLkotlinx/coroutines/flow/ReadonlyStateFlow;->getValue()Ljava/lang/Object;
+HSPLkotlinx/coroutines/flow/SafeFlow;-><init>(Lkotlin/jvm/functions/Function2;)V
+HSPLkotlinx/coroutines/flow/SafeFlow;->collect(Lkotlinx/coroutines/flow/FlowCollector;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
+HSPLkotlinx/coroutines/flow/SharedFlowImpl$collect$1;-><init>(Lkotlinx/coroutines/flow/SharedFlowImpl;Lkotlin/coroutines/Continuation;)V
+HSPLkotlinx/coroutines/flow/SharedFlowImpl$collect$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;
+HSPLkotlinx/coroutines/flow/SharedFlowImpl;-><init>(IILkotlinx/coroutines/channels/BufferOverflow;)V
+HSPLkotlinx/coroutines/flow/SharedFlowImpl;->awaitValue(Lkotlinx/coroutines/flow/SharedFlowSlot;Lkotlinx/coroutines/flow/SharedFlowImpl$collect$1;)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;)Lkotlin/coroutines/intrinsics/CoroutineSingletons;
+HSPLkotlinx/coroutines/flow/SharedFlowImpl;->collect(Lkotlinx/coroutines/flow/FlowCollector;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
+HSPLkotlinx/coroutines/flow/SharedFlowImpl;->createSlot()Lkotlinx/coroutines/flow/internal/AbstractSharedFlowSlot;
+HSPLkotlinx/coroutines/flow/SharedFlowImpl;->createSlotArray()[Lkotlinx/coroutines/flow/internal/AbstractSharedFlowSlot;
+HSPLkotlinx/coroutines/flow/SharedFlowImpl;->dropOldestLocked()V
+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;->getHead()J
+HSPLkotlinx/coroutines/flow/SharedFlowImpl;->growBuffer(II[Ljava/lang/Object;)[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;->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/SharedFlowSlot;-><init>()V
+HSPLkotlinx/coroutines/flow/SharedFlowSlot;->allocateLocked(Lkotlinx/coroutines/flow/internal/AbstractSharedFlow;)Z
+HSPLkotlinx/coroutines/flow/SharingCommand;-><clinit>()V
+HSPLkotlinx/coroutines/flow/SharingCommand;-><init>(ILjava/lang/String;)V
+HSPLkotlinx/coroutines/flow/SharingConfig;-><init>()V
+HSPLkotlinx/coroutines/flow/SharingConfig;-><init>(ILkotlin/coroutines/CoroutineContext;Lkotlinx/coroutines/channels/BufferOverflow;Lkotlinx/coroutines/flow/Flow;)V
+HSPLkotlinx/coroutines/flow/SharingConfig;->add(Ljava/lang/Object;Ljava/lang/Object;)V
+HSPLkotlinx/coroutines/flow/SharingConfig;->contains(Ljava/lang/Object;)Z
+HSPLkotlinx/coroutines/flow/SharingConfig;->find(Ljava/lang/Object;)I
+HSPLkotlinx/coroutines/flow/SharingConfig;->remove(Ljava/lang/Object;Ljava/lang/Object;)Z
+HSPLkotlinx/coroutines/flow/SharingConfig;->removeScope(Ljava/lang/Object;)V
+HSPLkotlinx/coroutines/flow/SharingConfig;->scopeSetAt(I)Landroidx/compose/runtime/collection/IdentityArraySet;
+HSPLkotlinx/coroutines/flow/StartedLazily;-><init>(I)V
+HSPLkotlinx/coroutines/flow/StartedWhileSubscribed$command$1;-><init>(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;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;
+HSPLkotlinx/coroutines/flow/StartedWhileSubscribed$command$2;-><init>(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;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;
+HSPLkotlinx/coroutines/flow/StartedWhileSubscribed;-><init>(JJ)V
+HSPLkotlinx/coroutines/flow/StartedWhileSubscribed;->command(Lkotlinx/coroutines/flow/internal/SubscriptionCountStateFlow;)Lkotlinx/coroutines/flow/Flow;
+HSPLkotlinx/coroutines/flow/StartedWhileSubscribed;->equals(Ljava/lang/Object;)Z
+HSPLkotlinx/coroutines/flow/StateFlowImpl$collect$1;-><init>(Lkotlinx/coroutines/flow/StateFlowImpl;Lkotlin/coroutines/Continuation;)V
+HSPLkotlinx/coroutines/flow/StateFlowImpl$collect$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;
+HSPLkotlinx/coroutines/flow/StateFlowImpl;-><clinit>()V
+HSPLkotlinx/coroutines/flow/StateFlowImpl;-><init>(Ljava/lang/Object;)V
+HSPLkotlinx/coroutines/flow/StateFlowImpl;->collect(Lkotlinx/coroutines/flow/FlowCollector;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
+HSPLkotlinx/coroutines/flow/StateFlowImpl;->createSlot()Lkotlinx/coroutines/flow/internal/AbstractSharedFlowSlot;
+HSPLkotlinx/coroutines/flow/StateFlowImpl;->createSlotArray()[Lkotlinx/coroutines/flow/internal/AbstractSharedFlowSlot;
+HSPLkotlinx/coroutines/flow/StateFlowImpl;->getValue()Ljava/lang/Object;
+HSPLkotlinx/coroutines/flow/StateFlowImpl;->setValue(Ljava/lang/Object;)V
+HSPLkotlinx/coroutines/flow/StateFlowImpl;->updateState(Ljava/lang/Object;Ljava/lang/Object;)Z
+HSPLkotlinx/coroutines/flow/StateFlowSlot;-><clinit>()V
+HSPLkotlinx/coroutines/flow/StateFlowSlot;->allocateLocked(Lkotlinx/coroutines/flow/internal/AbstractSharedFlow;)Z
+HSPLkotlinx/coroutines/flow/internal/AbstractSharedFlow;->allocateSlot()Lkotlinx/coroutines/flow/internal/AbstractSharedFlowSlot;
+HSPLkotlinx/coroutines/flow/internal/ChannelFlow$collect$2;-><init>(Lkotlin/coroutines/Continuation;Lkotlinx/coroutines/flow/FlowCollector;Lkotlinx/coroutines/flow/internal/ChannelFlow;)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;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;
+HSPLkotlinx/coroutines/flow/internal/ChannelFlow$collectToFun$1;-><init>(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;
+HSPLkotlinx/coroutines/flow/internal/ChannelFlow;-><init>(Lkotlin/coroutines/CoroutineContext;ILkotlinx/coroutines/channels/BufferOverflow;)V
+HSPLkotlinx/coroutines/flow/internal/ChannelFlow;->fuse(Lkotlin/coroutines/CoroutineContext;ILkotlinx/coroutines/channels/BufferOverflow;)Lkotlinx/coroutines/flow/Flow;
+HSPLkotlinx/coroutines/flow/internal/ChannelFlowOperator;-><init>(ILkotlin/coroutines/CoroutineContext;Lkotlinx/coroutines/channels/BufferOverflow;Lkotlinx/coroutines/flow/Flow;)V
+HSPLkotlinx/coroutines/flow/internal/ChannelFlowOperator;->collect(Lkotlinx/coroutines/flow/FlowCollector;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
+HSPLkotlinx/coroutines/flow/internal/ChannelFlowTransformLatest$flowCollect$3$1$2;-><init>(Lkotlinx/coroutines/flow/internal/ChannelFlowTransformLatest;Lkotlinx/coroutines/flow/FlowCollector;Ljava/lang/Object;Lkotlin/coroutines/Continuation;)V
+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;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;
+HSPLkotlinx/coroutines/flow/internal/ChannelFlowTransformLatest$flowCollect$3$1$emit$1;-><init>(Lkotlinx/coroutines/flow/internal/ChannelFlowTransformLatest$flowCollect$3$1;Lkotlin/coroutines/Continuation;)V
+HSPLkotlinx/coroutines/flow/internal/ChannelFlowTransformLatest$flowCollect$3$1;-><init>(Lkotlin/jvm/internal/Ref$ObjectRef;Lkotlinx/coroutines/CoroutineScope;Lkotlinx/coroutines/flow/internal/ChannelFlowTransformLatest;Lkotlinx/coroutines/flow/FlowCollector;)V
+HSPLkotlinx/coroutines/flow/internal/ChannelFlowTransformLatest$flowCollect$3$1;->emit(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
+HSPLkotlinx/coroutines/flow/internal/ChannelFlowTransformLatest$flowCollect$3;-><init>(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;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;
+HSPLkotlinx/coroutines/flow/internal/ChannelFlowTransformLatest;-><init>(Lkotlin/jvm/functions/Function3;Lkotlinx/coroutines/flow/Flow;Lkotlin/coroutines/CoroutineContext;ILkotlinx/coroutines/channels/BufferOverflow;)V
+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;
+HSPLkotlinx/coroutines/flow/internal/NoOpContinuation;-><clinit>()V
+HSPLkotlinx/coroutines/flow/internal/NopCollector;-><clinit>()V
+HSPLkotlinx/coroutines/flow/internal/SafeCollector;-><init>(Lkotlinx/coroutines/flow/FlowCollector;Lkotlin/coroutines/CoroutineContext;)V
+HSPLkotlinx/coroutines/flow/internal/SendingCollector;-><init>(Lkotlinx/coroutines/channels/ProducerScope;)V
+HSPLkotlinx/coroutines/flow/internal/SendingCollector;->emit(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
+HSPLkotlinx/coroutines/flow/internal/SubscriptionCountStateFlow;-><init>(I)V
+HSPLkotlinx/coroutines/internal/AtomicOp;-><clinit>()V
+HSPLkotlinx/coroutines/internal/AtomicOp;-><init>()V
+HSPLkotlinx/coroutines/internal/AtomicOp;->perform(Ljava/lang/Object;)Ljava/lang/Object;
+HSPLkotlinx/coroutines/internal/ConcurrentLinkedListNode;-><clinit>()V
+HSPLkotlinx/coroutines/internal/ConcurrentLinkedListNode;-><init>(Lkotlinx/coroutines/internal/ConcurrentLinkedListNode;)V
+HSPLkotlinx/coroutines/internal/ConcurrentLinkedListNode;->cleanPrev()V
+HSPLkotlinx/coroutines/internal/ConcurrentLinkedListNode;->getNext()Lkotlinx/coroutines/internal/ConcurrentLinkedListNode;
+HSPLkotlinx/coroutines/internal/ContextScope;-><init>(Lkotlin/coroutines/CoroutineContext;)V
+HSPLkotlinx/coroutines/internal/ContextScope;->getCoroutineContext()Lkotlin/coroutines/CoroutineContext;
+HSPLkotlinx/coroutines/internal/DispatchedContinuation;-><clinit>()V
+HSPLkotlinx/coroutines/internal/DispatchedContinuation;-><init>(Lkotlinx/coroutines/CoroutineDispatcher;Lkotlin/coroutines/jvm/internal/ContinuationImpl;)V
+HSPLkotlinx/coroutines/internal/DispatchedContinuation;->getContext()Lkotlin/coroutines/CoroutineContext;
+HSPLkotlinx/coroutines/internal/DispatchedContinuation;->getDelegate$kotlinx_coroutines_core()Lkotlin/coroutines/Continuation;
+HSPLkotlinx/coroutines/internal/DispatchedContinuation;->resumeWith(Ljava/lang/Object;)V
+HSPLkotlinx/coroutines/internal/DispatchedContinuation;->takeState$kotlinx_coroutines_core()Ljava/lang/Object;
+HSPLkotlinx/coroutines/internal/LimitedDispatcher;-><clinit>()V
+HSPLkotlinx/coroutines/internal/LimitedDispatcher;-><init>(Lkotlinx/coroutines/scheduling/UnlimitedIoScheduler;I)V
+HSPLkotlinx/coroutines/internal/LockFreeLinkedListNode$toString$1;-><init>(ILjava/lang/Object;)V
+HSPLkotlinx/coroutines/internal/LockFreeLinkedListNode;-><clinit>()V
+HSPLkotlinx/coroutines/internal/LockFreeLinkedListNode;-><init>()V
+HSPLkotlinx/coroutines/internal/LockFreeLinkedListNode;->correctPrev()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;->isRemoved()Z
+HSPLkotlinx/coroutines/internal/LockFreeTaskQueue;-><clinit>()V
+HSPLkotlinx/coroutines/internal/LockFreeTaskQueue;-><init>()V
+HSPLkotlinx/coroutines/internal/LockFreeTaskQueueCore;-><clinit>()V
+HSPLkotlinx/coroutines/internal/LockFreeTaskQueueCore;-><init>(IZ)V
+HSPLkotlinx/coroutines/internal/MainDispatcherLoader;-><clinit>()V
+HSPLkotlinx/coroutines/internal/Removed;-><init>(Lkotlinx/coroutines/internal/LockFreeLinkedListNode;)V
+HSPLkotlinx/coroutines/internal/ResizableAtomicArray;-><init>(I)V
+HSPLkotlinx/coroutines/internal/ScopeCoroutine;-><init>(Lkotlin/coroutines/Continuation;Lkotlin/coroutines/CoroutineContext;)V
+HSPLkotlinx/coroutines/internal/ScopeCoroutine;->afterCompletion(Ljava/lang/Object;)V
+HSPLkotlinx/coroutines/internal/ScopeCoroutine;->afterResume(Ljava/lang/Object;)V
+HSPLkotlinx/coroutines/internal/ScopeCoroutine;->isScopedCoroutine()Z
+HSPLkotlinx/coroutines/internal/Segment;-><clinit>()V
+HSPLkotlinx/coroutines/internal/Segment;-><init>(JLkotlinx/coroutines/internal/Segment;I)V
+HSPLkotlinx/coroutines/internal/Segment;->decPointers$kotlinx_coroutines_core()Z
+HSPLkotlinx/coroutines/internal/Segment;->isRemoved()Z
+HSPLkotlinx/coroutines/internal/Segment;->onSlotCleaned()V
+HSPLkotlinx/coroutines/internal/Segment;->tryIncPointers$kotlinx_coroutines_core()Z
+HSPLkotlinx/coroutines/internal/Symbol;-><init>(ILjava/lang/String;)V
+HSPLkotlinx/coroutines/internal/SystemPropsKt__SystemPropsKt;-><clinit>()V
+HSPLkotlinx/coroutines/scheduling/CoroutineScheduler;-><clinit>()V
+HSPLkotlinx/coroutines/scheduling/CoroutineScheduler;-><init>(IIJLjava/lang/String;)V
+HSPLkotlinx/coroutines/scheduling/DefaultIoScheduler;-><clinit>()V
+HSPLkotlinx/coroutines/scheduling/DefaultScheduler;-><clinit>()V
+HSPLkotlinx/coroutines/scheduling/DefaultScheduler;-><init>()V
+HSPLkotlinx/coroutines/scheduling/NanoTimeSource;-><clinit>()V
+HSPLkotlinx/coroutines/scheduling/SchedulerCoroutineDispatcher;-><init>(IIJLjava/lang/String;)V
+HSPLkotlinx/coroutines/scheduling/Task;-><init>(JLkotlin/ULong$Companion;)V
+HSPLkotlinx/coroutines/scheduling/TasksKt;-><clinit>()V
+HSPLkotlinx/coroutines/scheduling/UnlimitedIoScheduler;-><clinit>()V
+HSPLkotlinx/coroutines/sync/MutexImpl$CancellableContinuationWithOwner$resume$2;-><init>(Lkotlinx/coroutines/sync/MutexImpl;Lkotlinx/coroutines/sync/MutexImpl$CancellableContinuationWithOwner;I)V
+HSPLkotlinx/coroutines/sync/MutexImpl$CancellableContinuationWithOwner;-><init>(Lkotlinx/coroutines/sync/MutexImpl;Lkotlinx/coroutines/CancellableContinuationImpl;)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;Lkotlin/jvm/functions/Function1;)Lkotlinx/coroutines/internal/Symbol;
+HSPLkotlinx/coroutines/sync/MutexImpl;-><clinit>()V
+HSPLkotlinx/coroutines/sync/MutexImpl;-><init>(Z)V
+HSPLkotlinx/coroutines/sync/MutexImpl;->isLocked()Z
+HSPLkotlinx/coroutines/sync/MutexImpl;->lock(Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
+HSPLkotlinx/coroutines/sync/MutexImpl;->unlock(Ljava/lang/Object;)V
+HSPLkotlinx/coroutines/sync/SemaphoreImpl$addAcquireToQueue$createNewSegment$1;-><clinit>()V
+HSPLkotlinx/coroutines/sync/SemaphoreImpl$addAcquireToQueue$createNewSegment$1;-><init>()V
+HSPLkotlinx/coroutines/sync/SemaphoreImpl$tryResumeNextFromQueue$createNewSegment$1;-><clinit>()V
+HSPLkotlinx/coroutines/sync/SemaphoreImpl$tryResumeNextFromQueue$createNewSegment$1;-><init>()V
+HSPLkotlinx/coroutines/sync/SemaphoreImpl;-><clinit>()V
+HSPLkotlinx/coroutines/sync/SemaphoreImpl;-><init>(I)V
+HSPLkotlinx/coroutines/sync/SemaphoreImpl;->acquire(Lkotlinx/coroutines/sync/MutexImpl$CancellableContinuationWithOwner;)V
+HSPLkotlinx/coroutines/sync/SemaphoreImpl;->release()V
+HSPLkotlinx/coroutines/sync/SemaphoreKt;-><clinit>()V
+HSPLkotlinx/coroutines/sync/SemaphoreSegment;-><init>(JLkotlinx/coroutines/sync/SemaphoreSegment;I)V
+HSPLkotlinx/coroutines/sync/SemaphoreSegment;->getNumberOfSlots()I
+HSPLokhttp3/Headers$Builder;-><init>()V
+HSPLokhttp3/Headers$Builder;->add(I)V
+HSPLokhttp3/Headers$Builder;->takeMax()I
+HSPLokhttp3/MediaType;-><clinit>()V
+HSPLokhttp3/MediaType;->Channel$default(ILkotlinx/coroutines/channels/BufferOverflow;I)Lkotlinx/coroutines/channels/BufferedChannel;
+HSPLokhttp3/MediaType;->CompositionLocalProvider(Landroidx/compose/runtime/ProvidedValue;Lkotlin/jvm/functions/Function2;Landroidx/compose/runtime/Composer;I)V
+HSPLokhttp3/MediaType;->CoroutineScope(Lkotlin/coroutines/CoroutineContext;)Lkotlinx/coroutines/internal/ContextScope;
+HSPLokhttp3/MediaType;->LazyLayoutPinnableItem(Ljava/lang/Object;ILandroidx/compose/foundation/lazy/layout/LazyLayoutPinnedItemList;Lkotlin/jvm/functions/Function2;Landroidx/compose/runtime/Composer;I)V
+HSPLokhttp3/MediaType;->LazySaveableStateHolderProvider(Lkotlin/jvm/functions/Function3;Landroidx/compose/runtime/Composer;I)V
+HSPLokhttp3/MediaType;->Offset(FF)J
+HSPLokhttp3/MediaType;->ParagraphIntrinsics(Landroidx/compose/ui/text/TextStyle;Landroidx/compose/ui/text/font/FontFamily$Resolver;Landroidx/compose/ui/unit/Density;Ljava/lang/String;Ljava/util/List;Ljava/util/List;)Landroidx/compose/ui/text/platform/AndroidParagraphIntrinsics;
+HSPLokhttp3/MediaType;->RoundRect-gG7oq9Y(FFFFJ)Landroidx/compose/ui/geometry/RoundRect;
+HSPLokhttp3/MediaType;->TextRange(II)J
+HSPLokhttp3/MediaType;->access$SkippableItem-JVlU9Rs(Landroidx/compose/foundation/lazy/layout/LazyLayoutItemProvider;Ljava/lang/Object;ILjava/lang/Object;Landroidx/compose/runtime/Composer;I)V
+HSPLokhttp3/MediaType;->access$checkIndex(ILjava/util/List;)V
+HSPLokhttp3/MediaType;->access$containsMark([II)Z
+HSPLokhttp3/MediaType;->access$groupSize([II)I
+HSPLokhttp3/MediaType;->access$hasAux([II)Z
+HSPLokhttp3/MediaType;->access$isChainUpdate(Landroidx/compose/ui/node/BackwardsCompatNode;)Z
+HSPLokhttp3/MediaType;->access$isNode([II)Z
+HSPLokhttp3/MediaType;->access$nodeCount([II)I
+HSPLokhttp3/MediaType;->access$slotAnchor([II)I
+HSPLokhttp3/MediaType;->access$updateGroupSize([III)V
+HSPLokhttp3/MediaType;->access$updateNodeCount([III)V
+HSPLokhttp3/MediaType;->adapt$default(Landroidx/compose/ui/graphics/colorspace/ColorSpace;)Landroidx/compose/ui/graphics/colorspace/ColorSpace;
+HSPLokhttp3/MediaType;->cancel(Lkotlinx/coroutines/CoroutineScope;Landroidx/lifecycle/LifecycleDestroyedException;)V
+HSPLokhttp3/MediaType;->ceilToIntPx(F)I
+HSPLokhttp3/MediaType;->checkParallelism(I)V
+HSPLokhttp3/MediaType;->chromaticAdaptation([F[F[F)[F
+HSPLokhttp3/MediaType;->coerceIn-8ffj60Q(IJ)J
+HSPLokhttp3/MediaType;->collectIsPressedAsState(Landroidx/compose/foundation/interaction/InteractionSource;Landroidx/compose/runtime/Composer;I)Landroidx/compose/runtime/MutableState;
+HSPLokhttp3/MediaType;->colors-u3YEpmA(JJJJJJJJJJJJLandroidx/compose/runtime/Composer;II)Landroidx/tv/material3/ToggleableSurfaceColors;
+HSPLokhttp3/MediaType;->compare(Landroidx/compose/ui/graphics/colorspace/WhitePoint;Landroidx/compose/ui/graphics/colorspace/WhitePoint;)Z
+HSPLokhttp3/MediaType;->coroutineScope(Lkotlin/jvm/functions/Function2;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
+HSPLokhttp3/MediaType;->countOneBits(I)I
+HSPLokhttp3/MediaType;->createFontFamilyResolver(Landroid/content/Context;)Landroidx/compose/ui/text/font/FontFamilyResolverImpl;
+HSPLokhttp3/MediaType;->foldCopies(Lkotlin/coroutines/CoroutineContext;Lkotlin/coroutines/CoroutineContext;Z)Lkotlin/coroutines/CoroutineContext;
+HSPLokhttp3/MediaType;->getCharSequenceBounds(Landroid/text/TextPaint;Ljava/lang/CharSequence;II)Landroid/graphics/Rect;
+HSPLokhttp3/MediaType;->getFontFamilyResult(Landroid/content/Context;Landroidx/core/provider/FontRequest;)Landroidx/compose/ui/input/pointer/util/PointerIdArray;
+HSPLokhttp3/MediaType;->getOrNull(Landroidx/compose/ui/semantics/SemanticsConfiguration;Landroidx/compose/ui/semantics/SemanticsPropertyKey;)Ljava/lang/Object;
+HSPLokhttp3/MediaType;->getSegment-impl(Ljava/lang/Object;)Lkotlinx/coroutines/internal/Segment;
+HSPLokhttp3/MediaType;->inverse3x3([F)[F
+HSPLokhttp3/MediaType;->invokeComposable(Landroidx/compose/runtime/Composer;Lkotlin/jvm/functions/Function2;)V
+HSPLokhttp3/MediaType;->invokeOnCompletion$default(Lkotlinx/coroutines/Job;ZLkotlinx/coroutines/JobNode;I)Lkotlinx/coroutines/DisposableHandle;
+HSPLokhttp3/MediaType;->isActive(Lkotlinx/coroutines/CoroutineScope;)Z
+HSPLokhttp3/MediaType;->isClosed-impl(Ljava/lang/Object;)Z
+HSPLokhttp3/MediaType;->mul3x3([F[F)[F
+HSPLokhttp3/MediaType;->mul3x3Diag([F[F)[F
+HSPLokhttp3/MediaType;->mul3x3Float3([F[F)V
+HSPLokhttp3/MediaType;->mul3x3Float3_0([FFFF)F
+HSPLokhttp3/MediaType;->mul3x3Float3_1([FFFF)F
+HSPLokhttp3/MediaType;->mul3x3Float3_2([FFFF)F
+HSPLokhttp3/MediaType;->search(Ljava/util/ArrayList;II)I
+HSPLokhttp3/MediaType;->set-impl(Landroidx/compose/runtime/Composer;Ljava/lang/Object;Lkotlin/jvm/functions/Function2;)V
+HSPLokhttp3/MediaType;->setInt-A6tL2VI(Landroidx/compose/runtime/changelist/Operations;II)V
+HSPLokhttp3/MediaType;->setObject-DKhxnng(Landroidx/compose/runtime/changelist/Operations;ILjava/lang/Object;)V
+HSPLokhttp3/MediaType;->shape(Landroidx/compose/ui/graphics/RectangleShapeKt$RectangleShape$1;Landroidx/compose/runtime/Composer;I)Landroidx/tv/material3/ToggleableSurfaceShape;
+HSPLokhttp3/MediaType;->toArray(Ljava/util/Collection;)[Ljava/lang/Object;
+HSPLokhttp3/MediaType;->updateChangedFlags(I)I
+L_COROUTINE/ArtificialStackFrames;
+Landroidx/activity/ComponentActivity$$ExternalSyntheticLambda0;
+Landroidx/activity/ComponentActivity$$ExternalSyntheticLambda1;
+Landroidx/activity/ComponentActivity$$ExternalSyntheticLambda2;
+Landroidx/activity/ComponentActivity$$ExternalSyntheticLambda3;
+Landroidx/activity/ComponentActivity$1;
+Landroidx/activity/ComponentActivity$2;
+Landroidx/activity/ComponentActivity$3;
+Landroidx/activity/ComponentActivity$4;
+Landroidx/activity/ComponentActivity$5;
+Landroidx/activity/ComponentActivity$NonConfigurationInstances;
+Landroidx/activity/ComponentActivity$ReportFullyDrawnExecutorApi16Impl;
+Landroidx/activity/ComponentActivity;
+Landroidx/activity/FullyDrawnReporter;
+Landroidx/activity/OnBackPressedDispatcher;
+Landroidx/activity/compose/ComponentActivityKt;
+Landroidx/activity/contextaware/ContextAwareHelper;
+Landroidx/activity/result/ActivityResult$1;
+Landroidx/arch/core/executor/ArchTaskExecutor;
+Landroidx/arch/core/executor/DefaultTaskExecutor$1;
+Landroidx/arch/core/executor/DefaultTaskExecutor;
+Landroidx/arch/core/internal/FastSafeIterableMap;
+Landroidx/arch/core/internal/SafeIterableMap$AscendingIterator;
+Landroidx/arch/core/internal/SafeIterableMap$Entry;
+Landroidx/arch/core/internal/SafeIterableMap$IteratorWithAdditions;
+Landroidx/arch/core/internal/SafeIterableMap$ListIterator;
+Landroidx/arch/core/internal/SafeIterableMap$SupportRemove;
+Landroidx/arch/core/internal/SafeIterableMap;
+Landroidx/collection/ArrayMap;
+Landroidx/collection/ArraySet;
+Landroidx/collection/LongSparseArray;
+Landroidx/collection/SimpleArrayMap;
+Landroidx/collection/SparseArrayCompat;
+Landroidx/compose/animation/FlingCalculator;
+Landroidx/compose/animation/FlingCalculatorKt;
+Landroidx/compose/animation/SingleValueAnimationKt;
+Landroidx/compose/animation/SplineBasedFloatDecayAnimationSpec;
+Landroidx/compose/animation/SplineBasedFloatDecayAnimationSpec_androidKt;
+Landroidx/compose/animation/core/Animatable$runAnimation$2;
+Landroidx/compose/animation/core/Animatable;
+Landroidx/compose/animation/core/AnimateAsStateKt$animateValueAsState$2;
+Landroidx/compose/animation/core/AnimateAsStateKt$animateValueAsState$3$1;
+Landroidx/compose/animation/core/AnimateAsStateKt$animateValueAsState$3;
+Landroidx/compose/animation/core/AnimateAsStateKt;
+Landroidx/compose/animation/core/Animation;
+Landroidx/compose/animation/core/AnimationEndReason$EnumUnboxingLocalUtility;
+Landroidx/compose/animation/core/AnimationResult;
+Landroidx/compose/animation/core/AnimationScope;
+Landroidx/compose/animation/core/AnimationSpec;
+Landroidx/compose/animation/core/AnimationState;
+Landroidx/compose/animation/core/AnimationVector1D;
+Landroidx/compose/animation/core/AnimationVector2D;
+Landroidx/compose/animation/core/AnimationVector3D;
+Landroidx/compose/animation/core/AnimationVector4D;
+Landroidx/compose/animation/core/AnimationVector;
+Landroidx/compose/animation/core/Animations;
+Landroidx/compose/animation/core/ComplexDouble;
+Landroidx/compose/animation/core/CubicBezierEasing;
+Landroidx/compose/animation/core/DecayAnimationSpecImpl;
+Landroidx/compose/animation/core/Easing;
+Landroidx/compose/animation/core/EasingKt$$ExternalSyntheticLambda0;
+Landroidx/compose/animation/core/EasingKt;
+Landroidx/compose/animation/core/FloatAnimationSpec;
+Landroidx/compose/animation/core/FloatDecayAnimationSpec;
+Landroidx/compose/animation/core/FloatSpringSpec;
+Landroidx/compose/animation/core/FloatTweenSpec;
+Landroidx/compose/animation/core/MutatorMutex$Mutator;
+Landroidx/compose/animation/core/MutatorMutex$mutate$2;
+Landroidx/compose/animation/core/MutatorMutex;
+Landroidx/compose/animation/core/SpringSimulation;
+Landroidx/compose/animation/core/SpringSpec;
+Landroidx/compose/animation/core/SuspendAnimationKt$animate$4;
+Landroidx/compose/animation/core/SuspendAnimationKt$animate$6;
+Landroidx/compose/animation/core/SuspendAnimationKt$animate$7;
+Landroidx/compose/animation/core/SuspendAnimationKt$animate$9;
+Landroidx/compose/animation/core/TargetBasedAnimation;
+Landroidx/compose/animation/core/TweenSpec;
+Landroidx/compose/animation/core/TwoWayConverterImpl;
+Landroidx/compose/animation/core/VectorConvertersKt;
+Landroidx/compose/animation/core/VectorizedDurationBasedAnimationSpec;
+Landroidx/compose/animation/core/VectorizedFiniteAnimationSpec;
+Landroidx/compose/animation/core/VectorizedFloatAnimationSpec;
+Landroidx/compose/animation/core/VectorizedSpringSpec;
+Landroidx/compose/animation/core/VectorizedTweenSpec;
+Landroidx/compose/animation/core/VisibilityThresholdsKt;
+Landroidx/compose/foundation/AndroidEdgeEffectOverscrollEffect$effectModifier$1;
+Landroidx/compose/foundation/AndroidEdgeEffectOverscrollEffect$onNewSize$1;
+Landroidx/compose/foundation/AndroidEdgeEffectOverscrollEffect;
+Landroidx/compose/foundation/AndroidOverscrollKt;
+Landroidx/compose/foundation/Api31Impl;
+Landroidx/compose/foundation/BackgroundElement;
+Landroidx/compose/foundation/BackgroundNode;
+Landroidx/compose/foundation/BorderCache;
+Landroidx/compose/foundation/BorderKt$drawRectBorder$1;
+Landroidx/compose/foundation/BorderModifierNode$drawGenericBorder$3;
+Landroidx/compose/foundation/BorderModifierNode$drawRoundRectBorder$1;
+Landroidx/compose/foundation/BorderModifierNode;
+Landroidx/compose/foundation/BorderModifierNodeElement;
+Landroidx/compose/foundation/BorderStroke;
+Landroidx/compose/foundation/ClipScrollableContainerKt;
+Landroidx/compose/foundation/DrawOverscrollModifier;
+Landroidx/compose/foundation/FocusableElement;
+Landroidx/compose/foundation/FocusableInteractionNode$emitWithFallback$1;
+Landroidx/compose/foundation/FocusableInteractionNode;
+Landroidx/compose/foundation/FocusableKt$FocusableInNonTouchModeElement$1;
+Landroidx/compose/foundation/FocusableKt;
+Landroidx/compose/foundation/FocusableNode$onFocusEvent$1;
+Landroidx/compose/foundation/FocusableNode;
+Landroidx/compose/foundation/FocusablePinnableContainerNode;
+Landroidx/compose/foundation/FocusableSemanticsNode;
+Landroidx/compose/foundation/FocusedBoundsKt;
+Landroidx/compose/foundation/FocusedBoundsNode;
+Landroidx/compose/foundation/FocusedBoundsObserverNode;
+Landroidx/compose/foundation/ImageKt$Image$1$1;
+Landroidx/compose/foundation/ImageKt$Image$1;
+Landroidx/compose/foundation/ImageKt$Image$2;
+Landroidx/compose/foundation/ImageKt;
+Landroidx/compose/foundation/Indication;
+Landroidx/compose/foundation/IndicationInstance;
+Landroidx/compose/foundation/IndicationKt$indication$2;
+Landroidx/compose/foundation/IndicationKt;
+Landroidx/compose/foundation/IndicationModifier;
+Landroidx/compose/foundation/MutatePriority;
+Landroidx/compose/foundation/MutatorMutex$Mutator;
+Landroidx/compose/foundation/MutatorMutex$mutateWith$2;
+Landroidx/compose/foundation/MutatorMutex;
+Landroidx/compose/foundation/OverscrollConfiguration;
+Landroidx/compose/foundation/OverscrollConfigurationKt;
+Landroidx/compose/foundation/OverscrollEffect;
+Landroidx/compose/foundation/ScrollKt$rememberScrollState$1$1;
+Landroidx/compose/foundation/ScrollKt$scroll$2$semantics$1$1;
+Landroidx/compose/foundation/ScrollKt$scroll$2$semantics$1;
+Landroidx/compose/foundation/ScrollKt$scroll$2;
+Landroidx/compose/foundation/ScrollState$canScrollForward$2;
+Landroidx/compose/foundation/ScrollState;
+Landroidx/compose/foundation/ScrollingLayoutElement;
+Landroidx/compose/foundation/ScrollingLayoutNode;
+Landroidx/compose/foundation/gestures/BringIntoViewRequestPriorityQueue;
+Landroidx/compose/foundation/gestures/BringIntoViewSpec$Companion$DefaultBringIntoViewSpec$1;
+Landroidx/compose/foundation/gestures/BringIntoViewSpec$Companion;
+Landroidx/compose/foundation/gestures/BringIntoViewSpec;
+Landroidx/compose/foundation/gestures/ContentInViewNode$Request;
+Landroidx/compose/foundation/gestures/ContentInViewNode$launchAnimation$2$1;
+Landroidx/compose/foundation/gestures/ContentInViewNode$launchAnimation$2;
+Landroidx/compose/foundation/gestures/ContentInViewNode;
+Landroidx/compose/foundation/gestures/DefaultFlingBehavior;
+Landroidx/compose/foundation/gestures/DefaultScrollableState$scroll$2$1;
+Landroidx/compose/foundation/gestures/DefaultScrollableState$scroll$2;
+Landroidx/compose/foundation/gestures/DefaultScrollableState$scrollScope$1;
+Landroidx/compose/foundation/gestures/DefaultScrollableState;
+Landroidx/compose/foundation/gestures/DraggableKt$awaitDrag$2;
+Landroidx/compose/foundation/gestures/DraggableNode$onAttach$1;
+Landroidx/compose/foundation/gestures/DraggableNode$pointerInputNode$1;
+Landroidx/compose/foundation/gestures/DraggableNode;
+Landroidx/compose/foundation/gestures/FlingBehavior;
+Landroidx/compose/foundation/gestures/ModifierLocalScrollableContainerProvider;
+Landroidx/compose/foundation/gestures/MouseWheelScrollNode$1;
+Landroidx/compose/foundation/gestures/MouseWheelScrollNode;
+Landroidx/compose/foundation/gestures/Orientation;
+Landroidx/compose/foundation/gestures/ScrollDraggableState;
+Landroidx/compose/foundation/gestures/ScrollScope;
+Landroidx/compose/foundation/gestures/ScrollableElement;
+Landroidx/compose/foundation/gestures/ScrollableGesturesNode$onDragStopped$1;
+Landroidx/compose/foundation/gestures/ScrollableGesturesNode;
+Landroidx/compose/foundation/gestures/ScrollableKt$DefaultScrollMotionDurationScale$1;
+Landroidx/compose/foundation/gestures/ScrollableKt$NoOpOnDragStarted$1;
+Landroidx/compose/foundation/gestures/ScrollableKt$NoOpScrollScope$1;
+Landroidx/compose/foundation/gestures/ScrollableKt$UnityDensity$1;
+Landroidx/compose/foundation/gestures/ScrollableKt;
+Landroidx/compose/foundation/gestures/ScrollableNestedScrollConnection;
+Landroidx/compose/foundation/gestures/ScrollableNode;
+Landroidx/compose/foundation/gestures/ScrollableState;
+Landroidx/compose/foundation/gestures/ScrollingLogic;
+Landroidx/compose/foundation/gestures/UpdatableAnimationState$animateToZero$1;
+Landroidx/compose/foundation/gestures/UpdatableAnimationState$animateToZero$4;
+Landroidx/compose/foundation/gestures/UpdatableAnimationState;
+Landroidx/compose/foundation/interaction/FocusInteraction$Focus;
+Landroidx/compose/foundation/interaction/FocusInteraction$Unfocus;
+Landroidx/compose/foundation/interaction/FocusInteractionKt$collectIsFocusedAsState$1$1$1;
+Landroidx/compose/foundation/interaction/FocusInteractionKt$collectIsFocusedAsState$1$1;
+Landroidx/compose/foundation/interaction/Interaction;
+Landroidx/compose/foundation/interaction/InteractionSource;
+Landroidx/compose/foundation/interaction/MutableInteractionSourceImpl;
+Landroidx/compose/foundation/interaction/PressInteraction$Press;
+Landroidx/compose/foundation/interaction/PressInteraction$Release;
+Landroidx/compose/foundation/interaction/PressInteractionKt$collectIsPressedAsState$1$1;
+Landroidx/compose/foundation/layout/Arrangement$Center$1;
+Landroidx/compose/foundation/layout/Arrangement$End$1;
+Landroidx/compose/foundation/layout/Arrangement$Horizontal;
+Landroidx/compose/foundation/layout/Arrangement$SpacedAligned;
+Landroidx/compose/foundation/layout/Arrangement$Top$1;
+Landroidx/compose/foundation/layout/Arrangement$Vertical;
+Landroidx/compose/foundation/layout/Arrangement;
+Landroidx/compose/foundation/layout/BoxKt$Box$2;
+Landroidx/compose/foundation/layout/BoxKt$EmptyBoxMeasurePolicy$1;
+Landroidx/compose/foundation/layout/BoxKt$boxMeasurePolicy$1$2;
+Landroidx/compose/foundation/layout/BoxKt$boxMeasurePolicy$1;
+Landroidx/compose/foundation/layout/BoxKt;
+Landroidx/compose/foundation/layout/BoxScope;
+Landroidx/compose/foundation/layout/BoxScopeInstance;
+Landroidx/compose/foundation/layout/ColumnKt;
+Landroidx/compose/foundation/layout/CrossAxisAlignment$VerticalCrossAxisAlignment;
+Landroidx/compose/foundation/layout/FillElement;
+Landroidx/compose/foundation/layout/FillNode;
+Landroidx/compose/foundation/layout/HorizontalAlignElement;
+Landroidx/compose/foundation/layout/HorizontalAlignNode;
+Landroidx/compose/foundation/layout/OffsetElement;
+Landroidx/compose/foundation/layout/OffsetKt;
+Landroidx/compose/foundation/layout/OffsetNode$measure$1;
+Landroidx/compose/foundation/layout/OffsetNode;
+Landroidx/compose/foundation/layout/PaddingElement;
+Landroidx/compose/foundation/layout/PaddingNode;
+Landroidx/compose/foundation/layout/PaddingValuesImpl;
+Landroidx/compose/foundation/layout/RowColumnImplKt$rowColumnMeasurePolicy$1;
+Landroidx/compose/foundation/layout/RowColumnMeasureHelperResult;
+Landroidx/compose/foundation/layout/RowColumnMeasurementHelper;
+Landroidx/compose/foundation/layout/RowColumnParentData;
+Landroidx/compose/foundation/layout/RowKt$DefaultRowMeasurePolicy$1;
+Landroidx/compose/foundation/layout/RowKt$rowMeasurePolicy$1$1;
+Landroidx/compose/foundation/layout/RowKt;
+Landroidx/compose/foundation/layout/RowScope;
+Landroidx/compose/foundation/layout/RowScopeInstance;
+Landroidx/compose/foundation/layout/SizeElement;
+Landroidx/compose/foundation/layout/SizeKt;
+Landroidx/compose/foundation/layout/SizeNode;
+Landroidx/compose/foundation/layout/SpacerMeasurePolicy;
+Landroidx/compose/foundation/layout/WrapContentElement;
+Landroidx/compose/foundation/layout/WrapContentNode$measure$1;
+Landroidx/compose/foundation/layout/WrapContentNode;
+Landroidx/compose/foundation/lazy/layout/DefaultLazyKey;
+Landroidx/compose/foundation/lazy/layout/IntervalList$Interval;
+Landroidx/compose/foundation/lazy/layout/LazyLayoutIntervalContent$Interval;
+Landroidx/compose/foundation/lazy/layout/LazyLayoutItemContentFactory$CachedItemContent;
+Landroidx/compose/foundation/lazy/layout/LazyLayoutItemContentFactory;
+Landroidx/compose/foundation/lazy/layout/LazyLayoutItemProvider;
+Landroidx/compose/foundation/lazy/layout/LazyLayoutItemReusePolicy;
+Landroidx/compose/foundation/lazy/layout/LazyLayoutKt$LazyLayout$3$2$1;
+Landroidx/compose/foundation/lazy/layout/LazyLayoutKt$LazyLayout$3$itemContentFactory$1$1;
+Landroidx/compose/foundation/lazy/layout/LazyLayoutKt$LazyLayout$3;
+Landroidx/compose/foundation/lazy/layout/LazyLayoutMeasureScopeImpl;
+Landroidx/compose/foundation/lazy/layout/LazyLayoutPinnableItem;
+Landroidx/compose/foundation/lazy/layout/LazyLayoutPinnedItemList;
+Landroidx/compose/foundation/lazy/layout/LazyLayoutPrefetchState$PrefetchHandle;
+Landroidx/compose/foundation/lazy/layout/LazyLayoutPrefetchState$Prefetcher;
+Landroidx/compose/foundation/lazy/layout/LazyLayoutPrefetchState;
+Landroidx/compose/foundation/lazy/layout/LazyLayoutPrefetcher$PrefetchRequest;
+Landroidx/compose/foundation/lazy/layout/LazyLayoutPrefetcher;
+Landroidx/compose/foundation/lazy/layout/LazySaveableStateHolder$1;
+Landroidx/compose/foundation/lazy/layout/LazySaveableStateHolder$SaveableStateProvider$2$invoke$$inlined$onDispose$1;
+Landroidx/compose/foundation/lazy/layout/LazySaveableStateHolder;
+Landroidx/compose/foundation/lazy/layout/MutableIntervalList;
+Landroidx/compose/foundation/relocation/BringIntoViewChildNode;
+Landroidx/compose/foundation/relocation/BringIntoViewKt;
+Landroidx/compose/foundation/relocation/BringIntoViewParent;
+Landroidx/compose/foundation/relocation/BringIntoViewRequesterImpl$bringIntoView$1;
+Landroidx/compose/foundation/relocation/BringIntoViewRequesterImpl;
+Landroidx/compose/foundation/relocation/BringIntoViewRequesterNode;
+Landroidx/compose/foundation/relocation/BringIntoViewResponder;
+Landroidx/compose/foundation/relocation/BringIntoViewResponderNode$bringChildIntoView$2$1$1;
+Landroidx/compose/foundation/relocation/BringIntoViewResponderNode$bringChildIntoView$2$1;
+Landroidx/compose/foundation/relocation/BringIntoViewResponderNode$bringChildIntoView$2$2;
+Landroidx/compose/foundation/relocation/BringIntoViewResponderNode$bringChildIntoView$2;
+Landroidx/compose/foundation/relocation/BringIntoViewResponderNode$bringChildIntoView$parentRect$1;
+Landroidx/compose/foundation/relocation/BringIntoViewResponderNode;
+Landroidx/compose/foundation/relocation/BringIntoViewResponder_androidKt$defaultBringIntoViewParent$1;
+Landroidx/compose/foundation/shape/CornerBasedShape;
+Landroidx/compose/foundation/shape/CornerSize;
+Landroidx/compose/foundation/shape/DpCornerSize;
+Landroidx/compose/foundation/shape/GenericShape;
+Landroidx/compose/foundation/shape/PercentCornerSize;
+Landroidx/compose/foundation/shape/RoundedCornerShape;
+Landroidx/compose/foundation/shape/RoundedCornerShapeKt;
+Landroidx/compose/foundation/text/EmptyMeasurePolicy;
+Landroidx/compose/foundation/text/modifiers/InlineDensity;
+Landroidx/compose/foundation/text/modifiers/MinLinesConstrainer;
+Landroidx/compose/foundation/text/modifiers/MultiParagraphLayoutCache;
+Landroidx/compose/foundation/text/modifiers/TextAnnotatedStringElement;
+Landroidx/compose/foundation/text/modifiers/TextAnnotatedStringNode$TextSubstitutionValue;
+Landroidx/compose/foundation/text/modifiers/TextAnnotatedStringNode;
+Landroidx/compose/foundation/text/selection/SelectionRegistrarKt;
+Landroidx/compose/foundation/text/selection/TextSelectionColors;
+Landroidx/compose/foundation/text/selection/TextSelectionColorsKt;
+Landroidx/compose/material/ripple/AndroidRippleIndicationInstance;
+Landroidx/compose/material/ripple/PlatformRipple;
+Landroidx/compose/material/ripple/RippleAlpha;
+Landroidx/compose/material/ripple/RippleIndicationInstance;
+Landroidx/compose/material/ripple/RippleKt;
+Landroidx/compose/material/ripple/RippleTheme;
+Landroidx/compose/material/ripple/RippleThemeKt;
+Landroidx/compose/material3/ColorScheme;
+Landroidx/compose/material3/ColorSchemeKt;
+Landroidx/compose/material3/MaterialRippleTheme;
+Landroidx/compose/material3/MaterialThemeKt$MaterialTheme$2;
+Landroidx/compose/material3/ShapeDefaults;
+Landroidx/compose/material3/Shapes;
+Landroidx/compose/material3/ShapesKt$LocalShapes$1;
+Landroidx/compose/material3/ShapesKt;
+Landroidx/compose/material3/TextKt$ProvideTextStyle$1;
+Landroidx/compose/material3/TextKt$Text$1;
+Landroidx/compose/material3/TextKt;
+Landroidx/compose/material3/Typography;
+Landroidx/compose/material3/TypographyKt;
+Landroidx/compose/material3/tokens/ColorDarkTokens;
+Landroidx/compose/material3/tokens/PaletteTokens;
+Landroidx/compose/material3/tokens/ShapeTokens;
+Landroidx/compose/material3/tokens/TypeScaleTokens;
+Landroidx/compose/material3/tokens/TypefaceTokens;
+Landroidx/compose/material3/tokens/TypographyTokens;
+Landroidx/compose/runtime/Anchor;
+Landroidx/compose/runtime/Applier;
+Landroidx/compose/runtime/BroadcastFrameClock$FrameAwaiter;
+Landroidx/compose/runtime/BroadcastFrameClock;
+Landroidx/compose/runtime/ComposableSingletons$CompositionKt;
+Landroidx/compose/runtime/ComposeNodeLifecycleCallback;
+Landroidx/compose/runtime/Composer;
+Landroidx/compose/runtime/ComposerImpl$CompositionContextHolder;
+Landroidx/compose/runtime/ComposerImpl$CompositionContextImpl;
+Landroidx/compose/runtime/ComposerImpl$derivedStateObserver$1;
+Landroidx/compose/runtime/ComposerImpl;
+Landroidx/compose/runtime/Composition;
+Landroidx/compose/runtime/CompositionContext;
+Landroidx/compose/runtime/CompositionContextKt;
+Landroidx/compose/runtime/CompositionImpl$RememberEventDispatcher;
+Landroidx/compose/runtime/CompositionImpl;
+Landroidx/compose/runtime/CompositionKt;
+Landroidx/compose/runtime/CompositionLocal;
+Landroidx/compose/runtime/CompositionLocalMap$Companion;
+Landroidx/compose/runtime/CompositionLocalMap;
+Landroidx/compose/runtime/CompositionObserverHolder;
+Landroidx/compose/runtime/CompositionScopedCoroutineScopeCanceller;
+Landroidx/compose/runtime/DerivedSnapshotState$ResultRecord;
+Landroidx/compose/runtime/DerivedSnapshotState;
+Landroidx/compose/runtime/DerivedStateObserver;
+Landroidx/compose/runtime/DisposableEffectImpl;
+Landroidx/compose/runtime/DisposableEffectResult;
+Landroidx/compose/runtime/DisposableEffectScope;
+Landroidx/compose/runtime/DynamicProvidableCompositionLocal;
+Landroidx/compose/runtime/GroupInfo;
+Landroidx/compose/runtime/IntStack;
+Landroidx/compose/runtime/Invalidation;
+Landroidx/compose/runtime/JoinedKey;
+Landroidx/compose/runtime/KeyInfo;
+Landroidx/compose/runtime/Latch$await$2$2;
+Landroidx/compose/runtime/Latch;
+Landroidx/compose/runtime/LaunchedEffectImpl;
+Landroidx/compose/runtime/LazyValueHolder;
+Landroidx/compose/runtime/MonotonicFrameClock;
+Landroidx/compose/runtime/MovableContentStateReference;
+Landroidx/compose/runtime/MutableFloatState;
+Landroidx/compose/runtime/MutableIntState;
+Landroidx/compose/runtime/MutableState;
+Landroidx/compose/runtime/OpaqueKey;
+Landroidx/compose/runtime/ParcelableSnapshotMutableFloatState;
+Landroidx/compose/runtime/ParcelableSnapshotMutableIntState;
+Landroidx/compose/runtime/ParcelableSnapshotMutableState$Companion$CREATOR$1;
+Landroidx/compose/runtime/ParcelableSnapshotMutableState;
+Landroidx/compose/runtime/PausableMonotonicFrameClock$withFrameNanos$1;
+Landroidx/compose/runtime/PausableMonotonicFrameClock;
+Landroidx/compose/runtime/Pending$keyMap$2;
+Landroidx/compose/runtime/Pending;
+Landroidx/compose/runtime/PersistentCompositionLocalMap;
+Landroidx/compose/runtime/ProduceStateScopeImpl;
+Landroidx/compose/runtime/ProvidableCompositionLocal;
+Landroidx/compose/runtime/ProvidedValue;
+Landroidx/compose/runtime/RecomposeScope;
+Landroidx/compose/runtime/RecomposeScopeImpl$end$1$2;
+Landroidx/compose/runtime/RecomposeScopeImpl;
+Landroidx/compose/runtime/RecomposeScopeOwner;
+Landroidx/compose/runtime/Recomposer$State;
+Landroidx/compose/runtime/Recomposer$effectJob$1$1;
+Landroidx/compose/runtime/Recomposer$join$2;
+Landroidx/compose/runtime/Recomposer$performRecompose$1$1;
+Landroidx/compose/runtime/Recomposer$recompositionRunner$2$3;
+Landroidx/compose/runtime/Recomposer$recompositionRunner$2$unregisterApplyObserver$1;
+Landroidx/compose/runtime/Recomposer$recompositionRunner$2;
+Landroidx/compose/runtime/Recomposer$runRecomposeAndApplyChanges$2$1;
+Landroidx/compose/runtime/Recomposer$runRecomposeAndApplyChanges$2;
+Landroidx/compose/runtime/Recomposer;
+Landroidx/compose/runtime/ReferentialEqualityPolicy;
+Landroidx/compose/runtime/RememberObserver;
+Landroidx/compose/runtime/SkippableUpdater;
+Landroidx/compose/runtime/SlotReader;
+Landroidx/compose/runtime/SlotTable;
+Landroidx/compose/runtime/SlotWriter;
+Landroidx/compose/runtime/SnapshotMutableFloatStateImpl$FloatStateStateRecord;
+Landroidx/compose/runtime/SnapshotMutableFloatStateImpl;
+Landroidx/compose/runtime/SnapshotMutableIntStateImpl$IntStateStateRecord;
+Landroidx/compose/runtime/SnapshotMutableIntStateImpl;
+Landroidx/compose/runtime/SnapshotMutableStateImpl$StateStateRecord;
+Landroidx/compose/runtime/SnapshotMutableStateImpl;
+Landroidx/compose/runtime/SnapshotMutationPolicy;
+Landroidx/compose/runtime/SnapshotStateKt__DerivedStateKt;
+Landroidx/compose/runtime/SnapshotStateKt__ProduceStateKt$produceState$3;
+Landroidx/compose/runtime/SnapshotStateKt__SnapshotFlowKt$collectAsState$1$1;
+Landroidx/compose/runtime/SnapshotStateKt__SnapshotFlowKt$collectAsState$1;
+Landroidx/compose/runtime/Stack;
+Landroidx/compose/runtime/State;
+Landroidx/compose/runtime/StaticProvidableCompositionLocal;
+Landroidx/compose/runtime/StaticValueHolder;
+Landroidx/compose/runtime/StructuralEqualityPolicy;
+Landroidx/compose/runtime/WeakReference;
+Landroidx/compose/runtime/changelist/ChangeList;
+Landroidx/compose/runtime/changelist/ComposerChangeListWriter;
+Landroidx/compose/runtime/changelist/FixupList;
+Landroidx/compose/runtime/changelist/Operation$AdvanceSlotsBy;
+Landroidx/compose/runtime/changelist/Operation$DeactivateCurrentGroup;
+Landroidx/compose/runtime/changelist/Operation$Downs;
+Landroidx/compose/runtime/changelist/Operation$EndCompositionScope;
+Landroidx/compose/runtime/changelist/Operation$EndCurrentGroup;
+Landroidx/compose/runtime/changelist/Operation$EnsureGroupStarted;
+Landroidx/compose/runtime/changelist/Operation$EnsureRootGroupStarted;
+Landroidx/compose/runtime/changelist/Operation$InsertNodeFixup;
+Landroidx/compose/runtime/changelist/Operation$InsertSlots;
+Landroidx/compose/runtime/changelist/Operation$InsertSlotsWithFixups;
+Landroidx/compose/runtime/changelist/Operation$MoveCurrentGroup;
+Landroidx/compose/runtime/changelist/Operation$PostInsertNodeFixup;
+Landroidx/compose/runtime/changelist/Operation$Remember;
+Landroidx/compose/runtime/changelist/Operation$SideEffect;
+Landroidx/compose/runtime/changelist/Operation$UpdateAuxData;
+Landroidx/compose/runtime/changelist/Operation$UpdateNode;
+Landroidx/compose/runtime/changelist/Operation$UpdateValue;
+Landroidx/compose/runtime/changelist/Operation$Ups;
+Landroidx/compose/runtime/changelist/Operation$UseCurrentNode;
+Landroidx/compose/runtime/changelist/Operation;
+Landroidx/compose/runtime/changelist/Operations$OpIterator;
+Landroidx/compose/runtime/changelist/Operations;
+Landroidx/compose/runtime/collection/IdentityArrayIntMap;
+Landroidx/compose/runtime/collection/IdentityArrayMap$asMap$1$entries$1$iterator$1$1;
+Landroidx/compose/runtime/collection/IdentityArraySet;
+Landroidx/compose/runtime/collection/MutableVector$MutableVectorList;
+Landroidx/compose/runtime/collection/MutableVector$VectorListIterator;
+Landroidx/compose/runtime/collection/MutableVector;
+Landroidx/compose/runtime/external/kotlinx/collections/immutable/ImmutableList;
+Landroidx/compose/runtime/external/kotlinx/collections/immutable/ImmutableSet;
+Landroidx/compose/runtime/external/kotlinx/collections/immutable/PersistentList;
+Landroidx/compose/runtime/external/kotlinx/collections/immutable/PersistentMap$Builder;
+Landroidx/compose/runtime/external/kotlinx/collections/immutable/PersistentMap;
+Landroidx/compose/runtime/external/kotlinx/collections/immutable/PersistentSet;
+Landroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableList/AbstractPersistentList;
+Landroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableList/SmallPersistentVector;
+Landroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/PersistentHashMap;
+Landroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/PersistentHashMapBaseIterator;
+Landroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/PersistentHashMapBuilder;
+Landroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/PersistentHashMapKeys;
+Landroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/PersistentHashMapKeysIterator;
+Landroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/TrieNode;
+Landroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/TrieNodeBaseIterator;
+Landroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/TrieNodeKeysIterator;
+Landroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/persistentOrderedSet/Links;
+Landroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/persistentOrderedSet/PersistentOrderedSet;
+Landroidx/compose/runtime/external/kotlinx/collections/immutable/internal/DeltaCounter;
+Landroidx/compose/runtime/internal/ComposableLambda;
+Landroidx/compose/runtime/internal/ComposableLambdaImpl;
+Landroidx/compose/runtime/internal/PersistentCompositionLocalHashMap$Builder;
+Landroidx/compose/runtime/internal/PersistentCompositionLocalHashMap;
+Landroidx/compose/runtime/internal/ThreadMap;
+Landroidx/compose/runtime/saveable/ListSaverKt$listSaver$1;
+Landroidx/compose/runtime/saveable/RememberSaveableKt$rememberSaveable$1;
+Landroidx/compose/runtime/saveable/SaveableHolder;
+Landroidx/compose/runtime/saveable/SaveableStateHolder;
+Landroidx/compose/runtime/saveable/SaveableStateHolderImpl$RegistryHolder$registry$1;
+Landroidx/compose/runtime/saveable/SaveableStateHolderImpl$RegistryHolder;
+Landroidx/compose/runtime/saveable/SaveableStateHolderImpl$SaveableStateProvider$1$1$invoke$$inlined$onDispose$1;
+Landroidx/compose/runtime/saveable/SaveableStateHolderImpl;
+Landroidx/compose/runtime/saveable/SaveableStateRegistry;
+Landroidx/compose/runtime/saveable/SaveableStateRegistryImpl$registerProvider$3;
+Landroidx/compose/runtime/saveable/SaveableStateRegistryImpl;
+Landroidx/compose/runtime/saveable/SaveableStateRegistryKt;
+Landroidx/compose/runtime/saveable/SaverKt$Saver$1;
+Landroidx/compose/runtime/saveable/SaverKt;
+Landroidx/compose/runtime/snapshots/GlobalSnapshot$1$1$1;
+Landroidx/compose/runtime/snapshots/GlobalSnapshot;
+Landroidx/compose/runtime/snapshots/MutableSnapshot;
+Landroidx/compose/runtime/snapshots/ObserverHandle;
+Landroidx/compose/runtime/snapshots/ReadonlySnapshot;
+Landroidx/compose/runtime/snapshots/Snapshot$Companion$$ExternalSyntheticLambda0;
+Landroidx/compose/runtime/snapshots/Snapshot;
+Landroidx/compose/runtime/snapshots/SnapshotApplyResult$Failure;
+Landroidx/compose/runtime/snapshots/SnapshotApplyResult$Success;
+Landroidx/compose/runtime/snapshots/SnapshotDoubleIndexHeap;
+Landroidx/compose/runtime/snapshots/SnapshotIdSet;
+Landroidx/compose/runtime/snapshots/SnapshotKt$mergedReadObserver$1;
+Landroidx/compose/runtime/snapshots/SnapshotKt;
+Landroidx/compose/runtime/snapshots/SnapshotMutableState;
+Landroidx/compose/runtime/snapshots/SnapshotStateList$StateListStateRecord;
+Landroidx/compose/runtime/snapshots/SnapshotStateList$addAll$1;
+Landroidx/compose/runtime/snapshots/SnapshotStateList;
+Landroidx/compose/runtime/snapshots/SnapshotStateListKt;
+Landroidx/compose/runtime/snapshots/SnapshotStateObserver$ObservedScopeMap;
+Landroidx/compose/runtime/snapshots/SnapshotStateObserver;
+Landroidx/compose/runtime/snapshots/StateObject;
+Landroidx/compose/runtime/snapshots/StateRecord;
+Landroidx/compose/runtime/snapshots/TransparentObserverMutableSnapshot;
+Landroidx/compose/runtime/tooling/InspectionTablesKt;
+Landroidx/compose/ui/Alignment$Horizontal;
+Landroidx/compose/ui/Alignment$Vertical;
+Landroidx/compose/ui/Alignment;
+Landroidx/compose/ui/BiasAlignment$Horizontal;
+Landroidx/compose/ui/BiasAlignment$Vertical;
+Landroidx/compose/ui/BiasAlignment;
+Landroidx/compose/ui/CombinedModifier$toString$1;
+Landroidx/compose/ui/CombinedModifier;
+Landroidx/compose/ui/ComposedModifier;
+Landroidx/compose/ui/CompositionLocalMapInjectionElement;
+Landroidx/compose/ui/Modifier$Companion;
+Landroidx/compose/ui/Modifier$Element;
+Landroidx/compose/ui/Modifier$Node;
+Landroidx/compose/ui/Modifier;
+Landroidx/compose/ui/MotionDurationScale;
+Landroidx/compose/ui/ZIndexElement;
+Landroidx/compose/ui/ZIndexNode$measure$1;
+Landroidx/compose/ui/ZIndexNode;
+Landroidx/compose/ui/autofill/AndroidAutofill;
+Landroidx/compose/ui/autofill/Autofill;
+Landroidx/compose/ui/autofill/AutofillCallback;
+Landroidx/compose/ui/autofill/AutofillTree;
+Landroidx/compose/ui/draw/BuildDrawCacheParams;
+Landroidx/compose/ui/draw/CacheDrawModifierNode;
+Landroidx/compose/ui/draw/CacheDrawModifierNodeImpl;
+Landroidx/compose/ui/draw/CacheDrawScope$onDrawBehind$1;
+Landroidx/compose/ui/draw/CacheDrawScope;
+Landroidx/compose/ui/draw/ClipKt;
+Landroidx/compose/ui/draw/DrawModifier;
+Landroidx/compose/ui/draw/DrawResult;
+Landroidx/compose/ui/draw/DrawWithCacheElement;
+Landroidx/compose/ui/draw/EmptyBuildDrawCacheParams;
+Landroidx/compose/ui/draw/PainterElement;
+Landroidx/compose/ui/draw/PainterNode$measure$1;
+Landroidx/compose/ui/draw/PainterNode;
+Landroidx/compose/ui/focus/FocusChangedElement;
+Landroidx/compose/ui/focus/FocusChangedNode;
+Landroidx/compose/ui/focus/FocusDirection;
+Landroidx/compose/ui/focus/FocusEventModifierNode;
+Landroidx/compose/ui/focus/FocusInvalidationManager;
+Landroidx/compose/ui/focus/FocusModifierKt;
+Landroidx/compose/ui/focus/FocusOwner;
+Landroidx/compose/ui/focus/FocusOwnerImpl$modifier$1;
+Landroidx/compose/ui/focus/FocusOwnerImpl$moveFocus$foundNextItem$1;
+Landroidx/compose/ui/focus/FocusOwnerImpl;
+Landroidx/compose/ui/focus/FocusProperties$exit$1;
+Landroidx/compose/ui/focus/FocusProperties;
+Landroidx/compose/ui/focus/FocusPropertiesImpl;
+Landroidx/compose/ui/focus/FocusPropertiesModifierNode;
+Landroidx/compose/ui/focus/FocusRequester;
+Landroidx/compose/ui/focus/FocusRequesterModifierNode;
+Landroidx/compose/ui/focus/FocusState;
+Landroidx/compose/ui/focus/FocusStateImpl;
+Landroidx/compose/ui/focus/FocusTargetNode$FocusTargetElement;
+Landroidx/compose/ui/focus/FocusTargetNode;
+Landroidx/compose/ui/geometry/CornerRadius;
+Landroidx/compose/ui/geometry/MutableRect;
+Landroidx/compose/ui/geometry/Offset;
+Landroidx/compose/ui/geometry/Rect;
+Landroidx/compose/ui/geometry/RoundRect;
+Landroidx/compose/ui/geometry/Size;
+Landroidx/compose/ui/graphics/AndroidCanvas;
+Landroidx/compose/ui/graphics/AndroidCanvas_androidKt;
+Landroidx/compose/ui/graphics/AndroidImageBitmap;
+Landroidx/compose/ui/graphics/AndroidPaint;
+Landroidx/compose/ui/graphics/AndroidPaint_androidKt$WhenMappings;
+Landroidx/compose/ui/graphics/AndroidPath;
+Landroidx/compose/ui/graphics/BlendModeColorFilter;
+Landroidx/compose/ui/graphics/BlendModeColorFilterHelper;
+Landroidx/compose/ui/graphics/BlockGraphicsLayerElement;
+Landroidx/compose/ui/graphics/BlockGraphicsLayerModifier;
+Landroidx/compose/ui/graphics/Brush;
+Landroidx/compose/ui/graphics/BrushKt$ShaderBrush$1;
+Landroidx/compose/ui/graphics/BrushKt;
+Landroidx/compose/ui/graphics/Canvas;
+Landroidx/compose/ui/graphics/CanvasZHelper$$ExternalSyntheticApiModelOutline0;
+Landroidx/compose/ui/graphics/Color;
+Landroidx/compose/ui/graphics/ColorSpaceVerificationHelper$$ExternalSyntheticLambda1;
+Landroidx/compose/ui/graphics/Float16;
+Landroidx/compose/ui/graphics/GraphicsLayerElement;
+Landroidx/compose/ui/graphics/GraphicsLayerScopeKt;
+Landroidx/compose/ui/graphics/ImageBitmap;
+Landroidx/compose/ui/graphics/ImageBitmapConfig;
+Landroidx/compose/ui/graphics/Matrix;
+Landroidx/compose/ui/graphics/Outline$Generic;
+Landroidx/compose/ui/graphics/Outline$Rectangle;
+Landroidx/compose/ui/graphics/Outline$Rounded;
+Landroidx/compose/ui/graphics/Path;
+Landroidx/compose/ui/graphics/RectangleShapeKt$RectangleShape$1;
+Landroidx/compose/ui/graphics/ReusableGraphicsLayerScope;
+Landroidx/compose/ui/graphics/Shadow;
+Landroidx/compose/ui/graphics/Shape;
+Landroidx/compose/ui/graphics/SimpleGraphicsLayerModifier$layerBlock$1;
+Landroidx/compose/ui/graphics/SimpleGraphicsLayerModifier;
+Landroidx/compose/ui/graphics/SolidColor;
+Landroidx/compose/ui/graphics/TransformOrigin;
+Landroidx/compose/ui/graphics/colorspace/Adaptation$Companion$Bradford$1;
+Landroidx/compose/ui/graphics/colorspace/Adaptation;
+Landroidx/compose/ui/graphics/colorspace/ColorModel;
+Landroidx/compose/ui/graphics/colorspace/ColorSpace;
+Landroidx/compose/ui/graphics/colorspace/ColorSpaces;
+Landroidx/compose/ui/graphics/colorspace/Connector$Companion$identity$1;
+Landroidx/compose/ui/graphics/colorspace/Connector;
+Landroidx/compose/ui/graphics/colorspace/DoubleFunction;
+Landroidx/compose/ui/graphics/colorspace/Lab;
+Landroidx/compose/ui/graphics/colorspace/Oklab;
+Landroidx/compose/ui/graphics/colorspace/Rgb$$ExternalSyntheticLambda0;
+Landroidx/compose/ui/graphics/colorspace/Rgb$$ExternalSyntheticLambda1;
+Landroidx/compose/ui/graphics/colorspace/Rgb$$ExternalSyntheticLambda2;
+Landroidx/compose/ui/graphics/colorspace/Rgb$eotf$1;
+Landroidx/compose/ui/graphics/colorspace/Rgb;
+Landroidx/compose/ui/graphics/colorspace/TransferParameters;
+Landroidx/compose/ui/graphics/colorspace/WhitePoint;
+Landroidx/compose/ui/graphics/colorspace/Xyz;
+Landroidx/compose/ui/graphics/drawscope/CanvasDrawScope$DrawParams;
+Landroidx/compose/ui/graphics/drawscope/CanvasDrawScope$drawContext$1;
+Landroidx/compose/ui/graphics/drawscope/CanvasDrawScope;
+Landroidx/compose/ui/graphics/drawscope/CanvasDrawScopeKt$asDrawTransform$1;
+Landroidx/compose/ui/graphics/drawscope/ContentDrawScope;
+Landroidx/compose/ui/graphics/drawscope/DrawScope;
+Landroidx/compose/ui/graphics/drawscope/EmptyCanvas;
+Landroidx/compose/ui/graphics/drawscope/Fill;
+Landroidx/compose/ui/graphics/drawscope/Stroke;
+Landroidx/compose/ui/graphics/painter/BitmapPainter;
+Landroidx/compose/ui/graphics/painter/Painter;
+Landroidx/compose/ui/graphics/vector/GroupComponent;
+Landroidx/compose/ui/graphics/vector/ImageVector$Builder$GroupParams;
+Landroidx/compose/ui/graphics/vector/ImageVector$Builder;
+Landroidx/compose/ui/graphics/vector/ImageVector;
+Landroidx/compose/ui/graphics/vector/VNode;
+Landroidx/compose/ui/graphics/vector/VectorComponent;
+Landroidx/compose/ui/graphics/vector/VectorGroup;
+Landroidx/compose/ui/graphics/vector/VectorKt;
+Landroidx/compose/ui/graphics/vector/VectorNode;
+Landroidx/compose/ui/graphics/vector/VectorPainter;
+Landroidx/compose/ui/graphics/vector/VectorPath;
+Landroidx/compose/ui/graphics/vector/compat/AndroidVectorParser;
+Landroidx/compose/ui/hapticfeedback/HapticFeedback;
+Landroidx/compose/ui/input/InputMode;
+Landroidx/compose/ui/input/InputModeManager;
+Landroidx/compose/ui/input/InputModeManagerImpl;
+Landroidx/compose/ui/input/key/Key;
+Landroidx/compose/ui/input/key/KeyEvent;
+Landroidx/compose/ui/input/key/KeyInputElement;
+Landroidx/compose/ui/input/key/KeyInputModifierNode;
+Landroidx/compose/ui/input/key/KeyInputNode;
+Landroidx/compose/ui/input/key/Key_androidKt;
+Landroidx/compose/ui/input/nestedscroll/NestedScrollConnection;
+Landroidx/compose/ui/input/nestedscroll/NestedScrollDispatcher;
+Landroidx/compose/ui/input/nestedscroll/NestedScrollNode;
+Landroidx/compose/ui/input/nestedscroll/NestedScrollNodeKt;
+Landroidx/compose/ui/input/pointer/AndroidPointerIconType;
+Landroidx/compose/ui/input/pointer/MotionEventAdapter;
+Landroidx/compose/ui/input/pointer/Node;
+Landroidx/compose/ui/input/pointer/NodeParent;
+Landroidx/compose/ui/input/pointer/PointerEvent;
+Landroidx/compose/ui/input/pointer/PointerIcon;
+Landroidx/compose/ui/input/pointer/PointerIconService;
+Landroidx/compose/ui/input/pointer/PointerInputChange;
+Landroidx/compose/ui/input/pointer/PointerInputScope;
+Landroidx/compose/ui/input/pointer/PointerKeyboardModifiers;
+Landroidx/compose/ui/input/pointer/PositionCalculator;
+Landroidx/compose/ui/input/pointer/SuspendPointerInputElement;
+Landroidx/compose/ui/input/pointer/SuspendingPointerInputFilterKt;
+Landroidx/compose/ui/input/pointer/SuspendingPointerInputModifierNode;
+Landroidx/compose/ui/input/pointer/SuspendingPointerInputModifierNodeImpl$PointerEventHandlerCoroutine;
+Landroidx/compose/ui/input/pointer/SuspendingPointerInputModifierNodeImpl;
+Landroidx/compose/ui/input/pointer/util/DataPointAtTime;
+Landroidx/compose/ui/input/pointer/util/PointerIdArray;
+Landroidx/compose/ui/input/pointer/util/VelocityTracker1D;
+Landroidx/compose/ui/input/pointer/util/VelocityTracker;
+Landroidx/compose/ui/input/rotary/RotaryInputElement;
+Landroidx/compose/ui/input/rotary/RotaryInputModifierKt;
+Landroidx/compose/ui/input/rotary/RotaryInputModifierNode;
+Landroidx/compose/ui/input/rotary/RotaryInputNode;
+Landroidx/compose/ui/layout/AlignmentLine;
+Landroidx/compose/ui/layout/AlignmentLineKt$FirstBaseline$1;
+Landroidx/compose/ui/layout/AlignmentLineKt$LastBaseline$1;
+Landroidx/compose/ui/layout/AlignmentLineKt;
+Landroidx/compose/ui/layout/BeyondBoundsLayout$BeyondBoundsScope;
+Landroidx/compose/ui/layout/BeyondBoundsLayout;
+Landroidx/compose/ui/layout/BeyondBoundsLayoutKt;
+Landroidx/compose/ui/layout/ComposableSingletons$SubcomposeLayoutKt;
+Landroidx/compose/ui/layout/ContentScale;
+Landroidx/compose/ui/layout/DefaultIntrinsicMeasurable;
+Landroidx/compose/ui/layout/FixedSizeIntrinsicsPlaceable;
+Landroidx/compose/ui/layout/HorizontalAlignmentLine;
+Landroidx/compose/ui/layout/IntrinsicMeasureScope;
+Landroidx/compose/ui/layout/IntrinsicMinMax;
+Landroidx/compose/ui/layout/IntrinsicWidthHeight;
+Landroidx/compose/ui/layout/IntrinsicsMeasureScope;
+Landroidx/compose/ui/layout/LayoutCoordinates;
+Landroidx/compose/ui/layout/LayoutElement;
+Landroidx/compose/ui/layout/LayoutKt$materializerOf$1;
+Landroidx/compose/ui/layout/LayoutKt;
+Landroidx/compose/ui/layout/LayoutModifierImpl;
+Landroidx/compose/ui/layout/LayoutNodeSubcompositionsState$NodeState;
+Landroidx/compose/ui/layout/LayoutNodeSubcompositionsState$PostLookaheadMeasureScopeImpl;
+Landroidx/compose/ui/layout/LayoutNodeSubcompositionsState$Scope;
+Landroidx/compose/ui/layout/LayoutNodeSubcompositionsState$createMeasurePolicy$1$measure-3p2s80s$$inlined$createMeasureResult$1;
+Landroidx/compose/ui/layout/LayoutNodeSubcompositionsState$createMeasurePolicy$1;
+Landroidx/compose/ui/layout/LayoutNodeSubcompositionsState$precompose$1;
+Landroidx/compose/ui/layout/LayoutNodeSubcompositionsState;
+Landroidx/compose/ui/layout/LookaheadLayoutCoordinates;
+Landroidx/compose/ui/layout/Measurable;
+Landroidx/compose/ui/layout/MeasurePolicy;
+Landroidx/compose/ui/layout/MeasureResult;
+Landroidx/compose/ui/layout/MeasureScope$layout$1;
+Landroidx/compose/ui/layout/MeasureScope;
+Landroidx/compose/ui/layout/Measured;
+Landroidx/compose/ui/layout/OnRemeasuredModifier;
+Landroidx/compose/ui/layout/OnSizeChangedModifier;
+Landroidx/compose/ui/layout/PinnableContainerKt;
+Landroidx/compose/ui/layout/Placeable$PlacementScope$Companion;
+Landroidx/compose/ui/layout/Placeable$PlacementScope;
+Landroidx/compose/ui/layout/Placeable;
+Landroidx/compose/ui/layout/PlaceableKt;
+Landroidx/compose/ui/layout/Remeasurement;
+Landroidx/compose/ui/layout/RemeasurementModifier;
+Landroidx/compose/ui/layout/RootMeasurePolicy$measure$2;
+Landroidx/compose/ui/layout/RootMeasurePolicy;
+Landroidx/compose/ui/layout/ScaleFactor;
+Landroidx/compose/ui/layout/SubcomposeLayoutKt$SubcomposeLayout$2;
+Landroidx/compose/ui/layout/SubcomposeLayoutKt$SubcomposeLayout$4;
+Landroidx/compose/ui/layout/SubcomposeLayoutKt$SubcomposeLayout$5$1$invoke$$inlined$onDispose$1;
+Landroidx/compose/ui/layout/SubcomposeLayoutState$setRoot$1;
+Landroidx/compose/ui/layout/SubcomposeLayoutState;
+Landroidx/compose/ui/layout/SubcomposeMeasureScope;
+Landroidx/compose/ui/layout/SubcomposeSlotReusePolicy$SlotIdsSet;
+Landroidx/compose/ui/layout/SubcomposeSlotReusePolicy;
+Landroidx/compose/ui/modifier/BackwardsCompatLocalMap;
+Landroidx/compose/ui/modifier/EmptyMap;
+Landroidx/compose/ui/modifier/ModifierLocal;
+Landroidx/compose/ui/modifier/ModifierLocalConsumer;
+Landroidx/compose/ui/modifier/ModifierLocalManager;
+Landroidx/compose/ui/modifier/ModifierLocalModifierNode;
+Landroidx/compose/ui/modifier/ModifierLocalProvider;
+Landroidx/compose/ui/modifier/ModifierLocalReadScope;
+Landroidx/compose/ui/modifier/ProvidableModifierLocal;
+Landroidx/compose/ui/modifier/SingleLocalMap;
+Landroidx/compose/ui/node/AlignmentLines;
+Landroidx/compose/ui/node/AlignmentLinesOwner;
+Landroidx/compose/ui/node/BackwardsCompatNode;
+Landroidx/compose/ui/node/CanFocusChecker;
+Landroidx/compose/ui/node/ComposeUiNode$Companion;
+Landroidx/compose/ui/node/ComposeUiNode;
+Landroidx/compose/ui/node/CompositionLocalConsumerModifierNode;
+Landroidx/compose/ui/node/DelegatableNode;
+Landroidx/compose/ui/node/DelegatingNode;
+Landroidx/compose/ui/node/DrawModifierNode;
+Landroidx/compose/ui/node/GlobalPositionAwareModifierNode;
+Landroidx/compose/ui/node/HitTestResult;
+Landroidx/compose/ui/node/InnerNodeCoordinator;
+Landroidx/compose/ui/node/IntrinsicsPolicy;
+Landroidx/compose/ui/node/LayerPositionalProperties;
+Landroidx/compose/ui/node/LayoutAwareModifierNode;
+Landroidx/compose/ui/node/LayoutModifierNode;
+Landroidx/compose/ui/node/LayoutModifierNodeCoordinator;
+Landroidx/compose/ui/node/LayoutNode$$ExternalSyntheticLambda0;
+Landroidx/compose/ui/node/LayoutNode$Companion$DummyViewConfiguration$1;
+Landroidx/compose/ui/node/LayoutNode$Companion$ErrorMeasurePolicy$1;
+Landroidx/compose/ui/node/LayoutNode$NoIntrinsicsMeasurePolicy;
+Landroidx/compose/ui/node/LayoutNode$WhenMappings;
+Landroidx/compose/ui/node/LayoutNode$_foldedChildren$1;
+Landroidx/compose/ui/node/LayoutNode;
+Landroidx/compose/ui/node/LayoutNodeDrawScope;
+Landroidx/compose/ui/node/LayoutNodeLayoutDelegate$LookaheadPassDelegate;
+Landroidx/compose/ui/node/LayoutNodeLayoutDelegate$MeasurePassDelegate$placeOuterCoordinator$1;
+Landroidx/compose/ui/node/LayoutNodeLayoutDelegate$MeasurePassDelegate;
+Landroidx/compose/ui/node/LayoutNodeLayoutDelegate$performMeasure$2;
+Landroidx/compose/ui/node/LayoutNodeLayoutDelegate;
+Landroidx/compose/ui/node/LookaheadAlignmentLines;
+Landroidx/compose/ui/node/LookaheadCapablePlaceable;
+Landroidx/compose/ui/node/LookaheadDelegate;
+Landroidx/compose/ui/node/MeasureAndLayoutDelegate$PostponedRequest;
+Landroidx/compose/ui/node/MeasureAndLayoutDelegate;
+Landroidx/compose/ui/node/ModifierNodeElement;
+Landroidx/compose/ui/node/NodeChain$Differ;
+Landroidx/compose/ui/node/NodeChain;
+Landroidx/compose/ui/node/NodeChainKt$SentinelHead$1;
+Landroidx/compose/ui/node/NodeChainKt;
+Landroidx/compose/ui/node/NodeCoordinator$HitTestSource;
+Landroidx/compose/ui/node/NodeCoordinator$invoke$1;
+Landroidx/compose/ui/node/NodeCoordinator;
+Landroidx/compose/ui/node/NodeMeasuringIntrinsics$IntrinsicMinMax;
+Landroidx/compose/ui/node/NodeMeasuringIntrinsics$IntrinsicWidthHeight;
+Landroidx/compose/ui/node/ObserverModifierNode;
+Landroidx/compose/ui/node/ObserverNodeOwnerScope;
+Landroidx/compose/ui/node/OnPositionedDispatcher$Companion$DepthComparator;
+Landroidx/compose/ui/node/OnPositionedDispatcher;
+Landroidx/compose/ui/node/OwnedLayer;
+Landroidx/compose/ui/node/Owner$OnLayoutCompletedListener;
+Landroidx/compose/ui/node/Owner;
+Landroidx/compose/ui/node/OwnerScope;
+Landroidx/compose/ui/node/OwnerSnapshotObserver;
+Landroidx/compose/ui/node/ParentDataModifierNode;
+Landroidx/compose/ui/node/PointerInputModifierNode;
+Landroidx/compose/ui/node/RootForTest;
+Landroidx/compose/ui/node/SemanticsModifierNode;
+Landroidx/compose/ui/node/TailModifierNode;
+Landroidx/compose/ui/node/TreeSet;
+Landroidx/compose/ui/node/UiApplier;
+Landroidx/compose/ui/platform/AbstractComposeView;
+Landroidx/compose/ui/platform/AccessibilityManager;
+Landroidx/compose/ui/platform/AndroidAccessibilityManager;
+Landroidx/compose/ui/platform/AndroidClipboardManager;
+Landroidx/compose/ui/platform/AndroidComposeView$$ExternalSyntheticApiModelOutline0;
+Landroidx/compose/ui/platform/AndroidComposeView$$ExternalSyntheticLambda1;
+Landroidx/compose/ui/platform/AndroidComposeView$$ExternalSyntheticLambda2;
+Landroidx/compose/ui/platform/AndroidComposeView$$ExternalSyntheticLambda3;
+Landroidx/compose/ui/platform/AndroidComposeView$AndroidComposeViewTranslationCallback;
+Landroidx/compose/ui/platform/AndroidComposeView$ViewTreeOwners;
+Landroidx/compose/ui/platform/AndroidComposeView$focusOwner$1;
+Landroidx/compose/ui/platform/AndroidComposeView$pointerIconService$1;
+Landroidx/compose/ui/platform/AndroidComposeView$viewTreeOwners$2;
+Landroidx/compose/ui/platform/AndroidComposeView;
+Landroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat$$ExternalSyntheticLambda1;
+Landroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat$$ExternalSyntheticLambda2;
+Landroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat$1;
+Landroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat$MyNodeProvider;
+Landroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat$SemanticsNodeCopy;
+Landroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat$boundsUpdatesEventLoop$1;
+Landroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat$sendScrollEventIfNeeded$1;
+Landroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat;
+Landroidx/compose/ui/platform/AndroidComposeViewForceDarkModeQ;
+Landroidx/compose/ui/platform/AndroidComposeViewTranslationCallbackS;
+Landroidx/compose/ui/platform/AndroidComposeViewVerificationHelperMethodsN;
+Landroidx/compose/ui/platform/AndroidComposeViewVerificationHelperMethodsO;
+Landroidx/compose/ui/platform/AndroidCompositionLocals_androidKt$obtainImageVectorCache$callbacks$1$1;
+Landroidx/compose/ui/platform/AndroidCompositionLocals_androidKt;
+Landroidx/compose/ui/platform/AndroidUiDispatcher$dispatchCallback$1;
+Landroidx/compose/ui/platform/AndroidUiDispatcher;
+Landroidx/compose/ui/platform/AndroidUiFrameClock$withFrameNanos$2$callback$1;
+Landroidx/compose/ui/platform/AndroidUiFrameClock;
+Landroidx/compose/ui/platform/AndroidUriHandler;
+Landroidx/compose/ui/platform/AndroidViewConfiguration;
+Landroidx/compose/ui/platform/CalculateMatrixToWindow;
+Landroidx/compose/ui/platform/CalculateMatrixToWindowApi29;
+Landroidx/compose/ui/platform/ClipboardManager;
+Landroidx/compose/ui/platform/ComposableSingletons$Wrapper_androidKt;
+Landroidx/compose/ui/platform/ComposeView;
+Landroidx/compose/ui/platform/CompositionLocalsKt;
+Landroidx/compose/ui/platform/DeviceRenderNode;
+Landroidx/compose/ui/platform/DisposableSaveableStateRegistry;
+Landroidx/compose/ui/platform/DisposableSaveableStateRegistry_androidKt$DisposableSaveableStateRegistry$1;
+Landroidx/compose/ui/platform/DrawChildContainer;
+Landroidx/compose/ui/platform/GlobalSnapshotManager$ensureStarted$1;
+Landroidx/compose/ui/platform/GlobalSnapshotManager;
+Landroidx/compose/ui/platform/InspectableModifier$End;
+Landroidx/compose/ui/platform/InspectableModifier;
+Landroidx/compose/ui/platform/LayerMatrixCache;
+Landroidx/compose/ui/platform/MotionDurationScaleImpl;
+Landroidx/compose/ui/platform/OutlineResolver;
+Landroidx/compose/ui/platform/RenderNodeApi29;
+Landroidx/compose/ui/platform/RenderNodeApi29VerificationHelper;
+Landroidx/compose/ui/platform/RenderNodeLayer;
+Landroidx/compose/ui/platform/ScrollObservationScope;
+Landroidx/compose/ui/platform/SoftwareKeyboardController;
+Landroidx/compose/ui/platform/TextToolbar;
+Landroidx/compose/ui/platform/UriHandler;
+Landroidx/compose/ui/platform/ViewCompositionStrategy;
+Landroidx/compose/ui/platform/ViewConfiguration;
+Landroidx/compose/ui/platform/ViewLayer$Companion$OutlineProvider$1;
+Landroidx/compose/ui/platform/ViewLayer;
+Landroidx/compose/ui/platform/ViewLayerContainer;
+Landroidx/compose/ui/platform/WeakCache;
+Landroidx/compose/ui/platform/WindowInfo;
+Landroidx/compose/ui/platform/WindowInfoImpl;
+Landroidx/compose/ui/platform/WindowRecomposerFactory$Companion$$ExternalSyntheticLambda0;
+Landroidx/compose/ui/platform/WindowRecomposerFactory;
+Landroidx/compose/ui/platform/WindowRecomposerPolicy$createAndInstallWindowRecomposer$unsetJob$1;
+Landroidx/compose/ui/platform/WindowRecomposerPolicy;
+Landroidx/compose/ui/platform/WindowRecomposer_androidKt$createLifecycleAwareWindowRecomposer$1;
+Landroidx/compose/ui/platform/WindowRecomposer_androidKt$createLifecycleAwareWindowRecomposer$2$WhenMappings;
+Landroidx/compose/ui/platform/WindowRecomposer_androidKt$createLifecycleAwareWindowRecomposer$2$onStateChanged$1$1$1;
+Landroidx/compose/ui/platform/WindowRecomposer_androidKt$createLifecycleAwareWindowRecomposer$2$onStateChanged$1;
+Landroidx/compose/ui/platform/WindowRecomposer_androidKt$createLifecycleAwareWindowRecomposer$2;
+Landroidx/compose/ui/platform/WindowRecomposer_androidKt$getAnimationScaleFlowFor$1$1$1;
+Landroidx/compose/ui/platform/WindowRecomposer_androidKt;
+Landroidx/compose/ui/platform/WrappedComposition$setContent$1$1$1;
+Landroidx/compose/ui/platform/WrappedComposition$setContent$1$1;
+Landroidx/compose/ui/platform/WrappedComposition$setContent$1;
+Landroidx/compose/ui/platform/WrappedComposition;
+Landroidx/compose/ui/platform/WrapperRenderNodeLayerHelperMethods;
+Landroidx/compose/ui/platform/WrapperVerificationHelperMethods;
+Landroidx/compose/ui/platform/Wrapper_androidKt;
+Landroidx/compose/ui/res/ImageVectorCache$ImageVectorEntry;
+Landroidx/compose/ui/res/ImageVectorCache$Key;
+Landroidx/compose/ui/res/ImageVectorCache;
+Landroidx/compose/ui/semantics/AppendedSemanticsElement;
+Landroidx/compose/ui/semantics/CollectionInfo;
+Landroidx/compose/ui/semantics/CoreSemanticsModifierNode;
+Landroidx/compose/ui/semantics/EmptySemanticsElement;
+Landroidx/compose/ui/semantics/EmptySemanticsModifier;
+Landroidx/compose/ui/semantics/Role;
+Landroidx/compose/ui/semantics/ScrollAxisRange;
+Landroidx/compose/ui/semantics/SemanticsConfiguration;
+Landroidx/compose/ui/semantics/SemanticsModifier;
+Landroidx/compose/ui/semantics/SemanticsModifierKt;
+Landroidx/compose/ui/semantics/SemanticsNode;
+Landroidx/compose/ui/semantics/SemanticsOwner;
+Landroidx/compose/ui/semantics/SemanticsProperties;
+Landroidx/compose/ui/semantics/SemanticsPropertiesKt;
+Landroidx/compose/ui/semantics/SemanticsPropertyKey;
+Landroidx/compose/ui/semantics/SemanticsPropertyReceiver;
+Landroidx/compose/ui/text/AndroidParagraph;
+Landroidx/compose/ui/text/AnnotatedString$Range;
+Landroidx/compose/ui/text/AnnotatedString;
+Landroidx/compose/ui/text/AnnotatedStringKt;
+Landroidx/compose/ui/text/EmojiSupportMatch;
+Landroidx/compose/ui/text/MultiParagraph;
+Landroidx/compose/ui/text/MultiParagraphIntrinsics$maxIntrinsicWidth$2;
+Landroidx/compose/ui/text/MultiParagraphIntrinsics;
+Landroidx/compose/ui/text/ParagraphInfo;
+Landroidx/compose/ui/text/ParagraphIntrinsicInfo;
+Landroidx/compose/ui/text/ParagraphIntrinsics;
+Landroidx/compose/ui/text/ParagraphStyle;
+Landroidx/compose/ui/text/ParagraphStyleKt;
+Landroidx/compose/ui/text/PlatformParagraphStyle;
+Landroidx/compose/ui/text/PlatformTextStyle;
+Landroidx/compose/ui/text/SaversKt$ColorSaver$1;
+Landroidx/compose/ui/text/SaversKt$ColorSaver$2;
+Landroidx/compose/ui/text/SaversKt;
+Landroidx/compose/ui/text/SpanStyle;
+Landroidx/compose/ui/text/SpanStyleKt;
+Landroidx/compose/ui/text/TextLayoutInput;
+Landroidx/compose/ui/text/TextLayoutResult;
+Landroidx/compose/ui/text/TextRange;
+Landroidx/compose/ui/text/TextStyle;
+Landroidx/compose/ui/text/TtsAnnotation;
+Landroidx/compose/ui/text/UrlAnnotation;
+Landroidx/compose/ui/text/VerbatimTtsAnnotation;
+Landroidx/compose/ui/text/android/BoringLayoutFactoryDefault;
+Landroidx/compose/ui/text/android/LayoutIntrinsics;
+Landroidx/compose/ui/text/android/Paint29$$ExternalSyntheticApiModelOutline0;
+Landroidx/compose/ui/text/android/Paint29;
+Landroidx/compose/ui/text/android/StaticLayoutFactory23;
+Landroidx/compose/ui/text/android/StaticLayoutFactory26;
+Landroidx/compose/ui/text/android/StaticLayoutFactory28;
+Landroidx/compose/ui/text/android/StaticLayoutFactoryImpl;
+Landroidx/compose/ui/text/android/StaticLayoutParams;
+Landroidx/compose/ui/text/android/TextAlignmentAdapter;
+Landroidx/compose/ui/text/android/TextAndroidCanvas;
+Landroidx/compose/ui/text/android/TextLayout;
+Landroidx/compose/ui/text/android/TextLayoutKt;
+Landroidx/compose/ui/text/android/style/LetterSpacingSpanEm;
+Landroidx/compose/ui/text/android/style/LetterSpacingSpanPx;
+Landroidx/compose/ui/text/android/style/LineHeightSpan;
+Landroidx/compose/ui/text/android/style/LineHeightStyleSpan;
+Landroidx/compose/ui/text/android/style/PlaceholderSpan;
+Landroidx/compose/ui/text/android/style/ShadowSpan;
+Landroidx/compose/ui/text/android/style/SkewXSpan;
+Landroidx/compose/ui/text/android/style/TextDecorationSpan;
+Landroidx/compose/ui/text/android/style/TypefaceSpan;
+Landroidx/compose/ui/text/caches/LruCache;
+Landroidx/compose/ui/text/caches/SimpleArrayMap;
+Landroidx/compose/ui/text/font/AndroidFontResolveInterceptor;
+Landroidx/compose/ui/text/font/AsyncTypefaceCache;
+Landroidx/compose/ui/text/font/DefaultFontFamily;
+Landroidx/compose/ui/text/font/Font$ResourceLoader;
+Landroidx/compose/ui/text/font/FontFamily$Resolver;
+Landroidx/compose/ui/text/font/FontFamily;
+Landroidx/compose/ui/text/font/FontFamilyResolverImpl;
+Landroidx/compose/ui/text/font/FontFamilyResolverKt;
+Landroidx/compose/ui/text/font/FontListFontFamilyTypefaceAdapter$special$$inlined$CoroutineExceptionHandler$1;
+Landroidx/compose/ui/text/font/FontListFontFamilyTypefaceAdapter;
+Landroidx/compose/ui/text/font/FontStyle;
+Landroidx/compose/ui/text/font/FontSynthesis;
+Landroidx/compose/ui/text/font/FontWeight;
+Landroidx/compose/ui/text/font/GenericFontFamily;
+Landroidx/compose/ui/text/font/PlatformResolveInterceptor$Companion$Default$1;
+Landroidx/compose/ui/text/font/PlatformResolveInterceptor$Companion;
+Landroidx/compose/ui/text/font/PlatformResolveInterceptor;
+Landroidx/compose/ui/text/font/PlatformTypefaces;
+Landroidx/compose/ui/text/font/SystemFontFamily;
+Landroidx/compose/ui/text/font/TypefaceRequest;
+Landroidx/compose/ui/text/font/TypefaceResult$Immutable;
+Landroidx/compose/ui/text/font/TypefaceResult;
+Landroidx/compose/ui/text/input/InputMethodManagerImpl;
+Landroidx/compose/ui/text/input/PlatformTextInputService;
+Landroidx/compose/ui/text/input/TextFieldValue;
+Landroidx/compose/ui/text/input/TextInputService;
+Landroidx/compose/ui/text/input/TextInputServiceAndroid;
+Landroidx/compose/ui/text/input/TextInputServiceAndroid_androidKt$$ExternalSyntheticLambda0;
+Landroidx/compose/ui/text/intl/AndroidLocale;
+Landroidx/compose/ui/text/intl/AndroidLocaleDelegateAPI24;
+Landroidx/compose/ui/text/intl/Locale;
+Landroidx/compose/ui/text/intl/LocaleList;
+Landroidx/compose/ui/text/intl/PlatformLocaleKt;
+Landroidx/compose/ui/text/platform/AndroidParagraphHelper_androidKt$NoopSpan$1;
+Landroidx/compose/ui/text/platform/AndroidParagraphHelper_androidKt;
+Landroidx/compose/ui/text/platform/AndroidParagraphIntrinsics$resolveTypeface$1;
+Landroidx/compose/ui/text/platform/AndroidParagraphIntrinsics;
+Landroidx/compose/ui/text/platform/AndroidTextPaint;
+Landroidx/compose/ui/text/platform/DefaultImpl$getFontLoadState$initCallback$1;
+Landroidx/compose/ui/text/platform/DefaultImpl;
+Landroidx/compose/ui/text/platform/EmojiCompatStatus;
+Landroidx/compose/ui/text/platform/ImmutableBool;
+Landroidx/compose/ui/text/platform/URLSpanCache;
+Landroidx/compose/ui/text/platform/extensions/LocaleListHelperMethods;
+Landroidx/compose/ui/text/platform/style/DrawStyleSpan;
+Landroidx/compose/ui/text/platform/style/ShaderBrushSpan;
+Landroidx/compose/ui/text/style/BaselineShift;
+Landroidx/compose/ui/text/style/BrushStyle;
+Landroidx/compose/ui/text/style/ColorStyle;
+Landroidx/compose/ui/text/style/Hyphens;
+Landroidx/compose/ui/text/style/LineBreak$Strategy;
+Landroidx/compose/ui/text/style/LineBreak$Strictness;
+Landroidx/compose/ui/text/style/LineBreak$WordBreak;
+Landroidx/compose/ui/text/style/LineBreak;
+Landroidx/compose/ui/text/style/LineHeightStyle$Alignment;
+Landroidx/compose/ui/text/style/LineHeightStyle;
+Landroidx/compose/ui/text/style/TextAlign;
+Landroidx/compose/ui/text/style/TextDecoration;
+Landroidx/compose/ui/text/style/TextDirection;
+Landroidx/compose/ui/text/style/TextForegroundStyle$Unspecified;
+Landroidx/compose/ui/text/style/TextForegroundStyle;
+Landroidx/compose/ui/text/style/TextGeometricTransform;
+Landroidx/compose/ui/text/style/TextIndent;
+Landroidx/compose/ui/text/style/TextMotion;
+Landroidx/compose/ui/unit/Constraints;
+Landroidx/compose/ui/unit/Density;
+Landroidx/compose/ui/unit/DensityImpl;
+Landroidx/compose/ui/unit/Dp$Companion;
+Landroidx/compose/ui/unit/Dp;
+Landroidx/compose/ui/unit/DpOffset;
+Landroidx/compose/ui/unit/DpRect;
+Landroidx/compose/ui/unit/IntOffset;
+Landroidx/compose/ui/unit/IntSize;
+Landroidx/compose/ui/unit/LayoutDirection;
+Landroidx/compose/ui/unit/TextUnit;
+Landroidx/compose/ui/unit/TextUnitType;
+Landroidx/core/app/ComponentActivity;
+Landroidx/core/app/CoreComponentFactory;
+Landroidx/core/content/res/ColorStateListInflaterCompat;
+Landroidx/core/content/res/ComplexColorCompat;
+Landroidx/core/graphics/TypefaceCompat;
+Landroidx/core/graphics/TypefaceCompatApi29Impl;
+Landroidx/core/graphics/TypefaceCompatUtil$Api19Impl;
+Landroidx/core/os/BuildCompat$Extensions30Impl$$ExternalSyntheticApiModelOutline0;
+Landroidx/core/os/BuildCompat$Extensions30Impl;
+Landroidx/core/os/BuildCompat;
+Landroidx/core/os/TraceCompat$Api18Impl;
+Landroidx/core/os/TraceCompat;
+Landroidx/core/provider/CallbackWithHandler$2;
+Landroidx/core/provider/FontProvider$Api16Impl;
+Landroidx/core/provider/FontRequest;
+Landroidx/core/provider/FontsContractCompat$FontInfo;
+Landroidx/core/text/TextUtilsCompat$Api17Impl;
+Landroidx/core/text/TextUtilsCompat;
+Landroidx/core/view/AccessibilityDelegateCompat$AccessibilityDelegateAdapter;
+Landroidx/core/view/AccessibilityDelegateCompat;
+Landroidx/core/view/MenuHostHelper;
+Landroidx/core/view/ViewCompat$$ExternalSyntheticLambda0;
+Landroidx/core/view/ViewCompat$Api29Impl;
+Landroidx/core/view/ViewCompat$Api30Impl;
+Landroidx/core/view/ViewCompat;
+Landroidx/core/view/accessibility/AccessibilityNodeProviderCompat;
+Landroidx/customview/poolingcontainer/PoolingContainerListenerHolder;
+Landroidx/emoji2/text/ConcurrencyHelpers$$ExternalSyntheticLambda0;
+Landroidx/emoji2/text/ConcurrencyHelpers$Handler28Impl;
+Landroidx/emoji2/text/DefaultGlyphChecker;
+Landroidx/emoji2/text/EmojiCompat$CompatInternal19$1;
+Landroidx/emoji2/text/EmojiCompat$CompatInternal19;
+Landroidx/emoji2/text/EmojiCompat$Config;
+Landroidx/emoji2/text/EmojiCompat$GlyphChecker;
+Landroidx/emoji2/text/EmojiCompat$MetadataRepoLoader;
+Landroidx/emoji2/text/EmojiCompat;
+Landroidx/emoji2/text/EmojiCompatInitializer$1;
+Landroidx/emoji2/text/EmojiCompatInitializer$BackgroundDefaultLoader$$ExternalSyntheticLambda0;
+Landroidx/emoji2/text/EmojiCompatInitializer$BackgroundDefaultLoader$1;
+Landroidx/emoji2/text/EmojiCompatInitializer$LoadEmojiCompatRunnable;
+Landroidx/emoji2/text/EmojiCompatInitializer;
+Landroidx/emoji2/text/EmojiProcessor$EmojiProcessAddSpanCallback;
+Landroidx/emoji2/text/EmojiProcessor$EmojiProcessCallback;
+Landroidx/emoji2/text/EmojiProcessor$ProcessorSm;
+Landroidx/emoji2/text/EmojiProcessor;
+Landroidx/emoji2/text/FontRequestEmojiCompatConfig$FontRequestMetadataLoader$$ExternalSyntheticLambda0;
+Landroidx/emoji2/text/FontRequestEmojiCompatConfig$FontRequestMetadataLoader$1;
+Landroidx/emoji2/text/FontRequestEmojiCompatConfig$FontRequestMetadataLoader;
+Landroidx/emoji2/text/FontRequestEmojiCompatConfig;
+Landroidx/emoji2/text/MetadataRepo$Node;
+Landroidx/emoji2/text/MetadataRepo;
+Landroidx/emoji2/text/TypefaceEmojiRasterizer;
+Landroidx/emoji2/text/TypefaceEmojiSpan;
+Landroidx/emoji2/text/UnprecomputeTextOnModificationSpannable;
+Landroidx/emoji2/text/flatbuffer/MetadataItem;
+Landroidx/emoji2/text/flatbuffer/MetadataList;
+Landroidx/emoji2/text/flatbuffer/Table;
+Landroidx/lifecycle/DefaultLifecycleObserver;
+Landroidx/lifecycle/DefaultLifecycleObserverAdapter$WhenMappings;
+Landroidx/lifecycle/DefaultLifecycleObserverAdapter;
+Landroidx/lifecycle/EmptyActivityLifecycleCallbacks;
+Landroidx/lifecycle/HasDefaultViewModelProviderFactory;
+Landroidx/lifecycle/Lifecycle$Event$Companion;
+Landroidx/lifecycle/Lifecycle$Event$WhenMappings;
+Landroidx/lifecycle/Lifecycle$Event;
+Landroidx/lifecycle/Lifecycle$State;
+Landroidx/lifecycle/Lifecycle;
+Landroidx/lifecycle/LifecycleDestroyedException;
+Landroidx/lifecycle/LifecycleDispatcher$DispatcherActivityCallback;
+Landroidx/lifecycle/LifecycleDispatcher;
+Landroidx/lifecycle/LifecycleEventObserver;
+Landroidx/lifecycle/LifecycleObserver;
+Landroidx/lifecycle/LifecycleOwner;
+Landroidx/lifecycle/LifecycleRegistry$ObserverWithState;
+Landroidx/lifecycle/LifecycleRegistry;
+Landroidx/lifecycle/Lifecycling;
+Landroidx/lifecycle/ProcessLifecycleInitializer;
+Landroidx/lifecycle/ProcessLifecycleOwner$Api29Impl;
+Landroidx/lifecycle/ProcessLifecycleOwner$attach$1$onActivityPreCreated$1;
+Landroidx/lifecycle/ProcessLifecycleOwner$attach$1;
+Landroidx/lifecycle/ProcessLifecycleOwner$initializationListener$1;
+Landroidx/lifecycle/ProcessLifecycleOwner;
+Landroidx/lifecycle/ReportFragment$LifecycleCallbacks$Companion;
+Landroidx/lifecycle/ReportFragment$LifecycleCallbacks;
+Landroidx/lifecycle/ReportFragment;
+Landroidx/lifecycle/SavedStateHandleAttacher;
+Landroidx/lifecycle/SavedStateHandlesProvider;
+Landroidx/lifecycle/SavedStateHandlesVM;
+Landroidx/lifecycle/ViewModelStore;
+Landroidx/lifecycle/ViewModelStoreOwner;
+Landroidx/lifecycle/viewmodel/CreationExtras$Empty;
+Landroidx/lifecycle/viewmodel/CreationExtras;
+Landroidx/lifecycle/viewmodel/MutableCreationExtras;
+Landroidx/lifecycle/viewmodel/ViewModelInitializer;
+Landroidx/metrics/performance/DelegatingFrameMetricsListener;
+Landroidx/metrics/performance/FrameData;
+Landroidx/metrics/performance/FrameDataApi24;
+Landroidx/metrics/performance/FrameDataApi31;
+Landroidx/metrics/performance/JankStats;
+Landroidx/metrics/performance/JankStatsApi16Impl;
+Landroidx/metrics/performance/JankStatsApi22Impl;
+Landroidx/metrics/performance/JankStatsApi24Impl$$ExternalSyntheticLambda0;
+Landroidx/metrics/performance/JankStatsApi24Impl;
+Landroidx/metrics/performance/JankStatsApi26Impl;
+Landroidx/metrics/performance/JankStatsApi31Impl;
+Landroidx/metrics/performance/PerformanceMetricsState$Holder;
+Landroidx/metrics/performance/PerformanceMetricsState;
+Landroidx/profileinstaller/ProfileInstaller$DiagnosticsCallback;
+Landroidx/profileinstaller/ProfileInstallerInitializer$$ExternalSyntheticLambda0;
+Landroidx/profileinstaller/ProfileInstallerInitializer$$ExternalSyntheticLambda1;
+Landroidx/profileinstaller/ProfileInstallerInitializer$Choreographer16Impl;
+Landroidx/profileinstaller/ProfileInstallerInitializer$Handler28Impl;
+Landroidx/profileinstaller/ProfileInstallerInitializer;
+Landroidx/savedstate/Recreator;
+Landroidx/savedstate/SavedStateRegistry$$ExternalSyntheticLambda0;
+Landroidx/savedstate/SavedStateRegistry$SavedStateProvider;
+Landroidx/savedstate/SavedStateRegistry;
+Landroidx/savedstate/SavedStateRegistryController;
+Landroidx/savedstate/SavedStateRegistryOwner;
+Landroidx/startup/AppInitializer;
+Landroidx/startup/InitializationProvider;
+Landroidx/startup/Initializer;
+Landroidx/tracing/Trace$$ExternalSyntheticApiModelOutline0;
+Landroidx/tv/foundation/PivotOffsets;
+Landroidx/tv/foundation/TvBringIntoViewSpec;
+Landroidx/tv/foundation/lazy/grid/LazyGridIntervalContent;
+Landroidx/tv/foundation/lazy/grid/LazyGridItemPlacementAnimator$onMeasured$$inlined$sortBy$1;
+Landroidx/tv/foundation/lazy/grid/LazyGridItemPlacementAnimator;
+Landroidx/tv/foundation/lazy/grid/LazyGridItemProviderImpl;
+Landroidx/tv/foundation/lazy/grid/LazyGridKt$rememberLazyGridMeasurePolicy$1$1$3;
+Landroidx/tv/foundation/lazy/grid/LazyGridScrollPosition;
+Landroidx/tv/foundation/lazy/grid/TvGridItemSpan;
+Landroidx/tv/foundation/lazy/grid/TvLazyGridItemSpanScope;
+Landroidx/tv/foundation/lazy/grid/TvLazyGridScope;
+Landroidx/tv/foundation/lazy/grid/TvLazyGridState$remeasurementModifier$1;
+Landroidx/tv/foundation/lazy/grid/TvLazyGridState;
+Landroidx/tv/foundation/lazy/layout/AwaitFirstLayoutModifier$waitForFirstLayout$1;
+Landroidx/tv/foundation/lazy/layout/AwaitFirstLayoutModifier;
+Landroidx/tv/foundation/lazy/layout/LazyLayoutBeyondBoundsInfo$Interval;
+Landroidx/tv/foundation/lazy/layout/LazyLayoutKeyIndexMap;
+Landroidx/tv/foundation/lazy/layout/LazyLayoutNearestRangeState;
+Landroidx/tv/foundation/lazy/layout/LazyLayoutSemanticState;
+Landroidx/tv/foundation/lazy/layout/LazyLayoutSemanticsKt$LazyLayoutSemanticState$1;
+Landroidx/tv/foundation/lazy/layout/LazyLayoutSemanticsKt$lazyLayoutSemantics$1$1;
+Landroidx/tv/foundation/lazy/layout/NearestRangeKeyIndexMap$2$1;
+Landroidx/tv/foundation/lazy/layout/NearestRangeKeyIndexMap;
+Landroidx/tv/foundation/lazy/list/EmptyLazyListLayoutInfo;
+Landroidx/tv/foundation/lazy/list/LazyLayoutBeyondBoundsModifierLocal$Companion$emptyBeyondBoundsScope$1;
+Landroidx/tv/foundation/lazy/list/LazyLayoutBeyondBoundsModifierLocal;
+Landroidx/tv/foundation/lazy/list/LazyLayoutBeyondBoundsState;
+Landroidx/tv/foundation/lazy/list/LazyListBeyondBoundsState;
+Landroidx/tv/foundation/lazy/list/LazyListItemPlacementAnimator$onMeasured$$inlined$sortBy$2;
+Landroidx/tv/foundation/lazy/list/LazyListItemProviderImpl;
+Landroidx/tv/foundation/lazy/list/LazyListKt$rememberLazyListMeasurePolicy$1$1$measuredItemProvider$1;
+Landroidx/tv/foundation/lazy/list/LazyListKt$rememberLazyListMeasurePolicy$1$1;
+Landroidx/tv/foundation/lazy/list/LazyListMeasureResult;
+Landroidx/tv/foundation/lazy/list/LazyListMeasuredItem;
+Landroidx/tv/foundation/lazy/list/LazyListStateKt$rememberTvLazyListState$1$1;
+Landroidx/tv/foundation/lazy/list/LazyListStateKt;
+Landroidx/tv/foundation/lazy/list/TvLazyListInterval;
+Landroidx/tv/foundation/lazy/list/TvLazyListIntervalContent;
+Landroidx/tv/foundation/lazy/list/TvLazyListItemScopeImpl;
+Landroidx/tv/foundation/lazy/list/TvLazyListLayoutInfo;
+Landroidx/tv/foundation/lazy/list/TvLazyListScope;
+Landroidx/tv/foundation/lazy/list/TvLazyListState$scroll$1;
+Landroidx/tv/foundation/lazy/list/TvLazyListState;
+Landroidx/tv/material3/Border;
+Landroidx/tv/material3/BorderIndication;
+Landroidx/tv/material3/ColorScheme;
+Landroidx/tv/material3/ColorSchemeKt$LocalColorScheme$1;
+Landroidx/tv/material3/ColorSchemeKt;
+Landroidx/tv/material3/ContentColorKt;
+Landroidx/tv/material3/Glow;
+Landroidx/tv/material3/GlowIndication;
+Landroidx/tv/material3/GlowIndicationInstance;
+Landroidx/tv/material3/ScaleIndication;
+Landroidx/tv/material3/ScaleIndicationInstance;
+Landroidx/tv/material3/ScaleIndicationTokens;
+Landroidx/tv/material3/ShapesKt$LocalShapes$1;
+Landroidx/tv/material3/SurfaceKt$Surface$4;
+Landroidx/tv/material3/SurfaceKt$SurfaceImpl$2$2$1;
+Landroidx/tv/material3/SurfaceKt$SurfaceImpl$2$4$1;
+Landroidx/tv/material3/SurfaceKt$SurfaceImpl$2$5$1;
+Landroidx/tv/material3/SurfaceKt$SurfaceImpl$2;
+Landroidx/tv/material3/SurfaceKt$SurfaceImpl$3;
+Landroidx/tv/material3/SurfaceKt$handleDPadEnter$2$1;
+Landroidx/tv/material3/SurfaceKt$handleDPadEnter$2$2;
+Landroidx/tv/material3/SurfaceKt$handleDPadEnter$2;
+Landroidx/tv/material3/SurfaceKt$tvToggleable$1$1;
+Landroidx/tv/material3/SurfaceKt$tvToggleable$1$2;
+Landroidx/tv/material3/SurfaceKt$tvToggleable$1;
+Landroidx/tv/material3/SurfaceKt;
+Landroidx/tv/material3/TabColors;
+Landroidx/tv/material3/TabKt$Tab$1;
+Landroidx/tv/material3/TabKt$Tab$3$1;
+Landroidx/tv/material3/TabKt$Tab$4$1;
+Landroidx/tv/material3/TabKt$Tab$6;
+Landroidx/tv/material3/TabKt$Tab$7;
+Landroidx/tv/material3/TabKt;
+Landroidx/tv/material3/TabRowDefaults$PillIndicator$1;
+Landroidx/tv/material3/TabRowDefaults;
+Landroidx/tv/material3/TabRowKt$TabRow$1;
+Landroidx/tv/material3/TabRowKt$TabRow$2$1$1;
+Landroidx/tv/material3/TabRowKt$TabRow$2$2$1$1$2;
+Landroidx/tv/material3/TabRowKt$TabRow$2$2$1$1;
+Landroidx/tv/material3/TabRowKt$TabRow$2$2$1$separators$1;
+Landroidx/tv/material3/TabRowKt$TabRow$2$2$1;
+Landroidx/tv/material3/TabRowKt$TabRow$2;
+Landroidx/tv/material3/TabRowKt$TabRow$3;
+Landroidx/tv/material3/TabRowScopeImpl;
+Landroidx/tv/material3/TabRowSlots;
+Landroidx/tv/material3/TextKt$Text$1;
+Landroidx/tv/material3/TextKt$Text$2;
+Landroidx/tv/material3/TextKt;
+Landroidx/tv/material3/ToggleableSurfaceBorder;
+Landroidx/tv/material3/ToggleableSurfaceColors;
+Landroidx/tv/material3/ToggleableSurfaceGlow;
+Landroidx/tv/material3/ToggleableSurfaceScale;
+Landroidx/tv/material3/ToggleableSurfaceShape;
+Landroidx/tv/material3/tokens/ColorLightTokens;
+Landroidx/tv/material3/tokens/Elevation;
+Landroidx/tv/material3/tokens/PaletteTokens;
+Landroidx/tv/material3/tokens/ShapeTokens$BorderDefaultShape$1;
+Landroidx/tv/material3/tokens/ShapeTokens;
+Landroidx/tv/material3/tokens/TypographyTokensKt;
+Lcom/example/tvcomposebasedtests/ComposableSingletons$MainActivityKt;
+Lcom/example/tvcomposebasedtests/ComposableSingletons$UtilsKt$lambda-1$1;
+Lcom/example/tvcomposebasedtests/Config;
+Lcom/example/tvcomposebasedtests/JankStatsAggregator$listener$1;
+Lcom/example/tvcomposebasedtests/JankStatsAggregator;
+Lcom/example/tvcomposebasedtests/MainActivity$jankReportListener$1;
+Lcom/example/tvcomposebasedtests/MainActivity$startFrameMetrics$listener$1;
+Lcom/example/tvcomposebasedtests/MainActivity;
+Lcom/example/tvcomposebasedtests/UtilsKt$AddJankMetrics$1$2;
+Lcom/example/tvcomposebasedtests/UtilsKt$ScrollingRow$1$1$1;
+Lcom/example/tvcomposebasedtests/UtilsKt$ScrollingRow$2;
+Lcom/example/tvcomposebasedtests/UtilsKt;
+Lcom/example/tvcomposebasedtests/tvComponents/AppKt$App$1;
+Lcom/example/tvcomposebasedtests/tvComponents/ComposableSingletons$LazyContainersKt;
+Lcom/example/tvcomposebasedtests/tvComponents/ComposableSingletons$TopNavigationKt;
+Lcom/example/tvcomposebasedtests/tvComponents/Navigation;
+Lcom/example/tvcomposebasedtests/tvComponents/TopNavigationKt$PillIndicatorTabRow$1$1$1$1;
+Lcom/example/tvcomposebasedtests/tvComponents/TopNavigationKt$PillIndicatorTabRow$1;
+Lcom/example/tvcomposebasedtests/tvComponents/TopNavigationKt$TopNavigation$3$1;
+Lcom/google/gson/JsonIOException;
+Lcom/google/gson/internal/ConstructorConstructor;
+Lcom/google/gson/internal/LinkedTreeMap$1;
+Lcom/google/gson/internal/ObjectConstructor;
+Lkotlin/Function;
+Lkotlin/Lazy;
+Lkotlin/Pair;
+Lkotlin/Result$Failure;
+Lkotlin/Result;
+Lkotlin/ResultKt$$ExternalSyntheticCheckNotZero0;
+Lkotlin/ResultKt;
+Lkotlin/SynchronizedLazyImpl;
+Lkotlin/TuplesKt;
+Lkotlin/ULong$Companion;
+Lkotlin/UNINITIALIZED_VALUE;
+Lkotlin/Unit;
+Lkotlin/UnsafeLazyImpl;
+Lkotlin/collections/AbstractCollection;
+Lkotlin/collections/AbstractList;
+Lkotlin/collections/AbstractMap$toString$1;
+Lkotlin/collections/AbstractMap;
+Lkotlin/collections/AbstractMutableList;
+Lkotlin/collections/AbstractSet;
+Lkotlin/collections/ArrayDeque;
+Lkotlin/collections/ArraysKt___ArraysKt;
+Lkotlin/collections/CollectionsKt__MutableCollectionsJVMKt;
+Lkotlin/collections/CollectionsKt__ReversedViewsKt;
+Lkotlin/collections/CollectionsKt___CollectionsKt;
+Lkotlin/collections/EmptyList;
+Lkotlin/collections/EmptyMap;
+Lkotlin/coroutines/AbstractCoroutineContextElement;
+Lkotlin/coroutines/AbstractCoroutineContextKey;
+Lkotlin/coroutines/CombinedContext;
+Lkotlin/coroutines/Continuation;
+Lkotlin/coroutines/ContinuationInterceptor;
+Lkotlin/coroutines/CoroutineContext$Element;
+Lkotlin/coroutines/CoroutineContext$Key;
+Lkotlin/coroutines/CoroutineContext$plus$1;
+Lkotlin/coroutines/CoroutineContext;
+Lkotlin/coroutines/EmptyCoroutineContext;
+Lkotlin/coroutines/intrinsics/CoroutineSingletons;
+Lkotlin/coroutines/jvm/internal/BaseContinuationImpl;
+Lkotlin/coroutines/jvm/internal/CompletedContinuation;
+Lkotlin/coroutines/jvm/internal/ContinuationImpl;
+Lkotlin/coroutines/jvm/internal/CoroutineStackFrame;
+Lkotlin/coroutines/jvm/internal/SuspendLambda;
+Lkotlin/jvm/functions/Function0;
+Lkotlin/jvm/functions/Function12;
+Lkotlin/jvm/functions/Function1;
+Lkotlin/jvm/functions/Function22;
+Lkotlin/jvm/functions/Function2;
+Lkotlin/jvm/functions/Function3;
+Lkotlin/jvm/functions/Function4;
+Lkotlin/jvm/functions/Function5;
+Lkotlin/jvm/internal/ArrayIterator;
+Lkotlin/jvm/internal/CallableReference$NoReceiver;
+Lkotlin/jvm/internal/CallableReference;
+Lkotlin/jvm/internal/ClassBasedDeclarationContainer;
+Lkotlin/jvm/internal/ClassReference;
+Lkotlin/jvm/internal/FunctionBase;
+Lkotlin/jvm/internal/FunctionReferenceImpl;
+Lkotlin/jvm/internal/Lambda;
+Lkotlin/jvm/internal/PropertyReference0Impl;
+Lkotlin/jvm/internal/PropertyReference;
+Lkotlin/jvm/internal/Ref$BooleanRef;
+Lkotlin/jvm/internal/Ref$ObjectRef;
+Lkotlin/jvm/internal/Reflection;
+Lkotlin/jvm/internal/ReflectionFactory;
+Lkotlin/jvm/internal/markers/KMappedMarker;
+Lkotlin/jvm/internal/markers/KMutableCollection;
+Lkotlin/jvm/internal/markers/KMutableMap;
+Lkotlin/math/MathKt;
+Lkotlin/random/FallbackThreadLocalRandom$implStorage$1;
+Lkotlin/ranges/IntProgression;
+Lkotlin/ranges/IntProgressionIterator;
+Lkotlin/ranges/IntRange;
+Lkotlin/reflect/KCallable;
+Lkotlin/reflect/KClass;
+Lkotlin/reflect/KFunction;
+Lkotlin/reflect/KProperty0;
+Lkotlin/reflect/KProperty;
+Lkotlin/sequences/ConstrainedOnceSequence;
+Lkotlin/sequences/FilteringSequence$iterator$1;
+Lkotlin/sequences/FilteringSequence;
+Lkotlin/sequences/GeneratorSequence$iterator$1;
+Lkotlin/sequences/GeneratorSequence;
+Lkotlin/sequences/Sequence;
+Lkotlin/sequences/SequencesKt;
+Lkotlin/sequences/SequencesKt__SequencesKt$asSequence$$inlined$Sequence$1;
+Lkotlin/sequences/TransformingSequence$iterator$1;
+Lkotlin/text/StringsKt__IndentKt$getIndentFunction$2;
+Lkotlin/text/StringsKt__RegexExtensionsKt;
+Lkotlin/text/StringsKt__StringBuilderKt;
+Lkotlin/text/StringsKt__StringNumberConversionsKt;
+Lkotlin/text/StringsKt__StringsKt;
+Lkotlin/text/StringsKt___StringsKt;
+Lkotlinx/coroutines/AbstractCoroutine;
+Lkotlinx/coroutines/Active;
+Lkotlinx/coroutines/BlockingCoroutine;
+Lkotlinx/coroutines/BlockingEventLoop;
+Lkotlinx/coroutines/CancelHandler;
+Lkotlinx/coroutines/CancellableContinuation;
+Lkotlinx/coroutines/CancellableContinuationImpl;
+Lkotlinx/coroutines/CancelledContinuation;
+Lkotlinx/coroutines/ChildContinuation;
+Lkotlinx/coroutines/ChildHandle;
+Lkotlinx/coroutines/ChildHandleNode;
+Lkotlinx/coroutines/ChildJob;
+Lkotlinx/coroutines/CompletableDeferredImpl;
+Lkotlinx/coroutines/CompletedContinuation;
+Lkotlinx/coroutines/CompletedExceptionally;
+Lkotlinx/coroutines/CompletedWithCancellation;
+Lkotlinx/coroutines/CoroutineContextKt$foldCopies$1;
+Lkotlinx/coroutines/CoroutineDispatcher$Key$1;
+Lkotlinx/coroutines/CoroutineDispatcher$Key;
+Lkotlinx/coroutines/CoroutineDispatcher;
+Lkotlinx/coroutines/CoroutineExceptionHandler;
+Lkotlinx/coroutines/CoroutineScope;
+Lkotlinx/coroutines/DefaultExecutor;
+Lkotlinx/coroutines/DefaultExecutorKt;
+Lkotlinx/coroutines/Delay;
+Lkotlinx/coroutines/DispatchedTask;
+Lkotlinx/coroutines/Dispatchers;
+Lkotlinx/coroutines/DisposableHandle;
+Lkotlinx/coroutines/Empty;
+Lkotlinx/coroutines/EventLoopImplBase;
+Lkotlinx/coroutines/EventLoopImplPlatform;
+Lkotlinx/coroutines/ExecutorCoroutineDispatcher$Key$1;
+Lkotlinx/coroutines/ExecutorCoroutineDispatcher;
+Lkotlinx/coroutines/GlobalScope;
+Lkotlinx/coroutines/InactiveNodeList;
+Lkotlinx/coroutines/Incomplete;
+Lkotlinx/coroutines/IncompleteStateBox;
+Lkotlinx/coroutines/InvokeOnCancel;
+Lkotlinx/coroutines/InvokeOnCancelling;
+Lkotlinx/coroutines/InvokeOnCompletion;
+Lkotlinx/coroutines/Job;
+Lkotlinx/coroutines/JobCancellingNode;
+Lkotlinx/coroutines/JobImpl;
+Lkotlinx/coroutines/JobNode;
+Lkotlinx/coroutines/JobSupport$ChildCompletion;
+Lkotlinx/coroutines/JobSupport$Finishing;
+Lkotlinx/coroutines/JobSupport$addLastAtomic$$inlined$addLastIf$1;
+Lkotlinx/coroutines/JobSupport;
+Lkotlinx/coroutines/MainCoroutineDispatcher;
+Lkotlinx/coroutines/NodeList;
+Lkotlinx/coroutines/NonDisposableHandle;
+Lkotlinx/coroutines/NotCompleted;
+Lkotlinx/coroutines/ParentJob;
+Lkotlinx/coroutines/StandaloneCoroutine;
+Lkotlinx/coroutines/SupervisorJobImpl;
+Lkotlinx/coroutines/ThreadLocalEventLoop;
+Lkotlinx/coroutines/TimeoutCancellationException;
+Lkotlinx/coroutines/Unconfined;
+Lkotlinx/coroutines/UndispatchedCoroutine;
+Lkotlinx/coroutines/UndispatchedMarker;
+Lkotlinx/coroutines/Waiter;
+Lkotlinx/coroutines/android/AndroidDispatcherFactory;
+Lkotlinx/coroutines/android/HandlerContext;
+Lkotlinx/coroutines/android/HandlerDispatcher;
+Lkotlinx/coroutines/android/HandlerDispatcherKt;
+Lkotlinx/coroutines/channels/BufferOverflow;
+Lkotlinx/coroutines/channels/BufferedChannel$BufferedChannelIterator;
+Lkotlinx/coroutines/channels/BufferedChannel;
+Lkotlinx/coroutines/channels/BufferedChannelKt$createSegmentFunction$1;
+Lkotlinx/coroutines/channels/BufferedChannelKt;
+Lkotlinx/coroutines/channels/Channel$Factory;
+Lkotlinx/coroutines/channels/Channel;
+Lkotlinx/coroutines/channels/ChannelResult$Closed;
+Lkotlinx/coroutines/channels/ChannelResult$Failed;
+Lkotlinx/coroutines/channels/ChannelSegment;
+Lkotlinx/coroutines/channels/ConflatedBufferedChannel;
+Lkotlinx/coroutines/channels/ProducerCoroutine;
+Lkotlinx/coroutines/channels/ProducerScope;
+Lkotlinx/coroutines/channels/ReceiveChannel;
+Lkotlinx/coroutines/channels/SendChannel;
+Lkotlinx/coroutines/channels/WaiterEB;
+Lkotlinx/coroutines/flow/AbstractFlow$collect$1;
+Lkotlinx/coroutines/flow/DistinctFlowImpl$collect$2$emit$1;
+Lkotlinx/coroutines/flow/DistinctFlowImpl$collect$2;
+Lkotlinx/coroutines/flow/DistinctFlowImpl;
+Lkotlinx/coroutines/flow/Flow;
+Lkotlinx/coroutines/flow/FlowCollector;
+Lkotlinx/coroutines/flow/FlowKt__ChannelsKt$emitAllImpl$1;
+Lkotlinx/coroutines/flow/FlowKt__LimitKt$dropWhile$$inlined$unsafeFlow$1;
+Lkotlinx/coroutines/flow/FlowKt__LimitKt$dropWhile$1$1$emit$1;
+Lkotlinx/coroutines/flow/FlowKt__LimitKt$dropWhile$1$1;
+Lkotlinx/coroutines/flow/FlowKt__MergeKt$mapLatest$1;
+Lkotlinx/coroutines/flow/FlowKt__MergeKt;
+Lkotlinx/coroutines/flow/FlowKt__ReduceKt$first$$inlined$collectWhile$2$1;
+Lkotlinx/coroutines/flow/FlowKt__ReduceKt$first$$inlined$collectWhile$2;
+Lkotlinx/coroutines/flow/FlowKt__ReduceKt$first$3;
+Lkotlinx/coroutines/flow/FlowKt__ShareKt$launchSharing$1$2;
+Lkotlinx/coroutines/flow/FlowKt__ShareKt$launchSharing$1;
+Lkotlinx/coroutines/flow/MutableSharedFlow;
+Lkotlinx/coroutines/flow/ReadonlyStateFlow;
+Lkotlinx/coroutines/flow/SafeFlow;
+Lkotlinx/coroutines/flow/SharedFlowImpl$Emitter;
+Lkotlinx/coroutines/flow/SharedFlowImpl$collect$1;
+Lkotlinx/coroutines/flow/SharedFlowImpl;
+Lkotlinx/coroutines/flow/SharedFlowSlot;
+Lkotlinx/coroutines/flow/SharingCommand;
+Lkotlinx/coroutines/flow/SharingConfig;
+Lkotlinx/coroutines/flow/SharingStarted;
+Lkotlinx/coroutines/flow/StartedLazily;
+Lkotlinx/coroutines/flow/StartedWhileSubscribed$command$1;
+Lkotlinx/coroutines/flow/StartedWhileSubscribed$command$2;
+Lkotlinx/coroutines/flow/StartedWhileSubscribed;
+Lkotlinx/coroutines/flow/StateFlow;
+Lkotlinx/coroutines/flow/StateFlowImpl$collect$1;
+Lkotlinx/coroutines/flow/StateFlowImpl;
+Lkotlinx/coroutines/flow/StateFlowSlot;
+Lkotlinx/coroutines/flow/internal/AbortFlowException;
+Lkotlinx/coroutines/flow/internal/AbstractSharedFlow;
+Lkotlinx/coroutines/flow/internal/AbstractSharedFlowSlot;
+Lkotlinx/coroutines/flow/internal/ChannelFlow$collect$2;
+Lkotlinx/coroutines/flow/internal/ChannelFlow$collectToFun$1;
+Lkotlinx/coroutines/flow/internal/ChannelFlow;
+Lkotlinx/coroutines/flow/internal/ChannelFlowOperator;
+Lkotlinx/coroutines/flow/internal/ChannelFlowTransformLatest$flowCollect$3$1$2;
+Lkotlinx/coroutines/flow/internal/ChannelFlowTransformLatest$flowCollect$3$1$emit$1;
+Lkotlinx/coroutines/flow/internal/ChannelFlowTransformLatest$flowCollect$3$1;
+Lkotlinx/coroutines/flow/internal/ChannelFlowTransformLatest$flowCollect$3;
+Lkotlinx/coroutines/flow/internal/ChannelFlowTransformLatest;
+Lkotlinx/coroutines/flow/internal/FusibleFlow;
+Lkotlinx/coroutines/flow/internal/NoOpContinuation;
+Lkotlinx/coroutines/flow/internal/NopCollector;
+Lkotlinx/coroutines/flow/internal/SafeCollector;
+Lkotlinx/coroutines/flow/internal/SendingCollector;
+Lkotlinx/coroutines/flow/internal/SubscriptionCountStateFlow;
+Lkotlinx/coroutines/internal/AtomicOp;
+Lkotlinx/coroutines/internal/ConcurrentLinkedListNode;
+Lkotlinx/coroutines/internal/ContextScope;
+Lkotlinx/coroutines/internal/DispatchedContinuation;
+Lkotlinx/coroutines/internal/LimitedDispatcher;
+Lkotlinx/coroutines/internal/LockFreeLinkedListNode$toString$1;
+Lkotlinx/coroutines/internal/LockFreeLinkedListNode;
+Lkotlinx/coroutines/internal/LockFreeTaskQueue;
+Lkotlinx/coroutines/internal/LockFreeTaskQueueCore;
+Lkotlinx/coroutines/internal/MainDispatcherFactory;
+Lkotlinx/coroutines/internal/MainDispatcherLoader;
+Lkotlinx/coroutines/internal/OpDescriptor;
+Lkotlinx/coroutines/internal/Removed;
+Lkotlinx/coroutines/internal/ResizableAtomicArray;
+Lkotlinx/coroutines/internal/ScopeCoroutine;
+Lkotlinx/coroutines/internal/Segment;
+Lkotlinx/coroutines/internal/StackTraceRecoveryKt;
+Lkotlinx/coroutines/internal/Symbol;
+Lkotlinx/coroutines/internal/SystemPropsKt__SystemPropsKt;
+Lkotlinx/coroutines/internal/ThreadState;
+Lkotlinx/coroutines/scheduling/CoroutineScheduler;
+Lkotlinx/coroutines/scheduling/DefaultIoScheduler;
+Lkotlinx/coroutines/scheduling/DefaultScheduler;
+Lkotlinx/coroutines/scheduling/GlobalQueue;
+Lkotlinx/coroutines/scheduling/NanoTimeSource;
+Lkotlinx/coroutines/scheduling/SchedulerCoroutineDispatcher;
+Lkotlinx/coroutines/scheduling/Task;
+Lkotlinx/coroutines/scheduling/TasksKt;
+Lkotlinx/coroutines/scheduling/UnlimitedIoScheduler;
+Lkotlinx/coroutines/sync/Mutex;
+Lkotlinx/coroutines/sync/MutexImpl$CancellableContinuationWithOwner$resume$2;
+Lkotlinx/coroutines/sync/MutexImpl$CancellableContinuationWithOwner;
+Lkotlinx/coroutines/sync/MutexImpl;
+Lkotlinx/coroutines/sync/SemaphoreImpl$addAcquireToQueue$createNewSegment$1;
+Lkotlinx/coroutines/sync/SemaphoreImpl$tryResumeNextFromQueue$createNewSegment$1;
+Lkotlinx/coroutines/sync/SemaphoreImpl;
+Lkotlinx/coroutines/sync/SemaphoreKt;
+Lkotlinx/coroutines/sync/SemaphoreSegment;
+Lokhttp3/Headers$Builder;
+Lokhttp3/MediaType;
+PL_COROUTINE/ArtificialStackFrames;->access$removeRunning(Landroidx/compose/runtime/Stack;)V
+PL_COROUTINE/ArtificialStackFrames;->moveGroup(Landroidx/compose/runtime/SlotWriter;ILandroidx/compose/runtime/SlotWriter;ZZZ)Ljava/util/List;
+PLandroidx/activity/ComponentActivity$ReportFullyDrawnExecutorApi16Impl;->run()V
+PLandroidx/arch/core/internal/SafeIterableMap$ListIterator;->next()Ljava/lang/Object;
+PLandroidx/arch/core/internal/SafeIterableMap$ListIterator;->nextNode()Landroidx/arch/core/internal/SafeIterableMap$Entry;
+PLandroidx/arch/core/internal/SafeIterableMap$ListIterator;->supportRemove(Landroidx/arch/core/internal/SafeIterableMap$Entry;)V
+PLandroidx/collection/ArrayMap$EntrySet;->iterator()Ljava/util/Iterator;
+PLandroidx/compose/foundation/DrawOverscrollModifier;->equals(Ljava/lang/Object;)Z
+PLandroidx/compose/foundation/OverscrollConfiguration;->equals(Ljava/lang/Object;)Z
+PLandroidx/compose/foundation/ScrollingLayoutElement;->equals(Ljava/lang/Object;)Z
+PLandroidx/compose/foundation/gestures/BringIntoViewRequestPriorityQueue;->resumeAndRemoveAll()V
+PLandroidx/compose/foundation/gestures/DraggableNode;->disposeInteractionSource()V
+PLandroidx/compose/foundation/gestures/DraggableNode;->onDetach()V
+PLandroidx/compose/foundation/gestures/ScrollableElement;->equals(Ljava/lang/Object;)Z
+PLandroidx/compose/foundation/layout/OffsetElement;->update(Landroidx/compose/ui/Modifier$Node;)V
+PLandroidx/compose/foundation/layout/SizeElement;->update(Landroidx/compose/ui/Modifier$Node;)V
+PLandroidx/compose/foundation/lazy/layout/LazyLayoutPrefetcher;->onForgotten()V
+PLandroidx/compose/runtime/ComposerImpl$CompositionContextHolder;->onForgotten()V
+PLandroidx/compose/runtime/ComposerImpl$CompositionContextImpl;->dispose()V
+PLandroidx/compose/runtime/ComposerImpl;->recordDelete()V
+PLandroidx/compose/runtime/ComposerImpl;->reportFreeMovableContent$reportGroup(Landroidx/compose/runtime/ComposerImpl;IZI)I
+PLandroidx/compose/runtime/ComposerImpl;->reportFreeMovableContent(I)V
+PLandroidx/compose/runtime/CompositionContext;->unregisterComposer$runtime_release(Landroidx/compose/runtime/Composer;)V
+PLandroidx/compose/runtime/CompositionScopedCoroutineScopeCanceller;->onForgotten()V
+PLandroidx/compose/runtime/Pending;->nodePositionOf(Landroidx/compose/runtime/KeyInfo;)I
+PLandroidx/compose/runtime/Pending;->updateNodeCount(II)Z
+PLandroidx/compose/runtime/Recomposer$effectJob$1$1;->invoke(Ljava/lang/Throwable;)V
+PLandroidx/compose/runtime/Recomposer;->cancel()V
+PLandroidx/compose/runtime/Recomposer;->reportRemovedComposition$runtime_release(Landroidx/compose/runtime/CompositionImpl;)V
+PLandroidx/compose/runtime/SlotWriter;->ensureStarted(I)V
+PLandroidx/compose/runtime/SlotWriter;->startGroup()V
+PLandroidx/compose/runtime/changelist/ComposerChangeListWriter;->removeNode(II)V
+PLandroidx/compose/runtime/changelist/Operation$EndCompositionScope;-><clinit>()V
+PLandroidx/compose/runtime/changelist/Operation$EndCompositionScope;-><init>()V
+PLandroidx/compose/runtime/changelist/Operation$EndCompositionScope;->execute(Landroidx/compose/runtime/changelist/Operations$OpIterator;Landroidx/compose/runtime/Applier;Landroidx/compose/runtime/SlotWriter;Landroidx/compose/runtime/CompositionImpl$RememberEventDispatcher;)V
+PLandroidx/compose/runtime/changelist/Operation$EndCurrentGroup;-><clinit>()V
+PLandroidx/compose/runtime/changelist/Operation$EndCurrentGroup;-><init>()V
+PLandroidx/compose/runtime/changelist/Operation$EndCurrentGroup;->execute(Landroidx/compose/runtime/changelist/Operations$OpIterator;Landroidx/compose/runtime/Applier;Landroidx/compose/runtime/SlotWriter;Landroidx/compose/runtime/CompositionImpl$RememberEventDispatcher;)V
+PLandroidx/compose/runtime/changelist/Operation$EnsureGroupStarted;-><clinit>()V
+PLandroidx/compose/runtime/changelist/Operation$EnsureGroupStarted;-><init>()V
+PLandroidx/compose/runtime/changelist/Operation$EnsureGroupStarted;->execute(Landroidx/compose/runtime/changelist/Operations$OpIterator;Landroidx/compose/runtime/Applier;Landroidx/compose/runtime/SlotWriter;Landroidx/compose/runtime/CompositionImpl$RememberEventDispatcher;)V
+PLandroidx/compose/runtime/changelist/Operation$EnsureRootGroupStarted;-><clinit>()V
+PLandroidx/compose/runtime/changelist/Operation$EnsureRootGroupStarted;-><init>()V
+PLandroidx/compose/runtime/changelist/Operation$EnsureRootGroupStarted;->execute(Landroidx/compose/runtime/changelist/Operations$OpIterator;Landroidx/compose/runtime/Applier;Landroidx/compose/runtime/SlotWriter;Landroidx/compose/runtime/CompositionImpl$RememberEventDispatcher;)V
+PLandroidx/compose/runtime/changelist/Operation$RemoveCurrentGroup;-><clinit>()V
+PLandroidx/compose/runtime/changelist/Operation$RemoveCurrentGroup;-><init>()V
+PLandroidx/compose/runtime/changelist/Operation$RemoveCurrentGroup;->execute(Landroidx/compose/runtime/changelist/Operations$OpIterator;Landroidx/compose/runtime/Applier;Landroidx/compose/runtime/SlotWriter;Landroidx/compose/runtime/CompositionImpl$RememberEventDispatcher;)V
+PLandroidx/compose/runtime/changelist/Operation$RemoveNode;-><clinit>()V
+PLandroidx/compose/runtime/changelist/Operation$RemoveNode;-><init>()V
+PLandroidx/compose/runtime/changelist/Operation$RemoveNode;->execute(Landroidx/compose/runtime/changelist/Operations$OpIterator;Landroidx/compose/runtime/Applier;Landroidx/compose/runtime/SlotWriter;Landroidx/compose/runtime/CompositionImpl$RememberEventDispatcher;)V
+PLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/TrieNode;->remove(IILandroidx/compose/runtime/Stack;)Landroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/TrieNode;
+PLandroidx/compose/runtime/saveable/SaveableHolder;->onForgotten()V
+PLandroidx/compose/runtime/saveable/SaveableStateRegistryImpl$registerProvider$3;->unregister()V
+PLandroidx/compose/runtime/snapshots/Snapshot$Companion$$ExternalSyntheticLambda0;->dispose()V
+PLandroidx/compose/runtime/snapshots/SnapshotIdSet$iterator$1;-><init>(Landroidx/compose/runtime/snapshots/SnapshotIdSet;Lkotlin/coroutines/Continuation;)V
+PLandroidx/compose/runtime/snapshots/SnapshotIdSet$iterator$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation;
+PLandroidx/compose/runtime/snapshots/SnapshotIdSet$iterator$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;
+PLandroidx/compose/runtime/snapshots/SnapshotIdSet;->iterator()Ljava/util/Iterator;
+PLandroidx/compose/ui/autofill/AutofillCallback;->unregister(Landroidx/compose/ui/autofill/AndroidAutofill;)V
+PLandroidx/compose/ui/focus/FocusOwnerImpl;->clearFocus(ZZ)V
+PLandroidx/compose/ui/input/nestedscroll/NestedScrollNode;->onDetach()V
+PLandroidx/compose/ui/input/pointer/SuspendPointerInputElement;->equals(Ljava/lang/Object;)Z
+PLandroidx/compose/ui/input/pointer/SuspendingPointerInputModifierNodeImpl;->onDetach()V
+PLandroidx/compose/ui/input/pointer/SuspendingPointerInputModifierNodeImpl;->resetPointerInputHandler()V
+PLandroidx/compose/ui/layout/OnSizeChangedModifier;->equals(Ljava/lang/Object;)Z
+PLandroidx/compose/ui/modifier/ModifierLocalManager;->invalidate()V
+PLandroidx/compose/ui/node/BackwardsCompatNode;->onDetach()V
+PLandroidx/compose/ui/node/MeasureAndLayoutDelegate$PostponedRequest;-><init>(Landroidx/compose/ui/node/LayoutNode;ZZ)V
+PLandroidx/compose/ui/node/UiApplier;->remove(II)V
+PLandroidx/compose/ui/platform/AndroidComposeView;->getModifierLocalManager()Landroidx/compose/ui/modifier/ModifierLocalManager;
+PLandroidx/compose/ui/platform/AndroidComposeView;->onDetachedFromWindow()V
+PLandroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat$1;->onViewDetachedFromWindow(Landroid/view/View;)V
+PLandroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat$boundsUpdatesEventLoop$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;
+PLandroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat;->onStop(Landroidx/lifecycle/LifecycleOwner;)V
+PLandroidx/compose/ui/platform/DisposableSaveableStateRegistry_androidKt$DisposableSaveableStateRegistry$1;->invoke()Ljava/lang/Object;
+PLandroidx/compose/ui/platform/WeakCache;-><init>(Lcom/google/gson/internal/ConstructorConstructor;Ljava/lang/Class;)V
+PLandroidx/compose/ui/platform/WindowRecomposer_androidKt$createLifecycleAwareWindowRecomposer$1;->onViewDetachedFromWindow(Landroid/view/View;)V
+PLandroidx/compose/ui/platform/WrappedComposition;->dispose()V
+PLandroidx/compose/ui/text/PlatformTextStyle;->equals(Ljava/lang/Object;)Z
+PLandroidx/concurrent/futures/AbstractResolvableFuture$Listener;-><clinit>()V
+PLandroidx/concurrent/futures/AbstractResolvableFuture$SafeAtomicHelper;-><init>(Ljava/util/concurrent/atomic/AtomicReferenceFieldUpdater;Ljava/util/concurrent/atomic/AtomicReferenceFieldUpdater;Ljava/util/concurrent/atomic/AtomicReferenceFieldUpdater;Ljava/util/concurrent/atomic/AtomicReferenceFieldUpdater;Ljava/util/concurrent/atomic/AtomicReferenceFieldUpdater;)V
+PLandroidx/concurrent/futures/AbstractResolvableFuture$SafeAtomicHelper;->casListeners(Landroidx/concurrent/futures/AbstractResolvableFuture;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
+PLandroidx/concurrent/futures/AbstractResolvableFuture$Waiter;-><clinit>()V
+PLandroidx/concurrent/futures/AbstractResolvableFuture$Waiter;-><init>(I)V
+PLandroidx/concurrent/futures/AbstractResolvableFuture;-><clinit>()V
+PLandroidx/concurrent/futures/AbstractResolvableFuture;->complete(Landroidx/concurrent/futures/AbstractResolvableFuture;)V
+PLandroidx/core/view/ViewKt$ancestors$1;-><clinit>()V
+PLandroidx/core/view/ViewKt$ancestors$1;-><init>()V
+PLandroidx/core/view/ViewKt$ancestors$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
+PLandroidx/lifecycle/DefaultLifecycleObserver;->onDestroy(Landroidx/lifecycle/LifecycleOwner;)V
+PLandroidx/lifecycle/DefaultLifecycleObserver;->onStop(Landroidx/lifecycle/LifecycleOwner;)V
+PLandroidx/lifecycle/EmptyActivityLifecycleCallbacks;->onActivityDestroyed(Landroid/app/Activity;)V
+PLandroidx/lifecycle/EmptyActivityLifecycleCallbacks;->onActivityPaused(Landroid/app/Activity;)V
+PLandroidx/lifecycle/EmptyActivityLifecycleCallbacks;->onActivityStopped(Landroid/app/Activity;)V
+PLandroidx/lifecycle/ProcessLifecycleOwner$attach$1;->onActivityPaused(Landroid/app/Activity;)V
+PLandroidx/lifecycle/ProcessLifecycleOwner$attach$1;->onActivityStopped(Landroid/app/Activity;)V
+PLandroidx/lifecycle/ReportFragment$LifecycleCallbacks;->onActivityDestroyed(Landroid/app/Activity;)V
+PLandroidx/lifecycle/ReportFragment$LifecycleCallbacks;->onActivityPaused(Landroid/app/Activity;)V
+PLandroidx/lifecycle/ReportFragment$LifecycleCallbacks;->onActivityPreDestroyed(Landroid/app/Activity;)V
+PLandroidx/lifecycle/ReportFragment$LifecycleCallbacks;->onActivityPrePaused(Landroid/app/Activity;)V
+PLandroidx/lifecycle/ReportFragment$LifecycleCallbacks;->onActivityPreStopped(Landroid/app/Activity;)V
+PLandroidx/lifecycle/ReportFragment$LifecycleCallbacks;->onActivityStopped(Landroid/app/Activity;)V
+PLandroidx/lifecycle/ReportFragment;->onDestroy()V
+PLandroidx/lifecycle/ReportFragment;->onPause()V
+PLandroidx/lifecycle/ReportFragment;->onStop()V
+PLandroidx/metrics/performance/JankStatsApi24Impl;->removeFrameMetricsListenerDelegate(Landroidx/metrics/performance/JankStatsApi24Impl$$ExternalSyntheticLambda0;Landroid/view/Window;)V
+PLandroidx/profileinstaller/ProfileInstaller$$ExternalSyntheticLambda1;-><init>(I)V
+PLandroidx/profileinstaller/ProfileInstallerInitializer$$ExternalSyntheticLambda1;->run()V
+PLandroidx/profileinstaller/ProfileVerifier$Cache;-><init>(IIJJ)V
+PLandroidx/profileinstaller/ProfileVerifier$Cache;->writeOnFile(Ljava/io/File;)V
+PLandroidx/profileinstaller/ProfileVerifier;-><clinit>()V
+PLandroidx/profileinstaller/ProfileVerifier;->setCompilationStatus(IZZ)Landroidx/compose/ui/unit/Dp$Companion;
+PLandroidx/profileinstaller/ProfileVerifier;->writeProfileVerification(Landroid/content/Context;Z)V
+PLandroidx/tv/foundation/lazy/layout/LazyLayoutBeyondBoundsInfo$Interval;->equals(Ljava/lang/Object;)Z
+PLandroidx/tv/foundation/lazy/list/LazyLayoutBeyondBoundsModifierLocal;->getValue()Ljava/lang/Object;
+PLcom/example/tvcomposebasedtests/MainActivity;->onPause()V
+PLcom/google/gson/FieldNamingPolicy$1;-><init>()V
+PLcom/google/gson/FieldNamingPolicy$1;->translateName(Ljava/lang/reflect/Field;)Ljava/lang/String;
+PLcom/google/gson/FieldNamingPolicy$2;-><init>()V
+PLcom/google/gson/FieldNamingPolicy$3;-><init>()V
+PLcom/google/gson/FieldNamingPolicy$4;-><init>()V
+PLcom/google/gson/FieldNamingPolicy$5;-><init>()V
+PLcom/google/gson/FieldNamingPolicy$6;-><init>()V
+PLcom/google/gson/FieldNamingPolicy$7;-><init>()V
+PLcom/google/gson/FieldNamingPolicy;-><clinit>()V
+PLcom/google/gson/FieldNamingPolicy;-><init>(Ljava/lang/String;I)V
+PLcom/google/gson/Gson$1;-><init>(I)V
+PLcom/google/gson/Gson$3;-><init>(I)V
+PLcom/google/gson/Gson$4;-><init>(Lcom/google/gson/TypeAdapter;I)V
+PLcom/google/gson/Gson$FutureTypeAdapter;-><init>()V
+PLcom/google/gson/Gson;-><init>()V
+PLcom/google/gson/Gson;->newJsonWriter(Ljava/io/Writer;)Lcom/google/gson/stream/JsonWriter;
+PLcom/google/gson/Gson;->toJson(Lcom/google/gson/JsonObject;Lcom/google/gson/stream/JsonWriter;)V
+PLcom/google/gson/JsonNull;-><clinit>()V
+PLcom/google/gson/JsonPrimitive;-><init>(Ljava/lang/String;)V
+PLcom/google/gson/ToNumberPolicy$1;-><init>()V
+PLcom/google/gson/ToNumberPolicy$2;-><init>()V
+PLcom/google/gson/ToNumberPolicy$3;-><init>()V
+PLcom/google/gson/ToNumberPolicy$4;-><init>()V
+PLcom/google/gson/ToNumberPolicy;-><clinit>()V
+PLcom/google/gson/ToNumberPolicy;-><init>(Ljava/lang/String;I)V
+PLcom/google/gson/TypeAdapter;->nullSafe()Lcom/google/gson/Gson$4;
+PLcom/google/gson/internal/$Gson$Types$ParameterizedTypeImpl;-><init>(Ljava/lang/reflect/Type;Ljava/lang/reflect/Type;[Ljava/lang/reflect/Type;)V
+PLcom/google/gson/internal/$Gson$Types$ParameterizedTypeImpl;->getActualTypeArguments()[Ljava/lang/reflect/Type;
+PLcom/google/gson/internal/ConstructorConstructor;-><init>(Ljava/util/Map;Ljava/util/List;)V
+PLcom/google/gson/internal/ConstructorConstructor;->checkInstantiable(Ljava/lang/Class;)Ljava/lang/String;
+PLcom/google/gson/internal/ConstructorConstructor;->get(Lcom/google/gson/reflect/TypeToken;)Lcom/google/gson/internal/ObjectConstructor;
+PLcom/google/gson/internal/Excluder;-><clinit>()V
+PLcom/google/gson/internal/Excluder;-><init>()V
+PLcom/google/gson/internal/Excluder;->create(Lcom/google/gson/Gson;Lcom/google/gson/reflect/TypeToken;)Lcom/google/gson/TypeAdapter;
+PLcom/google/gson/internal/Excluder;->excludeClassInStrategy(Z)V
+PLcom/google/gson/internal/Excluder;->isAnonymousOrNonStaticLocal(Ljava/lang/Class;)Z
+PLcom/google/gson/internal/LinkedTreeMap$KeySet$1;-><init>(Landroidx/collection/ArrayMap$EntrySet;)V
+PLcom/google/gson/internal/LinkedTreeMap$KeySet$1;->next()Ljava/lang/Object;
+PLcom/google/gson/internal/LinkedTreeMap$LinkedTreeMapIterator;->nextNode()Lcom/google/gson/internal/LinkedTreeMap$Node;
+PLcom/google/gson/internal/LinkedTreeMap$Node;->getKey()Ljava/lang/Object;
+PLcom/google/gson/internal/LinkedTreeMap;-><clinit>()V
+PLcom/google/gson/internal/bind/ArrayTypeAdapter;-><clinit>()V
+PLcom/google/gson/internal/bind/CollectionTypeAdapterFactory;-><init>(Lcom/google/gson/internal/ConstructorConstructor;I)V
+PLcom/google/gson/internal/bind/CollectionTypeAdapterFactory;->create(Lcom/google/gson/Gson;Lcom/google/gson/reflect/TypeToken;)Lcom/google/gson/TypeAdapter;
+PLcom/google/gson/internal/bind/DateTypeAdapter;-><clinit>()V
+PLcom/google/gson/internal/bind/JsonTreeWriter$1;-><init>()V
+PLcom/google/gson/internal/bind/JsonTreeWriter;-><clinit>()V
+PLcom/google/gson/internal/bind/JsonTreeWriter;->beginObject()V
+PLcom/google/gson/internal/bind/JsonTreeWriter;->value(Ljava/lang/Boolean;)V
+PLcom/google/gson/internal/bind/MapTypeAdapterFactory;-><init>(Lcom/google/gson/internal/ConstructorConstructor;)V
+PLcom/google/gson/internal/bind/MapTypeAdapterFactory;->create(Lcom/google/gson/Gson;Lcom/google/gson/reflect/TypeToken;)Lcom/google/gson/TypeAdapter;
+PLcom/google/gson/internal/bind/NumberTypeAdapter$1;-><init>(ILjava/lang/Object;)V
+PLcom/google/gson/internal/bind/NumberTypeAdapter$1;->create(Lcom/google/gson/Gson;Lcom/google/gson/reflect/TypeToken;)Lcom/google/gson/TypeAdapter;
+PLcom/google/gson/internal/bind/NumberTypeAdapter;-><clinit>()V
+PLcom/google/gson/internal/bind/ObjectTypeAdapter;-><clinit>()V
+PLcom/google/gson/internal/bind/ObjectTypeAdapter;-><init>(Lcom/google/gson/Gson;)V
+PLcom/google/gson/internal/bind/ReflectiveTypeAdapterFactory$1;-><init>(Ljava/lang/String;Ljava/lang/reflect/Field;ZZLjava/lang/reflect/Method;ZLcom/google/gson/TypeAdapter;Lcom/google/gson/Gson;Lcom/google/gson/reflect/TypeToken;)V
+PLcom/google/gson/internal/bind/ReflectiveTypeAdapterFactory$Adapter;-><init>(Ljava/util/LinkedHashMap;)V
+PLcom/google/gson/internal/bind/ReflectiveTypeAdapterFactory;-><init>(Lcom/google/gson/internal/ConstructorConstructor;Lcom/google/gson/internal/Excluder;Lcom/google/gson/internal/bind/CollectionTypeAdapterFactory;Ljava/util/List;)V
+PLcom/google/gson/internal/bind/ReflectiveTypeAdapterFactory;->create(Lcom/google/gson/Gson;Lcom/google/gson/reflect/TypeToken;)Lcom/google/gson/TypeAdapter;
+PLcom/google/gson/internal/bind/ReflectiveTypeAdapterFactory;->getBoundFields(Lcom/google/gson/Gson;Lcom/google/gson/reflect/TypeToken;Ljava/lang/Class;Z)Ljava/util/LinkedHashMap;
+PLcom/google/gson/internal/bind/ReflectiveTypeAdapterFactory;->includeField(Ljava/lang/reflect/Field;Z)Z
+PLcom/google/gson/internal/bind/TypeAdapters$29;-><init>(I)V
+PLcom/google/gson/internal/bind/TypeAdapters$29;->create(Lcom/google/gson/Gson;Lcom/google/gson/reflect/TypeToken;)Lcom/google/gson/TypeAdapter;
+PLcom/google/gson/internal/bind/TypeAdapters$31;-><init>(Ljava/lang/Class;Lcom/google/gson/TypeAdapter;I)V
+PLcom/google/gson/internal/bind/TypeAdapters$31;->create(Lcom/google/gson/Gson;Lcom/google/gson/reflect/TypeToken;)Lcom/google/gson/TypeAdapter;
+PLcom/google/gson/internal/bind/TypeAdapters$32;-><init>(Ljava/lang/Class;Ljava/lang/Class;Lcom/google/gson/TypeAdapter;I)V
+PLcom/google/gson/internal/bind/TypeAdapters$32;->create(Lcom/google/gson/Gson;Lcom/google/gson/reflect/TypeToken;)Lcom/google/gson/TypeAdapter;
+PLcom/google/gson/internal/bind/TypeAdapters$34$1;-><init>(Lcom/google/gson/Gson;Ljava/lang/reflect/Type;Lcom/google/gson/TypeAdapter;Lcom/google/gson/internal/ObjectConstructor;)V
+PLcom/google/gson/internal/bind/TypeAdapters;-><clinit>()V
+PLcom/google/gson/internal/bind/TypeAdapters;->newFactory(Ljava/lang/Class;Lcom/google/gson/TypeAdapter;)Lcom/google/gson/internal/bind/TypeAdapters$31;
+PLcom/google/gson/internal/bind/TypeAdapters;->newFactory(Ljava/lang/Class;Ljava/lang/Class;Lcom/google/gson/TypeAdapter;)Lcom/google/gson/internal/bind/TypeAdapters$32;
+PLcom/google/gson/internal/reflect/ReflectionHelper$RecordNotSupportedHelper;-><init>()V
+PLcom/google/gson/internal/reflect/ReflectionHelper$RecordNotSupportedHelper;->isRecord(Ljava/lang/Class;)Z
+PLcom/google/gson/internal/reflect/ReflectionHelper$RecordSupportedHelper;-><init>()V
+PLcom/google/gson/internal/reflect/ReflectionHelper;-><clinit>()V
+PLcom/google/gson/internal/reflect/ReflectionHelper;->makeAccessible(Ljava/lang/reflect/AccessibleObject;)V
+PLcom/google/gson/internal/sql/SqlDateTypeAdapter;-><clinit>()V
+PLcom/google/gson/internal/sql/SqlTimeTypeAdapter;-><clinit>()V
+PLcom/google/gson/internal/sql/SqlTimestampTypeAdapter;-><clinit>()V
+PLcom/google/gson/internal/sql/SqlTypesSupport;-><clinit>()V
+PLcom/google/gson/stream/JsonWriter;-><clinit>()V
+PLcom/google/gson/stream/JsonWriter;->endArray()V
+PLcom/google/gson/stream/JsonWriter;->name(Ljava/lang/String;)V
+PLcom/google/gson/stream/JsonWriter;->newline()V
+PLkotlin/ResultKt;->SampleTvLazyColumn(ILandroidx/compose/runtime/Composer;I)V
+PLkotlin/ResultKt;->TvLazyColumn(Landroidx/compose/ui/Modifier;Landroidx/tv/foundation/lazy/list/TvLazyListState;Landroidx/compose/foundation/layout/PaddingValuesImpl;ZLandroidx/compose/foundation/layout/Arrangement$Vertical;Landroidx/compose/ui/Alignment$Horizontal;ZLandroidx/tv/foundation/PivotOffsets;Lkotlin/jvm/functions/Function1;Landroidx/compose/runtime/Composer;II)V
+PLkotlin/ResultKt;->checkArgument(Z)V
+PLkotlin/ResultKt;->checkNotPrimitive(Ljava/lang/reflect/Type;)V
+PLkotlin/ResultKt;->equals(Ljava/lang/reflect/Type;Ljava/lang/reflect/Type;)Z
+PLkotlin/ResultKt;->getFilterResult(Ljava/util/List;)V
+PLkotlin/ResultKt;->getGenericSupertype(Ljava/lang/reflect/Type;Ljava/lang/Class;Ljava/lang/Class;)Ljava/lang/reflect/Type;
+PLkotlin/ResultKt;->getSupertype(Ljava/lang/reflect/Type;Ljava/lang/Class;Ljava/lang/Class;)Ljava/lang/reflect/Type;
+PLkotlin/ResultKt;->resolve(Ljava/lang/reflect/Type;Ljava/lang/Class;Ljava/lang/reflect/Type;Ljava/util/HashMap;)Ljava/lang/reflect/Type;
+PLkotlin/ResultKt;->write(Lcom/google/gson/JsonElement;Lcom/google/gson/stream/JsonWriter;)V
+PLkotlin/TuplesKt;-><init>(I)V
+PLkotlin/TuplesKt;-><init>(Ljava/lang/Object;)V
+PLkotlin/TuplesKt;->access$removeEntryAtIndex([Ljava/lang/Object;I)[Ljava/lang/Object;
+PLkotlin/TuplesKt;->asMutableCollection(Ljava/util/LinkedHashSet;)Ljava/util/Collection;
+PLkotlin/TuplesKt;->closeFinally(Ljava/io/Closeable;Ljava/lang/Throwable;)V
+PLkotlin/TuplesKt;->writeProfile(Landroid/content/Context;Landroidx/profileinstaller/ProfileInstaller$$ExternalSyntheticLambda1;Landroidx/profileinstaller/ProfileInstaller$DiagnosticsCallback;Z)V
+PLkotlin/ULong$Companion;->checkPositionIndex$kotlin_stdlib(II)V
+PLkotlin/ULong$Companion;->onResultReceived(ILjava/lang/Object;)V
+PLkotlin/collections/CollectionsKt___CollectionsKt;->minus(Ljava/util/List;Lkotlin/Function;)Ljava/util/ArrayList;
+PLkotlin/coroutines/jvm/internal/BaseContinuationImpl;->releaseIntercepted()V
+PLkotlin/coroutines/jvm/internal/RestrictedContinuationImpl;-><init>(Lkotlin/coroutines/Continuation;)V
+PLkotlin/coroutines/jvm/internal/RestrictedSuspendLambda;-><init>(Lkotlin/coroutines/Continuation;)V
+PLkotlin/sequences/SequenceBuilderIterator;-><init>()V
+PLkotlin/sequences/SequenceBuilderIterator;->getContext()Lkotlin/coroutines/CoroutineContext;
+PLkotlin/sequences/SequenceBuilderIterator;->hasNext()Z
+PLkotlin/sequences/SequenceBuilderIterator;->next()Ljava/lang/Object;
+PLkotlin/sequences/SequenceBuilderIterator;->resumeWith(Ljava/lang/Object;)V
+PLkotlin/sequences/SequenceBuilderIterator;->yield(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)V
+PLkotlin/text/Charsets;-><clinit>()V
+PLkotlinx/coroutines/AbstractCoroutine;->cancellationExceptionMessage()Ljava/lang/String;
+PLkotlinx/coroutines/InvokeOnCompletion;->invoke(Ljava/lang/Throwable;)V
+PLkotlinx/coroutines/JobCancellationException;-><init>(Ljava/lang/String;Ljava/lang/Throwable;Lkotlinx/coroutines/Job;)V
+PLkotlinx/coroutines/JobCancellationException;->equals(Ljava/lang/Object;)Z
+PLkotlinx/coroutines/JobCancellationException;->fillInStackTrace()Ljava/lang/Throwable;
+PLkotlinx/coroutines/JobSupport$Finishing;->isActive()Z
+PLkotlinx/coroutines/JobSupport;->cancellationExceptionMessage()Ljava/lang/String;
+PLkotlinx/coroutines/UndispatchedCoroutine;->afterResume(Ljava/lang/Object;)V
+PLkotlinx/coroutines/flow/FlowKt__ReduceKt$first$3;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;
+PLkotlinx/coroutines/flow/SharedFlowSlot;->freeLocked(Lkotlinx/coroutines/flow/internal/AbstractSharedFlow;)[Lkotlin/coroutines/Continuation;
+PLkotlinx/coroutines/flow/SharingConfig;->clear()V
+PLkotlinx/coroutines/flow/StateFlowSlot;->freeLocked(Lkotlinx/coroutines/flow/internal/AbstractSharedFlow;)[Lkotlin/coroutines/Continuation;
+PLkotlinx/coroutines/flow/internal/AbstractSharedFlow;->freeSlot(Lkotlinx/coroutines/flow/internal/AbstractSharedFlowSlot;)V
+PLkotlinx/coroutines/internal/DispatchedContinuation;->cancelCompletedResult$kotlinx_coroutines_core(Ljava/lang/Object;Ljava/util/concurrent/CancellationException;)V
+PLokhttp3/MediaType;->access$locationOf(Ljava/util/ArrayList;II)I
diff --git a/tv/tv-material/src/androidTest/java/androidx/tv/material3/ChipTest.kt b/tv/tv-material/src/androidTest/java/androidx/tv/material3/ChipTest.kt
index 49fe18f..84899f3 100644
--- a/tv/tv-material/src/androidTest/java/androidx/tv/material3/ChipTest.kt
+++ b/tv/tv-material/src/androidTest/java/androidx/tv/material3/ChipTest.kt
@@ -78,6 +78,33 @@
}
@Test
+ fun assistChip_longClickSemantics() {
+ var count by mutableStateOf(0)
+ rule.setContent {
+ Box {
+ AssistChip(
+ modifier = Modifier.testTag(AssistChipTag),
+ onClick = {},
+ onLongClick = { count++ }
+ ) { Text("Test Text") }
+ }
+ }
+
+ val node = rule.onNodeWithTag(AssistChipTag)
+
+ assert(count == 0)
+
+ node
+ .requestFocus()
+ .assertHasClickAction()
+ .assertIsEnabled()
+ .performLongKeyPress(rule, Key.DirectionCenter)
+ rule.waitForIdle()
+
+ assert(count == 1)
+ }
+
+ @Test
fun assistChip_disabledSemantics() {
rule.setContent {
Box {
@@ -203,6 +230,36 @@
}
@Test
+ fun filterChip_longClickSemantics() {
+ var count by mutableStateOf(0)
+ rule.setContent {
+ Box {
+ FilterChip(
+ modifier = Modifier.testTag(FilterChipTag),
+ onClick = {},
+ onLongClick = { count++ },
+ selected = false
+ ) {
+ Text("Test Text")
+ }
+ }
+ }
+
+ val node = rule.onNodeWithTag(FilterChipTag)
+
+ assert(count == 0)
+
+ node
+ .requestFocus()
+ .assertHasClickAction()
+ .assertIsEnabled()
+ .performLongKeyPress(rule, Key.DirectionCenter)
+ rule.waitForIdle()
+
+ assert(count == 1)
+ }
+
+ @Test
fun filterChip_disabledSemantics() {
rule.setContent {
Box {
@@ -386,6 +443,36 @@
}
@Test
+ fun inputChip_longClickSemantics() {
+ var count by mutableStateOf(0)
+ rule.setContent {
+ Box {
+ InputChip(
+ modifier = Modifier.testTag(InputChipTag),
+ onClick = {},
+ onLongClick = { count++ },
+ selected = false
+ ) {
+ Text("Test Text")
+ }
+ }
+ }
+
+ val node = rule.onNodeWithTag(InputChipTag)
+
+ assert(count == 0)
+
+ node
+ .requestFocus()
+ .assertHasClickAction()
+ .assertIsEnabled()
+ .performLongKeyPress(rule, Key.DirectionCenter)
+ rule.waitForIdle()
+
+ assert(count == 1)
+ }
+
+ @Test
fun inputChip_disabledSemantics() {
rule.setContent {
Box {
@@ -525,6 +612,35 @@
}
@Test
+ fun suggestionChip_longClickSemantics() {
+ var count by mutableStateOf(0)
+ rule.setContent {
+ Box {
+ SuggestionChip(
+ modifier = Modifier.testTag(SuggestionChipTag),
+ onLongClick = { count++ },
+ onClick = {}
+ ) {
+ Text("mvTvSelectableChip")
+ }
+ }
+ }
+
+ val node = rule.onNodeWithTag(SuggestionChipTag)
+
+ assert(count == 0)
+
+ node
+ .requestFocus()
+ .assertHasClickAction()
+ .assertIsEnabled()
+ .performLongKeyPress(rule, Key.DirectionCenter)
+ rule.waitForIdle()
+
+ assert(count == 1)
+ }
+
+ @Test
fun suggestionChip_disabledSemantics() {
rule.setContent {
Box {
diff --git a/tv/tv-material/src/main/baseline-prof.txt b/tv/tv-material/src/main/baseline-prof.txt
new file mode 100644
index 0000000..970cd8b
--- /dev/null
+++ b/tv/tv-material/src/main/baseline-prof.txt
@@ -0,0 +1,5623 @@
+HPLandroidx/collection/ArrayMap$EntrySet;-><init>(Ljava/util/Map;I)V
+HPLandroidx/compose/foundation/layout/SizeElement;->equals(Ljava/lang/Object;)Z
+HPLandroidx/compose/runtime/ComposerImpl$CompositionContextImpl;->unregisterComposer$runtime_release(Landroidx/compose/runtime/Composer;)V
+HPLandroidx/compose/runtime/ComposerImpl$CompositionContextImpl;->unregisterComposition$runtime_release(Landroidx/compose/runtime/CompositionImpl;)V
+HPLandroidx/compose/runtime/ComposerImpl;->dispose$runtime_release()V
+HPLandroidx/compose/runtime/CompositionImpl;->dispose()V
+HPLandroidx/compose/runtime/Recomposer;->unregisterComposition$runtime_release(Landroidx/compose/runtime/CompositionImpl;)V
+HPLandroidx/compose/runtime/SlotWriter$groupSlots$1;-><init>(IILandroidx/compose/runtime/SlotWriter;)V
+HPLandroidx/compose/runtime/SlotWriter$groupSlots$1;->hasNext()Z
+HPLandroidx/compose/runtime/SlotWriter$groupSlots$1;->next()Ljava/lang/Object;
+HPLandroidx/compose/runtime/SlotWriter;->removeGroup()Z
+HPLandroidx/compose/runtime/SlotWriter;->removeGroups(II)Z
+HPLandroidx/compose/runtime/SlotWriter;->removeSlots(III)V
+HPLandroidx/compose/runtime/SlotWriter;->skipGroup()I
+HPLandroidx/compose/runtime/internal/ComposableLambdaImpl;->trackRead(Landroidx/compose/runtime/Composer;)V
+HPLandroidx/compose/runtime/snapshots/TransparentObserverMutableSnapshot;->getCurrentSnapshot()Landroidx/compose/runtime/snapshots/MutableSnapshot;
+HPLandroidx/compose/ui/focus/FocusOwnerImpl$moveFocus$foundNextItem$1;->invoke(Landroidx/compose/ui/layout/BeyondBoundsLayout$BeyondBoundsScope;)Ljava/lang/Boolean;
+HPLandroidx/compose/ui/layout/Placeable$PlacementScope;->placeWithLayer-aW-9-wM$default(Landroidx/compose/ui/layout/Placeable$PlacementScope;Landroidx/compose/ui/layout/Placeable;J)V
+HPLandroidx/compose/ui/modifier/BackwardsCompatLocalMap;->get$ui_release(Landroidx/compose/ui/modifier/ProvidableModifierLocal;)Ljava/lang/Object;
+HPLandroidx/compose/ui/node/LayoutNode;->detach$ui_release()V
+HPLandroidx/compose/ui/node/LayoutNode;->onChildRemoved(Landroidx/compose/ui/node/LayoutNode;)V
+HPLandroidx/compose/ui/node/LayoutNode;->removeAll$ui_release()V
+HPLandroidx/compose/ui/node/LayoutNode;->removeAt$ui_release(II)V
+HPLandroidx/compose/ui/node/MeasureAndLayoutDelegate;->requestRemeasure(Landroidx/compose/ui/node/LayoutNode;Z)Z
+HPLandroidx/compose/ui/node/UiApplier;->clear()V
+HPLandroidx/compose/ui/platform/AndroidComposeView;->getFocusedRect(Landroid/graphics/Rect;)V
+HPLandroidx/tv/foundation/lazy/layout/LazyLayoutBeyondBoundsInfo$Interval;-><init>(II)V
+HPLandroidx/tv/foundation/lazy/list/LazyLayoutBeyondBoundsModifierLocal$layout$2;-><init>(Landroidx/tv/foundation/lazy/list/LazyLayoutBeyondBoundsModifierLocal;Lkotlin/jvm/internal/Ref$ObjectRef;I)V
+HPLandroidx/tv/foundation/lazy/list/LazyLayoutBeyondBoundsModifierLocal$layout$2;->getHasMoreContent()Z
+HPLandroidx/tv/foundation/lazy/list/LazyLayoutBeyondBoundsModifierLocal;->hasMoreContent-FR3nfPY(Landroidx/tv/foundation/lazy/layout/LazyLayoutBeyondBoundsInfo$Interval;I)Z
+HPLandroidx/tv/foundation/lazy/list/LazyLayoutBeyondBoundsModifierLocal;->isForward-4vf7U8o(I)Z
+HPLandroidx/tv/foundation/lazy/list/LazyListBeyondBoundsState;->getFirstPlacedIndex()I
+HPLandroidx/tv/foundation/lazy/list/LazyListBeyondBoundsState;->getHasVisibleItems()Z
+HPLandroidx/tv/foundation/lazy/list/LazyListBeyondBoundsState;->getItemCount()I
+HPLandroidx/tv/foundation/lazy/list/LazyListBeyondBoundsState;->getLastPlacedIndex()I
+HPLandroidx/tv/foundation/lazy/list/LazyListBeyondBoundsState;->remeasure()V
+HPLcom/example/tvcomposebasedtests/JankStatsAggregator;->issueJankReport(Ljava/lang/String;)V
+HPLcom/google/gson/Gson$3;->write(Lcom/google/gson/stream/JsonWriter;Ljava/lang/Boolean;)V
+HPLcom/google/gson/Gson$3;->write(Lcom/google/gson/stream/JsonWriter;Ljava/lang/Number;)V
+HPLcom/google/gson/Gson$3;->write(Lcom/google/gson/stream/JsonWriter;Ljava/lang/Object;)V
+HPLcom/google/gson/Gson;->getAdapter(Lcom/google/gson/reflect/TypeToken;)Lcom/google/gson/TypeAdapter;
+HPLcom/google/gson/JsonArray;-><init>()V
+HPLcom/google/gson/JsonArray;->iterator()Ljava/util/Iterator;
+HPLcom/google/gson/JsonObject;-><init>()V
+HPLcom/google/gson/JsonPrimitive;-><init>(Ljava/lang/Boolean;)V
+HPLcom/google/gson/JsonPrimitive;-><init>(Ljava/lang/Number;)V
+HPLcom/google/gson/JsonPrimitive;->getAsNumber()Ljava/lang/Number;
+HPLcom/google/gson/internal/LinkedTreeMap$LinkedTreeMapIterator;-><init>(Lcom/google/gson/internal/LinkedTreeMap;)V
+HPLcom/google/gson/internal/LinkedTreeMap$LinkedTreeMapIterator;->hasNext()Z
+HPLcom/google/gson/internal/LinkedTreeMap$Node;-><init>(Z)V
+HPLcom/google/gson/internal/LinkedTreeMap$Node;-><init>(ZLcom/google/gson/internal/LinkedTreeMap$Node;Ljava/lang/Object;Lcom/google/gson/internal/LinkedTreeMap$Node;Lcom/google/gson/internal/LinkedTreeMap$Node;)V
+HPLcom/google/gson/internal/LinkedTreeMap$Node;->getValue()Ljava/lang/Object;
+HPLcom/google/gson/internal/LinkedTreeMap;-><init>(Z)V
+HPLcom/google/gson/internal/LinkedTreeMap;->entrySet()Ljava/util/Set;
+HPLcom/google/gson/internal/LinkedTreeMap;->put(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
+HPLcom/google/gson/internal/LinkedTreeMap;->rebalance(Lcom/google/gson/internal/LinkedTreeMap$Node;Z)V
+HPLcom/google/gson/internal/LinkedTreeMap;->replaceInParent(Lcom/google/gson/internal/LinkedTreeMap$Node;Lcom/google/gson/internal/LinkedTreeMap$Node;)V
+HPLcom/google/gson/internal/LinkedTreeMap;->rotateLeft(Lcom/google/gson/internal/LinkedTreeMap$Node;)V
+HPLcom/google/gson/internal/LinkedTreeMap;->rotateRight(Lcom/google/gson/internal/LinkedTreeMap$Node;)V
+HPLcom/google/gson/internal/bind/JsonTreeWriter;-><init>()V
+HPLcom/google/gson/internal/bind/JsonTreeWriter;->beginArray()V
+HPLcom/google/gson/internal/bind/JsonTreeWriter;->endArray()V
+HPLcom/google/gson/internal/bind/JsonTreeWriter;->endObject()V
+HPLcom/google/gson/internal/bind/JsonTreeWriter;->get()Lcom/google/gson/JsonElement;
+HPLcom/google/gson/internal/bind/JsonTreeWriter;->name(Ljava/lang/String;)V
+HPLcom/google/gson/internal/bind/JsonTreeWriter;->peek()Lcom/google/gson/JsonElement;
+HPLcom/google/gson/internal/bind/JsonTreeWriter;->put(Lcom/google/gson/JsonElement;)V
+HPLcom/google/gson/internal/bind/JsonTreeWriter;->value(J)V
+HPLcom/google/gson/internal/bind/ReflectiveTypeAdapterFactory$1;->write(Lcom/google/gson/stream/JsonWriter;Ljava/lang/Object;)V
+HPLcom/google/gson/internal/bind/ReflectiveTypeAdapterFactory$Adapter;->write(Lcom/google/gson/stream/JsonWriter;Ljava/lang/Object;)V
+HPLcom/google/gson/internal/bind/TypeAdapters$34$1;->write(Lcom/google/gson/stream/JsonWriter;Ljava/lang/Object;)V
+HPLcom/google/gson/internal/bind/TypeAdapters$EnumTypeAdapter;-><init>(Lcom/google/gson/Gson;Lcom/google/gson/TypeAdapter;Ljava/lang/reflect/Type;)V
+HPLcom/google/gson/reflect/TypeToken;-><init>(Ljava/lang/reflect/Type;)V
+HPLcom/google/gson/reflect/TypeToken;->equals(Ljava/lang/Object;)Z
+HPLcom/google/gson/reflect/TypeToken;->hashCode()I
+HPLcom/google/gson/stream/JsonWriter;-><init>(Ljava/io/Writer;)V
+HPLcom/google/gson/stream/JsonWriter;->beforeValue()V
+HPLcom/google/gson/stream/JsonWriter;->beginArray()V
+HPLcom/google/gson/stream/JsonWriter;->beginObject()V
+HPLcom/google/gson/stream/JsonWriter;->close(IIC)V
+HPLcom/google/gson/stream/JsonWriter;->endObject()V
+HPLcom/google/gson/stream/JsonWriter;->peek()I
+HPLcom/google/gson/stream/JsonWriter;->string(Ljava/lang/String;)V
+HPLcom/google/gson/stream/JsonWriter;->value(Ljava/lang/Number;)V
+HPLcom/google/gson/stream/JsonWriter;->value(Z)V
+HPLcom/google/gson/stream/JsonWriter;->writeDeferredName()V
+HPLkotlin/ResultKt;->canonicalize(Ljava/lang/reflect/Type;)Ljava/lang/reflect/Type;
+HPLkotlin/ResultKt;->getRawType(Ljava/lang/reflect/Type;)Ljava/lang/Class;
+HPLkotlin/TuplesKt;->fastFilter(Ljava/util/ArrayList;Lkotlin/jvm/functions/Function1;)Ljava/util/ArrayList;
+HPLkotlin/TuplesKt;->removeCurrentGroup(Landroidx/compose/runtime/SlotWriter;Landroidx/compose/runtime/CompositionImpl$RememberEventDispatcher;)V
+HPLkotlin/collections/ArrayDeque;->add(ILjava/lang/Object;)V
+HPLkotlin/collections/CollectionsKt___CollectionsKt;->first(Ljava/util/List;)Ljava/lang/Object;
+HSPL_COROUTINE/ArtificialStackFrames;-><init>(I)V
+HSPL_COROUTINE/ArtificialStackFrames;-><init>(II)V
+HSPLandroidx/activity/ComponentActivity$$ExternalSyntheticLambda0;-><init>(ILjava/lang/Object;)V
+HSPLandroidx/activity/ComponentActivity$$ExternalSyntheticLambda1;-><init>(Landroidx/activity/ComponentActivity;)V
+HSPLandroidx/activity/ComponentActivity$$ExternalSyntheticLambda2;-><init>(ILjava/lang/Object;)V
+HSPLandroidx/activity/ComponentActivity$$ExternalSyntheticLambda3;-><init>(Landroidx/activity/ComponentActivity;)V
+HSPLandroidx/activity/ComponentActivity$$ExternalSyntheticLambda3;->onContextAvailable()V
+HSPLandroidx/activity/ComponentActivity$1;-><init>(Landroid/view/KeyEvent$Callback;I)V
+HSPLandroidx/activity/ComponentActivity$2;-><init>()V
+HSPLandroidx/activity/ComponentActivity$3;-><init>(Landroidx/activity/ComponentActivity;)V
+HSPLandroidx/activity/ComponentActivity$3;->onStateChanged(Landroidx/lifecycle/LifecycleOwner;Landroidx/lifecycle/Lifecycle$Event;)V
+HSPLandroidx/activity/ComponentActivity$4;-><init>(Landroidx/activity/ComponentActivity;)V
+HSPLandroidx/activity/ComponentActivity$4;->onStateChanged(Landroidx/lifecycle/LifecycleOwner;Landroidx/lifecycle/Lifecycle$Event;)V
+HSPLandroidx/activity/ComponentActivity$5;-><init>(Landroidx/activity/ComponentActivity;)V
+HSPLandroidx/activity/ComponentActivity$5;->onStateChanged(Landroidx/lifecycle/LifecycleOwner;Landroidx/lifecycle/Lifecycle$Event;)V
+HSPLandroidx/activity/ComponentActivity$ReportFullyDrawnExecutorApi16Impl;-><init>(Landroidx/activity/ComponentActivity;)V
+HSPLandroidx/activity/ComponentActivity$ReportFullyDrawnExecutorApi16Impl;->onDraw()V
+HSPLandroidx/activity/ComponentActivity$ReportFullyDrawnExecutorApi16Impl;->viewCreated(Landroid/view/View;)V
+HSPLandroidx/activity/ComponentActivity;-><init>()V
+HSPLandroidx/activity/ComponentActivity;->ensureViewModelStore()V
+HSPLandroidx/activity/ComponentActivity;->getLifecycle()Landroidx/lifecycle/LifecycleRegistry;
+HSPLandroidx/activity/ComponentActivity;->getViewModelStore()Landroidx/lifecycle/ViewModelStore;
+HSPLandroidx/activity/ComponentActivity;->initViewTreeOwners()V
+HSPLandroidx/activity/ComponentActivity;->onCreate(Landroid/os/Bundle;)V
+HSPLandroidx/activity/ComponentActivity;->setContentView(Landroid/view/View;Landroid/view/ViewGroup$LayoutParams;)V
+HSPLandroidx/activity/FullyDrawnReporter;-><init>(Landroidx/activity/ComponentActivity$ReportFullyDrawnExecutorApi16Impl;Landroidx/activity/ComponentActivity$$ExternalSyntheticLambda1;)V
+HSPLandroidx/activity/OnBackPressedDispatcher;-><init>(Landroidx/activity/ComponentActivity$1;)V
+HSPLandroidx/activity/compose/ComponentActivityKt;-><clinit>()V
+HSPLandroidx/activity/compose/ComponentActivityKt;->setContent$default(Landroidx/activity/ComponentActivity;Landroidx/compose/runtime/internal/ComposableLambdaImpl;)V
+HSPLandroidx/activity/contextaware/ContextAwareHelper;-><init>()V
+HSPLandroidx/activity/result/ActivityResult$1;-><init>(I)V
+HSPLandroidx/arch/core/executor/ArchTaskExecutor;-><init>()V
+HSPLandroidx/arch/core/executor/ArchTaskExecutor;->getInstance()Landroidx/arch/core/executor/ArchTaskExecutor;
+HSPLandroidx/arch/core/executor/DefaultTaskExecutor$1;-><init>()V
+HSPLandroidx/arch/core/executor/DefaultTaskExecutor;-><init>()V
+HSPLandroidx/arch/core/internal/FastSafeIterableMap;-><init>()V
+HSPLandroidx/arch/core/internal/FastSafeIterableMap;->get(Ljava/lang/Object;)Landroidx/arch/core/internal/SafeIterableMap$Entry;
+HSPLandroidx/arch/core/internal/FastSafeIterableMap;->remove(Ljava/lang/Object;)Ljava/lang/Object;
+HSPLandroidx/arch/core/internal/SafeIterableMap$AscendingIterator;-><init>(Landroidx/arch/core/internal/SafeIterableMap$Entry;Landroidx/arch/core/internal/SafeIterableMap$Entry;I)V
+HSPLandroidx/arch/core/internal/SafeIterableMap$Entry;-><init>(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;
+HSPLandroidx/arch/core/internal/SafeIterableMap$IteratorWithAdditions;-><init>(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;->supportRemove(Landroidx/arch/core/internal/SafeIterableMap$Entry;)V
+HSPLandroidx/arch/core/internal/SafeIterableMap$ListIterator;-><init>(Landroidx/arch/core/internal/SafeIterableMap$Entry;Landroidx/arch/core/internal/SafeIterableMap$Entry;)V
+HSPLandroidx/arch/core/internal/SafeIterableMap$ListIterator;->hasNext()Z
+HSPLandroidx/arch/core/internal/SafeIterableMap;-><init>()V
+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;->remove(Ljava/lang/Object;)Ljava/lang/Object;
+HSPLandroidx/collection/ArraySet;-><clinit>()V
+HSPLandroidx/collection/ArraySet;-><init>()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(ILjava/lang/Object;)I
+HSPLandroidx/collection/ArraySet;->toArray()[Ljava/lang/Object;
+HSPLandroidx/collection/LongSparseArray;-><clinit>()V
+HSPLandroidx/collection/LongSparseArray;-><init>(I)V
+HSPLandroidx/collection/SimpleArrayMap;-><init>()V
+HSPLandroidx/collection/SparseArrayCompat;-><clinit>()V
+HSPLandroidx/collection/SparseArrayCompat;-><init>()V
+HSPLandroidx/compose/animation/FlingCalculator;-><init>(FLandroidx/compose/ui/unit/Density;)V
+HSPLandroidx/compose/animation/FlingCalculatorKt;-><clinit>()V
+HSPLandroidx/compose/animation/SingleValueAnimationKt;-><clinit>()V
+HSPLandroidx/compose/animation/SingleValueAnimationKt;->animateColorAsState-euL9pac(JLjava/lang/String;Landroidx/compose/runtime/Composer;I)Landroidx/compose/runtime/State;
+HSPLandroidx/compose/animation/SplineBasedFloatDecayAnimationSpec;-><init>(Landroidx/compose/ui/unit/Density;)V
+HSPLandroidx/compose/animation/SplineBasedFloatDecayAnimationSpec_androidKt;-><clinit>()V
+HSPLandroidx/compose/animation/core/Animatable$runAnimation$2;-><init>(Landroidx/compose/animation/core/Animatable;Ljava/lang/Object;Landroidx/compose/animation/core/Animation;JLkotlin/jvm/functions/Function1;Lkotlin/coroutines/Continuation;)V
+HSPLandroidx/compose/animation/core/Animatable$runAnimation$2;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
+HSPLandroidx/compose/animation/core/Animatable$runAnimation$2;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;
+HSPLandroidx/compose/animation/core/Animatable;-><init>(Ljava/lang/Object;Landroidx/compose/animation/core/TwoWayConverterImpl;Ljava/lang/Object;)V
+HSPLandroidx/compose/animation/core/Animatable;->animateTo$default(Landroidx/compose/animation/core/Animatable;Ljava/lang/Object;Landroidx/compose/animation/core/AnimationSpec;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
+HSPLandroidx/compose/animation/core/Animatable;->getValue()Ljava/lang/Object;
+HSPLandroidx/compose/animation/core/AnimateAsStateKt$animateValueAsState$2;-><init>(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$3$1;-><init>(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;
+HSPLandroidx/compose/animation/core/AnimateAsStateKt$animateValueAsState$3;-><init>(Lkotlinx/coroutines/channels/Channel;Landroidx/compose/animation/core/Animatable;Landroidx/compose/runtime/State;Landroidx/compose/runtime/State;Lkotlin/coroutines/Continuation;)V
+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;
+HSPLandroidx/compose/animation/core/AnimateAsStateKt;-><clinit>()V
+HSPLandroidx/compose/animation/core/AnimateAsStateKt;->animateDpAsState-AjpBEmI(FLjava/lang/String;Landroidx/compose/runtime/Composer;II)Landroidx/compose/runtime/State;
+HSPLandroidx/compose/animation/core/AnimateAsStateKt;->animateFloatAsState(FLandroidx/compose/animation/core/TweenSpec;Ljava/lang/String;Landroidx/compose/runtime/Composer;II)Landroidx/compose/runtime/State;
+HSPLandroidx/compose/animation/core/AnimateAsStateKt;->animateValueAsState(Ljava/lang/Object;Landroidx/compose/animation/core/TwoWayConverterImpl;Landroidx/compose/animation/core/AnimationSpec;Ljava/lang/Float;Ljava/lang/String;Lkotlin/jvm/functions/Function1;Landroidx/compose/runtime/Composer;II)Landroidx/compose/runtime/State;
+HSPLandroidx/compose/animation/core/Animation;->isFinishedFromNanos(J)Z
+HSPLandroidx/compose/animation/core/AnimationEndReason$EnumUnboxingLocalUtility;-><clinit>()V
+HSPLandroidx/compose/animation/core/AnimationEndReason$EnumUnboxingLocalUtility;->compareTo(II)I
+HSPLandroidx/compose/animation/core/AnimationEndReason$EnumUnboxingLocalUtility;->ordinal(I)I
+HSPLandroidx/compose/animation/core/AnimationEndReason$EnumUnboxingLocalUtility;->values(I)[I
+HSPLandroidx/compose/animation/core/AnimationResult;-><init>(Landroidx/compose/animation/core/AnimationState;I)V
+HSPLandroidx/compose/animation/core/AnimationScope;-><init>(Ljava/lang/Object;Landroidx/compose/animation/core/TwoWayConverterImpl;Landroidx/compose/animation/core/AnimationVector;JLjava/lang/Object;JLandroidx/compose/animation/core/SuspendAnimationKt$animate$7;)V
+HSPLandroidx/compose/animation/core/AnimationScope;->getValue()Ljava/lang/Object;
+HSPLandroidx/compose/animation/core/AnimationState;-><init>(Landroidx/compose/animation/core/TwoWayConverterImpl;Ljava/lang/Object;Landroidx/compose/animation/core/AnimationVector;I)V
+HSPLandroidx/compose/animation/core/AnimationState;-><init>(Landroidx/compose/animation/core/TwoWayConverterImpl;Ljava/lang/Object;Landroidx/compose/animation/core/AnimationVector;JJZ)V
+HSPLandroidx/compose/animation/core/AnimationState;->getValue()Ljava/lang/Object;
+HSPLandroidx/compose/animation/core/AnimationVector1D;-><init>(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;->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(FI)V
+HSPLandroidx/compose/animation/core/AnimationVector2D;-><init>(FF)V
+HSPLandroidx/compose/animation/core/AnimationVector3D;-><init>(FFF)V
+HSPLandroidx/compose/animation/core/AnimationVector4D;-><init>(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;->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(FI)V
+HSPLandroidx/compose/animation/core/ComplexDouble;-><init>(DD)V
+HSPLandroidx/compose/animation/core/CubicBezierEasing;-><init>(FFF)V
+HSPLandroidx/compose/animation/core/CubicBezierEasing;->equals(Ljava/lang/Object;)Z
+HSPLandroidx/compose/animation/core/CubicBezierEasing;->transform(F)F
+HSPLandroidx/compose/animation/core/DecayAnimationSpecImpl;-><init>(Landroidx/compose/animation/SplineBasedFloatDecayAnimationSpec;)V
+HSPLandroidx/compose/animation/core/EasingKt;-><clinit>()V
+HSPLandroidx/compose/animation/core/FloatSpringSpec;-><init>(FFF)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
+HSPLandroidx/compose/animation/core/FloatTweenSpec;-><init>(IILandroidx/compose/animation/core/Easing;)V
+HSPLandroidx/compose/animation/core/FloatTweenSpec;->getValueFromNanos(JFFF)F
+HSPLandroidx/compose/animation/core/FloatTweenSpec;->getVelocityFromNanos(JFFF)F
+HSPLandroidx/compose/animation/core/MutatorMutex$Mutator;-><init>(ILkotlinx/coroutines/Job;)V
+HSPLandroidx/compose/animation/core/MutatorMutex$mutate$2;-><init>(ILandroidx/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;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;
+HSPLandroidx/compose/animation/core/MutatorMutex;-><init>()V
+HSPLandroidx/compose/animation/core/SpringSimulation;-><init>()V
+HSPLandroidx/compose/animation/core/SpringSimulation;->updateValues-IJZedt4$animation_core_release(FFJ)J
+HSPLandroidx/compose/animation/core/SpringSpec;-><init>(FFLjava/lang/Object;)V
+HSPLandroidx/compose/animation/core/SpringSpec;->equals(Ljava/lang/Object;)Z
+HSPLandroidx/compose/animation/core/SpringSpec;->vectorize(Landroidx/compose/animation/core/TwoWayConverterImpl;)Landroidx/compose/animation/core/VectorizedFiniteAnimationSpec;
+HSPLandroidx/compose/animation/core/SuspendAnimationKt$animate$4;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;
+HSPLandroidx/compose/animation/core/SuspendAnimationKt$animate$6;-><init>(Lkotlin/jvm/internal/Ref$ObjectRef;Ljava/lang/Object;Landroidx/compose/animation/core/Animation;Landroidx/compose/animation/core/AnimationVector;Landroidx/compose/animation/core/AnimationState;FLkotlin/jvm/functions/Function1;)V
+HSPLandroidx/compose/animation/core/SuspendAnimationKt$animate$6;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
+HSPLandroidx/compose/animation/core/SuspendAnimationKt$animate$7;-><init>(Landroidx/compose/animation/core/AnimationState;I)V
+HSPLandroidx/compose/animation/core/SuspendAnimationKt$animate$9;-><init>(Lkotlin/jvm/internal/Ref$ObjectRef;FLandroidx/compose/animation/core/Animation;Landroidx/compose/animation/core/AnimationState;Lkotlin/jvm/functions/Function1;)V
+HSPLandroidx/compose/animation/core/SuspendAnimationKt$animate$9;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
+HSPLandroidx/compose/animation/core/TargetBasedAnimation;-><init>(Landroidx/compose/animation/core/AnimationSpec;Landroidx/compose/animation/core/TwoWayConverterImpl;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/TwoWayConverterImpl;
+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
+HSPLandroidx/compose/animation/core/TweenSpec;-><init>(IILandroidx/compose/animation/core/Easing;)V
+HSPLandroidx/compose/animation/core/TweenSpec;->equals(Ljava/lang/Object;)Z
+HSPLandroidx/compose/animation/core/TweenSpec;->vectorize(Landroidx/compose/animation/core/TwoWayConverterImpl;)Landroidx/compose/animation/core/VectorizedFiniteAnimationSpec;
+HSPLandroidx/compose/animation/core/TwoWayConverterImpl;-><init>(Landroidx/compose/foundation/ImageKt$Image$1$1;Lkotlin/jvm/functions/Function1;)V
+HSPLandroidx/compose/animation/core/VectorConvertersKt;-><clinit>()V
+HSPLandroidx/compose/animation/core/VectorizedFloatAnimationSpec;-><init>(Landroidx/compose/animation/core/FloatAnimationSpec;)V
+HSPLandroidx/compose/animation/core/VectorizedFloatAnimationSpec;-><init>(Landroidx/compose/ui/input/pointer/util/PointerIdArray;)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;
+HSPLandroidx/compose/animation/core/VectorizedSpringSpec;-><init>(FFLandroidx/compose/animation/core/AnimationVector;)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()V
+HSPLandroidx/compose/animation/core/VectorizedTweenSpec;-><init>(IILandroidx/compose/animation/core/Easing;)V
+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;
+HSPLandroidx/compose/animation/core/VisibilityThresholdsKt;-><clinit>()V
+HSPLandroidx/compose/foundation/AndroidEdgeEffectOverscrollEffect$effectModifier$1;-><init>(Landroidx/compose/foundation/AndroidEdgeEffectOverscrollEffect;Lkotlin/coroutines/Continuation;)V
+HSPLandroidx/compose/foundation/AndroidEdgeEffectOverscrollEffect$onNewSize$1;-><init>(Landroidx/compose/foundation/AndroidEdgeEffectOverscrollEffect;)V
+HSPLandroidx/compose/foundation/AndroidEdgeEffectOverscrollEffect$onNewSize$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
+HSPLandroidx/compose/foundation/AndroidEdgeEffectOverscrollEffect;-><init>(Landroid/content/Context;Landroidx/compose/foundation/OverscrollConfiguration;)V
+HSPLandroidx/compose/foundation/AndroidEdgeEffectOverscrollEffect;->animateToRelease()V
+HSPLandroidx/compose/foundation/AndroidEdgeEffectOverscrollEffect;->getEffectModifier()Landroidx/compose/ui/Modifier;
+HSPLandroidx/compose/foundation/AndroidEdgeEffectOverscrollEffect;->invalidateOverscroll()V
+HSPLandroidx/compose/foundation/AndroidOverscrollKt;-><clinit>()V
+HSPLandroidx/compose/foundation/Api31Impl;-><clinit>()V
+HSPLandroidx/compose/foundation/Api31Impl;->create(Landroid/content/Context;Landroid/util/AttributeSet;)Landroid/widget/EdgeEffect;
+HSPLandroidx/compose/foundation/Api31Impl;->getDistance(Landroid/widget/EdgeEffect;)F
+HSPLandroidx/compose/foundation/BackgroundElement;-><init>(JLandroidx/compose/ui/graphics/Shape;)V
+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/ui/Modifier$Node;)V
+HSPLandroidx/compose/foundation/BackgroundNode;-><init>(JLandroidx/compose/ui/graphics/Brush;FLandroidx/compose/ui/graphics/Shape;)V
+HSPLandroidx/compose/foundation/BackgroundNode;->draw(Landroidx/compose/ui/graphics/drawscope/ContentDrawScope;)V
+HSPLandroidx/compose/foundation/BorderKt$drawRectBorder$1;-><init>(Landroidx/compose/ui/graphics/Brush;JJLkotlin/ResultKt;)V
+HSPLandroidx/compose/foundation/BorderKt$drawRectBorder$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
+HSPLandroidx/compose/foundation/BorderModifierNode;-><init>(FLandroidx/compose/ui/graphics/Brush;Landroidx/compose/ui/graphics/Shape;)V
+HSPLandroidx/compose/foundation/BorderModifierNodeElement;-><init>(FLandroidx/compose/ui/graphics/Brush;Landroidx/compose/ui/graphics/Shape;)V
+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/ui/Modifier$Node;)V
+HSPLandroidx/compose/foundation/BorderStroke;-><init>(FLandroidx/compose/ui/graphics/SolidColor;)V
+HSPLandroidx/compose/foundation/ClipScrollableContainerKt;-><clinit>()V
+HSPLandroidx/compose/foundation/DrawOverscrollModifier;-><init>(Landroidx/compose/foundation/AndroidEdgeEffectOverscrollEffect;)V
+HSPLandroidx/compose/foundation/DrawOverscrollModifier;->draw(Landroidx/compose/ui/graphics/drawscope/ContentDrawScope;)V
+HSPLandroidx/compose/foundation/FocusableElement;-><init>(Landroidx/compose/foundation/interaction/MutableInteractionSourceImpl;)V
+HSPLandroidx/compose/foundation/FocusableElement;->create()Landroidx/compose/ui/Modifier$Node;
+HSPLandroidx/compose/foundation/FocusableElement;->equals(Ljava/lang/Object;)Z
+HSPLandroidx/compose/foundation/FocusableInteractionNode$emitWithFallback$1;-><init>(Landroidx/compose/foundation/interaction/MutableInteractionSourceImpl;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;
+HSPLandroidx/compose/foundation/FocusableInteractionNode;-><init>(Landroidx/compose/foundation/interaction/MutableInteractionSourceImpl;)V
+HSPLandroidx/compose/foundation/FocusableInteractionNode;->emitWithFallback(Landroidx/compose/foundation/interaction/MutableInteractionSourceImpl;Landroidx/compose/foundation/interaction/Interaction;)V
+HSPLandroidx/compose/foundation/FocusableKt$FocusableInNonTouchModeElement$1;-><init>()V
+HSPLandroidx/compose/foundation/FocusableKt;-><clinit>()V
+HSPLandroidx/compose/foundation/FocusableKt;->focusable$default(Landroidx/compose/ui/Modifier;Landroidx/compose/foundation/interaction/MutableInteractionSourceImpl;I)Landroidx/compose/ui/Modifier;
+HSPLandroidx/compose/foundation/FocusableNode$onFocusEvent$1;-><init>(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;
+HSPLandroidx/compose/foundation/FocusableNode;-><init>(Landroidx/compose/foundation/interaction/MutableInteractionSourceImpl;)V
+HSPLandroidx/compose/foundation/FocusableNode;->onFocusEvent(Landroidx/compose/ui/focus/FocusStateImpl;)V
+HSPLandroidx/compose/foundation/FocusableNode;->onGloballyPositioned(Landroidx/compose/ui/node/NodeCoordinator;)V
+HSPLandroidx/compose/foundation/FocusableNode;->onPlaced(Landroidx/compose/ui/node/NodeCoordinator;)V
+HSPLandroidx/compose/foundation/FocusablePinnableContainerNode;->onReset()V
+HSPLandroidx/compose/foundation/FocusableSemanticsNode;-><init>()V
+HSPLandroidx/compose/foundation/FocusedBoundsKt;-><clinit>()V
+HSPLandroidx/compose/foundation/FocusedBoundsNode;->onGloballyPositioned(Landroidx/compose/ui/node/NodeCoordinator;)V
+HSPLandroidx/compose/foundation/FocusedBoundsObserverNode;-><init>(Lkotlin/collections/AbstractMap$toString$1;)V
+HSPLandroidx/compose/foundation/FocusedBoundsObserverNode;->getProvidedValues()Landroidx/tv/material3/TabKt;
+HSPLandroidx/compose/foundation/FocusedBoundsObserverNode;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
+HSPLandroidx/compose/foundation/ImageKt$Image$1$1;-><clinit>()V
+HSPLandroidx/compose/foundation/ImageKt$Image$1$1;-><init>(I)V
+HSPLandroidx/compose/foundation/ImageKt$Image$1$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
+HSPLandroidx/compose/foundation/ImageKt$Image$1;-><clinit>()V
+HSPLandroidx/compose/foundation/ImageKt$Image$1;->measure-3p2s80s(Landroidx/compose/ui/layout/MeasureScope;Ljava/util/List;J)Landroidx/compose/ui/layout/MeasureResult;
+HSPLandroidx/compose/foundation/ImageKt;->Image(Landroidx/compose/ui/graphics/painter/Painter;Ljava/lang/String;Landroidx/compose/ui/Modifier;Landroidx/compose/ui/Alignment;Landroidx/compose/ui/layout/ContentScale;FLandroidx/compose/ui/graphics/BlendModeColorFilter;Landroidx/compose/runtime/Composer;II)V
+HSPLandroidx/compose/foundation/ImageKt;->background-bw27NRU(Landroidx/compose/ui/Modifier;JLandroidx/compose/ui/graphics/Shape;)Landroidx/compose/ui/Modifier;
+HSPLandroidx/compose/foundation/ImageKt;->checkScrollableContainerConstraints-K40F9xA(JLandroidx/compose/foundation/gestures/Orientation;)V
+HSPLandroidx/compose/foundation/ImageKt;->create(Landroid/content/Context;)Landroid/widget/EdgeEffect;
+HSPLandroidx/compose/foundation/ImageKt;->getDistanceCompat(Landroid/widget/EdgeEffect;)F
+HSPLandroidx/compose/foundation/IndicationKt$indication$2;-><init>(Ljava/lang/Object;ILjava/lang/Object;)V
+HSPLandroidx/compose/foundation/IndicationKt$indication$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
+HSPLandroidx/compose/foundation/IndicationKt;-><clinit>()V
+HSPLandroidx/compose/foundation/IndicationModifier;-><init>(Landroidx/compose/foundation/IndicationInstance;)V
+HSPLandroidx/compose/foundation/IndicationModifier;->draw(Landroidx/compose/ui/graphics/drawscope/ContentDrawScope;)V
+HSPLandroidx/compose/foundation/MutatePriority;-><clinit>()V
+HSPLandroidx/compose/foundation/MutatePriority;-><init>(ILjava/lang/String;)V
+HSPLandroidx/compose/foundation/MutatorMutex$Mutator;-><init>(Landroidx/compose/foundation/MutatePriority;Lkotlinx/coroutines/Job;)V
+HSPLandroidx/compose/foundation/MutatorMutex$mutateWith$2;-><init>(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;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;
+HSPLandroidx/compose/foundation/MutatorMutex;-><init>()V
+HSPLandroidx/compose/foundation/OverscrollConfiguration;-><init>()V
+HSPLandroidx/compose/foundation/OverscrollConfigurationKt;-><clinit>()V
+HSPLandroidx/compose/foundation/ScrollKt$rememberScrollState$1$1;-><init>(I)V
+HSPLandroidx/compose/foundation/ScrollKt$rememberScrollState$1$1;->invoke()Ljava/lang/Object;
+HSPLandroidx/compose/foundation/ScrollKt$scroll$2$semantics$1$1;-><init>(ZLkotlinx/coroutines/CoroutineScope;Landroidx/tv/foundation/lazy/layout/LazyLayoutSemanticState;)V
+HSPLandroidx/compose/foundation/ScrollKt$scroll$2$semantics$1;-><init>(ZZZLandroidx/compose/foundation/ScrollState;Lkotlinx/coroutines/CoroutineScope;)V
+HSPLandroidx/compose/foundation/ScrollKt$scroll$2;-><init>(Landroidx/compose/foundation/ScrollState;Landroidx/compose/foundation/gestures/FlingBehavior;ZZ)V
+HSPLandroidx/compose/foundation/ScrollKt$scroll$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
+HSPLandroidx/compose/foundation/ScrollState$canScrollForward$2;-><init>(Landroidx/compose/foundation/ScrollState;I)V
+HSPLandroidx/compose/foundation/ScrollState;-><clinit>()V
+HSPLandroidx/compose/foundation/ScrollState;-><init>(I)V
+HSPLandroidx/compose/foundation/ScrollState;->getValue()I
+HSPLandroidx/compose/foundation/ScrollingLayoutElement;-><init>(Landroidx/compose/foundation/ScrollState;ZZ)V
+HSPLandroidx/compose/foundation/ScrollingLayoutElement;->create()Landroidx/compose/ui/Modifier$Node;
+HSPLandroidx/compose/foundation/ScrollingLayoutNode;-><init>(Landroidx/compose/foundation/ScrollState;ZZ)V
+HSPLandroidx/compose/foundation/ScrollingLayoutNode;->measure-3p2s80s(Landroidx/compose/ui/layout/MeasureScope;Landroidx/compose/ui/layout/Measurable;J)Landroidx/compose/ui/layout/MeasureResult;
+HSPLandroidx/compose/foundation/gestures/BringIntoViewRequestPriorityQueue;-><init>()V
+HSPLandroidx/compose/foundation/gestures/BringIntoViewRequestPriorityQueue;->cancelAndRemoveAll(Ljava/util/concurrent/CancellationException;)V
+HSPLandroidx/compose/foundation/gestures/BringIntoViewSpec$Companion$DefaultBringIntoViewSpec$1;-><init>()V
+HSPLandroidx/compose/foundation/gestures/BringIntoViewSpec$Companion$DefaultBringIntoViewSpec$1;->calculateScrollDistance(FFF)F
+HSPLandroidx/compose/foundation/gestures/BringIntoViewSpec$Companion$DefaultBringIntoViewSpec$1;->getScrollAnimationSpec()Landroidx/compose/animation/core/AnimationSpec;
+HSPLandroidx/compose/foundation/gestures/BringIntoViewSpec$Companion;-><clinit>()V
+HSPLandroidx/compose/foundation/gestures/BringIntoViewSpec;-><clinit>()V
+HSPLandroidx/compose/foundation/gestures/ContentInViewNode$Request;-><init>(Landroidx/compose/foundation/relocation/BringIntoViewResponderNode$bringChildIntoView$2$1$1;Lkotlinx/coroutines/CancellableContinuationImpl;)V
+HSPLandroidx/compose/foundation/gestures/ContentInViewNode$launchAnimation$2$1;-><init>(Landroidx/compose/foundation/gestures/ContentInViewNode;Lkotlinx/coroutines/Job;Lkotlin/coroutines/Continuation;)V
+HSPLandroidx/compose/foundation/gestures/ContentInViewNode$launchAnimation$2$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation;
+HSPLandroidx/compose/foundation/gestures/ContentInViewNode$launchAnimation$2$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
+HSPLandroidx/compose/foundation/gestures/ContentInViewNode$launchAnimation$2$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;
+HSPLandroidx/compose/foundation/gestures/ContentInViewNode$launchAnimation$2;-><init>(Landroidx/compose/foundation/gestures/ContentInViewNode;Lkotlin/coroutines/Continuation;)V
+HSPLandroidx/compose/foundation/gestures/ContentInViewNode$launchAnimation$2;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation;
+HSPLandroidx/compose/foundation/gestures/ContentInViewNode$launchAnimation$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
+HSPLandroidx/compose/foundation/gestures/ContentInViewNode$launchAnimation$2;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;
+HSPLandroidx/compose/foundation/gestures/ContentInViewNode;-><init>(Landroidx/compose/foundation/gestures/Orientation;Landroidx/compose/foundation/gestures/ScrollableState;ZLandroidx/compose/foundation/gestures/BringIntoViewSpec;)V
+HSPLandroidx/compose/foundation/gestures/ContentInViewNode;->access$calculateScrollDelta(Landroidx/compose/foundation/gestures/ContentInViewNode;)F
+HSPLandroidx/compose/foundation/gestures/ContentInViewNode;->isMaxVisible-O0kMr_c(Landroidx/compose/ui/geometry/Rect;J)Z
+HSPLandroidx/compose/foundation/gestures/ContentInViewNode;->launchAnimation()V
+HSPLandroidx/compose/foundation/gestures/ContentInViewNode;->onPlaced(Landroidx/compose/ui/node/NodeCoordinator;)V
+HSPLandroidx/compose/foundation/gestures/ContentInViewNode;->onRemeasured-ozmzZPI(J)V
+HSPLandroidx/compose/foundation/gestures/ContentInViewNode;->relocationOffset-BMxPBkI(Landroidx/compose/ui/geometry/Rect;J)J
+HSPLandroidx/compose/foundation/gestures/DefaultFlingBehavior;-><init>(Landroidx/compose/animation/core/DecayAnimationSpecImpl;)V
+HSPLandroidx/compose/foundation/gestures/DefaultScrollableState$scroll$2$1;-><init>(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(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
+HSPLandroidx/compose/foundation/gestures/DefaultScrollableState$scroll$2$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;
+HSPLandroidx/compose/foundation/gestures/DefaultScrollableState$scroll$2;-><init>(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;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;
+HSPLandroidx/compose/foundation/gestures/DefaultScrollableState$scrollScope$1;-><init>(Landroidx/compose/foundation/gestures/DefaultScrollableState;)V
+HSPLandroidx/compose/foundation/gestures/DefaultScrollableState$scrollScope$1;->scrollBy(F)F
+HSPLandroidx/compose/foundation/gestures/DefaultScrollableState;-><init>(Lkotlin/collections/AbstractMap$toString$1;)V
+HSPLandroidx/compose/foundation/gestures/DefaultScrollableState;->scroll(Landroidx/compose/foundation/MutatePriority;Lkotlin/jvm/functions/Function2;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
+HSPLandroidx/compose/foundation/gestures/DraggableKt$awaitDrag$2;-><init>(ILjava/lang/Object;Ljava/lang/Object;Z)V
+HSPLandroidx/compose/foundation/gestures/DraggableKt$awaitDrag$2;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
+HSPLandroidx/compose/foundation/gestures/DraggableNode$onAttach$1;-><init>(Landroidx/compose/foundation/gestures/DraggableNode;Lkotlin/coroutines/Continuation;)V
+HSPLandroidx/compose/foundation/gestures/DraggableNode$onAttach$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation;
+HSPLandroidx/compose/foundation/gestures/DraggableNode$onAttach$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;
+HSPLandroidx/compose/foundation/gestures/DraggableNode$pointerInputNode$1;-><init>(Landroidx/compose/foundation/gestures/DraggableNode;Lkotlin/coroutines/Continuation;)V
+HSPLandroidx/compose/foundation/gestures/DraggableNode;-><init>(Landroidx/compose/foundation/gestures/ScrollDraggableState;Landroidx/compose/foundation/gestures/Orientation;ZLandroidx/compose/foundation/interaction/MutableInteractionSourceImpl;Landroidx/compose/ui/node/LayoutNode$_foldedChildren$1;Landroidx/compose/foundation/gestures/ScrollableKt$NoOpOnDragStarted$1;Landroidx/compose/foundation/gestures/ScrollableGesturesNode$onDragStopped$1;)V
+HSPLandroidx/compose/foundation/gestures/DraggableNode;->onAttach()V
+HSPLandroidx/compose/foundation/gestures/ModifierLocalScrollableContainerProvider;-><init>(Z)V
+HSPLandroidx/compose/foundation/gestures/ModifierLocalScrollableContainerProvider;->getProvidedValues()Landroidx/tv/material3/TabKt;
+HSPLandroidx/compose/foundation/gestures/MouseWheelScrollNode$1;-><init>(Landroidx/compose/foundation/gestures/MouseWheelScrollNode;Lkotlin/coroutines/Continuation;)V
+HSPLandroidx/compose/foundation/gestures/MouseWheelScrollNode;-><init>(Landroidx/compose/foundation/gestures/ScrollingLogic;)V
+HSPLandroidx/compose/foundation/gestures/MouseWheelScrollNode;->onAttach()V
+HSPLandroidx/compose/foundation/gestures/Orientation;-><clinit>()V
+HSPLandroidx/compose/foundation/gestures/Orientation;-><init>(ILjava/lang/String;)V
+HSPLandroidx/compose/foundation/gestures/ScrollDraggableState;-><init>(Landroidx/compose/foundation/gestures/ScrollingLogic;)V
+HSPLandroidx/compose/foundation/gestures/ScrollableElement;-><init>(Landroidx/compose/foundation/gestures/ScrollableState;Landroidx/compose/foundation/gestures/Orientation;Landroidx/compose/foundation/OverscrollEffect;ZZLandroidx/compose/foundation/gestures/FlingBehavior;Landroidx/compose/foundation/interaction/MutableInteractionSourceImpl;Landroidx/compose/foundation/gestures/BringIntoViewSpec;)V
+HSPLandroidx/compose/foundation/gestures/ScrollableElement;->create()Landroidx/compose/ui/Modifier$Node;
+HSPLandroidx/compose/foundation/gestures/ScrollableGesturesNode$onDragStopped$1;-><init>(Landroidx/compose/foundation/gestures/ScrollableGesturesNode;Lkotlin/coroutines/Continuation;)V
+HSPLandroidx/compose/foundation/gestures/ScrollableGesturesNode;-><init>(Landroidx/compose/foundation/gestures/ScrollingLogic;Landroidx/compose/foundation/gestures/Orientation;ZLandroidx/compose/ui/input/nestedscroll/NestedScrollDispatcher;Landroidx/compose/foundation/interaction/MutableInteractionSourceImpl;)V
+HSPLandroidx/compose/foundation/gestures/ScrollableKt$NoOpOnDragStarted$1;-><init>(ILkotlin/coroutines/Continuation;)V
+HSPLandroidx/compose/foundation/gestures/ScrollableKt$UnityDensity$1;->getDensity()F
+HSPLandroidx/compose/foundation/gestures/ScrollableKt;-><clinit>()V
+HSPLandroidx/compose/foundation/gestures/ScrollableKt;->scrollable$default(Landroidx/compose/foundation/gestures/ScrollableState;Landroidx/compose/foundation/gestures/Orientation;Landroidx/compose/foundation/OverscrollEffect;ZZLandroidx/compose/foundation/gestures/FlingBehavior;Landroidx/compose/foundation/interaction/MutableInteractionSourceImpl;Landroidx/tv/foundation/TvBringIntoViewSpec;I)Landroidx/compose/ui/Modifier;
+HSPLandroidx/compose/foundation/gestures/ScrollableNestedScrollConnection;-><init>(Landroidx/compose/foundation/gestures/ScrollingLogic;Z)V
+HSPLandroidx/compose/foundation/gestures/ScrollableNode;-><init>(Landroidx/compose/foundation/gestures/ScrollableState;Landroidx/compose/foundation/gestures/Orientation;Landroidx/compose/foundation/OverscrollEffect;ZZLandroidx/compose/foundation/gestures/FlingBehavior;Landroidx/compose/foundation/interaction/MutableInteractionSourceImpl;Landroidx/compose/foundation/gestures/BringIntoViewSpec;)V
+HSPLandroidx/compose/foundation/gestures/ScrollableNode;->applyFocusProperties(Landroidx/compose/ui/focus/FocusProperties;)V
+HSPLandroidx/compose/foundation/gestures/ScrollableNode;->onAttach()V
+HSPLandroidx/compose/foundation/gestures/ScrollableState;->scroll$default(Landroidx/compose/foundation/gestures/ScrollableState;Lkotlin/jvm/functions/Function2;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
+HSPLandroidx/compose/foundation/gestures/ScrollingLogic;-><init>(Landroidx/compose/foundation/gestures/ScrollableState;Landroidx/compose/foundation/gestures/Orientation;Landroidx/compose/foundation/OverscrollEffect;ZLandroidx/compose/foundation/gestures/FlingBehavior;Landroidx/compose/ui/input/nestedscroll/NestedScrollDispatcher;)V
+HSPLandroidx/compose/foundation/gestures/UpdatableAnimationState$animateToZero$1;-><init>(Landroidx/compose/foundation/gestures/UpdatableAnimationState;Lkotlin/coroutines/Continuation;)V
+HSPLandroidx/compose/foundation/gestures/UpdatableAnimationState$animateToZero$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;
+HSPLandroidx/compose/foundation/gestures/UpdatableAnimationState$animateToZero$4;-><init>(Landroidx/compose/foundation/gestures/UpdatableAnimationState;FLkotlin/jvm/functions/Function1;)V
+HSPLandroidx/compose/foundation/gestures/UpdatableAnimationState$animateToZero$4;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
+HSPLandroidx/compose/foundation/gestures/UpdatableAnimationState;-><clinit>()V
+HSPLandroidx/compose/foundation/gestures/UpdatableAnimationState;-><init>(Landroidx/compose/animation/core/AnimationSpec;)V
+HSPLandroidx/compose/foundation/gestures/UpdatableAnimationState;->animateToZero(Landroidx/compose/foundation/layout/OffsetNode$measure$1;Landroidx/compose/ui/node/LayoutNode$_foldedChildren$1;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
+HSPLandroidx/compose/foundation/interaction/FocusInteraction$Unfocus;-><init>(Landroidx/compose/foundation/interaction/FocusInteraction$Focus;)V
+HSPLandroidx/compose/foundation/interaction/FocusInteractionKt$collectIsFocusedAsState$1$1$1;-><init>(Ljava/util/ArrayList;Landroidx/compose/runtime/MutableState;I)V
+HSPLandroidx/compose/foundation/interaction/FocusInteractionKt$collectIsFocusedAsState$1$1$1;->emit(Landroidx/compose/foundation/interaction/Interaction;)Ljava/lang/Object;
+HSPLandroidx/compose/foundation/interaction/FocusInteractionKt$collectIsFocusedAsState$1$1$1;->emit(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
+HSPLandroidx/compose/foundation/interaction/FocusInteractionKt$collectIsFocusedAsState$1$1;-><init>(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;
+HSPLandroidx/compose/foundation/interaction/MutableInteractionSourceImpl;-><init>()V
+HSPLandroidx/compose/foundation/interaction/MutableInteractionSourceImpl;->emit(Landroidx/compose/foundation/interaction/Interaction;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
+HSPLandroidx/compose/foundation/interaction/PressInteraction$Press;-><init>(J)V
+HSPLandroidx/compose/foundation/interaction/PressInteractionKt$collectIsPressedAsState$1$1;-><init>(Landroidx/compose/foundation/interaction/InteractionSource;Landroidx/compose/runtime/MutableState;Lkotlin/coroutines/Continuation;)V
+HSPLandroidx/compose/foundation/interaction/PressInteractionKt$collectIsPressedAsState$1$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation;
+HSPLandroidx/compose/foundation/interaction/PressInteractionKt$collectIsPressedAsState$1$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;
+HSPLandroidx/compose/foundation/layout/Arrangement$Center$1;-><init>(I)V
+HSPLandroidx/compose/foundation/layout/Arrangement$Center$1;->arrange(ILandroidx/compose/ui/unit/Density;Landroidx/compose/ui/unit/LayoutDirection;[I[I)V
+HSPLandroidx/compose/foundation/layout/Arrangement$Center$1;->getSpacing-D9Ej5fM()F
+HSPLandroidx/compose/foundation/layout/Arrangement$End$1;-><init>(I)V
+HSPLandroidx/compose/foundation/layout/Arrangement$SpacedAligned;-><init>(F)V
+HSPLandroidx/compose/foundation/layout/Arrangement$SpacedAligned;->arrange(ILandroidx/compose/ui/unit/Density;Landroidx/compose/ui/unit/LayoutDirection;[I[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
+HSPLandroidx/compose/foundation/layout/Arrangement$Top$1;-><init>(I)V
+HSPLandroidx/compose/foundation/layout/Arrangement$Top$1;->arrange(Landroidx/compose/ui/unit/Density;I[I[I)V
+HSPLandroidx/compose/foundation/layout/Arrangement;-><clinit>()V
+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/BoxKt$Box$2;-><init>(IILjava/lang/Object;)V
+HSPLandroidx/compose/foundation/layout/BoxKt$Box$2;->invoke(Landroidx/compose/runtime/Composer;I)V
+HSPLandroidx/compose/foundation/layout/BoxKt$Box$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
+HSPLandroidx/compose/foundation/layout/BoxKt$EmptyBoxMeasurePolicy$1;-><clinit>()V
+HSPLandroidx/compose/foundation/layout/BoxKt$EmptyBoxMeasurePolicy$1;->measure-3p2s80s(Landroidx/compose/ui/layout/MeasureScope;Ljava/util/List;J)Landroidx/compose/ui/layout/MeasureResult;
+HSPLandroidx/compose/foundation/layout/BoxKt$boxMeasurePolicy$1$2;-><init>(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$2;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
+HSPLandroidx/compose/foundation/layout/BoxKt$boxMeasurePolicy$1;-><init>(Z)V
+HSPLandroidx/compose/foundation/layout/BoxKt$boxMeasurePolicy$1;->measure-3p2s80s(Landroidx/compose/ui/layout/MeasureScope;Ljava/util/List;J)Landroidx/compose/ui/layout/MeasureResult;
+HSPLandroidx/compose/foundation/layout/BoxKt;-><clinit>()V
+HSPLandroidx/compose/foundation/layout/BoxKt;->Box(Landroidx/compose/ui/Modifier;Landroidx/compose/runtime/Composer;I)V
+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;->rememberBoxMeasurePolicy(ZLandroidx/compose/runtime/Composer;)Landroidx/compose/ui/layout/MeasurePolicy;
+HSPLandroidx/compose/foundation/layout/BoxScopeInstance;-><clinit>()V
+HSPLandroidx/compose/foundation/layout/ColumnKt;-><clinit>()V
+HSPLandroidx/compose/foundation/layout/ColumnKt;->columnMeasurePolicy(Landroidx/compose/foundation/layout/Arrangement$Vertical;Landroidx/compose/runtime/Composer;)Landroidx/compose/ui/layout/MeasurePolicy;
+HSPLandroidx/compose/foundation/layout/CrossAxisAlignment$VerticalCrossAxisAlignment;-><init>(ILjava/lang/Object;)V
+HSPLandroidx/compose/foundation/layout/CrossAxisAlignment$VerticalCrossAxisAlignment;->align$foundation_layout_release(ILandroidx/compose/ui/unit/LayoutDirection;)I
+HSPLandroidx/compose/foundation/layout/FillElement;-><init>(IF)V
+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/FillNode;-><init>(IF)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/HorizontalAlignElement;-><init>()V
+HSPLandroidx/compose/foundation/layout/HorizontalAlignElement;->create()Landroidx/compose/ui/Modifier$Node;
+HSPLandroidx/compose/foundation/layout/HorizontalAlignElement;->equals(Ljava/lang/Object;)Z
+HSPLandroidx/compose/foundation/layout/HorizontalAlignNode;-><init>(Landroidx/compose/ui/Alignment$Horizontal;)V
+HSPLandroidx/compose/foundation/layout/HorizontalAlignNode;->modifyParentData(Ljava/lang/Object;)Ljava/lang/Object;
+HSPLandroidx/compose/foundation/layout/OffsetElement;-><init>(FF)V
+HSPLandroidx/compose/foundation/layout/OffsetElement;->create()Landroidx/compose/ui/Modifier$Node;
+HSPLandroidx/compose/foundation/layout/OffsetElement;->equals(Ljava/lang/Object;)Z
+HSPLandroidx/compose/foundation/layout/OffsetKt;->Spacer(Landroidx/compose/ui/Modifier;Landroidx/compose/runtime/Composer;)V
+HSPLandroidx/compose/foundation/layout/OffsetKt;->access$intrinsicSize(Ljava/util/List;Landroidx/compose/ui/CombinedModifier$toString$1;Landroidx/compose/ui/CombinedModifier$toString$1;IIII)I
+HSPLandroidx/compose/foundation/layout/OffsetKt;->getRowColumnParentData(Landroidx/compose/ui/layout/Measurable;)Landroidx/compose/foundation/layout/RowColumnParentData;
+HSPLandroidx/compose/foundation/layout/OffsetKt;->getWeight(Landroidx/compose/foundation/layout/RowColumnParentData;)F
+HSPLandroidx/compose/foundation/layout/OffsetKt;->offset-VpY3zN4(Landroidx/compose/ui/Modifier;FF)Landroidx/compose/ui/Modifier;
+HSPLandroidx/compose/foundation/layout/OffsetKt;->padding-3ABfNKs(Landroidx/compose/ui/Modifier;F)Landroidx/compose/ui/Modifier;
+HSPLandroidx/compose/foundation/layout/OffsetKt;->padding-VpY3zN4(FF)Landroidx/compose/ui/Modifier;
+HSPLandroidx/compose/foundation/layout/OffsetKt;->size(Landroidx/compose/ui/Alignment;Z)Landroidx/compose/foundation/layout/WrapContentElement;
+HSPLandroidx/compose/foundation/layout/OffsetKt;->toBoxConstraints-OenEA2s(JI)J
+HSPLandroidx/compose/foundation/layout/OffsetNode$measure$1;-><init>(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;I)V
+HSPLandroidx/compose/foundation/layout/OffsetNode$measure$1;->invoke(Landroidx/compose/ui/layout/Placeable$PlacementScope;)V
+HSPLandroidx/compose/foundation/layout/OffsetNode$measure$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
+HSPLandroidx/compose/foundation/layout/OffsetNode;-><init>(FFZ)V
+HSPLandroidx/compose/foundation/layout/OffsetNode;->measure-3p2s80s(Landroidx/compose/ui/layout/MeasureScope;Landroidx/compose/ui/layout/Measurable;J)Landroidx/compose/ui/layout/MeasureResult;
+HSPLandroidx/compose/foundation/layout/PaddingElement;-><init>(FFFF)V
+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/PaddingNode;-><init>(FFFFZ)V
+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/PaddingValuesImpl;-><init>(FFFF)V
+HSPLandroidx/compose/foundation/layout/RowColumnImplKt$rowColumnMeasurePolicy$1;-><init>(ILkotlin/jvm/functions/Function5;FLandroidx/compose/foundation/layout/CrossAxisAlignment$VerticalCrossAxisAlignment;)V
+HSPLandroidx/compose/foundation/layout/RowColumnImplKt$rowColumnMeasurePolicy$1;->maxIntrinsicHeight(Landroidx/compose/ui/node/NodeCoordinator;Ljava/util/List;I)I
+HSPLandroidx/compose/foundation/layout/RowColumnImplKt$rowColumnMeasurePolicy$1;->measure-3p2s80s(Landroidx/compose/ui/layout/MeasureScope;Ljava/util/List;J)Landroidx/compose/ui/layout/MeasureResult;
+HSPLandroidx/compose/foundation/layout/RowColumnMeasureHelperResult;-><init>(III[I)V
+HSPLandroidx/compose/foundation/layout/RowColumnMeasurementHelper;-><init>(ILkotlin/jvm/functions/Function5;FILandroidx/compose/foundation/layout/OffsetKt;Ljava/util/List;[Landroidx/compose/ui/layout/Placeable;)V
+HSPLandroidx/compose/foundation/layout/RowColumnParentData;-><init>()V
+HSPLandroidx/compose/foundation/layout/RowKt$DefaultRowMeasurePolicy$1;-><clinit>()V
+HSPLandroidx/compose/foundation/layout/RowKt$DefaultRowMeasurePolicy$1;-><init>(I)V
+HSPLandroidx/compose/foundation/layout/RowKt$DefaultRowMeasurePolicy$1;->invoke(ILandroidx/compose/ui/unit/Density;Landroidx/compose/ui/unit/LayoutDirection;[I[I)V
+HSPLandroidx/compose/foundation/layout/RowKt$DefaultRowMeasurePolicy$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/io/Serializable;)Ljava/lang/Object;
+HSPLandroidx/compose/foundation/layout/RowKt$rowMeasurePolicy$1$1;-><init>(ILjava/lang/Object;)V
+HSPLandroidx/compose/foundation/layout/RowKt$rowMeasurePolicy$1$1;->invoke(ILandroidx/compose/ui/unit/Density;Landroidx/compose/ui/unit/LayoutDirection;[I[I)V
+HSPLandroidx/compose/foundation/layout/RowKt$rowMeasurePolicy$1$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/io/Serializable;)Ljava/lang/Object;
+HSPLandroidx/compose/foundation/layout/RowKt;-><clinit>()V
+HSPLandroidx/compose/foundation/layout/RowKt;->rowMeasurePolicy(Landroidx/compose/foundation/layout/Arrangement$Horizontal;Landroidx/compose/ui/BiasAlignment$Vertical;Landroidx/compose/runtime/Composer;)Landroidx/compose/ui/layout/MeasurePolicy;
+HSPLandroidx/compose/foundation/layout/RowScopeInstance;-><clinit>()V
+HSPLandroidx/compose/foundation/layout/SizeElement;-><init>(FFFFI)V
+HSPLandroidx/compose/foundation/layout/SizeElement;->create()Landroidx/compose/ui/Modifier$Node;
+HSPLandroidx/compose/foundation/layout/SizeKt;-><clinit>()V
+HSPLandroidx/compose/foundation/layout/SizeKt;->fillMaxWidth$default(Landroidx/compose/ui/Modifier;)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;->width-3ABfNKs(Landroidx/compose/ui/Modifier;F)Landroidx/compose/ui/Modifier;
+HSPLandroidx/compose/foundation/layout/SizeKt;->wrapContentSize$default(Landroidx/compose/ui/Modifier;)Landroidx/compose/ui/Modifier;
+HSPLandroidx/compose/foundation/layout/SizeNode;-><init>(FFFFZ)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/SpacerMeasurePolicy;-><clinit>()V
+HSPLandroidx/compose/foundation/layout/SpacerMeasurePolicy;->measure-3p2s80s(Landroidx/compose/ui/layout/MeasureScope;Ljava/util/List;J)Landroidx/compose/ui/layout/MeasureResult;
+HSPLandroidx/compose/foundation/layout/WrapContentElement;-><init>(IZLcom/example/tvcomposebasedtests/tvComponents/AppKt$App$1;Ljava/lang/Object;)V
+HSPLandroidx/compose/foundation/layout/WrapContentElement;->create()Landroidx/compose/ui/Modifier$Node;
+HSPLandroidx/compose/foundation/layout/WrapContentElement;->equals(Ljava/lang/Object;)Z
+HSPLandroidx/compose/foundation/layout/WrapContentNode$measure$1;-><init>(Landroidx/compose/foundation/layout/WrapContentNode;ILandroidx/compose/ui/layout/Placeable;ILandroidx/compose/ui/layout/MeasureScope;)V
+HSPLandroidx/compose/foundation/layout/WrapContentNode$measure$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
+HSPLandroidx/compose/foundation/layout/WrapContentNode;-><init>(IZLkotlin/jvm/functions/Function2;)V
+HSPLandroidx/compose/foundation/layout/WrapContentNode;->measure-3p2s80s(Landroidx/compose/ui/layout/MeasureScope;Landroidx/compose/ui/layout/Measurable;J)Landroidx/compose/ui/layout/MeasureResult;
+HSPLandroidx/compose/foundation/lazy/layout/DefaultLazyKey;-><clinit>()V
+HSPLandroidx/compose/foundation/lazy/layout/DefaultLazyKey;-><init>(I)V
+HSPLandroidx/compose/foundation/lazy/layout/DefaultLazyKey;->equals(Ljava/lang/Object;)Z
+HSPLandroidx/compose/foundation/lazy/layout/DefaultLazyKey;->hashCode()I
+HSPLandroidx/compose/foundation/lazy/layout/IntervalList$Interval;-><init>(IILandroidx/compose/foundation/lazy/layout/LazyLayoutIntervalContent$Interval;)V
+HSPLandroidx/compose/foundation/lazy/layout/LazyLayoutItemContentFactory$CachedItemContent;-><init>(Landroidx/compose/foundation/lazy/layout/LazyLayoutItemContentFactory;ILjava/lang/Object;Ljava/lang/Object;)V
+HSPLandroidx/compose/foundation/lazy/layout/LazyLayoutItemContentFactory$CachedItemContent;->getContent()Lkotlin/jvm/functions/Function2;
+HSPLandroidx/compose/foundation/lazy/layout/LazyLayoutItemContentFactory;-><init>(Landroidx/compose/runtime/saveable/SaveableStateHolder;Landroidx/compose/foundation/lazy/layout/LazyLayoutKt$LazyLayout$3$itemContentFactory$1$1;)V
+HSPLandroidx/compose/foundation/lazy/layout/LazyLayoutItemContentFactory;->getContent(Ljava/lang/Object;ILjava/lang/Object;)Lkotlin/jvm/functions/Function2;
+HSPLandroidx/compose/foundation/lazy/layout/LazyLayoutItemContentFactory;->getContentType(Ljava/lang/Object;)Ljava/lang/Object;
+HSPLandroidx/compose/foundation/lazy/layout/LazyLayoutItemReusePolicy;-><init>(Landroidx/compose/foundation/lazy/layout/LazyLayoutItemContentFactory;)V
+HSPLandroidx/compose/foundation/lazy/layout/LazyLayoutItemReusePolicy;->areCompatible(Ljava/lang/Object;Ljava/lang/Object;)Z
+HSPLandroidx/compose/foundation/lazy/layout/LazyLayoutItemReusePolicy;->getSlotsToRetain(Landroidx/compose/ui/layout/SubcomposeSlotReusePolicy$SlotIdsSet;)V
+HSPLandroidx/compose/foundation/lazy/layout/LazyLayoutKt$LazyLayout$3$2$1;-><init>(Ljava/lang/Object;ILjava/lang/Object;)V
+HSPLandroidx/compose/foundation/lazy/layout/LazyLayoutKt$LazyLayout$3$2$1;->invoke(Landroidx/compose/runtime/Composer;I)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$itemContentFactory$1$1;-><init>(Landroidx/compose/runtime/State;I)V
+HSPLandroidx/compose/foundation/lazy/layout/LazyLayoutKt$LazyLayout$3$itemContentFactory$1$1;->invoke()Ljava/lang/Object;
+HSPLandroidx/compose/foundation/lazy/layout/LazyLayoutKt$LazyLayout$3;-><init>(Landroidx/compose/foundation/lazy/layout/LazyLayoutPrefetchState;Landroidx/compose/ui/Modifier;Lkotlin/jvm/functions/Function2;ILandroidx/compose/runtime/MutableState;)V
+HSPLandroidx/compose/foundation/lazy/layout/LazyLayoutKt$LazyLayout$3;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
+HSPLandroidx/compose/foundation/lazy/layout/LazyLayoutMeasureScopeImpl;-><init>(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;->isLookingAhead()Z
+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(JI)Ljava/util/List;
+HSPLandroidx/compose/foundation/lazy/layout/LazyLayoutMeasureScopeImpl;->roundToPx-0680j_4(F)I
+HSPLandroidx/compose/foundation/lazy/layout/LazyLayoutPinnableItem;-><init>(Ljava/lang/Object;Landroidx/compose/foundation/lazy/layout/LazyLayoutPinnedItemList;)V
+HSPLandroidx/compose/foundation/lazy/layout/LazyLayoutPinnableItem;->getPinsCount()I
+HSPLandroidx/compose/foundation/lazy/layout/LazyLayoutPinnableItem;->pin()Landroidx/compose/foundation/lazy/layout/LazyLayoutPinnableItem;
+HSPLandroidx/compose/foundation/lazy/layout/LazyLayoutPinnableItem;->release()V
+HSPLandroidx/compose/foundation/lazy/layout/LazyLayoutPinnedItemList;-><init>()V
+HSPLandroidx/compose/foundation/lazy/layout/LazyLayoutPinnedItemList;->get(I)Ljava/lang/Object;
+HSPLandroidx/compose/foundation/lazy/layout/LazyLayoutPinnedItemList;->isEmpty()Z
+HSPLandroidx/compose/foundation/lazy/layout/LazyLayoutPinnedItemList;->size()I
+HSPLandroidx/compose/foundation/lazy/layout/LazyLayoutPrefetchState;->schedulePrefetch-0kLqBqw(JI)Landroidx/compose/foundation/lazy/layout/LazyLayoutPrefetchState$PrefetchHandle;
+HSPLandroidx/compose/foundation/lazy/layout/LazyLayoutPrefetcher$PrefetchRequest;-><init>(IJ)V
+HSPLandroidx/compose/foundation/lazy/layout/LazyLayoutPrefetcher$PrefetchRequest;->cancel()V
+HSPLandroidx/compose/foundation/lazy/layout/LazyLayoutPrefetcher;-><init>(Landroidx/compose/foundation/lazy/layout/LazyLayoutPrefetchState;Landroidx/compose/ui/layout/SubcomposeLayoutState;Landroidx/compose/foundation/lazy/layout/LazyLayoutItemContentFactory;Landroid/view/View;)V
+HSPLandroidx/compose/foundation/lazy/layout/LazyLayoutPrefetcher;->doFrame(J)V
+HSPLandroidx/compose/foundation/lazy/layout/LazyLayoutPrefetcher;->onRemembered()V
+HSPLandroidx/compose/foundation/lazy/layout/LazyLayoutPrefetcher;->run()V
+HSPLandroidx/compose/foundation/lazy/layout/LazySaveableStateHolder$1;-><init>(Landroidx/compose/runtime/saveable/SaveableStateRegistry;I)V
+HSPLandroidx/compose/foundation/lazy/layout/LazySaveableStateHolder$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
+HSPLandroidx/compose/foundation/lazy/layout/LazySaveableStateHolder$SaveableStateProvider$2$invoke$$inlined$onDispose$1;-><init>(Ljava/lang/Object;ILjava/lang/Object;)V
+HSPLandroidx/compose/foundation/lazy/layout/LazySaveableStateHolder$SaveableStateProvider$2$invoke$$inlined$onDispose$1;->dispose()V
+HSPLandroidx/compose/foundation/lazy/layout/LazySaveableStateHolder;-><init>(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;->canBeSaved(Ljava/lang/Object;)Z
+HSPLandroidx/compose/foundation/lazy/layout/LazySaveableStateHolder;->consumeRestored(Ljava/lang/String;)Ljava/lang/Object;
+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/SaveableStateRegistryImpl$registerProvider$3;
+HSPLandroidx/compose/foundation/lazy/layout/MutableIntervalList;-><init>()V
+HSPLandroidx/compose/foundation/lazy/layout/MutableIntervalList;->addInterval(ILandroidx/compose/foundation/lazy/layout/LazyLayoutIntervalContent$Interval;)V
+HSPLandroidx/compose/foundation/lazy/layout/MutableIntervalList;->checkIndexBounds(I)V
+HSPLandroidx/compose/foundation/lazy/layout/MutableIntervalList;->get(I)Landroidx/compose/foundation/lazy/layout/IntervalList$Interval;
+HSPLandroidx/compose/foundation/relocation/BringIntoViewChildNode;-><init>()V
+HSPLandroidx/compose/foundation/relocation/BringIntoViewChildNode;->getLayoutCoordinates()Landroidx/compose/ui/layout/LayoutCoordinates;
+HSPLandroidx/compose/foundation/relocation/BringIntoViewChildNode;->onPlaced(Landroidx/compose/ui/node/NodeCoordinator;)V
+HSPLandroidx/compose/foundation/relocation/BringIntoViewKt;-><clinit>()V
+HSPLandroidx/compose/foundation/relocation/BringIntoViewRequesterImpl$bringIntoView$1;-><init>(Landroidx/compose/foundation/relocation/BringIntoViewRequesterImpl;Lkotlin/coroutines/Continuation;)V
+HSPLandroidx/compose/foundation/relocation/BringIntoViewRequesterImpl$bringIntoView$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;
+HSPLandroidx/compose/foundation/relocation/BringIntoViewRequesterImpl;-><init>()V
+HSPLandroidx/compose/foundation/relocation/BringIntoViewRequesterImpl;->bringIntoView(Landroidx/compose/ui/geometry/Rect;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
+HSPLandroidx/compose/foundation/relocation/BringIntoViewRequesterNode;-><init>(Landroidx/compose/foundation/relocation/BringIntoViewRequesterImpl;)V
+HSPLandroidx/compose/foundation/relocation/BringIntoViewRequesterNode;->onAttach()V
+HSPLandroidx/compose/foundation/relocation/BringIntoViewRequesterNode;->onDetach()V
+HSPLandroidx/compose/foundation/relocation/BringIntoViewResponderNode$bringChildIntoView$2$1$1;-><init>(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()Ljava/lang/Object;
+HSPLandroidx/compose/foundation/relocation/BringIntoViewResponderNode$bringChildIntoView$2$1;-><init>(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;
+HSPLandroidx/compose/foundation/relocation/BringIntoViewResponderNode$bringChildIntoView$2$2;-><init>(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;
+HSPLandroidx/compose/foundation/relocation/BringIntoViewResponderNode$bringChildIntoView$2;-><init>(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;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;
+HSPLandroidx/compose/foundation/relocation/BringIntoViewResponderNode$bringChildIntoView$parentRect$1;-><init>(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;I)V
+HSPLandroidx/compose/foundation/relocation/BringIntoViewResponderNode$bringChildIntoView$parentRect$1;->invoke()Ljava/lang/Object;
+HSPLandroidx/compose/foundation/relocation/BringIntoViewResponderNode;-><init>(Landroidx/compose/foundation/gestures/ContentInViewNode;)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(Landroidx/compose/ui/layout/LayoutCoordinates;Lkotlin/jvm/functions/Function0;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
+HSPLandroidx/compose/foundation/relocation/BringIntoViewResponderNode;->getProvidedValues()Landroidx/tv/material3/TabKt;
+HSPLandroidx/compose/foundation/relocation/BringIntoViewResponder_androidKt$defaultBringIntoViewParent$1;-><init>(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;
+HSPLandroidx/compose/foundation/shape/CornerBasedShape;-><init>(Landroidx/compose/foundation/shape/CornerSize;Landroidx/compose/foundation/shape/CornerSize;Landroidx/compose/foundation/shape/CornerSize;Landroidx/compose/foundation/shape/CornerSize;)V
+HSPLandroidx/compose/foundation/shape/CornerBasedShape;->createOutline-Pq9zytI(JLandroidx/compose/ui/unit/LayoutDirection;Landroidx/compose/ui/unit/Density;)Landroidx/compose/ui/graphics/BrushKt;
+HSPLandroidx/compose/foundation/shape/DpCornerSize;-><init>(F)V
+HSPLandroidx/compose/foundation/shape/PercentCornerSize;-><init>(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
+HSPLandroidx/compose/foundation/shape/RoundedCornerShape;->equals(Ljava/lang/Object;)Z
+HSPLandroidx/compose/foundation/shape/RoundedCornerShapeKt;-><clinit>()V
+HSPLandroidx/compose/foundation/shape/RoundedCornerShapeKt;->RoundedCornerShape-0680j_4(F)Landroidx/compose/foundation/shape/RoundedCornerShape;
+HSPLandroidx/compose/foundation/text/EmptyMeasurePolicy;-><clinit>()V
+HSPLandroidx/compose/foundation/text/EmptyMeasurePolicy;->measure-3p2s80s(Landroidx/compose/ui/layout/MeasureScope;Ljava/util/List;J)Landroidx/compose/ui/layout/MeasureResult;
+HSPLandroidx/compose/foundation/text/modifiers/InlineDensity;-><clinit>()V
+HSPLandroidx/compose/foundation/text/modifiers/MultiParagraphLayoutCache;-><init>(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;->intrinsicHeight(ILandroidx/compose/ui/unit/LayoutDirection;)I
+HSPLandroidx/compose/foundation/text/modifiers/MultiParagraphLayoutCache;->layoutText-K40F9xA(JLandroidx/compose/ui/unit/LayoutDirection;)Landroidx/compose/ui/text/MultiParagraph;
+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/TextAnnotatedStringElement;-><init>(Landroidx/compose/ui/text/AnnotatedString;Landroidx/compose/ui/text/TextStyle;Landroidx/compose/ui/text/font/FontFamily$Resolver;Lkotlin/jvm/functions/Function1;IZII)V
+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/ui/Modifier$Node;)V
+HSPLandroidx/compose/foundation/text/modifiers/TextAnnotatedStringNode;-><init>(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;)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;->getTextSubstitution()Landroidx/compose/foundation/text/modifiers/TextAnnotatedStringNode$TextSubstitutionValue;
+HSPLandroidx/compose/foundation/text/modifiers/TextAnnotatedStringNode;->maxIntrinsicHeight(Landroidx/compose/ui/layout/IntrinsicMeasureScope;Landroidx/compose/ui/layout/Measurable;I)I
+HSPLandroidx/compose/foundation/text/modifiers/TextAnnotatedStringNode;->maxIntrinsicWidth(Landroidx/compose/ui/layout/IntrinsicMeasureScope;Landroidx/compose/ui/layout/Measurable;I)I
+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;)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/selection/SelectionRegistrarKt;-><clinit>()V
+HSPLandroidx/compose/foundation/text/selection/TextSelectionColors;-><init>(JJ)V
+HSPLandroidx/compose/foundation/text/selection/TextSelectionColorsKt;-><clinit>()V
+HSPLandroidx/compose/material/ripple/PlatformRipple;-><init>(ZFLandroidx/compose/runtime/MutableState;)V
+HSPLandroidx/compose/material/ripple/RippleAlpha;-><init>(FFFF)V
+HSPLandroidx/compose/material/ripple/RippleKt;-><clinit>()V
+HSPLandroidx/compose/material/ripple/RippleThemeKt;-><clinit>()V
+HSPLandroidx/compose/material3/ColorScheme;-><init>(JJJJJJJJJJJJJJJJJJJJJJJJJJJJJ)V
+HSPLandroidx/compose/material3/ColorScheme;->getBackground-0d7_KjU()J
+HSPLandroidx/compose/material3/ColorScheme;->getPrimary-0d7_KjU()J
+HSPLandroidx/compose/material3/ColorScheme;->getSurface-0d7_KjU()J
+HSPLandroidx/compose/material3/ColorSchemeKt;-><clinit>()V
+HSPLandroidx/compose/material3/ColorSchemeKt;->darkColorScheme-G1PFc-w$default(JJJI)Landroidx/compose/material3/ColorScheme;
+HSPLandroidx/compose/material3/MaterialRippleTheme;-><clinit>()V
+HSPLandroidx/compose/material3/MaterialThemeKt$MaterialTheme$2;-><init>(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Lkotlin/jvm/functions/Function2;III)V
+HSPLandroidx/compose/material3/ShapeDefaults;-><clinit>()V
+HSPLandroidx/compose/material3/Shapes;-><init>(Landroidx/compose/foundation/shape/RoundedCornerShape;Landroidx/compose/foundation/shape/RoundedCornerShape;Landroidx/compose/foundation/shape/RoundedCornerShape;I)V
+HSPLandroidx/compose/material3/ShapesKt$LocalShapes$1;-><clinit>()V
+HSPLandroidx/compose/material3/ShapesKt$LocalShapes$1;-><init>(I)V
+HSPLandroidx/compose/material3/ShapesKt$LocalShapes$1;->invoke()Landroidx/compose/ui/node/LayoutNode;
+HSPLandroidx/compose/material3/ShapesKt$LocalShapes$1;->invoke()Ljava/lang/Object;
+HSPLandroidx/compose/material3/ShapesKt;-><clinit>()V
+HSPLandroidx/compose/material3/TextKt$ProvideTextStyle$1;-><init>(IILjava/lang/Object;Ljava/lang/Object;)V
+HSPLandroidx/compose/material3/TextKt$ProvideTextStyle$1;->invoke(Landroidx/compose/runtime/Composer;I)V
+HSPLandroidx/compose/material3/TextKt$ProvideTextStyle$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
+HSPLandroidx/compose/material3/TextKt$Text$1;-><clinit>()V
+HSPLandroidx/compose/material3/TextKt$Text$1;-><init>()V
+HSPLandroidx/compose/material3/TextKt$Text$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
+HSPLandroidx/compose/material3/TextKt;-><clinit>()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-fLXpl1I(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;JIZILkotlin/jvm/functions/Function1;Landroidx/compose/ui/text/TextStyle;Landroidx/compose/runtime/Composer;III)V
+HSPLandroidx/compose/material3/Typography;-><init>(Landroidx/compose/ui/text/TextStyle;I)V
+HSPLandroidx/compose/material3/TypographyKt;-><clinit>()V
+HSPLandroidx/compose/material3/tokens/ColorDarkTokens;-><clinit>()V
+HSPLandroidx/compose/material3/tokens/PaletteTokens;-><clinit>()V
+HSPLandroidx/compose/material3/tokens/ShapeTokens;-><clinit>()V
+HSPLandroidx/compose/material3/tokens/TypeScaleTokens;-><clinit>()V
+HSPLandroidx/compose/material3/tokens/TypefaceTokens;-><clinit>()V
+HSPLandroidx/compose/material3/tokens/TypographyTokens;-><clinit>()V
+HSPLandroidx/compose/runtime/Anchor;-><init>(I)V
+HSPLandroidx/compose/runtime/BroadcastFrameClock$FrameAwaiter;-><init>(Lkotlin/jvm/functions/Function1;Lkotlinx/coroutines/CancellableContinuationImpl;)V
+HSPLandroidx/compose/runtime/BroadcastFrameClock;-><init>(Landroidx/compose/runtime/Pending$keyMap$2;)V
+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;->sendFrame(J)V
+HSPLandroidx/compose/runtime/BroadcastFrameClock;->withFrameNanos(Lkotlin/jvm/functions/Function1;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
+HSPLandroidx/compose/runtime/ComposableSingletons$CompositionKt;-><clinit>()V
+HSPLandroidx/compose/runtime/ComposerImpl$CompositionContextHolder;-><init>(Landroidx/compose/runtime/ComposerImpl$CompositionContextImpl;)V
+HSPLandroidx/compose/runtime/ComposerImpl$CompositionContextHolder;->onRemembered()V
+HSPLandroidx/compose/runtime/ComposerImpl$CompositionContextImpl;-><init>(Landroidx/compose/runtime/ComposerImpl;IZLandroidx/compose/runtime/CompositionObserverHolder;)V
+HSPLandroidx/compose/runtime/ComposerImpl$CompositionContextImpl;->composeInitial$runtime_release(Landroidx/compose/runtime/CompositionImpl;Landroidx/compose/runtime/internal/ComposableLambdaImpl;)V
+HSPLandroidx/compose/runtime/ComposerImpl$CompositionContextImpl;->doneComposing$runtime_release()V
+HSPLandroidx/compose/runtime/ComposerImpl$CompositionContextImpl;->getCollectingParameterInformation$runtime_release()Z
+HSPLandroidx/compose/runtime/ComposerImpl$CompositionContextImpl;->getCompositionLocalScope$runtime_release()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;->getObserverHolder$runtime_release()Landroidx/compose/runtime/CompositionObserverHolder;
+HSPLandroidx/compose/runtime/ComposerImpl$CompositionContextImpl;->invalidate$runtime_release(Landroidx/compose/runtime/CompositionImpl;)V
+HSPLandroidx/compose/runtime/ComposerImpl$CompositionContextImpl;->registerComposer$runtime_release(Landroidx/compose/runtime/ComposerImpl;)V
+HSPLandroidx/compose/runtime/ComposerImpl$CompositionContextImpl;->startComposing$runtime_release()V
+HSPLandroidx/compose/runtime/ComposerImpl$derivedStateObserver$1;-><init>(ILjava/lang/Object;)V
+HSPLandroidx/compose/runtime/ComposerImpl$derivedStateObserver$1;->done()V
+HSPLandroidx/compose/runtime/ComposerImpl$derivedStateObserver$1;->start()V
+HSPLandroidx/compose/runtime/ComposerImpl;-><init>(Landroidx/compose/ui/node/UiApplier;Landroidx/compose/runtime/CompositionContext;Landroidx/compose/runtime/SlotTable;Ljava/util/HashSet;Landroidx/compose/runtime/changelist/ChangeList;Landroidx/compose/runtime/changelist/ChangeList;Landroidx/compose/runtime/CompositionImpl;)V
+HSPLandroidx/compose/runtime/ComposerImpl;->apply(Ljava/lang/Object;Lkotlin/jvm/functions/Function2;)V
+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;->cleanUpCompose()V
+HSPLandroidx/compose/runtime/ComposerImpl;->compoundKeyOf(III)I
+HSPLandroidx/compose/runtime/ComposerImpl;->consume(Landroidx/compose/runtime/ProvidableCompositionLocal;)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;->deactivateToEndGroup(Z)V
+HSPLandroidx/compose/runtime/ComposerImpl;->doCompose(Landroidx/core/content/res/ComplexColorCompat;Landroidx/compose/runtime/internal/ComposableLambdaImpl;)V
+HSPLandroidx/compose/runtime/ComposerImpl;->doRecordDownsFor(II)V
+HSPLandroidx/compose/runtime/ComposerImpl;->endDefaults()V
+HSPLandroidx/compose/runtime/ComposerImpl;->endRestartGroup()Landroidx/compose/runtime/RecomposeScopeImpl;
+HSPLandroidx/compose/runtime/ComposerImpl;->endReusableGroup()V
+HSPLandroidx/compose/runtime/ComposerImpl;->endRoot()V
+HSPLandroidx/compose/runtime/ComposerImpl;->enterGroup(ZLandroidx/compose/runtime/Pending;)V
+HSPLandroidx/compose/runtime/ComposerImpl;->getCurrentRecomposeScope$runtime_release()Landroidx/compose/runtime/RecomposeScopeImpl;
+HSPLandroidx/compose/runtime/ComposerImpl;->getDefaultsInvalid()Z
+HSPLandroidx/compose/runtime/ComposerImpl;->getSkipping()Z
+HSPLandroidx/compose/runtime/ComposerImpl;->nextSlot()Ljava/lang/Object;
+HSPLandroidx/compose/runtime/ComposerImpl;->recompose$runtime_release(Landroidx/core/content/res/ComplexColorCompat;)Z
+HSPLandroidx/compose/runtime/ComposerImpl;->recomposeToGroupEnd()V
+HSPLandroidx/compose/runtime/ComposerImpl;->recordUpsAndDowns(III)V
+HSPLandroidx/compose/runtime/ComposerImpl;->skipCurrentGroup()V
+HSPLandroidx/compose/runtime/ComposerImpl;->skipReaderToGroupEnd()V
+HSPLandroidx/compose/runtime/ComposerImpl;->skipToGroupEnd()V
+HSPLandroidx/compose/runtime/ComposerImpl;->start-BaiHCIY(IILandroidx/compose/runtime/OpaqueKey;Ljava/lang/Object;)V
+HSPLandroidx/compose/runtime/ComposerImpl;->startDefaults()V
+HSPLandroidx/compose/runtime/ComposerImpl;->startGroup(ILandroidx/compose/runtime/OpaqueKey;)V
+HSPLandroidx/compose/runtime/ComposerImpl;->startReaderGroup(Ljava/lang/Object;Z)V
+HSPLandroidx/compose/runtime/ComposerImpl;->startReplaceableGroup(I)V
+HSPLandroidx/compose/runtime/ComposerImpl;->startRestartGroup(I)Landroidx/compose/runtime/ComposerImpl;
+HSPLandroidx/compose/runtime/ComposerImpl;->startReusableGroup(Ljava/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(Ljava/lang/Object;ILjava/lang/Object;)V
+HSPLandroidx/compose/runtime/ComposerImpl;->updateCompoundKeyWhenWeEnterGroupKeyHash(I)V
+HSPLandroidx/compose/runtime/ComposerImpl;->updateCompoundKeyWhenWeExitGroup(Ljava/lang/Object;ILjava/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/internal/PersistentCompositionLocalHashMap;)Landroidx/compose/runtime/internal/PersistentCompositionLocalHashMap;
+HSPLandroidx/compose/runtime/ComposerImpl;->updatedNodeCount(I)I
+HSPLandroidx/compose/runtime/ComposerImpl;->useNode()V
+HSPLandroidx/compose/runtime/CompositionContext;->doneComposing$runtime_release()V
+HSPLandroidx/compose/runtime/CompositionContext;->getCompositionLocalScope$runtime_release()Landroidx/compose/runtime/PersistentCompositionLocalMap;
+HSPLandroidx/compose/runtime/CompositionContext;->getObserverHolder$runtime_release()Landroidx/compose/runtime/CompositionObserverHolder;
+HSPLandroidx/compose/runtime/CompositionContext;->registerComposer$runtime_release(Landroidx/compose/runtime/ComposerImpl;)V
+HSPLandroidx/compose/runtime/CompositionContext;->startComposing$runtime_release()V
+HSPLandroidx/compose/runtime/CompositionContextKt;-><clinit>()V
+HSPLandroidx/compose/runtime/CompositionImpl$RememberEventDispatcher;-><init>(Ljava/util/HashSet;)V
+HSPLandroidx/compose/runtime/CompositionImpl$RememberEventDispatcher;->dispatchAbandons()V
+HSPLandroidx/compose/runtime/CompositionImpl$RememberEventDispatcher;->dispatchRememberObservers()V
+HSPLandroidx/compose/runtime/CompositionImpl;-><init>(Landroidx/compose/runtime/CompositionContext;Landroidx/compose/ui/node/UiApplier;)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(Landroidx/compose/runtime/changelist/ChangeList;)V
+HSPLandroidx/compose/runtime/CompositionImpl;->applyLateChanges()V
+HSPLandroidx/compose/runtime/CompositionImpl;->changesApplied()V
+HSPLandroidx/compose/runtime/CompositionImpl;->cleanUpDerivedStateObservations()V
+HSPLandroidx/compose/runtime/CompositionImpl;->composeContent(Landroidx/compose/runtime/internal/ComposableLambdaImpl;)V
+HSPLandroidx/compose/runtime/CompositionImpl;->drainPendingModificationsForCompositionLocked()V
+HSPLandroidx/compose/runtime/CompositionImpl;->drainPendingModificationsLocked()V
+HSPLandroidx/compose/runtime/CompositionImpl;->getHasInvalidations()Z
+HSPLandroidx/compose/runtime/CompositionImpl;->invalidate$enumunboxing$(Landroidx/compose/runtime/RecomposeScopeImpl;Ljava/lang/Object;)I
+HSPLandroidx/compose/runtime/CompositionImpl;->invalidateChecked$enumunboxing$(Landroidx/compose/runtime/RecomposeScopeImpl;Landroidx/compose/runtime/Anchor;Ljava/lang/Object;)I
+HSPLandroidx/compose/runtime/CompositionImpl;->invalidateScopeOfLocked(Ljava/lang/Object;)V
+HSPLandroidx/compose/runtime/CompositionImpl;->isDisposed()Z
+HSPLandroidx/compose/runtime/CompositionImpl;->observer()V
+HSPLandroidx/compose/runtime/CompositionImpl;->observesAnyOf(Landroidx/compose/runtime/collection/IdentityArraySet;)Z
+HSPLandroidx/compose/runtime/CompositionImpl;->recompose()Z
+HSPLandroidx/compose/runtime/CompositionImpl;->recomposeScopeReleased()V
+HSPLandroidx/compose/runtime/CompositionImpl;->recordModificationsOf(Landroidx/compose/runtime/collection/IdentityArraySet;)V
+HSPLandroidx/compose/runtime/CompositionImpl;->recordReadOf(Ljava/lang/Object;)V
+HSPLandroidx/compose/runtime/CompositionImpl;->recordWriteOf(Ljava/lang/Object;)V
+HSPLandroidx/compose/runtime/CompositionImpl;->setContent(Lkotlin/jvm/functions/Function2;)V
+HSPLandroidx/compose/runtime/CompositionKt;-><clinit>()V
+HSPLandroidx/compose/runtime/CompositionLocal;-><init>(Lkotlin/jvm/functions/Function0;)V
+HSPLandroidx/compose/runtime/CompositionLocalMap$Companion;-><clinit>()V
+HSPLandroidx/compose/runtime/CompositionLocalMap;-><clinit>()V
+HSPLandroidx/compose/runtime/CompositionObserverHolder;-><init>()V
+HSPLandroidx/compose/runtime/CompositionScopedCoroutineScopeCanceller;-><init>(Lkotlinx/coroutines/internal/ContextScope;)V
+HSPLandroidx/compose/runtime/CompositionScopedCoroutineScopeCanceller;->onRemembered()V
+HSPLandroidx/compose/runtime/DerivedSnapshotState$ResultRecord;-><clinit>()V
+HSPLandroidx/compose/runtime/DerivedSnapshotState$ResultRecord;-><init>()V
+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;->isValid(Landroidx/compose/runtime/DerivedSnapshotState;Landroidx/compose/runtime/snapshots/Snapshot;)Z
+HSPLandroidx/compose/runtime/DerivedSnapshotState$ResultRecord;->readableHash(Landroidx/compose/runtime/DerivedSnapshotState;Landroidx/compose/runtime/snapshots/Snapshot;)I
+HSPLandroidx/compose/runtime/DerivedSnapshotState;-><init>(Landroidx/compose/runtime/ReferentialEqualityPolicy;Lkotlin/jvm/functions/Function0;)V
+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/DerivedSnapshotState$ResultRecord;
+HSPLandroidx/compose/runtime/DerivedSnapshotState;->getFirstStateRecord()Landroidx/compose/runtime/snapshots/StateRecord;
+HSPLandroidx/compose/runtime/DerivedSnapshotState;->getValue()Ljava/lang/Object;
+HSPLandroidx/compose/runtime/DerivedSnapshotState;->prependStateRecord(Landroidx/compose/runtime/snapshots/StateRecord;)V
+HSPLandroidx/compose/runtime/DisposableEffectImpl;-><init>(Lkotlin/jvm/functions/Function1;)V
+HSPLandroidx/compose/runtime/DisposableEffectImpl;->onForgotten()V
+HSPLandroidx/compose/runtime/DisposableEffectImpl;->onRemembered()V
+HSPLandroidx/compose/runtime/DynamicProvidableCompositionLocal;-><init>(Landroidx/compose/runtime/SnapshotMutationPolicy;Lkotlin/jvm/functions/Function0;)V
+HSPLandroidx/compose/runtime/DynamicProvidableCompositionLocal;->updatedStateOf$runtime_release(Ljava/lang/Object;Landroidx/compose/runtime/State;)Landroidx/compose/runtime/State;
+HSPLandroidx/compose/runtime/GroupInfo;-><init>(III)V
+HSPLandroidx/compose/runtime/IntStack;-><init>()V
+HSPLandroidx/compose/runtime/IntStack;-><init>(I)V
+HSPLandroidx/compose/runtime/IntStack;->getSize()I
+HSPLandroidx/compose/runtime/IntStack;->pop()I
+HSPLandroidx/compose/runtime/IntStack;->push(I)V
+HSPLandroidx/compose/runtime/IntStack;->pushDiagonal(III)V
+HSPLandroidx/compose/runtime/IntStack;->pushRange(IIII)V
+HSPLandroidx/compose/runtime/IntStack;->quickSort(II)V
+HSPLandroidx/compose/runtime/IntStack;->swapDiagonal(II)V
+HSPLandroidx/compose/runtime/Invalidation;-><init>(Landroidx/compose/runtime/RecomposeScopeImpl;ILandroidx/compose/runtime/collection/IdentityArraySet;)V
+HSPLandroidx/compose/runtime/KeyInfo;-><init>(ILjava/lang/Object;II)V
+HSPLandroidx/compose/runtime/Latch$await$2$2;-><init>(Ljava/lang/Object;ILjava/lang/Object;)V
+HSPLandroidx/compose/runtime/Latch$await$2$2;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
+HSPLandroidx/compose/runtime/Latch$await$2$2;->invoke(Ljava/lang/Throwable;)V
+HSPLandroidx/compose/runtime/Latch;-><init>()V
+HSPLandroidx/compose/runtime/Latch;-><init>(I)V
+HSPLandroidx/compose/runtime/Latch;->add(Landroidx/compose/ui/node/LayoutNode;)V
+HSPLandroidx/compose/runtime/Latch;->contains(Landroidx/compose/ui/node/LayoutNode;)Z
+HSPLandroidx/compose/runtime/Latch;->pop()Landroidx/compose/ui/node/LayoutNode;
+HSPLandroidx/compose/runtime/Latch;->remove(Landroidx/compose/ui/node/LayoutNode;)Z
+HSPLandroidx/compose/runtime/LaunchedEffectImpl;-><init>(Lkotlin/coroutines/CoroutineContext;Lkotlin/jvm/functions/Function2;)V
+HSPLandroidx/compose/runtime/LaunchedEffectImpl;->onForgotten()V
+HSPLandroidx/compose/runtime/LaunchedEffectImpl;->onRemembered()V
+HSPLandroidx/compose/runtime/LazyValueHolder;-><init>(Lkotlin/jvm/functions/Function0;)V
+HSPLandroidx/compose/runtime/LazyValueHolder;->getValue()Ljava/lang/Object;
+HSPLandroidx/compose/runtime/MonotonicFrameClock;->getKey()Lkotlin/coroutines/CoroutineContext$Key;
+HSPLandroidx/compose/runtime/OpaqueKey;-><init>(Ljava/lang/String;)V
+HSPLandroidx/compose/runtime/OpaqueKey;->equals(Ljava/lang/Object;)Z
+HSPLandroidx/compose/runtime/OpaqueKey;->hashCode()I
+HSPLandroidx/compose/runtime/ParcelableSnapshotMutableFloatState;-><clinit>()V
+HSPLandroidx/compose/runtime/ParcelableSnapshotMutableIntState;-><clinit>()V
+HSPLandroidx/compose/runtime/ParcelableSnapshotMutableState;-><clinit>()V
+HSPLandroidx/compose/runtime/PausableMonotonicFrameClock$withFrameNanos$1;-><init>(Landroidx/compose/runtime/PausableMonotonicFrameClock;Lkotlin/coroutines/Continuation;)V
+HSPLandroidx/compose/runtime/PausableMonotonicFrameClock$withFrameNanos$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;
+HSPLandroidx/compose/runtime/PausableMonotonicFrameClock;-><init>(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;->withFrameNanos(Lkotlin/jvm/functions/Function1;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
+HSPLandroidx/compose/runtime/Pending$keyMap$2;-><init>(ILjava/lang/Object;)V
+HSPLandroidx/compose/runtime/Pending$keyMap$2;->invoke()Ljava/lang/Object;
+HSPLandroidx/compose/runtime/Pending;-><init>(ILjava/util/ArrayList;)V
+HSPLandroidx/compose/runtime/ProduceStateScopeImpl;-><init>(Landroidx/compose/runtime/MutableState;Lkotlin/coroutines/CoroutineContext;)V
+HSPLandroidx/compose/runtime/ProduceStateScopeImpl;->setValue(Ljava/lang/Object;)V
+HSPLandroidx/compose/runtime/ProvidableCompositionLocal;->provides(Ljava/lang/Object;)Landroidx/compose/runtime/ProvidedValue;
+HSPLandroidx/compose/runtime/ProvidedValue;-><init>(Landroidx/compose/runtime/CompositionLocal;Ljava/lang/Object;Z)V
+HSPLandroidx/compose/runtime/RecomposeScopeImpl$end$1$2;-><init>(IILjava/lang/Object;Ljava/lang/Object;)V
+HSPLandroidx/compose/runtime/RecomposeScopeImpl$end$1$2;-><init>(Landroidx/compose/runtime/DerivedSnapshotState;Landroidx/core/content/res/ComplexColorCompat;I)V
+HSPLandroidx/compose/runtime/RecomposeScopeImpl$end$1$2;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
+HSPLandroidx/compose/runtime/RecomposeScopeImpl;-><init>(Landroidx/compose/runtime/CompositionImpl;)V
+HSPLandroidx/compose/runtime/RecomposeScopeImpl;->invalidateForResult$enumunboxing$(Ljava/lang/Object;)I
+HSPLandroidx/compose/runtime/Recomposer$State;-><clinit>()V
+HSPLandroidx/compose/runtime/Recomposer$State;-><init>(ILjava/lang/String;)V
+HSPLandroidx/compose/runtime/Recomposer$effectJob$1$1;-><init>(ILjava/lang/Object;)V
+HSPLandroidx/compose/runtime/Recomposer$effectJob$1$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
+HSPLandroidx/compose/runtime/Recomposer$join$2;-><init>(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(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
+HSPLandroidx/compose/runtime/Recomposer$join$2;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;
+HSPLandroidx/compose/runtime/Recomposer$performRecompose$1$1;-><init>(Ljava/lang/Object;ILjava/lang/Object;)V
+HSPLandroidx/compose/runtime/Recomposer$performRecompose$1$1;->invoke()Ljava/lang/Object;
+HSPLandroidx/compose/runtime/Recomposer$performRecompose$1$1;->invoke()V
+HSPLandroidx/compose/runtime/Recomposer$recompositionRunner$2$3;-><init>(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;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;
+HSPLandroidx/compose/runtime/Recomposer$recompositionRunner$2$unregisterApplyObserver$1;-><init>(ILjava/lang/Object;)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;)V
+HSPLandroidx/compose/runtime/Recomposer$recompositionRunner$2;-><init>(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;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;
+HSPLandroidx/compose/runtime/Recomposer$runRecomposeAndApplyChanges$2$1;-><init>(Landroidx/compose/runtime/Recomposer;Landroidx/compose/runtime/collection/IdentityArraySet;Landroidx/compose/runtime/collection/IdentityArraySet;Ljava/util/List;Ljava/util/List;Ljava/util/Set;Ljava/util/List;Ljava/util/Set;)V
+HSPLandroidx/compose/runtime/Recomposer$runRecomposeAndApplyChanges$2$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
+HSPLandroidx/compose/runtime/Recomposer$runRecomposeAndApplyChanges$2;-><init>(Landroidx/compose/runtime/Recomposer;Lkotlin/coroutines/Continuation;)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;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;
+HSPLandroidx/compose/runtime/Recomposer;-><clinit>()V
+HSPLandroidx/compose/runtime/Recomposer;-><init>(Lkotlin/coroutines/CoroutineContext;)V
+HSPLandroidx/compose/runtime/Recomposer;->access$performRecompose(Landroidx/compose/runtime/Recomposer;Landroidx/compose/runtime/CompositionImpl;Landroidx/compose/runtime/collection/IdentityArraySet;)Landroidx/compose/runtime/CompositionImpl;
+HSPLandroidx/compose/runtime/Recomposer;->access$recordComposerModifications(Landroidx/compose/runtime/Recomposer;)Z
+HSPLandroidx/compose/runtime/Recomposer;->applyAndCheck(Landroidx/compose/runtime/snapshots/MutableSnapshot;)V
+HSPLandroidx/compose/runtime/Recomposer;->composeInitial$runtime_release(Landroidx/compose/runtime/CompositionImpl;Landroidx/compose/runtime/internal/ComposableLambdaImpl;)V
+HSPLandroidx/compose/runtime/Recomposer;->deriveStateLocked()Lkotlinx/coroutines/CancellableContinuation;
+HSPLandroidx/compose/runtime/Recomposer;->getCollectingParameterInformation$runtime_release()Z
+HSPLandroidx/compose/runtime/Recomposer;->getCompoundHashKey$runtime_release()I
+HSPLandroidx/compose/runtime/Recomposer;->getEffectCoroutineContext()Lkotlin/coroutines/CoroutineContext;
+HSPLandroidx/compose/runtime/Recomposer;->getHasBroadcastFrameClockAwaitersLocked()Z
+HSPLandroidx/compose/runtime/Recomposer;->getHasSchedulingWork()Z
+HSPLandroidx/compose/runtime/Recomposer;->getKnownCompositions()Ljava/util/List;
+HSPLandroidx/compose/runtime/Recomposer;->invalidate$runtime_release(Landroidx/compose/runtime/CompositionImpl;)V
+HSPLandroidx/compose/runtime/Recomposer;->performInitialMovableContentInserts(Landroidx/compose/runtime/CompositionImpl;)V
+HSPLandroidx/compose/runtime/ReferentialEqualityPolicy;-><clinit>()V
+HSPLandroidx/compose/runtime/ReferentialEqualityPolicy;->equivalent(Ljava/lang/Object;Ljava/lang/Object;)Z
+HSPLandroidx/compose/runtime/SkippableUpdater;-><init>(Landroidx/compose/runtime/Composer;)V
+HSPLandroidx/compose/runtime/SlotReader;-><init>(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;->close()V
+HSPLandroidx/compose/runtime/SlotReader;->endGroup()V
+HSPLandroidx/compose/runtime/SlotReader;->getGroupAux()Ljava/lang/Object;
+HSPLandroidx/compose/runtime/SlotReader;->getGroupKey()I
+HSPLandroidx/compose/runtime/SlotReader;->groupGet(II)Ljava/lang/Object;
+HSPLandroidx/compose/runtime/SlotReader;->groupSize(I)I
+HSPLandroidx/compose/runtime/SlotReader;->isNode(I)Z
+HSPLandroidx/compose/runtime/SlotReader;->node(I)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;->skipGroup()I
+HSPLandroidx/compose/runtime/SlotReader;->skipToGroupEnd()V
+HSPLandroidx/compose/runtime/SlotReader;->startGroup()V
+HSPLandroidx/compose/runtime/SlotTable;-><init>()V
+HSPLandroidx/compose/runtime/SlotTable;->anchorIndex(Landroidx/compose/runtime/Anchor;)I
+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/SlotWriter;-><clinit>()V
+HSPLandroidx/compose/runtime/SlotWriter;-><init>(Landroidx/compose/runtime/SlotTable;)V
+HSPLandroidx/compose/runtime/SlotWriter;->advanceBy(I)V
+HSPLandroidx/compose/runtime/SlotWriter;->anchor(I)Landroidx/compose/runtime/Anchor;
+HSPLandroidx/compose/runtime/SlotWriter;->auxIndex([II)I
+HSPLandroidx/compose/runtime/SlotWriter;->beginInsert()V
+HSPLandroidx/compose/runtime/SlotWriter;->close()V
+HSPLandroidx/compose/runtime/SlotWriter;->dataIndex([II)I
+HSPLandroidx/compose/runtime/SlotWriter;->dataIndexToDataAddress(I)I
+HSPLandroidx/compose/runtime/SlotWriter;->endInsert()V
+HSPLandroidx/compose/runtime/SlotWriter;->getSize$runtime_release()I
+HSPLandroidx/compose/runtime/SlotWriter;->groupIndexToAddress(I)I
+HSPLandroidx/compose/runtime/SlotWriter;->groupSize(I)I
+HSPLandroidx/compose/runtime/SlotWriter;->markGroup$default(Landroidx/compose/runtime/SlotWriter;)V
+HSPLandroidx/compose/runtime/SlotWriter;->moveFrom(Landroidx/compose/runtime/SlotTable;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;->parent(I)I
+HSPLandroidx/compose/runtime/SlotWriter;->parent([II)I
+HSPLandroidx/compose/runtime/SlotWriter;->recalculateMarks()V
+HSPLandroidx/compose/runtime/SlotWriter;->set(IILjava/lang/Object;)Ljava/lang/Object;
+HSPLandroidx/compose/runtime/SlotWriter;->skipToGroupEnd()V
+HSPLandroidx/compose/runtime/SlotWriter;->slotIndex([II)I
+HSPLandroidx/compose/runtime/SlotWriter;->updateAux(Ljava/lang/Object;)V
+HSPLandroidx/compose/runtime/SlotWriter;->updateContainsMark(I)V
+HSPLandroidx/compose/runtime/SlotWriter;->updateNodeOfGroup(ILjava/lang/Object;)V
+HSPLandroidx/compose/runtime/SnapshotMutableFloatStateImpl$FloatStateStateRecord;-><init>(F)V
+HSPLandroidx/compose/runtime/SnapshotMutableFloatStateImpl;-><init>(F)V
+HSPLandroidx/compose/runtime/SnapshotMutableFloatStateImpl;->setFloatValue(F)V
+HSPLandroidx/compose/runtime/SnapshotMutableIntStateImpl$IntStateStateRecord;-><init>(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;-><init>(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
+HSPLandroidx/compose/runtime/SnapshotMutableStateImpl$StateStateRecord;-><init>(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;-><init>(Ljava/lang/Object;Landroidx/compose/runtime/SnapshotMutationPolicy;)V
+HSPLandroidx/compose/runtime/SnapshotMutableStateImpl;->getFirstStateRecord()Landroidx/compose/runtime/snapshots/StateRecord;
+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
+HSPLandroidx/compose/runtime/SnapshotStateKt__DerivedStateKt;-><clinit>()V
+HSPLandroidx/compose/runtime/SnapshotStateKt__ProduceStateKt$produceState$3;-><init>(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;
+HSPLandroidx/compose/runtime/SnapshotStateKt__SnapshotFlowKt$collectAsState$1$1;-><init>(Landroidx/compose/runtime/ProduceStateScopeImpl;I)V
+HSPLandroidx/compose/runtime/SnapshotStateKt__SnapshotFlowKt$collectAsState$1$1;->emit(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
+HSPLandroidx/compose/runtime/SnapshotStateKt__SnapshotFlowKt$collectAsState$1;-><init>(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(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
+HSPLandroidx/compose/runtime/SnapshotStateKt__SnapshotFlowKt$collectAsState$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;
+HSPLandroidx/compose/runtime/Stack;-><init>()V
+HSPLandroidx/compose/runtime/Stack;-><init>(I)V
+HSPLandroidx/compose/runtime/Stack;-><init>(II)V
+HSPLandroidx/compose/runtime/Stack;-><init>(ILjava/lang/Object;)V
+HSPLandroidx/compose/runtime/Stack;-><init>(Landroid/content/Context;)V
+HSPLandroidx/compose/runtime/Stack;-><init>(Ljava/nio/ByteBuffer;)V
+HSPLandroidx/compose/runtime/Stack;->clear()V
+HSPLandroidx/compose/runtime/Stack;->load(Lokhttp3/MediaType;)V
+HSPLandroidx/compose/runtime/Stack;->pop()Ljava/lang/Object;
+HSPLandroidx/compose/runtime/Stack;->readUnsignedInt()J
+HSPLandroidx/compose/runtime/Stack;->skip(I)V
+HSPLandroidx/compose/runtime/StaticProvidableCompositionLocal;->updatedStateOf$runtime_release(Ljava/lang/Object;Landroidx/compose/runtime/State;)Landroidx/compose/runtime/State;
+HSPLandroidx/compose/runtime/StaticValueHolder;-><init>(Ljava/lang/Object;)V
+HSPLandroidx/compose/runtime/StaticValueHolder;->equals(Ljava/lang/Object;)Z
+HSPLandroidx/compose/runtime/StaticValueHolder;->getValue()Ljava/lang/Object;
+HSPLandroidx/compose/runtime/StructuralEqualityPolicy;-><clinit>()V
+HSPLandroidx/compose/runtime/StructuralEqualityPolicy;->equivalent(Ljava/lang/Object;Ljava/lang/Object;)Z
+HSPLandroidx/compose/runtime/changelist/ChangeList;-><init>()V
+HSPLandroidx/compose/runtime/changelist/ChangeList;->executeAndFlushAllPendingChanges(Landroidx/compose/runtime/Applier;Landroidx/compose/runtime/SlotWriter;Landroidx/compose/runtime/CompositionImpl$RememberEventDispatcher;)V
+HSPLandroidx/compose/runtime/changelist/ChangeList;->isEmpty()Z
+HSPLandroidx/compose/runtime/changelist/ComposerChangeListWriter;-><init>(Landroidx/compose/runtime/ComposerImpl;Landroidx/compose/runtime/changelist/ChangeList;)V
+HSPLandroidx/compose/runtime/changelist/ComposerChangeListWriter;->moveUp()V
+HSPLandroidx/compose/runtime/changelist/ComposerChangeListWriter;->pushPendingUpsAndDowns()V
+HSPLandroidx/compose/runtime/changelist/ComposerChangeListWriter;->realizeNodeMovementOperations()V
+HSPLandroidx/compose/runtime/changelist/ComposerChangeListWriter;->realizeOperationLocation(Z)V
+HSPLandroidx/compose/runtime/changelist/FixupList;-><init>()V
+HSPLandroidx/compose/runtime/changelist/Operation$AdvanceSlotsBy;-><clinit>()V
+HSPLandroidx/compose/runtime/changelist/Operation$AdvanceSlotsBy;-><init>()V
+HSPLandroidx/compose/runtime/changelist/Operation$AdvanceSlotsBy;->execute(Landroidx/compose/runtime/changelist/Operations$OpIterator;Landroidx/compose/runtime/Applier;Landroidx/compose/runtime/SlotWriter;Landroidx/compose/runtime/CompositionImpl$RememberEventDispatcher;)V
+HSPLandroidx/compose/runtime/changelist/Operation$DeactivateCurrentGroup;-><clinit>()V
+HSPLandroidx/compose/runtime/changelist/Operation$DeactivateCurrentGroup;-><init>()V
+HSPLandroidx/compose/runtime/changelist/Operation$DeactivateCurrentGroup;->execute(Landroidx/compose/runtime/changelist/Operations$OpIterator;Landroidx/compose/runtime/Applier;Landroidx/compose/runtime/SlotWriter;Landroidx/compose/runtime/CompositionImpl$RememberEventDispatcher;)V
+HSPLandroidx/compose/runtime/changelist/Operation$Downs;-><clinit>()V
+HSPLandroidx/compose/runtime/changelist/Operation$Downs;-><init>()V
+HSPLandroidx/compose/runtime/changelist/Operation$Downs;->execute(Landroidx/compose/runtime/changelist/Operations$OpIterator;Landroidx/compose/runtime/Applier;Landroidx/compose/runtime/SlotWriter;Landroidx/compose/runtime/CompositionImpl$RememberEventDispatcher;)V
+HSPLandroidx/compose/runtime/changelist/Operation$InsertNodeFixup;-><clinit>()V
+HSPLandroidx/compose/runtime/changelist/Operation$InsertNodeFixup;-><init>()V
+HSPLandroidx/compose/runtime/changelist/Operation$InsertNodeFixup;->execute(Landroidx/compose/runtime/changelist/Operations$OpIterator;Landroidx/compose/runtime/Applier;Landroidx/compose/runtime/SlotWriter;Landroidx/compose/runtime/CompositionImpl$RememberEventDispatcher;)V
+HSPLandroidx/compose/runtime/changelist/Operation$InsertSlotsWithFixups;-><clinit>()V
+HSPLandroidx/compose/runtime/changelist/Operation$InsertSlotsWithFixups;-><init>()V
+HSPLandroidx/compose/runtime/changelist/Operation$InsertSlotsWithFixups;->execute(Landroidx/compose/runtime/changelist/Operations$OpIterator;Landroidx/compose/runtime/Applier;Landroidx/compose/runtime/SlotWriter;Landroidx/compose/runtime/CompositionImpl$RememberEventDispatcher;)V
+HSPLandroidx/compose/runtime/changelist/Operation$PostInsertNodeFixup;-><clinit>()V
+HSPLandroidx/compose/runtime/changelist/Operation$PostInsertNodeFixup;-><init>()V
+HSPLandroidx/compose/runtime/changelist/Operation$PostInsertNodeFixup;->execute(Landroidx/compose/runtime/changelist/Operations$OpIterator;Landroidx/compose/runtime/Applier;Landroidx/compose/runtime/SlotWriter;Landroidx/compose/runtime/CompositionImpl$RememberEventDispatcher;)V
+HSPLandroidx/compose/runtime/changelist/Operation$Remember;-><clinit>()V
+HSPLandroidx/compose/runtime/changelist/Operation$Remember;-><init>()V
+HSPLandroidx/compose/runtime/changelist/Operation$Remember;->execute(Landroidx/compose/runtime/changelist/Operations$OpIterator;Landroidx/compose/runtime/Applier;Landroidx/compose/runtime/SlotWriter;Landroidx/compose/runtime/CompositionImpl$RememberEventDispatcher;)V
+HSPLandroidx/compose/runtime/changelist/Operation$SideEffect;-><clinit>()V
+HSPLandroidx/compose/runtime/changelist/Operation$SideEffect;-><init>()V
+HSPLandroidx/compose/runtime/changelist/Operation$SideEffect;->execute(Landroidx/compose/runtime/changelist/Operations$OpIterator;Landroidx/compose/runtime/Applier;Landroidx/compose/runtime/SlotWriter;Landroidx/compose/runtime/CompositionImpl$RememberEventDispatcher;)V
+HSPLandroidx/compose/runtime/changelist/Operation$UpdateAuxData;-><clinit>()V
+HSPLandroidx/compose/runtime/changelist/Operation$UpdateAuxData;-><init>()V
+HSPLandroidx/compose/runtime/changelist/Operation$UpdateAuxData;->execute(Landroidx/compose/runtime/changelist/Operations$OpIterator;Landroidx/compose/runtime/Applier;Landroidx/compose/runtime/SlotWriter;Landroidx/compose/runtime/CompositionImpl$RememberEventDispatcher;)V
+HSPLandroidx/compose/runtime/changelist/Operation$UpdateNode;-><clinit>()V
+HSPLandroidx/compose/runtime/changelist/Operation$UpdateNode;-><init>()V
+HSPLandroidx/compose/runtime/changelist/Operation$UpdateNode;->execute(Landroidx/compose/runtime/changelist/Operations$OpIterator;Landroidx/compose/runtime/Applier;Landroidx/compose/runtime/SlotWriter;Landroidx/compose/runtime/CompositionImpl$RememberEventDispatcher;)V
+HSPLandroidx/compose/runtime/changelist/Operation$UpdateValue;-><clinit>()V
+HSPLandroidx/compose/runtime/changelist/Operation$UpdateValue;-><init>()V
+HSPLandroidx/compose/runtime/changelist/Operation$UpdateValue;->execute(Landroidx/compose/runtime/changelist/Operations$OpIterator;Landroidx/compose/runtime/Applier;Landroidx/compose/runtime/SlotWriter;Landroidx/compose/runtime/CompositionImpl$RememberEventDispatcher;)V
+HSPLandroidx/compose/runtime/changelist/Operation$Ups;-><clinit>()V
+HSPLandroidx/compose/runtime/changelist/Operation$Ups;-><init>()V
+HSPLandroidx/compose/runtime/changelist/Operation$Ups;->execute(Landroidx/compose/runtime/changelist/Operations$OpIterator;Landroidx/compose/runtime/Applier;Landroidx/compose/runtime/SlotWriter;Landroidx/compose/runtime/CompositionImpl$RememberEventDispatcher;)V
+HSPLandroidx/compose/runtime/changelist/Operation$UseCurrentNode;-><clinit>()V
+HSPLandroidx/compose/runtime/changelist/Operation$UseCurrentNode;-><init>()V
+HSPLandroidx/compose/runtime/changelist/Operation$UseCurrentNode;->execute(Landroidx/compose/runtime/changelist/Operations$OpIterator;Landroidx/compose/runtime/Applier;Landroidx/compose/runtime/SlotWriter;Landroidx/compose/runtime/CompositionImpl$RememberEventDispatcher;)V
+HSPLandroidx/compose/runtime/changelist/Operation;-><init>(II)V
+HSPLandroidx/compose/runtime/changelist/Operation;-><init>(III)V
+HSPLandroidx/compose/runtime/changelist/Operations$OpIterator;-><init>(Landroidx/compose/runtime/changelist/Operations;)V
+HSPLandroidx/compose/runtime/changelist/Operations$OpIterator;->getInt-w8GmfQM(I)I
+HSPLandroidx/compose/runtime/changelist/Operations$OpIterator;->getObject-31yXWZQ(I)Ljava/lang/Object;
+HSPLandroidx/compose/runtime/changelist/Operations;-><init>()V
+HSPLandroidx/compose/runtime/changelist/Operations;->access$createExpectedArgMask(Landroidx/compose/runtime/changelist/Operations;I)I
+HSPLandroidx/compose/runtime/changelist/Operations;->clear()V
+HSPLandroidx/compose/runtime/changelist/Operations;->executeAndFlushAllPendingOperations(Landroidx/compose/runtime/Applier;Landroidx/compose/runtime/SlotWriter;Landroidx/compose/runtime/CompositionImpl$RememberEventDispatcher;)V
+HSPLandroidx/compose/runtime/changelist/Operations;->peekOperation()Landroidx/compose/runtime/changelist/Operation;
+HSPLandroidx/compose/runtime/changelist/Operations;->push(Landroidx/compose/runtime/changelist/Operation;)V
+HSPLandroidx/compose/runtime/changelist/Operations;->pushOp(Landroidx/compose/runtime/changelist/Operation;)V
+HSPLandroidx/compose/runtime/collection/IdentityArrayIntMap;-><init>()V
+HSPLandroidx/compose/runtime/collection/IdentityArrayIntMap;->add(ILjava/lang/Object;)I
+HSPLandroidx/compose/runtime/collection/IdentityArrayMap$asMap$1$entries$1$iterator$1$1;-><init>(Ljava/lang/Object;Ljava/lang/Object;)V
+HSPLandroidx/compose/runtime/collection/IdentityArrayMap$asMap$1$entries$1$iterator$1$1;->getKey()Ljava/lang/Object;
+HSPLandroidx/compose/runtime/collection/IdentityArrayMap$asMap$1$entries$1$iterator$1$1;->getValue()Ljava/lang/Object;
+HSPLandroidx/compose/runtime/collection/IdentityArraySet;-><init>()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;->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/MutableVector$MutableVectorList;-><init>(Landroidx/compose/runtime/collection/MutableVector;)V
+HSPLandroidx/compose/runtime/collection/MutableVector$MutableVectorList;->get(I)Ljava/lang/Object;
+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
+HSPLandroidx/compose/runtime/collection/MutableVector$VectorListIterator;-><init>(ILjava/util/List;)V
+HSPLandroidx/compose/runtime/collection/MutableVector$VectorListIterator;->hasNext()Z
+HSPLandroidx/compose/runtime/collection/MutableVector$VectorListIterator;->next()Ljava/lang/Object;
+HSPLandroidx/compose/runtime/collection/MutableVector;-><init>([Ljava/lang/Object;)V
+HSPLandroidx/compose/runtime/collection/MutableVector;->add(ILjava/lang/Object;)V
+HSPLandroidx/compose/runtime/collection/MutableVector;->add(Ljava/lang/Object;)V
+HSPLandroidx/compose/runtime/collection/MutableVector;->addAll(ILandroidx/compose/runtime/collection/MutableVector;)V
+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;->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/external/kotlinx/collections/immutable/implementations/immutableList/SmallPersistentVector;-><clinit>()V
+HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableList/SmallPersistentVector;-><init>([Ljava/lang/Object;)V
+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;->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;->removeAt(I)Landroidx/compose/runtime/external/kotlinx/collections/immutable/PersistentList;
+HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/PersistentHashMap;-><clinit>()V
+HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/PersistentHashMap;-><init>(Landroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/TrieNode;I)V
+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;->get(Ljava/lang/Object;)Ljava/lang/Object;
+HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/PersistentHashMap;->put(Ljava/lang/Object;Landroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/persistentOrderedSet/Links;)Landroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/PersistentHashMap;
+HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/PersistentHashMapBaseIterator;-><init>(Landroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/TrieNode;[Landroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/TrieNodeBaseIterator;)V
+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;
+HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/PersistentHashMapBuilder;-><init>(Landroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/PersistentHashMap;)V
+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;->setSize(I)V
+HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/PersistentHashMapKeys;-><init>(Landroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/PersistentHashMap;I)V
+HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/PersistentHashMapKeys;->getSize()I
+HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/PersistentHashMapKeys;->iterator()Ljava/util/Iterator;
+HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/PersistentHashMapKeysIterator;-><init>(Landroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/TrieNode;I)V
+HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/TrieNode;-><clinit>()V
+HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/TrieNode;-><init>(II[Ljava/lang/Object;L_COROUTINE/ArtificialStackFrames;)V
+HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/TrieNode;->bufferMoveEntryToNode(IIILjava/lang/Object;Ljava/lang/Object;IL_COROUTINE/ArtificialStackFrames;)[Ljava/lang/Object;
+HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/TrieNode;->containsKey(IILjava/lang/Object;)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;->entryKeyIndex$runtime_release(I)I
+HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/TrieNode;->get(IILjava/lang/Object;)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;->makeNode(ILjava/lang/Object;Ljava/lang/Object;ILjava/lang/Object;Ljava/lang/Object;IL_COROUTINE/ArtificialStackFrames;)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;->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(IILjava/lang/Object;Ljava/lang/Object;)Landroidx/compose/ui/input/pointer/util/PointerIdArray;
+HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/TrieNode;->valueAtKeyIndex(I)Ljava/lang/Object;
+HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/TrieNodeBaseIterator;-><init>()V
+HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/TrieNodeBaseIterator;->reset(II[Ljava/lang/Object;)V
+HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/TrieNodeKeysIterator;-><init>(I)V
+HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/TrieNodeKeysIterator;->next()Ljava/lang/Object;
+HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/persistentOrderedSet/Links;-><init>(Ljava/lang/Object;Ljava/lang/Object;)V
+HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/persistentOrderedSet/PersistentOrderedSet;-><clinit>()V
+HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/persistentOrderedSet/PersistentOrderedSet;-><init>(Ljava/lang/Object;Ljava/lang/Object;Landroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/PersistentHashMap;)V
+HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/persistentOrderedSet/PersistentOrderedSet;->getSize()I
+HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/internal/DeltaCounter;-><init>()V
+HSPLandroidx/compose/runtime/internal/ComposableLambdaImpl;-><init>(IZ)V
+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;Ljava/lang/Object;)Ljava/lang/Object;
+HSPLandroidx/compose/runtime/internal/ComposableLambdaImpl;->update(Lkotlin/jvm/internal/Lambda;)V
+HSPLandroidx/compose/runtime/internal/PersistentCompositionLocalHashMap$Builder;-><init>(Landroidx/compose/runtime/internal/PersistentCompositionLocalHashMap;)V
+HSPLandroidx/compose/runtime/internal/PersistentCompositionLocalHashMap$Builder;->build()Landroidx/compose/runtime/internal/PersistentCompositionLocalHashMap;
+HSPLandroidx/compose/runtime/internal/PersistentCompositionLocalHashMap;-><clinit>()V
+HSPLandroidx/compose/runtime/internal/PersistentCompositionLocalHashMap;->containsKey(Ljava/lang/Object;)Z
+HSPLandroidx/compose/runtime/internal/PersistentCompositionLocalHashMap;->get(Ljava/lang/Object;)Ljava/lang/Object;
+HSPLandroidx/compose/runtime/internal/PersistentCompositionLocalHashMap;->putValue(Landroidx/compose/runtime/CompositionLocal;Landroidx/compose/runtime/State;)Landroidx/compose/runtime/internal/PersistentCompositionLocalHashMap;
+HSPLandroidx/compose/runtime/internal/ThreadMap;-><init>(I[J[Ljava/lang/Object;)V
+HSPLandroidx/compose/runtime/internal/ThreadMap;->find(J)I
+HSPLandroidx/compose/runtime/internal/ThreadMap;->newWith(JLjava/lang/Object;)Landroidx/compose/runtime/internal/ThreadMap;
+HSPLandroidx/compose/runtime/saveable/ListSaverKt$listSaver$1;-><init>(Lkotlin/coroutines/CoroutineContext$plus$1;)V
+HSPLandroidx/compose/runtime/saveable/ListSaverKt$listSaver$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
+HSPLandroidx/compose/runtime/saveable/RememberSaveableKt$rememberSaveable$1;-><init>(Landroidx/compose/runtime/saveable/SaveableHolder;Landroidx/compose/runtime/saveable/SaverKt$Saver$1;Landroidx/compose/runtime/saveable/SaveableStateRegistry;Ljava/lang/String;Ljava/lang/Object;[Ljava/lang/Object;)V
+HSPLandroidx/compose/runtime/saveable/RememberSaveableKt$rememberSaveable$1;->invoke()Ljava/lang/Object;
+HSPLandroidx/compose/runtime/saveable/SaveableHolder;-><init>(Landroidx/compose/runtime/saveable/SaverKt$Saver$1;Landroidx/compose/runtime/saveable/SaveableStateRegistry;Ljava/lang/String;Ljava/lang/Object;[Ljava/lang/Object;)V
+HSPLandroidx/compose/runtime/saveable/SaveableHolder;->invoke()Ljava/lang/Object;
+HSPLandroidx/compose/runtime/saveable/SaveableHolder;->onRemembered()V
+HSPLandroidx/compose/runtime/saveable/SaveableHolder;->register()V
+HSPLandroidx/compose/runtime/saveable/SaveableStateHolderImpl$RegistryHolder$registry$1;-><init>(Landroidx/compose/runtime/saveable/SaveableStateHolderImpl;)V
+HSPLandroidx/compose/runtime/saveable/SaveableStateHolderImpl$RegistryHolder;-><init>(Landroidx/compose/runtime/saveable/SaveableStateHolderImpl;Ljava/lang/Object;)V
+HSPLandroidx/compose/runtime/saveable/SaveableStateHolderImpl$SaveableStateProvider$1$1$invoke$$inlined$onDispose$1;-><init>(Landroidx/compose/runtime/saveable/SaveableStateHolderImpl$RegistryHolder;Landroidx/compose/runtime/saveable/SaveableStateHolderImpl;Ljava/lang/Object;)V
+HSPLandroidx/compose/runtime/saveable/SaveableStateHolderImpl$SaveableStateProvider$1$1$invoke$$inlined$onDispose$1;->dispose()V
+HSPLandroidx/compose/runtime/saveable/SaveableStateHolderImpl;-><clinit>()V
+HSPLandroidx/compose/runtime/saveable/SaveableStateHolderImpl;-><init>(Ljava/util/Map;)V
+HSPLandroidx/compose/runtime/saveable/SaveableStateHolderImpl;->SaveableStateProvider(Ljava/lang/Object;Lkotlin/jvm/functions/Function2;Landroidx/compose/runtime/Composer;I)V
+HSPLandroidx/compose/runtime/saveable/SaveableStateRegistryImpl$registerProvider$3;-><init>(Landroidx/compose/runtime/saveable/SaveableStateRegistryImpl;Ljava/lang/String;Lkotlin/jvm/functions/Function0;)V
+HSPLandroidx/compose/runtime/saveable/SaveableStateRegistryImpl;-><init>(Ljava/util/Map;Lkotlin/jvm/functions/Function1;)V
+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/SaveableStateRegistryImpl$registerProvider$3;
+HSPLandroidx/compose/runtime/saveable/SaveableStateRegistryKt;-><clinit>()V
+HSPLandroidx/compose/runtime/saveable/SaverKt$Saver$1;-><init>(Lkotlin/jvm/functions/Function2;Lkotlin/jvm/functions/Function1;)V
+HSPLandroidx/compose/runtime/saveable/SaverKt;-><clinit>()V
+HSPLandroidx/compose/runtime/snapshots/GlobalSnapshot$1$1$1;-><init>(ILjava/util/List;)V
+HSPLandroidx/compose/runtime/snapshots/GlobalSnapshot$1$1$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
+HSPLandroidx/compose/runtime/snapshots/GlobalSnapshot;-><init>(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/MutableSnapshot;-><clinit>()V
+HSPLandroidx/compose/runtime/snapshots/MutableSnapshot;-><init>(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()Lokhttp3/MediaType;
+HSPLandroidx/compose/runtime/snapshots/MutableSnapshot;->closeLocked$runtime_release()V
+HSPLandroidx/compose/runtime/snapshots/MutableSnapshot;->dispose()V
+HSPLandroidx/compose/runtime/snapshots/MutableSnapshot;->getModified$runtime_release()Landroidx/compose/runtime/collection/IdentityArraySet;
+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/HashMap;Landroidx/compose/runtime/snapshots/SnapshotIdSet;)Lokhttp3/MediaType;
+HSPLandroidx/compose/runtime/snapshots/MutableSnapshot;->nestedDeactivated$runtime_release()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;->releasePinnedSnapshotsForCloseLocked$runtime_release()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/Snapshot$Companion$$ExternalSyntheticLambda0;-><init>(Lkotlin/jvm/internal/Lambda;I)V
+HSPLandroidx/compose/runtime/snapshots/Snapshot;-><init>(ILandroidx/compose/runtime/snapshots/SnapshotIdSet;)V
+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;->makeCurrent()Landroidx/compose/runtime/snapshots/Snapshot;
+HSPLandroidx/compose/runtime/snapshots/Snapshot;->restoreCurrent(Landroidx/compose/runtime/snapshots/Snapshot;)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/SnapshotApplyResult$Success;-><clinit>()V
+HSPLandroidx/compose/runtime/snapshots/SnapshotDoubleIndexHeap;-><init>()V
+HSPLandroidx/compose/runtime/snapshots/SnapshotDoubleIndexHeap;->add(I)I
+HSPLandroidx/compose/runtime/snapshots/SnapshotDoubleIndexHeap;->swap(II)V
+HSPLandroidx/compose/runtime/snapshots/SnapshotIdSet;-><clinit>()V
+HSPLandroidx/compose/runtime/snapshots/SnapshotIdSet;-><init>(JJI[I)V
+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;->or(Landroidx/compose/runtime/snapshots/SnapshotIdSet;)Landroidx/compose/runtime/snapshots/SnapshotIdSet;
+HSPLandroidx/compose/runtime/snapshots/SnapshotIdSet;->set(I)Landroidx/compose/runtime/snapshots/SnapshotIdSet;
+HSPLandroidx/compose/runtime/snapshots/SnapshotKt$mergedReadObserver$1;-><init>(Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function1;I)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
+HSPLandroidx/compose/runtime/snapshots/SnapshotKt;-><clinit>()V
+HSPLandroidx/compose/runtime/snapshots/SnapshotKt;->access$advanceGlobalSnapshot()V
+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/HashMap;
+HSPLandroidx/compose/runtime/snapshots/SnapshotKt;->access$validateOpen(Landroidx/compose/runtime/snapshots/Snapshot;)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(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;->currentSnapshot()Landroidx/compose/runtime/snapshots/Snapshot;
+HSPLandroidx/compose/runtime/snapshots/SnapshotKt;->mergedReadObserver(Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function1;Z)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;->notifyWrite(Landroidx/compose/runtime/snapshots/Snapshot;Landroidx/compose/runtime/snapshots/StateObject;)V
+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;->writableRecord(Landroidx/compose/runtime/snapshots/StateRecord;Landroidx/compose/runtime/snapshots/StateObject;Landroidx/compose/runtime/snapshots/Snapshot;)Landroidx/compose/runtime/snapshots/StateRecord;
+HSPLandroidx/compose/runtime/snapshots/SnapshotStateList$StateListStateRecord;-><init>(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$addAll$1;-><init>(Landroidx/compose/ui/layout/Placeable;II)V
+HSPLandroidx/compose/runtime/snapshots/SnapshotStateList$addAll$1;->invoke(Landroidx/compose/ui/layout/Placeable$PlacementScope;)V
+HSPLandroidx/compose/runtime/snapshots/SnapshotStateList$addAll$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
+HSPLandroidx/compose/runtime/snapshots/SnapshotStateList;-><init>()V
+HSPLandroidx/compose/runtime/snapshots/SnapshotStateList;->add(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;->getReadable$runtime_release()Landroidx/compose/runtime/snapshots/SnapshotStateList$StateListStateRecord;
+HSPLandroidx/compose/runtime/snapshots/SnapshotStateList;->isEmpty()Z
+HSPLandroidx/compose/runtime/snapshots/SnapshotStateList;->prependStateRecord(Landroidx/compose/runtime/snapshots/StateRecord;)V
+HSPLandroidx/compose/runtime/snapshots/SnapshotStateList;->remove(Ljava/lang/Object;)Z
+HSPLandroidx/compose/runtime/snapshots/SnapshotStateList;->size()I
+HSPLandroidx/compose/runtime/snapshots/SnapshotStateListKt;-><clinit>()V
+HSPLandroidx/compose/runtime/snapshots/SnapshotStateObserver$ObservedScopeMap;-><init>(Lkotlin/jvm/functions/Function1;)V
+HSPLandroidx/compose/runtime/snapshots/SnapshotStateObserver$ObservedScopeMap;->observe(Ljava/lang/Object;Lkotlin/collections/AbstractMap$toString$1;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;ILjava/lang/Object;Landroidx/compose/runtime/collection/IdentityArrayIntMap;)V
+HSPLandroidx/compose/runtime/snapshots/SnapshotStateObserver$ObservedScopeMap;->removeScopeIf()V
+HSPLandroidx/compose/runtime/snapshots/SnapshotStateObserver;-><init>(Landroidx/compose/ui/platform/AndroidComposeView$focusOwner$1;)V
+HSPLandroidx/compose/runtime/snapshots/SnapshotStateObserver;->access$drainChanges(Landroidx/compose/runtime/snapshots/SnapshotStateObserver;)Z
+HSPLandroidx/compose/runtime/snapshots/StateRecord;-><init>()V
+HSPLandroidx/compose/runtime/snapshots/TransparentObserverMutableSnapshot;-><init>(Landroidx/compose/runtime/snapshots/MutableSnapshot;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function1;ZZ)V
+HSPLandroidx/compose/runtime/snapshots/TransparentObserverMutableSnapshot;->apply()Lokhttp3/MediaType;
+HSPLandroidx/compose/runtime/snapshots/TransparentObserverMutableSnapshot;->dispose()V
+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;
+HSPLandroidx/compose/runtime/tooling/InspectionTablesKt;-><clinit>()V
+HSPLandroidx/compose/ui/BiasAlignment$Horizontal;-><init>(F)V
+HSPLandroidx/compose/ui/BiasAlignment$Horizontal;->align(IILandroidx/compose/ui/unit/LayoutDirection;)I
+HSPLandroidx/compose/ui/BiasAlignment$Horizontal;->equals(Ljava/lang/Object;)Z
+HSPLandroidx/compose/ui/BiasAlignment$Vertical;-><init>(F)V
+HSPLandroidx/compose/ui/BiasAlignment$Vertical;->equals(Ljava/lang/Object;)Z
+HSPLandroidx/compose/ui/BiasAlignment;-><init>(FF)V
+HSPLandroidx/compose/ui/BiasAlignment;->align-KFBX0sM(JJLandroidx/compose/ui/unit/LayoutDirection;)J
+HSPLandroidx/compose/ui/BiasAlignment;->equals(Ljava/lang/Object;)Z
+HSPLandroidx/compose/ui/CombinedModifier$toString$1;-><clinit>()V
+HSPLandroidx/compose/ui/CombinedModifier$toString$1;-><init>(I)V
+HSPLandroidx/compose/ui/CombinedModifier$toString$1;->invoke(Landroidx/compose/ui/layout/Measurable;I)Ljava/lang/Integer;
+HSPLandroidx/compose/ui/CombinedModifier$toString$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
+HSPLandroidx/compose/ui/CombinedModifier;-><init>(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/ComposedModifier;-><init>(Lkotlin/jvm/functions/Function3;)V
+HSPLandroidx/compose/ui/Modifier$Companion;-><clinit>()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;
+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;
+HSPLandroidx/compose/ui/Modifier$Node;-><init>()V
+HSPLandroidx/compose/ui/Modifier$Node;->getCoroutineScope()Lkotlinx/coroutines/CoroutineScope;
+HSPLandroidx/compose/ui/Modifier$Node;->getShouldAutoInvalidate()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;->updateCoordinator$ui_release(Landroidx/compose/ui/node/NodeCoordinator;)V
+HSPLandroidx/compose/ui/Modifier;->then(Landroidx/compose/ui/Modifier;)Landroidx/compose/ui/Modifier;
+HSPLandroidx/compose/ui/MotionDurationScale;->getKey()Lkotlin/coroutines/CoroutineContext$Key;
+HSPLandroidx/compose/ui/ZIndexElement;-><init>()V
+HSPLandroidx/compose/ui/ZIndexElement;->create()Landroidx/compose/ui/Modifier$Node;
+HSPLandroidx/compose/ui/ZIndexElement;->equals(Ljava/lang/Object;)Z
+HSPLandroidx/compose/ui/ZIndexNode$measure$1;-><init>(Ljava/lang/Object;ILjava/lang/Object;)V
+HSPLandroidx/compose/ui/ZIndexNode$measure$1;->invoke(Landroidx/compose/ui/layout/Placeable$PlacementScope;)V
+HSPLandroidx/compose/ui/ZIndexNode$measure$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
+HSPLandroidx/compose/ui/ZIndexNode$measure$1;->invoke(Ljava/lang/Throwable;)V
+HSPLandroidx/compose/ui/ZIndexNode;-><init>(F)V
+HSPLandroidx/compose/ui/ZIndexNode;->measure-3p2s80s(Landroidx/compose/ui/layout/MeasureScope;Landroidx/compose/ui/layout/Measurable;J)Landroidx/compose/ui/layout/MeasureResult;
+HSPLandroidx/compose/ui/autofill/AndroidAutofill;-><init>(Landroid/view/View;Landroidx/compose/ui/autofill/AutofillTree;)V
+HSPLandroidx/compose/ui/autofill/AutofillCallback;-><clinit>()V
+HSPLandroidx/compose/ui/autofill/AutofillCallback;->register(Landroidx/compose/ui/autofill/AndroidAutofill;)V
+HSPLandroidx/compose/ui/autofill/AutofillTree;-><init>()V
+HSPLandroidx/compose/ui/draw/CacheDrawModifierNodeImpl;-><init>(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;->getDensity()Landroidx/compose/ui/unit/Density;
+HSPLandroidx/compose/ui/draw/CacheDrawModifierNodeImpl;->getLayoutDirection()Landroidx/compose/ui/unit/LayoutDirection;
+HSPLandroidx/compose/ui/draw/CacheDrawModifierNodeImpl;->getSize-NH-jbRc()J
+HSPLandroidx/compose/ui/draw/CacheDrawModifierNodeImpl;->invalidateDrawCache()V
+HSPLandroidx/compose/ui/draw/CacheDrawModifierNodeImpl;->onMeasureResultChanged()V
+HSPLandroidx/compose/ui/draw/CacheDrawScope$onDrawBehind$1;-><init>(ILkotlin/jvm/functions/Function1;)V
+HSPLandroidx/compose/ui/draw/CacheDrawScope$onDrawBehind$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
+HSPLandroidx/compose/ui/draw/CacheDrawScope;-><init>()V
+HSPLandroidx/compose/ui/draw/CacheDrawScope;->getDensity()F
+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/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;
+HSPLandroidx/compose/ui/draw/ClipKt;->drawWithCache(Landroidx/compose/ui/Modifier;Lkotlin/jvm/functions/Function1;)Landroidx/compose/ui/Modifier;
+HSPLandroidx/compose/ui/draw/ClipKt;->paint$default(Landroidx/compose/ui/Modifier;Landroidx/compose/ui/graphics/painter/Painter;Landroidx/compose/ui/Alignment;Landroidx/compose/ui/layout/ContentScale;FLandroidx/compose/ui/graphics/BlendModeColorFilter;)Landroidx/compose/ui/Modifier;
+HSPLandroidx/compose/ui/draw/DrawResult;-><init>(Lkotlin/jvm/functions/Function1;)V
+HSPLandroidx/compose/ui/draw/DrawWithCacheElement;-><init>(Lkotlin/jvm/functions/Function1;)V
+HSPLandroidx/compose/ui/draw/DrawWithCacheElement;->create()Landroidx/compose/ui/Modifier$Node;
+HSPLandroidx/compose/ui/draw/DrawWithCacheElement;->equals(Ljava/lang/Object;)Z
+HSPLandroidx/compose/ui/draw/EmptyBuildDrawCacheParams;-><clinit>()V
+HSPLandroidx/compose/ui/draw/PainterElement;-><init>(Landroidx/compose/ui/graphics/painter/Painter;ZLandroidx/compose/ui/Alignment;Landroidx/compose/ui/layout/ContentScale;FLandroidx/compose/ui/graphics/BlendModeColorFilter;)V
+HSPLandroidx/compose/ui/draw/PainterElement;->create()Landroidx/compose/ui/Modifier$Node;
+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/PainterNode$measure$1;-><init>(Landroidx/compose/ui/layout/Placeable;I)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;
+HSPLandroidx/compose/ui/draw/PainterNode;-><init>(Landroidx/compose/ui/graphics/painter/Painter;ZLandroidx/compose/ui/Alignment;Landroidx/compose/ui/layout/ContentScale;FLandroidx/compose/ui/graphics/BlendModeColorFilter;)V
+HSPLandroidx/compose/ui/draw/PainterNode;->draw(Landroidx/compose/ui/graphics/drawscope/ContentDrawScope;)V
+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/focus/FocusChangedElement;-><init>(Lkotlin/jvm/functions/Function1;)V
+HSPLandroidx/compose/ui/focus/FocusChangedElement;->create()Landroidx/compose/ui/Modifier$Node;
+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/FocusChangedNode;-><init>(Lkotlin/jvm/functions/Function1;)V
+HSPLandroidx/compose/ui/focus/FocusChangedNode;->onFocusEvent(Landroidx/compose/ui/focus/FocusStateImpl;)V
+HSPLandroidx/compose/ui/focus/FocusDirection;-><init>(I)V
+HSPLandroidx/compose/ui/focus/FocusInvalidationManager;-><init>(Landroidx/compose/ui/platform/AndroidComposeView$focusOwner$1;)V
+HSPLandroidx/compose/ui/focus/FocusInvalidationManager;->scheduleInvalidation(Ljava/util/LinkedHashSet;Ljava/lang/Object;)V
+HSPLandroidx/compose/ui/focus/FocusModifierKt;->beamBeats-I7lrPNg(Landroidx/compose/ui/geometry/Rect;Landroidx/compose/ui/geometry/Rect;Landroidx/compose/ui/geometry/Rect;I)Z
+HSPLandroidx/compose/ui/focus/FocusModifierKt;->beamBeats_I7lrPNg$inSourceBeam(ILandroidx/compose/ui/geometry/Rect;Landroidx/compose/ui/geometry/Rect;)Z
+HSPLandroidx/compose/ui/focus/FocusModifierKt;->clearFocus(Landroidx/compose/ui/focus/FocusTargetNode;ZZ)Z
+HSPLandroidx/compose/ui/focus/FocusModifierKt;->collectAccessibleChildren(Landroidx/compose/ui/node/DelegatableNode;Landroidx/compose/runtime/collection/MutableVector;)V
+HSPLandroidx/compose/ui/focus/FocusModifierKt;->findActiveFocusNode(Landroidx/compose/ui/focus/FocusTargetNode;)Landroidx/compose/ui/focus/FocusTargetNode;
+HSPLandroidx/compose/ui/focus/FocusModifierKt;->findBestCandidate-4WY_MpI(Landroidx/compose/runtime/collection/MutableVector;Landroidx/compose/ui/geometry/Rect;I)Landroidx/compose/ui/focus/FocusTargetNode;
+HSPLandroidx/compose/ui/focus/FocusModifierKt;->findChildCorrespondingToFocusEnter--OM-vw8(Landroidx/compose/ui/focus/FocusTargetNode;ILkotlin/jvm/functions/Function1;)Z
+HSPLandroidx/compose/ui/focus/FocusModifierKt;->focusRect(Landroidx/compose/ui/focus/FocusTargetNode;)Landroidx/compose/ui/geometry/Rect;
+HSPLandroidx/compose/ui/focus/FocusModifierKt;->generateAndSearchChildren-4C6V_qg$1(Landroidx/compose/ui/focus/FocusTargetNode;Landroidx/compose/ui/focus/FocusTargetNode;ILkotlin/jvm/functions/Function1;)Z
+HSPLandroidx/compose/ui/focus/FocusModifierKt;->getActiveChild(Landroidx/compose/ui/focus/FocusTargetNode;)Landroidx/compose/ui/focus/FocusTargetNode;
+HSPLandroidx/compose/ui/focus/FocusModifierKt;->getFocusState(Landroidx/compose/ui/focus/FocusEventModifierNode;)Landroidx/compose/ui/focus/FocusStateImpl;
+HSPLandroidx/compose/ui/focus/FocusModifierKt;->grantFocus(Landroidx/compose/ui/focus/FocusTargetNode;)V
+HSPLandroidx/compose/ui/focus/FocusModifierKt;->invalidateFocusEvent(Landroidx/compose/ui/focus/FocusEventModifierNode;)V
+HSPLandroidx/compose/ui/focus/FocusModifierKt;->isBetterCandidate_I7lrPNg$isCandidate(ILandroidx/compose/ui/geometry/Rect;Landroidx/compose/ui/geometry/Rect;)Z
+HSPLandroidx/compose/ui/focus/FocusModifierKt;->isBetterCandidate_I7lrPNg$weightedDistance(ILandroidx/compose/ui/geometry/Rect;Landroidx/compose/ui/geometry/Rect;)J
+HSPLandroidx/compose/ui/focus/FocusModifierKt;->isEligibleForFocusSearch(Landroidx/compose/ui/focus/FocusTargetNode;)Z
+HSPLandroidx/compose/ui/focus/FocusModifierKt;->onFocusChanged(Landroidx/compose/ui/Modifier;Lkotlin/jvm/functions/Function1;)Landroidx/compose/ui/Modifier;
+HSPLandroidx/compose/ui/focus/FocusModifierKt;->performCustomClearFocus-Mxy_nc0(Landroidx/compose/ui/focus/FocusTargetNode;I)I
+HSPLandroidx/compose/ui/focus/FocusModifierKt;->performCustomEnter-Mxy_nc0(Landroidx/compose/ui/focus/FocusTargetNode;I)I
+HSPLandroidx/compose/ui/focus/FocusModifierKt;->performCustomRequestFocus-Mxy_nc0(Landroidx/compose/ui/focus/FocusTargetNode;I)I
+HSPLandroidx/compose/ui/focus/FocusModifierKt;->performRequestFocus(Landroidx/compose/ui/focus/FocusTargetNode;)Z
+HSPLandroidx/compose/ui/focus/FocusModifierKt;->refreshFocusEventNodes(Landroidx/compose/ui/focus/FocusTargetNode;)V
+HSPLandroidx/compose/ui/focus/FocusModifierKt;->requestFocusForChild(Landroidx/compose/ui/focus/FocusTargetNode;Landroidx/compose/ui/focus/FocusTargetNode;)Z
+HSPLandroidx/compose/ui/focus/FocusModifierKt;->requireActiveChild(Landroidx/compose/ui/focus/FocusTargetNode;)Landroidx/compose/ui/focus/FocusTargetNode;
+HSPLandroidx/compose/ui/focus/FocusModifierKt;->requireTransactionManager(Landroidx/compose/ui/focus/FocusTargetNode;)Lcom/google/gson/internal/ConstructorConstructor;
+HSPLandroidx/compose/ui/focus/FocusModifierKt;->searchBeyondBounds--OM-vw8(Landroidx/compose/ui/focus/FocusTargetNode;ILandroidx/compose/ui/focus/FocusOwnerImpl$moveFocus$foundNextItem$1;)Ljava/lang/Object;
+HSPLandroidx/compose/ui/focus/FocusModifierKt;->searchChildren-4C6V_qg$1(Landroidx/compose/ui/focus/FocusTargetNode;Landroidx/compose/ui/focus/FocusTargetNode;ILkotlin/jvm/functions/Function1;)Z
+HSPLandroidx/compose/ui/focus/FocusModifierKt;->twoDimensionalFocusSearch--OM-vw8(Landroidx/compose/ui/focus/FocusTargetNode;ILandroidx/compose/ui/focus/FocusOwnerImpl$moveFocus$foundNextItem$1;)Ljava/lang/Boolean;
+HSPLandroidx/compose/ui/focus/FocusOwnerImpl$modifier$1;-><init>(Landroidx/compose/ui/focus/FocusOwnerImpl;)V
+HSPLandroidx/compose/ui/focus/FocusOwnerImpl$modifier$1;->create()Landroidx/compose/ui/Modifier$Node;
+HSPLandroidx/compose/ui/focus/FocusOwnerImpl$moveFocus$foundNextItem$1;-><init>(Landroidx/compose/ui/focus/FocusTargetNode;Ljava/lang/Object;ILjava/lang/Object;I)V
+HSPLandroidx/compose/ui/focus/FocusOwnerImpl$moveFocus$foundNextItem$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
+HSPLandroidx/compose/ui/focus/FocusOwnerImpl;-><init>(Landroidx/compose/ui/platform/AndroidComposeView$focusOwner$1;)V
+HSPLandroidx/compose/ui/focus/FocusOwnerImpl;->moveFocus-3ESFkO8(I)Z
+HSPLandroidx/compose/ui/focus/FocusProperties$exit$1;-><clinit>()V
+HSPLandroidx/compose/ui/focus/FocusProperties$exit$1;-><init>(I)V
+HSPLandroidx/compose/ui/focus/FocusProperties$exit$1;->invoke(Landroidx/compose/ui/node/AlignmentLinesOwner;)V
+HSPLandroidx/compose/ui/focus/FocusProperties$exit$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
+HSPLandroidx/compose/ui/focus/FocusProperties$exit$1;->invoke-3ESFkO8()Landroidx/compose/ui/focus/FocusRequester;
+HSPLandroidx/compose/ui/focus/FocusPropertiesImpl;-><init>()V
+HSPLandroidx/compose/ui/focus/FocusPropertiesImpl;->setCanFocus(Z)V
+HSPLandroidx/compose/ui/focus/FocusRequester;-><clinit>()V
+HSPLandroidx/compose/ui/focus/FocusRequester;-><init>()V
+HSPLandroidx/compose/ui/focus/FocusStateImpl;-><clinit>()V
+HSPLandroidx/compose/ui/focus/FocusStateImpl;-><init>(ILjava/lang/String;)V
+HSPLandroidx/compose/ui/focus/FocusStateImpl;->isFocused()Z
+HSPLandroidx/compose/ui/focus/FocusTargetNode$FocusTargetElement;-><clinit>()V
+HSPLandroidx/compose/ui/focus/FocusTargetNode$FocusTargetElement;-><init>()V
+HSPLandroidx/compose/ui/focus/FocusTargetNode$FocusTargetElement;->create()Landroidx/compose/ui/Modifier$Node;
+HSPLandroidx/compose/ui/focus/FocusTargetNode$FocusTargetElement;->equals(Ljava/lang/Object;)Z
+HSPLandroidx/compose/ui/focus/FocusTargetNode;-><init>()V
+HSPLandroidx/compose/ui/focus/FocusTargetNode;->fetchFocusProperties$ui_release()Landroidx/compose/ui/focus/FocusPropertiesImpl;
+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
+HSPLandroidx/compose/ui/geometry/CornerRadius;-><clinit>()V
+HSPLandroidx/compose/ui/geometry/CornerRadius;->getX-impl(J)F
+HSPLandroidx/compose/ui/geometry/CornerRadius;->getY-impl(J)F
+HSPLandroidx/compose/ui/geometry/MutableRect;-><init>()V
+HSPLandroidx/compose/ui/geometry/MutableRect;->isEmpty()Z
+HSPLandroidx/compose/ui/geometry/Offset;-><clinit>()V
+HSPLandroidx/compose/ui/geometry/Offset;->getX-impl(J)F
+HSPLandroidx/compose/ui/geometry/Offset;->getY-impl(J)F
+HSPLandroidx/compose/ui/geometry/Rect;-><clinit>()V
+HSPLandroidx/compose/ui/geometry/Rect;-><init>(FFFF)V
+HSPLandroidx/compose/ui/geometry/Rect;->equals(Ljava/lang/Object;)Z
+HSPLandroidx/compose/ui/geometry/Rect;->intersect(Landroidx/compose/ui/geometry/Rect;)Landroidx/compose/ui/geometry/Rect;
+HSPLandroidx/compose/ui/geometry/Rect;->translate(FF)Landroidx/compose/ui/geometry/Rect;
+HSPLandroidx/compose/ui/geometry/Rect;->translate-k-4lQ0M(J)Landroidx/compose/ui/geometry/Rect;
+HSPLandroidx/compose/ui/geometry/RoundRect;-><clinit>()V
+HSPLandroidx/compose/ui/geometry/RoundRect;-><init>(FFFFJJJJ)V
+HSPLandroidx/compose/ui/geometry/Size;-><clinit>()V
+HSPLandroidx/compose/ui/geometry/Size;-><init>(J)V
+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/graphics/AndroidCanvas;-><init>()V
+HSPLandroidx/compose/ui/graphics/AndroidCanvas;->drawImageRect-HPBpro0(Landroidx/compose/ui/graphics/ImageBitmap;JJJJLandroidx/compose/ui/graphics/AndroidPaint;)V
+HSPLandroidx/compose/ui/graphics/AndroidCanvas;->drawRect(FFFFLandroidx/compose/ui/graphics/AndroidPaint;)V
+HSPLandroidx/compose/ui/graphics/AndroidCanvas;->drawRoundRect(FFFFFFLandroidx/compose/ui/graphics/AndroidPaint;)V
+HSPLandroidx/compose/ui/graphics/AndroidCanvas;->restore()V
+HSPLandroidx/compose/ui/graphics/AndroidCanvas;->save()V
+HSPLandroidx/compose/ui/graphics/AndroidCanvas;->scale(FF)V
+HSPLandroidx/compose/ui/graphics/AndroidCanvas;->translate(FF)V
+HSPLandroidx/compose/ui/graphics/AndroidCanvas_androidKt;-><clinit>()V
+HSPLandroidx/compose/ui/graphics/AndroidImageBitmap;-><init>(Landroid/graphics/Bitmap;)V
+HSPLandroidx/compose/ui/graphics/AndroidPaint;-><init>(Landroid/graphics/Paint;)V
+HSPLandroidx/compose/ui/graphics/AndroidPaint;->setAlpha(F)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;->setStyle-k9PVt8s(I)V
+HSPLandroidx/compose/ui/graphics/AndroidPaint_androidKt$WhenMappings;-><clinit>()V
+HSPLandroidx/compose/ui/graphics/BlockGraphicsLayerElement;-><init>(Lkotlin/jvm/functions/Function1;)V
+HSPLandroidx/compose/ui/graphics/BlockGraphicsLayerElement;->create()Landroidx/compose/ui/Modifier$Node;
+HSPLandroidx/compose/ui/graphics/BlockGraphicsLayerElement;->equals(Ljava/lang/Object;)Z
+HSPLandroidx/compose/ui/graphics/BlockGraphicsLayerModifier;-><init>(Lkotlin/jvm/functions/Function1;)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/Brush;-><init>()V
+HSPLandroidx/compose/ui/graphics/BrushKt;-><clinit>()V
+HSPLandroidx/compose/ui/graphics/BrushKt;->Color$default(III)J
+HSPLandroidx/compose/ui/graphics/BrushKt;->Color(FFFFLandroidx/compose/ui/graphics/colorspace/ColorSpace;)J
+HSPLandroidx/compose/ui/graphics/BrushKt;->Color(I)J
+HSPLandroidx/compose/ui/graphics/BrushKt;->Color(J)J
+HSPLandroidx/compose/ui/graphics/BrushKt;->Paint()Landroidx/compose/ui/graphics/AndroidPaint;
+HSPLandroidx/compose/ui/graphics/BrushKt;->drawOutline-wDX37Ww$default(Landroidx/compose/ui/graphics/drawscope/DrawScope;Landroidx/compose/ui/graphics/BrushKt;J)V
+HSPLandroidx/compose/ui/graphics/BrushKt;->graphicsLayer(Landroidx/compose/ui/Modifier;Lkotlin/jvm/functions/Function1;)Landroidx/compose/ui/Modifier;
+HSPLandroidx/compose/ui/graphics/BrushKt;->graphicsLayer-Ap8cVGQ$default(Landroidx/compose/ui/Modifier;FFLandroidx/compose/ui/graphics/Shape;ZI)Landroidx/compose/ui/Modifier;
+HSPLandroidx/compose/ui/graphics/BrushKt;->setFrom-tU-YjHk(Landroid/graphics/Matrix;[F)V
+HSPLandroidx/compose/ui/graphics/BrushKt;->toArgb-8_81llA(J)I
+HSPLandroidx/compose/ui/graphics/CanvasZHelper$$ExternalSyntheticApiModelOutline0;->m$1(Landroid/graphics/RenderNode;)I
+HSPLandroidx/compose/ui/graphics/CanvasZHelper$$ExternalSyntheticApiModelOutline0;->m$1(Landroid/graphics/RenderNode;F)V
+HSPLandroidx/compose/ui/graphics/CanvasZHelper$$ExternalSyntheticApiModelOutline0;->m$1(Landroid/graphics/RenderNode;I)V
+HSPLandroidx/compose/ui/graphics/CanvasZHelper$$ExternalSyntheticApiModelOutline0;->m$2(Landroid/graphics/RenderNode;F)V
+HSPLandroidx/compose/ui/graphics/CanvasZHelper$$ExternalSyntheticApiModelOutline0;->m$2(Landroid/graphics/RenderNode;I)V
+HSPLandroidx/compose/ui/graphics/CanvasZHelper$$ExternalSyntheticApiModelOutline0;->m$3(Landroid/graphics/RenderNode;F)V
+HSPLandroidx/compose/ui/graphics/CanvasZHelper$$ExternalSyntheticApiModelOutline0;->m$4(Landroid/graphics/RenderNode;F)V
+HSPLandroidx/compose/ui/graphics/CanvasZHelper$$ExternalSyntheticApiModelOutline0;->m$5(Landroid/graphics/RenderNode;F)V
+HSPLandroidx/compose/ui/graphics/CanvasZHelper$$ExternalSyntheticApiModelOutline0;->m$6(Landroid/graphics/RenderNode;F)V
+HSPLandroidx/compose/ui/graphics/CanvasZHelper$$ExternalSyntheticApiModelOutline0;->m$7(Landroid/graphics/RenderNode;F)V
+HSPLandroidx/compose/ui/graphics/CanvasZHelper$$ExternalSyntheticApiModelOutline0;->m$8(Landroid/graphics/RenderNode;F)V
+HSPLandroidx/compose/ui/graphics/CanvasZHelper$$ExternalSyntheticApiModelOutline0;->m(Landroid/graphics/Canvas;Landroid/graphics/RenderNode;)V
+HSPLandroidx/compose/ui/graphics/CanvasZHelper$$ExternalSyntheticApiModelOutline0;->m(Landroid/graphics/RenderNode;)I
+HSPLandroidx/compose/ui/graphics/CanvasZHelper$$ExternalSyntheticApiModelOutline0;->m(Landroid/graphics/RenderNode;)V
+HSPLandroidx/compose/ui/graphics/CanvasZHelper$$ExternalSyntheticApiModelOutline0;->m(Landroid/graphics/RenderNode;)Z
+HSPLandroidx/compose/ui/graphics/CanvasZHelper$$ExternalSyntheticApiModelOutline0;->m(Landroid/graphics/RenderNode;F)V
+HSPLandroidx/compose/ui/graphics/CanvasZHelper$$ExternalSyntheticApiModelOutline0;->m(Landroid/graphics/RenderNode;I)V
+HSPLandroidx/compose/ui/graphics/CanvasZHelper$$ExternalSyntheticApiModelOutline0;->m(Landroid/graphics/RenderNode;Z)V
+HSPLandroidx/compose/ui/graphics/CanvasZHelper$$ExternalSyntheticApiModelOutline0;->m(Landroid/view/View;)V
+HSPLandroidx/compose/ui/graphics/Color;-><clinit>()V
+HSPLandroidx/compose/ui/graphics/Color;-><init>(J)V
+HSPLandroidx/compose/ui/graphics/Color;->convert-vNxB06k(JLandroidx/compose/ui/graphics/colorspace/ColorSpace;)J
+HSPLandroidx/compose/ui/graphics/Color;->copy-wmQWz5c$default(JF)J
+HSPLandroidx/compose/ui/graphics/Color;->equals(Ljava/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/ColorSpaceVerificationHelper$$ExternalSyntheticLambda1;-><init>(ILjava/lang/Object;)V
+HSPLandroidx/compose/ui/graphics/Float16;-><clinit>()V
+HSPLandroidx/compose/ui/graphics/Float16;->constructor-impl(F)S
+HSPLandroidx/compose/ui/graphics/Float16;->toFloat-impl(S)F
+HSPLandroidx/compose/ui/graphics/GraphicsLayerElement;-><init>(FFFFFFFFFFJLandroidx/compose/ui/graphics/Shape;ZJJI)V
+HSPLandroidx/compose/ui/graphics/GraphicsLayerElement;->create()Landroidx/compose/ui/Modifier$Node;
+HSPLandroidx/compose/ui/graphics/GraphicsLayerElement;->equals(Ljava/lang/Object;)Z
+HSPLandroidx/compose/ui/graphics/GraphicsLayerElement;->update(Landroidx/compose/ui/Modifier$Node;)V
+HSPLandroidx/compose/ui/graphics/GraphicsLayerScopeKt;-><clinit>()V
+HSPLandroidx/compose/ui/graphics/Matrix;->constructor-impl$default()[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/Outline$Rectangle;-><init>(Landroidx/compose/ui/geometry/Rect;)V
+HSPLandroidx/compose/ui/graphics/Outline$Rounded;-><init>(Landroidx/compose/ui/geometry/RoundRect;)V
+HSPLandroidx/compose/ui/graphics/RectangleShapeKt$RectangleShape$1;-><init>(I)V
+HSPLandroidx/compose/ui/graphics/RectangleShapeKt$RectangleShape$1;->createOutline-Pq9zytI(JLandroidx/compose/ui/unit/LayoutDirection;Landroidx/compose/ui/unit/Density;)Landroidx/compose/ui/graphics/BrushKt;
+HSPLandroidx/compose/ui/graphics/ReusableGraphicsLayerScope;-><init>()V
+HSPLandroidx/compose/ui/graphics/Shadow;-><clinit>()V
+HSPLandroidx/compose/ui/graphics/Shadow;-><init>(JJF)V
+HSPLandroidx/compose/ui/graphics/Shadow;->equals(Ljava/lang/Object;)Z
+HSPLandroidx/compose/ui/graphics/SimpleGraphicsLayerModifier$layerBlock$1;-><init>(Landroidx/compose/ui/graphics/SimpleGraphicsLayerModifier;)V
+HSPLandroidx/compose/ui/graphics/SimpleGraphicsLayerModifier$layerBlock$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
+HSPLandroidx/compose/ui/graphics/SimpleGraphicsLayerModifier;-><init>(FFFFFFFFFFJLandroidx/compose/ui/graphics/Shape;ZJJI)V
+HSPLandroidx/compose/ui/graphics/SimpleGraphicsLayerModifier;->getShouldAutoInvalidate()Z
+HSPLandroidx/compose/ui/graphics/SimpleGraphicsLayerModifier;->measure-3p2s80s(Landroidx/compose/ui/layout/MeasureScope;Landroidx/compose/ui/layout/Measurable;J)Landroidx/compose/ui/layout/MeasureResult;
+HSPLandroidx/compose/ui/graphics/SolidColor;-><init>(J)V
+HSPLandroidx/compose/ui/graphics/SolidColor;->applyTo-Pq9zytI(FJLandroidx/compose/ui/graphics/AndroidPaint;)V
+HSPLandroidx/compose/ui/graphics/SolidColor;->equals(Ljava/lang/Object;)Z
+HSPLandroidx/compose/ui/graphics/TransformOrigin;-><clinit>()V
+HSPLandroidx/compose/ui/graphics/colorspace/Adaptation;-><clinit>()V
+HSPLandroidx/compose/ui/graphics/colorspace/Adaptation;-><init>([F)V
+HSPLandroidx/compose/ui/graphics/colorspace/ColorModel;-><clinit>()V
+HSPLandroidx/compose/ui/graphics/colorspace/ColorModel;->equals-impl0(JJ)Z
+HSPLandroidx/compose/ui/graphics/colorspace/ColorSpace;-><init>(Ljava/lang/String;JI)V
+HSPLandroidx/compose/ui/graphics/colorspace/ColorSpace;->equals(Ljava/lang/Object;)Z
+HSPLandroidx/compose/ui/graphics/colorspace/ColorSpace;->isSrgb()Z
+HSPLandroidx/compose/ui/graphics/colorspace/ColorSpaces;-><clinit>()V
+HSPLandroidx/compose/ui/graphics/colorspace/Connector$Companion$identity$1;-><init>(Landroidx/compose/ui/graphics/colorspace/ColorSpace;)V
+HSPLandroidx/compose/ui/graphics/colorspace/Connector;-><clinit>()V
+HSPLandroidx/compose/ui/graphics/colorspace/Connector;-><init>(Landroidx/compose/ui/graphics/colorspace/ColorSpace;Landroidx/compose/ui/graphics/colorspace/ColorSpace;I)V
+HSPLandroidx/compose/ui/graphics/colorspace/Connector;-><init>(Landroidx/compose/ui/graphics/colorspace/ColorSpace;Landroidx/compose/ui/graphics/colorspace/ColorSpace;Landroidx/compose/ui/graphics/colorspace/ColorSpace;[F)V
+HSPLandroidx/compose/ui/graphics/colorspace/Connector;->transformToColor-wmQWz5c$ui_graphics_release(FFFF)J
+HSPLandroidx/compose/ui/graphics/colorspace/Lab;-><init>()V
+HSPLandroidx/compose/ui/graphics/colorspace/Oklab;-><clinit>()V
+HSPLandroidx/compose/ui/graphics/colorspace/Oklab;-><init>()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
+HSPLandroidx/compose/ui/graphics/colorspace/Rgb$$ExternalSyntheticLambda0;-><init>(Landroidx/compose/ui/graphics/colorspace/Rgb;I)V
+HSPLandroidx/compose/ui/graphics/colorspace/Rgb$$ExternalSyntheticLambda0;->invoke(D)D
+HSPLandroidx/compose/ui/graphics/colorspace/Rgb$$ExternalSyntheticLambda1;-><init>(Landroidx/compose/ui/graphics/colorspace/TransferParameters;I)V
+HSPLandroidx/compose/ui/graphics/colorspace/Rgb$$ExternalSyntheticLambda1;->invoke(D)D
+HSPLandroidx/compose/ui/graphics/colorspace/Rgb$$ExternalSyntheticLambda2;-><init>(DI)V
+HSPLandroidx/compose/ui/graphics/colorspace/Rgb$eotf$1;-><init>(Landroidx/compose/ui/graphics/colorspace/Rgb;I)V
+HSPLandroidx/compose/ui/graphics/colorspace/Rgb;-><clinit>()V
+HSPLandroidx/compose/ui/graphics/colorspace/Rgb;-><init>(Ljava/lang/String;[FLandroidx/compose/ui/graphics/colorspace/WhitePoint;DFFI)V
+HSPLandroidx/compose/ui/graphics/colorspace/Rgb;-><init>(Ljava/lang/String;[FLandroidx/compose/ui/graphics/colorspace/WhitePoint;Landroidx/compose/ui/graphics/colorspace/TransferParameters;I)V
+HSPLandroidx/compose/ui/graphics/colorspace/Rgb;-><init>(Ljava/lang/String;[FLandroidx/compose/ui/graphics/colorspace/WhitePoint;[FLandroidx/compose/ui/graphics/colorspace/DoubleFunction;Landroidx/compose/ui/graphics/colorspace/DoubleFunction;FFLandroidx/compose/ui/graphics/colorspace/TransferParameters;I)V
+HSPLandroidx/compose/ui/graphics/colorspace/Rgb;->equals(Ljava/lang/Object;)Z
+HSPLandroidx/compose/ui/graphics/colorspace/Rgb;->getMaxValue(I)F
+HSPLandroidx/compose/ui/graphics/colorspace/Rgb;->getMinValue(I)F
+HSPLandroidx/compose/ui/graphics/colorspace/Rgb;->isSrgb()Z
+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
+HSPLandroidx/compose/ui/graphics/colorspace/TransferParameters;-><init>(DDDDD)V
+HSPLandroidx/compose/ui/graphics/colorspace/TransferParameters;-><init>(DDDDDDD)V
+HSPLandroidx/compose/ui/graphics/colorspace/WhitePoint;-><init>(FF)V
+HSPLandroidx/compose/ui/graphics/colorspace/WhitePoint;->toXyz$ui_graphics_release()[F
+HSPLandroidx/compose/ui/graphics/colorspace/Xyz;-><init>()V
+HSPLandroidx/compose/ui/graphics/drawscope/CanvasDrawScope$DrawParams;-><init>()V
+HSPLandroidx/compose/ui/graphics/drawscope/CanvasDrawScope$drawContext$1;-><init>(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;->setSize-uvyYCjk(J)V
+HSPLandroidx/compose/ui/graphics/drawscope/CanvasDrawScope;-><init>()V
+HSPLandroidx/compose/ui/graphics/drawscope/CanvasDrawScope;->configurePaint-2qPWKa0$default(Landroidx/compose/ui/graphics/drawscope/CanvasDrawScope;JLkotlin/ResultKt;FLandroidx/compose/ui/graphics/BlendModeColorFilter;I)Landroidx/compose/ui/graphics/AndroidPaint;
+HSPLandroidx/compose/ui/graphics/drawscope/CanvasDrawScope;->configurePaint-swdJneE$default(Landroidx/compose/ui/graphics/drawscope/CanvasDrawScope;Landroidx/compose/ui/graphics/Brush;Lkotlin/ResultKt;FLandroidx/compose/ui/graphics/BlendModeColorFilter;I)Landroidx/compose/ui/graphics/AndroidPaint;
+HSPLandroidx/compose/ui/graphics/drawscope/CanvasDrawScope;->configurePaint-swdJneE(Landroidx/compose/ui/graphics/Brush;Lkotlin/ResultKt;FLandroidx/compose/ui/graphics/BlendModeColorFilter;II)Landroidx/compose/ui/graphics/AndroidPaint;
+HSPLandroidx/compose/ui/graphics/drawscope/CanvasDrawScope;->drawImage-AZ2fEMs(Landroidx/compose/ui/graphics/ImageBitmap;JJJJFLkotlin/ResultKt;Landroidx/compose/ui/graphics/BlendModeColorFilter;II)V
+HSPLandroidx/compose/ui/graphics/drawscope/CanvasDrawScope;->drawRect-AsUm42w(Landroidx/compose/ui/graphics/Brush;JJFLkotlin/ResultKt;Landroidx/compose/ui/graphics/BlendModeColorFilter;I)V
+HSPLandroidx/compose/ui/graphics/drawscope/CanvasDrawScope;->drawRect-n-J9OG0(JJJFLkotlin/ResultKt;Landroidx/compose/ui/graphics/BlendModeColorFilter;I)V
+HSPLandroidx/compose/ui/graphics/drawscope/CanvasDrawScope;->drawRoundRect-u-Aw5IA(JJJJLkotlin/ResultKt;FLandroidx/compose/ui/graphics/BlendModeColorFilter;I)V
+HSPLandroidx/compose/ui/graphics/drawscope/CanvasDrawScope;->getDensity()F
+HSPLandroidx/compose/ui/graphics/drawscope/CanvasDrawScope;->getDrawContext()Landroidx/compose/ui/graphics/drawscope/CanvasDrawScope$drawContext$1;
+HSPLandroidx/compose/ui/graphics/drawscope/CanvasDrawScope;->getFontScale()F
+HSPLandroidx/compose/ui/graphics/drawscope/CanvasDrawScope;->selectPaint(Lkotlin/ResultKt;)Landroidx/compose/ui/graphics/AndroidPaint;
+HSPLandroidx/compose/ui/graphics/drawscope/CanvasDrawScopeKt$asDrawTransform$1;-><init>(Landroidx/compose/ui/graphics/drawscope/CanvasDrawScope$drawContext$1;)V
+HSPLandroidx/compose/ui/graphics/drawscope/CanvasDrawScopeKt$asDrawTransform$1;->inset(FFFF)V
+HSPLandroidx/compose/ui/graphics/drawscope/CanvasDrawScopeKt$asDrawTransform$1;->scale-0AR0LA0(FFJ)V
+HSPLandroidx/compose/ui/graphics/drawscope/CanvasDrawScopeKt$asDrawTransform$1;->translate(FF)V
+HSPLandroidx/compose/ui/graphics/drawscope/DrawScope;->drawImage-AZ2fEMs$default(Landroidx/compose/ui/graphics/drawscope/DrawScope;Landroidx/compose/ui/graphics/ImageBitmap;JJJFLandroidx/compose/ui/graphics/BlendModeColorFilter;II)V
+HSPLandroidx/compose/ui/graphics/drawscope/DrawScope;->drawRect-AsUm42w$default(Landroidx/compose/ui/graphics/drawscope/DrawScope;Landroidx/compose/ui/graphics/Brush;JJFLkotlin/ResultKt;I)V
+HSPLandroidx/compose/ui/graphics/drawscope/DrawScope;->drawRect-n-J9OG0$default(Landroidx/compose/ui/graphics/drawscope/DrawScope;JJI)V
+HSPLandroidx/compose/ui/graphics/drawscope/DrawScope;->getCenter-F1C5BW0()J
+HSPLandroidx/compose/ui/graphics/drawscope/DrawScope;->getSize-NH-jbRc()J
+HSPLandroidx/compose/ui/graphics/drawscope/DrawScope;->offsetSize-PENXr5M(JJ)J
+HSPLandroidx/compose/ui/graphics/drawscope/Fill;-><clinit>()V
+HSPLandroidx/compose/ui/graphics/drawscope/Stroke;-><init>(FFIII)V
+HSPLandroidx/compose/ui/graphics/drawscope/Stroke;->equals(Ljava/lang/Object;)Z
+HSPLandroidx/compose/ui/graphics/painter/BitmapPainter;-><init>(Landroidx/compose/ui/graphics/ImageBitmap;)V
+HSPLandroidx/compose/ui/graphics/painter/BitmapPainter;->equals(Ljava/lang/Object;)Z
+HSPLandroidx/compose/ui/graphics/painter/BitmapPainter;->getIntrinsicSize-NH-jbRc()J
+HSPLandroidx/compose/ui/graphics/painter/BitmapPainter;->onDraw(Landroidx/compose/ui/graphics/drawscope/DrawScope;)V
+HSPLandroidx/compose/ui/graphics/painter/Painter;-><init>()V
+HSPLandroidx/compose/ui/input/InputMode;-><init>(I)V
+HSPLandroidx/compose/ui/input/InputMode;->equals(Ljava/lang/Object;)Z
+HSPLandroidx/compose/ui/input/InputModeManagerImpl;-><init>(I)V
+HSPLandroidx/compose/ui/input/key/Key;-><clinit>()V
+HSPLandroidx/compose/ui/input/key/Key;->equals-impl0(JJ)Z
+HSPLandroidx/compose/ui/input/key/KeyEvent;-><init>(Landroid/view/KeyEvent;)V
+HSPLandroidx/compose/ui/input/key/KeyInputElement;-><init>(Lkotlin/jvm/functions/Function1;)V
+HSPLandroidx/compose/ui/input/key/KeyInputElement;->create()Landroidx/compose/ui/Modifier$Node;
+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/KeyInputNode;-><init>(Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function1;)V
+HSPLandroidx/compose/ui/input/key/Key_androidKt;->Key(I)J
+HSPLandroidx/compose/ui/input/key/Key_androidKt;->onKeyEvent(Landroidx/compose/ui/Modifier;Lkotlin/jvm/functions/Function1;)Landroidx/compose/ui/Modifier;
+HSPLandroidx/compose/ui/input/nestedscroll/NestedScrollDispatcher;-><init>()V
+HSPLandroidx/compose/ui/input/nestedscroll/NestedScrollNode;-><init>(Landroidx/compose/foundation/gestures/ScrollableNestedScrollConnection;Landroidx/compose/ui/input/nestedscroll/NestedScrollDispatcher;)V
+HSPLandroidx/compose/ui/input/nestedscroll/NestedScrollNode;->getProvidedValues()Landroidx/tv/material3/TabKt;
+HSPLandroidx/compose/ui/input/nestedscroll/NestedScrollNode;->onAttach()V
+HSPLandroidx/compose/ui/input/nestedscroll/NestedScrollNodeKt;-><clinit>()V
+HSPLandroidx/compose/ui/input/pointer/AndroidPointerIconType;-><init>(I)V
+HSPLandroidx/compose/ui/input/pointer/MotionEventAdapter;-><init>()V
+HSPLandroidx/compose/ui/input/pointer/NodeParent;-><init>()V
+HSPLandroidx/compose/ui/input/pointer/PointerEvent;-><init>(Ljava/util/List;Lcom/google/gson/internal/ConstructorConstructor;)V
+HSPLandroidx/compose/ui/input/pointer/PointerIcon;-><clinit>()V
+HSPLandroidx/compose/ui/input/pointer/PointerKeyboardModifiers;-><init>(I)V
+HSPLandroidx/compose/ui/input/pointer/PointerKeyboardModifiers;->equals(Ljava/lang/Object;)Z
+HSPLandroidx/compose/ui/input/pointer/SuspendPointerInputElement;-><init>(Ljava/lang/Object;Lokhttp3/MediaType;Lkotlin/jvm/functions/Function2;I)V
+HSPLandroidx/compose/ui/input/pointer/SuspendPointerInputElement;->create()Landroidx/compose/ui/Modifier$Node;
+HSPLandroidx/compose/ui/input/pointer/SuspendingPointerInputFilterKt;-><clinit>()V
+HSPLandroidx/compose/ui/input/pointer/SuspendingPointerInputFilterKt;->pointerInput(Landroidx/compose/ui/Modifier;Ljava/lang/Object;Lkotlin/jvm/functions/Function2;)Landroidx/compose/ui/Modifier;
+HSPLandroidx/compose/ui/input/pointer/SuspendingPointerInputModifierNodeImpl;-><init>(Lkotlin/jvm/functions/Function2;)V
+HSPLandroidx/compose/ui/input/pointer/util/PointerIdArray;-><init>(FF)V
+HSPLandroidx/compose/ui/input/pointer/util/PointerIdArray;-><init>(FFLandroidx/compose/animation/core/AnimationVector;)V
+HSPLandroidx/compose/ui/input/pointer/util/PointerIdArray;-><init>(I[Landroidx/core/provider/FontsContractCompat$FontInfo;)V
+HSPLandroidx/compose/ui/input/pointer/util/PointerIdArray;-><init>(Landroidx/compose/animation/core/FloatAnimationSpec;)V
+HSPLandroidx/compose/ui/input/pointer/util/PointerIdArray;-><init>(Landroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/TrieNode;I)V
+HSPLandroidx/compose/ui/input/pointer/util/PointerIdArray;->get(I)Landroidx/compose/animation/core/FloatAnimationSpec;
+HSPLandroidx/compose/ui/input/pointer/util/VelocityTracker1D;-><init>()V
+HSPLandroidx/compose/ui/input/pointer/util/VelocityTracker;-><init>()V
+HSPLandroidx/compose/ui/input/rotary/RotaryInputElement;-><init>()V
+HSPLandroidx/compose/ui/input/rotary/RotaryInputElement;->create()Landroidx/compose/ui/Modifier$Node;
+HSPLandroidx/compose/ui/input/rotary/RotaryInputModifierKt;->onRotaryScrollEvent()Landroidx/compose/ui/Modifier;
+HSPLandroidx/compose/ui/input/rotary/RotaryInputNode;-><init>(Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function1;)V
+HSPLandroidx/compose/ui/layout/AlignmentLine;-><init>(Lkotlin/jvm/functions/Function2;)V
+HSPLandroidx/compose/ui/layout/AlignmentLineKt$FirstBaseline$1;-><clinit>()V
+HSPLandroidx/compose/ui/layout/AlignmentLineKt$FirstBaseline$1;-><init>()V
+HSPLandroidx/compose/ui/layout/AlignmentLineKt$LastBaseline$1;-><clinit>()V
+HSPLandroidx/compose/ui/layout/AlignmentLineKt$LastBaseline$1;-><init>()V
+HSPLandroidx/compose/ui/layout/AlignmentLineKt;-><clinit>()V
+HSPLandroidx/compose/ui/layout/BeyondBoundsLayoutKt;-><clinit>()V
+HSPLandroidx/compose/ui/layout/ComposableSingletons$SubcomposeLayoutKt;-><clinit>()V
+HSPLandroidx/compose/ui/layout/DefaultIntrinsicMeasurable;-><init>(Landroidx/compose/ui/layout/Measurable;Ljava/lang/Enum;Ljava/lang/Enum;I)V
+HSPLandroidx/compose/ui/layout/DefaultIntrinsicMeasurable;->getParentData()Ljava/lang/Object;
+HSPLandroidx/compose/ui/layout/FixedSizeIntrinsicsPlaceable;-><init>(III)V
+HSPLandroidx/compose/ui/layout/IntrinsicMinMax;-><clinit>()V
+HSPLandroidx/compose/ui/layout/IntrinsicMinMax;-><init>(ILjava/lang/String;)V
+HSPLandroidx/compose/ui/layout/IntrinsicWidthHeight;-><clinit>()V
+HSPLandroidx/compose/ui/layout/IntrinsicWidthHeight;-><init>(ILjava/lang/String;)V
+HSPLandroidx/compose/ui/layout/IntrinsicsMeasureScope;-><init>(Landroidx/compose/ui/layout/IntrinsicMeasureScope;Landroidx/compose/ui/unit/LayoutDirection;)V
+HSPLandroidx/compose/ui/layout/IntrinsicsMeasureScope;->roundToPx-0680j_4(F)I
+HSPLandroidx/compose/ui/layout/LayoutElement;-><init>(Lkotlin/jvm/functions/Function3;)V
+HSPLandroidx/compose/ui/layout/LayoutElement;->create()Landroidx/compose/ui/Modifier$Node;
+HSPLandroidx/compose/ui/layout/LayoutElement;->equals(Ljava/lang/Object;)Z
+HSPLandroidx/compose/ui/layout/LayoutKt$materializerOf$1;-><init>(Landroidx/compose/ui/Modifier;I)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;)V
+HSPLandroidx/compose/ui/layout/LayoutKt;->ScaleFactor(FF)J
+HSPLandroidx/compose/ui/layout/LayoutKt;->SubcomposeLayout(Landroidx/compose/ui/Modifier;Lkotlin/jvm/functions/Function2;Landroidx/compose/runtime/Composer;II)V
+HSPLandroidx/compose/ui/layout/LayoutKt;->SubcomposeLayout(Landroidx/compose/ui/layout/SubcomposeLayoutState;Landroidx/compose/ui/Modifier;Lkotlin/jvm/functions/Function2;Landroidx/compose/runtime/Composer;II)V
+HSPLandroidx/compose/ui/layout/LayoutKt;->findRootCoordinates(Landroidx/compose/ui/node/NodeCoordinator;)Landroidx/compose/ui/layout/LayoutCoordinates;
+HSPLandroidx/compose/ui/layout/LayoutKt;->layout(Landroidx/compose/ui/Modifier;Lkotlin/jvm/functions/Function3;)Landroidx/compose/ui/Modifier;
+HSPLandroidx/compose/ui/layout/LayoutKt;->modifierMaterializerOf(Landroidx/compose/ui/Modifier;)Landroidx/compose/runtime/internal/ComposableLambdaImpl;
+HSPLandroidx/compose/ui/layout/LayoutKt;->times-UQTWf7w(JJ)J
+HSPLandroidx/compose/ui/layout/LayoutModifierImpl;-><init>(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/LayoutNodeSubcompositionsState$NodeState;-><init>(Ljava/lang/Object;Landroidx/compose/runtime/internal/ComposableLambdaImpl;)V
+HSPLandroidx/compose/ui/layout/LayoutNodeSubcompositionsState$PostLookaheadMeasureScopeImpl;-><init>(Landroidx/compose/ui/layout/LayoutNodeSubcompositionsState;)V
+HSPLandroidx/compose/ui/layout/LayoutNodeSubcompositionsState$Scope;-><init>(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;->isLookingAhead()Z
+HSPLandroidx/compose/ui/layout/LayoutNodeSubcompositionsState$Scope;->subcompose(Ljava/lang/Object;Lkotlin/jvm/functions/Function2;)Ljava/util/List;
+HSPLandroidx/compose/ui/layout/LayoutNodeSubcompositionsState$createMeasurePolicy$1$measure-3p2s80s$$inlined$createMeasureResult$1;-><init>(Landroidx/compose/ui/layout/MeasureResult;Landroidx/compose/ui/layout/LayoutNodeSubcompositionsState;ILandroidx/compose/ui/layout/MeasureResult;I)V
+HSPLandroidx/compose/ui/layout/LayoutNodeSubcompositionsState$createMeasurePolicy$1$measure-3p2s80s$$inlined$createMeasureResult$1;->getAlignmentLines()Ljava/util/Map;
+HSPLandroidx/compose/ui/layout/LayoutNodeSubcompositionsState$createMeasurePolicy$1$measure-3p2s80s$$inlined$createMeasureResult$1;->getHeight()I
+HSPLandroidx/compose/ui/layout/LayoutNodeSubcompositionsState$createMeasurePolicy$1$measure-3p2s80s$$inlined$createMeasureResult$1;->getWidth()I
+HSPLandroidx/compose/ui/layout/LayoutNodeSubcompositionsState$createMeasurePolicy$1$measure-3p2s80s$$inlined$createMeasureResult$1;->placeChildren()V
+HSPLandroidx/compose/ui/layout/LayoutNodeSubcompositionsState$createMeasurePolicy$1;-><init>(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;
+HSPLandroidx/compose/ui/layout/LayoutNodeSubcompositionsState$precompose$1;-><init>(Landroidx/compose/ui/layout/LayoutNodeSubcompositionsState;Ljava/lang/Object;)V
+HSPLandroidx/compose/ui/layout/LayoutNodeSubcompositionsState$precompose$1;->dispose()V
+HSPLandroidx/compose/ui/layout/LayoutNodeSubcompositionsState$precompose$1;->premeasure-0kLqBqw(JI)V
+HSPLandroidx/compose/ui/layout/LayoutNodeSubcompositionsState;-><init>(Landroidx/compose/ui/node/LayoutNode;Landroidx/compose/ui/layout/SubcomposeSlotReusePolicy;)V
+HSPLandroidx/compose/ui/layout/LayoutNodeSubcompositionsState;->disposeOrReuseStartingFromIndex(I)V
+HSPLandroidx/compose/ui/layout/LayoutNodeSubcompositionsState;->makeSureStateIsConsistent()V
+HSPLandroidx/compose/ui/layout/LayoutNodeSubcompositionsState;->precompose(Ljava/lang/Object;Lkotlin/jvm/functions/Function2;)Landroidx/compose/ui/layout/LayoutNodeSubcompositionsState$precompose$1;
+HSPLandroidx/compose/ui/layout/LayoutNodeSubcompositionsState;->subcompose(Landroidx/compose/ui/node/LayoutNode;Ljava/lang/Object;Lkotlin/jvm/functions/Function2;)V
+HSPLandroidx/compose/ui/layout/LayoutNodeSubcompositionsState;->takeNodeFromReusables(Ljava/lang/Object;)Landroidx/compose/ui/node/LayoutNode;
+HSPLandroidx/compose/ui/layout/MeasurePolicy;->maxIntrinsicHeight(Landroidx/compose/ui/node/NodeCoordinator;Ljava/util/List;I)I
+HSPLandroidx/compose/ui/layout/MeasureScope$layout$1;-><init>(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
+HSPLandroidx/compose/ui/layout/MeasureScope;->layout$default(Landroidx/compose/ui/layout/MeasureScope;IILkotlin/jvm/functions/Function1;)Landroidx/compose/ui/layout/MeasureResult;
+HSPLandroidx/compose/ui/layout/MeasureScope;->layout(IILjava/util/Map;Lkotlin/jvm/functions/Function1;)Landroidx/compose/ui/layout/MeasureResult;
+HSPLandroidx/compose/ui/layout/OnSizeChangedModifier;-><init>(Landroidx/compose/foundation/AndroidEdgeEffectOverscrollEffect$onNewSize$1;)V
+HSPLandroidx/compose/ui/layout/PinnableContainerKt;-><clinit>()V
+HSPLandroidx/compose/ui/layout/Placeable$PlacementScope$Companion;->access$configureForPlacingForAlignment(Landroidx/compose/ui/node/LookaheadCapablePlaceable;)Z
+HSPLandroidx/compose/ui/layout/Placeable$PlacementScope;-><clinit>()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;J)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;II)V
+HSPLandroidx/compose/ui/layout/Placeable$PlacementScope;->placeRelativeWithLayer$default(Landroidx/compose/ui/layout/Placeable$PlacementScope;Landroidx/compose/ui/layout/Placeable;II)V
+HSPLandroidx/compose/ui/layout/Placeable$PlacementScope;->placeRelativeWithLayer-aW-9-wM$default(Landroidx/compose/ui/layout/Placeable$PlacementScope;Landroidx/compose/ui/layout/Placeable;J)V
+HSPLandroidx/compose/ui/layout/Placeable$PlacementScope;->placeWithLayer$default(Landroidx/compose/ui/layout/Placeable$PlacementScope;Landroidx/compose/ui/layout/Placeable;IILkotlin/jvm/functions/Function1;I)V
+HSPLandroidx/compose/ui/layout/Placeable;-><init>()V
+HSPLandroidx/compose/ui/layout/Placeable;->getMeasuredHeight()I
+HSPLandroidx/compose/ui/layout/Placeable;->getMeasuredWidth()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
+HSPLandroidx/compose/ui/layout/PlaceableKt;-><clinit>()V
+HSPLandroidx/compose/ui/layout/RootMeasurePolicy$measure$2;-><init>(ILjava/lang/Object;)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;
+HSPLandroidx/compose/ui/layout/RootMeasurePolicy;-><clinit>()V
+HSPLandroidx/compose/ui/layout/RootMeasurePolicy;-><init>()V
+HSPLandroidx/compose/ui/layout/RootMeasurePolicy;->measure-3p2s80s(Landroidx/compose/ui/layout/MeasureScope;Ljava/util/List;J)Landroidx/compose/ui/layout/MeasureResult;
+HSPLandroidx/compose/ui/layout/ScaleFactor;-><clinit>()V
+HSPLandroidx/compose/ui/layout/SubcomposeLayoutKt$SubcomposeLayout$2;-><init>(Ljava/lang/Object;ILjava/lang/Object;II)V
+HSPLandroidx/compose/ui/layout/SubcomposeLayoutKt$SubcomposeLayout$2;->invoke(Landroidx/compose/runtime/Composer;I)V
+HSPLandroidx/compose/ui/layout/SubcomposeLayoutKt$SubcomposeLayout$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
+HSPLandroidx/compose/ui/layout/SubcomposeLayoutKt$SubcomposeLayout$4;-><init>(ILjava/lang/Object;)V
+HSPLandroidx/compose/ui/layout/SubcomposeLayoutKt$SubcomposeLayout$4;->invoke()Ljava/lang/Object;
+HSPLandroidx/compose/ui/layout/SubcomposeLayoutKt$SubcomposeLayout$5$1$invoke$$inlined$onDispose$1;-><init>(ILjava/lang/Object;)V
+HSPLandroidx/compose/ui/layout/SubcomposeLayoutKt$SubcomposeLayout$5$1$invoke$$inlined$onDispose$1;->dispose()V
+HSPLandroidx/compose/ui/layout/SubcomposeLayoutState$setRoot$1;-><init>(Landroidx/compose/ui/layout/SubcomposeLayoutState;I)V
+HSPLandroidx/compose/ui/layout/SubcomposeLayoutState$setRoot$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
+HSPLandroidx/compose/ui/layout/SubcomposeLayoutState;-><init>(Landroidx/compose/ui/layout/SubcomposeSlotReusePolicy;)V
+HSPLandroidx/compose/ui/layout/SubcomposeLayoutState;->getState()Landroidx/compose/ui/layout/LayoutNodeSubcompositionsState;
+HSPLandroidx/compose/ui/layout/SubcomposeSlotReusePolicy$SlotIdsSet;-><init>()V
+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;
+HSPLandroidx/compose/ui/modifier/BackwardsCompatLocalMap;-><init>(Landroidx/compose/ui/modifier/ModifierLocalProvider;)V
+HSPLandroidx/compose/ui/modifier/BackwardsCompatLocalMap;->contains$ui_release(Landroidx/compose/ui/modifier/ModifierLocal;)Z
+HSPLandroidx/compose/ui/modifier/EmptyMap;-><clinit>()V
+HSPLandroidx/compose/ui/modifier/EmptyMap;->contains$ui_release(Landroidx/compose/ui/modifier/ModifierLocal;)Z
+HSPLandroidx/compose/ui/modifier/ModifierLocal;-><init>(Landroidx/compose/material3/ShapesKt$LocalShapes$1;)V
+HSPLandroidx/compose/ui/modifier/ModifierLocalManager;-><init>(Landroidx/compose/ui/node/Owner;)V
+HSPLandroidx/compose/ui/modifier/ModifierLocalModifierNode;->getCurrent(Landroidx/compose/ui/modifier/ProvidableModifierLocal;)Ljava/lang/Object;
+HSPLandroidx/compose/ui/modifier/ModifierLocalModifierNode;->getProvidedValues()Landroidx/tv/material3/TabKt;
+HSPLandroidx/compose/ui/modifier/SingleLocalMap;-><init>(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/ProvidableModifierLocal;)Ljava/lang/Object;
+HSPLandroidx/compose/ui/node/AlignmentLines;-><init>(Landroidx/compose/ui/node/AlignmentLinesOwner;)V
+HSPLandroidx/compose/ui/node/AlignmentLines;->getQueried$ui_release()Z
+HSPLandroidx/compose/ui/node/AlignmentLines;->getRequired$ui_release()Z
+HSPLandroidx/compose/ui/node/AlignmentLines;->onAlignmentsChanged()V
+HSPLandroidx/compose/ui/node/AlignmentLines;->recalculateQueryOwner()V
+HSPLandroidx/compose/ui/node/BackwardsCompatNode;-><init>(Landroidx/compose/ui/Modifier$Element;)V
+HSPLandroidx/compose/ui/node/BackwardsCompatNode;->draw(Landroidx/compose/ui/graphics/drawscope/ContentDrawScope;)V
+HSPLandroidx/compose/ui/node/BackwardsCompatNode;->getProvidedValues()Landroidx/tv/material3/TabKt;
+HSPLandroidx/compose/ui/node/BackwardsCompatNode;->initializeModifier(Z)V
+HSPLandroidx/compose/ui/node/BackwardsCompatNode;->onAttach()V
+HSPLandroidx/compose/ui/node/BackwardsCompatNode;->onGloballyPositioned(Landroidx/compose/ui/node/NodeCoordinator;)V
+HSPLandroidx/compose/ui/node/BackwardsCompatNode;->onMeasureResultChanged()V
+HSPLandroidx/compose/ui/node/BackwardsCompatNode;->onPlaced(Landroidx/compose/ui/node/NodeCoordinator;)V
+HSPLandroidx/compose/ui/node/BackwardsCompatNode;->onRemeasured-ozmzZPI(J)V
+HSPLandroidx/compose/ui/node/BackwardsCompatNode;->unInitializeModifier()V
+HSPLandroidx/compose/ui/node/CanFocusChecker;-><clinit>()V
+HSPLandroidx/compose/ui/node/CanFocusChecker;->setCanFocus(Z)V
+HSPLandroidx/compose/ui/node/ComposeUiNode$Companion;-><clinit>()V
+HSPLandroidx/compose/ui/node/ComposeUiNode;-><clinit>()V
+HSPLandroidx/compose/ui/node/DelegatingNode;-><init>()V
+HSPLandroidx/compose/ui/node/DelegatingNode;->delegate(Landroidx/compose/ui/Modifier$Node;)V
+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/DrawModifierNode;->onMeasureResultChanged()V
+HSPLandroidx/compose/ui/node/HitTestResult;-><init>()V
+HSPLandroidx/compose/ui/node/InnerNodeCoordinator;-><clinit>()V
+HSPLandroidx/compose/ui/node/InnerNodeCoordinator;-><init>(Landroidx/compose/ui/node/LayoutNode;)V
+HSPLandroidx/compose/ui/node/InnerNodeCoordinator;->getTail()Landroidx/compose/ui/Modifier$Node;
+HSPLandroidx/compose/ui/node/InnerNodeCoordinator;->maxIntrinsicHeight(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
+HSPLandroidx/compose/ui/node/IntrinsicsPolicy;-><init>(Landroidx/compose/ui/node/LayoutNode;)V
+HSPLandroidx/compose/ui/node/IntrinsicsPolicy;->measurePolicyFromState()Landroidx/compose/ui/layout/MeasurePolicy;
+HSPLandroidx/compose/ui/node/LayerPositionalProperties;-><init>()V
+HSPLandroidx/compose/ui/node/LayoutAwareModifierNode;->onRemeasured-ozmzZPI(J)V
+HSPLandroidx/compose/ui/node/LayoutModifierNode;->maxIntrinsicHeight(Landroidx/compose/ui/layout/IntrinsicMeasureScope;Landroidx/compose/ui/layout/Measurable;I)I
+HSPLandroidx/compose/ui/node/LayoutModifierNode;->maxIntrinsicWidth(Landroidx/compose/ui/layout/IntrinsicMeasureScope;Landroidx/compose/ui/layout/Measurable;I)I
+HSPLandroidx/compose/ui/node/LayoutModifierNodeCoordinator;-><clinit>()V
+HSPLandroidx/compose/ui/node/LayoutModifierNodeCoordinator;-><init>(Landroidx/compose/ui/node/LayoutNode;Landroidx/compose/ui/node/LayoutModifierNode;)V
+HSPLandroidx/compose/ui/node/LayoutModifierNodeCoordinator;->getTail()Landroidx/compose/ui/Modifier$Node;
+HSPLandroidx/compose/ui/node/LayoutModifierNodeCoordinator;->maxIntrinsicHeight(I)I
+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/LayoutNode$$ExternalSyntheticLambda0;-><init>(I)V
+HSPLandroidx/compose/ui/node/LayoutNode$$ExternalSyntheticLambda0;->compare(Ljava/lang/Object;Ljava/lang/Object;)I
+HSPLandroidx/compose/ui/node/LayoutNode$Companion$ErrorMeasurePolicy$1;-><init>()V
+HSPLandroidx/compose/ui/node/LayoutNode$NoIntrinsicsMeasurePolicy;-><init>(Ljava/lang/String;)V
+HSPLandroidx/compose/ui/node/LayoutNode$WhenMappings;-><clinit>()V
+HSPLandroidx/compose/ui/node/LayoutNode$_foldedChildren$1;-><init>(ILjava/lang/Object;)V
+HSPLandroidx/compose/ui/node/LayoutNode$_foldedChildren$1;->invoke()Ljava/lang/Object;
+HSPLandroidx/compose/ui/node/LayoutNode$_foldedChildren$1;->invoke()V
+HSPLandroidx/compose/ui/node/LayoutNode;-><clinit>()V
+HSPLandroidx/compose/ui/node/LayoutNode;-><init>(IZ)V
+HSPLandroidx/compose/ui/node/LayoutNode;-><init>(ZI)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;->draw$ui_release(Landroidx/compose/ui/graphics/Canvas;)V
+HSPLandroidx/compose/ui/node/LayoutNode;->forceRemeasure()V
+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;->getFoldedChildren$ui_release()Ljava/util/List;
+HSPLandroidx/compose/ui/node/LayoutNode;->getMeasuredByParent$ui_release$enumunboxing$()I
+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;->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;->insertAt$ui_release(ILandroidx/compose/ui/node/LayoutNode;)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;->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;->move$ui_release(III)V
+HSPLandroidx/compose/ui/node/LayoutNode;->onZSortedChildrenInvalidated$ui_release()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;ZI)V
+HSPLandroidx/compose/ui/node/LayoutNode;->rescheduleRemeasureOrRelayout$ui_release(Landroidx/compose/ui/node/LayoutNode;)V
+HSPLandroidx/compose/ui/node/LayoutNode;->resetSubtreeIntrinsicsUsage$ui_release()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;->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;->setViewConfiguration(Landroidx/compose/ui/platform/ViewConfiguration;)V
+HSPLandroidx/compose/ui/node/LayoutNode;->updateChildrenIfDirty$ui_release()V
+HSPLandroidx/compose/ui/node/LayoutNodeDrawScope;-><init>()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;JJJJFLkotlin/ResultKt;Landroidx/compose/ui/graphics/BlendModeColorFilter;II)V
+HSPLandroidx/compose/ui/node/LayoutNodeDrawScope;->drawRect-AsUm42w(Landroidx/compose/ui/graphics/Brush;JJFLkotlin/ResultKt;Landroidx/compose/ui/graphics/BlendModeColorFilter;I)V
+HSPLandroidx/compose/ui/node/LayoutNodeDrawScope;->drawRect-n-J9OG0(JJJFLkotlin/ResultKt;Landroidx/compose/ui/graphics/BlendModeColorFilter;I)V
+HSPLandroidx/compose/ui/node/LayoutNodeDrawScope;->drawRoundRect-u-Aw5IA(JJJJLkotlin/ResultKt;FLandroidx/compose/ui/graphics/BlendModeColorFilter;I)V
+HSPLandroidx/compose/ui/node/LayoutNodeDrawScope;->getCenter-F1C5BW0()J
+HSPLandroidx/compose/ui/node/LayoutNodeDrawScope;->getDensity()F
+HSPLandroidx/compose/ui/node/LayoutNodeDrawScope;->getFontScale()F
+HSPLandroidx/compose/ui/node/LayoutNodeDrawScope;->getLayoutDirection()Landroidx/compose/ui/unit/LayoutDirection;
+HSPLandroidx/compose/ui/node/LayoutNodeDrawScope;->getSize-NH-jbRc()J
+HSPLandroidx/compose/ui/node/LayoutNodeLayoutDelegate$MeasurePassDelegate$placeOuterCoordinator$1;-><init>(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;-><init>(Landroidx/compose/ui/node/LayoutNodeLayoutDelegate;)V
+HSPLandroidx/compose/ui/node/LayoutNodeLayoutDelegate$MeasurePassDelegate;->forEachChildAlignmentLinesOwner(Lkotlin/jvm/functions/Function1;)V
+HSPLandroidx/compose/ui/node/LayoutNodeLayoutDelegate$MeasurePassDelegate;->getAlignmentLines()Landroidx/compose/ui/node/LookaheadAlignmentLines;
+HSPLandroidx/compose/ui/node/LayoutNodeLayoutDelegate$MeasurePassDelegate;->getChildDelegates$ui_release()Ljava/util/List;
+HSPLandroidx/compose/ui/node/LayoutNodeLayoutDelegate$MeasurePassDelegate;->getInnerCoordinator()Landroidx/compose/ui/node/InnerNodeCoordinator;
+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;->layoutChildren()V
+HSPLandroidx/compose/ui/node/LayoutNodeLayoutDelegate$MeasurePassDelegate;->markNodeAndSubtreeAsPlaced()V
+HSPLandroidx/compose/ui/node/LayoutNodeLayoutDelegate$MeasurePassDelegate;->markSubtreeAsNotPlaced()V
+HSPLandroidx/compose/ui/node/LayoutNodeLayoutDelegate$MeasurePassDelegate;->maxIntrinsicHeight(I)I
+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;->onIntrinsicsQueried()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$performMeasure$2;-><init>(Landroidx/compose/ui/node/LayoutNodeLayoutDelegate;JI)V
+HSPLandroidx/compose/ui/node/LayoutNodeLayoutDelegate$performMeasure$2;->invoke()Ljava/lang/Object;
+HSPLandroidx/compose/ui/node/LayoutNodeLayoutDelegate$performMeasure$2;->invoke()V
+HSPLandroidx/compose/ui/node/LayoutNodeLayoutDelegate;-><init>(Landroidx/compose/ui/node/LayoutNode;)V
+HSPLandroidx/compose/ui/node/LayoutNodeLayoutDelegate;->getOuterCoordinator()Landroidx/compose/ui/node/NodeCoordinator;
+HSPLandroidx/compose/ui/node/LayoutNodeLayoutDelegate;->isOutMostLookaheadRoot(Landroidx/compose/ui/node/LayoutNode;)Z
+HSPLandroidx/compose/ui/node/LayoutNodeLayoutDelegate;->setCoordinatesAccessedDuringModifierPlacement(Z)V
+HSPLandroidx/compose/ui/node/LayoutNodeLayoutDelegate;->setCoordinatesAccessedDuringPlacement(Z)V
+HSPLandroidx/compose/ui/node/LayoutNodeLayoutDelegate;->updateParentData()V
+HSPLandroidx/compose/ui/node/LookaheadAlignmentLines;-><init>(Landroidx/compose/ui/node/AlignmentLinesOwner;I)V
+HSPLandroidx/compose/ui/node/LookaheadCapablePlaceable;->invalidateAlignmentLinesFromPositionChange(Landroidx/compose/ui/node/NodeCoordinator;)V
+HSPLandroidx/compose/ui/node/LookaheadCapablePlaceable;->isLookingAhead()Z
+HSPLandroidx/compose/ui/node/MeasureAndLayoutDelegate;-><init>(Landroidx/compose/ui/node/LayoutNode;)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;->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;->recurseRemeasure(Landroidx/compose/ui/node/LayoutNode;)V
+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;->requestRelayout(Landroidx/compose/ui/node/LayoutNode;Z)Z
+HSPLandroidx/compose/ui/node/MeasureAndLayoutDelegate;->updateRootConstraints-BRTryo0(J)V
+HSPLandroidx/compose/ui/node/NodeChain$Differ;-><init>(Landroidx/compose/ui/node/NodeChain;Landroidx/compose/ui/Modifier$Node;ILandroidx/compose/runtime/collection/MutableVector;Landroidx/compose/runtime/collection/MutableVector;Z)V
+HSPLandroidx/compose/ui/node/NodeChain$Differ;->areItemsTheSame(II)Z
+HSPLandroidx/compose/ui/node/NodeChain;-><init>(Landroidx/compose/ui/node/LayoutNode;)V
+HSPLandroidx/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;->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;->has-H91voCI$ui_release(I)Z
+HSPLandroidx/compose/ui/node/NodeChain;->runAttachLifecycle()V
+HSPLandroidx/compose/ui/node/NodeChain;->syncCoordinators()V
+HSPLandroidx/compose/ui/node/NodeChain;->updateNode(Landroidx/compose/ui/Modifier$Element;Landroidx/compose/ui/Modifier$Element;Landroidx/compose/ui/Modifier$Node;)V
+HSPLandroidx/compose/ui/node/NodeChainKt;-><clinit>()V
+HSPLandroidx/compose/ui/node/NodeChainKt;->actionForModifiers(Landroidx/compose/ui/Modifier$Element;Landroidx/compose/ui/Modifier$Element;)I
+HSPLandroidx/compose/ui/node/NodeCoordinator$invoke$1;-><init>(Ljava/lang/Object;ILjava/lang/Object;)V
+HSPLandroidx/compose/ui/node/NodeCoordinator$invoke$1;->invoke()Ljava/lang/Object;
+HSPLandroidx/compose/ui/node/NodeCoordinator$invoke$1;->invoke()V
+HSPLandroidx/compose/ui/node/NodeCoordinator;-><clinit>()V
+HSPLandroidx/compose/ui/node/NodeCoordinator;-><init>(Landroidx/compose/ui/node/LayoutNode;)V
+HSPLandroidx/compose/ui/node/NodeCoordinator;->ancestorToLocal(Landroidx/compose/ui/node/NodeCoordinator;Landroidx/compose/ui/geometry/MutableRect;Z)V
+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;->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;->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;->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;->getSize-YbymL2g()J
+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;->invalidateLayer()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;->isValidOwnerScope()Z
+HSPLandroidx/compose/ui/node/NodeCoordinator;->localBoundingBoxOf(Landroidx/compose/ui/layout/LayoutCoordinates;Z)Landroidx/compose/ui/geometry/Rect;
+HSPLandroidx/compose/ui/node/NodeCoordinator;->localToRoot-MK-Hz9U(J)J
+HSPLandroidx/compose/ui/node/NodeCoordinator;->onCoordinatesUsed$ui_release()V
+HSPLandroidx/compose/ui/node/NodeCoordinator;->onMeasured()V
+HSPLandroidx/compose/ui/node/NodeCoordinator;->onPlaced()V
+HSPLandroidx/compose/ui/node/NodeCoordinator;->placeSelf-f8xVGno(JFLkotlin/jvm/functions/Function1;)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;->toParentPosition-MK-Hz9U(J)J
+HSPLandroidx/compose/ui/node/NodeCoordinator;->updateLayerParameters(Z)V
+HSPLandroidx/compose/ui/node/NodeMeasuringIntrinsics$IntrinsicMinMax;-><clinit>()V
+HSPLandroidx/compose/ui/node/NodeMeasuringIntrinsics$IntrinsicMinMax;-><init>(ILjava/lang/String;)V
+HSPLandroidx/compose/ui/node/NodeMeasuringIntrinsics$IntrinsicWidthHeight;-><clinit>()V
+HSPLandroidx/compose/ui/node/NodeMeasuringIntrinsics$IntrinsicWidthHeight;-><init>(ILjava/lang/String;)V
+HSPLandroidx/compose/ui/node/ObserverNodeOwnerScope;-><init>(Landroidx/compose/ui/node/ObserverModifierNode;)V
+HSPLandroidx/compose/ui/node/ObserverNodeOwnerScope;->isValidOwnerScope()Z
+HSPLandroidx/compose/ui/node/OnPositionedDispatcher$Companion$DepthComparator;-><clinit>()V
+HSPLandroidx/compose/ui/node/OnPositionedDispatcher$Companion$DepthComparator;->compare(Ljava/lang/Object;Ljava/lang/Object;)I
+HSPLandroidx/compose/ui/node/OnPositionedDispatcher;-><init>()V
+HSPLandroidx/compose/ui/node/OnPositionedDispatcher;->dispatchHierarchy(Landroidx/compose/ui/node/LayoutNode;)V
+HSPLandroidx/compose/ui/node/Owner;->measureAndLayout$default(Landroidx/compose/ui/node/Owner;)V
+HSPLandroidx/compose/ui/node/OwnerSnapshotObserver;-><init>(Landroidx/compose/ui/platform/AndroidComposeView$focusOwner$1;)V
+HSPLandroidx/compose/ui/node/OwnerSnapshotObserver;->observeLayoutModifierSnapshotReads$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/TailModifierNode;-><init>()V
+HSPLandroidx/compose/ui/node/TailModifierNode;->onAttach()V
+HSPLandroidx/compose/ui/node/TailModifierNode;->onDetach()V
+HSPLandroidx/compose/ui/node/UiApplier;-><init>(Landroidx/compose/ui/node/LayoutNode;)V
+HSPLandroidx/compose/ui/node/UiApplier;->down(Ljava/lang/Object;)V
+HSPLandroidx/compose/ui/node/UiApplier;->getCurrent()Ljava/lang/Object;
+HSPLandroidx/compose/ui/node/UiApplier;->insertBottomUp(ILjava/lang/Object;)V
+HSPLandroidx/compose/ui/node/UiApplier;->insertTopDown(ILjava/lang/Object;)V
+HSPLandroidx/compose/ui/node/UiApplier;->onEndChanges()V
+HSPLandroidx/compose/ui/node/UiApplier;->up()V
+HSPLandroidx/compose/ui/platform/AbstractComposeView;-><init>(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;->checkAddView()V
+HSPLandroidx/compose/ui/platform/AbstractComposeView;->ensureCompositionCreated()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
+HSPLandroidx/compose/ui/platform/AndroidAccessibilityManager;-><init>(Landroid/content/Context;)V
+HSPLandroidx/compose/ui/platform/AndroidClipboardManager;-><init>(Landroid/content/Context;)V
+HSPLandroidx/compose/ui/platform/AndroidComposeView$$ExternalSyntheticApiModelOutline0;->m(Landroid/content/res/Configuration;)I
+HSPLandroidx/compose/ui/platform/AndroidComposeView$$ExternalSyntheticApiModelOutline0;->m(Landroid/graphics/RenderNode;)V
+HSPLandroidx/compose/ui/platform/AndroidComposeView$$ExternalSyntheticApiModelOutline0;->m(Landroid/view/View;Landroid/view/translation/ViewTranslationCallback;)V
+HSPLandroidx/compose/ui/platform/AndroidComposeView$$ExternalSyntheticLambda1;-><init>(Landroidx/compose/ui/platform/AndroidComposeView;)V
+HSPLandroidx/compose/ui/platform/AndroidComposeView$$ExternalSyntheticLambda1;->onGlobalLayout()V
+HSPLandroidx/compose/ui/platform/AndroidComposeView$$ExternalSyntheticLambda2;-><init>(Landroidx/compose/ui/platform/AndroidComposeView;)V
+HSPLandroidx/compose/ui/platform/AndroidComposeView$$ExternalSyntheticLambda3;-><init>(Landroidx/compose/ui/platform/AndroidComposeView;)V
+HSPLandroidx/compose/ui/platform/AndroidComposeView$$ExternalSyntheticLambda3;->onTouchModeChanged(Z)V
+HSPLandroidx/compose/ui/platform/AndroidComposeView$ViewTreeOwners;-><init>(Landroidx/lifecycle/LifecycleOwner;Landroidx/savedstate/SavedStateRegistryOwner;)V
+HSPLandroidx/compose/ui/platform/AndroidComposeView$focusOwner$1;-><init>(Landroidx/compose/ui/platform/AndroidComposeView;I)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
+HSPLandroidx/compose/ui/platform/AndroidComposeView$pointerIconService$1;-><init>(Landroidx/compose/ui/platform/AndroidComposeView;)V
+HSPLandroidx/compose/ui/platform/AndroidComposeView$viewTreeOwners$2;-><init>(Landroidx/compose/ui/platform/AndroidComposeView;I)V
+HSPLandroidx/compose/ui/platform/AndroidComposeView$viewTreeOwners$2;->invoke()Ljava/lang/Object;
+HSPLandroidx/compose/ui/platform/AndroidComposeView;-><clinit>()V
+HSPLandroidx/compose/ui/platform/AndroidComposeView;-><init>(Landroid/content/Context;Lkotlin/coroutines/CoroutineContext;)V
+HSPLandroidx/compose/ui/platform/AndroidComposeView;->access$get_viewTreeOwners(Landroidx/compose/ui/platform/AndroidComposeView;)Landroidx/compose/ui/platform/AndroidComposeView$ViewTreeOwners;
+HSPLandroidx/compose/ui/platform/AndroidComposeView;->convertMeasureSpec-I7RO_PI(I)J
+HSPLandroidx/compose/ui/platform/AndroidComposeView;->dispatchDraw(Landroid/graphics/Canvas;)V
+HSPLandroidx/compose/ui/platform/AndroidComposeView;->dispatchKeyEvent(Landroid/view/KeyEvent;)Z
+HSPLandroidx/compose/ui/platform/AndroidComposeView;->dispatchKeyEventPreIme(Landroid/view/KeyEvent;)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;->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;->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;->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;->getSoftwareKeyboardController()Landroidx/compose/ui/platform/SoftwareKeyboardController;
+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;->invalidateLayers(Landroidx/compose/ui/node/LayoutNode;)V
+HSPLandroidx/compose/ui/platform/AndroidComposeView;->invalidateLayoutNodeMeasurement(Landroidx/compose/ui/node/LayoutNode;)V
+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;->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;->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;->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;->recycle$ui_release(Landroidx/compose/ui/node/OwnedLayer;)V
+HSPLandroidx/compose/ui/platform/AndroidComposeView;->scheduleMeasureAndLayout(Landroidx/compose/ui/node/LayoutNode;)V
+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;->updatePositionCacheAndDispatch()V
+HSPLandroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat$$ExternalSyntheticLambda1;-><init>(Landroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat;)V
+HSPLandroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat$$ExternalSyntheticLambda2;-><init>(Landroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat;)V
+HSPLandroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat$1;-><init>(ILjava/lang/Object;)V
+HSPLandroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat$1;->onViewAttachedToWindow(Landroid/view/View;)V
+HSPLandroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat$MyNodeProvider;-><init>(Landroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat;)V
+HSPLandroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat$SemanticsNodeCopy;-><init>(Landroidx/compose/ui/semantics/SemanticsNode;Ljava/util/Map;)V
+HSPLandroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat$boundsUpdatesEventLoop$1;-><init>(Landroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat;Lkotlin/coroutines/Continuation;)V
+HSPLandroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat;-><clinit>()V
+HSPLandroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat;-><init>(Landroidx/compose/ui/platform/AndroidComposeView;)V
+HSPLandroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat;->boundsUpdatesEventLoop(Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
+HSPLandroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat;->getAccessibilityNodeProvider(Landroid/view/View;)Landroidx/core/view/accessibility/AccessibilityNodeProviderCompat;
+HSPLandroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat;->isEnabledForAccessibility()Z
+HSPLandroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat;->onStart(Landroidx/lifecycle/LifecycleOwner;)V
+HSPLandroidx/compose/ui/platform/AndroidComposeViewForceDarkModeQ;-><clinit>()V
+HSPLandroidx/compose/ui/platform/AndroidComposeViewForceDarkModeQ;->disallowForceDark(Landroid/view/View;)V
+HSPLandroidx/compose/ui/platform/AndroidComposeViewTranslationCallbackS;-><clinit>()V
+HSPLandroidx/compose/ui/platform/AndroidComposeViewTranslationCallbackS;->setViewTranslationCallback(Landroid/view/View;Landroid/view/translation/ViewTranslationCallback;)V
+HSPLandroidx/compose/ui/platform/AndroidComposeViewVerificationHelperMethodsO;-><clinit>()V
+HSPLandroidx/compose/ui/platform/AndroidComposeViewVerificationHelperMethodsO;->focusable(Landroid/view/View;IZ)V
+HSPLandroidx/compose/ui/platform/AndroidCompositionLocals_androidKt$obtainImageVectorCache$callbacks$1$1;-><init>(Landroid/content/res/Configuration;Landroidx/compose/ui/res/ImageVectorCache;)V
+HSPLandroidx/compose/ui/platform/AndroidCompositionLocals_androidKt;-><clinit>()V
+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/AndroidUiDispatcher$dispatchCallback$1;-><init>(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
+HSPLandroidx/compose/ui/platform/AndroidUiDispatcher;-><clinit>()V
+HSPLandroidx/compose/ui/platform/AndroidUiDispatcher;-><init>(Landroid/view/Choreographer;Landroid/os/Handler;)V
+HSPLandroidx/compose/ui/platform/AndroidUiDispatcher;->access$performTrampolineDispatch(Landroidx/compose/ui/platform/AndroidUiDispatcher;)V
+HSPLandroidx/compose/ui/platform/AndroidUiDispatcher;->dispatch(Lkotlin/coroutines/CoroutineContext;Ljava/lang/Runnable;)V
+HSPLandroidx/compose/ui/platform/AndroidUiFrameClock$withFrameNanos$2$callback$1;-><init>(Lkotlinx/coroutines/CancellableContinuationImpl;Landroidx/compose/ui/platform/AndroidUiFrameClock;Lkotlin/jvm/functions/Function1;)V
+HSPLandroidx/compose/ui/platform/AndroidUiFrameClock$withFrameNanos$2$callback$1;->doFrame(J)V
+HSPLandroidx/compose/ui/platform/AndroidUiFrameClock;-><init>(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;->minusKey(Lkotlin/coroutines/CoroutineContext$Key;)Lkotlin/coroutines/CoroutineContext;
+HSPLandroidx/compose/ui/platform/AndroidUiFrameClock;->withFrameNanos(Lkotlin/jvm/functions/Function1;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
+HSPLandroidx/compose/ui/platform/AndroidViewConfiguration;-><init>(Landroid/view/ViewConfiguration;)V
+HSPLandroidx/compose/ui/platform/CalculateMatrixToWindowApi29;-><init>()V
+HSPLandroidx/compose/ui/platform/ComposableSingletons$Wrapper_androidKt;-><clinit>()V
+HSPLandroidx/compose/ui/platform/ComposeView;-><init>(Landroid/content/Context;)V
+HSPLandroidx/compose/ui/platform/ComposeView;->Content(Landroidx/compose/runtime/Composer;I)V
+HSPLandroidx/compose/ui/platform/ComposeView;->getShouldCreateCompositionOnAttachedToWindow()Z
+HSPLandroidx/compose/ui/platform/ComposeView;->setContent(Lkotlin/jvm/functions/Function2;)V
+HSPLandroidx/compose/ui/platform/CompositionLocalsKt;-><clinit>()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/DisposableSaveableStateRegistry;-><init>(Landroidx/compose/runtime/saveable/SaveableStateRegistryImpl;Landroidx/compose/ui/platform/DisposableSaveableStateRegistry_androidKt$DisposableSaveableStateRegistry$1;)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/SaveableStateRegistryImpl$registerProvider$3;
+HSPLandroidx/compose/ui/platform/DisposableSaveableStateRegistry_androidKt$DisposableSaveableStateRegistry$1;-><init>(ZLandroidx/savedstate/SavedStateRegistry;Ljava/lang/String;)V
+HSPLandroidx/compose/ui/platform/GlobalSnapshotManager$ensureStarted$1;-><init>(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;
+HSPLandroidx/compose/ui/platform/GlobalSnapshotManager;-><clinit>()V
+HSPLandroidx/compose/ui/platform/InspectableModifier;-><init>()V
+HSPLandroidx/compose/ui/platform/LayerMatrixCache;-><init>(Landroidx/compose/ui/text/SaversKt$ColorSaver$1;)V
+HSPLandroidx/compose/ui/platform/LayerMatrixCache;->calculateMatrix-GrdbGEg(Ljava/lang/Object;)[F
+HSPLandroidx/compose/ui/platform/LayerMatrixCache;->invalidate()V
+HSPLandroidx/compose/ui/platform/MotionDurationScaleImpl;-><init>()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/OutlineResolver;-><init>(Landroidx/compose/ui/unit/Density;)V
+HSPLandroidx/compose/ui/platform/OutlineResolver;->getOutline()Landroid/graphics/Outline;
+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;->updateCache()V
+HSPLandroidx/compose/ui/platform/RenderNodeApi29;-><init>()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;->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;->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
+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()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
+HSPLandroidx/compose/ui/platform/RenderNodeApi29VerificationHelper;-><clinit>()V
+HSPLandroidx/compose/ui/platform/RenderNodeApi29VerificationHelper;->setRenderEffect(Landroid/graphics/RenderNode;Landroidx/compose/ui/graphics/RenderEffect;)V
+HSPLandroidx/compose/ui/platform/RenderNodeLayer;-><init>(Landroidx/compose/ui/platform/AndroidComposeView;Lkotlin/jvm/functions/Function1;Landroidx/compose/ui/node/LayoutNode$_foldedChildren$1;)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;->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(Landroidx/compose/ui/node/LayoutNode$_foldedChildren$1;Lkotlin/jvm/functions/Function1;)V
+HSPLandroidx/compose/ui/platform/RenderNodeLayer;->setDirty(Z)V
+HSPLandroidx/compose/ui/platform/RenderNodeLayer;->updateDisplayList()V
+HSPLandroidx/compose/ui/platform/RenderNodeLayer;->updateLayerProperties-dDxr-wY(FFFFFFFFFFJLandroidx/compose/ui/graphics/Shape;ZJJILandroidx/compose/ui/unit/LayoutDirection;Landroidx/compose/ui/unit/Density;)V
+HSPLandroidx/compose/ui/platform/ViewLayer;-><clinit>()V
+HSPLandroidx/compose/ui/platform/WeakCache;-><init>()V
+HSPLandroidx/compose/ui/platform/WeakCache;-><init>(I)V
+HSPLandroidx/compose/ui/platform/WeakCache;-><init>(Landroidx/compose/ui/node/InnerNodeCoordinator;)V
+HSPLandroidx/compose/ui/platform/WeakCache;-><init>(Ljava/lang/Object;ILjava/lang/Object;)V
+HSPLandroidx/compose/ui/platform/WeakCache;->add(Landroidx/compose/ui/node/LayoutNode;Z)V
+HSPLandroidx/compose/ui/platform/WeakCache;->clearWeakReferences()V
+HSPLandroidx/compose/ui/platform/WeakCache;->get$1()Ljava/lang/Object;
+HSPLandroidx/compose/ui/platform/WeakCache;->set(Ljava/lang/Object;)V
+HSPLandroidx/compose/ui/platform/WindowInfoImpl;-><clinit>()V
+HSPLandroidx/compose/ui/platform/WindowInfoImpl;-><init>()V
+HSPLandroidx/compose/ui/platform/WindowRecomposerPolicy$createAndInstallWindowRecomposer$unsetJob$1;-><init>(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;
+HSPLandroidx/compose/ui/platform/WindowRecomposerPolicy;-><clinit>()V
+HSPLandroidx/compose/ui/platform/WindowRecomposer_androidKt$createLifecycleAwareWindowRecomposer$1;-><init>(Landroid/view/View;Landroidx/compose/runtime/Recomposer;)V
+HSPLandroidx/compose/ui/platform/WindowRecomposer_androidKt$createLifecycleAwareWindowRecomposer$1;->onViewAttachedToWindow(Landroid/view/View;)V
+HSPLandroidx/compose/ui/platform/WindowRecomposer_androidKt$createLifecycleAwareWindowRecomposer$2$WhenMappings;-><clinit>()V
+HSPLandroidx/compose/ui/platform/WindowRecomposer_androidKt$createLifecycleAwareWindowRecomposer$2$onStateChanged$1$1$1;-><init>(Lkotlinx/coroutines/flow/StateFlow;Landroidx/compose/ui/platform/MotionDurationScaleImpl;Lkotlin/coroutines/Continuation;)V
+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;
+HSPLandroidx/compose/ui/platform/WindowRecomposer_androidKt$createLifecycleAwareWindowRecomposer$2$onStateChanged$1;-><init>(Lkotlin/jvm/internal/Ref$ObjectRef;Landroidx/compose/runtime/Recomposer;Landroidx/lifecycle/LifecycleOwner;Landroidx/compose/ui/platform/WindowRecomposer_androidKt$createLifecycleAwareWindowRecomposer$2;Landroid/view/View;Lkotlin/coroutines/Continuation;)V
+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;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;
+HSPLandroidx/compose/ui/platform/WindowRecomposer_androidKt$createLifecycleAwareWindowRecomposer$2;-><init>(Lkotlinx/coroutines/internal/ContextScope;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
+HSPLandroidx/compose/ui/platform/WindowRecomposer_androidKt$getAnimationScaleFlowFor$1$1$1;-><init>(Landroid/content/ContentResolver;Landroid/net/Uri;Landroidx/emoji2/text/FontRequestEmojiCompatConfig$FontRequestMetadataLoader$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;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;
+HSPLandroidx/compose/ui/platform/WindowRecomposer_androidKt;-><clinit>()V
+HSPLandroidx/compose/ui/platform/WindowRecomposer_androidKt;->access$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/WrappedComposition$setContent$1$1$1;-><init>(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;
+HSPLandroidx/compose/ui/platform/WrappedComposition$setContent$1$1;-><init>(Landroidx/compose/ui/platform/WrappedComposition;Lkotlin/jvm/functions/Function2;I)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;
+HSPLandroidx/compose/ui/platform/WrappedComposition$setContent$1;-><init>(Ljava/lang/Object;ILjava/lang/Object;)V
+HSPLandroidx/compose/ui/platform/WrappedComposition$setContent$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
+HSPLandroidx/compose/ui/platform/WrappedComposition;-><init>(Landroidx/compose/ui/platform/AndroidComposeView;Landroidx/compose/runtime/CompositionImpl;)V
+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
+HSPLandroidx/compose/ui/platform/WrapperRenderNodeLayerHelperMethods;-><clinit>()V
+HSPLandroidx/compose/ui/platform/WrapperRenderNodeLayerHelperMethods;->onDescendantInvalidated(Landroidx/compose/ui/platform/AndroidComposeView;)V
+HSPLandroidx/compose/ui/platform/WrapperVerificationHelperMethods;-><clinit>()V
+HSPLandroidx/compose/ui/platform/WrapperVerificationHelperMethods;->attributeSourceResourceMap(Landroid/view/View;)Ljava/util/Map;
+HSPLandroidx/compose/ui/platform/Wrapper_androidKt;-><clinit>()V
+HSPLandroidx/compose/ui/platform/Wrapper_androidKt;->setContent(Landroidx/compose/ui/platform/AbstractComposeView;Landroidx/compose/runtime/CompositionContext;Landroidx/compose/runtime/internal/ComposableLambdaImpl;)Landroidx/compose/runtime/Composition;
+HSPLandroidx/compose/ui/res/ImageVectorCache;-><init>()V
+HSPLandroidx/compose/ui/semantics/AppendedSemanticsElement;-><init>(Lkotlin/jvm/functions/Function1;Z)V
+HSPLandroidx/compose/ui/semantics/AppendedSemanticsElement;->create()Landroidx/compose/ui/Modifier$Node;
+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/CollectionInfo;-><init>(II)V
+HSPLandroidx/compose/ui/semantics/CoreSemanticsModifierNode;-><init>(ZLkotlin/jvm/functions/Function1;)V
+HSPLandroidx/compose/ui/semantics/EmptySemanticsElement;-><clinit>()V
+HSPLandroidx/compose/ui/semantics/EmptySemanticsElement;-><init>()V
+HSPLandroidx/compose/ui/semantics/EmptySemanticsElement;->create()Landroidx/compose/ui/Modifier$Node;
+HSPLandroidx/compose/ui/semantics/ScrollAxisRange;-><init>(Lkotlin/jvm/functions/Function0;Lkotlin/jvm/functions/Function0;Z)V
+HSPLandroidx/compose/ui/semantics/SemanticsConfiguration;-><init>()V
+HSPLandroidx/compose/ui/semantics/SemanticsConfiguration;->contains(Landroidx/compose/ui/semantics/SemanticsPropertyKey;)Z
+HSPLandroidx/compose/ui/semantics/SemanticsModifierKt;-><clinit>()V
+HSPLandroidx/compose/ui/semantics/SemanticsNode;-><init>(Landroidx/compose/ui/Modifier$Node;ZLandroidx/compose/ui/node/LayoutNode;Landroidx/compose/ui/semantics/SemanticsConfiguration;)V
+HSPLandroidx/compose/ui/semantics/SemanticsNode;->fillOneLayerOfSemanticsWrappers(Landroidx/compose/ui/node/LayoutNode;Ljava/util/ArrayList;)V
+HSPLandroidx/compose/ui/semantics/SemanticsNode;->getChildren(ZZ)Ljava/util/List;
+HSPLandroidx/compose/ui/semantics/SemanticsNode;->getReplacedChildren$ui_release()Ljava/util/List;
+HSPLandroidx/compose/ui/semantics/SemanticsNode;->isMergingSemanticsOfDescendants()Z
+HSPLandroidx/compose/ui/semantics/SemanticsNode;->unmergedChildren$ui_release(Z)Ljava/util/List;
+HSPLandroidx/compose/ui/semantics/SemanticsOwner;-><init>(Landroidx/compose/ui/node/LayoutNode;)V
+HSPLandroidx/compose/ui/semantics/SemanticsOwner;->getUnmergedRootSemanticsNode()Landroidx/compose/ui/semantics/SemanticsNode;
+HSPLandroidx/compose/ui/semantics/SemanticsProperties;-><clinit>()V
+HSPLandroidx/compose/ui/semantics/SemanticsPropertyKey;-><init>(Ljava/lang/String;)V
+HSPLandroidx/compose/ui/semantics/SemanticsPropertyKey;-><init>(Ljava/lang/String;Lkotlin/jvm/functions/Function2;)V
+HSPLandroidx/compose/ui/text/AndroidParagraph;-><init>(Landroidx/compose/ui/text/platform/AndroidParagraphIntrinsics;IZJ)V
+HSPLandroidx/compose/ui/text/AndroidParagraph;->constructTextLayout(IILandroid/text/TextUtils$TruncateAt;IIIII)Landroidx/compose/ui/text/android/TextLayout;
+HSPLandroidx/compose/ui/text/AndroidParagraph;->getHeight()F
+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;Lkotlin/ResultKt;I)V
+HSPLandroidx/compose/ui/text/AnnotatedString$Range;-><init>(IILjava/lang/Object;)V
+HSPLandroidx/compose/ui/text/AnnotatedString$Range;-><init>(Ljava/lang/Object;IILjava/lang/String;)V
+HSPLandroidx/compose/ui/text/AnnotatedString;-><init>(Ljava/lang/String;Ljava/util/List;Ljava/util/List;Ljava/util/List;)V
+HSPLandroidx/compose/ui/text/AnnotatedString;->equals(Ljava/lang/Object;)Z
+HSPLandroidx/compose/ui/text/AnnotatedStringKt;-><clinit>()V
+HSPLandroidx/compose/ui/text/EmojiSupportMatch;-><init>(I)V
+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;Lkotlin/ResultKt;)V
+HSPLandroidx/compose/ui/text/MultiParagraphIntrinsics$maxIntrinsicWidth$2;-><init>(Landroidx/compose/ui/text/MultiParagraphIntrinsics;I)V
+HSPLandroidx/compose/ui/text/MultiParagraphIntrinsics$maxIntrinsicWidth$2;->invoke$1()Ljava/lang/Float;
+HSPLandroidx/compose/ui/text/MultiParagraphIntrinsics$maxIntrinsicWidth$2;->invoke()Ljava/lang/Object;
+HSPLandroidx/compose/ui/text/MultiParagraphIntrinsics;-><init>(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;->getHasStaleResolvedFonts()Z
+HSPLandroidx/compose/ui/text/MultiParagraphIntrinsics;->getMaxIntrinsicWidth()F
+HSPLandroidx/compose/ui/text/ParagraphInfo;-><init>(Landroidx/compose/ui/text/AndroidParagraph;IIIIFF)V
+HSPLandroidx/compose/ui/text/ParagraphIntrinsicInfo;-><init>(Landroidx/compose/ui/text/platform/AndroidParagraphIntrinsics;II)V
+HSPLandroidx/compose/ui/text/ParagraphStyle;-><init>(Landroidx/compose/ui/text/style/TextAlign;Landroidx/compose/ui/text/style/TextDirection;JLandroidx/compose/ui/text/style/TextIndent;Landroidx/compose/ui/text/PlatformParagraphStyle;Landroidx/compose/ui/text/style/LineHeightStyle;Landroidx/compose/ui/text/style/LineBreak;Landroidx/compose/ui/text/style/Hyphens;Landroidx/compose/ui/text/style/TextMotion;)V
+HSPLandroidx/compose/ui/text/ParagraphStyle;->equals(Ljava/lang/Object;)Z
+HSPLandroidx/compose/ui/text/ParagraphStyle;->merge(Landroidx/compose/ui/text/ParagraphStyle;)Landroidx/compose/ui/text/ParagraphStyle;
+HSPLandroidx/compose/ui/text/ParagraphStyleKt;-><clinit>()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/PlatformParagraphStyle;-><init>(I)V
+HSPLandroidx/compose/ui/text/PlatformParagraphStyle;->equals(Ljava/lang/Object;)Z
+HSPLandroidx/compose/ui/text/PlatformTextStyle;-><init>(Landroidx/compose/ui/text/PlatformParagraphStyle;)V
+HSPLandroidx/compose/ui/text/SaversKt$ColorSaver$1;-><clinit>()V
+HSPLandroidx/compose/ui/text/SaversKt$ColorSaver$1;-><init>(I)V
+HSPLandroidx/compose/ui/text/SaversKt$ColorSaver$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
+HSPLandroidx/compose/ui/text/SaversKt$ColorSaver$2;-><clinit>()V
+HSPLandroidx/compose/ui/text/SaversKt$ColorSaver$2;-><init>(I)V
+HSPLandroidx/compose/ui/text/SaversKt$ColorSaver$2;->invoke(Landroidx/compose/ui/node/LayoutNode;)V
+HSPLandroidx/compose/ui/text/SaversKt$ColorSaver$2;->invoke(Ljava/lang/Object;)Ljava/lang/Boolean;
+HSPLandroidx/compose/ui/text/SaversKt$ColorSaver$2;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
+HSPLandroidx/compose/ui/text/SpanStyle;-><init>(JJLandroidx/compose/ui/text/font/FontWeight;Landroidx/compose/ui/text/font/FontStyle;Landroidx/compose/ui/text/font/FontSynthesis;Landroidx/compose/ui/text/font/FontFamily;Ljava/lang/String;JLandroidx/compose/ui/text/style/BaselineShift;Landroidx/compose/ui/text/style/TextGeometricTransform;Landroidx/compose/ui/text/intl/LocaleList;JLandroidx/compose/ui/text/style/TextDecoration;Landroidx/compose/ui/graphics/Shadow;I)V
+HSPLandroidx/compose/ui/text/SpanStyle;-><init>(JJLandroidx/compose/ui/text/font/FontWeight;Landroidx/compose/ui/text/font/FontStyle;Landroidx/compose/ui/text/font/FontSynthesis;Landroidx/compose/ui/text/font/FontFamily;Ljava/lang/String;JLandroidx/compose/ui/text/style/BaselineShift;Landroidx/compose/ui/text/style/TextGeometricTransform;Landroidx/compose/ui/text/intl/LocaleList;JLandroidx/compose/ui/text/style/TextDecoration;Landroidx/compose/ui/graphics/Shadow;Lkotlin/ResultKt;)V
+HSPLandroidx/compose/ui/text/SpanStyle;-><init>(Landroidx/compose/ui/text/style/TextForegroundStyle;JLandroidx/compose/ui/text/font/FontWeight;Landroidx/compose/ui/text/font/FontStyle;Landroidx/compose/ui/text/font/FontSynthesis;Landroidx/compose/ui/text/font/FontFamily;Ljava/lang/String;JLandroidx/compose/ui/text/style/BaselineShift;Landroidx/compose/ui/text/style/TextGeometricTransform;Landroidx/compose/ui/text/intl/LocaleList;JLandroidx/compose/ui/text/style/TextDecoration;Landroidx/compose/ui/graphics/Shadow;Lkotlin/ResultKt;)V
+HSPLandroidx/compose/ui/text/SpanStyle;->equals(Ljava/lang/Object;)Z
+HSPLandroidx/compose/ui/text/SpanStyle;->getColor-0d7_KjU()J
+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;
+HSPLandroidx/compose/ui/text/SpanStyleKt;-><clinit>()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;Lkotlin/ResultKt;)Landroidx/compose/ui/text/SpanStyle;
+HSPLandroidx/compose/ui/text/TextLayoutInput;-><init>(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/TextLayoutResult;-><init>(Landroidx/compose/ui/text/TextLayoutInput;Landroidx/compose/ui/text/MultiParagraph;J)V
+HSPLandroidx/compose/ui/text/TextRange;-><clinit>()V
+HSPLandroidx/compose/ui/text/TextRange;->getEnd-impl(J)I
+HSPLandroidx/compose/ui/text/TextStyle;-><clinit>()V
+HSPLandroidx/compose/ui/text/TextStyle;-><init>(JJLandroidx/compose/ui/text/font/FontWeight;Landroidx/compose/ui/text/font/FontStyle;Landroidx/compose/ui/text/font/FontFamily;JLandroidx/compose/ui/text/style/TextDecoration;Landroidx/compose/ui/text/style/TextAlign;JI)V
+HSPLandroidx/compose/ui/text/TextStyle;-><init>(JLandroidx/compose/ui/text/font/FontWeight;Landroidx/compose/ui/text/font/DefaultFontFamily;I)V
+HSPLandroidx/compose/ui/text/TextStyle;-><init>(Landroidx/compose/ui/text/SpanStyle;Landroidx/compose/ui/text/ParagraphStyle;)V
+HSPLandroidx/compose/ui/text/TextStyle;-><init>(Landroidx/compose/ui/text/SpanStyle;Landroidx/compose/ui/text/ParagraphStyle;Landroidx/compose/ui/text/PlatformTextStyle;)V
+HSPLandroidx/compose/ui/text/TextStyle;->equals(Ljava/lang/Object;)Z
+HSPLandroidx/compose/ui/text/TextStyle;->getColor-0d7_KjU()J
+HSPLandroidx/compose/ui/text/TextStyle;->merge(Landroidx/compose/ui/text/TextStyle;)Landroidx/compose/ui/text/TextStyle;
+HSPLandroidx/compose/ui/text/TextStyle;->merge-Z1GrekI$default(IJJJJLandroidx/compose/ui/text/TextStyle;Landroidx/compose/ui/text/font/FontFamily;Landroidx/compose/ui/text/font/FontStyle;Landroidx/compose/ui/text/font/FontWeight;Landroidx/compose/ui/text/style/TextAlign;Landroidx/compose/ui/text/style/TextDecoration;)Landroidx/compose/ui/text/TextStyle;
+HSPLandroidx/compose/ui/text/android/BoringLayoutFactoryDefault;->create(Ljava/lang/CharSequence;Landroid/text/TextPaint;ILandroid/text/Layout$Alignment;FFLandroid/text/BoringLayout$Metrics;ZLandroid/text/TextUtils$TruncateAt;I)Landroid/text/BoringLayout;
+HSPLandroidx/compose/ui/text/android/BoringLayoutFactoryDefault;->isBoring(Ljava/lang/CharSequence;Landroid/text/TextPaint;Landroid/text/TextDirectionHeuristic;)Landroid/text/BoringLayout$Metrics;
+HSPLandroidx/compose/ui/text/android/LayoutIntrinsics;-><init>(Ljava/lang/CharSequence;Landroidx/compose/ui/text/platform/AndroidTextPaint;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/Paint29$$ExternalSyntheticApiModelOutline0;->m$1(Landroid/graphics/RenderNode;)F
+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)V
+HSPLandroidx/compose/ui/text/android/Paint29$$ExternalSyntheticApiModelOutline0;->m$2(Landroid/graphics/RenderNode;)V
+HSPLandroidx/compose/ui/text/android/Paint29$$ExternalSyntheticApiModelOutline0;->m$2(Landroid/graphics/RenderNode;F)V
+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;)V
+HSPLandroidx/compose/ui/text/android/Paint29$$ExternalSyntheticApiModelOutline0;->m()Landroid/graphics/RenderNode;
+HSPLandroidx/compose/ui/text/android/Paint29$$ExternalSyntheticApiModelOutline0;->m(Landroid/graphics/Paint;Ljava/lang/CharSequence;IILandroid/graphics/Rect;)V
+HSPLandroidx/compose/ui/text/android/Paint29$$ExternalSyntheticApiModelOutline0;->m(Landroid/graphics/RenderNode;)F
+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)V
+HSPLandroidx/compose/ui/text/android/Paint29$$ExternalSyntheticApiModelOutline0;->m(Landroid/graphics/RenderNode;I)V
+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/Matrix;)V
+HSPLandroidx/compose/ui/text/android/Paint29$$ExternalSyntheticApiModelOutline0;->m(Landroid/graphics/RenderNode;Landroid/graphics/Outline;)V
+HSPLandroidx/compose/ui/text/android/Paint29$$ExternalSyntheticApiModelOutline0;->m(Landroid/graphics/RenderNode;Z)V
+HSPLandroidx/compose/ui/text/android/Paint29$$ExternalSyntheticApiModelOutline0;->m(Landroid/view/View;)Ljava/util/Map;
+HSPLandroidx/compose/ui/text/android/Paint29;->getTextBounds(Landroid/graphics/Paint;Ljava/lang/CharSequence;IILandroid/graphics/Rect;)V
+HSPLandroidx/compose/ui/text/android/StaticLayoutFactory23;->create(Landroidx/compose/ui/text/android/StaticLayoutParams;)Landroid/text/StaticLayout;
+HSPLandroidx/compose/ui/text/android/StaticLayoutFactory26;->setJustificationMode(Landroid/text/StaticLayout$Builder;I)V
+HSPLandroidx/compose/ui/text/android/StaticLayoutFactory28;->setUseLineSpacingFromFallbacks(Landroid/text/StaticLayout$Builder;Z)V
+HSPLandroidx/compose/ui/text/android/StaticLayoutParams;-><init>(Ljava/lang/CharSequence;IILandroidx/compose/ui/text/platform/AndroidTextPaint;ILandroid/text/TextDirectionHeuristic;Landroid/text/Layout$Alignment;ILandroid/text/TextUtils$TruncateAt;IFFIZZIIII[I[I)V
+HSPLandroidx/compose/ui/text/android/TextAlignmentAdapter;-><clinit>()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/TextLayout;-><init>(Ljava/lang/CharSequence;FLandroidx/compose/ui/text/platform/AndroidTextPaint;ILandroid/text/TextUtils$TruncateAt;IZIIIIIILandroidx/compose/ui/text/android/LayoutIntrinsics;)V
+HSPLandroidx/compose/ui/text/android/TextLayout;->getHeight()I
+HSPLandroidx/compose/ui/text/android/TextLayout;->getLineBaseline(I)F
+HSPLandroidx/compose/ui/text/android/TextLayout;->getText()Ljava/lang/CharSequence;
+HSPLandroidx/compose/ui/text/android/TextLayoutKt;-><clinit>()V
+HSPLandroidx/compose/ui/text/android/TextLayoutKt;->getTextDirectionHeuristic(I)Landroid/text/TextDirectionHeuristic;
+HSPLandroidx/compose/ui/text/android/style/LineHeightStyleSpan;-><init>(FIZZF)V
+HSPLandroidx/compose/ui/text/android/style/LineHeightStyleSpan;->chooseHeight(Ljava/lang/CharSequence;IIIILandroid/graphics/Paint$FontMetricsInt;)V
+HSPLandroidx/compose/ui/text/caches/LruCache;-><init>()V
+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;->size()I
+HSPLandroidx/compose/ui/text/caches/SimpleArrayMap;-><init>()V
+HSPLandroidx/compose/ui/text/font/AndroidFontResolveInterceptor;-><init>(I)V
+HSPLandroidx/compose/ui/text/font/AndroidFontResolveInterceptor;->interceptFontWeight(Landroidx/compose/ui/text/font/FontWeight;)Landroidx/compose/ui/text/font/FontWeight;
+HSPLandroidx/compose/ui/text/font/AsyncTypefaceCache;-><init>()V
+HSPLandroidx/compose/ui/text/font/FontFamily;-><clinit>()V
+HSPLandroidx/compose/ui/text/font/FontFamilyResolverImpl;-><init>(Landroidx/compose/ui/unit/Dp$Companion;Landroidx/compose/ui/text/font/AndroidFontResolveInterceptor;)V
+HSPLandroidx/compose/ui/text/font/FontFamilyResolverImpl;->resolve(Landroidx/compose/ui/text/font/TypefaceRequest;)Landroidx/compose/ui/text/font/TypefaceResult;
+HSPLandroidx/compose/ui/text/font/FontFamilyResolverImpl;->resolve-DPcqOEQ(Landroidx/compose/ui/text/font/FontFamily;Landroidx/compose/ui/text/font/FontWeight;II)Landroidx/compose/ui/text/font/TypefaceResult;
+HSPLandroidx/compose/ui/text/font/FontFamilyResolverKt;-><clinit>()V
+HSPLandroidx/compose/ui/text/font/FontListFontFamilyTypefaceAdapter$special$$inlined$CoroutineExceptionHandler$1;-><init>()V
+HSPLandroidx/compose/ui/text/font/FontListFontFamilyTypefaceAdapter;-><clinit>()V
+HSPLandroidx/compose/ui/text/font/FontListFontFamilyTypefaceAdapter;-><init>(Landroidx/compose/ui/text/font/AsyncTypefaceCache;)V
+HSPLandroidx/compose/ui/text/font/FontStyle;-><init>(I)V
+HSPLandroidx/compose/ui/text/font/FontSynthesis;-><init>(I)V
+HSPLandroidx/compose/ui/text/font/FontWeight;-><clinit>()V
+HSPLandroidx/compose/ui/text/font/FontWeight;-><init>(I)V
+HSPLandroidx/compose/ui/text/font/FontWeight;->equals(Ljava/lang/Object;)Z
+HSPLandroidx/compose/ui/text/font/PlatformResolveInterceptor$Companion;-><clinit>()V
+HSPLandroidx/compose/ui/text/font/PlatformResolveInterceptor;-><clinit>()V
+HSPLandroidx/compose/ui/text/font/TypefaceRequest;-><init>(Landroidx/compose/ui/text/font/FontFamily;Landroidx/compose/ui/text/font/FontWeight;IILjava/lang/Object;)V
+HSPLandroidx/compose/ui/text/font/TypefaceRequest;->equals(Ljava/lang/Object;)Z
+HSPLandroidx/compose/ui/text/font/TypefaceRequest;->hashCode()I
+HSPLandroidx/compose/ui/text/font/TypefaceResult$Immutable;-><init>(Ljava/lang/Object;Z)V
+HSPLandroidx/compose/ui/text/input/InputMethodManagerImpl;-><init>(Landroid/view/View;)V
+HSPLandroidx/compose/ui/text/input/TextFieldValue;-><clinit>()V
+HSPLandroidx/compose/ui/text/input/TextFieldValue;-><init>(Landroidx/compose/ui/text/AnnotatedString;JLandroidx/compose/ui/text/TextRange;)V
+HSPLandroidx/compose/ui/text/input/TextInputService;-><init>()V
+HSPLandroidx/compose/ui/text/input/TextInputServiceAndroid;-><init>(Landroid/view/View;Landroidx/compose/ui/input/pointer/PositionCalculator;)V
+HSPLandroidx/compose/ui/text/input/TextInputServiceAndroid_androidKt$$ExternalSyntheticLambda0;-><init>(Ljava/lang/Runnable;I)V
+HSPLandroidx/compose/ui/text/input/TextInputServiceAndroid_androidKt$$ExternalSyntheticLambda0;->doFrame(J)V
+HSPLandroidx/compose/ui/text/intl/AndroidLocale;-><init>(Ljava/util/Locale;)V
+HSPLandroidx/compose/ui/text/intl/AndroidLocaleDelegateAPI24;-><init>()V
+HSPLandroidx/compose/ui/text/intl/AndroidLocaleDelegateAPI24;->getCurrent()Landroidx/compose/ui/text/intl/LocaleList;
+HSPLandroidx/compose/ui/text/intl/Locale;-><init>(Landroidx/compose/ui/text/intl/AndroidLocale;)V
+HSPLandroidx/compose/ui/text/intl/LocaleList;-><init>(Ljava/util/List;)V
+HSPLandroidx/compose/ui/text/intl/LocaleList;->equals(Ljava/lang/Object;)Z
+HSPLandroidx/compose/ui/text/intl/PlatformLocaleKt;-><clinit>()V
+HSPLandroidx/compose/ui/text/platform/AndroidParagraphHelper_androidKt;-><clinit>()V
+HSPLandroidx/compose/ui/text/platform/AndroidParagraphIntrinsics$resolveTypeface$1;-><init>(Landroidx/compose/ui/text/platform/AndroidParagraphIntrinsics;)V
+HSPLandroidx/compose/ui/text/platform/AndroidParagraphIntrinsics;-><init>(Landroidx/compose/ui/text/TextStyle;Landroidx/compose/ui/text/font/FontFamily$Resolver;Landroidx/compose/ui/unit/Density;Ljava/lang/String;Ljava/util/List;Ljava/util/List;)V
+HSPLandroidx/compose/ui/text/platform/AndroidParagraphIntrinsics;->getHasStaleResolvedFonts()Z
+HSPLandroidx/compose/ui/text/platform/AndroidParagraphIntrinsics;->getMaxIntrinsicWidth()F
+HSPLandroidx/compose/ui/text/platform/AndroidTextPaint;-><init>(F)V
+HSPLandroidx/compose/ui/text/platform/AndroidTextPaint;->setBrush-12SF9DM(Landroidx/compose/ui/graphics/Brush;JF)V
+HSPLandroidx/compose/ui/text/platform/AndroidTextPaint;->setDrawStyle(Lkotlin/ResultKt;)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
+HSPLandroidx/compose/ui/text/platform/DefaultImpl$getFontLoadState$initCallback$1;-><init>(Landroidx/compose/runtime/ParcelableSnapshotMutableState;Landroidx/compose/ui/text/platform/DefaultImpl;)V
+HSPLandroidx/compose/ui/text/platform/DefaultImpl;-><init>()V
+HSPLandroidx/compose/ui/text/platform/DefaultImpl;->getFontLoadState()Landroidx/compose/runtime/State;
+HSPLandroidx/compose/ui/text/platform/EmojiCompatStatus;-><clinit>()V
+HSPLandroidx/compose/ui/text/platform/ImmutableBool;-><init>(Z)V
+HSPLandroidx/compose/ui/text/platform/ImmutableBool;->getValue()Ljava/lang/Object;
+HSPLandroidx/compose/ui/text/platform/URLSpanCache;-><init>()V
+HSPLandroidx/compose/ui/text/platform/extensions/LocaleListHelperMethods;-><clinit>()V
+HSPLandroidx/compose/ui/text/style/BaselineShift;-><init>(F)V
+HSPLandroidx/compose/ui/text/style/ColorStyle;-><init>(J)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
+HSPLandroidx/compose/ui/text/style/Hyphens;-><init>(I)V
+HSPLandroidx/compose/ui/text/style/Hyphens;->equals(Ljava/lang/Object;)Z
+HSPLandroidx/compose/ui/text/style/LineBreak$Strategy;-><init>(I)V
+HSPLandroidx/compose/ui/text/style/LineBreak$Strictness;-><init>(I)V
+HSPLandroidx/compose/ui/text/style/LineBreak$WordBreak;-><init>(I)V
+HSPLandroidx/compose/ui/text/style/LineBreak;-><init>(I)V
+HSPLandroidx/compose/ui/text/style/LineBreak;->equals(Ljava/lang/Object;)Z
+HSPLandroidx/compose/ui/text/style/LineHeightStyle$Alignment;-><clinit>()V
+HSPLandroidx/compose/ui/text/style/LineHeightStyle$Alignment;->constructor-impl(F)V
+HSPLandroidx/compose/ui/text/style/LineHeightStyle;-><clinit>()V
+HSPLandroidx/compose/ui/text/style/LineHeightStyle;-><init>(F)V
+HSPLandroidx/compose/ui/text/style/TextAlign;-><init>(I)V
+HSPLandroidx/compose/ui/text/style/TextAlign;->equals(Ljava/lang/Object;)Z
+HSPLandroidx/compose/ui/text/style/TextDecoration;-><clinit>()V
+HSPLandroidx/compose/ui/text/style/TextDecoration;-><init>(I)V
+HSPLandroidx/compose/ui/text/style/TextDecoration;->equals(Ljava/lang/Object;)Z
+HSPLandroidx/compose/ui/text/style/TextDirection;-><init>(I)V
+HSPLandroidx/compose/ui/text/style/TextDirection;->equals(Ljava/lang/Object;)Z
+HSPLandroidx/compose/ui/text/style/TextForegroundStyle$Unspecified;-><clinit>()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
+HSPLandroidx/compose/ui/text/style/TextGeometricTransform;-><clinit>()V
+HSPLandroidx/compose/ui/text/style/TextGeometricTransform;-><init>(FF)V
+HSPLandroidx/compose/ui/text/style/TextGeometricTransform;->equals(Ljava/lang/Object;)Z
+HSPLandroidx/compose/ui/text/style/TextIndent;-><clinit>()V
+HSPLandroidx/compose/ui/text/style/TextIndent;-><init>(JJ)V
+HSPLandroidx/compose/ui/text/style/TextIndent;->equals(Ljava/lang/Object;)Z
+HSPLandroidx/compose/ui/text/style/TextMotion;-><clinit>()V
+HSPLandroidx/compose/ui/text/style/TextMotion;-><init>(IZ)V
+HSPLandroidx/compose/ui/text/style/TextMotion;->equals(Ljava/lang/Object;)Z
+HSPLandroidx/compose/ui/unit/Constraints;-><clinit>()V
+HSPLandroidx/compose/ui/unit/Constraints;-><init>(J)V
+HSPLandroidx/compose/ui/unit/Constraints;->copy-Zbe2FdA$default(JIIIII)J
+HSPLandroidx/compose/ui/unit/Constraints;->equals-impl0(JJ)Z
+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/Density;->roundToPx-0680j_4(F)I
+HSPLandroidx/compose/ui/unit/Density;->toDp-u2uoSUM(I)F
+HSPLandroidx/compose/ui/unit/Density;->toPx--R2X_6o(J)F
+HSPLandroidx/compose/ui/unit/Density;->toPx-0680j_4(F)F
+HSPLandroidx/compose/ui/unit/DensityImpl;-><init>(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
+HSPLandroidx/compose/ui/unit/Dp$Companion;-><clinit>()V
+HSPLandroidx/compose/ui/unit/Dp$Companion;-><init>(Landroid/content/Context;)V
+HSPLandroidx/compose/ui/unit/Dp$Companion;->access$getIsShowingLayoutBounds()Z
+HSPLandroidx/compose/ui/unit/Dp$Companion;->area([F)F
+HSPLandroidx/compose/ui/unit/Dp$Companion;->bitsNeedForSize(I)I
+HSPLandroidx/compose/ui/unit/Dp$Companion;->createAndroidTypefaceApi28-RetOiIg(Ljava/lang/String;Landroidx/compose/ui/text/font/FontWeight;I)Landroid/graphics/Typeface;
+HSPLandroidx/compose/ui/unit/Dp$Companion;->createConstraints-Zbe2FdA$ui_unit_release(IIII)J
+HSPLandroidx/compose/ui/unit/Dp$Companion;->fixed-JhjzzOo(II)J
+HSPLandroidx/compose/ui/unit/Dp$Companion;->observe(Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function0;)Ljava/lang/Object;
+HSPLandroidx/compose/ui/unit/Dp;-><init>(F)V
+HSPLandroidx/compose/ui/unit/Dp;->equals(Ljava/lang/Object;)Z
+HSPLandroidx/compose/ui/unit/Dp;->equals-impl0(FF)Z
+HSPLandroidx/compose/ui/unit/DpOffset;-><clinit>()V
+HSPLandroidx/compose/ui/unit/DpRect;-><init>(FFFF)V
+HSPLandroidx/compose/ui/unit/DpRect;->equals(Ljava/lang/Object;)Z
+HSPLandroidx/compose/ui/unit/IntOffset;-><clinit>()V
+HSPLandroidx/compose/ui/unit/IntOffset;-><init>(J)V
+HSPLandroidx/compose/ui/unit/IntOffset;->getY-impl(J)I
+HSPLandroidx/compose/ui/unit/IntSize;-><init>(J)V
+HSPLandroidx/compose/ui/unit/IntSize;->equals-impl0(JJ)Z
+HSPLandroidx/compose/ui/unit/IntSize;->getHeight-impl(J)I
+HSPLandroidx/compose/ui/unit/LayoutDirection;-><clinit>()V
+HSPLandroidx/compose/ui/unit/LayoutDirection;-><init>(ILjava/lang/String;)V
+HSPLandroidx/compose/ui/unit/TextUnit;-><clinit>()V
+HSPLandroidx/compose/ui/unit/TextUnit;->equals-impl0(JJ)Z
+HSPLandroidx/compose/ui/unit/TextUnit;->getType-UIouoOA(J)J
+HSPLandroidx/compose/ui/unit/TextUnit;->getValue-impl(J)F
+HSPLandroidx/compose/ui/unit/TextUnitType;-><init>(J)V
+HSPLandroidx/compose/ui/unit/TextUnitType;->equals-impl0(JJ)Z
+HSPLandroidx/core/app/ComponentActivity;-><init>()V
+HSPLandroidx/core/app/ComponentActivity;->dispatchKeyEvent(Landroid/view/KeyEvent;)Z
+HSPLandroidx/core/app/ComponentActivity;->onCreate(Landroid/os/Bundle;)V
+HSPLandroidx/core/app/ComponentActivity;->superDispatchKeyEvent(Landroid/view/KeyEvent;)Z
+HSPLandroidx/core/app/CoreComponentFactory;-><init>()V
+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;
+HSPLandroidx/core/content/res/ComplexColorCompat;-><init>()V
+HSPLandroidx/core/content/res/ComplexColorCompat;-><init>(I)V
+HSPLandroidx/core/content/res/ComplexColorCompat;-><init>(Ljava/lang/Object;)V
+HSPLandroidx/core/content/res/ComplexColorCompat;->find(Ljava/lang/Object;)I
+HSPLandroidx/core/content/res/ComplexColorCompat;->get(Ljava/lang/Object;)Ljava/lang/Object;
+HSPLandroidx/core/content/res/ComplexColorCompat;->set(Ljava/lang/Object;Ljava/lang/Object;)V
+HSPLandroidx/core/graphics/TypefaceCompat;-><clinit>()V
+HSPLandroidx/core/graphics/TypefaceCompatApi29Impl;-><init>()V
+HSPLandroidx/core/graphics/TypefaceCompatApi29Impl;->createFromFontInfo(Landroid/content/Context;[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
+HSPLandroidx/core/graphics/TypefaceCompatUtil$Api19Impl;->openFileDescriptor(Landroid/content/ContentResolver;Landroid/net/Uri;Ljava/lang/String;Landroid/os/CancellationSignal;)Landroid/os/ParcelFileDescriptor;
+HSPLandroidx/core/os/BuildCompat$Extensions30Impl$$ExternalSyntheticApiModelOutline0;->m$1()I
+HSPLandroidx/core/os/BuildCompat$Extensions30Impl$$ExternalSyntheticApiModelOutline0;->m$2()I
+HSPLandroidx/core/os/BuildCompat$Extensions30Impl$$ExternalSyntheticApiModelOutline0;->m$3()I
+HSPLandroidx/core/os/BuildCompat$Extensions30Impl$$ExternalSyntheticApiModelOutline0;->m()I
+HSPLandroidx/core/os/BuildCompat$Extensions30Impl;-><clinit>()V
+HSPLandroidx/core/os/BuildCompat;-><clinit>()V
+HSPLandroidx/core/os/BuildCompat;->isAtLeastT()Z
+HSPLandroidx/core/os/TraceCompat$Api18Impl;->beginSection(Ljava/lang/String;)V
+HSPLandroidx/core/os/TraceCompat$Api18Impl;->endSection()V
+HSPLandroidx/core/os/TraceCompat;-><clinit>()V
+HSPLandroidx/core/provider/CallbackWithHandler$2;-><init>(ILjava/util/ArrayList;)V
+HSPLandroidx/core/provider/CallbackWithHandler$2;-><init>(Ljava/util/List;ILjava/lang/Throwable;)V
+HSPLandroidx/core/provider/CallbackWithHandler$2;->run()V
+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;
+HSPLandroidx/core/provider/FontRequest;-><init>(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/util/List;)V
+HSPLandroidx/core/provider/FontsContractCompat$FontInfo;-><init>(Landroid/net/Uri;IIZI)V
+HSPLandroidx/core/view/AccessibilityDelegateCompat$AccessibilityDelegateAdapter;-><init>(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;->sendAccessibilityEvent(Landroid/view/View;I)V
+HSPLandroidx/core/view/AccessibilityDelegateCompat$AccessibilityDelegateAdapter;->sendAccessibilityEventUnchecked(Landroid/view/View;Landroid/view/accessibility/AccessibilityEvent;)V
+HSPLandroidx/core/view/AccessibilityDelegateCompat;-><clinit>()V
+HSPLandroidx/core/view/AccessibilityDelegateCompat;-><init>()V
+HSPLandroidx/core/view/MenuHostHelper;-><init>(Landroidx/activity/ComponentActivity$$ExternalSyntheticLambda0;)V
+HSPLandroidx/core/view/MenuHostHelper;-><init>(Ljava/lang/reflect/Method;Ljava/lang/reflect/Method;Ljava/lang/reflect/Method;)V
+HSPLandroidx/core/view/ViewCompat$$ExternalSyntheticLambda0;-><init>(I)V
+HSPLandroidx/core/view/ViewCompat$$ExternalSyntheticLambda0;->invoke(D)D
+HSPLandroidx/core/view/ViewCompat$Api29Impl;->getContentCaptureSession(Landroid/view/View;)Landroid/view/contentcapture/ContentCaptureSession;
+HSPLandroidx/core/view/ViewCompat$Api30Impl;->setImportantForContentCapture(Landroid/view/View;I)V
+HSPLandroidx/core/view/ViewCompat;-><clinit>()V
+HSPLandroidx/core/view/accessibility/AccessibilityNodeProviderCompat;-><init>(Ljava/lang/Object;)V
+HSPLandroidx/customview/poolingcontainer/PoolingContainerListenerHolder;-><init>()V
+HSPLandroidx/emoji2/text/ConcurrencyHelpers$$ExternalSyntheticLambda0;-><init>(Ljava/lang/String;)V
+HSPLandroidx/emoji2/text/ConcurrencyHelpers$$ExternalSyntheticLambda0;->newThread(Ljava/lang/Runnable;)Ljava/lang/Thread;
+HSPLandroidx/emoji2/text/ConcurrencyHelpers$Handler28Impl;->createAsync(Landroid/os/Looper;)Landroid/os/Handler;
+HSPLandroidx/emoji2/text/DefaultGlyphChecker;-><clinit>()V
+HSPLandroidx/emoji2/text/DefaultGlyphChecker;-><init>()V
+HSPLandroidx/emoji2/text/EmojiCompat$CompatInternal19$1;-><init>(Landroidx/emoji2/text/EmojiCompat$CompatInternal19;)V
+HSPLandroidx/emoji2/text/EmojiCompat$CompatInternal19$1;->onLoaded(Landroidx/emoji2/text/MetadataRepo;)V
+HSPLandroidx/emoji2/text/EmojiCompat$CompatInternal19;-><init>(Landroidx/emoji2/text/EmojiCompat;)V
+HSPLandroidx/emoji2/text/EmojiCompat$CompatInternal19;->process(Ljava/lang/CharSequence;IZ)Ljava/lang/CharSequence;
+HSPLandroidx/emoji2/text/EmojiCompat$Config;-><init>(Landroidx/emoji2/text/EmojiCompat$MetadataRepoLoader;)V
+HSPLandroidx/emoji2/text/EmojiCompat;-><clinit>()V
+HSPLandroidx/emoji2/text/EmojiCompat;-><init>(Landroidx/emoji2/text/FontRequestEmojiCompatConfig;)V
+HSPLandroidx/emoji2/text/EmojiCompat;->get()Landroidx/emoji2/text/EmojiCompat;
+HSPLandroidx/emoji2/text/EmojiCompat;->getLoadState()I
+HSPLandroidx/emoji2/text/EmojiCompat;->load()V
+HSPLandroidx/emoji2/text/EmojiCompat;->onMetadataLoadSuccess()V
+HSPLandroidx/emoji2/text/EmojiCompatInitializer$1;-><init>(Landroidx/emoji2/text/EmojiCompatInitializer;Landroidx/lifecycle/Lifecycle;)V
+HSPLandroidx/emoji2/text/EmojiCompatInitializer$1;->onResume(Landroidx/lifecycle/LifecycleOwner;)V
+HSPLandroidx/emoji2/text/EmojiCompatInitializer$BackgroundDefaultLoader$$ExternalSyntheticLambda0;-><init>(Landroidx/compose/runtime/Stack;Lokhttp3/MediaType;Ljava/util/concurrent/ThreadPoolExecutor;)V
+HSPLandroidx/emoji2/text/EmojiCompatInitializer$BackgroundDefaultLoader$$ExternalSyntheticLambda0;->run()V
+HSPLandroidx/emoji2/text/EmojiCompatInitializer$BackgroundDefaultLoader$1;-><init>(Lokhttp3/MediaType;Ljava/util/concurrent/ThreadPoolExecutor;)V
+HSPLandroidx/emoji2/text/EmojiCompatInitializer$BackgroundDefaultLoader$1;->onLoaded(Landroidx/emoji2/text/MetadataRepo;)V
+HSPLandroidx/emoji2/text/EmojiCompatInitializer$LoadEmojiCompatRunnable;->run()V
+HSPLandroidx/emoji2/text/EmojiCompatInitializer;-><init>()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;->dependencies()Ljava/util/List;
+HSPLandroidx/emoji2/text/EmojiProcessor$EmojiProcessAddSpanCallback;-><init>(Landroidx/emoji2/text/UnprecomputeTextOnModificationSpannable;Lkotlin/ULong$Companion;)V
+HSPLandroidx/emoji2/text/EmojiProcessor$EmojiProcessAddSpanCallback;->getResult()Ljava/lang/Object;
+HSPLandroidx/emoji2/text/EmojiProcessor$ProcessorSm;-><init>(Landroidx/emoji2/text/MetadataRepo$Node;Z[I)V
+HSPLandroidx/emoji2/text/EmojiProcessor$ProcessorSm;->shouldUseEmojiPresentationStyleForSingleCodepoint()Z
+HSPLandroidx/emoji2/text/EmojiProcessor;-><init>(Landroidx/compose/ui/node/LayoutNode;)V
+HSPLandroidx/emoji2/text/EmojiProcessor;-><init>(Landroidx/emoji2/text/MetadataRepo;Lkotlin/ULong$Companion;Landroidx/emoji2/text/DefaultGlyphChecker;Ljava/util/Set;)V
+HSPLandroidx/emoji2/text/EmojiProcessor;->process(Ljava/lang/String;IIIZLandroidx/emoji2/text/EmojiProcessor$EmojiProcessCallback;)Ljava/lang/Object;
+HSPLandroidx/emoji2/text/FontRequestEmojiCompatConfig$FontRequestMetadataLoader$$ExternalSyntheticLambda0;-><init>(Landroidx/emoji2/text/FontRequestEmojiCompatConfig$FontRequestMetadataLoader;I)V
+HSPLandroidx/emoji2/text/FontRequestEmojiCompatConfig$FontRequestMetadataLoader$$ExternalSyntheticLambda0;->run()V
+HSPLandroidx/emoji2/text/FontRequestEmojiCompatConfig$FontRequestMetadataLoader$1;-><init>(Lkotlinx/coroutines/channels/BufferedChannel;Landroid/os/Handler;I)V
+HSPLandroidx/emoji2/text/FontRequestEmojiCompatConfig$FontRequestMetadataLoader;-><init>(Landroid/content/Context;Landroidx/core/provider/FontRequest;)V
+HSPLandroidx/emoji2/text/FontRequestEmojiCompatConfig$FontRequestMetadataLoader;->cleanUp()V
+HSPLandroidx/emoji2/text/FontRequestEmojiCompatConfig$FontRequestMetadataLoader;->load(Lokhttp3/MediaType;)V
+HSPLandroidx/emoji2/text/FontRequestEmojiCompatConfig$FontRequestMetadataLoader;->loadInternal()V
+HSPLandroidx/emoji2/text/FontRequestEmojiCompatConfig$FontRequestMetadataLoader;->retrieveFontInfo()Landroidx/core/provider/FontsContractCompat$FontInfo;
+HSPLandroidx/emoji2/text/FontRequestEmojiCompatConfig;-><clinit>()V
+HSPLandroidx/emoji2/text/FontRequestEmojiCompatConfig;-><init>(Landroid/content/Context;)V
+HSPLandroidx/emoji2/text/FontRequestEmojiCompatConfig;-><init>(Landroid/content/Context;Landroidx/core/provider/FontRequest;)V
+HSPLandroidx/emoji2/text/MetadataRepo$Node;-><init>(I)V
+HSPLandroidx/emoji2/text/MetadataRepo$Node;->put(Landroidx/emoji2/text/TypefaceEmojiRasterizer;II)V
+HSPLandroidx/emoji2/text/MetadataRepo;-><init>(Landroid/graphics/Typeface;Landroidx/emoji2/text/flatbuffer/MetadataList;)V
+HSPLandroidx/emoji2/text/TypefaceEmojiRasterizer;-><clinit>()V
+HSPLandroidx/emoji2/text/TypefaceEmojiRasterizer;-><init>(Landroidx/emoji2/text/MetadataRepo;I)V
+HSPLandroidx/emoji2/text/TypefaceEmojiRasterizer;->getCodepointAt(I)I
+HSPLandroidx/emoji2/text/TypefaceEmojiRasterizer;->getCodepointsLength()I
+HSPLandroidx/emoji2/text/TypefaceEmojiRasterizer;->getMetadataItem()Landroidx/emoji2/text/flatbuffer/MetadataItem;
+HSPLandroidx/emoji2/text/flatbuffer/Table;-><init>()V
+HSPLandroidx/emoji2/text/flatbuffer/Table;->__offset(I)I
+HSPLandroidx/lifecycle/DefaultLifecycleObserver;->onResume(Landroidx/lifecycle/LifecycleOwner;)V
+HSPLandroidx/lifecycle/DefaultLifecycleObserver;->onStart(Landroidx/lifecycle/LifecycleOwner;)V
+HSPLandroidx/lifecycle/DefaultLifecycleObserverAdapter$WhenMappings;-><clinit>()V
+HSPLandroidx/lifecycle/DefaultLifecycleObserverAdapter;-><init>(Landroidx/lifecycle/DefaultLifecycleObserver;Landroidx/lifecycle/LifecycleEventObserver;)V
+HSPLandroidx/lifecycle/DefaultLifecycleObserverAdapter;->onStateChanged(Landroidx/lifecycle/LifecycleOwner;Landroidx/lifecycle/Lifecycle$Event;)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
+HSPLandroidx/lifecycle/Lifecycle$Event$Companion;->upFrom(Landroidx/lifecycle/Lifecycle$State;)Landroidx/lifecycle/Lifecycle$Event;
+HSPLandroidx/lifecycle/Lifecycle$Event$WhenMappings;-><clinit>()V
+HSPLandroidx/lifecycle/Lifecycle$Event;-><clinit>()V
+HSPLandroidx/lifecycle/Lifecycle$Event;-><init>(ILjava/lang/String;)V
+HSPLandroidx/lifecycle/Lifecycle$Event;->getTargetState()Landroidx/lifecycle/Lifecycle$State;
+HSPLandroidx/lifecycle/Lifecycle$Event;->values()[Landroidx/lifecycle/Lifecycle$Event;
+HSPLandroidx/lifecycle/Lifecycle$State;-><clinit>()V
+HSPLandroidx/lifecycle/Lifecycle$State;-><init>(ILjava/lang/String;)V
+HSPLandroidx/lifecycle/Lifecycle;-><init>()V
+HSPLandroidx/lifecycle/LifecycleDestroyedException;-><init>(I)V
+HSPLandroidx/lifecycle/LifecycleDestroyedException;-><init>(II)V
+HSPLandroidx/lifecycle/LifecycleDestroyedException;->fillInStackTrace()Ljava/lang/Throwable;
+HSPLandroidx/lifecycle/LifecycleDispatcher$DispatcherActivityCallback;-><init>()V
+HSPLandroidx/lifecycle/LifecycleDispatcher$DispatcherActivityCallback;->onActivityCreated(Landroid/app/Activity;Landroid/os/Bundle;)V
+HSPLandroidx/lifecycle/LifecycleDispatcher;-><clinit>()V
+HSPLandroidx/lifecycle/LifecycleRegistry$ObserverWithState;-><init>(Landroidx/lifecycle/LifecycleObserver;Landroidx/lifecycle/Lifecycle$State;)V
+HSPLandroidx/lifecycle/LifecycleRegistry$ObserverWithState;->dispatchEvent(Landroidx/lifecycle/LifecycleOwner;Landroidx/lifecycle/Lifecycle$Event;)V
+HSPLandroidx/lifecycle/LifecycleRegistry;-><init>(Landroidx/lifecycle/LifecycleOwner;)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;->handleLifecycleEvent(Landroidx/lifecycle/Lifecycle$Event;)V
+HSPLandroidx/lifecycle/LifecycleRegistry;->moveToState(Landroidx/lifecycle/Lifecycle$State;)V
+HSPLandroidx/lifecycle/LifecycleRegistry;->removeObserver(Landroidx/lifecycle/LifecycleObserver;)V
+HSPLandroidx/lifecycle/LifecycleRegistry;->sync()V
+HSPLandroidx/lifecycle/Lifecycling;-><clinit>()V
+HSPLandroidx/lifecycle/ProcessLifecycleInitializer;-><init>()V
+HSPLandroidx/lifecycle/ProcessLifecycleInitializer;->create(Landroid/content/Context;)Ljava/lang/Object;
+HSPLandroidx/lifecycle/ProcessLifecycleInitializer;->dependencies()Ljava/util/List;
+HSPLandroidx/lifecycle/ProcessLifecycleOwner$Api29Impl;->registerActivityLifecycleCallbacks(Landroid/app/Activity;Landroid/app/Application$ActivityLifecycleCallbacks;)V
+HSPLandroidx/lifecycle/ProcessLifecycleOwner$attach$1$onActivityPreCreated$1;-><init>(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
+HSPLandroidx/lifecycle/ProcessLifecycleOwner$attach$1;-><init>(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
+HSPLandroidx/lifecycle/ProcessLifecycleOwner$initializationListener$1;-><init>(Landroidx/lifecycle/ProcessLifecycleOwner;)V
+HSPLandroidx/lifecycle/ProcessLifecycleOwner;-><clinit>()V
+HSPLandroidx/lifecycle/ProcessLifecycleOwner;-><init>()V
+HSPLandroidx/lifecycle/ProcessLifecycleOwner;->activityResumed$lifecycle_process_release()V
+HSPLandroidx/lifecycle/ProcessLifecycleOwner;->getLifecycle()Landroidx/lifecycle/LifecycleRegistry;
+HSPLandroidx/lifecycle/ReportFragment$LifecycleCallbacks;-><clinit>()V
+HSPLandroidx/lifecycle/ReportFragment$LifecycleCallbacks;-><init>()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
+HSPLandroidx/lifecycle/ReportFragment;-><init>()V
+HSPLandroidx/lifecycle/ReportFragment;->dispatch(Landroidx/lifecycle/Lifecycle$Event;)V
+HSPLandroidx/lifecycle/ReportFragment;->onActivityCreated(Landroid/os/Bundle;)V
+HSPLandroidx/lifecycle/ReportFragment;->onResume()V
+HSPLandroidx/lifecycle/ReportFragment;->onStart()V
+HSPLandroidx/lifecycle/SavedStateHandleAttacher;-><init>(Landroidx/lifecycle/SavedStateHandlesProvider;)V
+HSPLandroidx/lifecycle/SavedStateHandleAttacher;->onStateChanged(Landroidx/lifecycle/LifecycleOwner;Landroidx/lifecycle/Lifecycle$Event;)V
+HSPLandroidx/lifecycle/SavedStateHandlesProvider;-><init>(Landroidx/savedstate/SavedStateRegistry;Landroidx/lifecycle/ViewModelStoreOwner;)V
+HSPLandroidx/lifecycle/SavedStateHandlesVM;-><init>()V
+HSPLandroidx/lifecycle/ViewModelStore;-><init>()V
+HSPLandroidx/lifecycle/viewmodel/CreationExtras$Empty;-><clinit>()V
+HSPLandroidx/lifecycle/viewmodel/CreationExtras;-><init>()V
+HSPLandroidx/lifecycle/viewmodel/MutableCreationExtras;-><init>(Landroidx/lifecycle/viewmodel/CreationExtras;)V
+HSPLandroidx/lifecycle/viewmodel/ViewModelInitializer;-><init>(Ljava/lang/Class;)V
+HSPLandroidx/metrics/performance/DelegatingFrameMetricsListener;-><init>(Ljava/util/ArrayList;)V
+HSPLandroidx/metrics/performance/DelegatingFrameMetricsListener;->onFrameMetricsAvailable(Landroid/view/Window;Landroid/view/FrameMetrics;I)V
+HSPLandroidx/metrics/performance/FrameData;-><init>(JJZLjava/util/ArrayList;)V
+HSPLandroidx/metrics/performance/FrameDataApi24;-><init>(JJJZLjava/util/ArrayList;)V
+HSPLandroidx/metrics/performance/FrameDataApi31;-><init>(JJJJZLjava/util/ArrayList;)V
+HSPLandroidx/metrics/performance/FrameDataApi31;->copy()Landroidx/metrics/performance/FrameData;
+HSPLandroidx/metrics/performance/JankStats;-><init>(Landroid/view/Window;Lcom/example/tvcomposebasedtests/JankStatsAggregator$listener$1;)V
+HSPLandroidx/metrics/performance/JankStats;->logFrameData$metrics_performance_release(Landroidx/metrics/performance/FrameData;)V
+HSPLandroidx/metrics/performance/JankStatsApi16Impl;-><init>(Landroidx/metrics/performance/JankStats;Landroid/view/View;)V
+HSPLandroidx/metrics/performance/JankStatsApi22Impl;-><init>(Landroidx/metrics/performance/JankStats;Landroid/view/View;)V
+HSPLandroidx/metrics/performance/JankStatsApi24Impl$$ExternalSyntheticLambda0;-><init>(Landroidx/metrics/performance/JankStatsApi24Impl;Landroidx/metrics/performance/JankStats;)V
+HSPLandroidx/metrics/performance/JankStatsApi24Impl$$ExternalSyntheticLambda0;->onFrameMetricsAvailable(Landroid/view/Window;Landroid/view/FrameMetrics;I)V
+HSPLandroidx/metrics/performance/JankStatsApi24Impl;-><init>(Landroidx/metrics/performance/JankStats;Landroid/view/View;Landroid/view/Window;)V
+HSPLandroidx/metrics/performance/JankStatsApi24Impl;->getOrCreateFrameMetricsListenerDelegator(Landroid/view/Window;)Landroidx/metrics/performance/DelegatingFrameMetricsListener;
+HSPLandroidx/metrics/performance/JankStatsApi24Impl;->setupFrameTimer(Z)V
+HSPLandroidx/metrics/performance/JankStatsApi26Impl;-><init>(Landroidx/metrics/performance/JankStats;Landroid/view/View;Landroid/view/Window;)V
+HSPLandroidx/metrics/performance/JankStatsApi26Impl;->getFrameStartTime$metrics_performance_release(Landroid/view/FrameMetrics;)J
+HSPLandroidx/metrics/performance/JankStatsApi31Impl;-><init>(Landroidx/metrics/performance/JankStats;Landroid/view/View;Landroid/view/Window;)V
+HSPLandroidx/metrics/performance/JankStatsApi31Impl;->getExpectedFrameDuration(Landroid/view/FrameMetrics;)J
+HSPLandroidx/metrics/performance/JankStatsApi31Impl;->getFrameData$metrics_performance_release(JJLandroid/view/FrameMetrics;)Landroidx/metrics/performance/FrameDataApi24;
+HSPLandroidx/metrics/performance/PerformanceMetricsState;-><init>()V
+HSPLandroidx/metrics/performance/PerformanceMetricsState;->addFrameState(JJLjava/util/ArrayList;Ljava/util/ArrayList;)V
+HSPLandroidx/metrics/performance/PerformanceMetricsState;->cleanupSingleFrameStates$metrics_performance_release()V
+HSPLandroidx/metrics/performance/PerformanceMetricsState;->getIntervalStates$metrics_performance_release(JJLjava/util/ArrayList;)V
+HSPLandroidx/profileinstaller/ProfileInstallerInitializer$$ExternalSyntheticLambda0;-><init>(Ljava/lang/Object;ILjava/lang/Object;)V
+HSPLandroidx/profileinstaller/ProfileInstallerInitializer$$ExternalSyntheticLambda0;->run()V
+HSPLandroidx/profileinstaller/ProfileInstallerInitializer$$ExternalSyntheticLambda1;-><init>(Landroid/content/Context;I)V
+HSPLandroidx/profileinstaller/ProfileInstallerInitializer$Choreographer16Impl;->postFrameCallback(Ljava/lang/Runnable;)V
+HSPLandroidx/profileinstaller/ProfileInstallerInitializer$Handler28Impl;->createAsync(Landroid/os/Looper;)Landroid/os/Handler;
+HSPLandroidx/profileinstaller/ProfileInstallerInitializer;-><init>()V
+HSPLandroidx/profileinstaller/ProfileInstallerInitializer;->create(Landroid/content/Context;)Ljava/lang/Object;
+HSPLandroidx/profileinstaller/ProfileInstallerInitializer;->dependencies()Ljava/util/List;
+HSPLandroidx/savedstate/Recreator;-><init>(Landroidx/savedstate/SavedStateRegistryOwner;)V
+HSPLandroidx/savedstate/Recreator;->onStateChanged(Landroidx/lifecycle/LifecycleOwner;Landroidx/lifecycle/Lifecycle$Event;)V
+HSPLandroidx/savedstate/SavedStateRegistry$$ExternalSyntheticLambda0;-><init>(Landroidx/savedstate/SavedStateRegistry;)V
+HSPLandroidx/savedstate/SavedStateRegistry$$ExternalSyntheticLambda0;->onStateChanged(Landroidx/lifecycle/LifecycleOwner;Landroidx/lifecycle/Lifecycle$Event;)V
+HSPLandroidx/savedstate/SavedStateRegistry;-><init>()V
+HSPLandroidx/savedstate/SavedStateRegistry;->consumeRestoredStateForKey(Ljava/lang/String;)Landroid/os/Bundle;
+HSPLandroidx/savedstate/SavedStateRegistry;->registerSavedStateProvider(Ljava/lang/String;Landroidx/savedstate/SavedStateRegistry$SavedStateProvider;)V
+HSPLandroidx/savedstate/SavedStateRegistryController;-><init>(Landroidx/savedstate/SavedStateRegistryOwner;)V
+HSPLandroidx/savedstate/SavedStateRegistryController;->performAttach()V
+HSPLandroidx/startup/AppInitializer;-><clinit>()V
+HSPLandroidx/startup/AppInitializer;-><init>(Landroid/content/Context;)V
+HSPLandroidx/startup/AppInitializer;->discoverAndInitialize(Landroid/os/Bundle;)V
+HSPLandroidx/startup/AppInitializer;->doInitialize(Ljava/lang/Class;Ljava/util/HashSet;)Ljava/lang/Object;
+HSPLandroidx/startup/AppInitializer;->getInstance(Landroid/content/Context;)Landroidx/startup/AppInitializer;
+HSPLandroidx/startup/InitializationProvider;-><init>()V
+HSPLandroidx/startup/InitializationProvider;->onCreate()Z
+HSPLandroidx/tracing/Trace$$ExternalSyntheticApiModelOutline0;->m()Z
+HSPLandroidx/tracing/Trace$$ExternalSyntheticApiModelOutline0;->m(Landroid/app/Activity;Landroidx/lifecycle/ReportFragment$LifecycleCallbacks;)V
+HSPLandroidx/tv/foundation/PivotOffsets;-><init>()V
+HSPLandroidx/tv/foundation/TvBringIntoViewSpec;-><init>(Landroidx/tv/foundation/PivotOffsets;Z)V
+HSPLandroidx/tv/foundation/TvBringIntoViewSpec;->calculateScrollDistance(FFF)F
+HSPLandroidx/tv/foundation/TvBringIntoViewSpec;->getScrollAnimationSpec()Landroidx/compose/animation/core/AnimationSpec;
+HSPLandroidx/tv/foundation/lazy/grid/LazyGridItemPlacementAnimator;-><init>(I)V
+HSPLandroidx/tv/foundation/lazy/grid/LazyGridItemPlacementAnimator;->reset()V
+HSPLandroidx/tv/foundation/lazy/grid/LazyGridKt$rememberLazyGridMeasurePolicy$1$1$3;-><init>(Landroidx/compose/foundation/lazy/layout/LazyLayoutMeasureScopeImpl;JIII)V
+HSPLandroidx/tv/foundation/lazy/grid/LazyGridKt$rememberLazyGridMeasurePolicy$1$1$3;->invoke(IILkotlin/jvm/functions/Function1;)Landroidx/compose/ui/layout/MeasureResult;
+HSPLandroidx/tv/foundation/lazy/grid/LazyGridKt$rememberLazyGridMeasurePolicy$1$1$3;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
+HSPLandroidx/tv/foundation/lazy/grid/LazyGridScrollPosition;-><init>(III)V
+HSPLandroidx/tv/foundation/lazy/grid/LazyGridScrollPosition;->getIndex()I
+HSPLandroidx/tv/foundation/lazy/grid/LazyGridScrollPosition;->setIndex(I)V
+HSPLandroidx/tv/foundation/lazy/grid/LazyGridScrollPosition;->update(II)V
+HSPLandroidx/tv/foundation/lazy/grid/TvLazyGridState$remeasurementModifier$1;-><init>(Landroidx/compose/foundation/gestures/ScrollableState;I)V
+HSPLandroidx/tv/foundation/lazy/layout/AwaitFirstLayoutModifier$waitForFirstLayout$1;-><init>(Landroidx/tv/foundation/lazy/layout/AwaitFirstLayoutModifier;Lkotlin/coroutines/Continuation;)V
+HSPLandroidx/tv/foundation/lazy/layout/AwaitFirstLayoutModifier;->waitForFirstLayout(Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
+HSPLandroidx/tv/foundation/lazy/layout/LazyLayoutNearestRangeState;-><clinit>()V
+HSPLandroidx/tv/foundation/lazy/layout/LazyLayoutNearestRangeState;-><init>(III)V
+HSPLandroidx/tv/foundation/lazy/layout/LazyLayoutNearestRangeState;->getValue()Ljava/lang/Object;
+HSPLandroidx/tv/foundation/lazy/layout/LazyLayoutNearestRangeState;->update(I)V
+HSPLandroidx/tv/foundation/lazy/layout/LazyLayoutSemanticsKt$LazyLayoutSemanticState$1;-><init>(Landroidx/tv/foundation/lazy/list/TvLazyListState;Z)V
+HSPLandroidx/tv/foundation/lazy/layout/LazyLayoutSemanticsKt$LazyLayoutSemanticState$1;->collectionInfo()Landroidx/compose/ui/semantics/CollectionInfo;
+HSPLandroidx/tv/foundation/lazy/layout/LazyLayoutSemanticsKt$lazyLayoutSemantics$1$1;-><init>(Landroidx/tv/material3/TabKt$Tab$3$1;ZLandroidx/compose/ui/semantics/ScrollAxisRange;Landroidx/compose/foundation/ScrollKt$scroll$2$semantics$1$1;Landroidx/compose/foundation/layout/OffsetNode$measure$1;Landroidx/compose/ui/semantics/CollectionInfo;)V
+HSPLandroidx/tv/foundation/lazy/layout/NearestRangeKeyIndexMap$2$1;-><init>(IILjava/util/HashMap;Landroidx/tv/foundation/lazy/layout/NearestRangeKeyIndexMap;)V
+HSPLandroidx/tv/foundation/lazy/layout/NearestRangeKeyIndexMap$2$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
+HSPLandroidx/tv/foundation/lazy/layout/NearestRangeKeyIndexMap;-><init>(Lkotlin/ranges/IntRange;Landroidx/tv/material3/TabKt;)V
+HSPLandroidx/tv/foundation/lazy/layout/NearestRangeKeyIndexMap;->getKey(I)Ljava/lang/Object;
+HSPLandroidx/tv/foundation/lazy/list/EmptyLazyListLayoutInfo;-><clinit>()V
+HSPLandroidx/tv/foundation/lazy/list/LazyLayoutBeyondBoundsModifierLocal;-><clinit>()V
+HSPLandroidx/tv/foundation/lazy/list/LazyLayoutBeyondBoundsModifierLocal;-><init>(Landroidx/tv/foundation/lazy/list/LazyLayoutBeyondBoundsState;Landroidx/compose/runtime/Stack;ZLandroidx/compose/ui/unit/LayoutDirection;Landroidx/compose/foundation/gestures/Orientation;)V
+HSPLandroidx/tv/foundation/lazy/list/LazyLayoutBeyondBoundsModifierLocal;->getKey()Landroidx/compose/ui/modifier/ProvidableModifierLocal;
+HSPLandroidx/tv/foundation/lazy/list/LazyListBeyondBoundsState;-><init>(Landroidx/tv/foundation/lazy/list/TvLazyListState;I)V
+HSPLandroidx/tv/foundation/lazy/list/LazyListItemProviderImpl;-><init>(Landroidx/tv/foundation/lazy/list/TvLazyListState;Landroidx/tv/foundation/lazy/list/TvLazyListIntervalContent;Landroidx/tv/foundation/lazy/list/TvLazyListItemScopeImpl;Landroidx/tv/foundation/lazy/layout/NearestRangeKeyIndexMap;)V
+HSPLandroidx/tv/foundation/lazy/list/LazyListItemProviderImpl;->Item(ILjava/lang/Object;Landroidx/compose/runtime/Composer;I)V
+HSPLandroidx/tv/foundation/lazy/list/LazyListItemProviderImpl;->equals(Ljava/lang/Object;)Z
+HSPLandroidx/tv/foundation/lazy/list/LazyListItemProviderImpl;->getContentType(I)Ljava/lang/Object;
+HSPLandroidx/tv/foundation/lazy/list/LazyListItemProviderImpl;->getItemCount()I
+HSPLandroidx/tv/foundation/lazy/list/LazyListItemProviderImpl;->getKey(I)Ljava/lang/Object;
+HSPLandroidx/tv/foundation/lazy/list/LazyListKt$rememberLazyListMeasurePolicy$1$1$measuredItemProvider$1;-><init>(JZLandroidx/tv/foundation/lazy/list/LazyListItemProviderImpl;Landroidx/compose/foundation/lazy/layout/LazyLayoutMeasureScopeImpl;IILandroidx/compose/ui/Alignment$Horizontal;Landroidx/compose/ui/Alignment$Vertical;ZIIJ)V
+HSPLandroidx/tv/foundation/lazy/list/LazyListKt$rememberLazyListMeasurePolicy$1$1$measuredItemProvider$1;->getAndMeasure(I)Landroidx/tv/foundation/lazy/list/LazyListMeasuredItem;
+HSPLandroidx/tv/foundation/lazy/list/LazyListKt$rememberLazyListMeasurePolicy$1$1;-><init>(Landroidx/tv/foundation/lazy/list/TvLazyListState;ZLandroidx/compose/foundation/layout/PaddingValuesImpl;ZLkotlin/reflect/KProperty0;Landroidx/compose/foundation/layout/Arrangement$Vertical;Landroidx/compose/foundation/layout/Arrangement$Horizontal;ILandroidx/compose/ui/Alignment$Horizontal;Landroidx/compose/ui/Alignment$Vertical;)V
+HSPLandroidx/tv/foundation/lazy/list/LazyListKt$rememberLazyListMeasurePolicy$1$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
+HSPLandroidx/tv/foundation/lazy/list/LazyListMeasureResult;-><init>(Landroidx/tv/foundation/lazy/list/LazyListMeasuredItem;IZFLandroidx/compose/ui/layout/MeasureResult;FLjava/util/List;II)V
+HSPLandroidx/tv/foundation/lazy/list/LazyListMeasureResult;->getAlignmentLines()Ljava/util/Map;
+HSPLandroidx/tv/foundation/lazy/list/LazyListMeasureResult;->getHeight()I
+HSPLandroidx/tv/foundation/lazy/list/LazyListMeasureResult;->getTotalItemsCount()I
+HSPLandroidx/tv/foundation/lazy/list/LazyListMeasureResult;->getVisibleItemsInfo()Ljava/util/List;
+HSPLandroidx/tv/foundation/lazy/list/LazyListMeasureResult;->getWidth()I
+HSPLandroidx/tv/foundation/lazy/list/LazyListMeasureResult;->placeChildren()V
+HSPLandroidx/tv/foundation/lazy/list/LazyListMeasuredItem;-><init>(ILjava/util/List;ZLandroidx/compose/ui/Alignment$Horizontal;Landroidx/compose/ui/Alignment$Vertical;Landroidx/compose/ui/unit/LayoutDirection;ZIIIJLjava/lang/Object;Ljava/lang/Object;)V
+HSPLandroidx/tv/foundation/lazy/list/LazyListMeasuredItem;->getParentData(I)V
+HSPLandroidx/tv/foundation/lazy/list/LazyListMeasuredItem;->place(Landroidx/compose/ui/layout/Placeable$PlacementScope;)V
+HSPLandroidx/tv/foundation/lazy/list/LazyListMeasuredItem;->position(III)V
+HSPLandroidx/tv/foundation/lazy/list/LazyListStateKt$rememberTvLazyListState$1$1;-><init>(III)V
+HSPLandroidx/tv/foundation/lazy/list/LazyListStateKt$rememberTvLazyListState$1$1;->invoke()Ljava/lang/Object;
+HSPLandroidx/tv/foundation/lazy/list/LazyListStateKt;-><clinit>()V
+HSPLandroidx/tv/foundation/lazy/list/LazyListStateKt;->rememberTvLazyListState(Landroidx/compose/runtime/Composer;)Landroidx/tv/foundation/lazy/list/TvLazyListState;
+HSPLandroidx/tv/foundation/lazy/list/TvLazyListInterval;-><init>(Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function1;Landroidx/compose/runtime/internal/ComposableLambdaImpl;)V
+HSPLandroidx/tv/foundation/lazy/list/TvLazyListInterval;->getKey()Lkotlin/jvm/functions/Function1;
+HSPLandroidx/tv/foundation/lazy/list/TvLazyListInterval;->getType()Lkotlin/jvm/functions/Function1;
+HSPLandroidx/tv/foundation/lazy/list/TvLazyListIntervalContent;-><init>(Lkotlin/jvm/functions/Function1;)V
+HSPLandroidx/tv/foundation/lazy/list/TvLazyListIntervalContent;->getIntervals()Landroidx/compose/foundation/lazy/layout/MutableIntervalList;
+HSPLandroidx/tv/foundation/lazy/list/TvLazyListItemScopeImpl;-><init>()V
+HSPLandroidx/tv/foundation/lazy/list/TvLazyListScope;->items$default(Landroidx/tv/foundation/lazy/list/TvLazyListScope;ILandroidx/compose/runtime/internal/ComposableLambdaImpl;)V
+HSPLandroidx/tv/foundation/lazy/list/TvLazyListState$scroll$1;-><init>(Landroidx/tv/foundation/lazy/list/TvLazyListState;Lkotlin/coroutines/Continuation;)V
+HSPLandroidx/tv/foundation/lazy/list/TvLazyListState$scroll$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;
+HSPLandroidx/tv/foundation/lazy/list/TvLazyListState;-><clinit>()V
+HSPLandroidx/tv/foundation/lazy/list/TvLazyListState;-><init>(II)V
+HSPLandroidx/tv/foundation/lazy/list/TvLazyListState;->applyMeasureResult$tv_foundation_release(Landroidx/tv/foundation/lazy/list/LazyListMeasureResult;Z)V
+HSPLandroidx/tv/foundation/lazy/list/TvLazyListState;->getCanScrollBackward()Z
+HSPLandroidx/tv/foundation/lazy/list/TvLazyListState;->getCanScrollForward()Z
+HSPLandroidx/tv/foundation/lazy/list/TvLazyListState;->scroll(Landroidx/compose/foundation/MutatePriority;Lkotlin/jvm/functions/Function2;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
+HSPLandroidx/tv/material3/Border;-><clinit>()V
+HSPLandroidx/tv/material3/Border;-><init>(Landroidx/compose/foundation/BorderStroke;FLandroidx/compose/ui/graphics/Shape;)V
+HSPLandroidx/tv/material3/Border;->equals(Ljava/lang/Object;)Z
+HSPLandroidx/tv/material3/ColorScheme;-><init>(JJJJJJJJJJJJJJJJJJJJJJJJJJJJJ)V
+HSPLandroidx/tv/material3/ColorScheme;->getInverseSurface-0d7_KjU()J
+HSPLandroidx/tv/material3/ColorScheme;->getOnSurface-0d7_KjU()J
+HSPLandroidx/tv/material3/ColorScheme;->getSurface-0d7_KjU()J
+HSPLandroidx/tv/material3/ColorSchemeKt$LocalColorScheme$1;-><clinit>()V
+HSPLandroidx/tv/material3/ColorSchemeKt$LocalColorScheme$1;-><init>(I)V
+HSPLandroidx/tv/material3/ColorSchemeKt$LocalColorScheme$1;->invoke()Ljava/lang/Object;
+HSPLandroidx/tv/material3/ColorSchemeKt;-><clinit>()V
+HSPLandroidx/tv/material3/ColorSchemeKt;->contentColorFor-ek8zF_U(JLandroidx/compose/runtime/Composer;)J
+HSPLandroidx/tv/material3/ContentColorKt;-><clinit>()V
+HSPLandroidx/tv/material3/Glow;-><clinit>()V
+HSPLandroidx/tv/material3/Glow;-><init>(JF)V
+HSPLandroidx/tv/material3/Glow;->equals(Ljava/lang/Object;)Z
+HSPLandroidx/tv/material3/GlowIndication;-><init>(JLandroidx/compose/ui/graphics/Shape;FFF)V
+HSPLandroidx/tv/material3/GlowIndication;->rememberUpdatedInstance(Landroidx/compose/foundation/interaction/InteractionSource;Landroidx/compose/runtime/Composer;)Landroidx/compose/foundation/IndicationInstance;
+HSPLandroidx/tv/material3/GlowIndicationInstance;-><init>(JLandroidx/compose/ui/graphics/Shape;Landroidx/compose/ui/unit/Density;FFF)V
+HSPLandroidx/tv/material3/GlowIndicationInstance;->drawIndication(Landroidx/compose/ui/graphics/drawscope/ContentDrawScope;)V
+HSPLandroidx/tv/material3/ScaleIndication;-><init>(F)V
+HSPLandroidx/tv/material3/ScaleIndicationInstance;-><init>(F)V
+HSPLandroidx/tv/material3/ScaleIndicationInstance;->drawIndication(Landroidx/compose/ui/graphics/drawscope/ContentDrawScope;)V
+HSPLandroidx/tv/material3/ScaleIndicationTokens;-><clinit>()V
+HSPLandroidx/tv/material3/ShapesKt$LocalShapes$1;-><clinit>()V
+HSPLandroidx/tv/material3/ShapesKt$LocalShapes$1;-><init>(I)V
+HSPLandroidx/tv/material3/ShapesKt$LocalShapes$1;->invoke()Ljava/lang/Object;
+HSPLandroidx/tv/material3/SurfaceKt$Surface$4;-><init>(ZLkotlin/jvm/functions/Function1;Landroidx/compose/ui/Modifier;ZLkotlin/jvm/functions/Function0;FLandroidx/tv/material3/ToggleableSurfaceShape;Landroidx/tv/material3/ToggleableSurfaceColors;Landroidx/tv/material3/ToggleableSurfaceScale;Landroidx/tv/material3/ToggleableSurfaceBorder;Landroidx/tv/material3/ToggleableSurfaceGlow;Landroidx/compose/foundation/interaction/MutableInteractionSourceImpl;Lkotlin/jvm/functions/Function3;III)V
+HSPLandroidx/tv/material3/SurfaceKt$SurfaceImpl$2$2$1;-><init>(ILjava/lang/Object;)V
+HSPLandroidx/tv/material3/SurfaceKt$SurfaceImpl$2$2$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
+HSPLandroidx/tv/material3/SurfaceKt$SurfaceImpl$2$4$1;-><init>(Landroidx/compose/ui/graphics/Shape;JI)V
+HSPLandroidx/tv/material3/SurfaceKt$SurfaceImpl$2$4$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
+HSPLandroidx/tv/material3/SurfaceKt$SurfaceImpl$2$5$1;-><init>(FLandroidx/compose/ui/graphics/Shape;)V
+HSPLandroidx/tv/material3/SurfaceKt$SurfaceImpl$2$5$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
+HSPLandroidx/tv/material3/SurfaceKt$SurfaceImpl$2;-><init>(JILandroidx/compose/ui/Modifier;Landroidx/compose/foundation/interaction/MutableInteractionSourceImpl;FLandroidx/tv/material3/Glow;Landroidx/compose/ui/graphics/Shape;Landroidx/tv/material3/Border;FLandroidx/compose/runtime/MutableState;ZLkotlin/jvm/functions/Function3;I)V
+HSPLandroidx/tv/material3/SurfaceKt$SurfaceImpl$3;-><init>(Landroidx/compose/ui/Modifier;ZZLandroidx/compose/ui/graphics/Shape;JJFLandroidx/tv/material3/Border;Landroidx/tv/material3/Glow;FLandroidx/compose/foundation/interaction/MutableInteractionSourceImpl;Lkotlin/jvm/functions/Function3;III)V
+HSPLandroidx/tv/material3/SurfaceKt$SurfaceImpl$3;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
+HSPLandroidx/tv/material3/SurfaceKt$handleDPadEnter$2$1;-><init>(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;I)V
+HSPLandroidx/tv/material3/SurfaceKt$handleDPadEnter$2$1;->invoke(Landroidx/compose/animation/core/AnimationScope;)V
+HSPLandroidx/tv/material3/SurfaceKt$handleDPadEnter$2$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
+HSPLandroidx/tv/material3/SurfaceKt$handleDPadEnter$2$2;-><init>(Lkotlinx/coroutines/CoroutineScope;Lkotlin/jvm/functions/Function0;Lkotlin/jvm/functions/Function0;Lkotlin/jvm/functions/Function1;ZLandroidx/compose/foundation/interaction/MutableInteractionSourceImpl;Landroidx/compose/foundation/interaction/PressInteraction$Press;Landroidx/compose/runtime/MutableState;)V
+HSPLandroidx/tv/material3/SurfaceKt$handleDPadEnter$2$2;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
+HSPLandroidx/tv/material3/SurfaceKt$handleDPadEnter$2;-><init>(Landroidx/compose/foundation/interaction/MutableInteractionSourceImpl;Lkotlin/jvm/functions/Function0;Lkotlin/jvm/functions/Function0;Lkotlin/jvm/functions/Function1;ZZ)V
+HSPLandroidx/tv/material3/SurfaceKt$handleDPadEnter$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
+HSPLandroidx/tv/material3/SurfaceKt$tvToggleable$1$1;-><init>(Landroidx/compose/ui/platform/AndroidComposeView;Z)V
+HSPLandroidx/tv/material3/SurfaceKt$tvToggleable$1$2;-><init>(Lkotlin/jvm/functions/Function0;I)V
+HSPLandroidx/tv/material3/SurfaceKt$tvToggleable$1$2;->invoke()Ljava/lang/Object;
+HSPLandroidx/tv/material3/SurfaceKt$tvToggleable$1;-><init>(ZLkotlin/jvm/functions/Function1;ZLkotlin/jvm/functions/Function0;)V
+HSPLandroidx/tv/material3/SurfaceKt;-><clinit>()V
+HSPLandroidx/tv/material3/SurfaceKt;->Surface-xYaah8o(ZLkotlin/jvm/functions/Function1;Landroidx/compose/ui/Modifier;ZLkotlin/jvm/functions/Function0;FLandroidx/tv/material3/ToggleableSurfaceShape;Landroidx/tv/material3/ToggleableSurfaceColors;Landroidx/tv/material3/ToggleableSurfaceScale;Landroidx/tv/material3/ToggleableSurfaceBorder;Landroidx/tv/material3/ToggleableSurfaceGlow;Landroidx/compose/foundation/interaction/MutableInteractionSourceImpl;Lkotlin/jvm/functions/Function3;Landroidx/compose/runtime/Composer;III)V
+HSPLandroidx/tv/material3/SurfaceKt;->Surface_xYaah8o$lambda$4(Landroidx/compose/runtime/MutableState;)Z
+HSPLandroidx/tv/material3/SurfaceKt;->Surface_xYaah8o$lambda$5(Landroidx/compose/runtime/MutableState;)Z
+HSPLandroidx/tv/material3/SurfaceKt;->access$surfaceColorAtElevation-CLU3JFs(JFLandroidx/compose/runtime/Composer;)J
+HSPLandroidx/tv/material3/TabColors;-><init>(JJJJJJJJ)V
+HSPLandroidx/tv/material3/TabKt$Tab$1;-><clinit>()V
+HSPLandroidx/tv/material3/TabKt$Tab$1;-><init>()V
+HSPLandroidx/tv/material3/TabKt$Tab$3$1;-><init>(Lkotlin/jvm/functions/Function0;I)V
+HSPLandroidx/tv/material3/TabKt$Tab$3$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
+HSPLandroidx/tv/material3/TabKt$Tab$4$1;-><init>(IZ)V
+HSPLandroidx/tv/material3/TabKt$Tab$4$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
+HSPLandroidx/tv/material3/TabKt$Tab$6;-><init>(Lkotlin/jvm/functions/Function3;I)V
+HSPLandroidx/tv/material3/TabKt$Tab$6;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
+HSPLandroidx/tv/material3/TabKt$Tab$7;-><init>(Landroidx/tv/material3/TabRowScopeImpl;ZLkotlin/jvm/functions/Function0;Landroidx/compose/ui/Modifier;Lkotlin/jvm/functions/Function0;ZLandroidx/tv/material3/TabColors;Landroidx/compose/foundation/interaction/MutableInteractionSourceImpl;Lkotlin/jvm/functions/Function3;II)V
+HSPLandroidx/tv/material3/TabKt;-><clinit>()V
+HSPLandroidx/tv/material3/TabKt;->BasicText-BpD7jsM(Ljava/lang/String;Landroidx/compose/ui/Modifier;Landroidx/compose/ui/text/TextStyle;Lkotlin/jvm/functions/Function1;IZILandroidx/compose/runtime/Composer;II)V
+HSPLandroidx/tv/material3/TabKt;->BasicText-VhcvRP8(Ljava/lang/String;Landroidx/compose/ui/Modifier;Landroidx/compose/ui/text/TextStyle;Lkotlin/jvm/functions/Function1;IZIILandroidx/compose/runtime/Composer;II)V
+HSPLandroidx/tv/material3/TabKt;->DisposableEffect(Ljava/lang/Object;Lkotlin/jvm/functions/Function1;Landroidx/compose/runtime/Composer;)V
+HSPLandroidx/tv/material3/TabKt;->LaunchedEffect(Ljava/lang/Object;Ljava/lang/Object;Lkotlin/jvm/functions/Function2;Landroidx/compose/runtime/Composer;)V
+HSPLandroidx/tv/material3/TabKt;->LaunchedEffect(Ljava/lang/Object;Lkotlin/jvm/functions/Function2;Landroidx/compose/runtime/Composer;)V
+HSPLandroidx/tv/material3/TabKt;->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
+HSPLandroidx/tv/material3/TabKt;->LazyLayoutPrefetcher(Landroidx/compose/foundation/lazy/layout/LazyLayoutPrefetchState;Landroidx/compose/foundation/lazy/layout/LazyLayoutItemContentFactory;Landroidx/compose/ui/layout/SubcomposeLayoutState;Landroidx/compose/runtime/Composer;I)V
+HSPLandroidx/tv/material3/TabKt;->SideEffect(Lkotlin/jvm/functions/Function0;Landroidx/compose/runtime/Composer;)V
+HSPLandroidx/tv/material3/TabKt;->Tab(Landroidx/tv/material3/TabRowScopeImpl;ZLkotlin/jvm/functions/Function0;Landroidx/compose/ui/Modifier;Lkotlin/jvm/functions/Function0;ZLandroidx/tv/material3/TabColors;Landroidx/compose/foundation/interaction/MutableInteractionSourceImpl;Lkotlin/jvm/functions/Function3;Landroidx/compose/runtime/Composer;II)V
+HSPLandroidx/tv/material3/TabKt;->TabRow-pAZo6Ak(ILandroidx/compose/ui/Modifier;JJLkotlin/jvm/functions/Function2;Lkotlin/jvm/functions/Function4;Lkotlin/jvm/functions/Function3;Landroidx/compose/runtime/Composer;II)V
+HSPLandroidx/tv/material3/TabKt;->access$binarySearch(ILandroidx/compose/runtime/collection/MutableVector;)I
+HSPLandroidx/tv/material3/TabKt;->animate(Landroidx/compose/animation/core/AnimationState;Landroidx/compose/animation/core/Animation;JLkotlin/jvm/functions/Function1;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
+HSPLandroidx/tv/material3/TabKt;->callWithFrameNanos(Landroidx/compose/animation/core/Animation;Lkotlin/jvm/functions/Function1;Landroidx/compose/animation/core/SuspendAnimationKt$animate$4;)Ljava/lang/Object;
+HSPLandroidx/tv/material3/TabKt;->collectIsFocusedAsState(Landroidx/compose/foundation/interaction/InteractionSource;Landroidx/compose/runtime/Composer;I)Landroidx/compose/runtime/MutableState;
+HSPLandroidx/tv/material3/TabKt;->complexSqrt(D)Landroidx/compose/animation/core/ComplexDouble;
+HSPLandroidx/tv/material3/TabKt;->copy(Landroidx/compose/animation/core/AnimationVector;)Landroidx/compose/animation/core/AnimationVector;
+HSPLandroidx/tv/material3/TabKt;->createCompositionCoroutineScope(Landroidx/compose/runtime/Composer;)Lkotlinx/coroutines/internal/ContextScope;
+HSPLandroidx/tv/material3/TabKt;->derivedStateObservers()Landroidx/compose/runtime/collection/MutableVector;
+HSPLandroidx/tv/material3/TabKt;->doAnimationFrameWithScale(Landroidx/compose/animation/core/AnimationScope;JFLandroidx/compose/animation/core/Animation;Landroidx/compose/animation/core/AnimationState;Lkotlin/jvm/functions/Function1;)V
+HSPLandroidx/tv/material3/TabKt;->finalConstraints-tfFHcEY(JZIF)J
+HSPLandroidx/tv/material3/TabKt;->getContentType(I)Ljava/lang/Object;
+HSPLandroidx/tv/material3/TabKt;->getDurationScale(Lkotlin/coroutines/CoroutineContext;)F
+HSPLandroidx/tv/material3/TabKt;->getPoolingContainerListenerHolder(Landroid/view/View;)Landroidx/customview/poolingcontainer/PoolingContainerListenerHolder;
+HSPLandroidx/tv/material3/TabKt;->mutableStateOf$default(Ljava/lang/Object;)Landroidx/compose/runtime/ParcelableSnapshotMutableState;
+HSPLandroidx/tv/material3/TabKt;->read(Landroidx/compose/runtime/PersistentCompositionLocalMap;Landroidx/compose/runtime/ProvidableCompositionLocal;)Ljava/lang/Object;
+HSPLandroidx/tv/material3/TabKt;->rememberSaveable([Ljava/lang/Object;Landroidx/compose/runtime/saveable/SaverKt$Saver$1;Lkotlin/jvm/functions/Function0;Landroidx/compose/runtime/Composer;)Ljava/lang/Object;
+HSPLandroidx/tv/material3/TabKt;->rememberUpdatedState(Ljava/lang/Object;Landroidx/compose/runtime/Composer;)Landroidx/compose/runtime/MutableState;
+HSPLandroidx/tv/material3/TabKt;->resumeCancellableWith(Lkotlin/coroutines/Continuation;Ljava/lang/Object;Lkotlin/jvm/functions/Function1;)V
+HSPLandroidx/tv/material3/TabKt;->spring$default(FLjava/lang/Comparable;I)Landroidx/compose/animation/core/SpringSpec;
+HSPLandroidx/tv/material3/TabKt;->tween$default(ILandroidx/compose/animation/core/Easing;)Landroidx/compose/animation/core/TweenSpec;
+HSPLandroidx/tv/material3/TabKt;->updateCompositionMap([Landroidx/compose/runtime/ProvidedValue;Landroidx/compose/runtime/PersistentCompositionLocalMap;Landroidx/compose/runtime/PersistentCompositionLocalMap;)Landroidx/compose/runtime/internal/PersistentCompositionLocalHashMap;
+HSPLandroidx/tv/material3/TabKt;->updateState(Landroidx/compose/animation/core/AnimationScope;Landroidx/compose/animation/core/AnimationState;)V
+HSPLandroidx/tv/material3/TabKt;->withFrameNanos(Lkotlin/jvm/functions/Function1;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
+HSPLandroidx/tv/material3/TabRowDefaults$PillIndicator$1;-><init>(Landroidx/tv/material3/TabRowDefaults;Landroidx/compose/ui/unit/DpRect;ZLandroidx/compose/ui/Modifier;JJII)V
+HSPLandroidx/tv/material3/TabRowDefaults$PillIndicator$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
+HSPLandroidx/tv/material3/TabRowDefaults;-><clinit>()V
+HSPLandroidx/tv/material3/TabRowDefaults;->PillIndicator-jA1GFJw(Landroidx/compose/ui/unit/DpRect;ZLandroidx/compose/ui/Modifier;JJLandroidx/compose/runtime/Composer;II)V
+HSPLandroidx/tv/material3/TabRowKt$TabRow$1;-><init>(I)V
+HSPLandroidx/tv/material3/TabRowKt$TabRow$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
+HSPLandroidx/tv/material3/TabRowKt$TabRow$2$1$1;-><init>(Landroidx/compose/runtime/MutableState;I)V
+HSPLandroidx/tv/material3/TabRowKt$TabRow$2$1$1;->invoke(Landroidx/compose/ui/focus/FocusState;)V
+HSPLandroidx/tv/material3/TabRowKt$TabRow$2$1$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
+HSPLandroidx/tv/material3/TabRowKt$TabRow$2$2$1$1$2;-><init>(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;II)V
+HSPLandroidx/tv/material3/TabRowKt$TabRow$2$2$1$1$2;-><init>(Lkotlin/jvm/functions/Function4;Ljava/util/ArrayList;ILandroidx/compose/runtime/MutableState;)V
+HSPLandroidx/tv/material3/TabRowKt$TabRow$2$2$1$1$2;->invoke(Landroidx/compose/runtime/Composer;I)V
+HSPLandroidx/tv/material3/TabRowKt$TabRow$2$2$1$1$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
+HSPLandroidx/tv/material3/TabRowKt$TabRow$2$2$1$1;-><init>(Ljava/util/ArrayList;Landroidx/compose/ui/layout/SubcomposeMeasureScope;Ljava/util/ArrayList;ILkotlin/jvm/functions/Function4;ILandroidx/compose/runtime/MutableState;II)V
+HSPLandroidx/tv/material3/TabRowKt$TabRow$2$2$1$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
+HSPLandroidx/tv/material3/TabRowKt$TabRow$2$2$1$separators$1;-><init>(IILkotlin/jvm/functions/Function1;)V
+HSPLandroidx/tv/material3/TabRowKt$TabRow$2$2$1$separators$1;-><init>(ILkotlin/jvm/functions/Function2;I)V
+HSPLandroidx/tv/material3/TabRowKt$TabRow$2$2$1$separators$1;->invoke(Landroidx/compose/runtime/Composer;I)V
+HSPLandroidx/tv/material3/TabRowKt$TabRow$2$2$1$separators$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
+HSPLandroidx/tv/material3/TabRowKt$TabRow$2$2$1;-><init>(Landroidx/compose/runtime/MutableState;Lkotlin/jvm/functions/Function3;ILkotlin/jvm/functions/Function2;Lkotlin/jvm/functions/Function4;)V
+HSPLandroidx/tv/material3/TabRowKt$TabRow$2$2$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
+HSPLandroidx/tv/material3/TabRowKt$TabRow$2;-><init>(Landroidx/compose/ui/Modifier;JLandroidx/compose/foundation/ScrollState;Landroidx/compose/runtime/MutableState;Lkotlin/jvm/functions/Function3;Lkotlin/jvm/functions/Function2;Lkotlin/jvm/functions/Function4;I)V
+HSPLandroidx/tv/material3/TabRowKt$TabRow$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
+HSPLandroidx/tv/material3/TabRowKt$TabRow$3;-><init>(ILandroidx/compose/ui/Modifier;JJLkotlin/jvm/functions/Function2;Lkotlin/jvm/functions/Function4;Lkotlin/jvm/functions/Function3;II)V
+HSPLandroidx/tv/material3/TabRowScopeImpl;-><init>(Z)V
+HSPLandroidx/tv/material3/TabRowSlots;-><clinit>()V
+HSPLandroidx/tv/material3/TabRowSlots;-><init>(ILjava/lang/String;)V
+HSPLandroidx/tv/material3/TextKt$Text$1;-><clinit>()V
+HSPLandroidx/tv/material3/TextKt$Text$1;-><init>()V
+HSPLandroidx/tv/material3/TextKt$Text$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
+HSPLandroidx/tv/material3/TextKt$Text$2;-><init>(Ljava/lang/String;Landroidx/compose/ui/Modifier;JJLandroidx/compose/ui/text/font/FontStyle;Landroidx/compose/ui/text/font/FontWeight;Landroidx/compose/ui/text/font/FontFamily;JLandroidx/compose/ui/text/style/TextDecoration;Landroidx/compose/ui/text/style/TextAlign;JIZILkotlin/jvm/functions/Function1;Landroidx/compose/ui/text/TextStyle;IIII)V
+HSPLandroidx/tv/material3/TextKt;-><clinit>()V
+HSPLandroidx/tv/material3/TextKt;->Text-fLXpl1I(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;JIZILkotlin/jvm/functions/Function1;Landroidx/compose/ui/text/TextStyle;Landroidx/compose/runtime/Composer;III)V
+HSPLandroidx/tv/material3/ToggleableSurfaceBorder;-><init>(Landroidx/tv/material3/Border;Landroidx/tv/material3/Border;Landroidx/tv/material3/Border;Landroidx/tv/material3/Border;Landroidx/tv/material3/Border;Landroidx/tv/material3/Border;Landroidx/tv/material3/Border;Landroidx/tv/material3/Border;Landroidx/tv/material3/Border;Landroidx/tv/material3/Border;)V
+HSPLandroidx/tv/material3/ToggleableSurfaceColors;-><init>(JJJJJJJJJJJJJJ)V
+HSPLandroidx/tv/material3/ToggleableSurfaceColors;->equals(Ljava/lang/Object;)Z
+HSPLandroidx/tv/material3/ToggleableSurfaceGlow;-><init>(Landroidx/tv/material3/Glow;Landroidx/tv/material3/Glow;Landroidx/tv/material3/Glow;Landroidx/tv/material3/Glow;Landroidx/tv/material3/Glow;Landroidx/tv/material3/Glow;)V
+HSPLandroidx/tv/material3/ToggleableSurfaceScale;-><clinit>()V
+HSPLandroidx/tv/material3/ToggleableSurfaceScale;-><init>(FFFFFFFFFF)V
+HSPLandroidx/tv/material3/ToggleableSurfaceShape;-><init>(Landroidx/compose/ui/graphics/Shape;Landroidx/compose/ui/graphics/Shape;Landroidx/compose/ui/graphics/Shape;Landroidx/compose/ui/graphics/Shape;Landroidx/compose/ui/graphics/Shape;Landroidx/compose/ui/graphics/Shape;Landroidx/compose/ui/graphics/Shape;Landroidx/compose/ui/graphics/Shape;Landroidx/compose/ui/graphics/Shape;Landroidx/compose/ui/graphics/Shape;)V
+HSPLandroidx/tv/material3/ToggleableSurfaceShape;->equals(Ljava/lang/Object;)Z
+HSPLandroidx/tv/material3/tokens/ColorLightTokens;-><clinit>()V
+HSPLandroidx/tv/material3/tokens/Elevation;-><clinit>()V
+HSPLandroidx/tv/material3/tokens/PaletteTokens;-><clinit>()V
+HSPLandroidx/tv/material3/tokens/ShapeTokens$BorderDefaultShape$1;-><clinit>()V
+HSPLandroidx/tv/material3/tokens/ShapeTokens$BorderDefaultShape$1;-><init>(I)V
+HSPLandroidx/tv/material3/tokens/ShapeTokens$BorderDefaultShape$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
+HSPLandroidx/tv/material3/tokens/ShapeTokens$BorderDefaultShape$1;->invoke(Ljava/util/List;II)Ljava/lang/Integer;
+HSPLandroidx/tv/material3/tokens/ShapeTokens$BorderDefaultShape$1;->invoke-3p2s80s(Landroidx/compose/ui/layout/MeasureScope;Landroidx/compose/ui/layout/Measurable;J)Landroidx/compose/ui/layout/MeasureResult;
+HSPLandroidx/tv/material3/tokens/TypographyTokensKt;-><clinit>()V
+HSPLcom/example/tvcomposebasedtests/ComposableSingletons$MainActivityKt;-><clinit>()V
+HSPLcom/example/tvcomposebasedtests/ComposableSingletons$UtilsKt$lambda-1$1;-><clinit>()V
+HSPLcom/example/tvcomposebasedtests/ComposableSingletons$UtilsKt$lambda-1$1;-><init>(I)V
+HSPLcom/example/tvcomposebasedtests/ComposableSingletons$UtilsKt$lambda-1$1;->invoke(Landroidx/tv/foundation/lazy/list/TvLazyListItemScopeImpl;ILandroidx/compose/runtime/Composer;I)V
+HSPLcom/example/tvcomposebasedtests/ComposableSingletons$UtilsKt$lambda-1$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
+HSPLcom/example/tvcomposebasedtests/Config;-><init>(Landroid/content/Context;Landroidx/activity/ComponentActivity;II)V
+HSPLcom/example/tvcomposebasedtests/Config;->toString()Ljava/lang/String;
+HSPLcom/example/tvcomposebasedtests/JankStatsAggregator$listener$1;-><init>(Lcom/example/tvcomposebasedtests/JankStatsAggregator;)V
+HSPLcom/example/tvcomposebasedtests/JankStatsAggregator;-><init>(Landroid/view/Window;Lcom/example/tvcomposebasedtests/MainActivity$jankReportListener$1;)V
+HSPLcom/example/tvcomposebasedtests/MainActivity$jankReportListener$1;-><init>(Lcom/example/tvcomposebasedtests/MainActivity;)V
+HSPLcom/example/tvcomposebasedtests/MainActivity$startFrameMetrics$listener$1;-><init>(Lcom/example/tvcomposebasedtests/MainActivity;)V
+HSPLcom/example/tvcomposebasedtests/MainActivity$startFrameMetrics$listener$1;->onFrameMetricsAvailable(Landroid/view/Window;Landroid/view/FrameMetrics;I)V
+HSPLcom/example/tvcomposebasedtests/MainActivity;-><init>()V
+HSPLcom/example/tvcomposebasedtests/MainActivity;->onCreate(Landroid/os/Bundle;)V
+HSPLcom/example/tvcomposebasedtests/MainActivity;->onResume()V
+HSPLcom/example/tvcomposebasedtests/UtilsKt$AddJankMetrics$1$2;-><init>(ILjava/lang/Object;)V
+HSPLcom/example/tvcomposebasedtests/UtilsKt$AddJankMetrics$1$2;->emit(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
+HSPLcom/example/tvcomposebasedtests/UtilsKt$ScrollingRow$1$1$1;-><init>(II)V
+HSPLcom/example/tvcomposebasedtests/UtilsKt$ScrollingRow$1$1$1;->invoke(Landroidx/tv/foundation/lazy/list/TvLazyListScope;)V
+HSPLcom/example/tvcomposebasedtests/UtilsKt$ScrollingRow$1$1$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
+HSPLcom/example/tvcomposebasedtests/UtilsKt$ScrollingRow$2;-><init>(III)V
+HSPLcom/example/tvcomposebasedtests/UtilsKt$ScrollingRow$2;->invoke(Landroidx/compose/runtime/Composer;I)V
+HSPLcom/example/tvcomposebasedtests/UtilsKt$ScrollingRow$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
+HSPLcom/example/tvcomposebasedtests/UtilsKt;-><clinit>()V
+HSPLcom/example/tvcomposebasedtests/tvComponents/AppKt$App$1;-><init>(ILjava/lang/Object;)V
+HSPLcom/example/tvcomposebasedtests/tvComponents/AppKt$App$1;->invoke(Landroidx/compose/runtime/Composer;I)V
+HSPLcom/example/tvcomposebasedtests/tvComponents/AppKt$App$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
+HSPLcom/example/tvcomposebasedtests/tvComponents/AppKt$App$1;->invoke-5SAbXVA(JLandroidx/compose/ui/unit/LayoutDirection;)J
+HSPLcom/example/tvcomposebasedtests/tvComponents/ComposableSingletons$LazyContainersKt;-><clinit>()V
+HSPLcom/example/tvcomposebasedtests/tvComponents/ComposableSingletons$TopNavigationKt;-><clinit>()V
+HSPLcom/example/tvcomposebasedtests/tvComponents/Navigation;-><clinit>()V
+HSPLcom/example/tvcomposebasedtests/tvComponents/Navigation;-><init>(Ljava/lang/String;ILjava/lang/String;Landroidx/compose/runtime/internal/ComposableLambdaImpl;)V
+HSPLcom/example/tvcomposebasedtests/tvComponents/Navigation;->values()[Lcom/example/tvcomposebasedtests/tvComponents/Navigation;
+HSPLcom/example/tvcomposebasedtests/tvComponents/TopNavigationKt$PillIndicatorTabRow$1$1$1$1;-><init>(ILkotlin/jvm/functions/Function1;)V
+HSPLcom/example/tvcomposebasedtests/tvComponents/TopNavigationKt$PillIndicatorTabRow$1$1$1$1;->invoke()Ljava/lang/Object;
+HSPLcom/example/tvcomposebasedtests/tvComponents/TopNavigationKt$PillIndicatorTabRow$1;-><init>(IILjava/util/List;Lkotlin/jvm/functions/Function1;)V
+HSPLcom/example/tvcomposebasedtests/tvComponents/TopNavigationKt$PillIndicatorTabRow$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
+HSPLcom/example/tvcomposebasedtests/tvComponents/TopNavigationKt$TopNavigation$3$1;-><init>(Lkotlin/jvm/functions/Function1;Landroidx/compose/runtime/MutableState;Lkotlin/coroutines/Continuation;)V
+HSPLcom/example/tvcomposebasedtests/tvComponents/TopNavigationKt$TopNavigation$3$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation;
+HSPLcom/example/tvcomposebasedtests/tvComponents/TopNavigationKt$TopNavigation$3$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;
+HSPLcom/google/gson/internal/ConstructorConstructor;-><init>()V
+HSPLcom/google/gson/internal/ConstructorConstructor;->access$commitTransaction(Lcom/google/gson/internal/ConstructorConstructor;)V
+HSPLcom/google/gson/internal/LinkedTreeMap$1;-><init>(I)V
+HSPLcom/google/gson/internal/LinkedTreeMap$1;->compare(Ljava/lang/Object;Ljava/lang/Object;)I
+HSPLkotlin/Pair;-><init>(Ljava/lang/Object;Ljava/lang/Object;)V
+HSPLkotlin/Result$Failure;-><init>(Ljava/lang/Throwable;)V
+HSPLkotlin/Result;->exceptionOrNull-impl(Ljava/lang/Object;)Ljava/lang/Throwable;
+HSPLkotlin/ResultKt$$ExternalSyntheticCheckNotZero0;->m$1()Ljava/util/Iterator;
+HSPLkotlin/ResultKt$$ExternalSyntheticCheckNotZero0;->m(III)I
+HSPLkotlin/ResultKt$$ExternalSyntheticCheckNotZero0;->m(ILjava/lang/String;)V
+HSPLkotlin/ResultKt$$ExternalSyntheticCheckNotZero0;->m(Ljava/lang/Object;)V
+HSPLkotlin/ResultKt$$ExternalSyntheticCheckNotZero0;->stringValueOf$1(I)Ljava/lang/String;
+HSPLkotlin/ResultKt$$ExternalSyntheticCheckNotZero0;->stringValueOf$2(I)Ljava/lang/String;
+HSPLkotlin/ResultKt$$ExternalSyntheticCheckNotZero0;->valueOf$1(Ljava/lang/String;)I
+HSPLkotlin/ResultKt$$ExternalSyntheticCheckNotZero0;->valueOf(Ljava/lang/String;)I
+HSPLkotlin/ResultKt;-><clinit>()V
+HSPLkotlin/ResultKt;-><init>(Landroidx/metrics/performance/JankStats;)V
+HSPLkotlin/ResultKt;->App(Landroidx/compose/runtime/Composer;I)V
+HSPLkotlin/ResultKt;->Constraints$default(III)J
+HSPLkotlin/ResultKt;->Constraints(IIII)J
+HSPLkotlin/ResultKt;->Density(Landroid/content/Context;)Landroidx/compose/ui/unit/DensityImpl;
+HSPLkotlin/ResultKt;->DpOffset-YgX7TsA(FF)J
+HSPLkotlin/ResultKt;->IntOffset(II)J
+HSPLkotlin/ResultKt;->IntSize(II)J
+HSPLkotlin/ResultKt;->MaterialTheme(Landroidx/compose/material3/ColorScheme;Landroidx/compose/material3/Shapes;Landroidx/compose/material3/Typography;Lkotlin/jvm/functions/Function2;Landroidx/compose/runtime/Composer;II)V
+HSPLkotlin/ResultKt;->SampleCardItem(ILandroidx/compose/runtime/Composer;I)V
+HSPLkotlin/ResultKt;->SampleTvLazyRow(ILandroidx/compose/runtime/Composer;I)V
+HSPLkotlin/ResultKt;->TvLazyRow(Landroidx/compose/ui/Modifier;Landroidx/tv/foundation/lazy/list/TvLazyListState;Landroidx/compose/foundation/layout/PaddingValuesImpl;ZLandroidx/compose/foundation/layout/Arrangement$Horizontal;Landroidx/compose/ui/Alignment$Vertical;ZLandroidx/tv/foundation/PivotOffsets;Lkotlin/jvm/functions/Function1;Landroidx/compose/runtime/Composer;II)V
+HSPLkotlin/ResultKt;->access$getHasEmojiCompat(Landroidx/compose/ui/text/TextStyle;)Z
+HSPLkotlin/ResultKt;->areEqual(Ljava/lang/Object;Ljava/lang/Object;)Z
+HSPLkotlin/ResultKt;->canBeSavedToBundle(Ljava/lang/Object;)Z
+HSPLkotlin/ResultKt;->checkArgument(Ljava/lang/String;Z)V
+HSPLkotlin/ResultKt;->checkElementIndex$runtime_release(II)V
+HSPLkotlin/ResultKt;->checkNotNull$1(Ljava/lang/Object;Ljava/lang/String;)V
+HSPLkotlin/ResultKt;->checkNotNull(Ljava/lang/Object;)V
+HSPLkotlin/ResultKt;->checkNotNull(Ljava/lang/Object;Ljava/lang/String;)V
+HSPLkotlin/ResultKt;->checkNotNullExpressionValue(Ljava/lang/Object;Ljava/lang/String;)V
+HSPLkotlin/ResultKt;->checkNotNullParameter(Ljava/lang/Object;Ljava/lang/String;)V
+HSPLkotlin/ResultKt;->compare(II)I
+HSPLkotlin/ResultKt;->constrain-4WqzIAM(JJ)J
+HSPLkotlin/ResultKt;->constrainHeight-K40F9xA(JI)I
+HSPLkotlin/ResultKt;->constrainWidth-K40F9xA(JI)I
+HSPLkotlin/ResultKt;->create(Landroid/content/Context;)Landroidx/emoji2/text/FontRequestEmojiCompatConfig;
+HSPLkotlin/ResultKt;->createCoroutineUnintercepted(Ljava/lang/Object;Lkotlin/coroutines/Continuation;Lkotlin/jvm/functions/Function2;)Lkotlin/coroutines/Continuation;
+HSPLkotlin/ResultKt;->createFailure(Ljava/lang/Throwable;)Lkotlin/Result$Failure;
+HSPLkotlin/ResultKt;->distinctUntilChanged(Lkotlinx/coroutines/flow/Flow;)Lkotlinx/coroutines/flow/Flow;
+HSPLkotlin/ResultKt;->emitAllImpl$FlowKt__ChannelsKt(Lkotlinx/coroutines/flow/FlowCollector;Lkotlinx/coroutines/channels/ProducerCoroutine;ZLkotlin/coroutines/Continuation;)Ljava/lang/Object;
+HSPLkotlin/ResultKt;->ensureActive(Lkotlin/coroutines/CoroutineContext;)V
+HSPLkotlin/ResultKt;->findIndexByKey$1(Landroidx/compose/foundation/lazy/layout/LazyLayoutItemProvider;Ljava/lang/Object;I)I
+HSPLkotlin/ResultKt;->first(Lkotlinx/coroutines/flow/Flow;Lkotlin/jvm/functions/Function2;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
+HSPLkotlin/ResultKt;->get(Landroid/view/View;)Landroidx/lifecycle/LifecycleOwner;
+HSPLkotlin/ResultKt;->getExclusions()Ljava/util/Set;
+HSPLkotlin/ResultKt;->getJob(Lkotlin/coroutines/CoroutineContext;)Lkotlinx/coroutines/Job;
+HSPLkotlin/ResultKt;->getOrCreateCancellableContinuation(Lkotlin/coroutines/Continuation;)Lkotlinx/coroutines/CancellableContinuationImpl;
+HSPLkotlin/ResultKt;->getProgressionLastElement(III)I
+HSPLkotlin/ResultKt;->getSp(D)J
+HSPLkotlin/ResultKt;->getSp(I)J
+HSPLkotlin/ResultKt;->hasFontAttributes(Landroidx/compose/ui/text/SpanStyle;)Z
+HSPLkotlin/ResultKt;->intercepted(Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation;
+HSPLkotlin/ResultKt;->isEnabled()Z
+HSPLkotlin/ResultKt;->isUnspecified--R2X_6o(J)Z
+HSPLkotlin/ResultKt;->launch$default(Lkotlinx/coroutines/CoroutineScope;Lkotlinx/coroutines/android/HandlerContext;ILkotlin/jvm/functions/Function2;I)Lkotlinx/coroutines/StandaloneCoroutine;
+HSPLkotlin/ResultKt;->launch(Lkotlinx/coroutines/CoroutineScope;Lkotlin/coroutines/CoroutineContext;ILkotlin/jvm/functions/Function2;)Lkotlinx/coroutines/StandaloneCoroutine;
+HSPLkotlin/ResultKt;->lazyLayoutSemantics(Landroidx/compose/ui/Modifier;Lkotlin/reflect/KProperty0;Landroidx/tv/foundation/lazy/layout/LazyLayoutSemanticState;Landroidx/compose/foundation/gestures/Orientation;ZZLandroidx/compose/runtime/Composer;)Landroidx/compose/ui/Modifier;
+HSPLkotlin/ResultKt;->mapCapacity(I)I
+HSPLkotlin/ResultKt;->materializeModifier(Landroidx/compose/runtime/Composer;Landroidx/compose/ui/Modifier;)Landroidx/compose/ui/Modifier;
+HSPLkotlin/ResultKt;->mmap(Landroid/content/Context;Landroid/net/Uri;)Ljava/nio/MappedByteBuffer;
+HSPLkotlin/ResultKt;->offset-NN6Ew-U(IIJ)J
+HSPLkotlin/ResultKt;->overscrollEffect(Landroidx/compose/runtime/Composer;)Landroidx/compose/foundation/OverscrollEffect;
+HSPLkotlin/ResultKt;->pack(FJ)J
+HSPLkotlin/ResultKt;->plus(Lkotlin/coroutines/CoroutineContext;Lkotlin/coroutines/CoroutineContext;)Lkotlin/coroutines/CoroutineContext;
+HSPLkotlin/ResultKt;->read(Ljava/nio/MappedByteBuffer;)Landroidx/emoji2/text/flatbuffer/MetadataList;
+HSPLkotlin/ResultKt;->recoverResult(Ljava/lang/Object;)Ljava/lang/Object;
+HSPLkotlin/ResultKt;->requireOwner(Landroidx/compose/ui/node/LayoutNode;)Landroidx/compose/ui/node/Owner;
+HSPLkotlin/ResultKt;->resolveLineHeightInPx-o2QH7mI(JFLandroidx/compose/ui/unit/Density;)F
+HSPLkotlin/ResultKt;->restoreThreadContext(Lkotlin/coroutines/CoroutineContext;Ljava/lang/Object;)V
+HSPLkotlin/ResultKt;->resume(Lkotlinx/coroutines/DispatchedTask;Lkotlin/coroutines/Continuation;Z)V
+HSPLkotlin/ResultKt;->roundToInt(F)I
+HSPLkotlin/ResultKt;->scrollableWithPivot(Landroidx/compose/ui/Modifier;Landroidx/compose/foundation/gestures/ScrollableState;Landroidx/compose/foundation/gestures/Orientation;Landroidx/tv/foundation/PivotOffsets;ZZ)Landroidx/compose/ui/Modifier;
+HSPLkotlin/ResultKt;->startUndispatchedOrReturn(Lkotlinx/coroutines/internal/ScopeCoroutine;Lkotlinx/coroutines/internal/ScopeCoroutine;Lkotlin/jvm/functions/Function2;)Ljava/lang/Object;
+HSPLkotlin/ResultKt;->stateIn(Lkotlinx/coroutines/flow/SafeFlow;Lkotlinx/coroutines/internal/ContextScope;Lkotlinx/coroutines/flow/StartedWhileSubscribed;Ljava/lang/Float;)Lkotlinx/coroutines/flow/ReadonlyStateFlow;
+HSPLkotlin/ResultKt;->systemProp$default(Ljava/lang/String;IIII)I
+HSPLkotlin/ResultKt;->systemProp(Ljava/lang/String;JJJ)J
+HSPLkotlin/ResultKt;->threadContextElements(Lkotlin/coroutines/CoroutineContext;)Ljava/lang/Object;
+HSPLkotlin/ResultKt;->throwOnFailure(Ljava/lang/Object;)V
+HSPLkotlin/ResultKt;->toSize-ozmzZPI(J)J
+HSPLkotlin/ResultKt;->ulongToDouble(J)D
+HSPLkotlin/ResultKt;->updateThreadContext(Lkotlin/coroutines/CoroutineContext;Ljava/lang/Object;)Ljava/lang/Object;
+HSPLkotlin/ResultKt;->withContext(Lkotlin/coroutines/CoroutineContext;Lkotlin/jvm/functions/Function2;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
+HSPLkotlin/SynchronizedLazyImpl;-><init>(Lkotlin/jvm/functions/Function0;)V
+HSPLkotlin/SynchronizedLazyImpl;->getValue()Ljava/lang/Object;
+HSPLkotlin/TuplesKt;-><clinit>()V
+HSPLkotlin/TuplesKt;->CornerRadius(FF)J
+HSPLkotlin/TuplesKt;->LazyList(Landroidx/compose/ui/Modifier;Landroidx/tv/foundation/lazy/list/TvLazyListState;Landroidx/compose/foundation/layout/PaddingValuesImpl;ZZZILandroidx/tv/foundation/PivotOffsets;Landroidx/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
+HSPLkotlin/TuplesKt;->PillIndicatorTabRow(Ljava/util/List;ILkotlin/jvm/functions/Function1;Landroidx/compose/runtime/Composer;I)V
+HSPLkotlin/TuplesKt;->Rect-tz77jQw(JJ)Landroidx/compose/ui/geometry/Rect;
+HSPLkotlin/TuplesKt;->ScrollPositionUpdater(Lkotlin/jvm/functions/Function0;Landroidx/tv/foundation/lazy/list/TvLazyListState;Landroidx/compose/runtime/Composer;I)V
+HSPLkotlin/TuplesKt;->Size(FF)J
+HSPLkotlin/TuplesKt;->TopNavigation(Lkotlin/jvm/functions/Function1;Landroidx/compose/runtime/Composer;II)V
+HSPLkotlin/TuplesKt;->access$addLayoutNodeChildren(Landroidx/compose/runtime/collection/MutableVector;Landroidx/compose/ui/Modifier$Node;)V
+HSPLkotlin/TuplesKt;->access$insertEntryAtIndex([Ljava/lang/Object;ILjava/lang/Object;Ljava/lang/Object;)[Ljava/lang/Object;
+HSPLkotlin/TuplesKt;->access$pop(Landroidx/compose/runtime/collection/MutableVector;)Landroidx/compose/ui/Modifier$Node;
+HSPLkotlin/TuplesKt;->access$removeRange(Ljava/util/ArrayList;II)V
+HSPLkotlin/TuplesKt;->asLayoutModifierNode(Landroidx/compose/ui/Modifier$Node;)Landroidx/compose/ui/node/LayoutModifierNode;
+HSPLkotlin/TuplesKt;->autoInvalidateInsertedNode(Landroidx/compose/ui/Modifier$Node;)V
+HSPLkotlin/TuplesKt;->autoInvalidateNodeIncludingDelegates(Landroidx/compose/ui/Modifier$Node;II)V
+HSPLkotlin/TuplesKt;->autoInvalidateNodeSelf(Landroidx/compose/ui/Modifier$Node;II)V
+HSPLkotlin/TuplesKt;->autoInvalidateUpdatedNode(Landroidx/compose/ui/Modifier$Node;)V
+HSPLkotlin/TuplesKt;->beforeCheckcastToFunctionOfArity(ILjava/lang/Object;)V
+HSPLkotlin/TuplesKt;->binarySearch([II)I
+HSPLkotlin/TuplesKt;->bitsForSlot(II)I
+HSPLkotlin/TuplesKt;->calculateLazyLayoutPinnedIndices(Landroidx/compose/foundation/lazy/layout/LazyLayoutItemProvider;Landroidx/compose/foundation/lazy/layout/LazyLayoutPinnedItemList;Landroidx/compose/runtime/Stack;)Ljava/util/List;
+HSPLkotlin/TuplesKt;->calculateNodeKindSetFrom(Landroidx/compose/ui/Modifier$Element;)I
+HSPLkotlin/TuplesKt;->calculateNodeKindSetFrom(Landroidx/compose/ui/Modifier$Node;)I
+HSPLkotlin/TuplesKt;->calculateNodeKindSetFromIncludingDelegates(Landroidx/compose/ui/Modifier$Node;)I
+HSPLkotlin/TuplesKt;->checkRadix(I)V
+HSPLkotlin/TuplesKt;->coerceIn(DDD)D
+HSPLkotlin/TuplesKt;->coerceIn(FFF)F
+HSPLkotlin/TuplesKt;->coerceIn(III)I
+HSPLkotlin/TuplesKt;->compareValues(Ljava/lang/Comparable;Ljava/lang/Comparable;)I
+HSPLkotlin/TuplesKt;->composableLambda(Landroidx/compose/runtime/Composer;ILkotlin/jvm/internal/Lambda;)Landroidx/compose/runtime/internal/ComposableLambdaImpl;
+HSPLkotlin/TuplesKt;->composableLambdaInstance(ILkotlin/jvm/internal/Lambda;Z)Landroidx/compose/runtime/internal/ComposableLambdaImpl;
+HSPLkotlin/TuplesKt;->currentValueOf(Landroidx/compose/ui/node/CompositionLocalConsumerModifierNode;Landroidx/compose/runtime/ProvidableCompositionLocal;)Ljava/lang/Object;
+HSPLkotlin/TuplesKt;->findLocation(ILjava/util/List;)I
+HSPLkotlin/TuplesKt;->findSegmentInternal(Lkotlinx/coroutines/internal/Segment;JLkotlin/jvm/functions/Function2;)Ljava/lang/Object;
+HSPLkotlin/TuplesKt;->get(Lkotlin/coroutines/CoroutineContext$Element;Lkotlin/coroutines/CoroutineContext$Key;)Lkotlin/coroutines/CoroutineContext$Element;
+HSPLkotlin/TuplesKt;->getCenter-uvyYCjk(J)J
+HSPLkotlin/TuplesKt;->getEllipsizedLeftPadding(Landroid/text/Layout;ILandroid/graphics/Paint;)F
+HSPLkotlin/TuplesKt;->getEllipsizedRightPadding(Landroid/text/Layout;ILandroid/graphics/Paint;)F
+HSPLkotlin/TuplesKt;->getIncludeSelfInTraversal-H91voCI(I)Z
+HSPLkotlin/TuplesKt;->getLastIndex(Ljava/util/List;)I
+HSPLkotlin/TuplesKt;->invalidateDraw(Landroidx/compose/ui/node/DrawModifierNode;)V
+HSPLkotlin/TuplesKt;->invalidateMeasurement(Landroidx/compose/ui/node/LayoutModifierNode;)V
+HSPLkotlin/TuplesKt;->invalidateSemantics(Landroidx/compose/ui/node/SemanticsModifierNode;)V
+HSPLkotlin/TuplesKt;->isWhitespace(C)Z
+HSPLkotlin/TuplesKt;->lazy(Lkotlin/jvm/functions/Function0;)Lkotlin/Lazy;
+HSPLkotlin/TuplesKt;->listOf(Ljava/lang/Object;)Ljava/util/List;
+HSPLkotlin/TuplesKt;->listOf([Ljava/lang/Object;)Ljava/util/List;
+HSPLkotlin/TuplesKt;->minusKey(Lkotlin/coroutines/CoroutineContext$Element;Lkotlin/coroutines/CoroutineContext$Key;)Lkotlin/coroutines/CoroutineContext;
+HSPLkotlin/TuplesKt;->observeReads(Landroidx/compose/ui/Modifier$Node;Lkotlin/jvm/functions/Function0;)V
+HSPLkotlin/TuplesKt;->painterResource(ILandroidx/compose/runtime/Composer;)Landroidx/compose/ui/graphics/painter/Painter;
+HSPLkotlin/TuplesKt;->replacableWith(Landroidx/compose/runtime/RecomposeScope;Landroidx/compose/runtime/RecomposeScopeImpl;)Z
+HSPLkotlin/TuplesKt;->requireCoordinator-64DMado(Landroidx/compose/ui/node/DelegatableNode;I)Landroidx/compose/ui/node/NodeCoordinator;
+HSPLkotlin/TuplesKt;->requireLayoutNode(Landroidx/compose/ui/node/DelegatableNode;)Landroidx/compose/ui/node/LayoutNode;
+HSPLkotlin/TuplesKt;->requireOwner(Landroidx/compose/ui/node/DelegatableNode;)Landroidx/compose/ui/node/Owner;
+HSPLkotlin/TuplesKt;->resolveDefaults(Landroidx/compose/ui/text/TextStyle;Landroidx/compose/ui/unit/LayoutDirection;)Landroidx/compose/ui/text/TextStyle;
+HSPLkotlin/TuplesKt;->runtimeCheck(Z)V
+HSPLkotlin/TuplesKt;->until(II)Lkotlin/ranges/IntRange;
+HSPLkotlin/ULong$Companion;-><init>()V
+HSPLkotlin/ULong$Companion;-><init>(I)V
+HSPLkotlin/ULong$Companion;-><init>(II)V
+HSPLkotlin/ULong$Companion;->checkElementIndex$kotlin_stdlib(II)V
+HSPLkotlin/ULong$Companion;->computeScaleFactor-H7hwNQA(JJ)J
+HSPLkotlin/ULong$Companion;->dispatch$lifecycle_runtime_release(Landroid/app/Activity;Landroidx/lifecycle/Lifecycle$Event;)V
+HSPLkotlin/ULong$Companion;->getHolderForHierarchy(Landroid/view/View;)Landroidx/metrics/performance/PerformanceMetricsState$Holder;
+HSPLkotlin/ULong$Companion;->injectIfNeededIn(Landroid/app/Activity;)V
+HSPLkotlin/UNINITIALIZED_VALUE;-><clinit>()V
+HSPLkotlin/Unit;-><clinit>()V
+HSPLkotlin/UnsafeLazyImpl;-><init>(Lkotlin/jvm/functions/Function0;)V
+HSPLkotlin/UnsafeLazyImpl;->getValue()Ljava/lang/Object;
+HSPLkotlin/collections/AbstractCollection;->isEmpty()Z
+HSPLkotlin/collections/AbstractCollection;->size()I
+HSPLkotlin/collections/AbstractList;->equals(Ljava/lang/Object;)Z
+HSPLkotlin/collections/AbstractMap$toString$1;-><init>(ILjava/lang/Object;)V
+HSPLkotlin/collections/AbstractMap$toString$1;->invoke()Landroidx/compose/runtime/DisposableEffectResult;
+HSPLkotlin/collections/AbstractMap$toString$1;->invoke(F)Ljava/lang/Float;
+HSPLkotlin/collections/AbstractMap$toString$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
+HSPLkotlin/collections/AbstractMap$toString$1;->invoke(Ljava/lang/Object;)V
+HSPLkotlin/collections/AbstractMap;->entrySet()Ljava/util/Set;
+HSPLkotlin/collections/AbstractMap;->equals(Ljava/lang/Object;)Z
+HSPLkotlin/collections/AbstractMap;->size()I
+HSPLkotlin/collections/AbstractMutableList;-><init>()V
+HSPLkotlin/collections/AbstractMutableList;->size()I
+HSPLkotlin/collections/AbstractSet;->equals(Ljava/lang/Object;)Z
+HSPLkotlin/collections/ArrayDeque;-><clinit>()V
+HSPLkotlin/collections/ArrayDeque;-><init>()V
+HSPLkotlin/collections/ArrayDeque;->addLast(Ljava/lang/Object;)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/ArraysKt___ArraysKt;->asList([Ljava/lang/Object;)Ljava/util/List;
+HSPLkotlin/collections/ArraysKt___ArraysKt;->collectionSizeOrDefault(Ljava/lang/Iterable;)I
+HSPLkotlin/collections/ArraysKt___ArraysKt;->copyInto$default([I[III)V
+HSPLkotlin/collections/ArraysKt___ArraysKt;->copyInto$default([Ljava/lang/Object;[Ljava/lang/Object;III)V
+HSPLkotlin/collections/ArraysKt___ArraysKt;->copyInto([I[IIII)V
+HSPLkotlin/collections/ArraysKt___ArraysKt;->copyInto([Ljava/lang/Object;[Ljava/lang/Object;III)V
+HSPLkotlin/collections/ArraysKt___ArraysKt;->fill$default([Ljava/lang/Object;)V
+HSPLkotlin/collections/ArraysKt___ArraysKt;->fill(II[Ljava/lang/Object;)V
+HSPLkotlin/collections/ArraysKt___ArraysKt;->indexOf([Ljava/lang/Object;Ljava/lang/Object;)I
+HSPLkotlin/collections/CollectionsKt__MutableCollectionsJVMKt;->sortWith(Ljava/util/List;Ljava/util/Comparator;)V
+HSPLkotlin/collections/CollectionsKt__ReversedViewsKt;->addAll(Ljava/lang/Iterable;Ljava/util/Collection;)V
+HSPLkotlin/collections/CollectionsKt___CollectionsKt;->firstOrNull(Ljava/util/List;)Ljava/lang/Object;
+HSPLkotlin/collections/CollectionsKt___CollectionsKt;->last(Ljava/util/List;)Ljava/lang/Object;
+HSPLkotlin/collections/CollectionsKt___CollectionsKt;->plus(Ljava/util/List;Ljava/io/Serializable;)Ljava/util/ArrayList;
+HSPLkotlin/collections/CollectionsKt___CollectionsKt;->toIntArray(Ljava/util/ArrayList;)[I
+HSPLkotlin/collections/EmptyList;-><clinit>()V
+HSPLkotlin/collections/EmptyList;->contains(Ljava/lang/Object;)Z
+HSPLkotlin/collections/EmptyList;->isEmpty()Z
+HSPLkotlin/collections/EmptyList;->size()I
+HSPLkotlin/collections/EmptyList;->toArray()[Ljava/lang/Object;
+HSPLkotlin/collections/EmptyMap;-><clinit>()V
+HSPLkotlin/collections/EmptyMap;->isEmpty()Z
+HSPLkotlin/collections/EmptyMap;->size()I
+HSPLkotlin/coroutines/AbstractCoroutineContextElement;-><init>(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;
+HSPLkotlin/coroutines/AbstractCoroutineContextKey;-><init>(Lkotlin/coroutines/CoroutineContext$Key;Lkotlin/jvm/functions/Function1;)V
+HSPLkotlin/coroutines/CombinedContext;-><init>(Lkotlin/coroutines/CoroutineContext$Element;Lkotlin/coroutines/CoroutineContext;)V
+HSPLkotlin/coroutines/CombinedContext;->fold(Ljava/lang/Object;Lkotlin/jvm/functions/Function2;)Ljava/lang/Object;
+HSPLkotlin/coroutines/CombinedContext;->minusKey(Lkotlin/coroutines/CoroutineContext$Key;)Lkotlin/coroutines/CoroutineContext;
+HSPLkotlin/coroutines/CombinedContext;->plus(Lkotlin/coroutines/CoroutineContext;)Lkotlin/coroutines/CoroutineContext;
+HSPLkotlin/coroutines/CoroutineContext$plus$1;-><clinit>()V
+HSPLkotlin/coroutines/CoroutineContext$plus$1;-><init>(I)V
+HSPLkotlin/coroutines/CoroutineContext$plus$1;->invoke(Landroidx/compose/runtime/Composer;I)V
+HSPLkotlin/coroutines/CoroutineContext$plus$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
+HSPLkotlin/coroutines/EmptyCoroutineContext;-><clinit>()V
+HSPLkotlin/coroutines/EmptyCoroutineContext;->fold(Ljava/lang/Object;Lkotlin/jvm/functions/Function2;)Ljava/lang/Object;
+HSPLkotlin/coroutines/EmptyCoroutineContext;->plus(Lkotlin/coroutines/CoroutineContext;)Lkotlin/coroutines/CoroutineContext;
+HSPLkotlin/coroutines/intrinsics/CoroutineSingletons;-><clinit>()V
+HSPLkotlin/coroutines/intrinsics/CoroutineSingletons;-><init>(ILjava/lang/String;)V
+HSPLkotlin/coroutines/jvm/internal/BaseContinuationImpl;-><init>(Lkotlin/coroutines/Continuation;)V
+HSPLkotlin/coroutines/jvm/internal/BaseContinuationImpl;->resumeWith(Ljava/lang/Object;)V
+HSPLkotlin/coroutines/jvm/internal/CompletedContinuation;-><clinit>()V
+HSPLkotlin/coroutines/jvm/internal/ContinuationImpl;-><init>(Lkotlin/coroutines/Continuation;)V
+HSPLkotlin/coroutines/jvm/internal/ContinuationImpl;-><init>(Lkotlin/coroutines/Continuation;Lkotlin/coroutines/CoroutineContext;)V
+HSPLkotlin/coroutines/jvm/internal/ContinuationImpl;->getContext()Lkotlin/coroutines/CoroutineContext;
+HSPLkotlin/coroutines/jvm/internal/ContinuationImpl;->releaseIntercepted()V
+HSPLkotlin/coroutines/jvm/internal/SuspendLambda;-><init>(ILkotlin/coroutines/Continuation;)V
+HSPLkotlin/coroutines/jvm/internal/SuspendLambda;->getArity()I
+HSPLkotlin/jvm/internal/ArrayIterator;-><init>(ILjava/lang/Object;)V
+HSPLkotlin/jvm/internal/ArrayIterator;->hasNext()Z
+HSPLkotlin/jvm/internal/ArrayIterator;->next()Ljava/lang/Object;
+HSPLkotlin/jvm/internal/CallableReference$NoReceiver;-><clinit>()V
+HSPLkotlin/jvm/internal/CallableReference;-><init>(Ljava/lang/Object;Ljava/lang/Class;Ljava/lang/String;Ljava/lang/String;Z)V
+HSPLkotlin/jvm/internal/ClassReference;-><clinit>()V
+HSPLkotlin/jvm/internal/ClassReference;-><init>(Ljava/lang/Class;)V
+HSPLkotlin/jvm/internal/ClassReference;->getJClass()Ljava/lang/Class;
+HSPLkotlin/jvm/internal/FunctionReferenceImpl;-><init>(ILjava/lang/Class;Ljava/lang/String;Ljava/lang/String;I)V
+HSPLkotlin/jvm/internal/Lambda;-><init>(I)V
+HSPLkotlin/jvm/internal/Lambda;->getArity()I
+HSPLkotlin/jvm/internal/PropertyReference0Impl;->invoke()Ljava/lang/Object;
+HSPLkotlin/jvm/internal/PropertyReference;-><init>(Ljava/lang/Object;Ljava/lang/Class;Ljava/lang/String;Ljava/lang/String;I)V
+HSPLkotlin/jvm/internal/PropertyReference;->equals(Ljava/lang/Object;)Z
+HSPLkotlin/jvm/internal/Reflection;-><clinit>()V
+HSPLkotlin/jvm/internal/Reflection;->getOrCreateKotlinClass(Ljava/lang/Class;)Lkotlin/jvm/internal/ClassReference;
+HSPLkotlin/random/FallbackThreadLocalRandom$implStorage$1;-><init>(I)V
+HSPLkotlin/ranges/IntProgression;-><init>(III)V
+HSPLkotlin/ranges/IntProgression;->iterator()Ljava/util/Iterator;
+HSPLkotlin/ranges/IntProgressionIterator;-><init>(III)V
+HSPLkotlin/ranges/IntProgressionIterator;->hasNext()Z
+HSPLkotlin/ranges/IntProgressionIterator;->nextInt()I
+HSPLkotlin/ranges/IntRange;-><clinit>()V
+HSPLkotlin/ranges/IntRange;-><init>(II)V
+HSPLkotlin/ranges/IntRange;->equals(Ljava/lang/Object;)Z
+HSPLkotlin/ranges/IntRange;->isEmpty()Z
+HSPLkotlin/sequences/ConstrainedOnceSequence;-><init>(Lkotlin/sequences/SequencesKt__SequencesKt$asSequence$$inlined$Sequence$1;)V
+HSPLkotlin/sequences/ConstrainedOnceSequence;->iterator()Ljava/util/Iterator;
+HSPLkotlin/sequences/FilteringSequence$iterator$1;-><init>(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;
+HSPLkotlin/sequences/FilteringSequence;-><init>(Lkotlin/sequences/GeneratorSequence;)V
+HSPLkotlin/sequences/GeneratorSequence$iterator$1;-><init>(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;
+HSPLkotlin/sequences/GeneratorSequence;-><init>(Landroidx/compose/ui/node/LayoutNode$_foldedChildren$1;Lkotlin/jvm/functions/Function1;)V
+HSPLkotlin/sequences/GeneratorSequence;-><init>(Lkotlin/sequences/Sequence;Lkotlin/jvm/functions/Function1;)V
+HSPLkotlin/sequences/GeneratorSequence;->iterator()Ljava/util/Iterator;
+HSPLkotlin/sequences/SequencesKt;->firstOrNull(Lkotlin/sequences/FilteringSequence;)Ljava/lang/Object;
+HSPLkotlin/sequences/SequencesKt;->mapNotNull(Lkotlin/sequences/Sequence;Lkotlinx/coroutines/CoroutineDispatcher$Key$1;)Lkotlin/sequences/FilteringSequence;
+HSPLkotlin/sequences/SequencesKt;->toList(Lkotlin/sequences/Sequence;)Ljava/util/List;
+HSPLkotlin/sequences/SequencesKt__SequencesKt$asSequence$$inlined$Sequence$1;-><init>(ILjava/lang/Object;)V
+HSPLkotlin/sequences/SequencesKt__SequencesKt$asSequence$$inlined$Sequence$1;->iterator()Ljava/util/Iterator;
+HSPLkotlin/sequences/TransformingSequence$iterator$1;-><init>(Lkotlin/sequences/GeneratorSequence;)V
+HSPLkotlin/sequences/TransformingSequence$iterator$1;->hasNext()Z
+HSPLkotlin/sequences/TransformingSequence$iterator$1;->next()Ljava/lang/Object;
+HSPLkotlin/text/StringsKt__IndentKt$getIndentFunction$2;-><init>(ILjava/lang/String;)V
+HSPLkotlin/text/StringsKt__RegexExtensionsKt;->generateSequence(Ljava/lang/Object;Lkotlin/jvm/functions/Function1;)Lkotlin/sequences/Sequence;
+HSPLkotlin/text/StringsKt__StringsKt;->endsWith$default(Ljava/lang/CharSequence;Ljava/lang/String;)Z
+HSPLkotlin/text/StringsKt__StringsKt;->getLastIndex(Ljava/lang/CharSequence;)I
+HSPLkotlin/text/StringsKt__StringsKt;->indexOf(Ljava/lang/CharSequence;Ljava/lang/String;IZ)I
+HSPLkotlin/text/StringsKt__StringsKt;->isBlank(Ljava/lang/CharSequence;)Z
+HSPLkotlin/text/StringsKt__StringsKt;->replace$default(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;
+HSPLkotlin/text/StringsKt__StringsKt;->substringAfterLast$default(Ljava/lang/String;)Ljava/lang/String;
+HSPLkotlin/text/StringsKt___StringsKt;->last(Ljava/lang/CharSequence;)C
+HSPLkotlinx/coroutines/AbstractCoroutine;-><init>(Lkotlin/coroutines/CoroutineContext;Z)V
+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$enumunboxing$(ILkotlinx/coroutines/AbstractCoroutine;Lkotlin/jvm/functions/Function2;)V
+HSPLkotlinx/coroutines/Active;-><clinit>()V
+HSPLkotlinx/coroutines/BlockingEventLoop;-><init>(Ljava/lang/Thread;)V
+HSPLkotlinx/coroutines/CancelHandler;-><init>()V
+HSPLkotlinx/coroutines/CancellableContinuationImpl;-><clinit>()V
+HSPLkotlinx/coroutines/CancellableContinuationImpl;-><init>(ILkotlin/coroutines/Continuation;)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;->completeResume(Ljava/lang/Object;)V
+HSPLkotlinx/coroutines/CancellableContinuationImpl;->detachChild$kotlinx_coroutines_core()V
+HSPLkotlinx/coroutines/CancellableContinuationImpl;->dispatchResume(I)V
+HSPLkotlinx/coroutines/CancellableContinuationImpl;->getContinuationCancellationCause(Lkotlinx/coroutines/JobSupport;)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;->getResult()Ljava/lang/Object;
+HSPLkotlinx/coroutines/CancellableContinuationImpl;->getSuccessfulResult$kotlinx_coroutines_core(Ljava/lang/Object;)Ljava/lang/Object;
+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;->isReusable()Z
+HSPLkotlinx/coroutines/CancellableContinuationImpl;->releaseClaimedReusableContinuation$kotlinx_coroutines_core()V
+HSPLkotlinx/coroutines/CancellableContinuationImpl;->resumeImpl(Ljava/lang/Object;ILkotlin/jvm/functions/Function1;)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;
+HSPLkotlinx/coroutines/CancellableContinuationImpl;->takeState$kotlinx_coroutines_core()Ljava/lang/Object;
+HSPLkotlinx/coroutines/CancellableContinuationImpl;->tryResume(Ljava/lang/Object;Lkotlin/jvm/functions/Function1;)Lkotlinx/coroutines/internal/Symbol;
+HSPLkotlinx/coroutines/CancelledContinuation;-><clinit>()V
+HSPLkotlinx/coroutines/CancelledContinuation;-><init>(Lkotlin/coroutines/Continuation;Ljava/lang/Throwable;Z)V
+HSPLkotlinx/coroutines/ChildContinuation;-><init>(Lkotlinx/coroutines/CancellableContinuationImpl;)V
+HSPLkotlinx/coroutines/ChildContinuation;->invoke(Ljava/lang/Throwable;)V
+HSPLkotlinx/coroutines/ChildHandleNode;-><init>(Lkotlinx/coroutines/JobSupport;)V
+HSPLkotlinx/coroutines/ChildHandleNode;->childCancelled(Ljava/lang/Throwable;)Z
+HSPLkotlinx/coroutines/ChildHandleNode;->invoke(Ljava/lang/Throwable;)V
+HSPLkotlinx/coroutines/CompletedContinuation;-><init>(Ljava/lang/Object;Lkotlinx/coroutines/CancelHandler;Lkotlin/jvm/functions/Function1;Ljava/lang/Object;Ljava/lang/Throwable;)V
+HSPLkotlinx/coroutines/CompletedContinuation;-><init>(Ljava/lang/Object;Lkotlinx/coroutines/CancelHandler;Lkotlin/jvm/functions/Function1;Ljava/util/concurrent/CancellationException;I)V
+HSPLkotlinx/coroutines/CompletedExceptionally;-><clinit>()V
+HSPLkotlinx/coroutines/CompletedExceptionally;-><init>(Ljava/lang/Throwable;Z)V
+HSPLkotlinx/coroutines/CoroutineContextKt$foldCopies$1;-><clinit>()V
+HSPLkotlinx/coroutines/CoroutineContextKt$foldCopies$1;-><init>(I)V
+HSPLkotlinx/coroutines/CoroutineContextKt$foldCopies$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
+HSPLkotlinx/coroutines/CoroutineDispatcher$Key$1;-><clinit>()V
+HSPLkotlinx/coroutines/CoroutineDispatcher$Key$1;-><init>(I)V
+HSPLkotlinx/coroutines/CoroutineDispatcher$Key$1;->invoke(Landroid/view/View;)Landroid/view/View;
+HSPLkotlinx/coroutines/CoroutineDispatcher$Key$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
+HSPLkotlinx/coroutines/CoroutineDispatcher$Key;-><init>(I)V
+HSPLkotlinx/coroutines/CoroutineDispatcher;-><clinit>()V
+HSPLkotlinx/coroutines/CoroutineDispatcher;-><init>()V
+HSPLkotlinx/coroutines/CoroutineDispatcher;->get(Lkotlin/coroutines/CoroutineContext$Key;)Lkotlin/coroutines/CoroutineContext$Element;
+HSPLkotlinx/coroutines/CoroutineDispatcher;->isDispatchNeeded()Z
+HSPLkotlinx/coroutines/CoroutineDispatcher;->minusKey(Lkotlin/coroutines/CoroutineContext$Key;)Lkotlin/coroutines/CoroutineContext;
+HSPLkotlinx/coroutines/DefaultExecutor;-><clinit>()V
+HSPLkotlinx/coroutines/DefaultExecutorKt;-><clinit>()V
+HSPLkotlinx/coroutines/DispatchedTask;-><init>(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(Ljava/lang/Throwable;Ljava/lang/Throwable;)V
+HSPLkotlinx/coroutines/DispatchedTask;->run()V
+HSPLkotlinx/coroutines/Dispatchers;-><clinit>()V
+HSPLkotlinx/coroutines/Empty;-><init>(Z)V
+HSPLkotlinx/coroutines/Empty;->getList()Lkotlinx/coroutines/NodeList;
+HSPLkotlinx/coroutines/Empty;->isActive()Z
+HSPLkotlinx/coroutines/EventLoopImplBase;-><clinit>()V
+HSPLkotlinx/coroutines/EventLoopImplBase;-><init>()V
+HSPLkotlinx/coroutines/EventLoopImplPlatform;-><init>()V
+HSPLkotlinx/coroutines/EventLoopImplPlatform;->decrementUseCount(Z)V
+HSPLkotlinx/coroutines/EventLoopImplPlatform;->incrementUseCount(Z)V
+HSPLkotlinx/coroutines/EventLoopImplPlatform;->isUnconfinedLoopActive()Z
+HSPLkotlinx/coroutines/EventLoopImplPlatform;->processUnconfinedEvent()Z
+HSPLkotlinx/coroutines/ExecutorCoroutineDispatcher$Key$1;-><clinit>()V
+HSPLkotlinx/coroutines/ExecutorCoroutineDispatcher$Key$1;-><init>(I)V
+HSPLkotlinx/coroutines/ExecutorCoroutineDispatcher$Key$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
+HSPLkotlinx/coroutines/ExecutorCoroutineDispatcher;-><clinit>()V
+HSPLkotlinx/coroutines/GlobalScope;-><clinit>()V
+HSPLkotlinx/coroutines/GlobalScope;->getCoroutineContext()Lkotlin/coroutines/CoroutineContext;
+HSPLkotlinx/coroutines/InvokeOnCancel;-><init>(ILjava/lang/Object;)V
+HSPLkotlinx/coroutines/InvokeOnCancel;->invoke(Ljava/lang/Throwable;)V
+HSPLkotlinx/coroutines/InvokeOnCompletion;-><init>(ILjava/lang/Object;)V
+HSPLkotlinx/coroutines/JobImpl;-><init>(Lkotlinx/coroutines/Job;)V
+HSPLkotlinx/coroutines/JobImpl;->getHandlesException$kotlinx_coroutines_core()Z
+HSPLkotlinx/coroutines/JobImpl;->getOnCancelComplete$kotlinx_coroutines_core()Z
+HSPLkotlinx/coroutines/JobNode;-><init>()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/JobSupport$ChildCompletion;-><init>(Lkotlinx/coroutines/JobSupport;Lkotlinx/coroutines/JobSupport$Finishing;Lkotlinx/coroutines/ChildHandleNode;Ljava/lang/Object;)V
+HSPLkotlinx/coroutines/JobSupport$ChildCompletion;->invoke(Ljava/lang/Throwable;)V
+HSPLkotlinx/coroutines/JobSupport$Finishing;-><clinit>()V
+HSPLkotlinx/coroutines/JobSupport$Finishing;-><init>(Lkotlinx/coroutines/NodeList;Ljava/lang/Throwable;)V
+HSPLkotlinx/coroutines/JobSupport$Finishing;->addExceptionLocked(Ljava/lang/Throwable;)V
+HSPLkotlinx/coroutines/JobSupport$Finishing;->getList()Lkotlinx/coroutines/NodeList;
+HSPLkotlinx/coroutines/JobSupport$Finishing;->getRootCause()Ljava/lang/Throwable;
+HSPLkotlinx/coroutines/JobSupport$Finishing;->isCancelling()Z
+HSPLkotlinx/coroutines/JobSupport$Finishing;->isCompleting()Z
+HSPLkotlinx/coroutines/JobSupport$Finishing;->sealLocked(Ljava/lang/Throwable;)Ljava/util/ArrayList;
+HSPLkotlinx/coroutines/JobSupport$addLastAtomic$$inlined$addLastIf$1;-><init>(Lkotlinx/coroutines/internal/LockFreeLinkedListNode;Lkotlinx/coroutines/JobSupport;Ljava/lang/Object;)V
+HSPLkotlinx/coroutines/JobSupport$addLastAtomic$$inlined$addLastIf$1;->complete(Ljava/lang/Object;Ljava/lang/Object;)V
+HSPLkotlinx/coroutines/JobSupport$addLastAtomic$$inlined$addLastIf$1;->prepare(Ljava/lang/Object;)Lkotlinx/coroutines/internal/Symbol;
+HSPLkotlinx/coroutines/JobSupport;-><clinit>()V
+HSPLkotlinx/coroutines/JobSupport;-><init>(Z)V
+HSPLkotlinx/coroutines/JobSupport;->addLastAtomic(Ljava/lang/Object;Lkotlinx/coroutines/NodeList;Lkotlinx/coroutines/JobNode;)Z
+HSPLkotlinx/coroutines/JobSupport;->afterCompletion(Ljava/lang/Object;)V
+HSPLkotlinx/coroutines/JobSupport;->afterResume(Ljava/lang/Object;)V
+HSPLkotlinx/coroutines/JobSupport;->cancel(Ljava/util/concurrent/CancellationException;)V
+HSPLkotlinx/coroutines/JobSupport;->cancelImpl$kotlinx_coroutines_core(Ljava/lang/Object;)Z
+HSPLkotlinx/coroutines/JobSupport;->cancelInternal(Ljava/util/concurrent/CancellationException;)V
+HSPLkotlinx/coroutines/JobSupport;->cancelParent(Ljava/lang/Throwable;)Z
+HSPLkotlinx/coroutines/JobSupport;->childCancelled(Ljava/lang/Throwable;)Z
+HSPLkotlinx/coroutines/JobSupport;->completeStateFinalization(Lkotlinx/coroutines/Incomplete;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;->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;->getFinalRootCause(Lkotlinx/coroutines/JobSupport$Finishing;Ljava/util/ArrayList;)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;->getState$kotlinx_coroutines_core()Ljava/lang/Object;
+HSPLkotlinx/coroutines/JobSupport;->initParentJob(Lkotlinx/coroutines/Job;)V
+HSPLkotlinx/coroutines/JobSupport;->invokeOnCompletion(ZZLkotlin/jvm/functions/Function1;)Lkotlinx/coroutines/DisposableHandle;
+HSPLkotlinx/coroutines/JobSupport;->isActive()Z
+HSPLkotlinx/coroutines/JobSupport;->isScopedCoroutine()Z
+HSPLkotlinx/coroutines/JobSupport;->makeCompletingOnce$kotlinx_coroutines_core(Ljava/lang/Object;)Ljava/lang/Object;
+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;->onCompletionInternal(Ljava/lang/Object;)V
+HSPLkotlinx/coroutines/JobSupport;->plus(Lkotlin/coroutines/CoroutineContext;)Lkotlin/coroutines/CoroutineContext;
+HSPLkotlinx/coroutines/JobSupport;->promoteSingleToNodeList(Lkotlinx/coroutines/JobNode;)V
+HSPLkotlinx/coroutines/JobSupport;->startInternal(Ljava/lang/Object;)I
+HSPLkotlinx/coroutines/JobSupport;->tryMakeCompleting(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
+HSPLkotlinx/coroutines/JobSupport;->tryWaitForChild(Lkotlinx/coroutines/JobSupport$Finishing;Lkotlinx/coroutines/ChildHandleNode;Ljava/lang/Object;)Z
+HSPLkotlinx/coroutines/NodeList;-><init>()V
+HSPLkotlinx/coroutines/NodeList;->getList()Lkotlinx/coroutines/NodeList;
+HSPLkotlinx/coroutines/NodeList;->isActive()Z
+HSPLkotlinx/coroutines/NodeList;->isRemoved()Z
+HSPLkotlinx/coroutines/NonDisposableHandle;-><clinit>()V
+HSPLkotlinx/coroutines/NonDisposableHandle;->dispose()V
+HSPLkotlinx/coroutines/ThreadLocalEventLoop;-><clinit>()V
+HSPLkotlinx/coroutines/ThreadLocalEventLoop;->getEventLoop$kotlinx_coroutines_core()Lkotlinx/coroutines/EventLoopImplPlatform;
+HSPLkotlinx/coroutines/Unconfined;-><clinit>()V
+HSPLkotlinx/coroutines/UndispatchedCoroutine;-><init>(Lkotlin/coroutines/Continuation;Lkotlin/coroutines/CoroutineContext;)V
+HSPLkotlinx/coroutines/UndispatchedMarker;-><clinit>()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;
+HSPLkotlinx/coroutines/android/AndroidDispatcherFactory;-><init>()V
+HSPLkotlinx/coroutines/android/AndroidDispatcherFactory;->createDispatcher(Ljava/util/List;)Lkotlinx/coroutines/MainCoroutineDispatcher;
+HSPLkotlinx/coroutines/android/HandlerContext;-><init>(Landroid/os/Handler;)V
+HSPLkotlinx/coroutines/android/HandlerContext;-><init>(Landroid/os/Handler;Ljava/lang/String;Z)V
+HSPLkotlinx/coroutines/android/HandlerContext;->dispatch(Lkotlin/coroutines/CoroutineContext;Ljava/lang/Runnable;)V
+HSPLkotlinx/coroutines/android/HandlerContext;->isDispatchNeeded()Z
+HSPLkotlinx/coroutines/android/HandlerDispatcherKt;-><clinit>()V
+HSPLkotlinx/coroutines/android/HandlerDispatcherKt;->asHandler(Landroid/os/Looper;)Landroid/os/Handler;
+HSPLkotlinx/coroutines/channels/BufferOverflow;-><clinit>()V
+HSPLkotlinx/coroutines/channels/BufferOverflow;-><init>(ILjava/lang/String;)V
+HSPLkotlinx/coroutines/channels/BufferedChannel$BufferedChannelIterator;-><init>(Lkotlinx/coroutines/channels/BufferedChannel;)V
+HSPLkotlinx/coroutines/channels/BufferedChannel$BufferedChannelIterator;->hasNext(Lkotlin/coroutines/jvm/internal/ContinuationImpl;)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;-><clinit>()V
+HSPLkotlinx/coroutines/channels/BufferedChannel;-><init>(ILkotlin/jvm/functions/Function1;)V
+HSPLkotlinx/coroutines/channels/BufferedChannel;->access$findSegmentSend(Lkotlinx/coroutines/channels/BufferedChannel;JLkotlinx/coroutines/channels/ChannelSegment;)Lkotlinx/coroutines/channels/ChannelSegment;
+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;->dropFirstElementUntilTheSpecifiedCellIsInTheBuffer(J)V
+HSPLkotlinx/coroutines/channels/BufferedChannel;->expandBuffer()V
+HSPLkotlinx/coroutines/channels/BufferedChannel;->findSegmentReceive(JLkotlinx/coroutines/channels/ChannelSegment;)Lkotlinx/coroutines/channels/ChannelSegment;
+HSPLkotlinx/coroutines/channels/BufferedChannel;->getBufferEndCounter()J
+HSPLkotlinx/coroutines/channels/BufferedChannel;->getReceiversCounter$kotlinx_coroutines_core()J
+HSPLkotlinx/coroutines/channels/BufferedChannel;->getSendersCounter$kotlinx_coroutines_core()J
+HSPLkotlinx/coroutines/channels/BufferedChannel;->incCompletedExpandBufferAttempts(J)V
+HSPLkotlinx/coroutines/channels/BufferedChannel;->isClosed(JZ)Z
+HSPLkotlinx/coroutines/channels/BufferedChannel;->isClosedForReceive()Z
+HSPLkotlinx/coroutines/channels/BufferedChannel;->isRendezvousOrUnlimited()Z
+HSPLkotlinx/coroutines/channels/BufferedChannel;->iterator()Lkotlinx/coroutines/channels/BufferedChannel$BufferedChannelIterator;
+HSPLkotlinx/coroutines/channels/BufferedChannel;->receive(Lkotlin/coroutines/jvm/internal/SuspendLambda;)Ljava/lang/Object;
+HSPLkotlinx/coroutines/channels/BufferedChannel;->send(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
+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;->updateCellReceive(Lkotlinx/coroutines/channels/ChannelSegment;IJLjava/lang/Object;)Ljava/lang/Object;
+HSPLkotlinx/coroutines/channels/BufferedChannel;->waitExpandBufferCompletion$kotlinx_coroutines_core(J)V
+HSPLkotlinx/coroutines/channels/BufferedChannelKt$createSegmentFunction$1;-><clinit>()V
+HSPLkotlinx/coroutines/channels/BufferedChannelKt$createSegmentFunction$1;-><init>()V
+HSPLkotlinx/coroutines/channels/BufferedChannelKt$createSegmentFunction$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
+HSPLkotlinx/coroutines/channels/BufferedChannelKt;-><clinit>()V
+HSPLkotlinx/coroutines/channels/BufferedChannelKt;->tryResume0(Lkotlinx/coroutines/CancellableContinuation;Ljava/lang/Object;Lkotlin/jvm/functions/Function1;)Z
+HSPLkotlinx/coroutines/channels/Channel$Factory;-><clinit>()V
+HSPLkotlinx/coroutines/channels/Channel;-><clinit>()V
+HSPLkotlinx/coroutines/channels/ChannelSegment;-><init>(JLkotlinx/coroutines/channels/ChannelSegment;Lkotlinx/coroutines/channels/BufferedChannel;I)V
+HSPLkotlinx/coroutines/channels/ChannelSegment;->casState$kotlinx_coroutines_core(Ljava/lang/Object;ILjava/lang/Object;)Z
+HSPLkotlinx/coroutines/channels/ChannelSegment;->getNumberOfSlots()I
+HSPLkotlinx/coroutines/channels/ChannelSegment;->getState$kotlinx_coroutines_core(I)Ljava/lang/Object;
+HSPLkotlinx/coroutines/channels/ChannelSegment;->onCancellation(ILkotlin/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(ILkotlinx/coroutines/internal/Symbol;)V
+HSPLkotlinx/coroutines/channels/ConflatedBufferedChannel;-><init>(ILkotlinx/coroutines/channels/BufferOverflow;Lkotlin/jvm/functions/Function1;)V
+HSPLkotlinx/coroutines/channels/ConflatedBufferedChannel;->trySend-JP2dKIU(Ljava/lang/Object;)Ljava/lang/Object;
+HSPLkotlinx/coroutines/channels/ConflatedBufferedChannel;->trySendImpl-Mj0NB7M(Ljava/lang/Object;Z)Ljava/lang/Object;
+HSPLkotlinx/coroutines/channels/ProducerCoroutine;-><init>(Lkotlin/coroutines/CoroutineContext;Lkotlinx/coroutines/channels/BufferedChannel;)V
+HSPLkotlinx/coroutines/channels/ProducerCoroutine;->iterator()Lkotlinx/coroutines/channels/BufferedChannel$BufferedChannelIterator;
+HSPLkotlinx/coroutines/channels/ProducerCoroutine;->send(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
+HSPLkotlinx/coroutines/flow/AbstractFlow$collect$1;-><init>(Lkotlinx/coroutines/flow/SafeFlow;Lkotlin/coroutines/Continuation;)V
+HSPLkotlinx/coroutines/flow/DistinctFlowImpl$collect$2$emit$1;-><init>(Lkotlinx/coroutines/flow/DistinctFlowImpl$collect$2;Lkotlin/coroutines/Continuation;)V
+HSPLkotlinx/coroutines/flow/DistinctFlowImpl$collect$2;-><init>(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;
+HSPLkotlinx/coroutines/flow/DistinctFlowImpl;-><init>(Lkotlinx/coroutines/flow/Flow;)V
+HSPLkotlinx/coroutines/flow/DistinctFlowImpl;->collect(Lkotlinx/coroutines/flow/FlowCollector;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
+HSPLkotlinx/coroutines/flow/FlowKt__ChannelsKt$emitAllImpl$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;
+HSPLkotlinx/coroutines/flow/FlowKt__LimitKt$dropWhile$$inlined$unsafeFlow$1;-><init>(Lkotlinx/coroutines/flow/internal/ChannelFlowTransformLatest;Lkotlinx/coroutines/flow/StartedWhileSubscribed$command$2;)V
+HSPLkotlinx/coroutines/flow/FlowKt__LimitKt$dropWhile$$inlined$unsafeFlow$1;->collect(Lkotlinx/coroutines/flow/FlowCollector;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
+HSPLkotlinx/coroutines/flow/FlowKt__LimitKt$dropWhile$1$1$emit$1;-><init>(Lkotlinx/coroutines/flow/FlowKt__LimitKt$dropWhile$1$1;Lkotlin/coroutines/Continuation;)V
+HSPLkotlinx/coroutines/flow/FlowKt__LimitKt$dropWhile$1$1;-><init>(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;
+HSPLkotlinx/coroutines/flow/FlowKt__MergeKt$mapLatest$1;-><init>(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;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;
+HSPLkotlinx/coroutines/flow/FlowKt__MergeKt;-><clinit>()V
+HSPLkotlinx/coroutines/flow/FlowKt__ReduceKt$first$$inlined$collectWhile$2$1;-><init>(Lkotlinx/coroutines/flow/FlowKt__ReduceKt$first$$inlined$collectWhile$2;Lkotlin/coroutines/Continuation;)V
+HSPLkotlinx/coroutines/flow/FlowKt__ReduceKt$first$$inlined$collectWhile$2;-><init>(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;
+HSPLkotlinx/coroutines/flow/FlowKt__ShareKt$launchSharing$1$2;-><init>(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;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;
+HSPLkotlinx/coroutines/flow/FlowKt__ShareKt$launchSharing$1;-><init>(Lkotlinx/coroutines/flow/SharingStarted;Lkotlinx/coroutines/flow/Flow;Lkotlinx/coroutines/flow/MutableSharedFlow;Ljava/lang/Object;Lkotlin/coroutines/Continuation;)V
+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;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;
+HSPLkotlinx/coroutines/flow/ReadonlyStateFlow;-><init>(Lkotlinx/coroutines/flow/StateFlowImpl;)V
+HSPLkotlinx/coroutines/flow/ReadonlyStateFlow;->collect(Lkotlinx/coroutines/flow/FlowCollector;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
+HSPLkotlinx/coroutines/flow/ReadonlyStateFlow;->getValue()Ljava/lang/Object;
+HSPLkotlinx/coroutines/flow/SafeFlow;-><init>(Lkotlin/jvm/functions/Function2;)V
+HSPLkotlinx/coroutines/flow/SafeFlow;->collect(Lkotlinx/coroutines/flow/FlowCollector;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
+HSPLkotlinx/coroutines/flow/SharedFlowImpl$collect$1;-><init>(Lkotlinx/coroutines/flow/SharedFlowImpl;Lkotlin/coroutines/Continuation;)V
+HSPLkotlinx/coroutines/flow/SharedFlowImpl$collect$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;
+HSPLkotlinx/coroutines/flow/SharedFlowImpl;-><init>(IILkotlinx/coroutines/channels/BufferOverflow;)V
+HSPLkotlinx/coroutines/flow/SharedFlowImpl;->awaitValue(Lkotlinx/coroutines/flow/SharedFlowSlot;Lkotlinx/coroutines/flow/SharedFlowImpl$collect$1;)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;)Lkotlin/coroutines/intrinsics/CoroutineSingletons;
+HSPLkotlinx/coroutines/flow/SharedFlowImpl;->collect(Lkotlinx/coroutines/flow/FlowCollector;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
+HSPLkotlinx/coroutines/flow/SharedFlowImpl;->createSlot()Lkotlinx/coroutines/flow/internal/AbstractSharedFlowSlot;
+HSPLkotlinx/coroutines/flow/SharedFlowImpl;->createSlotArray()[Lkotlinx/coroutines/flow/internal/AbstractSharedFlowSlot;
+HSPLkotlinx/coroutines/flow/SharedFlowImpl;->dropOldestLocked()V
+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;->getHead()J
+HSPLkotlinx/coroutines/flow/SharedFlowImpl;->growBuffer(II[Ljava/lang/Object;)[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;->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/SharedFlowSlot;-><init>()V
+HSPLkotlinx/coroutines/flow/SharedFlowSlot;->allocateLocked(Lkotlinx/coroutines/flow/internal/AbstractSharedFlow;)Z
+HSPLkotlinx/coroutines/flow/SharingCommand;-><clinit>()V
+HSPLkotlinx/coroutines/flow/SharingCommand;-><init>(ILjava/lang/String;)V
+HSPLkotlinx/coroutines/flow/SharingConfig;-><init>()V
+HSPLkotlinx/coroutines/flow/SharingConfig;-><init>(ILkotlin/coroutines/CoroutineContext;Lkotlinx/coroutines/channels/BufferOverflow;Lkotlinx/coroutines/flow/Flow;)V
+HSPLkotlinx/coroutines/flow/SharingConfig;->add(Ljava/lang/Object;Ljava/lang/Object;)V
+HSPLkotlinx/coroutines/flow/SharingConfig;->contains(Ljava/lang/Object;)Z
+HSPLkotlinx/coroutines/flow/SharingConfig;->find(Ljava/lang/Object;)I
+HSPLkotlinx/coroutines/flow/SharingConfig;->remove(Ljava/lang/Object;Ljava/lang/Object;)Z
+HSPLkotlinx/coroutines/flow/SharingConfig;->removeScope(Ljava/lang/Object;)V
+HSPLkotlinx/coroutines/flow/SharingConfig;->scopeSetAt(I)Landroidx/compose/runtime/collection/IdentityArraySet;
+HSPLkotlinx/coroutines/flow/StartedLazily;-><init>(I)V
+HSPLkotlinx/coroutines/flow/StartedWhileSubscribed$command$1;-><init>(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;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;
+HSPLkotlinx/coroutines/flow/StartedWhileSubscribed$command$2;-><init>(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;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;
+HSPLkotlinx/coroutines/flow/StartedWhileSubscribed;-><init>(JJ)V
+HSPLkotlinx/coroutines/flow/StartedWhileSubscribed;->command(Lkotlinx/coroutines/flow/internal/SubscriptionCountStateFlow;)Lkotlinx/coroutines/flow/Flow;
+HSPLkotlinx/coroutines/flow/StartedWhileSubscribed;->equals(Ljava/lang/Object;)Z
+HSPLkotlinx/coroutines/flow/StateFlowImpl$collect$1;-><init>(Lkotlinx/coroutines/flow/StateFlowImpl;Lkotlin/coroutines/Continuation;)V
+HSPLkotlinx/coroutines/flow/StateFlowImpl$collect$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;
+HSPLkotlinx/coroutines/flow/StateFlowImpl;-><clinit>()V
+HSPLkotlinx/coroutines/flow/StateFlowImpl;-><init>(Ljava/lang/Object;)V
+HSPLkotlinx/coroutines/flow/StateFlowImpl;->collect(Lkotlinx/coroutines/flow/FlowCollector;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
+HSPLkotlinx/coroutines/flow/StateFlowImpl;->createSlot()Lkotlinx/coroutines/flow/internal/AbstractSharedFlowSlot;
+HSPLkotlinx/coroutines/flow/StateFlowImpl;->createSlotArray()[Lkotlinx/coroutines/flow/internal/AbstractSharedFlowSlot;
+HSPLkotlinx/coroutines/flow/StateFlowImpl;->getValue()Ljava/lang/Object;
+HSPLkotlinx/coroutines/flow/StateFlowImpl;->setValue(Ljava/lang/Object;)V
+HSPLkotlinx/coroutines/flow/StateFlowImpl;->updateState(Ljava/lang/Object;Ljava/lang/Object;)Z
+HSPLkotlinx/coroutines/flow/StateFlowSlot;-><clinit>()V
+HSPLkotlinx/coroutines/flow/StateFlowSlot;->allocateLocked(Lkotlinx/coroutines/flow/internal/AbstractSharedFlow;)Z
+HSPLkotlinx/coroutines/flow/internal/AbstractSharedFlow;->allocateSlot()Lkotlinx/coroutines/flow/internal/AbstractSharedFlowSlot;
+HSPLkotlinx/coroutines/flow/internal/ChannelFlow$collect$2;-><init>(Lkotlin/coroutines/Continuation;Lkotlinx/coroutines/flow/FlowCollector;Lkotlinx/coroutines/flow/internal/ChannelFlow;)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;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;
+HSPLkotlinx/coroutines/flow/internal/ChannelFlow$collectToFun$1;-><init>(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;
+HSPLkotlinx/coroutines/flow/internal/ChannelFlow;-><init>(Lkotlin/coroutines/CoroutineContext;ILkotlinx/coroutines/channels/BufferOverflow;)V
+HSPLkotlinx/coroutines/flow/internal/ChannelFlow;->fuse(Lkotlin/coroutines/CoroutineContext;ILkotlinx/coroutines/channels/BufferOverflow;)Lkotlinx/coroutines/flow/Flow;
+HSPLkotlinx/coroutines/flow/internal/ChannelFlowOperator;-><init>(ILkotlin/coroutines/CoroutineContext;Lkotlinx/coroutines/channels/BufferOverflow;Lkotlinx/coroutines/flow/Flow;)V
+HSPLkotlinx/coroutines/flow/internal/ChannelFlowOperator;->collect(Lkotlinx/coroutines/flow/FlowCollector;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
+HSPLkotlinx/coroutines/flow/internal/ChannelFlowTransformLatest$flowCollect$3$1$2;-><init>(Lkotlinx/coroutines/flow/internal/ChannelFlowTransformLatest;Lkotlinx/coroutines/flow/FlowCollector;Ljava/lang/Object;Lkotlin/coroutines/Continuation;)V
+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;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;
+HSPLkotlinx/coroutines/flow/internal/ChannelFlowTransformLatest$flowCollect$3$1$emit$1;-><init>(Lkotlinx/coroutines/flow/internal/ChannelFlowTransformLatest$flowCollect$3$1;Lkotlin/coroutines/Continuation;)V
+HSPLkotlinx/coroutines/flow/internal/ChannelFlowTransformLatest$flowCollect$3$1;-><init>(Lkotlin/jvm/internal/Ref$ObjectRef;Lkotlinx/coroutines/CoroutineScope;Lkotlinx/coroutines/flow/internal/ChannelFlowTransformLatest;Lkotlinx/coroutines/flow/FlowCollector;)V
+HSPLkotlinx/coroutines/flow/internal/ChannelFlowTransformLatest$flowCollect$3$1;->emit(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
+HSPLkotlinx/coroutines/flow/internal/ChannelFlowTransformLatest$flowCollect$3;-><init>(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;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;
+HSPLkotlinx/coroutines/flow/internal/ChannelFlowTransformLatest;-><init>(Lkotlin/jvm/functions/Function3;Lkotlinx/coroutines/flow/Flow;Lkotlin/coroutines/CoroutineContext;ILkotlinx/coroutines/channels/BufferOverflow;)V
+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;
+HSPLkotlinx/coroutines/flow/internal/NoOpContinuation;-><clinit>()V
+HSPLkotlinx/coroutines/flow/internal/NopCollector;-><clinit>()V
+HSPLkotlinx/coroutines/flow/internal/SafeCollector;-><init>(Lkotlinx/coroutines/flow/FlowCollector;Lkotlin/coroutines/CoroutineContext;)V
+HSPLkotlinx/coroutines/flow/internal/SendingCollector;-><init>(Lkotlinx/coroutines/channels/ProducerScope;)V
+HSPLkotlinx/coroutines/flow/internal/SendingCollector;->emit(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
+HSPLkotlinx/coroutines/flow/internal/SubscriptionCountStateFlow;-><init>(I)V
+HSPLkotlinx/coroutines/internal/AtomicOp;-><clinit>()V
+HSPLkotlinx/coroutines/internal/AtomicOp;-><init>()V
+HSPLkotlinx/coroutines/internal/AtomicOp;->perform(Ljava/lang/Object;)Ljava/lang/Object;
+HSPLkotlinx/coroutines/internal/ConcurrentLinkedListNode;-><clinit>()V
+HSPLkotlinx/coroutines/internal/ConcurrentLinkedListNode;-><init>(Lkotlinx/coroutines/internal/ConcurrentLinkedListNode;)V
+HSPLkotlinx/coroutines/internal/ConcurrentLinkedListNode;->cleanPrev()V
+HSPLkotlinx/coroutines/internal/ConcurrentLinkedListNode;->getNext()Lkotlinx/coroutines/internal/ConcurrentLinkedListNode;
+HSPLkotlinx/coroutines/internal/ContextScope;-><init>(Lkotlin/coroutines/CoroutineContext;)V
+HSPLkotlinx/coroutines/internal/ContextScope;->getCoroutineContext()Lkotlin/coroutines/CoroutineContext;
+HSPLkotlinx/coroutines/internal/DispatchedContinuation;-><clinit>()V
+HSPLkotlinx/coroutines/internal/DispatchedContinuation;-><init>(Lkotlinx/coroutines/CoroutineDispatcher;Lkotlin/coroutines/jvm/internal/ContinuationImpl;)V
+HSPLkotlinx/coroutines/internal/DispatchedContinuation;->getContext()Lkotlin/coroutines/CoroutineContext;
+HSPLkotlinx/coroutines/internal/DispatchedContinuation;->getDelegate$kotlinx_coroutines_core()Lkotlin/coroutines/Continuation;
+HSPLkotlinx/coroutines/internal/DispatchedContinuation;->resumeWith(Ljava/lang/Object;)V
+HSPLkotlinx/coroutines/internal/DispatchedContinuation;->takeState$kotlinx_coroutines_core()Ljava/lang/Object;
+HSPLkotlinx/coroutines/internal/LimitedDispatcher;-><clinit>()V
+HSPLkotlinx/coroutines/internal/LimitedDispatcher;-><init>(Lkotlinx/coroutines/scheduling/UnlimitedIoScheduler;I)V
+HSPLkotlinx/coroutines/internal/LockFreeLinkedListNode$toString$1;-><init>(ILjava/lang/Object;)V
+HSPLkotlinx/coroutines/internal/LockFreeLinkedListNode;-><clinit>()V
+HSPLkotlinx/coroutines/internal/LockFreeLinkedListNode;-><init>()V
+HSPLkotlinx/coroutines/internal/LockFreeLinkedListNode;->correctPrev()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;->isRemoved()Z
+HSPLkotlinx/coroutines/internal/LockFreeTaskQueue;-><clinit>()V
+HSPLkotlinx/coroutines/internal/LockFreeTaskQueue;-><init>()V
+HSPLkotlinx/coroutines/internal/LockFreeTaskQueueCore;-><clinit>()V
+HSPLkotlinx/coroutines/internal/LockFreeTaskQueueCore;-><init>(IZ)V
+HSPLkotlinx/coroutines/internal/MainDispatcherLoader;-><clinit>()V
+HSPLkotlinx/coroutines/internal/Removed;-><init>(Lkotlinx/coroutines/internal/LockFreeLinkedListNode;)V
+HSPLkotlinx/coroutines/internal/ResizableAtomicArray;-><init>(I)V
+HSPLkotlinx/coroutines/internal/ScopeCoroutine;-><init>(Lkotlin/coroutines/Continuation;Lkotlin/coroutines/CoroutineContext;)V
+HSPLkotlinx/coroutines/internal/ScopeCoroutine;->afterCompletion(Ljava/lang/Object;)V
+HSPLkotlinx/coroutines/internal/ScopeCoroutine;->afterResume(Ljava/lang/Object;)V
+HSPLkotlinx/coroutines/internal/ScopeCoroutine;->isScopedCoroutine()Z
+HSPLkotlinx/coroutines/internal/Segment;-><clinit>()V
+HSPLkotlinx/coroutines/internal/Segment;-><init>(JLkotlinx/coroutines/internal/Segment;I)V
+HSPLkotlinx/coroutines/internal/Segment;->decPointers$kotlinx_coroutines_core()Z
+HSPLkotlinx/coroutines/internal/Segment;->isRemoved()Z
+HSPLkotlinx/coroutines/internal/Segment;->onSlotCleaned()V
+HSPLkotlinx/coroutines/internal/Segment;->tryIncPointers$kotlinx_coroutines_core()Z
+HSPLkotlinx/coroutines/internal/Symbol;-><init>(ILjava/lang/String;)V
+HSPLkotlinx/coroutines/internal/SystemPropsKt__SystemPropsKt;-><clinit>()V
+HSPLkotlinx/coroutines/scheduling/CoroutineScheduler;-><clinit>()V
+HSPLkotlinx/coroutines/scheduling/CoroutineScheduler;-><init>(IIJLjava/lang/String;)V
+HSPLkotlinx/coroutines/scheduling/DefaultIoScheduler;-><clinit>()V
+HSPLkotlinx/coroutines/scheduling/DefaultScheduler;-><clinit>()V
+HSPLkotlinx/coroutines/scheduling/DefaultScheduler;-><init>()V
+HSPLkotlinx/coroutines/scheduling/NanoTimeSource;-><clinit>()V
+HSPLkotlinx/coroutines/scheduling/SchedulerCoroutineDispatcher;-><init>(IIJLjava/lang/String;)V
+HSPLkotlinx/coroutines/scheduling/Task;-><init>(JLkotlin/ULong$Companion;)V
+HSPLkotlinx/coroutines/scheduling/TasksKt;-><clinit>()V
+HSPLkotlinx/coroutines/scheduling/UnlimitedIoScheduler;-><clinit>()V
+HSPLkotlinx/coroutines/sync/MutexImpl$CancellableContinuationWithOwner$resume$2;-><init>(Lkotlinx/coroutines/sync/MutexImpl;Lkotlinx/coroutines/sync/MutexImpl$CancellableContinuationWithOwner;I)V
+HSPLkotlinx/coroutines/sync/MutexImpl$CancellableContinuationWithOwner;-><init>(Lkotlinx/coroutines/sync/MutexImpl;Lkotlinx/coroutines/CancellableContinuationImpl;)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;Lkotlin/jvm/functions/Function1;)Lkotlinx/coroutines/internal/Symbol;
+HSPLkotlinx/coroutines/sync/MutexImpl;-><clinit>()V
+HSPLkotlinx/coroutines/sync/MutexImpl;-><init>(Z)V
+HSPLkotlinx/coroutines/sync/MutexImpl;->isLocked()Z
+HSPLkotlinx/coroutines/sync/MutexImpl;->lock(Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
+HSPLkotlinx/coroutines/sync/MutexImpl;->unlock(Ljava/lang/Object;)V
+HSPLkotlinx/coroutines/sync/SemaphoreImpl$addAcquireToQueue$createNewSegment$1;-><clinit>()V
+HSPLkotlinx/coroutines/sync/SemaphoreImpl$addAcquireToQueue$createNewSegment$1;-><init>()V
+HSPLkotlinx/coroutines/sync/SemaphoreImpl$tryResumeNextFromQueue$createNewSegment$1;-><clinit>()V
+HSPLkotlinx/coroutines/sync/SemaphoreImpl$tryResumeNextFromQueue$createNewSegment$1;-><init>()V
+HSPLkotlinx/coroutines/sync/SemaphoreImpl;-><clinit>()V
+HSPLkotlinx/coroutines/sync/SemaphoreImpl;-><init>(I)V
+HSPLkotlinx/coroutines/sync/SemaphoreImpl;->acquire(Lkotlinx/coroutines/sync/MutexImpl$CancellableContinuationWithOwner;)V
+HSPLkotlinx/coroutines/sync/SemaphoreImpl;->release()V
+HSPLkotlinx/coroutines/sync/SemaphoreKt;-><clinit>()V
+HSPLkotlinx/coroutines/sync/SemaphoreSegment;-><init>(JLkotlinx/coroutines/sync/SemaphoreSegment;I)V
+HSPLkotlinx/coroutines/sync/SemaphoreSegment;->getNumberOfSlots()I
+HSPLokhttp3/Headers$Builder;-><init>()V
+HSPLokhttp3/Headers$Builder;->add(I)V
+HSPLokhttp3/Headers$Builder;->takeMax()I
+HSPLokhttp3/MediaType;-><clinit>()V
+HSPLokhttp3/MediaType;->Channel$default(ILkotlinx/coroutines/channels/BufferOverflow;I)Lkotlinx/coroutines/channels/BufferedChannel;
+HSPLokhttp3/MediaType;->CompositionLocalProvider(Landroidx/compose/runtime/ProvidedValue;Lkotlin/jvm/functions/Function2;Landroidx/compose/runtime/Composer;I)V
+HSPLokhttp3/MediaType;->CoroutineScope(Lkotlin/coroutines/CoroutineContext;)Lkotlinx/coroutines/internal/ContextScope;
+HSPLokhttp3/MediaType;->LazyLayoutPinnableItem(Ljava/lang/Object;ILandroidx/compose/foundation/lazy/layout/LazyLayoutPinnedItemList;Lkotlin/jvm/functions/Function2;Landroidx/compose/runtime/Composer;I)V
+HSPLokhttp3/MediaType;->LazySaveableStateHolderProvider(Lkotlin/jvm/functions/Function3;Landroidx/compose/runtime/Composer;I)V
+HSPLokhttp3/MediaType;->Offset(FF)J
+HSPLokhttp3/MediaType;->ParagraphIntrinsics(Landroidx/compose/ui/text/TextStyle;Landroidx/compose/ui/text/font/FontFamily$Resolver;Landroidx/compose/ui/unit/Density;Ljava/lang/String;Ljava/util/List;Ljava/util/List;)Landroidx/compose/ui/text/platform/AndroidParagraphIntrinsics;
+HSPLokhttp3/MediaType;->RoundRect-gG7oq9Y(FFFFJ)Landroidx/compose/ui/geometry/RoundRect;
+HSPLokhttp3/MediaType;->TextRange(II)J
+HSPLokhttp3/MediaType;->access$SkippableItem-JVlU9Rs(Landroidx/compose/foundation/lazy/layout/LazyLayoutItemProvider;Ljava/lang/Object;ILjava/lang/Object;Landroidx/compose/runtime/Composer;I)V
+HSPLokhttp3/MediaType;->access$checkIndex(ILjava/util/List;)V
+HSPLokhttp3/MediaType;->access$containsMark([II)Z
+HSPLokhttp3/MediaType;->access$groupSize([II)I
+HSPLokhttp3/MediaType;->access$hasAux([II)Z
+HSPLokhttp3/MediaType;->access$isChainUpdate(Landroidx/compose/ui/node/BackwardsCompatNode;)Z
+HSPLokhttp3/MediaType;->access$isNode([II)Z
+HSPLokhttp3/MediaType;->access$nodeCount([II)I
+HSPLokhttp3/MediaType;->access$slotAnchor([II)I
+HSPLokhttp3/MediaType;->access$updateGroupSize([III)V
+HSPLokhttp3/MediaType;->access$updateNodeCount([III)V
+HSPLokhttp3/MediaType;->adapt$default(Landroidx/compose/ui/graphics/colorspace/ColorSpace;)Landroidx/compose/ui/graphics/colorspace/ColorSpace;
+HSPLokhttp3/MediaType;->cancel(Lkotlinx/coroutines/CoroutineScope;Landroidx/lifecycle/LifecycleDestroyedException;)V
+HSPLokhttp3/MediaType;->ceilToIntPx(F)I
+HSPLokhttp3/MediaType;->checkParallelism(I)V
+HSPLokhttp3/MediaType;->chromaticAdaptation([F[F[F)[F
+HSPLokhttp3/MediaType;->coerceIn-8ffj60Q(IJ)J
+HSPLokhttp3/MediaType;->collectIsPressedAsState(Landroidx/compose/foundation/interaction/InteractionSource;Landroidx/compose/runtime/Composer;I)Landroidx/compose/runtime/MutableState;
+HSPLokhttp3/MediaType;->colors-u3YEpmA(JJJJJJJJJJJJLandroidx/compose/runtime/Composer;II)Landroidx/tv/material3/ToggleableSurfaceColors;
+HSPLokhttp3/MediaType;->compare(Landroidx/compose/ui/graphics/colorspace/WhitePoint;Landroidx/compose/ui/graphics/colorspace/WhitePoint;)Z
+HSPLokhttp3/MediaType;->coroutineScope(Lkotlin/jvm/functions/Function2;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
+HSPLokhttp3/MediaType;->countOneBits(I)I
+HSPLokhttp3/MediaType;->createFontFamilyResolver(Landroid/content/Context;)Landroidx/compose/ui/text/font/FontFamilyResolverImpl;
+HSPLokhttp3/MediaType;->foldCopies(Lkotlin/coroutines/CoroutineContext;Lkotlin/coroutines/CoroutineContext;Z)Lkotlin/coroutines/CoroutineContext;
+HSPLokhttp3/MediaType;->getCharSequenceBounds(Landroid/text/TextPaint;Ljava/lang/CharSequence;II)Landroid/graphics/Rect;
+HSPLokhttp3/MediaType;->getFontFamilyResult(Landroid/content/Context;Landroidx/core/provider/FontRequest;)Landroidx/compose/ui/input/pointer/util/PointerIdArray;
+HSPLokhttp3/MediaType;->getOrNull(Landroidx/compose/ui/semantics/SemanticsConfiguration;Landroidx/compose/ui/semantics/SemanticsPropertyKey;)Ljava/lang/Object;
+HSPLokhttp3/MediaType;->getSegment-impl(Ljava/lang/Object;)Lkotlinx/coroutines/internal/Segment;
+HSPLokhttp3/MediaType;->inverse3x3([F)[F
+HSPLokhttp3/MediaType;->invokeComposable(Landroidx/compose/runtime/Composer;Lkotlin/jvm/functions/Function2;)V
+HSPLokhttp3/MediaType;->invokeOnCompletion$default(Lkotlinx/coroutines/Job;ZLkotlinx/coroutines/JobNode;I)Lkotlinx/coroutines/DisposableHandle;
+HSPLokhttp3/MediaType;->isActive(Lkotlinx/coroutines/CoroutineScope;)Z
+HSPLokhttp3/MediaType;->isClosed-impl(Ljava/lang/Object;)Z
+HSPLokhttp3/MediaType;->mul3x3([F[F)[F
+HSPLokhttp3/MediaType;->mul3x3Diag([F[F)[F
+HSPLokhttp3/MediaType;->mul3x3Float3([F[F)V
+HSPLokhttp3/MediaType;->mul3x3Float3_0([FFFF)F
+HSPLokhttp3/MediaType;->mul3x3Float3_1([FFFF)F
+HSPLokhttp3/MediaType;->mul3x3Float3_2([FFFF)F
+HSPLokhttp3/MediaType;->search(Ljava/util/ArrayList;II)I
+HSPLokhttp3/MediaType;->set-impl(Landroidx/compose/runtime/Composer;Ljava/lang/Object;Lkotlin/jvm/functions/Function2;)V
+HSPLokhttp3/MediaType;->setInt-A6tL2VI(Landroidx/compose/runtime/changelist/Operations;II)V
+HSPLokhttp3/MediaType;->setObject-DKhxnng(Landroidx/compose/runtime/changelist/Operations;ILjava/lang/Object;)V
+HSPLokhttp3/MediaType;->shape(Landroidx/compose/ui/graphics/RectangleShapeKt$RectangleShape$1;Landroidx/compose/runtime/Composer;I)Landroidx/tv/material3/ToggleableSurfaceShape;
+HSPLokhttp3/MediaType;->toArray(Ljava/util/Collection;)[Ljava/lang/Object;
+HSPLokhttp3/MediaType;->updateChangedFlags(I)I
+L_COROUTINE/ArtificialStackFrames;
+Landroidx/activity/ComponentActivity$$ExternalSyntheticLambda0;
+Landroidx/activity/ComponentActivity$$ExternalSyntheticLambda1;
+Landroidx/activity/ComponentActivity$$ExternalSyntheticLambda2;
+Landroidx/activity/ComponentActivity$$ExternalSyntheticLambda3;
+Landroidx/activity/ComponentActivity$1;
+Landroidx/activity/ComponentActivity$2;
+Landroidx/activity/ComponentActivity$3;
+Landroidx/activity/ComponentActivity$4;
+Landroidx/activity/ComponentActivity$5;
+Landroidx/activity/ComponentActivity$NonConfigurationInstances;
+Landroidx/activity/ComponentActivity$ReportFullyDrawnExecutorApi16Impl;
+Landroidx/activity/ComponentActivity;
+Landroidx/activity/FullyDrawnReporter;
+Landroidx/activity/OnBackPressedDispatcher;
+Landroidx/activity/compose/ComponentActivityKt;
+Landroidx/activity/contextaware/ContextAwareHelper;
+Landroidx/activity/result/ActivityResult$1;
+Landroidx/arch/core/executor/ArchTaskExecutor;
+Landroidx/arch/core/executor/DefaultTaskExecutor$1;
+Landroidx/arch/core/executor/DefaultTaskExecutor;
+Landroidx/arch/core/internal/FastSafeIterableMap;
+Landroidx/arch/core/internal/SafeIterableMap$AscendingIterator;
+Landroidx/arch/core/internal/SafeIterableMap$Entry;
+Landroidx/arch/core/internal/SafeIterableMap$IteratorWithAdditions;
+Landroidx/arch/core/internal/SafeIterableMap$ListIterator;
+Landroidx/arch/core/internal/SafeIterableMap$SupportRemove;
+Landroidx/arch/core/internal/SafeIterableMap;
+Landroidx/collection/ArrayMap;
+Landroidx/collection/ArraySet;
+Landroidx/collection/LongSparseArray;
+Landroidx/collection/SimpleArrayMap;
+Landroidx/collection/SparseArrayCompat;
+Landroidx/compose/animation/FlingCalculator;
+Landroidx/compose/animation/FlingCalculatorKt;
+Landroidx/compose/animation/SingleValueAnimationKt;
+Landroidx/compose/animation/SplineBasedFloatDecayAnimationSpec;
+Landroidx/compose/animation/SplineBasedFloatDecayAnimationSpec_androidKt;
+Landroidx/compose/animation/core/Animatable$runAnimation$2;
+Landroidx/compose/animation/core/Animatable;
+Landroidx/compose/animation/core/AnimateAsStateKt$animateValueAsState$2;
+Landroidx/compose/animation/core/AnimateAsStateKt$animateValueAsState$3$1;
+Landroidx/compose/animation/core/AnimateAsStateKt$animateValueAsState$3;
+Landroidx/compose/animation/core/AnimateAsStateKt;
+Landroidx/compose/animation/core/Animation;
+Landroidx/compose/animation/core/AnimationEndReason$EnumUnboxingLocalUtility;
+Landroidx/compose/animation/core/AnimationResult;
+Landroidx/compose/animation/core/AnimationScope;
+Landroidx/compose/animation/core/AnimationSpec;
+Landroidx/compose/animation/core/AnimationState;
+Landroidx/compose/animation/core/AnimationVector1D;
+Landroidx/compose/animation/core/AnimationVector2D;
+Landroidx/compose/animation/core/AnimationVector3D;
+Landroidx/compose/animation/core/AnimationVector4D;
+Landroidx/compose/animation/core/AnimationVector;
+Landroidx/compose/animation/core/Animations;
+Landroidx/compose/animation/core/ComplexDouble;
+Landroidx/compose/animation/core/CubicBezierEasing;
+Landroidx/compose/animation/core/DecayAnimationSpecImpl;
+Landroidx/compose/animation/core/Easing;
+Landroidx/compose/animation/core/EasingKt$$ExternalSyntheticLambda0;
+Landroidx/compose/animation/core/EasingKt;
+Landroidx/compose/animation/core/FloatAnimationSpec;
+Landroidx/compose/animation/core/FloatDecayAnimationSpec;
+Landroidx/compose/animation/core/FloatSpringSpec;
+Landroidx/compose/animation/core/FloatTweenSpec;
+Landroidx/compose/animation/core/MutatorMutex$Mutator;
+Landroidx/compose/animation/core/MutatorMutex$mutate$2;
+Landroidx/compose/animation/core/MutatorMutex;
+Landroidx/compose/animation/core/SpringSimulation;
+Landroidx/compose/animation/core/SpringSpec;
+Landroidx/compose/animation/core/SuspendAnimationKt$animate$4;
+Landroidx/compose/animation/core/SuspendAnimationKt$animate$6;
+Landroidx/compose/animation/core/SuspendAnimationKt$animate$7;
+Landroidx/compose/animation/core/SuspendAnimationKt$animate$9;
+Landroidx/compose/animation/core/TargetBasedAnimation;
+Landroidx/compose/animation/core/TweenSpec;
+Landroidx/compose/animation/core/TwoWayConverterImpl;
+Landroidx/compose/animation/core/VectorConvertersKt;
+Landroidx/compose/animation/core/VectorizedDurationBasedAnimationSpec;
+Landroidx/compose/animation/core/VectorizedFiniteAnimationSpec;
+Landroidx/compose/animation/core/VectorizedFloatAnimationSpec;
+Landroidx/compose/animation/core/VectorizedSpringSpec;
+Landroidx/compose/animation/core/VectorizedTweenSpec;
+Landroidx/compose/animation/core/VisibilityThresholdsKt;
+Landroidx/compose/foundation/AndroidEdgeEffectOverscrollEffect$effectModifier$1;
+Landroidx/compose/foundation/AndroidEdgeEffectOverscrollEffect$onNewSize$1;
+Landroidx/compose/foundation/AndroidEdgeEffectOverscrollEffect;
+Landroidx/compose/foundation/AndroidOverscrollKt;
+Landroidx/compose/foundation/Api31Impl;
+Landroidx/compose/foundation/BackgroundElement;
+Landroidx/compose/foundation/BackgroundNode;
+Landroidx/compose/foundation/BorderCache;
+Landroidx/compose/foundation/BorderKt$drawRectBorder$1;
+Landroidx/compose/foundation/BorderModifierNode$drawGenericBorder$3;
+Landroidx/compose/foundation/BorderModifierNode$drawRoundRectBorder$1;
+Landroidx/compose/foundation/BorderModifierNode;
+Landroidx/compose/foundation/BorderModifierNodeElement;
+Landroidx/compose/foundation/BorderStroke;
+Landroidx/compose/foundation/ClipScrollableContainerKt;
+Landroidx/compose/foundation/DrawOverscrollModifier;
+Landroidx/compose/foundation/FocusableElement;
+Landroidx/compose/foundation/FocusableInteractionNode$emitWithFallback$1;
+Landroidx/compose/foundation/FocusableInteractionNode;
+Landroidx/compose/foundation/FocusableKt$FocusableInNonTouchModeElement$1;
+Landroidx/compose/foundation/FocusableKt;
+Landroidx/compose/foundation/FocusableNode$onFocusEvent$1;
+Landroidx/compose/foundation/FocusableNode;
+Landroidx/compose/foundation/FocusablePinnableContainerNode;
+Landroidx/compose/foundation/FocusableSemanticsNode;
+Landroidx/compose/foundation/FocusedBoundsKt;
+Landroidx/compose/foundation/FocusedBoundsNode;
+Landroidx/compose/foundation/FocusedBoundsObserverNode;
+Landroidx/compose/foundation/ImageKt$Image$1$1;
+Landroidx/compose/foundation/ImageKt$Image$1;
+Landroidx/compose/foundation/ImageKt$Image$2;
+Landroidx/compose/foundation/ImageKt;
+Landroidx/compose/foundation/Indication;
+Landroidx/compose/foundation/IndicationInstance;
+Landroidx/compose/foundation/IndicationKt$indication$2;
+Landroidx/compose/foundation/IndicationKt;
+Landroidx/compose/foundation/IndicationModifier;
+Landroidx/compose/foundation/MutatePriority;
+Landroidx/compose/foundation/MutatorMutex$Mutator;
+Landroidx/compose/foundation/MutatorMutex$mutateWith$2;
+Landroidx/compose/foundation/MutatorMutex;
+Landroidx/compose/foundation/OverscrollConfiguration;
+Landroidx/compose/foundation/OverscrollConfigurationKt;
+Landroidx/compose/foundation/OverscrollEffect;
+Landroidx/compose/foundation/ScrollKt$rememberScrollState$1$1;
+Landroidx/compose/foundation/ScrollKt$scroll$2$semantics$1$1;
+Landroidx/compose/foundation/ScrollKt$scroll$2$semantics$1;
+Landroidx/compose/foundation/ScrollKt$scroll$2;
+Landroidx/compose/foundation/ScrollState$canScrollForward$2;
+Landroidx/compose/foundation/ScrollState;
+Landroidx/compose/foundation/ScrollingLayoutElement;
+Landroidx/compose/foundation/ScrollingLayoutNode;
+Landroidx/compose/foundation/gestures/BringIntoViewRequestPriorityQueue;
+Landroidx/compose/foundation/gestures/BringIntoViewSpec$Companion$DefaultBringIntoViewSpec$1;
+Landroidx/compose/foundation/gestures/BringIntoViewSpec$Companion;
+Landroidx/compose/foundation/gestures/BringIntoViewSpec;
+Landroidx/compose/foundation/gestures/ContentInViewNode$Request;
+Landroidx/compose/foundation/gestures/ContentInViewNode$launchAnimation$2$1;
+Landroidx/compose/foundation/gestures/ContentInViewNode$launchAnimation$2;
+Landroidx/compose/foundation/gestures/ContentInViewNode;
+Landroidx/compose/foundation/gestures/DefaultFlingBehavior;
+Landroidx/compose/foundation/gestures/DefaultScrollableState$scroll$2$1;
+Landroidx/compose/foundation/gestures/DefaultScrollableState$scroll$2;
+Landroidx/compose/foundation/gestures/DefaultScrollableState$scrollScope$1;
+Landroidx/compose/foundation/gestures/DefaultScrollableState;
+Landroidx/compose/foundation/gestures/DraggableKt$awaitDrag$2;
+Landroidx/compose/foundation/gestures/DraggableNode$onAttach$1;
+Landroidx/compose/foundation/gestures/DraggableNode$pointerInputNode$1;
+Landroidx/compose/foundation/gestures/DraggableNode;
+Landroidx/compose/foundation/gestures/FlingBehavior;
+Landroidx/compose/foundation/gestures/ModifierLocalScrollableContainerProvider;
+Landroidx/compose/foundation/gestures/MouseWheelScrollNode$1;
+Landroidx/compose/foundation/gestures/MouseWheelScrollNode;
+Landroidx/compose/foundation/gestures/Orientation;
+Landroidx/compose/foundation/gestures/ScrollDraggableState;
+Landroidx/compose/foundation/gestures/ScrollScope;
+Landroidx/compose/foundation/gestures/ScrollableElement;
+Landroidx/compose/foundation/gestures/ScrollableGesturesNode$onDragStopped$1;
+Landroidx/compose/foundation/gestures/ScrollableGesturesNode;
+Landroidx/compose/foundation/gestures/ScrollableKt$DefaultScrollMotionDurationScale$1;
+Landroidx/compose/foundation/gestures/ScrollableKt$NoOpOnDragStarted$1;
+Landroidx/compose/foundation/gestures/ScrollableKt$NoOpScrollScope$1;
+Landroidx/compose/foundation/gestures/ScrollableKt$UnityDensity$1;
+Landroidx/compose/foundation/gestures/ScrollableKt;
+Landroidx/compose/foundation/gestures/ScrollableNestedScrollConnection;
+Landroidx/compose/foundation/gestures/ScrollableNode;
+Landroidx/compose/foundation/gestures/ScrollableState;
+Landroidx/compose/foundation/gestures/ScrollingLogic;
+Landroidx/compose/foundation/gestures/UpdatableAnimationState$animateToZero$1;
+Landroidx/compose/foundation/gestures/UpdatableAnimationState$animateToZero$4;
+Landroidx/compose/foundation/gestures/UpdatableAnimationState;
+Landroidx/compose/foundation/interaction/FocusInteraction$Focus;
+Landroidx/compose/foundation/interaction/FocusInteraction$Unfocus;
+Landroidx/compose/foundation/interaction/FocusInteractionKt$collectIsFocusedAsState$1$1$1;
+Landroidx/compose/foundation/interaction/FocusInteractionKt$collectIsFocusedAsState$1$1;
+Landroidx/compose/foundation/interaction/Interaction;
+Landroidx/compose/foundation/interaction/InteractionSource;
+Landroidx/compose/foundation/interaction/MutableInteractionSourceImpl;
+Landroidx/compose/foundation/interaction/PressInteraction$Press;
+Landroidx/compose/foundation/interaction/PressInteraction$Release;
+Landroidx/compose/foundation/interaction/PressInteractionKt$collectIsPressedAsState$1$1;
+Landroidx/compose/foundation/layout/Arrangement$Center$1;
+Landroidx/compose/foundation/layout/Arrangement$End$1;
+Landroidx/compose/foundation/layout/Arrangement$Horizontal;
+Landroidx/compose/foundation/layout/Arrangement$SpacedAligned;
+Landroidx/compose/foundation/layout/Arrangement$Top$1;
+Landroidx/compose/foundation/layout/Arrangement$Vertical;
+Landroidx/compose/foundation/layout/Arrangement;
+Landroidx/compose/foundation/layout/BoxKt$Box$2;
+Landroidx/compose/foundation/layout/BoxKt$EmptyBoxMeasurePolicy$1;
+Landroidx/compose/foundation/layout/BoxKt$boxMeasurePolicy$1$2;
+Landroidx/compose/foundation/layout/BoxKt$boxMeasurePolicy$1;
+Landroidx/compose/foundation/layout/BoxKt;
+Landroidx/compose/foundation/layout/BoxScope;
+Landroidx/compose/foundation/layout/BoxScopeInstance;
+Landroidx/compose/foundation/layout/ColumnKt;
+Landroidx/compose/foundation/layout/CrossAxisAlignment$VerticalCrossAxisAlignment;
+Landroidx/compose/foundation/layout/FillElement;
+Landroidx/compose/foundation/layout/FillNode;
+Landroidx/compose/foundation/layout/HorizontalAlignElement;
+Landroidx/compose/foundation/layout/HorizontalAlignNode;
+Landroidx/compose/foundation/layout/OffsetElement;
+Landroidx/compose/foundation/layout/OffsetKt;
+Landroidx/compose/foundation/layout/OffsetNode$measure$1;
+Landroidx/compose/foundation/layout/OffsetNode;
+Landroidx/compose/foundation/layout/PaddingElement;
+Landroidx/compose/foundation/layout/PaddingNode;
+Landroidx/compose/foundation/layout/PaddingValuesImpl;
+Landroidx/compose/foundation/layout/RowColumnImplKt$rowColumnMeasurePolicy$1;
+Landroidx/compose/foundation/layout/RowColumnMeasureHelperResult;
+Landroidx/compose/foundation/layout/RowColumnMeasurementHelper;
+Landroidx/compose/foundation/layout/RowColumnParentData;
+Landroidx/compose/foundation/layout/RowKt$DefaultRowMeasurePolicy$1;
+Landroidx/compose/foundation/layout/RowKt$rowMeasurePolicy$1$1;
+Landroidx/compose/foundation/layout/RowKt;
+Landroidx/compose/foundation/layout/RowScope;
+Landroidx/compose/foundation/layout/RowScopeInstance;
+Landroidx/compose/foundation/layout/SizeElement;
+Landroidx/compose/foundation/layout/SizeKt;
+Landroidx/compose/foundation/layout/SizeNode;
+Landroidx/compose/foundation/layout/SpacerMeasurePolicy;
+Landroidx/compose/foundation/layout/WrapContentElement;
+Landroidx/compose/foundation/layout/WrapContentNode$measure$1;
+Landroidx/compose/foundation/layout/WrapContentNode;
+Landroidx/compose/foundation/lazy/layout/DefaultLazyKey;
+Landroidx/compose/foundation/lazy/layout/IntervalList$Interval;
+Landroidx/compose/foundation/lazy/layout/LazyLayoutIntervalContent$Interval;
+Landroidx/compose/foundation/lazy/layout/LazyLayoutItemContentFactory$CachedItemContent;
+Landroidx/compose/foundation/lazy/layout/LazyLayoutItemContentFactory;
+Landroidx/compose/foundation/lazy/layout/LazyLayoutItemProvider;
+Landroidx/compose/foundation/lazy/layout/LazyLayoutItemReusePolicy;
+Landroidx/compose/foundation/lazy/layout/LazyLayoutKt$LazyLayout$3$2$1;
+Landroidx/compose/foundation/lazy/layout/LazyLayoutKt$LazyLayout$3$itemContentFactory$1$1;
+Landroidx/compose/foundation/lazy/layout/LazyLayoutKt$LazyLayout$3;
+Landroidx/compose/foundation/lazy/layout/LazyLayoutMeasureScopeImpl;
+Landroidx/compose/foundation/lazy/layout/LazyLayoutPinnableItem;
+Landroidx/compose/foundation/lazy/layout/LazyLayoutPinnedItemList;
+Landroidx/compose/foundation/lazy/layout/LazyLayoutPrefetchState$PrefetchHandle;
+Landroidx/compose/foundation/lazy/layout/LazyLayoutPrefetchState$Prefetcher;
+Landroidx/compose/foundation/lazy/layout/LazyLayoutPrefetchState;
+Landroidx/compose/foundation/lazy/layout/LazyLayoutPrefetcher$PrefetchRequest;
+Landroidx/compose/foundation/lazy/layout/LazyLayoutPrefetcher;
+Landroidx/compose/foundation/lazy/layout/LazySaveableStateHolder$1;
+Landroidx/compose/foundation/lazy/layout/LazySaveableStateHolder$SaveableStateProvider$2$invoke$$inlined$onDispose$1;
+Landroidx/compose/foundation/lazy/layout/LazySaveableStateHolder;
+Landroidx/compose/foundation/lazy/layout/MutableIntervalList;
+Landroidx/compose/foundation/relocation/BringIntoViewChildNode;
+Landroidx/compose/foundation/relocation/BringIntoViewKt;
+Landroidx/compose/foundation/relocation/BringIntoViewParent;
+Landroidx/compose/foundation/relocation/BringIntoViewRequesterImpl$bringIntoView$1;
+Landroidx/compose/foundation/relocation/BringIntoViewRequesterImpl;
+Landroidx/compose/foundation/relocation/BringIntoViewRequesterNode;
+Landroidx/compose/foundation/relocation/BringIntoViewResponder;
+Landroidx/compose/foundation/relocation/BringIntoViewResponderNode$bringChildIntoView$2$1$1;
+Landroidx/compose/foundation/relocation/BringIntoViewResponderNode$bringChildIntoView$2$1;
+Landroidx/compose/foundation/relocation/BringIntoViewResponderNode$bringChildIntoView$2$2;
+Landroidx/compose/foundation/relocation/BringIntoViewResponderNode$bringChildIntoView$2;
+Landroidx/compose/foundation/relocation/BringIntoViewResponderNode$bringChildIntoView$parentRect$1;
+Landroidx/compose/foundation/relocation/BringIntoViewResponderNode;
+Landroidx/compose/foundation/relocation/BringIntoViewResponder_androidKt$defaultBringIntoViewParent$1;
+Landroidx/compose/foundation/shape/CornerBasedShape;
+Landroidx/compose/foundation/shape/CornerSize;
+Landroidx/compose/foundation/shape/DpCornerSize;
+Landroidx/compose/foundation/shape/GenericShape;
+Landroidx/compose/foundation/shape/PercentCornerSize;
+Landroidx/compose/foundation/shape/RoundedCornerShape;
+Landroidx/compose/foundation/shape/RoundedCornerShapeKt;
+Landroidx/compose/foundation/text/EmptyMeasurePolicy;
+Landroidx/compose/foundation/text/modifiers/InlineDensity;
+Landroidx/compose/foundation/text/modifiers/MinLinesConstrainer;
+Landroidx/compose/foundation/text/modifiers/MultiParagraphLayoutCache;
+Landroidx/compose/foundation/text/modifiers/TextAnnotatedStringElement;
+Landroidx/compose/foundation/text/modifiers/TextAnnotatedStringNode$TextSubstitutionValue;
+Landroidx/compose/foundation/text/modifiers/TextAnnotatedStringNode;
+Landroidx/compose/foundation/text/selection/SelectionRegistrarKt;
+Landroidx/compose/foundation/text/selection/TextSelectionColors;
+Landroidx/compose/foundation/text/selection/TextSelectionColorsKt;
+Landroidx/compose/material/ripple/AndroidRippleIndicationInstance;
+Landroidx/compose/material/ripple/PlatformRipple;
+Landroidx/compose/material/ripple/RippleAlpha;
+Landroidx/compose/material/ripple/RippleIndicationInstance;
+Landroidx/compose/material/ripple/RippleKt;
+Landroidx/compose/material/ripple/RippleTheme;
+Landroidx/compose/material/ripple/RippleThemeKt;
+Landroidx/compose/material3/ColorScheme;
+Landroidx/compose/material3/ColorSchemeKt;
+Landroidx/compose/material3/MaterialRippleTheme;
+Landroidx/compose/material3/MaterialThemeKt$MaterialTheme$2;
+Landroidx/compose/material3/ShapeDefaults;
+Landroidx/compose/material3/Shapes;
+Landroidx/compose/material3/ShapesKt$LocalShapes$1;
+Landroidx/compose/material3/ShapesKt;
+Landroidx/compose/material3/TextKt$ProvideTextStyle$1;
+Landroidx/compose/material3/TextKt$Text$1;
+Landroidx/compose/material3/TextKt;
+Landroidx/compose/material3/Typography;
+Landroidx/compose/material3/TypographyKt;
+Landroidx/compose/material3/tokens/ColorDarkTokens;
+Landroidx/compose/material3/tokens/PaletteTokens;
+Landroidx/compose/material3/tokens/ShapeTokens;
+Landroidx/compose/material3/tokens/TypeScaleTokens;
+Landroidx/compose/material3/tokens/TypefaceTokens;
+Landroidx/compose/material3/tokens/TypographyTokens;
+Landroidx/compose/runtime/Anchor;
+Landroidx/compose/runtime/Applier;
+Landroidx/compose/runtime/BroadcastFrameClock$FrameAwaiter;
+Landroidx/compose/runtime/BroadcastFrameClock;
+Landroidx/compose/runtime/ComposableSingletons$CompositionKt;
+Landroidx/compose/runtime/ComposeNodeLifecycleCallback;
+Landroidx/compose/runtime/Composer;
+Landroidx/compose/runtime/ComposerImpl$CompositionContextHolder;
+Landroidx/compose/runtime/ComposerImpl$CompositionContextImpl;
+Landroidx/compose/runtime/ComposerImpl$derivedStateObserver$1;
+Landroidx/compose/runtime/ComposerImpl;
+Landroidx/compose/runtime/Composition;
+Landroidx/compose/runtime/CompositionContext;
+Landroidx/compose/runtime/CompositionContextKt;
+Landroidx/compose/runtime/CompositionImpl$RememberEventDispatcher;
+Landroidx/compose/runtime/CompositionImpl;
+Landroidx/compose/runtime/CompositionKt;
+Landroidx/compose/runtime/CompositionLocal;
+Landroidx/compose/runtime/CompositionLocalMap$Companion;
+Landroidx/compose/runtime/CompositionLocalMap;
+Landroidx/compose/runtime/CompositionObserverHolder;
+Landroidx/compose/runtime/CompositionScopedCoroutineScopeCanceller;
+Landroidx/compose/runtime/DerivedSnapshotState$ResultRecord;
+Landroidx/compose/runtime/DerivedSnapshotState;
+Landroidx/compose/runtime/DerivedStateObserver;
+Landroidx/compose/runtime/DisposableEffectImpl;
+Landroidx/compose/runtime/DisposableEffectResult;
+Landroidx/compose/runtime/DisposableEffectScope;
+Landroidx/compose/runtime/DynamicProvidableCompositionLocal;
+Landroidx/compose/runtime/GroupInfo;
+Landroidx/compose/runtime/IntStack;
+Landroidx/compose/runtime/Invalidation;
+Landroidx/compose/runtime/JoinedKey;
+Landroidx/compose/runtime/KeyInfo;
+Landroidx/compose/runtime/Latch$await$2$2;
+Landroidx/compose/runtime/Latch;
+Landroidx/compose/runtime/LaunchedEffectImpl;
+Landroidx/compose/runtime/LazyValueHolder;
+Landroidx/compose/runtime/MonotonicFrameClock;
+Landroidx/compose/runtime/MovableContentStateReference;
+Landroidx/compose/runtime/MutableFloatState;
+Landroidx/compose/runtime/MutableIntState;
+Landroidx/compose/runtime/MutableState;
+Landroidx/compose/runtime/OpaqueKey;
+Landroidx/compose/runtime/ParcelableSnapshotMutableFloatState;
+Landroidx/compose/runtime/ParcelableSnapshotMutableIntState;
+Landroidx/compose/runtime/ParcelableSnapshotMutableState$Companion$CREATOR$1;
+Landroidx/compose/runtime/ParcelableSnapshotMutableState;
+Landroidx/compose/runtime/PausableMonotonicFrameClock$withFrameNanos$1;
+Landroidx/compose/runtime/PausableMonotonicFrameClock;
+Landroidx/compose/runtime/Pending$keyMap$2;
+Landroidx/compose/runtime/Pending;
+Landroidx/compose/runtime/PersistentCompositionLocalMap;
+Landroidx/compose/runtime/ProduceStateScopeImpl;
+Landroidx/compose/runtime/ProvidableCompositionLocal;
+Landroidx/compose/runtime/ProvidedValue;
+Landroidx/compose/runtime/RecomposeScope;
+Landroidx/compose/runtime/RecomposeScopeImpl$end$1$2;
+Landroidx/compose/runtime/RecomposeScopeImpl;
+Landroidx/compose/runtime/RecomposeScopeOwner;
+Landroidx/compose/runtime/Recomposer$State;
+Landroidx/compose/runtime/Recomposer$effectJob$1$1;
+Landroidx/compose/runtime/Recomposer$join$2;
+Landroidx/compose/runtime/Recomposer$performRecompose$1$1;
+Landroidx/compose/runtime/Recomposer$recompositionRunner$2$3;
+Landroidx/compose/runtime/Recomposer$recompositionRunner$2$unregisterApplyObserver$1;
+Landroidx/compose/runtime/Recomposer$recompositionRunner$2;
+Landroidx/compose/runtime/Recomposer$runRecomposeAndApplyChanges$2$1;
+Landroidx/compose/runtime/Recomposer$runRecomposeAndApplyChanges$2;
+Landroidx/compose/runtime/Recomposer;
+Landroidx/compose/runtime/ReferentialEqualityPolicy;
+Landroidx/compose/runtime/RememberObserver;
+Landroidx/compose/runtime/SkippableUpdater;
+Landroidx/compose/runtime/SlotReader;
+Landroidx/compose/runtime/SlotTable;
+Landroidx/compose/runtime/SlotWriter;
+Landroidx/compose/runtime/SnapshotMutableFloatStateImpl$FloatStateStateRecord;
+Landroidx/compose/runtime/SnapshotMutableFloatStateImpl;
+Landroidx/compose/runtime/SnapshotMutableIntStateImpl$IntStateStateRecord;
+Landroidx/compose/runtime/SnapshotMutableIntStateImpl;
+Landroidx/compose/runtime/SnapshotMutableStateImpl$StateStateRecord;
+Landroidx/compose/runtime/SnapshotMutableStateImpl;
+Landroidx/compose/runtime/SnapshotMutationPolicy;
+Landroidx/compose/runtime/SnapshotStateKt__DerivedStateKt;
+Landroidx/compose/runtime/SnapshotStateKt__ProduceStateKt$produceState$3;
+Landroidx/compose/runtime/SnapshotStateKt__SnapshotFlowKt$collectAsState$1$1;
+Landroidx/compose/runtime/SnapshotStateKt__SnapshotFlowKt$collectAsState$1;
+Landroidx/compose/runtime/Stack;
+Landroidx/compose/runtime/State;
+Landroidx/compose/runtime/StaticProvidableCompositionLocal;
+Landroidx/compose/runtime/StaticValueHolder;
+Landroidx/compose/runtime/StructuralEqualityPolicy;
+Landroidx/compose/runtime/WeakReference;
+Landroidx/compose/runtime/changelist/ChangeList;
+Landroidx/compose/runtime/changelist/ComposerChangeListWriter;
+Landroidx/compose/runtime/changelist/FixupList;
+Landroidx/compose/runtime/changelist/Operation$AdvanceSlotsBy;
+Landroidx/compose/runtime/changelist/Operation$DeactivateCurrentGroup;
+Landroidx/compose/runtime/changelist/Operation$Downs;
+Landroidx/compose/runtime/changelist/Operation$EndCompositionScope;
+Landroidx/compose/runtime/changelist/Operation$EndCurrentGroup;
+Landroidx/compose/runtime/changelist/Operation$EnsureGroupStarted;
+Landroidx/compose/runtime/changelist/Operation$EnsureRootGroupStarted;
+Landroidx/compose/runtime/changelist/Operation$InsertNodeFixup;
+Landroidx/compose/runtime/changelist/Operation$InsertSlots;
+Landroidx/compose/runtime/changelist/Operation$InsertSlotsWithFixups;
+Landroidx/compose/runtime/changelist/Operation$MoveCurrentGroup;
+Landroidx/compose/runtime/changelist/Operation$PostInsertNodeFixup;
+Landroidx/compose/runtime/changelist/Operation$Remember;
+Landroidx/compose/runtime/changelist/Operation$SideEffect;
+Landroidx/compose/runtime/changelist/Operation$UpdateAuxData;
+Landroidx/compose/runtime/changelist/Operation$UpdateNode;
+Landroidx/compose/runtime/changelist/Operation$UpdateValue;
+Landroidx/compose/runtime/changelist/Operation$Ups;
+Landroidx/compose/runtime/changelist/Operation$UseCurrentNode;
+Landroidx/compose/runtime/changelist/Operation;
+Landroidx/compose/runtime/changelist/Operations$OpIterator;
+Landroidx/compose/runtime/changelist/Operations;
+Landroidx/compose/runtime/collection/IdentityArrayIntMap;
+Landroidx/compose/runtime/collection/IdentityArrayMap$asMap$1$entries$1$iterator$1$1;
+Landroidx/compose/runtime/collection/IdentityArraySet;
+Landroidx/compose/runtime/collection/MutableVector$MutableVectorList;
+Landroidx/compose/runtime/collection/MutableVector$VectorListIterator;
+Landroidx/compose/runtime/collection/MutableVector;
+Landroidx/compose/runtime/external/kotlinx/collections/immutable/ImmutableList;
+Landroidx/compose/runtime/external/kotlinx/collections/immutable/ImmutableSet;
+Landroidx/compose/runtime/external/kotlinx/collections/immutable/PersistentList;
+Landroidx/compose/runtime/external/kotlinx/collections/immutable/PersistentMap$Builder;
+Landroidx/compose/runtime/external/kotlinx/collections/immutable/PersistentMap;
+Landroidx/compose/runtime/external/kotlinx/collections/immutable/PersistentSet;
+Landroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableList/AbstractPersistentList;
+Landroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableList/SmallPersistentVector;
+Landroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/PersistentHashMap;
+Landroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/PersistentHashMapBaseIterator;
+Landroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/PersistentHashMapBuilder;
+Landroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/PersistentHashMapKeys;
+Landroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/PersistentHashMapKeysIterator;
+Landroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/TrieNode;
+Landroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/TrieNodeBaseIterator;
+Landroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/TrieNodeKeysIterator;
+Landroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/persistentOrderedSet/Links;
+Landroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/persistentOrderedSet/PersistentOrderedSet;
+Landroidx/compose/runtime/external/kotlinx/collections/immutable/internal/DeltaCounter;
+Landroidx/compose/runtime/internal/ComposableLambda;
+Landroidx/compose/runtime/internal/ComposableLambdaImpl;
+Landroidx/compose/runtime/internal/PersistentCompositionLocalHashMap$Builder;
+Landroidx/compose/runtime/internal/PersistentCompositionLocalHashMap;
+Landroidx/compose/runtime/internal/ThreadMap;
+Landroidx/compose/runtime/saveable/ListSaverKt$listSaver$1;
+Landroidx/compose/runtime/saveable/RememberSaveableKt$rememberSaveable$1;
+Landroidx/compose/runtime/saveable/SaveableHolder;
+Landroidx/compose/runtime/saveable/SaveableStateHolder;
+Landroidx/compose/runtime/saveable/SaveableStateHolderImpl$RegistryHolder$registry$1;
+Landroidx/compose/runtime/saveable/SaveableStateHolderImpl$RegistryHolder;
+Landroidx/compose/runtime/saveable/SaveableStateHolderImpl$SaveableStateProvider$1$1$invoke$$inlined$onDispose$1;
+Landroidx/compose/runtime/saveable/SaveableStateHolderImpl;
+Landroidx/compose/runtime/saveable/SaveableStateRegistry;
+Landroidx/compose/runtime/saveable/SaveableStateRegistryImpl$registerProvider$3;
+Landroidx/compose/runtime/saveable/SaveableStateRegistryImpl;
+Landroidx/compose/runtime/saveable/SaveableStateRegistryKt;
+Landroidx/compose/runtime/saveable/SaverKt$Saver$1;
+Landroidx/compose/runtime/saveable/SaverKt;
+Landroidx/compose/runtime/snapshots/GlobalSnapshot$1$1$1;
+Landroidx/compose/runtime/snapshots/GlobalSnapshot;
+Landroidx/compose/runtime/snapshots/MutableSnapshot;
+Landroidx/compose/runtime/snapshots/ObserverHandle;
+Landroidx/compose/runtime/snapshots/ReadonlySnapshot;
+Landroidx/compose/runtime/snapshots/Snapshot$Companion$$ExternalSyntheticLambda0;
+Landroidx/compose/runtime/snapshots/Snapshot;
+Landroidx/compose/runtime/snapshots/SnapshotApplyResult$Failure;
+Landroidx/compose/runtime/snapshots/SnapshotApplyResult$Success;
+Landroidx/compose/runtime/snapshots/SnapshotDoubleIndexHeap;
+Landroidx/compose/runtime/snapshots/SnapshotIdSet;
+Landroidx/compose/runtime/snapshots/SnapshotKt$mergedReadObserver$1;
+Landroidx/compose/runtime/snapshots/SnapshotKt;
+Landroidx/compose/runtime/snapshots/SnapshotMutableState;
+Landroidx/compose/runtime/snapshots/SnapshotStateList$StateListStateRecord;
+Landroidx/compose/runtime/snapshots/SnapshotStateList$addAll$1;
+Landroidx/compose/runtime/snapshots/SnapshotStateList;
+Landroidx/compose/runtime/snapshots/SnapshotStateListKt;
+Landroidx/compose/runtime/snapshots/SnapshotStateObserver$ObservedScopeMap;
+Landroidx/compose/runtime/snapshots/SnapshotStateObserver;
+Landroidx/compose/runtime/snapshots/StateObject;
+Landroidx/compose/runtime/snapshots/StateRecord;
+Landroidx/compose/runtime/snapshots/TransparentObserverMutableSnapshot;
+Landroidx/compose/runtime/tooling/InspectionTablesKt;
+Landroidx/compose/ui/Alignment$Horizontal;
+Landroidx/compose/ui/Alignment$Vertical;
+Landroidx/compose/ui/Alignment;
+Landroidx/compose/ui/BiasAlignment$Horizontal;
+Landroidx/compose/ui/BiasAlignment$Vertical;
+Landroidx/compose/ui/BiasAlignment;
+Landroidx/compose/ui/CombinedModifier$toString$1;
+Landroidx/compose/ui/CombinedModifier;
+Landroidx/compose/ui/ComposedModifier;
+Landroidx/compose/ui/CompositionLocalMapInjectionElement;
+Landroidx/compose/ui/Modifier$Companion;
+Landroidx/compose/ui/Modifier$Element;
+Landroidx/compose/ui/Modifier$Node;
+Landroidx/compose/ui/Modifier;
+Landroidx/compose/ui/MotionDurationScale;
+Landroidx/compose/ui/ZIndexElement;
+Landroidx/compose/ui/ZIndexNode$measure$1;
+Landroidx/compose/ui/ZIndexNode;
+Landroidx/compose/ui/autofill/AndroidAutofill;
+Landroidx/compose/ui/autofill/Autofill;
+Landroidx/compose/ui/autofill/AutofillCallback;
+Landroidx/compose/ui/autofill/AutofillTree;
+Landroidx/compose/ui/draw/BuildDrawCacheParams;
+Landroidx/compose/ui/draw/CacheDrawModifierNode;
+Landroidx/compose/ui/draw/CacheDrawModifierNodeImpl;
+Landroidx/compose/ui/draw/CacheDrawScope$onDrawBehind$1;
+Landroidx/compose/ui/draw/CacheDrawScope;
+Landroidx/compose/ui/draw/ClipKt;
+Landroidx/compose/ui/draw/DrawModifier;
+Landroidx/compose/ui/draw/DrawResult;
+Landroidx/compose/ui/draw/DrawWithCacheElement;
+Landroidx/compose/ui/draw/EmptyBuildDrawCacheParams;
+Landroidx/compose/ui/draw/PainterElement;
+Landroidx/compose/ui/draw/PainterNode$measure$1;
+Landroidx/compose/ui/draw/PainterNode;
+Landroidx/compose/ui/focus/FocusChangedElement;
+Landroidx/compose/ui/focus/FocusChangedNode;
+Landroidx/compose/ui/focus/FocusDirection;
+Landroidx/compose/ui/focus/FocusEventModifierNode;
+Landroidx/compose/ui/focus/FocusInvalidationManager;
+Landroidx/compose/ui/focus/FocusModifierKt;
+Landroidx/compose/ui/focus/FocusOwner;
+Landroidx/compose/ui/focus/FocusOwnerImpl$modifier$1;
+Landroidx/compose/ui/focus/FocusOwnerImpl$moveFocus$foundNextItem$1;
+Landroidx/compose/ui/focus/FocusOwnerImpl;
+Landroidx/compose/ui/focus/FocusProperties$exit$1;
+Landroidx/compose/ui/focus/FocusProperties;
+Landroidx/compose/ui/focus/FocusPropertiesImpl;
+Landroidx/compose/ui/focus/FocusPropertiesModifierNode;
+Landroidx/compose/ui/focus/FocusRequester;
+Landroidx/compose/ui/focus/FocusRequesterModifierNode;
+Landroidx/compose/ui/focus/FocusState;
+Landroidx/compose/ui/focus/FocusStateImpl;
+Landroidx/compose/ui/focus/FocusTargetNode$FocusTargetElement;
+Landroidx/compose/ui/focus/FocusTargetNode;
+Landroidx/compose/ui/geometry/CornerRadius;
+Landroidx/compose/ui/geometry/MutableRect;
+Landroidx/compose/ui/geometry/Offset;
+Landroidx/compose/ui/geometry/Rect;
+Landroidx/compose/ui/geometry/RoundRect;
+Landroidx/compose/ui/geometry/Size;
+Landroidx/compose/ui/graphics/AndroidCanvas;
+Landroidx/compose/ui/graphics/AndroidCanvas_androidKt;
+Landroidx/compose/ui/graphics/AndroidImageBitmap;
+Landroidx/compose/ui/graphics/AndroidPaint;
+Landroidx/compose/ui/graphics/AndroidPaint_androidKt$WhenMappings;
+Landroidx/compose/ui/graphics/AndroidPath;
+Landroidx/compose/ui/graphics/BlendModeColorFilter;
+Landroidx/compose/ui/graphics/BlendModeColorFilterHelper;
+Landroidx/compose/ui/graphics/BlockGraphicsLayerElement;
+Landroidx/compose/ui/graphics/BlockGraphicsLayerModifier;
+Landroidx/compose/ui/graphics/Brush;
+Landroidx/compose/ui/graphics/BrushKt$ShaderBrush$1;
+Landroidx/compose/ui/graphics/BrushKt;
+Landroidx/compose/ui/graphics/Canvas;
+Landroidx/compose/ui/graphics/CanvasZHelper$$ExternalSyntheticApiModelOutline0;
+Landroidx/compose/ui/graphics/Color;
+Landroidx/compose/ui/graphics/ColorSpaceVerificationHelper$$ExternalSyntheticLambda1;
+Landroidx/compose/ui/graphics/Float16;
+Landroidx/compose/ui/graphics/GraphicsLayerElement;
+Landroidx/compose/ui/graphics/GraphicsLayerScopeKt;
+Landroidx/compose/ui/graphics/ImageBitmap;
+Landroidx/compose/ui/graphics/ImageBitmapConfig;
+Landroidx/compose/ui/graphics/Matrix;
+Landroidx/compose/ui/graphics/Outline$Generic;
+Landroidx/compose/ui/graphics/Outline$Rectangle;
+Landroidx/compose/ui/graphics/Outline$Rounded;
+Landroidx/compose/ui/graphics/Path;
+Landroidx/compose/ui/graphics/RectangleShapeKt$RectangleShape$1;
+Landroidx/compose/ui/graphics/ReusableGraphicsLayerScope;
+Landroidx/compose/ui/graphics/Shadow;
+Landroidx/compose/ui/graphics/Shape;
+Landroidx/compose/ui/graphics/SimpleGraphicsLayerModifier$layerBlock$1;
+Landroidx/compose/ui/graphics/SimpleGraphicsLayerModifier;
+Landroidx/compose/ui/graphics/SolidColor;
+Landroidx/compose/ui/graphics/TransformOrigin;
+Landroidx/compose/ui/graphics/colorspace/Adaptation$Companion$Bradford$1;
+Landroidx/compose/ui/graphics/colorspace/Adaptation;
+Landroidx/compose/ui/graphics/colorspace/ColorModel;
+Landroidx/compose/ui/graphics/colorspace/ColorSpace;
+Landroidx/compose/ui/graphics/colorspace/ColorSpaces;
+Landroidx/compose/ui/graphics/colorspace/Connector$Companion$identity$1;
+Landroidx/compose/ui/graphics/colorspace/Connector;
+Landroidx/compose/ui/graphics/colorspace/DoubleFunction;
+Landroidx/compose/ui/graphics/colorspace/Lab;
+Landroidx/compose/ui/graphics/colorspace/Oklab;
+Landroidx/compose/ui/graphics/colorspace/Rgb$$ExternalSyntheticLambda0;
+Landroidx/compose/ui/graphics/colorspace/Rgb$$ExternalSyntheticLambda1;
+Landroidx/compose/ui/graphics/colorspace/Rgb$$ExternalSyntheticLambda2;
+Landroidx/compose/ui/graphics/colorspace/Rgb$eotf$1;
+Landroidx/compose/ui/graphics/colorspace/Rgb;
+Landroidx/compose/ui/graphics/colorspace/TransferParameters;
+Landroidx/compose/ui/graphics/colorspace/WhitePoint;
+Landroidx/compose/ui/graphics/colorspace/Xyz;
+Landroidx/compose/ui/graphics/drawscope/CanvasDrawScope$DrawParams;
+Landroidx/compose/ui/graphics/drawscope/CanvasDrawScope$drawContext$1;
+Landroidx/compose/ui/graphics/drawscope/CanvasDrawScope;
+Landroidx/compose/ui/graphics/drawscope/CanvasDrawScopeKt$asDrawTransform$1;
+Landroidx/compose/ui/graphics/drawscope/ContentDrawScope;
+Landroidx/compose/ui/graphics/drawscope/DrawScope;
+Landroidx/compose/ui/graphics/drawscope/EmptyCanvas;
+Landroidx/compose/ui/graphics/drawscope/Fill;
+Landroidx/compose/ui/graphics/drawscope/Stroke;
+Landroidx/compose/ui/graphics/painter/BitmapPainter;
+Landroidx/compose/ui/graphics/painter/Painter;
+Landroidx/compose/ui/graphics/vector/GroupComponent;
+Landroidx/compose/ui/graphics/vector/ImageVector$Builder$GroupParams;
+Landroidx/compose/ui/graphics/vector/ImageVector$Builder;
+Landroidx/compose/ui/graphics/vector/ImageVector;
+Landroidx/compose/ui/graphics/vector/VNode;
+Landroidx/compose/ui/graphics/vector/VectorComponent;
+Landroidx/compose/ui/graphics/vector/VectorGroup;
+Landroidx/compose/ui/graphics/vector/VectorKt;
+Landroidx/compose/ui/graphics/vector/VectorNode;
+Landroidx/compose/ui/graphics/vector/VectorPainter;
+Landroidx/compose/ui/graphics/vector/VectorPath;
+Landroidx/compose/ui/graphics/vector/compat/AndroidVectorParser;
+Landroidx/compose/ui/hapticfeedback/HapticFeedback;
+Landroidx/compose/ui/input/InputMode;
+Landroidx/compose/ui/input/InputModeManager;
+Landroidx/compose/ui/input/InputModeManagerImpl;
+Landroidx/compose/ui/input/key/Key;
+Landroidx/compose/ui/input/key/KeyEvent;
+Landroidx/compose/ui/input/key/KeyInputElement;
+Landroidx/compose/ui/input/key/KeyInputModifierNode;
+Landroidx/compose/ui/input/key/KeyInputNode;
+Landroidx/compose/ui/input/key/Key_androidKt;
+Landroidx/compose/ui/input/nestedscroll/NestedScrollConnection;
+Landroidx/compose/ui/input/nestedscroll/NestedScrollDispatcher;
+Landroidx/compose/ui/input/nestedscroll/NestedScrollNode;
+Landroidx/compose/ui/input/nestedscroll/NestedScrollNodeKt;
+Landroidx/compose/ui/input/pointer/AndroidPointerIconType;
+Landroidx/compose/ui/input/pointer/MotionEventAdapter;
+Landroidx/compose/ui/input/pointer/Node;
+Landroidx/compose/ui/input/pointer/NodeParent;
+Landroidx/compose/ui/input/pointer/PointerEvent;
+Landroidx/compose/ui/input/pointer/PointerIcon;
+Landroidx/compose/ui/input/pointer/PointerIconService;
+Landroidx/compose/ui/input/pointer/PointerInputChange;
+Landroidx/compose/ui/input/pointer/PointerInputScope;
+Landroidx/compose/ui/input/pointer/PointerKeyboardModifiers;
+Landroidx/compose/ui/input/pointer/PositionCalculator;
+Landroidx/compose/ui/input/pointer/SuspendPointerInputElement;
+Landroidx/compose/ui/input/pointer/SuspendingPointerInputFilterKt;
+Landroidx/compose/ui/input/pointer/SuspendingPointerInputModifierNode;
+Landroidx/compose/ui/input/pointer/SuspendingPointerInputModifierNodeImpl$PointerEventHandlerCoroutine;
+Landroidx/compose/ui/input/pointer/SuspendingPointerInputModifierNodeImpl;
+Landroidx/compose/ui/input/pointer/util/DataPointAtTime;
+Landroidx/compose/ui/input/pointer/util/PointerIdArray;
+Landroidx/compose/ui/input/pointer/util/VelocityTracker1D;
+Landroidx/compose/ui/input/pointer/util/VelocityTracker;
+Landroidx/compose/ui/input/rotary/RotaryInputElement;
+Landroidx/compose/ui/input/rotary/RotaryInputModifierKt;
+Landroidx/compose/ui/input/rotary/RotaryInputModifierNode;
+Landroidx/compose/ui/input/rotary/RotaryInputNode;
+Landroidx/compose/ui/layout/AlignmentLine;
+Landroidx/compose/ui/layout/AlignmentLineKt$FirstBaseline$1;
+Landroidx/compose/ui/layout/AlignmentLineKt$LastBaseline$1;
+Landroidx/compose/ui/layout/AlignmentLineKt;
+Landroidx/compose/ui/layout/BeyondBoundsLayout$BeyondBoundsScope;
+Landroidx/compose/ui/layout/BeyondBoundsLayout;
+Landroidx/compose/ui/layout/BeyondBoundsLayoutKt;
+Landroidx/compose/ui/layout/ComposableSingletons$SubcomposeLayoutKt;
+Landroidx/compose/ui/layout/ContentScale;
+Landroidx/compose/ui/layout/DefaultIntrinsicMeasurable;
+Landroidx/compose/ui/layout/FixedSizeIntrinsicsPlaceable;
+Landroidx/compose/ui/layout/HorizontalAlignmentLine;
+Landroidx/compose/ui/layout/IntrinsicMeasureScope;
+Landroidx/compose/ui/layout/IntrinsicMinMax;
+Landroidx/compose/ui/layout/IntrinsicWidthHeight;
+Landroidx/compose/ui/layout/IntrinsicsMeasureScope;
+Landroidx/compose/ui/layout/LayoutCoordinates;
+Landroidx/compose/ui/layout/LayoutElement;
+Landroidx/compose/ui/layout/LayoutKt$materializerOf$1;
+Landroidx/compose/ui/layout/LayoutKt;
+Landroidx/compose/ui/layout/LayoutModifierImpl;
+Landroidx/compose/ui/layout/LayoutNodeSubcompositionsState$NodeState;
+Landroidx/compose/ui/layout/LayoutNodeSubcompositionsState$PostLookaheadMeasureScopeImpl;
+Landroidx/compose/ui/layout/LayoutNodeSubcompositionsState$Scope;
+Landroidx/compose/ui/layout/LayoutNodeSubcompositionsState$createMeasurePolicy$1$measure-3p2s80s$$inlined$createMeasureResult$1;
+Landroidx/compose/ui/layout/LayoutNodeSubcompositionsState$createMeasurePolicy$1;
+Landroidx/compose/ui/layout/LayoutNodeSubcompositionsState$precompose$1;
+Landroidx/compose/ui/layout/LayoutNodeSubcompositionsState;
+Landroidx/compose/ui/layout/LookaheadLayoutCoordinates;
+Landroidx/compose/ui/layout/Measurable;
+Landroidx/compose/ui/layout/MeasurePolicy;
+Landroidx/compose/ui/layout/MeasureResult;
+Landroidx/compose/ui/layout/MeasureScope$layout$1;
+Landroidx/compose/ui/layout/MeasureScope;
+Landroidx/compose/ui/layout/Measured;
+Landroidx/compose/ui/layout/OnRemeasuredModifier;
+Landroidx/compose/ui/layout/OnSizeChangedModifier;
+Landroidx/compose/ui/layout/PinnableContainerKt;
+Landroidx/compose/ui/layout/Placeable$PlacementScope$Companion;
+Landroidx/compose/ui/layout/Placeable$PlacementScope;
+Landroidx/compose/ui/layout/Placeable;
+Landroidx/compose/ui/layout/PlaceableKt;
+Landroidx/compose/ui/layout/Remeasurement;
+Landroidx/compose/ui/layout/RemeasurementModifier;
+Landroidx/compose/ui/layout/RootMeasurePolicy$measure$2;
+Landroidx/compose/ui/layout/RootMeasurePolicy;
+Landroidx/compose/ui/layout/ScaleFactor;
+Landroidx/compose/ui/layout/SubcomposeLayoutKt$SubcomposeLayout$2;
+Landroidx/compose/ui/layout/SubcomposeLayoutKt$SubcomposeLayout$4;
+Landroidx/compose/ui/layout/SubcomposeLayoutKt$SubcomposeLayout$5$1$invoke$$inlined$onDispose$1;
+Landroidx/compose/ui/layout/SubcomposeLayoutState$setRoot$1;
+Landroidx/compose/ui/layout/SubcomposeLayoutState;
+Landroidx/compose/ui/layout/SubcomposeMeasureScope;
+Landroidx/compose/ui/layout/SubcomposeSlotReusePolicy$SlotIdsSet;
+Landroidx/compose/ui/layout/SubcomposeSlotReusePolicy;
+Landroidx/compose/ui/modifier/BackwardsCompatLocalMap;
+Landroidx/compose/ui/modifier/EmptyMap;
+Landroidx/compose/ui/modifier/ModifierLocal;
+Landroidx/compose/ui/modifier/ModifierLocalConsumer;
+Landroidx/compose/ui/modifier/ModifierLocalManager;
+Landroidx/compose/ui/modifier/ModifierLocalModifierNode;
+Landroidx/compose/ui/modifier/ModifierLocalProvider;
+Landroidx/compose/ui/modifier/ModifierLocalReadScope;
+Landroidx/compose/ui/modifier/ProvidableModifierLocal;
+Landroidx/compose/ui/modifier/SingleLocalMap;
+Landroidx/compose/ui/node/AlignmentLines;
+Landroidx/compose/ui/node/AlignmentLinesOwner;
+Landroidx/compose/ui/node/BackwardsCompatNode;
+Landroidx/compose/ui/node/CanFocusChecker;
+Landroidx/compose/ui/node/ComposeUiNode$Companion;
+Landroidx/compose/ui/node/ComposeUiNode;
+Landroidx/compose/ui/node/CompositionLocalConsumerModifierNode;
+Landroidx/compose/ui/node/DelegatableNode;
+Landroidx/compose/ui/node/DelegatingNode;
+Landroidx/compose/ui/node/DrawModifierNode;
+Landroidx/compose/ui/node/GlobalPositionAwareModifierNode;
+Landroidx/compose/ui/node/HitTestResult;
+Landroidx/compose/ui/node/InnerNodeCoordinator;
+Landroidx/compose/ui/node/IntrinsicsPolicy;
+Landroidx/compose/ui/node/LayerPositionalProperties;
+Landroidx/compose/ui/node/LayoutAwareModifierNode;
+Landroidx/compose/ui/node/LayoutModifierNode;
+Landroidx/compose/ui/node/LayoutModifierNodeCoordinator;
+Landroidx/compose/ui/node/LayoutNode$$ExternalSyntheticLambda0;
+Landroidx/compose/ui/node/LayoutNode$Companion$DummyViewConfiguration$1;
+Landroidx/compose/ui/node/LayoutNode$Companion$ErrorMeasurePolicy$1;
+Landroidx/compose/ui/node/LayoutNode$NoIntrinsicsMeasurePolicy;
+Landroidx/compose/ui/node/LayoutNode$WhenMappings;
+Landroidx/compose/ui/node/LayoutNode$_foldedChildren$1;
+Landroidx/compose/ui/node/LayoutNode;
+Landroidx/compose/ui/node/LayoutNodeDrawScope;
+Landroidx/compose/ui/node/LayoutNodeLayoutDelegate$LookaheadPassDelegate;
+Landroidx/compose/ui/node/LayoutNodeLayoutDelegate$MeasurePassDelegate$placeOuterCoordinator$1;
+Landroidx/compose/ui/node/LayoutNodeLayoutDelegate$MeasurePassDelegate;
+Landroidx/compose/ui/node/LayoutNodeLayoutDelegate$performMeasure$2;
+Landroidx/compose/ui/node/LayoutNodeLayoutDelegate;
+Landroidx/compose/ui/node/LookaheadAlignmentLines;
+Landroidx/compose/ui/node/LookaheadCapablePlaceable;
+Landroidx/compose/ui/node/LookaheadDelegate;
+Landroidx/compose/ui/node/MeasureAndLayoutDelegate$PostponedRequest;
+Landroidx/compose/ui/node/MeasureAndLayoutDelegate;
+Landroidx/compose/ui/node/ModifierNodeElement;
+Landroidx/compose/ui/node/NodeChain$Differ;
+Landroidx/compose/ui/node/NodeChain;
+Landroidx/compose/ui/node/NodeChainKt$SentinelHead$1;
+Landroidx/compose/ui/node/NodeChainKt;
+Landroidx/compose/ui/node/NodeCoordinator$HitTestSource;
+Landroidx/compose/ui/node/NodeCoordinator$invoke$1;
+Landroidx/compose/ui/node/NodeCoordinator;
+Landroidx/compose/ui/node/NodeMeasuringIntrinsics$IntrinsicMinMax;
+Landroidx/compose/ui/node/NodeMeasuringIntrinsics$IntrinsicWidthHeight;
+Landroidx/compose/ui/node/ObserverModifierNode;
+Landroidx/compose/ui/node/ObserverNodeOwnerScope;
+Landroidx/compose/ui/node/OnPositionedDispatcher$Companion$DepthComparator;
+Landroidx/compose/ui/node/OnPositionedDispatcher;
+Landroidx/compose/ui/node/OwnedLayer;
+Landroidx/compose/ui/node/Owner$OnLayoutCompletedListener;
+Landroidx/compose/ui/node/Owner;
+Landroidx/compose/ui/node/OwnerScope;
+Landroidx/compose/ui/node/OwnerSnapshotObserver;
+Landroidx/compose/ui/node/ParentDataModifierNode;
+Landroidx/compose/ui/node/PointerInputModifierNode;
+Landroidx/compose/ui/node/RootForTest;
+Landroidx/compose/ui/node/SemanticsModifierNode;
+Landroidx/compose/ui/node/TailModifierNode;
+Landroidx/compose/ui/node/TreeSet;
+Landroidx/compose/ui/node/UiApplier;
+Landroidx/compose/ui/platform/AbstractComposeView;
+Landroidx/compose/ui/platform/AccessibilityManager;
+Landroidx/compose/ui/platform/AndroidAccessibilityManager;
+Landroidx/compose/ui/platform/AndroidClipboardManager;
+Landroidx/compose/ui/platform/AndroidComposeView$$ExternalSyntheticApiModelOutline0;
+Landroidx/compose/ui/platform/AndroidComposeView$$ExternalSyntheticLambda1;
+Landroidx/compose/ui/platform/AndroidComposeView$$ExternalSyntheticLambda2;
+Landroidx/compose/ui/platform/AndroidComposeView$$ExternalSyntheticLambda3;
+Landroidx/compose/ui/platform/AndroidComposeView$AndroidComposeViewTranslationCallback;
+Landroidx/compose/ui/platform/AndroidComposeView$ViewTreeOwners;
+Landroidx/compose/ui/platform/AndroidComposeView$focusOwner$1;
+Landroidx/compose/ui/platform/AndroidComposeView$pointerIconService$1;
+Landroidx/compose/ui/platform/AndroidComposeView$viewTreeOwners$2;
+Landroidx/compose/ui/platform/AndroidComposeView;
+Landroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat$$ExternalSyntheticLambda1;
+Landroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat$$ExternalSyntheticLambda2;
+Landroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat$1;
+Landroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat$MyNodeProvider;
+Landroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat$SemanticsNodeCopy;
+Landroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat$boundsUpdatesEventLoop$1;
+Landroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat$sendScrollEventIfNeeded$1;
+Landroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat;
+Landroidx/compose/ui/platform/AndroidComposeViewForceDarkModeQ;
+Landroidx/compose/ui/platform/AndroidComposeViewTranslationCallbackS;
+Landroidx/compose/ui/platform/AndroidComposeViewVerificationHelperMethodsN;
+Landroidx/compose/ui/platform/AndroidComposeViewVerificationHelperMethodsO;
+Landroidx/compose/ui/platform/AndroidCompositionLocals_androidKt$obtainImageVectorCache$callbacks$1$1;
+Landroidx/compose/ui/platform/AndroidCompositionLocals_androidKt;
+Landroidx/compose/ui/platform/AndroidUiDispatcher$dispatchCallback$1;
+Landroidx/compose/ui/platform/AndroidUiDispatcher;
+Landroidx/compose/ui/platform/AndroidUiFrameClock$withFrameNanos$2$callback$1;
+Landroidx/compose/ui/platform/AndroidUiFrameClock;
+Landroidx/compose/ui/platform/AndroidUriHandler;
+Landroidx/compose/ui/platform/AndroidViewConfiguration;
+Landroidx/compose/ui/platform/CalculateMatrixToWindow;
+Landroidx/compose/ui/platform/CalculateMatrixToWindowApi29;
+Landroidx/compose/ui/platform/ClipboardManager;
+Landroidx/compose/ui/platform/ComposableSingletons$Wrapper_androidKt;
+Landroidx/compose/ui/platform/ComposeView;
+Landroidx/compose/ui/platform/CompositionLocalsKt;
+Landroidx/compose/ui/platform/DeviceRenderNode;
+Landroidx/compose/ui/platform/DisposableSaveableStateRegistry;
+Landroidx/compose/ui/platform/DisposableSaveableStateRegistry_androidKt$DisposableSaveableStateRegistry$1;
+Landroidx/compose/ui/platform/DrawChildContainer;
+Landroidx/compose/ui/platform/GlobalSnapshotManager$ensureStarted$1;
+Landroidx/compose/ui/platform/GlobalSnapshotManager;
+Landroidx/compose/ui/platform/InspectableModifier$End;
+Landroidx/compose/ui/platform/InspectableModifier;
+Landroidx/compose/ui/platform/LayerMatrixCache;
+Landroidx/compose/ui/platform/MotionDurationScaleImpl;
+Landroidx/compose/ui/platform/OutlineResolver;
+Landroidx/compose/ui/platform/RenderNodeApi29;
+Landroidx/compose/ui/platform/RenderNodeApi29VerificationHelper;
+Landroidx/compose/ui/platform/RenderNodeLayer;
+Landroidx/compose/ui/platform/ScrollObservationScope;
+Landroidx/compose/ui/platform/SoftwareKeyboardController;
+Landroidx/compose/ui/platform/TextToolbar;
+Landroidx/compose/ui/platform/UriHandler;
+Landroidx/compose/ui/platform/ViewCompositionStrategy;
+Landroidx/compose/ui/platform/ViewConfiguration;
+Landroidx/compose/ui/platform/ViewLayer$Companion$OutlineProvider$1;
+Landroidx/compose/ui/platform/ViewLayer;
+Landroidx/compose/ui/platform/ViewLayerContainer;
+Landroidx/compose/ui/platform/WeakCache;
+Landroidx/compose/ui/platform/WindowInfo;
+Landroidx/compose/ui/platform/WindowInfoImpl;
+Landroidx/compose/ui/platform/WindowRecomposerFactory$Companion$$ExternalSyntheticLambda0;
+Landroidx/compose/ui/platform/WindowRecomposerFactory;
+Landroidx/compose/ui/platform/WindowRecomposerPolicy$createAndInstallWindowRecomposer$unsetJob$1;
+Landroidx/compose/ui/platform/WindowRecomposerPolicy;
+Landroidx/compose/ui/platform/WindowRecomposer_androidKt$createLifecycleAwareWindowRecomposer$1;
+Landroidx/compose/ui/platform/WindowRecomposer_androidKt$createLifecycleAwareWindowRecomposer$2$WhenMappings;
+Landroidx/compose/ui/platform/WindowRecomposer_androidKt$createLifecycleAwareWindowRecomposer$2$onStateChanged$1$1$1;
+Landroidx/compose/ui/platform/WindowRecomposer_androidKt$createLifecycleAwareWindowRecomposer$2$onStateChanged$1;
+Landroidx/compose/ui/platform/WindowRecomposer_androidKt$createLifecycleAwareWindowRecomposer$2;
+Landroidx/compose/ui/platform/WindowRecomposer_androidKt$getAnimationScaleFlowFor$1$1$1;
+Landroidx/compose/ui/platform/WindowRecomposer_androidKt;
+Landroidx/compose/ui/platform/WrappedComposition$setContent$1$1$1;
+Landroidx/compose/ui/platform/WrappedComposition$setContent$1$1;
+Landroidx/compose/ui/platform/WrappedComposition$setContent$1;
+Landroidx/compose/ui/platform/WrappedComposition;
+Landroidx/compose/ui/platform/WrapperRenderNodeLayerHelperMethods;
+Landroidx/compose/ui/platform/WrapperVerificationHelperMethods;
+Landroidx/compose/ui/platform/Wrapper_androidKt;
+Landroidx/compose/ui/res/ImageVectorCache$ImageVectorEntry;
+Landroidx/compose/ui/res/ImageVectorCache$Key;
+Landroidx/compose/ui/res/ImageVectorCache;
+Landroidx/compose/ui/semantics/AppendedSemanticsElement;
+Landroidx/compose/ui/semantics/CollectionInfo;
+Landroidx/compose/ui/semantics/CoreSemanticsModifierNode;
+Landroidx/compose/ui/semantics/EmptySemanticsElement;
+Landroidx/compose/ui/semantics/EmptySemanticsModifier;
+Landroidx/compose/ui/semantics/Role;
+Landroidx/compose/ui/semantics/ScrollAxisRange;
+Landroidx/compose/ui/semantics/SemanticsConfiguration;
+Landroidx/compose/ui/semantics/SemanticsModifier;
+Landroidx/compose/ui/semantics/SemanticsModifierKt;
+Landroidx/compose/ui/semantics/SemanticsNode;
+Landroidx/compose/ui/semantics/SemanticsOwner;
+Landroidx/compose/ui/semantics/SemanticsProperties;
+Landroidx/compose/ui/semantics/SemanticsPropertiesKt;
+Landroidx/compose/ui/semantics/SemanticsPropertyKey;
+Landroidx/compose/ui/semantics/SemanticsPropertyReceiver;
+Landroidx/compose/ui/text/AndroidParagraph;
+Landroidx/compose/ui/text/AnnotatedString$Range;
+Landroidx/compose/ui/text/AnnotatedString;
+Landroidx/compose/ui/text/AnnotatedStringKt;
+Landroidx/compose/ui/text/EmojiSupportMatch;
+Landroidx/compose/ui/text/MultiParagraph;
+Landroidx/compose/ui/text/MultiParagraphIntrinsics$maxIntrinsicWidth$2;
+Landroidx/compose/ui/text/MultiParagraphIntrinsics;
+Landroidx/compose/ui/text/ParagraphInfo;
+Landroidx/compose/ui/text/ParagraphIntrinsicInfo;
+Landroidx/compose/ui/text/ParagraphIntrinsics;
+Landroidx/compose/ui/text/ParagraphStyle;
+Landroidx/compose/ui/text/ParagraphStyleKt;
+Landroidx/compose/ui/text/PlatformParagraphStyle;
+Landroidx/compose/ui/text/PlatformTextStyle;
+Landroidx/compose/ui/text/SaversKt$ColorSaver$1;
+Landroidx/compose/ui/text/SaversKt$ColorSaver$2;
+Landroidx/compose/ui/text/SaversKt;
+Landroidx/compose/ui/text/SpanStyle;
+Landroidx/compose/ui/text/SpanStyleKt;
+Landroidx/compose/ui/text/TextLayoutInput;
+Landroidx/compose/ui/text/TextLayoutResult;
+Landroidx/compose/ui/text/TextRange;
+Landroidx/compose/ui/text/TextStyle;
+Landroidx/compose/ui/text/TtsAnnotation;
+Landroidx/compose/ui/text/UrlAnnotation;
+Landroidx/compose/ui/text/VerbatimTtsAnnotation;
+Landroidx/compose/ui/text/android/BoringLayoutFactoryDefault;
+Landroidx/compose/ui/text/android/LayoutIntrinsics;
+Landroidx/compose/ui/text/android/Paint29$$ExternalSyntheticApiModelOutline0;
+Landroidx/compose/ui/text/android/Paint29;
+Landroidx/compose/ui/text/android/StaticLayoutFactory23;
+Landroidx/compose/ui/text/android/StaticLayoutFactory26;
+Landroidx/compose/ui/text/android/StaticLayoutFactory28;
+Landroidx/compose/ui/text/android/StaticLayoutFactoryImpl;
+Landroidx/compose/ui/text/android/StaticLayoutParams;
+Landroidx/compose/ui/text/android/TextAlignmentAdapter;
+Landroidx/compose/ui/text/android/TextAndroidCanvas;
+Landroidx/compose/ui/text/android/TextLayout;
+Landroidx/compose/ui/text/android/TextLayoutKt;
+Landroidx/compose/ui/text/android/style/LetterSpacingSpanEm;
+Landroidx/compose/ui/text/android/style/LetterSpacingSpanPx;
+Landroidx/compose/ui/text/android/style/LineHeightSpan;
+Landroidx/compose/ui/text/android/style/LineHeightStyleSpan;
+Landroidx/compose/ui/text/android/style/PlaceholderSpan;
+Landroidx/compose/ui/text/android/style/ShadowSpan;
+Landroidx/compose/ui/text/android/style/SkewXSpan;
+Landroidx/compose/ui/text/android/style/TextDecorationSpan;
+Landroidx/compose/ui/text/android/style/TypefaceSpan;
+Landroidx/compose/ui/text/caches/LruCache;
+Landroidx/compose/ui/text/caches/SimpleArrayMap;
+Landroidx/compose/ui/text/font/AndroidFontResolveInterceptor;
+Landroidx/compose/ui/text/font/AsyncTypefaceCache;
+Landroidx/compose/ui/text/font/DefaultFontFamily;
+Landroidx/compose/ui/text/font/Font$ResourceLoader;
+Landroidx/compose/ui/text/font/FontFamily$Resolver;
+Landroidx/compose/ui/text/font/FontFamily;
+Landroidx/compose/ui/text/font/FontFamilyResolverImpl;
+Landroidx/compose/ui/text/font/FontFamilyResolverKt;
+Landroidx/compose/ui/text/font/FontListFontFamilyTypefaceAdapter$special$$inlined$CoroutineExceptionHandler$1;
+Landroidx/compose/ui/text/font/FontListFontFamilyTypefaceAdapter;
+Landroidx/compose/ui/text/font/FontStyle;
+Landroidx/compose/ui/text/font/FontSynthesis;
+Landroidx/compose/ui/text/font/FontWeight;
+Landroidx/compose/ui/text/font/GenericFontFamily;
+Landroidx/compose/ui/text/font/PlatformResolveInterceptor$Companion$Default$1;
+Landroidx/compose/ui/text/font/PlatformResolveInterceptor$Companion;
+Landroidx/compose/ui/text/font/PlatformResolveInterceptor;
+Landroidx/compose/ui/text/font/PlatformTypefaces;
+Landroidx/compose/ui/text/font/SystemFontFamily;
+Landroidx/compose/ui/text/font/TypefaceRequest;
+Landroidx/compose/ui/text/font/TypefaceResult$Immutable;
+Landroidx/compose/ui/text/font/TypefaceResult;
+Landroidx/compose/ui/text/input/InputMethodManagerImpl;
+Landroidx/compose/ui/text/input/PlatformTextInputService;
+Landroidx/compose/ui/text/input/TextFieldValue;
+Landroidx/compose/ui/text/input/TextInputService;
+Landroidx/compose/ui/text/input/TextInputServiceAndroid;
+Landroidx/compose/ui/text/input/TextInputServiceAndroid_androidKt$$ExternalSyntheticLambda0;
+Landroidx/compose/ui/text/intl/AndroidLocale;
+Landroidx/compose/ui/text/intl/AndroidLocaleDelegateAPI24;
+Landroidx/compose/ui/text/intl/Locale;
+Landroidx/compose/ui/text/intl/LocaleList;
+Landroidx/compose/ui/text/intl/PlatformLocaleKt;
+Landroidx/compose/ui/text/platform/AndroidParagraphHelper_androidKt$NoopSpan$1;
+Landroidx/compose/ui/text/platform/AndroidParagraphHelper_androidKt;
+Landroidx/compose/ui/text/platform/AndroidParagraphIntrinsics$resolveTypeface$1;
+Landroidx/compose/ui/text/platform/AndroidParagraphIntrinsics;
+Landroidx/compose/ui/text/platform/AndroidTextPaint;
+Landroidx/compose/ui/text/platform/DefaultImpl$getFontLoadState$initCallback$1;
+Landroidx/compose/ui/text/platform/DefaultImpl;
+Landroidx/compose/ui/text/platform/EmojiCompatStatus;
+Landroidx/compose/ui/text/platform/ImmutableBool;
+Landroidx/compose/ui/text/platform/URLSpanCache;
+Landroidx/compose/ui/text/platform/extensions/LocaleListHelperMethods;
+Landroidx/compose/ui/text/platform/style/DrawStyleSpan;
+Landroidx/compose/ui/text/platform/style/ShaderBrushSpan;
+Landroidx/compose/ui/text/style/BaselineShift;
+Landroidx/compose/ui/text/style/BrushStyle;
+Landroidx/compose/ui/text/style/ColorStyle;
+Landroidx/compose/ui/text/style/Hyphens;
+Landroidx/compose/ui/text/style/LineBreak$Strategy;
+Landroidx/compose/ui/text/style/LineBreak$Strictness;
+Landroidx/compose/ui/text/style/LineBreak$WordBreak;
+Landroidx/compose/ui/text/style/LineBreak;
+Landroidx/compose/ui/text/style/LineHeightStyle$Alignment;
+Landroidx/compose/ui/text/style/LineHeightStyle;
+Landroidx/compose/ui/text/style/TextAlign;
+Landroidx/compose/ui/text/style/TextDecoration;
+Landroidx/compose/ui/text/style/TextDirection;
+Landroidx/compose/ui/text/style/TextForegroundStyle$Unspecified;
+Landroidx/compose/ui/text/style/TextForegroundStyle;
+Landroidx/compose/ui/text/style/TextGeometricTransform;
+Landroidx/compose/ui/text/style/TextIndent;
+Landroidx/compose/ui/text/style/TextMotion;
+Landroidx/compose/ui/unit/Constraints;
+Landroidx/compose/ui/unit/Density;
+Landroidx/compose/ui/unit/DensityImpl;
+Landroidx/compose/ui/unit/Dp$Companion;
+Landroidx/compose/ui/unit/Dp;
+Landroidx/compose/ui/unit/DpOffset;
+Landroidx/compose/ui/unit/DpRect;
+Landroidx/compose/ui/unit/IntOffset;
+Landroidx/compose/ui/unit/IntSize;
+Landroidx/compose/ui/unit/LayoutDirection;
+Landroidx/compose/ui/unit/TextUnit;
+Landroidx/compose/ui/unit/TextUnitType;
+Landroidx/core/app/ComponentActivity;
+Landroidx/core/app/CoreComponentFactory;
+Landroidx/core/content/res/ColorStateListInflaterCompat;
+Landroidx/core/content/res/ComplexColorCompat;
+Landroidx/core/graphics/TypefaceCompat;
+Landroidx/core/graphics/TypefaceCompatApi29Impl;
+Landroidx/core/graphics/TypefaceCompatUtil$Api19Impl;
+Landroidx/core/os/BuildCompat$Extensions30Impl$$ExternalSyntheticApiModelOutline0;
+Landroidx/core/os/BuildCompat$Extensions30Impl;
+Landroidx/core/os/BuildCompat;
+Landroidx/core/os/TraceCompat$Api18Impl;
+Landroidx/core/os/TraceCompat;
+Landroidx/core/provider/CallbackWithHandler$2;
+Landroidx/core/provider/FontProvider$Api16Impl;
+Landroidx/core/provider/FontRequest;
+Landroidx/core/provider/FontsContractCompat$FontInfo;
+Landroidx/core/text/TextUtilsCompat$Api17Impl;
+Landroidx/core/text/TextUtilsCompat;
+Landroidx/core/view/AccessibilityDelegateCompat$AccessibilityDelegateAdapter;
+Landroidx/core/view/AccessibilityDelegateCompat;
+Landroidx/core/view/MenuHostHelper;
+Landroidx/core/view/ViewCompat$$ExternalSyntheticLambda0;
+Landroidx/core/view/ViewCompat$Api29Impl;
+Landroidx/core/view/ViewCompat$Api30Impl;
+Landroidx/core/view/ViewCompat;
+Landroidx/core/view/accessibility/AccessibilityNodeProviderCompat;
+Landroidx/customview/poolingcontainer/PoolingContainerListenerHolder;
+Landroidx/emoji2/text/ConcurrencyHelpers$$ExternalSyntheticLambda0;
+Landroidx/emoji2/text/ConcurrencyHelpers$Handler28Impl;
+Landroidx/emoji2/text/DefaultGlyphChecker;
+Landroidx/emoji2/text/EmojiCompat$CompatInternal19$1;
+Landroidx/emoji2/text/EmojiCompat$CompatInternal19;
+Landroidx/emoji2/text/EmojiCompat$Config;
+Landroidx/emoji2/text/EmojiCompat$GlyphChecker;
+Landroidx/emoji2/text/EmojiCompat$MetadataRepoLoader;
+Landroidx/emoji2/text/EmojiCompat;
+Landroidx/emoji2/text/EmojiCompatInitializer$1;
+Landroidx/emoji2/text/EmojiCompatInitializer$BackgroundDefaultLoader$$ExternalSyntheticLambda0;
+Landroidx/emoji2/text/EmojiCompatInitializer$BackgroundDefaultLoader$1;
+Landroidx/emoji2/text/EmojiCompatInitializer$LoadEmojiCompatRunnable;
+Landroidx/emoji2/text/EmojiCompatInitializer;
+Landroidx/emoji2/text/EmojiProcessor$EmojiProcessAddSpanCallback;
+Landroidx/emoji2/text/EmojiProcessor$EmojiProcessCallback;
+Landroidx/emoji2/text/EmojiProcessor$ProcessorSm;
+Landroidx/emoji2/text/EmojiProcessor;
+Landroidx/emoji2/text/FontRequestEmojiCompatConfig$FontRequestMetadataLoader$$ExternalSyntheticLambda0;
+Landroidx/emoji2/text/FontRequestEmojiCompatConfig$FontRequestMetadataLoader$1;
+Landroidx/emoji2/text/FontRequestEmojiCompatConfig$FontRequestMetadataLoader;
+Landroidx/emoji2/text/FontRequestEmojiCompatConfig;
+Landroidx/emoji2/text/MetadataRepo$Node;
+Landroidx/emoji2/text/MetadataRepo;
+Landroidx/emoji2/text/TypefaceEmojiRasterizer;
+Landroidx/emoji2/text/TypefaceEmojiSpan;
+Landroidx/emoji2/text/UnprecomputeTextOnModificationSpannable;
+Landroidx/emoji2/text/flatbuffer/MetadataItem;
+Landroidx/emoji2/text/flatbuffer/MetadataList;
+Landroidx/emoji2/text/flatbuffer/Table;
+Landroidx/lifecycle/DefaultLifecycleObserver;
+Landroidx/lifecycle/DefaultLifecycleObserverAdapter$WhenMappings;
+Landroidx/lifecycle/DefaultLifecycleObserverAdapter;
+Landroidx/lifecycle/EmptyActivityLifecycleCallbacks;
+Landroidx/lifecycle/HasDefaultViewModelProviderFactory;
+Landroidx/lifecycle/Lifecycle$Event$Companion;
+Landroidx/lifecycle/Lifecycle$Event$WhenMappings;
+Landroidx/lifecycle/Lifecycle$Event;
+Landroidx/lifecycle/Lifecycle$State;
+Landroidx/lifecycle/Lifecycle;
+Landroidx/lifecycle/LifecycleDestroyedException;
+Landroidx/lifecycle/LifecycleDispatcher$DispatcherActivityCallback;
+Landroidx/lifecycle/LifecycleDispatcher;
+Landroidx/lifecycle/LifecycleEventObserver;
+Landroidx/lifecycle/LifecycleObserver;
+Landroidx/lifecycle/LifecycleOwner;
+Landroidx/lifecycle/LifecycleRegistry$ObserverWithState;
+Landroidx/lifecycle/LifecycleRegistry;
+Landroidx/lifecycle/Lifecycling;
+Landroidx/lifecycle/ProcessLifecycleInitializer;
+Landroidx/lifecycle/ProcessLifecycleOwner$Api29Impl;
+Landroidx/lifecycle/ProcessLifecycleOwner$attach$1$onActivityPreCreated$1;
+Landroidx/lifecycle/ProcessLifecycleOwner$attach$1;
+Landroidx/lifecycle/ProcessLifecycleOwner$initializationListener$1;
+Landroidx/lifecycle/ProcessLifecycleOwner;
+Landroidx/lifecycle/ReportFragment$LifecycleCallbacks$Companion;
+Landroidx/lifecycle/ReportFragment$LifecycleCallbacks;
+Landroidx/lifecycle/ReportFragment;
+Landroidx/lifecycle/SavedStateHandleAttacher;
+Landroidx/lifecycle/SavedStateHandlesProvider;
+Landroidx/lifecycle/SavedStateHandlesVM;
+Landroidx/lifecycle/ViewModelStore;
+Landroidx/lifecycle/ViewModelStoreOwner;
+Landroidx/lifecycle/viewmodel/CreationExtras$Empty;
+Landroidx/lifecycle/viewmodel/CreationExtras;
+Landroidx/lifecycle/viewmodel/MutableCreationExtras;
+Landroidx/lifecycle/viewmodel/ViewModelInitializer;
+Landroidx/metrics/performance/DelegatingFrameMetricsListener;
+Landroidx/metrics/performance/FrameData;
+Landroidx/metrics/performance/FrameDataApi24;
+Landroidx/metrics/performance/FrameDataApi31;
+Landroidx/metrics/performance/JankStats;
+Landroidx/metrics/performance/JankStatsApi16Impl;
+Landroidx/metrics/performance/JankStatsApi22Impl;
+Landroidx/metrics/performance/JankStatsApi24Impl$$ExternalSyntheticLambda0;
+Landroidx/metrics/performance/JankStatsApi24Impl;
+Landroidx/metrics/performance/JankStatsApi26Impl;
+Landroidx/metrics/performance/JankStatsApi31Impl;
+Landroidx/metrics/performance/PerformanceMetricsState$Holder;
+Landroidx/metrics/performance/PerformanceMetricsState;
+Landroidx/profileinstaller/ProfileInstaller$DiagnosticsCallback;
+Landroidx/profileinstaller/ProfileInstallerInitializer$$ExternalSyntheticLambda0;
+Landroidx/profileinstaller/ProfileInstallerInitializer$$ExternalSyntheticLambda1;
+Landroidx/profileinstaller/ProfileInstallerInitializer$Choreographer16Impl;
+Landroidx/profileinstaller/ProfileInstallerInitializer$Handler28Impl;
+Landroidx/profileinstaller/ProfileInstallerInitializer;
+Landroidx/savedstate/Recreator;
+Landroidx/savedstate/SavedStateRegistry$$ExternalSyntheticLambda0;
+Landroidx/savedstate/SavedStateRegistry$SavedStateProvider;
+Landroidx/savedstate/SavedStateRegistry;
+Landroidx/savedstate/SavedStateRegistryController;
+Landroidx/savedstate/SavedStateRegistryOwner;
+Landroidx/startup/AppInitializer;
+Landroidx/startup/InitializationProvider;
+Landroidx/startup/Initializer;
+Landroidx/tracing/Trace$$ExternalSyntheticApiModelOutline0;
+Landroidx/tv/foundation/PivotOffsets;
+Landroidx/tv/foundation/TvBringIntoViewSpec;
+Landroidx/tv/foundation/lazy/grid/LazyGridIntervalContent;
+Landroidx/tv/foundation/lazy/grid/LazyGridItemPlacementAnimator$onMeasured$$inlined$sortBy$1;
+Landroidx/tv/foundation/lazy/grid/LazyGridItemPlacementAnimator;
+Landroidx/tv/foundation/lazy/grid/LazyGridItemProviderImpl;
+Landroidx/tv/foundation/lazy/grid/LazyGridKt$rememberLazyGridMeasurePolicy$1$1$3;
+Landroidx/tv/foundation/lazy/grid/LazyGridScrollPosition;
+Landroidx/tv/foundation/lazy/grid/TvGridItemSpan;
+Landroidx/tv/foundation/lazy/grid/TvLazyGridItemSpanScope;
+Landroidx/tv/foundation/lazy/grid/TvLazyGridScope;
+Landroidx/tv/foundation/lazy/grid/TvLazyGridState$remeasurementModifier$1;
+Landroidx/tv/foundation/lazy/grid/TvLazyGridState;
+Landroidx/tv/foundation/lazy/layout/AwaitFirstLayoutModifier$waitForFirstLayout$1;
+Landroidx/tv/foundation/lazy/layout/AwaitFirstLayoutModifier;
+Landroidx/tv/foundation/lazy/layout/LazyLayoutBeyondBoundsInfo$Interval;
+Landroidx/tv/foundation/lazy/layout/LazyLayoutKeyIndexMap;
+Landroidx/tv/foundation/lazy/layout/LazyLayoutNearestRangeState;
+Landroidx/tv/foundation/lazy/layout/LazyLayoutSemanticState;
+Landroidx/tv/foundation/lazy/layout/LazyLayoutSemanticsKt$LazyLayoutSemanticState$1;
+Landroidx/tv/foundation/lazy/layout/LazyLayoutSemanticsKt$lazyLayoutSemantics$1$1;
+Landroidx/tv/foundation/lazy/layout/NearestRangeKeyIndexMap$2$1;
+Landroidx/tv/foundation/lazy/layout/NearestRangeKeyIndexMap;
+Landroidx/tv/foundation/lazy/list/EmptyLazyListLayoutInfo;
+Landroidx/tv/foundation/lazy/list/LazyLayoutBeyondBoundsModifierLocal$Companion$emptyBeyondBoundsScope$1;
+Landroidx/tv/foundation/lazy/list/LazyLayoutBeyondBoundsModifierLocal;
+Landroidx/tv/foundation/lazy/list/LazyLayoutBeyondBoundsState;
+Landroidx/tv/foundation/lazy/list/LazyListBeyondBoundsState;
+Landroidx/tv/foundation/lazy/list/LazyListItemPlacementAnimator$onMeasured$$inlined$sortBy$2;
+Landroidx/tv/foundation/lazy/list/LazyListItemProviderImpl;
+Landroidx/tv/foundation/lazy/list/LazyListKt$rememberLazyListMeasurePolicy$1$1$measuredItemProvider$1;
+Landroidx/tv/foundation/lazy/list/LazyListKt$rememberLazyListMeasurePolicy$1$1;
+Landroidx/tv/foundation/lazy/list/LazyListMeasureResult;
+Landroidx/tv/foundation/lazy/list/LazyListMeasuredItem;
+Landroidx/tv/foundation/lazy/list/LazyListStateKt$rememberTvLazyListState$1$1;
+Landroidx/tv/foundation/lazy/list/LazyListStateKt;
+Landroidx/tv/foundation/lazy/list/TvLazyListInterval;
+Landroidx/tv/foundation/lazy/list/TvLazyListIntervalContent;
+Landroidx/tv/foundation/lazy/list/TvLazyListItemScopeImpl;
+Landroidx/tv/foundation/lazy/list/TvLazyListLayoutInfo;
+Landroidx/tv/foundation/lazy/list/TvLazyListScope;
+Landroidx/tv/foundation/lazy/list/TvLazyListState$scroll$1;
+Landroidx/tv/foundation/lazy/list/TvLazyListState;
+Landroidx/tv/material3/Border;
+Landroidx/tv/material3/BorderIndication;
+Landroidx/tv/material3/ColorScheme;
+Landroidx/tv/material3/ColorSchemeKt$LocalColorScheme$1;
+Landroidx/tv/material3/ColorSchemeKt;
+Landroidx/tv/material3/ContentColorKt;
+Landroidx/tv/material3/Glow;
+Landroidx/tv/material3/GlowIndication;
+Landroidx/tv/material3/GlowIndicationInstance;
+Landroidx/tv/material3/ScaleIndication;
+Landroidx/tv/material3/ScaleIndicationInstance;
+Landroidx/tv/material3/ScaleIndicationTokens;
+Landroidx/tv/material3/ShapesKt$LocalShapes$1;
+Landroidx/tv/material3/SurfaceKt$Surface$4;
+Landroidx/tv/material3/SurfaceKt$SurfaceImpl$2$2$1;
+Landroidx/tv/material3/SurfaceKt$SurfaceImpl$2$4$1;
+Landroidx/tv/material3/SurfaceKt$SurfaceImpl$2$5$1;
+Landroidx/tv/material3/SurfaceKt$SurfaceImpl$2;
+Landroidx/tv/material3/SurfaceKt$SurfaceImpl$3;
+Landroidx/tv/material3/SurfaceKt$handleDPadEnter$2$1;
+Landroidx/tv/material3/SurfaceKt$handleDPadEnter$2$2;
+Landroidx/tv/material3/SurfaceKt$handleDPadEnter$2;
+Landroidx/tv/material3/SurfaceKt$tvToggleable$1$1;
+Landroidx/tv/material3/SurfaceKt$tvToggleable$1$2;
+Landroidx/tv/material3/SurfaceKt$tvToggleable$1;
+Landroidx/tv/material3/SurfaceKt;
+Landroidx/tv/material3/TabColors;
+Landroidx/tv/material3/TabKt$Tab$1;
+Landroidx/tv/material3/TabKt$Tab$3$1;
+Landroidx/tv/material3/TabKt$Tab$4$1;
+Landroidx/tv/material3/TabKt$Tab$6;
+Landroidx/tv/material3/TabKt$Tab$7;
+Landroidx/tv/material3/TabKt;
+Landroidx/tv/material3/TabRowDefaults$PillIndicator$1;
+Landroidx/tv/material3/TabRowDefaults;
+Landroidx/tv/material3/TabRowKt$TabRow$1;
+Landroidx/tv/material3/TabRowKt$TabRow$2$1$1;
+Landroidx/tv/material3/TabRowKt$TabRow$2$2$1$1$2;
+Landroidx/tv/material3/TabRowKt$TabRow$2$2$1$1;
+Landroidx/tv/material3/TabRowKt$TabRow$2$2$1$separators$1;
+Landroidx/tv/material3/TabRowKt$TabRow$2$2$1;
+Landroidx/tv/material3/TabRowKt$TabRow$2;
+Landroidx/tv/material3/TabRowKt$TabRow$3;
+Landroidx/tv/material3/TabRowScopeImpl;
+Landroidx/tv/material3/TabRowSlots;
+Landroidx/tv/material3/TextKt$Text$1;
+Landroidx/tv/material3/TextKt$Text$2;
+Landroidx/tv/material3/TextKt;
+Landroidx/tv/material3/ToggleableSurfaceBorder;
+Landroidx/tv/material3/ToggleableSurfaceColors;
+Landroidx/tv/material3/ToggleableSurfaceGlow;
+Landroidx/tv/material3/ToggleableSurfaceScale;
+Landroidx/tv/material3/ToggleableSurfaceShape;
+Landroidx/tv/material3/tokens/ColorLightTokens;
+Landroidx/tv/material3/tokens/Elevation;
+Landroidx/tv/material3/tokens/PaletteTokens;
+Landroidx/tv/material3/tokens/ShapeTokens$BorderDefaultShape$1;
+Landroidx/tv/material3/tokens/ShapeTokens;
+Landroidx/tv/material3/tokens/TypographyTokensKt;
+Lcom/example/tvcomposebasedtests/ComposableSingletons$MainActivityKt;
+Lcom/example/tvcomposebasedtests/ComposableSingletons$UtilsKt$lambda-1$1;
+Lcom/example/tvcomposebasedtests/Config;
+Lcom/example/tvcomposebasedtests/JankStatsAggregator$listener$1;
+Lcom/example/tvcomposebasedtests/JankStatsAggregator;
+Lcom/example/tvcomposebasedtests/MainActivity$jankReportListener$1;
+Lcom/example/tvcomposebasedtests/MainActivity$startFrameMetrics$listener$1;
+Lcom/example/tvcomposebasedtests/MainActivity;
+Lcom/example/tvcomposebasedtests/UtilsKt$AddJankMetrics$1$2;
+Lcom/example/tvcomposebasedtests/UtilsKt$ScrollingRow$1$1$1;
+Lcom/example/tvcomposebasedtests/UtilsKt$ScrollingRow$2;
+Lcom/example/tvcomposebasedtests/UtilsKt;
+Lcom/example/tvcomposebasedtests/tvComponents/AppKt$App$1;
+Lcom/example/tvcomposebasedtests/tvComponents/ComposableSingletons$LazyContainersKt;
+Lcom/example/tvcomposebasedtests/tvComponents/ComposableSingletons$TopNavigationKt;
+Lcom/example/tvcomposebasedtests/tvComponents/Navigation;
+Lcom/example/tvcomposebasedtests/tvComponents/TopNavigationKt$PillIndicatorTabRow$1$1$1$1;
+Lcom/example/tvcomposebasedtests/tvComponents/TopNavigationKt$PillIndicatorTabRow$1;
+Lcom/example/tvcomposebasedtests/tvComponents/TopNavigationKt$TopNavigation$3$1;
+Lcom/google/gson/JsonIOException;
+Lcom/google/gson/internal/ConstructorConstructor;
+Lcom/google/gson/internal/LinkedTreeMap$1;
+Lcom/google/gson/internal/ObjectConstructor;
+Lkotlin/Function;
+Lkotlin/Lazy;
+Lkotlin/Pair;
+Lkotlin/Result$Failure;
+Lkotlin/Result;
+Lkotlin/ResultKt$$ExternalSyntheticCheckNotZero0;
+Lkotlin/ResultKt;
+Lkotlin/SynchronizedLazyImpl;
+Lkotlin/TuplesKt;
+Lkotlin/ULong$Companion;
+Lkotlin/UNINITIALIZED_VALUE;
+Lkotlin/Unit;
+Lkotlin/UnsafeLazyImpl;
+Lkotlin/collections/AbstractCollection;
+Lkotlin/collections/AbstractList;
+Lkotlin/collections/AbstractMap$toString$1;
+Lkotlin/collections/AbstractMap;
+Lkotlin/collections/AbstractMutableList;
+Lkotlin/collections/AbstractSet;
+Lkotlin/collections/ArrayDeque;
+Lkotlin/collections/ArraysKt___ArraysKt;
+Lkotlin/collections/CollectionsKt__MutableCollectionsJVMKt;
+Lkotlin/collections/CollectionsKt__ReversedViewsKt;
+Lkotlin/collections/CollectionsKt___CollectionsKt;
+Lkotlin/collections/EmptyList;
+Lkotlin/collections/EmptyMap;
+Lkotlin/coroutines/AbstractCoroutineContextElement;
+Lkotlin/coroutines/AbstractCoroutineContextKey;
+Lkotlin/coroutines/CombinedContext;
+Lkotlin/coroutines/Continuation;
+Lkotlin/coroutines/ContinuationInterceptor;
+Lkotlin/coroutines/CoroutineContext$Element;
+Lkotlin/coroutines/CoroutineContext$Key;
+Lkotlin/coroutines/CoroutineContext$plus$1;
+Lkotlin/coroutines/CoroutineContext;
+Lkotlin/coroutines/EmptyCoroutineContext;
+Lkotlin/coroutines/intrinsics/CoroutineSingletons;
+Lkotlin/coroutines/jvm/internal/BaseContinuationImpl;
+Lkotlin/coroutines/jvm/internal/CompletedContinuation;
+Lkotlin/coroutines/jvm/internal/ContinuationImpl;
+Lkotlin/coroutines/jvm/internal/CoroutineStackFrame;
+Lkotlin/coroutines/jvm/internal/SuspendLambda;
+Lkotlin/jvm/functions/Function0;
+Lkotlin/jvm/functions/Function12;
+Lkotlin/jvm/functions/Function1;
+Lkotlin/jvm/functions/Function22;
+Lkotlin/jvm/functions/Function2;
+Lkotlin/jvm/functions/Function3;
+Lkotlin/jvm/functions/Function4;
+Lkotlin/jvm/functions/Function5;
+Lkotlin/jvm/internal/ArrayIterator;
+Lkotlin/jvm/internal/CallableReference$NoReceiver;
+Lkotlin/jvm/internal/CallableReference;
+Lkotlin/jvm/internal/ClassBasedDeclarationContainer;
+Lkotlin/jvm/internal/ClassReference;
+Lkotlin/jvm/internal/FunctionBase;
+Lkotlin/jvm/internal/FunctionReferenceImpl;
+Lkotlin/jvm/internal/Lambda;
+Lkotlin/jvm/internal/PropertyReference0Impl;
+Lkotlin/jvm/internal/PropertyReference;
+Lkotlin/jvm/internal/Ref$BooleanRef;
+Lkotlin/jvm/internal/Ref$ObjectRef;
+Lkotlin/jvm/internal/Reflection;
+Lkotlin/jvm/internal/ReflectionFactory;
+Lkotlin/jvm/internal/markers/KMappedMarker;
+Lkotlin/jvm/internal/markers/KMutableCollection;
+Lkotlin/jvm/internal/markers/KMutableMap;
+Lkotlin/math/MathKt;
+Lkotlin/random/FallbackThreadLocalRandom$implStorage$1;
+Lkotlin/ranges/IntProgression;
+Lkotlin/ranges/IntProgressionIterator;
+Lkotlin/ranges/IntRange;
+Lkotlin/reflect/KCallable;
+Lkotlin/reflect/KClass;
+Lkotlin/reflect/KFunction;
+Lkotlin/reflect/KProperty0;
+Lkotlin/reflect/KProperty;
+Lkotlin/sequences/ConstrainedOnceSequence;
+Lkotlin/sequences/FilteringSequence$iterator$1;
+Lkotlin/sequences/FilteringSequence;
+Lkotlin/sequences/GeneratorSequence$iterator$1;
+Lkotlin/sequences/GeneratorSequence;
+Lkotlin/sequences/Sequence;
+Lkotlin/sequences/SequencesKt;
+Lkotlin/sequences/SequencesKt__SequencesKt$asSequence$$inlined$Sequence$1;
+Lkotlin/sequences/TransformingSequence$iterator$1;
+Lkotlin/text/StringsKt__IndentKt$getIndentFunction$2;
+Lkotlin/text/StringsKt__RegexExtensionsKt;
+Lkotlin/text/StringsKt__StringBuilderKt;
+Lkotlin/text/StringsKt__StringNumberConversionsKt;
+Lkotlin/text/StringsKt__StringsKt;
+Lkotlin/text/StringsKt___StringsKt;
+Lkotlinx/coroutines/AbstractCoroutine;
+Lkotlinx/coroutines/Active;
+Lkotlinx/coroutines/BlockingCoroutine;
+Lkotlinx/coroutines/BlockingEventLoop;
+Lkotlinx/coroutines/CancelHandler;
+Lkotlinx/coroutines/CancellableContinuation;
+Lkotlinx/coroutines/CancellableContinuationImpl;
+Lkotlinx/coroutines/CancelledContinuation;
+Lkotlinx/coroutines/ChildContinuation;
+Lkotlinx/coroutines/ChildHandle;
+Lkotlinx/coroutines/ChildHandleNode;
+Lkotlinx/coroutines/ChildJob;
+Lkotlinx/coroutines/CompletableDeferredImpl;
+Lkotlinx/coroutines/CompletedContinuation;
+Lkotlinx/coroutines/CompletedExceptionally;
+Lkotlinx/coroutines/CompletedWithCancellation;
+Lkotlinx/coroutines/CoroutineContextKt$foldCopies$1;
+Lkotlinx/coroutines/CoroutineDispatcher$Key$1;
+Lkotlinx/coroutines/CoroutineDispatcher$Key;
+Lkotlinx/coroutines/CoroutineDispatcher;
+Lkotlinx/coroutines/CoroutineExceptionHandler;
+Lkotlinx/coroutines/CoroutineScope;
+Lkotlinx/coroutines/DefaultExecutor;
+Lkotlinx/coroutines/DefaultExecutorKt;
+Lkotlinx/coroutines/Delay;
+Lkotlinx/coroutines/DispatchedTask;
+Lkotlinx/coroutines/Dispatchers;
+Lkotlinx/coroutines/DisposableHandle;
+Lkotlinx/coroutines/Empty;
+Lkotlinx/coroutines/EventLoopImplBase;
+Lkotlinx/coroutines/EventLoopImplPlatform;
+Lkotlinx/coroutines/ExecutorCoroutineDispatcher$Key$1;
+Lkotlinx/coroutines/ExecutorCoroutineDispatcher;
+Lkotlinx/coroutines/GlobalScope;
+Lkotlinx/coroutines/InactiveNodeList;
+Lkotlinx/coroutines/Incomplete;
+Lkotlinx/coroutines/IncompleteStateBox;
+Lkotlinx/coroutines/InvokeOnCancel;
+Lkotlinx/coroutines/InvokeOnCancelling;
+Lkotlinx/coroutines/InvokeOnCompletion;
+Lkotlinx/coroutines/Job;
+Lkotlinx/coroutines/JobCancellingNode;
+Lkotlinx/coroutines/JobImpl;
+Lkotlinx/coroutines/JobNode;
+Lkotlinx/coroutines/JobSupport$ChildCompletion;
+Lkotlinx/coroutines/JobSupport$Finishing;
+Lkotlinx/coroutines/JobSupport$addLastAtomic$$inlined$addLastIf$1;
+Lkotlinx/coroutines/JobSupport;
+Lkotlinx/coroutines/MainCoroutineDispatcher;
+Lkotlinx/coroutines/NodeList;
+Lkotlinx/coroutines/NonDisposableHandle;
+Lkotlinx/coroutines/NotCompleted;
+Lkotlinx/coroutines/ParentJob;
+Lkotlinx/coroutines/StandaloneCoroutine;
+Lkotlinx/coroutines/SupervisorJobImpl;
+Lkotlinx/coroutines/ThreadLocalEventLoop;
+Lkotlinx/coroutines/TimeoutCancellationException;
+Lkotlinx/coroutines/Unconfined;
+Lkotlinx/coroutines/UndispatchedCoroutine;
+Lkotlinx/coroutines/UndispatchedMarker;
+Lkotlinx/coroutines/Waiter;
+Lkotlinx/coroutines/android/AndroidDispatcherFactory;
+Lkotlinx/coroutines/android/HandlerContext;
+Lkotlinx/coroutines/android/HandlerDispatcher;
+Lkotlinx/coroutines/android/HandlerDispatcherKt;
+Lkotlinx/coroutines/channels/BufferOverflow;
+Lkotlinx/coroutines/channels/BufferedChannel$BufferedChannelIterator;
+Lkotlinx/coroutines/channels/BufferedChannel;
+Lkotlinx/coroutines/channels/BufferedChannelKt$createSegmentFunction$1;
+Lkotlinx/coroutines/channels/BufferedChannelKt;
+Lkotlinx/coroutines/channels/Channel$Factory;
+Lkotlinx/coroutines/channels/Channel;
+Lkotlinx/coroutines/channels/ChannelResult$Closed;
+Lkotlinx/coroutines/channels/ChannelResult$Failed;
+Lkotlinx/coroutines/channels/ChannelSegment;
+Lkotlinx/coroutines/channels/ConflatedBufferedChannel;
+Lkotlinx/coroutines/channels/ProducerCoroutine;
+Lkotlinx/coroutines/channels/ProducerScope;
+Lkotlinx/coroutines/channels/ReceiveChannel;
+Lkotlinx/coroutines/channels/SendChannel;
+Lkotlinx/coroutines/channels/WaiterEB;
+Lkotlinx/coroutines/flow/AbstractFlow$collect$1;
+Lkotlinx/coroutines/flow/DistinctFlowImpl$collect$2$emit$1;
+Lkotlinx/coroutines/flow/DistinctFlowImpl$collect$2;
+Lkotlinx/coroutines/flow/DistinctFlowImpl;
+Lkotlinx/coroutines/flow/Flow;
+Lkotlinx/coroutines/flow/FlowCollector;
+Lkotlinx/coroutines/flow/FlowKt__ChannelsKt$emitAllImpl$1;
+Lkotlinx/coroutines/flow/FlowKt__LimitKt$dropWhile$$inlined$unsafeFlow$1;
+Lkotlinx/coroutines/flow/FlowKt__LimitKt$dropWhile$1$1$emit$1;
+Lkotlinx/coroutines/flow/FlowKt__LimitKt$dropWhile$1$1;
+Lkotlinx/coroutines/flow/FlowKt__MergeKt$mapLatest$1;
+Lkotlinx/coroutines/flow/FlowKt__MergeKt;
+Lkotlinx/coroutines/flow/FlowKt__ReduceKt$first$$inlined$collectWhile$2$1;
+Lkotlinx/coroutines/flow/FlowKt__ReduceKt$first$$inlined$collectWhile$2;
+Lkotlinx/coroutines/flow/FlowKt__ReduceKt$first$3;
+Lkotlinx/coroutines/flow/FlowKt__ShareKt$launchSharing$1$2;
+Lkotlinx/coroutines/flow/FlowKt__ShareKt$launchSharing$1;
+Lkotlinx/coroutines/flow/MutableSharedFlow;
+Lkotlinx/coroutines/flow/ReadonlyStateFlow;
+Lkotlinx/coroutines/flow/SafeFlow;
+Lkotlinx/coroutines/flow/SharedFlowImpl$Emitter;
+Lkotlinx/coroutines/flow/SharedFlowImpl$collect$1;
+Lkotlinx/coroutines/flow/SharedFlowImpl;
+Lkotlinx/coroutines/flow/SharedFlowSlot;
+Lkotlinx/coroutines/flow/SharingCommand;
+Lkotlinx/coroutines/flow/SharingConfig;
+Lkotlinx/coroutines/flow/SharingStarted;
+Lkotlinx/coroutines/flow/StartedLazily;
+Lkotlinx/coroutines/flow/StartedWhileSubscribed$command$1;
+Lkotlinx/coroutines/flow/StartedWhileSubscribed$command$2;
+Lkotlinx/coroutines/flow/StartedWhileSubscribed;
+Lkotlinx/coroutines/flow/StateFlow;
+Lkotlinx/coroutines/flow/StateFlowImpl$collect$1;
+Lkotlinx/coroutines/flow/StateFlowImpl;
+Lkotlinx/coroutines/flow/StateFlowSlot;
+Lkotlinx/coroutines/flow/internal/AbortFlowException;
+Lkotlinx/coroutines/flow/internal/AbstractSharedFlow;
+Lkotlinx/coroutines/flow/internal/AbstractSharedFlowSlot;
+Lkotlinx/coroutines/flow/internal/ChannelFlow$collect$2;
+Lkotlinx/coroutines/flow/internal/ChannelFlow$collectToFun$1;
+Lkotlinx/coroutines/flow/internal/ChannelFlow;
+Lkotlinx/coroutines/flow/internal/ChannelFlowOperator;
+Lkotlinx/coroutines/flow/internal/ChannelFlowTransformLatest$flowCollect$3$1$2;
+Lkotlinx/coroutines/flow/internal/ChannelFlowTransformLatest$flowCollect$3$1$emit$1;
+Lkotlinx/coroutines/flow/internal/ChannelFlowTransformLatest$flowCollect$3$1;
+Lkotlinx/coroutines/flow/internal/ChannelFlowTransformLatest$flowCollect$3;
+Lkotlinx/coroutines/flow/internal/ChannelFlowTransformLatest;
+Lkotlinx/coroutines/flow/internal/FusibleFlow;
+Lkotlinx/coroutines/flow/internal/NoOpContinuation;
+Lkotlinx/coroutines/flow/internal/NopCollector;
+Lkotlinx/coroutines/flow/internal/SafeCollector;
+Lkotlinx/coroutines/flow/internal/SendingCollector;
+Lkotlinx/coroutines/flow/internal/SubscriptionCountStateFlow;
+Lkotlinx/coroutines/internal/AtomicOp;
+Lkotlinx/coroutines/internal/ConcurrentLinkedListNode;
+Lkotlinx/coroutines/internal/ContextScope;
+Lkotlinx/coroutines/internal/DispatchedContinuation;
+Lkotlinx/coroutines/internal/LimitedDispatcher;
+Lkotlinx/coroutines/internal/LockFreeLinkedListNode$toString$1;
+Lkotlinx/coroutines/internal/LockFreeLinkedListNode;
+Lkotlinx/coroutines/internal/LockFreeTaskQueue;
+Lkotlinx/coroutines/internal/LockFreeTaskQueueCore;
+Lkotlinx/coroutines/internal/MainDispatcherFactory;
+Lkotlinx/coroutines/internal/MainDispatcherLoader;
+Lkotlinx/coroutines/internal/OpDescriptor;
+Lkotlinx/coroutines/internal/Removed;
+Lkotlinx/coroutines/internal/ResizableAtomicArray;
+Lkotlinx/coroutines/internal/ScopeCoroutine;
+Lkotlinx/coroutines/internal/Segment;
+Lkotlinx/coroutines/internal/StackTraceRecoveryKt;
+Lkotlinx/coroutines/internal/Symbol;
+Lkotlinx/coroutines/internal/SystemPropsKt__SystemPropsKt;
+Lkotlinx/coroutines/internal/ThreadState;
+Lkotlinx/coroutines/scheduling/CoroutineScheduler;
+Lkotlinx/coroutines/scheduling/DefaultIoScheduler;
+Lkotlinx/coroutines/scheduling/DefaultScheduler;
+Lkotlinx/coroutines/scheduling/GlobalQueue;
+Lkotlinx/coroutines/scheduling/NanoTimeSource;
+Lkotlinx/coroutines/scheduling/SchedulerCoroutineDispatcher;
+Lkotlinx/coroutines/scheduling/Task;
+Lkotlinx/coroutines/scheduling/TasksKt;
+Lkotlinx/coroutines/scheduling/UnlimitedIoScheduler;
+Lkotlinx/coroutines/sync/Mutex;
+Lkotlinx/coroutines/sync/MutexImpl$CancellableContinuationWithOwner$resume$2;
+Lkotlinx/coroutines/sync/MutexImpl$CancellableContinuationWithOwner;
+Lkotlinx/coroutines/sync/MutexImpl;
+Lkotlinx/coroutines/sync/SemaphoreImpl$addAcquireToQueue$createNewSegment$1;
+Lkotlinx/coroutines/sync/SemaphoreImpl$tryResumeNextFromQueue$createNewSegment$1;
+Lkotlinx/coroutines/sync/SemaphoreImpl;
+Lkotlinx/coroutines/sync/SemaphoreKt;
+Lkotlinx/coroutines/sync/SemaphoreSegment;
+Lokhttp3/Headers$Builder;
+Lokhttp3/MediaType;
+PL_COROUTINE/ArtificialStackFrames;->access$removeRunning(Landroidx/compose/runtime/Stack;)V
+PL_COROUTINE/ArtificialStackFrames;->moveGroup(Landroidx/compose/runtime/SlotWriter;ILandroidx/compose/runtime/SlotWriter;ZZZ)Ljava/util/List;
+PLandroidx/activity/ComponentActivity$ReportFullyDrawnExecutorApi16Impl;->run()V
+PLandroidx/arch/core/internal/SafeIterableMap$ListIterator;->next()Ljava/lang/Object;
+PLandroidx/arch/core/internal/SafeIterableMap$ListIterator;->nextNode()Landroidx/arch/core/internal/SafeIterableMap$Entry;
+PLandroidx/arch/core/internal/SafeIterableMap$ListIterator;->supportRemove(Landroidx/arch/core/internal/SafeIterableMap$Entry;)V
+PLandroidx/collection/ArrayMap$EntrySet;->iterator()Ljava/util/Iterator;
+PLandroidx/compose/foundation/DrawOverscrollModifier;->equals(Ljava/lang/Object;)Z
+PLandroidx/compose/foundation/OverscrollConfiguration;->equals(Ljava/lang/Object;)Z
+PLandroidx/compose/foundation/ScrollingLayoutElement;->equals(Ljava/lang/Object;)Z
+PLandroidx/compose/foundation/gestures/BringIntoViewRequestPriorityQueue;->resumeAndRemoveAll()V
+PLandroidx/compose/foundation/gestures/DraggableNode;->disposeInteractionSource()V
+PLandroidx/compose/foundation/gestures/DraggableNode;->onDetach()V
+PLandroidx/compose/foundation/gestures/ScrollableElement;->equals(Ljava/lang/Object;)Z
+PLandroidx/compose/foundation/layout/OffsetElement;->update(Landroidx/compose/ui/Modifier$Node;)V
+PLandroidx/compose/foundation/layout/SizeElement;->update(Landroidx/compose/ui/Modifier$Node;)V
+PLandroidx/compose/foundation/lazy/layout/LazyLayoutPrefetcher;->onForgotten()V
+PLandroidx/compose/runtime/ComposerImpl$CompositionContextHolder;->onForgotten()V
+PLandroidx/compose/runtime/ComposerImpl$CompositionContextImpl;->dispose()V
+PLandroidx/compose/runtime/ComposerImpl;->recordDelete()V
+PLandroidx/compose/runtime/ComposerImpl;->reportFreeMovableContent$reportGroup(Landroidx/compose/runtime/ComposerImpl;IZI)I
+PLandroidx/compose/runtime/ComposerImpl;->reportFreeMovableContent(I)V
+PLandroidx/compose/runtime/CompositionContext;->unregisterComposer$runtime_release(Landroidx/compose/runtime/Composer;)V
+PLandroidx/compose/runtime/CompositionScopedCoroutineScopeCanceller;->onForgotten()V
+PLandroidx/compose/runtime/Pending;->nodePositionOf(Landroidx/compose/runtime/KeyInfo;)I
+PLandroidx/compose/runtime/Pending;->updateNodeCount(II)Z
+PLandroidx/compose/runtime/Recomposer$effectJob$1$1;->invoke(Ljava/lang/Throwable;)V
+PLandroidx/compose/runtime/Recomposer;->cancel()V
+PLandroidx/compose/runtime/Recomposer;->reportRemovedComposition$runtime_release(Landroidx/compose/runtime/CompositionImpl;)V
+PLandroidx/compose/runtime/SlotWriter;->ensureStarted(I)V
+PLandroidx/compose/runtime/SlotWriter;->startGroup()V
+PLandroidx/compose/runtime/changelist/ComposerChangeListWriter;->removeNode(II)V
+PLandroidx/compose/runtime/changelist/Operation$EndCompositionScope;-><clinit>()V
+PLandroidx/compose/runtime/changelist/Operation$EndCompositionScope;-><init>()V
+PLandroidx/compose/runtime/changelist/Operation$EndCompositionScope;->execute(Landroidx/compose/runtime/changelist/Operations$OpIterator;Landroidx/compose/runtime/Applier;Landroidx/compose/runtime/SlotWriter;Landroidx/compose/runtime/CompositionImpl$RememberEventDispatcher;)V
+PLandroidx/compose/runtime/changelist/Operation$EndCurrentGroup;-><clinit>()V
+PLandroidx/compose/runtime/changelist/Operation$EndCurrentGroup;-><init>()V
+PLandroidx/compose/runtime/changelist/Operation$EndCurrentGroup;->execute(Landroidx/compose/runtime/changelist/Operations$OpIterator;Landroidx/compose/runtime/Applier;Landroidx/compose/runtime/SlotWriter;Landroidx/compose/runtime/CompositionImpl$RememberEventDispatcher;)V
+PLandroidx/compose/runtime/changelist/Operation$EnsureGroupStarted;-><clinit>()V
+PLandroidx/compose/runtime/changelist/Operation$EnsureGroupStarted;-><init>()V
+PLandroidx/compose/runtime/changelist/Operation$EnsureGroupStarted;->execute(Landroidx/compose/runtime/changelist/Operations$OpIterator;Landroidx/compose/runtime/Applier;Landroidx/compose/runtime/SlotWriter;Landroidx/compose/runtime/CompositionImpl$RememberEventDispatcher;)V
+PLandroidx/compose/runtime/changelist/Operation$EnsureRootGroupStarted;-><clinit>()V
+PLandroidx/compose/runtime/changelist/Operation$EnsureRootGroupStarted;-><init>()V
+PLandroidx/compose/runtime/changelist/Operation$EnsureRootGroupStarted;->execute(Landroidx/compose/runtime/changelist/Operations$OpIterator;Landroidx/compose/runtime/Applier;Landroidx/compose/runtime/SlotWriter;Landroidx/compose/runtime/CompositionImpl$RememberEventDispatcher;)V
+PLandroidx/compose/runtime/changelist/Operation$RemoveCurrentGroup;-><clinit>()V
+PLandroidx/compose/runtime/changelist/Operation$RemoveCurrentGroup;-><init>()V
+PLandroidx/compose/runtime/changelist/Operation$RemoveCurrentGroup;->execute(Landroidx/compose/runtime/changelist/Operations$OpIterator;Landroidx/compose/runtime/Applier;Landroidx/compose/runtime/SlotWriter;Landroidx/compose/runtime/CompositionImpl$RememberEventDispatcher;)V
+PLandroidx/compose/runtime/changelist/Operation$RemoveNode;-><clinit>()V
+PLandroidx/compose/runtime/changelist/Operation$RemoveNode;-><init>()V
+PLandroidx/compose/runtime/changelist/Operation$RemoveNode;->execute(Landroidx/compose/runtime/changelist/Operations$OpIterator;Landroidx/compose/runtime/Applier;Landroidx/compose/runtime/SlotWriter;Landroidx/compose/runtime/CompositionImpl$RememberEventDispatcher;)V
+PLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/TrieNode;->remove(IILandroidx/compose/runtime/Stack;)Landroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/TrieNode;
+PLandroidx/compose/runtime/saveable/SaveableHolder;->onForgotten()V
+PLandroidx/compose/runtime/saveable/SaveableStateRegistryImpl$registerProvider$3;->unregister()V
+PLandroidx/compose/runtime/snapshots/Snapshot$Companion$$ExternalSyntheticLambda0;->dispose()V
+PLandroidx/compose/runtime/snapshots/SnapshotIdSet$iterator$1;-><init>(Landroidx/compose/runtime/snapshots/SnapshotIdSet;Lkotlin/coroutines/Continuation;)V
+PLandroidx/compose/runtime/snapshots/SnapshotIdSet$iterator$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation;
+PLandroidx/compose/runtime/snapshots/SnapshotIdSet$iterator$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;
+PLandroidx/compose/runtime/snapshots/SnapshotIdSet;->iterator()Ljava/util/Iterator;
+PLandroidx/compose/ui/autofill/AutofillCallback;->unregister(Landroidx/compose/ui/autofill/AndroidAutofill;)V
+PLandroidx/compose/ui/focus/FocusOwnerImpl;->clearFocus(ZZ)V
+PLandroidx/compose/ui/input/nestedscroll/NestedScrollNode;->onDetach()V
+PLandroidx/compose/ui/input/pointer/SuspendPointerInputElement;->equals(Ljava/lang/Object;)Z
+PLandroidx/compose/ui/input/pointer/SuspendingPointerInputModifierNodeImpl;->onDetach()V
+PLandroidx/compose/ui/input/pointer/SuspendingPointerInputModifierNodeImpl;->resetPointerInputHandler()V
+PLandroidx/compose/ui/layout/OnSizeChangedModifier;->equals(Ljava/lang/Object;)Z
+PLandroidx/compose/ui/modifier/ModifierLocalManager;->invalidate()V
+PLandroidx/compose/ui/node/BackwardsCompatNode;->onDetach()V
+PLandroidx/compose/ui/node/MeasureAndLayoutDelegate$PostponedRequest;-><init>(Landroidx/compose/ui/node/LayoutNode;ZZ)V
+PLandroidx/compose/ui/node/UiApplier;->remove(II)V
+PLandroidx/compose/ui/platform/AndroidComposeView;->getModifierLocalManager()Landroidx/compose/ui/modifier/ModifierLocalManager;
+PLandroidx/compose/ui/platform/AndroidComposeView;->onDetachedFromWindow()V
+PLandroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat$1;->onViewDetachedFromWindow(Landroid/view/View;)V
+PLandroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat$boundsUpdatesEventLoop$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;
+PLandroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat;->onStop(Landroidx/lifecycle/LifecycleOwner;)V
+PLandroidx/compose/ui/platform/DisposableSaveableStateRegistry_androidKt$DisposableSaveableStateRegistry$1;->invoke()Ljava/lang/Object;
+PLandroidx/compose/ui/platform/WeakCache;-><init>(Lcom/google/gson/internal/ConstructorConstructor;Ljava/lang/Class;)V
+PLandroidx/compose/ui/platform/WindowRecomposer_androidKt$createLifecycleAwareWindowRecomposer$1;->onViewDetachedFromWindow(Landroid/view/View;)V
+PLandroidx/compose/ui/platform/WrappedComposition;->dispose()V
+PLandroidx/compose/ui/text/PlatformTextStyle;->equals(Ljava/lang/Object;)Z
+PLandroidx/concurrent/futures/AbstractResolvableFuture$Listener;-><clinit>()V
+PLandroidx/concurrent/futures/AbstractResolvableFuture$SafeAtomicHelper;-><init>(Ljava/util/concurrent/atomic/AtomicReferenceFieldUpdater;Ljava/util/concurrent/atomic/AtomicReferenceFieldUpdater;Ljava/util/concurrent/atomic/AtomicReferenceFieldUpdater;Ljava/util/concurrent/atomic/AtomicReferenceFieldUpdater;Ljava/util/concurrent/atomic/AtomicReferenceFieldUpdater;)V
+PLandroidx/concurrent/futures/AbstractResolvableFuture$SafeAtomicHelper;->casListeners(Landroidx/concurrent/futures/AbstractResolvableFuture;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
+PLandroidx/concurrent/futures/AbstractResolvableFuture$Waiter;-><clinit>()V
+PLandroidx/concurrent/futures/AbstractResolvableFuture$Waiter;-><init>(I)V
+PLandroidx/concurrent/futures/AbstractResolvableFuture;-><clinit>()V
+PLandroidx/concurrent/futures/AbstractResolvableFuture;->complete(Landroidx/concurrent/futures/AbstractResolvableFuture;)V
+PLandroidx/core/view/ViewKt$ancestors$1;-><clinit>()V
+PLandroidx/core/view/ViewKt$ancestors$1;-><init>()V
+PLandroidx/core/view/ViewKt$ancestors$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
+PLandroidx/lifecycle/DefaultLifecycleObserver;->onDestroy(Landroidx/lifecycle/LifecycleOwner;)V
+PLandroidx/lifecycle/DefaultLifecycleObserver;->onStop(Landroidx/lifecycle/LifecycleOwner;)V
+PLandroidx/lifecycle/EmptyActivityLifecycleCallbacks;->onActivityDestroyed(Landroid/app/Activity;)V
+PLandroidx/lifecycle/EmptyActivityLifecycleCallbacks;->onActivityPaused(Landroid/app/Activity;)V
+PLandroidx/lifecycle/EmptyActivityLifecycleCallbacks;->onActivityStopped(Landroid/app/Activity;)V
+PLandroidx/lifecycle/ProcessLifecycleOwner$attach$1;->onActivityPaused(Landroid/app/Activity;)V
+PLandroidx/lifecycle/ProcessLifecycleOwner$attach$1;->onActivityStopped(Landroid/app/Activity;)V
+PLandroidx/lifecycle/ReportFragment$LifecycleCallbacks;->onActivityDestroyed(Landroid/app/Activity;)V
+PLandroidx/lifecycle/ReportFragment$LifecycleCallbacks;->onActivityPaused(Landroid/app/Activity;)V
+PLandroidx/lifecycle/ReportFragment$LifecycleCallbacks;->onActivityPreDestroyed(Landroid/app/Activity;)V
+PLandroidx/lifecycle/ReportFragment$LifecycleCallbacks;->onActivityPrePaused(Landroid/app/Activity;)V
+PLandroidx/lifecycle/ReportFragment$LifecycleCallbacks;->onActivityPreStopped(Landroid/app/Activity;)V
+PLandroidx/lifecycle/ReportFragment$LifecycleCallbacks;->onActivityStopped(Landroid/app/Activity;)V
+PLandroidx/lifecycle/ReportFragment;->onDestroy()V
+PLandroidx/lifecycle/ReportFragment;->onPause()V
+PLandroidx/lifecycle/ReportFragment;->onStop()V
+PLandroidx/metrics/performance/JankStatsApi24Impl;->removeFrameMetricsListenerDelegate(Landroidx/metrics/performance/JankStatsApi24Impl$$ExternalSyntheticLambda0;Landroid/view/Window;)V
+PLandroidx/profileinstaller/ProfileInstaller$$ExternalSyntheticLambda1;-><init>(I)V
+PLandroidx/profileinstaller/ProfileInstallerInitializer$$ExternalSyntheticLambda1;->run()V
+PLandroidx/profileinstaller/ProfileVerifier$Cache;-><init>(IIJJ)V
+PLandroidx/profileinstaller/ProfileVerifier$Cache;->writeOnFile(Ljava/io/File;)V
+PLandroidx/profileinstaller/ProfileVerifier;-><clinit>()V
+PLandroidx/profileinstaller/ProfileVerifier;->setCompilationStatus(IZZ)Landroidx/compose/ui/unit/Dp$Companion;
+PLandroidx/profileinstaller/ProfileVerifier;->writeProfileVerification(Landroid/content/Context;Z)V
+PLandroidx/tv/foundation/lazy/layout/LazyLayoutBeyondBoundsInfo$Interval;->equals(Ljava/lang/Object;)Z
+PLandroidx/tv/foundation/lazy/list/LazyLayoutBeyondBoundsModifierLocal;->getValue()Ljava/lang/Object;
+PLcom/example/tvcomposebasedtests/MainActivity;->onPause()V
+PLcom/google/gson/FieldNamingPolicy$1;-><init>()V
+PLcom/google/gson/FieldNamingPolicy$1;->translateName(Ljava/lang/reflect/Field;)Ljava/lang/String;
+PLcom/google/gson/FieldNamingPolicy$2;-><init>()V
+PLcom/google/gson/FieldNamingPolicy$3;-><init>()V
+PLcom/google/gson/FieldNamingPolicy$4;-><init>()V
+PLcom/google/gson/FieldNamingPolicy$5;-><init>()V
+PLcom/google/gson/FieldNamingPolicy$6;-><init>()V
+PLcom/google/gson/FieldNamingPolicy$7;-><init>()V
+PLcom/google/gson/FieldNamingPolicy;-><clinit>()V
+PLcom/google/gson/FieldNamingPolicy;-><init>(Ljava/lang/String;I)V
+PLcom/google/gson/Gson$1;-><init>(I)V
+PLcom/google/gson/Gson$3;-><init>(I)V
+PLcom/google/gson/Gson$4;-><init>(Lcom/google/gson/TypeAdapter;I)V
+PLcom/google/gson/Gson$FutureTypeAdapter;-><init>()V
+PLcom/google/gson/Gson;-><init>()V
+PLcom/google/gson/Gson;->newJsonWriter(Ljava/io/Writer;)Lcom/google/gson/stream/JsonWriter;
+PLcom/google/gson/Gson;->toJson(Lcom/google/gson/JsonObject;Lcom/google/gson/stream/JsonWriter;)V
+PLcom/google/gson/JsonNull;-><clinit>()V
+PLcom/google/gson/JsonPrimitive;-><init>(Ljava/lang/String;)V
+PLcom/google/gson/ToNumberPolicy$1;-><init>()V
+PLcom/google/gson/ToNumberPolicy$2;-><init>()V
+PLcom/google/gson/ToNumberPolicy$3;-><init>()V
+PLcom/google/gson/ToNumberPolicy$4;-><init>()V
+PLcom/google/gson/ToNumberPolicy;-><clinit>()V
+PLcom/google/gson/ToNumberPolicy;-><init>(Ljava/lang/String;I)V
+PLcom/google/gson/TypeAdapter;->nullSafe()Lcom/google/gson/Gson$4;
+PLcom/google/gson/internal/$Gson$Types$ParameterizedTypeImpl;-><init>(Ljava/lang/reflect/Type;Ljava/lang/reflect/Type;[Ljava/lang/reflect/Type;)V
+PLcom/google/gson/internal/$Gson$Types$ParameterizedTypeImpl;->getActualTypeArguments()[Ljava/lang/reflect/Type;
+PLcom/google/gson/internal/ConstructorConstructor;-><init>(Ljava/util/Map;Ljava/util/List;)V
+PLcom/google/gson/internal/ConstructorConstructor;->checkInstantiable(Ljava/lang/Class;)Ljava/lang/String;
+PLcom/google/gson/internal/ConstructorConstructor;->get(Lcom/google/gson/reflect/TypeToken;)Lcom/google/gson/internal/ObjectConstructor;
+PLcom/google/gson/internal/Excluder;-><clinit>()V
+PLcom/google/gson/internal/Excluder;-><init>()V
+PLcom/google/gson/internal/Excluder;->create(Lcom/google/gson/Gson;Lcom/google/gson/reflect/TypeToken;)Lcom/google/gson/TypeAdapter;
+PLcom/google/gson/internal/Excluder;->excludeClassInStrategy(Z)V
+PLcom/google/gson/internal/Excluder;->isAnonymousOrNonStaticLocal(Ljava/lang/Class;)Z
+PLcom/google/gson/internal/LinkedTreeMap$KeySet$1;-><init>(Landroidx/collection/ArrayMap$EntrySet;)V
+PLcom/google/gson/internal/LinkedTreeMap$KeySet$1;->next()Ljava/lang/Object;
+PLcom/google/gson/internal/LinkedTreeMap$LinkedTreeMapIterator;->nextNode()Lcom/google/gson/internal/LinkedTreeMap$Node;
+PLcom/google/gson/internal/LinkedTreeMap$Node;->getKey()Ljava/lang/Object;
+PLcom/google/gson/internal/LinkedTreeMap;-><clinit>()V
+PLcom/google/gson/internal/bind/ArrayTypeAdapter;-><clinit>()V
+PLcom/google/gson/internal/bind/CollectionTypeAdapterFactory;-><init>(Lcom/google/gson/internal/ConstructorConstructor;I)V
+PLcom/google/gson/internal/bind/CollectionTypeAdapterFactory;->create(Lcom/google/gson/Gson;Lcom/google/gson/reflect/TypeToken;)Lcom/google/gson/TypeAdapter;
+PLcom/google/gson/internal/bind/DateTypeAdapter;-><clinit>()V
+PLcom/google/gson/internal/bind/JsonTreeWriter$1;-><init>()V
+PLcom/google/gson/internal/bind/JsonTreeWriter;-><clinit>()V
+PLcom/google/gson/internal/bind/JsonTreeWriter;->beginObject()V
+PLcom/google/gson/internal/bind/JsonTreeWriter;->value(Ljava/lang/Boolean;)V
+PLcom/google/gson/internal/bind/MapTypeAdapterFactory;-><init>(Lcom/google/gson/internal/ConstructorConstructor;)V
+PLcom/google/gson/internal/bind/MapTypeAdapterFactory;->create(Lcom/google/gson/Gson;Lcom/google/gson/reflect/TypeToken;)Lcom/google/gson/TypeAdapter;
+PLcom/google/gson/internal/bind/NumberTypeAdapter$1;-><init>(ILjava/lang/Object;)V
+PLcom/google/gson/internal/bind/NumberTypeAdapter$1;->create(Lcom/google/gson/Gson;Lcom/google/gson/reflect/TypeToken;)Lcom/google/gson/TypeAdapter;
+PLcom/google/gson/internal/bind/NumberTypeAdapter;-><clinit>()V
+PLcom/google/gson/internal/bind/ObjectTypeAdapter;-><clinit>()V
+PLcom/google/gson/internal/bind/ObjectTypeAdapter;-><init>(Lcom/google/gson/Gson;)V
+PLcom/google/gson/internal/bind/ReflectiveTypeAdapterFactory$1;-><init>(Ljava/lang/String;Ljava/lang/reflect/Field;ZZLjava/lang/reflect/Method;ZLcom/google/gson/TypeAdapter;Lcom/google/gson/Gson;Lcom/google/gson/reflect/TypeToken;)V
+PLcom/google/gson/internal/bind/ReflectiveTypeAdapterFactory$Adapter;-><init>(Ljava/util/LinkedHashMap;)V
+PLcom/google/gson/internal/bind/ReflectiveTypeAdapterFactory;-><init>(Lcom/google/gson/internal/ConstructorConstructor;Lcom/google/gson/internal/Excluder;Lcom/google/gson/internal/bind/CollectionTypeAdapterFactory;Ljava/util/List;)V
+PLcom/google/gson/internal/bind/ReflectiveTypeAdapterFactory;->create(Lcom/google/gson/Gson;Lcom/google/gson/reflect/TypeToken;)Lcom/google/gson/TypeAdapter;
+PLcom/google/gson/internal/bind/ReflectiveTypeAdapterFactory;->getBoundFields(Lcom/google/gson/Gson;Lcom/google/gson/reflect/TypeToken;Ljava/lang/Class;Z)Ljava/util/LinkedHashMap;
+PLcom/google/gson/internal/bind/ReflectiveTypeAdapterFactory;->includeField(Ljava/lang/reflect/Field;Z)Z
+PLcom/google/gson/internal/bind/TypeAdapters$29;-><init>(I)V
+PLcom/google/gson/internal/bind/TypeAdapters$29;->create(Lcom/google/gson/Gson;Lcom/google/gson/reflect/TypeToken;)Lcom/google/gson/TypeAdapter;
+PLcom/google/gson/internal/bind/TypeAdapters$31;-><init>(Ljava/lang/Class;Lcom/google/gson/TypeAdapter;I)V
+PLcom/google/gson/internal/bind/TypeAdapters$31;->create(Lcom/google/gson/Gson;Lcom/google/gson/reflect/TypeToken;)Lcom/google/gson/TypeAdapter;
+PLcom/google/gson/internal/bind/TypeAdapters$32;-><init>(Ljava/lang/Class;Ljava/lang/Class;Lcom/google/gson/TypeAdapter;I)V
+PLcom/google/gson/internal/bind/TypeAdapters$32;->create(Lcom/google/gson/Gson;Lcom/google/gson/reflect/TypeToken;)Lcom/google/gson/TypeAdapter;
+PLcom/google/gson/internal/bind/TypeAdapters$34$1;-><init>(Lcom/google/gson/Gson;Ljava/lang/reflect/Type;Lcom/google/gson/TypeAdapter;Lcom/google/gson/internal/ObjectConstructor;)V
+PLcom/google/gson/internal/bind/TypeAdapters;-><clinit>()V
+PLcom/google/gson/internal/bind/TypeAdapters;->newFactory(Ljava/lang/Class;Lcom/google/gson/TypeAdapter;)Lcom/google/gson/internal/bind/TypeAdapters$31;
+PLcom/google/gson/internal/bind/TypeAdapters;->newFactory(Ljava/lang/Class;Ljava/lang/Class;Lcom/google/gson/TypeAdapter;)Lcom/google/gson/internal/bind/TypeAdapters$32;
+PLcom/google/gson/internal/reflect/ReflectionHelper$RecordNotSupportedHelper;-><init>()V
+PLcom/google/gson/internal/reflect/ReflectionHelper$RecordNotSupportedHelper;->isRecord(Ljava/lang/Class;)Z
+PLcom/google/gson/internal/reflect/ReflectionHelper$RecordSupportedHelper;-><init>()V
+PLcom/google/gson/internal/reflect/ReflectionHelper;-><clinit>()V
+PLcom/google/gson/internal/reflect/ReflectionHelper;->makeAccessible(Ljava/lang/reflect/AccessibleObject;)V
+PLcom/google/gson/internal/sql/SqlDateTypeAdapter;-><clinit>()V
+PLcom/google/gson/internal/sql/SqlTimeTypeAdapter;-><clinit>()V
+PLcom/google/gson/internal/sql/SqlTimestampTypeAdapter;-><clinit>()V
+PLcom/google/gson/internal/sql/SqlTypesSupport;-><clinit>()V
+PLcom/google/gson/stream/JsonWriter;-><clinit>()V
+PLcom/google/gson/stream/JsonWriter;->endArray()V
+PLcom/google/gson/stream/JsonWriter;->name(Ljava/lang/String;)V
+PLcom/google/gson/stream/JsonWriter;->newline()V
+PLkotlin/ResultKt;->SampleTvLazyColumn(ILandroidx/compose/runtime/Composer;I)V
+PLkotlin/ResultKt;->TvLazyColumn(Landroidx/compose/ui/Modifier;Landroidx/tv/foundation/lazy/list/TvLazyListState;Landroidx/compose/foundation/layout/PaddingValuesImpl;ZLandroidx/compose/foundation/layout/Arrangement$Vertical;Landroidx/compose/ui/Alignment$Horizontal;ZLandroidx/tv/foundation/PivotOffsets;Lkotlin/jvm/functions/Function1;Landroidx/compose/runtime/Composer;II)V
+PLkotlin/ResultKt;->checkArgument(Z)V
+PLkotlin/ResultKt;->checkNotPrimitive(Ljava/lang/reflect/Type;)V
+PLkotlin/ResultKt;->equals(Ljava/lang/reflect/Type;Ljava/lang/reflect/Type;)Z
+PLkotlin/ResultKt;->getFilterResult(Ljava/util/List;)V
+PLkotlin/ResultKt;->getGenericSupertype(Ljava/lang/reflect/Type;Ljava/lang/Class;Ljava/lang/Class;)Ljava/lang/reflect/Type;
+PLkotlin/ResultKt;->getSupertype(Ljava/lang/reflect/Type;Ljava/lang/Class;Ljava/lang/Class;)Ljava/lang/reflect/Type;
+PLkotlin/ResultKt;->resolve(Ljava/lang/reflect/Type;Ljava/lang/Class;Ljava/lang/reflect/Type;Ljava/util/HashMap;)Ljava/lang/reflect/Type;
+PLkotlin/ResultKt;->write(Lcom/google/gson/JsonElement;Lcom/google/gson/stream/JsonWriter;)V
+PLkotlin/TuplesKt;-><init>(I)V
+PLkotlin/TuplesKt;-><init>(Ljava/lang/Object;)V
+PLkotlin/TuplesKt;->access$removeEntryAtIndex([Ljava/lang/Object;I)[Ljava/lang/Object;
+PLkotlin/TuplesKt;->asMutableCollection(Ljava/util/LinkedHashSet;)Ljava/util/Collection;
+PLkotlin/TuplesKt;->closeFinally(Ljava/io/Closeable;Ljava/lang/Throwable;)V
+PLkotlin/TuplesKt;->writeProfile(Landroid/content/Context;Landroidx/profileinstaller/ProfileInstaller$$ExternalSyntheticLambda1;Landroidx/profileinstaller/ProfileInstaller$DiagnosticsCallback;Z)V
+PLkotlin/ULong$Companion;->checkPositionIndex$kotlin_stdlib(II)V
+PLkotlin/ULong$Companion;->onResultReceived(ILjava/lang/Object;)V
+PLkotlin/collections/CollectionsKt___CollectionsKt;->minus(Ljava/util/List;Lkotlin/Function;)Ljava/util/ArrayList;
+PLkotlin/coroutines/jvm/internal/BaseContinuationImpl;->releaseIntercepted()V
+PLkotlin/coroutines/jvm/internal/RestrictedContinuationImpl;-><init>(Lkotlin/coroutines/Continuation;)V
+PLkotlin/coroutines/jvm/internal/RestrictedSuspendLambda;-><init>(Lkotlin/coroutines/Continuation;)V
+PLkotlin/sequences/SequenceBuilderIterator;-><init>()V
+PLkotlin/sequences/SequenceBuilderIterator;->getContext()Lkotlin/coroutines/CoroutineContext;
+PLkotlin/sequences/SequenceBuilderIterator;->hasNext()Z
+PLkotlin/sequences/SequenceBuilderIterator;->next()Ljava/lang/Object;
+PLkotlin/sequences/SequenceBuilderIterator;->resumeWith(Ljava/lang/Object;)V
+PLkotlin/sequences/SequenceBuilderIterator;->yield(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)V
+PLkotlin/text/Charsets;-><clinit>()V
+PLkotlinx/coroutines/AbstractCoroutine;->cancellationExceptionMessage()Ljava/lang/String;
+PLkotlinx/coroutines/InvokeOnCompletion;->invoke(Ljava/lang/Throwable;)V
+PLkotlinx/coroutines/JobCancellationException;-><init>(Ljava/lang/String;Ljava/lang/Throwable;Lkotlinx/coroutines/Job;)V
+PLkotlinx/coroutines/JobCancellationException;->equals(Ljava/lang/Object;)Z
+PLkotlinx/coroutines/JobCancellationException;->fillInStackTrace()Ljava/lang/Throwable;
+PLkotlinx/coroutines/JobSupport$Finishing;->isActive()Z
+PLkotlinx/coroutines/JobSupport;->cancellationExceptionMessage()Ljava/lang/String;
+PLkotlinx/coroutines/UndispatchedCoroutine;->afterResume(Ljava/lang/Object;)V
+PLkotlinx/coroutines/flow/FlowKt__ReduceKt$first$3;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;
+PLkotlinx/coroutines/flow/SharedFlowSlot;->freeLocked(Lkotlinx/coroutines/flow/internal/AbstractSharedFlow;)[Lkotlin/coroutines/Continuation;
+PLkotlinx/coroutines/flow/SharingConfig;->clear()V
+PLkotlinx/coroutines/flow/StateFlowSlot;->freeLocked(Lkotlinx/coroutines/flow/internal/AbstractSharedFlow;)[Lkotlin/coroutines/Continuation;
+PLkotlinx/coroutines/flow/internal/AbstractSharedFlow;->freeSlot(Lkotlinx/coroutines/flow/internal/AbstractSharedFlowSlot;)V
+PLkotlinx/coroutines/internal/DispatchedContinuation;->cancelCompletedResult$kotlinx_coroutines_core(Ljava/lang/Object;Ljava/util/concurrent/CancellationException;)V
+PLokhttp3/MediaType;->access$locationOf(Ljava/util/ArrayList;II)I
diff --git a/tv/tv-material/src/main/java/androidx/tv/material3/Icon.kt b/tv/tv-material/src/main/java/androidx/tv/material3/Icon.kt
index 2e8faf1..e2cdc97 100644
--- a/tv/tv-material/src/main/java/androidx/tv/material3/Icon.kt
+++ b/tv/tv-material/src/main/java/androidx/tv/material3/Icon.kt
@@ -139,7 +139,9 @@
modifier: Modifier = Modifier,
tint: Color = LocalContentColor.current
) {
- val colorFilter = if (tint == Color.Unspecified) null else ColorFilter.tint(tint)
+ val colorFilter = remember(tint) {
+ if (tint == Color.Unspecified) null else ColorFilter.tint(tint)
+ }
val semantics =
if (contentDescription != null) {
Modifier.semantics {
diff --git a/wear/compose/compose-foundation/src/androidTest/kotlin/androidx/wear/compose/foundation/SwipeToDismissBoxTest.kt b/wear/compose/compose-foundation/src/androidTest/kotlin/androidx/wear/compose/foundation/SwipeToDismissBoxTest.kt
index 956835f..51e8ba6 100644
--- a/wear/compose/compose-foundation/src/androidTest/kotlin/androidx/wear/compose/foundation/SwipeToDismissBoxTest.kt
+++ b/wear/compose/compose-foundation/src/androidTest/kotlin/androidx/wear/compose/foundation/SwipeToDismissBoxTest.kt
@@ -17,6 +17,7 @@
package androidx.wear.compose.foundation
import androidx.compose.foundation.ScrollState
+import androidx.compose.foundation.background
import androidx.compose.foundation.clickable
import androidx.compose.foundation.focusable
import androidx.compose.foundation.horizontalScroll
@@ -54,6 +55,7 @@
import androidx.compose.ui.test.swipe
import androidx.compose.ui.test.swipeLeft
import androidx.compose.ui.test.swipeRight
+import androidx.compose.ui.test.swipeWithVelocity
import java.lang.Math.sin
import org.junit.Assert.assertEquals
import org.junit.Assert.assertFalse
@@ -81,6 +83,47 @@
}
@Test
+ fun composes_in_one_frame_without_pending_changes() {
+ var outerCounter = 0
+ var innerCounter = 0
+ var runTest by mutableStateOf(false)
+ rule.mainClock.autoAdvance = false
+ rule.setContent {
+ if (runTest) {
+ outerCounter++
+ val state = rememberSwipeToDismissBoxState()
+ SwipeToDismissBox(
+ state = state,
+ onDismissed = { },
+ ) { isBackground ->
+ innerCounter++
+ if (isBackground) {
+ Box(
+ modifier = Modifier
+ .fillMaxSize()
+ .background(Color.Green)
+ )
+ } else {
+ Box(
+ modifier = Modifier
+ .fillMaxSize()
+ .background(Color.Red)
+ )
+ }
+ }
+ }
+ }
+
+ runTest = true
+
+ repeat(10) {
+ rule.mainClock.advanceTimeByFrame()
+ assertEquals("Outer", 1, outerCounter)
+ assertEquals("Inner", 1, innerCounter)
+ }
+ }
+
+ @Test
fun dismisses_when_swiped_right() =
verifySwipe(gesture = { swipeRight() }, expectedToDismiss = true)
@@ -91,10 +134,14 @@
@Test
fun does_not_dismiss_when_swipe_right_incomplete() =
- // Execute a partial swipe over a longer-than-default duration so that there
+ // Execute a partial swipe over a longer-than-default duration so that there
// is insufficient velocity to perform a 'fling'.
verifySwipe(
- gesture = { swipeRight(startX = 0f, endX = width / 4f, durationMillis = LONG_SWIPE) },
+ gesture = { swipeWithVelocity(
+ start = Offset(0f, centerY),
+ end = Offset(centerX / 2f, centerY),
+ endVelocity = 1.0f
+ ) },
expectedToDismiss = false
)
@@ -515,13 +562,10 @@
var dismissed = false
rule.setContent {
val state = rememberSwipeToDismissBoxState()
- LaunchedEffect(state.currentValue) {
- dismissed =
- state.currentValue == SwipeToDismissValue.Dismissed
- }
SwipeToDismissBox(
state = state,
- modifier = Modifier.testTag(TEST_TAG)
+ modifier = Modifier.testTag(TEST_TAG),
+ onDismissed = { dismissed = true }
) {
MessageContent()
}
diff --git a/wear/compose/compose-foundation/src/main/java/androidx/wear/compose/foundation/SwipeToDismissBox.kt b/wear/compose/compose-foundation/src/main/java/androidx/wear/compose/foundation/SwipeToDismissBox.kt
index c1c7213..b626f97 100644
--- a/wear/compose/compose-foundation/src/main/java/androidx/wear/compose/foundation/SwipeToDismissBox.kt
+++ b/wear/compose/compose-foundation/src/main/java/androidx/wear/compose/foundation/SwipeToDismissBox.kt
@@ -19,6 +19,7 @@
import androidx.compose.animation.core.AnimationSpec
import androidx.compose.animation.core.LinearOutSlowInEasing
import androidx.compose.animation.core.TweenSpec
+import androidx.compose.foundation.Canvas
import androidx.compose.foundation.background
import androidx.compose.foundation.gestures.Orientation
import androidx.compose.foundation.layout.Box
@@ -27,15 +28,14 @@
import androidx.compose.foundation.shape.CircleShape
import androidx.compose.runtime.Composable
import androidx.compose.runtime.LaunchedEffect
+import androidx.compose.runtime.SideEffect
import androidx.compose.runtime.Stable
import androidx.compose.runtime.State
import androidx.compose.runtime.derivedStateOf
import androidx.compose.runtime.getValue
import androidx.compose.runtime.key
-import androidx.compose.runtime.mutableFloatStateOf
import androidx.compose.runtime.mutableStateOf
import androidx.compose.runtime.remember
-import androidx.compose.runtime.setValue
import androidx.compose.ui.Modifier
import androidx.compose.ui.composed
import androidx.compose.ui.geometry.Offset
@@ -48,7 +48,8 @@
import androidx.compose.ui.input.pointer.PointerInputScope
import androidx.compose.ui.input.pointer.changedToUp
import androidx.compose.ui.input.pointer.pointerInput
-import androidx.compose.ui.layout.onSizeChanged
+import androidx.compose.ui.platform.LocalConfiguration
+import androidx.compose.ui.platform.LocalDensity
import androidx.compose.ui.platform.debugInspectorInfo
import androidx.compose.ui.unit.Dp
import androidx.compose.ui.unit.Velocity
@@ -57,7 +58,6 @@
import androidx.compose.ui.util.lerp
import kotlin.math.max
import kotlin.math.min
-import kotlin.math.roundToInt
import kotlinx.coroutines.coroutineScope
import kotlinx.coroutines.isActive
@@ -97,7 +97,8 @@
*/
@OptIn(ExperimentalWearFoundationApi::class)
@Composable
-public fun SwipeToDismissBox(
+@Suppress("PrimitiveInCollection")
+fun SwipeToDismissBox(
state: SwipeToDismissBoxState,
modifier: Modifier = Modifier,
backgroundKey: Any = SwipeToDismissKeys.Background,
@@ -105,113 +106,95 @@
userSwipeEnabled: Boolean = true,
content: @Composable BoxScope.(isBackground: Boolean) -> Unit
) {
- // Will be updated in onSizeChanged, initialise to any value other than zero
- // so that it is different to the other anchor used for the swipe gesture.
- var maxWidth by remember { mutableFloatStateOf(1f) }
+ val density = LocalDensity.current
+ val maxWidthPx = with(density) {
+ LocalConfiguration.current.screenWidthDp.dp.toPx()
+ }
+ SideEffect {
+ val anchors = mapOf(
+ SwipeToDismissValue.Default to 0f,
+ SwipeToDismissValue.Dismissed to maxWidthPx
+ )
+ state.swipeableState.density = density
+ state.swipeableState.updateAnchors(anchors)
+ }
+
Box(
modifier = modifier
.fillMaxSize()
- .onSizeChanged { maxWidth = it.width.toFloat() }
.swipeableV2(
state = state.swipeableState,
orientation = Orientation.Horizontal,
enabled = userSwipeEnabled
)
- .swipeAnchors(
- state = state.swipeableState,
- possibleValues = anchors().keys
- ) { value, layoutSize ->
- val width = layoutSize.width.toFloat()
- anchors()[value]!! * width
- }
) {
- var squeezeMode by remember {
- mutableStateOf(true)
- }
-
- LaunchedEffect(state.isAnimationRunning) {
- if (state.targetValue == SwipeToDismissValue.Dismissed) {
- squeezeMode = false
- }
- }
-
- LaunchedEffect(state.targetValue) {
- if (!squeezeMode && state.targetValue == SwipeToDismissValue.Default) {
- squeezeMode = true
- }
- }
-
val isRound = isRoundDevice()
val backgroundScrimColor = LocalSwipeToDismissBackgroundScrimColor.current
val contentScrimColor = LocalSwipeToDismissContentScrimColor.current
- // Use remember { derivedStateOf{ ... } } idiom to re-use modifiers where possible.
- // b/280392104: re-calculate modifiers if keys have changed
- val modifiers by remember(isRound, backgroundScrimColor, backgroundKey, contentKey) {
- derivedStateOf {
- val progress = ((state.swipeableState.offset ?: 0f) / maxWidth).coerceIn(0f, 1f)
- val scale = lerp(SCALE_MAX, SCALE_MIN, progress).coerceIn(SCALE_MIN, SCALE_MAX)
- val squeezeOffset = max(0f, (1f - scale) * maxWidth / 2f)
- val slideOffset = lerp(squeezeOffset, maxWidth, max(0f, progress - 0.7f) / 0.3f)
-
- val translationX = if (squeezeMode) squeezeOffset else slideOffset
-
- val backgroundAlpha = MAX_BACKGROUND_SCRIM_ALPHA * (1 - progress)
- val contentScrimAlpha = min(MAX_CONTENT_SCRIM_ALPHA, progress / 2f)
-
- Modifiers(
- contentForeground = Modifier
- .fillMaxSize()
- .graphicsLayer {
- this.translationX = translationX
- scaleX = scale
- scaleY = scale
- clip = isRound && translationX > 0
- shape = if (isRound) CircleShape else RectangleShape
- }
- .background(backgroundScrimColor),
- scrimForeground =
- Modifier
- .background(
- contentScrimColor.copy(alpha = contentScrimAlpha)
- )
- .fillMaxSize(),
- scrimBackground =
- Modifier
- .matchParentSize()
- .background(
- backgroundScrimColor.copy(alpha = backgroundAlpha)
- )
- )
- }
+ val progress by remember(state) {
+ derivedStateOf { ((state.swipeableState.offset ?: 0f) / maxWidthPx).coerceIn(0f, 1f) }
}
+ val isSwiping by remember { derivedStateOf { progress > 0 } }
repeat(2) {
val isBackground = it == 0
- val contentModifier = if (isBackground) {
- Modifier.fillMaxSize()
- } else {
- modifiers.contentForeground
- }
-
- val scrimModifier = if (isBackground) {
- modifiers.scrimBackground
- } else {
- modifiers.scrimForeground
- }
key(if (isBackground) backgroundKey else contentKey) {
- if (!isBackground ||
- (userSwipeEnabled && (state.swipeableState.offset?.roundToInt() ?: 0) > 0)
- ) {
+ if (!isBackground || (userSwipeEnabled && isSwiping)) {
HierarchicalFocusCoordinator(requiresFocus = { !isBackground }) {
- Box(contentModifier) {
+ Box(Modifier
+ .fillMaxSize()
+ .then(
+ if (!isBackground) {
+ Modifier
+ .graphicsLayer {
+ val scale = lerp(SCALE_MAX, SCALE_MIN, progress)
+ .coerceIn(SCALE_MIN, SCALE_MAX)
+ val squeezeOffset =
+ max(0f, (1f - scale) * maxWidthPx / 2f)
+
+ val translationX =
+ if (state.targetValue
+ != SwipeToDismissValue.Dismissed
+ ) {
+ // Squeeze
+ squeezeOffset
+ } else {
+ // slide
+ lerp(
+ squeezeOffset,
+ maxWidthPx,
+ max(0f, progress - 0.7f) / 0.3f
+ )
+ }
+
+ this.translationX = translationX
+ scaleX = scale
+ scaleY = scale
+ clip = isRound && translationX > 0
+ shape = if (isRound) CircleShape else RectangleShape
+ }
+ .background(backgroundScrimColor)
+ } else Modifier
+ )
+ ) {
// We use the repeat loop above and call content at this location
// for both background and foreground so that any persistence
// within the content composable has the same call stack which is used
// as part of the hash identity for saveable state.
content(isBackground)
- Box(modifier = scrimModifier)
+
+ Canvas(Modifier.fillMaxSize()) {
+ val color = if (isBackground) {
+ backgroundScrimColor
+ .copy(alpha = MAX_BACKGROUND_SCRIM_ALPHA * (1 - progress))
+ } else {
+ contentScrimColor
+ .copy(alpha = min(MAX_CONTENT_SCRIM_ALPHA, progress / 2f))
+ }
+ drawRect(color = color)
+ }
}
}
}
@@ -256,8 +239,9 @@
* scrim during the swipe gesture, and is shown without scrim once the finger passes the
* swipe-to-dismiss threshold.
*/
+@OptIn(ExperimentalWearFoundationApi::class)
@Composable
-public fun SwipeToDismissBox(
+fun SwipeToDismissBox(
onDismissed: () -> Unit,
modifier: Modifier = Modifier,
state: SwipeToDismissBoxState = rememberSwipeToDismissBoxState(),
@@ -290,7 +274,7 @@
*/
@Stable
@OptIn(ExperimentalWearFoundationApi::class)
-public class SwipeToDismissBoxState(
+class SwipeToDismissBoxState(
animationSpec: AnimationSpec<Float> = SwipeToDismissBoxDefaults.AnimationSpec,
confirmStateChange: (SwipeToDismissValue) -> Boolean = { true },
) {
@@ -300,7 +284,7 @@
* Before and during a swipe, corresponds to [SwipeToDismissValue.Default], then switches to
* [SwipeToDismissValue.Dismissed] if the swipe has been completed.
*/
- public val currentValue: SwipeToDismissValue
+ val currentValue: SwipeToDismissValue
get() = swipeableState.currentValue
/**
@@ -310,13 +294,13 @@
* swipe finished. If an animation is running, this is the target value of that animation.
* Finally, if no swipe or animation is in progress, this is the same as the [currentValue].
*/
- public val targetValue: SwipeToDismissValue
+ val targetValue: SwipeToDismissValue
get() = swipeableState.targetValue
/**
* Whether the state is currently animating.
*/
- public val isAnimationRunning: Boolean
+ val isAnimationRunning: Boolean
get() = swipeableState.isAnimationRunning
internal fun edgeNestedScrollConnection(
@@ -329,7 +313,7 @@
*
* @param targetValue The new target value to set [currentValue] to.
*/
- public suspend fun snapTo(targetValue: SwipeToDismissValue) = swipeableState.snapTo(targetValue)
+ suspend fun snapTo(targetValue: SwipeToDismissValue) = swipeableState.snapTo(targetValue)
private companion object {
private fun <T> SwipeableV2State<T>.edgeNestedScrollConnection(
@@ -393,7 +377,7 @@
* @param confirmStateChange callback to confirm or veto a pending state change.
*/
@Composable
-public fun rememberSwipeToDismissBoxState(
+fun rememberSwipeToDismissBoxState(
animationSpec: AnimationSpec<Float> = SWIPE_TO_DISMISS_BOX_ANIMATION_SPEC,
confirmStateChange: (SwipeToDismissValue) -> Boolean = { true },
): SwipeToDismissBoxState {
@@ -405,24 +389,24 @@
/**
* Contains defaults for [SwipeToDismissBox].
*/
-public object SwipeToDismissBoxDefaults {
+object SwipeToDismissBoxDefaults {
/**
* The default animation that will be used to animate to a new state after the swipe gesture.
*/
@OptIn(ExperimentalWearFoundationApi::class)
- public val AnimationSpec = SwipeableV2Defaults.AnimationSpec
+ val AnimationSpec = SwipeableV2Defaults.AnimationSpec
/**
* The default width of the area which might trigger a swipe
* with [edgeSwipeToDismiss] modifier
*/
- public val EdgeWidth = 30.dp
+ val EdgeWidth = 30.dp
}
/**
* Keys used to persistent state in [SwipeToDismissBox].
*/
-public enum class SwipeToDismissKeys {
+enum class SwipeToDismissKeys {
/**
* The default background key to identify the content displayed by the content block
* when isBackground == true. Specifying a background key instead of using the default
@@ -441,7 +425,7 @@
/**
* States used as targets for the anchor points for swipe-to-dismiss.
*/
-public enum class SwipeToDismissValue {
+enum class SwipeToDismissValue {
/**
* The state of the SwipeToDismissBox before the swipe started.
*/
@@ -473,7 +457,7 @@
* on SwipeToDismissBox
* @param edgeWidth A width of edge, where swipe should be recognised
*/
-public fun Modifier.edgeSwipeToDismiss(
+fun Modifier.edgeSwipeToDismiss(
swipeToDismissBoxState: SwipeToDismissBoxState,
edgeWidth: Dp = SwipeToDismissBoxDefaults.EdgeWidth
): Modifier =
@@ -563,22 +547,6 @@
SwipeToDismissInProgress
}
-/**
- * Class to enable calculating group of modifiers in a single, memoised block.
- */
-private data class Modifiers(
- val contentForeground: Modifier,
- val scrimForeground: Modifier,
- val scrimBackground: Modifier,
-)
-
-// Map states to pixel position - initially, don't know the width in pixels so omit upper bound.
-private fun anchors(): Map<SwipeToDismissValue, Float> =
- mapOf(
- SwipeToDismissValue.Default to 0f,
- SwipeToDismissValue.Dismissed to 1f
- )
-
private const val SWIPE_THRESHOLD = 0.5f
private const val SCALE_MAX = 1f
private const val SCALE_MIN = 0.7f
diff --git a/wear/compose/compose-material-core/src/main/java/androidx/wear/compose/materialcore/Card.kt b/wear/compose/compose-material-core/src/main/java/androidx/wear/compose/materialcore/Card.kt
index 7994fe3..ef51f18 100644
--- a/wear/compose/compose-material-core/src/main/java/androidx/wear/compose/materialcore/Card.kt
+++ b/wear/compose/compose-material-core/src/main/java/androidx/wear/compose/materialcore/Card.kt
@@ -224,89 +224,3 @@
}
}
}
-
-/**
- * Opinionated Wear Material [Card] that offers a specific 3 slot layout to show interactive
- * information about an application, e.g. a message. TitleCards are designed for use within an
- * application.
- *
- * The first row of the layout has two slots. 1. a start aligned title. The title text is
- * expected to be a maximum of 2 lines of text.
- * 2. An optional time that the application activity has occurred shown at the
- * end of the row, expected to be an end aligned [Text] composable showing a time relevant to the
- * contents of the [Card].
- *
- * The rest of the [Card] contains the content which is expected to be [Text] or a contained
- * [Image].
- *
- * If the content is text it can be single or multiple line and is expected to be Top and Start
- * aligned.
- *
- * Overall the [title] and [content] text should be no more than 5 rows of text combined.
- *
- * If more than one composable is provided in the content slot it is the responsibility of the
- * caller to determine how to layout the contents, e.g. provide either a row or a column.
- *
- * @param onClick Will be called when the user clicks the card
- * @param modifier Modifier to be applied to the card
- * @param enabled Controls the enabled state of the card. When false, this card will not
- * be clickable and there will be no ripple effect on click. Wear cards do not have any specific
- * elevation or alpha differences when not enabled - they are simply not clickable.
- * @param border A BorderStroke object which is used for the outline drawing.
- * Can be null - then outline will not be drawn
- * @param contentPadding The spacing values to apply internally between the container and the
- * content
- * @param containerPainter A Painter which is used for background drawing.
- * @param interactionSource The [MutableInteractionSource] representing the stream of
- * [Interaction]s for this card. You can create and pass in your own remembered
- * [MutableInteractionSource] if you want to observe [Interaction]s and customize the
- * appearance / behavior of this card in different [Interaction]s.
- * @param shape Defines the card's shape. It is strongly recommended to use the default as this
- * shape is a key characteristic of the Wear Material Theme
- * @param title A slot for displaying the title of the card, expected to be one or two
- * lines of text.
- * @param time An optional slot for displaying the time relevant to the contents of the card,
- * expected to be a short piece of end aligned text.
- * @param content A main slot for a content of this card.
- */
-@RestrictTo(RestrictTo.Scope.LIBRARY_GROUP)
-@Composable
-public fun TitleCard(
- onClick: () -> Unit,
- modifier: Modifier,
- enabled: Boolean,
- border: BorderStroke?,
- contentPadding: PaddingValues,
- containerPainter: Painter,
- interactionSource: MutableInteractionSource,
- shape: Shape,
- title: @Composable RowScope.() -> Unit,
- time: @Composable (RowScope.() -> Unit)?,
- content: @Composable ColumnScope.() -> Unit,
-) {
- Card(
- onClick = onClick,
- modifier = modifier,
- enabled = enabled,
- containerPainter = containerPainter,
- border = border,
- contentPadding = contentPadding,
- interactionSource = interactionSource,
- role = null,
- shape = shape
- ) {
- Column {
- Row(
- modifier = Modifier.fillMaxWidth(),
- verticalAlignment = Alignment.CenterVertically
- ) {
- title()
- time?.let {
- Spacer(modifier = Modifier.weight(1.0f))
- time()
- }
- }
- content()
- }
- }
-}
diff --git a/wear/compose/compose-material-core/src/main/java/androidx/wear/compose/materialcore/Icon.kt b/wear/compose/compose-material-core/src/main/java/androidx/wear/compose/materialcore/Icon.kt
index 33dcc31..51eed78 100644
--- a/wear/compose/compose-material-core/src/main/java/androidx/wear/compose/materialcore/Icon.kt
+++ b/wear/compose/compose-material-core/src/main/java/androidx/wear/compose/materialcore/Icon.kt
@@ -20,6 +20,7 @@
import androidx.compose.foundation.layout.Box
import androidx.compose.foundation.layout.size
import androidx.compose.runtime.Composable
+import androidx.compose.runtime.remember
import androidx.compose.ui.Modifier
import androidx.compose.ui.draw.paint
import androidx.compose.ui.geometry.Size
@@ -55,8 +56,9 @@
modifier: Modifier,
tint: Color
) {
- // TODO: b/149735981 semantics for content description
- val colorFilter = if (tint == Color.Unspecified) null else ColorFilter.tint(tint)
+ val colorFilter = remember(tint) {
+ if (tint == Color.Unspecified) null else ColorFilter.tint(tint)
+ }
val semantics = if (contentDescription != null) {
Modifier.semantics {
this.contentDescription = contentDescription
diff --git a/wear/compose/compose-material/benchmark/src/androidTest/java/androidx/wear/compose/material/benchmark/PositionIndicatorBenchmark.kt b/wear/compose/compose-material/benchmark/src/androidTest/java/androidx/wear/compose/material/benchmark/PositionIndicatorBenchmark.kt
new file mode 100644
index 0000000..edf6dd7
--- /dev/null
+++ b/wear/compose/compose-material/benchmark/src/androidTest/java/androidx/wear/compose/material/benchmark/PositionIndicatorBenchmark.kt
@@ -0,0 +1,160 @@
+/*
+ * Copyright 2023 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 androidx.wear.compose.material.benchmark
+
+import androidx.compose.runtime.Composable
+import androidx.compose.runtime.MutableState
+import androidx.compose.runtime.mutableFloatStateOf
+import androidx.compose.runtime.mutableStateOf
+import androidx.compose.runtime.remember
+import androidx.compose.testutils.LayeredComposeTestCase
+import androidx.compose.testutils.assertNoPendingChanges
+import androidx.compose.testutils.benchmark.ComposeBenchmarkRule
+import androidx.compose.testutils.benchmark.benchmarkToFirstPixel
+import androidx.compose.testutils.setupContent
+import androidx.compose.ui.unit.dp
+import androidx.test.ext.junit.runners.AndroidJUnit4
+import androidx.test.filters.LargeTest
+import androidx.wear.compose.material.MaterialTheme
+import androidx.wear.compose.material.PositionIndicator
+import androidx.wear.compose.material.PositionIndicatorState
+import androidx.wear.compose.material.PositionIndicatorVisibility
+import kotlinx.coroutines.runBlocking
+import org.junit.Rule
+import org.junit.Test
+import org.junit.runner.RunWith
+
+@LargeTest
+@RunWith(AndroidJUnit4::class)
+class PositionIndicatorBenchmark {
+ @get:Rule
+ val benchmarkRule = ComposeBenchmarkRule()
+ private val defaultPositionIndicatorCaseFactory = { PositionIndicatorBenchmarkTestCase() }
+
+ @Test
+ fun changeFraction() {
+ benchmarkRule.changePositionBenchmark {
+ PositionIndicatorBenchmarkTestCase(targetFraction = 0.5f)
+ }
+ }
+
+ @Test
+ fun changeFractionAndSizeFraction_hide() {
+ benchmarkRule.changePositionBenchmark {
+ PositionIndicatorBenchmarkTestCase(
+ targetFraction = 0.5f,
+ targetSizeFraction = 0.5f,
+ targetVisibility = PositionIndicatorVisibility.Hide
+ )
+ }
+ }
+
+ @Test
+ fun changeFractionAndSizeFraction_autoHide() {
+ benchmarkRule.changePositionBenchmark {
+ PositionIndicatorBenchmarkTestCase(
+ targetFraction = 0.5f,
+ targetSizeFraction = 0.5f,
+ targetVisibility = PositionIndicatorVisibility.AutoHide
+ )
+ }
+ }
+
+ @Test
+ fun firstPixel() {
+ benchmarkRule.benchmarkToFirstPixel(defaultPositionIndicatorCaseFactory)
+ }
+}
+
+internal class PositionIndicatorBenchmarkTestCase(
+ val targetFraction: Float? = null,
+ val targetSizeFraction: Float? = null,
+ val targetVisibility: PositionIndicatorVisibility? = null
+) : LayeredComposeTestCase() {
+ private lateinit var positionFraction: MutableState<Float>
+ private lateinit var sizeFraction: MutableState<Float>
+ private lateinit var visibility: MutableState<PositionIndicatorVisibility>
+
+ fun onChange() {
+ runBlocking {
+ targetFraction?.let { positionFraction.value = targetFraction }
+ targetSizeFraction?.let { sizeFraction.value = targetSizeFraction }
+ targetVisibility?.let { visibility.value = targetVisibility }
+ }
+ }
+
+ @Composable
+ override fun MeasuredContent() {
+ positionFraction = remember { mutableFloatStateOf(0f) }
+ sizeFraction = remember { mutableFloatStateOf(.1f) }
+ visibility = remember { mutableStateOf(PositionIndicatorVisibility.Show) }
+
+ val state = remember {
+ CustomPositionIndicatorState(
+ _positionFraction = { positionFraction.value },
+ sizeFraction = { sizeFraction.value },
+ visibility = { visibility.value })
+ }
+
+ PositionIndicator(
+ state = state,
+ indicatorHeight = 50.dp,
+ indicatorWidth = 4.dp,
+ paddingHorizontal = 5.dp
+ )
+ }
+
+ @Composable
+ override fun ContentWrappers(content: @Composable () -> Unit) {
+ MaterialTheme {
+ content()
+ }
+ }
+}
+
+private class CustomPositionIndicatorState(
+ private val _positionFraction: () -> Float,
+ private val sizeFraction: () -> Float,
+ private val visibility: () -> PositionIndicatorVisibility
+) : PositionIndicatorState {
+ override val positionFraction: Float
+ get() = _positionFraction()
+
+ override fun sizeFraction(scrollableContainerSizePx: Float): Float = sizeFraction()
+
+ override fun visibility(scrollableContainerSizePx: Float): PositionIndicatorVisibility =
+ visibility()
+}
+
+internal fun ComposeBenchmarkRule.changePositionBenchmark(
+ caseFactory: () -> PositionIndicatorBenchmarkTestCase
+) {
+ runBenchmarkFor(caseFactory) {
+ disposeContent()
+ measureRepeated {
+ runWithTimingDisabled {
+ setupContent()
+ assertNoPendingChanges()
+ }
+ getTestCase().onChange()
+ doFrame()
+ runWithTimingDisabled {
+ disposeContent()
+ }
+ }
+ }
+}
diff --git a/wear/compose/compose-material/benchmark/src/androidTest/java/androidx/wear/compose/material/benchmark/SwipeToDismissBoxBenchmark.kt b/wear/compose/compose-material/benchmark/src/androidTest/java/androidx/wear/compose/material/benchmark/SwipeToDismissBoxBenchmark.kt
new file mode 100644
index 0000000..96a3129
--- /dev/null
+++ b/wear/compose/compose-material/benchmark/src/androidTest/java/androidx/wear/compose/material/benchmark/SwipeToDismissBoxBenchmark.kt
@@ -0,0 +1,79 @@
+/*
+ * Copyright 2023 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 androidx.wear.compose.material.benchmark
+
+import androidx.benchmark.ExperimentalBenchmarkConfigApi
+import androidx.benchmark.MicrobenchmarkConfig
+import androidx.benchmark.ProfilerConfig
+import androidx.compose.foundation.background
+import androidx.compose.foundation.layout.Box
+import androidx.compose.foundation.layout.fillMaxSize
+import androidx.compose.runtime.Composable
+import androidx.compose.testutils.LayeredComposeTestCase
+import androidx.compose.testutils.benchmark.ComposeBenchmarkRule
+import androidx.compose.testutils.benchmark.benchmarkToFirstPixel
+import androidx.compose.ui.Modifier
+import androidx.wear.compose.foundation.SwipeToDismissBox
+import androidx.wear.compose.foundation.rememberSwipeToDismissBoxState
+import androidx.wear.compose.material.MaterialTheme
+import org.junit.Rule
+import org.junit.Test
+
+class SwipeToDismissBoxBenchmark {
+ @OptIn(ExperimentalBenchmarkConfigApi::class)
+ @get:Rule
+ val benchmarkRule = ComposeBenchmarkRule(
+ MicrobenchmarkConfig(
+ profiler = ProfilerConfig.MethodTracing()
+ )
+ )
+
+ @Test
+ fun s2dbox_benchmarkToFirstPixel() {
+ benchmarkRule.benchmarkToFirstPixel { S2DBoxTestCase() }
+ }
+}
+
+private class S2DBoxTestCase : LayeredComposeTestCase() {
+ @Composable
+ override fun MeasuredContent() {
+ Screen()
+ }
+
+ @Composable
+ private fun Screen() {
+ val state = rememberSwipeToDismissBoxState()
+ SwipeToDismissBox(
+ state = state,
+ onDismissed = { },
+ ) { isBackground ->
+ if (isBackground) {
+ Box(
+ modifier = Modifier
+ .fillMaxSize()
+ .background(MaterialTheme.colors.onSurface)
+ )
+ } else {
+ Box(
+ modifier = Modifier
+ .fillMaxSize()
+ .background(MaterialTheme.colors.primary)
+ )
+ }
+ }
+ }
+}
diff --git a/wear/compose/compose-material/src/androidTest/kotlin/androidx/wear/compose/material/SwipeToDismissBoxScreenshotTest.kt b/wear/compose/compose-material/src/androidTest/kotlin/androidx/wear/compose/material/SwipeToDismissBoxScreenshotTest.kt
index 6dba8e0..ef0184e 100644
--- a/wear/compose/compose-material/src/androidTest/kotlin/androidx/wear/compose/material/SwipeToDismissBoxScreenshotTest.kt
+++ b/wear/compose/compose-material/src/androidTest/kotlin/androidx/wear/compose/material/SwipeToDismissBoxScreenshotTest.kt
@@ -16,17 +16,20 @@
package androidx.wear.compose.material
+import android.content.res.Configuration
import android.os.Build
import androidx.compose.foundation.layout.Box
import androidx.compose.foundation.layout.BoxScope
import androidx.compose.foundation.layout.size
import androidx.compose.runtime.Composable
import androidx.compose.runtime.CompositionLocalProvider
+import androidx.compose.runtime.remember
import androidx.compose.testutils.assertAgainstGolden
import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
import androidx.compose.ui.geometry.Offset
import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.platform.LocalConfiguration
import androidx.compose.ui.platform.LocalLayoutDirection
import androidx.compose.ui.platform.testTag
import androidx.compose.ui.test.ExperimentalTestApi
@@ -110,15 +113,27 @@
isOnDismissOverload: Boolean = false,
goldenIdentifier: String = testName.methodName
) {
+ val screenShotSizeDp = SCREENSHOT_SIZE.dp
rule.setContentWithTheme {
- CompositionLocalProvider(LocalLayoutDirection provides layoutDirection) {
+ val originalConfiguration = LocalConfiguration.current
+ val fixedScreenSizeConfiguration = remember(originalConfiguration) {
+ Configuration(originalConfiguration).apply {
+ screenWidthDp = SCREENSHOT_SIZE
+ screenHeightDp = SCREENSHOT_SIZE
+ }
+ }
+
+ CompositionLocalProvider(
+ LocalLayoutDirection provides layoutDirection,
+ LocalConfiguration provides fixedScreenSizeConfiguration
+ ) {
val state = rememberSwipeToDismissBoxState()
if (isOnDismissOverload) {
SwipeToDismissBox(
onDismissed = {},
modifier = Modifier
.testTag(TEST_TAG)
- .size(106.dp),
+ .size(screenShotSizeDp),
state = state
) { isBackground ->
boxContent(isBackground = isBackground)
@@ -127,7 +142,7 @@
SwipeToDismissBox(
modifier = Modifier
.testTag(TEST_TAG)
- .size(106.dp),
+ .size(screenShotSizeDp),
state = state
) { isBackground ->
boxContent(isBackground = isBackground)
@@ -157,4 +172,6 @@
}
}
}
+
+ private val SCREENSHOT_SIZE = 106
}
diff --git a/wear/compose/compose-material/src/androidTest/kotlin/androidx/wear/compose/material/SwipeToDismissBoxTest.kt b/wear/compose/compose-material/src/androidTest/kotlin/androidx/wear/compose/material/SwipeToDismissBoxTest.kt
index da64262..7e6bfe2 100644
--- a/wear/compose/compose-material/src/androidTest/kotlin/androidx/wear/compose/material/SwipeToDismissBoxTest.kt
+++ b/wear/compose/compose-material/src/androidTest/kotlin/androidx/wear/compose/material/SwipeToDismissBoxTest.kt
@@ -47,6 +47,7 @@
import androidx.compose.ui.test.swipe
import androidx.compose.ui.test.swipeLeft
import androidx.compose.ui.test.swipeRight
+import androidx.compose.ui.test.swipeWithVelocity
import com.google.common.truth.Truth.assertThat
import java.lang.Math.sin
import org.junit.Assert.assertEquals
@@ -86,7 +87,11 @@
// Execute a partial swipe over a longer-than-default duration so that there
// is insufficient velocity to perform a 'fling'.
verifySwipe(
- gesture = { swipeRight(startX = 0f, endX = width / 4f, durationMillis = LONG_SWIPE) },
+ gesture = { swipeWithVelocity(
+ start = Offset(0f, centerY),
+ end = Offset(centerX / 2f, centerY),
+ endVelocity = 1.0f
+ ) },
expectedToDismiss = false
)
diff --git a/wear/compose/compose-material/src/main/java/androidx/wear/compose/material/Card.kt b/wear/compose/compose-material/src/main/java/androidx/wear/compose/material/Card.kt
index 2b09353..81a53a4 100644
--- a/wear/compose/compose-material/src/main/java/androidx/wear/compose/material/Card.kt
+++ b/wear/compose/compose-material/src/main/java/androidx/wear/compose/material/Card.kt
@@ -19,15 +19,19 @@
import androidx.compose.foundation.Image
import androidx.compose.foundation.interaction.Interaction
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.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.runtime.Composable
import androidx.compose.runtime.CompositionLocalProvider
import androidx.compose.runtime.Immutable
import androidx.compose.runtime.remember
+import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
import androidx.compose.ui.geometry.Offset
import androidx.compose.ui.geometry.Size
@@ -295,35 +299,38 @@
timeColor: Color = contentColor,
content: @Composable ColumnScope.() -> Unit,
) {
- androidx.wear.compose.materialcore.TitleCard(
+ androidx.wear.compose.materialcore.Card(
onClick = onClick,
modifier = modifier,
enabled = enabled,
+ containerPainter = backgroundPainter,
border = null,
contentPadding = CardDefaults.ContentPadding,
- containerPainter = backgroundPainter,
interactionSource = remember { MutableInteractionSource() },
- shape = MaterialTheme.shapes.large,
- title = {
- CompositionLocalProvider(
- LocalContentColor provides titleColor,
- LocalTextStyle provides MaterialTheme.typography.title3,
+ role = null,
+ shape = MaterialTheme.shapes.large
+ ) {
+ Column {
+ Row(
+ modifier = Modifier.fillMaxWidth(),
+ verticalAlignment = Alignment.CenterVertically
) {
- title()
- }
- },
- time = {
- time?.let {
- Spacer(modifier = Modifier.weight(1.0f))
CompositionLocalProvider(
- LocalContentColor provides timeColor,
- LocalTextStyle provides MaterialTheme.typography.caption1,
+ LocalContentColor provides titleColor,
+ LocalTextStyle provides MaterialTheme.typography.title3,
) {
- time()
+ title()
+ }
+ time?.let {
+ Spacer(modifier = Modifier.weight(1.0f))
+ CompositionLocalProvider(
+ LocalContentColor provides timeColor,
+ LocalTextStyle provides MaterialTheme.typography.caption1,
+ ) {
+ time()
+ }
}
}
- },
- content = {
Spacer(modifier = Modifier.height(2.dp))
CompositionLocalProvider(
LocalContentColor provides contentColor,
@@ -332,7 +339,7 @@
content()
}
}
- )
+ }
}
/**
diff --git a/wear/compose/compose-material/src/main/java/androidx/wear/compose/material/PositionIndicator.kt b/wear/compose/compose-material/src/main/java/androidx/wear/compose/material/PositionIndicator.kt
index bb7b888..c08a619 100644
--- a/wear/compose/compose-material/src/main/java/androidx/wear/compose/material/PositionIndicator.kt
+++ b/wear/compose/compose-material/src/main/java/androidx/wear/compose/material/PositionIndicator.kt
@@ -19,12 +19,9 @@
import androidx.annotation.FloatRange
import androidx.compose.animation.core.Animatable
import androidx.compose.animation.core.AnimationSpec
-import androidx.compose.animation.core.AnimationVector
-import androidx.compose.animation.core.AnimationVector2D
import androidx.compose.animation.core.CubicBezierEasing
import androidx.compose.animation.core.Spring
-import androidx.compose.animation.core.TwoWayConverter
-import androidx.compose.animation.core.animateFloatAsState
+import androidx.compose.animation.core.animate
import androidx.compose.animation.core.spring
import androidx.compose.animation.core.tween
import androidx.compose.foundation.ScrollState
@@ -37,18 +34,15 @@
import androidx.compose.runtime.Composable
import androidx.compose.runtime.Immutable
import androidx.compose.runtime.LaunchedEffect
-import androidx.compose.runtime.SideEffect
import androidx.compose.runtime.Stable
-import androidx.compose.runtime.State
-import androidx.compose.runtime.derivedStateOf
import androidx.compose.runtime.getValue
+import androidx.compose.runtime.mutableFloatStateOf
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.AbsoluteAlignment
import androidx.compose.ui.Modifier
-import androidx.compose.ui.draw.alpha
import androidx.compose.ui.draw.drawWithCache
import androidx.compose.ui.geometry.Offset
import androidx.compose.ui.geometry.Size
@@ -57,7 +51,7 @@
import androidx.compose.ui.graphics.StrokeCap
import androidx.compose.ui.graphics.drawscope.ContentDrawScope
import androidx.compose.ui.graphics.drawscope.Stroke
-import androidx.compose.ui.graphics.lerp
+import androidx.compose.ui.graphics.graphicsLayer
import androidx.compose.ui.layout.LayoutModifier
import androidx.compose.ui.layout.Measurable
import androidx.compose.ui.layout.MeasureResult
@@ -81,9 +75,8 @@
import kotlin.math.max
import kotlin.math.roundToInt
import kotlin.math.sqrt
-import kotlinx.coroutines.CoroutineScope
-import kotlinx.coroutines.channels.Channel
import kotlinx.coroutines.delay
+import kotlinx.coroutines.flow.collectLatest
import kotlinx.coroutines.launch
/**
@@ -409,59 +402,19 @@
val isScreenRound = isRoundDevice()
val layoutDirection = LocalLayoutDirection.current
val leftyMode = isLeftyModeEnabled()
- val actuallyVisible = remember { mutableStateOf(false) }
+
var containerSize by remember { mutableStateOf(IntSize.Zero) }
- val displayState by remember(state) {
- derivedStateOf {
- DisplayState(
- state.positionFraction,
- state.sizeFraction(containerSize.height.toFloat())
- )
- }
- }
+ var positionIndicatorAlpha by remember { mutableFloatStateOf(0f) }
- val highlightAlpha = remember { Animatable(0f) }
- val animatedDisplayState = customAnimateValueAsState(
- displayState,
- DisplayStateTwoWayConverter,
- animationSpec = tween(
+ val positionFractionAnimatable = remember { Animatable(0f) }
+ val sizeFractionAnimatable = remember { Animatable(0f) }
+
+ val indicatorChangeAnimationSpec: AnimationSpec<Float> = remember {
+ tween(
durationMillis = 500,
easing = CubicBezierEasing(0f, 0f, 0f, 1f)
)
- ) { _, _ ->
- launch {
- highlightAlpha.animateTo(
- 0.33f,
- animationSpec = tween(
- durationMillis = 150,
- easing = CubicBezierEasing(0f, 0f, 0.2f, 1f) // Standard In
- )
- )
- highlightAlpha.animateTo(
- 0f,
- animationSpec = tween(
- durationMillis = 500,
- easing = CubicBezierEasing(0.25f, 0f, 0.75f, 1f)
- )
- )
- }
- }
-
- val visibility by remember(state) {
- derivedStateOf {
- state.visibility(containerSize.height.toFloat())
- }
- }
- when (visibility) {
- PositionIndicatorVisibility.Show -> actuallyVisible.value = true
- PositionIndicatorVisibility.Hide -> actuallyVisible.value = false
- PositionIndicatorVisibility.AutoHide -> if (actuallyVisible.value) {
- LaunchedEffect(true) {
- delay(2000)
- actuallyVisible.value = false
- }
- }
}
val indicatorOnTheRight = when (position) {
@@ -477,7 +430,7 @@
((if (isScreenRound) {
// r is the distance from the center of the container to the arc we draw the
// position indicator on (the center of the arc, which is indicatorWidth wide).
- val r = containerSize.width / 2 - paddingHorizontal.toPx() -
+ val r = containerSize.width.toFloat() / 2 - paddingHorizontal.toPx() -
indicatorWidth.toPx() / 2
// The sqrt is the size of the projection on the x axis of line between center of
// the container and the point where we start the arc.
@@ -489,6 +442,7 @@
(indicatorHeight.toPx() + indicatorWidth.toPx()).roundToInt()
)
}
+
val boundsOffset: Density.() -> IntOffset = {
// Note that indicators are on right or left, centered vertically.
val indicatorSize = boundsSize()
@@ -498,20 +452,57 @@
)
}
- // Using same animation spec as AnimatedVisibility's fadeIn and fadeOut
- val positionIndicatorAlpha by animateFloatAsState(
- targetValue = if (actuallyVisible.value) 1f else 0f,
- spring(stiffness = Spring.StiffnessMediumLow)
- )
+ LaunchedEffect(state) {
+ var beforeFirstAnimation = true
+ snapshotFlow {
+ DisplayState(
+ state.positionFraction,
+ state.sizeFraction(containerSize.height.toFloat()),
+ state.visibility(containerSize.height.toFloat())
+ )
+ }.collectLatest {
+ if (beforeFirstAnimation) {
+ sizeFractionAnimatable.snapTo(it.size)
+ positionFractionAnimatable.snapTo(it.position)
+ beforeFirstAnimation = false
+ } else {
+ launch {
+ sizeFractionAnimatable
+ .animateTo(it.size, animationSpec = indicatorChangeAnimationSpec)
+ }
+ launch {
+ positionFractionAnimatable
+ .animateTo(it.position, animationSpec = indicatorChangeAnimationSpec)
+ }
+ }
+
+ when (it.visibility) {
+ PositionIndicatorVisibility.Show -> positionIndicatorAlpha = 1f
+ PositionIndicatorVisibility.Hide -> positionIndicatorAlpha = 0f
+ else -> {
+ // Waiting for 2000ms and animating alpha to 0f
+ delay(2000)
+ animate(
+ initialValue = positionIndicatorAlpha,
+ targetValue = 0f,
+ animationSpec = spring(stiffness = Spring.StiffnessMediumLow)
+ ) { value, _ ->
+ positionIndicatorAlpha = value
+ }
+ }
+ }
+ }
+ }
BoundsLimiter(boundsOffset, boundsSize, modifier, onSizeChanged = {
containerSize = it
- }
- ) {
+ }) {
Box(
modifier = Modifier
.fillMaxSize()
- .alpha(positionIndicatorAlpha)
+ .graphicsLayer {
+ alpha = positionIndicatorAlpha
+ }
.drawWithCache {
// We need to invert reverseDirection when the screen is round and we are on
// the left.
@@ -523,30 +514,26 @@
}
val indicatorPosition = if (actualReverseDirection) {
- 1 - animatedDisplayState.value.position
+ 1 - positionFractionAnimatable.value
} else {
- animatedDisplayState.value.position
+ positionFractionAnimatable.value
}
val indicatorWidthPx = indicatorWidth.toPx()
// We want position = 0 be the indicator aligned at the top of its area and
// position = 1 be aligned at the bottom of the area.
- val indicatorStart =
- indicatorPosition * (1 - animatedDisplayState.value.size)
+ val indicatorStart = indicatorPosition * (1 - sizeFractionAnimatable.value)
- val diameter = max(containerSize.width, containerSize.height)
+ val diameter =
+ max(containerSize.width.toFloat(), containerSize.height.toFloat())
val paddingHorizontalPx = paddingHorizontal.toPx()
-
onDrawWithContent {
if (isScreenRound) {
val usableHalf = diameter / 2f - paddingHorizontalPx
val sweepDegrees =
- (2 * asin(
- (indicatorHeight.toPx() / 2) /
- usableHalf
- )).toDegrees()
+ (2 * asin((indicatorHeight.toPx() / 2) / usableHalf)).toDegrees()
drawCurvedIndicator(
color,
@@ -556,8 +543,7 @@
sweepDegrees,
indicatorWidthPx,
indicatorStart,
- animatedDisplayState.value.size,
- highlightAlpha.value
+ sizeFractionAnimatable.value,
)
} else {
drawStraightIndicator(
@@ -566,10 +552,9 @@
paddingHorizontalPx,
indicatorOnTheRight,
indicatorWidthPx,
- indicatorHeightPx = indicatorHeight.toPx(),
+ indicatorHeight.toPx(),
indicatorStart,
- animatedDisplayState.value.size,
- highlightAlpha.value
+ sizeFractionAnimatable.value,
)
}
}
@@ -578,49 +563,16 @@
}
}
-// Copy of animateValueAsState, changing the listener to be notified before the animation starts,
-// so we can link this animation with another one.
-@Composable
-internal fun <T, V : AnimationVector> customAnimateValueAsState(
- targetValue: T,
- typeConverter: TwoWayConverter<T, V>,
- animationSpec: AnimationSpec<T>,
- changeListener: (CoroutineScope.(T, T) -> Unit)? = null
-): State<T> {
- val animatable = remember { Animatable(targetValue, typeConverter) }
- val listener by rememberUpdatedState(changeListener)
- val animSpec by rememberUpdatedState(animationSpec)
- val channel = remember { Channel<T>(Channel.CONFLATED) }
- SideEffect {
- channel.trySend(targetValue)
- }
- LaunchedEffect(channel) {
- for (target in channel) {
- // This additional poll is needed because when the channel suspends on receive and
- // two values are produced before consumers' dispatcher resumes, only the first value
- // will be received.
- // It may not be an issue elsewhere, but in animation we want to avoid being one
- // frame late.
- val newTarget = channel.tryReceive().getOrNull() ?: target
- launch {
- if (newTarget != animatable.targetValue) {
- listener?.invoke(this, animatable.value, newTarget)
- animatable.animateTo(newTarget, animSpec)
- }
- }
- }
- }
- return animatable.asState()
-}
-
@Immutable
internal class DisplayState(
val position: Float,
- val size: Float
+ val size: Float,
+ val visibility: PositionIndicatorVisibility
) {
override fun hashCode(): Int {
var result = position.hashCode()
result = 31 * result + size.hashCode()
+ result = 31 * result + visibility.hashCode()
return result
}
@@ -633,21 +585,12 @@
if (position != other.position) return false
if (size != other.size) return false
+ if (visibility != other.visibility) return false
return true
}
}
-internal val DisplayStateTwoWayConverter: TwoWayConverter<DisplayState, AnimationVector2D> =
- TwoWayConverter(
- convertToVector = { ds ->
- AnimationVector2D(ds.position, ds.size)
- },
- convertFromVector = { av ->
- DisplayState(av.v1, av.v2)
- }
- )
-
/**
* An implementation of [PositionIndicatorState] to display a value that is being incremented or
* decremented with a rolling side button, rotating bezel or a slider e.g. a volume control.
@@ -700,11 +643,10 @@
override fun visibility(scrollableContainerSizePx: Float) = if (scrollState.maxValue == 0) {
PositionIndicatorVisibility.Hide
- } else if (scrollState.isScrollInProgress) {
+ } else if (scrollState.isScrollInProgress)
PositionIndicatorVisibility.Show
- } else {
+ else
PositionIndicatorVisibility.AutoHide
- }
override fun equals(other: Any?): Boolean {
return (other as? ScrollStateAdapter)?.scrollState == scrollState
@@ -918,11 +860,10 @@
(decimalFirstItemIndex() > 0 ||
decimalLastItemIndex() < totalItemsCount())
return if (canScroll) {
- if (isScrollInProgress()) {
+ if (isScrollInProgress())
PositionIndicatorVisibility.Show
- } else {
+ else
PositionIndicatorVisibility.AutoHide
- }
} else {
PositionIndicatorVisibility.Hide
}
@@ -983,11 +924,10 @@
override fun visibility(scrollableContainerSizePx: Float): PositionIndicatorVisibility {
return if (sizeFraction(scrollableContainerSizePx) < 0.999f) {
- if (state.isScrollInProgress) {
+ if (state.isScrollInProgress)
PositionIndicatorVisibility.Show
- } else {
+ else
PositionIndicatorVisibility.AutoHide
- }
} else {
PositionIndicatorVisibility.Hide
}
@@ -1032,8 +972,7 @@
sweepDegrees: Float,
indicatorWidthPx: Float,
indicatorStart: Float,
- indicatorSize: Float,
- highlightAlpha: Float
+ indicatorSize: Float
) {
val diameter = max(size.width, size.height)
val arcSize = Size(
@@ -1055,7 +994,7 @@
style = Stroke(width = indicatorWidthPx, cap = StrokeCap.Round)
)
drawArc(
- lerp(color, Color.White, highlightAlpha),
+ color = color,
startAngle = startAngleOffset + sweepDegrees * (-0.5f + indicatorStart),
sweepAngle = sweepDegrees * indicatorSize,
useCenter = false,
@@ -1073,8 +1012,7 @@
indicatorWidthPx: Float,
indicatorHeightPx: Float,
indicatorStart: Float,
- indicatorSize: Float,
- highlightAlpha: Float
+ indicatorSize: Float
) {
val x = if (indicatorOnTheRight) {
size.width - paddingHorizontalPx - indicatorWidthPx / 2
@@ -1091,7 +1029,7 @@
cap = StrokeCap.Round
)
drawLine(
- lerp(color, Color.White, highlightAlpha),
+ color,
lerp(lineTop, lineBottom, indicatorStart),
lerp(lineTop, lineBottom, indicatorStart + indicatorSize),
strokeWidth = indicatorWidthPx,
diff --git a/wear/compose/compose-material3/api/current.txt b/wear/compose/compose-material3/api/current.txt
index 9b379c2..e22ff32 100644
--- a/wear/compose/compose-material3/api/current.txt
+++ b/wear/compose/compose-material3/api/current.txt
@@ -57,27 +57,29 @@
}
@androidx.compose.runtime.Immutable public final class CardColors {
- ctor public CardColors(androidx.compose.ui.graphics.painter.Painter containerPainter, long contentColor, long appNameColor, long timeColor, long titleColor);
+ ctor public CardColors(androidx.compose.ui.graphics.painter.Painter containerPainter, long contentColor, long appNameColor, long timeColor, long titleColor, long subtitleColor);
method public long getAppNameColor();
method public androidx.compose.ui.graphics.painter.Painter getContainerPainter();
method public long getContentColor();
+ method public long getSubtitleColor();
method public long getTimeColor();
method public long getTitleColor();
property public final long appNameColor;
property public final androidx.compose.ui.graphics.painter.Painter containerPainter;
property public final long contentColor;
+ property public final long subtitleColor;
property public final long timeColor;
property public final long titleColor;
}
public final class CardDefaults {
- method @androidx.compose.runtime.Composable public androidx.wear.compose.material3.CardColors cardColors(optional long containerColor, optional long contentColor, optional long appNameColor, optional long timeColor, optional long titleColor);
+ method @androidx.compose.runtime.Composable public androidx.wear.compose.material3.CardColors cardColors(optional long containerColor, optional long contentColor, optional long appNameColor, optional long timeColor, optional long titleColor, optional long subtitleColor);
method public float getAppImageSize();
method public androidx.compose.foundation.layout.PaddingValues getContentPadding();
- method @androidx.compose.runtime.Composable public androidx.wear.compose.material3.CardColors imageCardColors(androidx.compose.ui.graphics.painter.Painter containerPainter, optional long contentColor, optional long appNameColor, optional long timeColor, optional long titleColor);
+ method @androidx.compose.runtime.Composable public androidx.wear.compose.material3.CardColors imageCardColors(androidx.compose.ui.graphics.painter.Painter containerPainter, optional long contentColor, optional long appNameColor, optional long timeColor, optional long titleColor, optional long subtitleColor);
method @androidx.compose.runtime.Composable public androidx.compose.ui.graphics.painter.Painter imageWithScrimBackgroundPainter(androidx.compose.ui.graphics.painter.Painter backgroundImagePainter, optional androidx.compose.ui.graphics.Brush backgroundImageScrimBrush);
method @androidx.compose.runtime.Composable public androidx.compose.foundation.BorderStroke outlinedCardBorder(optional long outlineColor, optional float borderWidth);
- method @androidx.compose.runtime.Composable public androidx.wear.compose.material3.CardColors outlinedCardColors(optional long contentColor, optional long appNameColor, optional long timeColor, optional long titleColor);
+ method @androidx.compose.runtime.Composable public androidx.wear.compose.material3.CardColors outlinedCardColors(optional long contentColor, optional long appNameColor, optional long timeColor, optional long titleColor, optional long subtitleColor);
property public final float AppImageSize;
property public final androidx.compose.foundation.layout.PaddingValues ContentPadding;
field public static final androidx.wear.compose.material3.CardDefaults INSTANCE;
@@ -87,7 +89,7 @@
method @androidx.compose.runtime.Composable public static void AppCard(kotlin.jvm.functions.Function0<kotlin.Unit> onClick, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.RowScope,kotlin.Unit> appName, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.RowScope,kotlin.Unit> title, optional androidx.compose.ui.Modifier modifier, optional boolean enabled, optional androidx.compose.ui.graphics.Shape shape, optional androidx.wear.compose.material3.CardColors colors, optional androidx.compose.foundation.BorderStroke? border, optional androidx.compose.foundation.layout.PaddingValues contentPadding, optional androidx.compose.foundation.interaction.MutableInteractionSource interactionSource, optional kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.RowScope,kotlin.Unit>? appImage, optional kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.RowScope,kotlin.Unit>? time, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.ColumnScope,kotlin.Unit> content);
method @androidx.compose.runtime.Composable public static void Card(kotlin.jvm.functions.Function0<kotlin.Unit> onClick, optional androidx.compose.ui.Modifier modifier, optional boolean enabled, optional androidx.compose.ui.graphics.Shape shape, optional androidx.wear.compose.material3.CardColors colors, optional androidx.compose.foundation.BorderStroke? border, optional androidx.compose.foundation.layout.PaddingValues contentPadding, optional androidx.compose.foundation.interaction.MutableInteractionSource interactionSource, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.ColumnScope,kotlin.Unit> content);
method @androidx.compose.runtime.Composable public static void OutlinedCard(kotlin.jvm.functions.Function0<kotlin.Unit> onClick, optional androidx.compose.ui.Modifier modifier, optional boolean enabled, optional androidx.compose.ui.graphics.Shape shape, optional androidx.wear.compose.material3.CardColors colors, optional androidx.compose.foundation.BorderStroke border, optional androidx.compose.foundation.layout.PaddingValues contentPadding, optional androidx.compose.foundation.interaction.MutableInteractionSource interactionSource, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.ColumnScope,kotlin.Unit> content);
- method @androidx.compose.runtime.Composable public static void TitleCard(kotlin.jvm.functions.Function0<kotlin.Unit> onClick, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.RowScope,kotlin.Unit> title, optional androidx.compose.ui.Modifier modifier, optional boolean enabled, optional androidx.compose.ui.graphics.Shape shape, optional androidx.wear.compose.material3.CardColors colors, optional androidx.compose.foundation.BorderStroke? border, optional androidx.compose.foundation.layout.PaddingValues contentPadding, optional androidx.compose.foundation.interaction.MutableInteractionSource interactionSource, optional kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.RowScope,kotlin.Unit>? time, kotlin.jvm.functions.Function0<kotlin.Unit> content);
+ method @androidx.compose.runtime.Composable public static void TitleCard(kotlin.jvm.functions.Function0<kotlin.Unit> onClick, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.RowScope,kotlin.Unit> title, optional androidx.compose.ui.Modifier modifier, optional kotlin.jvm.functions.Function0<kotlin.Unit>? time, optional kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.ColumnScope,kotlin.Unit>? subtitle, optional boolean enabled, optional androidx.compose.ui.graphics.Shape shape, optional androidx.wear.compose.material3.CardColors colors, optional androidx.compose.foundation.BorderStroke? border, optional androidx.compose.foundation.layout.PaddingValues contentPadding, optional androidx.compose.foundation.interaction.MutableInteractionSource interactionSource, optional kotlin.jvm.functions.Function0<kotlin.Unit>? content);
}
@androidx.compose.runtime.Immutable public final class CheckboxColors {
diff --git a/wear/compose/compose-material3/api/restricted_current.txt b/wear/compose/compose-material3/api/restricted_current.txt
index 9b379c2..e22ff32 100644
--- a/wear/compose/compose-material3/api/restricted_current.txt
+++ b/wear/compose/compose-material3/api/restricted_current.txt
@@ -57,27 +57,29 @@
}
@androidx.compose.runtime.Immutable public final class CardColors {
- ctor public CardColors(androidx.compose.ui.graphics.painter.Painter containerPainter, long contentColor, long appNameColor, long timeColor, long titleColor);
+ ctor public CardColors(androidx.compose.ui.graphics.painter.Painter containerPainter, long contentColor, long appNameColor, long timeColor, long titleColor, long subtitleColor);
method public long getAppNameColor();
method public androidx.compose.ui.graphics.painter.Painter getContainerPainter();
method public long getContentColor();
+ method public long getSubtitleColor();
method public long getTimeColor();
method public long getTitleColor();
property public final long appNameColor;
property public final androidx.compose.ui.graphics.painter.Painter containerPainter;
property public final long contentColor;
+ property public final long subtitleColor;
property public final long timeColor;
property public final long titleColor;
}
public final class CardDefaults {
- method @androidx.compose.runtime.Composable public androidx.wear.compose.material3.CardColors cardColors(optional long containerColor, optional long contentColor, optional long appNameColor, optional long timeColor, optional long titleColor);
+ method @androidx.compose.runtime.Composable public androidx.wear.compose.material3.CardColors cardColors(optional long containerColor, optional long contentColor, optional long appNameColor, optional long timeColor, optional long titleColor, optional long subtitleColor);
method public float getAppImageSize();
method public androidx.compose.foundation.layout.PaddingValues getContentPadding();
- method @androidx.compose.runtime.Composable public androidx.wear.compose.material3.CardColors imageCardColors(androidx.compose.ui.graphics.painter.Painter containerPainter, optional long contentColor, optional long appNameColor, optional long timeColor, optional long titleColor);
+ method @androidx.compose.runtime.Composable public androidx.wear.compose.material3.CardColors imageCardColors(androidx.compose.ui.graphics.painter.Painter containerPainter, optional long contentColor, optional long appNameColor, optional long timeColor, optional long titleColor, optional long subtitleColor);
method @androidx.compose.runtime.Composable public androidx.compose.ui.graphics.painter.Painter imageWithScrimBackgroundPainter(androidx.compose.ui.graphics.painter.Painter backgroundImagePainter, optional androidx.compose.ui.graphics.Brush backgroundImageScrimBrush);
method @androidx.compose.runtime.Composable public androidx.compose.foundation.BorderStroke outlinedCardBorder(optional long outlineColor, optional float borderWidth);
- method @androidx.compose.runtime.Composable public androidx.wear.compose.material3.CardColors outlinedCardColors(optional long contentColor, optional long appNameColor, optional long timeColor, optional long titleColor);
+ method @androidx.compose.runtime.Composable public androidx.wear.compose.material3.CardColors outlinedCardColors(optional long contentColor, optional long appNameColor, optional long timeColor, optional long titleColor, optional long subtitleColor);
property public final float AppImageSize;
property public final androidx.compose.foundation.layout.PaddingValues ContentPadding;
field public static final androidx.wear.compose.material3.CardDefaults INSTANCE;
@@ -87,7 +89,7 @@
method @androidx.compose.runtime.Composable public static void AppCard(kotlin.jvm.functions.Function0<kotlin.Unit> onClick, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.RowScope,kotlin.Unit> appName, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.RowScope,kotlin.Unit> title, optional androidx.compose.ui.Modifier modifier, optional boolean enabled, optional androidx.compose.ui.graphics.Shape shape, optional androidx.wear.compose.material3.CardColors colors, optional androidx.compose.foundation.BorderStroke? border, optional androidx.compose.foundation.layout.PaddingValues contentPadding, optional androidx.compose.foundation.interaction.MutableInteractionSource interactionSource, optional kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.RowScope,kotlin.Unit>? appImage, optional kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.RowScope,kotlin.Unit>? time, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.ColumnScope,kotlin.Unit> content);
method @androidx.compose.runtime.Composable public static void Card(kotlin.jvm.functions.Function0<kotlin.Unit> onClick, optional androidx.compose.ui.Modifier modifier, optional boolean enabled, optional androidx.compose.ui.graphics.Shape shape, optional androidx.wear.compose.material3.CardColors colors, optional androidx.compose.foundation.BorderStroke? border, optional androidx.compose.foundation.layout.PaddingValues contentPadding, optional androidx.compose.foundation.interaction.MutableInteractionSource interactionSource, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.ColumnScope,kotlin.Unit> content);
method @androidx.compose.runtime.Composable public static void OutlinedCard(kotlin.jvm.functions.Function0<kotlin.Unit> onClick, optional androidx.compose.ui.Modifier modifier, optional boolean enabled, optional androidx.compose.ui.graphics.Shape shape, optional androidx.wear.compose.material3.CardColors colors, optional androidx.compose.foundation.BorderStroke border, optional androidx.compose.foundation.layout.PaddingValues contentPadding, optional androidx.compose.foundation.interaction.MutableInteractionSource interactionSource, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.ColumnScope,kotlin.Unit> content);
- method @androidx.compose.runtime.Composable public static void TitleCard(kotlin.jvm.functions.Function0<kotlin.Unit> onClick, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.RowScope,kotlin.Unit> title, optional androidx.compose.ui.Modifier modifier, optional boolean enabled, optional androidx.compose.ui.graphics.Shape shape, optional androidx.wear.compose.material3.CardColors colors, optional androidx.compose.foundation.BorderStroke? border, optional androidx.compose.foundation.layout.PaddingValues contentPadding, optional androidx.compose.foundation.interaction.MutableInteractionSource interactionSource, optional kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.RowScope,kotlin.Unit>? time, kotlin.jvm.functions.Function0<kotlin.Unit> content);
+ method @androidx.compose.runtime.Composable public static void TitleCard(kotlin.jvm.functions.Function0<kotlin.Unit> onClick, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.RowScope,kotlin.Unit> title, optional androidx.compose.ui.Modifier modifier, optional kotlin.jvm.functions.Function0<kotlin.Unit>? time, optional kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.ColumnScope,kotlin.Unit>? subtitle, optional boolean enabled, optional androidx.compose.ui.graphics.Shape shape, optional androidx.wear.compose.material3.CardColors colors, optional androidx.compose.foundation.BorderStroke? border, optional androidx.compose.foundation.layout.PaddingValues contentPadding, optional androidx.compose.foundation.interaction.MutableInteractionSource interactionSource, optional kotlin.jvm.functions.Function0<kotlin.Unit>? content);
}
@androidx.compose.runtime.Immutable public final class CheckboxColors {
diff --git a/wear/compose/compose-material3/integration-tests/src/main/java/androidx/wear/compose/material3/demos/CardDemo.kt b/wear/compose/compose-material3/integration-tests/src/main/java/androidx/wear/compose/material3/demos/CardDemo.kt
index e485230..9180758 100644
--- a/wear/compose/compose-material3/integration-tests/src/main/java/androidx/wear/compose/material3/demos/CardDemo.kt
+++ b/wear/compose/compose-material3/integration-tests/src/main/java/androidx/wear/compose/material3/demos/CardDemo.kt
@@ -35,6 +35,7 @@
import androidx.wear.compose.material3.CardDefaults
import androidx.wear.compose.material3.ListHeader
import androidx.wear.compose.material3.Text
+import androidx.wear.compose.material3.TitleCard
import androidx.wear.compose.material3.samples.AppCardSample
import androidx.wear.compose.material3.samples.AppCardWithIconSample
import androidx.wear.compose.material3.samples.CardSample
@@ -43,6 +44,7 @@
import androidx.wear.compose.material3.samples.OutlinedTitleCardSample
import androidx.wear.compose.material3.samples.TitleCardSample
import androidx.wear.compose.material3.samples.TitleCardWithImageSample
+import androidx.wear.compose.material3.samples.TitleCardWithSubtitleAndTimeSample
@Composable
fun CardDemo() {
@@ -62,7 +64,12 @@
item { ListHeader { Text("Title card") } }
item { TitleCardSample() }
+ item { TitleCardWithSubtitleDemo() }
+ item { TitleCardWithSubtitleAndTimeSample() }
+ item { TitleCardWithContentSubtitleAndTimeDemo() }
item { OutlinedTitleCardSample() }
+ item { OutlinedTitleCardWithSubtitleDemo() }
+ item { OutlinedTitleCardWithSubtitleAndTimeDemo() }
item { ListHeader { Text("Image card") } }
item { TitleCardWithImageSample() }
@@ -90,3 +97,47 @@
)
}
}
+
+@Composable
+private fun OutlinedTitleCardWithSubtitleAndTimeDemo() {
+ TitleCard(
+ onClick = { /* Do something */ },
+ time = { Text("now") },
+ title = { Text("Title card") },
+ subtitle = { Text("Subtitle") },
+ colors = CardDefaults.outlinedCardColors(),
+ border = CardDefaults.outlinedCardBorder(),
+ )
+}
+
+@Composable
+fun TitleCardWithSubtitleDemo() {
+ TitleCard(
+ onClick = { /* Do something */ },
+ title = { Text("Title card") },
+ subtitle = { Text("Subtitle") }
+ )
+}
+
+@Composable
+fun TitleCardWithContentSubtitleAndTimeDemo() {
+ TitleCard(
+ onClick = { /* Do something */ },
+ time = { Text("now") },
+ title = { Text("Title card") },
+ subtitle = { Text("Subtitle") }
+ ) {
+ Text("Card content")
+ }
+}
+
+@Composable
+fun OutlinedTitleCardWithSubtitleDemo() {
+ TitleCard(
+ onClick = { /* Do something */ },
+ title = { Text("Title card") },
+ subtitle = { Text("Subtitle") },
+ colors = CardDefaults.outlinedCardColors(),
+ border = CardDefaults.outlinedCardBorder(),
+ )
+}
diff --git a/wear/compose/compose-material3/samples/src/main/java/androidx/wear/compose/material3/samples/CardSample.kt b/wear/compose/compose-material3/samples/src/main/java/androidx/wear/compose/material3/samples/CardSample.kt
index 8e83f1e..3b4c458 100644
--- a/wear/compose/compose-material3/samples/src/main/java/androidx/wear/compose/material3/samples/CardSample.kt
+++ b/wear/compose/compose-material3/samples/src/main/java/androidx/wear/compose/material3/samples/CardSample.kt
@@ -95,6 +95,17 @@
@Sampled
@Composable
+fun TitleCardWithSubtitleAndTimeSample() {
+ TitleCard(
+ onClick = { /* Do something */ },
+ time = { Text("now") },
+ title = { Text("Title card") },
+ subtitle = { Text("Subtitle") }
+ )
+}
+
+@Sampled
+@Composable
fun TitleCardWithImageSample() {
TitleCard(
onClick = { /* Do something */ },
diff --git a/wear/compose/compose-material3/src/androidTest/kotlin/androidx/wear/compose/material3/CardScreenshotTest.kt b/wear/compose/compose-material3/src/androidTest/kotlin/androidx/wear/compose/material3/CardScreenshotTest.kt
index f9d3804..01cec23 100644
--- a/wear/compose/compose-material3/src/androidTest/kotlin/androidx/wear/compose/material3/CardScreenshotTest.kt
+++ b/wear/compose/compose-material3/src/androidTest/kotlin/androidx/wear/compose/material3/CardScreenshotTest.kt
@@ -140,6 +140,42 @@
}
@Test
+ fun title_card_with_time_and_subtitle_ltr() =
+ verifyScreenshot(layoutDirection = LayoutDirection.Ltr) {
+ sampleTitleCardWithTimeAndSubtitle()
+ }
+
+ @Test
+ fun title_card_with_time_and_subtitle_disabled() =
+ verifyScreenshot(layoutDirection = LayoutDirection.Ltr) {
+ sampleTitleCardWithTimeAndSubtitle(enabled = false)
+ }
+
+ @Test
+ fun title_card_with_time_and_subtitle_rtl() =
+ verifyScreenshot(layoutDirection = LayoutDirection.Rtl) {
+ sampleTitleCardWithTimeAndSubtitle()
+ }
+
+ @Test
+ fun title_card_with_content_time_and_subtitle_ltr() =
+ verifyScreenshot(layoutDirection = LayoutDirection.Ltr) {
+ sampleTitleCardWithContentTimeAndSubtitle()
+ }
+
+ @Test
+ fun title_card_with_content_time_and_subtitle_disabled() =
+ verifyScreenshot(layoutDirection = LayoutDirection.Ltr) {
+ sampleTitleCardWithContentTimeAndSubtitle(enabled = false)
+ }
+
+ @Test
+ fun title_card_with_content_time_and_subtitle_rtl() =
+ verifyScreenshot(layoutDirection = LayoutDirection.Rtl) {
+ sampleTitleCardWithContentTimeAndSubtitle()
+ }
+
+ @Test
fun title_card_image_background() = verifyScreenshot {
sampleTitleCard(
colors = CardDefaults.imageCardColors(
@@ -226,6 +262,36 @@
}
}
+ @Composable
+ private fun sampleTitleCardWithTimeAndSubtitle(
+ enabled: Boolean = true
+ ) {
+ TitleCard(
+ enabled = enabled,
+ onClick = {},
+ time = { Text("XXm") },
+ title = { Text("TitleCard") },
+ subtitle = { Text("Subtitle") },
+ modifier = Modifier.testTag(TEST_TAG),
+ )
+ }
+
+ @Composable
+ private fun sampleTitleCardWithContentTimeAndSubtitle(
+ enabled: Boolean = true
+ ) {
+ TitleCard(
+ enabled = enabled,
+ onClick = {},
+ time = { Text("XXm") },
+ title = { Text("TitleCard") },
+ subtitle = { Text("Subtitle") },
+ modifier = Modifier.testTag(TEST_TAG),
+ ) {
+ Text("Card content")
+ }
+ }
+
private fun verifyScreenshot(
layoutDirection: LayoutDirection = LayoutDirection.Ltr,
content: @Composable () -> Unit
diff --git a/wear/compose/compose-material3/src/androidTest/kotlin/androidx/wear/compose/material3/CardTest.kt b/wear/compose/compose-material3/src/androidTest/kotlin/androidx/wear/compose/material3/CardTest.kt
index 80719e0..55db445 100644
--- a/wear/compose/compose-material3/src/androidTest/kotlin/androidx/wear/compose/material3/CardTest.kt
+++ b/wear/compose/compose-material3/src/androidTest/kotlin/androidx/wear/compose/material3/CardTest.kt
@@ -298,6 +298,40 @@
assertEquals(expectedContentColor, actualContentColor)
}
+ @Test
+ public fun title_card_with_time_and_subtitle_gives_default_colors() {
+ var expectedTimeColor = Color.Transparent
+ var expectedSubtitleColor = Color.Transparent
+ var expectedTitleColor = Color.Transparent
+ var actualTimeColor = Color.Transparent
+ var actualSubtitleColor = Color.Transparent
+ var actualTitleColor = Color.Transparent
+ val testBackground = Color.White
+
+ rule.setContentWithTheme {
+ expectedTimeColor = MaterialTheme.colorScheme.onSurfaceVariant
+ expectedSubtitleColor = MaterialTheme.colorScheme.tertiary
+ expectedTitleColor = MaterialTheme.colorScheme.onSurface
+ Box(
+ modifier = Modifier
+ .fillMaxSize()
+ .background(testBackground)
+ ) {
+ TitleCard(
+ onClick = {},
+ time = { actualTimeColor = LocalContentColor.current },
+ subtitle = { actualSubtitleColor = LocalContentColor.current },
+ title = { actualTitleColor = LocalContentColor.current },
+ modifier = Modifier.testTag(TEST_TAG)
+ )
+ }
+ }
+
+ assertEquals(expectedTimeColor, actualTimeColor)
+ assertEquals(expectedSubtitleColor, actualSubtitleColor)
+ assertEquals(expectedTitleColor, actualTitleColor)
+ }
+
@RequiresApi(Build.VERSION_CODES.O)
@Test
fun outlined_card_has_outlined_border_and_transparent() {
diff --git a/wear/compose/compose-material3/src/main/java/androidx/wear/compose/material3/Card.kt b/wear/compose/compose-material3/src/main/java/androidx/wear/compose/material3/Card.kt
index 34b481c..b2d01a4 100644
--- a/wear/compose/compose-material3/src/main/java/androidx/wear/compose/material3/Card.kt
+++ b/wear/compose/compose-material3/src/main/java/androidx/wear/compose/material3/Card.kt
@@ -20,14 +20,19 @@
import androidx.compose.foundation.Image
import androidx.compose.foundation.interaction.Interaction
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.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.runtime.Composable
import androidx.compose.runtime.CompositionLocalProvider
import androidx.compose.runtime.Immutable
import androidx.compose.runtime.remember
+import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
import androidx.compose.ui.graphics.Brush
import androidx.compose.ui.graphics.Color
@@ -233,33 +238,31 @@
}
/**
- * Opinionated Wear Material 3 [Card] that offers a specific 3 slot layout to show interactive
+ * Opinionated Wear Material 3 [Card] that offers a specific layout to show interactive
* information about an application, e.g. a message. TitleCards are designed for use within an
* application.
*
- * The first row of the layout has two slots. 1. a start aligned title. The title text is
- * expected to be a maximum of 2 lines of text.
- * 2. An optional time that the application activity has occurred shown at the
- * end of the row, expected to be an end aligned [Text] composable showing a time relevant to the
- * contents of the [Card].
+ * The [time], [subtitle] and [content] fields are optional,
+ * but it is expected that at least one of these is provided.
+ * The layout will vary according to which fields are supplied - see samples.
*
- * The rest of the [Card] contains the content which is expected to be [Text] or a contained
- * [Image].
+ * If the [content] is text it can be single or multiple line and is expected to be Top and Start
+ * aligned. When [subtitle] is used [content] shouldn't
+ * exceed 2 lines height. Overall the [title], [content] and [subtitle] text should be no more than
+ * 5 rows of text combined.
*
- * If the content is text it can be single or multiple line and is expected to be Top and Start
- * aligned and of type of [Typography.bodyMedium].
- *
- * Overall the [title] and [content] text should be no more than 5 rows of text combined.
- *
- * If more than one composable is provided in the content slot it is the responsibility of the
+ * If more than one composable is provided in the [content] slot it is the responsibility of the
* caller to determine how to layout the contents, e.g. provide either a row or a column.
*
- * Example of a [TitleCard]:
+ * Example of a [TitleCard] with [time], [title] and [content]:
* @sample androidx.wear.compose.material3.samples.TitleCardSample
*
- * Example of a [TitleCard] with image:
+ * Example of a [TitleCard] with a background image:
* @sample androidx.wear.compose.material3.samples.TitleCardWithImageSample
*
+ * Example of a [TitleCard] with [time], [title] and [subtitle]:
+ * @sample androidx.wear.compose.material3.samples.TitleCardWithSubtitleAndTimeSample
+ *
* Example of an outlined [TitleCard]:
* @sample androidx.wear.compose.material3.samples.OutlinedTitleCardSample
*
@@ -268,9 +271,14 @@
* guide.
*
* @param onClick Will be called when the user clicks the card
- * @param title A slot for displaying the title of the card, expected to be one or two lines of text
- * of [Typography.titleMedium]
+ * @param title A slot for displaying the title of the card, expected to be one or
+ * two lines of text.
* @param modifier Modifier to be applied to the card
+ * @param time An optional slot for displaying the time relevant to the contents of the card,
+ * expected to be a short piece of text. Depending on whether we have a [content]
+ * or not, can be placed at the end of the [title] line or above it.
+ * @param subtitle An optional slot for displaying the subtitle of the card, expected to be
+ * one line of text.
* @param enabled Controls the enabled state of the card. When false, this card will not
* be clickable and there will be no ripple effect on click. Wear cards do not have any specific
* elevation or alpha differences when not enabled - they are simply not clickable.
@@ -285,62 +293,87 @@
* [Interaction]s for this card. You can create and pass in your own remembered
* [MutableInteractionSource] if you want to observe [Interaction]s and customize the
* appearance / behavior of this card in different [Interaction]s.
- * @param time An optional slot for displaying the time relevant to the contents of the card,
- * expected to be a short piece of end aligned text.
- * @param content The main slot for a content of this card
+ * @param content The optional body content of the card. If not provided then title
+ * and subtitle are expected to be provided
*/
@Composable
fun TitleCard(
onClick: () -> Unit,
title: @Composable RowScope.() -> Unit,
modifier: Modifier = Modifier,
+ time: @Composable (() -> Unit)? = null,
+ subtitle: @Composable (ColumnScope.() -> Unit)? = null,
enabled: Boolean = true,
shape: Shape = MaterialTheme.shapes.large,
colors: CardColors = CardDefaults.cardColors(),
border: BorderStroke? = null,
contentPadding: PaddingValues = CardDefaults.ContentPadding,
interactionSource: MutableInteractionSource = remember { MutableInteractionSource() },
- time: @Composable (RowScope.() -> Unit)? = null,
- content: @Composable () -> Unit,
+ content: @Composable (() -> Unit)? = null,
) {
- androidx.wear.compose.materialcore.TitleCard(
+ val timeWithTextStyle: @Composable () -> Unit = {
+ time?.let {
+ CompositionLocalProvider(
+ values = arrayOf(
+ LocalContentColor provides colors.timeColor,
+ LocalTextStyle provides MaterialTheme.typography.labelSmall
+ ),
+ content = time
+ )
+ }
+ }
+
+ androidx.wear.compose.materialcore.Card(
onClick = onClick,
modifier = modifier,
enabled = enabled,
- shape = shape,
+ containerPainter = colors.containerPainter,
border = border,
contentPadding = contentPadding,
- containerPainter = colors.containerPainter,
interactionSource = interactionSource,
- title = {
- CompositionLocalProvider(
- LocalContentColor provides colors.titleColor,
- LocalTextStyle provides MaterialTheme.typography.titleMedium,
- ) {
- title()
+ role = null,
+ shape = shape
+ ) {
+ Column {
+ if (content == null) {
+ timeWithTextStyle()
+ Spacer(modifier = Modifier.height(4.dp))
}
- },
- time = {
- time?.let {
- Spacer(modifier = Modifier.weight(1.0f))
+ Row(
+ modifier = Modifier.fillMaxWidth(),
+ verticalAlignment = Alignment.CenterVertically
+ ) {
CompositionLocalProvider(
- LocalContentColor provides colors.timeColor,
- LocalTextStyle provides MaterialTheme.typography.labelSmall,
+ LocalContentColor provides colors.titleColor,
+ LocalTextStyle provides MaterialTheme.typography.titleMedium,
) {
- time()
+ title()
+ }
+ if (content != null) {
+ Spacer(modifier = Modifier.weight(1.0f))
+ timeWithTextStyle()
}
}
- },
- content = {
- CompositionLocalProvider(
- values = arrayOf(
- LocalContentColor provides colors.contentColor,
- LocalTextStyle provides MaterialTheme.typography.bodyLarge
- ),
- content = content
- )
+ content?.let {
+ CompositionLocalProvider(
+ values = arrayOf(
+ LocalContentColor provides colors.contentColor,
+ LocalTextStyle provides MaterialTheme.typography.bodyLarge
+ ),
+ content = content
+ )
+ }
+ subtitle?.let {
+ Spacer(modifier = Modifier.height(if (content != null) 2.dp else 4.dp))
+ CompositionLocalProvider(
+ LocalContentColor provides colors.subtitleColor,
+ LocalTextStyle provides MaterialTheme.typography.titleMedium
+ ) {
+ subtitle()
+ }
+ }
}
- )
+ }
}
/**
@@ -418,6 +451,7 @@
* @param appNameColor the color used for appName, only applies to [AppCard].
* @param timeColor the color used for time, applies to [AppCard] and [TitleCard].
* @param titleColor the color used for title, applies to [AppCard] and [TitleCard].
+ * @param subtitleColor the color used for subtitle, applies to [TitleCard].
*/
@Composable
fun cardColors(
@@ -426,12 +460,14 @@
appNameColor: Color = contentColor,
timeColor: Color = contentColor,
titleColor: Color = MaterialTheme.colorScheme.onSurface,
+ subtitleColor: Color = MaterialTheme.colorScheme.tertiary,
): CardColors = CardColors(
containerPainter = remember(containerColor) { ColorPainter(containerColor) },
contentColor = contentColor,
appNameColor = appNameColor,
timeColor = timeColor,
- titleColor = titleColor
+ titleColor = titleColor,
+ subtitleColor = subtitleColor
)
/**
@@ -442,6 +478,7 @@
* @param appNameColor the color used for appName, only applies to [AppCard].
* @param timeColor the color used for time, applies to [AppCard] and [TitleCard].
* @param titleColor the color used for title, applies to [AppCard] and [TitleCard].
+ * @param subtitleColor the color used for subtitle, applies to [TitleCard].
*/
@Composable
fun outlinedCardColors(
@@ -449,12 +486,14 @@
appNameColor: Color = contentColor,
timeColor: Color = contentColor,
titleColor: Color = MaterialTheme.colorScheme.onSurface,
+ subtitleColor: Color = MaterialTheme.colorScheme.tertiary
): CardColors = CardColors(
containerPainter = remember { ColorPainter(Color.Transparent) },
contentColor = contentColor,
appNameColor = appNameColor,
timeColor = timeColor,
- titleColor = titleColor
+ titleColor = titleColor,
+ subtitleColor = subtitleColor
)
/**
@@ -466,6 +505,7 @@
* @param appNameColor the color used for appName, only applies to [AppCard].
* @param timeColor the color used for time, applies to [AppCard] and [TitleCard].
* @param titleColor the color used for title, applies to [AppCard] and [TitleCard].
+ * @param subtitleColor the color used for subtitle, applies to [TitleCard].
*/
@Composable
fun imageCardColors(
@@ -474,12 +514,14 @@
appNameColor: Color = contentColor,
timeColor: Color = contentColor,
titleColor: Color = contentColor,
+ subtitleColor: Color = MaterialTheme.colorScheme.tertiary
): CardColors = CardColors(
containerPainter = containerPainter,
contentColor = contentColor,
appNameColor = appNameColor,
timeColor = timeColor,
- titleColor = titleColor
+ titleColor = titleColor,
+ subtitleColor = subtitleColor
)
/**
@@ -549,6 +591,7 @@
* @param appNameColor the color used for appName, only applies to [AppCard].
* @param timeColor the color used for time, applies to [AppCard] and [TitleCard].
* @param titleColor the color used for title, applies to [AppCard] and [TitleCard].
+ * @param subtitleColor the color used for subtitle, applies to [TitleCard].
*/
@Immutable
class CardColors(
@@ -557,6 +600,7 @@
val appNameColor: Color,
val timeColor: Color,
val titleColor: Color,
+ val subtitleColor: Color
) {
override fun equals(other: Any?): Boolean {
if (this === other) return true
@@ -567,6 +611,7 @@
if (appNameColor != other.appNameColor) return false
if (timeColor != other.timeColor) return false
if (titleColor != other.titleColor) return false
+ if (subtitleColor != other.subtitleColor) return false
return true
}
@@ -577,6 +622,7 @@
result = 31 * result + appNameColor.hashCode()
result = 31 * result + timeColor.hashCode()
result = 31 * result + titleColor.hashCode()
+ result = 31 * result + subtitleColor.hashCode()
return result
}
}
diff --git a/wear/compose/integration-tests/demos/src/main/java/androidx/wear/compose/integration/demos/PositionIndicatorDemos.kt b/wear/compose/integration-tests/demos/src/main/java/androidx/wear/compose/integration/demos/PositionIndicatorDemos.kt
index 43c5978..d740704 100644
--- a/wear/compose/integration-tests/demos/src/main/java/androidx/wear/compose/integration/demos/PositionIndicatorDemos.kt
+++ b/wear/compose/integration-tests/demos/src/main/java/androidx/wear/compose/integration/demos/PositionIndicatorDemos.kt
@@ -113,6 +113,7 @@
fun ControllablePositionIndicator() {
val position = remember { mutableFloatStateOf(0.2f) }
val size = remember { mutableFloatStateOf(0.5f) }
+ val visibility = remember { mutableStateOf(PositionIndicatorVisibility.Show) }
var alignment by remember { mutableIntStateOf(0) }
var reverseDirection by remember { mutableStateOf(false) }
var layoutDirection by remember { mutableStateOf(false) }
@@ -130,7 +131,7 @@
Scaffold(
positionIndicator = {
PositionIndicator(
- state = CustomPositionIndicatorState(position, size),
+ state = CustomPositionIndicatorState(position, size, visibility),
indicatorHeight = 76.dp,
indicatorWidth = 6.dp,
paddingHorizontal = 5.dp,
@@ -146,7 +147,7 @@
.padding(horizontal = 20.dp),
contentAlignment = Alignment.Center
) {
- Column {
+ Column(horizontalAlignment = Alignment.CenterHorizontally) {
Text("Position")
DefaultInlineSlider(
modifier = Modifier.height(40.dp),
@@ -179,6 +180,24 @@
)
}
}
+ Button(onClick = {
+ visibility.value = when (visibility.value) {
+ PositionIndicatorVisibility.Show ->
+ PositionIndicatorVisibility.AutoHide
+ PositionIndicatorVisibility.AutoHide ->
+ PositionIndicatorVisibility.Hide
+ else ->
+ PositionIndicatorVisibility.Show
+ }
+ }) {
+ Text(
+ when (visibility.value) {
+ PositionIndicatorVisibility.AutoHide -> "AutoHide"
+ PositionIndicatorVisibility.Show -> "Show"
+ else -> "Hide"
+ }
+ )
+ }
}
}
}
@@ -217,16 +236,20 @@
internal class CustomPositionIndicatorState(
private val position: State<Float>,
- private val size: State<Float>
+ private val size: State<Float>,
+ private val visibility: State<PositionIndicatorVisibility>
) : PositionIndicatorState {
override val positionFraction get() = position.value
override fun sizeFraction(scrollableContainerSizePx: Float) = size.value
- override fun visibility(scrollableContainerSizePx: Float) = PositionIndicatorVisibility.Show
+ override fun visibility(scrollableContainerSizePx: Float) = visibility.value
override fun equals(other: Any?) =
other is CustomPositionIndicatorState &&
position == other.position &&
- size == other.size
+ size == other.size &&
+ visibility == other.visibility
- override fun hashCode(): Int = position.hashCode() + 31 * size.hashCode()
+ override fun hashCode(): Int = position.hashCode() +
+ 31 * size.hashCode() +
+ 31 * visibility.hashCode()
}
diff --git a/wear/compose/integration-tests/macrobenchmark-target/src/main/java/androidx/wear/compose/integration/macrobenchmark/target/PositionIndicatorActivity.kt b/wear/compose/integration-tests/macrobenchmark-target/src/main/java/androidx/wear/compose/integration/macrobenchmark/target/PositionIndicatorActivity.kt
index 5f979de..53658b0 100644
--- a/wear/compose/integration-tests/macrobenchmark-target/src/main/java/androidx/wear/compose/integration/macrobenchmark/target/PositionIndicatorActivity.kt
+++ b/wear/compose/integration-tests/macrobenchmark-target/src/main/java/androidx/wear/compose/integration/macrobenchmark/target/PositionIndicatorActivity.kt
@@ -19,27 +19,25 @@
import android.os.Bundle
import androidx.activity.ComponentActivity
import androidx.activity.compose.setContent
+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.fillMaxHeight
import androidx.compose.foundation.layout.fillMaxSize
-import androidx.compose.foundation.layout.fillMaxWidth
-import androidx.compose.runtime.getValue
+import androidx.compose.foundation.layout.size
+import androidx.compose.runtime.State
import androidx.compose.runtime.mutableFloatStateOf
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.semantics.contentDescription
import androidx.compose.ui.semantics.semantics
import androidx.compose.ui.unit.dp
-import androidx.wear.compose.material.Button
import androidx.wear.compose.material.PositionIndicator
import androidx.wear.compose.material.PositionIndicatorState
import androidx.wear.compose.material.PositionIndicatorVisibility
import androidx.wear.compose.material.Scaffold
-import androidx.wear.compose.material.Text
class PositionIndicatorActivity : ComponentActivity() {
@@ -47,18 +45,18 @@
super.onCreate(savedInstanceState)
setContent {
- var fraction by remember {
+ val fraction = remember {
mutableFloatStateOf(0f)
}
- var sizeFraction by remember {
+ val sizeFraction = remember {
mutableFloatStateOf(.25f)
}
- var visibility by remember {
+ val visibility = remember {
mutableStateOf(PositionIndicatorVisibility.Show)
}
- val pIState = CustomState(fraction, sizeFraction, visibility)
+ val pIState = remember { CustomState(fraction, sizeFraction, visibility) }
Scaffold(modifier = Modifier.fillMaxSize(), positionIndicator = {
PositionIndicator(
@@ -69,68 +67,66 @@
)
}) {
Column(
- modifier = Modifier
- .fillMaxHeight()
- .fillMaxWidth(.8f),
verticalArrangement = Arrangement.Center,
horizontalAlignment = Alignment.CenterHorizontally
) {
- Button(
- modifier = Modifier.semantics {
- contentDescription = CHANGE_VISIBILITY
- }, onClick = {
- visibility = when (visibility) {
- PositionIndicatorVisibility.AutoHide ->
- PositionIndicatorVisibility.Hide
- PositionIndicatorVisibility.Hide ->
- PositionIndicatorVisibility.Show
+ Box(modifier = Modifier
+ .size(30.dp)
+ .clickable {
+ visibility.value = when (visibility.value) {
PositionIndicatorVisibility.Show ->
PositionIndicatorVisibility.AutoHide
+
+ PositionIndicatorVisibility.AutoHide ->
+ PositionIndicatorVisibility.Hide
+
+ PositionIndicatorVisibility.Hide ->
+ PositionIndicatorVisibility.Show
+
else -> throw IllegalArgumentException("Invalid visibility type")
}
- }) {
- val text = when (visibility) {
- PositionIndicatorVisibility.Show -> "Show"
- PositionIndicatorVisibility.AutoHide -> "Auto Hide"
- else -> "Hide"
}
- Text(text = text)
- }
+ .semantics {
+ contentDescription = CHANGE_VISIBILITY
+ }
+ )
- Button(
- modifier = Modifier.semantics {
+ Box(modifier = Modifier
+ .size(30.dp)
+ .clickable {
+ fraction.floatValue += 0.05f
+ }
+ .semantics {
contentDescription = INCREASE_POSITION
- }, onClick = {
- fraction += 0.05f
- }) {
- Text(text = "Increase position fraction")
- }
+ }
+ )
- Button(
- modifier = Modifier.semantics {
+ Box(modifier = Modifier
+ .size(30.dp)
+ .clickable {
+ fraction.floatValue -= 0.05f
+ }
+ .semantics {
contentDescription = DECREASE_POSITION
- }, onClick = {
- fraction -= 0.05f
- }) {
- Text(text = "Decrease position fraction")
- }
+ }
+ )
}
}
}
}
private class CustomState(
- private val fraction: Float,
- private val sizeFraction: Float,
- private val visibility: PositionIndicatorVisibility
+ private val fraction: State<Float>,
+ private val sizeFraction: State<Float>,
+ private val visibility: State<PositionIndicatorVisibility>
) : PositionIndicatorState {
override val positionFraction: Float
- get() = fraction
+ get() = fraction.value
- override fun sizeFraction(scrollableContainerSizePx: Float): Float = sizeFraction
+ override fun sizeFraction(scrollableContainerSizePx: Float): Float = sizeFraction.value
override fun visibility(scrollableContainerSizePx: Float): PositionIndicatorVisibility =
- visibility
+ visibility.value
}
}
diff --git a/wear/compose/integration-tests/macrobenchmark/src/main/java/androidx/wear/compose/integration/macrobenchmark/PositionIndicatorBenchmark.kt b/wear/compose/integration-tests/macrobenchmark/src/main/java/androidx/wear/compose/integration/macrobenchmark/PositionIndicatorBenchmark.kt
index 70e4175..1f10fd5 100644
--- a/wear/compose/integration-tests/macrobenchmark/src/main/java/androidx/wear/compose/integration/macrobenchmark/PositionIndicatorBenchmark.kt
+++ b/wear/compose/integration-tests/macrobenchmark/src/main/java/androidx/wear/compose/integration/macrobenchmark/PositionIndicatorBenchmark.kt
@@ -63,27 +63,47 @@
startActivityAndWait(intent)
}
) {
- val buttonShow = device.findObject(By.desc(CHANGE_VISIBILITY))
- val buttonIncrease = device.findObject(By.desc(INCREASE_POSITION))
- val buttonDecrease = device.findObject(By.desc(DECREASE_POSITION))
+ val buttonChangeVisibility = device.findObject(By.desc(CHANGE_VISIBILITY))
- // Setting a gesture margin is important otherwise gesture nav is triggered.
- repeat(10) {
- buttonIncrease?.let { it.click() }
- device.waitForIdle()
- sleep(500)
- }
+ // By default indicator visibility is Show
+ // Increase and decrease indicator 10 times 1 direction and 10 times another
+ repeatIncrementAndDecrement(10, 200)
- repeat(10) {
- buttonDecrease?.let { it.click() }
- device.waitForIdle()
- sleep(500)
- }
+ // Switch from Show to AutoHide
+ buttonChangeVisibility?.click()
- repeat(4) {
- buttonShow?.let { it.click() }
- sleep(3000)
- }
+ // Increase and decrease indicator with delay shorter than hiding delay
+ repeatIncrementAndDecrement(10, 200)
+
+ // Increase and decrease indicator with delay longer than hiding delay
+ repeatIncrementAndDecrement(3, 2500)
+
+ // Switch from Autohide to Hide
+ buttonChangeVisibility?.click()
+
+ // Increase and decrease indicator 10 times 1 direction and 10 times another
+ repeatIncrementAndDecrement(10, 200)
+
+ // Switch from Hide to Show
+ buttonChangeVisibility?.click()
+ sleep(100)
+ }
+ }
+
+ private fun repeatIncrementAndDecrement(times: Int, delayBetweenClicks: Long) {
+ val buttonIncrease = device.findObject(By.desc(INCREASE_POSITION))
+ val buttonDecrease = device.findObject(By.desc(DECREASE_POSITION))
+
+ repeat(times) {
+ buttonIncrease?.click()
+ device.waitForIdle()
+ sleep(delayBetweenClicks)
+ }
+
+ repeat(times) {
+ buttonDecrease?.click()
+ device.waitForIdle()
+ sleep(delayBetweenClicks)
}
}
diff --git a/wear/compose/integration-tests/navigation/build.gradle b/wear/compose/integration-tests/navigation/build.gradle
index 6d3c77c..0398bc3 100644
--- a/wear/compose/integration-tests/navigation/build.gradle
+++ b/wear/compose/integration-tests/navigation/build.gradle
@@ -58,5 +58,6 @@
// but it doesn't work in androidx.
// See aosp/1804059
androidTestImplementation "androidx.lifecycle:lifecycle-common-java8:2.4.0"
- androidTestImplementation libs.androidx.annotation
+ // Uses project dependency to match collections/compose-runtime
+ androidTestImplementation project(":annotation:annotation")
}
\ No newline at end of file
diff --git a/wear/protolayout/protolayout-expression/api/current.txt b/wear/protolayout/protolayout-expression/api/current.txt
index c43dbbb..365dd9b0 100644
--- a/wear/protolayout/protolayout-expression/api/current.txt
+++ b/wear/protolayout/protolayout-expression/api/current.txt
@@ -296,6 +296,16 @@
method public static androidx.wear.protolayout.expression.DynamicDataBuilders.DynamicDataValue<androidx.wear.protolayout.expression.DynamicBuilders.DynamicFloat!> fromFloat(float);
method public static androidx.wear.protolayout.expression.DynamicDataBuilders.DynamicDataValue<androidx.wear.protolayout.expression.DynamicBuilders.DynamicInt32!> fromInt(int);
method public static androidx.wear.protolayout.expression.DynamicDataBuilders.DynamicDataValue<androidx.wear.protolayout.expression.DynamicBuilders.DynamicString!> fromString(String);
+ method public default boolean getBoolValue();
+ method @ColorInt public default int getColorValue();
+ method public default float getFloatValue();
+ method public default int getIntValue();
+ method public default String getStringValue();
+ method public default boolean hasBoolValue();
+ method public default boolean hasColorValue();
+ method public default boolean hasFloatValue();
+ method public default boolean hasIntValue();
+ method public default boolean hasStringValue();
method public default byte[] toDynamicDataValueByteArray();
method public default int toDynamicDataValueByteArray(byte[]);
method public default int toDynamicDataValueByteArray(byte[], int, int);
diff --git a/wear/protolayout/protolayout-expression/api/restricted_current.txt b/wear/protolayout/protolayout-expression/api/restricted_current.txt
index c43dbbb..365dd9b0 100644
--- a/wear/protolayout/protolayout-expression/api/restricted_current.txt
+++ b/wear/protolayout/protolayout-expression/api/restricted_current.txt
@@ -296,6 +296,16 @@
method public static androidx.wear.protolayout.expression.DynamicDataBuilders.DynamicDataValue<androidx.wear.protolayout.expression.DynamicBuilders.DynamicFloat!> fromFloat(float);
method public static androidx.wear.protolayout.expression.DynamicDataBuilders.DynamicDataValue<androidx.wear.protolayout.expression.DynamicBuilders.DynamicInt32!> fromInt(int);
method public static androidx.wear.protolayout.expression.DynamicDataBuilders.DynamicDataValue<androidx.wear.protolayout.expression.DynamicBuilders.DynamicString!> fromString(String);
+ method public default boolean getBoolValue();
+ method @ColorInt public default int getColorValue();
+ method public default float getFloatValue();
+ method public default int getIntValue();
+ method public default String getStringValue();
+ method public default boolean hasBoolValue();
+ method public default boolean hasColorValue();
+ method public default boolean hasFloatValue();
+ method public default boolean hasIntValue();
+ method public default boolean hasStringValue();
method public default byte[] toDynamicDataValueByteArray();
method public default int toDynamicDataValueByteArray(byte[]);
method public default int toDynamicDataValueByteArray(byte[], int, int);
diff --git a/wear/protolayout/protolayout-expression/src/main/java/androidx/wear/protolayout/expression/DynamicDataBuilders.java b/wear/protolayout/protolayout-expression/src/main/java/androidx/wear/protolayout/expression/DynamicDataBuilders.java
index b864d37..c464a78 100644
--- a/wear/protolayout/protolayout-expression/src/main/java/androidx/wear/protolayout/expression/DynamicDataBuilders.java
+++ b/wear/protolayout/protolayout-expression/src/main/java/androidx/wear/protolayout/expression/DynamicDataBuilders.java
@@ -155,6 +155,96 @@
return new FixedString.Builder().setValue(constant).build();
}
+ /**
+ * Returns true if the {@link DynamicDataValue} contains an int value. Otherwise returns
+ * false.
+ */
+ default boolean hasIntValue(){
+ return false;
+ }
+
+ /**
+ * Returns the int value stored in this {@link DynamicDataValue}.
+ *
+ * @throws IllegalStateException if the {@link DynamicDataValue} doesn't contain an int
+ * value.
+ */
+ default int getIntValue() {
+ throw new IllegalStateException("Type mismatch.");
+ }
+
+ /**
+ * Returns true if the {@link DynamicDataValue} contains a color value. Otherwise returns
+ * false.
+ */
+ default boolean hasColorValue(){
+ return false;
+ }
+
+ /**
+ * Returns the color value stored in this {@link DynamicDataValue}.
+ *
+ * @throws IllegalStateException if the {@link DynamicDataValue} doesn't contain a color
+ * value.
+ */
+ default @ColorInt int getColorValue() {
+ throw new IllegalStateException("Type mismatch.");
+ }
+
+ /**
+ * Returns true if the {@link DynamicDataValue} contains a boolean value. Otherwise returns
+ * false.
+ */
+ default boolean hasBoolValue(){
+ return false;
+ }
+
+ /**
+ * Returns the boolean value stored in this {@link DynamicDataValue}.
+ *
+ * @throws IllegalStateException if the {@link DynamicDataValue} doesn't contain a boolean
+ * value.
+ */
+ default boolean getBoolValue() {
+ throw new IllegalStateException("Type mismatch.");
+ }
+
+ /**
+ * Returns true if the {@link DynamicDataValue} contains a float value. Otherwise returns
+ * false.
+ */
+ default boolean hasFloatValue(){
+ return false;
+ }
+
+ /**
+ * Returns the float value stored in this {@link DynamicDataValue}.
+ *
+ * @throws IllegalStateException if the {@link DynamicDataValue} doesn't contain a float
+ * value.
+ */
+ default float getFloatValue() {
+ throw new IllegalStateException("Type mismatch.");
+ }
+
+ /**
+ * Returns true if the {@link DynamicDataValue} contains a String value. Otherwise returns
+ * false.
+ */
+ default boolean hasStringValue(){
+ return false;
+ }
+
+ /**
+ * Returns the String value stored in this {@link DynamicDataValue}.
+ *
+ * @throws IllegalStateException if the {@link DynamicDataValue} doesn't contain a String
+ * value.
+ */
+ default @NonNull String getStringValue() {
+ throw new IllegalStateException("Type mismatch.");
+ }
+
/** Get the fingerprint for this object or null if unknown. */
@RestrictTo(Scope.LIBRARY_GROUP)
@Nullable
diff --git a/wear/protolayout/protolayout-expression/src/main/java/androidx/wear/protolayout/expression/FixedValueBuilders.java b/wear/protolayout/protolayout-expression/src/main/java/androidx/wear/protolayout/expression/FixedValueBuilders.java
index b490276..054c542 100644
--- a/wear/protolayout/protolayout-expression/src/main/java/androidx/wear/protolayout/expression/FixedValueBuilders.java
+++ b/wear/protolayout/protolayout-expression/src/main/java/androidx/wear/protolayout/expression/FixedValueBuilders.java
@@ -106,6 +106,26 @@
return "FixedInt32{" + "value=" + getValue() + "}";
}
+ /**
+ * Returns true if the {@link DynamicDataBuilders.DynamicDataValue} contains an int
+ * value. Otherwise returns false.
+ */
+ @Override
+ public boolean hasIntValue(){
+ return true;
+ }
+
+ /**
+ * Returns the int value stored in this {@link DynamicDataBuilders.DynamicDataValue }.
+ *
+ * @throws IllegalStateException if the {@link DynamicDataBuilders.DynamicDataValue }
+ * doesn't contain an int value.
+ */
+ @Override
+ public int getIntValue() {
+ return mImpl.getValue();
+ }
+
/** Builder for {@link FixedInt32}. */
public static final class Builder
implements DynamicBuilders.DynamicInt32.Builder,
@@ -208,6 +228,26 @@
return "FixedString{" + "value=" + getValue() + "}";
}
+ /**
+ * Returns true if the {@link DynamicDataBuilders.DynamicDataValue} contains a String
+ * value. Otherwise returns false.
+ */
+ @Override
+ public boolean hasStringValue(){
+ return true;
+ }
+
+ /**
+ * Returns the String value stored in this {@link DynamicDataBuilders.DynamicDataValue }.
+ *
+ * @throws IllegalStateException if the {@link DynamicDataBuilders.DynamicDataValue }
+ * doesn't contain a String value.
+ */
+ @Override
+ public @NonNull String getStringValue() {
+ return mImpl.getValue();
+ }
+
/** Builder for {@link FixedString}. */
public static final class Builder
implements DynamicBuilders.DynamicString.Builder,
@@ -313,6 +353,26 @@
return "FixedFloat{" + "value=" + getValue() + "}";
}
+ /**
+ * Returns true if the {@link DynamicDataBuilders.DynamicDataValue} contains a float
+ * value. Otherwise returns false.
+ */
+ @Override
+ public boolean hasFloatValue(){
+ return true;
+ }
+
+ /**
+ * Returns the float value stored in this {@link DynamicDataBuilders.DynamicDataValue }.
+ *
+ * @throws IllegalStateException if the {@link DynamicDataBuilders.DynamicDataValue }
+ * doesn't contain a float value.
+ */
+ @Override
+ public float getFloatValue() {
+ return mImpl.getValue();
+ }
+
/** Builder for {@link FixedFloat}. */
public static final class Builder
implements DynamicBuilders.DynamicFloat.Builder,
@@ -416,6 +476,26 @@
return "FixedBool{" + "value=" + getValue() + "}";
}
+ /**
+ * Returns true if the {@link DynamicDataBuilders.DynamicDataValue} contains a boolean
+ * value. Otherwise returns false.
+ */
+ @Override
+ public boolean hasBoolValue(){
+ return true;
+ }
+
+ /**
+ * Returns the boolean value stored in this {@link DynamicDataBuilders.DynamicDataValue }.
+ *
+ * @throws IllegalStateException if the {@link DynamicDataBuilders.DynamicDataValue }
+ * doesn't contain a boolean value.
+ */
+ @Override
+ public boolean getBoolValue() {
+ return mImpl.getValue();
+ }
+
/** Builder for {@link FixedBool}. */
public static final class Builder
implements DynamicBuilders.DynamicBool.Builder,
@@ -519,6 +599,26 @@
return "FixedColor{" + "argb=" + getArgb() + "}";
}
+ /**
+ * Returns true if the {@link DynamicDataBuilders.DynamicDataValue} contains a color
+ * value. Otherwise returns false.
+ */
+ @Override
+ public boolean hasColorValue(){
+ return true;
+ }
+
+ /**
+ * Returns the color value stored in this {@link DynamicDataBuilders.DynamicDataValue }.
+ *
+ * @throws IllegalStateException if the {@link DynamicDataBuilders.DynamicDataValue }
+ * doesn't contain a color value.
+ */
+ @Override
+ public @ColorInt int getColorValue() {
+ return mImpl.getArgb();
+ }
+
/** Builder for {@link FixedColor}. */
public static final class Builder
implements DynamicBuilders.DynamicColor.Builder,
diff --git a/wear/protolayout/protolayout-expression/src/test/java/androidx/wear/protolayout/expression/DynamicDataValueTest.java b/wear/protolayout/protolayout-expression/src/test/java/androidx/wear/protolayout/expression/DynamicDataValueTest.java
index a05bb10..5347d81 100644
--- a/wear/protolayout/protolayout-expression/src/test/java/androidx/wear/protolayout/expression/DynamicDataValueTest.java
+++ b/wear/protolayout/protolayout-expression/src/test/java/androidx/wear/protolayout/expression/DynamicDataValueTest.java
@@ -18,6 +18,8 @@
import static com.google.common.truth.Truth.assertThat;
+import static org.junit.Assert.assertThrows;
+
import androidx.wear.protolayout.expression.DynamicBuilders.DynamicBool;
import androidx.wear.protolayout.expression.DynamicBuilders.DynamicColor;
import androidx.wear.protolayout.expression.DynamicBuilders.DynamicFloat;
@@ -35,41 +37,68 @@
public void boolDynamicDataValue() {
DynamicDataValue<DynamicBool> boolDynamicDataValue = DynamicDataValue.fromBool(true);
+ assertThat(boolDynamicDataValue.hasBoolValue()).isTrue();
+ assertThat(boolDynamicDataValue.getBoolValue()).isTrue();
assertThat(boolDynamicDataValue.toDynamicDataValueProto().getBoolVal().getValue()).isTrue();
+
+ assertThat(boolDynamicDataValue.hasColorValue()).isFalse();
+ assertThrows(IllegalStateException.class, boolDynamicDataValue::getColorValue);
}
@Test
public void colorDynamicDataValue() {
- DynamicDataValue<DynamicColor> colorDynamicDataValue =
- DynamicDataValue.fromColor(0xff00ff00);
+ int c = 0xff00ff00;
+ DynamicDataValue<DynamicColor> colorDynamicDataValue = DynamicDataValue.fromColor(c);
+ assertThat(colorDynamicDataValue.hasColorValue()).isTrue();
+ assertThat(colorDynamicDataValue.getColorValue()).isEqualTo(c);
assertThat(colorDynamicDataValue.toDynamicDataValueProto().getColorVal().getArgb())
- .isEqualTo(0xff00ff00);
+ .isEqualTo(c);
+
+ assertThat(colorDynamicDataValue.hasFloatValue()).isFalse();
+ assertThrows(IllegalStateException.class, colorDynamicDataValue::getFloatValue);
}
@Test
public void floatDynamicDataValue() {
- DynamicDataValue<DynamicFloat> floatDynamicDataValue = DynamicDataValue.fromFloat(42.42f);
+ float f = 42.42f;
+ DynamicDataValue<DynamicFloat> floatDynamicDataValue = DynamicDataValue.fromFloat(f);
+ assertThat(floatDynamicDataValue.hasFloatValue()).isTrue();
+ assertThat(floatDynamicDataValue.getFloatValue()).isEqualTo(f);
assertThat(floatDynamicDataValue.toDynamicDataValueProto().getFloatVal().getValue())
.isWithin(0.0001f)
- .of(42.42f);
+ .of(f);
+
+ assertThat(floatDynamicDataValue.hasIntValue()).isFalse();
+ assertThrows(IllegalStateException.class, floatDynamicDataValue::getIntValue);
}
@Test
public void intDynamicDataValue() {
- DynamicDataValue<DynamicInt32> intDynamicDataValue = DynamicDataValue.fromInt(42);
+ int i = 42;
+ DynamicDataValue<DynamicInt32> intDynamicDataValue = DynamicDataValue.fromInt(i);
+ assertThat(intDynamicDataValue.hasIntValue()).isTrue();
+ assertThat(intDynamicDataValue.getIntValue()).isEqualTo(i);
assertThat(intDynamicDataValue.toDynamicDataValueProto().getInt32Val().getValue())
- .isEqualTo(42);
+ .isEqualTo(i);
+
+ assertThat(intDynamicDataValue.hasStringValue()).isFalse();
+ assertThrows(IllegalStateException.class, intDynamicDataValue::getStringValue);
}
@Test
public void stringDynamicDataValue() {
- DynamicDataValue<DynamicString> stringDynamicDataValue =
- DynamicDataValue.fromString("constant-value");
+ String s = "constant-value";
+ DynamicDataValue<DynamicString> stringDynamicDataValue = DynamicDataValue.fromString(s);
+ assertThat(stringDynamicDataValue.hasStringValue()).isTrue();
+ assertThat(stringDynamicDataValue.getStringValue()).isEqualTo(s);
assertThat(stringDynamicDataValue.toDynamicDataValueProto().getStringVal().getValue())
- .isEqualTo("constant-value");
+ .isEqualTo(s);
+
+ assertThat(stringDynamicDataValue.hasBoolValue()).isFalse();
+ assertThrows(IllegalStateException.class, stringDynamicDataValue::getBoolValue);
}
}
diff --git a/webkit/integration-tests/instrumentation/src/androidTest/java/androidx/webkit/WebSettingsCompatUserAgentMetadataTest.java b/webkit/integration-tests/instrumentation/src/androidTest/java/androidx/webkit/WebSettingsCompatUserAgentMetadataTest.java
new file mode 100644
index 0000000..8ce6e03
--- /dev/null
+++ b/webkit/integration-tests/instrumentation/src/androidTest/java/androidx/webkit/WebSettingsCompatUserAgentMetadataTest.java
@@ -0,0 +1,195 @@
+/*
+ * Copyright 2023 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 androidx.webkit;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertFalse;
+
+
+import android.os.Build;
+import android.webkit.WebSettings;
+
+import androidx.test.ext.junit.runners.AndroidJUnit4;
+import androidx.test.filters.SdkSuppress;
+import androidx.test.filters.SmallTest;
+
+import org.junit.After;
+import org.junit.Assert;
+import org.junit.Before;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.List;
+
+/**
+ * TODO(b/294183509): Add user-agent client hints HTTP header verification tests when unhide the
+ * override user-agent metadata APIs.
+ */
+@SmallTest
+@RunWith(AndroidJUnit4.class)
+@SdkSuppress(minSdkVersion = Build.VERSION_CODES.LOLLIPOP)
+public class WebSettingsCompatUserAgentMetadataTest {
+ private WebViewOnUiThread mWebViewOnUiThread;
+
+ @Before
+ public void setUp() throws Exception {
+ mWebViewOnUiThread = new androidx.webkit.WebViewOnUiThread();
+ }
+
+ @After
+ public void tearDown() {
+ if (mWebViewOnUiThread != null) {
+ mWebViewOnUiThread.cleanUp();
+ }
+ }
+
+ @Test
+ public void testSetUserAgentMetadataDefault() throws Throwable {
+ WebkitUtils.checkFeature(WebViewFeature.USER_AGENT_METADATA);
+
+ WebSettings settings = mWebViewOnUiThread.getSettings();
+ UserAgentMetadata defaultSetting = WebSettingsCompat.getUserAgentMetadata(
+ settings);
+ // Check brand version list.
+ List<String> brands = new ArrayList<>();
+ Assert.assertNotNull(defaultSetting.getBrandVersionList());
+ for (UserAgentMetadata.BrandVersion bv : defaultSetting.getBrandVersionList()) {
+ brands.add(bv.getBrand());
+ }
+ Assert.assertTrue("The default brand should contains Android WebView.",
+ brands.contains("Android WebView"));
+ // Check platform, bitness and wow64.
+ assertEquals("The default platform is Android.", "Android",
+ defaultSetting.getPlatform());
+ assertEquals("The default bitness is 0.", UserAgentMetadata.BITNESS_DEFAULT,
+ defaultSetting.getBitness());
+ assertFalse("The default wow64 is false.", defaultSetting.isWow64());
+ }
+
+ @Test
+ public void testSetUserAgentMetadataFullOverrides() throws Throwable {
+ WebkitUtils.checkFeature(WebViewFeature.USER_AGENT_METADATA);
+
+ WebSettings settings = mWebViewOnUiThread.getSettings();
+ // Overrides user-agent metadata.
+ UserAgentMetadata overrideSetting = new UserAgentMetadata.Builder()
+ .setBrandVersionList(Collections.singletonList(
+ new UserAgentMetadata.BrandVersion(
+ "myBrand", "1", "1.1.1.1")))
+ .setFullVersion("1.1.1.1")
+ .setPlatform("myPlatform").setPlatformVersion("2.2.2.2").setArchitecture("myArch")
+ .setMobile(true).setModel("myModel").setBitness(32)
+ .setWow64(false).setFormFactor("myFormFactor").build();
+
+ WebSettingsCompat.setUserAgentMetadata(settings, overrideSetting);
+ assertEquals(
+ "After override set the user-agent metadata, it should be returned",
+ overrideSetting, WebSettingsCompat.getUserAgentMetadata(
+ settings));
+ }
+
+ @Test
+ public void testSetUserAgentMetadataPartialOverride() throws Throwable {
+ WebkitUtils.checkFeature(WebViewFeature.USER_AGENT_METADATA);
+
+ WebSettings settings = mWebViewOnUiThread.getSettings();
+ // Overrides without setting user-agent metadata platform and bitness.
+ UserAgentMetadata overrideSetting = new UserAgentMetadata.Builder()
+ .setBrandVersionList(Collections.singletonList(
+ new UserAgentMetadata.BrandVersion(
+ "myBrand", "1", "1.1.1.1")))
+ .setFullVersion("1.1.1.1")
+ .setPlatformVersion("2.2.2.2").setArchitecture("myArch").setMobile(true)
+ .setModel("myModel").setWow64(false).setFormFactor("myFormFactor").build();
+
+ WebSettingsCompat.setUserAgentMetadata(settings, overrideSetting);
+ UserAgentMetadata actualSetting = WebSettingsCompat.getUserAgentMetadata(
+ settings);
+ assertEquals("Platform should reset to system default if no overrides.",
+ "Android", actualSetting.getPlatform());
+ assertEquals("Bitness should reset to system default if no overrides.",
+ UserAgentMetadata.BITNESS_DEFAULT, actualSetting.getBitness());
+ assertEquals("FormFactor should be overridden value.",
+ "myFormFactor", WebSettingsCompat.getUserAgentMetadata(
+ settings).getFormFactor());
+ }
+
+ @Test
+ public void testSetUserAgentMetadataBlankBrandVersion() throws Throwable {
+ WebkitUtils.checkFeature(WebViewFeature.USER_AGENT_METADATA);
+
+ try {
+ WebSettings settings = mWebViewOnUiThread.getSettings();
+ UserAgentMetadata uaMetadata = new UserAgentMetadata.Builder()
+ .setBrandVersionList(Collections.singletonList(
+ new UserAgentMetadata.BrandVersion(
+ "", "", ""))).build();
+ WebSettingsCompat.setUserAgentMetadata(settings, uaMetadata);
+ Assert.fail("Should have thrown exception.");
+ } catch (IllegalArgumentException e) {
+ Assert.assertEquals("Brand name, major version and full version should not "
+ + "be blank.", e.getMessage());
+ }
+ }
+
+ @Test
+ public void testSetUserAgentMetadataEmptyBrandVersionList() throws Throwable {
+ WebkitUtils.checkFeature(WebViewFeature.USER_AGENT_METADATA);
+
+ try {
+ WebSettings settings = mWebViewOnUiThread.getSettings();
+ UserAgentMetadata uaMetadata = new UserAgentMetadata.Builder()
+ .setBrandVersionList(new ArrayList<>()).build();
+ WebSettingsCompat.setUserAgentMetadata(settings, uaMetadata);
+ Assert.fail("Should have thrown exception.");
+ } catch (IllegalArgumentException e) {
+ Assert.assertEquals("Brand version list should not be empty.", e.getMessage());
+ }
+ }
+
+ @Test
+ public void testSetUserAgentMetadataBlankFullVersion() throws Throwable {
+ WebkitUtils.checkFeature(WebViewFeature.USER_AGENT_METADATA);
+
+ try {
+ WebSettings settings = mWebViewOnUiThread.getSettings();
+ UserAgentMetadata uaMetadata = new UserAgentMetadata.Builder()
+ .setFullVersion(" ").build();
+ WebSettingsCompat.setUserAgentMetadata(settings, uaMetadata);
+ Assert.fail("Should have thrown exception.");
+ } catch (IllegalArgumentException e) {
+ Assert.assertEquals("Full version should not be blank.", e.getMessage());
+ }
+ }
+
+ @Test
+ public void testSetUserAgentMetadataBlankPlatform() throws Throwable {
+ WebkitUtils.checkFeature(WebViewFeature.USER_AGENT_METADATA);
+
+ try {
+ WebSettings settings = mWebViewOnUiThread.getSettings();
+ UserAgentMetadata uaMetadata = new UserAgentMetadata.Builder()
+ .setPlatform(" ").build();
+ WebSettingsCompat.setUserAgentMetadata(settings, uaMetadata);
+ Assert.fail("Should have thrown exception.");
+ } catch (IllegalArgumentException e) {
+ Assert.assertEquals("Platform should not be blank.", e.getMessage());
+ }
+ }
+}
diff --git a/webkit/webkit/src/main/java/androidx/webkit/Profile.java b/webkit/webkit/src/main/java/androidx/webkit/Profile.java
new file mode 100644
index 0000000..a0aed90
--- /dev/null
+++ b/webkit/webkit/src/main/java/androidx/webkit/Profile.java
@@ -0,0 +1,105 @@
+/*
+ * Copyright 2023 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 androidx.webkit;
+
+import android.webkit.CookieManager;
+import android.webkit.GeolocationPermissions;
+import android.webkit.ServiceWorkerController;
+import android.webkit.WebStorage;
+
+import androidx.annotation.NonNull;
+import androidx.annotation.RequiresFeature;
+import androidx.annotation.RestrictTo;
+
+/**
+ * A Profile represents one browsing session for WebView.
+ * <p> You can have multiple profiles and each profile holds its own set of data. The creation
+ * and deletion of the Profile is being managed by {@link ProfileStore}.
+ *
+ * @hide
+ *
+ */
+@RestrictTo(RestrictTo.Scope.LIBRARY_GROUP)
+public interface Profile {
+
+ /**
+ * Represents the name of the default profile which can't be deleted.
+ */
+ String DEFAULT_PROFILE_NAME = "Default";
+
+ /**
+ * @return the name of this Profile which was used to create the Profile from
+ * ProfileStore create methods.
+ */
+ @NonNull
+ @RequiresFeature(name = WebViewFeature.MULTI_PROFILE,
+ enforcement = "androidx.webkit.WebViewFeature#isFeatureSupported")
+ String getName();
+
+ /**
+ * Returns the profile's cookie manager.
+ * <p>
+ * Can be called from any thread. It is recommended to not hold onto references of this.
+ *
+ * @throws IllegalStateException if the profile has been deleted by
+ * {@link ProfileStore#deleteProfile(String)}}.
+ */
+ @NonNull
+ @RequiresFeature(name = WebViewFeature.MULTI_PROFILE,
+ enforcement = "androidx.webkit.WebViewFeature#isFeatureSupported")
+ CookieManager getCookieManager() throws IllegalStateException;
+
+ /**
+ * Returns the profile's web storage.
+ * <p>
+ * Can be called from any thread. It is recommended to not hold onto references of this.
+ *
+ * @throws IllegalStateException if the profile has been deleted by
+ * {@link ProfileStore#deleteProfile(String)}}.
+ */
+ @NonNull
+ @RequiresFeature(name = WebViewFeature.MULTI_PROFILE,
+ enforcement = "androidx.webkit.WebViewFeature#isFeatureSupported")
+ WebStorage getWebStorage() throws IllegalStateException;
+
+ /**
+ * Returns the geolocation permissions of the profile.
+ * <p>
+ * Can be called from any thread. It is recommended to not hold onto references of this.
+ *
+ * @throws IllegalStateException if the profile has been deleted by
+ * {@link ProfileStore#deleteProfile(String)}}.
+ */
+ @NonNull
+ @RequiresFeature(name = WebViewFeature.MULTI_PROFILE,
+ enforcement = "androidx.webkit.WebViewFeature#isFeatureSupported")
+ GeolocationPermissions getGeolocationPermissions() throws IllegalStateException;
+
+ /**
+ * Returns the service worker controller of the profile.
+ * <p>
+ * Can be called from any thread. It is recommended to not hold onto references of this.
+ *
+ * @throws IllegalStateException if the profile has been deleted by
+ * {@link ProfileStore#deleteProfile(String)}}.
+ */
+ @NonNull
+ @RequiresFeature(name = WebViewFeature.MULTI_PROFILE,
+ enforcement = "androidx.webkit.WebViewFeature#isFeatureSupported")
+ ServiceWorkerController getServiceWorkerController() throws IllegalStateException;
+
+}
diff --git a/webkit/webkit/src/main/java/androidx/webkit/ProfileStore.java b/webkit/webkit/src/main/java/androidx/webkit/ProfileStore.java
new file mode 100644
index 0000000..731d83a
--- /dev/null
+++ b/webkit/webkit/src/main/java/androidx/webkit/ProfileStore.java
@@ -0,0 +1,131 @@
+/*
+ * Copyright 2023 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 androidx.webkit;
+
+import androidx.annotation.NonNull;
+import androidx.annotation.Nullable;
+import androidx.annotation.RequiresFeature;
+import androidx.annotation.RestrictTo;
+import androidx.webkit.internal.ApiFeature;
+import androidx.webkit.internal.ProfileStoreImpl;
+import androidx.webkit.internal.WebViewFeatureInternal;
+
+import java.util.List;
+
+/**
+ * Manages any creation, deletion for {@link Profile}. All calls on the this class
+ * <b>must</b> be called on the apps UI thread.
+ *
+ * <p>Example usage:
+ * <pre class="prettyprint">
+ * ProfileStore profileStore = ProfileStore.getInstance();
+ *
+ * // Use this store instance to manage Profiles.
+ * Profile createdProfile = profileStore.getOrCreateProfile("test_profile");
+ * createdProfile.getGeolocationPermissions().clear("example");
+ * //...
+ * profileStore.deleteProfile("profile_test");
+ *
+ * </pre>
+ *
+ * @hide
+ */
+@RestrictTo(RestrictTo.Scope.LIBRARY_GROUP)
+public interface ProfileStore {
+
+ /**
+ * Returns the production instance of ProfileStore. This method must be called on
+ * the UI thread.
+ *
+ * @return ProfileStore instance to use for managing profiles.
+ */
+ @NonNull
+ @RequiresFeature(name = WebViewFeature.MULTI_PROFILE,
+ enforcement = "androidx.webkit.WebViewFeature#isFeatureSupported")
+ static ProfileStore getInstance() {
+ ApiFeature.NoFramework feature = WebViewFeatureInternal.MULTI_PROFILE;
+ if (feature.isSupportedByWebView()) {
+ return ProfileStoreImpl.getInstance();
+ } else {
+ throw WebViewFeatureInternal.getUnsupportedOperationException();
+ }
+ }
+
+ /**
+ * Returns a profile with the given name, creating if needed.
+ * <p>
+ * Returns the associated Profile with this name, if there's no match with this name it
+ * will create a new Profile instance. This method must be called on
+ * the UI thread.
+ *
+ * @param name name of the profile to retrieve.
+ * @return instance of {@link Profile} matching this name.
+ */
+ @NonNull
+ @RequiresFeature(name = WebViewFeature.MULTI_PROFILE,
+ enforcement = "androidx.webkit.WebViewFeature#isFeatureSupported")
+ Profile getOrCreateProfile(@NonNull String name);
+
+ /**
+ * Returns a profile with the given name, if it exists.
+ * <p>
+ * Returns the associated Profile with this name, if there's no Profile with this name or the
+ * Profile was deleted by {@link ProfileStore#deleteProfile(String)} it will return null.
+ * This method must be called on the UI thread.
+ *
+ * @param name the name of the profile to retrieve.
+ * @return instance of {@link Profile} matching this name, null otherwise if there's no match.
+ */
+ @Nullable
+ @RequiresFeature(name = WebViewFeature.MULTI_PROFILE,
+ enforcement = "androidx.webkit.WebViewFeature#isFeatureSupported")
+ Profile getProfile(@NonNull String name);
+
+ /**
+ * Returns the names of all available profiles.
+ * <p>
+ * Default profile name will be included in this list. This method must be called on the UI
+ * thread.
+ *
+ * @return profile names as a list.
+ */
+ @NonNull
+ @RequiresFeature(name = WebViewFeature.MULTI_PROFILE,
+ enforcement = "androidx.webkit.WebViewFeature#isFeatureSupported")
+ List<String> getAllProfileNames();
+
+ /**
+ * Deletes the profile data associated with the name.
+ * <p>
+ * If this method returns true, the {@link Profile} object associated with the name will no
+ * longer be usable by the application. Returning false means that this profile doesn't exist.
+ * <p>
+ * Some data may be deleted async and is not guaranteed to be cleared from disk by the time
+ * this method returns. This method must be called on the UI thread.
+ *
+ * @param name the profile name to be deleted.
+ * @return {@code true} if profile exists and its data is to be deleted, otherwise {@code
+ * false}.
+ * @throws IllegalStateException if there are living WebViews associated with that profile.
+ * @throws IllegalArgumentException if you are trying to delete the default Profile.
+ *
+ */
+ @RequiresFeature(name = WebViewFeature.MULTI_PROFILE,
+ enforcement = "androidx.webkit.WebViewFeature#isFeatureSupported")
+ boolean deleteProfile(@NonNull String name) throws IllegalStateException,
+ IllegalArgumentException;
+}
diff --git a/webkit/webkit/src/main/java/androidx/webkit/UserAgentMetadata.java b/webkit/webkit/src/main/java/androidx/webkit/UserAgentMetadata.java
new file mode 100644
index 0000000..cbcc3d3
--- /dev/null
+++ b/webkit/webkit/src/main/java/androidx/webkit/UserAgentMetadata.java
@@ -0,0 +1,511 @@
+/*
+ * Copyright 2023 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 androidx.webkit;
+
+import androidx.annotation.NonNull;
+import androidx.annotation.Nullable;
+import androidx.annotation.RestrictTo;
+
+import java.util.List;
+import java.util.Objects;
+
+/**
+ * Holds user-agent metadata information and uses to generate user-agent client
+ * hints.
+ * <p>
+ * This class is functionally equivalent to
+ * <a href="https://wicg.github.io/ua-client-hints/#interface">UADataValues</a>.
+ * <p>
+ * TODO(b/294183509): unhide
+ *
+ * @hide
+ */
+@RestrictTo(RestrictTo.Scope.LIBRARY_GROUP)
+public class UserAgentMetadata {
+ /**
+ * Use this value for bitness to use the platform's default bitness value, which is an empty
+ * string for Android WebView.
+ */
+ public static final int BITNESS_DEFAULT = 0;
+
+ private final List<BrandVersion> mBrandVersionList;
+
+ private final String mFullVersion;
+ private final String mPlatform;
+ private final String mPlatformVersion;
+ private final String mArchitecture;
+ private final String mModel;
+ private boolean mMobile = true;
+ private int mBitness = BITNESS_DEFAULT;
+ private boolean mWow64 = false;
+ private final String mFormFactor;
+
+ @RestrictTo(RestrictTo.Scope.LIBRARY)
+ private UserAgentMetadata(@Nullable List<BrandVersion> brandVersionList,
+ @Nullable String fullVersion, @Nullable String platform,
+ @Nullable String platformVersion, @Nullable String architecture,
+ @Nullable String model,
+ boolean mobile,
+ int bitness, boolean wow64, @Nullable String formFactor) {
+ mBrandVersionList = brandVersionList;
+ mFullVersion = fullVersion;
+ mPlatform = platform;
+ mPlatformVersion = platformVersion;
+ mArchitecture = architecture;
+ mModel = model;
+ mMobile = mobile;
+ mBitness = bitness;
+ mWow64 = wow64;
+ mFormFactor = formFactor;
+ }
+
+ /**
+ * Returns the current list of user-agent brand versions which are used to populate
+ * user-agent client hints {@code sec-ch-ua} and {@code sec-ch-ua-full-version-list}. Each
+ * {@link BrandVersion} object holds the brand name, brand major version and brand
+ * full version.
+ * <p>
+ * @see Builder#setBrandVersionList
+ *
+ */
+ @Nullable
+ public List<BrandVersion> getBrandVersionList() {
+ return mBrandVersionList;
+ }
+
+ /**
+ * Returns the value for the {@code sec-ch-ua-full-version} client hint.
+ * <p>
+ * @see Builder#setFullVersion
+ *
+ */
+ @Nullable
+ public String getFullVersion() {
+ return mFullVersion;
+ }
+
+ /**
+ * Returns the value for the {@code sec-ch-ua-platform} client hint.
+ * <p>
+ * @see Builder#setPlatform
+ *
+ */
+ @Nullable
+ public String getPlatform() {
+ return mPlatform;
+ }
+
+ /**
+ * Returns the value for the {@code sec-ch-ua-platform-version} client hint.
+ * <p>
+ * @see Builder#setPlatformVersion
+ *
+ * @return Platform version string.
+ */
+ @Nullable
+ public String getPlatformVersion() {
+ return mPlatformVersion;
+ }
+
+ /**
+ * Returns the value for the {@code sec-ch-ua-arch} client hint.
+ * <p>
+ * @see Builder#setArchitecture
+ *
+ */
+ @Nullable
+ public String getArchitecture() {
+ return mArchitecture;
+ }
+
+ /**
+ * Returns the value for the {@code sec-ch-ua-model} client hint.
+ * <p>
+ * @see Builder#setModel
+ *
+ */
+ @Nullable
+ public String getModel() {
+ return mModel;
+ }
+
+ /**
+ * Returns the value for the {@code sec-ch-ua-mobile} client hint.
+ * <p>
+ * @see Builder#setMobile
+ *
+ * @return A boolean indicates user-agent's device mobileness.
+ */
+ public boolean isMobile() {
+ return mMobile;
+ }
+
+ /**
+ * Returns the value for the {@code sec-ch-ua-bitness} client hint.
+ * <p>
+ * @see Builder#setBitness
+ *
+ * @return An integer indicates the CPU bitness, the integer value will convert to string
+ * when generating the user-agent client hint, and {@link UserAgentMetadata#BITNESS_DEFAULT}
+ * means an empty string.
+ */
+ public int getBitness() {
+ return mBitness;
+ }
+
+ /**
+ * Returns the value for the {@code sec-ch-ua-wow64} client hint.
+ * <p>
+ * @see Builder#setWow64
+ *
+ * @return A boolean to indicate whether user-agent's binary is running in 64-bit Windows.
+ */
+ public boolean isWow64() {
+ return mWow64;
+ }
+
+ /**
+ * Returns the value for the {@code sec-ch-ua-form-factor} client hint.
+ * <p>
+ * @see Builder#setFormFactor
+ *
+ */
+ @Nullable
+ public String getFormFactor() {
+ return mFormFactor;
+ }
+
+ /**
+ * Two UserAgentMetadata objects are equal only if all the metadata values are equal.
+ */
+ @Override
+ public boolean equals(Object o) {
+ if (this == o) return true;
+ if (!(o instanceof UserAgentMetadata)) return false;
+ UserAgentMetadata that = (UserAgentMetadata) o;
+ return mMobile == that.mMobile && mBitness == that.mBitness && mWow64 == that.mWow64
+ && Objects.equals(mBrandVersionList, that.mBrandVersionList)
+ && Objects.equals(mFullVersion, that.mFullVersion)
+ && Objects.equals(mPlatform, that.mPlatform) && Objects.equals(
+ mPlatformVersion, that.mPlatformVersion) && Objects.equals(mArchitecture,
+ that.mArchitecture) && Objects.equals(mModel, that.mModel)
+ && Objects.equals(mFormFactor, that.mFormFactor);
+ }
+
+ @Override
+ public int hashCode() {
+ return Objects.hash(mBrandVersionList, mFullVersion, mPlatform, mPlatformVersion,
+ mArchitecture, mModel, mMobile, mBitness, mWow64, mFormFactor);
+ }
+
+ /**
+ * Class that holds brand name, major version and full version. Brand name and major version
+ * used to generated user-agent client hint {@code sec-cu-ua}. Brand name and full version
+ * used to generated user-agent client hint {@code sec-ch-ua-full-version-list}.
+ * <p>
+ * This class is functionally equivalent to
+ * <a href="https://wicg.github.io/ua-client-hints/#interface">NavigatorUABrandVersion</a>.
+ *
+ */
+ public static class BrandVersion {
+ private final String mBrand;
+ private final String mMajorVersion;
+ private final String mFullVersion;
+
+ @RestrictTo(RestrictTo.Scope.LIBRARY)
+ public BrandVersion(@NonNull String brand, @NonNull String majorVersion,
+ @NonNull String fullVersion) {
+ if (brand.trim().isEmpty() || majorVersion.trim().isEmpty()
+ || fullVersion.trim().isEmpty()) {
+ throw new IllegalArgumentException("Brand name, major version and full version "
+ + "should not be blank.");
+ }
+ mBrand = brand;
+ mMajorVersion = majorVersion;
+ mFullVersion = fullVersion;
+ }
+
+ /**
+ * Returns the brand of user-agent brand version tuple.
+ *
+ */
+ @NonNull
+ public String getBrand() {
+ return mBrand;
+ }
+
+ /**
+ * Returns the major version of user-agent brand version tuple.
+ *
+ */
+ @NonNull
+ public String getMajorVersion() {
+ return mMajorVersion;
+ }
+
+ /**
+ * Returns the full version of user-agent brand version tuple.
+ *
+ */
+ @NonNull
+ public String getFullVersion() {
+ return mFullVersion;
+ }
+
+ @NonNull
+ @Override
+ public String toString() {
+ return mBrand + "," + mMajorVersion + "," + mFullVersion;
+ }
+
+ /**
+ * Two BrandVersion objects are equal only if brand name, major version and full version
+ * are equal.
+ */
+ @Override
+ public boolean equals(Object o) {
+ if (this == o) return true;
+ if (!(o instanceof BrandVersion)) return false;
+ BrandVersion that = (BrandVersion) o;
+ return Objects.equals(mBrand, that.mBrand) && Objects.equals(mMajorVersion,
+ that.mMajorVersion) && Objects.equals(mFullVersion, that.mFullVersion);
+ }
+
+ @Override
+ public int hashCode() {
+ return Objects.hash(mBrand, mMajorVersion, mFullVersion);
+ }
+ }
+
+ /**
+ * Builder used to create {@link UserAgentMetadata} objects.
+ * <p>
+ * Examples:
+ * <pre class="prettyprint">
+ * // Create a setting with default options.
+ * new UserAgentMetadata.Builder().build();
+ *
+ * // Create a setting with a brand version contains brand name: myBrand, major version: 100,
+ * // full version: 100.1.1.1.
+ * new UserAgentMetadata.Builder().setBrandVersionList(
+ * Collections.singletonList(new BrandVersion("myBrand", "100", "100.1.1.1"))).build();
+ *
+ * // Create a setting brand version, platform, platform version and bitness.
+ * new UserAgentMetadata.Builder().setBrandVersionList(
+ * Collections.singletonList(new BrandVersion("myBrand", "100", "100.1.1.1")))
+ * .setPlatform("myPlatform")
+ * .setPlatform("1.1.1.1")
+ * .setBitness(BITNESS_64)
+ * .build();
+ * </pre>
+ */
+ public static final class Builder {
+ private List<BrandVersion> mBrandVersionList;
+ private String mFullVersion;
+ private String mPlatform;
+ private String mPlatformVersion;
+ private String mArchitecture;
+ private String mModel;
+ private boolean mMobile = true;
+ private int mBitness = BITNESS_DEFAULT;
+ private boolean mWow64 = false;
+ private String mFormFactor;
+
+ /**
+ * Create an empty UserAgentMetadata Builder.
+ */
+ public Builder() {
+ }
+
+ /**
+ * Create a UserAgentMetadata Builder from an existing UserAgentMetadata object.
+ */
+ public Builder(@NonNull UserAgentMetadata uaMetadata) {
+ mBrandVersionList = uaMetadata.getBrandVersionList();
+ mFullVersion = uaMetadata.getFullVersion();
+ mPlatform = uaMetadata.getPlatform();
+ mPlatformVersion = uaMetadata.getPlatformVersion();
+ mArchitecture = uaMetadata.getArchitecture();
+ mModel = uaMetadata.getModel();
+ mMobile = uaMetadata.isMobile();
+ mBitness = uaMetadata.getBitness();
+ mWow64 = uaMetadata.isWow64();
+ mFormFactor = uaMetadata.getFormFactor();
+ }
+
+ /**
+ * Builds the current settings into a UserAgentMetadata object.
+ *
+ * @return The UserAgentMetadata object represented by this Builder
+ */
+ @NonNull
+ public UserAgentMetadata build() {
+ return new UserAgentMetadata(mBrandVersionList, mFullVersion, mPlatform,
+ mPlatformVersion, mArchitecture, mModel, mMobile, mBitness, mWow64,
+ mFormFactor);
+ }
+
+ /**
+ * Sets user-agent metadata brands and their versions. The brand name, major version and
+ * full version should not be blank.
+ *
+ * @param brandVersions a list of {@link BrandVersion} used to generated user-agent client
+ * hints {@code sec-cu-ua} and {@code sec-ch-ua-full-version-list}.
+ *
+ */
+ @NonNull
+ public Builder setBrandVersionList(@NonNull List<BrandVersion> brandVersions) {
+ if (brandVersions.isEmpty()) {
+ throw new IllegalArgumentException("Brand version list should not be empty.");
+ }
+ mBrandVersionList = brandVersions;
+ return this;
+ }
+
+ /**
+ * Sets the user-agent metadata full version. The full version should not be blank, even
+ * though the <a href="https://wicg.github.io/ua-client-hints">spec<a/> about brand full
+ * version could be empty. The blank full version could cause inconsistent brands when
+ * generating brand version related user-agent client hints. It also gives bad experience
+ * for developers when processing the brand full version.
+ *
+ * @param fullVersion The full version is used to generate user-agent client hint
+ * {@code sec-ch-ua-full-version}.
+ *
+ */
+ @NonNull
+ public Builder setFullVersion(@NonNull String fullVersion) {
+ if (fullVersion.trim().isEmpty()) {
+ throw new IllegalArgumentException("Full version should not be blank.");
+ }
+ mFullVersion = fullVersion;
+ return this;
+ }
+
+ /**
+ * Sets the user-agent metadata platform. The platform should not be blank.
+ *
+ * @param platform The platform is used to generate user-agent client hint
+ * {@code sec-ch-ua-platform}.
+ *
+ */
+ @NonNull
+ public Builder setPlatform(@NonNull String platform) {
+ if (platform.trim().isEmpty()) {
+ throw new IllegalArgumentException("Platform should not be blank.");
+ }
+ mPlatform = platform;
+ return this;
+ }
+
+ /**
+ * Sets the user-agent metadata platform version. The value should not be null but can be
+ * empty string.
+ *
+ * @param platformVersion The platform version is used to generate user-agent client
+ * hint {@code sec-ch-ua-platform-version}.
+ *
+ */
+ @NonNull
+ public Builder setPlatformVersion(@NonNull String platformVersion) {
+ mPlatformVersion = platformVersion;
+ return this;
+ }
+
+ /**
+ * Sets the user-agent metadata architecture. The value should not be null but can be
+ * empty string.
+ *
+ * @param architecture The architecture is used to generate user-agent client hint
+ * {@code sec-ch-ua-arch}.
+ *
+ */
+ @NonNull
+ public Builder setArchitecture(@NonNull String architecture) {
+ mArchitecture = architecture;
+ return this;
+ }
+
+ /**
+ * Sets the user-agent metadata model. The value should not be null but can be empty string.
+ *
+ * @param model The model is used to generate user-agent client hint
+ * {@code sec-ch-ua-model}.
+ *
+ */
+ @NonNull
+ public Builder setModel(@NonNull String model) {
+ mModel = model;
+ return this;
+ }
+
+ /**
+ * Sets the user-agent metadata mobile, the default value is true.
+ *
+ * @param mobile The mobile is used to generate user-agent client hint
+ * {@code sec-ch-ua-mobile}.
+ *
+ */
+ @NonNull
+ public Builder setMobile(boolean mobile) {
+ mMobile = mobile;
+ return this;
+ }
+
+ /**
+ * Sets the user-agent metadata bitness, the default value is
+ * {@link UserAgentMetadata#BITNESS_DEFAULT}, which indicates an empty string for
+ * {@code sec-ch-ua-bitness}.
+ *
+ * @param bitness The bitness is used to generate user-agent client hint
+ * {@code sec-ch-ua-bitness}.
+ *
+ */
+ @NonNull
+ public Builder setBitness(int bitness) {
+ mBitness = bitness;
+ return this;
+ }
+
+ /**
+ * Sets the user-agent metadata wow64, the default is false.
+ *
+ * @param wow64 The wow64 is used to generate user-agent client hint
+ * {@code sec-ch-ua-wow64}.
+ *
+ */
+ @NonNull
+ public Builder setWow64(boolean wow64) {
+ mWow64 = wow64;
+ return this;
+ }
+
+ /**
+ * Sets the user-agent metadata form factor. The value should not be null but can be
+ * empty string.
+ *
+ * @param formFactor The form factor is used to generate user-agent client hint
+ * {@code sec-ch-ua-form-factor}.
+ *
+ */
+ @NonNull
+ public Builder setFormFactor(@NonNull String formFactor) {
+ mFormFactor = formFactor;
+ return this;
+ }
+ }
+}
diff --git a/webkit/webkit/src/main/java/androidx/webkit/WebSettingsCompat.java b/webkit/webkit/src/main/java/androidx/webkit/WebSettingsCompat.java
index f50fb6a..b447b9d 100644
--- a/webkit/webkit/src/main/java/androidx/webkit/WebSettingsCompat.java
+++ b/webkit/webkit/src/main/java/androidx/webkit/WebSettingsCompat.java
@@ -697,6 +697,78 @@
}
}
+ /**
+ * Sets the WebView's user-agent metadata to generate user-agent client hints.
+ * <p>
+ * UserAgentMetadata in WebView is used to populate user-agent client hints, they can provide
+ * the client’s branding and version information, the underlying operating system’s branding
+ * and major version, as well as details about the underlying device.
+ * <p>
+ * The user-agent string can be set with {@link WebSettings#setUserAgentString(String)}, here
+ * are the details on how this API interacts it to generate user-agent client hints.
+ * <p>
+ * If the UserAgentMetadata is null and the overridden user-agent contains the system default
+ * user-agent, the system default value will be used.
+ * <p>
+ * If the UserAgentMetadata is null but the overridden user-agent doesn't contain the system
+ * default user-agent, only the
+ * <a href="https://wicg.github.io/client-hints-infrastructure/#low-entropy-hint-table">low-entry user-agent client hints</a> will be generated.
+ *
+ * <p> See <a href="https://wicg.github.io/ua-client-hints/">
+ * this</a> for more information about User-Agent Client Hints.
+ *
+ * <p>
+ * This method should only be called if
+ * {@link WebViewFeature#isFeatureSupported(String)}
+ * returns true for {@link WebViewFeature#USER_AGENT_METADATA}.
+ *
+ * @param metadata the WebView's user-agent metadata.
+ *
+ * TODO(b/294183509): unhide
+ * @hide
+ */
+ @RestrictTo(RestrictTo.Scope.LIBRARY_GROUP)
+ @RequiresFeature(name = WebViewFeature.USER_AGENT_METADATA,
+ enforcement = "androidx.webkit.WebViewFeature#isFeatureSupported")
+ public static void setUserAgentMetadata(@NonNull WebSettings settings,
+ @NonNull UserAgentMetadata metadata) {
+ final ApiFeature.NoFramework feature =
+ WebViewFeatureInternal.USER_AGENT_METADATA;
+ if (feature.isSupportedByWebView()) {
+ getAdapter(settings).setUserAgentMetadata(metadata);
+ } else {
+ throw WebViewFeatureInternal.getUnsupportedOperationException();
+ }
+ }
+
+ /**
+ * Get the WebView's user-agent metadata which used to generate user-agent client hints.
+ *
+ * <p> See <a href="https://wicg.github.io/ua-client-hints/"> this</a> for more information
+ * about User-Agent Client Hints.
+ *
+ * <p>
+ * This method should only be called if
+ * {@link WebViewFeature#isFeatureSupported(String)}
+ * returns true for {@link WebViewFeature#USER_AGENT_METADATA}.
+ *
+ * TODO(b/294183509): unhide
+ * @hide
+ */
+ @RestrictTo(RestrictTo.Scope.LIBRARY_GROUP)
+ @RequiresFeature(name = WebViewFeature.USER_AGENT_METADATA,
+ enforcement = "androidx.webkit.WebViewFeature#isFeatureSupported")
+ @NonNull
+ public static UserAgentMetadata getUserAgentMetadata(@NonNull WebSettings settings) {
+ final ApiFeature.NoFramework feature =
+ WebViewFeatureInternal.USER_AGENT_METADATA;
+ if (feature.isSupportedByWebView()) {
+ return getAdapter(settings).getUserAgentMetadata();
+ } else {
+ throw WebViewFeatureInternal.getUnsupportedOperationException();
+ }
+ }
+
private static WebSettingsAdapter getAdapter(WebSettings settings) {
return WebViewGlueCommunicator.getCompatConverter().convertSettings(settings);
}
diff --git a/webkit/webkit/src/main/java/androidx/webkit/WebViewFeature.java b/webkit/webkit/src/main/java/androidx/webkit/WebViewFeature.java
index 87f4b9e..628cb88 100644
--- a/webkit/webkit/src/main/java/androidx/webkit/WebViewFeature.java
+++ b/webkit/webkit/src/main/java/androidx/webkit/WebViewFeature.java
@@ -102,6 +102,8 @@
ENTERPRISE_AUTHENTICATION_APP_LINK_POLICY,
GET_COOKIE_INFO,
REQUESTED_WITH_HEADER_ALLOW_LIST,
+ USER_AGENT_METADATA,
+ MULTI_PROFILE,
})
@Retention(RetentionPolicy.SOURCE)
@Target({ElementType.PARAMETER, ElementType.METHOD})
@@ -534,6 +536,35 @@
"REQUESTED_WITH_HEADER_ALLOW_LIST";
/**
+ * Feature for {@link #isFeatureSupported(String)}.
+ * This feature covers
+ * {@link androidx.webkit.ServiceWorkerWebSettingsCompat#getUserAgentMetadata(WebSettings)}, and
+ * {@link androidx.webkit.ServiceWorkerWebSettingsCompat#setUserAgentMetadata(WebSettings, UserAgentMetadata)}.
+ *
+ * TODO(b/294183509): unhide
+ * @hide
+ */
+ @RestrictTo(RestrictTo.Scope.LIBRARY_GROUP)
+ public static final String USER_AGENT_METADATA = "USER_AGENT_METADATA";
+
+ /**
+ * Feature for {@link #isFeatureSupported(String)}.
+ * This feature covers
+ * {@link Profile#getName()}.
+ * {@link Profile#getWebStorage()}.
+ * {@link Profile#getCookieManager()}.
+ * {@link Profile#getGeolocationPermissions()}.
+ * {@link Profile#getServiceWorkerController()}.
+ * {@link ProfileStore#getProfile(String)}.
+ * {@link ProfileStore#getOrCreateProfile(String)}.
+ * {@link ProfileStore#getAllProfileNames()}.
+ * {@link ProfileStore#deleteProfile(String)}.
+ * {@link ProfileStore#getInstance()}.
+ */
+ @RestrictTo(RestrictTo.Scope.LIBRARY_GROUP)
+ public static final String MULTI_PROFILE = "MULTI_PROFILE";
+
+ /**
* Return whether a feature is supported at run-time. On devices running Android version {@link
* android.os.Build.VERSION_CODES#LOLLIPOP} and higher, this will check whether a feature is
* supported, depending on the combination of the desired feature, the Android version of
diff --git a/webkit/webkit/src/main/java/androidx/webkit/internal/IncompatibleApkWebViewProviderFactory.java b/webkit/webkit/src/main/java/androidx/webkit/internal/IncompatibleApkWebViewProviderFactory.java
index 508ff54..62285cf 100644
--- a/webkit/webkit/src/main/java/androidx/webkit/internal/IncompatibleApkWebViewProviderFactory.java
+++ b/webkit/webkit/src/main/java/androidx/webkit/internal/IncompatibleApkWebViewProviderFactory.java
@@ -21,6 +21,7 @@
import androidx.annotation.NonNull;
import org.chromium.support_lib_boundary.DropDataContentProviderBoundaryInterface;
+import org.chromium.support_lib_boundary.ProfileStoreBoundaryInterface;
import org.chromium.support_lib_boundary.ProxyControllerBoundaryInterface;
import org.chromium.support_lib_boundary.ServiceWorkerControllerBoundaryInterface;
import org.chromium.support_lib_boundary.StaticsBoundaryInterface;
@@ -87,4 +88,10 @@
public DropDataContentProviderBoundaryInterface getDropDataProvider() {
throw new UnsupportedOperationException(UNSUPPORTED_EXCEPTION_EXPLANATION);
}
+
+ @NonNull
+ @Override
+ public ProfileStoreBoundaryInterface getProfileStore() {
+ throw new UnsupportedOperationException(UNSUPPORTED_EXCEPTION_EXPLANATION);
+ }
}
diff --git a/webkit/webkit/src/main/java/androidx/webkit/internal/ProfileImpl.java b/webkit/webkit/src/main/java/androidx/webkit/internal/ProfileImpl.java
new file mode 100644
index 0000000..77a124a
--- /dev/null
+++ b/webkit/webkit/src/main/java/androidx/webkit/internal/ProfileImpl.java
@@ -0,0 +1,100 @@
+/*
+ * Copyright 2023 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 androidx.webkit.internal;
+
+import android.webkit.CookieManager;
+import android.webkit.GeolocationPermissions;
+import android.webkit.ServiceWorkerController;
+import android.webkit.WebStorage;
+
+import androidx.annotation.NonNull;
+import androidx.webkit.Profile;
+
+import org.chromium.support_lib_boundary.ProfileBoundaryInterface;
+
+/**
+ * Internal implementation of Profile.
+ */
+public class ProfileImpl implements Profile {
+
+ private final ProfileBoundaryInterface mProfileImpl;
+
+ ProfileImpl(ProfileBoundaryInterface profileImpl) {
+ mProfileImpl = profileImpl;
+ }
+
+ // Use ProfileStore to create a Profile instance.
+ private ProfileImpl() {
+ mProfileImpl = null;
+ }
+
+ @Override
+ @NonNull
+ public String getName() {
+ ApiFeature.NoFramework feature = WebViewFeatureInternal.MULTI_PROFILE;
+ if (feature.isSupportedByWebView()) {
+ return mProfileImpl.getName();
+ } else {
+ throw WebViewFeatureInternal.getUnsupportedOperationException();
+ }
+ }
+
+ @Override
+ @NonNull
+ public CookieManager getCookieManager() throws IllegalStateException {
+ ApiFeature.NoFramework feature = WebViewFeatureInternal.MULTI_PROFILE;
+ if (feature.isSupportedByWebView()) {
+ return mProfileImpl.getCookieManager();
+ } else {
+ throw WebViewFeatureInternal.getUnsupportedOperationException();
+ }
+ }
+
+ @Override
+ @NonNull
+ public WebStorage getWebStorage() throws IllegalStateException {
+ ApiFeature.NoFramework feature = WebViewFeatureInternal.MULTI_PROFILE;
+ if (feature.isSupportedByWebView()) {
+ return mProfileImpl.getWebStorage();
+ } else {
+ throw WebViewFeatureInternal.getUnsupportedOperationException();
+ }
+ }
+
+ @NonNull
+ @Override
+ public GeolocationPermissions getGeolocationPermissions() throws IllegalStateException {
+ ApiFeature.NoFramework feature = WebViewFeatureInternal.MULTI_PROFILE;
+ if (feature.isSupportedByWebView()) {
+ return mProfileImpl.getGeoLocationPermissions();
+ } else {
+ throw WebViewFeatureInternal.getUnsupportedOperationException();
+ }
+ }
+
+ @NonNull
+ @Override
+ public ServiceWorkerController getServiceWorkerController() throws IllegalStateException {
+ ApiFeature.NoFramework feature = WebViewFeatureInternal.MULTI_PROFILE;
+ if (feature.isSupportedByWebView()) {
+ return mProfileImpl.getServiceWorkerController();
+ } else {
+ throw WebViewFeatureInternal.getUnsupportedOperationException();
+ }
+ }
+
+}
diff --git a/webkit/webkit/src/main/java/androidx/webkit/internal/ProfileStoreImpl.java b/webkit/webkit/src/main/java/androidx/webkit/internal/ProfileStoreImpl.java
new file mode 100644
index 0000000..b237096
--- /dev/null
+++ b/webkit/webkit/src/main/java/androidx/webkit/internal/ProfileStoreImpl.java
@@ -0,0 +1,111 @@
+/*
+ * Copyright 2023 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 androidx.webkit.internal;
+
+import androidx.annotation.NonNull;
+import androidx.annotation.Nullable;
+import androidx.webkit.Profile;
+import androidx.webkit.ProfileStore;
+
+import org.chromium.support_lib_boundary.ProfileBoundaryInterface;
+import org.chromium.support_lib_boundary.ProfileStoreBoundaryInterface;
+import org.chromium.support_lib_boundary.util.BoundaryInterfaceReflectionUtil;
+
+import java.lang.reflect.InvocationHandler;
+import java.util.List;
+
+/**
+ * Internal implementation of ProfileStore.
+ */
+public class ProfileStoreImpl implements ProfileStore {
+
+ private final ProfileStoreBoundaryInterface mProfileStoreImpl;
+ private static ProfileStore sInstance;
+
+ private ProfileStoreImpl(ProfileStoreBoundaryInterface profileStoreImpl) {
+ mProfileStoreImpl = profileStoreImpl;
+ }
+
+ private ProfileStoreImpl() {
+ mProfileStoreImpl = null;
+ }
+
+ /**
+ * Returns the production instance of ProfileStore.
+ *
+ * @return ProfileStore instance to use for managing profiles.
+ */
+ @NonNull
+ public static ProfileStore getInstance() {
+ if (sInstance == null) {
+ sInstance = new ProfileStoreImpl(
+ WebViewGlueCommunicator.getFactory().getProfileStore());
+ }
+ return sInstance;
+ }
+
+ @Override
+ @NonNull
+ public Profile getOrCreateProfile(@NonNull String name) {
+ ApiFeature.NoFramework feature = WebViewFeatureInternal.MULTI_PROFILE;
+ if (feature.isSupportedByWebView()) {
+ return new ProfileImpl(BoundaryInterfaceReflectionUtil.castToSuppLibClass(
+ ProfileBoundaryInterface.class, mProfileStoreImpl.getOrCreateProfile(name)));
+ } else {
+ throw WebViewFeatureInternal.getUnsupportedOperationException();
+ }
+ }
+
+ @Override
+ @Nullable
+ public Profile getProfile(@NonNull String name) {
+ ApiFeature.NoFramework feature = WebViewFeatureInternal.MULTI_PROFILE;
+ if (feature.isSupportedByWebView()) {
+ InvocationHandler profileBoundaryInterface = mProfileStoreImpl.getProfile(name);
+ if (profileBoundaryInterface != null) {
+ return new ProfileImpl(BoundaryInterfaceReflectionUtil.castToSuppLibClass(
+ ProfileBoundaryInterface.class, profileBoundaryInterface));
+ } else {
+ return null;
+ }
+ } else {
+ throw WebViewFeatureInternal.getUnsupportedOperationException();
+ }
+ }
+
+ @Override
+ @NonNull
+ public List<String> getAllProfileNames() {
+ ApiFeature.NoFramework feature = WebViewFeatureInternal.MULTI_PROFILE;
+ if (feature.isSupportedByWebView()) {
+ return mProfileStoreImpl.getAllProfileNames();
+ } else {
+ throw WebViewFeatureInternal.getUnsupportedOperationException();
+ }
+ }
+
+ @Override
+ public boolean deleteProfile(@NonNull String name) throws IllegalStateException {
+ ApiFeature.NoFramework feature = WebViewFeatureInternal.MULTI_PROFILE;
+ if (feature.isSupportedByWebView()) {
+ return mProfileStoreImpl.deleteProfile(name);
+ } else {
+ throw WebViewFeatureInternal.getUnsupportedOperationException();
+ }
+ }
+
+}
diff --git a/webkit/webkit/src/main/java/androidx/webkit/internal/UserAgentMetadataInternal.java b/webkit/webkit/src/main/java/androidx/webkit/internal/UserAgentMetadataInternal.java
new file mode 100644
index 0000000..96beee3
--- /dev/null
+++ b/webkit/webkit/src/main/java/androidx/webkit/internal/UserAgentMetadataInternal.java
@@ -0,0 +1,209 @@
+/*
+ * Copyright 2023 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 androidx.webkit.internal;
+
+import androidx.annotation.NonNull;
+import androidx.webkit.UserAgentMetadata;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * Internal implementation of translation between {@code Map<String, Object>} and
+ * {@link androidx.webkit.UserAgentMetadata}.
+ */
+public class UserAgentMetadataInternal {
+ /**
+ * Predefined set of name for user-agent metadata key.
+ * Key name for user-agent metadata mobile,
+ * used to generate user-agent client hint {@code sec-ch-ua-mobile}.
+ */
+ private static final String MOBILE = "MOBILE";
+ /**
+ * Predefined set of name for user-agent metadata key.
+ * Key name for user-agent metadata brand version list,
+ * used to generate user-agent client hints {@code sec-ch-ua}, and
+ * {@code sec-ch-ua-full-version-list}.
+ */
+ private static final String BRAND_VERSION_LIST = "BRAND_VERSION_LIST";
+
+ /**
+ * Predefined set of name for user-agent metadata key.
+ * Key name for user-agent metadata full version,
+ * used to generate user-agent client hint {@code sec-ch-ua-full-version}.
+ */
+ private static final String FULL_VERSION = "FULL_VERSION";
+
+ /**
+ * Predefined set of name for user-agent metadata key.
+ * Key name for user-agent metadata platform,
+ * used to generate user-agent client hint {@code sec-ch-ua-platform}.
+ */
+ private static final String PLATFORM = "PLATFORM";
+
+ /**
+ * Predefined set of name for user-agent metadata key.
+ * Key name for user-agent metadata platform version,
+ * used to generate user-agent client hint {@code sec-ch-ua-platform-version}.
+ */
+ private static final String PLATFORM_VERSION = "PLATFORM_VERSION";
+
+ /**
+ * Predefined set of name for user-agent metadata key.
+ * Key name for user-agent metadata architecture,
+ * used to generate user-agent client hint {@code sec-ch-ua-arch}.
+ */
+ private static final String ARCHITECTURE = "ARCHITECTURE";
+
+ /**
+ * Predefined set of name for user-agent metadata key.
+ * Key name for user-agent metadata model,
+ * used to generate user-agent client hint {@code sec-ch-ua-model}.
+ */
+ private static final String MODEL = "MODEL";
+ /**
+ * Predefined set of name for user-agent metadata key.
+ * Key name for user-agent metadata bitness,
+ * used to generate user-agent client hint {@code sec-ch-ua-bitness}.
+ */
+ private static final String BITNESS = "BITNESS";
+ /**
+ * Predefined set of name for user-agent metadata key.
+ * Key name for user-agent metadata wow64,
+ * used to generate user-agent client hint {@code sec-ch-ua-wow64}.
+ */
+ private static final String WOW64 = "WOW64";
+ /**
+ * Predefined set of name for user-agent metadata key.
+ * Key name for user-agent metadata form_factor,
+ * used to generate user-agent client hint {@code sec-ch-ua-form-factor}.
+ */
+ private static final String FORM_FACTOR = "FORM_FACTOR";
+ /**
+ * each brand should contains brand, major version and full version.
+ */
+ private static final int BRAND_VERSION_LENGTH = 3;
+
+ /**
+ * Convert the UserAgentMetadata setting to a map of object and pass down to chromium.
+ *
+ * @return A hashmap contains user-agent metadata key name, and corresponding objects.
+ */
+ @NonNull
+ static Map<String, Object> convertUserAgentMetadataToMap(
+ @NonNull UserAgentMetadata uaMetadata) {
+ Map<String, Object> item = new HashMap<>();
+ item.put(BRAND_VERSION_LIST, getBrandVersionArray(uaMetadata.getBrandVersionList()));
+ item.put(FULL_VERSION, uaMetadata.getFullVersion());
+ item.put(PLATFORM, uaMetadata.getPlatform());
+ item.put(PLATFORM_VERSION, uaMetadata.getPlatformVersion());
+ item.put(ARCHITECTURE, uaMetadata.getArchitecture());
+ item.put(MODEL, uaMetadata.getModel());
+ item.put(MOBILE, uaMetadata.isMobile());
+ item.put(BITNESS, uaMetadata.getBitness());
+ item.put(WOW64, uaMetadata.isWow64());
+ item.put(FORM_FACTOR, uaMetadata.getFormFactor());
+ return item;
+ }
+
+ private static String[][] getBrandVersionArray(
+ List<UserAgentMetadata.BrandVersion> brandVersionList) {
+ if (brandVersionList == null) {
+ return null;
+ }
+
+ String[][] brandVersionArray = new String[brandVersionList.size()][BRAND_VERSION_LENGTH];
+ for (int i = 0; i < brandVersionList.size(); i++) {
+ brandVersionArray[i][0] = brandVersionList.get(i).getBrand();
+ brandVersionArray[i][1] = brandVersionList.get(i).getMajorVersion();
+ brandVersionArray[i][2] = brandVersionList.get(i).getFullVersion();
+ }
+ return brandVersionArray;
+ }
+
+ /**
+ * Convert a map of object to an instance of UserAgentMetadata.
+ *
+ * @param uaMetadataMap A hashmap contains user-agent metadata key name, and corresponding
+ * objects.
+ * @return This UserAgentMetadata object
+ */
+ @NonNull
+ static UserAgentMetadata getUserAgentMetadataFromMap(
+ @NonNull Map<String, Object> uaMetadataMap) {
+ UserAgentMetadata.Builder builder = new UserAgentMetadata.Builder();
+
+ Object brandVersionValue = uaMetadataMap.get(BRAND_VERSION_LIST);
+ if (brandVersionValue != null) {
+ String[][] overrideBrandVersionList = (String[][]) brandVersionValue;
+ List<UserAgentMetadata.BrandVersion> branVersionList = new ArrayList<>();
+ for (String[] brandVersionInfo : overrideBrandVersionList) {
+ branVersionList.add(new UserAgentMetadata.BrandVersion(brandVersionInfo[0],
+ brandVersionInfo[1], brandVersionInfo[2]));
+ }
+ builder.setBrandVersionList(branVersionList);
+ }
+
+ String fullVersion = (String) uaMetadataMap.get(FULL_VERSION);
+ if (fullVersion != null) {
+ builder.setFullVersion(fullVersion);
+ }
+
+ String platform = (String) uaMetadataMap.get(PLATFORM);
+ if (platform != null) {
+ builder.setPlatform(platform);
+ }
+
+ String platformVersion = (String) uaMetadataMap.get(PLATFORM_VERSION);
+ if (platformVersion != null) {
+ builder.setPlatformVersion(platformVersion);
+ }
+
+ String architecture = (String) uaMetadataMap.get(ARCHITECTURE);
+ if (architecture != null) {
+ builder.setArchitecture(architecture);
+ }
+
+ String model = (String) uaMetadataMap.get(MODEL);
+ if (model != null) {
+ builder.setModel(model);
+ }
+
+ Boolean isMobile = (Boolean) uaMetadataMap.get(MOBILE);
+ if (isMobile != null) {
+ builder.setMobile(isMobile);
+ }
+
+ Integer bitness = (Integer) uaMetadataMap.get(BITNESS);
+ if (bitness != null) {
+ builder.setBitness(bitness);
+ }
+
+ Boolean isWow64 = (Boolean) uaMetadataMap.get(WOW64);
+ if (isWow64 != null) {
+ builder.setWow64(isWow64);
+ }
+
+ String formFactor = (String) uaMetadataMap.get(FORM_FACTOR);
+ if (formFactor != null) {
+ builder.setFormFactor(formFactor);
+ }
+ return builder.build();
+ }
+}
diff --git a/webkit/webkit/src/main/java/androidx/webkit/internal/WebSettingsAdapter.java b/webkit/webkit/src/main/java/androidx/webkit/internal/WebSettingsAdapter.java
index 041647d..6fb6231 100644
--- a/webkit/webkit/src/main/java/androidx/webkit/internal/WebSettingsAdapter.java
+++ b/webkit/webkit/src/main/java/androidx/webkit/internal/WebSettingsAdapter.java
@@ -19,6 +19,7 @@
import android.webkit.WebSettings;
import androidx.annotation.NonNull;
+import androidx.webkit.UserAgentMetadata;
import org.chromium.support_lib_boundary.WebSettingsBoundaryInterface;
@@ -153,4 +154,24 @@
public void setRequestedWithHeaderOriginAllowList(@NonNull Set<String> allowList) {
mBoundaryInterface.setRequestedWithHeaderOriginAllowList(allowList);
}
+
+ /**
+ * Adapter method for
+ * {@link androidx.webkit.WebSettingsCompat#getUserAgentMetadata(WebSettings)}.
+ */
+ @NonNull
+ public UserAgentMetadata getUserAgentMetadata() {
+ return UserAgentMetadataInternal.getUserAgentMetadataFromMap(
+ mBoundaryInterface.getUserAgentMetadataMap());
+ }
+
+ /**
+ * Adapter method for
+ * {@link androidx.webkit.WebSettingsCompat#setUserAgentMetadata(
+ * WebSettings, UserAgentMetadata)}.
+ */
+ public void setUserAgentMetadata(@NonNull UserAgentMetadata uaMetadata) {
+ mBoundaryInterface.setUserAgentMetadataFromMap(
+ UserAgentMetadataInternal.convertUserAgentMetadataToMap(uaMetadata));
+ }
}
diff --git a/webkit/webkit/src/main/java/androidx/webkit/internal/WebViewFeatureInternal.java b/webkit/webkit/src/main/java/androidx/webkit/internal/WebViewFeatureInternal.java
index 668dac6..4dd4ed6 100644
--- a/webkit/webkit/src/main/java/androidx/webkit/internal/WebViewFeatureInternal.java
+++ b/webkit/webkit/src/main/java/androidx/webkit/internal/WebViewFeatureInternal.java
@@ -30,6 +30,8 @@
import androidx.annotation.NonNull;
import androidx.annotation.RestrictTo;
import androidx.annotation.VisibleForTesting;
+import androidx.webkit.Profile;
+import androidx.webkit.ProfileStore;
import androidx.webkit.ProxyConfig;
import androidx.webkit.ProxyController;
import androidx.webkit.SafeBrowsingResponseCompat;
@@ -530,6 +532,46 @@
public static final ApiFeature.NoFramework REQUESTED_WITH_HEADER_ALLOW_LIST =
new ApiFeature.NoFramework(WebViewFeature.REQUESTED_WITH_HEADER_ALLOW_LIST,
Features.REQUESTED_WITH_HEADER_ALLOW_LIST);
+
+ /**
+ * This feature covers
+ * {@link androidx.webkit.WebSettingsCompat#setUserAgentMetadata(WebSettings, UserAgentMetadata)} and
+ * {@link androidx.webkit.WebSettingsCompat#getUserAgentMetadata(WebSettings)}.
+ *
+ */
+ public static final ApiFeature.NoFramework USER_AGENT_METADATA =
+ new ApiFeature.NoFramework(WebViewFeature.USER_AGENT_METADATA,
+ Features.USER_AGENT_METADATA);
+
+ /**
+ * Feature for {@link #isFeatureSupported(String)}.
+ * This feature covers
+ * {@link Profile#getName()}.
+ * {@link Profile#getWebStorage()}.
+ * {@link Profile#getCookieManager()}.
+ * {@link Profile#getGeolocationPermissions()}.
+ * {@link Profile#getServiceWorkerController()}.
+ * {@link ProfileStore#getProfile(String)}.
+ * {@link ProfileStore#getOrCreateProfile(String)}.
+ * {@link ProfileStore#getAllProfileNames()}.
+ * {@link ProfileStore#deleteProfile(String)}.
+ * {@link ProfileStore#getInstance()}.
+ */
+ @RestrictTo(RestrictTo.Scope.LIBRARY_GROUP)
+ public static final ApiFeature.NoFramework MULTI_PROFILE =
+ new ApiFeature.NoFramework(WebViewFeature.MULTI_PROFILE, Features.MULTI_PROFILE) {
+ @Override
+ public boolean isSupportedByWebView() {
+ // Multi-process mode is a requirement for Multi-Profile feature.
+ if (!super.isSupportedByWebView()) {
+ return false;
+ }
+ if (WebViewFeature.isFeatureSupported(WebViewFeature.MULTI_PROCESS)) {
+ return WebViewCompat.isMultiProcessEnabled();
+ }
+ return false;
+ }
+ };
// --- Add new feature constants above this line ---
private WebViewFeatureInternal() {
diff --git a/webkit/webkit/src/main/java/androidx/webkit/internal/WebViewProviderFactory.java b/webkit/webkit/src/main/java/androidx/webkit/internal/WebViewProviderFactory.java
index 4c85e7d..a8ff33f 100644
--- a/webkit/webkit/src/main/java/androidx/webkit/internal/WebViewProviderFactory.java
+++ b/webkit/webkit/src/main/java/androidx/webkit/internal/WebViewProviderFactory.java
@@ -22,6 +22,7 @@
import androidx.annotation.NonNull;
import org.chromium.support_lib_boundary.DropDataContentProviderBoundaryInterface;
+import org.chromium.support_lib_boundary.ProfileStoreBoundaryInterface;
import org.chromium.support_lib_boundary.ProxyControllerBoundaryInterface;
import org.chromium.support_lib_boundary.ServiceWorkerControllerBoundaryInterface;
import org.chromium.support_lib_boundary.StaticsBoundaryInterface;
@@ -87,4 +88,12 @@
*/
@NonNull
DropDataContentProviderBoundaryInterface getDropDataProvider();
+
+ /**
+ * Fetch the boundary interface representing profile store for Multi-Profile.
+ */
+ @NonNull
+ ProfileStoreBoundaryInterface getProfileStore();
+
+
}
diff --git a/webkit/webkit/src/main/java/androidx/webkit/internal/WebViewProviderFactoryAdapter.java b/webkit/webkit/src/main/java/androidx/webkit/internal/WebViewProviderFactoryAdapter.java
index 3843c26..0c62bf1 100644
--- a/webkit/webkit/src/main/java/androidx/webkit/internal/WebViewProviderFactoryAdapter.java
+++ b/webkit/webkit/src/main/java/androidx/webkit/internal/WebViewProviderFactoryAdapter.java
@@ -21,6 +21,7 @@
import androidx.annotation.NonNull;
import org.chromium.support_lib_boundary.DropDataContentProviderBoundaryInterface;
+import org.chromium.support_lib_boundary.ProfileStoreBoundaryInterface;
import org.chromium.support_lib_boundary.ProxyControllerBoundaryInterface;
import org.chromium.support_lib_boundary.ServiceWorkerControllerBoundaryInterface;
import org.chromium.support_lib_boundary.StaticsBoundaryInterface;
@@ -129,4 +130,11 @@
return BoundaryInterfaceReflectionUtil.castToSuppLibClass(
DropDataContentProviderBoundaryInterface.class, mImpl.getDropDataProvider());
}
+
+ @NonNull
+ @Override
+ public ProfileStoreBoundaryInterface getProfileStore() {
+ return BoundaryInterfaceReflectionUtil.castToSuppLibClass(
+ ProfileStoreBoundaryInterface.class, mImpl.getProfileStore());
+ }
}