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/AlwaysSupportedFeatures.java b/appsearch/appsearch-local-storage/src/main/java/androidx/appsearch/localstorage/AlwaysSupportedFeatures.java
index 9b71dde..557d214 100644
--- a/appsearch/appsearch-local-storage/src/main/java/androidx/appsearch/localstorage/AlwaysSupportedFeatures.java
+++ b/appsearch/appsearch-local-storage/src/main/java/androidx/appsearch/localstorage/AlwaysSupportedFeatures.java
@@ -16,6 +16,8 @@
 // @exportToFramework:copyToPath(testing/testutils/src/android/app/appsearch/testutil/external/AlwaysSupportedFeatures.java)
 package androidx.appsearch.localstorage;
 
+import android.content.Context;
+
 import androidx.annotation.NonNull;
 import androidx.annotation.RestrictTo;
 import androidx.appsearch.app.Features;
@@ -74,4 +76,9 @@
                 return false;
         }
     }
+
+    @Override
+    public int getMaxIndexedProperties(@NonNull Context unused) {
+        return 64;
+    }
 }
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 68fa3b7..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);
             }
@@ -1035,10 +1034,6 @@
             LogUtil.piiTrace(
                     TAG, "putDocument, response", putResultProto.getStatus(), putResultProto);
 
-            // Update caches
-            addToMap(mNamespaceMapLocked, prefix, finalDocument.getNamespace());
-            mDocumentCountMapLocked.put(packageName, newDocumentCount);
-
             // Logging stats
             if (pStatsBuilder != null) {
                 pStatsBuilder
@@ -1055,6 +1050,10 @@
 
             checkSuccess(putResultProto.getStatus());
 
+            // Only update caches if the document is successfully put to Icing.
+            addToMap(mNamespaceMapLocked, prefix, finalDocument.getNamespace());
+            mDocumentCountMapLocked.put(packageName, newDocumentCount);
+
             // Prepare notifications
             if (sendChangeNotifications) {
                 mObserverManager.onDocumentChange(
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-platform-storage/src/main/java/androidx/appsearch/platformstorage/FeaturesImpl.java b/appsearch/appsearch-platform-storage/src/main/java/androidx/appsearch/platformstorage/FeaturesImpl.java
index 4095f32..4eb234c 100644
--- a/appsearch/appsearch-platform-storage/src/main/java/androidx/appsearch/platformstorage/FeaturesImpl.java
+++ b/appsearch/appsearch-platform-storage/src/main/java/androidx/appsearch/platformstorage/FeaturesImpl.java
@@ -15,16 +15,24 @@
  */
 package androidx.appsearch.platformstorage;
 
+import android.content.Context;
+import android.content.pm.ModuleInfo;
+import android.content.pm.PackageInfo;
+import android.content.pm.PackageManager;
 import android.os.Build;
 
+import androidx.annotation.DoNotInline;
 import androidx.annotation.NonNull;
+import androidx.annotation.RequiresApi;
 import androidx.appsearch.app.Features;
+import androidx.core.util.Preconditions;
 
 /**
  * An implementation of {@link Features}. Feature availability is dependent on Android API
  * level.
  */
 final class FeaturesImpl implements Features {
+    private static final String APPSEARCH_MODULE_NAME = "com.android.appsearch";
 
     @Override
     public boolean isFeatureSupported(@NonNull String feature) {
@@ -82,4 +90,46 @@
                 return false;
         }
     }
+
+    @Override
+    public int getMaxIndexedProperties(@NonNull Context context) {
+        Preconditions.checkNotNull(context);
+        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.UPSIDE_DOWN_CAKE) {
+            return 64;
+        } else if (Build.VERSION.SDK_INT == Build.VERSION_CODES.TIRAMISU) {
+            PackageManager packageManager = context.getPackageManager();
+            long appsearchVersionCode = 0;
+            try {
+                String appSearchPackageName = ApiHelperForQ.getAppSearchPackageName(packageManager);
+                if (appSearchPackageName == null) {
+                    return 16;
+                }
+                PackageInfo pInfo = packageManager
+                        .getPackageInfo(appSearchPackageName, PackageManager.MATCH_APEX);
+                appsearchVersionCode = ApiHelperForQ.getPackageInfoLongVersionCode(pInfo);
+            } catch (PackageManager.NameNotFoundException e) {
+                // Module not installed
+            }
+            // Sixty-four properties were enabled in mainline module 'aml_ase_331311020'
+            return appsearchVersionCode >= 331311020 ? 64 : 16;
+        } else {
+            return 16;
+        }
+    }
+
+    @RequiresApi(Build.VERSION_CODES.Q)
+    private static class ApiHelperForQ {
+        @DoNotInline
+        static long getPackageInfoLongVersionCode(PackageInfo pInfo) {
+            return pInfo.getLongVersionCode();
+        }
+
+        @DoNotInline
+        static String getAppSearchPackageName(PackageManager packageManager)
+                throws PackageManager.NameNotFoundException {
+            ModuleInfo appSearchModule =
+                    packageManager.getModuleInfo(APPSEARCH_MODULE_NAME, 1);
+            return appSearchModule.getPackageName();
+        }
+    }
 }
diff --git a/appsearch/appsearch-play-services-storage/src/main/java/androidx/appsearch/playservicesstorage/FeaturesImpl.java b/appsearch/appsearch-play-services-storage/src/main/java/androidx/appsearch/playservicesstorage/FeaturesImpl.java
index a2a3e53..bef55fa 100644
--- a/appsearch/appsearch-play-services-storage/src/main/java/androidx/appsearch/playservicesstorage/FeaturesImpl.java
+++ b/appsearch/appsearch-play-services-storage/src/main/java/androidx/appsearch/playservicesstorage/FeaturesImpl.java
@@ -16,6 +16,8 @@
 
 package androidx.appsearch.playservicesstorage;
 
+import android.content.Context;
+
 import androidx.annotation.NonNull;
 import androidx.appsearch.app.Features;
 
@@ -104,4 +106,10 @@
                 return false; // AppSearch features in U+, absent in GMSCore AppSearch.
         }
     }
+    @Override
+    public int getMaxIndexedProperties(@NonNull Context unused) {
+        // TODO(b/241310816): Update to reflect support in Android U+ once 64 indexable properties
+        //  are possible in service-appsearch.
+        return 16;
+    }
 }
diff --git a/appsearch/appsearch/api/current.txt b/appsearch/appsearch/api/current.txt
index 96049d0..baeb222 100644
--- a/appsearch/appsearch/api/current.txt
+++ b/appsearch/appsearch/api/current.txt
@@ -92,6 +92,11 @@
     method public androidx.appsearch.app.AppSearchBatchResult.Builder<KeyType!,ValueType!> setSuccess(KeyType, ValueType?);
   }
 
+  @AnyThread public abstract class AppSearchDocumentClassMap {
+    ctor public AppSearchDocumentClassMap();
+    method protected abstract java.util.Map<java.lang.String!,java.util.List<java.lang.String!>!> getMap();
+  }
+
   public final class AppSearchResult<ValueType> {
     method public String? getErrorMessage();
     method public int getResultCode();
@@ -241,6 +246,7 @@
   }
 
   public interface Features {
+    method public int getMaxIndexedProperties(android.content.Context);
     method public boolean isFeatureSupported(String);
     field public static final String ADD_PERMISSIONS_AND_GET_VISIBILITY = "ADD_PERMISSIONS_AND_GET_VISIBILITY";
     field public static final String GLOBAL_SEARCH_SESSION_GET_BY_ID = "GLOBAL_SEARCH_SESSION_GET_BY_ID";
@@ -267,7 +273,7 @@
     method public static androidx.appsearch.app.GenericDocument fromDocumentClass(Object) throws androidx.appsearch.exceptions.AppSearchException;
     method public long getCreationTimestampMillis();
     method public String getId();
-    method public static int getMaxIndexedProperties();
+    method @Deprecated public static int getMaxIndexedProperties();
     method public String getNamespace();
     method public Object? getProperty(String);
     method public boolean getPropertyBoolean(String);
diff --git a/appsearch/appsearch/api/restricted_current.txt b/appsearch/appsearch/api/restricted_current.txt
index 96049d0..baeb222 100644
--- a/appsearch/appsearch/api/restricted_current.txt
+++ b/appsearch/appsearch/api/restricted_current.txt
@@ -92,6 +92,11 @@
     method public androidx.appsearch.app.AppSearchBatchResult.Builder<KeyType!,ValueType!> setSuccess(KeyType, ValueType?);
   }
 
+  @AnyThread public abstract class AppSearchDocumentClassMap {
+    ctor public AppSearchDocumentClassMap();
+    method protected abstract java.util.Map<java.lang.String!,java.util.List<java.lang.String!>!> getMap();
+  }
+
   public final class AppSearchResult<ValueType> {
     method public String? getErrorMessage();
     method public int getResultCode();
@@ -241,6 +246,7 @@
   }
 
   public interface Features {
+    method public int getMaxIndexedProperties(android.content.Context);
     method public boolean isFeatureSupported(String);
     field public static final String ADD_PERMISSIONS_AND_GET_VISIBILITY = "ADD_PERMISSIONS_AND_GET_VISIBILITY";
     field public static final String GLOBAL_SEARCH_SESSION_GET_BY_ID = "GLOBAL_SEARCH_SESSION_GET_BY_ID";
@@ -267,7 +273,7 @@
     method public static androidx.appsearch.app.GenericDocument fromDocumentClass(Object) throws androidx.appsearch.exceptions.AppSearchException;
     method public long getCreationTimestampMillis();
     method public String getId();
-    method public static int getMaxIndexedProperties();
+    method @Deprecated public static int getMaxIndexedProperties();
     method public String getNamespace();
     method public Object? getProperty(String);
     method public boolean getPropertyBoolean(String);
diff --git a/appsearch/appsearch/build.gradle b/appsearch/appsearch/build.gradle
index 1fd3fdb..a940b11 100644
--- a/appsearch/appsearch/build.gradle
+++ b/appsearch/appsearch/build.gradle
@@ -34,6 +34,7 @@
 dependencies {
     api('androidx.annotation:annotation:1.1.0')
     api(libs.guavaListenableFuture)
+    api(libs.autoServiceAnnotations)
 
     implementation('androidx.collection:collection:1.2.0')
     implementation('androidx.concurrent:concurrent-futures:1.0.0')
diff --git a/appsearch/appsearch/proguard-rules.pro b/appsearch/appsearch/proguard-rules.pro
index a7af3cc..c344815 100644
--- a/appsearch/appsearch/proguard-rules.pro
+++ b/appsearch/appsearch/proguard-rules.pro
@@ -12,5 +12,6 @@
 #  See the License for the specific language governing permissions and
 #  limitations under the License.
 -keep class ** implements androidx.appsearch.app.DocumentClassFactory { *; }
+-keep class ** implements androidx.appsearch.app.AppSearchDocumentClassMap { *; }
 
 -keep @androidx.appsearch.annotation.Document class *
diff --git a/appsearch/appsearch/src/androidTest/java/androidx/appsearch/app/AnnotationProcessorTestBase.java b/appsearch/appsearch/src/androidTest/java/androidx/appsearch/app/AnnotationProcessorTestBase.java
index 690eb0f..5abb9d0 100644
--- a/appsearch/appsearch/src/androidTest/java/androidx/appsearch/app/AnnotationProcessorTestBase.java
+++ b/appsearch/appsearch/src/androidTest/java/androidx/appsearch/app/AnnotationProcessorTestBase.java
@@ -49,7 +49,9 @@
 import java.util.Arrays;
 import java.util.Collection;
 import java.util.Collections;
+import java.util.HashMap;
 import java.util.List;
+import java.util.Map;
 
 public abstract class AnnotationProcessorTestBase {
     private AppSearchSession mSession;
@@ -1425,4 +1427,123 @@
         documents = convertSearchResultsToDocuments(searchResults);
         assertThat(documents).containsExactly(businessGeneric);
     }
+
+    @Test
+    public void testAppSearchDocumentClassMap() throws Exception {
+        // Before this test, AppSearch's annotation processor has already generated the maps for
+        // each module at compile time for all document classes available in the current JVM
+        // environment.
+        Map<String, List<String>> expectedDocumentMap = new HashMap<>();
+        // The following classes come from androidx.appsearch.builtintypes.
+        expectedDocumentMap.put("builtin:StopwatchLap",
+                Arrays.asList("androidx.appsearch.builtintypes.StopwatchLap"));
+        expectedDocumentMap.put("builtin:Thing",
+                Arrays.asList("androidx.appsearch.builtintypes.Thing"));
+        expectedDocumentMap.put("builtin:ContactPoint",
+                Arrays.asList("androidx.appsearch.builtintypes.ContactPoint"));
+        expectedDocumentMap.put("builtin:Person",
+                Arrays.asList("androidx.appsearch.builtintypes.Person"));
+        expectedDocumentMap.put("builtin:AlarmInstance",
+                Arrays.asList("androidx.appsearch.builtintypes.AlarmInstance"));
+        expectedDocumentMap.put("Keyword",
+                Arrays.asList("androidx.appsearch.builtintypes.properties.Keyword"));
+        expectedDocumentMap.put("builtin:Alarm",
+                Arrays.asList("androidx.appsearch.builtintypes.Alarm"));
+        expectedDocumentMap.put("builtin:Timer",
+                Arrays.asList("androidx.appsearch.builtintypes.Timer"));
+        expectedDocumentMap.put("builtin:ImageObject",
+                Arrays.asList("androidx.appsearch.builtintypes.ImageObject"));
+        expectedDocumentMap.put("builtin:PotentialAction",
+                Arrays.asList("androidx.appsearch.builtintypes.PotentialAction"));
+        expectedDocumentMap.put("builtin:Stopwatch",
+                Arrays.asList("androidx.appsearch.builtintypes.Stopwatch"));
+        // The following classes come from all test files in androidx.appsearch.cts and
+        // androidx.appsearch.app.
+        expectedDocumentMap.put("Artist",
+                Arrays.asList("androidx.appsearch.cts.app.SetSchemaRequestCtsTest$Artist"));
+        expectedDocumentMap.put("Organization",
+                Arrays.asList("androidx.appsearch.app.AnnotationProcessorTestBase$Organization",
+                        "androidx.appsearch.cts.app.SetSchemaRequestCtsTest$Organization"));
+        expectedDocumentMap.put("Email",
+                Arrays.asList("androidx.appsearch.app.AnnotationProcessorTestBase$Email",
+                        "androidx.appsearch.cts.app.SetSchemaRequestCtsTest$Email"));
+        expectedDocumentMap.put("Message",
+                Arrays.asList("androidx.appsearch.app.AnnotationProcessorTestBase$Message",
+                        "androidx.appsearch.cts.app.SetSchemaRequestCtsTest$Message"));
+        expectedDocumentMap.put("Parent",
+                Arrays.asList("androidx.appsearch.cts.app.SetSchemaRequestCtsTest$Parent"));
+        expectedDocumentMap.put("Outer",
+                Arrays.asList("androidx.appsearch.app.AnnotationProcessorTestBase$Outer",
+                        "androidx.appsearch.cts.app.SetSchemaRequestCtsTest$Outer"));
+        expectedDocumentMap.put("BusinessImpl",
+                Arrays.asList("androidx.appsearch.app.AnnotationProcessorTestBase$BusinessImpl"));
+        expectedDocumentMap.put("Inner",
+                Arrays.asList("androidx.appsearch.app.AnnotationProcessorTestBase$Inner",
+                        "androidx.appsearch.cts.app.SetSchemaRequestCtsTest$Inner"));
+        expectedDocumentMap.put("King",
+                Arrays.asList("androidx.appsearch.cts.app.SetSchemaRequestCtsTest$King",
+                        "androidx.appsearch.cts.app.SearchSpecCtsTest$King",
+                        "androidx.appsearch.cts.observer.ObserverSpecCtsTest$King"));
+        expectedDocumentMap.put("ArtType",
+                Arrays.asList("androidx.appsearch.cts.app.SetSchemaRequestCtsTest$ArtType"));
+        expectedDocumentMap.put("Pineapple",
+                Arrays.asList("androidx.appsearch.app.AnnotationProcessorTestBase$Pineapple",
+                        "androidx.appsearch.app.AnnotationProcessorTestBase$CoolPineapple"));
+        expectedDocumentMap.put("Jack",
+                Arrays.asList("androidx.appsearch.cts.observer.ObserverSpecCtsTest$Jack"));
+        expectedDocumentMap.put("ClassA",
+                Arrays.asList("androidx.appsearch.cts.app.SetSchemaRequestCtsTest$ClassA"));
+        expectedDocumentMap.put("ClassB",
+                Arrays.asList("androidx.appsearch.cts.app.SetSchemaRequestCtsTest$ClassB"));
+        expectedDocumentMap.put("Thing",
+                Arrays.asList("androidx.appsearch.cts.app.SetSchemaRequestCtsTest$Thing"));
+        expectedDocumentMap.put("Business",
+                Arrays.asList("androidx.appsearch.app.AnnotationProcessorTestBase$Business"));
+        expectedDocumentMap.put("Ace",
+                Arrays.asList("androidx.appsearch.cts.observer.ObserverSpecCtsTest$Ace"));
+        expectedDocumentMap.put("EmailMessage",
+                Arrays.asList("androidx.appsearch.app.AnnotationProcessorTestBase$EmailMessage",
+                        "androidx.appsearch.cts.app.SetSchemaRequestCtsTest$EmailMessage"));
+        expectedDocumentMap.put("FakeMessage",
+                Arrays.asList("androidx.appsearch.app.AnnotationProcessorTestBase$FakeMessage"));
+        expectedDocumentMap.put("Root",
+                Arrays.asList("androidx.appsearch.app.AnnotationProcessorTestBase$Root"));
+        expectedDocumentMap.put("Queen",
+                Arrays.asList("androidx.appsearch.cts.app.SetSchemaRequestCtsTest$Queen",
+                        "androidx.appsearch.cts.observer.ObserverSpecCtsTest$Queen"));
+        expectedDocumentMap.put("EmailDocument",
+                Arrays.asList("androidx.appsearch.cts.app.customer.EmailDocument"));
+        expectedDocumentMap.put("Middle",
+                Arrays.asList("androidx.appsearch.app.AnnotationProcessorTestBase$Middle",
+                        "androidx.appsearch.cts.app.SetSchemaRequestCtsTest$Middle"));
+        expectedDocumentMap.put("Common",
+                Arrays.asList("androidx.appsearch.cts.app.SetSchemaRequestCtsTest$Common"));
+        expectedDocumentMap.put("Card",
+                Arrays.asList("androidx.appsearch.app.AnnotationProcessorTestBase$Card",
+                        "androidx.appsearch.cts.app.SetSchemaRequestCtsTest$Card",
+                        "androidx.appsearch.cts.app.PutDocumentsRequestCtsTest$Card"));
+        expectedDocumentMap.put("Gift",
+                Arrays.asList("androidx.appsearch.app.AnnotationProcessorTestBase$Gift"));
+        expectedDocumentMap.put("CardAction",
+                Arrays.asList("androidx.appsearch.app.AnnotationProcessorTestBase$CardAction"));
+        expectedDocumentMap.put("InterfaceRoot",
+                Arrays.asList("androidx.appsearch.app.AnnotationProcessorTestBase$InterfaceRoot"));
+        expectedDocumentMap.put("Person",
+                Arrays.asList("androidx.appsearch.app.AnnotationProcessorTestBase$Person",
+                        "androidx.appsearch.cts.app.SetSchemaRequestCtsTest$Person"));
+        expectedDocumentMap.put("Place",
+                Arrays.asList("androidx.appsearch.app.AnnotationProcessorTestBase$Place"));
+        expectedDocumentMap.put("LongDoc",
+                Arrays.asList("androidx.appsearch.app.AnnotationProcessorTestBase$LongDoc"));
+        expectedDocumentMap.put("SampleAutoValue", Arrays.asList(
+                "androidx.appsearch.app.AnnotationProcessorTestBase$SampleAutoValue"));
+
+        Map<String, List<String>> actualDocumentMap = AppSearchDocumentClassMap.getMergedMap();
+        assertThat(actualDocumentMap.keySet()).containsAtLeastElementsIn(
+                expectedDocumentMap.keySet());
+        for (String key : expectedDocumentMap.keySet()) {
+            assertThat(actualDocumentMap.get(key)).containsAtLeastElementsIn(
+                    expectedDocumentMap.get(key));
+        }
+    }
 }
diff --git a/appsearch/appsearch/src/androidTest/java/androidx/appsearch/cts/app/AppSearchSessionCtsTestBase.java b/appsearch/appsearch/src/androidTest/java/androidx/appsearch/cts/app/AppSearchSessionCtsTestBase.java
index ccfaa65..1903f7c 100644
--- a/appsearch/appsearch/src/androidTest/java/androidx/appsearch/cts/app/AppSearchSessionCtsTestBase.java
+++ b/appsearch/appsearch/src/androidTest/java/androidx/appsearch/cts/app/AppSearchSessionCtsTestBase.java
@@ -469,6 +469,27 @@
 
 // @exportToFramework:startStrip()
 
+    /** Test indexing maximum properties into a schema. */
+    @Test
+    public void testSetSchema_maxProperties() throws Exception {
+        int maxProperties = mDb1.getFeatures().getMaxIndexedProperties(
+                ApplicationProvider.getApplicationContext());
+        AppSearchSchema.Builder schemaBuilder = new AppSearchSchema.Builder("testSchema");
+        for (int i = 0; i < maxProperties; i++) {
+            schemaBuilder.addProperty(new StringPropertyConfig.Builder("string" + i)
+                    .setIndexingType(StringPropertyConfig.INDEXING_TYPE_EXACT_TERMS)
+                    .setTokenizerType(StringPropertyConfig.TOKENIZER_TYPE_PLAIN)
+                    .build());
+        }
+        AppSearchSchema maxSchema = schemaBuilder.build();
+        mDb1.setSchemaAsync(new SetSchemaRequest.Builder().addSchemas(maxSchema).build()).get();
+        Set<AppSearchSchema> actual1 = mDb1.getSchemaAsync().get().getSchemas();
+        assertThat(actual1).containsExactly(maxSchema);
+
+        // TODO(b/300135897): Expand test to assert adding more than allowed properties is
+        //  fixed once fixed.
+    }
+
     @Test
     public void testGetSchema() throws Exception {
         AppSearchSchema emailSchema1 = new AppSearchSchema.Builder("Email1")
@@ -1009,11 +1030,11 @@
     public void testPutLargeDocumentBatch() throws Exception {
         // Schema registration
         AppSearchSchema schema = new AppSearchSchema.Builder("Type").addProperty(
-                new StringPropertyConfig.Builder("body")
-                        .setCardinality(PropertyConfig.CARDINALITY_OPTIONAL)
-                        .setTokenizerType(StringPropertyConfig.TOKENIZER_TYPE_PLAIN)
-                        .setIndexingType(StringPropertyConfig.INDEXING_TYPE_PREFIXES)
-                        .build())
+                        new StringPropertyConfig.Builder("body")
+                                .setCardinality(PropertyConfig.CARDINALITY_OPTIONAL)
+                                .setTokenizerType(StringPropertyConfig.TOKENIZER_TYPE_PLAIN)
+                                .setIndexingType(StringPropertyConfig.INDEXING_TYPE_PREFIXES)
+                                .build())
                 .build();
         mDb1.setSchemaAsync(new SetSchemaRequest.Builder().addSchemas(schema).build()).get();
 
@@ -3097,8 +3118,8 @@
 
         // Make sure it's really gone
         AppSearchBatchResult<String, GenericDocument> getResult = mDb1.getByDocumentIdAsync(
-                new GetByDocumentIdRequest.Builder("namespace").addIds("id1",
-                        "id2").build())
+                        new GetByDocumentIdRequest.Builder("namespace").addIds("id1",
+                                "id2").build())
                 .get();
         assertThat(getResult.isSuccess()).isFalse();
         assertThat(getResult.getFailures().get("id1").getResultCode())
@@ -3280,7 +3301,7 @@
                 SearchSpec.TERM_MATCH_PREFIX).addFilterPackageNames(
                 ApplicationProvider.getApplicationContext().getPackageName()).build()).get();
         AppSearchBatchResult<String, GenericDocument> getResult = mDb1.getByDocumentIdAsync(
-                new GetByDocumentIdRequest.Builder("namespace").addIds("id1", "id2").build())
+            new GetByDocumentIdRequest.Builder("namespace").addIds("id1", "id2").build())
                 .get();
         assertThat(getResult.isSuccess()).isFalse();
         assertThat(getResult.getFailures().get("id1").getResultCode())
diff --git a/appsearch/appsearch/src/androidTest/java/androidx/appsearch/cts/app/GenericDocumentCtsTest.java b/appsearch/appsearch/src/androidTest/java/androidx/appsearch/cts/app/GenericDocumentCtsTest.java
index 6a82e79..40040c7 100644
--- a/appsearch/appsearch/src/androidTest/java/androidx/appsearch/cts/app/GenericDocumentCtsTest.java
+++ b/appsearch/appsearch/src/androidTest/java/androidx/appsearch/cts/app/GenericDocumentCtsTest.java
@@ -37,6 +37,7 @@
             .build();
 
     @Test
+    @SuppressWarnings("deprecation")
     public void testMaxIndexedProperties() {
         assertThat(GenericDocument.getMaxIndexedProperties()).isEqualTo(16);
     }
diff --git a/appsearch/appsearch/src/main/java/androidx/appsearch/annotation/Document.java b/appsearch/appsearch/src/main/java/androidx/appsearch/annotation/Document.java
index 6b09339..8e802e6 100644
--- a/appsearch/appsearch/src/main/java/androidx/appsearch/annotation/Document.java
+++ b/appsearch/appsearch/src/main/java/androidx/appsearch/annotation/Document.java
@@ -73,8 +73,8 @@
  *
  * <p>Properties contain the document's data. They may be indexed or non-indexed (the default).
  * Only indexed properties can be searched for in queries. There is a limit of
- * {@link androidx.appsearch.app.GenericDocument#getMaxIndexedProperties} indexed properties in
- * one document.
+ * {@link androidx.appsearch.app.Features#getMaxIndexedProperties} indexed properties in one
+ * document.
  */
 @Documented
 @Retention(RetentionPolicy.CLASS)
diff --git a/appsearch/appsearch/src/main/java/androidx/appsearch/app/AppSearchDocumentClassMap.java b/appsearch/appsearch/src/main/java/androidx/appsearch/app/AppSearchDocumentClassMap.java
new file mode 100644
index 0000000..2021b266
--- /dev/null
+++ b/appsearch/appsearch/src/main/java/androidx/appsearch/app/AppSearchDocumentClassMap.java
@@ -0,0 +1,103 @@
+/*
+ * 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.
+ */
+// @exportToFramework:skipFile()
+package androidx.appsearch.app;
+
+import androidx.annotation.AnyThread;
+import androidx.annotation.GuardedBy;
+import androidx.annotation.NonNull;
+import androidx.annotation.RestrictTo;
+import androidx.collection.ArrayMap;
+
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.List;
+import java.util.Map;
+import java.util.Objects;
+import java.util.ServiceLoader;
+
+/**
+ * A class that maintains the map from schema type names to the fully qualified names of the
+ * corresponding document classes.
+ *
+ * <p>Do not extend this class directly. AppSearch's annotation processor will automatically
+ * generate necessary subclasses to hold the map.
+ */
+@AnyThread
+public abstract class AppSearchDocumentClassMap {
+
+    /**
+     * The cached value of {@link #getMergedMap()}.
+     */
+    private static volatile Map<String, List<String>> sMergedMap = null;
+
+    /**
+     * Collects all of the instances of the generated {@link AppSearchDocumentClassMap} classes
+     * available in the current JVM environment, and calls the {@link #getMap()} method from them to
+     * build, cache and return the merged map. The keys are schema type names, and the values are
+     * the lists of the corresponding document classes.
+     */
+    @NonNull
+    @RestrictTo(RestrictTo.Scope.LIBRARY_GROUP)
+    public static Map<String, List<String>> getMergedMap() {
+        if (sMergedMap == null) {
+            synchronized (AppSearchDocumentClassMap.class) {
+                if (sMergedMap == null) {
+                    sMergedMap = buildMergedMapLocked();
+                }
+            }
+        }
+        return sMergedMap;
+    }
+
+    /**
+     * Returns the map from schema type names to the list of the fully qualified names of the
+     * corresponding document classes.
+     */
+    @NonNull
+    protected abstract Map<String, List<String>> getMap();
+
+    @NonNull
+    @GuardedBy("AppSearchDocumentClassMap.class")
+    private static Map<String, List<String>> buildMergedMapLocked() {
+        ServiceLoader<AppSearchDocumentClassMap> loader = ServiceLoader.load(
+                AppSearchDocumentClassMap.class);
+        Map<String, List<String>> result = new ArrayMap<>();
+        for (AppSearchDocumentClassMap appSearchDocumentClassMap : loader) {
+            Map<String, List<String>> documentClassMap = appSearchDocumentClassMap.getMap();
+            for (Map.Entry<String, List<String>> entry : documentClassMap.entrySet()) {
+                String schemaName = entry.getKey();
+                // A single schema name can be mapped to more than one document classes because
+                // document classes can choose to have arbitrary schema names. The most common
+                // case is when there are multiple AppSearch packages that define the same schema
+                // name. It is necessary to keep track all of the mapped document classes to prevent
+                // from losing any information.
+                List<String> documentClassNames = result.get(schemaName);
+                if (documentClassNames == null) {
+                    documentClassNames = new ArrayList<>();
+                    result.put(schemaName, documentClassNames);
+                }
+                documentClassNames.addAll(entry.getValue());
+            }
+        }
+
+        for (String schemaName : result.keySet()) {
+            result.put(schemaName,
+                    Collections.unmodifiableList(Objects.requireNonNull(result.get(schemaName))));
+        }
+        return Collections.unmodifiableMap(result);
+    }
+}
diff --git a/appsearch/appsearch/src/main/java/androidx/appsearch/app/Features.java b/appsearch/appsearch/src/main/java/androidx/appsearch/app/Features.java
index 012c789..e62622d 100644
--- a/appsearch/appsearch/src/main/java/androidx/appsearch/app/Features.java
+++ b/appsearch/appsearch/src/main/java/androidx/appsearch/app/Features.java
@@ -15,6 +15,8 @@
  */
 package androidx.appsearch.app;
 
+import android.content.Context;
+
 import androidx.annotation.NonNull;
 import androidx.annotation.RestrictTo;
 
@@ -182,4 +184,13 @@
      * backend.
      */
     boolean isFeatureSupported(@NonNull String feature);
+
+    /**
+     * Returns the maximum amount of properties that can be indexed in a Document
+     * given the Android API level and AppSearch backend.
+     *
+     * <p>A property is defined as all values that are present at a particular path.
+     * @param context to check mainline module version, as support varies by module version.
+     */
+    int getMaxIndexedProperties(@NonNull Context context);
 }
diff --git a/appsearch/appsearch/src/main/java/androidx/appsearch/app/GenericDocument.java b/appsearch/appsearch/src/main/java/androidx/appsearch/app/GenericDocument.java
index cdb3004..5f5efc6 100644
--- a/appsearch/appsearch/src/main/java/androidx/appsearch/app/GenericDocument.java
+++ b/appsearch/appsearch/src/main/java/androidx/appsearch/app/GenericDocument.java
@@ -87,8 +87,18 @@
      *
      * <p>Indexed properties are properties which are strings where the
      * {@link AppSearchSchema.StringPropertyConfig#getIndexingType} value is anything other
-     * than {@link AppSearchSchema.StringPropertyConfig#INDEXING_TYPE_NONE}.
+     * than {@link AppSearchSchema.StringPropertyConfig#INDEXING_TYPE_NONE}, as well as long
+     * properties where the {@link AppSearchSchema.LongPropertyConfig#getIndexingType} value is
+     * {@link AppSearchSchema.LongPropertyConfig#INDEXING_TYPE_RANGE}.
+     *
+     * <!--@exportToFramework:ifJetpack()-->
+     * @deprecated This is no longer a static value, but depends on SDK version and what AppSearch
+     * implementation is being used. Use {@link Features#getMaxIndexedProperties} instead.
+     * <!--@exportToFramework:else()-->
      */
+// @exportToFramework:startStrip()
+    @Deprecated
+// @exportToFramework:endStrip()
     public static int getMaxIndexedProperties() {
         return MAX_INDEXED_PROPERTIES;
     }
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 {
+@SafeParcelable.Class(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 {
+@SafeParcelable.Class(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/appsearch/compiler/build.gradle b/appsearch/compiler/build.gradle
index 57511cb..8892047 100644
--- a/appsearch/compiler/build.gradle
+++ b/appsearch/compiler/build.gradle
@@ -27,6 +27,8 @@
     api('androidx.annotation:annotation:1.1.0')
     api(libs.jsr250)
     implementation(libs.autoCommon)
+    implementation(libs.autoService)
+    implementation(libs.autoServiceAnnotations)
     implementation(libs.autoValue)
     implementation(libs.autoValueAnnotations)
     implementation(libs.guava)
diff --git a/appsearch/compiler/src/main/java/androidx/appsearch/compiler/AppSearchCompiler.java b/appsearch/compiler/src/main/java/androidx/appsearch/compiler/AppSearchCompiler.java
index 4ea0f1d6..998ce5c 100644
--- a/appsearch/compiler/src/main/java/androidx/appsearch/compiler/AppSearchCompiler.java
+++ b/appsearch/compiler/src/main/java/androidx/appsearch/compiler/AppSearchCompiler.java
@@ -17,6 +17,7 @@
 
 import static androidx.appsearch.compiler.IntrospectionHelper.APPSEARCH_ANNOTATION_PKG;
 import static androidx.appsearch.compiler.IntrospectionHelper.DOCUMENT_ANNOTATION_SIMPLE_CLASS_NAME;
+
 import static javax.lang.model.util.ElementFilter.typesIn;
 
 import androidx.annotation.NonNull;
@@ -28,9 +29,19 @@
 import com.google.common.collect.ImmutableList;
 import com.google.common.collect.ImmutableSet;
 import com.google.common.collect.ImmutableSetMultimap;
+import com.squareup.javapoet.JavaFile;
 
 import java.io.File;
 import java.io.IOException;
+import java.nio.charset.StandardCharsets;
+import java.security.MessageDigest;
+import java.security.NoSuchAlgorithmException;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Map;
 import java.util.Set;
 
 import javax.annotation.processing.Messager;
@@ -74,10 +85,16 @@
     private static final class AppSearchCompileStep implements Step {
         private final ProcessingEnvironment mProcessingEnv;
         private final Messager mMessager;
+        private final Map<String, List<String>> mDocumentClassMap;
+        // Annotation processing can be run in multiple rounds. This tracks the index of current
+        // round starting from 0.
+        private int mRoundIndex;
 
         AppSearchCompileStep(ProcessingEnvironment processingEnv) {
             mProcessingEnv = processingEnv;
             mMessager = processingEnv.getMessager();
+            mDocumentClassMap = new HashMap<>();
+            mRoundIndex = -1;
         }
 
         @Override
@@ -88,11 +105,16 @@
         @Override
         public ImmutableSet<Element> process(
                 ImmutableSetMultimap<String, Element> elementsByAnnotation) {
+            mDocumentClassMap.clear();
+            mRoundIndex += 1;
+
             Set<TypeElement> documentElements =
                     typesIn(elementsByAnnotation.get(
                             IntrospectionHelper.DOCUMENT_ANNOTATION_CLASS.canonicalName()));
 
             ImmutableSet.Builder<Element> nextRound = new ImmutableSet.Builder<>();
+            String documentMapClassPackage = null;
+            Set<String> classNames = new HashSet<>();
             for (TypeElement document : documentElements) {
                 try {
                     processDocument(document);
@@ -104,11 +126,58 @@
                     // Prints error message.
                     e.printDiagnostic(mMessager);
                 }
+                classNames.add(document.getQualifiedName().toString());
+                String packageName =
+                        mProcessingEnv.getElementUtils().getPackageOf(document).toString();
+                // We must choose a deterministic package to place the generated document map
+                // class. Given multiple packages, we have no real preference between them. So
+                // for the sake of making a deterministic selection, we always choose to generate
+                // the map in the lexicographically smallest package.
+                if (documentMapClassPackage == null || packageName.compareTo(
+                        documentMapClassPackage) < 0) {
+                    documentMapClassPackage = packageName;
+                }
             }
+
+            try {
+                if (!classNames.isEmpty()) {
+                    // Append the hash code of classNames and the index of the current round as a
+                    // suffix to the name of the generated document map class. This will prevent
+                    // the generation of two classes with the same name, which could otherwise
+                    // happen when there are two Java modules that contain classes in the same
+                    // package name, or there are multiple rounds of annotation processing for some
+                    // module.
+                    String classSuffix = generateStringSetHash(
+                            classNames, /* delimiter= */ ",") + "_" + mRoundIndex;
+                    writeJavaFile(DocumentMapGenerator.generate(mProcessingEnv,
+                            documentMapClassPackage, classSuffix, mDocumentClassMap));
+                }
+            } catch (NoSuchAlgorithmException | IOException e) {
+                mProcessingEnv.getMessager().printMessage(Kind.ERROR,
+                        "Failed to create the AppSearch document map class: " + e);
+            }
+
             // Pass elements to next round of processing.
             return nextRound.build();
         }
 
+        private void writeJavaFile(JavaFile javaFile) throws IOException {
+            String outputDir = mProcessingEnv.getOptions().get(OUTPUT_DIR_OPTION);
+            if (outputDir == null || outputDir.isEmpty()) {
+                javaFile.writeTo(mProcessingEnv.getFiler());
+            } else {
+                mMessager.printMessage(
+                        Kind.NOTE,
+                        "Writing output to \"" + outputDir
+                                + "\" due to the presence of -A" + OUTPUT_DIR_OPTION);
+                javaFile.writeTo(new File(outputDir));
+            }
+        }
+
+        /**
+         * Process the document class by generating a factory class for it and properly update
+         * {@link #mDocumentClassMap}.
+         */
         private void processDocument(@NonNull TypeElement element)
                 throws ProcessingException, MissingTypeException {
             if (element.getKind() != ElementKind.CLASS
@@ -137,23 +206,19 @@
                 model = DocumentModel.createPojoModel(mProcessingEnv, element);
             }
             CodeGenerator generator = CodeGenerator.generate(mProcessingEnv, model);
-            String outputDir = mProcessingEnv.getOptions().get(OUTPUT_DIR_OPTION);
             try {
-                if (outputDir == null || outputDir.isEmpty()) {
-                    generator.writeToFiler();
-                } else {
-                    mMessager.printMessage(
-                            Kind.NOTE,
-                            "Writing output to \"" + outputDir
-                                    + "\" due to the presence of -A" + OUTPUT_DIR_OPTION);
-                    generator.writeToFolder(new File(outputDir));
-                }
+                writeJavaFile(generator.createJavaFile());
             } catch (IOException e) {
                 ProcessingException pe =
                         new ProcessingException("Failed to write output", model.getClassElement());
                 pe.initCause(e);
                 throw pe;
             }
+
+            List<String> documentClassList = mDocumentClassMap.computeIfAbsent(
+                    model.getSchemaName(), k -> new ArrayList<>());
+            documentClassList.add(
+                    mProcessingEnv.getElementUtils().getBinaryName(element).toString());
         }
 
         /**
@@ -172,5 +237,34 @@
             String dot = pkg.isEmpty() ? "" : ".";
             return pkg + dot + "AutoValue_" + name;
         }
+
+        /**
+         * Generate a SHA-256 hash for a given string set.
+         *
+         * @param set       The set of the strings.
+         * @param delimiter The delimiter used to separate the strings, which should not have
+         *                  appeared in any of the strings in the set.
+         */
+        @NonNull
+        private static String generateStringSetHash(@NonNull Set<String> set,
+                @NonNull String delimiter) throws NoSuchAlgorithmException {
+            List<String> sortedList = new ArrayList<>(set);
+            Collections.sort(sortedList);
+
+            MessageDigest md = MessageDigest.getInstance("SHA-256");
+            for (String s : sortedList) {
+                md.update(s.getBytes(StandardCharsets.UTF_8));
+                md.update(delimiter.getBytes(StandardCharsets.UTF_8));
+            }
+            StringBuilder result = new StringBuilder();
+            for (byte b : md.digest()) {
+                String hex = Integer.toHexString(0xFF & b);
+                if (hex.length() == 1) {
+                    result.append('0');
+                }
+                result.append(hex);
+            }
+            return result.toString();
+        }
     }
 }
diff --git a/appsearch/compiler/src/main/java/androidx/appsearch/compiler/CodeGenerator.java b/appsearch/compiler/src/main/java/androidx/appsearch/compiler/CodeGenerator.java
index 44cc1f0..caa2e58 100644
--- a/appsearch/compiler/src/main/java/androidx/appsearch/compiler/CodeGenerator.java
+++ b/appsearch/compiler/src/main/java/androidx/appsearch/compiler/CodeGenerator.java
@@ -25,7 +25,6 @@
 import com.squareup.javapoet.TypeName;
 import com.squareup.javapoet.TypeSpec;
 
-import java.io.File;
 import java.io.IOException;
 
 import javax.annotation.processing.ProcessingEnvironment;
@@ -62,12 +61,8 @@
         mOutputClass = createClass();
     }
 
-    public void writeToFiler() throws IOException {
-        JavaFile.builder(mOutputPackage, mOutputClass).build().writeTo(mEnv.getFiler());
-    }
-
-    public void writeToFolder(@NonNull File folder) throws IOException {
-        JavaFile.builder(mOutputPackage, mOutputClass).build().writeTo(folder);
+    public JavaFile createJavaFile() throws IOException {
+        return JavaFile.builder(mOutputPackage, mOutputClass).build();
     }
 
     /**
diff --git a/appsearch/compiler/src/main/java/androidx/appsearch/compiler/DocumentMapGenerator.java b/appsearch/compiler/src/main/java/androidx/appsearch/compiler/DocumentMapGenerator.java
new file mode 100644
index 0000000..59b2c54
--- /dev/null
+++ b/appsearch/compiler/src/main/java/androidx/appsearch/compiler/DocumentMapGenerator.java
@@ -0,0 +1,108 @@
+/*
+ * 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.appsearch.compiler;
+
+import androidx.annotation.NonNull;
+
+import com.google.auto.common.GeneratedAnnotationSpecs;
+import com.google.auto.service.AutoService;
+import com.squareup.javapoet.AnnotationSpec;
+import com.squareup.javapoet.ClassName;
+import com.squareup.javapoet.CodeBlock;
+import com.squareup.javapoet.JavaFile;
+import com.squareup.javapoet.MethodSpec;
+import com.squareup.javapoet.ParameterizedTypeName;
+import com.squareup.javapoet.TypeName;
+import com.squareup.javapoet.TypeSpec;
+
+import java.util.Arrays;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.stream.Collectors;
+
+import javax.annotation.processing.ProcessingEnvironment;
+import javax.lang.model.element.Modifier;
+
+/**
+ * A class that wraps a static method that generates a java class of
+ * {@link androidx.appsearch.app.AppSearchDocumentClassMap}.
+ */
+public class DocumentMapGenerator {
+    /**
+     * Returns the generated {@link androidx.appsearch.app.AppSearchDocumentClassMap}, based on
+     * the provided document class map.
+     *
+     * @param documentClassMap The map from schema type names to the list of the fully qualified
+     *                         names of the corresponding document classes, so that the
+     *                         {@code getMap} method of the generated class can return this map.
+     */
+    @NonNull
+    public static JavaFile generate(@NonNull ProcessingEnvironment processingEnv,
+            @NonNull String packageName, @NonNull String classSuffix,
+            @NonNull Map<String, List<String>> documentClassMap) {
+        ClassName superClassName = ClassName.get(
+                IntrospectionHelper.APPSEARCH_PKG, "AppSearchDocumentClassMap");
+        TypeSpec.Builder genClass = TypeSpec
+                .classBuilder(IntrospectionHelper.GEN_CLASS_PREFIX + "DocumentClassMap" + "_"
+                        + classSuffix)
+                .addModifiers(Modifier.PUBLIC, Modifier.FINAL)
+                .superclass(superClassName)
+                .addAnnotation(AnnotationSpec.builder(AutoService.class)
+                        .addMember("value", "$T.class", superClassName)
+                        .build());
+
+        // Add the @Generated annotation to avoid static analysis running on these files
+        GeneratedAnnotationSpecs.generatedAnnotationSpec(
+                processingEnv.getElementUtils(),
+                processingEnv.getSourceVersion(),
+                AppSearchCompiler.class
+        ).ifPresent(genClass::addAnnotation);
+
+        // The type of the map is Map<String, List<String>>.
+        TypeName returnType = ParameterizedTypeName.get(ClassName.get(Map.class),
+                ClassName.get(String.class),
+                ParameterizedTypeName.get(ClassName.get(List.class), ClassName.get(String.class)));
+
+        genClass.addMethod(MethodSpec.methodBuilder("getMap")
+                .addModifiers(Modifier.PROTECTED)
+                .returns(returnType)
+                .addAnnotation(NonNull.class)
+                .addAnnotation(Override.class)
+                .addStatement("$T result = new $T<>()", returnType,
+                        ClassName.get(HashMap.class))
+                .addCode(getMapConstructionCode(documentClassMap))
+                .addStatement("return result")
+                .build());
+
+        return JavaFile.builder(packageName, genClass.build()).build();
+    }
+
+    private static CodeBlock getMapConstructionCode(
+            @NonNull Map<String, List<String>> documentClassMap) {
+        CodeBlock.Builder mapContentBuilder = CodeBlock.builder();
+        for (Map.Entry<String, List<String>> entry : documentClassMap.entrySet()) {
+            String valueString = entry.getValue().stream().map(
+                    value -> "\"" + value + "\"").collect(Collectors.joining(", "));
+            mapContentBuilder.addStatement("result.put($S, $T.asList($L))", entry.getKey(),
+                    ClassName.get(Arrays.class), valueString);
+        }
+        return mapContentBuilder.build();
+    }
+
+    private DocumentMapGenerator() {}
+}
diff --git a/appsearch/compiler/src/test/java/androidx/appsearch/compiler/AppSearchCompilerTest.java b/appsearch/compiler/src/test/java/androidx/appsearch/compiler/AppSearchCompilerTest.java
index e14f777..e2b4532 100644
--- a/appsearch/compiler/src/test/java/androidx/appsearch/compiler/AppSearchCompilerTest.java
+++ b/appsearch/compiler/src/test/java/androidx/appsearch/compiler/AppSearchCompilerTest.java
@@ -1491,6 +1491,43 @@
 
         assertThat(compilation).succeededWithoutWarnings();
         checkEqualsGolden("AutoValue_Gift.java");
+        checkDocumentMapEqualsGolden(/* roundIndex= */0);
+        // The number of rounds that the annotation processor takes can vary from setup to setup.
+        // In this test case, AutoValue documents are processed in the second round because their
+        // generated classes are not available in the first turn.
+        checkDocumentMapEqualsGolden(/* roundIndex= */1);
+    }
+
+    @Test
+    public void testAutoValueDocumentWithNormalDocument() throws IOException {
+        Compilation compilation = compile(
+                "import com.google.auto.value.AutoValue;\n"
+                        + "import com.google.auto.value.AutoValue.*;\n"
+                        + "@Document\n"
+                        + "class Person {\n"
+                        + "  @Document.Namespace String namespace;\n"
+                        + "  @Document.Id String id;\n"
+                        + "}\n"
+                        + "@Document\n"
+                        + "@AutoValue\n"
+                        + "public abstract class Gift {\n"
+                        + "  @CopyAnnotations @Document.Id abstract String id();\n"
+                        + "  @CopyAnnotations @Document.Namespace abstract String namespace();\n"
+                        + "  @CopyAnnotations\n"
+                        + "  @Document.StringProperty abstract String property();\n"
+                        + "  public static Gift create(String id, String namespace, String"
+                        + " property) {\n"
+                        + "    return new AutoValue_Gift(id, namespace, property);\n"
+                        + "  }\n"
+                        + "}\n");
+
+        assertThat(compilation).succeededWithoutWarnings();
+        checkEqualsGolden("AutoValue_Gift.java");
+        checkDocumentMapEqualsGolden(/* roundIndex= */0);
+        // The number of rounds that the annotation processor takes can vary from setup to setup.
+        // In this test case, AutoValue documents are processed in the second round because their
+        // generated classes are not available in the first turn.
+        checkDocumentMapEqualsGolden(/* roundIndex= */1);
     }
 
     @Test
@@ -1639,6 +1676,7 @@
         checkResultContains("Gift.java", "addParentType($$__AppSearch__Parent2.SCHEMA_NAME)");
 
         checkEqualsGolden("Gift.java");
+        checkDocumentMapEqualsGolden(/* roundIndex= */0);
     }
 
     @Test
@@ -1998,6 +2036,7 @@
         checkResultContains("Gift.java", "document.getStr2()");
         checkResultContains("Gift.java", "document.getPrice()");
         checkEqualsGolden("Gift.java");
+        checkDocumentMapEqualsGolden(/* roundIndex= */0);
     }
 
     @Test
@@ -2771,6 +2810,28 @@
                 "Method cannot be used to create a document class: abstract constructor");
     }
 
+    @Test
+    public void testDocumentClassesWithDuplicatedNames() throws Exception {
+        Compilation compilation = compile(
+                "@Document(name=\"A\")\n"
+                        + "class MyClass1 {\n"
+                        + "  @Document.Namespace String namespace;\n"
+                        + "  @Document.Id String id;\n"
+                        + "}\n"
+                        + "@Document(name=\"A\")\n"
+                        + "class MyClass2 {\n"
+                        + "  @Document.Namespace String namespace;\n"
+                        + "  @Document.Id String id;\n"
+                        + "}\n"
+                        + "@Document(name=\"B\")\n"
+                        + "class MyClass3 {\n"
+                        + "  @Document.Namespace String namespace;\n"
+                        + "  @Document.Id String id;\n"
+                        + "}\n");
+        assertThat(compilation).succeededWithoutWarnings();
+        checkDocumentMapEqualsGolden(/* roundIndex= */0);
+    }
+
     private Compilation compile(String classBody) {
         return compile("Gift", classBody);
     }
@@ -2797,8 +2858,27 @@
     }
 
     private void checkEqualsGolden(String className) throws IOException {
-        // Get the expected file contents
         String goldenResPath = "goldens/" + mTestName.getMethodName() + ".JAVA";
+        File actualPackageDir = new File(mGenFilesDir, "com/example/appsearch");
+        File actualPath =
+                new File(actualPackageDir, IntrospectionHelper.GEN_CLASS_PREFIX + className);
+        checkEqualsGoldenHelper(goldenResPath, actualPath);
+    }
+
+    private void checkDocumentMapEqualsGolden(int roundIndex) throws IOException {
+        String goldenResPath =
+                "goldens/" + mTestName.getMethodName() + "DocumentMap_" + roundIndex + ".JAVA";
+        File actualPackageDir = new File(mGenFilesDir, "com/example/appsearch");
+        File[] files = actualPackageDir.listFiles((dir, name) ->
+                name.startsWith(IntrospectionHelper.GEN_CLASS_PREFIX + "DocumentClassMap")
+                        && name.endsWith("_" + roundIndex + ".java"));
+        Truth.assertThat(files).isNotNull();
+        Truth.assertThat(files).hasLength(1);
+        checkEqualsGoldenHelper(goldenResPath, files[0]);
+    }
+
+    private void checkEqualsGoldenHelper(String goldenResPath, File actualPath) throws IOException {
+        // Get the expected file contents
         String expected = "";
         try (InputStream is = getClass().getResourceAsStream(goldenResPath)) {
             if (is == null) {
@@ -2810,9 +2890,6 @@
         }
 
         // Get the actual file contents
-        File actualPackageDir = new File(mGenFilesDir, "com/example/appsearch");
-        File actualPath =
-                new File(actualPackageDir, IntrospectionHelper.GEN_CLASS_PREFIX + className);
         Truth.assertWithMessage("Path " + actualPath + " is not a file")
                 .that(actualPath.isFile()).isTrue();
         String actual = Files.asCharSource(actualPath, StandardCharsets.UTF_8).read();
diff --git a/appsearch/compiler/src/test/resources/androidx/appsearch/compiler/goldens/testAutoValueDocumentDocumentMap_0.JAVA b/appsearch/compiler/src/test/resources/androidx/appsearch/compiler/goldens/testAutoValueDocumentDocumentMap_0.JAVA
new file mode 100644
index 0000000..36b4fc9
--- /dev/null
+++ b/appsearch/compiler/src/test/resources/androidx/appsearch/compiler/goldens/testAutoValueDocumentDocumentMap_0.JAVA
@@ -0,0 +1,22 @@
+package com.example.appsearch;
+
+import androidx.annotation.NonNull;
+import androidx.appsearch.app.AppSearchDocumentClassMap;
+import com.google.auto.service.AutoService;
+import java.lang.Override;
+import java.lang.String;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import javax.annotation.processing.Generated;
+
+@AutoService(AppSearchDocumentClassMap.class)
+@Generated("androidx.appsearch.compiler.AppSearchCompiler")
+public final class $$__AppSearch__DocumentClassMap_71ecb22a3f48746c4261bd34b4ba3c2861632443de7f7c577156ec583523e7f6_0 extends AppSearchDocumentClassMap {
+  @NonNull
+  @Override
+  protected Map<String, List<String>> getMap() {
+    Map<String, List<String>> result = new HashMap<>();
+    return result;
+  }
+}
diff --git a/appsearch/compiler/src/test/resources/androidx/appsearch/compiler/goldens/testAutoValueDocumentDocumentMap_1.JAVA b/appsearch/compiler/src/test/resources/androidx/appsearch/compiler/goldens/testAutoValueDocumentDocumentMap_1.JAVA
new file mode 100644
index 0000000..4e88fc3
--- /dev/null
+++ b/appsearch/compiler/src/test/resources/androidx/appsearch/compiler/goldens/testAutoValueDocumentDocumentMap_1.JAVA
@@ -0,0 +1,24 @@
+package com.example.appsearch;
+
+import androidx.annotation.NonNull;
+import androidx.appsearch.app.AppSearchDocumentClassMap;
+import com.google.auto.service.AutoService;
+import java.lang.Override;
+import java.lang.String;
+import java.util.Arrays;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import javax.annotation.processing.Generated;
+
+@AutoService(AppSearchDocumentClassMap.class)
+@Generated("androidx.appsearch.compiler.AppSearchCompiler")
+public final class $$__AppSearch__DocumentClassMap_71ecb22a3f48746c4261bd34b4ba3c2861632443de7f7c577156ec583523e7f6_1 extends AppSearchDocumentClassMap {
+  @NonNull
+  @Override
+  protected Map<String, List<String>> getMap() {
+    Map<String, List<String>> result = new HashMap<>();
+    result.put("Gift", Arrays.asList("com.example.appsearch.Gift"));
+    return result;
+  }
+}
diff --git a/appsearch/compiler/src/test/resources/androidx/appsearch/compiler/goldens/testAutoValueDocumentWithNormalDocument.JAVA b/appsearch/compiler/src/test/resources/androidx/appsearch/compiler/goldens/testAutoValueDocumentWithNormalDocument.JAVA
new file mode 100644
index 0000000..1c28dfb
--- /dev/null
+++ b/appsearch/compiler/src/test/resources/androidx/appsearch/compiler/goldens/testAutoValueDocumentWithNormalDocument.JAVA
@@ -0,0 +1,63 @@
+package com.example.appsearch;
+
+import androidx.appsearch.app.AppSearchSchema;
+import androidx.appsearch.app.DocumentClassFactory;
+import androidx.appsearch.app.GenericDocument;
+import androidx.appsearch.exceptions.AppSearchException;
+import java.lang.Class;
+import java.lang.Override;
+import java.lang.String;
+import java.util.Collections;
+import java.util.List;
+import javax.annotation.processing.Generated;
+
+@Generated("androidx.appsearch.compiler.AppSearchCompiler")
+public final class $$__AppSearch__AutoValue_Gift implements DocumentClassFactory<Gift> {
+  public static final String SCHEMA_NAME = "Gift";
+
+  @Override
+  public String getSchemaName() {
+    return SCHEMA_NAME;
+  }
+
+  @Override
+  public AppSearchSchema getSchema() throws AppSearchException {
+    return new AppSearchSchema.Builder(SCHEMA_NAME)
+          .addProperty(new AppSearchSchema.StringPropertyConfig.Builder("property")
+            .setCardinality(AppSearchSchema.PropertyConfig.CARDINALITY_OPTIONAL)
+            .setTokenizerType(AppSearchSchema.StringPropertyConfig.TOKENIZER_TYPE_NONE)
+            .setIndexingType(AppSearchSchema.StringPropertyConfig.INDEXING_TYPE_NONE)
+            .setJoinableValueType(AppSearchSchema.StringPropertyConfig.JOINABLE_VALUE_TYPE_NONE)
+            .build())
+          .build();
+  }
+
+  @Override
+  public List<Class<?>> getDependencyDocumentClasses() throws AppSearchException {
+    return Collections.emptyList();
+  }
+
+  @Override
+  public GenericDocument toGenericDocument(Gift document) throws AppSearchException {
+    GenericDocument.Builder<?> builder =
+        new GenericDocument.Builder<>(document.namespace(), document.id(), SCHEMA_NAME);
+    String propertyCopy = document.property();
+    if (propertyCopy != null) {
+      builder.setPropertyString("property", propertyCopy);
+    }
+    return builder.build();
+  }
+
+  @Override
+  public Gift fromGenericDocument(GenericDocument genericDoc) throws AppSearchException {
+    String namespaceConv = genericDoc.getNamespace();
+    String idConv = genericDoc.getId();
+    String[] propertyCopy = genericDoc.getPropertyStringArray("property");
+    String propertyConv = null;
+    if (propertyCopy != null && propertyCopy.length != 0) {
+      propertyConv = propertyCopy[0];
+    }
+    Gift document = Gift.create(idConv, namespaceConv, propertyConv);
+    return document;
+  }
+}
diff --git a/appsearch/compiler/src/test/resources/androidx/appsearch/compiler/goldens/testAutoValueDocumentWithNormalDocumentDocumentMap_0.JAVA b/appsearch/compiler/src/test/resources/androidx/appsearch/compiler/goldens/testAutoValueDocumentWithNormalDocumentDocumentMap_0.JAVA
new file mode 100644
index 0000000..4b302b6
--- /dev/null
+++ b/appsearch/compiler/src/test/resources/androidx/appsearch/compiler/goldens/testAutoValueDocumentWithNormalDocumentDocumentMap_0.JAVA
@@ -0,0 +1,24 @@
+package com.example.appsearch;
+
+import androidx.annotation.NonNull;
+import androidx.appsearch.app.AppSearchDocumentClassMap;
+import com.google.auto.service.AutoService;
+import java.lang.Override;
+import java.lang.String;
+import java.util.Arrays;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import javax.annotation.processing.Generated;
+
+@AutoService(AppSearchDocumentClassMap.class)
+@Generated("androidx.appsearch.compiler.AppSearchCompiler")
+public final class $$__AppSearch__DocumentClassMap_8bbdfb6f96b48bfad89bc598cab2960300d30e5388d5aaa970ab2db67993d889_0 extends AppSearchDocumentClassMap {
+  @NonNull
+  @Override
+  protected Map<String, List<String>> getMap() {
+    Map<String, List<String>> result = new HashMap<>();
+    result.put("Person", Arrays.asList("com.example.appsearch.Person"));
+    return result;
+  }
+}
diff --git a/appsearch/compiler/src/test/resources/androidx/appsearch/compiler/goldens/testAutoValueDocumentWithNormalDocumentDocumentMap_1.JAVA b/appsearch/compiler/src/test/resources/androidx/appsearch/compiler/goldens/testAutoValueDocumentWithNormalDocumentDocumentMap_1.JAVA
new file mode 100644
index 0000000..4e88fc3
--- /dev/null
+++ b/appsearch/compiler/src/test/resources/androidx/appsearch/compiler/goldens/testAutoValueDocumentWithNormalDocumentDocumentMap_1.JAVA
@@ -0,0 +1,24 @@
+package com.example.appsearch;
+
+import androidx.annotation.NonNull;
+import androidx.appsearch.app.AppSearchDocumentClassMap;
+import com.google.auto.service.AutoService;
+import java.lang.Override;
+import java.lang.String;
+import java.util.Arrays;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import javax.annotation.processing.Generated;
+
+@AutoService(AppSearchDocumentClassMap.class)
+@Generated("androidx.appsearch.compiler.AppSearchCompiler")
+public final class $$__AppSearch__DocumentClassMap_71ecb22a3f48746c4261bd34b4ba3c2861632443de7f7c577156ec583523e7f6_1 extends AppSearchDocumentClassMap {
+  @NonNull
+  @Override
+  protected Map<String, List<String>> getMap() {
+    Map<String, List<String>> result = new HashMap<>();
+    result.put("Gift", Arrays.asList("com.example.appsearch.Gift"));
+    return result;
+  }
+}
diff --git a/appsearch/compiler/src/test/resources/androidx/appsearch/compiler/goldens/testDocumentClassesWithDuplicatedNamesDocumentMap_0.JAVA b/appsearch/compiler/src/test/resources/androidx/appsearch/compiler/goldens/testDocumentClassesWithDuplicatedNamesDocumentMap_0.JAVA
new file mode 100644
index 0000000..72c5bc0
--- /dev/null
+++ b/appsearch/compiler/src/test/resources/androidx/appsearch/compiler/goldens/testDocumentClassesWithDuplicatedNamesDocumentMap_0.JAVA
@@ -0,0 +1,25 @@
+package com.example.appsearch;
+
+import androidx.annotation.NonNull;
+import androidx.appsearch.app.AppSearchDocumentClassMap;
+import com.google.auto.service.AutoService;
+import java.lang.Override;
+import java.lang.String;
+import java.util.Arrays;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import javax.annotation.processing.Generated;
+
+@AutoService(AppSearchDocumentClassMap.class)
+@Generated("androidx.appsearch.compiler.AppSearchCompiler")
+public final class $$__AppSearch__DocumentClassMap_be3cf5fe3ee0964354144ba564257ea30a4560a4f416181f226daea685c5fde5_0 extends AppSearchDocumentClassMap {
+  @NonNull
+  @Override
+  protected Map<String, List<String>> getMap() {
+    Map<String, List<String>> result = new HashMap<>();
+    result.put("A", Arrays.asList("com.example.appsearch.MyClass1", "com.example.appsearch.MyClass2"));
+    result.put("B", Arrays.asList("com.example.appsearch.MyClass3"));
+    return result;
+  }
+}
diff --git a/appsearch/compiler/src/test/resources/androidx/appsearch/compiler/goldens/testInterfaceImplementingParentsDocumentMap_0.JAVA b/appsearch/compiler/src/test/resources/androidx/appsearch/compiler/goldens/testInterfaceImplementingParentsDocumentMap_0.JAVA
new file mode 100644
index 0000000..53c51e5
--- /dev/null
+++ b/appsearch/compiler/src/test/resources/androidx/appsearch/compiler/goldens/testInterfaceImplementingParentsDocumentMap_0.JAVA
@@ -0,0 +1,27 @@
+package com.example.appsearch;
+
+import androidx.annotation.NonNull;
+import androidx.appsearch.app.AppSearchDocumentClassMap;
+import com.google.auto.service.AutoService;
+import java.lang.Override;
+import java.lang.String;
+import java.util.Arrays;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import javax.annotation.processing.Generated;
+
+@AutoService(AppSearchDocumentClassMap.class)
+@Generated("androidx.appsearch.compiler.AppSearchCompiler")
+public final class $$__AppSearch__DocumentClassMap_fc605c65514dc62366bce05ca8e3a0a22e13d867acb0e63a098ee18dbd2de01e_0 extends AppSearchDocumentClassMap {
+  @NonNull
+  @Override
+  protected Map<String, List<String>> getMap() {
+    Map<String, List<String>> result = new HashMap<>();
+    result.put("Gift", Arrays.asList("com.example.appsearch.Gift"));
+    result.put("Root", Arrays.asList("com.example.appsearch.Root"));
+    result.put("Parent2", Arrays.asList("com.example.appsearch.Parent2"));
+    result.put("Parent1", Arrays.asList("com.example.appsearch.Parent1"));
+    return result;
+  }
+}
diff --git a/appsearch/compiler/src/test/resources/androidx/appsearch/compiler/goldens/testPolymorphismDocumentMap_0.JAVA b/appsearch/compiler/src/test/resources/androidx/appsearch/compiler/goldens/testPolymorphismDocumentMap_0.JAVA
new file mode 100644
index 0000000..1bfb085
--- /dev/null
+++ b/appsearch/compiler/src/test/resources/androidx/appsearch/compiler/goldens/testPolymorphismDocumentMap_0.JAVA
@@ -0,0 +1,26 @@
+package com.example.appsearch;
+
+import androidx.annotation.NonNull;
+import androidx.appsearch.app.AppSearchDocumentClassMap;
+import com.google.auto.service.AutoService;
+import java.lang.Override;
+import java.lang.String;
+import java.util.Arrays;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import javax.annotation.processing.Generated;
+
+@AutoService(AppSearchDocumentClassMap.class)
+@Generated("androidx.appsearch.compiler.AppSearchCompiler")
+public final class $$__AppSearch__DocumentClassMap_3564af6e02075934601ae45e21da1e65bb69157de5fa8378ab5beb7f70e61d84_0 extends AppSearchDocumentClassMap {
+  @NonNull
+  @Override
+  protected Map<String, List<String>> getMap() {
+    Map<String, List<String>> result = new HashMap<>();
+    result.put("Gift", Arrays.asList("com.example.appsearch.Gift"));
+    result.put("Parent2", Arrays.asList("com.example.appsearch.Parent2"));
+    result.put("Parent1", Arrays.asList("com.example.appsearch.Parent1"));
+    return result;
+  }
+}
diff --git a/benchmark/benchmark-common/src/androidTest/java/androidx/benchmark/BenchmarkStateTest.kt b/benchmark/benchmark-common/src/androidTest/java/androidx/benchmark/BenchmarkStateTest.kt
index c2ddc3a..ce079ea 100644
--- a/benchmark/benchmark-common/src/androidTest/java/androidx/benchmark/BenchmarkStateTest.kt
+++ b/benchmark/benchmark-common/src/androidTest/java/androidx/benchmark/BenchmarkStateTest.kt
@@ -17,6 +17,7 @@
 package androidx.benchmark
 
 import android.Manifest
+import android.os.Build
 import androidx.benchmark.BenchmarkState.Companion.ExperimentalExternalReport
 import androidx.test.ext.junit.runners.AndroidJUnit4
 import androidx.test.filters.FlakyTest
@@ -162,10 +163,13 @@
         val report = state.getReport()
 
         // '50' assumes we're not running in a special mode
-        // that affects repeat count (dry run, profiling)
+        // that affects repeat count (dry run)
         val expectedRepeatCount = 50 +
-            if (!simplifiedTimingOnlyMode) BenchmarkState.REPEAT_COUNT_ALLOCATION else 0
-        val expectedCount = report.warmupIterations + report.repeatIterations * expectedRepeatCount
+            if (simplifiedTimingOnlyMode) 0 else BenchmarkState.REPEAT_COUNT_ALLOCATION
+        val expectedCount = report.warmupIterations +
+            report.repeatIterations * expectedRepeatCount +
+            // method tracing phase by default only when API > 21, and simplified timing off
+            if (simplifiedTimingOnlyMode || Build.VERSION.SDK_INT <= 21) 0 else 1
         assertEquals(expectedCount, total)
 
         if (Arguments.iterations != null) {
diff --git a/benchmark/benchmark-common/src/main/java/androidx/benchmark/Arguments.kt b/benchmark/benchmark-common/src/main/java/androidx/benchmark/Arguments.kt
index 0577141..c866e25 100644
--- a/benchmark/benchmark-common/src/main/java/androidx/benchmark/Arguments.kt
+++ b/benchmark/benchmark-common/src/main/java/androidx/benchmark/Arguments.kt
@@ -16,6 +16,7 @@
 
 package androidx.benchmark
 
+import android.os.Build
 import android.os.Bundle
 import android.util.Log
 import androidx.annotation.RestrictTo
@@ -70,6 +71,7 @@
     internal val startupMode: Boolean
     internal val iterations: Int?
     internal val profiler: Profiler?
+    internal val profilerDefault: Boolean
     internal val profilerSampleFrequency: Int
     internal val profilerSampleDurationSeconds: Long
     internal val thermalThrottleSleepDurationSeconds: Long
@@ -84,9 +86,18 @@
     private fun Bundle.getBenchmarkArgument(key: String, defaultValue: String? = null) =
         getString(prefix + key, defaultValue)
 
-    private fun Bundle.getProfiler(outputIsEnabled: Boolean): Profiler? {
+    private fun Bundle.getProfiler(outputIsEnabled: Boolean): Pair<Profiler?, Boolean> {
         val argumentName = "profiling.mode"
-        val argumentValue = getBenchmarkArgument(argumentName, "")
+        val argumentValue = getBenchmarkArgument(argumentName, "DEFAULT_VAL")
+        if (argumentValue == "DEFAULT_VAL") {
+            return if (Build.VERSION.SDK_INT > 21) {
+                MethodTracing to true
+            } else {
+                // Method tracing can corrupt the stack on API 21, see b/300658578
+                null to true
+            }
+        }
+
         val profiler = Profiler.getByName(argumentValue)
         if (profiler == null &&
             argumentValue.isNotEmpty() &&
@@ -95,13 +106,13 @@
             argumentValue.trim().lowercase() != "none"
         ) {
             error = "Could not parse $prefix$argumentName=$argumentValue"
-            return null
+            return null to false
         }
         if (profiler?.requiresLibraryOutputDir == true && !outputIsEnabled) {
             error = "Output is not enabled, so cannot profile with mode $argumentValue"
-            return null
+            return null to false
         }
-        return profiler
+        return profiler to false
     }
 
     // note: initialization may happen at any time
@@ -165,7 +176,9 @@
         enableCompilation =
             arguments.getBenchmarkArgument("compilation.enabled")?.toBoolean() ?: !dryRunMode
 
-        profiler = arguments.getProfiler(outputEnable)
+        val profilerState = arguments.getProfiler(outputEnable)
+        profiler = profilerState.first
+        profilerDefault = profilerState.second
         profilerSampleFrequency =
             arguments.getBenchmarkArgument("profiling.sampleFrequency")?.ifBlank { null }
                 ?.toInt()
@@ -213,11 +226,11 @@
             arguments.getBenchmarkArgument("startupProfiles.enable")?.toBoolean() ?: true
     }
 
-    fun methodTracingEnabled(): Boolean {
+    fun macrobenchMethodTracingEnabled(): Boolean {
         return when {
             dryRunMode -> false
-            profiler == MethodTracing -> true
-            else -> false
+            profilerDefault -> false // don't enable tracing by default in macrobench
+            else -> profiler == MethodTracing
         }
     }
 
diff --git a/benchmark/benchmark-macro/src/main/java/androidx/benchmark/macro/Macrobenchmark.kt b/benchmark/benchmark-macro/src/main/java/androidx/benchmark/macro/Macrobenchmark.kt
index f3214ed..b5614e4 100644
--- a/benchmark/benchmark-macro/src/main/java/androidx/benchmark/macro/Macrobenchmark.kt
+++ b/benchmark/benchmark-macro/src/main/java/androidx/benchmark/macro/Macrobenchmark.kt
@@ -150,7 +150,7 @@
                 """.trimIndent()
             ),
             conditionalError(
-                hasError = Arguments.methodTracingEnabled(),
+                hasError = Arguments.macrobenchMethodTracingEnabled(),
                 id = "METHOD-TRACING-ENABLED",
                 summary = "Method tracing is enabled during a Macrobenchmark",
                 message = """
@@ -207,7 +207,7 @@
 
     val startTime = System.nanoTime()
     // Ensure method tracing is explicitly enabled and that we are not running in dry run mode.
-    val launchWithMethodTracing = Arguments.methodTracingEnabled()
+    val launchWithMethodTracing = Arguments.macrobenchMethodTracingEnabled()
     val scope = MacrobenchmarkScope(
         packageName,
         launchWithClearTask = launchWithClearTask
diff --git a/bluetooth/bluetooth/src/main/java/androidx/bluetooth/BluetoothLe.kt b/bluetooth/bluetooth/src/main/java/androidx/bluetooth/BluetoothLe.kt
index ecb8606..1688a27 100644
--- a/bluetooth/bluetooth/src/main/java/androidx/bluetooth/BluetoothLe.kt
+++ b/bluetooth/bluetooth/src/main/java/androidx/bluetooth/BluetoothLe.kt
@@ -367,7 +367,7 @@
          * @param characteristic the updated characteristic
          * @param value the new value of the characteristic
          *
-         * @return `true` if the notification sent successfully
+         * @return `true` if the notification sent successfully, otherwise `false`
          */
         suspend fun notify(characteristic: GattCharacteristic, value: ByteArray): Boolean
     }
diff --git a/bluetooth/bluetooth/src/main/java/androidx/bluetooth/GattServerRequest.kt b/bluetooth/bluetooth/src/main/java/androidx/bluetooth/GattServerRequest.kt
index 5419aaa..9b5ebce 100644
--- a/bluetooth/bluetooth/src/main/java/androidx/bluetooth/GattServerRequest.kt
+++ b/bluetooth/bluetooth/src/main/java/androidx/bluetooth/GattServerRequest.kt
@@ -76,6 +76,8 @@
     /**
      * Represents a request to write characteristics.
      *
+     * If two or more writes are requested, they are expected to be written in order.
+     *
      * @property parts a list of write request parts
      */
     class WriteCharacteristics internal constructor(
@@ -104,6 +106,13 @@
         /**
          * A part of write requests.
          *
+         * It represents a partial write request such that
+         * [value] is to be written to a part of [characteristic] based on [offset].
+         * <p>
+         * For example, if the [offset] is 2, the first byte of [value] should be written to
+         * the third byte of the [characteristic], and the second byte of [value] should be
+         * written to the fourth byte of the [characteristic] and so on.
+         *
          * @property characteristic a characteristic to write
          * @property offset an offset of the first octet to be written
          * @property value a value to be written
diff --git a/bluetooth/integration-tests/testapp/build.gradle b/bluetooth/integration-tests/testapp/build.gradle
index cc88bde..b4922bd 100644
--- a/bluetooth/integration-tests/testapp/build.gradle
+++ b/bluetooth/integration-tests/testapp/build.gradle
@@ -49,13 +49,13 @@
     implementation("androidx.activity:activity-ktx:1.7.2")
     implementation("androidx.appcompat:appcompat:1.6.1")
     implementation(libs.constraintLayout)
-    implementation("androidx.core:core-ktx:1.10.1")
-    implementation("androidx.fragment:fragment-ktx:1.6.0")
-    implementation("androidx.lifecycle:lifecycle-livedata-ktx:2.6.1")
-    implementation("androidx.lifecycle:lifecycle-viewmodel-ktx:2.6.1")
-    implementation("androidx.navigation:navigation-fragment-ktx:2.6.0")
-    implementation("androidx.navigation:navigation-ui-ktx:2.6.0")
-    implementation("androidx.recyclerview:recyclerview:1.3.0")
+    implementation("androidx.core:core-ktx:1.12.0")
+    implementation("androidx.fragment:fragment-ktx:1.6.1")
+    implementation("androidx.lifecycle:lifecycle-livedata-ktx:2.6.2")
+    implementation("androidx.lifecycle:lifecycle-viewmodel-ktx:2.6.2")
+    implementation("androidx.navigation:navigation-fragment-ktx:2.7.3")
+    implementation("androidx.navigation:navigation-ui-ktx:2.7.3")
+    implementation("androidx.recyclerview:recyclerview:1.3.1")
 
     implementation(libs.material)
 
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/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/browser/browser/api/api_lint.ignore b/browser/browser/api/api_lint.ignore
index bec6b20..4135ef4 100644
--- a/browser/browser/api/api_lint.ignore
+++ b/browser/browser/api/api_lint.ignore
@@ -39,8 +39,6 @@
     Inconsistent extra value; expected `androidx.browser.customtabs.extra.SEND_TO_EXTERNAL_DEFAULT_HANDLER`, was `android.support.customtabs.extra.SEND_TO_EXTERNAL_HANDLER`
 ActionValue: androidx.browser.customtabs.CustomTabsIntent#EXTRA_SESSION:
     Inconsistent extra value; expected `androidx.browser.customtabs.extra.SESSION`, was `android.support.customtabs.extra.SESSION`
-ActionValue: androidx.browser.customtabs.CustomTabsIntent#EXTRA_SHOW_ON_TOOLBAR:
-    Inconsistent extra value; expected `androidx.browser.customtabs.extra.SHOW_ON_TOOLBAR`, was `android.support.customtabs.customaction.SHOW_ON_TOOLBAR`
 ActionValue: androidx.browser.customtabs.CustomTabsIntent#EXTRA_TINT_ACTION_BUTTON:
     Inconsistent extra value; expected `androidx.browser.customtabs.extra.TINT_ACTION_BUTTON`, was `android.support.customtabs.extra.TINT_ACTION_BUTTON`
 ActionValue: androidx.browser.customtabs.CustomTabsIntent#EXTRA_TITLE_VISIBILITY_STATE:
diff --git a/browser/browser/api/current.txt b/browser/browser/api/current.txt
index 02dd082..fd57d8a 100644
--- a/browser/browser/api/current.txt
+++ b/browser/browser/api/current.txt
@@ -111,7 +111,6 @@
     method public static boolean isBookmarksButtonEnabled(android.content.Intent);
     method public static boolean isDownloadButtonEnabled(android.content.Intent);
     method public static boolean isSendToExternalDefaultHandlerEnabled(android.content.Intent);
-    method public static boolean isShowOnToolbarEnabled(android.content.Intent);
     method public void launchUrl(android.content.Context, android.net.Uri);
     method public static android.content.Intent setAlwaysUseBrowserUI(android.content.Intent?);
     method public static boolean shouldAlwaysUseBrowserUI(android.content.Intent);
@@ -150,7 +149,6 @@
     field public static final String EXTRA_SEND_TO_EXTERNAL_DEFAULT_HANDLER = "android.support.customtabs.extra.SEND_TO_EXTERNAL_HANDLER";
     field public static final String EXTRA_SESSION = "android.support.customtabs.extra.SESSION";
     field public static final String EXTRA_SHARE_STATE = "androidx.browser.customtabs.extra.SHARE_STATE";
-    field public static final String EXTRA_SHOW_ON_TOOLBAR = "android.support.customtabs.customaction.SHOW_ON_TOOLBAR";
     field public static final String EXTRA_TINT_ACTION_BUTTON = "android.support.customtabs.extra.TINT_ACTION_BUTTON";
     field public static final String EXTRA_TITLE_VISIBILITY_STATE = "android.support.customtabs.extra.TITLE_VISIBILITY";
     field public static final String EXTRA_TOOLBAR_COLOR = "android.support.customtabs.extra.TOOLBAR_COLOR";
@@ -204,7 +202,6 @@
     method public androidx.browser.customtabs.CustomTabsIntent.Builder setSession(androidx.browser.customtabs.CustomTabsSession);
     method public androidx.browser.customtabs.CustomTabsIntent.Builder setShareIdentityEnabled(boolean);
     method public androidx.browser.customtabs.CustomTabsIntent.Builder setShareState(int);
-    method public androidx.browser.customtabs.CustomTabsIntent.Builder setShowOnToolbarEnabled(boolean);
     method public androidx.browser.customtabs.CustomTabsIntent.Builder setShowTitle(boolean);
     method public androidx.browser.customtabs.CustomTabsIntent.Builder setStartAnimations(android.content.Context, @AnimRes int, @AnimRes int);
     method @Deprecated public androidx.browser.customtabs.CustomTabsIntent.Builder setToolbarColor(@ColorInt int);
diff --git a/browser/browser/api/restricted_current.txt b/browser/browser/api/restricted_current.txt
index 1e7b718..f59bc7c1 100644
--- a/browser/browser/api/restricted_current.txt
+++ b/browser/browser/api/restricted_current.txt
@@ -122,7 +122,6 @@
     method public static boolean isBookmarksButtonEnabled(android.content.Intent);
     method public static boolean isDownloadButtonEnabled(android.content.Intent);
     method public static boolean isSendToExternalDefaultHandlerEnabled(android.content.Intent);
-    method public static boolean isShowOnToolbarEnabled(android.content.Intent);
     method public void launchUrl(android.content.Context, android.net.Uri);
     method public static android.content.Intent setAlwaysUseBrowserUI(android.content.Intent?);
     method public static boolean shouldAlwaysUseBrowserUI(android.content.Intent);
@@ -161,7 +160,6 @@
     field public static final String EXTRA_SEND_TO_EXTERNAL_DEFAULT_HANDLER = "android.support.customtabs.extra.SEND_TO_EXTERNAL_HANDLER";
     field public static final String EXTRA_SESSION = "android.support.customtabs.extra.SESSION";
     field public static final String EXTRA_SHARE_STATE = "androidx.browser.customtabs.extra.SHARE_STATE";
-    field public static final String EXTRA_SHOW_ON_TOOLBAR = "android.support.customtabs.customaction.SHOW_ON_TOOLBAR";
     field public static final String EXTRA_TINT_ACTION_BUTTON = "android.support.customtabs.extra.TINT_ACTION_BUTTON";
     field public static final String EXTRA_TITLE_VISIBILITY_STATE = "android.support.customtabs.extra.TITLE_VISIBILITY";
     field public static final String EXTRA_TOOLBAR_COLOR = "android.support.customtabs.extra.TOOLBAR_COLOR";
@@ -215,7 +213,6 @@
     method public androidx.browser.customtabs.CustomTabsIntent.Builder setSession(androidx.browser.customtabs.CustomTabsSession);
     method public androidx.browser.customtabs.CustomTabsIntent.Builder setShareIdentityEnabled(boolean);
     method public androidx.browser.customtabs.CustomTabsIntent.Builder setShareState(int);
-    method public androidx.browser.customtabs.CustomTabsIntent.Builder setShowOnToolbarEnabled(boolean);
     method public androidx.browser.customtabs.CustomTabsIntent.Builder setShowTitle(boolean);
     method public androidx.browser.customtabs.CustomTabsIntent.Builder setStartAnimations(android.content.Context, @AnimRes int, @AnimRes int);
     method @Deprecated public androidx.browser.customtabs.CustomTabsIntent.Builder setToolbarColor(@ColorInt int);
diff --git a/browser/browser/src/main/java/androidx/browser/customtabs/CustomTabsIntent.java b/browser/browser/src/main/java/androidx/browser/customtabs/CustomTabsIntent.java
index 877a2f5..f1e50ed 100644
--- a/browser/browser/src/main/java/androidx/browser/customtabs/CustomTabsIntent.java
+++ b/browser/browser/src/main/java/androidx/browser/customtabs/CustomTabsIntent.java
@@ -192,14 +192,6 @@
             "androidx.browser.customtabs.extra.DISABLE_BACKGROUND_INTERACTION";
 
     /**
-     * Extra that enables the client to add an additional action button to the toolbar.
-     * If the bitmap icon does not fit on the toolbar then the action button will be
-     * added to the secondary toolbar.
-     */
-    public static final String EXTRA_SHOW_ON_TOOLBAR =
-            "android.support.customtabs.customaction.SHOW_ON_TOOLBAR";
-
-    /**
      * Extra that specifies the {@link PendingIntent} to be sent when the user swipes up from
      * the secondary (bottom) toolbar.
      */
@@ -1182,20 +1174,6 @@
         }
 
         /**
-         * Enables the client to add an additional action button to the toolbar. If the bitmap
-         * icon does not fit on the toolbar then the action button will be added to the secondary
-         * toolbar.
-         *
-         * @param enabled Whether the additional actions can be added to the toolbar.
-         * @see CustomTabsIntent#EXTRA_SHOW_ON_TOOLBAR
-         */
-        @NonNull
-        public Builder setShowOnToolbarEnabled(boolean enabled) {
-            mIntent.putExtra(EXTRA_SHOW_ON_TOOLBAR, enabled);
-            return this;
-        }
-
-        /**
          * Allow Custom Tabs to obtain the caller's identity i.e. package name.
          * @param enabled Whether the identity sharing is enabled.
          */
@@ -1463,14 +1441,6 @@
     }
 
     /**
-     * @return Whether the additional actions can be added to the toolbar.
-     * @see CustomTabsIntent#EXTRA_SHOW_ON_TOOLBAR
-     */
-    public static boolean isShowOnToolbarEnabled(@NonNull Intent intent) {
-        return intent.getBooleanExtra(EXTRA_SHOW_ON_TOOLBAR, false);
-    }
-
-    /**
      * @return The {@link PendingIntent} that will be sent when the user swipes up
      *     from the secondary toolbar.
      * @see CustomTabsIntent#EXTRA_SECONDARY_TOOLBAR_SWIPE_UP_GESTURE
diff --git a/browser/browser/src/test/java/androidx/browser/customtabs/CustomTabsIntentTest.java b/browser/browser/src/test/java/androidx/browser/customtabs/CustomTabsIntentTest.java
index aee0f19..4978624 100644
--- a/browser/browser/src/test/java/androidx/browser/customtabs/CustomTabsIntentTest.java
+++ b/browser/browser/src/test/java/androidx/browser/customtabs/CustomTabsIntentTest.java
@@ -599,19 +599,6 @@
         assertFalse(CustomTabsIntent.isBackgroundInteractionEnabled(intent));
     }
 
-    @Test
-    public void testShowOnToolbar() {
-        Intent intent = new CustomTabsIntent.Builder().build().intent;
-        assertFalse(CustomTabsIntent.isShowOnToolbarEnabled(intent));
-
-        intent = new CustomTabsIntent.Builder().setShowOnToolbarEnabled(false).build().intent;
-        assertFalse(CustomTabsIntent.isShowOnToolbarEnabled(intent));
-
-        // The extra is set to true only when explicitly called to enable it.
-        intent = new CustomTabsIntent.Builder().setShowOnToolbarEnabled(true).build().intent;
-        assertTrue(CustomTabsIntent.isShowOnToolbarEnabled(intent));
-    }
-
     @Config(minSdk = Build.VERSION_CODES.N)
     @Test
     public void testTranslateLocale() {
diff --git a/buildSrc-tests/src/test/java/androidx/build/testConfiguration/AndroidTestConfigBuilderTest.kt b/buildSrc-tests/src/test/java/androidx/build/testConfiguration/AndroidTestConfigBuilderTest.kt
index 4efa132..9f3be62 100644
--- a/buildSrc-tests/src/test/java/androidx/build/testConfiguration/AndroidTestConfigBuilderTest.kt
+++ b/buildSrc-tests/src/test/java/androidx/build/testConfiguration/AndroidTestConfigBuilderTest.kt
@@ -360,7 +360,6 @@
     <option name="instrumentation-arg" key="notAnnotation" value="androidx.test.filters.FlakyTest" />
     <option name="instrumentation-arg" key="listener" value="androidx.benchmark.junit4.InstrumentationResultsRunListener" />
     <option name="instrumentation-arg" key="listener" value="androidx.benchmark.junit4.SideEffectRunListener" />
-    <option name="instrumentation-arg" key="androidx.benchmark.profiling.mode" value="MethodTracing" />
     <include name="google/unbundled/common/setup" />
     <target_preparer class="com.android.tradefed.targetprep.suite.SuiteApkInstaller">
     <option name="cleanup-apks" value="true" />
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..15ec17e 100644
--- a/buildSrc/private/src/main/kotlin/androidx/build/dackka/DackkaTask.kt
+++ b/buildSrc/private/src/main/kotlin/androidx/build/dackka/DackkaTask.kt
@@ -102,6 +102,8 @@
 
     @Input lateinit var hidingAnnotations: List<String>
 
+    @Input lateinit var nullabilityAnnotations: List<String>
+
     @InputFiles
     @PathSensitive(PathSensitivity.NONE)
     lateinit var versionMetadataFiles: Provider<List<File>>
@@ -154,8 +156,7 @@
                             sourceLinks = emptyList()
                         )
                     }
-                }
-                ?: emptyList()
+                } ?: emptyList()
         return listOf(
             DokkaInputModels.SourceSet(
                 id = sourceSetIdForSourceSet("main"),
@@ -215,7 +216,8 @@
                                         "annotationsNotToDisplayKotlin" to
                                             annotationsNotToDisplayKotlin,
                                         "hidingAnnotations" to hidingAnnotations,
-                                        "versionMetadataFilenames" to checkVersionMetadataFiles()
+                                        "versionMetadataFilenames" to checkVersionMetadataFiles(),
+                                        "validNullabilityAnnotations" to nullabilityAnnotations,
                                     )
                                 )
                         )
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..05265d5 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)
@@ -524,6 +525,7 @@
                     annotationsNotToDisplayJava = hiddenAnnotationsJava
                     annotationsNotToDisplayKotlin = hiddenAnnotationsKotlin
                     hidingAnnotations = annotationsToHideApis
+                    nullabilityAnnotations = validNullabilityAnnotations
                     versionMetadataFiles =
                         versionMetadataConfiguration.incoming.artifacts.resolvedArtifacts.map {
                             it.map { it.file }
@@ -699,6 +701,13 @@
         "java.lang.Override"
     )
 
+val validNullabilityAnnotations = listOf(
+    "androidx.annotation.Nullable", "android.annotation.Nullable",
+    "androidx.annotation.NonNull", "android.annotation.NonNull",
+    // Required by media3
+    "org.checkerframework.checker.nullness.qual.Nullable",
+)
+
 // Annotations which should not be displayed in the Kotlin docs, in addition to hiddenAnnotations
 private val hiddenAnnotationsKotlin: List<String> = listOf("kotlin.ExtensionFunctionType")
 
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 3a3226e..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"
@@ -331,7 +335,6 @@
     """
     <option name="instrumentation-arg" key="listener" value="androidx.benchmark.junit4.InstrumentationResultsRunListener" />
     <option name="instrumentation-arg" key="listener" value="androidx.benchmark.junit4.SideEffectRunListener" />
-    <option name="instrumentation-arg" key="androidx.benchmark.profiling.mode" value="MethodTracing" />
 
 """
         .trimIndent()
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 6fd951c..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
@@ -20,6 +20,8 @@
 
 import android.annotation.SuppressLint
 import android.hardware.camera2.CameraCharacteristics
+import android.hardware.camera2.CameraCharacteristics.CONTROL_VIDEO_STABILIZATION_MODE_ON
+import android.hardware.camera2.CameraCharacteristics.CONTROL_VIDEO_STABILIZATION_MODE_PREVIEW_STABILIZATION
 import android.hardware.camera2.CameraMetadata
 import android.hardware.camera2.params.DynamicRangeProfiles
 import android.os.Build
@@ -211,11 +213,19 @@
     }
 
     override fun isPreviewStabilizationSupported(): Boolean {
-        return false
+        val availableVideoStabilizationModes = cameraProperties.metadata[
+            CameraCharacteristics.CONTROL_AVAILABLE_VIDEO_STABILIZATION_MODES]
+        return availableVideoStabilizationModes != null &&
+            availableVideoStabilizationModes.contains(
+            CONTROL_VIDEO_STABILIZATION_MODE_PREVIEW_STABILIZATION)
     }
 
     override fun isVideoStabilizationSupported(): Boolean {
-        return false
+        val availableVideoStabilizationModes = cameraProperties.metadata[
+            CameraCharacteristics.CONTROL_AVAILABLE_VIDEO_STABILIZATION_MODES]
+        return availableVideoStabilizationModes != null &&
+            availableVideoStabilizationModes.contains(
+            CONTROL_VIDEO_STABILIZATION_MODE_ON)
     }
 
     private fun profileSetToDynamicRangeSet(profileSet: Set<Long>): Set<DynamicRange> {
diff --git a/camera/camera-camera2-pipe-integration/src/main/java/androidx/camera/camera2/pipe/integration/adapter/CameraSurfaceAdapter.kt b/camera/camera-camera2-pipe-integration/src/main/java/androidx/camera/camera2/pipe/integration/adapter/CameraSurfaceAdapter.kt
index 72d3930..4cd28b4 100644
--- a/camera/camera-camera2-pipe-integration/src/main/java/androidx/camera/camera2/pipe/integration/adapter/CameraSurfaceAdapter.kt
+++ b/camera/camera-camera2-pipe-integration/src/main/java/androidx/camera/camera2/pipe/integration/adapter/CameraSurfaceAdapter.kt
@@ -146,7 +146,8 @@
         return supportedSurfaceCombinationMap[cameraId]!!.getSuggestedStreamSpecifications(
             cameraMode,
             existingSurfaces,
-            newUseCaseConfigsSupportedSizeMap
+            newUseCaseConfigsSupportedSizeMap,
+            isPreviewStabilizationOn
         )
     }
 }
diff --git a/camera/camera-camera2-pipe-integration/src/main/java/androidx/camera/camera2/pipe/integration/adapter/CameraUseCaseAdapter.kt b/camera/camera-camera2-pipe-integration/src/main/java/androidx/camera/camera2/pipe/integration/adapter/CameraUseCaseAdapter.kt
index 7d1c04f..a83161c 100644
--- a/camera/camera-camera2-pipe-integration/src/main/java/androidx/camera/camera2/pipe/integration/adapter/CameraUseCaseAdapter.kt
+++ b/camera/camera-camera2-pipe-integration/src/main/java/androidx/camera/camera2/pipe/integration/adapter/CameraUseCaseAdapter.kt
@@ -256,6 +256,9 @@
                 builder.addCameraCaptureCallback(CaptureCallbackContainer.create(it))
             }
 
+            builder.setPreviewStabilization(config.previewStabilizationMode)
+            builder.setVideoStabilization(config.videoStabilizationMode)
+
             // Copy extended Camera2 configurations
             val extendedConfig = MutableOptionsBundle.create().apply {
                 camera2Config.getPhysicalCameraId()?.let { physicalCameraId ->
diff --git a/camera/camera-camera2-pipe-integration/src/main/java/androidx/camera/camera2/pipe/integration/adapter/GuaranteedConfigurationsUtil.kt b/camera/camera-camera2-pipe-integration/src/main/java/androidx/camera/camera2/pipe/integration/adapter/GuaranteedConfigurationsUtil.kt
index 33fac2e..c0fe1de 100644
--- a/camera/camera-camera2-pipe-integration/src/main/java/androidx/camera/camera2/pipe/integration/adapter/GuaranteedConfigurationsUtil.kt
+++ b/camera/camera-camera2-pipe-integration/src/main/java/androidx/camera/camera2/pipe/integration/adapter/GuaranteedConfigurationsUtil.kt
@@ -769,9 +769,92 @@
     }
 
     @JvmStatic
-    fun generateConcurrentSupportedCombinationList(): List<SurfaceCombination> {
-        val surfaceCombinations: MutableList<SurfaceCombination> = arrayListOf()
-        surfaceCombinations.addAll(getConcurrentSupportedCombinationList())
-        return surfaceCombinations
+    fun getPreviewStabilizationSupportedCombinationList(): List<SurfaceCombination> {
+        val combinationList: MutableList<SurfaceCombination> = ArrayList()
+        // (PRIV, s1440p)
+        SurfaceCombination().apply {
+            addSurfaceConfig(
+                SurfaceConfig.create(ConfigType.PRIV, ConfigSize.s1440p)
+            )
+        }.also { combinationList.add(it) }
+        // (YUV, s1440p)
+        SurfaceCombination().apply {
+            addSurfaceConfig(
+                SurfaceConfig.create(ConfigType.YUV, ConfigSize.s1440p)
+            )
+        }.also { combinationList.add(it) }
+        // (PRIV, s1440p) + (JPEG, MAXIMUM)
+        SurfaceCombination().apply {
+            addSurfaceConfig(
+                SurfaceConfig.create(ConfigType.PRIV, ConfigSize.s1440p)
+            )
+            addSurfaceConfig(
+                SurfaceConfig.create(ConfigType.JPEG, ConfigSize.MAXIMUM)
+            )
+        }.also { combinationList.add(it) }
+        // (YUV, s1440p) + (JPEG, MAXIMUM)
+        SurfaceCombination().apply {
+            addSurfaceConfig(
+                SurfaceConfig.create(ConfigType.YUV, ConfigSize.s1440p)
+            )
+            addSurfaceConfig(
+                SurfaceConfig.create(ConfigType.JPEG, ConfigSize.MAXIMUM)
+            )
+        }.also { combinationList.add(it) }
+        // (PRIV, s1440p) + (YUV, MAXIMUM)
+        SurfaceCombination().apply {
+            addSurfaceConfig(
+                SurfaceConfig.create(ConfigType.PRIV, ConfigSize.s1440p)
+            )
+            addSurfaceConfig(
+                SurfaceConfig.create(ConfigType.YUV, ConfigSize.MAXIMUM)
+            )
+        }.also { combinationList.add(it) }
+        // (YUV, s1440p) + (YUV, MAXIMUM)
+        SurfaceCombination().apply {
+            addSurfaceConfig(
+                SurfaceConfig.create(ConfigType.YUV, ConfigSize.s1440p)
+            )
+            addSurfaceConfig(
+                SurfaceConfig.create(ConfigType.YUV, ConfigSize.MAXIMUM)
+            )
+        }.also { combinationList.add(it) }
+        // (PRIV, PREVIEW) + (PRIV, s1440)
+        SurfaceCombination().apply {
+            addSurfaceConfig(
+                SurfaceConfig.create(ConfigType.PRIV, ConfigSize.PREVIEW)
+            )
+            addSurfaceConfig(
+                SurfaceConfig.create(ConfigType.PRIV, ConfigSize.s1440p)
+            )
+        }.also { combinationList.add(it) }
+        // (YUV, PREVIEW) + (PRIV, s1440)
+        SurfaceCombination().apply {
+            addSurfaceConfig(
+                SurfaceConfig.create(ConfigType.YUV, ConfigSize.PREVIEW)
+            )
+            addSurfaceConfig(
+                SurfaceConfig.create(ConfigType.PRIV, ConfigSize.s1440p)
+            )
+        }.also { combinationList.add(it) }
+        // (PRIV, PREVIEW) + (YUV, s1440)
+        SurfaceCombination().apply {
+            addSurfaceConfig(
+                SurfaceConfig.create(ConfigType.PRIV, ConfigSize.PREVIEW)
+            )
+            addSurfaceConfig(
+                SurfaceConfig.create(ConfigType.YUV, ConfigSize.s1440p)
+            )
+        }.also { combinationList.add(it) }
+        // (YUV, PREVIEW) + (YUV, s1440)
+        SurfaceCombination().apply {
+            addSurfaceConfig(
+                SurfaceConfig.create(ConfigType.YUV, ConfigSize.PREVIEW)
+            )
+            addSurfaceConfig(
+                SurfaceConfig.create(ConfigType.YUV, ConfigSize.s1440p)
+            )
+        }.also { combinationList.add(it) }
+        return combinationList
     }
 }
diff --git a/camera/camera-camera2-pipe-integration/src/main/java/androidx/camera/camera2/pipe/integration/adapter/SupportedSurfaceCombination.kt b/camera/camera-camera2-pipe-integration/src/main/java/androidx/camera/camera2/pipe/integration/adapter/SupportedSurfaceCombination.kt
index 2122ec2..63c187f 100644
--- a/camera/camera-camera2-pipe-integration/src/main/java/androidx/camera/camera2/pipe/integration/adapter/SupportedSurfaceCombination.kt
+++ b/camera/camera-camera2-pipe-integration/src/main/java/androidx/camera/camera2/pipe/integration/adapter/SupportedSurfaceCombination.kt
@@ -85,9 +85,14 @@
     private val hardwareLevel =
         cameraMetadata[CameraCharacteristics.INFO_SUPPORTED_HARDWARE_LEVEL]
             ?: CameraCharacteristics.INFO_SUPPORTED_HARDWARE_LEVEL_LEGACY
+    private val availableStabilizationMode =
+        cameraMetadata[CameraCharacteristics.CONTROL_AVAILABLE_VIDEO_STABILIZATION_MODES]
+            ?: CameraCharacteristics.CONTROL_AVAILABLE_VIDEO_STABILIZATION_MODES
     private val concurrentSurfaceCombinations: MutableList<SurfaceCombination> = mutableListOf()
     private val surfaceCombinations: MutableList<SurfaceCombination> = mutableListOf()
     private val ultraHighSurfaceCombinations: MutableList<SurfaceCombination> = mutableListOf()
+    private val previewStabilizationSurfaceCombinations: MutableList<SurfaceCombination> =
+        mutableListOf()
     private val featureSettingsToSupportedCombinationsMap:
         MutableMap<FeatureSettings, List<SurfaceCombination>> = mutableMapOf()
     private val surfaceCombinations10Bit: MutableList<SurfaceCombination> = mutableListOf()
@@ -95,6 +100,7 @@
     private var isBurstCaptureSupported = false
     private var isConcurrentCameraModeSupported = false
     private var isUltraHighResolutionSensorSupported = false
+    private var isPreviewStabilizationSupported = false
     internal lateinit var surfaceSizeDefinition: SurfaceSizeDefinition
     private val surfaceSizeDefinitionFormats = mutableListOf<Int>()
     private val streamConfigurationMapCompat = getStreamConfigurationMapCompat()
@@ -120,6 +126,10 @@
         if (dynamicRangeResolver.is10BitDynamicRangeSupported()) {
             generate10BitSupportedCombinationList()
         }
+
+        if (isPreviewStabilizationSupported) {
+            generatePreviewStabilizationSupportedCombinationList()
+        }
         generateSurfaceSizeDefinition()
     }
 
@@ -162,7 +172,14 @@
                     supportedSurfaceCombinations.addAll(surfaceCombinations)
                 }
 
-                else -> supportedSurfaceCombinations.addAll(surfaceCombinations)
+                else -> {
+                    supportedSurfaceCombinations.addAll(
+                        if (featureSettings.isPreviewStabilizationOn)
+                            previewStabilizationSurfaceCombinations
+                        else
+                            surfaceCombinations
+                    )
+                }
             }
         } else if (featureSettings.requiredMaxBitDepth == DynamicRange.BIT_DEPTH_10_BIT) {
             // For 10-bit outputs, only the default camera mode is currently supported.
@@ -200,6 +217,7 @@
      * @param attachedSurfaces  the existing surfaces.
      * @param newUseCaseConfigsSupportedSizeMap newly added UseCaseConfig to supported output sizes
      * map.
+     * @param isPreviewStabilizationOn whether the preview stabilization is enabled.
      * @return the suggested stream specs, which is a mapping from UseCaseConfig to the suggested
      * stream specification.
      * @throws IllegalArgumentException if the suggested solution for newUseCaseConfigs cannot be
@@ -208,7 +226,8 @@
     fun getSuggestedStreamSpecifications(
         cameraMode: Int,
         attachedSurfaces: List<AttachedSurfaceInfo>,
-        newUseCaseConfigsSupportedSizeMap: Map<UseCaseConfig<*>, List<Size>>
+        newUseCaseConfigsSupportedSizeMap: Map<UseCaseConfig<*>, List<Size>>,
+        isPreviewStabilizationOn: Boolean = false
     ): Pair<Map<UseCaseConfig<*>, StreamSpec>, Map<AttachedSurfaceInfo, StreamSpec>> {
         // Refresh Preview Size based on current display configurations.
         refreshPreviewSize()
@@ -225,7 +244,8 @@
             newUseCaseConfigs, useCasesPriorityOrder
         )
         val requiredMaxBitDepth: Int = getRequiredMaxBitDepth(resolvedDynamicRanges)
-        val featureSettings = FeatureSettings(cameraMode, requiredMaxBitDepth)
+        val featureSettings = FeatureSettings(cameraMode, requiredMaxBitDepth,
+            isPreviewStabilizationOn)
         require(
             !(cameraMode != CameraMode.DEFAULT &&
                 requiredMaxBitDepth == DynamicRange.BIT_DEPTH_10_BIT)
@@ -818,6 +838,16 @@
                     .REQUEST_AVAILABLE_CAPABILITIES_ULTRA_HIGH_RESOLUTION_SENSOR
             )
         }
+
+        // Preview Stabilization
+        val availablePreviewStabilizationModes: IntArray? =
+            cameraMetadata.get<IntArray>(
+                CameraCharacteristics.CONTROL_AVAILABLE_VIDEO_STABILIZATION_MODES)
+
+        availablePreviewStabilizationModes?.apply {
+            isPreviewStabilizationSupported = contains(
+                CameraCharacteristics.CONTROL_VIDEO_STABILIZATION_MODE_PREVIEW_STABILIZATION)
+        }
     }
 
     /**
@@ -843,7 +873,13 @@
 
     private fun generateConcurrentSupportedCombinationList() {
         concurrentSurfaceCombinations.addAll(
-            GuaranteedConfigurationsUtil.generateConcurrentSupportedCombinationList()
+            GuaranteedConfigurationsUtil.getConcurrentSupportedCombinationList()
+        )
+    }
+
+    private fun generatePreviewStabilizationSupportedCombinationList() {
+        previewStabilizationSurfaceCombinations.addAll(
+            GuaranteedConfigurationsUtil.getPreviewStabilizationSupportedCombinationList()
         )
     }
 
@@ -1181,10 +1217,11 @@
      *           the camera. A value of [DynamicRange.BIT_DEPTH_10_BIT] corresponds to the camera
      *           capability
      *           [CameraCharacteristics.REQUEST_AVAILABLE_CAPABILITIES_DYNAMIC_RANGE_TEN_BIT].
-     *
+     * @param isPreviewStabilizationOn Whether the preview stabilization is enabled.
      */
     data class FeatureSettings(
         @CameraMode.Mode val cameraMode: Int,
-        val requiredMaxBitDepth: Int
+        val requiredMaxBitDepth: Int,
+        val isPreviewStabilizationOn: Boolean = false
     )
 }
diff --git a/camera/camera-camera2-pipe-integration/src/main/java/androidx/camera/camera2/pipe/integration/compat/quirk/ExtraSupportedOutputSizeQuirk.kt b/camera/camera-camera2-pipe-integration/src/main/java/androidx/camera/camera2/pipe/integration/compat/quirk/ExtraSupportedOutputSizeQuirk.kt
index 8f78da2..ad32973 100644
--- a/camera/camera-camera2-pipe-integration/src/main/java/androidx/camera/camera2/pipe/integration/compat/quirk/ExtraSupportedOutputSizeQuirk.kt
+++ b/camera/camera-camera2-pipe-integration/src/main/java/androidx/camera/camera2/pipe/integration/compat/quirk/ExtraSupportedOutputSizeQuirk.kt
@@ -26,10 +26,10 @@
 
 /**
  * QuirkSummary
- * Bug Id: b/241876294
+ * Bug Id: b/241876294, b/299075294
  * Description: CamcorderProfile resolutions can not find a match in the output size list of
- * [CameraCharacteristics.SCALER_STREAM_CONFIGURATION_MAP]. Since these resolutions
- * can be supported in native camera app, add these resolutions back.
+ *              [CameraCharacteristics.SCALER_STREAM_CONFIGURATION_MAP]. Some resolutions are
+ *              added back as they are supported by the camera and do not have stretching issues.
  * Device(s): Motorola Moto E5 Play.
  *
  * TODO: enable CameraXQuirksClassDetector lint check when kotlin is supported.
@@ -65,14 +65,10 @@
     private val motoE5PlayExtraSupportedResolutions: Array<Size>
         get() = arrayOf(
             // FHD
-            Size(1920, 1080),
             Size(1440, 1080),
             // HD
-            Size(1280, 720),
             Size(960, 720),
             // SD (640:480 is already included in the original list)
-            Size(864, 480),
-            Size(720, 480)
         )
 
     companion object {
diff --git a/camera/camera-camera2-pipe-integration/src/main/java/androidx/camera/camera2/pipe/integration/impl/UseCaseManager.kt b/camera/camera-camera2-pipe-integration/src/main/java/androidx/camera/camera2/pipe/integration/impl/UseCaseManager.kt
index 88ff62b..7d6d71e 100644
--- a/camera/camera-camera2-pipe-integration/src/main/java/androidx/camera/camera2/pipe/integration/impl/UseCaseManager.kt
+++ b/camera/camera-camera2-pipe-integration/src/main/java/androidx/camera/camera2/pipe/integration/impl/UseCaseManager.kt
@@ -18,6 +18,8 @@
 package androidx.camera.camera2.pipe.integration.impl
 
 import android.content.Context
+import android.hardware.camera2.CameraCharacteristics
+import android.hardware.camera2.CaptureRequest
 import android.media.MediaCodec
 import android.os.Build
 import androidx.annotation.GuardedBy
@@ -48,8 +50,10 @@
 import androidx.camera.core.impl.CameraInternal
 import androidx.camera.core.impl.CameraMode
 import androidx.camera.core.impl.DeferrableSurface
+import androidx.camera.core.impl.PreviewConfig
 import androidx.camera.core.impl.SessionConfig
 import androidx.camera.core.impl.SessionConfig.ValidatingBuilder
+import androidx.camera.core.impl.stabilization.StabilizationMode
 import javax.inject.Inject
 import javax.inject.Provider
 import kotlinx.coroutines.Job
@@ -458,10 +462,19 @@
             )
         }
 
+        var isPreviewStabilizationOn = false
+        for (useCase in currentUseCases) {
+            if (useCase.currentConfig is PreviewConfig) {
+                isPreviewStabilizationOn =
+                    useCase.currentConfig.previewStabilizationMode == StabilizationMode.ON
+            }
+        }
+
         return supportedSurfaceCombination.checkSupported(
             SupportedSurfaceCombination.FeatureSettings(
                 CameraMode.DEFAULT,
-                DynamicRange.BIT_DEPTH_8_BIT
+                DynamicRange.BIT_DEPTH_8_BIT,
+                isPreviewStabilizationOn
             ), surfaceConfigs
         )
     }
@@ -580,11 +593,34 @@
                     quirkCloseCameraDeviceOnClose = shouldCloseCameraDeviceOnClose,
                 )
 
+            // Set video stabilization mode to capture request
+            var videoStabilizationMode = CameraCharacteristics.CONTROL_VIDEO_STABILIZATION_MODE_OFF
+            if (sessionConfigAdapter.getValidSessionConfigOrNull() != null) {
+                val config = sessionConfigAdapter
+                    .getValidSessionConfigOrNull()!!
+                    .repeatingCaptureConfig
+                val isPreviewStabilizationMode = config.previewStabilizationMode
+                val isVideoStabilizationMode = config.videoStabilizationMode
+
+                if (isPreviewStabilizationMode == StabilizationMode.OFF ||
+                    isVideoStabilizationMode == StabilizationMode.OFF) {
+                    videoStabilizationMode = CaptureRequest.CONTROL_VIDEO_STABILIZATION_MODE_OFF
+                } else if (isPreviewStabilizationMode == StabilizationMode.ON) {
+                    videoStabilizationMode =
+                        CaptureRequest.CONTROL_VIDEO_STABILIZATION_MODE_PREVIEW_STABILIZATION
+                } else if (isVideoStabilizationMode == StabilizationMode.ON) {
+                    videoStabilizationMode = CaptureRequest.CONTROL_VIDEO_STABILIZATION_MODE_ON
+                }
+            }
+
             // Build up a config (using TEMPLATE_PREVIEW by default)
             return CameraGraph.Config(
                 camera = cameraConfig.cameraId,
                 streams = streamConfigMap.keys.toList(),
                 defaultListeners = listOf(callbackMap, requestListener),
+                defaultParameters = mapOf(
+                    CaptureRequest.CONTROL_VIDEO_STABILIZATION_MODE to videoStabilizationMode
+                ),
                 flags = combinedFlags,
             )
         }
diff --git a/camera/camera-camera2-pipe-integration/src/test/java/androidx/camera/camera2/pipe/integration/adapter/CameraInfoAdapterTest.kt b/camera/camera-camera2-pipe-integration/src/test/java/androidx/camera/camera2/pipe/integration/adapter/CameraInfoAdapterTest.kt
index dbb6baf..e845092 100644
--- a/camera/camera-camera2-pipe-integration/src/test/java/androidx/camera/camera2/pipe/integration/adapter/CameraInfoAdapterTest.kt
+++ b/camera/camera-camera2-pipe-integration/src/test/java/androidx/camera/camera2/pipe/integration/adapter/CameraInfoAdapterTest.kt
@@ -17,6 +17,9 @@
 package androidx.camera.camera2.pipe.integration.adapter
 
 import android.hardware.camera2.CameraCharacteristics
+import android.hardware.camera2.CameraCharacteristics.CONTROL_VIDEO_STABILIZATION_MODE_OFF
+import android.hardware.camera2.CameraCharacteristics.CONTROL_VIDEO_STABILIZATION_MODE_ON
+import android.hardware.camera2.CameraCharacteristics.CONTROL_VIDEO_STABILIZATION_MODE_PREVIEW_STABILIZATION
 import android.os.Build
 import android.util.Range
 import android.util.Size
@@ -177,4 +180,80 @@
             CameraInfo.IMPLEMENTATION_TYPE_CAMERA2
         )
     }
+
+    @Test
+    fun cameraInfo_isPreviewStabilizationSupported() {
+        val cameraInfo: CameraInfoInternal = createCameraInfoAdapter(
+            cameraProperties = FakeCameraProperties(
+                FakeCameraMetadata(
+                    characteristics = mapOf(
+                        CameraCharacteristics.CONTROL_AVAILABLE_VIDEO_STABILIZATION_MODES to
+                            intArrayOf(
+                                CONTROL_VIDEO_STABILIZATION_MODE_OFF,
+                                CONTROL_VIDEO_STABILIZATION_MODE_ON,
+                                CONTROL_VIDEO_STABILIZATION_MODE_PREVIEW_STABILIZATION
+                            )
+                    )
+                )
+            )
+        )
+
+        assertThat(cameraInfo.isPreviewStabilizationSupported).isTrue()
+    }
+
+    @Test
+    fun cameraInfo_isPreviewStabilizationNotSupported() {
+        val cameraInfo: CameraInfoInternal = createCameraInfoAdapter(
+            cameraProperties = FakeCameraProperties(
+                FakeCameraMetadata(
+                    characteristics = mapOf(
+                        CameraCharacteristics.CONTROL_AVAILABLE_VIDEO_STABILIZATION_MODES to
+                            intArrayOf(
+                                CONTROL_VIDEO_STABILIZATION_MODE_OFF,
+                                CONTROL_VIDEO_STABILIZATION_MODE_ON
+                            )
+                    )
+                )
+            )
+        )
+
+        assertThat(cameraInfo.isPreviewStabilizationSupported).isFalse()
+    }
+
+    @Test
+    fun cameraInfo_isVideoStabilizationSupported() {
+        val cameraInfo: CameraInfoInternal = createCameraInfoAdapter(
+            cameraProperties = FakeCameraProperties(
+                FakeCameraMetadata(
+                    characteristics = mapOf(
+                        CameraCharacteristics.CONTROL_AVAILABLE_VIDEO_STABILIZATION_MODES to
+                            intArrayOf(
+                                CONTROL_VIDEO_STABILIZATION_MODE_OFF,
+                                CONTROL_VIDEO_STABILIZATION_MODE_ON
+                            )
+                    )
+                )
+            )
+        )
+
+        assertThat(cameraInfo.isVideoStabilizationSupported).isTrue()
+    }
+
+    @Test
+    fun cameraInfo_isVideoStabilizationNotSupported() {
+        val cameraInfo: CameraInfoInternal = createCameraInfoAdapter(
+            cameraProperties = FakeCameraProperties(
+                FakeCameraMetadata(
+                    characteristics = mapOf(
+                        CameraCharacteristics.CONTROL_AVAILABLE_VIDEO_STABILIZATION_MODES to
+                            intArrayOf(
+                                CONTROL_VIDEO_STABILIZATION_MODE_OFF
+                            )
+                    )
+                )
+            )
+        )
+
+        assertThat(cameraInfo.isVideoStabilizationSupported).isFalse()
+    }
 }
diff --git a/camera/camera-camera2-pipe-integration/src/test/java/androidx/camera/camera2/pipe/integration/compat/OutputSizesCorrectorTest.kt b/camera/camera-camera2-pipe-integration/src/test/java/androidx/camera/camera2/pipe/integration/compat/OutputSizesCorrectorTest.kt
index 8311cc8..c4d6e34 100644
--- a/camera/camera-camera2-pipe-integration/src/test/java/androidx/camera/camera2/pipe/integration/compat/OutputSizesCorrectorTest.kt
+++ b/camera/camera-camera2-pipe-integration/src/test/java/androidx/camera/camera2/pipe/integration/compat/OutputSizesCorrectorTest.kt
@@ -93,12 +93,8 @@
                 Size(3088, 3088),
 
                 // Added extra supported sizes for Motorola E5 Play device
-                Size(1920, 1080),
                 Size(1440, 1080),
-                Size(1280, 720),
                 Size(960, 720),
-                Size(864, 480),
-                Size(720, 480),
             )
         ).inOrder()
     }
@@ -130,12 +126,8 @@
                 Size(3088, 3088),
 
                 // Added extra supported sizes for Motorola E5 Play device
-                Size(1920, 1080),
                 Size(1440, 1080),
-                Size(1280, 720),
                 Size(960, 720),
-                Size(864, 480),
-                Size(720, 480),
             )
         ).inOrder()
     }
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 aa25edd..0000000
--- a/camera/camera-camera2/src/main/java/androidx/camera/camera2/internal/Camera2PreviewCapabilities.java
+++ /dev/null
@@ -1,48 +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 boolean mIsStabilizationSupported = false;
-
-    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-camera2/src/main/java/androidx/camera/camera2/internal/compat/quirk/ExtraSupportedOutputSizeQuirk.java b/camera/camera-camera2/src/main/java/androidx/camera/camera2/internal/compat/quirk/ExtraSupportedOutputSizeQuirk.java
index 4c8d046..9907a6c 100644
--- a/camera/camera-camera2/src/main/java/androidx/camera/camera2/internal/compat/quirk/ExtraSupportedOutputSizeQuirk.java
+++ b/camera/camera-camera2/src/main/java/androidx/camera/camera2/internal/compat/quirk/ExtraSupportedOutputSizeQuirk.java
@@ -27,10 +27,11 @@
 
 /**
  * <p>QuirkSummary
- *     Bug Id: b/241876294
+ *     Bug Id: b/241876294, b/299075294
  *     Description: CamcorderProfile resolutions can not find a match in the output size list of
- *                  CameraCharacteristics#SCALER_STREAM_CONFIGURATION_MAP. Since these resolutions
- *                  can be supported in native camera app, add these resolutions back.
+ *                  CameraCharacteristics#SCALER_STREAM_CONFIGURATION_MAP. Some resolutions are
+ *                  added back as they are supported by the camera and do not have stretching
+ *                  issues.
  *     Device(s): Motorola Moto E5 Play.
  */
 @RequiresApi(21) // TODO(b/200306659): Remove and replace with annotation on package-info.java
@@ -75,14 +76,10 @@
         // Both the front and the main cameras support the following resolutions.
         return new Size[]{
                 // FHD
-                new Size(1920, 1080),
                 new Size(1440, 1080),
                 // HD
-                new Size(1280, 720),
                 new Size(960, 720),
                 // SD (640:480 is already included in the original list)
-                new Size(864, 480),
-                new Size(720, 480),
         };
     }
 }
diff --git a/camera/camera-camera2/src/test/java/androidx/camera/camera2/internal/compat/workaround/OutputSizesCorrectorTest.kt b/camera/camera-camera2/src/test/java/androidx/camera/camera2/internal/compat/workaround/OutputSizesCorrectorTest.kt
index f802c7d3..fb68bec 100644
--- a/camera/camera-camera2/src/test/java/androidx/camera/camera2/internal/compat/workaround/OutputSizesCorrectorTest.kt
+++ b/camera/camera-camera2/src/test/java/androidx/camera/camera2/internal/compat/workaround/OutputSizesCorrectorTest.kt
@@ -92,12 +92,8 @@
                 Size(3088, 3088),
 
                 // Added extra supported sizes for Motorola E5 Play device
-                Size(1920, 1080),
                 Size(1440, 1080),
-                Size(1280, 720),
                 Size(960, 720),
-                Size(864, 480),
-                Size(720, 480),
             )
         ).inOrder()
     }
@@ -129,12 +125,8 @@
                 Size(3088, 3088),
 
                 // Added extra supported sizes for Motorola E5 Play device
-                Size(1920, 1080),
                 Size(1440, 1080),
-                Size(1280, 720),
                 Size(960, 720),
-                Size(864, 480),
-                Size(720, 480),
             )
         ).inOrder()
     }
diff --git a/camera/camera-core/api/current.txt b/camera/camera-core/api/current.txt
index adace2b..485169b 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);
   }
@@ -427,6 +429,7 @@
     method public androidx.camera.core.resolutionselector.ResolutionSelector? getResolutionSelector();
     method public android.util.Range<java.lang.Integer!> getTargetFrameRate();
     method public int getTargetRotation();
+    method public boolean isPreviewStabilizationEnabled();
     method @UiThread public void setSurfaceProvider(androidx.camera.core.Preview.SurfaceProvider?);
     method @UiThread public void setSurfaceProvider(java.util.concurrent.Executor, androidx.camera.core.Preview.SurfaceProvider?);
     method public void setTargetRotation(int);
@@ -435,6 +438,7 @@
   public static final class Preview.Builder implements androidx.camera.core.ExtendableBuilder<androidx.camera.core.Preview> {
     ctor public Preview.Builder();
     method public androidx.camera.core.Preview build();
+    method public androidx.camera.core.Preview.Builder setPreviewStabilizationEnabled(boolean);
     method public androidx.camera.core.Preview.Builder setResolutionSelector(androidx.camera.core.resolutionselector.ResolutionSelector);
     method @Deprecated public androidx.camera.core.Preview.Builder setTargetAspectRatio(int);
     method public androidx.camera.core.Preview.Builder setTargetFrameRate(android.util.Range<java.lang.Integer!>);
@@ -447,6 +451,10 @@
     method public void onSurfaceRequested(androidx.camera.core.SurfaceRequest);
   }
 
+  @RequiresApi(21) public interface PreviewCapabilities {
+    method public boolean isStabilizationSupported();
+  }
+
   public class ProcessingException extends java.lang.Exception {
     ctor public ProcessingException();
   }
diff --git a/camera/camera-core/api/restricted_current.txt b/camera/camera-core/api/restricted_current.txt
index adace2b..485169b 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);
   }
@@ -427,6 +429,7 @@
     method public androidx.camera.core.resolutionselector.ResolutionSelector? getResolutionSelector();
     method public android.util.Range<java.lang.Integer!> getTargetFrameRate();
     method public int getTargetRotation();
+    method public boolean isPreviewStabilizationEnabled();
     method @UiThread public void setSurfaceProvider(androidx.camera.core.Preview.SurfaceProvider?);
     method @UiThread public void setSurfaceProvider(java.util.concurrent.Executor, androidx.camera.core.Preview.SurfaceProvider?);
     method public void setTargetRotation(int);
@@ -435,6 +438,7 @@
   public static final class Preview.Builder implements androidx.camera.core.ExtendableBuilder<androidx.camera.core.Preview> {
     ctor public Preview.Builder();
     method public androidx.camera.core.Preview build();
+    method public androidx.camera.core.Preview.Builder setPreviewStabilizationEnabled(boolean);
     method public androidx.camera.core.Preview.Builder setResolutionSelector(androidx.camera.core.resolutionselector.ResolutionSelector);
     method @Deprecated public androidx.camera.core.Preview.Builder setTargetAspectRatio(int);
     method public androidx.camera.core.Preview.Builder setTargetFrameRate(android.util.Range<java.lang.Integer!>);
@@ -447,6 +451,10 @@
     method public void onSurfaceRequested(androidx.camera.core.SurfaceRequest);
   }
 
+  @RequiresApi(21) public interface PreviewCapabilities {
+    method public boolean isStabilizationSupported();
+  }
+
   public class ProcessingException extends java.lang.Exception {
     ctor public ProcessingException();
   }
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..fd7942d 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,9 +674,19 @@
     }
 
     /**
+     * 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)
     public boolean isPreviewStabilizationEnabled() {
         return getCurrentConfig().getPreviewStabilizationMode() == StabilizationMode.ON;
     }
@@ -1160,12 +1171,49 @@
         }
 
         /**
-         * Enable preview stabilization.
+         * Enable preview stabilization. It will enable stabilization for both the preview and
+         * video capture use cases.
+         *
+         * <p>Devices running Android 13 or higher can provide support for video stabilization.
+         * This feature lets apps provide a what you see is what you get (WYSIWYG) experience
+         * when comparing between the camera preview and the recording.
+         *
+         * <p>It is recommended to query the device capability via
+         * {@link PreviewCapabilities#isStabilizationSupported()} before enabling this feature,
+         * otherwise HAL error might be thrown.
+         *
+         * <p> If both preview stabilization and video stabilization are enabled or disabled, the
+         * final result will be
+         *
+         * <p>
+         * <table>
+         * <tr> <th id="rb">Preview</th> <th id="rb">VideoCapture</th>   <th id="rb">Result</th>
+         * </tr>
+         * <tr> <td>ON</td> <td>ON</td> <td>Both Preview and VideoCapture will be stabilized,
+         * VideoCapture quality might be worse than only VideoCapture stabilized</td>
+         * </tr>
+         * <tr> <td>ON</td> <td>OFF</td> <td>None of Preview and VideoCapture will be
+         * stabilized</td>  </tr>
+         * <tr> <td>ON</td> <td>NOT SPECIFIED</td> <td>Both Preview and VideoCapture will be
+         * stabilized</td>  </tr>
+         * <tr> <td>OFF</td> <td>ON</td> <td>None of Preview and VideoCapture will be
+         * stabilized</td>  </tr>
+         * <tr> <td>OFF</td> <td>OFF</td> <td>None of Preview and VideoCapture will be
+         * stabilized</td>  </tr>
+         * <tr> <td>OFF</td> <td>NOT SPECIFIED</td> <td>None of Preview and VideoCapture will be
+         * stabilized</td>  </tr>
+         * <tr> <td>NOT SPECIFIED</td> <td>ON</td> <td>Only VideoCapture will be stabilized,
+         * Preview might be stabilized depending on devices</td>
+         * </tr>
+         * <tr> <td>NOT SPECIFIED</td> <td>OFF</td> <td>None of Preview and VideoCapture will be
+         * stabilized</td>  </tr>
+         * </table><br>
          *
          * @param enabled True if enable, otherwise false.
          * @return the current Builder.
+         *
+         * @see PreviewCapabilities#isStabilizationSupported()
          */
-        @RestrictTo(Scope.LIBRARY_GROUP)
         @NonNull
         public Builder setPreviewStabilizationEnabled(boolean enabled) {
             getMutableConfig().insertOption(OPTION_PREVIEW_STABILIZATION_MODE,
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 283b013..7920e27 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,35 +18,24 @@
 
 import android.hardware.camera2.CaptureRequest;
 
-import androidx.annotation.NonNull;
 import androidx.annotation.RequiresApi;
-import androidx.annotation.RestrictTo;
 
 /**
- * PreviewCapabilities is used to query preview stream capabilities on the device.
+ * PreviewCapabilities is used to query {@link Preview} use case capabilities on the device.
  */
-@RestrictTo(RestrictTo.Scope.LIBRARY_GROUP)
 @RequiresApi(21) // TODO(b/200306659): Remove and replace with annotation on package-info.java
 public interface PreviewCapabilities {
 
     /**
-     * Returns if preview stabilization is supported on the device.
+     * Returns if preview stabilization is supported on the device. Preview stabilization can be
+     * turned on via {@link Preview.Builder#setPreviewStabilizationEnabled(boolean)}.
      *
      * @return true if
      * {@link CaptureRequest#CONTROL_VIDEO_STABILIZATION_MODE_PREVIEW_STABILIZATION} is supported,
      * otherwise false.
      *
+     * @see Preview.Builder#setPreviewStabilizationEnabled(boolean)
      * @see CaptureRequest#CONTROL_VIDEO_STABILIZATION_MODE
      */
     boolean isStabilizationSupported();
-
-
-    /** An empty implementation. */
-    @NonNull
-    PreviewCapabilities EMPTY = new PreviewCapabilities() {
-        @Override
-        public boolean isStabilizationSupported() {
-            return 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-testing/src/main/java/androidx/camera/testing/impl/CameraUtil.java b/camera/camera-testing/src/main/java/androidx/camera/testing/impl/CameraUtil.java
index 6b0d8c7..3349f00 100644
--- a/camera/camera-testing/src/main/java/androidx/camera/testing/impl/CameraUtil.java
+++ b/camera/camera-testing/src/main/java/androidx/camera/testing/impl/CameraUtil.java
@@ -1488,7 +1488,6 @@
                 Logger.d(LOG_TAG, "++ Camera id: " + id);
                 try {
                     CameraCharacteristics c = manager.getCameraCharacteristics(id);
-                    Logger.d(LOG_TAG, id + " character: " + c);
                     if (c != null) {
                         Integer lensFacing = c.get(CameraCharacteristics.LENS_FACING);
                         Logger.d(LOG_TAG, id + " lensFacing: " + lensFacing);
diff --git a/camera/camera-video/api/current.txt b/camera/camera-video/api/current.txt
index 7f1314e..bf615af 100644
--- a/camera/camera-video/api/current.txt
+++ b/camera/camera-video/api/current.txt
@@ -148,6 +148,7 @@
     method public java.util.Set<androidx.camera.core.DynamicRange!> getSupportedDynamicRanges();
     method public java.util.List<androidx.camera.video.Quality!> getSupportedQualities(androidx.camera.core.DynamicRange);
     method public boolean isQualitySupported(androidx.camera.video.Quality, androidx.camera.core.DynamicRange);
+    method public default boolean isStabilizationSupported();
   }
 
   @RequiresApi(21) public final class VideoCapture<T extends androidx.camera.video.VideoOutput> extends androidx.camera.core.UseCase {
@@ -156,6 +157,7 @@
     method public T getOutput();
     method public android.util.Range<java.lang.Integer!> getTargetFrameRate();
     method public int getTargetRotation();
+    method public boolean isVideoStabilizationEnabled();
     method public void setTargetRotation(int);
     method public static <T extends androidx.camera.video.VideoOutput> androidx.camera.video.VideoCapture<T!> withOutput(T);
   }
@@ -167,6 +169,7 @@
     method public androidx.camera.video.VideoCapture.Builder<T!> setMirrorMode(int);
     method public androidx.camera.video.VideoCapture.Builder<T!> setTargetFrameRate(android.util.Range<java.lang.Integer!>);
     method public androidx.camera.video.VideoCapture.Builder<T!> setTargetRotation(int);
+    method public androidx.camera.video.VideoCapture.Builder<T!> setVideoStabilizationEnabled(boolean);
   }
 
   @RequiresApi(21) public interface VideoOutput {
diff --git a/camera/camera-video/api/restricted_current.txt b/camera/camera-video/api/restricted_current.txt
index 7f1314e..bf615af 100644
--- a/camera/camera-video/api/restricted_current.txt
+++ b/camera/camera-video/api/restricted_current.txt
@@ -148,6 +148,7 @@
     method public java.util.Set<androidx.camera.core.DynamicRange!> getSupportedDynamicRanges();
     method public java.util.List<androidx.camera.video.Quality!> getSupportedQualities(androidx.camera.core.DynamicRange);
     method public boolean isQualitySupported(androidx.camera.video.Quality, androidx.camera.core.DynamicRange);
+    method public default boolean isStabilizationSupported();
   }
 
   @RequiresApi(21) public final class VideoCapture<T extends androidx.camera.video.VideoOutput> extends androidx.camera.core.UseCase {
@@ -156,6 +157,7 @@
     method public T getOutput();
     method public android.util.Range<java.lang.Integer!> getTargetFrameRate();
     method public int getTargetRotation();
+    method public boolean isVideoStabilizationEnabled();
     method public void setTargetRotation(int);
     method public static <T extends androidx.camera.video.VideoOutput> androidx.camera.video.VideoCapture<T!> withOutput(T);
   }
@@ -167,6 +169,7 @@
     method public androidx.camera.video.VideoCapture.Builder<T!> setMirrorMode(int);
     method public androidx.camera.video.VideoCapture.Builder<T!> setTargetFrameRate(android.util.Range<java.lang.Integer!>);
     method public androidx.camera.video.VideoCapture.Builder<T!> setTargetRotation(int);
+    method public androidx.camera.video.VideoCapture.Builder<T!> setVideoStabilizationEnabled(boolean);
   }
 
   @RequiresApi(21) public interface VideoOutput {
diff --git a/camera/camera-video/src/main/java/androidx/camera/video/RecorderVideoCapabilities.java b/camera/camera-video/src/main/java/androidx/camera/video/RecorderVideoCapabilities.java
index b9e560e..8e5c043 100644
--- a/camera/camera-video/src/main/java/androidx/camera/video/RecorderVideoCapabilities.java
+++ b/camera/camera-video/src/main/java/androidx/camera/video/RecorderVideoCapabilities.java
@@ -45,6 +45,7 @@
 import androidx.camera.video.internal.DynamicRangeMatchedEncoderProfilesProvider;
 import androidx.camera.video.internal.VideoValidatedEncoderProfilesProxy;
 import androidx.camera.video.internal.compat.quirk.DeviceQuirks;
+import androidx.camera.video.internal.workaround.QualityResolutionModifiedEncoderProfilesProvider;
 import androidx.camera.video.internal.workaround.QualityValidatedEncoderProfilesProvider;
 import androidx.core.util.Preconditions;
 
@@ -76,7 +77,7 @@
 
     private final EncoderProfilesProvider mProfilesProvider;
 
-    private boolean mIsStabilizationSupported = false;
+    private final boolean mIsStabilizationSupported;
 
     // Mappings of DynamicRange to recording capability information. The mappings are divided
     // into two collections based on the key's (DynamicRange) category, one for specified
@@ -103,19 +104,23 @@
         EncoderProfilesProvider encoderProfilesProvider =
                 cameraInfoInternal.getEncoderProfilesProvider();
 
+        // Modify qualities' matching resolution to the value supported by camera.
+        Quirks deviceQuirks = DeviceQuirks.getAll();
+        encoderProfilesProvider = new QualityResolutionModifiedEncoderProfilesProvider(
+                encoderProfilesProvider, deviceQuirks);
+
         // Add backup HDR video information. In the initial version, only HLG10 profile is added.
         if (isHlg10SupportedByCamera(cameraInfoInternal)) {
             encoderProfilesProvider = new BackupHdrProfileEncoderProfilesProvider(
                     encoderProfilesProvider, backupVideoProfileValidator);
         }
 
-        // Workaround resolution quirk.
+        // Filter out qualities with unsupported resolutions.
         Quirks cameraQuirks = cameraInfoInternal.getCameraQuirks();
         encoderProfilesProvider = new ResolutionValidatedEncoderProfilesProvider(
                 encoderProfilesProvider, cameraQuirks);
 
-        // Workaround quality quirk.
-        Quirks deviceQuirks = DeviceQuirks.getAll();
+        // Filter out unsupported qualities.
         encoderProfilesProvider = new QualityValidatedEncoderProfilesProvider(
                 encoderProfilesProvider, cameraInfoInternal, deviceQuirks);
         mProfilesProvider = encoderProfilesProvider;
diff --git a/camera/camera-video/src/main/java/androidx/camera/video/VideoCapabilities.java b/camera/camera-video/src/main/java/androidx/camera/video/VideoCapabilities.java
index 8f9fd80..e10278d 100644
--- a/camera/camera-video/src/main/java/androidx/camera/video/VideoCapabilities.java
+++ b/camera/camera-video/src/main/java/androidx/camera/video/VideoCapabilities.java
@@ -115,15 +115,26 @@
     boolean isQualitySupported(@NonNull Quality quality, @NonNull DynamicRange dynamicRange);
 
     /**
-     * Returns if video stabilization is supported on the device.
+     * Returns if video stabilization is supported on the device. Video stabilization can be
+     * turned on via {@link VideoCapture.Builder#setVideoStabilizationEnabled(boolean)}.
+     *
+     * <p>Not all recording sizes or frame rates may be supported for
+     * stabilization by a device that reports stabilization support. It is guaranteed
+     * that an output targeting a MediaRecorder or MediaCodec will be stabilized if
+     * the recording resolution is less than or equal to 1920 x 1080 (width less than
+     * or equal to 1920, height less than or equal to 1080), and the recording
+     * frame rate is less than or equal to 30fps. At other sizes, the video stabilization will
+     * not take effect.
      *
      * @return true if {@link CaptureRequest#CONTROL_VIDEO_STABILIZATION_MODE_ON} is supported,
      * otherwise false.
      *
+     * @see VideoCapture.Builder#setVideoStabilizationEnabled(boolean)
      * @see CaptureRequest#CONTROL_VIDEO_STABILIZATION_MODE
      */
-    @RestrictTo(RestrictTo.Scope.LIBRARY)
-    boolean isStabilizationSupported();
+    default boolean isStabilizationSupported() {
+        return false;
+    }
 
     /**
      * Gets the corresponding {@link VideoValidatedEncoderProfilesProxy} of the input quality and
diff --git a/camera/camera-video/src/main/java/androidx/camera/video/VideoCapture.java b/camera/camera-video/src/main/java/androidx/camera/video/VideoCapture.java
index 8e8bbd6..3f73068 100644
--- a/camera/camera-video/src/main/java/androidx/camera/video/VideoCapture.java
+++ b/camera/camera-video/src/main/java/androidx/camera/video/VideoCapture.java
@@ -286,7 +286,6 @@
     /**
      * Returns whether video stabilization is enabled.
      */
-    @RestrictTo(Scope.LIBRARY_GROUP)
     public boolean isVideoStabilizationEnabled() {
         return getCurrentConfig().getVideoStabilizationMode() == StabilizationMode.ON;
     }
@@ -1797,10 +1796,13 @@
          *
          * <p>This target will be used as a part of the heuristics for the algorithm that determines
          * the final frame rate range and resolution of all concurrently bound use cases.
+         *
          * <p>It is not guaranteed that this target frame rate will be the final range,
          * as other use cases as well as frame rate restrictions of the device may affect the
          * outcome of the algorithm that chooses the actual frame rate.
          *
+         * <p>For supported frame rates, see {@link CameraInfo#getSupportedFrameRateRanges()}.
+         *
          * @param targetFrameRate the target frame rate range.
          */
         @NonNull
@@ -1812,10 +1814,56 @@
         /**
          * Enable video stabilization.
          *
+         * <p>It will enable stabilization for the video capture use case. However, it is not
+         * guaranteed the stabilization will be enabled for the preview use case. If you want to
+         * enable preview stabilization, use
+         * {@link Preview.Builder#setPreviewStabilizationEnabled(boolean)} instead.
+         *
+         * <p>Preview stabilization, where streams are stabilized with the same quality of
+         * stabilization for {@link Preview} and {@link VideoCapture} use cases, is enabled. This
+         * mode aims to give clients a 'what you see is what you get' effect. In this mode, the
+         * FoV reduction will be a maximum of 20 % both horizontally and vertically (10% from
+         * left, right, top, bottom) for the given zoom ratio / crop region. The resultant FoV
+         * will also be the same across all use cases (that have the same aspect ratio). This is
+         * the tradeoff between video stabilization and preview stabilization.
+         *
+         * <p>It is recommended to query the device capability via
+         * {@link VideoCapabilities#isStabilizationSupported()} before enabling this
+         * feature, otherwise HAL error might be thrown.
+         *
+         * <p> If both preview stabilization and video stabilization are enabled or disabled, the
+         * final result will be
+         *
+         * <p>
+         * <table>
+         * <tr> <th id="rb">Preview</th> <th id="rb">VideoCapture</th>   <th id="rb">Result</th>
+         * </tr>
+         * <tr> <td>ON</td> <td>ON</td> <td>Both Preview and VideoCapture will be stabilized,
+         * VideoCapture quality might be worse than only VideoCapture stabilized</td>
+         * </tr>
+         * <tr> <td>ON</td> <td>OFF</td> <td>None of Preview and VideoCapture will be
+         * stabilized</td>  </tr>
+         * <tr> <td>ON</td> <td>NOT SPECIFIED</td> <td>Both Preview and VideoCapture will be
+         * stabilized</td>  </tr>
+         * <tr> <td>OFF</td> <td>ON</td> <td>None of Preview and VideoCapture will be
+         * stabilized</td>  </tr>
+         * <tr> <td>OFF</td> <td>OFF</td> <td>None of Preview and VideoCapture will be
+         * stabilized</td>  </tr>
+         * <tr> <td>OFF</td> <td>NOT SPECIFIED</td> <td>None of Preview and VideoCapture will be
+         * stabilized</td>  </tr>
+         * <tr> <td>NOT SPECIFIED</td> <td>ON</td> <td>Only VideoCapture will be stabilized,
+         * Preview might be stabilized depending on devices</td>
+         * </tr>
+         * <tr> <td>NOT SPECIFIED</td> <td>OFF</td> <td>None of Preview and VideoCapture will be
+         * stabilized</td>  </tr>
+         * </table><br>
+         *
          * @param enabled True if enable, otherwise false.
          * @return the current Builder.
+         *
+         * @see VideoCapabilities#isStabilizationSupported()
+         * @see Preview.Builder#setPreviewStabilizationEnabled(boolean)
          */
-        @RestrictTo(Scope.LIBRARY_GROUP)
         @NonNull
         public Builder<T> setVideoStabilizationEnabled(boolean enabled) {
             getMutableConfig().insertOption(OPTION_VIDEO_STABILIZATION_MODE,
diff --git a/camera/camera-video/src/main/java/androidx/camera/video/internal/compat/quirk/DeviceQuirksLoader.java b/camera/camera-video/src/main/java/androidx/camera/video/internal/compat/quirk/DeviceQuirksLoader.java
index 249e880..4c95232 100644
--- a/camera/camera-video/src/main/java/androidx/camera/video/internal/compat/quirk/DeviceQuirksLoader.java
+++ b/camera/camera-video/src/main/java/androidx/camera/video/internal/compat/quirk/DeviceQuirksLoader.java
@@ -92,6 +92,9 @@
         if (ExtraSupportedResolutionQuirk.load()) {
             quirks.add(new ExtraSupportedResolutionQuirk());
         }
+        if (StretchedVideoResolutionQuirk.load()) {
+            quirks.add(new StretchedVideoResolutionQuirk());
+        }
 
         return quirks;
     }
diff --git a/camera/camera-video/src/main/java/androidx/camera/video/internal/compat/quirk/StretchedVideoResolutionQuirk.java b/camera/camera-video/src/main/java/androidx/camera/video/internal/compat/quirk/StretchedVideoResolutionQuirk.java
new file mode 100644
index 0000000..ede9b54
--- /dev/null
+++ b/camera/camera-video/src/main/java/androidx/camera/video/internal/compat/quirk/StretchedVideoResolutionQuirk.java
@@ -0,0 +1,67 @@
+/*
+ * 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.video.internal.compat.quirk;
+
+import static android.media.CamcorderProfile.QUALITY_1080P;
+import static android.media.CamcorderProfile.QUALITY_480P;
+import static android.media.CamcorderProfile.QUALITY_720P;
+
+import android.os.Build;
+import android.util.Size;
+
+import androidx.annotation.Nullable;
+import androidx.annotation.RequiresApi;
+import androidx.camera.core.impl.Quirk;
+
+/**
+ * <p>QuirkSummary
+ *     Bug Id: b/299075294
+ *     Description: The captured video is stretched while using the resolution obtained from
+ *                  EncoderProfiles. The quirk provides an alternative resolution for supported
+ *                  qualities.
+ *     Device(s): Motorola Moto E5 Play.
+ */
+@RequiresApi(21) // TODO(b/200306659): Remove and replace with annotation on package-info.java
+public class StretchedVideoResolutionQuirk implements Quirk {
+
+    static boolean load() {
+        return isMotoE5Play();
+    }
+
+    private static boolean isMotoE5Play() {
+        return "motorola".equalsIgnoreCase(Build.BRAND) && "moto e5 play".equalsIgnoreCase(
+                Build.MODEL);
+    }
+
+    /**
+     * Returns an alternative resolution available on the device.
+     */
+    @Nullable
+    public Size getAlternativeResolution(int quality) {
+        switch (quality) {
+            case QUALITY_480P:
+                return new Size(640, 480);
+            case QUALITY_720P:
+                return new Size(960, 720);
+            case QUALITY_1080P:
+                return new Size(1440, 1080);
+            default:
+                return null;
+        }
+    }
+
+}
diff --git a/camera/camera-video/src/main/java/androidx/camera/video/internal/workaround/QualityResolutionModifiedEncoderProfilesProvider.java b/camera/camera-video/src/main/java/androidx/camera/video/internal/workaround/QualityResolutionModifiedEncoderProfilesProvider.java
new file mode 100644
index 0000000..2086907
--- /dev/null
+++ b/camera/camera-video/src/main/java/androidx/camera/video/internal/workaround/QualityResolutionModifiedEncoderProfilesProvider.java
@@ -0,0 +1,142 @@
+/*
+ * 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.video.internal.workaround;
+
+import static java.util.Objects.requireNonNull;
+
+import android.util.Size;
+
+import androidx.annotation.NonNull;
+import androidx.annotation.Nullable;
+import androidx.annotation.RequiresApi;
+import androidx.camera.core.impl.EncoderProfilesProvider;
+import androidx.camera.core.impl.EncoderProfilesProxy;
+import androidx.camera.core.impl.EncoderProfilesProxy.ImmutableEncoderProfilesProxy;
+import androidx.camera.core.impl.EncoderProfilesProxy.VideoProfileProxy;
+import androidx.camera.core.impl.Quirks;
+import androidx.camera.video.internal.compat.quirk.StretchedVideoResolutionQuirk;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * An implementation that changes matching video resolution of qualities to values supported by
+ * camera.
+ *
+ * @see StretchedVideoResolutionQuirk
+ */
+@RequiresApi(21) // TODO(b/200306659): Remove and replace with annotation on package-info.java
+public class QualityResolutionModifiedEncoderProfilesProvider implements EncoderProfilesProvider {
+
+    @NonNull
+    private final EncoderProfilesProvider mProvider;
+    @NonNull
+    private final Quirks mQuirks;
+    @NonNull
+    private final Map<Integer, EncoderProfilesProxy> mEncoderProfilesCache = new HashMap<>();
+
+    public QualityResolutionModifiedEncoderProfilesProvider(
+            @NonNull EncoderProfilesProvider provider, @NonNull Quirks quirks) {
+        mProvider = provider;
+        mQuirks = quirks;
+    }
+
+    @Override
+    public boolean hasProfile(int quality) {
+        if (!mProvider.hasProfile(quality)) {
+            return false;
+        }
+
+        return getProfilesInternal(quality) != null;
+    }
+
+    @Nullable
+    @Override
+    public EncoderProfilesProxy getAll(int quality) {
+        return getProfilesInternal(quality);
+    }
+
+    @Nullable
+    private EncoderProfilesProxy getProfilesInternal(int quality) {
+        if (mEncoderProfilesCache.containsKey(quality)) {
+            return mEncoderProfilesCache.get(quality);
+        }
+
+
+        EncoderProfilesProxy profiles = null;
+        if (mProvider.hasProfile(quality)) {
+            EncoderProfilesProxy baseProfiles = requireNonNull(mProvider.getAll(quality));
+
+            // Apply alternative resolution if existed, leave keep the encoder profiles unchanged.
+            Size alternativeResolution = getAlternativeResolution(quality);
+            profiles = (alternativeResolution == null) ? baseProfiles : createNewEncoderProfiles(
+                    baseProfiles, alternativeResolution);
+        }
+        mEncoderProfilesCache.put(quality, profiles);
+
+        return profiles;
+    }
+
+    @Nullable
+    private Size getAlternativeResolution(int quality) {
+        for (StretchedVideoResolutionQuirk quirk : mQuirks.getAll(
+                StretchedVideoResolutionQuirk.class)) {
+            if (quirk != null) {
+                return quirk.getAlternativeResolution(quality);
+            }
+        }
+
+        return null;
+    }
+
+    @Nullable
+    private EncoderProfilesProxy createNewEncoderProfiles(
+            @NonNull EncoderProfilesProxy baseProfiles, @NonNull Size resolution) {
+        // Apply input resolution to video profiles.
+        List<VideoProfileProxy> newVideoProfiles = new ArrayList<>();
+        for (VideoProfileProxy videoProfile : baseProfiles.getVideoProfiles()) {
+            VideoProfileProxy newVideoProfile = generateVideoProfile(videoProfile, resolution);
+            newVideoProfiles.add(newVideoProfile);
+        }
+
+        return newVideoProfiles.isEmpty() ? null : ImmutableEncoderProfilesProxy.create(
+                baseProfiles.getDefaultDurationSeconds(),
+                baseProfiles.getRecommendedFileFormat(),
+                baseProfiles.getAudioProfiles(),
+                newVideoProfiles
+        );
+    }
+
+    @NonNull
+    private static VideoProfileProxy generateVideoProfile(@NonNull VideoProfileProxy baseProfile,
+            @NonNull Size resolution) {
+        return VideoProfileProxy.create(
+                baseProfile.getCodec(),
+                baseProfile.getMediaType(),
+                baseProfile.getBitrate(),
+                baseProfile.getFrameRate(),
+                resolution.getWidth(),
+                resolution.getHeight(),
+                baseProfile.getProfile(),
+                baseProfile.getBitDepth(),
+                baseProfile.getChromaSubsampling(),
+                baseProfile.getHdrFormat()
+        );
+    }
+}
diff --git a/camera/camera-video/src/test/java/androidx/camera/video/internal/workaround/QualityResolutionModifiedEncoderProfilesProviderTest.kt b/camera/camera-video/src/test/java/androidx/camera/video/internal/workaround/QualityResolutionModifiedEncoderProfilesProviderTest.kt
new file mode 100644
index 0000000..c71f84f
--- /dev/null
+++ b/camera/camera-video/src/test/java/androidx/camera/video/internal/workaround/QualityResolutionModifiedEncoderProfilesProviderTest.kt
@@ -0,0 +1,115 @@
+/*
+ * 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.video.internal.workaround
+
+import android.media.CamcorderProfile.QUALITY_1080P
+import android.media.CamcorderProfile.QUALITY_2160P
+import android.media.CamcorderProfile.QUALITY_480P
+import android.media.CamcorderProfile.QUALITY_720P
+import android.os.Build
+import android.util.Size
+import androidx.camera.core.impl.EncoderProfilesProvider
+import androidx.camera.core.impl.EncoderProfilesProxy
+import androidx.camera.core.impl.Quirks
+import androidx.camera.testing.impl.EncoderProfilesUtil.PROFILES_1080P
+import androidx.camera.testing.impl.EncoderProfilesUtil.PROFILES_2160P
+import androidx.camera.testing.impl.EncoderProfilesUtil.PROFILES_480P
+import androidx.camera.testing.impl.EncoderProfilesUtil.PROFILES_720P
+import androidx.camera.testing.impl.fakes.FakeEncoderProfilesProvider
+import androidx.camera.video.internal.compat.quirk.StretchedVideoResolutionQuirk
+import com.google.common.truth.Truth.assertThat
+import org.junit.Test
+import org.junit.runner.RunWith
+import org.robolectric.RobolectricTestRunner
+import org.robolectric.annotation.Config
+import org.robolectric.annotation.internal.DoNotInstrument
+
+@RunWith(RobolectricTestRunner::class)
+@DoNotInstrument
+@Config(minSdk = Build.VERSION_CODES.LOLLIPOP)
+class QualityResolutionModifiedEncoderProfilesProviderTest {
+
+    private val defaultProvider = createFakeEncoderProfilesProvider(
+        mapOf(
+            QUALITY_2160P to PROFILES_2160P,
+            QUALITY_1080P to PROFILES_1080P,
+            QUALITY_720P to PROFILES_720P,
+            QUALITY_480P to PROFILES_480P
+        )
+    )
+
+    @Test
+    fun hasNoProfile_canNotGetProfiles() {
+        val quirks = createFakeQuirks()
+        val emptyProvider = createFakeEncoderProfilesProvider()
+        val provider = QualityResolutionModifiedEncoderProfilesProvider(emptyProvider, quirks)
+
+        assertThat(provider.hasProfile(QUALITY_2160P)).isFalse()
+        assertThat(provider.hasProfile(QUALITY_1080P)).isFalse()
+        assertThat(provider.hasProfile(QUALITY_720P)).isFalse()
+        assertThat(provider.hasProfile(QUALITY_480P)).isFalse()
+        assertThat(provider.getAll(QUALITY_2160P)).isNull()
+        assertThat(provider.getAll(QUALITY_1080P)).isNull()
+        assertThat(provider.getAll(QUALITY_720P)).isNull()
+        assertThat(provider.getAll(QUALITY_480P)).isNull()
+    }
+
+    @Test
+    fun hasQuirk_canReplaceResolution() {
+        val quirks = createFakeQuirks(
+            resolutionMap = mapOf(QUALITY_720P to Size(960, 720))
+        )
+        val provider = QualityResolutionModifiedEncoderProfilesProvider(defaultProvider, quirks)
+
+        assertThat(provider.hasProfile(QUALITY_2160P)).isTrue()
+        assertThat(provider.hasProfile(QUALITY_1080P)).isTrue()
+        assertThat(provider.hasProfile(QUALITY_720P)).isTrue()
+        assertThat(provider.hasProfile(QUALITY_480P)).isTrue()
+        assertThat(provider.getAll(QUALITY_2160P)).isNotNull()
+        assertThat(provider.getAll(QUALITY_1080P)).isNotNull()
+        assertThat(provider.getAll(QUALITY_720P)).isNotNull()
+        assertThat(provider.getAll(QUALITY_480P)).isNotNull()
+
+        for (videoProfile in provider.getAll(QUALITY_720P)!!.videoProfiles) {
+            assertThat(videoProfile.width).isEqualTo(960)
+            assertThat(videoProfile.height).isEqualTo(720)
+        }
+    }
+
+    private fun createFakeEncoderProfilesProvider(
+        qualityToProfilesMap: Map<Int, EncoderProfilesProxy> = emptyMap()
+    ): EncoderProfilesProvider {
+        return FakeEncoderProfilesProvider.Builder().also { builder ->
+            for ((quality, profiles) in qualityToProfilesMap) {
+                builder.add(quality, profiles)
+            }
+        }.build()
+    }
+
+    private fun createFakeQuirks(resolutionMap: Map<Int, Size> = emptyMap()): Quirks {
+        return Quirks(listOf(FakeQuirk(resolutionMap)))
+    }
+
+    class FakeQuirk(
+        private val resolutionMap: Map<Int, Size> = emptyMap(),
+    ) : StretchedVideoResolutionQuirk() {
+
+        override fun getAlternativeResolution(quality: Int): Size? {
+            return resolutionMap[quality]
+        }
+    }
+}
diff --git a/camera/camera-view/api/current.txt b/camera/camera-view/api/current.txt
index 6184aeb..964bc06 100644
--- a/camera/camera-view/api/current.txt
+++ b/camera/camera-view/api/current.txt
@@ -11,16 +11,22 @@
     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.core.DynamicRange getVideoCaptureDynamicRange();
+    method @MainThread public int getVideoCaptureMirrorMode();
     method @MainThread public androidx.camera.video.QualitySelector getVideoCaptureQualitySelector();
+    method @MainThread public android.util.Range<java.lang.Integer!> getVideoCaptureTargetFrameRate();
     method @MainThread public androidx.lifecycle.LiveData<androidx.camera.core.ZoomState!> getZoomState();
     method @MainThread public boolean hasCamera(androidx.camera.core.CameraSelector);
     method @MainThread public boolean isImageAnalysisEnabled();
@@ -36,16 +42,22 @@
     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 setVideoCaptureDynamicRange(androidx.camera.core.DynamicRange);
+    method @MainThread public void setVideoCaptureMirrorMode(int);
     method @MainThread public void setVideoCaptureQualitySelector(androidx.camera.video.QualitySelector);
+    method @MainThread public void setVideoCaptureTargetFrameRate(android.util.Range<java.lang.Integer!>);
     method @MainThread public com.google.common.util.concurrent.ListenableFuture<java.lang.Void!> setZoomRatio(float);
     method @MainThread @RequiresApi(26) public androidx.camera.video.Recording startRecording(androidx.camera.video.FileDescriptorOutputOptions, androidx.camera.view.video.AudioConfig, java.util.concurrent.Executor, androidx.core.util.Consumer<androidx.camera.video.VideoRecordEvent!>);
     method @MainThread public androidx.camera.video.Recording startRecording(androidx.camera.video.FileOutputOptions, androidx.camera.view.video.AudioConfig, java.util.concurrent.Executor, androidx.core.util.Consumer<androidx.camera.video.VideoRecordEvent!>);
@@ -63,12 +75,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..964bc06 100644
--- a/camera/camera-view/api/restricted_current.txt
+++ b/camera/camera-view/api/restricted_current.txt
@@ -11,16 +11,22 @@
     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.core.DynamicRange getVideoCaptureDynamicRange();
+    method @MainThread public int getVideoCaptureMirrorMode();
     method @MainThread public androidx.camera.video.QualitySelector getVideoCaptureQualitySelector();
+    method @MainThread public android.util.Range<java.lang.Integer!> getVideoCaptureTargetFrameRate();
     method @MainThread public androidx.lifecycle.LiveData<androidx.camera.core.ZoomState!> getZoomState();
     method @MainThread public boolean hasCamera(androidx.camera.core.CameraSelector);
     method @MainThread public boolean isImageAnalysisEnabled();
@@ -36,16 +42,22 @@
     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 setVideoCaptureDynamicRange(androidx.camera.core.DynamicRange);
+    method @MainThread public void setVideoCaptureMirrorMode(int);
     method @MainThread public void setVideoCaptureQualitySelector(androidx.camera.video.QualitySelector);
+    method @MainThread public void setVideoCaptureTargetFrameRate(android.util.Range<java.lang.Integer!>);
     method @MainThread public com.google.common.util.concurrent.ListenableFuture<java.lang.Void!> setZoomRatio(float);
     method @MainThread @RequiresApi(26) public androidx.camera.video.Recording startRecording(androidx.camera.video.FileDescriptorOutputOptions, androidx.camera.view.video.AudioConfig, java.util.concurrent.Executor, androidx.core.util.Consumer<androidx.camera.video.VideoRecordEvent!>);
     method @MainThread public androidx.camera.video.Recording startRecording(androidx.camera.video.FileOutputOptions, androidx.camera.view.video.AudioConfig, java.util.concurrent.Executor, androidx.core.util.Consumer<androidx.camera.video.VideoRecordEvent!>);
@@ -63,12 +75,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..154c4fd 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;
@@ -29,6 +28,7 @@
 import android.graphics.Matrix;
 import android.hardware.camera2.CaptureResult;
 import android.os.Build;
+import android.util.Range;
 import android.util.Size;
 
 import androidx.annotation.DoNotInline;
@@ -50,6 +50,7 @@
 import androidx.camera.core.CameraInfoUnavailableException;
 import androidx.camera.core.CameraSelector;
 import androidx.camera.core.CameraUnavailableException;
+import androidx.camera.core.DynamicRange;
 import androidx.camera.core.FocusMeteringAction;
 import androidx.camera.core.FocusMeteringResult;
 import androidx.camera.core.ImageAnalysis;
@@ -59,6 +60,7 @@
 import androidx.camera.core.Logger;
 import androidx.camera.core.MeteringPoint;
 import androidx.camera.core.MeteringPointFactory;
+import androidx.camera.core.MirrorMode;
 import androidx.camera.core.Preview;
 import androidx.camera.core.TorchState;
 import androidx.camera.core.UseCase;
@@ -66,9 +68,12 @@
 import androidx.camera.core.ViewPort;
 import androidx.camera.core.ZoomState;
 import androidx.camera.core.impl.ImageOutputConfig;
+import androidx.camera.core.impl.StreamSpec;
 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 +229,8 @@
 
     @Nullable
     OutputSize mPreviewTargetSize;
+    @Nullable
+    ResolutionSelector mPreviewResolutionSelector;
 
     // Synthetic access
     @SuppressWarnings("WeakerAccess")
@@ -232,6 +239,8 @@
 
     @Nullable
     OutputSize mImageCaptureTargetSize;
+    @Nullable
+    ResolutionSelector mImageCaptureResolutionSelector;
 
     @Nullable
     Executor mImageCaptureIoExecutor;
@@ -250,6 +259,8 @@
 
     @Nullable
     OutputSize mImageAnalysisTargetSize;
+    @Nullable
+    ResolutionSelector mImageAnalysisResolutionSelector;
 
     @NonNull
     VideoCapture<Recorder> mVideoCapture;
@@ -263,6 +274,15 @@
     @NonNull
     QualitySelector mVideoCaptureQualitySelector = Recorder.DEFAULT_QUALITY_SELECTOR;
 
+    @MirrorMode.Mirror
+    private int mVideoCaptureMirrorMode = MirrorMode.MIRROR_MODE_OFF;
+
+    @NonNull
+    private DynamicRange mVideoCaptureDynamicRange = DynamicRange.UNSPECIFIED;
+
+    @NonNull
+    private Range<Integer> mVideoCaptureTargetFrameRate = StreamSpec.FRAME_RATE_RANGE_UNSPECIFIED;
+
     // The latest bound camera.
     // Synthetic access
     @SuppressWarnings("WeakerAccess")
@@ -351,10 +371,6 @@
         };
     }
 
-    private static Recorder generateVideoCaptureRecorder(@NonNull QualitySelector qualitySelector) {
-        return new Recorder.Builder().setQualitySelector(qualitySelector).build();
-    }
-
     /**
      * Gets the application context and preserves the attribution tag.
      *
@@ -483,6 +499,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 +519,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 +599,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 +616,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 +628,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 +675,7 @@
         }
         Preview.Builder builder = new Preview.Builder();
         setTargetOutputSize(builder, mPreviewTargetSize);
+        setResolutionSelector(builder, mPreviewResolutionSelector);
         mPreview = builder.build();
     }
 
@@ -769,8 +841,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 +858,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 +870,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 +951,7 @@
         }
         ImageCapture.Builder builder = new ImageCapture.Builder().setCaptureMode(imageCaptureMode);
         setTargetOutputSize(builder, mImageCaptureTargetSize);
+        setResolutionSelector(builder, mImageCaptureResolutionSelector);
         if (mImageCaptureIoExecutor != null) {
             builder.setIoExecutor(mImageCaptureIoExecutor);
         }
@@ -1016,8 +1133,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 +1152,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 +1254,7 @@
                 .setBackpressureStrategy(strategy)
                 .setImageQueueDepth(imageQueueDepth);
         setTargetOutputSize(builder, mImageAnalysisTargetSize);
+        setResolutionSelector(builder, mImageAnalysisResolutionSelector);
         if (mAnalysisBackgroundExecutor != null) {
             builder.setBackgroundExecutor(mAnalysisBackgroundExecutor);
         }
@@ -1419,6 +1584,104 @@
     }
 
     /**
+     * Sets the mirror mode for video capture.
+     *
+     * <p>Valid values include: {@link MirrorMode#MIRROR_MODE_OFF},
+     * {@link MirrorMode#MIRROR_MODE_ON} and {@link MirrorMode#MIRROR_MODE_ON_FRONT_ONLY}.
+     * If not set, it defaults to {@link MirrorMode#MIRROR_MODE_OFF}.
+     *
+     * @see VideoCapture.Builder#setMirrorMode(int)
+     */
+    @MainThread
+    public void setVideoCaptureMirrorMode(@MirrorMode.Mirror int mirrorMode) {
+        checkMainThread();
+        mVideoCaptureMirrorMode = mirrorMode;
+        unbindVideoAndRecreate();
+        startCameraAndTrackStates();
+    }
+
+    /**
+     * Gets the mirror mode for video capture.
+     */
+    @MainThread
+    @MirrorMode.Mirror
+    public int getVideoCaptureMirrorMode() {
+        checkMainThread();
+        return mVideoCaptureMirrorMode;
+    }
+
+    /**
+     * Sets the {@link DynamicRange} for video capture.
+     *
+     * <p>The dynamic range specifies how the range of colors, highlights and shadows that
+     * are captured by the video producer are displayed on a display. Some dynamic ranges will
+     * allow the video to make full use of the extended range of brightness of a display when
+     * the video is played back.
+     *
+     * <p>The supported dynamic ranges for video capture can be queried through the
+     * {@link androidx.camera.video.VideoCapabilities} returned by
+     * {@link Recorder#getVideoCapabilities(CameraInfo)} via
+     * {@link androidx.camera.video.VideoCapabilities#getSupportedDynamicRanges()}.
+     *
+     * <p>It is possible to choose a high dynamic range (HDR) with unspecified encoding by providing
+     * {@link DynamicRange#HDR_UNSPECIFIED_10_BIT}.
+     *
+     * <p>If the dynamic range is not provided, the default value is {@link DynamicRange#SDR}.
+     *
+     * @see VideoCapture.Builder#setDynamicRange(DynamicRange)
+     */
+    @MainThread
+    public void setVideoCaptureDynamicRange(@NonNull DynamicRange dynamicRange) {
+        checkMainThread();
+        mVideoCaptureDynamicRange = dynamicRange;
+        unbindVideoAndRecreate();
+        startCameraAndTrackStates();
+    }
+
+    /**
+     * Gets the {@link DynamicRange} for video capture.
+     */
+    @MainThread
+    @NonNull
+    public DynamicRange getVideoCaptureDynamicRange() {
+        checkMainThread();
+        return mVideoCaptureDynamicRange;
+    }
+
+    /**
+     * Sets the target frame rate range in frames per second for video capture.
+     *
+     * <p>This target will be used as a part of the heuristics for the algorithm that determines
+     * the final frame rate range and resolution of all concurrently bound use cases.
+     *
+     * <p>It is not guaranteed that this target frame rate will be the final range,
+     * as other use cases as well as frame rate restrictions of the device may affect the
+     * outcome of the algorithm that chooses the actual frame rate.
+     *
+     * <p>By default, the value is {@link StreamSpec#FRAME_RATE_RANGE_UNSPECIFIED}. For supported
+     * frame rates, see {@link CameraInfo#getSupportedFrameRateRanges()}.
+     *
+     * @see VideoCapture.Builder#setTargetFrameRate(Range)
+     */
+    @MainThread
+    public void setVideoCaptureTargetFrameRate(@NonNull Range<Integer> targetFrameRate) {
+        checkMainThread();
+        mVideoCaptureTargetFrameRate = targetFrameRate;
+        unbindVideoAndRecreate();
+        startCameraAndTrackStates();
+    }
+
+    /**
+     * Gets the target frame rate in frames per second for video capture.
+     */
+    @MainThread
+    @NonNull
+    public Range<Integer> getVideoCaptureTargetFrameRate() {
+        checkMainThread();
+        return mVideoCaptureTargetFrameRate;
+    }
+
+    /**
      * Unbinds VideoCapture and recreate with the latest parameters.
      */
     private void unbindVideoAndRecreate() {
@@ -1429,7 +1692,13 @@
     }
 
     private VideoCapture<Recorder> createNewVideoCapture() {
-        return VideoCapture.withOutput(generateVideoCaptureRecorder(mVideoCaptureQualitySelector));
+        Recorder videoRecorder = new Recorder.Builder().setQualitySelector(
+                mVideoCaptureQualitySelector).build();
+        return new VideoCapture.Builder<>(videoRecorder)
+                .setTargetFrameRate(mVideoCaptureTargetFrameRate)
+                .setMirrorMode(mVideoCaptureMirrorMode)
+                .setDynamicRange(mVideoCaptureDynamicRange)
+                .build();
     }
 
     // -----------------
@@ -2031,7 +2300,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..a283985 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
@@ -20,15 +20,18 @@
 import android.graphics.Matrix
 import android.os.Build
 import android.os.Looper.getMainLooper
+import android.util.Range
 import android.util.Rational
 import android.util.Size
 import android.view.Surface
 import androidx.camera.core.AspectRatio
 import androidx.camera.core.CameraSelector
+import androidx.camera.core.DynamicRange
 import androidx.camera.core.ImageAnalysis
 import androidx.camera.core.ImageAnalysis.COORDINATE_SYSTEM_ORIGINAL
 import androidx.camera.core.ImageCapture
 import androidx.camera.core.ImageProxy
+import androidx.camera.core.MirrorMode
 import androidx.camera.core.TorchState
 import androidx.camera.core.ViewPort
 import androidx.camera.core.impl.ImageAnalysisConfig
@@ -36,6 +39,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 +76,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 +315,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 +356,7 @@
 
     @UiThreadTest
     @Test
+    @Suppress("deprecation")
     fun setPreviewResolution() {
         controller.previewTargetSize = targetSizeWithResolution
         assertThat(controller.previewTargetSize).isEqualTo(targetSizeWithResolution)
@@ -327,6 +367,7 @@
 
     @UiThreadTest
     @Test
+    @Suppress("deprecation")
     fun setAnalysisAspectRatio() {
         controller.imageAnalysisTargetSize = targetSizeWithAspectRatio
         assertThat(controller.imageAnalysisTargetSize).isEqualTo(targetSizeWithAspectRatio)
@@ -365,6 +406,7 @@
 
     @UiThreadTest
     @Test
+    @Suppress("deprecation")
     fun setImageCaptureResolution() {
         controller.imageCaptureTargetSize = targetSizeWithResolution
         assertThat(controller.imageCaptureTargetSize).isEqualTo(targetSizeWithResolution)
@@ -375,6 +417,7 @@
 
     @UiThreadTest
     @Test
+    @Suppress("deprecation")
     fun setImageCaptureAspectRatio() {
         controller.imageCaptureTargetSize = targetSizeWithAspectRatio
         assertThat(controller.imageCaptureTargetSize).isEqualTo(targetSizeWithAspectRatio)
@@ -413,6 +456,32 @@
 
     @UiThreadTest
     @Test
+    fun setVideoCaptureMirrorMode() {
+        controller.videoCaptureMirrorMode = MirrorMode.MIRROR_MODE_ON_FRONT_ONLY
+        assertThat(controller.videoCaptureMirrorMode)
+            .isEqualTo(MirrorMode.MIRROR_MODE_ON_FRONT_ONLY)
+        assertThat(controller.mVideoCapture.mirrorMode)
+            .isEqualTo(MirrorMode.MIRROR_MODE_ON_FRONT_ONLY)
+    }
+
+    @UiThreadTest
+    @Test
+    fun setVideoCaptureDynamicRange() {
+        controller.videoCaptureDynamicRange = DynamicRange.HDR10_10_BIT
+        assertThat(controller.videoCaptureDynamicRange).isEqualTo(DynamicRange.HDR10_10_BIT)
+        assertThat(controller.mVideoCapture.dynamicRange).isEqualTo(DynamicRange.HDR10_10_BIT)
+    }
+
+    @UiThreadTest
+    @Test
+    fun setVideoCaptureFrameRate() {
+        controller.videoCaptureTargetFrameRate = Range.create(60, 120)
+        assertThat(controller.videoCaptureTargetFrameRate).isEqualTo(Range.create(60, 120))
+        assertThat(controller.mVideoCapture.targetFrameRate).isEqualTo(Range.create(60, 120))
+    }
+
+    @UiThreadTest
+    @Test
     fun sensorRotationChanges_useCaseTargetRotationUpdated() {
         // Act.
         controller.mDeviceRotationListener.onRotationChanged(Surface.ROTATION_180)
diff --git a/camera/camera-viewfinder/src/main/java/androidx/camera/viewfinder/ViewfinderSurfaceRequestExt.kt b/camera/camera-viewfinder/src/main/java/androidx/camera/viewfinder/ViewfinderSurfaceRequestExt.kt
index 8353647..1f16434 100644
--- a/camera/camera-viewfinder/src/main/java/androidx/camera/viewfinder/ViewfinderSurfaceRequestExt.kt
+++ b/camera/camera-viewfinder/src/main/java/androidx/camera/viewfinder/ViewfinderSurfaceRequestExt.kt
@@ -26,7 +26,7 @@
 /**
  * Populates [ViewfinderSurfaceRequest.Builder] from [CameraCharacteristics].
  *
- * <p>The [CameraCharacteristics] will be used to populate information including lens facing,
+ * The [CameraCharacteristics] will be used to populate information including lens facing,
  * sensor orientation and [ImplementationMode]. If the hardware level is legacy,
  * the [ImplementationMode] will be set to [ImplementationMode.COMPATIBLE].
  */
diff --git a/camera/integration-tests/coretestapp/src/main/AndroidManifest.xml b/camera/integration-tests/coretestapp/src/main/AndroidManifest.xml
index 5ee37e2..1892026 100644
--- a/camera/integration-tests/coretestapp/src/main/AndroidManifest.xml
+++ b/camera/integration-tests/coretestapp/src/main/AndroidManifest.xml
@@ -76,6 +76,16 @@
                 <category android:name="android.intent.category.LAUNCHER" />
             </intent-filter>
         </activity>
+        <activity
+            android:name=".ServiceSettingActivity"
+            android:exported="true"
+            android:label="Service Test App"
+            android:taskAffinity="androidx.camera.integration.core.ServiceSettingActivity">
+            <intent-filter>
+                <action android:name="android.intent.action.MAIN" />
+                <category android:name="android.intent.category.LAUNCHER" />
+            </intent-filter>
+        </activity>
         <service
             android:name=".CameraXService"
             android:exported="true"
@@ -86,6 +96,7 @@
                 <action android:name="androidx.camera.integration.core.intent.action.TAKE_PICTURE" />
                 <action android:name="androidx.camera.integration.core.intent.action.START_RECORDING" />
                 <action android:name="androidx.camera.integration.core.intent.action.STOP_RECORDING" />
+                <action android:name="androidx.camera.integration.core.intent.action.STOP_SERVICE" />
             </intent-filter>
         </service>
     </application>
@@ -100,4 +111,5 @@
     <uses-permission android:name="android.permission.FOREGROUND_SERVICE" />
     <uses-permission android:name="android.permission.FOREGROUND_SERVICE_CAMERA" />
     <uses-permission android:name="android.permission.FOREGROUND_SERVICE_MICROPHONE" />
+    <uses-permission android:name="android.permission.POST_NOTIFICATIONS" />
 </manifest>
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/coretestapp/src/main/java/androidx/camera/integration/core/CameraXService.java b/camera/integration-tests/coretestapp/src/main/java/androidx/camera/integration/core/CameraXService.java
index ac8e9cf..66fa64d 100644
--- a/camera/integration-tests/coretestapp/src/main/java/androidx/camera/integration/core/CameraXService.java
+++ b/camera/integration-tests/coretestapp/src/main/java/androidx/camera/integration/core/CameraXService.java
@@ -32,6 +32,7 @@
 
 import android.app.NotificationChannel;
 import android.app.NotificationManager;
+import android.app.PendingIntent;
 import android.content.ContentValues;
 import android.content.Intent;
 import android.media.MediaScannerConnection;
@@ -43,6 +44,9 @@
 import android.os.SystemClock;
 import android.provider.MediaStore;
 import android.util.Log;
+import android.view.View;
+import android.widget.RemoteViews;
+import android.widget.Toast;
 
 import androidx.annotation.DoNotInline;
 import androidx.annotation.NonNull;
@@ -73,6 +77,7 @@
 import java.io.File;
 import java.text.Format;
 import java.text.SimpleDateFormat;
+import java.util.ArrayList;
 import java.util.Calendar;
 import java.util.Collection;
 import java.util.Collections;
@@ -84,6 +89,7 @@
 import java.util.Set;
 import java.util.concurrent.CountDownLatch;
 import java.util.concurrent.ExecutionException;
+import java.util.concurrent.atomic.AtomicInteger;
 
 /**
  * A service used to test background UseCases binding and camera operations.
@@ -92,6 +98,7 @@
     private static final String TAG = "CameraXService";
     private static final int NOTIFICATION_ID = 1;
     private static final String CHANNEL_ID_SERVICE_INFO = "channel_service_info";
+    private static final int FRAME_COUNT_TO_UPDATE_ANALYSIS_INFO = 60;
 
     // Actions
     public static final String ACTION_BIND_USE_CASES =
@@ -102,6 +109,8 @@
             "androidx.camera.integration.core.intent.action.START_RECORDING";
     public static final String ACTION_STOP_RECORDING =
             "androidx.camera.integration.core.intent.action.STOP_RECORDING";
+    public static final String ACTION_STOP_SERVICE =
+            "androidx.camera.integration.core.intent.action.STOP_SERVICE";
 
     // Extras
     public static final String EXTRA_VIDEO_CAPTURE_ENABLED = "EXTRA_VIDEO_CAPTURE_ENABLED";
@@ -109,6 +118,7 @@
     public static final String EXTRA_IMAGE_ANALYSIS_ENABLED = "EXTRA_IMAGE_ANALYSIS_ENABLED";
 
     private final IBinder mBinder = new CameraXServiceBinder();
+    private final AtomicInteger mAnalysisFrameCount = new AtomicInteger(0);
 
     ////////////////////////////////////////////////////////////////////////////////////////////////
     //                          Members only accessed on main thread                              //
@@ -116,6 +126,8 @@
     private final Map<Class<?>, UseCase> mBoundUseCases = new HashMap<>();
     @Nullable
     private Recording mActiveRecording;
+    @Nullable
+    private NotificationCompat.Builder mNotificationBuilder;
     //--------------------------------------------------------------------------------------------//
 
     ////////////////////////////////////////////////////////////////////////////////////////////////
@@ -159,6 +171,9 @@
                 startRecording();
             } else if (ACTION_STOP_RECORDING.equals(action)) {
                 stopRecording();
+            } else if (ACTION_STOP_SERVICE.equals(action)) {
+                stopForeground(true);
+                stopSelf();
             }
         }
         return super.onStartCommand(intent, flags, startId);
@@ -166,11 +181,12 @@
 
     private void makeForeground() {
         createNotificationChannel();
-        NotificationCompat.Builder notificationBuilder = new NotificationCompat.Builder(this,
+        mNotificationBuilder = new NotificationCompat.Builder(this,
                 CHANNEL_ID_SERVICE_INFO)
                 .setSmallIcon(android.R.drawable.ic_menu_camera)
-                .setStyle(new NotificationCompat.DecoratedCustomViewStyle());
-        startForeground(NOTIFICATION_ID, notificationBuilder.build());
+                .setStyle(new NotificationCompat.DecoratedCustomViewStyle())
+                .setCustomContentView(getNotificationView());
+        startForeground(NOTIFICATION_ID, mNotificationBuilder.build());
     }
 
     private void bindToLifecycle(@NonNull Intent intent) {
@@ -191,16 +207,12 @@
                 cameraProvider.bindToLifecycle(this, DEFAULT_BACK_CAMERA, useCaseGroup);
                 boundUseCases = useCaseGroup.getUseCases();
             } catch (IllegalArgumentException e) {
-                Log.w(TAG, "Failed to bind by " + e, e);
+                String msg = "Failed to bind by " + e;
+                Log.w(TAG, msg, e);
+                Toast.makeText(this, msg, Toast.LENGTH_LONG).show();
             }
         }
-        Log.d(TAG, "Bound UseCases: " + boundUseCases);
-        for (UseCase boundUseCase : boundUseCases) {
-            mBoundUseCases.put(boundUseCase.getClass(), boundUseCase);
-        }
-        if (mOnUseCaseBoundCallback != null) {
-            mOnUseCaseBoundCallback.accept(boundUseCases);
-        }
+        onUseCaseBound(boundUseCases);
     }
 
     @Nullable
@@ -229,6 +241,20 @@
         return hasUseCase ? useCaseGroupBuilder.build() : null;
     }
 
+    private void onUseCaseBound(@NonNull List<UseCase> boundUseCases) {
+        Log.d(TAG, "Bound UseCases: " + boundUseCases);
+        for (UseCase boundUseCase : boundUseCases) {
+            mBoundUseCases.put(boundUseCase.getClass(), boundUseCase);
+        }
+        if (mOnUseCaseBoundCallback != null) {
+            mOnUseCaseBoundCallback.accept(boundUseCases);
+        }
+        mAnalysisFrameCount.set(0);
+        updateNotification();
+        Toast.makeText(CameraXService.this, getHumanReadableName(boundUseCases) + " is bound",
+                Toast.LENGTH_SHORT).show();
+    }
+
     private void createNotificationChannel() {
         if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
             NotificationChannel serviceChannel = Api26Impl.newNotificationChannel(
@@ -245,6 +271,71 @@
         return checkNotNull(ContextCompat.getSystemService(this, NotificationManager.class));
     }
 
+    private void updateNotification() {
+        NotificationCompat.Builder builder = checkNotNull(mNotificationBuilder);
+        builder.setCustomContentView(getNotificationView());
+        getNotificationManager().notify(NOTIFICATION_ID, builder.build());
+    }
+
+    @NonNull
+    private RemoteViews getNotificationView() {
+        RemoteViews notificationView = new RemoteViews(getPackageName(),
+                R.layout.notification_service_collapsed);
+
+        // Update VideoCapture view
+        if (getVideoCapture() != null) {
+            PendingIntent recordingIntent;
+            int recordingIconResId;
+            int recordingStateVisibility;
+            RemoteViews videoView = new RemoteViews(getPackageName(),
+                    R.layout.notification_video_widget);
+            if (mActiveRecording == null) {
+                recordingIntent = PendingIntent.getService(this, 0,
+                        new Intent(ACTION_START_RECORDING),
+                        PendingIntent.FLAG_UPDATE_CURRENT);
+                recordingIconResId = android.R.drawable.ic_media_play;
+                recordingStateVisibility = View.GONE;
+            } else {
+                recordingIntent = PendingIntent.getService(this, 0,
+                        new Intent(ACTION_STOP_RECORDING),
+                        PendingIntent.FLAG_IMMUTABLE);
+                recordingIconResId = R.drawable.ic_media_stop;
+                recordingStateVisibility = View.VISIBLE;
+            }
+            videoView.setOnClickPendingIntent(R.id.control, recordingIntent);
+            videoView.setImageViewResource(R.id.control, recordingIconResId);
+            videoView.setViewVisibility(R.id.state, recordingStateVisibility);
+            notificationView.addView(R.id.video_container, videoView);
+        }
+
+        // Update ImageCapture view
+        if (getImageCapture() != null) {
+            RemoteViews imageView = new RemoteViews(getPackageName(),
+                    R.layout.notification_image_widget);
+            PendingIntent takePictureIntent = PendingIntent.getService(this, 0,
+                    new Intent(ACTION_TAKE_PICTURE),
+                    PendingIntent.FLAG_IMMUTABLE);
+            imageView.setOnClickPendingIntent(R.id.picture, takePictureIntent);
+            notificationView.addView(R.id.image_container, imageView);
+        }
+
+        // Update ImageAnalysis view
+        if (getImageAnalysis() != null) {
+            RemoteViews analysisView = new RemoteViews(getPackageName(),
+                    R.layout.notification_analysis_widget);
+            String analysisMsg = "Analysis:" + mAnalysisFrameCount.get();
+            analysisView.setTextViewText(R.id.text_view, analysisMsg);
+            notificationView.addView(R.id.analysis_container, analysisView);
+        }
+
+        // Update exit button
+        notificationView.setOnClickPendingIntent(R.id.exit,
+                PendingIntent.getService(this, 0, new Intent(ACTION_STOP_SERVICE),
+                        PendingIntent.FLAG_IMMUTABLE));
+
+        return notificationView;
+    }
+
     @Nullable
     private ImageCapture getImageCapture() {
         return (ImageCapture) mBoundUseCases.get(ImageCapture.class);
@@ -256,6 +347,11 @@
         return (VideoCapture<Recorder>) mBoundUseCases.get(VideoCapture.class);
     }
 
+    @Nullable
+    private ImageAnalysis getImageAnalysis() {
+        return (ImageAnalysis) mBoundUseCases.get(ImageAnalysis.class);
+    }
+
     private void takePicture() {
         ImageCapture imageCapture = getImageCapture();
         if (imageCapture == null) {
@@ -282,8 +378,10 @@
                     public void onImageSaved(
                             @NonNull ImageCapture.OutputFileResults outputFileResults) {
                         long durationMs = SystemClock.elapsedRealtime() - startTimeMs;
-                        Log.d(TAG, "Saved image " + outputFileResults.getSavedUri()
-                                + "  (" + durationMs + " ms)");
+                        String msg = "Saved image " + outputFileResults.getSavedUri()
+                                + "  (" + durationMs + " ms)";
+                        Log.d(TAG, msg);
+                        Toast.makeText(CameraXService.this, msg, Toast.LENGTH_LONG).show();
                         mSavedMediaUri.add(outputFileResults.getSavedUri());
                         if (mTakePictureLatch != null) {
                             mTakePictureLatch.countDown();
@@ -292,8 +390,9 @@
 
                     @Override
                     public void onError(@NonNull ImageCaptureException exception) {
-                        Log.e(TAG, "Failed to save image by " + exception.getImageCaptureError(),
-                                exception);
+                        String msg = "Failed to save image by " + exception.getImageCaptureError();
+                        Log.e(TAG, msg, exception);
+                        Toast.makeText(CameraXService.this, msg, Toast.LENGTH_SHORT).show();
                     }
                 });
     }
@@ -332,6 +431,7 @@
             mActiveRecording = pendingRecording
                     .withAudioEnabled()
                     .start(ContextCompat.getMainExecutor(this), mRecordingListener);
+            updateNotification();
         } else {
             Log.e(TAG, "It should stop the active recording before start a new one.");
         }
@@ -352,7 +452,19 @@
         }
     }
 
+    @NonNull
+    private static String getHumanReadableName(@NonNull List<UseCase> useCases) {
+        List<String> useCaseNames = new ArrayList<>();
+        for (UseCase useCase : useCases) {
+            useCaseNames.add(useCase.getClass().getSimpleName());
+        }
+        return useCaseNames.size() > 0 ? String.join(" | ", useCaseNames) : "No UseCase";
+    }
+
     private final ImageAnalysis.Analyzer mAnalyzer = image -> {
+        if (mAnalysisFrameCount.getAndIncrement() % FRAME_COUNT_TO_UPDATE_ANALYSIS_INFO == 0) {
+            updateNotification();
+        }
         if (mAnalysisFrameLatch != null) {
             mAnalysisFrameLatch.countDown();
         }
@@ -396,6 +508,7 @@
                         msg += " with code (" + finalize.getError() + ")";
                     }
                     Log.d(TAG, msg, finalize.getCause());
+                    Toast.makeText(CameraXService.this, msg, Toast.LENGTH_LONG).show();
 
                     mSavedMediaUri.add(uri);
                     if (mRecordVideoLatch != null) {
@@ -406,8 +519,10 @@
                     String errMsg = "Video capture failed by (" + finalize.getError() + "): "
                             + finalize.getCause();
                     Log.e(TAG, errMsg, finalize.getCause());
+                    Toast.makeText(CameraXService.this, errMsg, Toast.LENGTH_LONG).show();
             }
             mActiveRecording = null;
+            updateNotification();
         }
     };
 
diff --git a/camera/integration-tests/coretestapp/src/main/java/androidx/camera/integration/core/ServiceSettingActivity.java b/camera/integration-tests/coretestapp/src/main/java/androidx/camera/integration/core/ServiceSettingActivity.java
new file mode 100644
index 0000000..6e13d8f
--- /dev/null
+++ b/camera/integration-tests/coretestapp/src/main/java/androidx/camera/integration/core/ServiceSettingActivity.java
@@ -0,0 +1,149 @@
+/*
+ * 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.integration.core;
+
+import static androidx.camera.integration.core.CameraXService.ACTION_BIND_USE_CASES;
+import static androidx.camera.integration.core.CameraXService.EXTRA_IMAGE_ANALYSIS_ENABLED;
+import static androidx.camera.integration.core.CameraXService.EXTRA_IMAGE_CAPTURE_ENABLED;
+import static androidx.camera.integration.core.CameraXService.EXTRA_VIDEO_CAPTURE_ENABLED;
+
+import android.Manifest;
+import android.content.Intent;
+import android.content.pm.PackageManager;
+import android.os.Build;
+import android.os.Bundle;
+import android.widget.Toast;
+import android.widget.ToggleButton;
+
+import androidx.activity.result.ActivityResultLauncher;
+import androidx.activity.result.contract.ActivityResultContracts;
+import androidx.annotation.NonNull;
+import androidx.annotation.Nullable;
+import androidx.appcompat.app.AppCompatActivity;
+import androidx.core.content.ContextCompat;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Objects;
+
+/**
+ * An activity to configure CameraXService.
+ *
+ * <p>It will:
+ * <ul>
+ *   <li>Grant runtime permissions.</li>
+ *   <li>Start the CameraXService automatically.</li>
+ *   <li>Control which use cases are bound to the CameraXService lifecycle.</li>
+ * </ul>
+ */
+public class ServiceSettingActivity extends AppCompatActivity {
+
+    private static final String[] REQUIRED_PERMISSIONS;
+
+    static {
+        List<String> permissions = new ArrayList<>();
+        permissions.add(android.Manifest.permission.CAMERA);
+        permissions.add(android.Manifest.permission.RECORD_AUDIO);
+        // From Android T, skips the permission check of WRITE_EXTERNAL_STORAGE since it won't be
+        // granted any more.
+        if (Build.VERSION.SDK_INT < Build.VERSION_CODES.TIRAMISU) {
+            permissions.add(Manifest.permission.WRITE_EXTERNAL_STORAGE);
+        } else {
+            // From Android T, POST_NOTIFICATIONS is required for foreground service to post
+            // notification.
+            permissions.add(Manifest.permission.POST_NOTIFICATIONS);
+        }
+        REQUIRED_PERMISSIONS = permissions.toArray(new String[0]);
+    }
+
+    private ToggleButton mButtonVideo;
+    private ToggleButton mButtonImage;
+    private ToggleButton mButtonAnalysis;
+
+    @Override
+    protected void onCreate(@Nullable Bundle savedInstanceState) {
+        super.onCreate(savedInstanceState);
+
+        setContentView(R.layout.activity_service_setting);
+        mButtonVideo = findViewById(R.id.video_toggle);
+        mButtonImage = findViewById(R.id.image_toggle);
+        mButtonAnalysis = findViewById(R.id.analysis_toggle);
+
+        mButtonVideo.setOnClickListener(v -> bindUseCases());
+        mButtonImage.setOnClickListener(v -> bindUseCases());
+        mButtonAnalysis.setOnClickListener(v -> bindUseCases());
+
+        grantPermissions();
+    }
+
+    private void onPermissionGranted() {
+        launchService();
+        bindUseCases();
+    }
+
+    private void launchService() {
+        Intent intent = createServiceIntent(null);
+        ContextCompat.startForegroundService(this, intent);
+    }
+
+    private void bindUseCases() {
+        Intent intent = createServiceIntent(ACTION_BIND_USE_CASES);
+        intent.putExtra(EXTRA_VIDEO_CAPTURE_ENABLED, mButtonVideo.isChecked());
+        intent.putExtra(EXTRA_IMAGE_CAPTURE_ENABLED, mButtonImage.isChecked());
+        intent.putExtra(EXTRA_IMAGE_ANALYSIS_ENABLED, mButtonAnalysis.isChecked());
+        ContextCompat.startForegroundService(this, intent);
+    }
+
+    @NonNull
+    private Intent createServiceIntent(@Nullable String action) {
+        Intent intent = new Intent(this, CameraXService.class);
+        intent.setAction(action);
+        return intent;
+    }
+
+    private boolean isPermissionMissing() {
+        for (String permission : REQUIRED_PERMISSIONS) {
+            if (ContextCompat.checkSelfPermission(this, permission)
+                    != PackageManager.PERMISSION_GRANTED) {
+                return true;
+            }
+        }
+        return false;
+    }
+
+    private void grantPermissions() {
+        if (isPermissionMissing()) {
+            ActivityResultLauncher<String[]> permissionLauncher = registerForActivityResult(
+                    new ActivityResultContracts.RequestMultiplePermissions(),
+                    result -> {
+                        for (String permission : REQUIRED_PERMISSIONS) {
+                            if (!Objects.requireNonNull(result.get(permission))) {
+                                Toast.makeText(this, "Camera permission denied.",
+                                        Toast.LENGTH_SHORT).show();
+                                finish();
+                                return;
+                            }
+                        }
+                        onPermissionGranted();
+                    });
+
+            permissionLauncher.launch(REQUIRED_PERMISSIONS);
+        } else {
+            onPermissionGranted();
+        }
+    }
+}
diff --git a/camera/integration-tests/coretestapp/src/main/java/androidx/camera/integration/core/VideoCameraSwitchingActivity.java b/camera/integration-tests/coretestapp/src/main/java/androidx/camera/integration/core/VideoCameraSwitchingActivity.java
index 976b5f3..84a51b0 100644
--- a/camera/integration-tests/coretestapp/src/main/java/androidx/camera/integration/core/VideoCameraSwitchingActivity.java
+++ b/camera/integration-tests/coretestapp/src/main/java/androidx/camera/integration/core/VideoCameraSwitchingActivity.java
@@ -275,7 +275,7 @@
     private void exportTestInformation() {
         String information = KEY_DEVICE_ORIENTATION + ": " + mDeviceOrientation;
         FileUtil.writeTextToExternalFile(information,
-                generateFileName(INFO_FILE_PREFIX, false), "txt");
+                generateFileName(INFO_FILE_PREFIX, true), "txt");
     }
 
     @NonNull
diff --git a/camera/integration-tests/coretestapp/src/main/res/drawable/ic_media_stop.png b/camera/integration-tests/coretestapp/src/main/res/drawable/ic_media_stop.png
new file mode 100644
index 0000000..8ea7efe
--- /dev/null
+++ b/camera/integration-tests/coretestapp/src/main/res/drawable/ic_media_stop.png
Binary files differ
diff --git a/camera/integration-tests/coretestapp/src/main/res/layout/activity_service_setting.xml b/camera/integration-tests/coretestapp/src/main/res/layout/activity_service_setting.xml
new file mode 100644
index 0000000..5682525
--- /dev/null
+++ b/camera/integration-tests/coretestapp/src/main/res/layout/activity_service_setting.xml
@@ -0,0 +1,87 @@
+<?xml version="1.0" encoding="utf-8"?><!--
+  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.
+  -->
+
+<androidx.constraintlayout.widget.ConstraintLayout
+    xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:app="http://schemas.android.com/apk/res-auto"
+    xmlns:tools="http://schemas.android.com/tools"
+    android:id="@+id/constraintLayout"
+    android:layout_width="match_parent"
+    android:layout_height="match_parent"
+    tools:context="androidx.camera.integration.core.ServiceSettingActivity">
+
+    <ToggleButton
+        android:id="@+id/video_toggle"
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:scaleType="fitXY"
+        android:textOn="@string/toggle_video_on"
+        android:textOff="@string/toggle_video_off"
+        android:checked="true"
+        android:background="@drawable/usecase_toggle_bg_selector"
+        app:layout_constraintBottom_toBottomOf="parent"
+        app:layout_constraintEnd_toEndOf="parent"
+        app:layout_constraintHorizontal_bias="0"
+        app:layout_constraintStart_toStartOf="@+id/constraintLayout"
+        app:layout_constraintTop_toTopOf="parent"
+        app:layout_constraintVertical_bias="0" />
+
+    <ToggleButton
+        android:id="@+id/image_toggle"
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:scaleType="fitXY"
+        android:textOn="@string/toggle_photo_on"
+        android:textOff="@string/toggle_photo_off"
+        android:checked="true"
+        android:background="@drawable/usecase_toggle_bg_selector"
+        app:layout_constraintBottom_toBottomOf="parent"
+        app:layout_constraintEnd_toEndOf="parent"
+        app:layout_constraintHorizontal_bias="0.5"
+        app:layout_constraintStart_toStartOf="@+id/constraintLayout"
+        app:layout_constraintTop_toTopOf="parent"
+        app:layout_constraintVertical_bias="0"
+        />
+
+    <ToggleButton
+        android:id="@+id/analysis_toggle"
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:scaleType="fitXY"
+        android:textOn="@string/toggle_analysis_on"
+        android:textOff="@string/toggle_analysis_off"
+        android:checked="false"
+        android:background="@drawable/usecase_toggle_bg_selector"
+        app:layout_constraintBottom_toBottomOf="parent"
+        app:layout_constraintEnd_toEndOf="parent"
+        app:layout_constraintHorizontal_bias="1"
+        app:layout_constraintStart_toStartOf="@+id/constraintLayout"
+        app:layout_constraintTop_toTopOf="parent"
+        app:layout_constraintVertical_bias="0"
+        />
+
+    <TextView
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:maxLines="2"
+        android:text="@string/foreground_service_note"
+        android:gravity="center"
+        app:layout_constraintBottom_toBottomOf="parent"
+        app:layout_constraintLeft_toLeftOf="parent"
+        app:layout_constraintRight_toRightOf="parent"
+        app:layout_constraintTop_toTopOf="parent" />
+
+</androidx.constraintlayout.widget.ConstraintLayout>
\ No newline at end of file
diff --git a/camera/integration-tests/coretestapp/src/main/res/layout/notification_analysis_widget.xml b/camera/integration-tests/coretestapp/src/main/res/layout/notification_analysis_widget.xml
new file mode 100644
index 0000000..5e5435e
--- /dev/null
+++ b/camera/integration-tests/coretestapp/src/main/res/layout/notification_analysis_widget.xml
@@ -0,0 +1,37 @@
+<?xml version="1.0" encoding="utf-8"?><!--
+  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.
+  -->
+
+<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
+    android:layout_width="match_parent"
+    android:layout_height="wrap_content"
+    android:divider="@android:drawable/divider_horizontal_dark"
+    android:gravity="center_vertical"
+    android:orientation="horizontal"
+    android:showDividers="middle">
+
+    <TextView
+        android:id="@+id/text_view"
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:layout_marginLeft="2dp"
+        android:layout_weight="1"
+        android:elevation="2dp"
+        android:maxLines="2"
+        android:padding="3dp"
+        android:scaleType="fitXY"
+        style="@style/TextAppearance.Compat.Notification"
+        />
+</LinearLayout>
diff --git a/camera/integration-tests/coretestapp/src/main/res/layout/notification_image_widget.xml b/camera/integration-tests/coretestapp/src/main/res/layout/notification_image_widget.xml
new file mode 100644
index 0000000..ef8bdb7
--- /dev/null
+++ b/camera/integration-tests/coretestapp/src/main/res/layout/notification_image_widget.xml
@@ -0,0 +1,34 @@
+<?xml version="1.0" encoding="utf-8"?><!--
+  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.
+  -->
+
+<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
+    android:layout_width="match_parent"
+    android:layout_height="wrap_content"
+    android:divider="@android:drawable/divider_horizontal_dark"
+    android:gravity="center_vertical"
+    android:orientation="horizontal"
+    android:showDividers="middle">
+
+    <ImageButton
+        android:id="@+id/picture"
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:layout_marginLeft="2dp"
+        android:background="@drawable/round_button"
+        android:contentDescription="Take Picture"
+        android:padding="3dp"
+        android:src="@android:drawable/ic_menu_camera" />
+</LinearLayout>
diff --git a/camera/integration-tests/coretestapp/src/main/res/layout/notification_service_collapsed.xml b/camera/integration-tests/coretestapp/src/main/res/layout/notification_service_collapsed.xml
new file mode 100644
index 0000000..d8953b0
--- /dev/null
+++ b/camera/integration-tests/coretestapp/src/main/res/layout/notification_service_collapsed.xml
@@ -0,0 +1,49 @@
+<?xml version="1.0" encoding="utf-8"?><!--
+  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.
+  -->
+
+<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
+    android:layout_width="match_parent"
+    android:layout_height="wrap_content"
+    android:divider="@android:drawable/divider_horizontal_dark"
+    android:gravity="center_vertical"
+    android:orientation="horizontal"
+    android:showDividers="middle">
+
+    <FrameLayout
+        android:id="@+id/video_container"
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content" />
+
+    <FrameLayout
+        android:id="@+id/image_container"
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content" />
+
+    <FrameLayout
+        android:id="@+id/analysis_container"
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:layout_weight="1" />
+
+    <ImageButton
+        android:id="@+id/exit"
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:background="@drawable/round_button"
+        android:contentDescription="Exit"
+        android:padding="3dp"
+        android:src="@android:drawable/ic_menu_close_clear_cancel" />
+</LinearLayout>
diff --git a/camera/integration-tests/coretestapp/src/main/res/layout/notification_video_widget.xml b/camera/integration-tests/coretestapp/src/main/res/layout/notification_video_widget.xml
new file mode 100644
index 0000000..7b64e8a
--- /dev/null
+++ b/camera/integration-tests/coretestapp/src/main/res/layout/notification_video_widget.xml
@@ -0,0 +1,45 @@
+<?xml version="1.0" encoding="utf-8"?><!--
+  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.
+  -->
+
+<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
+    android:layout_width="match_parent"
+    android:layout_height="wrap_content"
+    android:divider="@android:drawable/divider_horizontal_dark"
+    android:gravity="center_vertical"
+    android:orientation="horizontal"
+    android:showDividers="middle">
+
+    <ImageButton
+        android:id="@+id/control"
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:layout_marginLeft="2dp"
+        android:background="@drawable/round_button"
+        android:scaleType="fitXY"
+        android:contentDescription="Start/Stop video recording"
+        android:padding="3dp"
+        android:src="@android:drawable/ic_media_play" />
+
+    <ImageView
+        android:id="@+id/state"
+        android:layout_width="25dp"
+        android:layout_height="25dp"
+        android:layout_marginLeft="2dp"
+        android:background="@android:color/transparent"
+        android:scaleType="fitXY"
+        android:src="@android:drawable/presence_video_busy"
+        android:visibility="gone" />
+</LinearLayout>
diff --git a/camera/integration-tests/coretestapp/src/main/res/values/donottranslate-strings.xml b/camera/integration-tests/coretestapp/src/main/res/values/donottranslate-strings.xml
index 65335ef..949bfd4 100644
--- a/camera/integration-tests/coretestapp/src/main/res/values/donottranslate-strings.xml
+++ b/camera/integration-tests/coretestapp/src/main/res/values/donottranslate-strings.xml
@@ -17,6 +17,7 @@
 
 <resources>
     <string name="camerax_service">CameraX Service</string>
+    <string name="foreground_service_note">Foreground Service control is in the notification.\nLeave this activity and play on notification.</string>
     <string name="fps_counter_template">%1$s fps</string>
     <string name="toggle_preview_on">preview\non</string>
     <string name="toggle_preview_off">preview\noff</string>
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..cabdbf3 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 V 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..931cbcb 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 V 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..217093a 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 value computed by `computeBlock`.
+     */
+    public inline fun compute(key: K, computeBlock: (key: K, value: V?) -> V): V {
+        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 computedValue
+    }
+
+    /**
      * 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..fab395c 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 computed = map.compute("Hello") { _, _ ->
+            "New World"
+        }
+        assertEquals("New World", map["Hello"])
+        assertEquals("New World", computed)
+
+        computed = map.compute("Bonjour") { _, _ ->
+            "Monde"
+        }
+        assertEquals("Monde", map["Bonjour"])
+        assertEquals("Monde", computed)
+
+        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/collection/collection/template/ValueClassList.kt.template b/collection/collection/template/ValueClassList.kt.template
index 34d2ea2..3da978b 100644
--- a/collection/collection/template/ValueClassList.kt.template
+++ b/collection/collection/template/ValueClassList.kt.template
@@ -13,9 +13,20 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-@file:Suppress("NOTHING_TO_INLINE", "RedundantVisibilityModifier", "UnusedImport")
-/* ktlint-disable max-line-length */
-/* ktlint-disable import-ordering */
+
+@file:Suppress(
+    "RedundantVisibilityModifier",
+    "KotlinRedundantDiagnosticSuppress",
+    "KotlinConstantConditions",
+    "PropertyName",
+    "ConstPropertyName",
+    "PrivatePropertyName",
+    "NOTHING_TO_INLINE",
+    "UnusedImport",
+    "ktlint:standard:import-ordering",
+    "ktlint:standard:max-line-length",
+    "ktlint:standard:no-unused-imports",
+)
 
 package PACKAGE
 
@@ -28,22 +39,14 @@
 import kotlin.contracts.contract
 import kotlin.jvm.JvmInline
 
-// To use this template, you must substitute several strings. You can copy this and search/replace
-// or use a sed command. These properties must be changed:
-// * PACKAGE - target package (e.g. androidx.compose.ui.ui.collection)
-// * VALUE_PKG - package in which the value class resides
-// * VALUE_CLASS - the value class contained in the list (e.g. Color or Offset)
-// * vALUE_CLASS - the value class, with the first letter lower case (e.g. color or offset)
-// * BACKING_PROPERTY - the field in VALUE_CLASS containing the backing primitive (e.g. packedValue)
-// * PRIMITIVE - the primitive type of the backing list (e.g. Long or Float)
-// * TO_PARAM - an operation done on the primitive to convert to the value class parameter
+// -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
+// DO NOT MAKE CHANGES to this kotlin source file.
 //
-// For example, to create a ColorList:
-// sed -e "s/PACKAGE/androidx.compose.ui.graphics/" -e "s/VALUE_CLASS/Color/g" \
-//     -e "s/vALUE_CLASS/color/g" -e "s/BACKING_PROPERTY/value.toLong()/g" -e "s/PRIMITIVE/Long/g" \
-//     -e "s/TO_PARAM/.toULong()/g" -e "s/VALUE_PKG/androidx.compose.ui.graphics/g" \
-//     collection/collection/template/ValueClassList.kt.template \
-//     > compose/ui/ui-graphics/src/commonMain/kotlin/androidx/compose/ui/graphics/ColorList.kt
+// This file was generated from a template:
+//   collection/collection/template/ValueClassList.kt.template
+// Make a change to the original template and run the generateValueClassCollections.sh script
+// to ensure the change is available on all versions of the list.
+// -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
 
 /**
  * [VALUE_CLASSList] is a [List]-like collection for [VALUE_CLASS] values. It allows retrieving
@@ -58,7 +61,7 @@
  */
 @OptIn(ExperimentalContracts::class)
 @JvmInline
-internal value class VALUE_CLASSList(val list: PRIMITIVEList) {
+VISIBILITY value class VALUE_CLASSList(val list: PRIMITIVEList) {
     /**
      * The number of elements in the [VALUE_CLASSList].
      */
@@ -378,7 +381,7 @@
  */
 @OptIn(ExperimentalContracts::class)
 @JvmInline
-internal value class MutableVALUE_CLASSList(val list: MutablePRIMITIVEList) {
+VISIBILITY value class MutableVALUE_CLASSList(val list: MutablePRIMITIVEList) {
     public constructor(initialCapacity: Int = 16) : this(MutablePRIMITIVEList(initialCapacity))
 
     /**
@@ -853,23 +856,23 @@
 /**
  * @return a read-only [VALUE_CLASSList] with nothing in it.
  */
-internal inline fun emptyVALUE_CLASSList(): VALUE_CLASSList = VALUE_CLASSList(emptyPRIMITIVEList())
+VISIBILITY inline fun emptyVALUE_CLASSList(): VALUE_CLASSList = VALUE_CLASSList(emptyPRIMITIVEList())
 
 /**
  * @return a read-only [VALUE_CLASSList] with nothing in it.
  */
-internal inline fun vALUE_CLASSListOf(): VALUE_CLASSList = VALUE_CLASSList(emptyPRIMITIVEList())
+VISIBILITY inline fun vALUE_CLASSListOf(): VALUE_CLASSList = VALUE_CLASSList(emptyPRIMITIVEList())
 
 /**
  * @return a new read-only [VALUE_CLASSList] with [element1] as the only item in the list.
  */
-internal inline fun vALUE_CLASSListOf(element1: VALUE_CLASS): VALUE_CLASSList =
+VISIBILITY inline fun vALUE_CLASSListOf(element1: VALUE_CLASS): VALUE_CLASSList =
     VALUE_CLASSList(mutablePRIMITIVEListOf(element1.BACKING_PROPERTY))
 
 /**
  * @return a new read-only [VALUE_CLASSList] with 2 elements, [element1] and [element2], in order.
  */
-internal inline fun vALUE_CLASSListOf(element1: VALUE_CLASS, element2: VALUE_CLASS): VALUE_CLASSList =
+VISIBILITY inline fun vALUE_CLASSListOf(element1: VALUE_CLASS, element2: VALUE_CLASS): VALUE_CLASSList =
     VALUE_CLASSList(
         mutablePRIMITIVEListOf(
             element1.BACKING_PROPERTY,
@@ -881,7 +884,7 @@
  * @return a new read-only [VALUE_CLASSList] with 3 elements, [element1], [element2], and [element3],
  * in order.
  */
-internal inline fun vALUE_CLASSListOf(
+VISIBILITY inline fun vALUE_CLASSListOf(
         element1: VALUE_CLASS,
         element2: VALUE_CLASS,
         element3: VALUE_CLASS
@@ -896,19 +899,19 @@
 /**
  * @return a new empty [MutableVALUE_CLASSList] with the default capacity.
  */
-internal inline fun mutableVALUE_CLASSListOf(): MutableVALUE_CLASSList =
+VISIBILITY inline fun mutableVALUE_CLASSListOf(): MutableVALUE_CLASSList =
     MutableVALUE_CLASSList(MutablePRIMITIVEList())
 
 /**
  * @return a new [MutableVALUE_CLASSList] with [element1] as the only item in the list.
  */
-internal inline fun mutableVALUE_CLASSListOf(element1: VALUE_CLASS): MutableVALUE_CLASSList =
+VISIBILITY inline fun mutableVALUE_CLASSListOf(element1: VALUE_CLASS): MutableVALUE_CLASSList =
     MutableVALUE_CLASSList(mutablePRIMITIVEListOf(element1.BACKING_PROPERTY))
 
 /**
  * @return a new [MutableVALUE_CLASSList] with 2 elements, [element1] and [element2], in order.
  */
-internal inline fun mutableVALUE_CLASSListOf(
+VISIBILITY inline fun mutableVALUE_CLASSListOf(
         element1: VALUE_CLASS,
         element2: VALUE_CLASS
     ): MutableVALUE_CLASSList = MutableVALUE_CLASSList(
@@ -922,7 +925,7 @@
  * @return a new [MutableVALUE_CLASSList] with 3 elements, [element1], [element2], and [element3],
  * in order.
  */
-internal inline fun mutableVALUE_CLASSListOf(
+VISIBILITY inline fun mutableVALUE_CLASSListOf(
         element1: VALUE_CLASS,
         element2: VALUE_CLASS,
         element3: VALUE_CLASS
diff --git a/collection/collection/template/ValueClassSet.kt.template b/collection/collection/template/ValueClassSet.kt.template
index 33d7af4..8cfdf3c 100644
--- a/collection/collection/template/ValueClassSet.kt.template
+++ b/collection/collection/template/ValueClassSet.kt.template
@@ -22,14 +22,14 @@
     "ConstPropertyName",
     "PrivatePropertyName",
     "NOTHING_TO_INLINE",
-    "UnusedImport"
+    "UnusedImport",
+    "ktlint:standard:import-ordering",
+    "ktlint:standard:max-line-length",
+    "ktlint:standard:no-unused-imports",
 )
 
 package PACKAGE
 
-/* ktlint-disable max-line-length */
-/* ktlint-disable import-ordering */
-
 import androidx.collection.PRIMITIVESet
 import androidx.collection.MutablePRIMITIVESet
 import androidx.collection.emptyPRIMITIVESet
@@ -39,45 +39,36 @@
 import kotlin.contracts.contract
 import kotlin.jvm.JvmInline
 
-/* ktlint-disable max-line-length */
-// To use this template, you must substitute several strings. You can copy this and search/replace
-// or use a sed command. These properties must be changed:
-// * PACKAGE - target package (e.g. androidx.compose.ui.ui.collection)
-// * VALUE_PKG - package in which the value class resides
-// * VALUE_CLASS - the value class contained in the set (e.g. Color or Offset)
-// * vALUE_CLASS - the value class, with the first letter lower case (e.g. color or offset)
-// * BACKING_PROPERTY - the field in VALUE_CLASS containing the backing primitive (e.g. packedValue)
-// * PRIMITIVE - the primitive type of the backing set (e.g. Long or Float)
-// * TO_PARAM - an operation done on the primitive to convert to the value class parameter
+// -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
+// DO NOT MAKE CHANGES to this kotlin source file.
 //
-// For example, to create a ColorSet:
-// sed -e "s/PACKAGE/androidx.compose.ui.graphics/" -e "s/VALUE_CLASS/Color/g" \
-//     -e "s/vALUE_CLASS/color/g" -e "s/BACKING_PROPERTY/value.toLong()/g" -e "s/PRIMITIVE/Long/g" \
-//     -e "s/TO_PARAM/.toULong()/g" -e "s/VALUE_PKG/androidx.collection/g" \
-//     collection/collection/template/ValueClassSet.kt.template \
-//     > compose/ui/ui-graphics/src/commonMain/kotlin/androidx/compose/ui/graphics/ColorSet.kt
+// This file was generated from a template:
+//   collection/collection/template/ValueClassSet.kt.template
+// Make a change to the original template and run the generateValueClassCollections.sh script
+// to ensure the change is available on all versions of the set.
+// -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
 
 /**
  * Returns an empty, read-only [VALUE_CLASSSet].
  */
-internal inline fun emptyVALUE_CLASSSet(): VALUE_CLASSSet = VALUE_CLASSSet(emptyPRIMITIVESet())
+VISIBILITY inline fun emptyVALUE_CLASSSet(): VALUE_CLASSSet = VALUE_CLASSSet(emptyPRIMITIVESet())
 
 /**
  * Returns an empty, read-only [VALUE_CLASSSet].
  */
-internal inline fun vALUE_CLASSSetOf(): VALUE_CLASSSet = VALUE_CLASSSet(emptyPRIMITIVESet())
+VISIBILITY inline fun vALUE_CLASSSetOf(): VALUE_CLASSSet = VALUE_CLASSSet(emptyPRIMITIVESet())
 
 /**
  * Returns a new read-only [VALUE_CLASSSet] with only [element1] in it.
  */
-internal inline fun vALUE_CLASSSetOf(element1: VALUE_CLASS): VALUE_CLASSSet =
+VISIBILITY inline fun vALUE_CLASSSetOf(element1: VALUE_CLASS): VALUE_CLASSSet =
     VALUE_CLASSSet(mutablePRIMITIVESetOf(element1.BACKING_PROPERTY))
 
 /**
  * Returns a new read-only [VALUE_CLASSSet] with only [element1] and [element2] in it.
  */
 @Suppress("UNCHECKED_CAST")
-internal fun vALUE_CLASSSetOf(
+VISIBILITY fun vALUE_CLASSSetOf(
     element1: VALUE_CLASS,
     element2: VALUE_CLASS
 ): VALUE_CLASSSet =
@@ -92,7 +83,7 @@
  * Returns a new read-only [VALUE_CLASSSet] with only [element1], [element2], and [element3] in it.
  */
 @Suppress("UNCHECKED_CAST")
-internal fun vALUE_CLASSSetOf(
+VISIBILITY fun vALUE_CLASSSetOf(
     element1: VALUE_CLASS,
     element2: VALUE_CLASS,
     element3: VALUE_CLASS
@@ -107,20 +98,20 @@
 /**
  * Returns a new [MutableVALUE_CLASSSet].
  */
-internal fun mutableVALUE_CLASSSetOf(): MutableVALUE_CLASSSet = MutableVALUE_CLASSSet(
+VISIBILITY fun mutableVALUE_CLASSSetOf(): MutableVALUE_CLASSSet = MutableVALUE_CLASSSet(
     MutablePRIMITIVESet()
 )
 
 /**
  * Returns a new [MutableVALUE_CLASSSet] with only [element1] in it.
  */
-internal fun mutableVALUE_CLASSSetOf(element1: VALUE_CLASS): MutableVALUE_CLASSSet =
+VISIBILITY fun mutableVALUE_CLASSSetOf(element1: VALUE_CLASS): MutableVALUE_CLASSSet =
     MutableVALUE_CLASSSet(mutablePRIMITIVESetOf(element1.BACKING_PROPERTY))
 
 /**
  * Returns a new [MutableVALUE_CLASSSet] with only [element1] and [element2] in it.
  */
-internal fun mutableVALUE_CLASSSetOf(
+VISIBILITY fun mutableVALUE_CLASSSetOf(
     element1: VALUE_CLASS,
     element2: VALUE_CLASS
 ): MutableVALUE_CLASSSet =
@@ -134,7 +125,7 @@
 /**
  * Returns a new [MutableVALUE_CLASSSet] with only [element1], [element2], and [element3] in it.
  */
-internal fun mutableVALUE_CLASSSetOf(
+VISIBILITY fun mutableVALUE_CLASSSetOf(
     element1: VALUE_CLASS,
     element2: VALUE_CLASS,
     element3: VALUE_CLASS
@@ -164,7 +155,7 @@
  */
 @OptIn(ExperimentalContracts::class)
 @JvmInline
-internal value class VALUE_CLASSSet(val set: PRIMITIVESet) {
+VISIBILITY value class VALUE_CLASSSet(val set: PRIMITIVESet) {
     /**
      * Returns the number of elements that can be stored in this set
      * without requiring internal storage reallocation.
@@ -315,7 +306,7 @@
  */
 @OptIn(ExperimentalContracts::class)
 @JvmInline
-internal value class MutableVALUE_CLASSSet(val set: MutablePRIMITIVESet) {
+VISIBILITY value class MutableVALUE_CLASSSet(val set: MutablePRIMITIVESet) {
     /**
      * Returns the number of elements that can be stored in this set
      * without requiring internal storage reallocation.
diff --git a/collection/collection/template/generateValueClassCollections.sh b/collection/collection/template/generateValueClassCollections.sh
new file mode 100755
index 0000000..0ee3cd9
--- /dev/null
+++ b/collection/collection/template/generateValueClassCollections.sh
@@ -0,0 +1,78 @@
+#!/bin/bash
+
+# To add another value class to generate, add a new value to the end of each of these lists.
+
+# The value class to generate collections for (e.g. Color or Offset).
+valueClasses=(
+  "Color"
+)
+
+# The destination package for the collection classes.
+targetPackages=(
+  "androidx.compose.ui.graphics"
+)
+
+# The backing field in the value class that converts it to a primitive (e.g. packedValue).
+backingProperties=(
+  "value.toLong()"
+)
+
+# The primitive type of the backing list (e.g. Long or Float)
+backingPrimitives=(
+  "Long"
+)
+
+# An operation done on the primitive to convert to the value class parameter
+toParams=(
+  ".toULong()"
+)
+
+# The visibility of the top-level classes and functions (e.g. public or internal)
+visibilities=(
+  "public"
+)
+
+# The package in which the value class resides (e.g. androidx.compose.ui.ui.collection).
+valuePackages=(
+  "androidx.compose.ui.graphics"
+)
+
+# Where the resulting files are output, relative to the directory this script is in.
+outputDirectories=(
+  "../../../compose/ui/ui-graphics/src/commonMain/kotlin/androidx/compose/ui/graphics"
+)
+
+scriptDir=$(dirname "${PWD}/${0}")
+
+for index in "${!valueClasses[@]}"
+do
+  class=${valueClasses[$index]}
+  targetPackage=${targetPackages[$index]}
+  backingProperty=${backingProperties[$index]}
+  backingPrimitive=${backingPrimitives[$index]}
+  toParam=${toParams[$index]}
+  visibility=${visibilities[$index]}
+  valuePackage=${valuePackages[$index]}
+  outputDirectory=${outputDirectories[$index]}
+
+  firstLower=$(echo "${class:0:1}" | tr '[:upper:]' '[:lower:]')
+  lowerCaseClass="${firstLower}${class:1}"
+
+  outputSetPath=$(realpath "${scriptDir}/${outputDirectory}/${class}Set.kt")
+  echo "generating ${outputSetPath}"
+  sed -e "s/PACKAGE/${targetPackage}/" -e "s/VALUE_CLASS/${class}/g" \
+    -e "s/vALUE_CLASS/${lowerCaseClass}/g" -e "s/BACKING_PROPERTY/${backingProperty}/g" \
+    -e "s/PRIMITIVE/${backingPrimitive}/g" -e "s/TO_PARAM/${toParam}/g" \
+    -e "s/VALUE_PKG/${valuePackage}/g" -e "s/VISIBILITY/${visibility}/g" \
+    "${scriptDir}/ValueClassSet.kt.template" \
+    > "${outputSetPath}"
+
+  outputListPath=$(realpath "${scriptDir}/${outputDirectory}/${class}List.kt")
+  echo "generating ${outputListPath}"
+  sed -e "s/PACKAGE/${targetPackage}/" -e "s/VALUE_CLASS/${class}/g" \
+    -e "s/vALUE_CLASS/${lowerCaseClass}/g" -e "s/BACKING_PROPERTY/${backingProperty}/g" \
+    -e "s/PRIMITIVE/${backingPrimitive}/g" -e "s/TO_PARAM/${toParam}/g" \
+    -e "s/VALUE_PKG/${valuePackage}/g" -e "s/VISIBILITY/${visibility}/g" \
+    "${scriptDir}/ValueClassList.kt.template" \
+    > "${outputListPath}"
+done
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/compiler/compiler/integration-tests/build.gradle b/compose/compiler/compiler/integration-tests/build.gradle
index 0104b25..1e465c3 100644
--- a/compose/compiler/compiler/integration-tests/build.gradle
+++ b/compose/compiler/compiler/integration-tests/build.gradle
@@ -35,4 +35,6 @@
 testTask.dependsOn(tasks.findByPath(":compose:compiler:compiler:publish"))
 if (!isPlayground(project)) {
     testTask.dependsOn(tasks.findByPath(":compose:runtime:runtime:publish"))
+    testTask.dependsOn(tasks.findByPath(":collection:collection:publish"))
+    testTask.dependsOn(tasks.findByPath(":annotation:annotation:publish"))
 }
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 f124f8e..88ae47f 100644
--- a/compose/foundation/foundation/api/current.txt
+++ b/compose/foundation/foundation/api/current.txt
@@ -1,6 +1,30 @@
 // Signature format: 4.0
 package androidx.compose.foundation {
 
+  public final class AndroidExternalSurfaceKt {
+    method @androidx.compose.runtime.Composable public static void AndroidEmbeddedExternalSurface(optional androidx.compose.ui.Modifier modifier, optional boolean isOpaque, optional long surfaceSize, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.AndroidExternalSurfaceScope,kotlin.Unit> onInit);
+    method @androidx.compose.runtime.Composable public static void AndroidExternalSurface(optional androidx.compose.ui.Modifier modifier, optional boolean isOpaque, optional int zOrder, optional long surfaceSize, optional boolean isSecure, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.AndroidExternalSurfaceScope,kotlin.Unit> onInit);
+  }
+
+  public interface AndroidExternalSurfaceScope {
+    method public void onSurface(kotlin.jvm.functions.Function5<? super androidx.compose.foundation.SurfaceCoroutineScope,? super android.view.Surface,? super java.lang.Integer,? super java.lang.Integer,? super kotlin.coroutines.Continuation<? super kotlin.Unit>,?> onSurface);
+  }
+
+  @kotlin.jvm.JvmInline public final value class AndroidExternalSurfaceZOrder {
+    method public int getZOrder();
+    property public final int zOrder;
+    field public static final androidx.compose.foundation.AndroidExternalSurfaceZOrder.Companion Companion;
+  }
+
+  public static final class AndroidExternalSurfaceZOrder.Companion {
+    method public int getBehind();
+    method public int getMediaOverlay();
+    method public int getOnTop();
+    property public final int Behind;
+    property public final int MediaOverlay;
+    property public final int OnTop;
+  }
+
   public final class BackgroundKt {
     method @androidx.compose.runtime.Stable public static androidx.compose.ui.Modifier background(androidx.compose.ui.Modifier, androidx.compose.ui.graphics.Brush brush, optional androidx.compose.ui.graphics.Shape shape, optional @FloatRange(from=0.0, to=1.0) float alpha);
     method @androidx.compose.runtime.Stable public static androidx.compose.ui.Modifier background(androidx.compose.ui.Modifier, long color, optional androidx.compose.ui.graphics.Shape shape);
@@ -111,30 +135,6 @@
     method @SuppressCompatibility @androidx.compose.foundation.ExperimentalFoundationApi public static androidx.compose.ui.Modifier onFocusedBoundsChanged(androidx.compose.ui.Modifier, kotlin.jvm.functions.Function1<? super androidx.compose.ui.layout.LayoutCoordinates,kotlin.Unit> onPositioned);
   }
 
-  public final class GraphicsSurfaceKt {
-    method @androidx.compose.runtime.Composable public static void EmbeddedGraphicsSurface(optional androidx.compose.ui.Modifier modifier, optional boolean isOpaque, optional long surfaceSize, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.GraphicsSurfaceScope,kotlin.Unit> onInit);
-    method @androidx.compose.runtime.Composable public static void GraphicsSurface(optional androidx.compose.ui.Modifier modifier, optional boolean isOpaque, optional int zOrder, optional long surfaceSize, optional boolean isSecure, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.GraphicsSurfaceScope,kotlin.Unit> onInit);
-  }
-
-  public interface GraphicsSurfaceScope {
-    method public void onSurface(kotlin.jvm.functions.Function5<? super androidx.compose.foundation.SurfaceCoroutineScope,? super android.view.Surface,? super java.lang.Integer,? super java.lang.Integer,? super kotlin.coroutines.Continuation<? super kotlin.Unit>,?> onSurface);
-  }
-
-  @kotlin.jvm.JvmInline public final value class GraphicsSurfaceZOrder {
-    method public int getZOrder();
-    property public final int zOrder;
-    field public static final androidx.compose.foundation.GraphicsSurfaceZOrder.Companion Companion;
-  }
-
-  public static final class GraphicsSurfaceZOrder.Companion {
-    method public int getBehind();
-    method public int getMediaOverlay();
-    method public int getOnTop();
-    property public final int Behind;
-    property public final int MediaOverlay;
-    property public final int OnTop;
-  }
-
   public final class HoverableKt {
     method public static androidx.compose.ui.Modifier hoverable(androidx.compose.ui.Modifier, androidx.compose.foundation.interaction.MutableInteractionSource interactionSource, optional boolean enabled);
   }
@@ -285,6 +285,26 @@
 
 }
 
+package androidx.compose.foundation.draganddrop {
+
+  public final class AndroidDragAndDropSource_androidKt {
+    method @SuppressCompatibility @androidx.compose.foundation.ExperimentalFoundationApi public static androidx.compose.ui.Modifier dragAndDropSource(androidx.compose.ui.Modifier, kotlin.jvm.functions.Function2<? super androidx.compose.foundation.draganddrop.DragAndDropSourceScope,? super kotlin.coroutines.Continuation<? super kotlin.Unit>,?> block);
+  }
+
+  public final class DragAndDropSourceKt {
+    method @SuppressCompatibility @androidx.compose.foundation.ExperimentalFoundationApi public static androidx.compose.ui.Modifier dragAndDropSource(androidx.compose.ui.Modifier, kotlin.jvm.functions.Function1<? super androidx.compose.ui.graphics.drawscope.DrawScope,kotlin.Unit> onDrawDragShadow, kotlin.jvm.functions.Function2<? super androidx.compose.foundation.draganddrop.DragAndDropSourceScope,? super kotlin.coroutines.Continuation<? super kotlin.Unit>,?> block);
+  }
+
+  @SuppressCompatibility @androidx.compose.foundation.ExperimentalFoundationApi public interface DragAndDropSourceScope extends androidx.compose.ui.input.pointer.PointerInputScope {
+    method public void startTransfer(androidx.compose.ui.draganddrop.DragAndDropTransfer transfer);
+  }
+
+  public final class DragAndDropTargetKt {
+    method @SuppressCompatibility @androidx.compose.foundation.ExperimentalFoundationApi public static androidx.compose.ui.Modifier dragAndDropTarget(androidx.compose.ui.Modifier, kotlin.jvm.functions.Function1<? super androidx.compose.ui.draganddrop.DragAndDropEvent,java.lang.Boolean> onStarted, kotlin.jvm.functions.Function1<? super androidx.compose.ui.draganddrop.DragAndDropEvent,java.lang.Boolean> onDropped, optional kotlin.jvm.functions.Function1<? super androidx.compose.ui.draganddrop.DragAndDropEvent,kotlin.Unit> onEntered, optional kotlin.jvm.functions.Function1<? super androidx.compose.ui.draganddrop.DragAndDropEvent,kotlin.Unit> onMoved, optional kotlin.jvm.functions.Function1<? super androidx.compose.ui.draganddrop.DragAndDropEvent,kotlin.Unit> onChanged, optional kotlin.jvm.functions.Function1<? super androidx.compose.ui.draganddrop.DragAndDropEvent,kotlin.Unit> onExited, optional kotlin.jvm.functions.Function1<? super androidx.compose.ui.draganddrop.DragAndDropEvent,kotlin.Unit> onEnded);
+  }
+
+}
+
 package androidx.compose.foundation.gestures {
 
   @SuppressCompatibility @androidx.compose.foundation.ExperimentalFoundationApi public interface AnchoredDragScope {
@@ -512,7 +532,8 @@
   }
 
   @SuppressCompatibility @androidx.compose.foundation.ExperimentalFoundationApi public final class SnapFlingBehavior implements androidx.compose.foundation.gestures.FlingBehavior {
-    ctor public SnapFlingBehavior(androidx.compose.foundation.gestures.snapping.SnapLayoutInfoProvider snapLayoutInfoProvider, androidx.compose.animation.core.AnimationSpec<java.lang.Float> lowVelocityAnimationSpec, androidx.compose.animation.core.DecayAnimationSpec<java.lang.Float> highVelocityAnimationSpec, androidx.compose.animation.core.AnimationSpec<java.lang.Float> snapAnimationSpec, float shortSnapVelocityThreshold);
+    ctor public SnapFlingBehavior(androidx.compose.foundation.gestures.snapping.SnapLayoutInfoProvider snapLayoutInfoProvider, androidx.compose.animation.core.AnimationSpec<java.lang.Float> lowVelocityAnimationSpec, androidx.compose.animation.core.DecayAnimationSpec<java.lang.Float> highVelocityAnimationSpec, androidx.compose.animation.core.AnimationSpec<java.lang.Float> snapAnimationSpec);
+    ctor @Deprecated public SnapFlingBehavior(androidx.compose.foundation.gestures.snapping.SnapLayoutInfoProvider snapLayoutInfoProvider, androidx.compose.animation.core.AnimationSpec<java.lang.Float> lowVelocityAnimationSpec, androidx.compose.animation.core.DecayAnimationSpec<java.lang.Float> highVelocityAnimationSpec, androidx.compose.animation.core.AnimationSpec<java.lang.Float> snapAnimationSpec, float shortSnapVelocityThreshold);
     method public suspend Object? performFling(androidx.compose.foundation.gestures.ScrollScope, float initialVelocity, kotlin.coroutines.Continuation<? super java.lang.Float>);
     method public suspend Object? performFling(androidx.compose.foundation.gestures.ScrollScope, float initialVelocity, kotlin.jvm.functions.Function1<? super java.lang.Float,kotlin.Unit> onSettlingDistanceUpdated, kotlin.coroutines.Continuation<? super java.lang.Float>);
   }
@@ -1131,8 +1152,11 @@
   }
 
   @SuppressCompatibility @androidx.compose.foundation.ExperimentalFoundationApi public final class PagerDefaults {
-    method @androidx.compose.runtime.Composable public androidx.compose.foundation.gestures.snapping.SnapFlingBehavior flingBehavior(androidx.compose.foundation.pager.PagerState state, optional androidx.compose.foundation.pager.PagerSnapDistance pagerSnapDistance, optional androidx.compose.animation.core.AnimationSpec<java.lang.Float> lowVelocityAnimationSpec, optional androidx.compose.animation.core.DecayAnimationSpec<java.lang.Float> highVelocityAnimationSpec, optional androidx.compose.animation.core.AnimationSpec<java.lang.Float> snapAnimationSpec, optional float snapVelocityThreshold, optional float snapPositionalThreshold);
+    method @androidx.compose.runtime.Composable public androidx.compose.foundation.gestures.snapping.SnapFlingBehavior flingBehavior(androidx.compose.foundation.pager.PagerState state, optional androidx.compose.foundation.pager.PagerSnapDistance pagerSnapDistance, optional androidx.compose.animation.core.AnimationSpec<java.lang.Float> lowVelocityAnimationSpec, optional androidx.compose.animation.core.DecayAnimationSpec<java.lang.Float> highVelocityAnimationSpec, optional androidx.compose.animation.core.AnimationSpec<java.lang.Float> snapAnimationSpec, optional @FloatRange(from=0.0, to=1.0) float snapPositionalThreshold);
+    method @Deprecated @androidx.compose.runtime.Composable public androidx.compose.foundation.gestures.snapping.SnapFlingBehavior flingBehavior(androidx.compose.foundation.pager.PagerState state, optional androidx.compose.foundation.pager.PagerSnapDistance pagerSnapDistance, optional androidx.compose.animation.core.AnimationSpec<java.lang.Float> lowVelocityAnimationSpec, optional androidx.compose.animation.core.DecayAnimationSpec<java.lang.Float> highVelocityAnimationSpec, optional androidx.compose.animation.core.AnimationSpec<java.lang.Float> snapAnimationSpec, optional float snapVelocityThreshold, optional float snapPositionalThreshold);
+    method public androidx.compose.animation.core.AnimationSpec<java.lang.Float> getLowVelocityAnimationSpec();
     method public androidx.compose.ui.input.nestedscroll.NestedScrollConnection pageNestedScrollConnection(androidx.compose.foundation.pager.PagerState state, androidx.compose.foundation.gestures.Orientation orientation);
+    property public final androidx.compose.animation.core.AnimationSpec<java.lang.Float> LowVelocityAnimationSpec;
     field public static final int BeyondBoundsPageCount = 0; // 0x0
     field public static final androidx.compose.foundation.pager.PagerDefaults INSTANCE;
   }
@@ -1526,6 +1550,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 {
@@ -1554,7 +1579,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);
@@ -1635,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/api/restricted_current.txt b/compose/foundation/foundation/api/restricted_current.txt
index 87ac2e20..e0862a2 100644
--- a/compose/foundation/foundation/api/restricted_current.txt
+++ b/compose/foundation/foundation/api/restricted_current.txt
@@ -1,6 +1,30 @@
 // Signature format: 4.0
 package androidx.compose.foundation {
 
+  public final class AndroidExternalSurfaceKt {
+    method @androidx.compose.runtime.Composable public static void AndroidEmbeddedExternalSurface(optional androidx.compose.ui.Modifier modifier, optional boolean isOpaque, optional long surfaceSize, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.AndroidExternalSurfaceScope,kotlin.Unit> onInit);
+    method @androidx.compose.runtime.Composable public static void AndroidExternalSurface(optional androidx.compose.ui.Modifier modifier, optional boolean isOpaque, optional int zOrder, optional long surfaceSize, optional boolean isSecure, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.AndroidExternalSurfaceScope,kotlin.Unit> onInit);
+  }
+
+  public interface AndroidExternalSurfaceScope {
+    method public void onSurface(kotlin.jvm.functions.Function5<? super androidx.compose.foundation.SurfaceCoroutineScope,? super android.view.Surface,? super java.lang.Integer,? super java.lang.Integer,? super kotlin.coroutines.Continuation<? super kotlin.Unit>,?> onSurface);
+  }
+
+  @kotlin.jvm.JvmInline public final value class AndroidExternalSurfaceZOrder {
+    method public int getZOrder();
+    property public final int zOrder;
+    field public static final androidx.compose.foundation.AndroidExternalSurfaceZOrder.Companion Companion;
+  }
+
+  public static final class AndroidExternalSurfaceZOrder.Companion {
+    method public int getBehind();
+    method public int getMediaOverlay();
+    method public int getOnTop();
+    property public final int Behind;
+    property public final int MediaOverlay;
+    property public final int OnTop;
+  }
+
   public final class BackgroundKt {
     method @androidx.compose.runtime.Stable public static androidx.compose.ui.Modifier background(androidx.compose.ui.Modifier, androidx.compose.ui.graphics.Brush brush, optional androidx.compose.ui.graphics.Shape shape, optional @FloatRange(from=0.0, to=1.0) float alpha);
     method @androidx.compose.runtime.Stable public static androidx.compose.ui.Modifier background(androidx.compose.ui.Modifier, long color, optional androidx.compose.ui.graphics.Shape shape);
@@ -111,30 +135,6 @@
     method @SuppressCompatibility @androidx.compose.foundation.ExperimentalFoundationApi public static androidx.compose.ui.Modifier onFocusedBoundsChanged(androidx.compose.ui.Modifier, kotlin.jvm.functions.Function1<? super androidx.compose.ui.layout.LayoutCoordinates,kotlin.Unit> onPositioned);
   }
 
-  public final class GraphicsSurfaceKt {
-    method @androidx.compose.runtime.Composable public static void EmbeddedGraphicsSurface(optional androidx.compose.ui.Modifier modifier, optional boolean isOpaque, optional long surfaceSize, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.GraphicsSurfaceScope,kotlin.Unit> onInit);
-    method @androidx.compose.runtime.Composable public static void GraphicsSurface(optional androidx.compose.ui.Modifier modifier, optional boolean isOpaque, optional int zOrder, optional long surfaceSize, optional boolean isSecure, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.GraphicsSurfaceScope,kotlin.Unit> onInit);
-  }
-
-  public interface GraphicsSurfaceScope {
-    method public void onSurface(kotlin.jvm.functions.Function5<? super androidx.compose.foundation.SurfaceCoroutineScope,? super android.view.Surface,? super java.lang.Integer,? super java.lang.Integer,? super kotlin.coroutines.Continuation<? super kotlin.Unit>,?> onSurface);
-  }
-
-  @kotlin.jvm.JvmInline public final value class GraphicsSurfaceZOrder {
-    method public int getZOrder();
-    property public final int zOrder;
-    field public static final androidx.compose.foundation.GraphicsSurfaceZOrder.Companion Companion;
-  }
-
-  public static final class GraphicsSurfaceZOrder.Companion {
-    method public int getBehind();
-    method public int getMediaOverlay();
-    method public int getOnTop();
-    property public final int Behind;
-    property public final int MediaOverlay;
-    property public final int OnTop;
-  }
-
   public final class HoverableKt {
     method public static androidx.compose.ui.Modifier hoverable(androidx.compose.ui.Modifier, androidx.compose.foundation.interaction.MutableInteractionSource interactionSource, optional boolean enabled);
   }
@@ -287,6 +287,26 @@
 
 }
 
+package androidx.compose.foundation.draganddrop {
+
+  public final class AndroidDragAndDropSource_androidKt {
+    method @SuppressCompatibility @androidx.compose.foundation.ExperimentalFoundationApi public static androidx.compose.ui.Modifier dragAndDropSource(androidx.compose.ui.Modifier, kotlin.jvm.functions.Function2<? super androidx.compose.foundation.draganddrop.DragAndDropSourceScope,? super kotlin.coroutines.Continuation<? super kotlin.Unit>,?> block);
+  }
+
+  public final class DragAndDropSourceKt {
+    method @SuppressCompatibility @androidx.compose.foundation.ExperimentalFoundationApi public static androidx.compose.ui.Modifier dragAndDropSource(androidx.compose.ui.Modifier, kotlin.jvm.functions.Function1<? super androidx.compose.ui.graphics.drawscope.DrawScope,kotlin.Unit> onDrawDragShadow, kotlin.jvm.functions.Function2<? super androidx.compose.foundation.draganddrop.DragAndDropSourceScope,? super kotlin.coroutines.Continuation<? super kotlin.Unit>,?> block);
+  }
+
+  @SuppressCompatibility @androidx.compose.foundation.ExperimentalFoundationApi public interface DragAndDropSourceScope extends androidx.compose.ui.input.pointer.PointerInputScope {
+    method public void startTransfer(androidx.compose.ui.draganddrop.DragAndDropTransfer transfer);
+  }
+
+  public final class DragAndDropTargetKt {
+    method @SuppressCompatibility @androidx.compose.foundation.ExperimentalFoundationApi public static androidx.compose.ui.Modifier dragAndDropTarget(androidx.compose.ui.Modifier, kotlin.jvm.functions.Function1<? super androidx.compose.ui.draganddrop.DragAndDropEvent,java.lang.Boolean> onStarted, kotlin.jvm.functions.Function1<? super androidx.compose.ui.draganddrop.DragAndDropEvent,java.lang.Boolean> onDropped, optional kotlin.jvm.functions.Function1<? super androidx.compose.ui.draganddrop.DragAndDropEvent,kotlin.Unit> onEntered, optional kotlin.jvm.functions.Function1<? super androidx.compose.ui.draganddrop.DragAndDropEvent,kotlin.Unit> onMoved, optional kotlin.jvm.functions.Function1<? super androidx.compose.ui.draganddrop.DragAndDropEvent,kotlin.Unit> onChanged, optional kotlin.jvm.functions.Function1<? super androidx.compose.ui.draganddrop.DragAndDropEvent,kotlin.Unit> onExited, optional kotlin.jvm.functions.Function1<? super androidx.compose.ui.draganddrop.DragAndDropEvent,kotlin.Unit> onEnded);
+  }
+
+}
+
 package androidx.compose.foundation.gestures {
 
   @SuppressCompatibility @androidx.compose.foundation.ExperimentalFoundationApi public interface AnchoredDragScope {
@@ -514,7 +534,8 @@
   }
 
   @SuppressCompatibility @androidx.compose.foundation.ExperimentalFoundationApi public final class SnapFlingBehavior implements androidx.compose.foundation.gestures.FlingBehavior {
-    ctor public SnapFlingBehavior(androidx.compose.foundation.gestures.snapping.SnapLayoutInfoProvider snapLayoutInfoProvider, androidx.compose.animation.core.AnimationSpec<java.lang.Float> lowVelocityAnimationSpec, androidx.compose.animation.core.DecayAnimationSpec<java.lang.Float> highVelocityAnimationSpec, androidx.compose.animation.core.AnimationSpec<java.lang.Float> snapAnimationSpec, float shortSnapVelocityThreshold);
+    ctor public SnapFlingBehavior(androidx.compose.foundation.gestures.snapping.SnapLayoutInfoProvider snapLayoutInfoProvider, androidx.compose.animation.core.AnimationSpec<java.lang.Float> lowVelocityAnimationSpec, androidx.compose.animation.core.DecayAnimationSpec<java.lang.Float> highVelocityAnimationSpec, androidx.compose.animation.core.AnimationSpec<java.lang.Float> snapAnimationSpec);
+    ctor @Deprecated public SnapFlingBehavior(androidx.compose.foundation.gestures.snapping.SnapLayoutInfoProvider snapLayoutInfoProvider, androidx.compose.animation.core.AnimationSpec<java.lang.Float> lowVelocityAnimationSpec, androidx.compose.animation.core.DecayAnimationSpec<java.lang.Float> highVelocityAnimationSpec, androidx.compose.animation.core.AnimationSpec<java.lang.Float> snapAnimationSpec, float shortSnapVelocityThreshold);
     method public suspend Object? performFling(androidx.compose.foundation.gestures.ScrollScope, float initialVelocity, kotlin.coroutines.Continuation<? super java.lang.Float>);
     method public suspend Object? performFling(androidx.compose.foundation.gestures.ScrollScope, float initialVelocity, kotlin.jvm.functions.Function1<? super java.lang.Float,kotlin.Unit> onSettlingDistanceUpdated, kotlin.coroutines.Continuation<? super java.lang.Float>);
   }
@@ -1133,8 +1154,11 @@
   }
 
   @SuppressCompatibility @androidx.compose.foundation.ExperimentalFoundationApi public final class PagerDefaults {
-    method @androidx.compose.runtime.Composable public androidx.compose.foundation.gestures.snapping.SnapFlingBehavior flingBehavior(androidx.compose.foundation.pager.PagerState state, optional androidx.compose.foundation.pager.PagerSnapDistance pagerSnapDistance, optional androidx.compose.animation.core.AnimationSpec<java.lang.Float> lowVelocityAnimationSpec, optional androidx.compose.animation.core.DecayAnimationSpec<java.lang.Float> highVelocityAnimationSpec, optional androidx.compose.animation.core.AnimationSpec<java.lang.Float> snapAnimationSpec, optional float snapVelocityThreshold, optional float snapPositionalThreshold);
+    method @androidx.compose.runtime.Composable public androidx.compose.foundation.gestures.snapping.SnapFlingBehavior flingBehavior(androidx.compose.foundation.pager.PagerState state, optional androidx.compose.foundation.pager.PagerSnapDistance pagerSnapDistance, optional androidx.compose.animation.core.AnimationSpec<java.lang.Float> lowVelocityAnimationSpec, optional androidx.compose.animation.core.DecayAnimationSpec<java.lang.Float> highVelocityAnimationSpec, optional androidx.compose.animation.core.AnimationSpec<java.lang.Float> snapAnimationSpec, optional @FloatRange(from=0.0, to=1.0) float snapPositionalThreshold);
+    method @Deprecated @androidx.compose.runtime.Composable public androidx.compose.foundation.gestures.snapping.SnapFlingBehavior flingBehavior(androidx.compose.foundation.pager.PagerState state, optional androidx.compose.foundation.pager.PagerSnapDistance pagerSnapDistance, optional androidx.compose.animation.core.AnimationSpec<java.lang.Float> lowVelocityAnimationSpec, optional androidx.compose.animation.core.DecayAnimationSpec<java.lang.Float> highVelocityAnimationSpec, optional androidx.compose.animation.core.AnimationSpec<java.lang.Float> snapAnimationSpec, optional float snapVelocityThreshold, optional float snapPositionalThreshold);
+    method public androidx.compose.animation.core.AnimationSpec<java.lang.Float> getLowVelocityAnimationSpec();
     method public androidx.compose.ui.input.nestedscroll.NestedScrollConnection pageNestedScrollConnection(androidx.compose.foundation.pager.PagerState state, androidx.compose.foundation.gestures.Orientation orientation);
+    property public final androidx.compose.animation.core.AnimationSpec<java.lang.Float> LowVelocityAnimationSpec;
     field public static final int BeyondBoundsPageCount = 0; // 0x0
     field public static final androidx.compose.foundation.pager.PagerDefaults INSTANCE;
   }
@@ -1528,6 +1552,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 {
@@ -1556,7 +1581,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);
@@ -1639,7 +1664,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/benchmark/build.gradle b/compose/foundation/foundation/benchmark/build.gradle
index 4bc25b5..5eb1d5b 100644
--- a/compose/foundation/foundation/benchmark/build.gradle
+++ b/compose/foundation/foundation/benchmark/build.gradle
@@ -53,10 +53,6 @@
 
 android {
     namespace "androidx.compose.foundation.benchmark"
-    defaultConfig {
-        // must be one of: 'None', 'StackSampling', or 'MethodTracing'
-        testInstrumentationRunnerArguments["androidx.benchmark.profiling.mode"]= 'None'
-    }
 }
 
 androidx {
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/GraphicsSurfaceDemo.kt b/compose/foundation/foundation/integration-tests/foundation-demos/src/main/java/androidx/compose/foundation/demos/AndroidExternalSurfaceDemo.kt
similarity index 77%
rename from compose/foundation/foundation/integration-tests/foundation-demos/src/main/java/androidx/compose/foundation/demos/GraphicsSurfaceDemo.kt
rename to compose/foundation/foundation/integration-tests/foundation-demos/src/main/java/androidx/compose/foundation/demos/AndroidExternalSurfaceDemo.kt
index 4cc8c77..632770c 100644
--- a/compose/foundation/foundation/integration-tests/foundation-demos/src/main/java/androidx/compose/foundation/demos/GraphicsSurfaceDemo.kt
+++ b/compose/foundation/foundation/integration-tests/foundation-demos/src/main/java/androidx/compose/foundation/demos/AndroidExternalSurfaceDemo.kt
@@ -20,8 +20,8 @@
 import androidx.compose.foundation.layout.Spacer
 import androidx.compose.foundation.layout.height
 import androidx.compose.foundation.rememberScrollState
-import androidx.compose.foundation.samples.EmbeddedGraphicsSurfaceColors
-import androidx.compose.foundation.samples.GraphicsSurfaceColors
+import androidx.compose.foundation.samples.AndroidEmbeddedExternalSurfaceColors
+import androidx.compose.foundation.samples.AndroidExternalSurfaceColors
 import androidx.compose.foundation.verticalScroll
 import androidx.compose.material.Text
 import androidx.compose.runtime.Composable
@@ -29,12 +29,12 @@
 import androidx.compose.ui.unit.dp
 
 @Composable
-fun GraphicsSurfaceDemo() {
+fun AndroidExternalSurfaceDemo() {
     Column(Modifier.verticalScroll(rememberScrollState())) {
-        Text("GraphicsSurface:")
-        GraphicsSurfaceColors()
+        Text("ExternalSurface:")
+        AndroidExternalSurfaceColors()
         Spacer(Modifier.height(50.dp))
-        Text("EmbeddedGraphicsSurface:")
-        EmbeddedGraphicsSurfaceColors()
+        Text("EmbeddedExternalSurface:")
+        AndroidEmbeddedExternalSurfaceColors()
     }
 }
diff --git a/compose/foundation/foundation/integration-tests/foundation-demos/src/main/java/androidx/compose/foundation/demos/FoundationDemos.kt b/compose/foundation/foundation/integration-tests/foundation-demos/src/main/java/androidx/compose/foundation/demos/FoundationDemos.kt
index 4a07721..06dbb83 100644
--- a/compose/foundation/foundation/integration-tests/foundation-demos/src/main/java/androidx/compose/foundation/demos/FoundationDemos.kt
+++ b/compose/foundation/foundation/integration-tests/foundation-demos/src/main/java/androidx/compose/foundation/demos/FoundationDemos.kt
@@ -16,6 +16,8 @@
 
 package androidx.compose.foundation.demos
 
+import androidx.compose.foundation.demos.draganddrop.DragAndDropMultiAppDemo
+import androidx.compose.foundation.demos.draganddrop.DragAndDropNestedDemo
 import androidx.compose.foundation.demos.pager.PagerDemos
 import androidx.compose.foundation.demos.relocation.BringIntoViewAndroidInteropDemo
 import androidx.compose.foundation.demos.relocation.BringIntoViewDemo
@@ -57,16 +59,22 @@
     ComposableDemo("Nested Scroll Simple Column") { SimpleColumnNestedScrollSample() },
 )
 
+private val DragAndDropDemos = listOf(
+    ComposableDemo("Multi app drag and drop") { DragAndDropMultiAppDemo() },
+    ComposableDemo("Nested Drag and drop") { DragAndDropNestedDemo() }
+)
+
 val FoundationDemos = DemoCategory(
     "Foundation",
     listOf(
         DemoCategory("High-level Gesures", GestureDemos),
+        DemoCategory("Drag and drop", DragAndDropDemos),
         ComposableDemo("Overscroll") { OverscrollDemo() },
         ComposableDemo("Can scroll forward / backward") { CanScrollSample() },
         ComposableDemo("Vertical scroll") { VerticalScrollExample() },
         ComposableDemo("Controlled Scrollable Row") { ControlledScrollableRowSample() },
         ComposableDemo("Draw Modifiers") { DrawModifiersDemo() },
-        ComposableDemo("Graphics Surfaces") { GraphicsSurfaceDemo() },
+        ComposableDemo("Graphics Surfaces") { AndroidExternalSurfaceDemo() },
         DemoCategory("Lazy lists", LazyListDemos),
         DemoCategory("Snapping", SnappingDemos),
         DemoCategory("Pagers", PagerDemos),
diff --git a/bluetooth/integration-tests/testapp/src/main/java/androidx/bluetooth/integration/testapp/ui/common/ByteArray.kt b/compose/foundation/foundation/integration-tests/foundation-demos/src/main/java/androidx/compose/foundation/demos/draganddrop/DragAndDropDemos.kt
similarity index 60%
copy from bluetooth/integration-tests/testapp/src/main/java/androidx/bluetooth/integration/testapp/ui/common/ByteArray.kt
copy to compose/foundation/foundation/integration-tests/foundation-demos/src/main/java/androidx/compose/foundation/demos/draganddrop/DragAndDropDemos.kt
index 40b8f5b..661f6c0 100644
--- a/bluetooth/integration-tests/testapp/src/main/java/androidx/bluetooth/integration/testapp/ui/common/ByteArray.kt
+++ b/compose/foundation/foundation/integration-tests/foundation-demos/src/main/java/androidx/compose/foundation/demos/draganddrop/DragAndDropDemos.kt
@@ -14,7 +14,18 @@
  * limitations under the License.
  */
 
-package androidx.bluetooth.integration.testapp.ui.common
+package androidx.compose.foundation.demos.draganddrop
 
-fun ByteArray.toHexString(): String =
-    joinToString(separator = " ", prefix = "0x") { String.format("%02X", it) }
+import androidx.compose.foundation.samples.DragAndDropMultiAppSample
+import androidx.compose.foundation.samples.DragAndDropNestedSample
+import androidx.compose.runtime.Composable
+
+@Composable
+fun DragAndDropMultiAppDemo() {
+    DragAndDropMultiAppSample()
+}
+
+@Composable
+fun DragAndDropNestedDemo() {
+    DragAndDropNestedSample()
+}
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..fb8c403
--- /dev/null
+++ b/compose/foundation/foundation/integration-tests/foundation-demos/src/main/java/androidx/compose/foundation/demos/text/ComposeMinTouchTargetTextSelectionDemo.kt
@@ -0,0 +1,197 @@
+/*
+ * 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.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.MutableColorList
+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)
+
+// red is used for the selection container color
+private val Rainbow = MutableColorList(initialCapacity = 6).apply {
+    add(Orange)
+    add(Yellow)
+    add(Green)
+    add(Blue)
+    add(Indigo)
+    add(Purple)
+}.asColorList()
+
+@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, color ->
+                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
+    text.forEachIndexed { index, char ->
+        val color = Rainbow[index % size].copy(alpha)
+        withStyle(SpanStyle(color = color)) {
+            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/FocusTextFieldImmediatelyDemo.kt b/compose/foundation/foundation/integration-tests/foundation-demos/src/main/java/androidx/compose/foundation/demos/text/FocusTextFieldImmediatelyDemo.kt
index ad82db8..ba81b02 100644
--- a/compose/foundation/foundation/integration-tests/foundation-demos/src/main/java/androidx/compose/foundation/demos/text/FocusTextFieldImmediatelyDemo.kt
+++ b/compose/foundation/foundation/integration-tests/foundation-demos/src/main/java/androidx/compose/foundation/demos/text/FocusTextFieldImmediatelyDemo.kt
@@ -16,33 +16,69 @@
 
 package androidx.compose.foundation.demos.text
 
+import androidx.compose.foundation.layout.Arrangement
+import androidx.compose.foundation.layout.Column
+import androidx.compose.foundation.layout.Row
+import androidx.compose.foundation.layout.fillMaxWidth
 import androidx.compose.foundation.layout.wrapContentSize
+import androidx.compose.material.Switch
+import androidx.compose.material.Text
 import androidx.compose.material.TextField
 import androidx.compose.runtime.Composable
 import androidx.compose.runtime.DisposableEffect
+import androidx.compose.runtime.LaunchedEffect
 import androidx.compose.runtime.getValue
 import androidx.compose.runtime.mutableStateOf
 import androidx.compose.runtime.remember
 import androidx.compose.runtime.setValue
+import androidx.compose.ui.Alignment
 import androidx.compose.ui.Modifier
 import androidx.compose.ui.focus.FocusRequester
 import androidx.compose.ui.focus.focusRequester
 
 @Composable
 fun FocusTextFieldImmediatelyDemo() {
-    val focusRequester = remember { FocusRequester() }
     var value by remember { mutableStateOf("") }
+    var launchedEffect by remember { mutableStateOf(false) }
 
-    DisposableEffect(focusRequester) {
-        focusRequester.requestFocus()
-        onDispose {}
+    Column {
+        Row(
+            horizontalArrangement = Arrangement.SpaceBetween,
+            verticalAlignment = Alignment.CenterVertically,
+            modifier = Modifier.fillMaxWidth(),
+        ) {
+            Text("Disposable effect")
+            Switch(checked = launchedEffect, onCheckedChange = { launchedEffect = it })
+            Text("Launched effect")
+        }
+
+        if (launchedEffect) {
+            val focusRequester = remember { FocusRequester() }
+            LaunchedEffect(focusRequester) {
+                focusRequester.requestFocus()
+            }
+
+            TextField(
+                value,
+                onValueChange = { value = it },
+                modifier = Modifier
+                    .wrapContentSize()
+                    .focusRequester(focusRequester)
+            )
+        } else {
+            val focusRequester = remember { FocusRequester() }
+            DisposableEffect(focusRequester) {
+                focusRequester.requestFocus()
+                onDispose {}
+            }
+
+            TextField(
+                value,
+                onValueChange = { value = it },
+                modifier = Modifier
+                    .wrapContentSize()
+                    .focusRequester(focusRequester)
+            )
+        }
     }
-
-    TextField(
-        value,
-        onValueChange = { value = it },
-        modifier = Modifier
-            .wrapContentSize()
-            .focusRequester(focusRequester)
-    )
 }
diff --git a/compose/foundation/foundation/integration-tests/foundation-demos/src/main/java/androidx/compose/foundation/demos/text/LoremIpsum.kt b/compose/foundation/foundation/integration-tests/foundation-demos/src/main/java/androidx/compose/foundation/demos/text/LoremIpsum.kt
index ac9670c..42511ed 100644
--- a/compose/foundation/foundation/integration-tests/foundation-demos/src/main/java/androidx/compose/foundation/demos/text/LoremIpsum.kt
+++ b/compose/foundation/foundation/integration-tests/foundation-demos/src/main/java/androidx/compose/foundation/demos/text/LoremIpsum.kt
@@ -28,7 +28,14 @@
     language: Language = Language.Latin,
     wordCount: Int = language.words.size
 ): String =
-    language.words.joinToString(separator = " ", limit = wordCount, truncated = "")
+    loremIpsumWords(language).joinToString(separator = " ", limit = wordCount, truncated = "")
+
+/**
+ * An infinite [Sequence] of words of Lorem Ipsum text.
+ */
+fun loremIpsumWords(
+    language: Language = Language.Latin
+): Sequence<String> = generateSequence { language.words.asSequence() }.flatten()
 
 private val LatinLipsum = """
     Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque a egestas nisi. Aenean
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..f7bfe30 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
@@ -20,6 +20,7 @@
 import androidx.compose.foundation.demos.text2.BasicTextField2CustomPinFieldDemo
 import androidx.compose.foundation.demos.text2.BasicTextField2Demos
 import androidx.compose.foundation.demos.text2.BasicTextField2FilterDemos
+import androidx.compose.foundation.demos.text2.BasicTextField2LongTextDemo
 import androidx.compose.foundation.demos.text2.BasicTextField2ValueCallbackDemo
 import androidx.compose.foundation.demos.text2.DecorationBoxDemos
 import androidx.compose.foundation.demos.text2.KeyboardOptionsDemos
@@ -112,6 +113,8 @@
                         ComposableDemo("Focus keyboard interaction") {
                             TextFieldFocusKeyboardInteraction()
                         },
+                        ComposableDemo("Focus immediately") { FocusTextFieldImmediatelyDemo() },
+                        ComposableDemo("TextField focus") { TextFieldFocusDemo() },
                     )
                 ),
                 ComposableDemo("Full-screen field") { FullScreenTextFieldDemo() },
@@ -126,9 +129,7 @@
                 ComposableDemo("Visual Transformation") { VisualTransformationDemo() },
                 ComposableDemo("TextFieldValue") { TextFieldValueDemo() },
                 ComposableDemo("Tail Following Text Field") { TailFollowingTextFieldDemo() },
-                ComposableDemo("Focus immediately") { FocusTextFieldImmediatelyDemo() },
                 ComposableDemo("Secondary input system") { PlatformTextInputAdapterDemo() },
-                ComposableDemo("TextField focus") { TextFieldFocusDemo() },
                 ComposableDemo("Read-only field") { ReadOnlyTextFieldDemo() },
             )
         ),
@@ -146,6 +147,7 @@
                 ComposableDemo("Swap the field but reuse the state") { SwapFieldSameStateDemo() },
                 ComposableDemo("Custom PIN field") { BasicTextField2CustomPinFieldDemo() },
                 ComposableDemo("Undo/Redo") { BasicTextField2UndoSample() },
+                ComposableDemo("Long text") { BasicTextField2LongTextDemo() },
             )
         ),
         DemoCategory(
@@ -157,6 +159,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/integration-tests/foundation-demos/src/main/java/androidx/compose/foundation/demos/text2/BasicTextField2LongTextDemo.kt b/compose/foundation/foundation/integration-tests/foundation-demos/src/main/java/androidx/compose/foundation/demos/text2/BasicTextField2LongTextDemo.kt
new file mode 100644
index 0000000..5541557
--- /dev/null
+++ b/compose/foundation/foundation/integration-tests/foundation-demos/src/main/java/androidx/compose/foundation/demos/text2/BasicTextField2LongTextDemo.kt
@@ -0,0 +1,54 @@
+/*
+ * 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.text2
+
+import androidx.compose.foundation.ExperimentalFoundationApi
+import androidx.compose.foundation.demos.text.loremIpsumWords
+import androidx.compose.foundation.layout.Column
+import androidx.compose.foundation.layout.imePadding
+import androidx.compose.foundation.text2.BasicTextField2
+import androidx.compose.foundation.text2.input.TextFieldLineLimits.MultiLine
+import androidx.compose.foundation.text2.input.TextFieldState
+import androidx.compose.material.Text
+import androidx.compose.runtime.Composable
+import androidx.compose.runtime.remember
+import androidx.compose.ui.Modifier
+
+@OptIn(ExperimentalFoundationApi::class)
+@Composable
+fun BasicTextField2LongTextDemo() {
+    val text = remember { TextFieldState(generateString(charCount = 100_000)) }
+
+    Column(Modifier.imePadding()) {
+        BasicTextField2(
+            state = text,
+            modifier = Modifier
+                .weight(1f)
+                .then(demoTextFieldModifiers),
+            lineLimits = MultiLine(maxHeightInLines = 20)
+        )
+        Text("Char count: ${text.text.length}")
+    }
+}
+
+private fun generateString(charCount: Int): String = buildString(capacity = charCount) {
+    val wordIterator = loremIpsumWords().iterator()
+    while (length < charCount) {
+        append(wordIterator.next().take(charCount - length - 1))
+        append(' ')
+    }
+}
diff --git a/compose/foundation/foundation/samples/src/main/java/androidx/compose/foundation/samples/GraphicsSurfaceSamples.kt b/compose/foundation/foundation/samples/src/main/java/androidx/compose/foundation/samples/AndroidExternalSurfaceSamples.kt
similarity index 88%
rename from compose/foundation/foundation/samples/src/main/java/androidx/compose/foundation/samples/GraphicsSurfaceSamples.kt
rename to compose/foundation/foundation/samples/src/main/java/androidx/compose/foundation/samples/AndroidExternalSurfaceSamples.kt
index dc63c5f..0e1d13e 100644
--- a/compose/foundation/foundation/samples/src/main/java/androidx/compose/foundation/samples/GraphicsSurfaceSamples.kt
+++ b/compose/foundation/foundation/samples/src/main/java/androidx/compose/foundation/samples/AndroidExternalSurfaceSamples.kt
@@ -18,8 +18,8 @@
 
 import android.graphics.Rect
 import androidx.annotation.Sampled
-import androidx.compose.foundation.EmbeddedGraphicsSurface
-import androidx.compose.foundation.GraphicsSurface
+import androidx.compose.foundation.AndroidEmbeddedExternalSurface
+import androidx.compose.foundation.AndroidExternalSurface
 import androidx.compose.foundation.layout.fillMaxWidth
 import androidx.compose.foundation.layout.height
 import androidx.compose.runtime.Composable
@@ -33,8 +33,8 @@
 
 @Sampled
 @Composable
-fun GraphicsSurfaceColors() {
-    GraphicsSurface(
+fun AndroidExternalSurfaceColors() {
+    AndroidExternalSurface(
         modifier = Modifier.fillMaxWidth().height(400.dp)
     ) {
         // Resources can be initialized/cached here
@@ -60,8 +60,7 @@
             surface.onDestroyed {
             }
 
-            // Render loop, automatically cancelled by GraphicsSurface
-            // on surface destruction
+            // Render loop, automatically cancelled on surface destruction
             while (true) {
                 withFrameNanos { time ->
                     surface.lockCanvas(Rect(0, 0, w, h)).apply {
@@ -78,8 +77,8 @@
 
 @Sampled
 @Composable
-fun EmbeddedGraphicsSurfaceColors() {
-    EmbeddedGraphicsSurface(
+fun AndroidEmbeddedExternalSurfaceColors() {
+    AndroidEmbeddedExternalSurface(
         modifier = Modifier.fillMaxWidth().height(400.dp)
     ) {
         // Resources can be initialized/cached here
@@ -105,8 +104,7 @@
             surface.onDestroyed {
             }
 
-            // Render loop, automatically cancelled by EmbeddedGraphicsSurface
-            // on surface destruction
+            // Render loop, automatically cancelled on surface destruction
             while (true) {
                 withFrameNanos { time ->
                     surface.lockCanvas(Rect(0, 0, w, h)).apply {
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/samples/src/main/java/androidx/compose/foundation/samples/DragAndDropSamples.kt b/compose/foundation/foundation/samples/src/main/java/androidx/compose/foundation/samples/DragAndDropSamples.kt
new file mode 100644
index 0000000..2073b9c
--- /dev/null
+++ b/compose/foundation/foundation/samples/src/main/java/androidx/compose/foundation/samples/DragAndDropSamples.kt
@@ -0,0 +1,569 @@
+/*
+ * 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.samples
+
+import android.content.ClipData
+import android.content.ClipDescription
+import android.content.Intent
+import androidx.annotation.Sampled
+import androidx.compose.animation.animateColor
+import androidx.compose.animation.core.DurationBasedAnimationSpec
+import androidx.compose.animation.core.RepeatMode
+import androidx.compose.animation.core.animateFloat
+import androidx.compose.animation.core.infiniteRepeatable
+import androidx.compose.animation.core.rememberInfiniteTransition
+import androidx.compose.animation.core.tween
+import androidx.compose.foundation.BorderStroke
+import androidx.compose.foundation.ExperimentalFoundationApi
+import androidx.compose.foundation.background
+import androidx.compose.foundation.border
+import androidx.compose.foundation.draganddrop.dragAndDropSource
+import androidx.compose.foundation.draganddrop.dragAndDropTarget
+import androidx.compose.foundation.gestures.detectTapGestures
+import androidx.compose.foundation.horizontalScroll
+import androidx.compose.foundation.layout.Arrangement
+import androidx.compose.foundation.layout.Box
+import androidx.compose.foundation.layout.Column
+import androidx.compose.foundation.layout.Row
+import androidx.compose.foundation.layout.RowScope
+import androidx.compose.foundation.layout.Spacer
+import androidx.compose.foundation.layout.fillMaxSize
+import androidx.compose.foundation.layout.fillMaxWidth
+import androidx.compose.foundation.layout.height
+import androidx.compose.foundation.layout.offset
+import androidx.compose.foundation.layout.padding
+import androidx.compose.foundation.layout.size
+import androidx.compose.foundation.rememberScrollState
+import androidx.compose.foundation.shape.RoundedCornerShape
+import androidx.compose.foundation.verticalScroll
+import androidx.compose.material.Icon
+import androidx.compose.material.IconButton
+import androidx.compose.material.Text
+import androidx.compose.material.icons.Icons
+import androidx.compose.material.icons.filled.Clear
+import androidx.compose.runtime.Composable
+import androidx.compose.runtime.Stable
+import androidx.compose.runtime.getValue
+import androidx.compose.runtime.mutableStateOf
+import androidx.compose.runtime.remember
+import androidx.compose.runtime.setValue
+import androidx.compose.ui.Alignment
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.draganddrop.DragAndDropEvent
+import androidx.compose.ui.draganddrop.DragAndDropTransfer
+import androidx.compose.ui.draganddrop.dragEvent
+import androidx.compose.ui.draganddrop.mimeTypes
+import androidx.compose.ui.draw.rotate
+import androidx.compose.ui.graphics.Brush
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.toArgb
+import androidx.compose.ui.unit.Dp
+import androidx.compose.ui.unit.dp
+import kotlin.random.Random
+
+@Composable
+fun DragAndDropMultiAppSample() {
+    var dragAndDropEventSummary by remember { mutableStateOf<String?>(null) }
+
+    Column(
+        modifier = Modifier
+            .padding(16.dp)
+            .fillMaxSize(),
+        horizontalAlignment = Alignment.CenterHorizontally
+    ) {
+
+        TextDragAndDropSourceSample(
+            modifier = Modifier
+                .fillMaxWidth()
+        )
+
+        Spacer(
+            modifier = Modifier.height(24.dp),
+        )
+
+        Box(
+            modifier = Modifier
+                .fillMaxWidth()
+                .weight(1f)
+        ) {
+            TextDragAndDropTargetSample(
+                eventSummary = dragAndDropEventSummary,
+                onDragAndDropEventDropped = { event ->
+                    dragAndDropEventSummary = event.summary()
+                }
+            )
+            if (dragAndDropEventSummary != null) {
+                Box(
+                    modifier = Modifier
+                        .align(Alignment.TopEnd)
+                        .padding(16.dp)
+                ) {
+                    IconButton(
+                        onClick = {
+                            dragAndDropEventSummary = null
+                        },
+                        content = {
+                            Icon(
+                                imageVector = Icons.Default.Clear,
+                                contentDescription = "Clear"
+                            )
+                        }
+                    )
+                }
+            }
+        }
+    }
+}
+
+@OptIn(ExperimentalFoundationApi::class)
+@Sampled
+@Composable
+fun TextDragAndDropSourceSample(
+    modifier: Modifier
+) {
+    val label = remember { "Drag me" }
+    Box(
+        modifier = modifier
+            .dragAndDropSource {
+                detectTapGestures(
+                    onLongPress = {
+                        startTransfer(
+                            DragAndDropTransfer(
+                                clipData = ClipData.newPlainText(label, label)
+                            )
+                        )
+                    }
+                )
+            }
+            .border(
+                border = BorderStroke(
+                    width = 4.dp,
+                    brush = Brush.linearGradient(listOf(Color.Magenta, Color.Magenta))
+                ),
+                shape = RoundedCornerShape(16.dp)
+            )
+            .padding(24.dp),
+    ) {
+        Text(
+            modifier = Modifier.align(Alignment.Center),
+            text = label
+        )
+    }
+}
+
+@OptIn(ExperimentalFoundationApi::class)
+@Sampled
+@Composable
+fun TextDragAndDropTargetSample(
+    eventSummary: String?,
+    onDragAndDropEventDropped: (DragAndDropEvent) -> Unit,
+) {
+    var backgroundColor by remember { mutableStateOf(Color.Transparent) }
+    Box(
+        modifier = Modifier
+            .fillMaxSize()
+            .dragAndDropTarget(
+                onStarted = {
+                    backgroundColor = Color.DarkGray.copy(alpha = 0.2f)
+                    true
+                },
+                onDropped = { event ->
+                    onDragAndDropEventDropped(event)
+                    true
+                },
+                onEnded = {
+                    backgroundColor = Color.Transparent
+                }
+            )
+            .background(backgroundColor)
+            .border(
+                width = 4.dp,
+                color = Color.Magenta,
+                shape = RoundedCornerShape(16.dp)
+            ),
+    ) {
+        when (eventSummary) {
+            null -> Text(
+                modifier = Modifier
+                    .align(Alignment.Center),
+                text = "Drop anything here"
+            )
+
+            else -> Text(
+                modifier = Modifier
+                    .padding(
+                        horizontal = 16.dp,
+                        vertical = 24.dp
+                    )
+                    .verticalScroll(rememberScrollState()),
+                text = eventSummary
+            )
+        }
+    }
+}
+
+private fun DragAndDropEvent.summary() =
+    (0 until dragEvent.clipData.itemCount)
+        .map(dragEvent.clipData::getItemAt)
+        .withIndex()
+        .joinToString(separator = "\n\n") { (index, clipItem) ->
+            val mimeTypes = (0 until dragEvent.clipData.description.mimeTypeCount)
+                .joinToString(
+                    separator = ", ",
+                    transform = dragEvent.clipData.description::getMimeType
+                )
+            listOfNotNull(
+                "index: $index",
+                "mimeTypes: $mimeTypes",
+                clipItem.text
+                    ?.takeIf(CharSequence::isNotEmpty)
+                    ?.let {
+                        "text: $it"
+                    },
+                clipItem.htmlText
+                    ?.takeIf(CharSequence::isNotEmpty)
+                    ?.let {
+                        "html text: $it"
+                    },
+                clipItem.uri?.toString()?.let {
+                    "uri: $it"
+                },
+                clipItem.intent?.let {
+                    "intent: action - ${it.action}; extras size: ${it.extras?.size()}"
+                },
+            ).joinToString(separator = "\n")
+        }
+
+@Composable
+fun DragAndDropNestedSample() {
+    Column(
+        modifier = Modifier
+            .fillMaxSize()
+    ) {
+        TwoByTwoGrid(
+            modifier = Modifier
+                .padding(16.dp)
+                .weight(1f)
+                .fillMaxWidth()
+                .animatedDragAndDrop(
+                    prefix = "Main",
+                    level = 0,
+                    rowAndColumn = RowAndColumn(
+                        row = 0,
+                        column = 0
+                    )
+                ),
+        ) { outerRowAndColumn ->
+            TwoByTwoGrid(
+                modifier = Modifier
+                    .padding(16.dp)
+                    .weight(1f)
+                    .fillMaxWidth()
+                    .animatedDragAndDrop(
+                        prefix = "Outer",
+                        level = 1,
+                        rowAndColumn = outerRowAndColumn,
+                    ),
+            ) { innerRowAndColumn ->
+                Box(
+                    modifier = Modifier
+                        .padding(16.dp)
+                        .weight(1f)
+                        .fillMaxSize()
+                        .animatedDragAndDrop(
+                            prefix = "Inner ",
+                            level = 2,
+                            rowAndColumn = innerRowAndColumn,
+                        ),
+                )
+            }
+        }
+        ColorSwatch()
+    }
+}
+
+@Composable
+private fun ColorSwatch() {
+    Row(
+        modifier = Modifier
+            .padding(16.dp)
+            .height(56.dp)
+            .fillMaxWidth()
+            .horizontalScroll(rememberScrollState()),
+        horizontalArrangement = Arrangement.SpaceEvenly,
+    ) {
+        Colors.forEach { color ->
+            DragAndDropSourceWithColoredDragShadowSample(color)
+        }
+    }
+}
+
+@OptIn(ExperimentalFoundationApi::class)
+@Sampled
+@Composable
+fun DragAndDropSourceWithColoredDragShadowSample(
+    color: Color
+) {
+    Box(
+        modifier = Modifier
+            .size(56.dp)
+            .background(color = color)
+            .dragAndDropSource(
+                onDrawDragShadow = {
+                    drawRect(color)
+                },
+            ) {
+                detectTapGestures(
+                    onLongPress = { startTransfer(color.toDragAndDropTransfer()) }
+                )
+            }
+    )
+}
+
+@Composable
+private fun TwoByTwoGrid(
+    modifier: Modifier = Modifier,
+    child: @Composable (RowScope.(rowAndColumn: RowAndColumn) -> Unit)
+) {
+    Column(
+        modifier = modifier
+    ) {
+        repeat(2) { column ->
+            Row(
+                modifier = Modifier
+                    .weight(1f)
+                    .fillMaxSize()
+            ) {
+                repeat(2) { row ->
+                    child(RowAndColumn(row, column))
+                }
+            }
+        }
+    }
+}
+
+@Composable
+private fun Modifier.animatedDragAndDrop(
+    prefix: String,
+    level: Int,
+    rowAndColumn: RowAndColumn
+): Modifier {
+    val state = remember {
+        State(
+            prefix = prefix,
+            level = level,
+            rowAndColumn = rowAndColumn
+        )
+    }
+    return this
+        .stateDragSource(state)
+        .stateDropTarget(state)
+        .background(state.animatedColor)
+        .rotate(state.animatedRotation)
+        .offset(state.animatedTranslation, state.animatedTranslation)
+}
+
+@OptIn(ExperimentalFoundationApi::class)
+private fun Modifier.stateDragSource(
+    state: State
+) = dragAndDropSource(
+    onDrawDragShadow = {
+        drawRoundRect(state.color)
+    },
+) {
+    detectTapGestures(
+        onLongPress = { startTransfer(state.color.toDragAndDropTransfer()) }
+    )
+}
+
+@OptIn(ExperimentalFoundationApi::class)
+private fun Modifier.stateDropTarget(
+    state: State
+) = dragAndDropTarget(
+    onStarted = { event ->
+        val accepts = event.mimeTypes().contains(ClipDescription.MIMETYPE_TEXT_INTENT)
+        if (accepts) state.onStarted()
+        accepts
+    },
+    onEntered = {
+        println("Entered ${state.name}")
+        state.onEntered()
+    },
+    onMoved = {
+        println("Moved in ${state.name}")
+    },
+    onExited = {
+        println("Exited ${state.name}")
+        state.onExited()
+    },
+    onEnded = {
+        println("Ended in ${state.name}")
+        state.onEnded()
+    },
+    onDropped = { event ->
+        println("Dropped items in ${state.name}")
+        when (val transferredColor = event.dragEvent.clipData.color()) {
+            null -> false
+            else -> {
+                state.onDropped(transferredColor)
+                true
+            }
+        }
+    }
+)
+
+@Stable
+private class State(
+    val prefix: String,
+    val level: Int,
+    val rowAndColumn: RowAndColumn,
+) {
+    var color by mutableStateOf(startColor)
+        private set
+
+    var isInside by mutableStateOf(false)
+        private set
+
+    var isInDnD by mutableStateOf(false)
+        private set
+
+    fun onStarted() {
+        isInDnD = true
+    }
+
+    fun onEntered() {
+        isInside = true
+    }
+
+    fun onExited() {
+        isInside = false
+    }
+
+    fun onDropped(color: Color) {
+        this.color = color
+    }
+
+    fun onEnded() {
+        isInside = false
+        isInDnD = false
+    }
+}
+
+private val State.name
+    get() = with(rowAndColumn) {
+        "$prefix${Letters.circularGet(row)}, ${Numbers.circularGet(column)}"
+    }
+private val State.startColor
+    get() = when (level % 2) {
+        0 -> Colors.drop(Colors.size / 2)
+        else -> Colors.take(Colors.size / 2)
+    }.circularGet(colorIndex + level)
+
+private val State.colorIndex
+    get() = with(rowAndColumn) {
+        (row * 2) + column
+    }
+
+private val State.animatedColor: Color
+    @Composable
+    get() = rememberInfiniteTransition(
+        label = "color"
+    ).animateColor(
+        initialValue = color,
+        targetValue = if (isInside) Color.DarkGray else color,
+        animationSpec = infiniteRepeatable(
+            animation = tween(400),
+            repeatMode = RepeatMode.Reverse
+        ),
+        label = "background color"
+    ).value
+
+private val State.animatedRotation: Float
+    @Composable
+    get() = rememberInfiniteTransition(
+        label = "rotation"
+    ).animateFloat(
+        initialValue = if (isInDnD) -0.2f else 0f,
+        targetValue = if (isInDnD) 0.2f else 0f,
+        animationSpec = infiniteRepeatable(
+            animation = jiggleSpec(),
+            repeatMode = RepeatMode.Reverse
+        ),
+        label = "rotation"
+    ).value
+
+private val State.animatedTranslation: Dp
+    @Composable
+    get() = rememberInfiniteTransition(
+        label = "translation"
+    ).animateFloat(
+        initialValue = if (isInDnD) -0.02f else 0f,
+        targetValue = if (isInDnD) 0.02f else 0f,
+        animationSpec = infiniteRepeatable(
+            animation = jiggleSpec(),
+            repeatMode = RepeatMode.Reverse
+        ),
+        label = "translation"
+    ).value.dp
+
+private fun jiggleSpec(): DurationBasedAnimationSpec<Float> =
+    tween(durationMillis = 70 + (Random.nextInt(30)))
+
+private data class RowAndColumn(
+    val row: Int,
+    val column: Int
+)
+
+private fun Color.toDragAndDropTransfer() = DragAndDropTransfer(
+    clipData = ClipData.newIntent(
+        "color transfer",
+        colorDragAndDropTransferIntent(this)
+    )
+)
+
+private fun ClipData.color() =
+    (0 until itemCount)
+        .map(::getItemAt)
+        .firstNotNullOfOrNull { item ->
+            item?.intent
+                ?.getIntExtra(ColorTransferData, -1)
+                ?.takeIf { it != -1 }
+                ?.let(::Color)
+        }
+
+private fun colorDragAndDropTransferIntent(color: Color) = Intent(ColorTransferAction).apply {
+    putExtra(ColorTransferData, color.toArgb())
+}
+
+private const val ColorTransferAction = "action.color.transfer"
+private const val ColorTransferData = "data.color.transfer"
+
+private fun <T> List<T>.circularGet(index: Int) = get(index % size)
+private val Letters = ('A'..'Z').toList()
+private val Numbers = ('1'..'9').toList()
+
+private val Colors = listOf(
+    Color(0xFF2980b9), // Belize Hole
+    Color(0xFF2c3e50), // Midnight Blue
+    Color(0xFFc0392b), // Pomegranate
+    Color(0xFF16a085), // Green Sea
+    Color(0xFF7f8c8d), // Concrete
+    Color(0xFFC6973B), // Mustard
+    Color(0xFFF6CAB7), // Blush
+    Color(0xFF6D4336), // Brown
+    Color(0xFF814063), // Plum
+)
diff --git a/compose/foundation/foundation/src/androidInstrumentedTest/kotlin/androidx/compose/foundation/EmbeddedGraphicsSurfaceTest.kt b/compose/foundation/foundation/src/androidInstrumentedTest/kotlin/androidx/compose/foundation/AndroidEmbeddedExternalSurfaceTest.kt
similarity index 94%
rename from compose/foundation/foundation/src/androidInstrumentedTest/kotlin/androidx/compose/foundation/EmbeddedGraphicsSurfaceTest.kt
rename to compose/foundation/foundation/src/androidInstrumentedTest/kotlin/androidx/compose/foundation/AndroidEmbeddedExternalSurfaceTest.kt
index 6a10cd1..ba24609 100644
--- a/compose/foundation/foundation/src/androidInstrumentedTest/kotlin/androidx/compose/foundation/EmbeddedGraphicsSurfaceTest.kt
+++ b/compose/foundation/foundation/src/androidInstrumentedTest/kotlin/androidx/compose/foundation/AndroidEmbeddedExternalSurfaceTest.kt
@@ -54,7 +54,7 @@
 @LargeTest
 @SdkSuppress(minSdkVersion = Build.VERSION_CODES.O)
 @RunWith(AndroidJUnit4::class)
-class EmbeddedGraphicsSurfaceTest {
+class AndroidEmbeddedExternalSurfaceTest {
     @get:Rule
     val rule = createComposeRule()
 
@@ -72,7 +72,7 @@
                 size.toPx().roundToInt()
             }
 
-            EmbeddedGraphicsSurface(modifier = Modifier.size(size)) {
+            AndroidEmbeddedExternalSurface(modifier = Modifier.size(size)) {
                 onSurface { surface, width, height ->
                     surfaceRef = surface
                     surfaceWidth = width
@@ -106,7 +106,7 @@
                 desiredSize.toPx().roundToInt()
             }
 
-            EmbeddedGraphicsSurface(modifier = Modifier.size(desiredSize)) {
+            AndroidEmbeddedExternalSurface(modifier = Modifier.size(desiredSize)) {
                 onSurface { surface, initWidth, initHeight ->
                     surfaceWidth = initWidth
                     surfaceHeight = initHeight
@@ -151,7 +151,7 @@
 
         rule.setContent {
             if (visible) {
-                EmbeddedGraphicsSurface(modifier = Modifier.size(size)) {
+                AndroidEmbeddedExternalSurface(modifier = Modifier.size(size)) {
                     onSurface { surface, _, _ ->
                         surfaceRef = surface
 
@@ -184,7 +184,7 @@
         // the window, and only creates when it gets attached to the window
         rule.setContent {
             if (visible) {
-                EmbeddedGraphicsSurface(modifier = Modifier.size(size)) {
+                AndroidEmbeddedExternalSurface(modifier = Modifier.size(size)) {
                     onSurface { surface, _, _ ->
                         surfaceCreatedCount++
                         surface.onDestroyed {
@@ -222,7 +222,7 @@
             expectedSize = with(LocalDensity.current) {
                 size.toPx().roundToInt()
             }
-            EmbeddedGraphicsSurface(modifier = Modifier.size(size)) {
+            AndroidEmbeddedExternalSurface(modifier = Modifier.size(size)) {
                 onSurface { surface, _, _ ->
                     surfaceRef = surface
                     surface.lockHardwareCanvas().apply {
@@ -251,7 +251,7 @@
                 Canvas(modifier = Modifier.size(size)) {
                     drawRect(Color.White)
                 }
-                EmbeddedGraphicsSurface(
+                AndroidEmbeddedExternalSurface(
                     modifier = Modifier
                         .size(size)
                         .testTag("EmbeddedGraphicSurface"),
@@ -283,7 +283,7 @@
                 Canvas(modifier = Modifier.size(size)) {
                     drawRect(Color.Green)
                 }
-                EmbeddedGraphicsSurface(
+                AndroidEmbeddedExternalSurface(
                     modifier = Modifier
                         .size(size)
                         .testTag("EmbeddedGraphicSurface")
diff --git a/compose/foundation/foundation/src/androidInstrumentedTest/kotlin/androidx/compose/foundation/GraphicsSurfaceTest.kt b/compose/foundation/foundation/src/androidInstrumentedTest/kotlin/androidx/compose/foundation/AndroidExternalSurfaceTest.kt
similarity index 95%
rename from compose/foundation/foundation/src/androidInstrumentedTest/kotlin/androidx/compose/foundation/GraphicsSurfaceTest.kt
rename to compose/foundation/foundation/src/androidInstrumentedTest/kotlin/androidx/compose/foundation/AndroidExternalSurfaceTest.kt
index 6fc417c..59bb5f8 100644
--- a/compose/foundation/foundation/src/androidInstrumentedTest/kotlin/androidx/compose/foundation/GraphicsSurfaceTest.kt
+++ b/compose/foundation/foundation/src/androidInstrumentedTest/kotlin/androidx/compose/foundation/AndroidExternalSurfaceTest.kt
@@ -74,7 +74,7 @@
 @LargeTest
 @SdkSuppress(minSdkVersion = Build.VERSION_CODES.TIRAMISU)
 @RunWith(AndroidJUnit4::class)
-class GraphicsSurfaceTest {
+class AndroidExternalSurfaceTest {
     @get:Rule
     val rule = createComposeRule()
 
@@ -92,7 +92,7 @@
                 size.toPx().roundToInt()
             }
 
-            GraphicsSurface(modifier = Modifier.size(size)) {
+            AndroidExternalSurface(modifier = Modifier.size(size)) {
                 onSurface { surface, width, height ->
                     surfaceRef = surface
                     surfaceWidth = width
@@ -126,7 +126,7 @@
                 desiredSize.toPx().roundToInt()
             }
 
-            GraphicsSurface(modifier = Modifier.size(desiredSize)) {
+            AndroidExternalSurface(modifier = Modifier.size(desiredSize)) {
                 onSurface { surface, _, _ ->
                     surface.onChanged { newWidth, newHeight ->
                         surfaceWidth = newWidth
@@ -169,7 +169,7 @@
 
         rule.setContent {
             if (visible) {
-                GraphicsSurface(modifier = Modifier.size(size)) {
+                AndroidExternalSurface(modifier = Modifier.size(size)) {
                     onSurface { surface, _, _ ->
                         surfaceRef = surface
 
@@ -201,7 +201,7 @@
 
         rule.setContent {
             view = LocalView.current
-            GraphicsSurface(modifier = Modifier.size(size)) {
+            AndroidExternalSurface(modifier = Modifier.size(size)) {
                 onSurface { surface, _, _ ->
                     surfaceCreatedCount++
                     surface.onDestroyed {
@@ -242,7 +242,7 @@
             expectedSize = with(LocalDensity.current) {
                 size.toPx().roundToInt()
             }
-            GraphicsSurface(modifier = Modifier.size(size)) {
+            AndroidExternalSurface(modifier = Modifier.size(size)) {
                 onSurface { surface, _, _ ->
                     surfaceRef = surface
                     surface.lockHardwareCanvas().apply {
@@ -269,7 +269,7 @@
 
         rule.setContent {
             Box(modifier = Modifier.size(size)) {
-                GraphicsSurface(
+                AndroidExternalSurface(
                     modifier = Modifier
                         .size(size)
                         .testTag("GraphicSurface")
@@ -311,9 +311,9 @@
 
         rule.setContent {
             Box(modifier = Modifier.size(size)) {
-                GraphicsSurface(
+                AndroidExternalSurface(
                     modifier = Modifier.size(size),
-                    zOrder = GraphicsSurfaceZOrder.Behind
+                    zOrder = AndroidExternalSurfaceZOrder.Behind
                 ) {
                     onSurface { surface, _, _ ->
                         // Draw > 3 frames to make sure the screenshot copy will pick up
@@ -329,11 +329,11 @@
                         }
                     }
                 }
-                GraphicsSurface(
+                AndroidExternalSurface(
                     modifier = Modifier
                         .size(size)
                         .testTag("GraphicSurface"),
-                    zOrder = GraphicsSurfaceZOrder.MediaOverlay
+                    zOrder = AndroidExternalSurfaceZOrder.MediaOverlay
                 ) {
                     onSurface { surface, _, _ ->
                         surface.lockHardwareCanvas().apply {
@@ -363,11 +363,11 @@
 
         rule.setContent {
             Box(modifier = Modifier.size(size)) {
-                GraphicsSurface(
+                AndroidExternalSurface(
                     modifier = Modifier
                         .size(size)
                         .testTag("GraphicSurface"),
-                    zOrder = GraphicsSurfaceZOrder.OnTop
+                    zOrder = AndroidExternalSurfaceZOrder.OnTop
                 ) {
                     onSurface { surface, _, _ ->
                         // Draw > 3 frames to make sure the screenshot copy will pick up
@@ -407,12 +407,12 @@
 
         rule.setContent {
             Box(modifier = Modifier.size(size)) {
-                GraphicsSurface(
+                AndroidExternalSurface(
                     modifier = Modifier
                         .size(size)
                         .testTag("GraphicSurface"),
                     isOpaque = false,
-                    zOrder = GraphicsSurfaceZOrder.OnTop
+                    zOrder = AndroidExternalSurfaceZOrder.OnTop
                 ) {
                     onSurface { surface, _, _ ->
                         // Draw > 3 frames to make sure the screenshot copy will pick up
@@ -455,7 +455,7 @@
         val latch = CountDownLatch(frameCount)
 
         rule.setContent {
-            GraphicsSurface(
+            AndroidExternalSurface(
                 modifier = Modifier
                     .size(size)
                     .testTag("GraphicSurface"),
diff --git a/compose/foundation/foundation/src/androidInstrumentedTest/kotlin/androidx/compose/foundation/gesture/snapping/LazyGridSnapFlingBehaviorTest.kt b/compose/foundation/foundation/src/androidInstrumentedTest/kotlin/androidx/compose/foundation/gesture/snapping/LazyGridSnapFlingBehaviorTest.kt
index 6d04823..0f51802 100644
--- a/compose/foundation/foundation/src/androidInstrumentedTest/kotlin/androidx/compose/foundation/gesture/snapping/LazyGridSnapFlingBehaviorTest.kt
+++ b/compose/foundation/foundation/src/androidInstrumentedTest/kotlin/androidx/compose/foundation/gesture/snapping/LazyGridSnapFlingBehaviorTest.kt
@@ -402,20 +402,14 @@
 
         // assert
         val initialTargetOffset = snapLayoutInfoProvider.calculateApproachOffset(velocity)
-        Truth.assertThat(scrollOffset[1]).isWithin(0.5f)
+        Truth.assertThat(scrollOffset.first()).isWithin(0.5f)
             .of(initialTargetOffset)
 
-        // act: wait for remaining offset to grow instead of decay, this indicates the last
-        // snap step will start
+        // act and assert: next calculated offset is the first value emitted by
+        // remainingScrollOffset this indicates the last snap step will start
         rule.mainClock.advanceTimeUntil {
-            scrollOffset.size > 2 &&
-                scrollOffset.last() > scrollOffset[scrollOffset.lastIndex - 1]
+            scrollOffset.last() == snapLayoutInfoProvider.calculateSnappingOffset(10000f)
         }
-
-        // assert: next calculated offset is the first value emitted by remainingScrollOffset
-        val finalRemainingOffset = snapLayoutInfoProvider.calculateSnappingOffset(10000f)
-        Truth.assertThat(scrollOffset.last()).isWithin(0.5f)
-            .of(finalRemainingOffset)
         rule.mainClock.autoAdvance = true
 
         // assert: value settles back to zero
diff --git a/compose/foundation/foundation/src/androidInstrumentedTest/kotlin/androidx/compose/foundation/gesture/snapping/LazyListSnapFlingBehaviorTest.kt b/compose/foundation/foundation/src/androidInstrumentedTest/kotlin/androidx/compose/foundation/gesture/snapping/LazyListSnapFlingBehaviorTest.kt
index 4a1a839..d16e5c9 100644
--- a/compose/foundation/foundation/src/androidInstrumentedTest/kotlin/androidx/compose/foundation/gesture/snapping/LazyListSnapFlingBehaviorTest.kt
+++ b/compose/foundation/foundation/src/androidInstrumentedTest/kotlin/androidx/compose/foundation/gesture/snapping/LazyListSnapFlingBehaviorTest.kt
@@ -76,13 +76,13 @@
     @Test
     fun belowThresholdVelocity_lessThanAnItemScroll_shouldStayInSamePage() {
         var lazyListState: LazyListState? = null
-        var stepSize = 0f
+        var itemSize = 0f
         var velocityThreshold = 0f
         // arrange
         rule.setContent {
             val density = LocalDensity.current
             val state = rememberLazyListState().also { lazyListState = it }
-            stepSize = with(density) { ItemSize.toPx() }
+            itemSize = with(density) { ItemSize.toPx() }
             velocityThreshold = with(density) { MinFlingVelocityDp.toPx() }
             MainLayout(state = state)
         }
@@ -94,7 +94,7 @@
 
         // act
         onMainList().performTouchInput {
-            swipeMainAxisWithVelocity(stepSize / 2, velocityThreshold / 2)
+            swipeMainAxisWithVelocity(itemSize / 2, velocityThreshold / 2)
         }
 
         // assert
@@ -107,14 +107,14 @@
     @Test
     fun belowThresholdVelocity_moreThanAnItemScroll_shouldGoToNextPage() {
         var lazyListState: LazyListState? = null
-        var stepSize = 0f
+        var itemSize = 0f
         var velocityThreshold = 0f
 
         // arrange
         rule.setContent {
             val density = LocalDensity.current
             val state = rememberLazyListState().also { lazyListState = it }
-            stepSize = with(density) { ItemSize.toPx() }
+            itemSize = with(density) { ItemSize.toPx() }
             velocityThreshold = with(density) { MinFlingVelocityDp.toPx() }
             MainLayout(state = state)
         }
@@ -127,7 +127,7 @@
         // act
         onMainList().performTouchInput {
             swipeMainAxisWithVelocity(
-                stepSize,
+                itemSize,
                 velocityThreshold / 2
             )
         }
@@ -142,14 +142,14 @@
     @Test
     fun aboveThresholdVelocityForward_notLargeEnoughScroll_shouldGoToNextPage() {
         var lazyListState: LazyListState? = null
-        var stepSize = 0f
+        var itemSize = 0f
         var velocityThreshold = 0f
 
         // arrange
         rule.setContent {
             val density = LocalDensity.current
             val state = rememberLazyListState().also { lazyListState = it }
-            stepSize = with(density) { ItemSize.toPx() }
+            itemSize = with(density) { ItemSize.toPx() }
             velocityThreshold = with(density) { MinFlingVelocityDp.toPx() }
             MainLayout(state = state)
         }
@@ -162,7 +162,7 @@
         // act
         onMainList().performTouchInput {
             swipeMainAxisWithVelocity(
-                stepSize / 2,
+                itemSize / 2,
                 velocityThreshold * 2
             )
         }
@@ -177,14 +177,14 @@
     @Test
     fun aboveThresholdVelocityBackward_notLargeEnoughScroll_shouldGoToPreviousPage() {
         var lazyListState: LazyListState? = null
-        var stepSize = 0f
+        var itemSize = 0f
         var velocityThreshold = 0f
 
         // arrange
         rule.setContent {
             val density = LocalDensity.current
             val state = rememberLazyListState().also { lazyListState = it }
-            stepSize = with(density) { ItemSize.toPx() }
+            itemSize = with(density) { ItemSize.toPx() }
             velocityThreshold = with(density) { MinFlingVelocityDp.toPx() }
             MainLayout(state = state)
         }
@@ -197,7 +197,7 @@
         // act
         onMainList().performTouchInput {
             swipeMainAxisWithVelocity(
-                stepSize / 2,
+                itemSize / 2,
                 velocityThreshold * 2,
                 true
             )
@@ -213,14 +213,14 @@
     @Test
     fun aboveThresholdVelocity_largeEnoughScroll_shouldGoToNextNextPage() {
         var lazyListState: LazyListState? = null
-        var stepSize = 0f
+        var itemSize = 0f
         var velocityThreshold = 0f
 
         // arrange
         rule.setContent {
             val density = LocalDensity.current
             val state = rememberLazyListState().also { lazyListState = it }
-            stepSize = with(density) { ItemSize.toPx() }
+            itemSize = with(density) { ItemSize.toPx() }
             velocityThreshold = with(density) { MinFlingVelocityDp.toPx() }
             MainLayout(state = state)
         }
@@ -233,7 +233,7 @@
         // act
         onMainList().performTouchInput {
             swipeMainAxisWithVelocity(
-                1.5f * stepSize,
+                1.5f * itemSize,
                 velocityThreshold * 3
             )
         }
@@ -247,7 +247,7 @@
 
     @Test
     fun performFling_shouldPropagateVelocityIfHitEdges() {
-        var stepSize = 0f
+        var itemSize = 0f
         var latestAvailableVelocity = Velocity.Zero
         lateinit var lazyListState: LazyListState
         val inspectingNestedScrollConnection = object : NestedScrollConnection {
@@ -261,7 +261,7 @@
         rule.setContent {
             val density = LocalDensity.current
             lazyListState = rememberLazyListState(180) // almost at the end
-            stepSize = with(density) { ItemSize.toPx() }
+            itemSize = with(density) { ItemSize.toPx() }
             Box(
                 modifier = Modifier
                     .fillMaxSize()
@@ -274,7 +274,7 @@
         // act
         onMainList().performTouchInput {
             swipeMainAxisWithVelocity(
-                1.5f * stepSize,
+                1.5f * itemSize,
                 30000f
             )
         }
@@ -296,7 +296,7 @@
         // act
         onMainList().performTouchInput {
             swipeMainAxisWithVelocity(
-                -1.5f * stepSize,
+                -1.5f * itemSize,
                 30000f
             )
         }
@@ -309,7 +309,7 @@
 
     @Test
     fun performFling_shouldConsumeAllVelocityIfInTheMiddleOfTheList() {
-        var stepSize = 0f
+        var itemSize = 0f
         var latestAvailableVelocity = Velocity.Zero
         lateinit var lazyListState: LazyListState
         val inspectingNestedScrollConnection = object : NestedScrollConnection {
@@ -323,7 +323,7 @@
         rule.setContent {
             val density = LocalDensity.current
             lazyListState = rememberLazyListState(100) // middle of the list
-            stepSize = with(density) { ItemSize.toPx() }
+            itemSize = with(density) { ItemSize.toPx() }
             Box(
                 modifier = Modifier
                     .fillMaxSize()
@@ -336,7 +336,7 @@
         // act
         onMainList().performTouchInput {
             swipeMainAxisWithVelocity(
-                1.5f * stepSize,
+                1.5f * itemSize,
                 10000f // use a not so high velocity
             )
         }
@@ -358,7 +358,7 @@
         // act
         onMainList().performTouchInput {
             swipeMainAxisWithVelocity(
-                -1.5f * stepSize,
+                -1.5f * itemSize,
                 10000f // use a not so high velocity
             )
         }
@@ -371,14 +371,14 @@
 
     @Test
     fun remainingScrollOffset_shouldFollowAnimationOffsets() {
-        var stepSize = 0f
+        var itemSize = 0f
         var velocityThreshold = 0f
         val scrollOffset = mutableListOf<Float>()
         // arrange
         rule.setContent {
             val density = LocalDensity.current
             val state = rememberLazyListState()
-            stepSize = with(density) { ItemSize.toPx() }
+            itemSize = with(density) { ItemSize.toPx() }
             velocityThreshold = with(density) { MinFlingVelocityDp.toPx() }
             MainLayout(state = state, scrollOffset)
         }
@@ -388,7 +388,7 @@
         val velocity = velocityThreshold * 3
         onMainList().performTouchInput {
             swipeMainAxisWithVelocity(
-                1.5f * stepSize,
+                1.5f * itemSize,
                 velocity
             )
         }
@@ -397,20 +397,15 @@
         // assert
         val initialTargetOffset =
             snapLayoutInfoProvider.calculateApproachOffset(velocity)
-        Truth.assertThat(scrollOffset[1]).isWithin(0.5f)
+        Truth.assertThat(scrollOffset.first()).isWithin(0.5f)
             .of(initialTargetOffset)
 
-        // act: wait for remaining offset to grow instead of decay, this indicates the last
-        // snap step will start
+        // act and assert: next calculated offset is the first value emitted by
+        // remainingScrollOffset this indicates the last snap step will start
         rule.mainClock.advanceTimeUntil {
-            scrollOffset.size > 2 &&
-                scrollOffset.last() > scrollOffset[scrollOffset.lastIndex - 1]
+            scrollOffset.last() == snapLayoutInfoProvider.calculateSnappingOffset(10000f)
         }
 
-        // assert: next calculated offset is the first value emitted by remainingScrollOffset
-        val finalRemainingOffset = snapLayoutInfoProvider.calculateSnappingOffset(10000f)
-        Truth.assertThat(scrollOffset.last()).isWithin(0.5f)
-            .of(finalRemainingOffset)
         rule.mainClock.autoAdvance = true
 
         // assert: value settles back to zero
diff --git a/compose/foundation/foundation/src/androidInstrumentedTest/kotlin/androidx/compose/foundation/gesture/snapping/SnapFlingBehaviorTest.kt b/compose/foundation/foundation/src/androidInstrumentedTest/kotlin/androidx/compose/foundation/gesture/snapping/SnapFlingBehaviorTest.kt
index 38e7560..81abc8d 100644
--- a/compose/foundation/foundation/src/androidInstrumentedTest/kotlin/androidx/compose/foundation/gesture/snapping/SnapFlingBehaviorTest.kt
+++ b/compose/foundation/foundation/src/androidInstrumentedTest/kotlin/androidx/compose/foundation/gesture/snapping/SnapFlingBehaviorTest.kt
@@ -24,6 +24,7 @@
 import androidx.compose.animation.core.LinearEasing
 import androidx.compose.animation.core.TwoWayConverter
 import androidx.compose.animation.core.VectorizedAnimationSpec
+import androidx.compose.animation.core.calculateTargetValue
 import androidx.compose.animation.core.generateDecayAnimationSpec
 import androidx.compose.animation.core.spring
 import androidx.compose.animation.core.tween
@@ -31,6 +32,7 @@
 import androidx.compose.foundation.TestScrollMotionDurationScale
 import androidx.compose.foundation.gestures.FlingBehavior
 import androidx.compose.foundation.gestures.rememberScrollableState
+import androidx.compose.foundation.gestures.snapping.FinalSnappingItem
 import androidx.compose.foundation.gestures.snapping.MinFlingVelocityDp
 import androidx.compose.foundation.gestures.snapping.NoVelocity
 import androidx.compose.foundation.gestures.snapping.SnapFlingBehavior
@@ -52,19 +54,19 @@
 import androidx.compose.runtime.rememberCoroutineScope
 import androidx.compose.runtime.setValue
 import androidx.compose.ui.Modifier
-import androidx.compose.ui.platform.LocalDensity
 import androidx.compose.ui.platform.testTag
 import androidx.compose.ui.test.junit4.createComposeRule
 import androidx.compose.ui.test.onNodeWithTag
 import androidx.compose.ui.test.performTouchInput
 import androidx.compose.ui.test.swipeWithVelocity
-import androidx.compose.ui.unit.Density
 import androidx.compose.ui.unit.dp
 import androidx.test.ext.junit.runners.AndroidJUnit4
 import androidx.test.filters.MediumTest
 import com.google.common.truth.Truth
+import kotlin.math.absoluteValue
 import kotlin.test.assertEquals
 import kotlin.test.assertNotEquals
+import kotlin.test.assertTrue
 import kotlinx.coroutines.CoroutineScope
 import kotlinx.coroutines.launch
 import kotlinx.coroutines.withContext
@@ -82,45 +84,17 @@
     private val inspectSpringAnimationSpec = InspectSpringAnimationSpec(spring())
     private val inspectTweenAnimationSpec = InspectSpringAnimationSpec(tween(easing = LinearEasing))
 
-    private val density: Density
-        get() = rule.density
-
     @Test
-    fun performFling_whenVelocityIsBelowThreshold_shouldShortSnap() {
-        val testLayoutInfoProvider = TestLayoutInfoProvider()
-        rule.setContent {
-            val testFlingBehavior = rememberSnapFlingBehavior(testLayoutInfoProvider)
-            VelocityEffect(testFlingBehavior, calculateVelocityThreshold() - 1)
-        }
-
-        rule.runOnIdle {
-            assertEquals(0, testLayoutInfoProvider.calculateApproachOffsetCount)
-        }
-    }
-
-    @Test
-    fun performFling_whenVelocityIsAboveThreshold_shouldLongSnap() {
-        val testLayoutInfoProvider = TestLayoutInfoProvider()
-        rule.setContent {
-            val testFlingBehavior = rememberSnapFlingBehavior(testLayoutInfoProvider)
-            VelocityEffect(testFlingBehavior, calculateVelocityThreshold() + 1)
-        }
-
-        rule.runOnIdle {
-            assertEquals(1, testLayoutInfoProvider.calculateApproachOffsetCount)
-        }
-    }
-
-    @Test
-    fun remainingScrollOffset_whenVelocityIsBelowThreshold_shouldRepresentShortSnapOffsets() {
-        val testLayoutInfoProvider = TestLayoutInfoProvider()
+    fun remainingScrollOffset_cannotApproach_shouldRepresentJustSnappingOffsets() {
+        val approachOffset = 0.0f
+        val testLayoutInfoProvider = TestLayoutInfoProvider(approachOffset = approachOffset)
         lateinit var testFlingBehavior: SnapFlingBehavior
         val scrollOffset = mutableListOf<Float>()
         rule.setContent {
             testFlingBehavior = rememberSnapFlingBehavior(testLayoutInfoProvider)
             VelocityEffect(
                 testFlingBehavior,
-                calculateVelocityThreshold() - 1
+                0.0f,
             ) { remainingScrollOffset ->
                 scrollOffset.add(remainingScrollOffset)
             }
@@ -128,37 +102,42 @@
 
         // Will Snap Back
         rule.runOnIdle {
-            assertEquals(scrollOffset.first(), testLayoutInfoProvider.minOffset)
+            assertEquals(scrollOffset.first(), approachOffset)
+            assertEquals(scrollOffset[1], testLayoutInfoProvider.minOffset)
             assertEquals(scrollOffset.last(), 0f)
         }
     }
 
     @Test
-    fun remainingScrollOffset_whenVelocityIsAboveThreshold_shouldRepresentLongSnapOffsets() {
-        val testLayoutInfoProvider = TestLayoutInfoProvider()
+    fun remainingScrollOffset_canApproach_shouldRepresentApproachAndSnapOffsets() {
+        val approachOffset = 100f
+        val testLayoutInfoProvider =
+            TestLayoutInfoProvider(approachOffset = approachOffset)
         lateinit var testFlingBehavior: SnapFlingBehavior
         val scrollOffset = mutableListOf<Float>()
         rule.setContent {
             testFlingBehavior = rememberSnapFlingBehavior(testLayoutInfoProvider)
             VelocityEffect(
                 testFlingBehavior,
-                calculateVelocityThreshold() + 1
+                TestVelocity
             ) { remainingScrollOffset ->
                 scrollOffset.add(remainingScrollOffset)
             }
         }
 
         rule.runOnIdle {
-            assertEquals(scrollOffset.first { it != 0f }, testLayoutInfoProvider.maxOffset)
+            assertEquals(scrollOffset.first(), approachOffset)
+            assertTrue(scrollOffset.contains(testLayoutInfoProvider.maxOffset))
             assertEquals(scrollOffset.last(), 0f)
         }
     }
 
     @Test
-    fun remainingScrollOffset_longSnap_targetShouldChangeInAccordanceWithAnimation() {
+    fun remainingScrollOffset_targetShouldChangeInAccordanceWithAnimation() {
         // Arrange
         val initialOffset = 250f
-        val testLayoutInfoProvider = TestLayoutInfoProvider(approachOffset = initialOffset)
+        val testLayoutInfoProvider =
+            TestLayoutInfoProvider(approachOffset = initialOffset)
         lateinit var testFlingBehavior: SnapFlingBehavior
         val scrollOffset = mutableListOf<Float>()
         rule.mainClock.autoAdvance = false
@@ -166,7 +145,7 @@
             testFlingBehavior = rememberSnapFlingBehavior(testLayoutInfoProvider)
             VelocityEffect(
                 testFlingBehavior,
-                calculateVelocityThreshold() + 1
+                TestVelocity
             ) { remainingScrollOffset ->
                 scrollOffset.add(remainingScrollOffset)
             }
@@ -176,14 +155,11 @@
         // snap layout info provider
         assertEquals(scrollOffset.first(), initialOffset)
 
-        // Act: Advance until remainingScrollOffset grows again
+        // Act: Advance until we reach the maxOffset.
         rule.mainClock.advanceTimeUntil {
-            scrollOffset.size > 2 &&
-                scrollOffset.last() > scrollOffset[scrollOffset.lastIndex - 1]
+            scrollOffset.last() == testLayoutInfoProvider.maxOffset
         }
 
-        assertEquals(scrollOffset.last(), testLayoutInfoProvider.maxOffset)
-
         rule.mainClock.autoAdvance = true
         // Assert
         rule.runOnIdle {
@@ -246,55 +222,67 @@
     @Test
     fun findClosestOffset_flingDirection_shouldReturnCorrectBound() {
         val testLayoutInfoProvider = TestLayoutInfoProvider()
-        val forwardOffset = testLayoutInfoProvider.calculateSnappingOffset(1f)
-        val backwardOffset = testLayoutInfoProvider.calculateSnappingOffset(-1f)
+        val forwardOffset = testLayoutInfoProvider.calculateSnappingOffset(with(rule.density) {
+            MinFlingVelocityDp.toPx()
+        })
+        val backwardOffset = testLayoutInfoProvider.calculateSnappingOffset(-with(rule.density) {
+            MinFlingVelocityDp.toPx()
+        })
         assertEquals(forwardOffset, MaxOffset)
         assertEquals(backwardOffset, MinOffset)
     }
 
     @Test
     fun approach_cannotDecay_useLowVelocityApproachAndSnap() {
-        val testLayoutInfoProvider = TestLayoutInfoProvider(approachOffset = SnapStep * 5)
-        var inspectSplineAnimationSpec: InspectSplineAnimationSpec? = null
+        val splineAnimationSpec =
+            InspectSplineAnimationSpec(SplineBasedFloatDecayAnimationSpec(rule.density))
+        val decaySpec: DecayAnimationSpec<Float> = splineAnimationSpec.generateDecayAnimationSpec()
+        val canNotDecayApproach = decaySpec.calculateTargetValue(0.0f, TestVelocity) + 1
+        val testLayoutInfoProvider = TestLayoutInfoProvider(
+            maxOffset = 100f,
+            approachOffset = canNotDecayApproach
+        )
+
         rule.setContent {
-            val splineAnimationSpec = rememberInspectSplineAnimationSpec().also {
-                inspectSplineAnimationSpec = it
-            }
             val testFlingBehavior = rememberSnapFlingBehavior(
                 snapLayoutInfoProvider = testLayoutInfoProvider,
-                highVelocityApproachSpec = splineAnimationSpec.generateDecayAnimationSpec(),
+                highVelocityApproachSpec = decaySpec,
                 lowVelocityApproachSpec = inspectTweenAnimationSpec,
                 snapAnimationSpec = inspectSpringAnimationSpec
             )
-            VelocityEffect(testFlingBehavior, calculateVelocityThreshold() * 2)
+            VelocityEffect(testFlingBehavior, TestVelocity)
         }
 
         rule.runOnIdle {
-            assertEquals(0, inspectSplineAnimationSpec?.animationWasExecutions)
+            assertEquals(0, splineAnimationSpec.animationWasExecutions)
             assertEquals(1, inspectTweenAnimationSpec.animationWasExecutions)
             assertEquals(1, inspectSpringAnimationSpec.animationWasExecutions)
         }
     }
 
     @Test
-    fun approach_canDecay_decayAndSnap() {
-        val testLayoutInfoProvider = TestLayoutInfoProvider(maxOffset = 100f)
-        var inspectSplineAnimationSpec: InspectSplineAnimationSpec? = null
+    fun approach_canDecay_useHighVelocityApproachAndSnap() {
+        val splineAnimationSpec =
+            InspectSplineAnimationSpec(SplineBasedFloatDecayAnimationSpec(rule.density))
+        val decaySpec: DecayAnimationSpec<Float> = splineAnimationSpec.generateDecayAnimationSpec()
+        val canDecayApproach = decaySpec.calculateTargetValue(0.0f, TestVelocity) - 1
+        val testLayoutInfoProvider = TestLayoutInfoProvider(
+            maxOffset = 100f,
+            approachOffset = canDecayApproach
+        )
+
         rule.setContent {
-            val splineAnimationSpec = rememberInspectSplineAnimationSpec().also {
-                inspectSplineAnimationSpec = it
-            }
             val testFlingBehavior = rememberSnapFlingBehavior(
                 snapLayoutInfoProvider = testLayoutInfoProvider,
-                highVelocityApproachSpec = splineAnimationSpec.generateDecayAnimationSpec(),
+                highVelocityApproachSpec = decaySpec,
                 lowVelocityApproachSpec = inspectTweenAnimationSpec,
                 snapAnimationSpec = inspectSpringAnimationSpec
             )
-            VelocityEffect(testFlingBehavior, calculateVelocityThreshold() * 5)
+            VelocityEffect(testFlingBehavior, TestVelocity)
         }
 
         rule.runOnIdle {
-            assertEquals(1, inspectSplineAnimationSpec?.animationWasExecutions)
+            assertEquals(1, splineAnimationSpec.animationWasExecutions)
             assertEquals(1, inspectSpringAnimationSpec.animationWasExecutions)
             assertEquals(0, inspectTweenAnimationSpec.animationWasExecutions)
         }
@@ -438,6 +426,33 @@
             Truth.assertThat(state.firstVisibleItemIndex).isNotEqualTo(previousIndex)
         }
     }
+
+    inner class TestLayoutInfoProvider(
+        val minOffset: Float = MinOffset,
+        val maxOffset: Float = MaxOffset,
+        val approachOffset: Float = 0f
+    ) : SnapLayoutInfoProvider {
+
+        private fun calculateFinalSnappingItem(velocity: Float): FinalSnappingItem {
+            return if (velocity.absoluteValue == 0.0f) {
+                FinalSnappingItem.ClosestItem
+            } else {
+                if (velocity > 0) FinalSnappingItem.NextItem else FinalSnappingItem.PreviousItem
+            }
+        }
+
+        override fun calculateSnappingOffset(currentVelocity: Float): Float {
+            return calculateFinalOffset(
+                calculateFinalSnappingItem(currentVelocity),
+                minOffset,
+                maxOffset
+            )
+        }
+
+        override fun calculateApproachOffset(initialVelocity: Float): Float {
+            return approachOffset
+        }
+    }
 }
 
 @OptIn(ExperimentalFoundationApi::class)
@@ -497,47 +512,11 @@
     }
 }
 
-@Composable
-private fun rememberInspectSplineAnimationSpec(): InspectSplineAnimationSpec {
-    val density = LocalDensity.current
-    return remember {
-        InspectSplineAnimationSpec(
-            SplineBasedFloatDecayAnimationSpec(density)
-        )
-    }
-}
-
-@Composable
-private fun calculateVelocityThreshold(): Float {
-    val density = LocalDensity.current
-    return with(density) { MinFlingVelocityDp.toPx() }
-}
-
-private const val SnapStep = 250f
+private const val TestVelocity = 1000f
 private const val MinOffset = -200f
 private const val MaxOffset = 300f
 
 @OptIn(ExperimentalFoundationApi::class)
-
-private class TestLayoutInfoProvider(
-    val minOffset: Float = MinOffset,
-    val maxOffset: Float = MaxOffset,
-    val snapStep: Float = SnapStep,
-    val approachOffset: Float = 0f
-) : SnapLayoutInfoProvider {
-    var calculateApproachOffsetCount = 0
-
-    override fun calculateSnappingOffset(currentVelocity: Float): Float {
-        return calculateFinalOffset(currentVelocity, minOffset, maxOffset)
-    }
-
-    override fun calculateApproachOffset(initialVelocity: Float): Float {
-        calculateApproachOffsetCount++
-        return approachOffset
-    }
-}
-
-@OptIn(ExperimentalFoundationApi::class)
 @Composable
 private fun rememberSnapFlingBehavior(
     snapLayoutInfoProvider: SnapLayoutInfoProvider,
@@ -545,7 +524,7 @@
     lowVelocityApproachSpec: AnimationSpec<Float>,
     snapAnimationSpec: AnimationSpec<Float>
 ): FlingBehavior {
-    val density = LocalDensity.current
+
     return remember(
         snapLayoutInfoProvider,
         highVelocityApproachSpec
@@ -555,7 +534,6 @@
             lowVelocityAnimationSpec = lowVelocityApproachSpec,
             highVelocityAnimationSpec = highVelocityApproachSpec,
             snapAnimationSpec = snapAnimationSpec,
-            shortSnapVelocityThreshold = with(density) { MinFlingVelocityDp.toPx() }
         )
     }
 }
diff --git a/compose/foundation/foundation/src/androidInstrumentedTest/kotlin/androidx/compose/foundation/lazy/list/LazyListFocusMoveTest.kt b/compose/foundation/foundation/src/androidInstrumentedTest/kotlin/androidx/compose/foundation/lazy/list/LazyListFocusMoveTest.kt
index bd28466..98952e5 100644
--- a/compose/foundation/foundation/src/androidInstrumentedTest/kotlin/androidx/compose/foundation/lazy/list/LazyListFocusMoveTest.kt
+++ b/compose/foundation/foundation/src/androidInstrumentedTest/kotlin/androidx/compose/foundation/lazy/list/LazyListFocusMoveTest.kt
@@ -147,6 +147,48 @@
     }
 
     @Test
+    fun moveFocusAmongVisibleItems_userScrollIsOff() {
+        // Arrange.
+        rule.setTestContent {
+            lazyList(50.dp, lazyListState, userScrollEnabled = false) {
+                item { FocusableBox(0) }
+                item { FocusableBox(1, initiallyFocused) }
+                item { FocusableBox(2) }
+            }
+        }
+        rule.runOnIdle { initiallyFocused.requestFocus() }
+
+        // Act.
+        val success = rule.runOnIdle {
+            focusManager.moveFocus(focusDirection)
+        }
+
+        // Assert.
+        rule.runOnIdle {
+            assertThat(success).apply { if (focusDirection == Enter) isFalse() else isTrue() }
+            when (focusDirection) {
+                Left -> when (layoutDirection) {
+                    Ltr -> assertThat(isFocused[if (reverseLayout) 2 else 0]).isTrue()
+                    Rtl -> assertThat(isFocused[if (reverseLayout) 0 else 2]).isTrue()
+                }
+
+                Right -> when (layoutDirection) {
+                    Ltr -> assertThat(isFocused[if (reverseLayout) 0 else 2]).isTrue()
+                    Rtl -> assertThat(isFocused[if (reverseLayout) 2 else 0]).isTrue()
+                }
+
+                Up -> assertThat(isFocused[if (reverseLayout) 2 else 0]).isTrue()
+                Down -> assertThat(isFocused[if (reverseLayout) 0 else 2]).isTrue()
+                Previous -> assertThat(isFocused[0]).isTrue()
+                Next -> assertThat(isFocused[2]).isTrue()
+                Enter -> assertThat(isFocused[1]).isTrue()
+                Exit -> assertThat(isLazyListFocused).isTrue()
+                else -> unsupportedDirection()
+            }
+        }
+    }
+
+    @Test
     fun moveFocusToItemThatIsJustBeyondBounds() {
         // Arrange.
         rule.setTestContent {
@@ -203,6 +245,43 @@
     }
 
     @Test
+    fun moveFocusToItemThatIsJustBeyondBounds_userScrollIsOff() {
+        // Arrange.
+        rule.setTestContent {
+            lazyList(30.dp, lazyListState, userScrollEnabled = false) {
+                items(5) { FocusableBox(it) }
+                item { FocusableBox(5, initiallyFocused) }
+                items(5) { FocusableBox(it + 6) }
+            }
+        }
+        rule.runOnIdle {
+            // Scroll so that the focused item is in the middle.
+            runBlocking { lazyListState.scrollToItem(4) }
+
+            // Move focus to the last visible item.
+            initiallyFocused.requestFocus()
+            when (focusDirection) {
+                Left, Right, Up, Down, Previous, Next -> focusManager.moveFocus(focusDirection)
+                Enter, Exit -> {
+                    // Do nothing
+                }
+
+                else -> unsupportedDirection()
+            }
+        }
+        val firstVisibleItemIndex = lazyListState.firstVisibleItemIndex
+        // Act.
+        rule.runOnIdle {
+            focusManager.moveFocus(focusDirection)
+        }
+
+        // Assert We Did Not Move
+        rule.runOnIdle {
+            assertThat(lazyListState.firstVisibleItemIndex).isEqualTo(firstVisibleItemIndex)
+        }
+    }
+
+    @Test
     fun moveFocusToItemThatIsFarBeyondBounds() {
         // Arrange.
         rule.setTestContent {
@@ -471,6 +550,7 @@
     private fun lazyList(
         size: Dp,
         state: LazyListState = rememberLazyListState(),
+        userScrollEnabled: Boolean = true,
         content: LazyListScope.() -> Unit
     ) {
         when (focusDirection) {
@@ -481,7 +561,8 @@
                     .focusable(),
                 state = state,
                 reverseLayout = reverseLayout,
-                content = content
+                content = content,
+                userScrollEnabled = userScrollEnabled
             )
 
             Up, Down -> LazyColumn(
@@ -491,7 +572,8 @@
                     .focusable(),
                 state = state,
                 reverseLayout = reverseLayout,
-                content = content
+                content = content,
+                userScrollEnabled = userScrollEnabled
             )
 
             else -> unsupportedDirection()
diff --git a/compose/foundation/foundation/src/androidInstrumentedTest/kotlin/androidx/compose/foundation/pager/BasePagerTest.kt b/compose/foundation/foundation/src/androidInstrumentedTest/kotlin/androidx/compose/foundation/pager/BasePagerTest.kt
index b1ff435..bce771a 100644
--- a/compose/foundation/foundation/src/androidInstrumentedTest/kotlin/androidx/compose/foundation/pager/BasePagerTest.kt
+++ b/compose/foundation/foundation/src/androidInstrumentedTest/kotlin/androidx/compose/foundation/pager/BasePagerTest.kt
@@ -23,7 +23,6 @@
 import androidx.compose.foundation.background
 import androidx.compose.foundation.focusable
 import androidx.compose.foundation.gestures.Orientation
-import androidx.compose.foundation.gestures.snapping.MinFlingVelocityDp
 import androidx.compose.foundation.gestures.snapping.SnapFlingBehavior
 import androidx.compose.foundation.layout.Box
 import androidx.compose.foundation.layout.PaddingValues
@@ -39,6 +38,7 @@
 import androidx.compose.ui.focus.FocusManager
 import androidx.compose.ui.focus.FocusRequester
 import androidx.compose.ui.focus.focusRequester
+import androidx.compose.ui.focus.onFocusChanged
 import androidx.compose.ui.geometry.Offset
 import androidx.compose.ui.graphics.Color
 import androidx.compose.ui.input.nestedscroll.NestedScrollConnection
@@ -67,9 +67,10 @@
     lateinit var scope: CoroutineScope
     var pagerSize: Int = 0
     var placed = mutableSetOf<Int>()
+    var focused = mutableSetOf<Int>()
     var pageSize: Int = 0
     lateinit var focusManager: FocusManager
-    lateinit var firstItemFocusRequester: FocusRequester
+    lateinit var initialFocusedItem: FocusRequester
     var composeView: View? = null
     lateinit var pagerState: PagerState
 
@@ -123,7 +124,6 @@
         contentPadding: PaddingValues = config.mainAxisContentPadding,
         pageSpacing: Dp = config.pageSpacing,
         reverseLayout: Boolean = config.reverseLayout,
-        snapVelocityThreshold: Dp = MinFlingVelocityDp,
         snapPositionalThreshold: Float = 0.5f,
         key: ((index: Int) -> Any)? = null,
         pageContent: @Composable PagerScope.(page: Int) -> Unit = { Page(index = it) }
@@ -139,7 +139,6 @@
                 PagerDefaults.flingBehavior(
                     state = state,
                     pagerSnapDistance = snappingPage,
-                    snapVelocityThreshold = snapVelocityThreshold,
                     snapPositionalThreshold = snapPositionalThreshold
                 )
             CompositionLocalProvider(
@@ -174,9 +173,9 @@
     }
 
     @Composable
-    internal fun Page(index: Int) {
+    internal fun Page(index: Int, initialFocusedItemIndex: Int = 0) {
         val focusRequester = FocusRequester().also {
-            if (index == 0) firstItemFocusRequester = it
+            if (index == initialFocusedItemIndex) initialFocusedItem = it
         }
         Box(modifier = Modifier
             .focusRequester(focusRequester)
@@ -187,8 +186,16 @@
             .fillMaxSize()
             .background(Color.Blue)
             .testTag("$index")
+            .onFocusChanged {
+                if (it.isFocused) {
+                    focused.add(index)
+                } else {
+                    focused.remove(index)
+                }
+            }
             .focusable(),
-            contentAlignment = Alignment.Center) {
+            contentAlignment = Alignment.Center
+        ) {
             BasicText(text = index.toString())
         }
     }
diff --git a/compose/foundation/foundation/src/androidInstrumentedTest/kotlin/androidx/compose/foundation/pager/PagerAccessibilityTest.kt b/compose/foundation/foundation/src/androidInstrumentedTest/kotlin/androidx/compose/foundation/pager/PagerAccessibilityTest.kt
index 696c7c2..e66c0b8 100644
--- a/compose/foundation/foundation/src/androidInstrumentedTest/kotlin/androidx/compose/foundation/pager/PagerAccessibilityTest.kt
+++ b/compose/foundation/foundation/src/androidInstrumentedTest/kotlin/androidx/compose/foundation/pager/PagerAccessibilityTest.kt
@@ -19,6 +19,7 @@
 import android.view.accessibility.AccessibilityNodeProvider
 import androidx.compose.foundation.ExperimentalFoundationApi
 import androidx.compose.foundation.layout.fillMaxSize
+import androidx.compose.foundation.layout.size
 import androidx.compose.ui.Modifier
 import androidx.compose.ui.focus.FocusDirection
 import androidx.compose.ui.semantics.SemanticsActions
@@ -28,8 +29,8 @@
 import androidx.compose.ui.test.assert
 import androidx.compose.ui.test.onNodeWithTag
 import androidx.compose.ui.test.performScrollTo
+import androidx.compose.ui.unit.dp
 import androidx.core.view.ViewCompat
-import androidx.test.filters.LargeTest
 import com.google.common.truth.Truth.assertThat
 import org.junit.Ignore
 import org.junit.Test
@@ -37,7 +38,6 @@
 import org.junit.runners.Parameterized
 
 @OptIn(ExperimentalFoundationApi::class)
-@LargeTest
 @RunWith(Parameterized::class)
 class PagerAccessibilityTest(config: ParamConfig) : BasePagerTest(config = config) {
 
@@ -55,13 +55,15 @@
     fun accessibilityScroll_scrollToPage() {
         createPager(beyondBoundsPageCount = 1)
 
-        rule.runOnIdle { assertThat(pagerState.currentPage).isEqualTo(0) }
+        assertThat(pagerState.currentPage).isEqualTo(0)
 
         rule.onNodeWithTag("1").assertExists()
         rule.onNodeWithTag("1").performScrollTo()
 
-        rule.runOnIdle { assertThat(pagerState.currentPage).isEqualTo(1) }
-        rule.runOnIdle { assertThat(pagerState.currentPageOffsetFraction).isEqualTo(0.0f) }
+        rule.runOnIdle {
+            assertThat(pagerState.currentPage).isEqualTo(1)
+            assertThat(pagerState.currentPageOffsetFraction).isEqualTo(0.0f)
+        }
     }
 
     @Ignore
@@ -69,7 +71,7 @@
     fun accessibilityPaging_animateScrollToPage() {
         createPager(initialPage = 5, pageCount = { DefaultPageCount })
 
-        rule.runOnIdle { assertThat(pagerState.currentPage).isEqualTo(5) }
+        assertThat(pagerState.currentPage).isEqualTo(5)
 
         val actionBackward = if (vertical) {
             android.R.id.accessibilityActionPageUp
@@ -86,8 +88,10 @@
         }
 
         // Go to the previous page
-        rule.runOnIdle { assertThat(pagerState.currentPage).isEqualTo(4) }
-        rule.runOnIdle { assertThat(pagerState.currentPageOffsetFraction).isEqualTo(0.0f) }
+        rule.runOnIdle {
+            assertThat(pagerState.currentPage).isEqualTo(4)
+            assertThat(pagerState.currentPageOffsetFraction).isEqualTo(0.0f)
+        }
 
         val actionForward = if (vertical) {
             android.R.id.accessibilityActionPageDown
@@ -104,8 +108,10 @@
         }
 
         // Go to the next page
-        rule.runOnIdle { assertThat(pagerState.currentPage).isEqualTo(5) }
-        rule.runOnIdle { assertThat(pagerState.currentPageOffsetFraction).isEqualTo(0.0f) }
+        rule.runOnIdle {
+            assertThat(pagerState.currentPage).isEqualTo(5)
+            assertThat(pagerState.currentPageOffsetFraction).isEqualTo(0.0f)
+        }
     }
 
     @Ignore
@@ -130,21 +136,96 @@
     fun focusScroll_forwardAndBackward_shouldGoToPage_pageShouldBeCorrectlyPlaced() {
         // Arrange
         createPager(pageCount = { DefaultPageCount })
-        rule.runOnIdle { firstItemFocusRequester.requestFocus() }
+        rule.runOnUiThread { initialFocusedItem.requestFocus() }
+        rule.waitForIdle()
 
         // Act: move forward
-        rule.runOnIdle { focusManager.moveFocus(FocusDirection.Next) }
+        rule.runOnUiThread { focusManager.moveFocus(FocusDirection.Next) }
 
         // Assert
-        rule.runOnIdle { assertThat(pagerState.currentPage).isEqualTo(1) }
-        rule.runOnIdle { assertThat(pagerState.currentPageOffsetFraction).isEqualTo(0.0f) }
+        rule.runOnIdle {
+            assertThat(pagerState.currentPage).isEqualTo(1)
+            assertThat(pagerState.currentPageOffsetFraction).isEqualTo(0.0f)
+        }
 
         // Act: move backward
-        rule.runOnIdle { focusManager.moveFocus(FocusDirection.Previous) }
+        rule.runOnUiThread { focusManager.moveFocus(FocusDirection.Previous) }
 
         // Assert
-        rule.runOnIdle { assertThat(pagerState.currentPage).isEqualTo(0) }
-        rule.runOnIdle { assertThat(pagerState.currentPageOffsetFraction).isEqualTo(0.0f) }
+        rule.runOnIdle {
+            assertThat(pagerState.currentPage).isEqualTo(0)
+            assertThat(pagerState.currentPageOffsetFraction).isEqualTo(0.0f)
+        }
+    }
+
+    @Test
+    fun userScrollEnabledIsOff_fillPages_focusScroll_shouldNotMovePages() {
+        // Arrange
+        val initialPage = 5
+        createPager(
+            initialPage = initialPage,
+            pageCount = { DefaultPageCount },
+            userScrollEnabled = false
+        ) {
+            Page(index = it, initialFocusedItemIndex = initialPage)
+        }
+        rule.runOnUiThread { initialFocusedItem.requestFocus() }
+        rule.runOnIdle { assertThat(pagerState.currentPage).isEqualTo(initialPage) }
+
+        // Act: move forward
+        rule.runOnUiThread { focusManager.moveFocus(FocusDirection.Next) }
+
+        // Assert
+        rule.runOnIdle {
+            assertThat(pagerState.currentPage).isEqualTo(5)
+            assertThat(pagerState.currentPageOffsetFraction).isEqualTo(0.0f)
+        }
+
+        // Act: move backward
+        rule.runOnUiThread { focusManager.moveFocus(FocusDirection.Previous) }
+
+        // Assert
+        rule.runOnIdle {
+            assertThat(pagerState.currentPage).isEqualTo(5)
+            assertThat(pagerState.currentPageOffsetFraction).isEqualTo(0.0f)
+        }
+    }
+
+    @Test
+    fun userScrollEnabledIsOff_fixedPages_focusScroll_shouldNotMovePages() {
+        // Arrange
+        val initialPage = 5
+        createPager(
+            modifier = Modifier.size(100.dp),
+            initialPage = initialPage,
+            pageCount = { DefaultPageCount },
+            userScrollEnabled = false,
+            pageSize = { PageSize.Fixed(10.dp) }
+        ) {
+            Page(index = it, initialFocusedItemIndex = initialPage)
+        }
+        rule.runOnUiThread { initialFocusedItem.requestFocus() }
+        rule.runOnIdle { assertThat(pagerState.currentPage).isEqualTo(initialPage) }
+
+        // Act: move forward
+        rule.runOnUiThread { focusManager.moveFocus(FocusDirection.Next) }
+
+        // Assert
+        rule.runOnIdle {
+            assertThat(pagerState.currentPage).isEqualTo(5)
+            assertThat(pagerState.currentPageOffsetFraction).isEqualTo(0.0f)
+            assertThat(focused).containsExactly(6)
+        }
+
+        // Act: move backward
+        rule.runOnUiThread { focusManager.moveFocus(FocusDirection.Previous) }
+
+        // Assert
+        rule.runOnIdle {
+            assertThat(pagerState.currentPage).isEqualTo(5)
+            assertThat(pagerState.currentPageOffsetFraction).isEqualTo(0.0f)
+            assertThat(focused).containsExactly(5)
+        }
     }
 
     private fun <T> SemanticsNodeInteraction.withSemanticsNode(block: SemanticsNode.() -> T): T {
diff --git a/compose/foundation/foundation/src/androidInstrumentedTest/kotlin/androidx/compose/foundation/pager/PagerScrollingTest.kt b/compose/foundation/foundation/src/androidInstrumentedTest/kotlin/androidx/compose/foundation/pager/PagerScrollingTest.kt
index e6321c8..61dae64 100644
--- a/compose/foundation/foundation/src/androidInstrumentedTest/kotlin/androidx/compose/foundation/pager/PagerScrollingTest.kt
+++ b/compose/foundation/foundation/src/androidInstrumentedTest/kotlin/androidx/compose/foundation/pager/PagerScrollingTest.kt
@@ -416,46 +416,6 @@
     }
 
     @Test
-    fun swipeWithLowVelocity_customVelocityThreshold_shouldBounceBack() {
-        // Arrange
-        val snapVelocityThreshold = 200.dp
-        createPager(
-            initialPage = 5,
-            modifier = Modifier.fillMaxSize(),
-            snapVelocityThreshold = snapVelocityThreshold
-        )
-        val delta = pagerSize * 0.4f * scrollForwardSign
-
-        // Act - forward
-        runAndWaitForPageSettling {
-            onPager().performTouchInput {
-                swipeWithVelocityAcrossMainAxis(
-                    with(rule.density) { 0.5f * snapVelocityThreshold.toPx() },
-                    delta
-                )
-            }
-        }
-
-        // Assert
-        rule.onNodeWithTag("5").assertIsDisplayed()
-        confirmPageIsInCorrectPosition(5)
-
-        // Act - backward
-        runAndWaitForPageSettling {
-            onPager().performTouchInput {
-                swipeWithVelocityAcrossMainAxis(
-                    with(rule.density) { 0.5f * snapVelocityThreshold.toPx() },
-                    delta * -1
-                )
-            }
-        }
-
-        // Assert
-        rule.onNodeWithTag("5").assertIsDisplayed()
-        confirmPageIsInCorrectPosition(5)
-    }
-
-    @Test
     fun swipeWithHighVelocity_defaultVelocityThreshold_shouldGoToNextPage() {
         // Arrange
         createPager(initialPage = 5, modifier = Modifier.fillMaxSize())
@@ -492,47 +452,6 @@
     }
 
     @Test
-    fun swipeWithHighVelocity_customVelocityThreshold_shouldGoToNextPage() {
-        // Arrange
-        val snapVelocityThreshold = 200.dp
-        createPager(
-            initialPage = 5,
-            modifier = Modifier.fillMaxSize(),
-            snapVelocityThreshold = snapVelocityThreshold
-        )
-        // make sure the scroll distance is not enough to go to next page
-        val delta = pagerSize * 0.4f * scrollForwardSign
-
-        // Act - forward
-        runAndWaitForPageSettling {
-            onPager().performTouchInput {
-                swipeWithVelocityAcrossMainAxis(
-                    with(rule.density) { 1.1f * snapVelocityThreshold.toPx() },
-                    delta
-                )
-            }
-        }
-
-        // Assert
-        rule.onNodeWithTag("6").assertIsDisplayed()
-        confirmPageIsInCorrectPosition(6)
-
-        // Act - backward
-        runAndWaitForPageSettling {
-            onPager().performTouchInput {
-                swipeWithVelocityAcrossMainAxis(
-                    with(rule.density) { 1.1f * snapVelocityThreshold.toPx() },
-                    delta * -1
-                )
-            }
-        }
-
-        // Assert
-        rule.onNodeWithTag("5").assertIsDisplayed()
-        confirmPageIsInCorrectPosition(5)
-    }
-
-    @Test
     fun swipeWithHighVelocity_overHalfPage_shouldGoToNextPage() {
         // Arrange
         createPager(initialPage = 5, modifier = Modifier.fillMaxSize())
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/androidMain/kotlin/androidx/compose/foundation/GraphicsSurface.kt b/compose/foundation/foundation/src/androidMain/kotlin/androidx/compose/foundation/AndroidExternalSurface.kt
similarity index 72%
rename from compose/foundation/foundation/src/androidMain/kotlin/androidx/compose/foundation/GraphicsSurface.kt
rename to compose/foundation/foundation/src/androidMain/kotlin/androidx/compose/foundation/AndroidExternalSurface.kt
index 17a6823..5d51fef 100644
--- a/compose/foundation/foundation/src/androidMain/kotlin/androidx/compose/foundation/GraphicsSurface.kt
+++ b/compose/foundation/foundation/src/androidMain/kotlin/androidx/compose/foundation/AndroidExternalSurface.kt
@@ -35,10 +35,10 @@
 import kotlinx.coroutines.launch
 
 /**
- * [SurfaceScope] is a scoped environment provided by [GraphicsSurface] and
- * [EmbeddedGraphicsSurface] to handle [Surface] lifecycle events.
+ * [SurfaceScope] is a scoped environment provided by [AndroidExternalSurface] and
+ * [AndroidEmbeddedExternalSurface] to handle [Surface] lifecycle events.
  *
- * @sample androidx.compose.foundation.samples.GraphicsSurfaceColors
+ * @sample androidx.compose.foundation.samples.AndroidExternalSurfaceColors
  */
 interface SurfaceScope {
     /**
@@ -58,29 +58,30 @@
 
 /**
  * [SurfaceCoroutineScope] is a scoped environment provided by
- * [GraphicsSurface] and [EmbeddedGraphicsSurface] when a new [Surface] is
+ * [AndroidExternalSurface] and [AndroidEmbeddedExternalSurface] when a new [Surface] is
  * created. This environment is a coroutine scope that also provides access to
  * a [SurfaceScope] environment which can itself be used to handle other [Surface]
  * lifecycle events.
  *
  * @see SurfaceScope
- * @see GraphicsSurfaceScope
+ * @see AndroidExternalSurfaceScope
  *
- * @sample androidx.compose.foundation.samples.GraphicsSurfaceColors
+ * @sample androidx.compose.foundation.samples.AndroidExternalSurfaceColors
  */
 interface SurfaceCoroutineScope : SurfaceScope, CoroutineScope
 
 /**
- * [GraphicsSurfaceScope] is a scoped environment provided when a [GraphicsSurface]
- * or [EmbeddedGraphicsSurface] is first initialized. This environment can be
- * used to register a lambda to invoke when a new [Surface] associated with the
- * [GraphicsSurface]/[EmbeddedGraphicsSurface] is created.
+ * [AndroidExternalSurfaceScope] is a scoped environment provided when an
+ * [AndroidExternalSurface] or [AndroidEmbeddedExternalSurface] is first initialized.
+ * This environment can be used to register a lambda to invoke when a new [Surface]
+ * associated with the [AndroidExternalSurface]/[AndroidEmbeddedExternalSurface]
+ * is created.
  */
-interface GraphicsSurfaceScope {
+interface AndroidExternalSurfaceScope {
     /**
      * Invokes [onSurface] when a new [Surface] is created. The [onSurface] lambda
      * is invoked on the main thread as part of a [SurfaceCoroutineScope] to provide
-     * a coroutine context.
+     * a coroutine context. Always invoked on the main thread.
      *
      * @param onSurface Callback invoked when a new [Surface] is created. The initial
      *                  dimensions of the surface are provided.
@@ -92,13 +93,13 @@
 }
 
 /**
- * Base class for [GraphicsSurface] and [EmbeddedGraphicsSurface] state. This class
+ * Base class for [AndroidExternalSurface] and [AndroidEmbeddedExternalSurface] state. This class
  * provides methods to properly dispatch lifecycle events on [Surface] creation,
  * change, and destruction. Surface creation is treated as a coroutine launch,
  * using the specified [scope] as the parent. This scope must be the main thread scope.
  */
-private abstract class BaseGraphicsSurfaceState(val scope: CoroutineScope) :
-    GraphicsSurfaceScope, SurfaceScope {
+private abstract class BaseAndroidExternalSurfaceState(val scope: CoroutineScope) :
+    AndroidExternalSurfaceScope, SurfaceScope {
 
     private var onSurface:
         (suspend SurfaceCoroutineScope.(surface: Surface, width: Int, height: Int) -> Unit)? = null
@@ -130,7 +131,8 @@
             job = scope.launch(start = CoroutineStart.UNDISPATCHED) {
                 job?.cancelAndJoin()
                 val receiver =
-                    object : SurfaceCoroutineScope, SurfaceScope by this@BaseGraphicsSurfaceState,
+                    object : SurfaceCoroutineScope,
+                        SurfaceScope by this@BaseAndroidExternalSurfaceState,
                         CoroutineScope by this {}
                 onSurface?.invoke(receiver, surface, width, height)
             }
@@ -156,8 +158,8 @@
     }
 }
 
-private class GraphicsSurfaceState(scope: CoroutineScope) : BaseGraphicsSurfaceState(scope),
-    SurfaceHolder.Callback {
+private class AndroidExternalSurfaceState(scope: CoroutineScope) :
+    BaseAndroidExternalSurfaceState(scope), SurfaceHolder.Callback {
 
     var lastWidth = -1
     var lastHeight = -1
@@ -185,34 +187,39 @@
 }
 
 @Composable
-private fun rememberGraphicsSurfaceState(): GraphicsSurfaceState {
+private fun rememberAndroidExternalSurfaceState(): AndroidExternalSurfaceState {
     val scope = rememberCoroutineScope()
-    return remember { GraphicsSurfaceState(scope) }
+    return remember { AndroidExternalSurfaceState(scope) }
 }
 
 @JvmInline
-value class GraphicsSurfaceZOrder private constructor(val zOrder: Int) {
+value class AndroidExternalSurfaceZOrder private constructor(val zOrder: Int) {
     companion object {
-        val Behind = GraphicsSurfaceZOrder(0)
-        val MediaOverlay = GraphicsSurfaceZOrder(1)
-        val OnTop = GraphicsSurfaceZOrder(2)
+        val Behind = AndroidExternalSurfaceZOrder(0)
+        val MediaOverlay = AndroidExternalSurfaceZOrder(1)
+        val OnTop = AndroidExternalSurfaceZOrder(2)
     }
 }
 
 /**
- * Provides a dedicated drawing [Surface] as a separate layer positioned by default behind
- * the window holding the [GraphicsSurface] composable. Because [GraphicsSurface] uses
- * a separate window layer, graphics composition is handled by the system compositor which
- * can bypass the GPU and provide better performance and power usage characteristics compared
- * to [EmbeddedGraphicsSurface]. It is therefore recommended to use [GraphicsSurface]
- * whenever possible.
+ * Provides a dedicated drawing [Surface] as a separate layer positioned by default
+ * behind the window holding the [AndroidExternalSurface] composable. Because
+ * [AndroidExternalSurface] uses a separate window layer, graphics composition is handled
+ * by the system compositor which can bypass the GPU and provide better performance and
+ * power usage characteristics compared to [AndroidEmbeddedExternalSurface]. It is therefore
+ * recommended to use [AndroidExternalSurface] over [AndroidEmbeddedExternalSurface] whenever
+ * possible.
+ *
+ * The [Surface] provided can be used to present content that's external to Compose, such as
+ * a video stream (from a camera or a media player), OpenGL, Vulkan...The provided [Surface]
+ * can be rendered into using a thread different from the main thread.
  *
  * The z-ordering of the surface can be controlled using the [zOrder] parameter:
  *
- * - [GraphicsSurfaceZOrder.Behind]: positions the surface behind the window
- * - [GraphicsSurfaceZOrder.MediaOverlay]: positions the surface behind the window but
- *   above other [GraphicsSurfaceZOrder.Behind] surfaces
- * - [GraphicsSurfaceZOrder.OnTop]: positions the surface above the window
+ * - [AndroidExternalSurfaceZOrder.Behind]: positions the surface behind the window
+ * - [AndroidExternalSurfaceZOrder.MediaOverlay]: positions the surface behind the window but
+ *   above other [AndroidExternalSurfaceZOrder.Behind] surfaces
+ * - [AndroidExternalSurfaceZOrder.OnTop]: positions the surface above the window
  *
  * The drawing surface is opaque by default, which can be controlled with the [isOpaque]
  * parameter. When the surface is transparent, you may need to change the z-order to
@@ -220,7 +227,7 @@
  *
  * To start rendering, the caller must first acquire the [Surface] when it's created.
  * This is achieved by providing the [onInit] lambda, which allows the caller to
- * register an appropriate [GraphicsSurfaceScope.onSurface] callback. The [onInit]
+ * register an appropriate [AndroidExternalSurfaceScope.onSurface] callback. The [onInit]
  * lambda can also be used to initialize/cache resources needed once a surface is
  * available.
  *
@@ -237,7 +244,7 @@
  * be stretched at render time to fit the layout size. This can be used for instance to
  * render at a lower resolution for performance reasons.
  *
- * @param modifier Modifier to be applied to the [GraphicsSurface]
+ * @param modifier Modifier to be applied to the [AndroidExternalSurface]
  * @param isOpaque Whether the managed surface should be opaque or transparent.
  * @param zOrder Sets the z-order of the surface relative to its parent window.
  * @param surfaceSize Sets the surface size independently of the layout size of
@@ -250,18 +257,18 @@
  *               declare a [GraphicsSurfaceScope.onSurface] callback that will be
  *               invoked when a surface is available.
  *
- * @sample androidx.compose.foundation.samples.GraphicsSurfaceColors
+ * @sample androidx.compose.foundation.samples.AndroidExternalSurfaceColors
  */
 @Composable
-fun GraphicsSurface(
+fun AndroidExternalSurface(
     modifier: Modifier = Modifier,
     isOpaque: Boolean = true,
-    zOrder: GraphicsSurfaceZOrder = GraphicsSurfaceZOrder.Behind,
+    zOrder: AndroidExternalSurfaceZOrder = AndroidExternalSurfaceZOrder.Behind,
     surfaceSize: IntSize = IntSize.Zero,
     isSecure: Boolean = false,
-    onInit: GraphicsSurfaceScope.() -> Unit
+    onInit: AndroidExternalSurfaceScope.() -> Unit
 ) {
-    val state = rememberGraphicsSurfaceState()
+    val state = rememberAndroidExternalSurfaceState()
 
     AndroidView(
         factory = { context ->
@@ -288,9 +295,9 @@
             )
 
             when (zOrder) {
-                GraphicsSurfaceZOrder.Behind -> view.setZOrderOnTop(false)
-                GraphicsSurfaceZOrder.MediaOverlay -> view.setZOrderMediaOverlay(true)
-                GraphicsSurfaceZOrder.OnTop -> view.setZOrderOnTop(true)
+                AndroidExternalSurfaceZOrder.Behind -> view.setZOrderOnTop(false)
+                AndroidExternalSurfaceZOrder.MediaOverlay -> view.setZOrderMediaOverlay(true)
+                AndroidExternalSurfaceZOrder.OnTop -> view.setZOrderOnTop(true)
             }
 
             view.setSecure(isSecure)
@@ -298,8 +305,8 @@
     )
 }
 
-private class EmbeddedGraphicsSurfaceState(scope: CoroutineScope) : BaseGraphicsSurfaceState(scope),
-    TextureView.SurfaceTextureListener {
+private class AndroidEmbeddedExternalSurfaceState(scope: CoroutineScope) :
+    BaseAndroidExternalSurfaceState(scope), TextureView.SurfaceTextureListener {
 
     var surfaceSize = IntSize.Zero
 
@@ -355,30 +362,36 @@
 }
 
 @Composable
-private fun rememberEmbeddedGraphicsSurfaceState(): EmbeddedGraphicsSurfaceState {
+private fun rememberAndroidEmbeddedExternalSurfaceState(): AndroidEmbeddedExternalSurfaceState {
     val scope = rememberCoroutineScope()
-    return remember { EmbeddedGraphicsSurfaceState(scope) }
+    return remember { AndroidEmbeddedExternalSurfaceState(scope) }
 }
 
 /**
  * Provides a dedicated drawing [Surface] embedded directly in the UI hierarchy.
- * Unlike [GraphicsSurface], [EmbeddedGraphicsSurface] positions its surface as a
- * regular element inside the composable hierarchy. This means that graphics
+ * Unlike [AndroidExternalSurface], [AndroidEmbeddedExternalSurface] positions its
+ * surface as a regular element inside the composable hierarchy. This means that graphics
  * composition is handled like any other UI widget, using the GPU. This can lead
- * to increased power and memory bandwidth usage compared to [GraphicsSurface]. It
- * is therefore recommended to use [GraphicsSurface] when possible.
+ * to increased power and memory bandwidth usage compared to [AndroidExternalSurface].
+ * It is therefore recommended to use [AndroidExternalSurface] over
+ * [AndroidEmbeddedExternalSurface] whenever possible.
  *
- * [EmbeddedGraphicsSurface] can however be useful when interactions with other widgets
+ * [AndroidEmbeddedExternalSurface] can however be useful when interactions with other widgets
  * is necessary, for instance if the surface needs to be "sandwiched" between two
  * other widgets, or if it must participate in visual effects driven by
  * a `Modifier.graphicsLayer{}`.
  *
+ * The [Surface] provided can be used to present content that's external to Compose,
+ * such as a video stream (from a camera or a media player), OpenGL, Vulkan...
+ * The provided [Surface] can be rendered into using a thread different from the main
+ * thread.
+ *
  * The drawing surface is opaque by default, which can be controlled with the [isOpaque]
  * parameter.
  *
  * To start rendering, the caller must first acquire the [Surface] when it's created.
  * This is achieved by providing the [onInit] lambda, which allows the caller to
- * register an appropriate [GraphicsSurfaceScope.onSurface] callback. The [onInit]
+ * register an appropriate [AndroidExternalSurfaceScope.onSurface] callback. The [onInit]
  * lambda can also be used to initialize/cache resources needed once a surface is
  * available.
  *
@@ -395,7 +408,7 @@
  * be stretched at render time to fit the layout size. This can be used for instance to
  * render at a lower resolution for performance reasons.
  *
- * @param modifier Modifier to be applied to the [GraphicsSurface]
+ * @param modifier Modifier to be applied to the [AndroidExternalSurface]
  * @param isOpaque Whether the managed surface should be opaque or transparent. If
  *                 transparent and [isMediaOverlay] is `false`, the surface will
  *                 be positioned above the parent window.
@@ -406,16 +419,16 @@
  *               declare a [GraphicsSurfaceScope.onSurface] callback that will be
  *               invoked when a surface is available.
  *
- * @sample androidx.compose.foundation.samples.EmbeddedGraphicsSurfaceColors
+ * @sample androidx.compose.foundation.samples.AndroidEmbeddedExternalSurfaceColors
  */
 @Composable
-fun EmbeddedGraphicsSurface(
+fun AndroidEmbeddedExternalSurface(
     modifier: Modifier = Modifier,
     isOpaque: Boolean = true,
     surfaceSize: IntSize = IntSize.Zero,
-    onInit: GraphicsSurfaceScope.() -> Unit
+    onInit: AndroidExternalSurfaceScope.() -> Unit
 ) {
-    val state = rememberEmbeddedGraphicsSurfaceState()
+    val state = rememberAndroidEmbeddedExternalSurfaceState()
 
     AndroidView(
         factory = { context ->
diff --git a/compose/foundation/foundation/src/androidMain/kotlin/androidx/compose/foundation/draganddrop/AndroidDragAndDropSource.android.kt b/compose/foundation/foundation/src/androidMain/kotlin/androidx/compose/foundation/draganddrop/AndroidDragAndDropSource.android.kt
new file mode 100644
index 0000000..a531236
--- /dev/null
+++ b/compose/foundation/foundation/src/androidMain/kotlin/androidx/compose/foundation/draganddrop/AndroidDragAndDropSource.android.kt
@@ -0,0 +1,145 @@
+/*
+ * 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.draganddrop
+
+import android.graphics.Picture
+import androidx.compose.foundation.ExperimentalFoundationApi
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.draw.CacheDrawModifierNode
+import androidx.compose.ui.draw.CacheDrawScope
+import androidx.compose.ui.draw.DrawResult
+import androidx.compose.ui.graphics.drawscope.DrawScope
+import androidx.compose.ui.graphics.drawscope.draw
+import androidx.compose.ui.graphics.drawscope.drawIntoCanvas
+import androidx.compose.ui.graphics.nativeCanvas
+import androidx.compose.ui.input.pointer.PointerInputScope
+import androidx.compose.ui.node.DelegatingNode
+import androidx.compose.ui.node.ModifierNodeElement
+import androidx.compose.ui.platform.InspectorInfo
+
+/**
+ * A Modifier that allows an element it is applied to to be treated like a source for
+ * drag and drop operations. It displays the element dragged as a drag shadow.
+ *
+ * Learn how to use [Modifier.dragAndDropSource]:
+ * @sample androidx.compose.foundation.samples.TextDragAndDropSourceSample
+ *
+ * @param block A lambda with a [DragAndDropSourceScope] as a receiver
+ * which provides a [PointerInputScope] to detect the drag gesture, after which a drag and drop
+ * gesture can be started with [DragAndDropSourceScope.startTransfer].
+ *
+ */
+@ExperimentalFoundationApi
+fun Modifier.dragAndDropSource(
+    block: suspend DragAndDropSourceScope.() -> Unit
+): Modifier = this then DragAndDropSourceWithDefaultShadowElement(
+    dragAndDropSourceHandler = block,
+)
+
+@ExperimentalFoundationApi
+private class DragAndDropSourceWithDefaultShadowElement(
+    /**
+     * @see Modifier.dragAndDropSource
+     */
+    val dragAndDropSourceHandler: suspend DragAndDropSourceScope.() -> Unit
+) : ModifierNodeElement<DragSourceNodeWithDefaultPainter>() {
+    override fun create() = DragSourceNodeWithDefaultPainter(
+        dragAndDropSourceHandler = dragAndDropSourceHandler,
+    )
+
+    override fun update(node: DragSourceNodeWithDefaultPainter) = with(node) {
+        dragAndDropSourceHandler =
+            this@DragAndDropSourceWithDefaultShadowElement.dragAndDropSourceHandler
+    }
+
+    override fun InspectorInfo.inspectableProperties() {
+        name = "dragSourceWithDefaultPainter"
+        properties["dragAndDropSourceHandler"] = dragAndDropSourceHandler
+    }
+
+    override fun equals(other: Any?): Boolean {
+        if (this === other) return true
+        if (other !is DragAndDropSourceWithDefaultShadowElement) return false
+
+        return dragAndDropSourceHandler == other.dragAndDropSourceHandler
+    }
+
+    override fun hashCode(): Int {
+        return dragAndDropSourceHandler.hashCode()
+    }
+}
+
+@ExperimentalFoundationApi
+private class DragSourceNodeWithDefaultPainter(
+    var dragAndDropSourceHandler: suspend DragAndDropSourceScope.() -> Unit
+) : DelegatingNode() {
+
+    init {
+        val cacheDrawScopeDragShadowCallback = CacheDrawScopeDragShadowCallback().also {
+            delegate(CacheDrawModifierNode(it::cachePicture))
+        }
+        delegate(
+            DragAndDropSourceNode(
+                onDrawDragShadow = {
+                    cacheDrawScopeDragShadowCallback.drawDragShadow(this)
+                },
+                dragAndDropSourceHandler = {
+                    dragAndDropSourceHandler.invoke(this)
+                }
+            )
+        )
+    }
+}
+
+@ExperimentalFoundationApi
+private class CacheDrawScopeDragShadowCallback {
+    private var cachedPicture: Picture? = null
+
+    fun drawDragShadow(drawScope: DrawScope) = with(drawScope) {
+        when (val picture = cachedPicture) {
+            null -> throw IllegalArgumentException(
+                "No cached drag shadow. Check if Modifier.cacheDragShadow(painter) was called."
+            )
+
+            else -> drawIntoCanvas { canvas ->
+                canvas.nativeCanvas.drawPicture(picture)
+            }
+        }
+    }
+
+    fun cachePicture(scope: CacheDrawScope): DrawResult = with(scope) {
+        val picture = Picture()
+        cachedPicture = picture
+        val width = this.size.width.toInt()
+        val height = this.size.height.toInt()
+        onDrawWithContent {
+            val pictureCanvas =
+                androidx.compose.ui.graphics.Canvas(picture.beginRecording(width, height))
+            draw(
+                density = this,
+                layoutDirection = this.layoutDirection,
+                canvas = pictureCanvas,
+                size = this.size
+            ) {
+                this@onDrawWithContent.drawContent()
+            }
+            picture.endRecording()
+
+            drawIntoCanvas { canvas -> canvas.nativeCanvas.drawPicture(picture) }
+        }
+    }
+}
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/draganddrop/DragAndDropSource.kt b/compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/draganddrop/DragAndDropSource.kt
new file mode 100644
index 0000000..7e9e47c
--- /dev/null
+++ b/compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/draganddrop/DragAndDropSource.kt
@@ -0,0 +1,133 @@
+/*
+ * 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
+ *
+ *     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.
+ */
+
+package androidx.compose.foundation.draganddrop
+
+import androidx.compose.foundation.ExperimentalFoundationApi
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.draganddrop.DragAndDropInfo
+import androidx.compose.ui.draganddrop.DragAndDropModifierNode
+import androidx.compose.ui.draganddrop.DragAndDropTransfer
+import androidx.compose.ui.graphics.drawscope.DrawScope
+import androidx.compose.ui.input.pointer.PointerInputScope
+import androidx.compose.ui.input.pointer.SuspendingPointerInputModifierNode
+import androidx.compose.ui.node.DelegatingNode
+import androidx.compose.ui.node.LayoutAwareModifierNode
+import androidx.compose.ui.node.ModifierNodeElement
+import androidx.compose.ui.platform.InspectorInfo
+import androidx.compose.ui.unit.IntSize
+import androidx.compose.ui.unit.toSize
+
+/**
+ * A scope that allows for the detection of the start of a drag and drop gesture, and subsequently
+ * starting a drag and drop session.
+ */
+@ExperimentalFoundationApi
+interface DragAndDropSourceScope : PointerInputScope {
+    /**
+     * Starts a drag and drop session with [transfer] as the data to be transferred on gesture
+     * completion
+     */
+    fun startTransfer(transfer: DragAndDropTransfer)
+}
+
+/**
+ * A Modifier that allows an element it is applied to to be treated like a source for
+ * drag and drop operations.
+ *
+ * Learn how to use [Modifier.dragAndDropSource] while providing a custom drag shadow:
+ * @sample androidx.compose.foundation.samples.DragAndDropSourceWithColoredDragShadowSample
+ *
+ * @param onDrawDragShadow provides the visual representation of the item dragged during the
+ * drag and drop gesture.
+ * @param block A lambda with a [DragAndDropSourceScope] as a receiver
+ * which provides a [PointerInputScope] to detect the drag gesture, after which a drag and drop
+ * gesture can be started with [DragAndDropSourceScope.startTransfer].
+ *
+ */
+@ExperimentalFoundationApi
+fun Modifier.dragAndDropSource(
+    onDrawDragShadow: DrawScope.() -> Unit,
+    block: suspend DragAndDropSourceScope.() -> Unit
+): Modifier = this then DragAndDropSourceElement(
+    onDrawDragShadow = onDrawDragShadow,
+    dragAndDropSourceHandler = block,
+)
+
+@ExperimentalFoundationApi
+private data class DragAndDropSourceElement(
+    /**
+     * @see Modifier.dragAndDropSource
+     */
+    val onDrawDragShadow: DrawScope.() -> Unit,
+    /**
+     * @see Modifier.dragAndDropSource
+     */
+    val dragAndDropSourceHandler: suspend DragAndDropSourceScope.() -> Unit
+) : ModifierNodeElement<DragAndDropSourceNode>() {
+    override fun create() = DragAndDropSourceNode(
+        onDrawDragShadow = onDrawDragShadow,
+        dragAndDropSourceHandler = dragAndDropSourceHandler,
+    )
+
+    override fun update(node: DragAndDropSourceNode) = with(node) {
+        onDrawDragShadow = this@DragAndDropSourceElement.onDrawDragShadow
+        dragAndDropSourceHandler = this@DragAndDropSourceElement.dragAndDropSourceHandler
+    }
+
+    override fun InspectorInfo.inspectableProperties() {
+        name = "dragSource"
+        properties["onDrawDragShadow"] = onDrawDragShadow
+        properties["dragAndDropSourceHandler"] = dragAndDropSourceHandler
+    }
+}
+
+@ExperimentalFoundationApi
+internal class DragAndDropSourceNode(
+    var onDrawDragShadow: DrawScope.() -> Unit,
+    var dragAndDropSourceHandler: suspend DragAndDropSourceScope.() -> Unit
+) : DelegatingNode(),
+    LayoutAwareModifierNode {
+
+    private var size: IntSize = IntSize.Zero
+
+    init {
+        val dragAndDropModifierNode = delegate(
+            DragAndDropModifierNode()
+        )
+
+        delegate(
+            SuspendingPointerInputModifierNode {
+                dragAndDropSourceHandler(
+                    object : DragAndDropSourceScope, PointerInputScope by this {
+                        override fun startTransfer(transfer: DragAndDropTransfer) =
+                            dragAndDropModifierNode.drag(
+                                DragAndDropInfo(
+                                    transfer = transfer,
+                                    size = size.toSize(),
+                                    onDrawDragShadow = onDrawDragShadow
+                                )
+                            )
+                    }
+                )
+            }
+        )
+    }
+
+    override fun onRemeasured(size: IntSize) {
+        this.size = size
+    }
+}
diff --git a/compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/draganddrop/DragAndDropTarget.kt b/compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/draganddrop/DragAndDropTarget.kt
new file mode 100644
index 0000000..a579114
--- /dev/null
+++ b/compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/draganddrop/DragAndDropTarget.kt
@@ -0,0 +1,188 @@
+/*
+ * 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
+ *
+ *     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.
+ */
+
+package androidx.compose.foundation.draganddrop
+
+import androidx.compose.foundation.ExperimentalFoundationApi
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.draganddrop.DragAndDropEvent
+import androidx.compose.ui.draganddrop.DragAndDropEventType
+import androidx.compose.ui.draganddrop.DragAndDropModifierNode
+import androidx.compose.ui.draganddrop.DragAndDropTarget
+import androidx.compose.ui.node.DelegatingNode
+import androidx.compose.ui.node.ModifierNodeElement
+import androidx.compose.ui.platform.InspectorInfo
+
+/**
+ * A modifier that allows for receiving from a drag and drop gesture.
+ *
+ * Learn how to use [Modifier.dragAndDropTarget] to receive drag and drop events from inside your
+ * app or from other apps:
+ *
+ * @sample androidx.compose.foundation.samples.TextDragAndDropTargetSample
+ *
+ * @param onStarted Allows the Composable to decide if it wants to receive the drop gesture.
+ * returning true indicates interest in a [DragAndDropEvent], false indicates no interest. If false
+ * is returned, this [Modifier] will not receive any events for this drag and drop session until the
+ * [onEnded] signal. All drag and drop target modifiers in the hierarchy will receive this event.
+ * @see [DragAndDropEventType.Started]
+ *
+ * @param onDropped The item has been dropped inside this Composable.
+ * returning true indicates that the [DragAndDropEvent] was consumed, false indicates it was
+ * rejected. Receiving this event is prerequisite on returning true in [onStarted].
+ * @see [DragAndDropEventType.Dropped]
+ *
+ * @param onEntered The item being dropped has entered into this Composable's bounds.
+ * Receiving this event is prerequisite on returning true in [onStarted].
+ * @see [DragAndDropEventType.Entered]
+ *
+ * @param onMoved The item being dropped has moved within this Composable's bounds.
+ * Receiving this event is prerequisite on returning true in [onStarted].
+ * @see [DragAndDropEventType.Moved]
+ *
+ * @param onChanged The event in the current drag and drop session has changed within
+ * this Composable's bounds.
+ * @see [DragAndDropEventType.Changed]
+ *
+ * Receiving this event is prerequisite on returning true in [onStarted].
+ * @param onExited The item being dropped has moved outside this Composable's bounds.
+ * Receiving this event is prerequisite on returning true in [onStarted].
+ * @see [DragAndDropEventType.Exited]
+ *
+ * @param onEnded The drag and drop gesture is complete.
+ * All drag and drop target modifiers in the hierarchy will receive this event.
+ * @see [DragAndDropEventType.Ended]
+ */
+@ExperimentalFoundationApi
+fun Modifier.dragAndDropTarget(
+    onStarted: (event: DragAndDropEvent) -> Boolean,
+    onDropped: (event: DragAndDropEvent) -> Boolean,
+    onEntered: (event: DragAndDropEvent) -> Unit = {},
+    onMoved: (event: DragAndDropEvent) -> Unit = {},
+    onChanged: (event: DragAndDropEvent) -> Unit = {},
+    onExited: (event: DragAndDropEvent) -> Unit = {},
+    onEnded: (event: DragAndDropEvent) -> Unit = {},
+): Modifier = this then DropTargetElement(
+    onStarted = onStarted,
+    onDropped = onDropped,
+    onEntered = onEntered,
+    onMoved = onMoved,
+    onChanged = onChanged,
+    onExited = onExited,
+    onEnded = onEnded
+)
+
+@ExperimentalFoundationApi
+private class DropTargetElement(
+    val onStarted: (event: DragAndDropEvent) -> Boolean,
+    val onDropped: (event: DragAndDropEvent) -> Boolean,
+    val onEntered: (event: DragAndDropEvent) -> Unit = {},
+    val onMoved: (event: DragAndDropEvent) -> Unit = {},
+    val onChanged: (event: DragAndDropEvent) -> Unit = {},
+    val onExited: (event: DragAndDropEvent) -> Unit = {},
+    val onEnded: (event: DragAndDropEvent) -> Unit = {},
+) : ModifierNodeElement<DragAndDropTargetNode>() {
+    override fun create() = DragAndDropTargetNode(
+        onStarted = onStarted,
+        onDropped = onDropped,
+        onEntered = onEntered,
+        onMoved = onMoved,
+        onChanged = onChanged,
+        onExited = onExited,
+        onEnded = onEnded,
+    )
+
+    override fun update(node: DragAndDropTargetNode) = with(node) {
+        onStarted = this@DropTargetElement.onStarted
+        onDropped = this@DropTargetElement.onDropped
+        onEntered = this@DropTargetElement.onEntered
+        onMoved = this@DropTargetElement.onMoved
+        onChanged = this@DropTargetElement.onChanged
+        onExited = this@DropTargetElement.onExited
+        onEnded = this@DropTargetElement.onEnded
+    }
+
+    override fun InspectorInfo.inspectableProperties() {
+        name = "dropTarget"
+        properties["onDragStarted"] = onStarted
+        properties["onDropped"] = onDropped
+        properties["onEntered"] = onEntered
+        properties["onMoved"] = onMoved
+        properties["onChanged"] = onChanged
+        properties["onExited"] = onExited
+        properties["onEnded"] = onEnded
+    }
+
+    override fun equals(other: Any?): Boolean {
+        if (this === other) return true
+        if (other !is DropTargetElement) return false
+
+        if (onStarted != other.onStarted) return false
+        if (onDropped != other.onDropped) return false
+        if (onEntered != other.onEntered) return false
+        if (onMoved != other.onMoved) return false
+        if (onChanged != other.onChanged) return false
+        if (onExited != other.onExited) return false
+        return onEnded == other.onEnded
+    }
+
+    override fun hashCode(): Int {
+        var result = onStarted.hashCode()
+        result = 31 * result + onDropped.hashCode()
+        result = 31 * result + onEntered.hashCode()
+        result = 31 * result + onMoved.hashCode()
+        result = 31 * result + onChanged.hashCode()
+        result = 31 * result + onExited.hashCode()
+        result = 31 * result + onEnded.hashCode()
+        return result
+    }
+}
+
+@ExperimentalFoundationApi
+private class DragAndDropTargetNode(
+    var onStarted: (event: DragAndDropEvent) -> Boolean,
+    var onDropped: (event: DragAndDropEvent) -> Boolean,
+    var onEntered: (event: DragAndDropEvent) -> Unit,
+    var onMoved: (event: DragAndDropEvent) -> Unit,
+    var onChanged: (event: DragAndDropEvent) -> Unit,
+    var onExited: (event: DragAndDropEvent) -> Unit,
+    var onEnded: (event: DragAndDropEvent) -> Unit,
+) : DelegatingNode(), DragAndDropTarget {
+
+    init {
+        delegate(
+            DragAndDropModifierNode { event ->
+                when {
+                    onStarted(event) -> this@DragAndDropTargetNode
+                    else -> null
+                }
+            }
+        )
+    }
+
+    override fun onDragAndDropEvent(event: DragAndDropEvent, type: DragAndDropEventType): Boolean {
+        when (type) {
+            DragAndDropEventType.Started -> return onStarted.invoke(event)
+            DragAndDropEventType.Dropped -> return onDropped.invoke(event)
+            DragAndDropEventType.Entered -> onEntered.invoke(event)
+            DragAndDropEventType.Moved -> onMoved.invoke(event)
+            DragAndDropEventType.Exited -> onExited.invoke(event)
+            DragAndDropEventType.Changed -> onChanged.invoke(event)
+            DragAndDropEventType.Ended -> onEnded.invoke(event)
+        }
+        return false
+    }
+}
diff --git a/compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/gestures/DragGestureDetector.kt b/compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/gestures/DragGestureDetector.kt
index 3e8c4f5..c221f49 100644
--- a/compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/gestures/DragGestureDetector.kt
+++ b/compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/gestures/DragGestureDetector.kt
@@ -325,7 +325,7 @@
 ): Boolean = drag(
     pointerId = pointerId,
     onDrag = onDrag,
-    motionFromChange = { it.positionChangeIgnoreConsumed().y },
+    hasDragged = { it.positionChangeIgnoreConsumed().y != 0f },
     motionConsumed = { it.isConsumed }
 ) != null
 
@@ -473,7 +473,7 @@
 ): Boolean = drag(
     pointerId = pointerId,
     onDrag = onDrag,
-    motionFromChange = { it.positionChangeIgnoreConsumed().x },
+    hasDragged = { it.positionChangeIgnoreConsumed().x != 0f },
     motionConsumed = { it.isConsumed }
 ) != null
 
@@ -564,10 +564,9 @@
 
 /**
  * Continues to read drag events until all pointers are up or the drag event is canceled.
- * The initial pointer to use for driving the drag is [pointerId]. [motionFromChange]
- * converts the [PointerInputChange] to the pixel change in the direction that this
- * drag should detect. [onDrag] is called whenever the pointer moves and [motionFromChange]
- * returns non-zero.
+ * The initial pointer to use for driving the drag is [pointerId]. [hasDragged]
+ * passes the result whether a change was detected from the drag function or not. [onDrag] is called
+ * whenever the pointer moves and [hasDragged] returns non-zero.
  *
  * @return The last pointer input event change when gesture ended with all pointers up
  * and null when the gesture was canceled.
@@ -575,7 +574,7 @@
 internal suspend inline fun AwaitPointerEventScope.drag(
     pointerId: PointerId,
     onDrag: (PointerInputChange) -> Unit,
-    motionFromChange: (PointerInputChange) -> Float,
+    hasDragged: (PointerInputChange) -> Boolean,
     motionConsumed: (PointerInputChange) -> Boolean
 ): PointerInputChange? {
     if (currentEvent.isPointerUp(pointerId)) {
@@ -583,7 +582,7 @@
     }
     var pointer = pointerId
     while (true) {
-        val change = awaitDragOrUp(pointer) { motionFromChange(it) != 0f } ?: return null
+        val change = awaitDragOrUp(pointer, hasDragged) ?: return null
 
         if (motionConsumed(change)) {
             return null
diff --git a/compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/gestures/Draggable.kt b/compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/gestures/Draggable.kt
index 08efb0a..471eea9 100644
--- a/compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/gestures/Draggable.kt
+++ b/compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/gestures/Draggable.kt
@@ -567,16 +567,18 @@
     pointerId: PointerId,
     onDrag: (PointerInputChange) -> Unit
 ): Boolean {
-    val motionFromChange: (PointerInputChange) -> Float = if (orientation == Orientation.Vertical) {
-        { it.positionChangeIgnoreConsumed().y }
-    } else {
-        { it.positionChangeIgnoreConsumed().x }
+    val hasDragged: (PointerInputChange) -> Boolean = {
+        if (orientation == Orientation.Vertical) {
+            it.positionChangeIgnoreConsumed().y
+        } else {
+            it.positionChangeIgnoreConsumed().x
+        } != 0f
     }
 
     return drag(
         pointerId = pointerId,
         onDrag = onDrag,
-        motionFromChange = motionFromChange,
+        hasDragged = hasDragged,
         motionConsumed = { it.isConsumed }
     )?.let(onDrag) != null
 }
diff --git a/compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/gestures/snapping/LazyGridSnapLayoutInfoProvider.kt b/compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/gestures/snapping/LazyGridSnapLayoutInfoProvider.kt
index 79f8886..9ec2f75 100644
--- a/compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/gestures/snapping/LazyGridSnapLayoutInfoProvider.kt
+++ b/compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/gestures/snapping/LazyGridSnapLayoutInfoProvider.kt
@@ -108,7 +108,7 @@
         }
 
         return calculateFinalOffset(
-            currentVelocity,
+            with(lazyGridState.density) { calculateFinalSnappingItem(currentVelocity) },
             distanceFromItemBeforeTarget,
             distanceFromItemAfterTarget
         )
diff --git a/compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/gestures/snapping/LazyListSnapLayoutInfoProvider.kt b/compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/gestures/snapping/LazyListSnapLayoutInfoProvider.kt
index 512b509..7b760c9 100644
--- a/compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/gestures/snapping/LazyListSnapLayoutInfoProvider.kt
+++ b/compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/gestures/snapping/LazyListSnapLayoutInfoProvider.kt
@@ -26,6 +26,7 @@
 import androidx.compose.foundation.lazy.LazyListState
 import androidx.compose.runtime.Composable
 import androidx.compose.runtime.remember
+import androidx.compose.ui.unit.Density
 import androidx.compose.ui.util.fastForEach
 import androidx.compose.ui.util.fastSumBy
 import kotlin.math.absoluteValue
@@ -97,7 +98,11 @@
             }
         }
 
-        return calculateFinalOffset(currentVelocity, lowerBoundOffset, upperBoundOffset)
+        return calculateFinalOffset(
+            with(lazyListState.density) { calculateFinalSnappingItem(currentVelocity) },
+            lowerBoundOffset,
+            upperBoundOffset
+        )
     }
 
     fun averageItemSize(): Float = with(layoutInfo) {
@@ -125,3 +130,25 @@
 
 internal val LazyListLayoutInfo.singleAxisViewportSize: Int
     get() = if (orientation == Orientation.Vertical) viewportSize.height else viewportSize.width
+
+@kotlin.jvm.JvmInline
+internal value class FinalSnappingItem internal constructor(
+    @Suppress("unused") private val value: Int
+) {
+    companion object {
+
+        val ClosestItem: FinalSnappingItem = FinalSnappingItem(0)
+
+        val NextItem: FinalSnappingItem = FinalSnappingItem(1)
+
+        val PreviousItem: FinalSnappingItem = FinalSnappingItem(2)
+    }
+}
+
+internal fun Density.calculateFinalSnappingItem(velocity: Float): FinalSnappingItem {
+    return if (velocity.absoluteValue < MinFlingVelocityDp.toPx()) {
+        FinalSnappingItem.ClosestItem
+    } else {
+        if (velocity > 0) FinalSnappingItem.NextItem else FinalSnappingItem.PreviousItem
+    }
+}
diff --git a/compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/gestures/snapping/SnapFlingBehavior.kt b/compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/gestures/snapping/SnapFlingBehavior.kt
index 2aa4948..e2c672f 100644
--- a/compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/gestures/snapping/SnapFlingBehavior.kt
+++ b/compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/gestures/snapping/SnapFlingBehavior.kt
@@ -45,15 +45,9 @@
 import kotlinx.coroutines.withContext
 
 /**
- * A [FlingBehavior] that performs snapping of items to a given position. The algorithm will
- * differentiate between short/scroll snapping and long/fling snapping.
+ * A [FlingBehavior] that performs snapping of items to a given position.
  *
- * Use [shortSnapVelocityThreshold] to provide a threshold velocity that will appropriately select
- * the desired behavior.
- *
- * A short snap usually happens after a fling with low velocity.
- *
- * When long snapping, you can use [SnapLayoutInfoProvider.calculateApproachOffset] to
+ * You can use [SnapLayoutInfoProvider.calculateApproachOffset] to
  * indicate that snapping should happen after this offset. If the velocity generated by the
  * fling is high enough to get there, we'll use [highVelocityAnimationSpec] to get to that offset
  * and then we'll snap to the next bound calculated by
@@ -72,8 +66,6 @@
  * @param highVelocityAnimationSpec The animation spec used to approach the target offset. When
  * the fling velocity is large enough. Large enough means large enough to naturally decay.
  * @param snapAnimationSpec The animation spec used to finally snap to the correct bound.
- * @param shortSnapVelocityThreshold Use the given velocity to determine if it's a short or long
- * snap. The velocity should be provided in pixels/s.
  *
  */
 @ExperimentalFoundationApi
@@ -81,10 +73,57 @@
     private val snapLayoutInfoProvider: SnapLayoutInfoProvider,
     private val lowVelocityAnimationSpec: AnimationSpec<Float>,
     private val highVelocityAnimationSpec: DecayAnimationSpec<Float>,
-    private val snapAnimationSpec: AnimationSpec<Float>,
-    private val shortSnapVelocityThreshold: Float
+    private val snapAnimationSpec: AnimationSpec<Float>
 ) : FlingBehavior {
 
+    /**
+     * A [FlingBehavior] that performs snapping of items to a given position. The algorithm will
+     * differentiate between short/scroll snapping and long/fling snapping.
+     *
+     * A short snap usually happens after a fling with low velocity.
+     *
+     * When long snapping, you can use [SnapLayoutInfoProvider.calculateApproachOffset] to
+     * indicate that snapping should happen after this offset. If the velocity generated by the
+     * fling is high enough to get there, we'll use [highVelocityAnimationSpec] to get to that
+     * offset and then we'll snap to the next bound calculated by
+     * [SnapLayoutInfoProvider.calculateSnappingOffset] using [snapAnimationSpec].
+     *
+     * If the velocity is not high enough, we'll use [lowVelocityAnimationSpec] to approach and then
+     * use [snapAnimationSpec] to snap into place.
+     *
+     * Please refer to the sample to learn how to use this API.
+     * @sample androidx.compose.foundation.samples.SnapFlingBehaviorSimpleSample
+     * @sample androidx.compose.foundation.samples.SnapFlingBehaviorCustomizedSample
+     *
+     * @param snapLayoutInfoProvider The information about the layout being snapped.
+     * @param lowVelocityAnimationSpec The animation spec used to approach the target offset. When
+     * the fling velocity is not large enough. Large enough means large enough to naturally decay.
+     * @param highVelocityAnimationSpec The animation spec used to approach the target offset. When
+     * the fling velocity is large enough. Large enough means large enough to naturally decay.
+     * @param snapAnimationSpec The animation spec used to finally snap to the correct bound.
+     * @param shortSnapVelocityThreshold Use the given velocity to determine if it's a short or long
+     * snap. The velocity should be provided in pixels/s.
+     *
+     */
+    @Suppress("UNUSED_PARAMETER")
+    @Deprecated(
+        "Please use the constructor without the shortSnapVelocityThreshold. The" +
+            " functionality provided by shortSnapVelocityThreshold can be implemented by " +
+            "SnapLayoutInfoProvider."
+    )
+    constructor(
+        snapLayoutInfoProvider: SnapLayoutInfoProvider,
+        lowVelocityAnimationSpec: AnimationSpec<Float>,
+        highVelocityAnimationSpec: DecayAnimationSpec<Float>,
+        snapAnimationSpec: AnimationSpec<Float>,
+        shortSnapVelocityThreshold: Float
+    ) : this(
+        snapLayoutInfoProvider,
+        lowVelocityAnimationSpec,
+        highVelocityAnimationSpec,
+        snapAnimationSpec
+    )
+
     internal var motionScaleDuration = DefaultScrollMotionDurationScale
 
     override suspend fun ScrollScope.performFling(initialVelocity: Float): Float {
@@ -124,10 +163,35 @@
     ): AnimationResult<Float, AnimationVector1D> {
         // If snapping from scroll (short snap) or fling (long snap)
         val result = withContext(motionScaleDuration) {
-            if (abs(initialVelocity) <= abs(shortSnapVelocityThreshold)) {
-                shortSnap(initialVelocity, onRemainingScrollOffsetUpdate)
-            } else {
-                longSnap(initialVelocity, onRemainingScrollOffsetUpdate)
+            val initialOffset =
+                snapLayoutInfoProvider.calculateApproachOffset(initialVelocity).let {
+                    abs(it) * sign(initialVelocity) // ensure offset sign is correct
+                }
+            var remainingScrollOffset = initialOffset
+
+            onRemainingScrollOffsetUpdate(remainingScrollOffset) // First Scroll Offset
+
+            val animationState = tryApproach(
+                remainingScrollOffset,
+                initialVelocity
+            ) { delta ->
+                remainingScrollOffset -= delta
+                onRemainingScrollOffsetUpdate(remainingScrollOffset)
+            }
+
+            remainingScrollOffset =
+                snapLayoutInfoProvider.calculateSnappingOffset(animationState.velocity)
+
+            debugLog { "Settling Final Bound=$remainingScrollOffset" }
+
+            animateWithTarget(
+                remainingScrollOffset,
+                remainingScrollOffset,
+                animationState.copy(value = 0f), // re-use the velocity and timestamp from state
+                snapAnimationSpec
+            ) { delta ->
+                remainingScrollOffset -= delta
+                onRemainingScrollOffsetUpdate(remainingScrollOffset)
             }
         }
 
@@ -135,60 +199,23 @@
         return result
     }
 
-    private suspend fun ScrollScope.shortSnap(
+    @Suppress("PrimitiveInLambda")
+    private suspend fun ScrollScope.tryApproach(
+        offset: Float,
         velocity: Float,
-        onRemainingScrollOffsetUpdate: (Float) -> Unit
-    ): AnimationResult<Float, AnimationVector1D> {
-        debugLog { "Short Snapping" }
-        val closestOffset = snapLayoutInfoProvider.calculateSnappingOffset(0f)
-
-        var remainingScrollOffset = closestOffset
-
-        val animationState = AnimationState(NoDistance, velocity)
-        return animateSnap(
-            closestOffset,
-            closestOffset,
-            animationState,
-            snapAnimationSpec
-        ) { delta ->
-            remainingScrollOffset -= delta
-            onRemainingScrollOffsetUpdate(remainingScrollOffset)
-        }
-    }
-
-    private suspend fun ScrollScope.longSnap(
-        initialVelocity: Float,
-        onAnimationStep: (remainingScrollOffset: Float) -> Unit
-    ): AnimationResult<Float, AnimationVector1D> {
-        debugLog { "Long Snapping" }
-        val initialOffset =
-            snapLayoutInfoProvider.calculateApproachOffset(initialVelocity).let {
-                abs(it) * sign(initialVelocity) // ensure offset sign is correct
-            }
-        var remainingScrollOffset = initialOffset
-
-        onAnimationStep(remainingScrollOffset) // First Scroll Offset
-
-        val (remainingOffset, animationState) = runApproach(
-            initialOffset,
-            initialVelocity
-        ) { delta ->
-            remainingScrollOffset -= delta
-            onAnimationStep(remainingScrollOffset)
-        }
-
-        debugLog { "Settling Final Bound=$remainingOffset" }
-
-        remainingScrollOffset = remainingOffset
-
-        return animateSnap(
-            remainingOffset,
-            remainingOffset,
-            animationState.copy(value = 0f),
-            snapAnimationSpec
-        ) { delta ->
-            remainingScrollOffset -= delta
-            onAnimationStep(remainingScrollOffset)
+        updateRemainingScrollOffset: (Float) -> Unit
+    ): AnimationState<Float, AnimationVector1D> {
+        // If we don't have velocity or approach offset, we shouldn't run the approach animation
+        return if (offset.absoluteValue == 0.0f ||
+            velocity.absoluteValue == 0.0f
+        ) {
+            AnimationState(offset, velocity)
+        } else {
+            runApproach(
+                offset,
+                velocity,
+                updateRemainingScrollOffset
+            ).currentAnimationState
         }
     }
 
@@ -211,7 +238,6 @@
             initialTargetOffset,
             initialVelocity,
             animation,
-            snapLayoutInfoProvider,
             onAnimationStep
         )
     }
@@ -236,8 +262,7 @@
             other.snapAnimationSpec == this.snapAnimationSpec &&
                 other.highVelocityAnimationSpec == this.highVelocityAnimationSpec &&
                 other.lowVelocityAnimationSpec == this.lowVelocityAnimationSpec &&
-                other.snapLayoutInfoProvider == this.snapLayoutInfoProvider &&
-                other.shortSnapVelocityThreshold == this.shortSnapVelocityThreshold
+                other.snapLayoutInfoProvider == this.snapLayoutInfoProvider
         } else {
             false
         }
@@ -248,7 +273,6 @@
         .let { 31 * it + highVelocityAnimationSpec.hashCode() }
         .let { 31 * it + lowVelocityAnimationSpec.hashCode() }
         .let { 31 * it + snapLayoutInfoProvider.hashCode() }
-        .let { 31 * it + shortSnapVelocityThreshold.hashCode() }
 }
 
 /**
@@ -271,8 +295,7 @@
             snapLayoutInfoProvider = snapLayoutInfoProvider,
             lowVelocityAnimationSpec = tween(easing = LinearEasing),
             highVelocityAnimationSpec = highVelocityApproachSpec,
-            snapAnimationSpec = spring(stiffness = Spring.StiffnessMediumLow),
-            shortSnapVelocityThreshold = with(density) { MinFlingVelocityDp.toPx() }
+            snapAnimationSpec = spring(stiffness = Spring.StiffnessMediumLow)
         )
     }
 }
@@ -293,22 +316,15 @@
     initialTargetOffset: Float,
     initialVelocity: Float,
     animation: ApproachAnimation<Float, AnimationVector1D>,
-    snapLayoutInfoProvider: SnapLayoutInfoProvider,
     onAnimationStep: (delta: Float) -> Unit
 ): AnimationResult<Float, AnimationVector1D> {
 
-    val (_, currentAnimationState) = animation.approachAnimation(
+    return animation.approachAnimation(
         this,
         initialTargetOffset,
         initialVelocity,
         onAnimationStep
     )
-
-    val remainingOffset =
-        snapLayoutInfoProvider.calculateSnappingOffset(currentAnimationState.velocity)
-
-    // will snap the remainder
-    return AnimationResult(remainingOffset, currentAnimationState)
 }
 
 private class AnimationResult<T, V : AnimationVector>(
@@ -379,21 +395,22 @@
  * @param targetOffset The final target of this animation
  * @param cancelOffset If we'd like to finish the animation earlier we use this value
  * @param animationState The current animation state for continuation purposes
- * @param snapAnimationSpec The [AnimationSpec] that will drive this animation
+ * @param animationSpec The [AnimationSpec] that will drive this animation
  * @param onAnimationStep Called for each new scroll delta emitted by the animation cycle.
  */
-private suspend fun ScrollScope.animateSnap(
+@Suppress("PrimitiveInLambda")
+private suspend fun ScrollScope.animateWithTarget(
     targetOffset: Float,
     cancelOffset: Float,
     animationState: AnimationState<Float, AnimationVector1D>,
-    snapAnimationSpec: AnimationSpec<Float>,
+    animationSpec: AnimationSpec<Float>,
     onAnimationStep: (delta: Float) -> Unit
 ): AnimationResult<Float, AnimationVector1D> {
     var consumedUpToNow = 0f
     val initialVelocity = animationState.velocity
     animationState.animateTo(
         targetOffset,
-        animationSpec = snapAnimationSpec,
+        animationSpec = animationSpec,
         sequentialAnimation = (animationState.velocity != 0f)
     ) {
         val realValue = value.coerceToTarget(cancelOffset)
@@ -449,11 +466,11 @@
         val animationState = AnimationState(initialValue = 0f, initialVelocity = velocity)
         val targetOffset = offset.absoluteValue * sign(velocity)
         return with(scope) {
-            animateSnap(
+            animateWithTarget(
                 targetOffset = targetOffset,
                 cancelOffset = offset,
                 animationState = animationState,
-                snapAnimationSpec = lowVelocityAnimationSpec,
+                animationSpec = lowVelocityAnimationSpec,
                 onAnimationStep = onAnimationStep
             )
         }
@@ -480,7 +497,11 @@
 internal const val NoDistance = 0f
 internal const val NoVelocity = 0f
 
-internal fun calculateFinalOffset(velocity: Float, lowerBound: Float, upperBound: Float): Float {
+internal fun calculateFinalOffset(
+    snappingOffset: FinalSnappingItem,
+    lowerBound: Float,
+    upperBound: Float
+): Float {
 
     fun Float.isValidDistance(): Boolean {
         return this != Float.POSITIVE_INFINITY && this != Float.NEGATIVE_INFINITY
@@ -488,8 +509,8 @@
 
     debugLog { "Proposed Bounds: Lower=$lowerBound Upper=$upperBound" }
 
-    val finalDistance = when (sign(velocity)) {
-        0f -> {
+    val finalDistance = when (snappingOffset) {
+        FinalSnappingItem.ClosestItem -> {
             if (abs(upperBound) <= abs(lowerBound)) {
                 upperBound
             } else {
@@ -497,8 +518,8 @@
             }
         }
 
-        1f -> upperBound
-        -1f -> lowerBound
+        FinalSnappingItem.NextItem -> upperBound
+        FinalSnappingItem.PreviousItem -> lowerBound
         else -> NoDistance
     }
 
diff --git a/compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/gestures/snapping/SnapLayoutInfoProvider.kt b/compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/gestures/snapping/SnapLayoutInfoProvider.kt
index 2de3743..dab002c 100644
--- a/compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/gestures/snapping/SnapLayoutInfoProvider.kt
+++ b/compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/gestures/snapping/SnapLayoutInfoProvider.kt
@@ -44,9 +44,7 @@
 
     /**
      * Given a target placement in a layout, the snapping offset is the next snapping position
-     * this layout can be placed in. If this is a short snapping, [currentVelocity] is guaranteed
-     * to be 0.If it is a long snapping, this method  will be called
-     * after [calculateApproachOffset].
+     * this layout can be placed in.
      *
      * @param currentVelocity The current fling movement velocity. This may change throughout the
      * fling animation.
diff --git a/compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/lazy/LazyList.kt b/compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/lazy/LazyList.kt
index ca072ec..f663080 100644
--- a/compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/lazy/LazyList.kt
+++ b/compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/lazy/LazyList.kt
@@ -30,6 +30,7 @@
 import androidx.compose.foundation.lazy.layout.LazyLayout
 import androidx.compose.foundation.lazy.layout.LazyLayoutMeasureScope
 import androidx.compose.foundation.lazy.layout.calculateLazyLayoutPinnedIndices
+import androidx.compose.foundation.lazy.layout.lazyLayoutBeyondBoundsModifier
 import androidx.compose.foundation.lazy.layout.lazyLayoutSemantics
 import androidx.compose.foundation.overscroll
 import androidx.compose.runtime.Composable
@@ -112,11 +113,16 @@
                 reverseScrolling = reverseLayout
             )
             .clipScrollableContainer(orientation)
-            .lazyListBeyondBoundsModifier(
-                state,
-                beyondBoundsItemCount,
-                reverseLayout,
-                orientation
+            .lazyLayoutBeyondBoundsModifier(
+                state = rememberLazyListBeyondBoundsState(
+                    state = state,
+                    beyondBoundsItemCount = beyondBoundsItemCount
+                ),
+                beyondBoundsInfo = state.beyondBoundsInfo,
+                reverseLayout = reverseLayout,
+                layoutDirection = LocalLayoutDirection.current,
+                orientation = orientation,
+                enabled = userScrollEnabled
             )
             .overscroll(overscrollEffect)
             .scrollable(
diff --git a/compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/lazy/LazyListBeyondBoundsModifier.kt b/compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/lazy/LazyListBeyondBoundsModifier.kt
index 68f1b0d..03cd080 100644
--- a/compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/lazy/LazyListBeyondBoundsModifier.kt
+++ b/compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/lazy/LazyListBeyondBoundsModifier.kt
@@ -16,46 +16,18 @@
 
 package androidx.compose.foundation.lazy
 
-import androidx.compose.foundation.gestures.Orientation
-import androidx.compose.foundation.lazy.layout.LazyLayoutBeyondBoundsModifierLocal
 import androidx.compose.foundation.lazy.layout.LazyLayoutBeyondBoundsState
 import androidx.compose.runtime.Composable
 import androidx.compose.runtime.remember
-import androidx.compose.ui.Modifier
-import androidx.compose.ui.platform.LocalLayoutDirection
 
-/**
- * This modifier is used to measure and place additional items when the lazyList receives a
- * request to layout items beyond the visible bounds.
- */
-@Suppress("ComposableModifierFactory")
 @Composable
-internal fun Modifier.lazyListBeyondBoundsModifier(
+internal fun rememberLazyListBeyondBoundsState(
     state: LazyListState,
-    beyondBoundsItemCount: Int,
-    reverseLayout: Boolean,
-    orientation: Orientation
-): Modifier {
-    val layoutDirection = LocalLayoutDirection.current
-    val beyondBoundsState = remember(state, beyondBoundsItemCount) {
+    beyondBoundsItemCount: Int
+): LazyLayoutBeyondBoundsState {
+    return remember(state, beyondBoundsItemCount) {
         LazyListBeyondBoundsState(state, beyondBoundsItemCount)
     }
-    val beyondBoundsInfo = state.beyondBoundsInfo
-    return this then remember(
-        beyondBoundsState,
-        beyondBoundsInfo,
-        reverseLayout,
-        layoutDirection,
-        orientation
-    ) {
-        LazyLayoutBeyondBoundsModifierLocal(
-            beyondBoundsState,
-            beyondBoundsInfo,
-            reverseLayout,
-            layoutDirection,
-            orientation
-        )
-    }
 }
 
 internal class LazyListBeyondBoundsState(
diff --git a/compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/lazy/LazyListMeasuredItem.kt b/compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/lazy/LazyListMeasuredItem.kt
index 24a1642..78afee1 100644
--- a/compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/lazy/LazyListMeasuredItem.kt
+++ b/compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/lazy/LazyListMeasuredItem.kt
@@ -168,7 +168,7 @@
                     }
                     offset = animatedOffset
                 }
-                layerBlock = animation
+                layerBlock = animation.layerBlock
             } else {
                 layerBlock = DefaultLayerBlock
             }
diff --git a/compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/lazy/grid/LazyGrid.kt b/compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/lazy/grid/LazyGrid.kt
index 4b1627c..61d9c0f 100644
--- a/compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/lazy/grid/LazyGrid.kt
+++ b/compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/lazy/grid/LazyGrid.kt
@@ -30,6 +30,7 @@
 import androidx.compose.foundation.lazy.layout.LazyLayout
 import androidx.compose.foundation.lazy.layout.LazyLayoutMeasureScope
 import androidx.compose.foundation.lazy.layout.calculateLazyLayoutPinnedIndices
+import androidx.compose.foundation.lazy.layout.lazyLayoutBeyondBoundsModifier
 import androidx.compose.foundation.lazy.layout.lazyLayoutSemantics
 import androidx.compose.foundation.overscroll
 import androidx.compose.runtime.Composable
@@ -111,10 +112,13 @@
                 reverseScrolling = reverseLayout
             )
             .clipScrollableContainer(orientation)
-            .lazyGridBeyondBoundsModifier(
-                state,
-                reverseLayout,
-                orientation
+            .lazyLayoutBeyondBoundsModifier(
+                state = rememberLazyGridBeyondBoundsState(state = state),
+                beyondBoundsInfo = state.beyondBoundsInfo,
+                reverseLayout = reverseLayout,
+                layoutDirection = LocalLayoutDirection.current,
+                orientation = orientation,
+                enabled = userScrollEnabled
             )
             .overscroll(overscrollEffect)
             .scrollable(
diff --git a/compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/lazy/grid/LazyGridBeyondBoundsModifier.kt b/compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/lazy/grid/LazyGridBeyondBoundsModifier.kt
index d48a4f0..d8644225 100644
--- a/compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/lazy/grid/LazyGridBeyondBoundsModifier.kt
+++ b/compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/lazy/grid/LazyGridBeyondBoundsModifier.kt
@@ -16,44 +16,15 @@
 
 package androidx.compose.foundation.lazy.grid
 
-import androidx.compose.foundation.gestures.Orientation
-import androidx.compose.foundation.lazy.layout.LazyLayoutBeyondBoundsModifierLocal
 import androidx.compose.foundation.lazy.layout.LazyLayoutBeyondBoundsState
 import androidx.compose.runtime.Composable
 import androidx.compose.runtime.remember
-import androidx.compose.ui.Modifier
-import androidx.compose.ui.platform.LocalLayoutDirection
 
-/**
- * This modifier is used to measure and place additional items when the lazyList receives a
- * request to layout items beyond the visible bounds.
- */
-@Suppress("ComposableModifierFactory")
 @Composable
-internal fun Modifier.lazyGridBeyondBoundsModifier(
-    state: LazyGridState,
-    reverseLayout: Boolean,
-    orientation: Orientation
-): Modifier {
-    val layoutDirection = LocalLayoutDirection.current
-    val beyondBoundsState = remember(state) {
+internal fun rememberLazyGridBeyondBoundsState(state: LazyGridState): LazyLayoutBeyondBoundsState {
+    return remember(state) {
         LazyGridBeyondBoundsState(state)
     }
-    return this then remember(
-        state,
-        beyondBoundsState,
-        reverseLayout,
-        layoutDirection,
-        orientation
-    ) {
-        LazyLayoutBeyondBoundsModifierLocal(
-            beyondBoundsState,
-            state.beyondBoundsInfo,
-            reverseLayout,
-            layoutDirection,
-            orientation
-        )
-    }
 }
 
 internal class LazyGridBeyondBoundsState(
diff --git a/compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/lazy/layout/LazyLayoutAnimation.kt b/compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/lazy/layout/LazyLayoutAnimation.kt
index 0dd7231..098f8674 100644
--- a/compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/lazy/layout/LazyLayoutAnimation.kt
+++ b/compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/lazy/layout/LazyLayoutAnimation.kt
@@ -38,7 +38,7 @@
 
 internal class LazyLayoutAnimation(
     val coroutineScope: CoroutineScope
-) : (GraphicsLayerScope) -> Unit {
+) {
 
     var appearanceSpec: FiniteAnimationSpec<Float>? = null
     var placementSpec: FiniteAnimationSpec<IntOffset>? = null
@@ -79,6 +79,10 @@
     var visibility by mutableFloatStateOf(1f)
         private set
 
+    val layerBlock: GraphicsLayerScope.() -> Unit = {
+        alpha = visibility
+    }
+
     /**
      * Cancels the ongoing placement animation if there is one.
      */
@@ -176,10 +180,6 @@
         visibility = 1f
     }
 
-    override fun invoke(scope: GraphicsLayerScope) {
-        scope.alpha = visibility
-    }
-
     companion object {
         val NotInitialized = IntOffset(Int.MAX_VALUE, Int.MAX_VALUE)
     }
diff --git a/compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/lazy/layout/LazyLayoutBeyondBoundsModifierLocal.kt b/compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/lazy/layout/LazyLayoutBeyondBoundsModifierLocal.kt
index 982d7c5..24f1f89 100644
--- a/compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/lazy/layout/LazyLayoutBeyondBoundsModifierLocal.kt
+++ b/compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/lazy/layout/LazyLayoutBeyondBoundsModifierLocal.kt
@@ -18,6 +18,9 @@
 
 import androidx.compose.foundation.gestures.Orientation
 import androidx.compose.foundation.lazy.layout.LazyLayoutBeyondBoundsInfo.Interval
+import androidx.compose.runtime.Composable
+import androidx.compose.runtime.remember
+import androidx.compose.ui.Modifier
 import androidx.compose.ui.layout.BeyondBoundsLayout
 import androidx.compose.ui.layout.BeyondBoundsLayout.BeyondBoundsScope
 import androidx.compose.ui.layout.BeyondBoundsLayout.LayoutDirection.Companion.Above
@@ -33,6 +36,33 @@
 import androidx.compose.ui.unit.LayoutDirection.Ltr
 import androidx.compose.ui.unit.LayoutDirection.Rtl
 
+/**
+ * This modifier is used to measure and place additional items when the lazy layout receives a
+ * request to layout items beyond the visible bounds.
+ */
+@Suppress("ComposableModifierFactory")
+@Composable
+internal fun Modifier.lazyLayoutBeyondBoundsModifier(
+    state: LazyLayoutBeyondBoundsState,
+    beyondBoundsInfo: LazyLayoutBeyondBoundsInfo,
+    reverseLayout: Boolean,
+    layoutDirection: LayoutDirection,
+    orientation: Orientation,
+    enabled: Boolean
+): Modifier = this then if (!enabled) {
+    this
+} else {
+    remember(state, beyondBoundsInfo, reverseLayout, layoutDirection, orientation, enabled) {
+        LazyLayoutBeyondBoundsModifierLocal(
+            state,
+            beyondBoundsInfo,
+            reverseLayout,
+            layoutDirection,
+            orientation
+        )
+    }
+}
+
 internal class LazyLayoutBeyondBoundsModifierLocal(
     private val state: LazyLayoutBeyondBoundsState,
     private val beyondBoundsInfo: LazyLayoutBeyondBoundsInfo,
@@ -44,6 +74,7 @@
         get() = ModifierLocalBeyondBoundsLayout
     override val value: BeyondBoundsLayout
         get() = this
+
     companion object {
         private val emptyBeyondBoundsScope = object : BeyondBoundsScope {
             override val hasMoreContent = false
@@ -101,10 +132,12 @@
                 Ltr -> reverseLayout
                 Rtl -> !reverseLayout
             }
+
             Right -> when (layoutDirection) {
                 Ltr -> !reverseLayout
                 Rtl -> reverseLayout
             }
+
             else -> unsupportedDirection()
         }
 
diff --git a/compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/lazy/staggeredgrid/LazyStaggeredGrid.kt b/compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/lazy/staggeredgrid/LazyStaggeredGrid.kt
index fbeda53..20928ee 100644
--- a/compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/lazy/staggeredgrid/LazyStaggeredGrid.kt
+++ b/compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/lazy/staggeredgrid/LazyStaggeredGrid.kt
@@ -25,6 +25,7 @@
 import androidx.compose.foundation.layout.PaddingValues
 import androidx.compose.foundation.lazy.layout.LazyLayout
 import androidx.compose.foundation.lazy.layout.LazyLayoutItemProvider
+import androidx.compose.foundation.lazy.layout.lazyLayoutBeyondBoundsModifier
 import androidx.compose.foundation.lazy.layout.lazyLayoutSemantics
 import androidx.compose.foundation.overscroll
 import androidx.compose.runtime.Composable
@@ -91,10 +92,13 @@
                 reverseScrolling = reverseLayout
             )
             .clipScrollableContainer(orientation)
-            .lazyStaggeredGridBeyondBoundsModifier(
-                state = state,
+            .lazyLayoutBeyondBoundsModifier(
+                state = rememberLazyStaggeredGridBeyondBoundsState(state = state),
+                beyondBoundsInfo = state.beyondBoundsInfo,
                 reverseLayout = reverseLayout,
-                orientation = orientation
+                layoutDirection = LocalLayoutDirection.current,
+                orientation = orientation,
+                enabled = userScrollEnabled
             )
             .overscroll(overscrollEffect)
             .scrollable(
diff --git a/compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/lazy/staggeredgrid/LazyStaggeredGridBeyondBoundsModifier.kt b/compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/lazy/staggeredgrid/LazyStaggeredGridBeyondBoundsModifier.kt
index fbe9ca0..e39c290 100644
--- a/compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/lazy/staggeredgrid/LazyStaggeredGridBeyondBoundsModifier.kt
+++ b/compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/lazy/staggeredgrid/LazyStaggeredGridBeyondBoundsModifier.kt
@@ -16,44 +16,17 @@
 
 package androidx.compose.foundation.lazy.staggeredgrid
 
-import androidx.compose.foundation.gestures.Orientation
-import androidx.compose.foundation.lazy.layout.LazyLayoutBeyondBoundsModifierLocal
 import androidx.compose.foundation.lazy.layout.LazyLayoutBeyondBoundsState
 import androidx.compose.runtime.Composable
 import androidx.compose.runtime.remember
-import androidx.compose.ui.Modifier
-import androidx.compose.ui.platform.LocalLayoutDirection
 
-/**
- * This modifier is used to measure and place additional items when the lazyList receives a
- * request to layout items beyond the visible bounds.
- */
-@Suppress("ComposableModifierFactory")
 @Composable
-internal fun Modifier.lazyStaggeredGridBeyondBoundsModifier(
-    state: LazyStaggeredGridState,
-    reverseLayout: Boolean,
-    orientation: Orientation
-): Modifier {
-    val layoutDirection = LocalLayoutDirection.current
-    val beyondBoundsState = remember(state) {
+internal fun rememberLazyStaggeredGridBeyondBoundsState(
+    state: LazyStaggeredGridState
+): LazyLayoutBeyondBoundsState {
+    return remember(state) {
         LazyStaggeredGridBeyondBoundsState(state)
     }
-    return this then remember(
-        beyondBoundsState,
-        state,
-        reverseLayout,
-        layoutDirection,
-        orientation
-    ) {
-        LazyLayoutBeyondBoundsModifierLocal(
-            beyondBoundsState,
-            state.beyondBoundsInfo,
-            reverseLayout,
-            layoutDirection,
-            orientation
-        )
-    }
 }
 
 internal class LazyStaggeredGridBeyondBoundsState(
diff --git a/compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/pager/LazyLayoutPager.kt b/compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/pager/LazyLayoutPager.kt
index 764eef5..b54f9f5 100644
--- a/compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/pager/LazyLayoutPager.kt
+++ b/compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/pager/LazyLayoutPager.kt
@@ -36,6 +36,7 @@
 import androidx.compose.foundation.lazy.layout.LazyLayoutPinnableItem
 import androidx.compose.foundation.lazy.layout.MutableIntervalList
 import androidx.compose.foundation.lazy.layout.NearestRangeKeyIndexMap
+import androidx.compose.foundation.lazy.layout.lazyLayoutBeyondBoundsModifier
 import androidx.compose.foundation.lazy.layout.lazyLayoutSemantics
 import androidx.compose.foundation.overscroll
 import androidx.compose.runtime.Composable
@@ -144,11 +145,16 @@
                 reverseScrolling = reverseLayout
             )
             .clipScrollableContainer(orientation)
-            .pagerBeyondBoundsModifier(
-                state,
-                beyondBoundsPageCount,
-                reverseLayout,
-                orientation
+            .lazyLayoutBeyondBoundsModifier(
+                state = rememberPagerBeyondBoundsState(
+                    state = state,
+                    beyondBoundsPageCount = beyondBoundsPageCount
+                ),
+                beyondBoundsInfo = state.beyondBoundsInfo,
+                reverseLayout = reverseLayout,
+                layoutDirection = LocalLayoutDirection.current,
+                orientation = orientation,
+                enabled = userScrollEnabled
             )
             .overscroll(overscrollEffect)
             .scrollable(
diff --git a/compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/pager/Pager.kt b/compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/pager/Pager.kt
index 881469e..96445ff 100644
--- a/compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/pager/Pager.kt
+++ b/compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/pager/Pager.kt
@@ -16,6 +16,7 @@
 
 package androidx.compose.foundation.pager
 
+import androidx.annotation.FloatRange
 import androidx.compose.animation.core.AnimationSpec
 import androidx.compose.animation.core.DecayAnimationSpec
 import androidx.compose.animation.core.LinearEasing
@@ -28,10 +29,12 @@
 import androidx.compose.foundation.gestures.FlingBehavior
 import androidx.compose.foundation.gestures.Orientation
 import androidx.compose.foundation.gestures.ScrollScope
+import androidx.compose.foundation.gestures.snapping.FinalSnappingItem
 import androidx.compose.foundation.gestures.snapping.MinFlingVelocityDp
 import androidx.compose.foundation.gestures.snapping.SnapFlingBehavior
 import androidx.compose.foundation.gestures.snapping.SnapLayoutInfoProvider
 import androidx.compose.foundation.gestures.snapping.calculateDistanceToDesiredSnapPosition
+import androidx.compose.foundation.gestures.snapping.calculateFinalSnappingItem
 import androidx.compose.foundation.layout.PaddingValues
 import androidx.compose.runtime.Composable
 import androidx.compose.runtime.Stable
@@ -273,6 +276,110 @@
      * @see androidx.compose.foundation.gestures.snapping.SnapFlingBehavior for more information
      * on what which parameter controls in the overall snapping animation.
      *
+     * The animation specs used by the fling behavior will depend on 2 factors:
+     * 1) The gesture velocity.
+     * 2) The target page proposed by [pagerSnapDistance].
+     *
+     * If you're using single page snapping (the most common use case for [Pager]), there won't
+     * be enough space to actually run a decay animation to approach the target page, so the Pager
+     * will always use the snapping animation from [snapAnimationSpec].
+     * If you're using multi-page snapping (this means you're abs(targetPage - currentPage) > 1)
+     * the Pager may use [highVelocityAnimationSpec] or [lowVelocityAnimationSpec] to approach the
+     * targetPage, it will depend on the velocity generated by the triggering gesture.
+     * If the gesture has a high enough velocity to approach the target page, the Pager will use
+     * [highVelocityAnimationSpec] followed by [snapAnimationSpec] for the final step of the
+     * animation. If the gesture doesn't have enough velocity, the Pager will use
+     * [lowVelocityAnimationSpec] + [snapAnimationSpec] in a similar fashion.
+     *
+     * @param state The [PagerState] that controls the which to which this FlingBehavior will
+     * be applied to.
+     * @param pagerSnapDistance A way to control the snapping destination for this [Pager].
+     * The default behavior will result in any fling going to the next page in the direction of the
+     * fling (if the fling has enough velocity, otherwise  the Pager will bounce back). Use
+     * [PagerSnapDistance.atMost] to define a maximum number of pages this [Pager] is allowed to
+     * fling after scrolling is finished and fling has started.
+     * @param lowVelocityAnimationSpec An animation spec used to approach the target offset. When
+     * the fling velocity is not large enough. Large enough means large enough to naturally decay.
+     * When snapping through many pages, the Pager may not be able to run a decay animation, so it
+     * will use this spec to run an animation to approach the target page requested by
+     * [pagerSnapDistance].
+     * @param highVelocityAnimationSpec The animation spec used to approach the target offset. When
+     * the fling velocity is large enough. Large enough means large enough to naturally decay. For
+     * single page snapping this usually never happens since there won't be enough space to run a
+     * decay animation.
+     * @param snapAnimationSpec The animation spec used to finally snap to the position. This
+     * animation will be often used in 2 cases: 1) There was enough space to an approach animation,
+     * the Pager will use [snapAnimationSpec] in the last step of the animation to settle the page
+     * into position. 2) There was not enough space to run the approach animation.
+     * @param snapPositionalThreshold If the fling has a low velocity (e.g. slow scroll),
+     * this fling behavior will use this snap threshold in order to determine if the pager should
+     * snap back or move forward. Use a number between 0 and 1 as a fraction of the page size that
+     * needs to be scrolled before the Pager considers it should move to the next page.
+     * For instance, if snapPositionalThreshold = 0.35, it means if this pager is scrolled with a
+     * slow velocity and the Pager scrolls more than 35% of the page size, then will jump to the
+     * next page, if not it scrolls back.
+     * Note that any fling that has high enough velocity will *always* move to the next page
+     * in the direction of the fling.
+     *
+     * @return An instance of [FlingBehavior] that will perform Snapping to the next page by
+     * default. The animation will be governed by the post scroll velocity and the Pager will use
+     * either
+     * [lowVelocityAnimationSpec] or [highVelocityAnimationSpec] to approach the snapped position
+     * If a velocity is not high enough the pager will use [snapAnimationSpec] to reach the snapped
+     * position. If the velocity is high enough, the Pager will use the logic described in
+     * [highVelocityAnimationSpec] and [lowVelocityAnimationSpec].
+     */
+    @Composable
+    fun flingBehavior(
+        state: PagerState,
+        pagerSnapDistance: PagerSnapDistance = PagerSnapDistance.atMost(1),
+        lowVelocityAnimationSpec: AnimationSpec<Float> = LowVelocityAnimationSpec,
+        highVelocityAnimationSpec: DecayAnimationSpec<Float> = rememberSplineBasedDecay(),
+        snapAnimationSpec: AnimationSpec<Float> = spring(stiffness = Spring.StiffnessMediumLow),
+        @FloatRange(from = 0.0, to = 1.0) snapPositionalThreshold: Float = 0.5f
+    ): SnapFlingBehavior {
+        require(snapPositionalThreshold in 0f..1f) {
+            "snapPositionalThreshold should be a number between 0 and 1. " +
+                "You've specified $snapPositionalThreshold"
+        }
+        val density = LocalDensity.current
+        return remember(
+            state,
+            lowVelocityAnimationSpec,
+            highVelocityAnimationSpec,
+            snapAnimationSpec,
+            pagerSnapDistance,
+            density
+        ) {
+            val snapLayoutInfoProvider =
+                SnapLayoutInfoProvider(
+                    state,
+                    pagerSnapDistance,
+                    highVelocityAnimationSpec,
+                    snapPositionalThreshold
+                )
+
+            SnapFlingBehavior(
+                snapLayoutInfoProvider = snapLayoutInfoProvider,
+                lowVelocityAnimationSpec = lowVelocityAnimationSpec,
+                highVelocityAnimationSpec = highVelocityAnimationSpec,
+                snapAnimationSpec = snapAnimationSpec
+            )
+        }
+    }
+
+    /**
+     * The [AnimationSpec] used by [flingBehavior] in flings with low velocity.
+     */
+    val LowVelocityAnimationSpec: AnimationSpec<Float> =
+        tween(easing = LinearEasing, durationMillis = LowVelocityAnimationDefaultDuration)
+
+    /**
+     * A [SnapFlingBehavior] that will snap pages to the start of the layout. One can use the
+     * given parameters to control how the snapping animation will happen.
+     * @see androidx.compose.foundation.gestures.snapping.SnapFlingBehavior for more information
+     * on what which parameter controls in the overall snapping animation.
+     *
      * The animation specs used by the fling behavior will depend on 3 factors:
      * 1) The gesture velocity.
      * 2) The target page proposed by [pagerSnapDistance].
@@ -334,6 +441,12 @@
      * [snapAnimationSpec] to reach the snapped position. If the velocity is high enough, the Pager
      * will use the logic described in [highVelocityAnimationSpec] and [lowVelocityAnimationSpec].
      */
+    @Suppress("UNUSED_PARAMETER")
+    @Deprecated(
+        "Please use the overload without snapVelocityThreshold. For Pager" +
+            "the functionalities provided by snapVelocityThreshold were already being provided by" +
+            "other APIS."
+    )
     @Composable
     fun flingBehavior(
         state: PagerState,
@@ -346,37 +459,14 @@
         snapAnimationSpec: AnimationSpec<Float> = spring(stiffness = Spring.StiffnessMediumLow),
         snapVelocityThreshold: Dp = MinFlingVelocityDp,
         snapPositionalThreshold: Float = 0.5f
-    ): SnapFlingBehavior {
-        require(snapPositionalThreshold in 0f..1f) {
-            "snapPositionalThreshold should be a number between 0 and 1. " +
-                "You've specified $snapPositionalThreshold"
-        }
-        val density = LocalDensity.current
-        return remember(
-            state,
-            lowVelocityAnimationSpec,
-            highVelocityAnimationSpec,
-            snapAnimationSpec,
-            pagerSnapDistance,
-            density
-        ) {
-            val snapLayoutInfoProvider =
-                SnapLayoutInfoProvider(
-                    state,
-                    pagerSnapDistance,
-                    highVelocityAnimationSpec,
-                    snapPositionalThreshold
-                )
-
-            SnapFlingBehavior(
-                snapLayoutInfoProvider = snapLayoutInfoProvider,
-                lowVelocityAnimationSpec = lowVelocityAnimationSpec,
-                highVelocityAnimationSpec = highVelocityAnimationSpec,
-                snapAnimationSpec = snapAnimationSpec,
-                shortSnapVelocityThreshold = with(density) { snapVelocityThreshold.toPx() }
-            )
-        }
-    }
+    ) = flingBehavior(
+        state,
+        pagerSnapDistance,
+        lowVelocityAnimationSpec,
+        highVelocityAnimationSpec,
+        snapAnimationSpec,
+        snapPositionalThreshold
+    )
 
     /**
      * The default implementation of Pager's pageNestedScrollConnection.
@@ -533,8 +623,10 @@
 
             // If the velocity is not high, use the positional threshold to decide where to go.
             // This is applicable mainly when the user scrolls and lets go without flinging.
-            val finalDistance = when (sign(currentVelocity)) {
-                0f -> {
+            val finalSnappingItem =
+                with(pagerState.density) { calculateFinalSnappingItem(currentVelocity) }
+            val finalDistance = when (finalSnappingItem) {
+                FinalSnappingItem.ClosestItem -> {
                     if (offsetFromSnappedPositionOverflow.absoluteValue > snapPositionalThreshold) {
                         // If we crossed the threshold, go to the next bound
                         if (isForward) upperBoundOffset else lowerBoundOffset
@@ -556,8 +648,8 @@
                     }
                 }
 
-                1f -> upperBoundOffset
-                -1f -> lowerBoundOffset
+                FinalSnappingItem.NextItem -> upperBoundOffset
+                FinalSnappingItem.PreviousItem -> lowerBoundOffset
                 else -> 0f
             }
 
diff --git a/compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/pager/PagerBeyondBoundsModifier.kt b/compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/pager/PagerBeyondBoundsModifier.kt
index 10164bb..e31f8b0 100644
--- a/compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/pager/PagerBeyondBoundsModifier.kt
+++ b/compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/pager/PagerBeyondBoundsModifier.kt
@@ -16,42 +16,18 @@
 package androidx.compose.foundation.pager
 
 import androidx.compose.foundation.ExperimentalFoundationApi
-import androidx.compose.foundation.gestures.Orientation
-import androidx.compose.foundation.lazy.layout.LazyLayoutBeyondBoundsModifierLocal
 import androidx.compose.foundation.lazy.layout.LazyLayoutBeyondBoundsState
 import androidx.compose.runtime.Composable
 import androidx.compose.runtime.remember
-import androidx.compose.ui.Modifier
-import androidx.compose.ui.platform.LocalLayoutDirection
 
-/**
- * This modifier is used to measure and place additional pages when the Pager receives a
- * request to layout pages beyond the visible bounds.
- */
 @OptIn(ExperimentalFoundationApi::class)
-@Suppress("ComposableModifierFactory")
 @Composable
-internal fun Modifier.pagerBeyondBoundsModifier(
+internal fun rememberPagerBeyondBoundsState(
     state: PagerState,
-    beyondBoundsPageCount: Int,
-    reverseLayout: Boolean,
-    orientation: Orientation
-): Modifier {
-    val layoutDirection = LocalLayoutDirection.current
-    return this then remember(
-        state,
-        beyondBoundsPageCount,
-        reverseLayout,
-        layoutDirection,
-        orientation
-    ) {
-        LazyLayoutBeyondBoundsModifierLocal(
-            PagerBeyondBoundsState(state, beyondBoundsPageCount),
-            state.beyondBoundsInfo,
-            reverseLayout,
-            layoutDirection,
-            orientation
-        )
+    beyondBoundsPageCount: Int
+): LazyLayoutBeyondBoundsState {
+    return remember(state, beyondBoundsPageCount) {
+        PagerBeyondBoundsState(state, beyondBoundsPageCount)
     }
 }
 
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/lint/internal-lint-checks/src/main/java/androidx/compose/lint/PlatformReferenceInCommonModuleDetector.kt b/compose/lint/internal-lint-checks/src/main/java/androidx/compose/lint/CommonModuleIncompatibilityDetector.kt
similarity index 67%
rename from compose/lint/internal-lint-checks/src/main/java/androidx/compose/lint/PlatformReferenceInCommonModuleDetector.kt
rename to compose/lint/internal-lint-checks/src/main/java/androidx/compose/lint/CommonModuleIncompatibilityDetector.kt
index 77982f8..bb3582a 100644
--- a/compose/lint/internal-lint-checks/src/main/java/androidx/compose/lint/PlatformReferenceInCommonModuleDetector.kt
+++ b/compose/lint/internal-lint-checks/src/main/java/androidx/compose/lint/CommonModuleIncompatibilityDetector.kt
@@ -26,18 +26,27 @@
 import com.android.tools.lint.detector.api.Severity
 import com.android.tools.lint.detector.api.SourceCodeScanner
 import com.intellij.psi.PsiMethod
+import org.jetbrains.uast.UClass
 import org.jetbrains.uast.UElement
 import org.jetbrains.uast.UImportStatement
+import org.jetbrains.uast.UObjectLiteralExpression
 import org.jetbrains.uast.USimpleNameReferenceExpression
 import org.jetbrains.uast.tryResolve
 
 /**
- * Lint [Detector] that catches platform-dependent references in a common module.
+ * Lint [Detector] that catches patterns that are disallowed in MPP (JS + Native) in common module.
+ * Most Compose modules are compiled only for JVM in AndroidX, so Kotlin compiler doesn't report
+ * these issues.
  */
-class PlatformReferenceInCommonModuleDetector : Detector(), SourceCodeScanner {
+class CommonModuleIncompatibilityDetector : Detector(), SourceCodeScanner {
 
     override fun getApplicableUastTypes(): List<Class<out UElement>> =
-        listOf(UImportStatement::class.java, USimpleNameReferenceExpression::class.java)
+        listOf(
+            UImportStatement::class.java,
+            USimpleNameReferenceExpression::class.java,
+            UClass::class.java,
+            UObjectLiteralExpression::class.java
+        )
 
     override fun createUastHandler(context: JavaContext): UElementHandler {
         if (!context.file.absolutePath.contains(COMMON_MAIN_PATH_PREFIX)) {
@@ -79,6 +88,30 @@
                     )
                 }
             }
+
+            override fun visitClass(node: UClass) {
+                val extendsLambda = node.uastSuperTypes.any { it.type.isLambda() }
+                if (extendsLambda) {
+                    context.report(
+                        EXTENDS_LAMBDA_ISSUE,
+                        node,
+                        context.getLocation(node.nameIdentifier),
+                        "Extending Kotlin lambda interfaces is not allowed in common code"
+                    )
+                }
+            }
+
+            override fun visitObjectLiteralExpression(node: UObjectLiteralExpression) {
+                val extendsLambda = node.declaration.uastSuperTypes.any { it.type.isLambda() }
+                if (extendsLambda) {
+                    context.report(
+                        EXTENDS_LAMBDA_ISSUE,
+                        node,
+                        context.getLocation(node),
+                        "Extending Kotlin lambda interfaces is not allowed in common code"
+                    )
+                }
+            }
         }
     }
 
@@ -94,7 +127,7 @@
             priority = 5,
             severity = Severity.ERROR,
             implementation = Implementation(
-                PlatformReferenceInCommonModuleDetector::class.java,
+                CommonModuleIncompatibilityDetector::class.java,
                 Scope.JAVA_FILE_SCOPE
             )
         )
@@ -110,7 +143,22 @@
             priority = 5,
             severity = Severity.ERROR,
             implementation = Implementation(
-                PlatformReferenceInCommonModuleDetector::class.java,
+                CommonModuleIncompatibilityDetector::class.java,
+                Scope.JAVA_FILE_SCOPE
+            )
+        )
+
+        val EXTENDS_LAMBDA_ISSUE = Issue.create(
+            id = "ExtendedFunctionNInterface",
+            briefDescription = "Extending Kotlin FunctionN interfaces in common code",
+            explanation = "Common Kotlin module are ported to other Kotlin targets, including JS." +
+                " Kotlin JS backend does not support extending lambda interfaces. Consider" +
+                "extending fun interface in common Kotlin code, or use expect/actual instead.",
+            category = Category.CORRECTNESS,
+            priority = 5,
+            severity = Severity.ERROR,
+            implementation = Implementation(
+                CommonModuleIncompatibilityDetector::class.java,
                 Scope.JAVA_FILE_SCOPE
             )
         )
diff --git a/compose/lint/internal-lint-checks/src/main/java/androidx/compose/lint/ComposeIssueRegistry.kt b/compose/lint/internal-lint-checks/src/main/java/androidx/compose/lint/ComposeIssueRegistry.kt
index 2d45800..69b4a4d 100644
--- a/compose/lint/internal-lint-checks/src/main/java/androidx/compose/lint/ComposeIssueRegistry.kt
+++ b/compose/lint/internal-lint-checks/src/main/java/androidx/compose/lint/ComposeIssueRegistry.kt
@@ -33,8 +33,9 @@
             ListIteratorDetector.ISSUE,
             SteppedForLoopDetector.ISSUE,
             UnnecessaryLambdaCreationDetector.ISSUE,
-            PlatformReferenceInCommonModuleDetector.IMPORT_ISSUE,
-            PlatformReferenceInCommonModuleDetector.REFERENCE_ISSUE,
+            CommonModuleIncompatibilityDetector.IMPORT_ISSUE,
+            CommonModuleIncompatibilityDetector.REFERENCE_ISSUE,
+            CommonModuleIncompatibilityDetector.EXTENDS_LAMBDA_ISSUE,
             PrimitiveInCollectionDetector.ISSUE,
             PrimitiveInLambdaDetector.ISSUE,
         )
diff --git a/compose/lint/internal-lint-checks/src/test/java/androidx/compose/lint/PlatformReferenceInCommonModuleDetectorTest.kt b/compose/lint/internal-lint-checks/src/test/java/androidx/compose/lint/CommonModuleIncompatibilityDetectorTest.kt
similarity index 69%
rename from compose/lint/internal-lint-checks/src/test/java/androidx/compose/lint/PlatformReferenceInCommonModuleDetectorTest.kt
rename to compose/lint/internal-lint-checks/src/test/java/androidx/compose/lint/CommonModuleIncompatibilityDetectorTest.kt
index 811a9a1..41970ad 100644
--- a/compose/lint/internal-lint-checks/src/test/java/androidx/compose/lint/PlatformReferenceInCommonModuleDetectorTest.kt
+++ b/compose/lint/internal-lint-checks/src/test/java/androidx/compose/lint/CommonModuleIncompatibilityDetectorTest.kt
@@ -27,12 +27,13 @@
 
 /* ktlint-disable max-line-length */
 @RunWith(JUnit4::class)
-class PlatformReferenceInCommonModuleDetectorTest : LintDetectorTest() {
-    override fun getDetector(): Detector = PlatformReferenceInCommonModuleDetector()
+class CommonModuleIncompatibilityDetectorTest : LintDetectorTest() {
+    override fun getDetector(): Detector = CommonModuleIncompatibilityDetector()
 
     override fun getIssues(): MutableList<Issue> = mutableListOf(
-        PlatformReferenceInCommonModuleDetector.IMPORT_ISSUE,
-        PlatformReferenceInCommonModuleDetector.REFERENCE_ISSUE
+        CommonModuleIncompatibilityDetector.IMPORT_ISSUE,
+        CommonModuleIncompatibilityDetector.REFERENCE_ISSUE,
+        CommonModuleIncompatibilityDetector.EXTENDS_LAMBDA_ISSUE
     )
 
     @Test
@@ -122,6 +123,44 @@
     }
 
     @Test
+    fun detectsLambdaSuperTypeInCommonMain() {
+        val file = kotlin(
+            "commonMain/test/TestFile.kt",
+            """
+                package test
+
+                abstract class Test : () -> Unit
+                interface TestI : () -> Unit
+                class Other : Test, TestI {
+                    override fun invoke() {}
+                }
+                val a = object : () -> Unit {
+                    override fun invoke() {}
+                }
+            """
+        ).within("src")
+
+        lint().files(
+            file
+        )
+            .run()
+            .expect(
+                """
+src/commonMain/test/TestFile.kt:4: Error: Extending Kotlin lambda interfaces is not allowed in common code [ExtendedFunctionNInterface]
+                abstract class Test : () -> Unit
+                               ~~~~
+src/commonMain/test/TestFile.kt:5: Error: Extending Kotlin lambda interfaces is not allowed in common code [ExtendedFunctionNInterface]
+                interface TestI : () -> Unit
+                          ~~~~~
+src/commonMain/test/TestFile.kt:9: Error: Extending Kotlin lambda interfaces is not allowed in common code [ExtendedFunctionNInterface]
+                val a = object : () -> Unit {
+                        ^
+3 errors, 0 warnings
+                """.trimIndent()
+            )
+    }
+
+    @Test
     fun ignoresImportInOtherModules() {
         val jvmFile = kotlin(
             "jvmMain/test/TestFile.kt",
@@ -239,5 +278,64 @@
             .run()
             .expectClean()
     }
+
+    @Test
+    fun ignoreLambdaSuperTypeInPlatformSourceSets() {
+        val jvmFile = kotlin(
+            "jvmMain/test/TestFile.kt",
+            """
+                package test
+
+                abstract class Test : () -> Unit
+                interface TestI : () -> Unit
+                class Other : Test, TestI {
+                    override fun invoke() {}
+                }
+                val a = object : () -> Unit {
+                    override fun invoke() {}
+                }
+            """
+        ).within("src")
+
+        val androidFile = kotlin(
+            "androidMain/test/TestFile.kt",
+            """
+                package test
+
+                abstract class Test : () -> Unit
+                interface TestI : () -> Unit
+                class Other : Test, TestI {
+                    override fun invoke() {}
+                }
+                val a = object : () -> Unit {
+                    override fun invoke() {}
+                }
+            """
+        ).within("src")
+
+        val file = kotlin(
+            "main/test/TestFile.kt",
+            """
+                package test
+
+                abstract class Test : () -> Unit
+                interface TestI : () -> Unit
+                class Other : Test, TestI {
+                    override fun invoke() {}
+                }
+                val a = object : () -> Unit {
+                    override fun invoke() {}
+                }
+            """
+        ).within("src")
+
+        lint().files(
+            jvmFile,
+            androidFile,
+            file
+        )
+            .run()
+            .expectClean()
+    }
 }
 /* ktlint-enable max-line-length */
diff --git a/compose/material/material-ripple/benchmark/build.gradle b/compose/material/material-ripple/benchmark/build.gradle
index ef1a72f..9d66e6f 100644
--- a/compose/material/material-ripple/benchmark/build.gradle
+++ b/compose/material/material-ripple/benchmark/build.gradle
@@ -40,10 +40,6 @@
 
 android {
     namespace "androidx.compose.material.ripple.benchmark"
-    defaultConfig {
-        // must be one of: 'None', 'StackSampling', or 'MethodTracing'
-        testInstrumentationRunnerArguments["androidx.benchmark.profiling.mode"]= 'None'
-    }
 }
 
 androidx {
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/build.gradle b/compose/material3/benchmark/build.gradle
index df3e144..490c06c 100644
--- a/compose/material3/benchmark/build.gradle
+++ b/compose/material3/benchmark/build.gradle
@@ -26,6 +26,8 @@
 
     androidTestImplementation(project(":compose:material:material-icons-core"))
     androidTestImplementation(project(":compose:material3:material3"))
+    androidTestImplementation(project(":compose:material3:material3-adaptive"))
+    androidTestImplementation(project(":compose:material3:material3-window-size-class"))
     androidTestImplementation(project(":benchmark:benchmark-junit4"))
     androidTestImplementation(project(":compose:runtime:runtime"))
     androidTestImplementation(project(":compose:benchmark-utils"))
diff --git a/compose/material3/benchmark/src/androidTest/java/androidx/compose/material3/benchmark/NavigationSuiteScaffoldBenchmarkTest.kt b/compose/material3/benchmark/src/androidTest/java/androidx/compose/material3/benchmark/NavigationSuiteScaffoldBenchmarkTest.kt
new file mode 100644
index 0000000..2eb3cec
--- /dev/null
+++ b/compose/material3/benchmark/src/androidTest/java/androidx/compose/material3/benchmark/NavigationSuiteScaffoldBenchmarkTest.kt
@@ -0,0 +1,96 @@
+/*
+ * 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.material3.benchmark
+
+import androidx.compose.foundation.layout.Spacer
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.MaterialTheme
+import androidx.compose.material3.adaptive.ExperimentalMaterial3AdaptiveApi
+import androidx.compose.material3.adaptive.NavigationSuiteScaffold
+import androidx.compose.runtime.Composable
+import androidx.compose.runtime.MutableIntState
+import androidx.compose.runtime.mutableIntStateOf
+import androidx.compose.runtime.remember
+import androidx.compose.testutils.LayeredComposeTestCase
+import androidx.compose.testutils.ToggleableTestCase
+import androidx.compose.testutils.benchmark.ComposeBenchmarkRule
+import androidx.compose.testutils.benchmark.benchmarkFirstCompose
+import androidx.compose.testutils.benchmark.toggleStateBenchmarkComposeMeasureLayout
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.unit.dp
+import org.junit.Rule
+import org.junit.Test
+
+class NavigationSuiteScaffoldBenchmarkTest {
+    @get:Rule
+    val benchmarkRule = ComposeBenchmarkRule()
+
+    private val testCaseFactory = { NavigationSuiteScaffoldTestCase() }
+    @Test
+    fun firstPixel() {
+        benchmarkRule.benchmarkFirstRenderUntilStable(testCaseFactory)
+    }
+
+    @Test
+    fun firstCompose() {
+        benchmarkRule.benchmarkFirstCompose(testCaseFactory)
+    }
+
+    @Test
+    fun changeSelection() {
+        benchmarkRule.toggleStateBenchmarkComposeMeasureLayout(
+            testCaseFactory,
+            assertOneRecomposition = false,
+        )
+    }
+}
+
+@OptIn(ExperimentalMaterial3AdaptiveApi::class)
+internal class NavigationSuiteScaffoldTestCase : LayeredComposeTestCase(), ToggleableTestCase {
+    private lateinit var selectedIndexState: MutableIntState
+
+    @Composable
+    override fun MeasuredContent() {
+        selectedIndexState = remember { mutableIntStateOf(0) }
+
+        NavigationSuiteScaffold(
+            navigationSuiteItems = {
+                item(
+                    selected = selectedIndexState.value == 0,
+                    onClick = {},
+                    icon = { Spacer(Modifier.size(24.dp)) }
+                )
+                item(
+                    selected = selectedIndexState.value == 1,
+                    onClick = {},
+                    icon = { Spacer(Modifier.size(24.dp)) }
+                )
+            }
+        )
+    }
+
+    @Composable
+    override fun ContentWrappers(content: @Composable () -> Unit) {
+        MaterialTheme {
+            content()
+        }
+    }
+
+    override fun toggleState() {
+        selectedIndexState.value = if (selectedIndexState.value == 0) 1 else 0
+    }
+}
diff --git a/compose/material3/benchmark/src/androidTest/java/androidx/compose/material3/benchmark/ProgressIndicatorBenchmark.kt b/compose/material3/benchmark/src/androidTest/java/androidx/compose/material3/benchmark/ProgressIndicatorBenchmark.kt
new file mode 100644
index 0000000..0a8e117
--- /dev/null
+++ b/compose/material3/benchmark/src/androidTest/java/androidx/compose/material3/benchmark/ProgressIndicatorBenchmark.kt
@@ -0,0 +1,92 @@
+/*
+ * 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.material3.benchmark
+
+import androidx.compose.material3.CircularProgressIndicator
+import androidx.compose.material3.LinearProgressIndicator
+import androidx.compose.material3.MaterialTheme
+import androidx.compose.runtime.Composable
+import androidx.compose.runtime.MutableFloatState
+import androidx.compose.runtime.mutableFloatStateOf
+import androidx.compose.runtime.remember
+import androidx.compose.testutils.LayeredComposeTestCase
+import androidx.compose.testutils.ToggleableTestCase
+import androidx.compose.testutils.benchmark.ComposeBenchmarkRule
+import androidx.compose.testutils.benchmark.benchmarkToFirstPixel
+import androidx.compose.testutils.benchmark.toggleStateBenchmarkComposeMeasureLayout
+import androidx.test.filters.MediumTest
+import org.junit.Rule
+import org.junit.Test
+import org.junit.runner.RunWith
+import org.junit.runners.Parameterized
+
+@MediumTest
+@RunWith(Parameterized::class)
+class ProgressIndicatorBenchmark(private val type: ProgressIndicatorType) {
+    companion object {
+        @Parameterized.Parameters(name = "{0}")
+        @JvmStatic
+        fun parameters() = ProgressIndicatorType.values()
+    }
+
+    @get:Rule
+    val benchmarkRule = ComposeBenchmarkRule()
+
+    private val testCaseFactory = { ProgressIndicatorTestCase(type) }
+
+    @Test
+    fun firstPixel() {
+        benchmarkRule.benchmarkToFirstPixel(testCaseFactory)
+    }
+
+    @Test
+    fun changeProgress() {
+        benchmarkRule.toggleStateBenchmarkComposeMeasureLayout(testCaseFactory)
+    }
+}
+internal class ProgressIndicatorTestCase(
+    private val type: ProgressIndicatorType
+) : LayeredComposeTestCase(), ToggleableTestCase {
+    private lateinit var state: MutableFloatState
+
+    @Composable
+    override fun MeasuredContent() {
+        state = remember { mutableFloatStateOf(0f) }
+
+        when (type) {
+            ProgressIndicatorType.Linear ->
+                LinearProgressIndicator(progress = state.value)
+            ProgressIndicatorType.Circular ->
+                CircularProgressIndicator(progress = state.value)
+        }
+    }
+
+    @Composable
+    override fun ContentWrappers(content: @Composable () -> Unit) {
+        MaterialTheme {
+            content()
+        }
+    }
+
+    override fun toggleState() {
+        state.value = if (state.value == 0f) 0.5f else 0.0f
+    }
+}
+
+enum class ProgressIndicatorType {
+    Linear, Circular
+}
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..1880771 100644
--- a/compose/material3/material3-adaptive/api/current.txt
+++ b/compose/material3/material3-adaptive/api/current.txt
@@ -12,7 +12,7 @@
   }
 
   @SuppressCompatibility @androidx.compose.material3.adaptive.ExperimentalMaterial3AdaptiveApi @androidx.compose.runtime.Immutable public final class AdaptiveLayoutDirective {
-    ctor public AdaptiveLayoutDirective(int maxHorizontalPartitions, androidx.compose.material3.adaptive.GutterSizes gutterSizes, optional int maxVerticalPartitions, optional java.util.List<androidx.compose.ui.geometry.Rect> excludedBounds);
+    ctor public AdaptiveLayoutDirective(int maxHorizontalPartitions, androidx.compose.material3.adaptive.GutterSizes gutterSizes, int maxVerticalPartitions, java.util.List<androidx.compose.ui.geometry.Rect> excludedBounds);
     method public java.util.List<androidx.compose.ui.geometry.Rect> getExcludedBounds();
     method public androidx.compose.material3.adaptive.GutterSizes getGutterSizes();
     method public int getMaxHorizontalPartitions();
@@ -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..1880771 100644
--- a/compose/material3/material3-adaptive/api/restricted_current.txt
+++ b/compose/material3/material3-adaptive/api/restricted_current.txt
@@ -12,7 +12,7 @@
   }
 
   @SuppressCompatibility @androidx.compose.material3.adaptive.ExperimentalMaterial3AdaptiveApi @androidx.compose.runtime.Immutable public final class AdaptiveLayoutDirective {
-    ctor public AdaptiveLayoutDirective(int maxHorizontalPartitions, androidx.compose.material3.adaptive.GutterSizes gutterSizes, optional int maxVerticalPartitions, optional java.util.List<androidx.compose.ui.geometry.Rect> excludedBounds);
+    ctor public AdaptiveLayoutDirective(int maxHorizontalPartitions, androidx.compose.material3.adaptive.GutterSizes gutterSizes, int maxVerticalPartitions, java.util.List<androidx.compose.ui.geometry.Rect> excludedBounds);
     method public java.util.List<androidx.compose.ui.geometry.Rect> getExcludedBounds();
     method public androidx.compose.material3.adaptive.GutterSizes getGutterSizes();
     method public int getMaxHorizontalPartitions();
@@ -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/androidInstrumentedTest/kotlin/androidx/compose/material3/adaptive/ListDetailPaneScaffoldStateTest.kt b/compose/material3/material3-adaptive/src/androidInstrumentedTest/kotlin/androidx/compose/material3/adaptive/ListDetailPaneScaffoldStateTest.kt
index f1d5f60..2b8e76d 100644
--- a/compose/material3/material3-adaptive/src/androidInstrumentedTest/kotlin/androidx/compose/material3/adaptive/ListDetailPaneScaffoldStateTest.kt
+++ b/compose/material3/material3-adaptive/src/androidInstrumentedTest/kotlin/androidx/compose/material3/adaptive/ListDetailPaneScaffoldStateTest.kt
@@ -181,11 +181,15 @@
 @OptIn(ExperimentalMaterial3AdaptiveApi::class)
 private val MockSinglePaneLayoutDirective = AdaptiveLayoutDirective(
     maxHorizontalPartitions = 1,
-    gutterSizes = GutterSizes(0.dp, 0.dp)
+    gutterSizes = GutterSizes(0.dp, 0.dp),
+    maxVerticalPartitions = 1,
+    excludedBounds = emptyList()
 )
 
 @OptIn(ExperimentalMaterial3AdaptiveApi::class)
 private val MockDualPaneLayoutDirective = AdaptiveLayoutDirective(
     maxHorizontalPartitions = 2,
-    gutterSizes = GutterSizes(16.dp, 16.dp)
+    gutterSizes = GutterSizes(16.dp, 16.dp),
+    maxVerticalPartitions = 1,
+    excludedBounds = emptyList()
 )
diff --git a/compose/material3/material3-adaptive/src/androidInstrumentedTest/kotlin/androidx/compose/material3/adaptive/ThreePaneScaffoldTest.kt b/compose/material3/material3-adaptive/src/androidInstrumentedTest/kotlin/androidx/compose/material3/adaptive/ThreePaneScaffoldTest.kt
index 2242806..4b175bf 100644
--- a/compose/material3/material3-adaptive/src/androidInstrumentedTest/kotlin/androidx/compose/material3/adaptive/ThreePaneScaffoldTest.kt
+++ b/compose/material3/material3-adaptive/src/androidInstrumentedTest/kotlin/androidx/compose/material3/adaptive/ThreePaneScaffoldTest.kt
@@ -106,7 +106,9 @@
 @OptIn(ExperimentalMaterial3AdaptiveApi::class)
 private val MockLayoutDirective = AdaptiveLayoutDirective(
     maxHorizontalPartitions = 1,
-    gutterSizes = GutterSizes(0.dp, 0.dp)
+    gutterSizes = GutterSizes(0.dp, 0.dp),
+    maxVerticalPartitions = 1,
+    excludedBounds = emptyList()
 )
 
 internal const val ThreePaneScaffoldTestTag = "SampleThreePaneScaffold"
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/AdaptiveLayoutDirective.kt b/compose/material3/material3-adaptive/src/commonMain/kotlin/androidx/compose/material3/adaptive/AdaptiveLayoutDirective.kt
index 9fc0544..d012a95a 100644
--- a/compose/material3/material3-adaptive/src/commonMain/kotlin/androidx/compose/material3/adaptive/AdaptiveLayoutDirective.kt
+++ b/compose/material3/material3-adaptive/src/commonMain/kotlin/androidx/compose/material3/adaptive/AdaptiveLayoutDirective.kt
@@ -172,8 +172,8 @@
 class AdaptiveLayoutDirective(
     val maxHorizontalPartitions: Int,
     val gutterSizes: GutterSizes,
-    val maxVerticalPartitions: Int = 1,
-    val excludedBounds: List<Rect> = emptyList()
+    val maxVerticalPartitions: Int,
+    val excludedBounds: List<Rect>
 ) {
     override fun equals(other: Any?): Boolean {
         if (this === other) return true
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..c165fdb 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);
   }
@@ -491,9 +493,11 @@
     method @androidx.compose.runtime.Composable public void DatePickerTitle(int displayMode, optional androidx.compose.ui.Modifier modifier);
     method @androidx.compose.runtime.Composable public androidx.compose.material3.DatePickerColors colors(optional long containerColor, optional long titleContentColor, optional long headlineContentColor, optional long weekdayContentColor, optional long subheadContentColor, optional long navigationContentColor, optional long yearContentColor, optional long disabledYearContentColor, optional long currentYearContentColor, optional long selectedYearContentColor, optional long disabledSelectedYearContentColor, optional long selectedYearContainerColor, optional long disabledSelectedYearContainerColor, optional long dayContentColor, optional long disabledDayContentColor, optional long selectedDayContentColor, optional long disabledSelectedDayContentColor, optional long selectedDayContainerColor, optional long disabledSelectedDayContainerColor, optional long todayContentColor, optional long todayDateBorderColor, optional long dayInSelectionRangeContentColor, optional long dayInSelectionRangeContainerColor, optional long dividerColor, optional androidx.compose.material3.TextFieldColors dateTextFieldColors);
     method public androidx.compose.material3.DatePickerFormatter dateFormatter(optional String yearSelectionSkeleton, optional String selectedDateSkeleton, optional String selectedDateDescriptionSkeleton);
+    method public androidx.compose.material3.SelectableDates getAllDates();
     method @androidx.compose.runtime.Composable public androidx.compose.ui.graphics.Shape getShape();
     method public float getTonalElevation();
     method public kotlin.ranges.IntRange getYearRange();
+    property public final androidx.compose.material3.SelectableDates AllDates;
     property public final float TonalElevation;
     property public final kotlin.ranges.IntRange YearRange;
     property @androidx.compose.runtime.Composable public final androidx.compose.ui.graphics.Shape shape;
@@ -514,6 +518,7 @@
 
   public final class DatePickerKt {
     method @SuppressCompatibility @androidx.compose.material3.ExperimentalMaterial3Api @androidx.compose.runtime.Composable public static void DatePicker(androidx.compose.material3.DatePickerState state, optional androidx.compose.ui.Modifier modifier, optional androidx.compose.material3.DatePickerFormatter dateFormatter, optional kotlin.jvm.functions.Function0<kotlin.Unit>? title, optional kotlin.jvm.functions.Function0<kotlin.Unit>? headline, optional boolean showModeToggle, optional androidx.compose.material3.DatePickerColors colors);
+    method @SuppressCompatibility @androidx.compose.material3.ExperimentalMaterial3Api public static androidx.compose.material3.DatePickerState DatePickerState(java.util.Locale locale, optional Long? initialSelectedDateMillis, optional Long? initialDisplayedMonthMillis, optional kotlin.ranges.IntRange yearRange, optional int initialDisplayMode, optional androidx.compose.material3.SelectableDates selectableDates);
     method @SuppressCompatibility @androidx.compose.material3.ExperimentalMaterial3Api @androidx.compose.runtime.Composable public static androidx.compose.material3.DatePickerState rememberDatePickerState(optional Long? initialSelectedDateMillis, optional Long? initialDisplayedMonthMillis, optional kotlin.ranges.IntRange yearRange, optional int initialDisplayMode, optional androidx.compose.material3.SelectableDates selectableDates);
   }
 
@@ -541,6 +546,7 @@
 
   public final class DateRangePickerKt {
     method @SuppressCompatibility @androidx.compose.material3.ExperimentalMaterial3Api @androidx.compose.runtime.Composable public static void DateRangePicker(androidx.compose.material3.DateRangePickerState state, optional androidx.compose.ui.Modifier modifier, optional androidx.compose.material3.DatePickerFormatter dateFormatter, optional kotlin.jvm.functions.Function0<kotlin.Unit>? title, optional kotlin.jvm.functions.Function0<kotlin.Unit>? headline, optional boolean showModeToggle, optional androidx.compose.material3.DatePickerColors colors);
+    method @SuppressCompatibility @androidx.compose.material3.ExperimentalMaterial3Api public static androidx.compose.material3.DateRangePickerState DateRangePickerState(java.util.Locale locale, optional Long? initialSelectedStartDateMillis, optional Long? initialSelectedEndDateMillis, optional Long? initialDisplayedMonthMillis, optional kotlin.ranges.IntRange yearRange, optional int initialDisplayMode, optional androidx.compose.material3.SelectableDates selectableDates);
     method @SuppressCompatibility @androidx.compose.material3.ExperimentalMaterial3Api @androidx.compose.runtime.Composable public static androidx.compose.material3.DateRangePickerState rememberDateRangePickerState(optional Long? initialSelectedStartDateMillis, optional Long? initialSelectedEndDateMillis, optional Long? initialDisplayedMonthMillis, optional kotlin.ranges.IntRange yearRange, optional int initialDisplayMode, optional androidx.compose.material3.SelectableDates selectableDates);
   }
 
@@ -648,21 +654,23 @@
 
   @androidx.compose.runtime.Stable public final class DrawerState {
     ctor public DrawerState(androidx.compose.material3.DrawerValue initialValue, optional kotlin.jvm.functions.Function1<? super androidx.compose.material3.DrawerValue,java.lang.Boolean> confirmStateChange);
-    method public suspend Object? animateTo(androidx.compose.material3.DrawerValue targetValue, androidx.compose.animation.core.AnimationSpec<java.lang.Float> anim, kotlin.coroutines.Continuation<? super kotlin.Unit>);
+    method @Deprecated public suspend Object? animateTo(androidx.compose.material3.DrawerValue targetValue, androidx.compose.animation.core.AnimationSpec<java.lang.Float> anim, kotlin.coroutines.Continuation<? super kotlin.Unit>);
     method public suspend Object? close(kotlin.coroutines.Continuation<? super kotlin.Unit>);
+    method public float getCurrentOffset();
     method public androidx.compose.material3.DrawerValue getCurrentValue();
-    method public androidx.compose.runtime.State<java.lang.Float> getOffset();
+    method @Deprecated public androidx.compose.runtime.State<java.lang.Float> getOffset();
     method public androidx.compose.material3.DrawerValue getTargetValue();
     method public boolean isAnimationRunning();
     method public boolean isClosed();
     method public boolean isOpen();
     method public suspend Object? open(kotlin.coroutines.Continuation<? super kotlin.Unit>);
     method public suspend Object? snapTo(androidx.compose.material3.DrawerValue targetValue, kotlin.coroutines.Continuation<? super kotlin.Unit>);
+    property public final float currentOffset;
     property public final androidx.compose.material3.DrawerValue currentValue;
     property public final boolean isAnimationRunning;
     property public final boolean isClosed;
     property public final boolean isOpen;
-    property public final androidx.compose.runtime.State<java.lang.Float> offset;
+    property @Deprecated public final androidx.compose.runtime.State<java.lang.Float> offset;
     property public final androidx.compose.material3.DrawerValue targetValue;
     field public static final androidx.compose.material3.DrawerState.Companion Companion;
   }
@@ -951,7 +959,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 +1615,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..c165fdb 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);
   }
@@ -491,9 +493,11 @@
     method @androidx.compose.runtime.Composable public void DatePickerTitle(int displayMode, optional androidx.compose.ui.Modifier modifier);
     method @androidx.compose.runtime.Composable public androidx.compose.material3.DatePickerColors colors(optional long containerColor, optional long titleContentColor, optional long headlineContentColor, optional long weekdayContentColor, optional long subheadContentColor, optional long navigationContentColor, optional long yearContentColor, optional long disabledYearContentColor, optional long currentYearContentColor, optional long selectedYearContentColor, optional long disabledSelectedYearContentColor, optional long selectedYearContainerColor, optional long disabledSelectedYearContainerColor, optional long dayContentColor, optional long disabledDayContentColor, optional long selectedDayContentColor, optional long disabledSelectedDayContentColor, optional long selectedDayContainerColor, optional long disabledSelectedDayContainerColor, optional long todayContentColor, optional long todayDateBorderColor, optional long dayInSelectionRangeContentColor, optional long dayInSelectionRangeContainerColor, optional long dividerColor, optional androidx.compose.material3.TextFieldColors dateTextFieldColors);
     method public androidx.compose.material3.DatePickerFormatter dateFormatter(optional String yearSelectionSkeleton, optional String selectedDateSkeleton, optional String selectedDateDescriptionSkeleton);
+    method public androidx.compose.material3.SelectableDates getAllDates();
     method @androidx.compose.runtime.Composable public androidx.compose.ui.graphics.Shape getShape();
     method public float getTonalElevation();
     method public kotlin.ranges.IntRange getYearRange();
+    property public final androidx.compose.material3.SelectableDates AllDates;
     property public final float TonalElevation;
     property public final kotlin.ranges.IntRange YearRange;
     property @androidx.compose.runtime.Composable public final androidx.compose.ui.graphics.Shape shape;
@@ -514,6 +518,7 @@
 
   public final class DatePickerKt {
     method @SuppressCompatibility @androidx.compose.material3.ExperimentalMaterial3Api @androidx.compose.runtime.Composable public static void DatePicker(androidx.compose.material3.DatePickerState state, optional androidx.compose.ui.Modifier modifier, optional androidx.compose.material3.DatePickerFormatter dateFormatter, optional kotlin.jvm.functions.Function0<kotlin.Unit>? title, optional kotlin.jvm.functions.Function0<kotlin.Unit>? headline, optional boolean showModeToggle, optional androidx.compose.material3.DatePickerColors colors);
+    method @SuppressCompatibility @androidx.compose.material3.ExperimentalMaterial3Api public static androidx.compose.material3.DatePickerState DatePickerState(java.util.Locale locale, optional Long? initialSelectedDateMillis, optional Long? initialDisplayedMonthMillis, optional kotlin.ranges.IntRange yearRange, optional int initialDisplayMode, optional androidx.compose.material3.SelectableDates selectableDates);
     method @SuppressCompatibility @androidx.compose.material3.ExperimentalMaterial3Api @androidx.compose.runtime.Composable public static androidx.compose.material3.DatePickerState rememberDatePickerState(optional Long? initialSelectedDateMillis, optional Long? initialDisplayedMonthMillis, optional kotlin.ranges.IntRange yearRange, optional int initialDisplayMode, optional androidx.compose.material3.SelectableDates selectableDates);
   }
 
@@ -541,6 +546,7 @@
 
   public final class DateRangePickerKt {
     method @SuppressCompatibility @androidx.compose.material3.ExperimentalMaterial3Api @androidx.compose.runtime.Composable public static void DateRangePicker(androidx.compose.material3.DateRangePickerState state, optional androidx.compose.ui.Modifier modifier, optional androidx.compose.material3.DatePickerFormatter dateFormatter, optional kotlin.jvm.functions.Function0<kotlin.Unit>? title, optional kotlin.jvm.functions.Function0<kotlin.Unit>? headline, optional boolean showModeToggle, optional androidx.compose.material3.DatePickerColors colors);
+    method @SuppressCompatibility @androidx.compose.material3.ExperimentalMaterial3Api public static androidx.compose.material3.DateRangePickerState DateRangePickerState(java.util.Locale locale, optional Long? initialSelectedStartDateMillis, optional Long? initialSelectedEndDateMillis, optional Long? initialDisplayedMonthMillis, optional kotlin.ranges.IntRange yearRange, optional int initialDisplayMode, optional androidx.compose.material3.SelectableDates selectableDates);
     method @SuppressCompatibility @androidx.compose.material3.ExperimentalMaterial3Api @androidx.compose.runtime.Composable public static androidx.compose.material3.DateRangePickerState rememberDateRangePickerState(optional Long? initialSelectedStartDateMillis, optional Long? initialSelectedEndDateMillis, optional Long? initialDisplayedMonthMillis, optional kotlin.ranges.IntRange yearRange, optional int initialDisplayMode, optional androidx.compose.material3.SelectableDates selectableDates);
   }
 
@@ -648,21 +654,23 @@
 
   @androidx.compose.runtime.Stable public final class DrawerState {
     ctor public DrawerState(androidx.compose.material3.DrawerValue initialValue, optional kotlin.jvm.functions.Function1<? super androidx.compose.material3.DrawerValue,java.lang.Boolean> confirmStateChange);
-    method public suspend Object? animateTo(androidx.compose.material3.DrawerValue targetValue, androidx.compose.animation.core.AnimationSpec<java.lang.Float> anim, kotlin.coroutines.Continuation<? super kotlin.Unit>);
+    method @Deprecated public suspend Object? animateTo(androidx.compose.material3.DrawerValue targetValue, androidx.compose.animation.core.AnimationSpec<java.lang.Float> anim, kotlin.coroutines.Continuation<? super kotlin.Unit>);
     method public suspend Object? close(kotlin.coroutines.Continuation<? super kotlin.Unit>);
+    method public float getCurrentOffset();
     method public androidx.compose.material3.DrawerValue getCurrentValue();
-    method public androidx.compose.runtime.State<java.lang.Float> getOffset();
+    method @Deprecated public androidx.compose.runtime.State<java.lang.Float> getOffset();
     method public androidx.compose.material3.DrawerValue getTargetValue();
     method public boolean isAnimationRunning();
     method public boolean isClosed();
     method public boolean isOpen();
     method public suspend Object? open(kotlin.coroutines.Continuation<? super kotlin.Unit>);
     method public suspend Object? snapTo(androidx.compose.material3.DrawerValue targetValue, kotlin.coroutines.Continuation<? super kotlin.Unit>);
+    property public final float currentOffset;
     property public final androidx.compose.material3.DrawerValue currentValue;
     property public final boolean isAnimationRunning;
     property public final boolean isClosed;
     property public final boolean isOpen;
-    property public final androidx.compose.runtime.State<java.lang.Float> offset;
+    property @Deprecated public final androidx.compose.runtime.State<java.lang.Float> offset;
     property public final androidx.compose.material3.DrawerValue targetValue;
     field public static final androidx.compose.material3.DrawerState.Companion Companion;
   }
@@ -951,7 +959,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 +1615,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/CalendarModelTest.kt b/compose/material3/material3/src/androidInstrumentedTest/kotlin/androidx/compose/material3/CalendarModelTest.kt
index c7e969b..cab8791 100644
--- a/compose/material3/material3/src/androidInstrumentedTest/kotlin/androidx/compose/material3/CalendarModelTest.kt
+++ b/compose/material3/material3/src/androidInstrumentedTest/kotlin/androidx/compose/material3/CalendarModelTest.kt
@@ -137,6 +137,49 @@
     }
 
     @Test
+    fun formatWithSkeleton() {
+        // Format twice to check that the formatter is outputting the right values, and that it's
+        // not failing due to cache issues.
+        var formatted = formatWithSkeleton(
+            January2022Millis,
+            DatePickerDefaults.YearMonthWeekdayDaySkeleton,
+            Locale.US,
+            cache = mutableMapOf()
+        )
+        assertThat(formatted).isEqualTo("Saturday, January 1, 2022")
+
+        formatted = formatWithSkeleton(
+            January2022Millis - 1000000000,
+            DatePickerDefaults.YearMonthWeekdayDaySkeleton,
+            Locale.US,
+            cache = mutableMapOf()
+        )
+        assertThat(formatted).isEqualTo("Monday, December 20, 2021")
+    }
+
+    @SdkSuppress(minSdkVersion = Build.VERSION_CODES.M)
+    @Test
+    fun formatWithSkeletonProducingEqualPattern() {
+        // Format twice to check that the formatter is outputting the right values, and that it's
+        // not failing due to cache issues.
+        var formatted = formatWithSkeleton(
+            January2022Millis,
+            skeleton = "YY",
+            Locale.US,
+            cache = mutableMapOf()
+        )
+        assertThat(formatted).isEqualTo("22")
+
+        formatted = formatWithSkeleton(
+            January2022Millis - 1000000000,
+            "YY",
+            Locale.US,
+            cache = mutableMapOf()
+        )
+        assertThat(formatted).isEqualTo("21")
+    }
+
+    @Test
     fun weekdayNames() {
         // Ensure we are running on a US locale for this test.
         Locale.setDefault(Locale.US)
diff --git a/compose/material3/material3/src/androidInstrumentedTest/kotlin/androidx/compose/material3/DatePickerTest.kt b/compose/material3/material3/src/androidInstrumentedTest/kotlin/androidx/compose/material3/DatePickerTest.kt
index af0ce1f..c1fb453 100644
--- a/compose/material3/material3/src/androidInstrumentedTest/kotlin/androidx/compose/material3/DatePickerTest.kt
+++ b/compose/material3/material3/src/androidInstrumentedTest/kotlin/androidx/compose/material3/DatePickerTest.kt
@@ -304,6 +304,24 @@
     }
 
     @Test
+    fun state_initWithoutRemember() {
+        val datePickerState = DatePickerState(
+            locale = Locale.getDefault(),
+            initialSelectedDateMillis = 1649721600000L // 04/12/2022
+        )
+        with(datePickerState) {
+            assertThat(selectedDateMillis).isEqualTo(1649721600000L)
+            // Using the JVM Locale.getDefault() for testing purposes only.
+            assertThat(displayedMonthMillis).isEqualTo(
+                createCalendarModel(Locale.getDefault()).getMonth(
+                    year = 2022,
+                    month = 4
+                ).startUtcTimeMillis
+            )
+        }
+    }
+
+    @Test
     fun state_initWithSelectedDate() {
         lateinit var datePickerState: DatePickerState
         rule.setMaterialContent(lightColorScheme()) {
diff --git a/compose/material3/material3/src/androidInstrumentedTest/kotlin/androidx/compose/material3/DateRangePickerTest.kt b/compose/material3/material3/src/androidInstrumentedTest/kotlin/androidx/compose/material3/DateRangePickerTest.kt
index 31a1186..3eae52d 100644
--- a/compose/material3/material3/src/androidInstrumentedTest/kotlin/androidx/compose/material3/DateRangePickerTest.kt
+++ b/compose/material3/material3/src/androidInstrumentedTest/kotlin/androidx/compose/material3/DateRangePickerTest.kt
@@ -44,6 +44,26 @@
     val rule = createComposeRule()
 
     @Test
+    fun state_initWithoutRemember() {
+        val dateRangePickerState = DateRangePickerState(
+            locale = Locale.getDefault(),
+            initialSelectedStartDateMillis = 1649721600000L, // 04/12/2022
+            initialSelectedEndDateMillis = 1649721600000L + MillisecondsIn24Hours // 04/13/2022
+        )
+        with(dateRangePickerState) {
+            assertThat(selectedStartDateMillis).isEqualTo(1649721600000L)
+            assertThat(selectedEndDateMillis).isEqualTo(1649721600000L + MillisecondsIn24Hours)
+            assertThat(displayedMonthMillis).isEqualTo(
+                // Using the JVM Locale.getDefault() for testing purposes only.
+                createCalendarModel(Locale.getDefault()).getMonth(
+                    year = 2022,
+                    month = 4
+                ).startUtcTimeMillis
+            )
+        }
+    }
+
+    @Test
     fun state_initWithSelectedDates() {
         lateinit var dateRangePickerState: DateRangePickerState
         rule.setMaterialContent(lightColorScheme()) {
diff --git a/compose/material3/material3/src/androidInstrumentedTest/kotlin/androidx/compose/material3/DismissibleNavigationDrawerTest.kt b/compose/material3/material3/src/androidInstrumentedTest/kotlin/androidx/compose/material3/DismissibleNavigationDrawerTest.kt
index 192db1e..8ae5a45 100644
--- a/compose/material3/material3/src/androidInstrumentedTest/kotlin/androidx/compose/material3/DismissibleNavigationDrawerTest.kt
+++ b/compose/material3/material3/src/androidInstrumentedTest/kotlin/androidx/compose/material3/DismissibleNavigationDrawerTest.kt
@@ -58,13 +58,12 @@
 
 @MediumTest
 @RunWith(AndroidJUnit4::class)
-@OptIn(ExperimentalMaterial3Api::class)
 class DismissibleNavigationDrawerTest {
 
     @get:Rule
     val rule = createComposeRule()
 
-    val NavigationDrawerWidth = NavigationDrawerTokens.ContainerWidth
+    private val NavigationDrawerWidth = NavigationDrawerTokens.ContainerWidth
 
     @Test
     fun dismissibleNavigationDrawer_testOffset_whenOpen() {
@@ -244,11 +243,13 @@
         rule.onNodeWithTag(DrawerTestTag).assertLeftPositionInRootIsEqualTo(-NavigationDrawerWidth)
 
         // When the drawer state is set to Opened
+        @Suppress("DEPRECATION") // animateTo is deprecated, but we are testing it
         drawerState.animateTo(DrawerValue.Open, TweenSpec())
         // Then the drawer should be opened
         rule.onNodeWithTag(DrawerTestTag).assertLeftPositionInRootIsEqualTo(0.dp)
 
         // When the drawer state is set to Closed
+        @Suppress("DEPRECATION") // animateTo is deprecated, but we are testing it
         drawerState.animateTo(DrawerValue.Closed, TweenSpec())
         // Then the drawer should be closed
         rule.onNodeWithTag(DrawerTestTag).assertLeftPositionInRootIsEqualTo(-NavigationDrawerWidth)
@@ -560,4 +561,4 @@
         }
 }
 
-private val DrawerTestTag = "drawer"
+private const val DrawerTestTag = "drawer"
diff --git a/compose/material3/material3/src/androidInstrumentedTest/kotlin/androidx/compose/material3/ExposedDropdownMenuTest.kt b/compose/material3/material3/src/androidInstrumentedTest/kotlin/androidx/compose/material3/ExposedDropdownMenuTest.kt
index 347ce70..f765c01 100644
--- a/compose/material3/material3/src/androidInstrumentedTest/kotlin/androidx/compose/material3/ExposedDropdownMenuTest.kt
+++ b/compose/material3/material3/src/androidInstrumentedTest/kotlin/androidx/compose/material3/ExposedDropdownMenuTest.kt
@@ -16,10 +16,6 @@
 
 package androidx.compose.material3
 
-import android.app.Activity
-import android.content.Context
-import android.content.ContextWrapper
-import android.view.WindowManager
 import android.widget.FrameLayout
 import androidx.compose.foundation.ScrollState
 import androidx.compose.foundation.gestures.animateScrollBy
@@ -34,7 +30,6 @@
 import androidx.compose.foundation.rememberScrollState
 import androidx.compose.foundation.verticalScroll
 import androidx.compose.runtime.Composable
-import androidx.compose.runtime.DisposableEffect
 import androidx.compose.runtime.SideEffect
 import androidx.compose.runtime.getValue
 import androidx.compose.runtime.mutableStateOf
@@ -49,7 +44,6 @@
 import androidx.compose.ui.layout.onGloballyPositioned
 import androidx.compose.ui.layout.onSizeChanged
 import androidx.compose.ui.platform.ComposeView
-import androidx.compose.ui.platform.LocalContext
 import androidx.compose.ui.platform.LocalDensity
 import androidx.compose.ui.platform.testTag
 import androidx.compose.ui.test.assertIsDisplayed
@@ -66,6 +60,7 @@
 import androidx.compose.ui.unit.IntSize
 import androidx.compose.ui.unit.dp
 import androidx.compose.ui.viewinterop.AndroidView
+import androidx.test.ext.junit.runners.AndroidJUnit4
 import androidx.test.filters.MediumTest
 import androidx.test.platform.app.InstrumentationRegistry
 import androidx.test.uiautomator.By
@@ -79,19 +74,11 @@
 import org.junit.Rule
 import org.junit.Test
 import org.junit.runner.RunWith
-import org.junit.runners.Parameterized
 
 @OptIn(ExperimentalMaterial3Api::class)
 @MediumTest
-@RunWith(Parameterized::class)
-class ExposedDropdownMenuTest(
-    private val softInputMode: SoftInputMode,
-) {
-    companion object {
-        @JvmStatic
-        @Parameterized.Parameters(name = "{0}")
-        fun parameters() = SoftInputMode.values()
-    }
+@RunWith(AndroidJUnit4::class)
+class ExposedDropdownMenuTest {
 
     @get:Rule
     val rule = createComposeRule()
@@ -106,7 +93,6 @@
     fun edm_expandsOnClick_andCollapsesOnClickOutside() {
         var textFieldBounds = Rect.Zero
         rule.setMaterialContent(lightColorScheme()) {
-            SoftInputMode(softInputMode)
             var expanded by remember { mutableStateOf(false) }
             ExposedDropdownMenuForTest(
                 expanded = expanded,
@@ -137,7 +123,6 @@
     @Test
     fun edm_collapsesOnTextFieldClick() {
         rule.setMaterialContent(lightColorScheme()) {
-            SoftInputMode(softInputMode)
             var expanded by remember { mutableStateOf(true) }
             ExposedDropdownMenuForTest(
                 expanded = expanded,
@@ -158,7 +143,6 @@
     @Test
     fun edm_doesNotCollapse_whenTypingOnSoftKeyboard() {
         rule.setMaterialContent(lightColorScheme()) {
-            SoftInputMode(softInputMode)
             var expanded by remember { mutableStateOf(false) }
             ExposedDropdownMenuForTest(
                 expanded = expanded,
@@ -194,7 +178,6 @@
     @Test
     fun edm_expandsAndFocusesTextField_whenTrailingIconClicked() {
         rule.setMaterialContent(lightColorScheme()) {
-            SoftInputMode(softInputMode)
             var expanded by remember { mutableStateOf(false) }
             ExposedDropdownMenuForTest(
                 expanded = expanded,
@@ -216,7 +199,6 @@
     fun edm_doesNotExpand_ifTouchEndsOutsideBounds() {
         var textFieldBounds = Rect.Zero
         rule.setMaterialContent(lightColorScheme()) {
-            SoftInputMode(softInputMode)
             var expanded by remember { mutableStateOf(false) }
             ExposedDropdownMenuForTest(
                 expanded = expanded,
@@ -256,7 +238,6 @@
         val testIndex = 2
         var textFieldSize = IntSize.Zero
         rule.setMaterialContent(lightColorScheme()) {
-            SoftInputMode(softInputMode)
             LazyColumn(
                 modifier = Modifier.fillMaxSize(),
                 horizontalAlignment = Alignment.CenterHorizontally,
@@ -342,7 +323,6 @@
         lateinit var scrollState: ScrollState
         lateinit var scope: CoroutineScope
         rule.setMaterialContent(lightColorScheme()) {
-            SoftInputMode(softInputMode)
             scrollState = rememberScrollState()
             scope = rememberCoroutineScope()
             Column(Modifier.verticalScroll(scrollState)) {
@@ -391,7 +371,6 @@
         var textFieldBounds by mutableStateOf(Rect.Zero)
         var menuBounds by mutableStateOf(Rect.Zero)
         rule.setMaterialContent(lightColorScheme()) {
-            SoftInputMode(softInputMode)
             var expanded by remember { mutableStateOf(true) }
             ExposedDropdownMenuForTest(
                 expanded = expanded,
@@ -416,7 +395,6 @@
     @Test
     fun edm_collapsesWithSelection_whenMenuItemClicked() {
         rule.setMaterialContent(lightColorScheme()) {
-            SoftInputMode(softInputMode)
             var expanded by remember { mutableStateOf(true) }
             ExposedDropdownMenuForTest(
                 expanded = expanded,
@@ -444,7 +422,6 @@
 
         rule.setMaterialContent(lightColorScheme()) {
             density = LocalDensity.current
-            SoftInputMode(softInputMode)
             Column(Modifier.fillMaxSize()) {
                 // Push the EDM down so opening the keyboard causes a pan/scroll
                 Spacer(Modifier.weight(1f))
@@ -487,7 +464,6 @@
     fun edm_doesNotCrash_whenAnchorDetachedFirst() {
         var parent: FrameLayout? = null
         rule.setMaterialContent(lightColorScheme()) {
-            SoftInputMode(softInputMode)
             AndroidView(
                 factory = { context ->
                     FrameLayout(context).apply {
@@ -525,13 +501,11 @@
         // Should not have crashed.
     }
 
-    @Ignore("b/297059209")
     @OptIn(ExperimentalMaterial3Api::class)
     @Test
     fun edm_withScrolledContent() {
         lateinit var scrollState: ScrollState
         rule.setMaterialContent(lightColorScheme()) {
-            SoftInputMode(softInputMode)
             Box(Modifier.fillMaxSize()) {
                 ExposedDropdownMenuBox(
                     modifier = Modifier.align(Alignment.Center),
@@ -630,30 +604,3 @@
         }
     }
 }
-
-enum class SoftInputMode {
-    AdjustResize,
-    AdjustPan
-}
-
-@Suppress("DEPRECATION")
-@Composable
-fun SoftInputMode(mode: SoftInputMode) {
-    val context = LocalContext.current
-    DisposableEffect(mode) {
-        val activity = context.findActivityOrNull() ?: return@DisposableEffect onDispose {}
-        val originalMode = activity.window.attributes.softInputMode
-        activity.window.setSoftInputMode(when (mode) {
-            SoftInputMode.AdjustResize -> WindowManager.LayoutParams.SOFT_INPUT_ADJUST_RESIZE
-            SoftInputMode.AdjustPan -> WindowManager.LayoutParams.SOFT_INPUT_ADJUST_PAN
-        })
-        onDispose {
-            activity.window.setSoftInputMode(originalMode)
-        }
-    }
-}
-
-private tailrec fun Context.findActivityOrNull(): Activity? {
-    return (this as? Activity)
-        ?: (this as? ContextWrapper)?.baseContext?.findActivityOrNull()
-}
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/ModalNavigationDrawerTest.kt b/compose/material3/material3/src/androidInstrumentedTest/kotlin/androidx/compose/material3/ModalNavigationDrawerTest.kt
index db38109..efdacf0 100644
--- a/compose/material3/material3/src/androidInstrumentedTest/kotlin/androidx/compose/material3/ModalNavigationDrawerTest.kt
+++ b/compose/material3/material3/src/androidInstrumentedTest/kotlin/androidx/compose/material3/ModalNavigationDrawerTest.kt
@@ -61,17 +61,12 @@
 
 @MediumTest
 @RunWith(AndroidJUnit4::class)
-@OptIn(ExperimentalMaterial3Api::class)
 class ModalNavigationDrawerTest {
 
     @get:Rule
     val rule = createComposeRule()
 
-    private fun advanceClock() {
-        rule.mainClock.advanceTimeBy(100_000L)
-    }
-
-    val NavigationDrawerWidth = NavigationDrawerTokens.ContainerWidth
+    private val NavigationDrawerWidth = NavigationDrawerTokens.ContainerWidth
 
     @Test
     fun navigationDrawer_testOffset_whenOpen() {
@@ -251,11 +246,13 @@
         rule.onNodeWithTag(DrawerTestTag).assertLeftPositionInRootIsEqualTo(-NavigationDrawerWidth)
 
         // When the drawer state is set to Opened
+        @Suppress("DEPRECATION") // animateTo is deprecated, but we are testing it
         drawerState.animateTo(DrawerValue.Open, TweenSpec())
         // Then the drawer should be opened
         rule.onNodeWithTag(DrawerTestTag).assertLeftPositionInRootIsEqualTo(0.dp)
 
         // When the drawer state is set to Closed
+        @Suppress("DEPRECATION") // animateTo is deprecated, but we are testing it
         drawerState.animateTo(DrawerValue.Closed, TweenSpec())
         // Then the drawer should be closed
         rule.onNodeWithTag(DrawerTestTag).assertLeftPositionInRootIsEqualTo(-NavigationDrawerWidth)
@@ -658,4 +655,4 @@
     }
 }
 
-private val DrawerTestTag = "drawer"
+private const val DrawerTestTag = "drawer"
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/androidInstrumentedTest/kotlin/androidx/compose/material3/pullrefresh/PullRefreshIndicatorScreenshotTest.kt b/compose/material3/material3/src/androidInstrumentedTest/kotlin/androidx/compose/material3/pullrefresh/PullRefreshIndicatorScreenshotTest.kt
new file mode 100644
index 0000000..7cefabb
--- /dev/null
+++ b/compose/material3/material3/src/androidInstrumentedTest/kotlin/androidx/compose/material3/pullrefresh/PullRefreshIndicatorScreenshotTest.kt
@@ -0,0 +1,121 @@
+/*
+ * 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.material3.pullrefresh
+
+import android.os.Build
+import androidx.compose.foundation.layout.Box
+import androidx.compose.foundation.layout.wrapContentSize
+import androidx.compose.material3.CircularIndicatorDiameter
+import androidx.compose.material3.ColorScheme
+import androidx.compose.material3.ExperimentalMaterial3Api
+import androidx.compose.material3.GOLDEN_MATERIAL3
+import androidx.compose.material3.darkColorScheme
+import androidx.compose.material3.lightColorScheme
+import androidx.compose.material3.setMaterialContent
+import androidx.compose.testutils.assertAgainstGolden
+import androidx.compose.ui.Alignment
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.platform.LocalDensity
+import androidx.compose.ui.platform.testTag
+import androidx.compose.ui.test.captureToImage
+import androidx.compose.ui.test.junit4.createComposeRule
+import androidx.compose.ui.test.onNodeWithTag
+import androidx.compose.ui.unit.Dp
+import androidx.test.filters.LargeTest
+import androidx.test.filters.SdkSuppress
+import androidx.test.screenshot.AndroidXScreenshotTestRule
+import org.junit.Rule
+import org.junit.Test
+import org.junit.runner.RunWith
+import org.junit.runners.Parameterized
+
+@OptIn(ExperimentalMaterial3Api::class)
+@LargeTest
+@RunWith(Parameterized::class)
+@SdkSuppress(minSdkVersion = Build.VERSION_CODES.O)
+class PullRefreshIndicatorScreenshotTest(private val scheme: ColorSchemeWrapper) {
+    @get:Rule
+    val rule = createComposeRule()
+
+    @get:Rule
+    val screenshotRule = AndroidXScreenshotTestRule(GOLDEN_MATERIAL3)
+
+    private val testTag = "PullRefresh"
+    private val wrap = Modifier.wrapContentSize(Alignment.TopStart)
+
+    @Test
+    fun pullRefreshIndicator_refreshing() {
+        rule.mainClock.autoAdvance = false
+        rule.setMaterialContent(scheme.colorScheme) {
+            Box(wrap.testTag(testTag)) {
+                val density = LocalDensity.current
+                PullRefreshContainer(
+                    state = object : PullRefreshState {
+                        override val positionalThreshold: Dp
+                            get() = TODO("Not yet implemented")
+                        override val progress = 0.0f
+                        override val verticalOffset =
+                            with(density) { CircularIndicatorDiameter.toPx() }
+                        override val refreshing = true
+                    },
+                )
+            }
+        }
+        rule.mainClock.advanceTimeBy(500)
+        assertAgainstGolden("pullRefreshIndicator_${scheme.name}_refreshing")
+    }
+
+    @Test
+    fun pullRefreshIndicator_notRefreshing() {
+        rule.setMaterialContent(scheme.colorScheme) {
+            Box(wrap.testTag(testTag)) {
+                val density = LocalDensity.current
+                PullRefreshContainer(
+                    state = object : PullRefreshState {
+                        override val positionalThreshold: Dp
+                            get() = TODO("Not yet implemented")
+                        override val progress = 1f
+                        override val verticalOffset =
+                            with(density) { CircularIndicatorDiameter.toPx() }
+                        override val refreshing = false
+                    },
+                )
+            }
+        }
+        assertAgainstGolden("pullRefreshIndicator_${scheme.name}_progress")
+    }
+    private fun assertAgainstGolden(goldenName: String) {
+        rule.onNodeWithTag(testTag)
+            .captureToImage()
+            .assertAgainstGolden(screenshotRule, goldenName)
+    }
+
+    companion object {
+        @Parameterized.Parameters(name = "{0}")
+        @JvmStatic
+        fun parameters() = arrayOf(
+            ColorSchemeWrapper("lightTheme", lightColorScheme()),
+            ColorSchemeWrapper("darkTheme", darkColorScheme()),
+        )
+    }
+
+    class ColorSchemeWrapper(val name: String, val colorScheme: ColorScheme) {
+        override fun toString(): String {
+            return name
+        }
+    }
+}
diff --git a/compose/material3/material3/src/androidInstrumentedTest/kotlin/androidx/compose/material3/pullrefresh/PullRefreshIndicatorTest.kt b/compose/material3/material3/src/androidInstrumentedTest/kotlin/androidx/compose/material3/pullrefresh/PullRefreshIndicatorTest.kt
new file mode 100644
index 0000000..da13b59
--- /dev/null
+++ b/compose/material3/material3/src/androidInstrumentedTest/kotlin/androidx/compose/material3/pullrefresh/PullRefreshIndicatorTest.kt
@@ -0,0 +1,180 @@
+/*
+ * 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.material3.pullrefresh
+
+import androidx.compose.foundation.gestures.awaitEachGesture
+import androidx.compose.foundation.gestures.awaitFirstDown
+import androidx.compose.foundation.layout.Box
+import androidx.compose.foundation.layout.fillMaxSize
+import androidx.compose.foundation.layout.heightIn
+import androidx.compose.material3.ExperimentalMaterial3Api
+import androidx.compose.runtime.getValue
+import androidx.compose.runtime.mutableFloatStateOf
+import androidx.compose.runtime.mutableStateOf
+import androidx.compose.runtime.setValue
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.input.pointer.PointerInputChange
+import androidx.compose.ui.input.pointer.pointerInput
+import androidx.compose.ui.layout.onSizeChanged
+import androidx.compose.ui.platform.LocalDensity
+import androidx.compose.ui.platform.testTag
+import androidx.compose.ui.test.assertIsDisplayed
+import androidx.compose.ui.test.assertTopPositionInRootIsEqualTo
+import androidx.compose.ui.test.junit4.createComposeRule
+import androidx.compose.ui.test.onChild
+import androidx.compose.ui.test.onNodeWithTag
+import androidx.compose.ui.test.performClick
+import androidx.compose.ui.unit.Dp
+import androidx.compose.ui.unit.IntSize
+import androidx.compose.ui.unit.dp
+import androidx.test.ext.junit.runners.AndroidJUnit4
+import androidx.test.filters.MediumTest
+import com.google.common.truth.Truth
+import org.junit.Rule
+import org.junit.Test
+import org.junit.runner.RunWith
+
+@MediumTest
+@RunWith(AndroidJUnit4::class)
+@OptIn(ExperimentalMaterial3Api::class)
+class PullRefreshIndicatorTest {
+
+    @get:Rule
+    val rule = createComposeRule()
+
+    @Test
+    fun indicatorDisplayed_refreshing() {
+        rule.setContent {
+            val density = LocalDensity.current
+            Box(Modifier.fillMaxSize()) {
+                PullRefreshContainer(
+                    state = object : PullRefreshState {
+                        override val positionalThreshold: Dp
+                            get() = TODO("Not yet implemented")
+                        override val progress = 0.5f
+                        override val verticalOffset = with(density) { 50.dp.toPx() }
+                        override val refreshing = true
+                    },
+                    modifier = Modifier.testTag(INDICATOR_TAG)
+                )
+            }
+        }
+        rule.onNodeWithTag(INDICATOR_TAG).assertIsDisplayed()
+    }
+
+    @Test
+    fun indicatorDisplayed_notRefreshing() {
+        rule.setContent {
+            val density = LocalDensity.current
+            Box(Modifier.fillMaxSize()) {
+                PullRefreshContainer(
+                    state = object : PullRefreshState {
+                        override val positionalThreshold: Dp
+                            get() = TODO("Not yet implemented")
+                        override val progress = 0.5f
+                        override val verticalOffset = with(density) { 50.dp.toPx() }
+                        override val refreshing = false
+                    },
+                    modifier = Modifier.testTag(INDICATOR_TAG)
+                )
+            }
+        }
+        rule.onNodeWithTag(INDICATOR_TAG).assertIsDisplayed()
+    }
+
+    @Test
+    fun indicatorRespects_changingOffset() {
+        val verticalOffsetDp = mutableStateOf(0.dp)
+        rule.setContent {
+            val density = LocalDensity.current
+            Box(Modifier.fillMaxSize()) {
+                PullRefreshContainer(
+                    state = object : PullRefreshState {
+                        override val positionalThreshold: Dp
+                            get() = TODO("Not yet implemented")
+                        override val progress = 0.5f
+                        override val verticalOffset =
+                            with(density) { verticalOffsetDp.value.toPx() }
+                        override val refreshing = false
+                    },
+                    modifier = Modifier.heightIn(min = 30.dp).testTag(INDICATOR_TAG)
+                )
+            }
+        }
+        rule
+            .onNodeWithTag(INDICATOR_TAG)
+            .onChild()
+            .assertTopPositionInRootIsEqualTo(verticalOffsetDp.value - 30.dp)
+
+        verticalOffsetDp.value = 100.dp
+        rule.waitForIdle()
+
+        rule
+            .onNodeWithTag(INDICATOR_TAG)
+            .onChild()
+            .assertTopPositionInRootIsEqualTo(verticalOffsetDp.value - 30.dp)
+    }
+
+    // Regression test for b/271777421
+    @Test
+    fun indicatorDoesNotCapturePointerEvents() {
+        var verticalOffset by mutableFloatStateOf(0f)
+        var indicatorSize: IntSize? = null
+        var downEvent: PointerInputChange? = null
+
+        rule.setContent {
+            Box {
+                Box(Modifier.fillMaxSize().pointerInput(Unit) {
+                    awaitEachGesture {
+                        downEvent = awaitFirstDown()
+                    }
+                })
+                PullRefreshContainer(
+                    state = object : PullRefreshState {
+                        override val positionalThreshold: Dp
+                            get() = TODO("Not yet implemented")
+                        override val progress = 0f
+                        override val verticalOffset = verticalOffset
+                        override val refreshing = false
+                    },
+                    modifier = Modifier.onSizeChanged {
+                        // The indicator starts as offset by its negative height in the y direction,
+                        // so work out its height so we can place it inside its normal layout
+                        // bounds
+                        indicatorSize = it
+                    }.testTag(INDICATOR_TAG)
+                )
+            }
+        }
+
+        rule.runOnIdle {
+            // Pull by twice the indicator height (since pull delta is halved) - this will make the
+            // indicator fully visible in its layout bounds, so when we performClick() the indicator
+            // will be visibly inside those coordinates.
+            verticalOffset = indicatorSize!!.height.toFloat() * 2
+        }
+
+        rule.onNodeWithTag(INDICATOR_TAG).performClick()
+        rule.runOnIdle {
+            // The indicator should not have blocked its sibling (placed first, so below) from
+            // seeing touch events.
+            Truth.assertThat(downEvent).isNotNull()
+        }
+    }
+
+    private val INDICATOR_TAG = "pull-refresh-indicator"
+}
diff --git a/compose/material3/material3/src/androidMain/kotlin/androidx/compose/material3/CalendarModel.android.kt b/compose/material3/material3/src/androidMain/kotlin/androidx/compose/material3/CalendarModel.android.kt
index 8b9446b..d5ed1b0 100644
--- a/compose/material3/material3/src/androidMain/kotlin/androidx/compose/material3/CalendarModel.android.kt
+++ b/compose/material3/material3/src/androidMain/kotlin/androidx/compose/material3/CalendarModel.android.kt
@@ -52,7 +52,10 @@
     locale: CalendarLocale,
     cache: MutableMap<String, Any>
 ): String {
-    val pattern = cache.getOrPut(key = skeleton + locale.toLanguageTag()) {
+    // Prepend the skeleton and language tag with a "S" to avoid cache collisions when the
+    // called already cached a string as value when the pattern equals to the skeleton it
+    // was created from.
+    val pattern = cache.getOrPut(key = "S:$skeleton${locale.toLanguageTag()}") {
         DateFormat.getBestDateTimePattern(locale, skeleton)
     }.toString()
     return if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
diff --git a/compose/material3/material3/src/androidMain/kotlin/androidx/compose/material3/CalendarModelImpl.android.kt b/compose/material3/material3/src/androidMain/kotlin/androidx/compose/material3/CalendarModelImpl.android.kt
index 78d7752..915248b 100644
--- a/compose/material3/material3/src/androidMain/kotlin/androidx/compose/material3/CalendarModelImpl.android.kt
+++ b/compose/material3/material3/src/androidMain/kotlin/androidx/compose/material3/CalendarModelImpl.android.kt
@@ -191,8 +191,10 @@
             locale: CalendarLocale,
             cache: MutableMap<String, Any>
         ): DateTimeFormatter {
-            val key = pattern + locale.toLanguageTag()
-            return cache.getOrPut(key) {
+            // Prepend the pattern and language tag with a "P" to avoid cache collisions when the
+            // called already cached a string as value when the pattern equals to the skeleton it
+            // was created from.
+            return cache.getOrPut(key = "P:$pattern${locale.toLanguageTag()}") {
                 DateTimeFormatter.ofPattern(pattern, locale)
                     .withDecimalStyle(DecimalStyle.of(locale))
             } as DateTimeFormatter
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/DatePicker.kt b/compose/material3/material3/src/commonMain/kotlin/androidx/compose/material3/DatePicker.kt
index f0f0451..23741d0 100644
--- a/compose/material3/material3/src/commonMain/kotlin/androidx/compose/material3/DatePicker.kt
+++ b/compose/material3/material3/src/commonMain/kotlin/androidx/compose/material3/DatePicker.kt
@@ -336,6 +336,8 @@
 /**
  * Creates a [DatePickerState] for a [DatePicker] that is remembered across compositions.
  *
+ * To create a date picker state outside composition, see the `DatePickerState` function.
+ *
  * @param initialSelectedDateMillis timestamp in _UTC_ milliseconds from the epoch that represents
  * an initial selection of a date. Provide a `null` to indicate no selection.
  * @param initialDisplayedMonthMillis timestamp in _UTC_ milliseconds from the epoch that represents
@@ -355,7 +357,7 @@
     @Suppress("AutoBoxing") initialDisplayedMonthMillis: Long? = initialSelectedDateMillis,
     yearRange: IntRange = DatePickerDefaults.YearRange,
     initialDisplayMode: DisplayMode = DisplayMode.Picker,
-    selectableDates: SelectableDates = object : SelectableDates {}
+    selectableDates: SelectableDates = DatePickerDefaults.AllDates
 ): DatePickerState {
     val locale = defaultLocale()
     return rememberSaveable(
@@ -373,6 +375,48 @@
 }
 
 /**
+ * Creates a [DatePickerState].
+ *
+ * Note that in most cases, you are advised to use the [rememberDatePickerState] when in a
+ * composition.
+ *
+ * @param locale a [CalendarLocale] to be used when formatting dates, determining the input format,
+ * and more
+ * @param initialSelectedDateMillis timestamp in _UTC_ milliseconds from the epoch that
+ * represents an initial selection of a date. Provide a `null` to indicate no selection. Note
+ * that the state's
+ * [DatePickerState.selectedDateMillis] will provide a timestamp that represents the _start_ of the
+ * day, which may be different than the provided initialSelectedDateMillis.
+ * @param initialDisplayedMonthMillis timestamp in _UTC_ milliseconds from the epoch that
+ * represents an initial selection of a month to be displayed to the user. In case `null` is
+ * provided, the displayed month would be the current one.
+ * @param yearRange an [IntRange] that holds the year range that the date picker will be limited
+ * to
+ * @param initialDisplayMode an initial [DisplayMode] that this state will hold
+ * @param selectableDates a [SelectableDates] that is consulted to check if a date is allowed.
+ * In case a date is not allowed to be selected, it will appear disabled in the UI.
+ * @see rememberDatePickerState
+ * @throws [IllegalArgumentException] if the initial selected date or displayed month represent
+ * a year that is out of the year range.
+ */
+@ExperimentalMaterial3Api
+fun DatePickerState(
+    locale: CalendarLocale,
+    @Suppress("AutoBoxing") initialSelectedDateMillis: Long? = null,
+    @Suppress("AutoBoxing") initialDisplayedMonthMillis: Long? = initialSelectedDateMillis,
+    yearRange: IntRange = DatePickerDefaults.YearRange,
+    initialDisplayMode: DisplayMode = DisplayMode.Picker,
+    selectableDates: SelectableDates = DatePickerDefaults.AllDates
+): DatePickerState = DatePickerStateImpl(
+    initialSelectedDateMillis = initialSelectedDateMillis,
+    initialDisplayedMonthMillis = initialDisplayedMonthMillis,
+    yearRange = yearRange,
+    initialDisplayMode = initialDisplayMode,
+    selectableDates = selectableDates,
+    locale = locale
+)
+
+/**
  * Contains default values used by the [DatePicker].
  */
 @ExperimentalMaterial3Api
@@ -623,6 +667,11 @@
     val shape: Shape @Composable get() = DatePickerModalTokens.ContainerShape.value
 
     /**
+     * A default [SelectableDates] that allows all dates to be selected.
+     */
+    val AllDates: SelectableDates = object : SelectableDates {}
+
+    /**
      * A date format skeleton used to format the date picker's year selection menu button (e.g.
      * "March 2021")
      */
@@ -947,7 +996,9 @@
  * to
  * @param initialDisplayMode an initial [DisplayMode] that this state will hold
  * @param selectableDates a [SelectableDates] that is consulted to check if a date is allowed.
- * In case a date is not allowed to be selected, it will appear disabled in the UI.
+ * In case a date is not allowed to be selected, it will appear disabled in the UI
+ * @param locale a [CalendarLocale] to be used when formatting dates, determining the input format,
+ * and more
  * @see rememberDatePickerState
  * @throws [IllegalArgumentException] if the initial selected date or displayed month represent
  * a year that is out of the year range.
diff --git a/compose/material3/material3/src/commonMain/kotlin/androidx/compose/material3/DateRangePicker.kt b/compose/material3/material3/src/commonMain/kotlin/androidx/compose/material3/DateRangePicker.kt
index 6d4650a..a423580 100644
--- a/compose/material3/material3/src/commonMain/kotlin/androidx/compose/material3/DateRangePicker.kt
+++ b/compose/material3/material3/src/commonMain/kotlin/androidx/compose/material3/DateRangePicker.kt
@@ -232,6 +232,8 @@
 /**
  * Creates a [DateRangePickerState] for a [DateRangePicker] that is remembered across compositions.
  *
+ * To create a date range picker state outside composition, see the `DateRangePickerState` function.
+ *
  * @param initialSelectedStartDateMillis timestamp in _UTC_ milliseconds from the epoch that
  * represents an initial selection of a start date. Provide a `null` to indicate no selection.
  * @param initialSelectedEndDateMillis timestamp in _UTC_ milliseconds from the epoch that
@@ -256,7 +258,7 @@
         initialSelectedStartDateMillis,
     yearRange: IntRange = DatePickerDefaults.YearRange,
     initialDisplayMode: DisplayMode = DisplayMode.Picker,
-    selectableDates: SelectableDates = object : SelectableDates {}
+    selectableDates: SelectableDates = DatePickerDefaults.AllDates
 ): DateRangePickerState {
     val locale = defaultLocale()
     return rememberSaveable(
@@ -275,6 +277,53 @@
 }
 
 /**
+ * Creates a [DateRangePickerState].
+ *
+ * Note that in most cases, you are advised to use the [rememberDateRangePickerState] when in a
+ * composition.
+ *
+ * @param locale a [CalendarLocale] to be used when formatting dates, determining the input format,
+ * and more
+ * @param initialSelectedStartDateMillis timestamp in _UTC_ milliseconds from the epoch that
+ * represents an initial selection of a start date. Provide a `null` to indicate no selection.
+ * @param initialSelectedEndDateMillis timestamp in _UTC_ milliseconds from the epoch that
+ * represents an initial selection of an end date. Provide a `null` to indicate no selection.
+ * @param initialDisplayedMonthMillis timestamp in _UTC_ milliseconds from the epoch that
+ * represents an initial selection of a month to be displayed to the user. By default, in case
+ * an `initialSelectedStartDateMillis` is provided, the initial displayed month would be the
+ * month of the selected date. Otherwise, in case `null` is provided, the displayed month would
+ * be the current one.
+ * @param yearRange an [IntRange] that holds the year range that the date picker will be limited
+ * to
+ * @param initialDisplayMode an initial [DisplayMode] that this state will hold
+ * @param selectableDates a [SelectableDates] that is consulted to check if a date is allowed.
+ * In case a date is not allowed to be selected, it will appear disabled in the UI
+ * @see rememberDateRangePickerState
+ * @throws IllegalArgumentException if the initial timestamps do not fall within the year range
+ * this state is created with, or the end date precedes the start date, or when an end date is
+ * provided without a start date (e.g. the start date was null, while the end date was not).
+ */
+@ExperimentalMaterial3Api
+fun DateRangePickerState(
+    locale: CalendarLocale,
+    @Suppress("AutoBoxing") initialSelectedStartDateMillis: Long? = null,
+    @Suppress("AutoBoxing") initialSelectedEndDateMillis: Long? = null,
+    @Suppress("AutoBoxing") initialDisplayedMonthMillis: Long? =
+        initialSelectedStartDateMillis,
+    yearRange: IntRange = DatePickerDefaults.YearRange,
+    initialDisplayMode: DisplayMode = DisplayMode.Picker,
+    selectableDates: SelectableDates = DatePickerDefaults.AllDates
+): DateRangePickerState = DateRangePickerStateImpl(
+    initialSelectedStartDateMillis = initialSelectedStartDateMillis,
+    initialSelectedEndDateMillis = initialSelectedEndDateMillis,
+    initialDisplayedMonthMillis = initialDisplayedMonthMillis,
+    yearRange = yearRange,
+    initialDisplayMode = initialDisplayMode,
+    selectableDates = selectableDates,
+    locale = locale
+)
+
+/**
  * Contains default values used by the [DateRangePicker].
  */
 @ExperimentalMaterial3Api
@@ -451,8 +500,10 @@
  * to
  * @param initialDisplayMode an initial [DisplayMode] that this state will hold
  * @param selectableDates a [SelectableDates] that is consulted to check if a date is allowed.
- * In case a date is not allowed to be selected, it will appear disabled in the UI.
- * @see rememberDatePickerState
+ * In case a date is not allowed to be selected, it will appear disabled in the UI
+ * @param locale a [CalendarLocale] to be used when formatting dates, determining the input format,
+ * and more
+ * @see rememberDateRangePickerState
  * @throws IllegalArgumentException if the initial timestamps do not fall within the year range
  * this state is created with, or the end date precedes the start date, or when an end date is
  * provided without a start date (e.g. the start date was null, while the end date was not).
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/NavigationDrawer.kt b/compose/material3/material3/src/commonMain/kotlin/androidx/compose/material3/NavigationDrawer.kt
index 3f585fd..2108ea1 100644
--- a/compose/material3/material3/src/commonMain/kotlin/androidx/compose/material3/NavigationDrawer.kt
+++ b/compose/material3/material3/src/commonMain/kotlin/androidx/compose/material3/NavigationDrawer.kt
@@ -18,6 +18,7 @@
 
 import androidx.compose.animation.core.AnimationSpec
 import androidx.compose.animation.core.TweenSpec
+import androidx.compose.animation.core.animate
 import androidx.compose.foundation.Canvas
 import androidx.compose.foundation.gestures.Orientation
 import androidx.compose.foundation.gestures.detectTapGestures
@@ -45,13 +46,17 @@
 import androidx.compose.material3.tokens.ScrimTokens
 import androidx.compose.runtime.Composable
 import androidx.compose.runtime.CompositionLocalProvider
+import androidx.compose.runtime.SideEffect
 import androidx.compose.runtime.Stable
 import androidx.compose.runtime.State
+import androidx.compose.runtime.getValue
+import androidx.compose.runtime.mutableStateOf
 import androidx.compose.runtime.remember
 import androidx.compose.runtime.rememberCoroutineScope
 import androidx.compose.runtime.rememberUpdatedState
 import androidx.compose.runtime.saveable.Saver
 import androidx.compose.runtime.saveable.rememberSaveable
+import androidx.compose.runtime.setValue
 import androidx.compose.ui.Alignment
 import androidx.compose.ui.Modifier
 import androidx.compose.ui.graphics.Color
@@ -68,6 +73,7 @@
 import androidx.compose.ui.semantics.paneTitle
 import androidx.compose.ui.semantics.role
 import androidx.compose.ui.semantics.semantics
+import androidx.compose.ui.unit.Density
 import androidx.compose.ui.unit.Dp
 import androidx.compose.ui.unit.IntOffset
 import androidx.compose.ui.unit.LayoutDirection
@@ -99,16 +105,18 @@
  */
 @Suppress("NotCloseable")
 @Stable
+@OptIn(ExperimentalMaterial3Api::class)
 class DrawerState(
     initialValue: DrawerValue,
     confirmStateChange: (DrawerValue) -> Boolean = { true }
 ) {
 
-    @OptIn(ExperimentalMaterial3Api::class)
-    internal val swipeableState = SwipeableState(
+    internal val anchoredDraggableState = AnchoredDraggableState(
         initialValue = initialValue,
         animationSpec = AnimationSpec,
-        confirmStateChange = confirmStateChange
+        confirmValueChange = confirmStateChange,
+        positionalThreshold = { distance -> distance * DrawerPositionalThreshold },
+        velocityThreshold = { with(requireDensity()) { DrawerVelocityThreshold.toPx() } }
     )
 
     /**
@@ -130,19 +138,17 @@
      * currently in. If a swipe or an animation is in progress, this corresponds the state drawer
      * was in before the swipe or animation started.
      */
-    @OptIn(ExperimentalMaterial3Api::class)
     val currentValue: DrawerValue
         get() {
-            return swipeableState.currentValue
+            return anchoredDraggableState.currentValue
         }
 
     /**
      * Whether the state is currently animating.
      */
-    @OptIn(ExperimentalMaterial3Api::class)
     val isAnimationRunning: Boolean
         get() {
-            return swipeableState.isAnimationRunning
+            return anchoredDraggableState.isAnimationRunning
         }
 
     /**
@@ -152,7 +158,7 @@
      *
      * @return the reason the open animation ended
      */
-    suspend fun open() = animateTo(DrawerValue.Open, AnimationSpec)
+    suspend fun open() = animateTo(DrawerValue.Open)
 
     /**
      * Close the drawer with animation and suspend until it if fully closed or animation has been
@@ -161,7 +167,7 @@
      *
      * @return the reason the close animation ended
      */
-    suspend fun close() = animateTo(DrawerValue.Closed, AnimationSpec)
+    suspend fun close() = animateTo(DrawerValue.Closed)
 
     /**
      * Set the state of the drawer with specific animation
@@ -169,9 +175,12 @@
      * @param targetValue The new value to animate to.
      * @param anim The animation that will be used to animate to the new value.
      */
-    @OptIn(ExperimentalMaterial3Api::class)
+    @Deprecated(
+        message = "This method has been replaced by the open and close methods. The animation " +
+            "spec is now an implementation detail of ModalDrawer.",
+    )
     suspend fun animateTo(targetValue: DrawerValue, anim: AnimationSpec<Float>) {
-        swipeableState.animateTo(targetValue, anim)
+        animateTo(targetValue = targetValue, animationSpec = anim)
     }
 
     /**
@@ -179,9 +188,8 @@
      *
      * @param targetValue The new target value
      */
-    @OptIn(ExperimentalMaterial3Api::class)
     suspend fun snapTo(targetValue: DrawerValue) {
-        swipeableState.snapTo(targetValue)
+        anchoredDraggableState.snapTo(targetValue)
     }
 
     /**
@@ -191,16 +199,61 @@
      * swipe finishes. 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].
      */
-    @OptIn(ExperimentalMaterial3Api::class)
     val targetValue: DrawerValue
-        get() = swipeableState.targetValue
+        get() = anchoredDraggableState.targetValue
 
     /**
-     * The current position (in pixels) of the drawer container.
+     * The current position (in pixels) of the drawer sheet, or Float.NaN before the offset is
+     * initialized.
+     *
+     * @see [AnchoredDraggableState.offset] for more information.
      */
-    @OptIn(ExperimentalMaterial3Api::class)
-    val offset: State<Float>
-        get() = swipeableState.offset
+    @Deprecated(
+        message = "Please access the offset through currentOffset, which returns the value " +
+            "directly instead of wrapping it in a state object.",
+        replaceWith = ReplaceWith("currentOffset")
+    )
+    val offset: State<Float> = object : State<Float> {
+        override val value: Float get() = anchoredDraggableState.offset
+    }
+
+    /**
+     * The current position (in pixels) of the drawer sheet, or Float.NaN before the offset is
+     * initialized.
+     *
+     * @see [AnchoredDraggableState.offset] for more information.
+     */
+    val currentOffset: Float get() = anchoredDraggableState.offset
+
+    internal var density: Density? by mutableStateOf(null)
+
+    private fun requireDensity() = requireNotNull(density) {
+        "The density on BottomDrawerState ($this) was not set. Did you use BottomDrawer" +
+            " with the BottomDrawer composable?"
+    }
+
+    internal fun requireOffset(): Float = anchoredDraggableState.requireOffset()
+
+    private suspend fun animateTo(
+        targetValue: DrawerValue,
+        animationSpec: AnimationSpec<Float> = AnimationSpec,
+        velocity: Float = anchoredDraggableState.lastVelocity
+    ) {
+        anchoredDraggableState.anchoredDrag(targetValue = targetValue) { anchors, latestTarget ->
+            val targetOffset = anchors.positionOf(latestTarget)
+            if (!targetOffset.isNaN()) {
+                var prev = if (currentOffset.isNaN()) 0f else currentOffset
+                animate(prev, targetOffset, velocity, animationSpec) { value, velocity ->
+                    // Our onDrag coerces the value within the bounds, but an animation may
+                    // overshoot, for example a spring animation or an overshooting interpolator
+                    // We respect the user's intention and allow the overshoot, but still use
+                    // DraggableState's drag for its mutex.
+                    dragTo(value, velocity)
+                    prev = value
+                }
+            }
+        }
+    }
 
     companion object {
         /**
@@ -261,23 +314,29 @@
 ) {
     val scope = rememberCoroutineScope()
     val navigationMenu = getString(Strings.NavigationMenu)
-    val minValue = -with(LocalDensity.current) { NavigationDrawerTokens.ContainerWidth.toPx() }
+    val density = LocalDensity.current
+    val minValue = -with(density) { NavigationDrawerTokens.ContainerWidth.toPx() }
     val maxValue = 0f
 
-    val anchors = mapOf(minValue to DrawerValue.Closed, maxValue to DrawerValue.Open)
+    SideEffect {
+        drawerState.density = density
+        drawerState.anchoredDraggableState.updateAnchors(
+            DraggableAnchors {
+                DrawerValue.Closed at minValue
+                DrawerValue.Open at maxValue
+            }
+        )
+    }
+
     val isRtl = LocalLayoutDirection.current == LayoutDirection.Rtl
     Box(
         modifier
             .fillMaxSize()
-            .swipeable(
-                state = drawerState.swipeableState,
-                anchors = anchors,
-                thresholds = { _, _ -> FractionalThreshold(0.5f) },
+            .anchoredDraggable(
+                state = drawerState.anchoredDraggableState,
                 orientation = Orientation.Horizontal,
                 enabled = gesturesEnabled,
-                reverseDirection = isRtl,
-                velocityThreshold = DrawerVelocityThreshold,
-                resistance = null
+                reverseDirection = isRtl
             )
     ) {
         Box {
@@ -288,26 +347,32 @@
             onClose = {
                 if (
                     gesturesEnabled &&
-                    drawerState.swipeableState.confirmStateChange(DrawerValue.Closed)
+                    drawerState.anchoredDraggableState.confirmValueChange(DrawerValue.Closed)
                 ) {
                     scope.launch { drawerState.close() }
                 }
             },
             fraction = {
-                calculateFraction(minValue, maxValue, drawerState.offset.value)
+                calculateFraction(minValue, maxValue, drawerState.requireOffset())
             },
             color = scrimColor
         )
         Box(
             Modifier
-                .offset { IntOffset(drawerState.offset.value.roundToInt(), 0) }
+                .offset {
+                    IntOffset(
+                        drawerState
+                            .requireOffset()
+                            .roundToInt(), 0
+                    )
+                }
                 .semantics {
                     paneTitle = navigationMenu
                     if (drawerState.isOpen) {
                         dismiss {
-                            if (
-                                drawerState.swipeableState
-                                    .confirmStateChange(DrawerValue.Closed)
+                            if (drawerState.anchoredDraggableState.confirmValueChange(
+                                    DrawerValue.Closed
+                                )
                             ) {
                                 scope.launch { drawerState.close() }
                             }; true
@@ -349,36 +414,43 @@
     gesturesEnabled: Boolean = true,
     content: @Composable () -> Unit
 ) {
+    val density = LocalDensity.current
     val drawerWidth = NavigationDrawerTokens.ContainerWidth
-    val drawerWidthPx = with(LocalDensity.current) { drawerWidth.toPx() }
+    val drawerWidthPx = with(density) { drawerWidth.toPx() }
     val minValue = -drawerWidthPx
     val maxValue = 0f
 
+    SideEffect {
+        drawerState.density = density
+        drawerState.anchoredDraggableState.updateAnchors(
+            DraggableAnchors {
+                DrawerValue.Closed at minValue
+                DrawerValue.Open at maxValue
+            }
+        )
+    }
+
     val scope = rememberCoroutineScope()
     val navigationMenu = getString(Strings.NavigationMenu)
 
-    val anchors = mapOf(minValue to DrawerValue.Closed, maxValue to DrawerValue.Open)
     val isRtl = LocalLayoutDirection.current == LayoutDirection.Rtl
     Box(
-        modifier.swipeable(
-            state = drawerState.swipeableState,
-            anchors = anchors,
-            thresholds = { _, _ -> FractionalThreshold(0.5f) },
-            orientation = Orientation.Horizontal,
-            enabled = gesturesEnabled,
-            reverseDirection = isRtl,
-            velocityThreshold = DrawerVelocityThreshold,
-            resistance = null
-        )
+        modifier
+            .anchoredDraggable(
+                state = drawerState.anchoredDraggableState,
+                orientation = Orientation.Horizontal,
+                enabled = gesturesEnabled,
+                reverseDirection = isRtl
+            )
     ) {
         Layout(content = {
             Box(Modifier.semantics {
                 paneTitle = navigationMenu
                 if (drawerState.isOpen) {
                     dismiss {
-                        if (
-                            drawerState.swipeableState
-                                .confirmStateChange(DrawerValue.Closed)
+                        if (drawerState.anchoredDraggableState.confirmValueChange(
+                                DrawerValue.Closed
+                            )
                         ) {
                             scope.launch { drawerState.close() }
                         }; true
@@ -395,10 +467,10 @@
             val contentPlaceable = measurables[1].measure(constraints)
             layout(contentPlaceable.width, contentPlaceable.height) {
                 contentPlaceable.placeRelative(
-                    sheetPlaceable.width + drawerState.offset.value.roundToInt(),
+                    sheetPlaceable.width + drawerState.requireOffset().roundToInt(),
                     0
                 )
-                sheetPlaceable.placeRelative(drawerState.offset.value.roundToInt(), 0)
+                sheetPlaceable.placeRelative(drawerState.requireOffset().roundToInt(), 0)
             }
         }
     }
@@ -662,7 +734,8 @@
     Surface(
         selected = selected,
         onClick = onClick,
-        modifier = modifier.semantics { role = Role.Tab }
+        modifier = modifier
+            .semantics { role = Role.Tab }
             .height(NavigationDrawerTokens.ActiveIndicatorHeight)
             .fillMaxWidth(),
         shape = shape,
@@ -818,9 +891,7 @@
         if (selectedContainerColor != other.selectedContainerColor) return false
         if (unselectedContainerColor != other.unselectedContainerColor) return false
         if (selectedBadgeColor != other.selectedBadgeColor) return false
-        if (unselectedBadgeColor != other.unselectedBadgeColor) return false
-
-        return true
+        return unselectedBadgeColor == other.unselectedBadgeColor
     }
 
     override fun hashCode(): Int {
@@ -867,6 +938,7 @@
     }
 }
 
+private val DrawerPositionalThreshold = 0.5f
 private val DrawerVelocityThreshold = 400.dp
 private val MinimumDrawerWidth = 240.dp
 
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/Swipeable.kt b/compose/material3/material3/src/commonMain/kotlin/androidx/compose/material3/Swipeable.kt
deleted file mode 100644
index 73e1b1e..0000000
--- a/compose/material3/material3/src/commonMain/kotlin/androidx/compose/material3/Swipeable.kt
+++ /dev/null
@@ -1,888 +0,0 @@
-/*
- * 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.compose.material3
-
-import androidx.annotation.FloatRange
-import androidx.compose.animation.core.Animatable
-import androidx.compose.animation.core.AnimationSpec
-import androidx.compose.animation.core.SpringSpec
-import androidx.compose.foundation.gestures.DraggableState
-import androidx.compose.foundation.gestures.Orientation
-import androidx.compose.foundation.gestures.draggable
-import androidx.compose.foundation.interaction.MutableInteractionSource
-import androidx.compose.material3.SwipeableDefaults.AnimationSpec
-import androidx.compose.material3.SwipeableDefaults.StandardResistanceFactor
-import androidx.compose.material3.SwipeableDefaults.VelocityThreshold
-import androidx.compose.material3.SwipeableDefaults.resistanceConfig
-import androidx.compose.runtime.Composable
-import androidx.compose.runtime.DisposableEffect
-import androidx.compose.runtime.FloatState
-import androidx.compose.runtime.Immutable
-import androidx.compose.runtime.LaunchedEffect
-import androidx.compose.runtime.Stable
-import androidx.compose.runtime.getValue
-import androidx.compose.runtime.mutableFloatStateOf
-import androidx.compose.runtime.mutableStateOf
-import androidx.compose.runtime.remember
-import androidx.compose.runtime.saveable.Saver
-import androidx.compose.runtime.saveable.rememberSaveable
-import androidx.compose.runtime.setValue
-import androidx.compose.runtime.snapshotFlow
-import androidx.compose.ui.Modifier
-import androidx.compose.ui.composed
-import androidx.compose.ui.geometry.Offset
-import androidx.compose.ui.input.nestedscroll.NestedScrollConnection
-import androidx.compose.ui.input.nestedscroll.NestedScrollSource
-import androidx.compose.ui.platform.LocalDensity
-import androidx.compose.ui.platform.debugInspectorInfo
-import androidx.compose.ui.unit.Density
-import androidx.compose.ui.unit.Dp
-import androidx.compose.ui.unit.Velocity
-import androidx.compose.ui.unit.dp
-import androidx.compose.ui.util.fastMaxBy
-import androidx.compose.ui.util.fastMinByOrNull
-import androidx.compose.ui.util.lerp
-import kotlin.math.PI
-import kotlin.math.abs
-import kotlin.math.sign
-import kotlin.math.sin
-import kotlinx.coroutines.CancellationException
-import kotlinx.coroutines.flow.Flow
-import kotlinx.coroutines.flow.filter
-import kotlinx.coroutines.flow.take
-import kotlinx.coroutines.launch
-
-/**
- * State of the [swipeable] modifier.
- *
- * This contains necessary information about any ongoing swipe or animation and provides methods
- * to change the state either immediately or by starting an animation. To create and remember a
- * [SwipeableState] with the default animation clock, use [rememberSwipeableState].
- *
- * @param initialValue The initial value of the state.
- * @param animationSpec The default animation that will be used to animate to a new state.
- * @param confirmStateChange Optional callback invoked to confirm or veto a pending state change.
- */
-@Stable
-@ExperimentalMaterial3Api
-internal open class SwipeableState<T>(
-    initialValue: T,
-    internal val animationSpec: AnimationSpec<Float> = AnimationSpec,
-    internal val confirmStateChange: (newValue: T) -> Boolean = { true }
-) {
-    /**
-     * The current value of the state.
-     *
-     * If no swipe or animation is in progress, this corresponds to the anchor at which the
-     * [swipeable] is currently settled. If a swipe or animation is in progress, this corresponds
-     * the last anchor at which the [swipeable] was settled before the swipe or animation started.
-     */
-    var currentValue: T by mutableStateOf(initialValue)
-        private set
-
-    /**
-     * Whether the state is currently animating.
-     */
-    var isAnimationRunning: Boolean by mutableStateOf(false)
-        private set
-
-    /**
-     * The current position (in pixels) of the [swipeable].
-     *
-     * You should use this state to offset your content accordingly. The recommended way is to
-     * use `Modifier.offsetPx`. This includes the resistance by default, if resistance is enabled.
-     */
-    val offset: FloatState get() = offsetState
-
-    /**
-     * The amount by which the [swipeable] has been swiped past its bounds.
-     */
-    val overflow: FloatState get() = overflowState
-
-    // Use `Float.NaN` as a placeholder while the state is uninitialised.
-    private val offsetState = mutableFloatStateOf(0f)
-    private val overflowState = mutableFloatStateOf(0f)
-
-    // the source of truth for the "real"(non ui) position
-    // basically position in bounds + overflow
-    private val absoluteOffset = mutableFloatStateOf(0f)
-
-    // current animation target, if animating, otherwise null
-    private val animationTarget = mutableStateOf<Float?>(null)
-
-    internal var anchors by mutableStateOf(emptyMap<Float, T>())
-
-    private val latestNonEmptyAnchorsFlow: Flow<Map<Float, T>> =
-        snapshotFlow { anchors }
-            .filter { it.isNotEmpty() }
-            .take(1)
-
-    internal var minBound = Float.NEGATIVE_INFINITY
-    internal var maxBound = Float.POSITIVE_INFINITY
-
-    internal fun ensureInit(newAnchors: Map<Float, T>) {
-        if (anchors.isEmpty()) {
-            // need to do initial synchronization synchronously :(
-            val initialOffset = newAnchors.getOffset(currentValue)
-            requireNotNull(initialOffset) {
-                "The initial value must have an associated anchor."
-            }
-            offsetState.floatValue = initialOffset
-            absoluteOffset.floatValue = initialOffset
-        }
-    }
-
-    internal suspend fun processNewAnchors(
-        oldAnchors: Map<Float, T>,
-        newAnchors: Map<Float, T>
-    ) {
-        if (oldAnchors.isEmpty()) {
-            // If this is the first time that we receive anchors, then we need to initialise
-            // the state so we snap to the offset associated to the initial value.
-            minBound = newAnchors.keys.minOrNull()!!
-            maxBound = newAnchors.keys.maxOrNull()!!
-            val initialOffset = newAnchors.getOffset(currentValue)
-            requireNotNull(initialOffset) {
-                "The initial value must have an associated anchor."
-            }
-            snapInternalToOffset(initialOffset)
-        } else if (newAnchors != oldAnchors) {
-            // If we have received new anchors, then the offset of the current value might
-            // have changed, so we need to animate to the new offset. If the current value
-            // has been removed from the anchors then we animate to the closest anchor
-            // instead. Note that this stops any ongoing animation.
-            minBound = Float.NEGATIVE_INFINITY
-            maxBound = Float.POSITIVE_INFINITY
-            val animationTargetValue = animationTarget.value
-            // if we're in the animation already, let's find it a new home
-            val targetOffset = if (animationTargetValue != null) {
-                // first, try to map old state to the new state
-                val oldState = oldAnchors[animationTargetValue]
-                val newState = newAnchors.getOffset(oldState)
-                // return new state if exists, or find the closes one among new anchors
-                newState ?: newAnchors.keys.minByOrNull { abs(it - animationTargetValue) }!!
-            } else {
-                // we're not animating, proceed by finding the new anchors for an old value
-                val actualOldValue = oldAnchors[offset.floatValue]
-                val value = if (actualOldValue == currentValue) currentValue else actualOldValue
-                newAnchors.getOffset(value) ?: newAnchors
-                    .keys.minByOrNull { abs(it - offset.floatValue) }!!
-            }
-            try {
-                animateInternalToOffset(targetOffset, animationSpec)
-            } catch (c: CancellationException) {
-                // If the animation was interrupted for any reason, snap as a last resort.
-                snapInternalToOffset(targetOffset)
-            } finally {
-                currentValue = newAnchors.getValue(targetOffset)
-                minBound = newAnchors.keys.minOrNull()!!
-                maxBound = newAnchors.keys.maxOrNull()!!
-            }
-        }
-    }
-
-    internal var thresholds: (Float, Float) -> Float by mutableStateOf({ _, _ -> 0f })
-
-    internal var velocityThreshold by mutableFloatStateOf(0f)
-
-    internal var resistance: ResistanceConfig? by mutableStateOf(null)
-
-    internal val draggableState = DraggableState {
-        val newAbsolute = absoluteOffset.floatValue + it
-        val clamped = newAbsolute.coerceIn(minBound, maxBound)
-        val overflow = newAbsolute - clamped
-        val resistanceDelta = resistance?.computeResistance(overflow) ?: 0f
-        offsetState.floatValue = clamped + resistanceDelta
-        overflowState.floatValue = overflow
-        absoluteOffset.floatValue = newAbsolute
-    }
-
-    private suspend fun snapInternalToOffset(target: Float) {
-        draggableState.drag {
-            dragBy(target - absoluteOffset.floatValue)
-        }
-    }
-
-    private suspend fun animateInternalToOffset(target: Float, spec: AnimationSpec<Float>) {
-        draggableState.drag {
-            var prevValue = absoluteOffset.floatValue
-            animationTarget.value = target
-            isAnimationRunning = true
-            try {
-                Animatable(prevValue).animateTo(target, spec) {
-                    dragBy(this.value - prevValue)
-                    prevValue = this.value
-                }
-            } finally {
-                animationTarget.value = null
-                isAnimationRunning = false
-            }
-        }
-    }
-
-    /**
-     * The target value of the state.
-     *
-     * If a swipe is in progress, this is the value that the [swipeable] would animate to if the
-     * 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].
-     */
-    @ExperimentalMaterial3Api
-    internal val targetValue: T
-        get() {
-            // TODO(calintat): Track current velocity (b/149549482) and use that here.
-            val target = animationTarget.value ?: computeTarget(
-                offset = offset.floatValue,
-                lastValue = anchors.getOffset(currentValue) ?: offset.floatValue,
-                anchors = anchors.keys,
-                thresholds = thresholds,
-                velocity = 0f,
-                velocityThreshold = Float.POSITIVE_INFINITY
-            )
-            return anchors[target] ?: currentValue
-        }
-
-    /**
-     * Information about the ongoing swipe or animation, if any. See [SwipeProgress] for details.
-     *
-     * If no swipe or animation is in progress, this returns `SwipeProgress(value, value, 1f)`.
-     */
-    @ExperimentalMaterial3Api
-    internal val progress: SwipeProgress<T>
-        get() {
-            val bounds = findBounds(offset.floatValue, anchors.keys)
-            val from: T
-            val to: T
-            val fraction: Float
-            when (bounds.size) {
-                0 -> {
-                    from = currentValue
-                    to = currentValue
-                    fraction = 1f
-                }
-                1 -> {
-                    from = anchors.getValue(bounds[0])
-                    to = anchors.getValue(bounds[0])
-                    fraction = 1f
-                }
-                else -> {
-                    val (a, b) =
-                        if (direction > 0f) {
-                            bounds[0] to bounds[1]
-                        } else {
-                            bounds[1] to bounds[0]
-                        }
-                    from = anchors.getValue(a)
-                    to = anchors.getValue(b)
-                    fraction = (offset.floatValue - a) / (b - a)
-                }
-            }
-            return SwipeProgress(from, to, fraction)
-        }
-
-    /**
-     * The direction in which the [swipeable] is moving, relative to the current [currentValue].
-     *
-     * This will be either 1f if it is is moving from left to right or top to bottom, -1f if it is
-     * moving from right to left or bottom to top, or 0f if no swipe or animation is in progress.
-     */
-    @ExperimentalMaterial3Api
-    internal val direction: Float
-        get() = anchors.getOffset(currentValue)?.let { sign(offset.floatValue - it) } ?: 0f
-
-    /**
-     * Set the state without any animation and suspend until it's set
-     *
-     * @param targetValue The new target value to set [currentValue] to.
-     */
-    @ExperimentalMaterial3Api
-    internal suspend fun snapTo(targetValue: T) {
-        latestNonEmptyAnchorsFlow.collect { anchors ->
-            val targetOffset = anchors.getOffset(targetValue)
-            requireNotNull(targetOffset) {
-                "The target value must have an associated anchor."
-            }
-            snapInternalToOffset(targetOffset)
-            currentValue = targetValue
-        }
-    }
-
-    /**
-     * Set the state to the target value by starting an animation.
-     *
-     * @param targetValue The new value to animate to.
-     * @param anim The animation that will be used to animate to the new value.
-     */
-    @ExperimentalMaterial3Api
-    internal suspend fun animateTo(targetValue: T, anim: AnimationSpec<Float> = animationSpec) {
-        latestNonEmptyAnchorsFlow.collect { anchors ->
-            try {
-                val targetOffset = anchors.getOffset(targetValue)
-                requireNotNull(targetOffset) {
-                    "The target value must have an associated anchor."
-                }
-                animateInternalToOffset(targetOffset, anim)
-            } finally {
-                val endOffset = absoluteOffset.floatValue
-                val endValue = anchors
-                    // fighting rounding error once again, anchor should be as close as 0.5 pixels
-                    .filterKeys { anchorOffset -> abs(anchorOffset - endOffset) < 0.5f }
-                    .values.firstOrNull() ?: currentValue
-                currentValue = endValue
-            }
-        }
-    }
-
-    /**
-     * Perform fling with settling to one of the anchors which is determined by the given
-     * [velocity]. Fling with settling [swipeable] will always consume all the velocity provided
-     * since it will settle at the anchor.
-     *
-     * In general cases, [swipeable] flings by itself when being swiped. This method is to be
-     * used for nested scroll logic that wraps the [swipeable]. In nested scroll developer may
-     * want to trigger settling fling when the child scroll container reaches the bound.
-     *
-     * @param velocity velocity to fling and settle with
-     *
-     * @return the reason fling ended
-     */
-    internal suspend fun performFling(velocity: Float) {
-        latestNonEmptyAnchorsFlow.collect { anchors ->
-            val lastAnchor = anchors.getOffset(currentValue)!!
-            val targetValue = computeTarget(
-                offset = offset.floatValue,
-                lastValue = lastAnchor,
-                anchors = anchors.keys,
-                thresholds = thresholds,
-                velocity = velocity,
-                velocityThreshold = velocityThreshold
-            )
-            val targetState = anchors[targetValue]
-            if (targetState != null && confirmStateChange(targetState)) animateTo(targetState)
-            // If the user vetoed the state change, rollback to the previous state.
-            else animateInternalToOffset(lastAnchor, animationSpec)
-        }
-    }
-
-    /**
-     * Force [swipeable] to consume drag delta provided from outside of the regular [swipeable]
-     * gesture flow.
-     *
-     * Note: This method performs generic drag and it won't settle to any particular anchor, *
-     * leaving swipeable in between anchors. When done dragging, [performFling] must be
-     * called as well to ensure swipeable will settle at the anchor.
-     *
-     * In general cases, [swipeable] drags by itself when being swiped. This method is to be
-     * used for nested scroll logic that wraps the [swipeable]. In nested scroll developer may
-     * want to force drag when the child scroll container reaches the bound.
-     *
-     * @param delta delta in pixels to drag by
-     *
-     * @return the amount of [delta] consumed
-     */
-    internal fun performDrag(delta: Float): Float {
-        val potentiallyConsumed = absoluteOffset.floatValue + delta
-        val clamped = potentiallyConsumed.coerceIn(minBound, maxBound)
-        val deltaToConsume = clamped - absoluteOffset.floatValue
-        if (abs(deltaToConsume) > 0) {
-            draggableState.dispatchRawDelta(deltaToConsume)
-        }
-        return deltaToConsume
-    }
-
-    companion object {
-        /**
-         * The default [Saver] implementation for [SwipeableState].
-         */
-        fun <T : Any> Saver(
-            animationSpec: AnimationSpec<Float>,
-            confirmStateChange: (T) -> Boolean
-        ) = Saver<SwipeableState<T>, T>(
-            save = { it.currentValue },
-            restore = { SwipeableState(it, animationSpec, confirmStateChange) }
-        )
-    }
-}
-
-/**
- * Collects information about the ongoing swipe or animation in [swipeable].
- *
- * To access this information, use [SwipeableState.progress].
- *
- * @param from The state corresponding to the anchor we are moving away from.
- * @param to The state corresponding to the anchor we are moving towards.
- * @param fraction The fraction that the current position represents between [from] and [to].
- * Must be between `0` and `1`.
- */
-@Immutable
-@ExperimentalMaterial3Api
-internal class SwipeProgress<T>(
-    val from: T,
-    val to: T,
-    @FloatRange(from = 0.0, to = 1.0)
-    val fraction: Float
-) {
-    override fun equals(other: Any?): Boolean {
-        if (this === other) return true
-        if (other !is SwipeProgress<*>) return false
-
-        if (from != other.from) return false
-        if (to != other.to) return false
-        if (fraction != other.fraction) return false
-
-        return true
-    }
-
-    override fun hashCode(): Int {
-        var result = from?.hashCode() ?: 0
-        result = 31 * result + (to?.hashCode() ?: 0)
-        result = 31 * result + fraction.hashCode()
-        return result
-    }
-
-    override fun toString(): String {
-        return "SwipeProgress(from=$from, to=$to, fraction=$fraction)"
-    }
-}
-
-/**
- * Create and [remember] a [SwipeableState] with the default animation clock.
- *
- * @param initialValue The initial value of the state.
- * @param animationSpec The default animation that will be used to animate to a new state.
- * @param confirmStateChange Optional callback invoked to confirm or veto a pending state change.
- */
-@Composable
-@ExperimentalMaterial3Api
-internal fun <T : Any> rememberSwipeableState(
-    initialValue: T,
-    animationSpec: AnimationSpec<Float> = AnimationSpec,
-    confirmStateChange: (newValue: T) -> Boolean = { true }
-): SwipeableState<T> {
-    return rememberSaveable(
-        saver = SwipeableState.Saver(
-            animationSpec = animationSpec,
-            confirmStateChange = confirmStateChange
-        )
-    ) {
-        SwipeableState(
-            initialValue = initialValue,
-            animationSpec = animationSpec,
-            confirmStateChange = confirmStateChange
-        )
-    }
-}
-
-/**
- * Create and [remember] a [SwipeableState] which is kept in sync with another state, i.e.:
- *  1. Whenever the [value] changes, the [SwipeableState] will be animated to that new value.
- *  2. Whenever the value of the [SwipeableState] changes (e.g. after a swipe), the owner of the
- *  [value] will be notified to update their state to the new value of the [SwipeableState] by
- *  invoking [onValueChange]. If the owner does not update their state to the provided value for
- *  some reason, then the [SwipeableState] will perform a rollback to the previous, correct value.
- */
-@Composable
-@ExperimentalMaterial3Api
-internal fun <T : Any> rememberSwipeableStateFor(
-    value: T,
-    onValueChange: (T) -> Unit,
-    animationSpec: AnimationSpec<Float> = AnimationSpec
-): SwipeableState<T> {
-    val swipeableState = remember {
-        SwipeableState(
-            initialValue = value,
-            animationSpec = animationSpec,
-            confirmStateChange = { true }
-        )
-    }
-    val forceAnimationCheck = remember { mutableStateOf(false) }
-    LaunchedEffect(value, forceAnimationCheck.value) {
-        if (value != swipeableState.currentValue) {
-            swipeableState.animateTo(value)
-        }
-    }
-    DisposableEffect(swipeableState.currentValue) {
-        if (value != swipeableState.currentValue) {
-            onValueChange(swipeableState.currentValue)
-            forceAnimationCheck.value = !forceAnimationCheck.value
-        }
-        onDispose { }
-    }
-    return swipeableState
-}
-
-/**
- * Enable swipe gestures between a set of predefined states.
- *
- * To use this, you must provide a map of anchors (in pixels) to states (of type [T]).
- * Note that this map cannot be empty and cannot have two anchors mapped to the same state.
- *
- * When a swipe is detected, the offset of the [SwipeableState] will be updated with the swipe
- * delta. You should use this offset to move your content accordingly (see `Modifier.offsetPx`).
- * When the swipe ends, the offset will be animated to one of the anchors and when that anchor is
- * reached, the value of the [SwipeableState] will also be updated to the state corresponding to
- * the new anchor. The target anchor is calculated based on the provided positional [thresholds].
- *
- * Swiping is constrained between the minimum and maximum anchors. If the user attempts to swipe
- * past these bounds, a resistance effect will bfe applied by default. The amount of resistance at
- * each edge is specified by the [resistance] config. To disable all resistance, set it to `null`.
- *
- * @param T The type of the state.
- * @param state The state of the [swipeable].
- * @param anchors Pairs of anchors and states, used to map anchors to states and vice versa.
- * @param thresholds Specifies where the thresholds between the states are. The thresholds will be
- * used to determine which state to animate to when swiping stops. This is represented as a lambda
- * that takes two states and returns the threshold between them in the form of a [ThresholdConfig].
- * Note that the order of the states corresponds to the swipe direction.
- * @param orientation The orientation in which the [swipeable] can be swiped.
- * @param enabled Whether this [swipeable] is enabled and should react to the user's input.
- * @param reverseDirection Whether to reverse the direction of the swipe, so a top to bottom
- * swipe will behave like bottom to top, and a left to right swipe will behave like right to left.
- * @param interactionSource Optional [MutableInteractionSource] that will passed on to
- * the internal [Modifier.draggable].
- * @param resistance Controls how much resistance will be applied when swiping past the bounds.
- * @param velocityThreshold The threshold (in dp per second) that the end velocity has to exceed
- * in order to animate to the next state, even if the positional [thresholds] have not been reached.
- */
-@ExperimentalMaterial3Api
-internal fun <T> Modifier.swipeable(
-    state: SwipeableState<T>,
-    anchors: Map<Float, T>,
-    orientation: Orientation,
-    enabled: Boolean = true,
-    reverseDirection: Boolean = false,
-    interactionSource: MutableInteractionSource? = null,
-    thresholds: (from: T, to: T) -> ThresholdConfig = { _, _ -> FixedThreshold(56.dp) },
-    resistance: ResistanceConfig? = resistanceConfig(anchors.keys),
-    velocityThreshold: Dp = VelocityThreshold
-) = composed(
-    inspectorInfo = debugInspectorInfo {
-        name = "swipeable"
-        properties["state"] = state
-        properties["anchors"] = anchors
-        properties["orientation"] = orientation
-        properties["enabled"] = enabled
-        properties["reverseDirection"] = reverseDirection
-        properties["interactionSource"] = interactionSource
-        properties["thresholds"] = thresholds
-        properties["resistance"] = resistance
-        properties["velocityThreshold"] = velocityThreshold
-    }
-) {
-    require(anchors.isNotEmpty()) {
-        "You must have at least one anchor."
-    }
-    require(anchors.values.distinct().count() == anchors.size) {
-        "You cannot have two anchors mapped to the same state."
-    }
-    val density = LocalDensity.current
-    state.ensureInit(anchors)
-    LaunchedEffect(anchors, state) {
-        val oldAnchors = state.anchors
-        state.anchors = anchors
-        state.resistance = resistance
-        state.thresholds = { a, b ->
-            val from = anchors.getValue(a)
-            val to = anchors.getValue(b)
-            with(thresholds(from, to)) { density.computeThreshold(a, b) }
-        }
-        with(density) {
-            state.velocityThreshold = velocityThreshold.toPx()
-        }
-        state.processNewAnchors(oldAnchors, anchors)
-    }
-
-    Modifier.draggable(
-        orientation = orientation,
-        enabled = enabled,
-        reverseDirection = reverseDirection,
-        interactionSource = interactionSource,
-        startDragImmediately = state.isAnimationRunning,
-        onDragStopped = { velocity -> launch { state.performFling(velocity) } },
-        state = state.draggableState
-    )
-}
-
-/**
- * Interface to compute a threshold between two anchors/states in a [swipeable].
- *
- * To define a [ThresholdConfig], consider using [FixedThreshold] and [FractionalThreshold].
- */
-@Stable
-@ExperimentalMaterial3Api
-internal interface ThresholdConfig {
-    /**
-     * Compute the value of the threshold (in pixels), once the values of the anchors are known.
-     */
-    fun Density.computeThreshold(fromValue: Float, toValue: Float): Float
-}
-
-/**
- * A fixed threshold will be at an [offset] away from the first anchor.
- *
- * @param offset The offset (in dp) that the threshold will be at.
- */
-@Immutable
-@ExperimentalMaterial3Api
-internal data class FixedThreshold(private val offset: Dp) : ThresholdConfig {
-    override fun Density.computeThreshold(fromValue: Float, toValue: Float): Float {
-        return fromValue + offset.toPx() * sign(toValue - fromValue)
-    }
-}
-
-/**
- * A fractional threshold will be at a [fraction] of the way between the two anchors.
- *
- * @param fraction The fraction (between 0 and 1) that the threshold will be at.
- */
-@Immutable
-@ExperimentalMaterial3Api
-internal data class FractionalThreshold(
-    @FloatRange(from = 0.0, to = 1.0)
-    private val fraction: Float
-) : ThresholdConfig {
-    override fun Density.computeThreshold(fromValue: Float, toValue: Float): Float {
-        return lerp(fromValue, toValue, fraction)
-    }
-}
-
-/**
- * Specifies how resistance is calculated in [swipeable].
- *
- * There are two things needed to calculate resistance: the resistance basis determines how much
- * overflow will be consumed to achieve maximum resistance, and the resistance factor determines
- * the amount of resistance (the larger the resistance factor, the stronger the resistance).
- *
- * The resistance basis is usually either the size of the component which [swipeable] is applied
- * to, or the distance between the minimum and maximum anchors. For a constructor in which the
- * resistance basis defaults to the latter, consider using [resistanceConfig].
- *
- * You may specify different resistance factors for each bound. Consider using one of the default
- * resistance factors in [SwipeableDefaults]: `StandardResistanceFactor` to convey that the user
- * has run out of things to see, and `StiffResistanceFactor` to convey that the user cannot swipe
- * this right now. Also, you can set either factor to 0 to disable resistance at that bound.
- *
- * @param basis Specifies the maximum amount of overflow that will be consumed. Must be positive.
- * @param factorAtMin The factor by which to scale the resistance at the minimum bound.
- * Must not be negative.
- * @param factorAtMax The factor by which to scale the resistance at the maximum bound.
- * Must not be negative.
- */
-@Immutable
-internal class ResistanceConfig(
-    @FloatRange(from = 0.0, fromInclusive = false)
-    val basis: Float,
-    @FloatRange(from = 0.0)
-    val factorAtMin: Float = StandardResistanceFactor,
-    @FloatRange(from = 0.0)
-    val factorAtMax: Float = StandardResistanceFactor
-) {
-    fun computeResistance(overflow: Float): Float {
-        val factor = if (overflow < 0) factorAtMin else factorAtMax
-        if (factor == 0f) return 0f
-        val progress = (overflow / basis).coerceIn(-1f, 1f)
-        return basis / factor * sin(progress * PI.toFloat() / 2)
-    }
-
-    override fun equals(other: Any?): Boolean {
-        if (this === other) return true
-        if (other !is ResistanceConfig) return false
-
-        if (basis != other.basis) return false
-        if (factorAtMin != other.factorAtMin) return false
-        if (factorAtMax != other.factorAtMax) return false
-
-        return true
-    }
-
-    override fun hashCode(): Int {
-        var result = basis.hashCode()
-        result = 31 * result + factorAtMin.hashCode()
-        result = 31 * result + factorAtMax.hashCode()
-        return result
-    }
-
-    override fun toString(): String {
-        return "ResistanceConfig(basis=$basis, factorAtMin=$factorAtMin, factorAtMax=$factorAtMax)"
-    }
-}
-
-/**
- *  Given an offset x and a set of anchors, return a list of anchors:
- *   1. [ ] if the set of anchors is empty,
- *   2. [ x' ] if x is equal to one of the anchors, accounting for a small rounding error, where x'
- *      is x rounded to the exact value of the matching anchor,
- *   3. [ min ] if min is the minimum anchor and x < min,
- *   4. [ max ] if max is the maximum anchor and x > max, or
- *   5. [ a , b ] if a and b are anchors such that a < x < b and b - a is minimal.
- */
-private fun findBounds(
-    offset: Float,
-    anchors: Set<Float>
-): List<Float> {
-    // Find the anchors the target lies between with a little bit of rounding error.
-    val a = anchors.filter { it <= offset + 0.001 }.fastMaxBy { it }
-    val b = anchors.filter { it >= offset - 0.001 }.fastMinByOrNull { it }
-
-    return when {
-        a == null ->
-            // case 1 or 3
-            listOfNotNull(b)
-        b == null ->
-            // case 4
-            listOf(a)
-        a == b ->
-            // case 2
-            // Can't return offset itself here since it might not be exactly equal
-            // to the anchor, despite being considered an exact match.
-            listOf(a)
-        else ->
-            // case 5
-            listOf(a, b)
-    }
-}
-
-private fun computeTarget(
-    offset: Float,
-    lastValue: Float,
-    anchors: Set<Float>,
-    thresholds: (Float, Float) -> Float,
-    velocity: Float,
-    velocityThreshold: Float
-): Float {
-    val bounds = findBounds(offset, anchors)
-    return when (bounds.size) {
-        0 -> lastValue
-        1 -> bounds[0]
-        else -> {
-            val lower = bounds[0]
-            val upper = bounds[1]
-            if (lastValue <= offset) {
-                // Swiping from lower to upper (positive).
-                if (velocity >= velocityThreshold) {
-                    return upper
-                } else {
-                    val threshold = thresholds(lower, upper)
-                    if (offset < threshold) lower else upper
-                }
-            } else {
-                // Swiping from upper to lower (negative).
-                if (velocity <= -velocityThreshold) {
-                    return lower
-                } else {
-                    val threshold = thresholds(upper, lower)
-                    if (offset > threshold) upper else lower
-                }
-            }
-        }
-    }
-}
-
-private fun <T> Map<Float, T>.getOffset(state: T): Float? {
-    return entries.firstOrNull { it.value == state }?.key
-}
-
-/**
- * Contains useful defaults for [swipeable] and [SwipeableState].
- */
-internal object SwipeableDefaults {
-    /**
-     * The default animation used by [SwipeableState].
-     */
-    internal val AnimationSpec = SpringSpec<Float>()
-
-    /**
-     * The default velocity threshold (1.8 dp per millisecond) used by [swipeable].
-     */
-    internal val VelocityThreshold = 125.dp
-
-    /**
-     * A stiff resistance factor which indicates that swiping isn't available right now.
-     */
-    const val StiffResistanceFactor = 20f
-
-    /**
-     * A standard resistance factor which indicates that the user has run out of things to see.
-     */
-    const val StandardResistanceFactor = 10f
-
-    /**
-     * The default resistance config used by [swipeable].
-     *
-     * This returns `null` if there is one anchor. If there are at least two anchors, it returns
-     * a [ResistanceConfig] with the resistance basis equal to the distance between the two bounds.
-     */
-    internal fun resistanceConfig(
-        anchors: Set<Float>,
-        factorAtMin: Float = StandardResistanceFactor,
-        factorAtMax: Float = StandardResistanceFactor
-    ): ResistanceConfig? {
-        return if (anchors.size <= 1) {
-            null
-        } else {
-            val basis = anchors.maxOrNull()!! - anchors.minOrNull()!!
-            ResistanceConfig(basis, factorAtMin, factorAtMax)
-        }
-    }
-}
-
-// temp default nested scroll connection for swipeables which desire as an opt in
-// revisit in b/174756744 as all types will have their own specific connection probably
-@ExperimentalMaterial3Api
-internal val <T> SwipeableState<T>.PreUpPostDownNestedScrollConnection: NestedScrollConnection
-    get() = object : NestedScrollConnection {
-        override fun onPreScroll(available: Offset, source: NestedScrollSource): Offset {
-            val delta = available.toFloat()
-            return if (delta < 0 && source == NestedScrollSource.Drag) {
-                performDrag(delta).toOffset()
-            } else {
-                Offset.Zero
-            }
-        }
-
-        override fun onPostScroll(
-            consumed: Offset,
-            available: Offset,
-            source: NestedScrollSource
-        ): Offset {
-            return if (source == NestedScrollSource.Drag) {
-                performDrag(available.toFloat()).toOffset()
-            } else {
-                Offset.Zero
-            }
-        }
-
-        override suspend fun onPreFling(available: Velocity): Velocity {
-            val toFling = Offset(available.x, available.y).toFloat()
-            return if (toFling < 0 && offset.floatValue > minBound) {
-                performFling(velocity = toFling)
-                // since we go to the anchor with tween settling, consume all for the best UX
-                available
-            } else {
-                Velocity.Zero
-            }
-        }
-
-        override suspend fun onPostFling(consumed: Velocity, available: Velocity): Velocity {
-            performFling(velocity = Offset(available.x, available.y).toFloat())
-            return available
-        }
-
-        private fun Float.toOffset(): Offset = Offset(0f, this)
-
-        private fun Offset.toFloat(): Float = this.y
-    }
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/material3/material3/src/commonMain/kotlin/androidx/compose/material3/pullrefresh/PullRefresh.kt b/compose/material3/material3/src/commonMain/kotlin/androidx/compose/material3/pullrefresh/PullRefresh.kt
new file mode 100644
index 0000000..1f60227
--- /dev/null
+++ b/compose/material3/material3/src/commonMain/kotlin/androidx/compose/material3/pullrefresh/PullRefresh.kt
@@ -0,0 +1,326 @@
+/*
+ * 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.material3.pullrefresh
+
+import androidx.annotation.FloatRange
+import androidx.compose.animation.Crossfade
+import androidx.compose.animation.core.LinearEasing
+import androidx.compose.animation.core.animateFloatAsState
+import androidx.compose.animation.core.tween
+import androidx.compose.foundation.Canvas
+import androidx.compose.foundation.background
+import androidx.compose.foundation.layout.Box
+import androidx.compose.foundation.layout.fillMaxSize
+import androidx.compose.foundation.layout.size
+import androidx.compose.foundation.shape.CircleShape
+import androidx.compose.material3.CircularIndicatorDiameter
+import androidx.compose.material3.CircularProgressIndicator
+import androidx.compose.material3.ExperimentalMaterial3Api
+import androidx.compose.material3.LocalContentColor
+import androidx.compose.material3.MaterialTheme
+import androidx.compose.material3.contentColorFor
+import androidx.compose.material3.pullrefresh.PullRefreshDefaults.Indicator
+import androidx.compose.material3.tokens.MotionTokens
+import androidx.compose.runtime.Composable
+import androidx.compose.runtime.CompositionLocalProvider
+import androidx.compose.runtime.Immutable
+import androidx.compose.runtime.Stable
+import androidx.compose.runtime.derivedStateOf
+import androidx.compose.runtime.getValue
+import androidx.compose.runtime.remember
+import androidx.compose.ui.Alignment
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.draw.shadow
+import androidx.compose.ui.geometry.Offset
+import androidx.compose.ui.geometry.Rect
+import androidx.compose.ui.geometry.center
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.Path
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.Shape
+import androidx.compose.ui.graphics.StrokeCap
+import androidx.compose.ui.graphics.drawscope.DrawScope
+import androidx.compose.ui.graphics.drawscope.Stroke
+import androidx.compose.ui.graphics.drawscope.rotate
+import androidx.compose.ui.graphics.graphicsLayer
+import androidx.compose.ui.semantics.ProgressBarRangeInfo
+import androidx.compose.ui.semantics.progressBarRangeInfo
+import androidx.compose.ui.semantics.semantics
+import androidx.compose.ui.unit.Dp
+import androidx.compose.ui.unit.dp
+import kotlin.math.abs
+import kotlin.math.max
+import kotlin.math.min
+import kotlin.math.pow
+
+// TODO: Provide samples once PullRefreshState implementation lands
+/**
+ * Material Design pull refresh indicator
+ *
+ * @param state the state of this [PullRefreshContainer]
+ * @param modifier the [Modifier] to be applied to this container
+ * @param indicator The indicator placed inside of the [PullRefreshContainer]. Has access to [state]
+ * @param shape the [Shape] of this container
+ * @param containerColor the color of this container
+ * @param contentColor the color of the progress indicator
+ */
+@Composable
+@ExperimentalMaterial3Api
+@Suppress("ComposableLambdaParameterPosition")
+internal fun PullRefreshContainer(
+    state: PullRefreshState,
+    modifier: Modifier = Modifier,
+    indicator: @Composable (PullRefreshState) -> Unit = { pullRefreshState ->
+        Indicator(state = pullRefreshState)
+    },
+    shape: Shape = PullRefreshDefaults.shape,
+    containerColor: Color = PullRefreshDefaults.containerColor,
+    contentColor: Color = contentColorFor(backgroundColor = containerColor),
+) {
+    // Surface is not used here, as we do not want its input-blocking behaviour, since the indicator
+    // is typically displayed above other (possibly) interactive indicator.
+    val showElevation = remember {
+        derivedStateOf { state.refreshing || state.verticalOffset > 0.5f }
+    }
+    CompositionLocalProvider(LocalContentColor provides contentColor) {
+        Box(
+            modifier = modifier
+                .size(CircularIndicatorDiameter)
+                .graphicsLayer {
+                    translationY = state.verticalOffset - size.height
+                }
+                .shadow(
+                    // Avoid shadow when indicator is hidden
+                    elevation = if (showElevation.value) Elevation else 0.dp,
+                    shape = shape,
+                    clip = true
+                )
+                .background(color = containerColor, shape = shape)
+        ) {
+            indicator(state)
+        }
+    }
+}
+
+/**
+ * Contains the default values for [PullRefreshContainer]
+ */
+@ExperimentalMaterial3Api
+internal object PullRefreshDefaults {
+
+    /** The default shape for [PullRefreshContainer] */
+    val shape: Shape = CircleShape
+
+    /** The default container color for [PullRefreshContainer] */
+    val containerColor: Color @Composable get() = MaterialTheme.colorScheme.surfaceContainerHigh
+
+    /**
+     * The default indicator for [PullRefreshContainer].
+     */
+    @Composable
+    fun Indicator(
+        state: PullRefreshState,
+        modifier: Modifier = Modifier,
+        color: Color = LocalContentColor.current,
+    ) {
+        Crossfade(
+            targetState = state.refreshing,
+            animationSpec = tween(durationMillis = CrossfadeDurationMs)
+        ) { refreshing ->
+            Box(
+                modifier = modifier.fillMaxSize(),
+                contentAlignment = Alignment.Center
+            ) {
+                if (refreshing) {
+                    CircularProgressIndicator(
+                        strokeWidth = StrokeWidth,
+                        color = color,
+                        modifier = Modifier.size(SpinnerSize),
+                    )
+                } else {
+                    CircularArrowProgressIndicator(
+                        progress = { state.progress },
+                        color = color,
+                        strokeWidth = StrokeWidth,
+                    )
+                }
+            }
+        }
+    }
+}
+
+/**
+ * The state that is associated with a [PullRefreshContainer].
+ * Each instance of [PullRefreshContainer] should have its own [PullRefreshState].
+ */
+@Stable
+@ExperimentalMaterial3Api
+internal interface PullRefreshState {
+    /** The threshold above which, if a release occurs, a refresh will be called */
+    val positionalThreshold: Dp
+
+    /**
+     * PullRefresh progress towards [positionalThreshold]. 0.0 indicates no progress, 1.0 indicates
+     * complete progress, > 1.0 indicates overshoot beyond the provided threshold
+     */
+    @get:FloatRange(from = 0.0)
+    val progress: Float
+
+    /**
+     * Indicates whether a refresh is occurring
+     */
+    val refreshing: Boolean
+
+    /**
+     * The vertical offset (in pixels) for the [PullRefreshContainer] to consume
+     */
+    @get:FloatRange(from = 0.0)
+    val verticalOffset: Float
+}
+
+/** The default pull indicator for [PullRefreshContainer] */
+@Composable
+@Suppress("PrimitiveInLambda")
+private fun CircularArrowProgressIndicator(
+    progress: () -> Float,
+    color: Color,
+    strokeWidth: Dp,
+    modifier: Modifier = Modifier,
+) {
+    val path = remember { Path().apply { fillType = PathFillType.EvenOdd } }
+    // TODO: Consider refactoring this sub-component utilizing Modifier.Node
+    val targetAlpha by remember {
+        derivedStateOf { if (progress() >= 1f) MaxAlpha else MinAlpha }
+    }
+    val alphaState = animateFloatAsState(targetValue = targetAlpha, animationSpec = AlphaTween)
+    Canvas(
+        modifier
+            .semantics(mergeDescendants = true) {
+                progressBarRangeInfo =
+                    ProgressBarRangeInfo(progress(), 0f..1f, 0)
+            }
+            .size(SpinnerSize)
+    ) {
+        val values = ArrowValues(progress())
+        val alpha = alphaState.value
+        rotate(degrees = values.rotation) {
+            val arcRadius = ArcRadius.toPx() + strokeWidth.toPx() / 2f
+            val arcBounds = Rect(center = size.center, radius = arcRadius)
+            drawCircularIndicator(color, alpha, values, arcBounds, strokeWidth)
+            drawArrow(path, arcBounds, color, alpha, values, strokeWidth)
+        }
+    }
+}
+
+private fun DrawScope.drawCircularIndicator(
+    color: Color,
+    alpha: Float,
+    values: ArrowValues,
+    arcBounds: Rect,
+    strokeWidth: Dp
+) {
+    drawArc(
+        color = color,
+        alpha = alpha,
+        startAngle = values.startAngle,
+        sweepAngle = values.endAngle - values.startAngle,
+        useCenter = false,
+        topLeft = arcBounds.topLeft,
+        size = arcBounds.size,
+        style = Stroke(
+            width = strokeWidth.toPx(),
+            cap = StrokeCap.Square
+        )
+    )
+}
+
+@Immutable
+private class ArrowValues(
+    val rotation: Float,
+    val startAngle: Float,
+    val endAngle: Float,
+    val scale: Float
+)
+
+private fun ArrowValues(progress: Float): ArrowValues {
+    // Discard first 40% of progress. Scale remaining progress to full range between 0 and 100%.
+    val adjustedPercent = max(min(1f, progress) - 0.4f, 0f) * 5 / 3
+    // How far beyond the threshold pull has gone, as a percentage of the threshold.
+    val overshootPercent = abs(progress) - 1.0f
+    // Limit the overshoot to 200%. Linear between 0 and 200.
+    val linearTension = overshootPercent.coerceIn(0f, 2f)
+    // Non-linear tension. Increases with linearTension, but at a decreasing rate.
+    val tensionPercent = linearTension - linearTension.pow(2) / 4
+
+    // Calculations based on SwipeRefreshLayout specification.
+    val endTrim = adjustedPercent * MaxProgressArc
+    val rotation = (-0.25f + 0.4f * adjustedPercent + tensionPercent) * 0.5f
+    val startAngle = rotation * 360
+    val endAngle = (rotation + endTrim) * 360
+    val scale = min(1f, adjustedPercent)
+
+    return ArrowValues(rotation, startAngle, endAngle, scale)
+}
+
+private fun DrawScope.drawArrow(
+    arrow: Path,
+    bounds: Rect,
+    color: Color,
+    alpha: Float,
+    values: ArrowValues,
+    strokeWidth: Dp,
+) {
+    arrow.reset()
+    arrow.moveTo(0f, 0f) // Move to left corner
+    arrow.lineTo(x = ArrowWidth.toPx() * values.scale, y = 0f) // Line to right corner
+
+    // Line to tip of arrow
+    arrow.lineTo(
+        x = ArrowWidth.toPx() * values.scale / 2,
+        y = ArrowHeight.toPx() * values.scale
+    )
+
+    val radius = min(bounds.width, bounds.height) / 2f
+    val inset = ArrowWidth.toPx() * values.scale / 2f
+    arrow.translate(
+        Offset(
+            x = radius + bounds.center.x - inset,
+            y = bounds.center.y + strokeWidth.toPx() / 2f
+        )
+    )
+    arrow.close()
+    rotate(degrees = values.endAngle) {
+        drawPath(path = arrow, color = color, alpha = alpha)
+    }
+}
+
+private const val MaxProgressArc = 0.8f
+private const val CrossfadeDurationMs = MotionTokens.DurationShort2.toInt()
+
+/** The default stroke width for [Indicator] */
+private val StrokeWidth = 2.5.dp
+
+private val ArcRadius = 7.5.dp
+private val SpinnerSize = 20.dp // (ArcRadius + PullRefreshIndicatorDefaults.StrokeWidth).times(2)
+private val Elevation = 6.dp
+private val ArrowWidth = 10.dp
+private val ArrowHeight = 5.dp
+
+// Values taken from SwipeRefreshLayout
+private const val MinAlpha = 0.3f
+private const val MaxAlpha = 1f
+private val AlphaTween = tween<Float>(MotionTokens.DurationMedium2.toInt(), easing = LinearEasing)
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-saveable/src/commonMain/kotlin/androidx/compose/runtime/saveable/RememberSaveable.kt b/compose/runtime/runtime-saveable/src/commonMain/kotlin/androidx/compose/runtime/saveable/RememberSaveable.kt
index b7818d3..6d1654e 100644
--- a/compose/runtime/runtime-saveable/src/commonMain/kotlin/androidx/compose/runtime/saveable/RememberSaveable.kt
+++ b/compose/runtime/runtime-saveable/src/commonMain/kotlin/androidx/compose/runtime/saveable/RememberSaveable.kt
@@ -138,8 +138,16 @@
     private var key: String,
     private var value: T,
     private var inputs: Array<out Any?>
-) : () -> Any?, SaverScope, RememberObserver {
+) : SaverScope, RememberObserver {
     private var entry: SaveableStateRegistry.Entry? = null
+    /**
+     * Value provider called by the registry.
+     */
+    private val valueProvider = {
+        with(saver) {
+            save(requireNotNull(value) { "Value should be initialized" })
+        }
+    }
 
     fun update(
         saver: Saver<T, Any>,
@@ -171,18 +179,11 @@
         val registry = registry
         require(entry == null) { "entry($entry) is not null" }
         if (registry != null) {
-            registry.requireCanBeSaved(invoke())
-            entry = registry.registerProvider(key, this)
+            registry.requireCanBeSaved(valueProvider())
+            entry = registry.registerProvider(key, valueProvider)
         }
     }
 
-    /**
-     * Value provider called by the registry.
-     */
-    override fun invoke(): Any? = with(saver) {
-        save(requireNotNull(value) { "Value should be initialized" })
-    }
-
     override fun canBeSaved(value: Any): Boolean {
         val registry = registry
         return registry == null || registry.canBeSaved(value)
diff --git a/compose/runtime/runtime/api/current.txt b/compose/runtime/runtime/api/current.txt
index 90d3092..069ff97 100644
--- a/compose/runtime/runtime/api/current.txt
+++ b/compose/runtime/runtime/api/current.txt
@@ -920,7 +920,7 @@
     property public abstract androidx.compose.runtime.SnapshotMutationPolicy<T> policy;
   }
 
-  @androidx.compose.runtime.Stable public final class SnapshotStateList<T> implements kotlin.jvm.internal.markers.KMutableList java.util.List<T> androidx.compose.runtime.snapshots.StateObject {
+  @androidx.compose.runtime.Stable public final class SnapshotStateList<T> implements kotlin.jvm.internal.markers.KMutableList java.util.List<T> java.util.RandomAccess androidx.compose.runtime.snapshots.StateObject {
     ctor public SnapshotStateList();
     method public void add(int index, T element);
     method public boolean add(T element);
diff --git a/compose/runtime/runtime/api/restricted_current.txt b/compose/runtime/runtime/api/restricted_current.txt
index 69c5a8e..4f571e5 100644
--- a/compose/runtime/runtime/api/restricted_current.txt
+++ b/compose/runtime/runtime/api/restricted_current.txt
@@ -971,7 +971,7 @@
     property public abstract androidx.compose.runtime.SnapshotMutationPolicy<T> policy;
   }
 
-  @androidx.compose.runtime.Stable public final class SnapshotStateList<T> implements kotlin.jvm.internal.markers.KMutableList java.util.List<T> androidx.compose.runtime.snapshots.StateObject {
+  @androidx.compose.runtime.Stable public final class SnapshotStateList<T> implements kotlin.jvm.internal.markers.KMutableList java.util.List<T> java.util.RandomAccess androidx.compose.runtime.snapshots.StateObject {
     ctor public SnapshotStateList();
     method public void add(int index, T element);
     method public boolean add(T element);
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/compose-runtime-benchmark/src/androidTest/java/androidx/compose/runtime/benchmark/ComposeBenchmarkBase.kt b/compose/runtime/runtime/compose-runtime-benchmark/src/androidTest/java/androidx/compose/runtime/benchmark/ComposeBenchmarkBase.kt
index 7334416..04cc84a 100644
--- a/compose/runtime/runtime/compose-runtime-benchmark/src/androidTest/java/androidx/compose/runtime/benchmark/ComposeBenchmarkBase.kt
+++ b/compose/runtime/runtime/compose-runtime-benchmark/src/androidTest/java/androidx/compose/runtime/benchmark/ComposeBenchmarkBase.kt
@@ -21,7 +21,6 @@
 import androidx.benchmark.ExperimentalBenchmarkConfigApi
 import androidx.benchmark.MetricCapture
 import androidx.benchmark.MicrobenchmarkConfig
-import androidx.benchmark.ProfilerConfig
 import androidx.benchmark.TimeCapture
 import androidx.benchmark.junit4.BenchmarkRule
 import androidx.compose.runtime.Composable
@@ -112,7 +111,6 @@
                     }
                 }
             ),
-            profiler = ProfilerConfig.MethodTracing(),
         )
     )
 
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..1c3e1d8
--- /dev/null
+++ b/compose/runtime/runtime/src/commonMain/kotlin/androidx/compose/runtime/collection/ScopeMap.kt
@@ -0,0 +1,147 @@
+/*
+ * 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.
+     */
+    fun add(key: Any, scope: T) {
+        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/SnapshotStateList.kt b/compose/runtime/runtime/src/commonMain/kotlin/androidx/compose/runtime/snapshots/SnapshotStateList.kt
index 02367fb..c339e9d 100644
--- a/compose/runtime/runtime/src/commonMain/kotlin/androidx/compose/runtime/snapshots/SnapshotStateList.kt
+++ b/compose/runtime/runtime/src/commonMain/kotlin/androidx/compose/runtime/snapshots/SnapshotStateList.kt
@@ -31,7 +31,7 @@
  * @see androidx.compose.runtime.mutableStateListOf
  */
 @Stable
-class SnapshotStateList<T> : MutableList<T>, StateObject {
+class SnapshotStateList<T> : MutableList<T>, StateObject, RandomAccess {
     override var firstStateRecord: StateRecord =
         StateListStateRecord<T>(persistentListOf())
         private set
@@ -59,7 +59,7 @@
      */
     fun toList(): List<T> = readable.list
 
-    internal val modification: Int get() = withCurrent { modification }
+    internal val structure: Int get() = withCurrent { structuralChange }
 
     @Suppress("UNCHECKED_CAST")
     internal val readable: StateListStateRecord<T> get() =
@@ -72,11 +72,13 @@
         internal var list: PersistentList<T>
     ) : StateRecord() {
         internal var modification = 0
+        internal var structuralChange = 0
         override fun assign(value: StateRecord) {
             synchronized(sync) {
                 @Suppress("UNCHECKED_CAST")
                 list = (value as StateListStateRecord<T>).list
                 modification = value.modification
+                structuralChange = value.structuralChange
             }
         }
 
@@ -112,6 +114,7 @@
             synchronized(sync) {
                 list = persistentListOf()
                 modification++
+                structuralChange++
             }
         }
     }
@@ -120,7 +123,7 @@
     override fun removeAt(index: Int): T = get(index).also { update { it.removeAt(index) } }
     override fun retainAll(elements: Collection<T>) = mutateBoolean { it.retainAll(elements) }
     override fun set(index: Int, element: T): T = get(index).also {
-        update { it.set(index, element) }
+        update(structural = false) { it.set(index, element) }
     }
 
     fun removeRange(fromIndex: Int, toIndex: Int) {
@@ -174,6 +177,7 @@
                     if (modification == currentModification) {
                         list = newList
                         modification++
+                        structuralChange++
                         true
                     } else false
                 }
@@ -183,11 +187,17 @@
         return result
     }
 
-    private inline fun update(block: (PersistentList<T>) -> PersistentList<T>) {
-        conditionalUpdate(block)
+    private inline fun update(
+        structural: Boolean = true,
+        block: (PersistentList<T>) -> PersistentList<T>
+    ) {
+        conditionalUpdate(structural, block)
     }
 
-    private inline fun conditionalUpdate(block: (PersistentList<T>) -> PersistentList<T>) =
+    private inline fun conditionalUpdate(
+        structural: Boolean = true,
+        block: (PersistentList<T>) -> PersistentList<T>
+    ) =
         run {
             val result: Boolean
             while (true) {
@@ -207,6 +217,7 @@
                     synchronized(sync) {
                         if (modification == currentModification) {
                             list = newList
+                            if (structural) structuralChange++
                             modification++
                             true
                         } else false
@@ -244,12 +255,19 @@
     }
 }
 
+private fun invalidIteratorSet(): Nothing =
+    error(
+        "Cannot call set before the first call to next() or previous() " +
+            "or immediately after a call to add() or remove()"
+    )
+
 private class StateListIterator<T>(
     val list: SnapshotStateList<T>,
     offset: Int
 ) : MutableListIterator<T> {
     private var index = offset - 1
-    private var modification = list.modification
+    private var lastRequested = -1
+    private var structure = list.structure
 
     override fun hasPrevious() = index >= 0
 
@@ -258,6 +276,7 @@
     override fun previous(): T {
         validateModification()
         validateRange(index, list.size)
+        lastRequested = index
         return list[index].also { index-- }
     }
 
@@ -266,8 +285,9 @@
     override fun add(element: T) {
         validateModification()
         list.add(index + 1, element)
+        lastRequested = -1
         index++
-        modification = list.modification
+        structure = list.structure
     }
 
     override fun hasNext() = index < list.size - 1
@@ -275,6 +295,7 @@
     override fun next(): T {
         validateModification()
         val newIndex = index + 1
+        lastRequested = newIndex
         validateRange(newIndex, list.size)
         return list[newIndex].also { index = newIndex }
     }
@@ -283,17 +304,19 @@
         validateModification()
         list.removeAt(index)
         index--
-        modification = list.modification
+        lastRequested = -1
+        structure = list.structure
     }
 
     override fun set(element: T) {
         validateModification()
-        list.set(index, element)
-        modification = list.modification
+        if (lastRequested < 0) invalidIteratorSet()
+        list.set(lastRequested, element)
+        structure = list.structure
     }
 
     private fun validateModification() {
-        if (list.modification != modification) {
+        if (list.structure != structure) {
             throw ConcurrentModificationException()
         }
     }
@@ -305,7 +328,7 @@
     toIndex: Int
 ) : MutableList<T> {
     private val offset = fromIndex
-    private var modification = parentList.modification
+    private var structure = parentList.structure
     override var size = toIndex - fromIndex
         private set
 
@@ -343,7 +366,7 @@
         validateModification()
         parentList.add(offset + size, element)
         size++
-        modification = parentList.modification
+        structure = parentList.structure
         return true
     }
 
@@ -351,7 +374,7 @@
         validateModification()
         parentList.add(offset + index, element)
         size++
-        modification = parentList.modification
+        structure = parentList.structure
     }
 
     override fun addAll(index: Int, elements: Collection<T>): Boolean {
@@ -359,7 +382,7 @@
         val result = parentList.addAll(index + offset, elements)
         if (result) {
             size += elements.size
-            modification = parentList.modification
+            structure = parentList.structure
         }
         return result
     }
@@ -371,7 +394,7 @@
             validateModification()
             parentList.removeRange(offset, offset + size)
             size = 0
-            modification = parentList.modification
+            structure = parentList.structure
         }
     }
 
@@ -422,7 +445,7 @@
         validateModification()
         return parentList.removeAt(offset + index).also {
             size--
-            modification = parentList.modification
+            structure = parentList.structure
         }
     }
 
@@ -430,7 +453,7 @@
         validateModification()
         val removed = parentList.retainAllInRange(elements, offset, offset + size)
         if (removed > 0) {
-            modification = parentList.modification
+            structure = parentList.structure
             size -= removed
         }
         return removed > 0
@@ -440,7 +463,7 @@
         validateRange(index, size)
         validateModification()
         val result = parentList.set(index + offset, element)
-        modification = parentList.modification
+        structure = parentList.structure
         return result
     }
 
@@ -453,7 +476,7 @@
     }
 
     private fun validateModification() {
-        if (parentList.modification != modification) {
+        if (parentList.structure != structure) {
             throw ConcurrentModificationException()
         }
     }
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/runtime/runtime/src/nonEmulatorCommonTest/kotlin/androidx/compose/runtime/snapshots/SnapshotStateListTests.kt b/compose/runtime/runtime/src/nonEmulatorCommonTest/kotlin/androidx/compose/runtime/snapshots/SnapshotStateListTests.kt
index d788ffe..c5727ac 100644
--- a/compose/runtime/runtime/src/nonEmulatorCommonTest/kotlin/androidx/compose/runtime/snapshots/SnapshotStateListTests.kt
+++ b/compose/runtime/runtime/src/nonEmulatorCommonTest/kotlin/androidx/compose/runtime/snapshots/SnapshotStateListTests.kt
@@ -17,6 +17,7 @@
 package androidx.compose.runtime.snapshots
 
 import androidx.compose.runtime.mutableStateListOf
+import androidx.compose.runtime.toMutableStateList
 import kotlin.test.Test
 import kotlin.test.assertEquals
 import kotlin.test.assertFailsWith
@@ -593,10 +594,9 @@
     }
 
     @Test(timeout = 30_000)
-    @OptIn(ExperimentalCoroutinesApi::class)
     @IgnoreJsTarget // Not relevant in a single threaded environment
     fun concurrentMixingWriteApply_add(): Unit = runTest {
-        repeat(100) {
+        repeat(10) {
             val lists = Array(100) { mutableStateListOf<Int>() }.toList()
             val channel = Channel<Unit>(Channel.CONFLATED)
             coroutineScope {
@@ -722,6 +722,82 @@
         }
     }
 
+    @Test
+    fun canReverseTheList() {
+        validate(List(100) { it }.toMutableStateList()) { list ->
+            list.reverse()
+        }
+    }
+
+    @Test
+    fun canReverseUsingIterators() {
+        validate(List(100) { it }.toMutableStateList()) { list ->
+            val forward = list.listIterator()
+            val backward = list.listIterator(list.size)
+            val count = list.size shr 1
+            repeat(count) {
+                val forwardValue = forward.next()
+                val backwardValue = backward.previous()
+                backward.set(forwardValue)
+                forward.set(backwardValue)
+            }
+        }
+        validate(List(101) { it }.toMutableStateList()) { list ->
+            val forward = list.listIterator()
+            val backward = list.listIterator(list.size)
+            val count = list.size shr 1
+            repeat(count) {
+                val forwardValue = forward.next()
+                val backwardValue = backward.previous()
+                backward.set(forwardValue)
+                forward.set(backwardValue)
+            }
+        }
+    }
+
+    @Test
+    fun canIterateForwards() {
+        validate(List(100) { it }.toMutableStateList()) { list ->
+            val forward = list.listIterator()
+            var expected = 0
+            var count = 0
+            while (forward.hasNext()) {
+                count++
+                assertEquals(expected++, forward.next())
+            }
+            assertEquals(100, count)
+        }
+    }
+
+    @Test
+    fun canIterateBackwards() {
+        validate(List(100) { it }.toMutableStateList()) { list ->
+            val backward = list.listIterator(list.size)
+            var expected = 99
+            var count = 0
+            while (backward.hasPrevious()) {
+                count++
+                assertEquals(expected--, backward.previous())
+            }
+            assertEquals(100, count)
+        }
+    }
+
+    @Test
+    fun canShuffleTheList() {
+        val list = List(100) { it }.toMutableStateList()
+        list.shuffle()
+        assertEquals(100, list.distinct().size)
+    }
+
+    @Test
+    fun canSortTheList() {
+        validate(List(100) { it }.toMutableStateList()) { list ->
+            list.shuffle()
+            list.sort()
+        }
+    }
+
     private fun <T> validate(list: MutableList<T>, block: (list: MutableList<T>) -> Unit) {
         val normalList = list.toMutableList()
         block(normalList)
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/api/current.txt b/compose/ui/ui-graphics/api/current.txt
index b4e7d7e..063c8c8 100644
--- a/compose/ui/ui-graphics/api/current.txt
+++ b/compose/ui/ui-graphics/api/current.txt
@@ -390,6 +390,60 @@
     method @ColorInt @androidx.compose.runtime.Stable public static int toArgb(long);
   }
 
+  @kotlin.jvm.JvmInline public final value class ColorList {
+    ctor public ColorList(androidx.collection.LongList list);
+    method public inline boolean any();
+    method public inline boolean any(kotlin.jvm.functions.Function1<? super androidx.compose.ui.graphics.Color,java.lang.Boolean> predicate);
+    method public inline operator boolean contains(long element);
+    method public inline boolean containsAll(androidx.collection.LongList elements);
+    method public inline boolean containsAll(androidx.collection.MutableLongList elements);
+    method public inline int count();
+    method public inline int count(kotlin.jvm.functions.Function1<? super androidx.compose.ui.graphics.Color,java.lang.Boolean> predicate);
+    method public inline long elementAt(@IntRange(from=0L) int index);
+    method public inline long elementAtOrElse(@IntRange(from=0L) int index, kotlin.jvm.functions.Function1<? super java.lang.Integer,androidx.compose.ui.graphics.Color> defaultValue);
+    method public inline long first();
+    method public inline long first(kotlin.jvm.functions.Function1<? super androidx.compose.ui.graphics.Color,java.lang.Boolean> predicate);
+    method public inline <R> R fold(R initial, kotlin.jvm.functions.Function2<? super R,? super androidx.compose.ui.graphics.Color,? extends R> operation);
+    method public inline <R> R foldIndexed(R initial, kotlin.jvm.functions.Function3<? super java.lang.Integer,? super R,? super androidx.compose.ui.graphics.Color,? extends R> operation);
+    method public inline <R> R foldRight(R initial, kotlin.jvm.functions.Function2<? super androidx.compose.ui.graphics.Color,? super R,? extends R> operation);
+    method public inline <R> R foldRightIndexed(R initial, kotlin.jvm.functions.Function3<? super java.lang.Integer,? super androidx.compose.ui.graphics.Color,? super R,? extends R> operation);
+    method public inline void forEach(kotlin.jvm.functions.Function1<? super androidx.compose.ui.graphics.Color,kotlin.Unit> block);
+    method public inline void forEachIndexed(kotlin.jvm.functions.Function2<? super java.lang.Integer,? super androidx.compose.ui.graphics.Color,kotlin.Unit> block);
+    method public inline void forEachReversed(kotlin.jvm.functions.Function1<? super androidx.compose.ui.graphics.Color,kotlin.Unit> block);
+    method public inline void forEachReversedIndexed(kotlin.jvm.functions.Function2<? super java.lang.Integer,? super androidx.compose.ui.graphics.Color,kotlin.Unit> block);
+    method public inline operator long get(@IntRange(from=0L) int index);
+    method public inline kotlin.ranges.IntRange getIndices();
+    method @IntRange(from=-1L) public inline int getLastIndex();
+    method public androidx.collection.LongList getList();
+    method @IntRange(from=0L) public inline int getSize();
+    method public inline int indexOf(long element);
+    method public inline int indexOfFirst(kotlin.jvm.functions.Function1<? super androidx.compose.ui.graphics.Color,java.lang.Boolean> predicate);
+    method public inline int indexOfLast(kotlin.jvm.functions.Function1<? super androidx.compose.ui.graphics.Color,java.lang.Boolean> predicate);
+    method public inline boolean isEmpty();
+    method public inline boolean isNotEmpty();
+    method public inline long last();
+    method public inline long last(kotlin.jvm.functions.Function1<? super androidx.compose.ui.graphics.Color,java.lang.Boolean> predicate);
+    method public inline int lastIndexOf(long element);
+    method public inline boolean none();
+    method public inline boolean reversedAny(kotlin.jvm.functions.Function1<? super androidx.compose.ui.graphics.Color,java.lang.Boolean> predicate);
+    property public final inline kotlin.ranges.IntRange indices;
+    property @IntRange(from=-1L) public final inline int lastIndex;
+    property public final androidx.collection.LongList list;
+    property @IntRange(from=0L) public final inline int size;
+  }
+
+  public final class ColorListKt {
+    method public static inline androidx.collection.LongList colorListOf();
+    method public static inline androidx.collection.LongList colorListOf(long element1);
+    method public static inline androidx.collection.LongList colorListOf(long element1, long element2);
+    method public static inline androidx.collection.LongList colorListOf(long element1, long element2, long element3);
+    method public static inline androidx.collection.LongList emptyColorList();
+    method public static inline androidx.collection.MutableLongList mutableColorListOf();
+    method public static inline androidx.collection.MutableLongList mutableColorListOf(long element1);
+    method public static inline androidx.collection.MutableLongList mutableColorListOf(long element1, long element2);
+    method public static inline androidx.collection.MutableLongList mutableColorListOf(long element1, long element2, long element3);
+  }
+
   @kotlin.jvm.JvmInline public final value class ColorMatrix {
     ctor public ColorMatrix(optional float[] values);
     method public void convertRgbToYuv();
@@ -417,6 +471,40 @@
     method public operator long invoke();
   }
 
+  @kotlin.jvm.JvmInline public final value class ColorSet {
+    ctor public ColorSet(androidx.collection.LongSet set);
+    method public inline boolean all(kotlin.jvm.functions.Function1<? super androidx.compose.ui.graphics.Color,java.lang.Boolean> predicate);
+    method public inline boolean any();
+    method public inline boolean any(kotlin.jvm.functions.Function1<? super androidx.compose.ui.graphics.Color,java.lang.Boolean> predicate);
+    method public inline operator boolean contains(long element);
+    method @IntRange(from=0L) public inline int count();
+    method @IntRange(from=0L) public inline int count(kotlin.jvm.functions.Function1<? super androidx.compose.ui.graphics.Color,java.lang.Boolean> predicate);
+    method public inline long first();
+    method public inline long first(kotlin.jvm.functions.Function1<? super androidx.compose.ui.graphics.Color,java.lang.Boolean> predicate);
+    method public inline void forEach(kotlin.jvm.functions.Function1<? super androidx.compose.ui.graphics.Color,kotlin.Unit> block);
+    method @IntRange(from=0L) public inline int getCapacity();
+    method public androidx.collection.LongSet getSet();
+    method @IntRange(from=0L) public inline int getSize();
+    method public inline boolean isEmpty();
+    method public inline boolean isNotEmpty();
+    method public inline boolean none();
+    property @IntRange(from=0L) public final inline int capacity;
+    property public final androidx.collection.LongSet set;
+    property @IntRange(from=0L) public final inline int size;
+  }
+
+  public final class ColorSetKt {
+    method public static inline androidx.collection.LongSet colorSetOf();
+    method public static inline androidx.collection.LongSet colorSetOf(long element1);
+    method public static androidx.collection.LongSet colorSetOf(long element1, long element2);
+    method public static androidx.collection.LongSet colorSetOf(long element1, long element2, long element3);
+    method public static inline androidx.collection.LongSet emptyColorSet();
+    method public static androidx.collection.MutableLongSet mutableColorSetOf();
+    method public static androidx.collection.MutableLongSet mutableColorSetOf(long element1);
+    method public static androidx.collection.MutableLongSet mutableColorSetOf(long element1, long element2);
+    method public static androidx.collection.MutableLongSet mutableColorSetOf(long element1, long element2, long element3);
+  }
+
   @SuppressCompatibility @kotlin.RequiresOptIn(message="This API is experimental and is likely to change in the future.") @kotlin.annotation.Retention(kotlin.annotation.AnnotationRetention.BINARY) public @interface ExperimentalGraphicsApi {
   }
 
@@ -532,6 +620,113 @@
     method public static boolean isIdentity(float[]);
   }
 
+  @kotlin.jvm.JvmInline public final value class MutableColorList {
+    ctor public MutableColorList(androidx.collection.MutableLongList list);
+    ctor public MutableColorList(optional int initialCapacity);
+    method public inline void add(@IntRange(from=0L) int index, long element);
+    method public inline boolean add(long element);
+    method public inline boolean addAll(androidx.collection.LongList elements);
+    method public inline boolean addAll(androidx.collection.MutableLongList elements);
+    method public inline boolean addAll(@IntRange(from=0L) int index, androidx.collection.LongList elements);
+    method public inline boolean addAll(@IntRange(from=0L) int index, androidx.collection.MutableLongList elements);
+    method public inline boolean any();
+    method public inline boolean any(kotlin.jvm.functions.Function1<? super androidx.compose.ui.graphics.Color,java.lang.Boolean> predicate);
+    method public inline androidx.collection.LongList asColorList();
+    method public inline void clear();
+    method public inline operator boolean contains(long element);
+    method public inline boolean containsAll(androidx.collection.LongList elements);
+    method public inline boolean containsAll(androidx.collection.MutableLongList elements);
+    method public inline int count();
+    method public inline int count(kotlin.jvm.functions.Function1<? super androidx.compose.ui.graphics.Color,java.lang.Boolean> predicate);
+    method public inline long elementAt(@IntRange(from=0L) int index);
+    method public inline long elementAtOrElse(@IntRange(from=0L) int index, kotlin.jvm.functions.Function1<? super java.lang.Integer,androidx.compose.ui.graphics.Color> defaultValue);
+    method public inline void ensureCapacity(int capacity);
+    method public inline long first();
+    method public inline long first(kotlin.jvm.functions.Function1<? super androidx.compose.ui.graphics.Color,java.lang.Boolean> predicate);
+    method public inline <R> R fold(R initial, kotlin.jvm.functions.Function2<? super R,? super androidx.compose.ui.graphics.Color,? extends R> operation);
+    method public inline <R> R foldIndexed(R initial, kotlin.jvm.functions.Function3<? super java.lang.Integer,? super R,? super androidx.compose.ui.graphics.Color,? extends R> operation);
+    method public inline <R> R foldRight(R initial, kotlin.jvm.functions.Function2<? super androidx.compose.ui.graphics.Color,? super R,? extends R> operation);
+    method public inline <R> R foldRightIndexed(R initial, kotlin.jvm.functions.Function3<? super java.lang.Integer,? super androidx.compose.ui.graphics.Color,? super R,? extends R> operation);
+    method public inline void forEach(kotlin.jvm.functions.Function1<? super androidx.compose.ui.graphics.Color,kotlin.Unit> block);
+    method public inline void forEachIndexed(kotlin.jvm.functions.Function2<? super java.lang.Integer,? super androidx.compose.ui.graphics.Color,kotlin.Unit> block);
+    method public inline void forEachReversed(kotlin.jvm.functions.Function1<? super androidx.compose.ui.graphics.Color,kotlin.Unit> block);
+    method public inline void forEachReversedIndexed(kotlin.jvm.functions.Function2<? super java.lang.Integer,? super androidx.compose.ui.graphics.Color,kotlin.Unit> block);
+    method public inline operator long get(@IntRange(from=0L) int index);
+    method public inline int getCapacity();
+    method public inline kotlin.ranges.IntRange getIndices();
+    method @IntRange(from=-1L) public inline int getLastIndex();
+    method public androidx.collection.MutableLongList getList();
+    method @IntRange(from=0L) public inline int getSize();
+    method public inline int indexOf(long element);
+    method public inline int indexOfFirst(kotlin.jvm.functions.Function1<? super androidx.compose.ui.graphics.Color,java.lang.Boolean> predicate);
+    method public inline int indexOfLast(kotlin.jvm.functions.Function1<? super androidx.compose.ui.graphics.Color,java.lang.Boolean> predicate);
+    method public inline boolean isEmpty();
+    method public inline boolean isNotEmpty();
+    method public inline long last();
+    method public inline long last(kotlin.jvm.functions.Function1<? super androidx.compose.ui.graphics.Color,java.lang.Boolean> predicate);
+    method public inline int lastIndexOf(long element);
+    method public inline operator void minusAssign(androidx.collection.LongList elements);
+    method public inline operator void minusAssign(androidx.collection.MutableLongList elements);
+    method public inline operator void minusAssign(long element);
+    method public inline boolean none();
+    method public inline operator void plusAssign(androidx.collection.LongList elements);
+    method public inline operator void plusAssign(androidx.collection.MutableLongList elements);
+    method public inline operator void plusAssign(long element);
+    method public inline boolean remove(long element);
+    method public inline boolean removeAll(androidx.collection.LongList elements);
+    method public inline boolean removeAll(androidx.collection.MutableLongList elements);
+    method public inline long removeAt(@IntRange(from=0L) int index);
+    method public inline void removeRange(@IntRange(from=0L) int start, @IntRange(from=0L) int end);
+    method public inline boolean retainAll(androidx.collection.LongList elements);
+    method public inline boolean retainAll(androidx.collection.MutableLongList elements);
+    method public inline boolean reversedAny(kotlin.jvm.functions.Function1<? super androidx.compose.ui.graphics.Color,java.lang.Boolean> predicate);
+    method public inline operator long set(@IntRange(from=0L) int index, long element);
+    method public inline void trim(optional int minCapacity);
+    property public final inline int capacity;
+    property public final inline kotlin.ranges.IntRange indices;
+    property @IntRange(from=-1L) public final inline int lastIndex;
+    property public final androidx.collection.MutableLongList list;
+    property @IntRange(from=0L) public final inline int size;
+  }
+
+  @kotlin.jvm.JvmInline public final value class MutableColorSet {
+    ctor public MutableColorSet(androidx.collection.MutableLongSet set);
+    ctor public MutableColorSet(optional int initialCapacity);
+    method public inline boolean add(long element);
+    method public inline boolean addAll(androidx.collection.LongSet elements);
+    method public inline boolean addAll(androidx.collection.MutableLongSet elements);
+    method public inline boolean all(kotlin.jvm.functions.Function1<? super androidx.compose.ui.graphics.Color,java.lang.Boolean> predicate);
+    method public inline boolean any();
+    method public inline boolean any(kotlin.jvm.functions.Function1<? super androidx.compose.ui.graphics.Color,java.lang.Boolean> predicate);
+    method public inline androidx.collection.LongSet asColorSet();
+    method public inline void clear();
+    method public inline operator boolean contains(long element);
+    method @IntRange(from=0L) public inline int count();
+    method @IntRange(from=0L) public inline int count(kotlin.jvm.functions.Function1<? super androidx.compose.ui.graphics.Color,java.lang.Boolean> predicate);
+    method public inline long first();
+    method public inline long first(kotlin.jvm.functions.Function1<? super androidx.compose.ui.graphics.Color,java.lang.Boolean> predicate);
+    method public inline void forEach(kotlin.jvm.functions.Function1<? super androidx.compose.ui.graphics.Color,kotlin.Unit> block);
+    method @IntRange(from=0L) public inline int getCapacity();
+    method public androidx.collection.MutableLongSet getSet();
+    method @IntRange(from=0L) public inline int getSize();
+    method public inline boolean isEmpty();
+    method public inline boolean isNotEmpty();
+    method public inline operator void minusAssign(androidx.collection.LongSet elements);
+    method public inline operator void minusAssign(androidx.collection.MutableLongSet elements);
+    method public inline operator void minusAssign(long element);
+    method public inline boolean none();
+    method public inline operator void plusAssign(androidx.collection.LongSet elements);
+    method public inline operator void plusAssign(androidx.collection.MutableLongSet elements);
+    method public inline operator void plusAssign(long element);
+    method public inline boolean remove(long element);
+    method public inline boolean removeAll(androidx.collection.LongSet elements);
+    method public inline boolean removeAll(androidx.collection.MutableLongSet elements);
+    method @IntRange(from=0L) public inline int trim();
+    property @IntRange(from=0L) public final inline int capacity;
+    property public final androidx.collection.MutableLongSet set;
+    property @IntRange(from=0L) public final inline int size;
+  }
+
   @androidx.compose.runtime.Immutable public final class OffsetEffect extends androidx.compose.ui.graphics.RenderEffect {
     ctor public OffsetEffect(androidx.compose.ui.graphics.RenderEffect? renderEffect, long offset);
     method @RequiresApi(android.os.Build.VERSION_CODES.S) protected android.graphics.RenderEffect createRenderEffect();
diff --git a/compose/ui/ui-graphics/api/restricted_current.txt b/compose/ui/ui-graphics/api/restricted_current.txt
index c8d7b1d..9143cca 100644
--- a/compose/ui/ui-graphics/api/restricted_current.txt
+++ b/compose/ui/ui-graphics/api/restricted_current.txt
@@ -421,6 +421,60 @@
     method @ColorInt @androidx.compose.runtime.Stable public static int toArgb(long);
   }
 
+  @kotlin.jvm.JvmInline public final value class ColorList {
+    ctor public ColorList(androidx.collection.LongList list);
+    method public inline boolean any();
+    method public inline boolean any(kotlin.jvm.functions.Function1<? super androidx.compose.ui.graphics.Color,java.lang.Boolean> predicate);
+    method public inline operator boolean contains(long element);
+    method public inline boolean containsAll(androidx.collection.LongList elements);
+    method public inline boolean containsAll(androidx.collection.MutableLongList elements);
+    method public inline int count();
+    method public inline int count(kotlin.jvm.functions.Function1<? super androidx.compose.ui.graphics.Color,java.lang.Boolean> predicate);
+    method public inline long elementAt(@IntRange(from=0L) int index);
+    method public inline long elementAtOrElse(@IntRange(from=0L) int index, kotlin.jvm.functions.Function1<? super java.lang.Integer,androidx.compose.ui.graphics.Color> defaultValue);
+    method public inline long first();
+    method public inline long first(kotlin.jvm.functions.Function1<? super androidx.compose.ui.graphics.Color,java.lang.Boolean> predicate);
+    method public inline <R> R fold(R initial, kotlin.jvm.functions.Function2<? super R,? super androidx.compose.ui.graphics.Color,? extends R> operation);
+    method public inline <R> R foldIndexed(R initial, kotlin.jvm.functions.Function3<? super java.lang.Integer,? super R,? super androidx.compose.ui.graphics.Color,? extends R> operation);
+    method public inline <R> R foldRight(R initial, kotlin.jvm.functions.Function2<? super androidx.compose.ui.graphics.Color,? super R,? extends R> operation);
+    method public inline <R> R foldRightIndexed(R initial, kotlin.jvm.functions.Function3<? super java.lang.Integer,? super androidx.compose.ui.graphics.Color,? super R,? extends R> operation);
+    method public inline void forEach(kotlin.jvm.functions.Function1<? super androidx.compose.ui.graphics.Color,kotlin.Unit> block);
+    method public inline void forEachIndexed(kotlin.jvm.functions.Function2<? super java.lang.Integer,? super androidx.compose.ui.graphics.Color,kotlin.Unit> block);
+    method public inline void forEachReversed(kotlin.jvm.functions.Function1<? super androidx.compose.ui.graphics.Color,kotlin.Unit> block);
+    method public inline void forEachReversedIndexed(kotlin.jvm.functions.Function2<? super java.lang.Integer,? super androidx.compose.ui.graphics.Color,kotlin.Unit> block);
+    method public inline operator long get(@IntRange(from=0L) int index);
+    method public inline kotlin.ranges.IntRange getIndices();
+    method @IntRange(from=-1L) public inline int getLastIndex();
+    method public androidx.collection.LongList getList();
+    method @IntRange(from=0L) public inline int getSize();
+    method public inline int indexOf(long element);
+    method public inline int indexOfFirst(kotlin.jvm.functions.Function1<? super androidx.compose.ui.graphics.Color,java.lang.Boolean> predicate);
+    method public inline int indexOfLast(kotlin.jvm.functions.Function1<? super androidx.compose.ui.graphics.Color,java.lang.Boolean> predicate);
+    method public inline boolean isEmpty();
+    method public inline boolean isNotEmpty();
+    method public inline long last();
+    method public inline long last(kotlin.jvm.functions.Function1<? super androidx.compose.ui.graphics.Color,java.lang.Boolean> predicate);
+    method public inline int lastIndexOf(long element);
+    method public inline boolean none();
+    method public inline boolean reversedAny(kotlin.jvm.functions.Function1<? super androidx.compose.ui.graphics.Color,java.lang.Boolean> predicate);
+    property public final inline kotlin.ranges.IntRange indices;
+    property @IntRange(from=-1L) public final inline int lastIndex;
+    property public final androidx.collection.LongList list;
+    property @IntRange(from=0L) public final inline int size;
+  }
+
+  public final class ColorListKt {
+    method public static inline androidx.collection.LongList colorListOf();
+    method public static inline androidx.collection.LongList colorListOf(long element1);
+    method public static inline androidx.collection.LongList colorListOf(long element1, long element2);
+    method public static inline androidx.collection.LongList colorListOf(long element1, long element2, long element3);
+    method public static inline androidx.collection.LongList emptyColorList();
+    method public static inline androidx.collection.MutableLongList mutableColorListOf();
+    method public static inline androidx.collection.MutableLongList mutableColorListOf(long element1);
+    method public static inline androidx.collection.MutableLongList mutableColorListOf(long element1, long element2);
+    method public static inline androidx.collection.MutableLongList mutableColorListOf(long element1, long element2, long element3);
+  }
+
   @kotlin.jvm.JvmInline public final value class ColorMatrix {
     ctor public ColorMatrix(optional float[] values);
     method public void convertRgbToYuv();
@@ -448,6 +502,40 @@
     method public operator long invoke();
   }
 
+  @kotlin.jvm.JvmInline public final value class ColorSet {
+    ctor public ColorSet(androidx.collection.LongSet set);
+    method public inline boolean all(kotlin.jvm.functions.Function1<? super androidx.compose.ui.graphics.Color,java.lang.Boolean> predicate);
+    method public inline boolean any();
+    method public inline boolean any(kotlin.jvm.functions.Function1<? super androidx.compose.ui.graphics.Color,java.lang.Boolean> predicate);
+    method public inline operator boolean contains(long element);
+    method @IntRange(from=0L) public inline int count();
+    method @IntRange(from=0L) public inline int count(kotlin.jvm.functions.Function1<? super androidx.compose.ui.graphics.Color,java.lang.Boolean> predicate);
+    method public inline long first();
+    method public inline long first(kotlin.jvm.functions.Function1<? super androidx.compose.ui.graphics.Color,java.lang.Boolean> predicate);
+    method public inline void forEach(kotlin.jvm.functions.Function1<? super androidx.compose.ui.graphics.Color,kotlin.Unit> block);
+    method @IntRange(from=0L) public inline int getCapacity();
+    method public androidx.collection.LongSet getSet();
+    method @IntRange(from=0L) public inline int getSize();
+    method public inline boolean isEmpty();
+    method public inline boolean isNotEmpty();
+    method public inline boolean none();
+    property @IntRange(from=0L) public final inline int capacity;
+    property public final androidx.collection.LongSet set;
+    property @IntRange(from=0L) public final inline int size;
+  }
+
+  public final class ColorSetKt {
+    method public static inline androidx.collection.LongSet colorSetOf();
+    method public static inline androidx.collection.LongSet colorSetOf(long element1);
+    method public static androidx.collection.LongSet colorSetOf(long element1, long element2);
+    method public static androidx.collection.LongSet colorSetOf(long element1, long element2, long element3);
+    method public static inline androidx.collection.LongSet emptyColorSet();
+    method public static androidx.collection.MutableLongSet mutableColorSetOf();
+    method public static androidx.collection.MutableLongSet mutableColorSetOf(long element1);
+    method public static androidx.collection.MutableLongSet mutableColorSetOf(long element1, long element2);
+    method public static androidx.collection.MutableLongSet mutableColorSetOf(long element1, long element2, long element3);
+  }
+
   public final class DegreesKt {
     method @kotlin.PublishedApi internal static float degrees(float radians);
   }
@@ -567,6 +655,113 @@
     method public static boolean isIdentity(float[]);
   }
 
+  @kotlin.jvm.JvmInline public final value class MutableColorList {
+    ctor public MutableColorList(androidx.collection.MutableLongList list);
+    ctor public MutableColorList(optional int initialCapacity);
+    method public inline void add(@IntRange(from=0L) int index, long element);
+    method public inline boolean add(long element);
+    method public inline boolean addAll(androidx.collection.LongList elements);
+    method public inline boolean addAll(androidx.collection.MutableLongList elements);
+    method public inline boolean addAll(@IntRange(from=0L) int index, androidx.collection.LongList elements);
+    method public inline boolean addAll(@IntRange(from=0L) int index, androidx.collection.MutableLongList elements);
+    method public inline boolean any();
+    method public inline boolean any(kotlin.jvm.functions.Function1<? super androidx.compose.ui.graphics.Color,java.lang.Boolean> predicate);
+    method public inline androidx.collection.LongList asColorList();
+    method public inline void clear();
+    method public inline operator boolean contains(long element);
+    method public inline boolean containsAll(androidx.collection.LongList elements);
+    method public inline boolean containsAll(androidx.collection.MutableLongList elements);
+    method public inline int count();
+    method public inline int count(kotlin.jvm.functions.Function1<? super androidx.compose.ui.graphics.Color,java.lang.Boolean> predicate);
+    method public inline long elementAt(@IntRange(from=0L) int index);
+    method public inline long elementAtOrElse(@IntRange(from=0L) int index, kotlin.jvm.functions.Function1<? super java.lang.Integer,androidx.compose.ui.graphics.Color> defaultValue);
+    method public inline void ensureCapacity(int capacity);
+    method public inline long first();
+    method public inline long first(kotlin.jvm.functions.Function1<? super androidx.compose.ui.graphics.Color,java.lang.Boolean> predicate);
+    method public inline <R> R fold(R initial, kotlin.jvm.functions.Function2<? super R,? super androidx.compose.ui.graphics.Color,? extends R> operation);
+    method public inline <R> R foldIndexed(R initial, kotlin.jvm.functions.Function3<? super java.lang.Integer,? super R,? super androidx.compose.ui.graphics.Color,? extends R> operation);
+    method public inline <R> R foldRight(R initial, kotlin.jvm.functions.Function2<? super androidx.compose.ui.graphics.Color,? super R,? extends R> operation);
+    method public inline <R> R foldRightIndexed(R initial, kotlin.jvm.functions.Function3<? super java.lang.Integer,? super androidx.compose.ui.graphics.Color,? super R,? extends R> operation);
+    method public inline void forEach(kotlin.jvm.functions.Function1<? super androidx.compose.ui.graphics.Color,kotlin.Unit> block);
+    method public inline void forEachIndexed(kotlin.jvm.functions.Function2<? super java.lang.Integer,? super androidx.compose.ui.graphics.Color,kotlin.Unit> block);
+    method public inline void forEachReversed(kotlin.jvm.functions.Function1<? super androidx.compose.ui.graphics.Color,kotlin.Unit> block);
+    method public inline void forEachReversedIndexed(kotlin.jvm.functions.Function2<? super java.lang.Integer,? super androidx.compose.ui.graphics.Color,kotlin.Unit> block);
+    method public inline operator long get(@IntRange(from=0L) int index);
+    method public inline int getCapacity();
+    method public inline kotlin.ranges.IntRange getIndices();
+    method @IntRange(from=-1L) public inline int getLastIndex();
+    method public androidx.collection.MutableLongList getList();
+    method @IntRange(from=0L) public inline int getSize();
+    method public inline int indexOf(long element);
+    method public inline int indexOfFirst(kotlin.jvm.functions.Function1<? super androidx.compose.ui.graphics.Color,java.lang.Boolean> predicate);
+    method public inline int indexOfLast(kotlin.jvm.functions.Function1<? super androidx.compose.ui.graphics.Color,java.lang.Boolean> predicate);
+    method public inline boolean isEmpty();
+    method public inline boolean isNotEmpty();
+    method public inline long last();
+    method public inline long last(kotlin.jvm.functions.Function1<? super androidx.compose.ui.graphics.Color,java.lang.Boolean> predicate);
+    method public inline int lastIndexOf(long element);
+    method public inline operator void minusAssign(androidx.collection.LongList elements);
+    method public inline operator void minusAssign(androidx.collection.MutableLongList elements);
+    method public inline operator void minusAssign(long element);
+    method public inline boolean none();
+    method public inline operator void plusAssign(androidx.collection.LongList elements);
+    method public inline operator void plusAssign(androidx.collection.MutableLongList elements);
+    method public inline operator void plusAssign(long element);
+    method public inline boolean remove(long element);
+    method public inline boolean removeAll(androidx.collection.LongList elements);
+    method public inline boolean removeAll(androidx.collection.MutableLongList elements);
+    method public inline long removeAt(@IntRange(from=0L) int index);
+    method public inline void removeRange(@IntRange(from=0L) int start, @IntRange(from=0L) int end);
+    method public inline boolean retainAll(androidx.collection.LongList elements);
+    method public inline boolean retainAll(androidx.collection.MutableLongList elements);
+    method public inline boolean reversedAny(kotlin.jvm.functions.Function1<? super androidx.compose.ui.graphics.Color,java.lang.Boolean> predicate);
+    method public inline operator long set(@IntRange(from=0L) int index, long element);
+    method public inline void trim(optional int minCapacity);
+    property public final inline int capacity;
+    property public final inline kotlin.ranges.IntRange indices;
+    property @IntRange(from=-1L) public final inline int lastIndex;
+    property public final androidx.collection.MutableLongList list;
+    property @IntRange(from=0L) public final inline int size;
+  }
+
+  @kotlin.jvm.JvmInline public final value class MutableColorSet {
+    ctor public MutableColorSet(androidx.collection.MutableLongSet set);
+    ctor public MutableColorSet(optional int initialCapacity);
+    method public inline boolean add(long element);
+    method public inline boolean addAll(androidx.collection.LongSet elements);
+    method public inline boolean addAll(androidx.collection.MutableLongSet elements);
+    method public inline boolean all(kotlin.jvm.functions.Function1<? super androidx.compose.ui.graphics.Color,java.lang.Boolean> predicate);
+    method public inline boolean any();
+    method public inline boolean any(kotlin.jvm.functions.Function1<? super androidx.compose.ui.graphics.Color,java.lang.Boolean> predicate);
+    method public inline androidx.collection.LongSet asColorSet();
+    method public inline void clear();
+    method public inline operator boolean contains(long element);
+    method @IntRange(from=0L) public inline int count();
+    method @IntRange(from=0L) public inline int count(kotlin.jvm.functions.Function1<? super androidx.compose.ui.graphics.Color,java.lang.Boolean> predicate);
+    method public inline long first();
+    method public inline long first(kotlin.jvm.functions.Function1<? super androidx.compose.ui.graphics.Color,java.lang.Boolean> predicate);
+    method public inline void forEach(kotlin.jvm.functions.Function1<? super androidx.compose.ui.graphics.Color,kotlin.Unit> block);
+    method @IntRange(from=0L) public inline int getCapacity();
+    method public androidx.collection.MutableLongSet getSet();
+    method @IntRange(from=0L) public inline int getSize();
+    method public inline boolean isEmpty();
+    method public inline boolean isNotEmpty();
+    method public inline operator void minusAssign(androidx.collection.LongSet elements);
+    method public inline operator void minusAssign(androidx.collection.MutableLongSet elements);
+    method public inline operator void minusAssign(long element);
+    method public inline boolean none();
+    method public inline operator void plusAssign(androidx.collection.LongSet elements);
+    method public inline operator void plusAssign(androidx.collection.MutableLongSet elements);
+    method public inline operator void plusAssign(long element);
+    method public inline boolean remove(long element);
+    method public inline boolean removeAll(androidx.collection.LongSet elements);
+    method public inline boolean removeAll(androidx.collection.MutableLongSet elements);
+    method @IntRange(from=0L) public inline int trim();
+    property @IntRange(from=0L) public final inline int capacity;
+    property public final androidx.collection.MutableLongSet set;
+    property @IntRange(from=0L) public final inline int size;
+  }
+
   @androidx.compose.runtime.Immutable public final class OffsetEffect extends androidx.compose.ui.graphics.RenderEffect {
     ctor public OffsetEffect(androidx.compose.ui.graphics.RenderEffect? renderEffect, long offset);
     method @RequiresApi(android.os.Build.VERSION_CODES.S) protected android.graphics.RenderEffect createRenderEffect();
diff --git a/compose/ui/ui-graphics/benchmark/src/androidTest/java/androidx/compose/ui/graphics/benchmark/VectorBenchmark.kt b/compose/ui/ui-graphics/benchmark/src/androidTest/java/androidx/compose/ui/graphics/benchmark/VectorBenchmark.kt
index 3ad349a..875a295 100644
--- a/compose/ui/ui-graphics/benchmark/src/androidTest/java/androidx/compose/ui/graphics/benchmark/VectorBenchmark.kt
+++ b/compose/ui/ui-graphics/benchmark/src/androidTest/java/androidx/compose/ui/graphics/benchmark/VectorBenchmark.kt
@@ -39,7 +39,7 @@
 
     @Test
     fun xml_compose() {
-        benchmarkRule.benchmarkFirstCompose({ XmlVectorTestCase() })
+        benchmarkRule.benchmarkFirstCompose { XmlVectorTestCase() }
     }
 
     @Test
@@ -59,7 +59,7 @@
 
     @Test
     fun programmatic_compose() {
-        benchmarkRule.benchmarkFirstCompose({ ProgrammaticVectorTestCase() })
+        benchmarkRule.benchmarkFirstCompose { ProgrammaticVectorTestCase() }
     }
 
     @Test
diff --git a/compose/ui/ui-graphics/build.gradle b/compose/ui/ui-graphics/build.gradle
index 897e9f3..941a222 100644
--- a/compose/ui/ui-graphics/build.gradle
+++ b/compose/ui/ui-graphics/build.gradle
@@ -41,6 +41,7 @@
                 api(project(":compose:ui:ui-unit"))
                 implementation(project(":compose:runtime:runtime"))
                 implementation(project(":compose:ui:ui-util"))
+                implementation(project(":collection:collection"))
             }
         }
 
@@ -104,10 +105,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/src/commonMain/kotlin/androidx/compose/ui/graphics/ColorList.kt b/compose/ui/ui-graphics/src/commonMain/kotlin/androidx/compose/ui/graphics/ColorList.kt
new file mode 100644
index 0000000..fe5aae1
--- /dev/null
+++ b/compose/ui/ui-graphics/src/commonMain/kotlin/androidx/compose/ui/graphics/ColorList.kt
@@ -0,0 +1,938 @@
+/*
+ * 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.
+ */
+
+@file:Suppress(
+    "RedundantVisibilityModifier",
+    "KotlinRedundantDiagnosticSuppress",
+    "KotlinConstantConditions",
+    "PropertyName",
+    "ConstPropertyName",
+    "PrivatePropertyName",
+    "NOTHING_TO_INLINE",
+    "UnusedImport",
+    "ktlint:standard:import-ordering",
+    "ktlint:standard:max-line-length",
+    "ktlint:standard:no-unused-imports",
+)
+
+package androidx.compose.ui.graphics
+
+import androidx.collection.LongList
+import androidx.collection.MutableLongList
+import androidx.collection.emptyLongList
+import androidx.collection.mutableLongListOf
+import androidx.compose.ui.graphics.Color
+import kotlin.contracts.ExperimentalContracts
+import kotlin.contracts.contract
+import kotlin.jvm.JvmInline
+
+// -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
+// DO NOT MAKE CHANGES to this kotlin source file.
+//
+// This file was generated from a template:
+//   collection/collection/template/ValueClassList.kt.template
+// Make a change to the original template and run the generateValueClassCollections.sh script
+// to ensure the change is available on all versions of the list.
+// -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
+
+/**
+ * [ColorList] is a [List]-like collection for [Color] values. It allows retrieving
+ * the elements without boxing. [ColorList] is always backed by a [MutableColorList],
+ * its [MutableList]-like subclass.
+ *
+ * This implementation is not thread-safe: if multiple threads access this
+ * container concurrently, and one or more threads modify the structure of
+ * the list (insertion or removal for instance), the calling code must provide
+ * the appropriate synchronization. It is also not safe to mutate during reentrancy --
+ * in the middle of a [forEach], for example. However, concurrent reads are safe.
+ */
+@OptIn(ExperimentalContracts::class)
+@JvmInline
+public value class ColorList(val list: LongList) {
+    /**
+     * The number of elements in the [ColorList].
+     */
+    @get:androidx.annotation.IntRange(from = 0)
+    public inline val size: Int get() = list.size
+
+    /**
+     * Returns the last valid index in the [ColorList]. This can be `-1` when the list is empty.
+     */
+    @get:androidx.annotation.IntRange(from = -1)
+    public inline val lastIndex: Int get() = list.lastIndex
+
+    /**
+     * Returns an [IntRange] of the valid indices for this [ColorList].
+     */
+    public inline val indices: IntRange get() = list.indices
+
+    /**
+     * Returns `true` if the collection has no elements in it.
+     */
+    public inline fun none(): Boolean = list.none()
+
+    /**
+     * Returns `true` if there's at least one element in the collection.
+     */
+    public inline fun any(): Boolean = list.any()
+
+    /**
+     * Returns `true` if any of the elements give a `true` return value for [predicate].
+     */
+    public inline fun any(predicate: (element: Color) -> Boolean): Boolean {
+        contract { callsInPlace(predicate) }
+        return list.any { predicate(Color(it.toULong())) }
+    }
+
+    /**
+     * Returns `true` if any of the elements give a `true` return value for [predicate] while
+     * iterating in the reverse order.
+     */
+    public inline fun reversedAny(predicate: (element: Color) -> Boolean): Boolean {
+        contract { callsInPlace(predicate) }
+        return list.reversedAny { predicate(Color(it.toULong())) }
+    }
+
+    /**
+     * Returns `true` if the [ColorList] contains [element] or `false` otherwise.
+     */
+    public inline operator fun contains(element: Color): Boolean =
+        list.contains(element.value.toLong())
+
+    /**
+     * Returns `true` if the [ColorList] contains all elements in [elements] or `false` if
+     * one or more are missing.
+     */
+    public inline fun containsAll(elements: ColorList): Boolean =
+        list.containsAll(elements.list)
+
+    /**
+     * Returns `true` if the [ColorList] contains all elements in [elements] or `false` if
+     * one or more are missing.
+     */
+    public inline fun containsAll(elements: MutableColorList): Boolean =
+        list.containsAll(elements.list)
+
+    /**
+     * Returns the number of elements in this list.
+     */
+    public inline fun count(): Int = list.count()
+
+    /**
+     * Counts the number of elements matching [predicate].
+     * @return The number of elements in this list for which [predicate] returns true.
+     */
+    public inline fun count(predicate: (element: Color) -> Boolean): Int {
+        contract { callsInPlace(predicate) }
+        return list.count { predicate(Color(it.toULong())) }
+    }
+
+    /**
+     * Returns the first element in the [ColorList] or throws a [NoSuchElementException] if
+     * it [isEmpty].
+     */
+    public inline fun first(): Color = Color(list.first().toULong())
+
+    /**
+     * Returns the first element in the [ColorList] for which [predicate] returns `true` or
+     * throws [NoSuchElementException] if nothing matches.
+     * @see indexOfFirst
+     */
+    public inline fun first(predicate: (element: Color) -> Boolean): Color {
+        contract { callsInPlace(predicate) }
+        return Color(list.first { predicate(Color(it.toULong())) }.toULong())
+    }
+
+    /**
+     * Accumulates values, starting with [initial], and applying [operation] to each element
+     * in the [ColorList] in order.
+     * @param initial The value of `acc` for the first call to [operation] or return value if
+     * there are no elements in this list.
+     * @param operation function that takes current accumulator value and an element, and
+     * calculates the next accumulator value.
+     */
+    public inline fun <R> fold(initial: R, operation: (acc: R, element: Color) -> R): R {
+        contract { callsInPlace(operation) }
+        return list.fold(initial) { acc, element ->
+            operation(acc, Color(element.toULong()))
+        }
+    }
+
+    /**
+     * Accumulates values, starting with [initial], and applying [operation] to each element
+     * in the [ColorList] in order.
+     */
+    public inline fun <R> foldIndexed(
+        initial: R,
+        operation: (index: Int, acc: R, element: Color) -> R
+    ): R {
+        contract { callsInPlace(operation) }
+        return list.foldIndexed(initial) { index, acc, element ->
+            operation(index, acc, Color(element.toULong()))
+        }
+    }
+
+    /**
+     * Accumulates values, starting with [initial], and applying [operation] to each element
+     * in the [ColorList] in reverse order.
+     * @param initial The value of `acc` for the first call to [operation] or return value if
+     * there are no elements in this list.
+     * @param operation function that takes an element and the current accumulator value, and
+     * calculates the next accumulator value.
+     */
+    public inline fun <R> foldRight(initial: R, operation: (element: Color, acc: R) -> R): R {
+        contract { callsInPlace(operation) }
+        return list.foldRight(initial) { element, acc ->
+            operation(Color(element.toULong()), acc)
+        }
+    }
+
+    /**
+     * Accumulates values, starting with [initial], and applying [operation] to each element
+     * in the [ColorList] in reverse order.
+     */
+    public inline fun <R> foldRightIndexed(
+        initial: R,
+        operation: (index: Int, element: Color, acc: R) -> R
+    ): R {
+        contract { callsInPlace(operation) }
+        return list.foldRightIndexed(initial) { index, element, acc ->
+            operation(index, Color(element.toULong()), acc)
+        }
+    }
+
+    /**
+     * Calls [block] for each element in the [ColorList], in order.
+     * @param block will be executed for every element in the list, accepting an element from
+     * the list
+     */
+    public inline fun forEach(block: (element: Color) -> Unit) {
+        contract { callsInPlace(block) }
+        list.forEach { block(Color(it.toULong())) }
+    }
+
+    /**
+     * Calls [block] for each element in the [ColorList] along with its index, in order.
+     * @param block will be executed for every element in the list, accepting the index and
+     * the element at that index.
+     */
+    public inline fun forEachIndexed(block: (index: Int, element: Color) -> Unit) {
+        contract { callsInPlace(block) }
+        list.forEachIndexed { index, element ->
+            block(index, Color(element.toULong()))
+        }
+    }
+
+    /**
+     * Calls [block] for each element in the [ColorList] in reverse order.
+     * @param block will be executed for every element in the list, accepting an element from
+     * the list
+     */
+    public inline fun forEachReversed(block: (element: Color) -> Unit) {
+        contract { callsInPlace(block) }
+        list.forEachReversed { block(Color(it.toULong())) }
+    }
+
+    /**
+     * Calls [block] for each element in the [ColorList] along with its index, in reverse
+     * order.
+     * @param block will be executed for every element in the list, accepting the index and
+     * the element at that index.
+     */
+    public inline fun forEachReversedIndexed(block: (index: Int, element: Color) -> Unit) {
+        contract { callsInPlace(block) }
+        list.forEachReversedIndexed { index, element ->
+            block(index, Color(element.toULong()))
+        }
+    }
+
+    /**
+     * Returns the element at the given [index] or throws [IndexOutOfBoundsException] if
+     * the [index] is out of bounds of this collection.
+     */
+    public inline operator fun get(
+        @androidx.annotation.IntRange(from = 0) index: Int
+    ): Color = Color(list[index].toULong())
+
+    /**
+     * Returns the element at the given [index] or throws [IndexOutOfBoundsException] if
+     * the [index] is out of bounds of this collection.
+     */
+    public inline fun elementAt(@androidx.annotation.IntRange(from = 0) index: Int): Color =
+        Color(list[index].toULong())
+
+    /**
+     * Returns the element at the given [index] or [defaultValue] if [index] is out of bounds
+     * of the collection.
+     * @param index The index of the element whose value should be returned
+     * @param defaultValue A lambda to call with [index] as a parameter to return a value at
+     * an index not in the list.
+     */
+    public inline fun elementAtOrElse(
+        @androidx.annotation.IntRange(from = 0) index: Int,
+        defaultValue: (index: Int) -> Color
+    ): Color =
+        Color(list.elementAtOrElse(index) { defaultValue(it).value.toLong() }.toULong())
+
+    /**
+     * Returns the index of [element] in the [ColorList] or `-1` if [element] is not there.
+     */
+    public inline fun indexOf(element: Color): Int =
+        list.indexOf(element.value.toLong())
+
+    /**
+     * Returns the index if the first element in the [ColorList] for which [predicate]
+     * returns `true`.
+     */
+    public inline fun indexOfFirst(predicate: (element: Color) -> Boolean): Int {
+        contract { callsInPlace(predicate) }
+        return list.indexOfFirst { predicate(Color(it.toULong())) }
+    }
+
+    /**
+     * Returns the index if the last element in the [ColorList] for which [predicate]
+     * returns `true`.
+     */
+    public inline fun indexOfLast(predicate: (element: Color) -> Boolean): Int {
+        contract { callsInPlace(predicate) }
+        return list.indexOfLast { predicate(Color(it.toULong())) }
+    }
+
+    /**
+     * Returns `true` if the [ColorList] has no elements in it or `false` otherwise.
+     */
+    public inline fun isEmpty(): Boolean = list.isEmpty()
+
+    /**
+     * Returns `true` if there are elements in the [ColorList] or `false` if it is empty.
+     */
+    public inline fun isNotEmpty(): Boolean = list.isNotEmpty()
+
+    /**
+     * Returns the last element in the [ColorList] or throws a [NoSuchElementException] if
+     * it [isEmpty].
+     */
+    public inline fun last(): Color = Color(list.last().toULong())
+
+    /**
+     * Returns the last element in the [ColorList] for which [predicate] returns `true` or
+     * throws [NoSuchElementException] if nothing matches.
+     * @see indexOfLast
+     */
+    public inline fun last(predicate: (element: Color) -> Boolean): Color {
+        contract { callsInPlace(predicate) }
+        return Color(list.last { predicate(Color(it.toULong())) }.toULong())
+    }
+
+    /**
+     * Returns the index of the last element in the [ColorList] that is the same as
+     * [element] or `-1` if no elements match.
+     */
+    public inline fun lastIndexOf(element: Color): Int =
+        list.lastIndexOf(element.value.toLong())
+
+    /**
+     * Returns a String representation of the list, surrounded by "[]" and each element
+     * separated by ", ".
+     */
+    override fun toString(): String {
+        if (isEmpty()) {
+            return "[]"
+        }
+        return buildString {
+            append('[')
+            forEachIndexed { index: Int, element: Color ->
+                if (index != 0) {
+                    append(',').append(' ')
+                }
+                append(element)
+            }
+            append(']')
+        }
+    }
+}
+
+/**
+ * [MutableColorList] is a [MutableList]-like collection for [Color] values.
+ * It allows storing and retrieving the elements without boxing. Immutable
+ * access is available through its base class [ColorList], which has a [List]-like
+ * interface.
+ *
+ * This implementation is not thread-safe: if multiple threads access this
+ * container concurrently, and one or more threads modify the structure of
+ * the list (insertion or removal for instance), the calling code must provide
+ * the appropriate synchronization. It is also not safe to mutate during reentrancy --
+ * in the middle of a [forEach], for example. However, concurrent reads are safe.
+ *
+ * @constructor Creates a [MutableColorList] with a [capacity] of `initialCapacity`.
+ */
+@OptIn(ExperimentalContracts::class)
+@JvmInline
+public value class MutableColorList(val list: MutableLongList) {
+    public constructor(initialCapacity: Int = 16) : this(MutableLongList(initialCapacity))
+
+    /**
+     * The number of elements in the [ColorList].
+     */
+    @get:androidx.annotation.IntRange(from = 0)
+    public inline val size: Int get() = list.size
+
+    /**
+     * Returns the last valid index in the [ColorList]. This can be `-1` when the list is empty.
+     */
+    @get:androidx.annotation.IntRange(from = -1)
+    public inline val lastIndex: Int get() = list.lastIndex
+
+    /**
+     * Returns an [IntRange] of the valid indices for this [ColorList].
+     */
+    public inline val indices: IntRange get() = list.indices
+
+    /**
+     * Returns `true` if the collection has no elements in it.
+     */
+    public inline fun none(): Boolean = list.none()
+
+    /**
+     * Returns `true` if there's at least one element in the collection.
+     */
+    public inline fun any(): Boolean = list.any()
+
+    /**
+     * Returns `true` if any of the elements give a `true` return value for [predicate].
+     */
+    public inline fun any(predicate: (element: Color) -> Boolean): Boolean {
+        contract { callsInPlace(predicate) }
+        return list.any { predicate(Color(it.toULong())) }
+    }
+
+    /**
+     * Returns `true` if any of the elements give a `true` return value for [predicate] while
+     * iterating in the reverse order.
+     */
+    public inline fun reversedAny(predicate: (element: Color) -> Boolean): Boolean {
+        contract { callsInPlace(predicate) }
+        return list.reversedAny { predicate(Color(it.toULong())) }
+    }
+
+    /**
+     * Returns `true` if the [ColorList] contains [element] or `false` otherwise.
+     */
+    public inline operator fun contains(element: Color): Boolean =
+        list.contains(element.value.toLong())
+
+    /**
+     * Returns `true` if the [ColorList] contains all elements in [elements] or `false` if
+     * one or more are missing.
+     */
+    public inline fun containsAll(elements: ColorList): Boolean =
+        list.containsAll(elements.list)
+
+    /**
+     * Returns `true` if the [ColorList] contains all elements in [elements] or `false` if
+     * one or more are missing.
+     */
+    public inline fun containsAll(elements: MutableColorList): Boolean =
+        list.containsAll(elements.list)
+
+    /**
+     * Returns the number of elements in this list.
+     */
+    public inline fun count(): Int = list.count()
+
+    /**
+     * Counts the number of elements matching [predicate].
+     * @return The number of elements in this list for which [predicate] returns true.
+     */
+    public inline fun count(predicate: (element: Color) -> Boolean): Int {
+        contract { callsInPlace(predicate) }
+        return list.count { predicate(Color(it.toULong())) }
+    }
+
+    /**
+     * Returns the first element in the [ColorList] or throws a [NoSuchElementException] if
+     * it [isEmpty].
+     */
+    public inline fun first(): Color = Color(list.first().toULong())
+
+    /**
+     * Returns the first element in the [ColorList] for which [predicate] returns `true` or
+     * throws [NoSuchElementException] if nothing matches.
+     * @see indexOfFirst
+     */
+    public inline fun first(predicate: (element: Color) -> Boolean): Color {
+        contract { callsInPlace(predicate) }
+        return Color(list.first { predicate(Color(it.toULong())) }.toULong())
+    }
+
+    /**
+     * Accumulates values, starting with [initial], and applying [operation] to each element
+     * in the [ColorList] in order.
+     * @param initial The value of `acc` for the first call to [operation] or return value if
+     * there are no elements in this list.
+     * @param operation function that takes current accumulator value and an element, and
+     * calculates the next accumulator value.
+     */
+    public inline fun <R> fold(initial: R, operation: (acc: R, element: Color) -> R): R {
+        contract { callsInPlace(operation) }
+        return list.fold(initial) { acc, element ->
+            operation(acc, Color(element.toULong()))
+        }
+    }
+
+    /**
+     * Accumulates values, starting with [initial], and applying [operation] to each element
+     * in the [ColorList] in order.
+     */
+    public inline fun <R> foldIndexed(
+        initial: R,
+        operation: (index: Int, acc: R, element: Color) -> R
+    ): R {
+        contract { callsInPlace(operation) }
+        return list.foldIndexed(initial) { index, acc, element ->
+            operation(index, acc, Color(element.toULong()))
+        }
+    }
+
+    /**
+     * Accumulates values, starting with [initial], and applying [operation] to each element
+     * in the [ColorList] in reverse order.
+     * @param initial The value of `acc` for the first call to [operation] or return value if
+     * there are no elements in this list.
+     * @param operation function that takes an element and the current accumulator value, and
+     * calculates the next accumulator value.
+     */
+    public inline fun <R> foldRight(initial: R, operation: (element: Color, acc: R) -> R): R {
+        contract { callsInPlace(operation) }
+        return list.foldRight(initial) { element, acc ->
+            operation(Color(element.toULong()), acc)
+        }
+    }
+
+    /**
+     * Accumulates values, starting with [initial], and applying [operation] to each element
+     * in the [ColorList] in reverse order.
+     */
+    public inline fun <R> foldRightIndexed(
+        initial: R,
+        operation: (index: Int, element: Color, acc: R) -> R
+    ): R {
+        contract { callsInPlace(operation) }
+        return list.foldRightIndexed(initial) { index, element, acc ->
+            operation(index, Color(element.toULong()), acc)
+        }
+    }
+
+    /**
+     * Calls [block] for each element in the [ColorList], in order.
+     * @param block will be executed for every element in the list, accepting an element from
+     * the list
+     */
+    public inline fun forEach(block: (element: Color) -> Unit) {
+        contract { callsInPlace(block) }
+        list.forEach { block(Color(it.toULong())) }
+    }
+
+    /**
+     * Calls [block] for each element in the [ColorList] along with its index, in order.
+     * @param block will be executed for every element in the list, accepting the index and
+     * the element at that index.
+     */
+    public inline fun forEachIndexed(block: (index: Int, element: Color) -> Unit) {
+        contract { callsInPlace(block) }
+        list.forEachIndexed { index, element ->
+            block(index, Color(element.toULong()))
+        }
+    }
+
+    /**
+     * Calls [block] for each element in the [ColorList] in reverse order.
+     * @param block will be executed for every element in the list, accepting an element from
+     * the list
+     */
+    public inline fun forEachReversed(block: (element: Color) -> Unit) {
+        contract { callsInPlace(block) }
+        list.forEachReversed { block(Color(it.toULong())) }
+    }
+
+    /**
+     * Calls [block] for each element in the [ColorList] along with its index, in reverse
+     * order.
+     * @param block will be executed for every element in the list, accepting the index and
+     * the element at that index.
+     */
+    public inline fun forEachReversedIndexed(block: (index: Int, element: Color) -> Unit) {
+        contract { callsInPlace(block) }
+        list.forEachReversedIndexed { index, element ->
+            block(index, Color(element.toULong()))
+        }
+    }
+
+    /**
+     * Returns the element at the given [index] or throws [IndexOutOfBoundsException] if
+     * the [index] is out of bounds of this collection.
+     */
+    public inline operator fun get(
+        @androidx.annotation.IntRange(from = 0) index: Int
+    ): Color = Color(list[index].toULong())
+
+    /**
+     * Returns the element at the given [index] or throws [IndexOutOfBoundsException] if
+     * the [index] is out of bounds of this collection.
+     */
+    public inline fun elementAt(@androidx.annotation.IntRange(from = 0) index: Int): Color =
+        Color(list[index].toULong())
+
+    /**
+     * Returns the element at the given [index] or [defaultValue] if [index] is out of bounds
+     * of the collection.
+     * @param index The index of the element whose value should be returned
+     * @param defaultValue A lambda to call with [index] as a parameter to return a value at
+     * an index not in the list.
+     */
+    public inline fun elementAtOrElse(
+        @androidx.annotation.IntRange(from = 0) index: Int,
+        defaultValue: (index: Int) -> Color
+    ): Color =
+        Color(list.elementAtOrElse(index) { defaultValue(it).value.toLong() }.toULong())
+
+    /**
+     * Returns the index of [element] in the [ColorList] or `-1` if [element] is not there.
+     */
+    public inline fun indexOf(element: Color): Int =
+        list.indexOf(element.value.toLong())
+
+    /**
+     * Returns the index if the first element in the [ColorList] for which [predicate]
+     * returns `true`.
+     */
+    public inline fun indexOfFirst(predicate: (element: Color) -> Boolean): Int {
+        contract { callsInPlace(predicate) }
+        return list.indexOfFirst { predicate(Color(it.toULong())) }
+    }
+
+    /**
+     * Returns the index if the last element in the [ColorList] for which [predicate]
+     * returns `true`.
+     */
+    public inline fun indexOfLast(predicate: (element: Color) -> Boolean): Int {
+        contract { callsInPlace(predicate) }
+        return list.indexOfLast { predicate(Color(it.toULong())) }
+    }
+
+    /**
+     * Returns `true` if the [ColorList] has no elements in it or `false` otherwise.
+     */
+    public inline fun isEmpty(): Boolean = list.isEmpty()
+
+    /**
+     * Returns `true` if there are elements in the [ColorList] or `false` if it is empty.
+     */
+    public inline fun isNotEmpty(): Boolean = list.isNotEmpty()
+
+    /**
+     * Returns the last element in the [ColorList] or throws a [NoSuchElementException] if
+     * it [isEmpty].
+     */
+    public inline fun last(): Color = Color(list.last().toULong())
+
+    /**
+     * Returns the last element in the [ColorList] for which [predicate] returns `true` or
+     * throws [NoSuchElementException] if nothing matches.
+     * @see indexOfLast
+     */
+    public inline fun last(predicate: (element: Color) -> Boolean): Color {
+        contract { callsInPlace(predicate) }
+        return Color(list.last { predicate(Color(it.toULong())) }.toULong())
+    }
+
+    /**
+     * Returns the index of the last element in the [ColorList] that is the same as
+     * [element] or `-1` if no elements match.
+     */
+    public inline fun lastIndexOf(element: Color): Int =
+        list.lastIndexOf(element.value.toLong())
+
+    /**
+     * Returns a String representation of the list, surrounded by "[]" and each element
+     * separated by ", ".
+     */
+    override fun toString(): String = asColorList().toString()
+
+    /**
+     * Returns a read-only interface to the list.
+     */
+    public inline fun asColorList(): ColorList = ColorList(list)
+
+    /**
+     * Returns the total number of elements that can be held before the [MutableColorList] must
+     * grow.
+     *
+     * @see ensureCapacity
+     */
+    public inline val capacity: Int
+        get() = list.capacity
+
+    /**
+     * Adds [element] to the [MutableColorList] and returns `true`.
+     */
+    public inline fun add(element: Color): Boolean =
+        list.add(element.value.toLong())
+
+    /**
+     * Adds [element] to the [MutableColorList] at the given [index], shifting over any
+     * elements at [index] and after, if any.
+     * @throws IndexOutOfBoundsException if [index] isn't between 0 and [size], inclusive
+     */
+    public inline fun add(
+        @androidx.annotation.IntRange(from = 0) index: Int,
+        element: Color
+    ) = list.add(index, element.value.toLong())
+
+    /**
+     * Adds all [elements] to the [MutableColorList] at the given [index], shifting over any
+     * elements at [index] and after, if any.
+     * @return `true` if the [MutableColorList] was changed or `false` if [elements] was empty
+     * @throws IndexOutOfBoundsException if [index] isn't between 0 and [size], inclusive
+     */
+    public inline fun addAll(
+        @androidx.annotation.IntRange(from = 0) index: Int,
+        elements: ColorList
+    ): Boolean = list.addAll(index, elements.list)
+
+    /**
+     * Adds all [elements] to the [MutableColorList] at the given [index], shifting over any
+     * elements at [index] and after, if any.
+     * @return `true` if the [MutableColorList] was changed or `false` if [elements] was empty
+     * @throws IndexOutOfBoundsException if [index] isn't between 0 and [size], inclusive
+     */
+    public inline fun addAll(
+        @androidx.annotation.IntRange(from = 0) index: Int,
+        elements: MutableColorList
+    ): Boolean = list.addAll(index, elements.list)
+
+    /**
+     * Adds all [elements] to the end of the [MutableColorList] and returns `true` if the
+     * [MutableColorList] was changed or `false` if [elements] was empty.
+     */
+    public inline fun addAll(elements: ColorList): Boolean = list.addAll(elements.list)
+
+    /**
+     * Adds all [elements] to the end of the [MutableColorList].
+     */
+    public inline operator fun plusAssign(elements: ColorList) =
+        list.plusAssign(elements.list)
+
+    /**
+     * Adds all [elements] to the end of the [MutableColorList] and returns `true` if the
+     * [MutableColorList] was changed or `false` if [elements] was empty.
+     */
+    public inline fun addAll(elements: MutableColorList): Boolean = list.addAll(elements.list)
+
+    /**
+     * Adds all [elements] to the end of the [MutableColorList].
+     */
+    public inline operator fun plusAssign(elements: MutableColorList) =
+        list.plusAssign(elements.list)
+
+    /**
+     * Removes all elements in the [MutableColorList]. The storage isn't released.
+     * @see trim
+     */
+    public inline fun clear() = list.clear()
+
+    /**
+     * Reduces the internal storage. If [capacity] is greater than [minCapacity] and [size], the
+     * internal storage is reduced to the maximum of [size] and [minCapacity].
+     * @see ensureCapacity
+     */
+    public inline fun trim(minCapacity: Int = size) = list.trim(minCapacity)
+
+    /**
+     * Ensures that there is enough space to store [capacity] elements in the [MutableColorList].
+     * @see trim
+     */
+    public inline fun ensureCapacity(capacity: Int) = list.ensureCapacity(capacity)
+
+    /**
+     * [add] [element] to the [MutableColorList].
+     */
+    public inline operator fun plusAssign(element: Color) =
+        list.plusAssign(element.value.toLong())
+
+    /**
+     * [remove] [element] from the [MutableColorList]
+     */
+    public inline operator fun minusAssign(element: Color) =
+        list.minusAssign(element.value.toLong())
+
+    /**
+     * Removes [element] from the [MutableColorList]. If [element] was in the [MutableColorList]
+     * and was removed, `true` will be returned, or `false` will be returned if the element
+     * was not found.
+     */
+    public inline fun remove(element: Color): Boolean =
+        list.remove(element.value.toLong())
+
+    /**
+     * Removes all [elements] from the [MutableColorList] and returns `true` if anything was removed.
+     */
+    public inline fun removeAll(elements: ColorList): Boolean =
+        list.removeAll(elements.list)
+
+    /**
+     * Removes all [elements] from the [MutableColorList].
+     */
+    public inline operator fun minusAssign(elements: ColorList) =
+        list.minusAssign(elements.list)
+
+    /**
+     * Removes all [elements] from the [MutableColorList] and returns `true` if anything was removed.
+     */
+    public inline fun removeAll(elements: MutableColorList): Boolean =
+        list.removeAll(elements.list)
+
+    /**
+     * Removes all [elements] from the [MutableColorList].
+     */
+    public inline operator fun minusAssign(elements: MutableColorList) =
+        list.minusAssign(elements.list)
+
+    /**
+     * Removes the element at the given [index] and returns it.
+     * @throws IndexOutOfBoundsException if [index] isn't between 0 and [lastIndex], inclusive
+     */
+    public inline fun removeAt(@androidx.annotation.IntRange(from = 0) index: Int): Color =
+        Color(list.removeAt(index).toULong())
+
+    /**
+     * Removes items from index [start] (inclusive) to [end] (exclusive).
+     * @throws IndexOutOfBoundsException if [start] or [end] isn't between 0 and [size], inclusive
+     * @throws IllegalArgumentException if [start] is greater than [end]
+     */
+    public inline fun removeRange(
+        @androidx.annotation.IntRange(from = 0) start: Int,
+        @androidx.annotation.IntRange(from = 0) end: Int
+    ) = list.removeRange(start, end)
+
+    /**
+     * Keeps only [elements] in the [MutableColorList] and removes all other values.
+     * @return `true` if the [MutableColorList] has changed.
+     */
+    public inline fun retainAll(elements: ColorList): Boolean =
+        list.retainAll(elements.list)
+
+    /**
+     * Keeps only [elements] in the [MutableColorList] and removes all other values.
+     * @return `true` if the [MutableColorList] has changed.
+     */
+    public inline fun retainAll(elements: MutableColorList): Boolean =
+        list.retainAll(elements.list)
+
+    /**
+     * Sets the value at [index] to [element].
+     * @return the previous value set at [index]
+     * @throws IndexOutOfBoundsException if [index] isn't between 0 and [lastIndex], inclusive
+     */
+    public inline operator fun set(
+        @androidx.annotation.IntRange(from = 0) index: Int,
+        element: Color
+    ): Color = Color(list.set(index, element.value.toLong()).toULong())
+}
+
+/**
+ * @return a read-only [ColorList] with nothing in it.
+ */
+public inline fun emptyColorList(): ColorList = ColorList(emptyLongList())
+
+/**
+ * @return a read-only [ColorList] with nothing in it.
+ */
+public inline fun colorListOf(): ColorList = ColorList(emptyLongList())
+
+/**
+ * @return a new read-only [ColorList] with [element1] as the only item in the list.
+ */
+public inline fun colorListOf(element1: Color): ColorList =
+    ColorList(mutableLongListOf(element1.value.toLong()))
+
+/**
+ * @return a new read-only [ColorList] with 2 elements, [element1] and [element2], in order.
+ */
+public inline fun colorListOf(element1: Color, element2: Color): ColorList =
+    ColorList(
+        mutableLongListOf(
+            element1.value.toLong(),
+            element2.value.toLong()
+        )
+    )
+
+/**
+ * @return a new read-only [ColorList] with 3 elements, [element1], [element2], and [element3],
+ * in order.
+ */
+public inline fun colorListOf(
+        element1: Color,
+        element2: Color,
+        element3: Color
+): ColorList = ColorList(
+    mutableLongListOf(
+        element1.value.toLong(),
+        element2.value.toLong(),
+        element3.value.toLong()
+    )
+)
+
+/**
+ * @return a new empty [MutableColorList] with the default capacity.
+ */
+public inline fun mutableColorListOf(): MutableColorList =
+    MutableColorList(MutableLongList())
+
+/**
+ * @return a new [MutableColorList] with [element1] as the only item in the list.
+ */
+public inline fun mutableColorListOf(element1: Color): MutableColorList =
+    MutableColorList(mutableLongListOf(element1.value.toLong()))
+
+/**
+ * @return a new [MutableColorList] with 2 elements, [element1] and [element2], in order.
+ */
+public inline fun mutableColorListOf(
+        element1: Color,
+        element2: Color
+    ): MutableColorList = MutableColorList(
+        mutableLongListOf(
+            element1.value.toLong(),
+            element2.value.toLong()
+        )
+    )
+
+/**
+ * @return a new [MutableColorList] with 3 elements, [element1], [element2], and [element3],
+ * in order.
+ */
+public inline fun mutableColorListOf(
+        element1: Color,
+        element2: Color,
+        element3: Color
+): MutableColorList = MutableColorList(
+    mutableLongListOf(
+        element1.value.toLong(),
+        element2.value.toLong(),
+        element3.value.toLong()
+    )
+)
diff --git a/compose/ui/ui-graphics/src/commonMain/kotlin/androidx/compose/ui/graphics/ColorSet.kt b/compose/ui/ui-graphics/src/commonMain/kotlin/androidx/compose/ui/graphics/ColorSet.kt
new file mode 100644
index 0000000..eb6a001
--- /dev/null
+++ b/compose/ui/ui-graphics/src/commonMain/kotlin/androidx/compose/ui/graphics/ColorSet.kt
@@ -0,0 +1,545 @@
+/*
+ * 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.
+ */
+
+@file:Suppress(
+    "RedundantVisibilityModifier",
+    "KotlinRedundantDiagnosticSuppress",
+    "KotlinConstantConditions",
+    "PropertyName",
+    "ConstPropertyName",
+    "PrivatePropertyName",
+    "NOTHING_TO_INLINE",
+    "UnusedImport",
+    "ktlint:standard:import-ordering",
+    "ktlint:standard:max-line-length",
+    "ktlint:standard:no-unused-imports",
+)
+
+package androidx.compose.ui.graphics
+
+import androidx.collection.LongSet
+import androidx.collection.MutableLongSet
+import androidx.collection.emptyLongSet
+import androidx.collection.mutableLongSetOf
+import androidx.compose.ui.graphics.Color
+import kotlin.contracts.ExperimentalContracts
+import kotlin.contracts.contract
+import kotlin.jvm.JvmInline
+
+// -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
+// DO NOT MAKE CHANGES to this kotlin source file.
+//
+// This file was generated from a template:
+//   collection/collection/template/ValueClassSet.kt.template
+// Make a change to the original template and run the generateValueClassCollections.sh script
+// to ensure the change is available on all versions of the set.
+// -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
+
+/**
+ * Returns an empty, read-only [ColorSet].
+ */
+public inline fun emptyColorSet(): ColorSet = ColorSet(emptyLongSet())
+
+/**
+ * Returns an empty, read-only [ColorSet].
+ */
+public inline fun colorSetOf(): ColorSet = ColorSet(emptyLongSet())
+
+/**
+ * Returns a new read-only [ColorSet] with only [element1] in it.
+ */
+public inline fun colorSetOf(element1: Color): ColorSet =
+    ColorSet(mutableLongSetOf(element1.value.toLong()))
+
+/**
+ * Returns a new read-only [ColorSet] with only [element1] and [element2] in it.
+ */
+@Suppress("UNCHECKED_CAST")
+public fun colorSetOf(
+    element1: Color,
+    element2: Color
+): ColorSet =
+    ColorSet(
+        mutableLongSetOf(
+            element1.value.toLong(),
+            element2.value.toLong(),
+        )
+    )
+
+/**
+ * Returns a new read-only [ColorSet] with only [element1], [element2], and [element3] in it.
+ */
+@Suppress("UNCHECKED_CAST")
+public fun colorSetOf(
+    element1: Color,
+    element2: Color,
+    element3: Color
+): ColorSet = ColorSet(
+    mutableLongSetOf(
+        element1.value.toLong(),
+        element2.value.toLong(),
+        element3.value.toLong(),
+    )
+)
+
+/**
+ * Returns a new [MutableColorSet].
+ */
+public fun mutableColorSetOf(): MutableColorSet = MutableColorSet(
+    MutableLongSet()
+)
+
+/**
+ * Returns a new [MutableColorSet] with only [element1] in it.
+ */
+public fun mutableColorSetOf(element1: Color): MutableColorSet =
+    MutableColorSet(mutableLongSetOf(element1.value.toLong()))
+
+/**
+ * Returns a new [MutableColorSet] with only [element1] and [element2] in it.
+ */
+public fun mutableColorSetOf(
+    element1: Color,
+    element2: Color
+): MutableColorSet =
+    MutableColorSet(
+        mutableLongSetOf(
+            element1.value.toLong(),
+            element2.value.toLong(),
+        )
+    )
+
+/**
+ * Returns a new [MutableColorSet] with only [element1], [element2], and [element3] in it.
+ */
+public fun mutableColorSetOf(
+    element1: Color,
+    element2: Color,
+    element3: Color
+): MutableColorSet =
+    MutableColorSet(
+        mutableLongSetOf(
+            element1.value.toLong(),
+            element2.value.toLong(),
+            element3.value.toLong(),
+        )
+    )
+
+/**
+ * [ColorSet] is a container with a [Set]-like interface designed to avoid
+ * allocations, including boxing.
+ *
+ * This implementation makes no guarantee as to the order of the elements,
+ * nor does it make guarantees that the order remains constant over time.
+ *
+ * Though [ColorSet] offers a read-only interface, it is always backed
+ * by a [MutableColorSet]. Read operations alone are thread-safe. However,
+ * any mutations done through the backing [MutableColorSet] while reading
+ * on another thread are not safe and the developer must protect the set
+ * from such changes during read operations.
+ *
+ * @see [MutableColorSet]
+ */
+@OptIn(ExperimentalContracts::class)
+@JvmInline
+public value class ColorSet(val set: LongSet) {
+    /**
+     * Returns the number of elements that can be stored in this set
+     * without requiring internal storage reallocation.
+     */
+    @get:androidx.annotation.IntRange(from = 0)
+    public inline val capacity: Int
+        get() = set.capacity
+
+    /**
+     * Returns the number of elements in this set.
+     */
+    @get:androidx.annotation.IntRange(from = 0)
+    public inline val size: Int
+        get() = set.size
+
+    /**
+     * Returns `true` if this set has at least one element.
+     */
+    public inline fun any(): Boolean = set.any()
+
+    /**
+     * Returns `true` if this set has no elements.
+     */
+    public inline fun none(): Boolean = set.none()
+
+    /**
+     * Indicates whether this set is empty.
+     */
+    public inline fun isEmpty(): Boolean = set.isEmpty()
+
+    /**
+     * Returns `true` if this set is not empty.
+     */
+    public inline fun isNotEmpty(): Boolean = set.isNotEmpty()
+
+    /**
+     * Returns the first element in the collection.
+     * @throws NoSuchElementException if the collection is empty
+     */
+    public inline fun first(): Color = Color(set.first().toULong())
+
+    /**
+     * Returns the first element in the collection for which [predicate] returns `true`.
+     *
+     * **Note** There is no mechanism for both determining if there is an element that matches
+     * [predicate] _and_ returning it if it exists. Developers should use [forEach] to achieve
+     * this behavior.
+     *
+     * @param predicate Called on elements of the set, returning `true` for an element that matches
+     * or `false` if it doesn't
+     * @return An element in the set for which [predicate] returns `true`.
+     * @throws NoSuchElementException if [predicate] returns `false` for all elements or the
+     * collection is empty.
+     */
+    public inline fun first(predicate: (element: Color) -> Boolean): Color =
+        Color(set.first { predicate(Color(it.toULong())) }.toULong())
+
+    /**
+     * Iterates over every element stored in this set by invoking
+     * the specified [block] lambda.
+     * @param block called with each element in the set
+     */
+    public inline fun forEach(block: (element: Color) -> Unit) {
+        contract { callsInPlace(block) }
+        set.forEach { block(Color(it.toULong())) }
+    }
+
+    /**
+     * Returns true if all elements match the given [predicate].
+     * @param predicate called for elements in the set to determine if it returns return `true` for
+     * all elements.
+     */
+    public inline fun all(predicate: (element: Color) -> Boolean): Boolean {
+        contract { callsInPlace(predicate) }
+        return set.all { predicate(Color(it.toULong())) }
+    }
+
+    /**
+     * Returns true if at least one element matches the given [predicate].
+     * @param predicate called for elements in the set to determine if it returns `true` for any
+     * elements.
+     */
+    public inline fun any(predicate: (element: Color) -> Boolean): Boolean {
+        contract { callsInPlace(predicate) }
+        return set.any { predicate(Color(it.toULong())) }
+    }
+
+    /**
+     * Returns the number of elements in this set.
+     */
+    @androidx.annotation.IntRange(from = 0)
+    public inline fun count(): Int = set.count()
+
+    /**
+     * Returns the number of elements matching the given [predicate].
+     * @param predicate Called for all elements in the set to count the number for which it returns
+     * `true`.
+     */
+    @androidx.annotation.IntRange(from = 0)
+    public inline fun count(predicate: (element: Color) -> Boolean): Int {
+        contract { callsInPlace(predicate) }
+        return set.count { predicate(Color(it.toULong())) }
+    }
+
+    /**
+     * Returns `true` if the specified [element] is present in this set, `false`
+     * otherwise.
+     * @param element The element to look for in this set
+     */
+    public inline operator fun contains(element: Color): Boolean =
+        set.contains(element.value.toLong())
+
+    /**
+     * Returns a string representation of this set. The set is denoted in the
+     * string by the `{}`. Each element is separated by `, `.
+     */
+    public override fun toString(): String {
+        if (isEmpty()) {
+            return "[]"
+        }
+
+        val s = StringBuilder().append('[')
+        var index = 0
+        forEach { element ->
+            if (index++ != 0) {
+                s.append(',').append(' ')
+            }
+            s.append(element)
+        }
+        return s.append(']').toString()
+    }
+}
+
+/**
+ * [MutableColorSet] is a container with a [MutableSet]-like interface based on a flat
+ * hash table implementation. The underlying implementation is designed to avoid
+ * all allocations on insertion, removal, retrieval, and iteration. Allocations
+ * may still happen on insertion when the underlying storage needs to grow to
+ * accommodate newly added elements to the set.
+ *
+ * This implementation makes no guarantee as to the order of the elements stored,
+ * nor does it make guarantees that the order remains constant over time.
+ *
+ * This implementation is not thread-safe: if multiple threads access this
+ * container concurrently, and one or more threads modify the structure of
+ * the set (insertion or removal for instance), the calling code must provide
+ * the appropriate synchronization. Concurrent reads are however safe.
+ */
+@OptIn(ExperimentalContracts::class)
+@JvmInline
+public value class MutableColorSet(val set: MutableLongSet) {
+    /**
+     * Returns the number of elements that can be stored in this set
+     * without requiring internal storage reallocation.
+     */
+    @get:androidx.annotation.IntRange(from = 0)
+    public inline val capacity: Int
+        get() = set.capacity
+
+    /**
+     * Returns the number of elements in this set.
+     */
+    @get:androidx.annotation.IntRange(from = 0)
+    public inline val size: Int
+        get() = set.size
+
+    /**
+     * Returns `true` if this set has at least one element.
+     */
+    public inline fun any(): Boolean = set.any()
+
+    /**
+     * Returns `true` if this set has no elements.
+     */
+    public inline fun none(): Boolean = set.none()
+
+    /**
+     * Indicates whether this set is empty.
+     */
+    public inline fun isEmpty(): Boolean = set.isEmpty()
+
+    /**
+     * Returns `true` if this set is not empty.
+     */
+    public inline fun isNotEmpty(): Boolean = set.isNotEmpty()
+
+    /**
+     * Returns the first element in the collection.
+     * @throws NoSuchElementException if the collection is empty
+     */
+    public inline fun first(): Color = Color(set.first().toULong())
+
+    /**
+     * Returns the first element in the collection for which [predicate] returns `true`.
+     *
+     * **Note** There is no mechanism for both determining if there is an element that matches
+     * [predicate] _and_ returning it if it exists. Developers should use [forEach] to achieve
+     * this behavior.
+     *
+     * @param predicate Called on elements of the set, returning `true` for an element that matches
+     * or `false` if it doesn't
+     * @return An element in the set for which [predicate] returns `true`.
+     * @throws NoSuchElementException if [predicate] returns `false` for all elements or the
+     * collection is empty.
+     */
+    public inline fun first(predicate: (element: Color) -> Boolean): Color =
+        Color(set.first { predicate(Color(it.toULong())) }.toULong())
+
+    /**
+     * Iterates over every element stored in this set by invoking
+     * the specified [block] lambda.
+     * @param block called with each element in the set
+     */
+    public inline fun forEach(block: (element: Color) -> Unit) {
+        contract { callsInPlace(block) }
+        set.forEach { block(Color(it.toULong())) }
+    }
+
+    /**
+     * Returns true if all elements match the given [predicate].
+     * @param predicate called for elements in the set to determine if it returns return `true` for
+     * all elements.
+     */
+    public inline fun all(predicate: (element: Color) -> Boolean): Boolean {
+        contract { callsInPlace(predicate) }
+        return set.all { predicate(Color(it.toULong())) }
+    }
+
+    /**
+     * Returns true if at least one element matches the given [predicate].
+     * @param predicate called for elements in the set to determine if it returns `true` for any
+     * elements.
+     */
+    public inline fun any(predicate: (element: Color) -> Boolean): Boolean {
+        contract { callsInPlace(predicate) }
+        return set.any { predicate(Color(it.toULong())) }
+    }
+
+    /**
+     * Returns the number of elements in this set.
+     */
+    @androidx.annotation.IntRange(from = 0)
+    public inline fun count(): Int = set.count()
+
+    /**
+     * Returns the number of elements matching the given [predicate].
+     * @param predicate Called for all elements in the set to count the number for which it returns
+     * `true`.
+     */
+    @androidx.annotation.IntRange(from = 0)
+    public inline fun count(predicate: (element: Color) -> Boolean): Int {
+        contract { callsInPlace(predicate) }
+        return set.count { predicate(Color(it.toULong())) }
+    }
+
+    /**
+     * Returns `true` if the specified [element] is present in this set, `false`
+     * otherwise.
+     * @param element The element to look for in this set
+     */
+    public inline operator fun contains(element: Color): Boolean =
+        set.contains(element.value.toLong())
+
+    /**
+     * Returns a string representation of this set. The set is denoted in the
+     * string by the `{}`. Each element is separated by `, `.
+     */
+    public override fun toString(): String = asColorSet().toString()
+
+    /**
+     * Creates a new [MutableColorSet]
+     * @param initialCapacity The initial desired capacity for this container.
+     * The container will honor this value by guaranteeing its internal structures
+     * can hold that many elements without requiring any allocations. The initial
+     * capacity can be set to 0.
+     */
+    public constructor(initialCapacity: Int = 6) : this(MutableLongSet(initialCapacity))
+
+    /**
+     * Returns a read-only interface to the set.
+     */
+    public inline fun asColorSet(): ColorSet = ColorSet(set)
+
+    /**
+     * Adds the specified element to the set.
+     * @param element The element to add to the set.
+     * @return `true` if the element has been added or `false` if the element is already
+     * contained within the set.
+     */
+    public inline fun add(element: Color): Boolean = set.add(element.value.toLong())
+
+    /**
+     * Adds the specified element to the set.
+     * @param element The element to add to the set.
+     */
+    public inline operator fun plusAssign(element: Color) =
+        set.plusAssign(element.value.toLong())
+
+    /**
+     * Adds all the elements in the [elements] set into this set.
+     * @param elements A [ColorSet] of elements to add to this set.
+     * @return `true` if any of the specified elements were added to the collection,
+     * `false` if the collection was not modified.
+     */
+    public inline fun addAll(elements: ColorSet): Boolean = set.addAll(elements.set)
+
+    /**
+     * Adds all the elements in the [elements] set into this set.
+     * @param elements A [ColorSet] of elements to add to this set.
+     * @return `true` if any of the specified elements were added to the collection,
+     * `false` if the collection was not modified.
+     */
+    public inline fun addAll(elements: MutableColorSet): Boolean = set.addAll(elements.set)
+
+    /**
+     * Adds all the elements in the [elements] set into this set.
+     * @param elements A [ColorSet] of elements to add to this set.
+     */
+    public inline operator fun plusAssign(elements: ColorSet) =
+        set.plusAssign(elements.set)
+
+    /**
+     * Adds all the elements in the [elements] set into this set.
+     * @param elements A [ColorSet] of elements to add to this set.
+     */
+    public inline operator fun plusAssign(elements: MutableColorSet) =
+        set.plusAssign(elements.set)
+
+    /**
+     * Removes the specified [element] from the set.
+     * @param element The element to remove from the set.
+     * @return `true` if the [element] was present in the set, or `false` if it wasn't
+     * present before removal.
+     */
+    public inline fun remove(element: Color): Boolean = set.remove(element.value.toLong())
+
+    /**
+     * Removes the specified [element] from the set if it is present.
+     * @param element The element to remove from the set.
+     */
+    public inline operator fun minusAssign(element: Color) =
+        set.minusAssign(element.value.toLong())
+
+    /**
+     * Removes the specified [elements] from the set, if present.
+     * @param elements An [ColorSet] of elements to be removed from the set.
+     * @return `true` if the set was changed or `false` if none of the elements were present.
+     */
+    public inline fun removeAll(elements: ColorSet): Boolean = set.removeAll(elements.set)
+
+    /**
+     * Removes the specified [elements] from the set, if present.
+     * @param elements An [ColorSet] of elements to be removed from the set.
+     * @return `true` if the set was changed or `false` if none of the elements were present.
+     */
+    public inline fun removeAll(elements: MutableColorSet): Boolean =
+        set.removeAll(elements.set)
+
+    /**
+     * Removes the specified [elements] from the set, if present.
+     * @param elements An [ColorSet] of elements to be removed from the set.
+     */
+    public inline operator fun minusAssign(elements: ColorSet) =
+        set.minusAssign(elements.set)
+
+    /**
+     * Removes the specified [elements] from the set, if present.
+     * @param elements An [ColorSet] of elements to be removed from the set.
+     */
+    public inline operator fun minusAssign(elements: MutableColorSet) =
+        set.minusAssign(elements.set)
+
+    /**
+     * Removes all elements from this set.
+     */
+    public inline fun clear() = set.clear()
+
+    /**
+     * Trims this [MutableColorSet]'s storage so it is sized appropriately
+     * to hold the current elements.
+     *
+     * Returns the number of empty elements removed from this set's storage.
+     * Returns 0 if no trimming is necessary or possible.
+     */
+    @androidx.annotation.IntRange(from = 0)
+    public inline fun trim(): Int = set.trim()
+}
diff --git a/compose/ui/ui-graphics/src/commonMain/kotlin/androidx/compose/ui/graphics/vector/FastFloatParser.kt b/compose/ui/ui-graphics/src/commonMain/kotlin/androidx/compose/ui/graphics/vector/FastFloatParser.kt
index 2ffde87..5d66cde 100644
--- a/compose/ui/ui-graphics/src/commonMain/kotlin/androidx/compose/ui/graphics/vector/FastFloatParser.kt
+++ b/compose/ui/ui-graphics/src/commonMain/kotlin/androidx/compose/ui/graphics/vector/FastFloatParser.kt
@@ -15,7 +15,7 @@
  */
 
 @file:Suppress("NOTHING_TO_INLINE")
-@file:OptIn(ExperimentalUnsignedTypes::class)
+@file:OptIn(ExperimentalUnsignedTypes::class, ExperimentalUnsignedTypes::class)
 
 package androidx.compose.ui.graphics.vector
 
@@ -26,573 +26,563 @@
  * The original C++ implementations are licensed under Apache 2.0
  */
 
-internal class FloatResult(var value: Float = Float.NaN, var isValid: Boolean = false)
+// These two functions are technically identical to Float.fromBits()
+// and Double.fromBits(). However, since they are declared as top-
+// level functions, they do not incur the cost of a static fetch
+// through the Companion class. Using these top-level functions,
+// the generated arm64 code after dex2oat is exactly a single `fmov`
+internal expect fun floatFromBits(bits: Int): Float
 
-internal class FastFloatParser {
-    companion object {
-        private const val FloatMinExponent = -10
-        private const val FloatMaxExponent = 10
-        private const val FloatSmallestExponent = -325
-        private const val FloatMaxExponentNumber = 1024
+internal expect fun doubleFromBits(bits: Long): Double
 
-        private val PowersOfTen = floatArrayOf(
-            1e0f, 1e1f, 1e2f, 1e3f, 1e4f, 1e5f, 1e6f, 1e7f, 1e8f, 1e9f, 1e10f
-        )
+private const val FloatMinExponent = -10
+private const val FloatMaxExponent = 10
+private const val FloatSmallestExponent = -325
+private const val FloatMaxExponentNumber = 1024
 
-        /**
-         * Parses the next float in the char sequence [s], starting at offset [start], until at most
-         * the end offset [end]. The results are written in [result]. When a result is valid, the
-         * `result.isValid` is set to `true` and `result.value` contains the parsed float value. If
-         * parsing is unsuccessful, `result.isValid` is false and `result.value` is set to
-         * [Float.NaN].
-         *
-         * This function returns the offset inside the char sequence right after parsing stopped,
-         * successfully or unsuccessfully.
-         */
-        fun nextFloat(s: String, start: Int, end: Int, result: FloatResult): Int {
-            result.value = Float.NaN
-            result.isValid = false
+// internal to bypass synthetic accessor
+@Suppress("MemberVisibilityCanBePrivate")
+internal val PowersOfTen = floatArrayOf(
+    1e0f, 1e1f, 1e2f, 1e3f, 1e4f, 1e5f, 1e6f, 1e7f, 1e8f, 1e9f, 1e10f
+)
 
-            if (start == end) return start
+internal inline val Long.index get() = (this ushr 32).toInt()
+internal inline val Long.floatValue get() = floatFromBits((this and 0xFFFFFFFFL).toInt())
 
-            var index = start
-            var c = s[index]
+/**
+ * Parses the next float in the char sequence [s], starting at offset [start], until at most
+ * the end offset [end]. The result is returned as [Long] with the most significant 32 bits
+ * encoding the index in the string [s] where parsing stop, and with the least significant
+ * 32 bits encoding the parsed float value. To access these values easily, use [Long.index]
+ * and [Long.floatValue]. When parsing is unsuccessful, [Long.floatValue] returns NaN.
+ */
+internal fun nextFloat(s: String, start: Int, end: Int): Long {
+    // NOTE: It would be nice to encode invalid parsing with a NaN marker
+    // (for instance 0x7FD55555), but doing so prevents us from defining
+    // the value as a const val which causes static field accesses
+    if (start == end) return pack(start, Float.NaN)
 
-            // Check for leading negative sign
-            val isNegative = c == '-'
-            if (isNegative) {
-                index++
-                if (index == end) return index
+    var index = start
+    var c = s[index]
 
-                // Safe access, we just checked the bounds
-                c = s[index]
-                if (!c.isDigit && c != '.') return index
-            }
+    // Check for leading negative sign
+    val isNegative = c == '-'
+    if (isNegative) {
+        index++
+        if (index == end) return pack(index, Float.NaN)
 
-            // TODO: Should we use an unsigned long here?
-            var significand = 0L
-            val significandStartIndex = index
+        // Safe access, we just checked the bounds
+        c = s[index]
+        if (!c.isDigit && c != '.') return pack(index, Float.NaN)
+    }
 
-            // Parse the integer part
-            while (index != end && c.isDigit) {
-                significand = 10L * significand + (c.code - '0'.code).toLong()
-                c = charAt(s, ++index)
-            }
+    // TODO: Should we use an unsigned long here?
+    var significand = 0L
+    val significandStartIndex = index
 
-            val significandEndIndex = index
-            var digitCount = index - significandStartIndex
+    // Parse the integer part
+    val dataLength = s.length
+    while (index != end && c.isDigit) {
+        significand = 10L * significand + (c.code - '0'.code).toLong()
+        index++
+        c = if (index < dataLength) s[index] else '\u0000'
+    }
 
-            var exponent = 0
-            var exponentStartIndex = index
-            var exponentEndIndex = index
+    val significandEndIndex = index
+    var digitCount = index - significandStartIndex
 
-            // Parse the fraction
-            if (index != end && c == '.') {
-                index++
-                exponentStartIndex = index
+    var exponent = 0
+    var exponentStartIndex = index
+    var exponentEndIndex = index
 
-                while (end - index >= 4) {
-                    val digits = parseFourDigits(s, index)
-                    if (digits < 0) break
-                    significand = 10_000L * significand + digits.toLong()
-                    index += 4
-                }
+    // Parse the fraction
+    if (index != end && c == '.') {
+        index++
+        exponentStartIndex = index
 
-                c = charAt(s, index)
-                while (index != end && c.isDigit) {
-                    significand = 10L * significand + (c.code - '0'.code).toLong()
-                    c = charAt(s, ++index)
-                }
-
-                exponent = exponentStartIndex - index
-                exponentEndIndex = index
-                digitCount -= exponent
-            }
-
-            if (digitCount == 0) return index
-
-            // Parse the exponent part of the float, if present
-            var exponentNumber = 0
-            if ((c.code or 0x20) == 'e'.code) {
-                c = charAt(s, ++index)
-
-                val isExponentNegative = c == '-'
-                if (isExponentNegative || c == '+') {
-                    index++
-                }
-
-                c = s[index]
-                while (index != end && c.isDigit) {
-                    if (exponentNumber < FloatMaxExponentNumber) {
-                        exponentNumber = 10 * exponentNumber + (c.code - '0'.code)
-                    }
-                    c = charAt(s, ++index)
-                }
-
-                if (isExponentNegative) exponentNumber = -exponentNumber
-                exponent += exponentNumber
-            }
-
-            // TODO: check for f/F suffix?
-
-            var tooManyDigits = false
-
-            // If we have too many digits we need to retry differently and avoid overflows
-            if (digitCount > 19) {
-                var retryIndex = significandStartIndex
-                c = s[retryIndex]
-
-                // First check for the case where the number is 0.0000000xxxx (could be all zeroes)
-                while (index != end && (c == '0' || c == '.')) {
-                    if (c == '0') digitCount--
-                    c = charAt(s, ++retryIndex)
-                }
-
-                if (digitCount > 19) {
-                    tooManyDigits = true
-
-                    significand = 0
-                    retryIndex = significandStartIndex
-                    c = s[retryIndex]
-
-                    while (
-                        retryIndex != significandEndIndex &&
-                        significand.toULong() < 1000000000000000000UL
-                    ) {
-                        significand = 10L * significand + (c.code - '0'.code).toLong()
-                        c = charAt(s, ++retryIndex)
-                    }
-
-                    if (significand.toULong() >= 1000000000000000000UL) {
-                        exponent = significandEndIndex - retryIndex + exponentNumber
-                    } else {
-                        retryIndex = exponentStartIndex
-                        c = s[retryIndex]
-
-                        while (
-                            retryIndex != exponentEndIndex &&
-                            significand.toULong() < 1000000000000000000UL
-                        ) {
-                            significand = 10L * significand + (c.code - '0'.code).toLong()
-                            c = charAt(s, ++retryIndex)
-                        }
-                        exponent = exponentStartIndex - retryIndex + exponentNumber
-                    }
-                }
-            }
-
-            // Fast path
-            if (exponent in FloatMinExponent..FloatMaxExponent &&
-                !tooManyDigits &&
-                significand.toULong() <= 1UL shl 24
-            ) {
-                var f = significand.toFloat()
-                if (exponent < 0) {
-                    f /= PowersOfTen[-exponent]
-                } else {
-                    f *= PowersOfTen[exponent]
-                }
-
-                result.isValid = true
-                result.value = if (isNegative) -f else f
-
-                return index
-            }
-
-            // Now we need to take the slow path, please refer to the original C++ code for a
-            // complete description of the algorithm
-
-            if (significand == 0L) {
-                result.isValid = true
-                result.value = if (isNegative) -0.0f else 0.0f
-                return index
-            }
-
-            if (exponent !in -126..127) {
-                try {
-                    result.value = s.substring(start, index).toFloat()
-                } finally {
-                    result.isValid = true
-                }
-                return index
-            }
-
-            val significandFactor = Mantissa64[exponent - FloatSmallestExponent].toLong()
-            var lz = significand.countLeadingZeroBits()
-            significand = significand shl lz
-
-            val upper = fullMultiplicationHighBits(significand, significandFactor)
-            val upperBit = (upper ushr 63).toInt()
-            var mantissa = upper ushr (upperBit + 9)
-            lz += 1 xor upperBit
-
-            if (upper and 0x1ff == 0x1ffL || upper and 0x1ff == 0L && mantissa and 3L == 1L) {
-                try {
-                    result.value = s.substring(start, index).toFloat()
-                } finally {
-                    result.isValid = true
-                }
-                return index
-            }
-
-            mantissa += 1
-            mantissa = mantissa ushr 1
-
-            if (mantissa >= 1L shl 53) {
-                mantissa = 1L shl 52
-                lz--
-            }
-
-            mantissa = mantissa and (1L shl 52).inv()
-
-            val adjustedExponent = (((152170L + 65536L) * exponent) shr 16) + 1024 + 63
-            val realExponent = adjustedExponent - lz
-            if (realExponent < 1 || realExponent > 2046) {
-                try {
-                    result.value = s.substring(start, index).toFloat()
-                } finally {
-                    result.isValid = true
-                }
-                return index
-            }
-
-            mantissa = mantissa or (realExponent shl 52)
-            mantissa = mantissa or if (isNegative) 1L shl 63 else 0L
-
-            result.isValid = true
-            result.value = Double.fromBits(mantissa).toFloat()
-
-            return index
+        while (end - index >= 4) {
+            val digits = parseFourDigits(s, index)
+            if (digits < 0) break
+            significand = 10_000L * significand + digits.toLong()
+            index += 4
         }
 
-        private val Mantissa64 = ulongArrayOf(
-            0xa5ced43b7e3e9188UL, 0xcf42894a5dce35eaUL,
-            0x818995ce7aa0e1b2UL, 0xa1ebfb4219491a1fUL,
-            0xca66fa129f9b60a6UL, 0xfd00b897478238d0UL,
-            0x9e20735e8cb16382UL, 0xc5a890362fddbc62UL,
-            0xf712b443bbd52b7bUL, 0x9a6bb0aa55653b2dUL,
-            0xc1069cd4eabe89f8UL, 0xf148440a256e2c76UL,
-            0x96cd2a865764dbcaUL, 0xbc807527ed3e12bcUL,
-            0xeba09271e88d976bUL, 0x93445b8731587ea3UL,
-            0xb8157268fdae9e4cUL, 0xe61acf033d1a45dfUL,
-            0x8fd0c16206306babUL, 0xb3c4f1ba87bc8696UL,
-            0xe0b62e2929aba83cUL, 0x8c71dcd9ba0b4925UL,
-            0xaf8e5410288e1b6fUL, 0xdb71e91432b1a24aUL,
-            0x892731ac9faf056eUL, 0xab70fe17c79ac6caUL,
-            0xd64d3d9db981787dUL, 0x85f0468293f0eb4eUL,
-            0xa76c582338ed2621UL, 0xd1476e2c07286faaUL,
-            0x82cca4db847945caUL, 0xa37fce126597973cUL,
-            0xcc5fc196fefd7d0cUL, 0xff77b1fcbebcdc4fUL,
-            0x9faacf3df73609b1UL, 0xc795830d75038c1dUL,
-            0xf97ae3d0d2446f25UL, 0x9becce62836ac577UL,
-            0xc2e801fb244576d5UL, 0xf3a20279ed56d48aUL,
-            0x9845418c345644d6UL, 0xbe5691ef416bd60cUL,
-            0xedec366b11c6cb8fUL, 0x94b3a202eb1c3f39UL,
-            0xb9e08a83a5e34f07UL, 0xe858ad248f5c22c9UL,
-            0x91376c36d99995beUL, 0xb58547448ffffb2dUL,
-            0xe2e69915b3fff9f9UL, 0x8dd01fad907ffc3bUL,
-            0xb1442798f49ffb4aUL, 0xdd95317f31c7fa1dUL,
-            0x8a7d3eef7f1cfc52UL, 0xad1c8eab5ee43b66UL,
-            0xd863b256369d4a40UL, 0x873e4f75e2224e68UL,
-            0xa90de3535aaae202UL, 0xd3515c2831559a83UL,
-            0x8412d9991ed58091UL, 0xa5178fff668ae0b6UL,
-            0xce5d73ff402d98e3UL, 0x80fa687f881c7f8eUL,
-            0xa139029f6a239f72UL, 0xc987434744ac874eUL,
-            0xfbe9141915d7a922UL, 0x9d71ac8fada6c9b5UL,
-            0xc4ce17b399107c22UL, 0xf6019da07f549b2bUL,
-            0x99c102844f94e0fbUL, 0xc0314325637a1939UL,
-            0xf03d93eebc589f88UL, 0x96267c7535b763b5UL,
-            0xbbb01b9283253ca2UL, 0xea9c227723ee8bcbUL,
-            0x92a1958a7675175fUL, 0xb749faed14125d36UL,
-            0xe51c79a85916f484UL, 0x8f31cc0937ae58d2UL,
-            0xb2fe3f0b8599ef07UL, 0xdfbdcece67006ac9UL,
-            0x8bd6a141006042bdUL, 0xaecc49914078536dUL,
-            0xda7f5bf590966848UL, 0x888f99797a5e012dUL,
-            0xaab37fd7d8f58178UL, 0xd5605fcdcf32e1d6UL,
-            0x855c3be0a17fcd26UL, 0xa6b34ad8c9dfc06fUL,
-            0xd0601d8efc57b08bUL, 0x823c12795db6ce57UL,
-            0xa2cb1717b52481edUL, 0xcb7ddcdda26da268UL,
-            0xfe5d54150b090b02UL, 0x9efa548d26e5a6e1UL,
-            0xc6b8e9b0709f109aUL, 0xf867241c8cc6d4c0UL,
-            0x9b407691d7fc44f8UL, 0xc21094364dfb5636UL,
-            0xf294b943e17a2bc4UL, 0x979cf3ca6cec5b5aUL,
-            0xbd8430bd08277231UL, 0xece53cec4a314ebdUL,
-            0x940f4613ae5ed136UL, 0xb913179899f68584UL,
-            0xe757dd7ec07426e5UL, 0x9096ea6f3848984fUL,
-            0xb4bca50b065abe63UL, 0xe1ebce4dc7f16dfbUL,
-            0x8d3360f09cf6e4bdUL, 0xb080392cc4349decUL,
-            0xdca04777f541c567UL, 0x89e42caaf9491b60UL,
-            0xac5d37d5b79b6239UL, 0xd77485cb25823ac7UL,
-            0x86a8d39ef77164bcUL, 0xa8530886b54dbdebUL,
-            0xd267caa862a12d66UL, 0x8380dea93da4bc60UL,
-            0xa46116538d0deb78UL, 0xcd795be870516656UL,
-            0x806bd9714632dff6UL, 0xa086cfcd97bf97f3UL,
-            0xc8a883c0fdaf7df0UL, 0xfad2a4b13d1b5d6cUL,
-            0x9cc3a6eec6311a63UL, 0xc3f490aa77bd60fcUL,
-            0xf4f1b4d515acb93bUL, 0x991711052d8bf3c5UL,
-            0xbf5cd54678eef0b6UL, 0xef340a98172aace4UL,
-            0x9580869f0e7aac0eUL, 0xbae0a846d2195712UL,
-            0xe998d258869facd7UL, 0x91ff83775423cc06UL,
-            0xb67f6455292cbf08UL, 0xe41f3d6a7377eecaUL,
-            0x8e938662882af53eUL, 0xb23867fb2a35b28dUL,
-            0xdec681f9f4c31f31UL, 0x8b3c113c38f9f37eUL,
-            0xae0b158b4738705eUL, 0xd98ddaee19068c76UL,
-            0x87f8a8d4cfa417c9UL, 0xa9f6d30a038d1dbcUL,
-            0xd47487cc8470652bUL, 0x84c8d4dfd2c63f3bUL,
-            0xa5fb0a17c777cf09UL, 0xcf79cc9db955c2ccUL,
-            0x81ac1fe293d599bfUL, 0xa21727db38cb002fUL,
-            0xca9cf1d206fdc03bUL, 0xfd442e4688bd304aUL,
-            0x9e4a9cec15763e2eUL, 0xc5dd44271ad3cdbaUL,
-            0xf7549530e188c128UL, 0x9a94dd3e8cf578b9UL,
-            0xc13a148e3032d6e7UL, 0xf18899b1bc3f8ca1UL,
-            0x96f5600f15a7b7e5UL, 0xbcb2b812db11a5deUL,
-            0xebdf661791d60f56UL, 0x936b9fcebb25c995UL,
-            0xb84687c269ef3bfbUL, 0xe65829b3046b0afaUL,
-            0x8ff71a0fe2c2e6dcUL, 0xb3f4e093db73a093UL,
-            0xe0f218b8d25088b8UL, 0x8c974f7383725573UL,
-            0xafbd2350644eeacfUL, 0xdbac6c247d62a583UL,
-            0x894bc396ce5da772UL, 0xab9eb47c81f5114fUL,
-            0xd686619ba27255a2UL, 0x8613fd0145877585UL,
-            0xa798fc4196e952e7UL, 0xd17f3b51fca3a7a0UL,
-            0x82ef85133de648c4UL, 0xa3ab66580d5fdaf5UL,
-            0xcc963fee10b7d1b3UL, 0xffbbcfe994e5c61fUL,
-            0x9fd561f1fd0f9bd3UL, 0xc7caba6e7c5382c8UL,
-            0xf9bd690a1b68637bUL, 0x9c1661a651213e2dUL,
-            0xc31bfa0fe5698db8UL, 0xf3e2f893dec3f126UL,
-            0x986ddb5c6b3a76b7UL, 0xbe89523386091465UL,
-            0xee2ba6c0678b597fUL, 0x94db483840b717efUL,
-            0xba121a4650e4ddebUL, 0xe896a0d7e51e1566UL,
-            0x915e2486ef32cd60UL, 0xb5b5ada8aaff80b8UL,
-            0xe3231912d5bf60e6UL, 0x8df5efabc5979c8fUL,
-            0xb1736b96b6fd83b3UL, 0xddd0467c64bce4a0UL,
-            0x8aa22c0dbef60ee4UL, 0xad4ab7112eb3929dUL,
-            0xd89d64d57a607744UL, 0x87625f056c7c4a8bUL,
-            0xa93af6c6c79b5d2dUL, 0xd389b47879823479UL,
-            0x843610cb4bf160cbUL, 0xa54394fe1eedb8feUL,
-            0xce947a3da6a9273eUL, 0x811ccc668829b887UL,
-            0xa163ff802a3426a8UL, 0xc9bcff6034c13052UL,
-            0xfc2c3f3841f17c67UL, 0x9d9ba7832936edc0UL,
-            0xc5029163f384a931UL, 0xf64335bcf065d37dUL,
-            0x99ea0196163fa42eUL, 0xc06481fb9bcf8d39UL,
-            0xf07da27a82c37088UL, 0x964e858c91ba2655UL,
-            0xbbe226efb628afeaUL, 0xeadab0aba3b2dbe5UL,
-            0x92c8ae6b464fc96fUL, 0xb77ada0617e3bbcbUL,
-            0xe55990879ddcaabdUL, 0x8f57fa54c2a9eab6UL,
-            0xb32df8e9f3546564UL, 0xdff9772470297ebdUL,
-            0x8bfbea76c619ef36UL, 0xaefae51477a06b03UL,
-            0xdab99e59958885c4UL, 0x88b402f7fd75539bUL,
-            0xaae103b5fcd2a881UL, 0xd59944a37c0752a2UL,
-            0x857fcae62d8493a5UL, 0xa6dfbd9fb8e5b88eUL,
-            0xd097ad07a71f26b2UL, 0x825ecc24c873782fUL,
-            0xa2f67f2dfa90563bUL, 0xcbb41ef979346bcaUL,
-            0xfea126b7d78186bcUL, 0x9f24b832e6b0f436UL,
-            0xc6ede63fa05d3143UL, 0xf8a95fcf88747d94UL,
-            0x9b69dbe1b548ce7cUL, 0xc24452da229b021bUL,
-            0xf2d56790ab41c2a2UL, 0x97c560ba6b0919a5UL,
-            0xbdb6b8e905cb600fUL, 0xed246723473e3813UL,
-            0x9436c0760c86e30bUL, 0xb94470938fa89bceUL,
-            0xe7958cb87392c2c2UL, 0x90bd77f3483bb9b9UL,
-            0xb4ecd5f01a4aa828UL, 0xe2280b6c20dd5232UL,
-            0x8d590723948a535fUL, 0xb0af48ec79ace837UL,
-            0xdcdb1b2798182244UL, 0x8a08f0f8bf0f156bUL,
-            0xac8b2d36eed2dac5UL, 0xd7adf884aa879177UL,
-            0x86ccbb52ea94baeaUL, 0xa87fea27a539e9a5UL,
-            0xd29fe4b18e88640eUL, 0x83a3eeeef9153e89UL,
-            0xa48ceaaab75a8e2bUL, 0xcdb02555653131b6UL,
-            0x808e17555f3ebf11UL, 0xa0b19d2ab70e6ed6UL,
-            0xc8de047564d20a8bUL, 0xfb158592be068d2eUL,
-            0x9ced737bb6c4183dUL, 0xc428d05aa4751e4cUL,
-            0xf53304714d9265dfUL, 0x993fe2c6d07b7fabUL,
-            0xbf8fdb78849a5f96UL, 0xef73d256a5c0f77cUL,
-            0x95a8637627989aadUL, 0xbb127c53b17ec159UL,
-            0xe9d71b689dde71afUL, 0x9226712162ab070dUL,
-            0xb6b00d69bb55c8d1UL, 0xe45c10c42a2b3b05UL,
-            0x8eb98a7a9a5b04e3UL, 0xb267ed1940f1c61cUL,
-            0xdf01e85f912e37a3UL, 0x8b61313bbabce2c6UL,
-            0xae397d8aa96c1b77UL, 0xd9c7dced53c72255UL,
-            0x881cea14545c7575UL, 0xaa242499697392d2UL,
-            0xd4ad2dbfc3d07787UL, 0x84ec3c97da624ab4UL,
-            0xa6274bbdd0fadd61UL, 0xcfb11ead453994baUL,
-            0x81ceb32c4b43fcf4UL, 0xa2425ff75e14fc31UL,
-            0xcad2f7f5359a3b3eUL, 0xfd87b5f28300ca0dUL,
-            0x9e74d1b791e07e48UL, 0xc612062576589ddaUL,
-            0xf79687aed3eec551UL, 0x9abe14cd44753b52UL,
-            0xc16d9a0095928a27UL, 0xf1c90080baf72cb1UL,
-            0x971da05074da7beeUL, 0xbce5086492111aeaUL,
-            0xec1e4a7db69561a5UL, 0x9392ee8e921d5d07UL,
-            0xb877aa3236a4b449UL, 0xe69594bec44de15bUL,
-            0x901d7cf73ab0acd9UL, 0xb424dc35095cd80fUL,
-            0xe12e13424bb40e13UL, 0x8cbccc096f5088cbUL,
-            0xafebff0bcb24aafeUL, 0xdbe6fecebdedd5beUL,
-            0x89705f4136b4a597UL, 0xabcc77118461cefcUL,
-            0xd6bf94d5e57a42bcUL, 0x8637bd05af6c69b5UL,
-            0xa7c5ac471b478423UL, 0xd1b71758e219652bUL,
-            0x83126e978d4fdf3bUL, 0xa3d70a3d70a3d70aUL,
-            0xccccccccccccccccUL, 0x8000000000000000UL,
-            0xa000000000000000UL, 0xc800000000000000UL,
-            0xfa00000000000000UL, 0x9c40000000000000UL,
-            0xc350000000000000UL, 0xf424000000000000UL,
-            0x9896800000000000UL, 0xbebc200000000000UL,
-            0xee6b280000000000UL, 0x9502f90000000000UL,
-            0xba43b74000000000UL, 0xe8d4a51000000000UL,
-            0x9184e72a00000000UL, 0xb5e620f480000000UL,
-            0xe35fa931a0000000UL, 0x8e1bc9bf04000000UL,
-            0xb1a2bc2ec5000000UL, 0xde0b6b3a76400000UL,
-            0x8ac7230489e80000UL, 0xad78ebc5ac620000UL,
-            0xd8d726b7177a8000UL, 0x878678326eac9000UL,
-            0xa968163f0a57b400UL, 0xd3c21bcecceda100UL,
-            0x84595161401484a0UL, 0xa56fa5b99019a5c8UL,
-            0xcecb8f27f4200f3aUL, 0x813f3978f8940984UL,
-            0xa18f07d736b90be5UL, 0xc9f2c9cd04674edeUL,
-            0xfc6f7c4045812296UL, 0x9dc5ada82b70b59dUL,
-            0xc5371912364ce305UL, 0xf684df56c3e01bc6UL,
-            0x9a130b963a6c115cUL, 0xc097ce7bc90715b3UL,
-            0xf0bdc21abb48db20UL, 0x96769950b50d88f4UL,
-            0xbc143fa4e250eb31UL, 0xeb194f8e1ae525fdUL,
-            0x92efd1b8d0cf37beUL, 0xb7abc627050305adUL,
-            0xe596b7b0c643c719UL, 0x8f7e32ce7bea5c6fUL,
-            0xb35dbf821ae4f38bUL, 0xe0352f62a19e306eUL,
-            0x8c213d9da502de45UL, 0xaf298d050e4395d6UL,
-            0xdaf3f04651d47b4cUL, 0x88d8762bf324cd0fUL,
-            0xab0e93b6efee0053UL, 0xd5d238a4abe98068UL,
-            0x85a36366eb71f041UL, 0xa70c3c40a64e6c51UL,
-            0xd0cf4b50cfe20765UL, 0x82818f1281ed449fUL,
-            0xa321f2d7226895c7UL, 0xcbea6f8ceb02bb39UL,
-            0xfee50b7025c36a08UL, 0x9f4f2726179a2245UL,
-            0xc722f0ef9d80aad6UL, 0xf8ebad2b84e0d58bUL,
-            0x9b934c3b330c8577UL, 0xc2781f49ffcfa6d5UL,
-            0xf316271c7fc3908aUL, 0x97edd871cfda3a56UL,
-            0xbde94e8e43d0c8ecUL, 0xed63a231d4c4fb27UL,
-            0x945e455f24fb1cf8UL, 0xb975d6b6ee39e436UL,
-            0xe7d34c64a9c85d44UL, 0x90e40fbeea1d3a4aUL,
-            0xb51d13aea4a488ddUL, 0xe264589a4dcdab14UL,
-            0x8d7eb76070a08aecUL, 0xb0de65388cc8ada8UL,
-            0xdd15fe86affad912UL, 0x8a2dbf142dfcc7abUL,
-            0xacb92ed9397bf996UL, 0xd7e77a8f87daf7fbUL,
-            0x86f0ac99b4e8dafdUL, 0xa8acd7c0222311bcUL,
-            0xd2d80db02aabd62bUL, 0x83c7088e1aab65dbUL,
-            0xa4b8cab1a1563f52UL, 0xcde6fd5e09abcf26UL,
-            0x80b05e5ac60b6178UL, 0xa0dc75f1778e39d6UL,
-            0xc913936dd571c84cUL, 0xfb5878494ace3a5fUL,
-            0x9d174b2dcec0e47bUL, 0xc45d1df942711d9aUL,
-            0xf5746577930d6500UL, 0x9968bf6abbe85f20UL,
-            0xbfc2ef456ae276e8UL, 0xefb3ab16c59b14a2UL,
-            0x95d04aee3b80ece5UL, 0xbb445da9ca61281fUL,
-            0xea1575143cf97226UL, 0x924d692ca61be758UL,
-            0xb6e0c377cfa2e12eUL, 0xe498f455c38b997aUL,
-            0x8edf98b59a373fecUL, 0xb2977ee300c50fe7UL,
-            0xdf3d5e9bc0f653e1UL, 0x8b865b215899f46cUL,
-            0xae67f1e9aec07187UL, 0xda01ee641a708de9UL,
-            0x884134fe908658b2UL, 0xaa51823e34a7eedeUL,
-            0xd4e5e2cdc1d1ea96UL, 0x850fadc09923329eUL,
-            0xa6539930bf6bff45UL, 0xcfe87f7cef46ff16UL,
-            0x81f14fae158c5f6eUL, 0xa26da3999aef7749UL,
-            0xcb090c8001ab551cUL, 0xfdcb4fa002162a63UL,
-            0x9e9f11c4014dda7eUL, 0xc646d63501a1511dUL,
-            0xf7d88bc24209a565UL, 0x9ae757596946075fUL,
-            0xc1a12d2fc3978937UL, 0xf209787bb47d6b84UL,
-            0x9745eb4d50ce6332UL, 0xbd176620a501fbffUL,
-            0xec5d3fa8ce427affUL, 0x93ba47c980e98cdfUL,
-            0xb8a8d9bbe123f017UL, 0xe6d3102ad96cec1dUL,
-            0x9043ea1ac7e41392UL, 0xb454e4a179dd1877UL,
-            0xe16a1dc9d8545e94UL, 0x8ce2529e2734bb1dUL,
-            0xb01ae745b101e9e4UL, 0xdc21a1171d42645dUL,
-            0x899504ae72497ebaUL, 0xabfa45da0edbde69UL,
-            0xd6f8d7509292d603UL, 0x865b86925b9bc5c2UL,
-            0xa7f26836f282b732UL, 0xd1ef0244af2364ffUL,
-            0x8335616aed761f1fUL, 0xa402b9c5a8d3a6e7UL,
-            0xcd036837130890a1UL, 0x802221226be55a64UL,
-            0xa02aa96b06deb0fdUL, 0xc83553c5c8965d3dUL,
-            0xfa42a8b73abbf48cUL, 0x9c69a97284b578d7UL,
-            0xc38413cf25e2d70dUL, 0xf46518c2ef5b8cd1UL,
-            0x98bf2f79d5993802UL, 0xbeeefb584aff8603UL,
-            0xeeaaba2e5dbf6784UL, 0x952ab45cfa97a0b2UL,
-            0xba756174393d88dfUL, 0xe912b9d1478ceb17UL,
-            0x91abb422ccb812eeUL, 0xb616a12b7fe617aaUL,
-            0xe39c49765fdf9d94UL, 0x8e41ade9fbebc27dUL,
-            0xb1d219647ae6b31cUL, 0xde469fbd99a05fe3UL,
-            0x8aec23d680043beeUL, 0xada72ccc20054ae9UL,
-            0xd910f7ff28069da4UL, 0x87aa9aff79042286UL,
-            0xa99541bf57452b28UL, 0xd3fa922f2d1675f2UL,
-            0x847c9b5d7c2e09b7UL, 0xa59bc234db398c25UL,
-            0xcf02b2c21207ef2eUL, 0x8161afb94b44f57dUL,
-            0xa1ba1ba79e1632dcUL, 0xca28a291859bbf93UL,
-            0xfcb2cb35e702af78UL, 0x9defbf01b061adabUL,
-            0xc56baec21c7a1916UL, 0xf6c69a72a3989f5bUL,
-            0x9a3c2087a63f6399UL, 0xc0cb28a98fcf3c7fUL,
-            0xf0fdf2d3f3c30b9fUL, 0x969eb7c47859e743UL,
-            0xbc4665b596706114UL, 0xeb57ff22fc0c7959UL,
-            0x9316ff75dd87cbd8UL, 0xb7dcbf5354e9beceUL,
-            0xe5d3ef282a242e81UL, 0x8fa475791a569d10UL,
-            0xb38d92d760ec4455UL, 0xe070f78d3927556aUL,
-            0x8c469ab843b89562UL, 0xaf58416654a6babbUL,
-            0xdb2e51bfe9d0696aUL, 0x88fcf317f22241e2UL,
-            0xab3c2fddeeaad25aUL, 0xd60b3bd56a5586f1UL,
-            0x85c7056562757456UL, 0xa738c6bebb12d16cUL,
-            0xd106f86e69d785c7UL, 0x82a45b450226b39cUL,
-            0xa34d721642b06084UL, 0xcc20ce9bd35c78a5UL,
-            0xff290242c83396ceUL, 0x9f79a169bd203e41UL,
-            0xc75809c42c684dd1UL, 0xf92e0c3537826145UL,
-            0x9bbcc7a142b17ccbUL, 0xc2abf989935ddbfeUL,
-            0xf356f7ebf83552feUL, 0x98165af37b2153deUL,
-            0xbe1bf1b059e9a8d6UL, 0xeda2ee1c7064130cUL,
-            0x9485d4d1c63e8be7UL, 0xb9a74a0637ce2ee1UL,
-            0xe8111c87c5c1ba99UL, 0x910ab1d4db9914a0UL,
-            0xb54d5e4a127f59c8UL, 0xe2a0b5dc971f303aUL,
-            0x8da471a9de737e24UL, 0xb10d8e1456105dadUL,
-            0xdd50f1996b947518UL, 0x8a5296ffe33cc92fUL,
-            0xace73cbfdc0bfb7bUL, 0xd8210befd30efa5aUL,
-            0x8714a775e3e95c78UL, 0xa8d9d1535ce3b396UL,
-            0xd31045a8341ca07cUL, 0x83ea2b892091e44dUL,
-            0xa4e4b66b68b65d60UL, 0xce1de40642e3f4b9UL,
-            0x80d2ae83e9ce78f3UL, 0xa1075a24e4421730UL,
-            0xc94930ae1d529cfcUL, 0xfb9b7cd9a4a7443cUL,
-            0x9d412e0806e88aa5UL, 0xc491798a08a2ad4eUL,
-            0xf5b5d7ec8acb58a2UL, 0x9991a6f3d6bf1765UL,
-            0xbff610b0cc6edd3fUL, 0xeff394dcff8a948eUL,
-            0x95f83d0a1fb69cd9UL, 0xbb764c4ca7a4440fUL,
-            0xea53df5fd18d5513UL, 0x92746b9be2f8552cUL,
-            0xb7118682dbb66a77UL, 0xe4d5e82392a40515UL,
-            0x8f05b1163ba6832dUL, 0xb2c71d5bca9023f8UL,
-            0xdf78e4b2bd342cf6UL, 0x8bab8eefb6409c1aUL,
-            0xae9672aba3d0c320UL, 0xda3c0f568cc4f3e8UL,
-            0x8865899617fb1871UL, 0xaa7eebfb9df9de8dUL,
-            0xd51ea6fa85785631UL, 0x8533285c936b35deUL,
-            0xa67ff273b8460356UL, 0xd01fef10a657842cUL,
-            0x8213f56a67f6b29bUL, 0xa298f2c501f45f42UL,
-            0xcb3f2f7642717713UL, 0xfe0efb53d30dd4d7UL,
-            0x9ec95d1463e8a506UL, 0xc67bb4597ce2ce48UL,
-            0xf81aa16fdc1b81daUL, 0x9b10a4e5e9913128UL,
-            0xc1d4ce1f63f57d72UL, 0xf24a01a73cf2dccfUL,
-            0x976e41088617ca01UL, 0xbd49d14aa79dbc82UL,
-            0xec9c459d51852ba2UL, 0x93e1ab8252f33b45UL,
-            0xb8da1662e7b00a17UL, 0xe7109bfba19c0c9dUL,
-            0x906a617d450187e2UL, 0xb484f9dc9641e9daUL,
-            0xe1a63853bbd26451UL, 0x8d07e33455637eb2UL,
-            0xb049dc016abc5e5fUL, 0xdc5c5301c56b75f7UL,
-            0x89b9b3e11b6329baUL, 0xac2820d9623bf429UL,
-            0xd732290fbacaf133UL, 0x867f59a9d4bed6c0UL,
-            0xa81f301449ee8c70UL, 0xd226fc195c6a2f8cUL,
-            0x83585d8fd9c25db7UL, 0xa42e74f3d032f525UL,
-            0xcd3a1230c43fb26fUL, 0x80444b5e7aa7cf85UL,
-            0xa0555e361951c366UL, 0xc86ab5c39fa63440UL,
-            0xfa856334878fc150UL, 0x9c935e00d4b9d8d2UL,
-            0xc3b8358109e84f07UL, 0xf4a642e14c6262c8UL,
-            0x98e7e9cccfbd7dbdUL, 0xbf21e44003acdd2cUL,
-            0xeeea5d5004981478UL, 0x95527a5202df0ccbUL,
-            0xbaa718e68396cffdUL, 0xe950df20247c83fdUL,
-            0x91d28b7416cdd27eUL, 0xb6472e511c81471dUL,
-            0xe3d8f9e563a198e5UL, 0x8e679c2f5e44ff8fUL
-        )
+        c = if (index < dataLength) s[index] else '\u0000'
+        while (index != end && c.isDigit) {
+            significand = 10L * significand + (c.code - '0'.code).toLong()
+            index++
+            c = if (index < dataLength) s[index] else '\u0000'
+        }
+
+        exponent = exponentStartIndex - index
+        exponentEndIndex = index
+        digitCount -= exponent
     }
+
+    if (digitCount == 0) return pack(index, Float.NaN)
+
+    // Parse the exponent part of the float, if present
+    var exponentNumber = 0
+    if ((c.code or 0x20) == 'e'.code) {
+        index++
+        c = if (index < dataLength) s[index] else '\u0000'
+
+        val isExponentNegative = c == '-'
+        if (isExponentNegative || c == '+') {
+            index++
+        }
+
+        c = s[index]
+        while (index != end && c.isDigit) {
+            if (exponentNumber < FloatMaxExponentNumber) {
+                exponentNumber = 10 * exponentNumber + (c.code - '0'.code)
+            }
+            index++
+            c = if (index < dataLength) s[index] else '\u0000'
+        }
+
+        if (isExponentNegative) exponentNumber = -exponentNumber
+        exponent += exponentNumber
+    }
+
+    // TODO: check for f/F suffix?
+
+    var tooManyDigits = false
+
+    // If we have too many digits we need to retry differently and avoid overflows
+    if (digitCount > 19) {
+        var retryIndex = significandStartIndex
+        c = s[retryIndex]
+
+        // First check for the case where the number is 0.0000000xxxx (could be all zeroes)
+        while (index != end && (c == '0' || c == '.')) {
+            if (c == '0') digitCount--
+            retryIndex++
+            c = if (retryIndex < dataLength) s[retryIndex] else '\u0000'
+        }
+
+        if (digitCount > 19) {
+            tooManyDigits = true
+
+            significand = 0
+            retryIndex = significandStartIndex
+            c = s[retryIndex]
+
+            while (
+                retryIndex != significandEndIndex &&
+                significand.toULong() < 1000000000000000000UL
+            ) {
+                significand = 10L * significand + (c.code - '0'.code).toLong()
+                retryIndex++
+                c = if (retryIndex < dataLength) s[retryIndex] else '\u0000'
+            }
+
+            if (significand.toULong() >= 1000000000000000000UL) {
+                exponent = significandEndIndex - retryIndex + exponentNumber
+            } else {
+                retryIndex = exponentStartIndex
+                c = s[retryIndex]
+
+                while (
+                    retryIndex != exponentEndIndex &&
+                    significand.toULong() < 1000000000000000000UL
+                ) {
+                    significand = 10L * significand + (c.code - '0'.code).toLong()
+                    retryIndex++
+                    c = if (retryIndex < dataLength) s[retryIndex] else '\u0000'
+                }
+                exponent = exponentStartIndex - retryIndex + exponentNumber
+            }
+        }
+    }
+
+    // Fast path
+    if (exponent in FloatMinExponent..FloatMaxExponent &&
+        !tooManyDigits &&
+        significand.toULong() <= 1UL shl 24
+    ) {
+        var f = significand.toFloat()
+        if (exponent < 0) {
+            f /= PowersOfTen[-exponent]
+        } else {
+            f *= PowersOfTen[exponent]
+        }
+
+        return pack(index, if (isNegative) -f else f)
+    }
+
+    // Now we need to take the slow path, please refer to the original C++ code for a
+    // complete description of the algorithm
+
+    if (significand == 0L) {
+        return pack(index, if (isNegative) -0.0f else 0.0f)
+    }
+
+    if (exponent !in -126..127) {
+        return pack(index, s.substring(start, index).toFloat())
+    }
+
+    val significandFactor = Mantissa64[exponent - FloatSmallestExponent].toLong()
+    var lz = significand.countLeadingZeroBits()
+    significand = significand shl lz
+
+    val upper = fullMultiplicationHighBits(significand, significandFactor)
+    val upperBit = (upper ushr 63).toInt()
+    var mantissa = upper ushr (upperBit + 9)
+    lz += 1 xor upperBit
+
+    if (upper and 0x1ff == 0x1ffL || upper and 0x1ff == 0L && mantissa and 3L == 1L) {
+        return pack(index, s.substring(start, index).toFloat())
+    }
+
+    mantissa += 1
+    mantissa = mantissa ushr 1
+
+    if (mantissa >= 1L shl 53) {
+        mantissa = 1L shl 52
+        lz--
+    }
+
+    mantissa = mantissa and (1L shl 52).inv()
+
+    val adjustedExponent = (((152170L + 65536L) * exponent) shr 16) + 1024 + 63
+    val realExponent = adjustedExponent - lz
+    if (realExponent < 1 || realExponent > 2046) {
+        return pack(index, s.substring(start, index).toFloat())
+    }
+
+    mantissa = mantissa or (realExponent shl 52)
+    mantissa = mantissa or if (isNegative) 1L shl 63 else 0L
+
+    return pack(index, doubleFromBits(mantissa).toFloat())
 }
 
-private inline val Char.isDigit get() = (this - '0').toChar().code < 10
+// internal to bypass synthetic accessor
+@Suppress("MemberVisibilityCanBePrivate")
+internal val Mantissa64 = ulongArrayOf(
+    0xa5ced43b7e3e9188UL, 0xcf42894a5dce35eaUL,
+    0x818995ce7aa0e1b2UL, 0xa1ebfb4219491a1fUL,
+    0xca66fa129f9b60a6UL, 0xfd00b897478238d0UL,
+    0x9e20735e8cb16382UL, 0xc5a890362fddbc62UL,
+    0xf712b443bbd52b7bUL, 0x9a6bb0aa55653b2dUL,
+    0xc1069cd4eabe89f8UL, 0xf148440a256e2c76UL,
+    0x96cd2a865764dbcaUL, 0xbc807527ed3e12bcUL,
+    0xeba09271e88d976bUL, 0x93445b8731587ea3UL,
+    0xb8157268fdae9e4cUL, 0xe61acf033d1a45dfUL,
+    0x8fd0c16206306babUL, 0xb3c4f1ba87bc8696UL,
+    0xe0b62e2929aba83cUL, 0x8c71dcd9ba0b4925UL,
+    0xaf8e5410288e1b6fUL, 0xdb71e91432b1a24aUL,
+    0x892731ac9faf056eUL, 0xab70fe17c79ac6caUL,
+    0xd64d3d9db981787dUL, 0x85f0468293f0eb4eUL,
+    0xa76c582338ed2621UL, 0xd1476e2c07286faaUL,
+    0x82cca4db847945caUL, 0xa37fce126597973cUL,
+    0xcc5fc196fefd7d0cUL, 0xff77b1fcbebcdc4fUL,
+    0x9faacf3df73609b1UL, 0xc795830d75038c1dUL,
+    0xf97ae3d0d2446f25UL, 0x9becce62836ac577UL,
+    0xc2e801fb244576d5UL, 0xf3a20279ed56d48aUL,
+    0x9845418c345644d6UL, 0xbe5691ef416bd60cUL,
+    0xedec366b11c6cb8fUL, 0x94b3a202eb1c3f39UL,
+    0xb9e08a83a5e34f07UL, 0xe858ad248f5c22c9UL,
+    0x91376c36d99995beUL, 0xb58547448ffffb2dUL,
+    0xe2e69915b3fff9f9UL, 0x8dd01fad907ffc3bUL,
+    0xb1442798f49ffb4aUL, 0xdd95317f31c7fa1dUL,
+    0x8a7d3eef7f1cfc52UL, 0xad1c8eab5ee43b66UL,
+    0xd863b256369d4a40UL, 0x873e4f75e2224e68UL,
+    0xa90de3535aaae202UL, 0xd3515c2831559a83UL,
+    0x8412d9991ed58091UL, 0xa5178fff668ae0b6UL,
+    0xce5d73ff402d98e3UL, 0x80fa687f881c7f8eUL,
+    0xa139029f6a239f72UL, 0xc987434744ac874eUL,
+    0xfbe9141915d7a922UL, 0x9d71ac8fada6c9b5UL,
+    0xc4ce17b399107c22UL, 0xf6019da07f549b2bUL,
+    0x99c102844f94e0fbUL, 0xc0314325637a1939UL,
+    0xf03d93eebc589f88UL, 0x96267c7535b763b5UL,
+    0xbbb01b9283253ca2UL, 0xea9c227723ee8bcbUL,
+    0x92a1958a7675175fUL, 0xb749faed14125d36UL,
+    0xe51c79a85916f484UL, 0x8f31cc0937ae58d2UL,
+    0xb2fe3f0b8599ef07UL, 0xdfbdcece67006ac9UL,
+    0x8bd6a141006042bdUL, 0xaecc49914078536dUL,
+    0xda7f5bf590966848UL, 0x888f99797a5e012dUL,
+    0xaab37fd7d8f58178UL, 0xd5605fcdcf32e1d6UL,
+    0x855c3be0a17fcd26UL, 0xa6b34ad8c9dfc06fUL,
+    0xd0601d8efc57b08bUL, 0x823c12795db6ce57UL,
+    0xa2cb1717b52481edUL, 0xcb7ddcdda26da268UL,
+    0xfe5d54150b090b02UL, 0x9efa548d26e5a6e1UL,
+    0xc6b8e9b0709f109aUL, 0xf867241c8cc6d4c0UL,
+    0x9b407691d7fc44f8UL, 0xc21094364dfb5636UL,
+    0xf294b943e17a2bc4UL, 0x979cf3ca6cec5b5aUL,
+    0xbd8430bd08277231UL, 0xece53cec4a314ebdUL,
+    0x940f4613ae5ed136UL, 0xb913179899f68584UL,
+    0xe757dd7ec07426e5UL, 0x9096ea6f3848984fUL,
+    0xb4bca50b065abe63UL, 0xe1ebce4dc7f16dfbUL,
+    0x8d3360f09cf6e4bdUL, 0xb080392cc4349decUL,
+    0xdca04777f541c567UL, 0x89e42caaf9491b60UL,
+    0xac5d37d5b79b6239UL, 0xd77485cb25823ac7UL,
+    0x86a8d39ef77164bcUL, 0xa8530886b54dbdebUL,
+    0xd267caa862a12d66UL, 0x8380dea93da4bc60UL,
+    0xa46116538d0deb78UL, 0xcd795be870516656UL,
+    0x806bd9714632dff6UL, 0xa086cfcd97bf97f3UL,
+    0xc8a883c0fdaf7df0UL, 0xfad2a4b13d1b5d6cUL,
+    0x9cc3a6eec6311a63UL, 0xc3f490aa77bd60fcUL,
+    0xf4f1b4d515acb93bUL, 0x991711052d8bf3c5UL,
+    0xbf5cd54678eef0b6UL, 0xef340a98172aace4UL,
+    0x9580869f0e7aac0eUL, 0xbae0a846d2195712UL,
+    0xe998d258869facd7UL, 0x91ff83775423cc06UL,
+    0xb67f6455292cbf08UL, 0xe41f3d6a7377eecaUL,
+    0x8e938662882af53eUL, 0xb23867fb2a35b28dUL,
+    0xdec681f9f4c31f31UL, 0x8b3c113c38f9f37eUL,
+    0xae0b158b4738705eUL, 0xd98ddaee19068c76UL,
+    0x87f8a8d4cfa417c9UL, 0xa9f6d30a038d1dbcUL,
+    0xd47487cc8470652bUL, 0x84c8d4dfd2c63f3bUL,
+    0xa5fb0a17c777cf09UL, 0xcf79cc9db955c2ccUL,
+    0x81ac1fe293d599bfUL, 0xa21727db38cb002fUL,
+    0xca9cf1d206fdc03bUL, 0xfd442e4688bd304aUL,
+    0x9e4a9cec15763e2eUL, 0xc5dd44271ad3cdbaUL,
+    0xf7549530e188c128UL, 0x9a94dd3e8cf578b9UL,
+    0xc13a148e3032d6e7UL, 0xf18899b1bc3f8ca1UL,
+    0x96f5600f15a7b7e5UL, 0xbcb2b812db11a5deUL,
+    0xebdf661791d60f56UL, 0x936b9fcebb25c995UL,
+    0xb84687c269ef3bfbUL, 0xe65829b3046b0afaUL,
+    0x8ff71a0fe2c2e6dcUL, 0xb3f4e093db73a093UL,
+    0xe0f218b8d25088b8UL, 0x8c974f7383725573UL,
+    0xafbd2350644eeacfUL, 0xdbac6c247d62a583UL,
+    0x894bc396ce5da772UL, 0xab9eb47c81f5114fUL,
+    0xd686619ba27255a2UL, 0x8613fd0145877585UL,
+    0xa798fc4196e952e7UL, 0xd17f3b51fca3a7a0UL,
+    0x82ef85133de648c4UL, 0xa3ab66580d5fdaf5UL,
+    0xcc963fee10b7d1b3UL, 0xffbbcfe994e5c61fUL,
+    0x9fd561f1fd0f9bd3UL, 0xc7caba6e7c5382c8UL,
+    0xf9bd690a1b68637bUL, 0x9c1661a651213e2dUL,
+    0xc31bfa0fe5698db8UL, 0xf3e2f893dec3f126UL,
+    0x986ddb5c6b3a76b7UL, 0xbe89523386091465UL,
+    0xee2ba6c0678b597fUL, 0x94db483840b717efUL,
+    0xba121a4650e4ddebUL, 0xe896a0d7e51e1566UL,
+    0x915e2486ef32cd60UL, 0xb5b5ada8aaff80b8UL,
+    0xe3231912d5bf60e6UL, 0x8df5efabc5979c8fUL,
+    0xb1736b96b6fd83b3UL, 0xddd0467c64bce4a0UL,
+    0x8aa22c0dbef60ee4UL, 0xad4ab7112eb3929dUL,
+    0xd89d64d57a607744UL, 0x87625f056c7c4a8bUL,
+    0xa93af6c6c79b5d2dUL, 0xd389b47879823479UL,
+    0x843610cb4bf160cbUL, 0xa54394fe1eedb8feUL,
+    0xce947a3da6a9273eUL, 0x811ccc668829b887UL,
+    0xa163ff802a3426a8UL, 0xc9bcff6034c13052UL,
+    0xfc2c3f3841f17c67UL, 0x9d9ba7832936edc0UL,
+    0xc5029163f384a931UL, 0xf64335bcf065d37dUL,
+    0x99ea0196163fa42eUL, 0xc06481fb9bcf8d39UL,
+    0xf07da27a82c37088UL, 0x964e858c91ba2655UL,
+    0xbbe226efb628afeaUL, 0xeadab0aba3b2dbe5UL,
+    0x92c8ae6b464fc96fUL, 0xb77ada0617e3bbcbUL,
+    0xe55990879ddcaabdUL, 0x8f57fa54c2a9eab6UL,
+    0xb32df8e9f3546564UL, 0xdff9772470297ebdUL,
+    0x8bfbea76c619ef36UL, 0xaefae51477a06b03UL,
+    0xdab99e59958885c4UL, 0x88b402f7fd75539bUL,
+    0xaae103b5fcd2a881UL, 0xd59944a37c0752a2UL,
+    0x857fcae62d8493a5UL, 0xa6dfbd9fb8e5b88eUL,
+    0xd097ad07a71f26b2UL, 0x825ecc24c873782fUL,
+    0xa2f67f2dfa90563bUL, 0xcbb41ef979346bcaUL,
+    0xfea126b7d78186bcUL, 0x9f24b832e6b0f436UL,
+    0xc6ede63fa05d3143UL, 0xf8a95fcf88747d94UL,
+    0x9b69dbe1b548ce7cUL, 0xc24452da229b021bUL,
+    0xf2d56790ab41c2a2UL, 0x97c560ba6b0919a5UL,
+    0xbdb6b8e905cb600fUL, 0xed246723473e3813UL,
+    0x9436c0760c86e30bUL, 0xb94470938fa89bceUL,
+    0xe7958cb87392c2c2UL, 0x90bd77f3483bb9b9UL,
+    0xb4ecd5f01a4aa828UL, 0xe2280b6c20dd5232UL,
+    0x8d590723948a535fUL, 0xb0af48ec79ace837UL,
+    0xdcdb1b2798182244UL, 0x8a08f0f8bf0f156bUL,
+    0xac8b2d36eed2dac5UL, 0xd7adf884aa879177UL,
+    0x86ccbb52ea94baeaUL, 0xa87fea27a539e9a5UL,
+    0xd29fe4b18e88640eUL, 0x83a3eeeef9153e89UL,
+    0xa48ceaaab75a8e2bUL, 0xcdb02555653131b6UL,
+    0x808e17555f3ebf11UL, 0xa0b19d2ab70e6ed6UL,
+    0xc8de047564d20a8bUL, 0xfb158592be068d2eUL,
+    0x9ced737bb6c4183dUL, 0xc428d05aa4751e4cUL,
+    0xf53304714d9265dfUL, 0x993fe2c6d07b7fabUL,
+    0xbf8fdb78849a5f96UL, 0xef73d256a5c0f77cUL,
+    0x95a8637627989aadUL, 0xbb127c53b17ec159UL,
+    0xe9d71b689dde71afUL, 0x9226712162ab070dUL,
+    0xb6b00d69bb55c8d1UL, 0xe45c10c42a2b3b05UL,
+    0x8eb98a7a9a5b04e3UL, 0xb267ed1940f1c61cUL,
+    0xdf01e85f912e37a3UL, 0x8b61313bbabce2c6UL,
+    0xae397d8aa96c1b77UL, 0xd9c7dced53c72255UL,
+    0x881cea14545c7575UL, 0xaa242499697392d2UL,
+    0xd4ad2dbfc3d07787UL, 0x84ec3c97da624ab4UL,
+    0xa6274bbdd0fadd61UL, 0xcfb11ead453994baUL,
+    0x81ceb32c4b43fcf4UL, 0xa2425ff75e14fc31UL,
+    0xcad2f7f5359a3b3eUL, 0xfd87b5f28300ca0dUL,
+    0x9e74d1b791e07e48UL, 0xc612062576589ddaUL,
+    0xf79687aed3eec551UL, 0x9abe14cd44753b52UL,
+    0xc16d9a0095928a27UL, 0xf1c90080baf72cb1UL,
+    0x971da05074da7beeUL, 0xbce5086492111aeaUL,
+    0xec1e4a7db69561a5UL, 0x9392ee8e921d5d07UL,
+    0xb877aa3236a4b449UL, 0xe69594bec44de15bUL,
+    0x901d7cf73ab0acd9UL, 0xb424dc35095cd80fUL,
+    0xe12e13424bb40e13UL, 0x8cbccc096f5088cbUL,
+    0xafebff0bcb24aafeUL, 0xdbe6fecebdedd5beUL,
+    0x89705f4136b4a597UL, 0xabcc77118461cefcUL,
+    0xd6bf94d5e57a42bcUL, 0x8637bd05af6c69b5UL,
+    0xa7c5ac471b478423UL, 0xd1b71758e219652bUL,
+    0x83126e978d4fdf3bUL, 0xa3d70a3d70a3d70aUL,
+    0xccccccccccccccccUL, 0x8000000000000000UL,
+    0xa000000000000000UL, 0xc800000000000000UL,
+    0xfa00000000000000UL, 0x9c40000000000000UL,
+    0xc350000000000000UL, 0xf424000000000000UL,
+    0x9896800000000000UL, 0xbebc200000000000UL,
+    0xee6b280000000000UL, 0x9502f90000000000UL,
+    0xba43b74000000000UL, 0xe8d4a51000000000UL,
+    0x9184e72a00000000UL, 0xb5e620f480000000UL,
+    0xe35fa931a0000000UL, 0x8e1bc9bf04000000UL,
+    0xb1a2bc2ec5000000UL, 0xde0b6b3a76400000UL,
+    0x8ac7230489e80000UL, 0xad78ebc5ac620000UL,
+    0xd8d726b7177a8000UL, 0x878678326eac9000UL,
+    0xa968163f0a57b400UL, 0xd3c21bcecceda100UL,
+    0x84595161401484a0UL, 0xa56fa5b99019a5c8UL,
+    0xcecb8f27f4200f3aUL, 0x813f3978f8940984UL,
+    0xa18f07d736b90be5UL, 0xc9f2c9cd04674edeUL,
+    0xfc6f7c4045812296UL, 0x9dc5ada82b70b59dUL,
+    0xc5371912364ce305UL, 0xf684df56c3e01bc6UL,
+    0x9a130b963a6c115cUL, 0xc097ce7bc90715b3UL,
+    0xf0bdc21abb48db20UL, 0x96769950b50d88f4UL,
+    0xbc143fa4e250eb31UL, 0xeb194f8e1ae525fdUL,
+    0x92efd1b8d0cf37beUL, 0xb7abc627050305adUL,
+    0xe596b7b0c643c719UL, 0x8f7e32ce7bea5c6fUL,
+    0xb35dbf821ae4f38bUL, 0xe0352f62a19e306eUL,
+    0x8c213d9da502de45UL, 0xaf298d050e4395d6UL,
+    0xdaf3f04651d47b4cUL, 0x88d8762bf324cd0fUL,
+    0xab0e93b6efee0053UL, 0xd5d238a4abe98068UL,
+    0x85a36366eb71f041UL, 0xa70c3c40a64e6c51UL,
+    0xd0cf4b50cfe20765UL, 0x82818f1281ed449fUL,
+    0xa321f2d7226895c7UL, 0xcbea6f8ceb02bb39UL,
+    0xfee50b7025c36a08UL, 0x9f4f2726179a2245UL,
+    0xc722f0ef9d80aad6UL, 0xf8ebad2b84e0d58bUL,
+    0x9b934c3b330c8577UL, 0xc2781f49ffcfa6d5UL,
+    0xf316271c7fc3908aUL, 0x97edd871cfda3a56UL,
+    0xbde94e8e43d0c8ecUL, 0xed63a231d4c4fb27UL,
+    0x945e455f24fb1cf8UL, 0xb975d6b6ee39e436UL,
+    0xe7d34c64a9c85d44UL, 0x90e40fbeea1d3a4aUL,
+    0xb51d13aea4a488ddUL, 0xe264589a4dcdab14UL,
+    0x8d7eb76070a08aecUL, 0xb0de65388cc8ada8UL,
+    0xdd15fe86affad912UL, 0x8a2dbf142dfcc7abUL,
+    0xacb92ed9397bf996UL, 0xd7e77a8f87daf7fbUL,
+    0x86f0ac99b4e8dafdUL, 0xa8acd7c0222311bcUL,
+    0xd2d80db02aabd62bUL, 0x83c7088e1aab65dbUL,
+    0xa4b8cab1a1563f52UL, 0xcde6fd5e09abcf26UL,
+    0x80b05e5ac60b6178UL, 0xa0dc75f1778e39d6UL,
+    0xc913936dd571c84cUL, 0xfb5878494ace3a5fUL,
+    0x9d174b2dcec0e47bUL, 0xc45d1df942711d9aUL,
+    0xf5746577930d6500UL, 0x9968bf6abbe85f20UL,
+    0xbfc2ef456ae276e8UL, 0xefb3ab16c59b14a2UL,
+    0x95d04aee3b80ece5UL, 0xbb445da9ca61281fUL,
+    0xea1575143cf97226UL, 0x924d692ca61be758UL,
+    0xb6e0c377cfa2e12eUL, 0xe498f455c38b997aUL,
+    0x8edf98b59a373fecUL, 0xb2977ee300c50fe7UL,
+    0xdf3d5e9bc0f653e1UL, 0x8b865b215899f46cUL,
+    0xae67f1e9aec07187UL, 0xda01ee641a708de9UL,
+    0x884134fe908658b2UL, 0xaa51823e34a7eedeUL,
+    0xd4e5e2cdc1d1ea96UL, 0x850fadc09923329eUL,
+    0xa6539930bf6bff45UL, 0xcfe87f7cef46ff16UL,
+    0x81f14fae158c5f6eUL, 0xa26da3999aef7749UL,
+    0xcb090c8001ab551cUL, 0xfdcb4fa002162a63UL,
+    0x9e9f11c4014dda7eUL, 0xc646d63501a1511dUL,
+    0xf7d88bc24209a565UL, 0x9ae757596946075fUL,
+    0xc1a12d2fc3978937UL, 0xf209787bb47d6b84UL,
+    0x9745eb4d50ce6332UL, 0xbd176620a501fbffUL,
+    0xec5d3fa8ce427affUL, 0x93ba47c980e98cdfUL,
+    0xb8a8d9bbe123f017UL, 0xe6d3102ad96cec1dUL,
+    0x9043ea1ac7e41392UL, 0xb454e4a179dd1877UL,
+    0xe16a1dc9d8545e94UL, 0x8ce2529e2734bb1dUL,
+    0xb01ae745b101e9e4UL, 0xdc21a1171d42645dUL,
+    0x899504ae72497ebaUL, 0xabfa45da0edbde69UL,
+    0xd6f8d7509292d603UL, 0x865b86925b9bc5c2UL,
+    0xa7f26836f282b732UL, 0xd1ef0244af2364ffUL,
+    0x8335616aed761f1fUL, 0xa402b9c5a8d3a6e7UL,
+    0xcd036837130890a1UL, 0x802221226be55a64UL,
+    0xa02aa96b06deb0fdUL, 0xc83553c5c8965d3dUL,
+    0xfa42a8b73abbf48cUL, 0x9c69a97284b578d7UL,
+    0xc38413cf25e2d70dUL, 0xf46518c2ef5b8cd1UL,
+    0x98bf2f79d5993802UL, 0xbeeefb584aff8603UL,
+    0xeeaaba2e5dbf6784UL, 0x952ab45cfa97a0b2UL,
+    0xba756174393d88dfUL, 0xe912b9d1478ceb17UL,
+    0x91abb422ccb812eeUL, 0xb616a12b7fe617aaUL,
+    0xe39c49765fdf9d94UL, 0x8e41ade9fbebc27dUL,
+    0xb1d219647ae6b31cUL, 0xde469fbd99a05fe3UL,
+    0x8aec23d680043beeUL, 0xada72ccc20054ae9UL,
+    0xd910f7ff28069da4UL, 0x87aa9aff79042286UL,
+    0xa99541bf57452b28UL, 0xd3fa922f2d1675f2UL,
+    0x847c9b5d7c2e09b7UL, 0xa59bc234db398c25UL,
+    0xcf02b2c21207ef2eUL, 0x8161afb94b44f57dUL,
+    0xa1ba1ba79e1632dcUL, 0xca28a291859bbf93UL,
+    0xfcb2cb35e702af78UL, 0x9defbf01b061adabUL,
+    0xc56baec21c7a1916UL, 0xf6c69a72a3989f5bUL,
+    0x9a3c2087a63f6399UL, 0xc0cb28a98fcf3c7fUL,
+    0xf0fdf2d3f3c30b9fUL, 0x969eb7c47859e743UL,
+    0xbc4665b596706114UL, 0xeb57ff22fc0c7959UL,
+    0x9316ff75dd87cbd8UL, 0xb7dcbf5354e9beceUL,
+    0xe5d3ef282a242e81UL, 0x8fa475791a569d10UL,
+    0xb38d92d760ec4455UL, 0xe070f78d3927556aUL,
+    0x8c469ab843b89562UL, 0xaf58416654a6babbUL,
+    0xdb2e51bfe9d0696aUL, 0x88fcf317f22241e2UL,
+    0xab3c2fddeeaad25aUL, 0xd60b3bd56a5586f1UL,
+    0x85c7056562757456UL, 0xa738c6bebb12d16cUL,
+    0xd106f86e69d785c7UL, 0x82a45b450226b39cUL,
+    0xa34d721642b06084UL, 0xcc20ce9bd35c78a5UL,
+    0xff290242c83396ceUL, 0x9f79a169bd203e41UL,
+    0xc75809c42c684dd1UL, 0xf92e0c3537826145UL,
+    0x9bbcc7a142b17ccbUL, 0xc2abf989935ddbfeUL,
+    0xf356f7ebf83552feUL, 0x98165af37b2153deUL,
+    0xbe1bf1b059e9a8d6UL, 0xeda2ee1c7064130cUL,
+    0x9485d4d1c63e8be7UL, 0xb9a74a0637ce2ee1UL,
+    0xe8111c87c5c1ba99UL, 0x910ab1d4db9914a0UL,
+    0xb54d5e4a127f59c8UL, 0xe2a0b5dc971f303aUL,
+    0x8da471a9de737e24UL, 0xb10d8e1456105dadUL,
+    0xdd50f1996b947518UL, 0x8a5296ffe33cc92fUL,
+    0xace73cbfdc0bfb7bUL, 0xd8210befd30efa5aUL,
+    0x8714a775e3e95c78UL, 0xa8d9d1535ce3b396UL,
+    0xd31045a8341ca07cUL, 0x83ea2b892091e44dUL,
+    0xa4e4b66b68b65d60UL, 0xce1de40642e3f4b9UL,
+    0x80d2ae83e9ce78f3UL, 0xa1075a24e4421730UL,
+    0xc94930ae1d529cfcUL, 0xfb9b7cd9a4a7443cUL,
+    0x9d412e0806e88aa5UL, 0xc491798a08a2ad4eUL,
+    0xf5b5d7ec8acb58a2UL, 0x9991a6f3d6bf1765UL,
+    0xbff610b0cc6edd3fUL, 0xeff394dcff8a948eUL,
+    0x95f83d0a1fb69cd9UL, 0xbb764c4ca7a4440fUL,
+    0xea53df5fd18d5513UL, 0x92746b9be2f8552cUL,
+    0xb7118682dbb66a77UL, 0xe4d5e82392a40515UL,
+    0x8f05b1163ba6832dUL, 0xb2c71d5bca9023f8UL,
+    0xdf78e4b2bd342cf6UL, 0x8bab8eefb6409c1aUL,
+    0xae9672aba3d0c320UL, 0xda3c0f568cc4f3e8UL,
+    0x8865899617fb1871UL, 0xaa7eebfb9df9de8dUL,
+    0xd51ea6fa85785631UL, 0x8533285c936b35deUL,
+    0xa67ff273b8460356UL, 0xd01fef10a657842cUL,
+    0x8213f56a67f6b29bUL, 0xa298f2c501f45f42UL,
+    0xcb3f2f7642717713UL, 0xfe0efb53d30dd4d7UL,
+    0x9ec95d1463e8a506UL, 0xc67bb4597ce2ce48UL,
+    0xf81aa16fdc1b81daUL, 0x9b10a4e5e9913128UL,
+    0xc1d4ce1f63f57d72UL, 0xf24a01a73cf2dccfUL,
+    0x976e41088617ca01UL, 0xbd49d14aa79dbc82UL,
+    0xec9c459d51852ba2UL, 0x93e1ab8252f33b45UL,
+    0xb8da1662e7b00a17UL, 0xe7109bfba19c0c9dUL,
+    0x906a617d450187e2UL, 0xb484f9dc9641e9daUL,
+    0xe1a63853bbd26451UL, 0x8d07e33455637eb2UL,
+    0xb049dc016abc5e5fUL, 0xdc5c5301c56b75f7UL,
+    0x89b9b3e11b6329baUL, 0xac2820d9623bf429UL,
+    0xd732290fbacaf133UL, 0x867f59a9d4bed6c0UL,
+    0xa81f301449ee8c70UL, 0xd226fc195c6a2f8cUL,
+    0x83585d8fd9c25db7UL, 0xa42e74f3d032f525UL,
+    0xcd3a1230c43fb26fUL, 0x80444b5e7aa7cf85UL,
+    0xa0555e361951c366UL, 0xc86ab5c39fa63440UL,
+    0xfa856334878fc150UL, 0x9c935e00d4b9d8d2UL,
+    0xc3b8358109e84f07UL, 0xf4a642e14c6262c8UL,
+    0x98e7e9cccfbd7dbdUL, 0xbf21e44003acdd2cUL,
+    0xeeea5d5004981478UL, 0x95527a5202df0ccbUL,
+    0xbaa718e68396cffdUL, 0xe950df20247c83fdUL,
+    0x91d28b7416cdd27eUL, 0xb6472e511c81471dUL,
+    0xe3d8f9e563a198e5UL, 0x8e679c2f5e44ff8fUL
+)
 
-private inline fun charAt(s: CharSequence, index: Int) = if (index < s.length) {
-    s[index]
-} else {
-    '\u0000'
+internal inline val Char.isDigit get() = (this - '0').toChar().code < 10
+
+private inline fun pack(index: Int, value: Float): Long {
+    return (index.toLong() shl 32) or (value.toRawBits().toLong() and 0xFFFFFFFFL)
 }
 
 private inline fun fullMultiplicationHighBits(x: Long, y: Long): Long {
@@ -614,7 +604,7 @@
     return xTimesYHi + (carry ushr 32) + (xTimesYMid ushr 32)
 }
 
-private inline fun parseFourDigits(str: CharSequence, offset: Int): Int {
+private inline fun parseFourDigits(str: String, offset: Int): Int {
     val v = (str[offset].code.toLong()
         or (str[offset + 1].code.toLong() shl 16)
         or (str[offset + 2].code.toLong() shl 32)
diff --git a/compose/ui/ui-graphics/src/commonMain/kotlin/androidx/compose/ui/graphics/vector/PathParser.kt b/compose/ui/ui-graphics/src/commonMain/kotlin/androidx/compose/ui/graphics/vector/PathParser.kt
index 405910e..45f38bf 100644
--- a/compose/ui/ui-graphics/src/commonMain/kotlin/androidx/compose/ui/graphics/vector/PathParser.kt
+++ b/compose/ui/ui-graphics/src/commonMain/kotlin/androidx/compose/ui/graphics/vector/PathParser.kt
@@ -51,7 +51,6 @@
 class PathParser {
     private val nodes = ArrayList<PathNode>()
 
-    private val floatResult = FloatResult()
     private var nodeData = FloatArray(64)
 
     fun clear() {
@@ -106,16 +105,19 @@
                         // Find the next float and add it to the data array if we got a valid result
                         // An invalid result could be a malformed float, or simply that we reached
                         // the end of the list of floats
-                        index = FastFloatParser.nextFloat(pathData, index, end, floatResult)
+                        val result = nextFloat(pathData, index, end)
+                        index = result.index
+                        val value = result.floatValue
 
-                        if (floatResult.isValid) {
-                            nodeData[dataCount++] = floatResult.value
+                        // If the number is not a NaN
+                        if (!value.isNaN()) {
+                            nodeData[dataCount++] = value
                             resizeNodeData(dataCount)
                         }
 
                         // Skip any commas
                         while (index < end && pathData[index] == ',') index++
-                    } while (index < end && floatResult.isValid)
+                    } while (index < end && !value.isNaN())
                 }
 
                 addNodes(command, nodeData, dataCount)
diff --git a/compose/ui/ui-graphics/src/commonTest/kotlin/androidx/compose/ui/graphics/vector/FastFloatParserTest.kt b/compose/ui/ui-graphics/src/commonTest/kotlin/androidx/compose/ui/graphics/vector/FastFloatParserTest.kt
index d83802a..b72eccf 100644
--- a/compose/ui/ui-graphics/src/commonTest/kotlin/androidx/compose/ui/graphics/vector/FastFloatParserTest.kt
+++ b/compose/ui/ui-graphics/src/commonTest/kotlin/androidx/compose/ui/graphics/vector/FastFloatParserTest.kt
@@ -3372,5 +3372,5 @@
     "7F800000 9e40000000",
     "7F800000 9e563",
     "7F800000 9e795",
-    "7F800000 9e904",
+    "7F800000 9e904"
 )
diff --git a/bluetooth/integration-tests/testapp/src/main/java/androidx/bluetooth/integration/testapp/ui/common/ByteArray.kt b/compose/ui/ui-graphics/src/jvmMain/kotlin/androidx/compose/ui/graphics/vector/JvmFastFloatParser.jvm.kt
similarity index 64%
copy from bluetooth/integration-tests/testapp/src/main/java/androidx/bluetooth/integration/testapp/ui/common/ByteArray.kt
copy to compose/ui/ui-graphics/src/jvmMain/kotlin/androidx/compose/ui/graphics/vector/JvmFastFloatParser.jvm.kt
index 40b8f5b..8bdaab3 100644
--- a/bluetooth/integration-tests/testapp/src/main/java/androidx/bluetooth/integration/testapp/ui/common/ByteArray.kt
+++ b/compose/ui/ui-graphics/src/jvmMain/kotlin/androidx/compose/ui/graphics/vector/JvmFastFloatParser.jvm.kt
@@ -14,7 +14,12 @@
  * limitations under the License.
  */
 
-package androidx.bluetooth.integration.testapp.ui.common
+@file:Suppress("NOTHING_TO_INLINE")
 
-fun ByteArray.toHexString(): String =
-    joinToString(separator = " ", prefix = "0x") { String.format("%02X", it) }
+package androidx.compose.ui.graphics.vector
+
+// See explanation in FastFloatParser.kt
+internal actual inline fun floatFromBits(bits: Int): Float = java.lang.Float.intBitsToFloat(bits)
+
+internal actual inline fun doubleFromBits(bits: Long): Double =
+    java.lang.Double.longBitsToDouble(bits)
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/api/current.txt b/compose/ui/ui/api/current.txt
index 0bcab0a..9489035 100644
--- a/compose/ui/ui/api/current.txt
+++ b/compose/ui/ui/api/current.txt
@@ -254,10 +254,7 @@
 package androidx.compose.ui.draganddrop {
 
   public final class DragAndDropEvent {
-    ctor public DragAndDropEvent(int type, android.view.DragEvent dragEvent);
-    method public int getType();
-    method public void setType(int);
-    property public final int type;
+    ctor public DragAndDropEvent(android.view.DragEvent dragEvent, optional androidx.collection.ArraySet<androidx.compose.ui.draganddrop.DragAndDropModifierNode> interestedNodes);
   }
 
   @kotlin.jvm.JvmInline public final value class DragAndDropEventType {
@@ -293,6 +290,18 @@
     property public final androidx.compose.ui.draganddrop.DragAndDropTransfer transfer;
   }
 
+  public interface DragAndDropModifierNode extends androidx.compose.ui.node.DelegatableNode androidx.compose.ui.draganddrop.DragAndDropTarget {
+    method public void drag(androidx.compose.ui.draganddrop.DragAndDropInfo dragAndDropInfo);
+  }
+
+  public final class DragAndDropNodeKt {
+    method public static androidx.compose.ui.draganddrop.DragAndDropModifierNode DragAndDropModifierNode(optional kotlin.jvm.functions.Function1<? super androidx.compose.ui.draganddrop.DragAndDropEvent,? extends androidx.compose.ui.draganddrop.DragAndDropTarget> onDragAndDropEvent);
+  }
+
+  public fun interface DragAndDropTarget {
+    method public boolean onDragAndDropEvent(androidx.compose.ui.draganddrop.DragAndDropEvent event, int type);
+  }
+
   public final class DragAndDropTransfer {
     ctor public DragAndDropTransfer(android.content.ClipData clipData, optional Object? localState, optional int flags);
     method public android.content.ClipData getClipData();
@@ -305,6 +314,7 @@
 
   public final class DragAndDrop_androidKt {
     method public static android.view.DragEvent getDragEvent(androidx.compose.ui.draganddrop.DragAndDropEvent);
+    method public static java.util.Set<java.lang.String> mimeTypes(androidx.compose.ui.draganddrop.DragAndDropEvent);
   }
 
 }
diff --git a/compose/ui/ui/api/restricted_current.txt b/compose/ui/ui/api/restricted_current.txt
index a7956aa..38e9d0f 100644
--- a/compose/ui/ui/api/restricted_current.txt
+++ b/compose/ui/ui/api/restricted_current.txt
@@ -254,10 +254,7 @@
 package androidx.compose.ui.draganddrop {
 
   public final class DragAndDropEvent {
-    ctor public DragAndDropEvent(int type, android.view.DragEvent dragEvent);
-    method public int getType();
-    method public void setType(int);
-    property public final int type;
+    ctor public DragAndDropEvent(android.view.DragEvent dragEvent, optional androidx.collection.ArraySet<androidx.compose.ui.draganddrop.DragAndDropModifierNode> interestedNodes);
   }
 
   @kotlin.jvm.JvmInline public final value class DragAndDropEventType {
@@ -293,6 +290,18 @@
     property public final androidx.compose.ui.draganddrop.DragAndDropTransfer transfer;
   }
 
+  public interface DragAndDropModifierNode extends androidx.compose.ui.node.DelegatableNode androidx.compose.ui.draganddrop.DragAndDropTarget {
+    method public void drag(androidx.compose.ui.draganddrop.DragAndDropInfo dragAndDropInfo);
+  }
+
+  public final class DragAndDropNodeKt {
+    method public static androidx.compose.ui.draganddrop.DragAndDropModifierNode DragAndDropModifierNode(optional kotlin.jvm.functions.Function1<? super androidx.compose.ui.draganddrop.DragAndDropEvent,? extends androidx.compose.ui.draganddrop.DragAndDropTarget> onDragAndDropEvent);
+  }
+
+  public fun interface DragAndDropTarget {
+    method public boolean onDragAndDropEvent(androidx.compose.ui.draganddrop.DragAndDropEvent event, int type);
+  }
+
   public final class DragAndDropTransfer {
     ctor public DragAndDropTransfer(android.content.ClipData clipData, optional Object? localState, optional int flags);
     method public android.content.ClipData getClipData();
@@ -305,6 +314,7 @@
 
   public final class DragAndDrop_androidKt {
     method public static android.view.DragEvent getDragEvent(androidx.compose.ui.draganddrop.DragAndDropEvent);
+    method public static java.util.Set<java.lang.String> mimeTypes(androidx.compose.ui.draganddrop.DragAndDropEvent);
   }
 
 }
diff --git a/compose/ui/ui/build.gradle b/compose/ui/ui/build.gradle
index eaa5528..2f22186 100644
--- a/compose/ui/ui/build.gradle
+++ b/compose/ui/ui/build.gradle
@@ -152,10 +152,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 {
@@ -165,6 +161,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"))
@@ -211,12 +210,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/lint-baseline.xml b/compose/ui/ui/lint-baseline.xml
index 0a78a98..ba27473 100644
--- a/compose/ui/ui/lint-baseline.xml
+++ b/compose/ui/ui/lint-baseline.xml
@@ -543,7 +543,7 @@
 
     <issue
         id="PrimitiveInCollection"
-        message="variable var43bc1f85 with type Map&lt;AlignmentLine, Integer>: replace with ObjectIntMap"
+        message="variable var43bc1b5b with type Map&lt;AlignmentLine, Integer>: replace with ObjectIntMap"
         errorLine1="                    val oldLines = oldAlignmentLines"
         errorLine2="                                   ^">
         <location
diff --git a/compose/ui/ui/src/androidInstrumentedTest/kotlin/androidx/compose/ui/AndroidAccessibilityTest.kt b/compose/ui/ui/src/androidInstrumentedTest/kotlin/androidx/compose/ui/AndroidAccessibilityTest.kt
index 8185eb0..67e660b 100644
--- a/compose/ui/ui/src/androidInstrumentedTest/kotlin/androidx/compose/ui/AndroidAccessibilityTest.kt
+++ b/compose/ui/ui/src/androidInstrumentedTest/kotlin/androidx/compose/ui/AndroidAccessibilityTest.kt
@@ -4782,6 +4782,35 @@
         }
     }
 
+    @Test
+    fun canScroll_returnsFalse_whenAccessedOutsideOfMainThread() {
+        container.setContent {
+            Box(
+                Modifier.semantics(mergeDescendants = true) { }
+            ) {
+                Column(
+                    Modifier
+                        .size(50.dp)
+                        .verticalScroll(rememberScrollState())
+                ) {
+                    repeat(10) {
+                        Box(Modifier.size(30.dp))
+                    }
+                }
+            }
+        }
+
+        rule.runOnIdle {
+            androidComposeView.dispatchTouchEvent(
+                createHoverMotionEvent(MotionEvent.ACTION_DOWN, 10f, 10f)
+            )
+
+            assertTrue(androidComposeView.canScrollVertically(1))
+        }
+
+        assertFalse(androidComposeView.canScrollVertically(1))
+    }
+
     private fun eventIndex(list: List<AccessibilityEvent>, event: AccessibilityEvent): Int {
         for (i in list.indices) {
             if (ReflectionEquals(list[i], null).matches(event)) {
diff --git a/compose/ui/ui/src/androidInstrumentedTest/kotlin/androidx/compose/ui/AndroidComposeViewAccessibilityDelegateCompatTest.kt b/compose/ui/ui/src/androidInstrumentedTest/kotlin/androidx/compose/ui/AndroidComposeViewAccessibilityDelegateCompatTest.kt
index 469f38e..d68f6c8 100644
--- a/compose/ui/ui/src/androidInstrumentedTest/kotlin/androidx/compose/ui/AndroidComposeViewAccessibilityDelegateCompatTest.kt
+++ b/compose/ui/ui/src/androidInstrumentedTest/kotlin/androidx/compose/ui/AndroidComposeViewAccessibilityDelegateCompatTest.kt
@@ -42,12 +42,8 @@
 import androidx.compose.ui.geometry.MutableRect
 import androidx.compose.ui.geometry.Offset
 import androidx.compose.ui.graphics.Canvas
-import androidx.compose.ui.graphics.Color
-import androidx.compose.ui.graphics.CompositingStrategy
 import androidx.compose.ui.graphics.Matrix
-import androidx.compose.ui.graphics.RenderEffect
-import androidx.compose.ui.graphics.Shape
-import androidx.compose.ui.graphics.TransformOrigin
+import androidx.compose.ui.graphics.ReusableGraphicsLayerScope
 import androidx.compose.ui.graphics.toAndroidRect
 import androidx.compose.ui.hapticfeedback.HapticFeedback
 import androidx.compose.ui.input.InputModeManager
@@ -2211,31 +2207,15 @@
         val inverseTransform = Matrix()
         return object : OwnedLayer {
             override fun updateLayerProperties(
-                scaleX: Float,
-                scaleY: Float,
-                alpha: Float,
-                translationX: Float,
-                translationY: Float,
-                shadowElevation: Float,
-                rotationX: Float,
-                rotationY: Float,
-                rotationZ: Float,
-                cameraDistance: Float,
-                transformOrigin: TransformOrigin,
-                shape: Shape,
-                clip: Boolean,
-                renderEffect: RenderEffect?,
-                ambientShadowColor: Color,
-                spotShadowColor: Color,
-                compositingStrategy: CompositingStrategy,
+                scope: ReusableGraphicsLayerScope,
                 layoutDirection: LayoutDirection,
                 density: Density
             ) {
                 transform.reset()
                 // This is not expected to be 100% accurate
-                transform.scale(scaleX, scaleY)
-                transform.rotateZ(rotationZ)
-                transform.translate(translationX, translationY)
+                transform.scale(scope.scaleX, scope.scaleY)
+                transform.rotateZ(scope.rotationZ)
+                transform.translate(scope.translationX, scope.translationY)
                 transform.invertTo(inverseTransform)
             }
 
diff --git a/compose/ui/ui/src/androidInstrumentedTest/kotlin/androidx/compose/ui/AndroidLayoutDrawTest.kt b/compose/ui/ui/src/androidInstrumentedTest/kotlin/androidx/compose/ui/AndroidLayoutDrawTest.kt
index e905ca7..ed3d26d 100644
--- a/compose/ui/ui/src/androidInstrumentedTest/kotlin/androidx/compose/ui/AndroidLayoutDrawTest.kt
+++ b/compose/ui/ui/src/androidInstrumentedTest/kotlin/androidx/compose/ui/AndroidLayoutDrawTest.kt
@@ -57,12 +57,10 @@
 import androidx.compose.ui.geometry.Size
 import androidx.compose.ui.graphics.Color
 import androidx.compose.ui.graphics.CompositingStrategy
-import androidx.compose.ui.graphics.DefaultShadowColor
 import androidx.compose.ui.graphics.Outline
 import androidx.compose.ui.graphics.Path
-import androidx.compose.ui.graphics.RectangleShape
+import androidx.compose.ui.graphics.ReusableGraphicsLayerScope
 import androidx.compose.ui.graphics.Shape
-import androidx.compose.ui.graphics.TransformOrigin
 import androidx.compose.ui.graphics.asImageBitmap
 import androidx.compose.ui.graphics.drawscope.ContentDrawScope
 import androidx.compose.ui.graphics.drawscope.Stroke
@@ -393,27 +391,10 @@
             ViewLayerContainer(activity),
             {},
             {}).apply {
-            updateLayerProperties(
-                scaleX = 1f,
-                scaleY = 1f,
-                alpha = 1f,
-                translationX = 0f,
-                translationY = 0f,
-                shadowElevation = 0f,
-                rotationX = 0f,
-                rotationY = 0f,
-                rotationZ = 0f,
-                cameraDistance = cameraDistance,
-                transformOrigin = TransformOrigin.Center,
-                shape = RectangleShape,
-                clip = true,
-                layoutDirection = LayoutDirection.Ltr,
-                density = Density(1f),
-                renderEffect = null,
-                ambientShadowColor = DefaultShadowColor,
-                spotShadowColor = DefaultShadowColor,
-                compositingStrategy = compositingStrategy
-            )
+            val scope = ReusableGraphicsLayerScope()
+            scope.cameraDistance = cameraDistance
+            scope.compositingStrategy = compositingStrategy
+            updateLayerProperties(scope, LayoutDirection.Ltr, Density(1f))
         }
         return expectedLayerType == view.layerType &&
             expectedOverlappingRendering == view.hasOverlappingRendering()
@@ -451,27 +432,9 @@
             {},
             {}
         ).apply {
-            updateLayerProperties(
-                scaleX = 1f,
-                scaleY = 1f,
-                alpha = 1f,
-                translationX = 0f,
-                translationY = 0f,
-                shadowElevation = 0f,
-                rotationX = 0f,
-                rotationY = 0f,
-                rotationZ = 0f,
-                cameraDistance = cameraDistance,
-                transformOrigin = TransformOrigin.Center,
-                shape = RectangleShape,
-                clip = true,
-                layoutDirection = LayoutDirection.Ltr,
-                density = Density(1f),
-                renderEffect = null,
-                ambientShadowColor = DefaultShadowColor,
-                spotShadowColor = DefaultShadowColor,
-                compositingStrategy = CompositingStrategy.Auto
-            )
+            val scope = ReusableGraphicsLayerScope()
+            scope.cameraDistance = cameraDistance
+            updateLayerProperties(scope, LayoutDirection.Ltr, Density(1f))
         }
         // Verify that the camera distance is applied properly even after accounting for
         // the internal dp conversion within View
diff --git a/compose/ui/ui/src/androidInstrumentedTest/kotlin/androidx/compose/ui/draganddrop/AndroidDragAndDropTest.kt b/compose/ui/ui/src/androidInstrumentedTest/kotlin/androidx/compose/ui/draganddrop/AndroidDragAndDropTest.kt
new file mode 100644
index 0000000..e04058a
--- /dev/null
+++ b/compose/ui/ui/src/androidInstrumentedTest/kotlin/androidx/compose/ui/draganddrop/AndroidDragAndDropTest.kt
@@ -0,0 +1,861 @@
+/*
+ * 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.ui.draganddrop
+
+import android.os.Parcel
+import android.view.DragEvent
+import android.view.ViewGroup
+import androidx.compose.foundation.ExperimentalFoundationApi
+import androidx.compose.foundation.draganddrop.dragAndDropTarget
+import androidx.compose.foundation.layout.Box
+import androidx.compose.foundation.layout.offset
+import androidx.compose.foundation.layout.requiredSize
+import androidx.compose.runtime.getValue
+import androidx.compose.runtime.mutableStateOf
+import androidx.compose.runtime.setValue
+import androidx.compose.ui.Alignment
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.OpenComposeView
+import androidx.compose.ui.findAndroidComposeView
+import androidx.compose.ui.geometry.Offset
+import androidx.compose.ui.layout.onGloballyPositioned
+import androidx.compose.ui.layout.positionInParent
+import androidx.compose.ui.platform.LocalDensity
+import androidx.compose.ui.test.TestActivity
+import androidx.compose.ui.unit.Density
+import androidx.compose.ui.unit.IntOffset
+import androidx.compose.ui.unit.dp
+import com.google.common.truth.Truth
+import java.util.concurrent.CountDownLatch
+import java.util.concurrent.TimeUnit
+import org.junit.Before
+import org.junit.Rule
+import org.junit.Test
+import org.mockito.kotlin.spy
+
+private val ContainerSize = 400.dp
+private val ParentSize = 150.dp
+private val ChildSize = 50.dp
+
+private val HalfContainerSize = ContainerSize / 2
+private val HalfParentSize = ParentSize / 2
+private val HalfChildSize = ChildSize / 2
+
+class DragAndDropNodeTest {
+
+    @Suppress("DEPRECATION")
+    @get:Rule
+    val rule = androidx.test.rule.ActivityTestRule(
+        TestActivity::class.java
+    )
+
+    private lateinit var container: OpenComposeView
+
+    private lateinit var acceptingTopStartDropTarget: DropTargetModifierHolder
+    private lateinit var acceptingTopEndDropTarget: DropTargetModifierHolder
+    private lateinit var acceptingParentBottomStartDropTarget: DropTargetModifierHolder
+    private lateinit var acceptingInnerBottomStartDropTarget: DropTargetModifierHolder
+    private lateinit var rejectingParentBottomEndDropTarget: DropTargetModifierHolder
+    private lateinit var acceptingInnerBottomEndDropTarget: DropTargetModifierHolder
+    private lateinit var acceptingOffsetInnerBottomStartDropTarget: DropTargetModifierHolder
+
+    private lateinit var density: Density
+
+    /**
+     * Sets up a grid of drop targets resembling the following for testing:
+     *
+     *    accepts                 accepts
+     * ┌───────────┐           ┌───────────┐
+     * │           │           │           │
+     * │           │           │           │
+     * │           │           │           │
+     * └───────────┘           └───────────┘
+     *
+     *    accepts                 rejects
+     * ┌───────────┐  accepts  ┌───────────┐
+     * │  accepts  │  ┌─────┐  │  accepts  │
+     * │─────┐     │  │     │  │     ┌─────│
+     * │     │     │  └─────┘  │     │     │
+     * └─────┘─────┘           └─────└─────┘
+     *
+     * parent <------> child
+     *         offset
+     */
+    @Before
+    fun setup() {
+        val activity = rule.activity
+        container = spy(OpenComposeView(activity))
+
+        acceptingTopStartDropTarget = DropTargetModifierHolder(
+            acceptsDragAndDrop = { true }
+        )
+        acceptingTopEndDropTarget = DropTargetModifierHolder(
+            acceptsDragAndDrop = { true }
+        )
+        acceptingParentBottomStartDropTarget = DropTargetModifierHolder(
+            acceptsDragAndDrop = { true }
+        )
+        acceptingInnerBottomStartDropTarget = DropTargetModifierHolder(
+            acceptsDragAndDrop = { true }
+        )
+        rejectingParentBottomEndDropTarget = DropTargetModifierHolder(
+            acceptsDragAndDrop = { false }
+        )
+        acceptingInnerBottomEndDropTarget = DropTargetModifierHolder(
+            acceptsDragAndDrop = { true }
+        )
+        acceptingOffsetInnerBottomStartDropTarget = DropTargetModifierHolder(
+            acceptsDragAndDrop = { true }
+        )
+
+        rule.runOnUiThread {
+            activity.setContentView(
+                container,
+                ViewGroup.LayoutParams(
+                    ViewGroup.LayoutParams.WRAP_CONTENT,
+                    ViewGroup.LayoutParams.WRAP_CONTENT
+                )
+            )
+        }
+        countDown(from = 1) { latch ->
+            rule.runOnUiThread {
+                container.setContent {
+                    density = LocalDensity.current
+                    Box(
+                        modifier = Modifier
+                            .requiredSize(ContainerSize)
+                            .onGloballyPositioned { latch.countDown() }
+
+                    ) {
+                        Box(
+                            modifier = Modifier
+                                .requiredSize(ParentSize)
+                                .align(Alignment.TopStart)
+                                .testDropTarget(acceptingTopStartDropTarget)
+                        )
+                        Box(
+                            modifier = Modifier
+                                .requiredSize(ParentSize)
+                                .align(Alignment.TopEnd)
+                                .testDropTarget(acceptingTopEndDropTarget)
+                        )
+                        Box(
+                            modifier = Modifier
+                                .requiredSize(ParentSize)
+                                .align(Alignment.BottomStart)
+                                .testDropTarget(acceptingParentBottomStartDropTarget)
+                        ) {
+                            Box(
+                                modifier = Modifier
+                                    .requiredSize(ChildSize)
+                                    .align(Alignment.BottomStart)
+                                    .testDropTarget(acceptingInnerBottomStartDropTarget)
+                            )
+                            Box(
+                                modifier = Modifier
+                                    .offset(
+                                        x = HalfContainerSize - HalfChildSize,
+                                        y = (HalfParentSize - HalfChildSize)
+                                    )
+                                    .requiredSize(ChildSize)
+                                    .testDropTarget(acceptingOffsetInnerBottomStartDropTarget)
+                            )
+                        }
+                        Box(
+                            modifier = Modifier
+                                .requiredSize(ParentSize)
+                                .align(Alignment.BottomEnd)
+                                .testDropTarget(rejectingParentBottomEndDropTarget)
+                        ) {
+                            Box(
+                                modifier = Modifier
+                                    .requiredSize(ChildSize)
+                                    .align(Alignment.BottomEnd)
+                                    .testDropTarget(acceptingInnerBottomEndDropTarget)
+                            )
+                        }
+                    }
+                }
+            }
+        }
+    }
+
+    @Test
+    fun dispatchDragEvent_callsStartOnAllDragAndDropTargetsOn_ACTION_DRAG_STARTED() {
+        rule.runOnUiThread {
+            val dragEvent = DragEvent(
+                action = DragEvent.ACTION_DRAG_STARTED,
+                x = 0f,
+                y = 0f,
+            )
+
+            val androidComposeView = findAndroidComposeView(container)!!
+            // Act
+            val acceptedDrag = androidComposeView.dispatchDragEvent(dragEvent)
+
+            // Assertions
+            Truth.assertThat(acceptedDrag).isTrue()
+
+            // The following modifiers should have all seen the start event
+            Truth.assertThat(acceptingTopStartDropTarget.startOffsets.first())
+                .isEqualTo(dragEvent.offset())
+            Truth.assertThat(acceptingTopStartDropTarget.startOffsets.size)
+                .isEqualTo(1)
+
+            Truth.assertThat(acceptingTopEndDropTarget.startOffsets.first())
+                .isEqualTo(dragEvent.offset())
+            Truth.assertThat(acceptingTopEndDropTarget.startOffsets.size)
+                .isEqualTo(1)
+
+            Truth.assertThat(acceptingParentBottomStartDropTarget.startOffsets.first())
+                .isEqualTo(dragEvent.offset())
+            Truth.assertThat(acceptingParentBottomStartDropTarget.startOffsets.size)
+                .isEqualTo(1)
+
+            Truth.assertThat(acceptingInnerBottomStartDropTarget.startOffsets.first())
+                .isEqualTo(dragEvent.offset())
+            Truth.assertThat(acceptingInnerBottomStartDropTarget.startOffsets.size)
+                .isEqualTo(1)
+
+            Truth.assertThat(acceptingOffsetInnerBottomStartDropTarget.startOffsets.first())
+                .isEqualTo(dragEvent.offset())
+            Truth.assertThat(acceptingOffsetInnerBottomStartDropTarget.startOffsets.size)
+                .isEqualTo(1)
+
+            Truth.assertThat(acceptingInnerBottomEndDropTarget.startOffsets.first())
+                .isEqualTo(dragEvent.offset())
+            Truth.assertThat(acceptingInnerBottomEndDropTarget.startOffsets.size)
+                .isEqualTo(1)
+
+            // Rejected drag and drop, it should have no start offset
+            Truth.assertThat(rejectingParentBottomEndDropTarget.startOffsets.isEmpty())
+                .isEqualTo(true)
+        }
+    }
+
+    @Test
+    fun dispatchDragEvent_canEnterThenMoveWithinAndExitWhenDraggedAcross() {
+        rule.runOnUiThread {
+            val events = listOf(
+                // Start in the center
+                DragEvent(
+                    action = DragEvent.ACTION_DRAG_STARTED,
+                    x = with(density) { HalfContainerSize.toPx() },
+                    y = with(density) { HalfContainerSize.toPx() },
+                ),
+                // Move to the top start
+                DragEvent(
+                    action = DragEvent.ACTION_DRAG_LOCATION,
+                    x = 0f,
+                    y = 0f,
+                ),
+                // Move across the top start
+                DragEvent(
+                    action = DragEvent.ACTION_DRAG_LOCATION,
+                    x = with(density) { HalfParentSize.toPx() },
+                    y = 0f,
+                ),
+                // Exit the top start
+                DragEvent(
+                    action = DragEvent.ACTION_DRAG_LOCATION,
+                    x = with(density) { (ParentSize + ChildSize).toPx() },
+                    y = 0f,
+                )
+            )
+            val (initialEvent, moveStartEvent, moveEndEvent, exitEvent) = events
+
+            val androidComposeView = findAndroidComposeView(container)!!
+            events.forEach(androidComposeView::dispatchDragEvent)
+
+            // Assertions
+            Truth.assertThat(acceptingTopStartDropTarget.startOffsets.first())
+                .isEqualTo(initialEvent.offset())
+
+            // Enter at top start
+            Truth.assertThat(acceptingTopStartDropTarget.enterOffsets.first())
+                .isEqualTo(moveStartEvent.offset())
+
+            // Move across top start
+            Truth.assertThat(acceptingTopStartDropTarget.moveOffsets.first())
+                .isEqualTo(moveStartEvent.offset())
+            Truth.assertThat(acceptingTopStartDropTarget.moveOffsets[1])
+                .isEqualTo(moveEndEvent.offset())
+
+            // Exit top start
+            Truth.assertThat(acceptingTopStartDropTarget.exitOffsets.first())
+                .isEqualTo(exitEvent.offset())
+        }
+    }
+
+    @Test
+    fun dispatchDragEvent_ignoresRejectingParentDropTargetButReachesInnerChild() {
+        rule.runOnUiThread {
+            val events = listOf(
+                // Start in the center
+                DragEvent(
+                    action = DragEvent.ACTION_DRAG_STARTED,
+                    x = with(density) { HalfContainerSize.toPx() },
+                    y = with(density) { HalfContainerSize.toPx() },
+                ),
+                // Move into bottom end
+                DragEvent(
+                    action = DragEvent.ACTION_DRAG_LOCATION,
+                    x = with(density) { (ContainerSize - HalfChildSize).toPx() },
+                    y = with(density) { (ContainerSize - HalfChildSize).toPx() },
+                ),
+            )
+
+            val (initialEvent, moveEvent) = events
+
+            val androidComposeView = findAndroidComposeView(container)!!
+            events.forEach(androidComposeView::dispatchDragEvent)
+
+            // Rejecting parent should have seen no events
+            Truth.assertThat(rejectingParentBottomEndDropTarget.startOffsets.isEmpty())
+                .isEqualTo(true)
+
+            Truth.assertThat(rejectingParentBottomEndDropTarget.enterOffsets.isEmpty())
+                .isEqualTo(true)
+
+            Truth.assertThat(rejectingParentBottomEndDropTarget.moveOffsets.isEmpty())
+                .isEqualTo(true)
+
+            Truth.assertThat(rejectingParentBottomEndDropTarget.exitOffsets.isEmpty())
+                .isEqualTo(true)
+
+            Truth.assertThat(rejectingParentBottomEndDropTarget.endedOffsets.isEmpty())
+                .isEqualTo(true)
+
+            // Inner offset child should have received events
+            Truth.assertThat(acceptingInnerBottomEndDropTarget.startOffsets.first())
+                .isEqualTo(initialEvent.offset())
+
+            Truth.assertThat(acceptingInnerBottomEndDropTarget.enterOffsets.first())
+                .isEqualTo(moveEvent.offset())
+        }
+    }
+
+    @Test
+    fun dispatchDragEvent_reachesInnerDropTargetOffsetOutsideImmediateParent() {
+        rule.runOnUiThread {
+            val events = listOf(
+                // Start in the center
+                DragEvent(
+                    action = DragEvent.ACTION_DRAG_STARTED,
+                    x = with(density) { HalfContainerSize.toPx() },
+                    y = with(density) { HalfContainerSize.toPx() },
+                ),
+                // Move into bottom center where offset child is
+                DragEvent(
+                    action = DragEvent.ACTION_DRAG_LOCATION,
+                    x = with(density) { HalfContainerSize.toPx() },
+                    y = with(density) { (ContainerSize - HalfParentSize).toPx() },
+                ),
+            )
+
+            val (initialEvent, moveEvent) = events
+
+            val androidComposeView = findAndroidComposeView(container)!!
+            events.forEach(androidComposeView::dispatchDragEvent)
+
+            // Assertions
+            Truth.assertThat(acceptingOffsetInnerBottomStartDropTarget.startOffsets.first())
+                .isEqualTo(initialEvent.offset())
+
+            // The Inner offset child should have seen the enter event
+            Truth.assertThat(acceptingOffsetInnerBottomStartDropTarget.enterOffsets.first())
+                .isEqualTo(moveEvent.offset())
+        }
+    }
+
+    @Test
+    fun dispatchDragEvent_canMoveBetweenTargets() {
+        rule.runOnUiThread {
+            val events = listOf(
+                // Start in the center
+                DragEvent(
+                    action = DragEvent.ACTION_DRAG_STARTED,
+                    x = with(density) { HalfContainerSize.toPx() },
+                    y = with(density) { HalfContainerSize.toPx() },
+                ),
+                // Move across the top start
+                DragEvent(
+                    action = DragEvent.ACTION_DRAG_LOCATION,
+                    x = 0f,
+                    y = 0f,
+                ),
+                // Exit the top start and into the top right
+                DragEvent(
+                    action = DragEvent.ACTION_DRAG_LOCATION,
+                    x = with(density) { ContainerSize.toPx() - ParentSize.toPx() },
+                    y = 0f,
+                )
+            )
+
+            val (initialEvent, farStartEvent, startToEndEvent) = events
+
+            val androidComposeView = findAndroidComposeView(container)!!
+            events.forEach(androidComposeView::dispatchDragEvent)
+
+            // Assertions
+            Truth.assertThat(acceptingTopStartDropTarget.startOffsets.first())
+                .isEqualTo(initialEvent.offset())
+
+            Truth.assertThat(acceptingTopEndDropTarget.startOffsets.first())
+                .isEqualTo(initialEvent.offset())
+
+            Truth.assertThat(acceptingTopStartDropTarget.enterOffsets.first())
+                .isEqualTo(farStartEvent.offset())
+
+            Truth.assertThat(acceptingTopStartDropTarget.exitOffsets.first())
+                .isEqualTo(startToEndEvent.offset())
+
+            Truth.assertThat(acceptingTopEndDropTarget.enterOffsets.first())
+                .isEqualTo(startToEndEvent.offset())
+        }
+    }
+
+    @Test
+    fun dispatchDragEvent_multicasts_ACTION_DRAG_ENDED() {
+        rule.runOnUiThread {
+            val events = listOf(
+                // Start in the center
+                DragEvent(
+                    action = DragEvent.ACTION_DRAG_STARTED,
+                    x = with(density) { HalfContainerSize.toPx() },
+                    y = with(density) { HalfContainerSize.toPx() },
+                ),
+                // End in the center
+                DragEvent(
+                    action = DragEvent.ACTION_DRAG_ENDED,
+                    x = with(density) { HalfContainerSize.toPx() },
+                    y = with(density) { HalfContainerSize.toPx() },
+                ),
+            )
+
+            val (initialEvent, endEvent) = events
+
+            val androidComposeView = findAndroidComposeView(container)!!
+            events.forEach(androidComposeView::dispatchDragEvent)
+
+            // The following modifiers should have all seen the start event
+            Truth.assertThat(acceptingTopStartDropTarget.startOffsets.first())
+                .isEqualTo(initialEvent.offset())
+            Truth.assertThat(acceptingTopStartDropTarget.endedOffsets.first())
+                .isEqualTo(endEvent.offset())
+            Truth.assertThat(acceptingTopStartDropTarget.startOffsets.size)
+                .isEqualTo(1)
+            Truth.assertThat(acceptingTopStartDropTarget.endedOffsets.size)
+                .isEqualTo(1)
+
+            Truth.assertThat(acceptingTopEndDropTarget.startOffsets.first())
+                .isEqualTo(initialEvent.offset())
+            Truth.assertThat(acceptingTopEndDropTarget.endedOffsets.first())
+                .isEqualTo(endEvent.offset())
+            Truth.assertThat(acceptingTopEndDropTarget.startOffsets.size)
+                .isEqualTo(1)
+            Truth.assertThat(acceptingTopEndDropTarget.endedOffsets.size)
+                .isEqualTo(1)
+
+            Truth.assertThat(acceptingParentBottomStartDropTarget.startOffsets.first())
+                .isEqualTo(initialEvent.offset())
+            Truth.assertThat(acceptingParentBottomStartDropTarget.endedOffsets.first())
+                .isEqualTo(endEvent.offset())
+            Truth.assertThat(acceptingParentBottomStartDropTarget.startOffsets.size)
+                .isEqualTo(1)
+            Truth.assertThat(acceptingParentBottomStartDropTarget.endedOffsets.size)
+                .isEqualTo(1)
+
+            Truth.assertThat(acceptingInnerBottomStartDropTarget.startOffsets.first())
+                .isEqualTo(initialEvent.offset())
+            Truth.assertThat(acceptingInnerBottomStartDropTarget.endedOffsets.first())
+                .isEqualTo(endEvent.offset())
+            Truth.assertThat(acceptingInnerBottomStartDropTarget.startOffsets.size)
+                .isEqualTo(1)
+            Truth.assertThat(acceptingInnerBottomStartDropTarget.endedOffsets.size)
+                .isEqualTo(1)
+
+            Truth.assertThat(acceptingOffsetInnerBottomStartDropTarget.startOffsets.first())
+                .isEqualTo(initialEvent.offset())
+            Truth.assertThat(acceptingOffsetInnerBottomStartDropTarget.endedOffsets.first())
+                .isEqualTo(endEvent.offset())
+            Truth.assertThat(acceptingOffsetInnerBottomStartDropTarget.startOffsets.size)
+                .isEqualTo(1)
+            Truth.assertThat(acceptingOffsetInnerBottomStartDropTarget.endedOffsets.size)
+                .isEqualTo(1)
+
+            Truth.assertThat(acceptingInnerBottomEndDropTarget.startOffsets.first())
+                .isEqualTo(initialEvent.offset())
+            Truth.assertThat(acceptingInnerBottomEndDropTarget.endedOffsets.first())
+                .isEqualTo(endEvent.offset())
+            Truth.assertThat(acceptingInnerBottomEndDropTarget.startOffsets.size)
+                .isEqualTo(1)
+            Truth.assertThat(acceptingInnerBottomEndDropTarget.endedOffsets.size)
+                .isEqualTo(1)
+
+            // Rejected drag and drop, it should have no start or end offset
+            Truth.assertThat(rejectingParentBottomEndDropTarget.startOffsets.isEmpty())
+                .isEqualTo(true)
+            Truth.assertThat(rejectingParentBottomEndDropTarget.endedOffsets.isEmpty())
+                .isEqualTo(true)
+        }
+    }
+
+    @Test
+    fun dispatchDragEvent_canEnterThenMoveWithinMultipleNodes() {
+        rule.runOnUiThread {
+            val events = listOf(
+                // Start in the center
+                DragEvent(
+                    action = DragEvent.ACTION_DRAG_STARTED,
+                    x = with(density) { HalfContainerSize.toPx() },
+                    y = with(density) { HalfContainerSize.toPx() },
+                ),
+                // Move into top start parent
+                DragEvent(
+                    action = DragEvent.ACTION_DRAG_LOCATION,
+                    x = with(density) { HalfChildSize.toPx() },
+                    y = with(density) { HalfChildSize.toPx() },
+                ),
+                // Move into bottom start parent
+                DragEvent(
+                    action = DragEvent.ACTION_DRAG_LOCATION,
+                    x = with(density) { HalfChildSize.toPx() },
+                    y = with(density) {
+                        (ContainerSize - ChildSize - HalfChildSize).toPx()
+                    },
+                ),
+                // Move into bottom start inner child
+                DragEvent(
+                    action = DragEvent.ACTION_DRAG_LOCATION,
+                    x = with(density) { HalfChildSize.toPx() },
+                    y = with(density) { (ContainerSize - HalfChildSize).toPx() },
+                ),
+                // Move into bottom offset inner child
+                DragEvent(
+                    action = DragEvent.ACTION_DRAG_LOCATION,
+                    x = with(density) { HalfContainerSize.toPx() },
+                    y = with(density) { (ContainerSize - HalfParentSize).toPx() },
+                )
+
+            )
+            val (
+                initialEvent,
+                topStartParentEvent,
+                bottomStartParentEvent,
+                bottomStartInnerChildEvent,
+                bottomInnerOffsetChildEvent,
+            ) = events
+
+            val androidComposeView = findAndroidComposeView(container)!!
+            events.forEach(androidComposeView::dispatchDragEvent)
+
+            // Assertions
+            Truth.assertThat(acceptingTopStartDropTarget.startOffsets.first())
+                .isEqualTo(initialEvent.offset())
+
+            // Enter at top start parent
+            Truth.assertThat(acceptingTopStartDropTarget.enterOffsets.first())
+                .isEqualTo(topStartParentEvent.offset())
+            Truth.assertThat(acceptingTopStartDropTarget.moveOffsets.first())
+                .isEqualTo(topStartParentEvent.offset())
+
+            // Enter at bottom start parent
+            Truth.assertThat(acceptingParentBottomStartDropTarget.enterOffsets.first())
+                .isEqualTo(bottomStartParentEvent.offset())
+            Truth.assertThat(acceptingParentBottomStartDropTarget.moveOffsets.first())
+                .isEqualTo(bottomStartParentEvent.offset())
+
+            // Enter at bottom start child
+            Truth.assertThat(acceptingInnerBottomStartDropTarget.enterOffsets.first())
+                .isEqualTo(bottomStartInnerChildEvent.offset())
+            Truth.assertThat(acceptingInnerBottomStartDropTarget.moveOffsets.first())
+                .isEqualTo(bottomStartInnerChildEvent.offset())
+
+            // Enter at bottom offset child
+            Truth.assertThat(acceptingOffsetInnerBottomStartDropTarget.enterOffsets.first())
+                .isEqualTo(bottomInnerOffsetChildEvent.offset())
+            Truth.assertThat(acceptingOffsetInnerBottomStartDropTarget.moveOffsets.first())
+                .isEqualTo(bottomInnerOffsetChildEvent.offset())
+        }
+    }
+
+    @Test
+    fun dispatchDragEvent_ignoresNodeThatWasInterestedAndNoLongerIs() {
+        // Create UI with node placed in top start of parent
+        var shouldRenderItem by mutableStateOf(true)
+        val dropTargetHolder = DropTargetModifierHolder(
+            acceptsDragAndDrop = { shouldRenderItem }
+        )
+
+        // Set up UI
+        countDown(from = 1) { latch ->
+            rule.runOnUiThread {
+                container.setContent {
+                    density = LocalDensity.current
+                    Box(
+                        modifier = Modifier
+                            .requiredSize(ContainerSize)
+                            .testDropTarget(dropTargetHolder)
+                            .onGloballyPositioned { latch.countDown() }
+                    )
+                }
+            }
+        }
+
+        val acceptingStartEvent = DragEvent(
+            action = DragEvent.ACTION_DRAG_STARTED,
+            x = with(density) { HalfContainerSize.toPx() },
+            y = with(density) { HalfContainerSize.toPx() },
+        )
+        val acceptingEndEvent = DragEvent(
+            action = DragEvent.ACTION_DRAG_ENDED,
+            x = with(density) { ParentSize.toPx() },
+            y = with(density) { ParentSize.toPx() },
+        )
+        val rejectingStartEvent = DragEvent(
+            action = DragEvent.ACTION_DRAG_STARTED,
+            x = with(density) { HalfParentSize.toPx() },
+            y = with(density) { HalfParentSize.toPx() },
+        )
+        val rejectingEndEvent = DragEvent(
+            action = DragEvent.ACTION_DRAG_ENDED,
+            x = with(density) { ChildSize.toPx() },
+            y = with(density) { ChildSize.toPx() },
+        )
+
+        rule.runOnUiThread {
+            val androidComposeView = findAndroidComposeView(container)!!
+
+            // Dispatch accepting start and end
+            androidComposeView.dispatchDragEvent(acceptingStartEvent)
+            androidComposeView.dispatchDragEvent(acceptingEndEvent)
+
+            // Reject events
+            shouldRenderItem = false
+
+            // Dispatch rejecting start and end
+            androidComposeView.dispatchDragEvent(rejectingStartEvent)
+            androidComposeView.dispatchDragEvent(rejectingEndEvent)
+
+            // Assert accepting start and end were seen
+            Truth.assertThat(dropTargetHolder.startOffsets.first())
+                .isEqualTo(acceptingStartEvent.offset())
+            Truth.assertThat(dropTargetHolder.endedOffsets.first())
+                .isEqualTo(acceptingEndEvent.offset())
+
+            // Assert only accepting start and end were seen
+            Truth.assertThat(dropTargetHolder.startOffsets.size)
+                .isEqualTo(1)
+            Truth.assertThat(dropTargetHolder.endedOffsets.size)
+                .isEqualTo(1)
+        }
+    }
+
+    @Test
+    fun dispatchDragEvent_canReactToNodeMoves() {
+        //     start                  end
+        // ┌─────┐─────┐         ┌─────┐─────┐
+        // │     │     │         │     │     │
+        // └─────┘     │   --->  │     └─────┘
+        // │           │         │           │
+        // └───────────┘         └───────────┘
+
+        val androidComposeView = findAndroidComposeView(container)!!
+        var itemOffset by mutableStateOf(IntOffset.Zero)
+        val dropTargetHolder = DropTargetModifierHolder(
+            acceptsDragAndDrop = { true }
+        )
+
+        // At the center
+        val initialEvent = DragEvent(
+            action = DragEvent.ACTION_DRAG_STARTED,
+            x = with(density) { HalfContainerSize.toPx() },
+            y = with(density) { HalfContainerSize.toPx() },
+        )
+        // Close to top start
+        val eventWhereItemWas = DragEvent(
+            action = DragEvent.ACTION_DRAG_LOCATION,
+            x = with(density) { HalfParentSize.toPx() },
+            y = with(density) { HalfParentSize.toPx() },
+        )
+        // Close to top start
+        val eventWhereItemUsedToBe = DragEvent(
+            action = DragEvent.ACTION_DRAG_LOCATION,
+            x = with(density) { HalfChildSize.toPx() },
+            y = with(density) { HalfChildSize.toPx() },
+        )
+        // Close to bottom end
+        val eventWhereItemIs = DragEvent(
+            action = DragEvent.ACTION_DRAG_LOCATION,
+            x = with(density) { (ContainerSize - HalfParentSize).toPx() },
+            y = with(density) { (ContainerSize - HalfParentSize).toPx() },
+        )
+
+        // Set up UI
+        countDown(from = 2) { latch ->
+            rule.runOnUiThread {
+                // Create UI with node placed in top start of parent
+                container.setContent {
+                    density = LocalDensity.current
+                    Box(
+                        modifier = Modifier
+                            .requiredSize(ContainerSize)
+                            .onGloballyPositioned {
+                                // Start in the center
+                                androidComposeView.dispatchDragEvent(initialEvent)
+                                // Move into item
+                                androidComposeView.dispatchDragEvent(eventWhereItemWas)
+
+                                // Move item to bottom end
+                                itemOffset = IntOffset(
+                                    x = with(density) { (ContainerSize - ParentSize).roundToPx() },
+                                    y = with(density) { (ContainerSize - ParentSize).roundToPx() },
+                                )
+                            }
+
+                    ) {
+                        Box(
+                            modifier = Modifier
+                                .offset { itemOffset }
+                                .requiredSize(ParentSize)
+                                .align(Alignment.TopStart)
+                                .testDropTarget(dropTargetHolder)
+                                .onGloballyPositioned { coordinates ->
+                                    // Item has been moved
+                                    if (coordinates.positionInParent() != Offset.Zero) {
+                                        // Move where item used to be
+                                        androidComposeView.dispatchDragEvent(eventWhereItemUsedToBe)
+
+                                        // Move where item now is
+                                        androidComposeView.dispatchDragEvent(eventWhereItemIs)
+                                    }
+                                    latch.countDown()
+                                }
+                        )
+                    }
+                }
+            }
+        }
+
+        // Assertions
+        Truth.assertThat(dropTargetHolder.startOffsets.first())
+            .isEqualTo(initialEvent.offset())
+
+        // Enter at top start parent
+        Truth.assertThat(dropTargetHolder.enterOffsets.first())
+            .isEqualTo(eventWhereItemWas.offset())
+        Truth.assertThat(dropTargetHolder.moveOffsets.first())
+            .isEqualTo(eventWhereItemWas.offset())
+
+        // The next event seen in the item should be the one that entered after being moved
+        Truth.assertThat(dropTargetHolder.enterOffsets[1])
+            .isEqualTo(eventWhereItemIs.offset())
+        Truth.assertThat(dropTargetHolder.moveOffsets[1])
+            .isEqualTo(eventWhereItemIs.offset())
+
+        // The event where the item used to be should never have been seen by the item
+        Truth.assertThat(
+            dropTargetHolder.enterOffsets.none { offset ->
+                offset == eventWhereItemUsedToBe.offset()
+            }
+        )
+            .isTrue()
+        Truth.assertThat(
+            dropTargetHolder.moveOffsets.none { offset ->
+                offset == eventWhereItemUsedToBe.offset()
+            }
+        )
+            .isTrue()
+    }
+}
+
+/**
+ * Creates a [DragEvent] with the specified coordinates
+ */
+private fun DragEvent(action: Int, x: Float, y: Float): DragEvent {
+    val parcel = Parcel.obtain()
+    parcel.writeInt(action)
+    parcel.writeFloat(x)
+    parcel.writeFloat(y)
+    parcel.writeInt(0) // Result
+    parcel.writeInt(0) // No ClipData
+    parcel.writeInt(0) // No Clip Description
+
+    parcel.setDataPosition(0)
+    return DragEvent.CREATOR.createFromParcel(parcel)
+}
+
+private fun DragEvent.offset() = Offset(
+    x = x,
+    y = y
+)
+
+private fun countDown(from: Int, block: (CountDownLatch) -> Unit) {
+    val countDownLatch = CountDownLatch(from)
+    block(countDownLatch)
+    Truth.assertThat(countDownLatch.await(1, TimeUnit.SECONDS)).isTrue()
+}
+
+private fun Modifier.testDropTarget(holder: DropTargetModifierHolder) = this then holder.modifier
+private class DropTargetModifierHolder(
+    private val acceptsDragAndDrop: () -> Boolean
+) {
+    val startOffsets = mutableListOf<Offset>()
+    val enterOffsets = mutableListOf<Offset>()
+    val moveOffsets = mutableListOf<Offset>()
+    val dropOffsets = mutableListOf<Offset>()
+    val exitOffsets = mutableListOf<Offset>()
+    val endedOffsets = mutableListOf<Offset>()
+
+    @OptIn(ExperimentalFoundationApi::class)
+    val modifier = Modifier.dragAndDropTarget(
+        onStarted = {
+            val accepts = acceptsDragAndDrop()
+            if (accepts) startOffsets.add(
+                Offset(x = it.dragEvent.x, y = it.dragEvent.y)
+            )
+            accepts
+        },
+        onEntered = {
+            enterOffsets.add(
+                Offset(x = it.dragEvent.x, y = it.dragEvent.y)
+            )
+        },
+        onMoved = {
+            moveOffsets.add(
+                Offset(x = it.dragEvent.x, y = it.dragEvent.y)
+            )
+        },
+        onDropped = {
+            dropOffsets.add(
+                Offset(x = it.dragEvent.x, y = it.dragEvent.y)
+            )
+            true
+        },
+        onExited = {
+            exitOffsets.add(
+                Offset(x = it.dragEvent.x, y = it.dragEvent.y)
+            )
+        },
+        onEnded = {
+            endedOffsets.add(
+                Offset(x = it.dragEvent.x, y = it.dragEvent.y)
+            )
+        }
+    )
+}
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/androidInstrumentedTest/kotlin/androidx/compose/ui/input/pointer/HitPathTrackerTest.kt b/compose/ui/ui/src/androidInstrumentedTest/kotlin/androidx/compose/ui/input/pointer/HitPathTrackerTest.kt
index a367f75..19a8565 100644
--- a/compose/ui/ui/src/androidInstrumentedTest/kotlin/androidx/compose/ui/input/pointer/HitPathTrackerTest.kt
+++ b/compose/ui/ui/src/androidInstrumentedTest/kotlin/androidx/compose/ui/input/pointer/HitPathTrackerTest.kt
@@ -29,12 +29,8 @@
 import androidx.compose.ui.geometry.Offset
 import androidx.compose.ui.geometry.Rect
 import androidx.compose.ui.graphics.Canvas
-import androidx.compose.ui.graphics.Color
-import androidx.compose.ui.graphics.CompositingStrategy
 import androidx.compose.ui.graphics.Matrix
-import androidx.compose.ui.graphics.RenderEffect
-import androidx.compose.ui.graphics.Shape
-import androidx.compose.ui.graphics.TransformOrigin
+import androidx.compose.ui.graphics.ReusableGraphicsLayerScope
 import androidx.compose.ui.hapticfeedback.HapticFeedback
 import androidx.compose.ui.input.InputModeManager
 import androidx.compose.ui.input.key.KeyEvent
@@ -3752,23 +3748,7 @@
     ): OwnedLayer {
         return object : OwnedLayer {
             override fun updateLayerProperties(
-                scaleX: Float,
-                scaleY: Float,
-                alpha: Float,
-                translationX: Float,
-                translationY: Float,
-                shadowElevation: Float,
-                rotationX: Float,
-                rotationY: Float,
-                rotationZ: Float,
-                cameraDistance: Float,
-                transformOrigin: TransformOrigin,
-                shape: Shape,
-                clip: Boolean,
-                renderEffect: RenderEffect?,
-                ambientShadowColor: Color,
-                spotShadowColor: Color,
-                compositingStrategy: CompositingStrategy,
+                scope: ReusableGraphicsLayerScope,
                 layoutDirection: LayoutDirection,
                 density: Density
             ) {
diff --git a/compose/ui/ui/src/androidInstrumentedTest/kotlin/androidx/compose/ui/layout/Helpers.kt b/compose/ui/ui/src/androidInstrumentedTest/kotlin/androidx/compose/ui/layout/Helpers.kt
index a7a3aa9..7187d69 100644
--- a/compose/ui/ui/src/androidInstrumentedTest/kotlin/androidx/compose/ui/layout/Helpers.kt
+++ b/compose/ui/ui/src/androidInstrumentedTest/kotlin/androidx/compose/ui/layout/Helpers.kt
@@ -24,12 +24,8 @@
 import androidx.compose.ui.geometry.MutableRect
 import androidx.compose.ui.geometry.Offset
 import androidx.compose.ui.graphics.Canvas
-import androidx.compose.ui.graphics.Color
-import androidx.compose.ui.graphics.CompositingStrategy
 import androidx.compose.ui.graphics.Matrix
-import androidx.compose.ui.graphics.RenderEffect
-import androidx.compose.ui.graphics.Shape
-import androidx.compose.ui.graphics.TransformOrigin
+import androidx.compose.ui.graphics.ReusableGraphicsLayerScope
 import androidx.compose.ui.hapticfeedback.HapticFeedback
 import androidx.compose.ui.input.InputModeManager
 import androidx.compose.ui.input.key.KeyEvent
@@ -543,23 +539,7 @@
 internal open class MockLayer() : OwnedLayer {
 
     override fun updateLayerProperties(
-        scaleX: Float,
-        scaleY: Float,
-        alpha: Float,
-        translationX: Float,
-        translationY: Float,
-        shadowElevation: Float,
-        rotationX: Float,
-        rotationY: Float,
-        rotationZ: Float,
-        cameraDistance: Float,
-        transformOrigin: TransformOrigin,
-        shape: Shape,
-        clip: Boolean,
-        renderEffect: RenderEffect?,
-        ambientShadowColor: Color,
-        spotShadowColor: Color,
-        compositingStrategy: CompositingStrategy,
+        scope: ReusableGraphicsLayerScope,
         layoutDirection: LayoutDirection,
         density: Density
     ) {
diff --git a/compose/ui/ui/src/androidInstrumentedTest/kotlin/androidx/compose/ui/node/NodeUtils.kt b/compose/ui/ui/src/androidInstrumentedTest/kotlin/androidx/compose/ui/node/NodeUtils.kt
index b23f263..bec5a59 100644
--- a/compose/ui/ui/src/androidInstrumentedTest/kotlin/androidx/compose/ui/node/NodeUtils.kt
+++ b/compose/ui/ui/src/androidInstrumentedTest/kotlin/androidx/compose/ui/node/NodeUtils.kt
@@ -21,9 +21,10 @@
 
 /**
  * Remove the root modifier nodes as they are not relevant from the perspective of the tests.
- * There are 4 nodes: KeyInputNode, FocusTargetNode, RotaryInputNode and SemanticsNode.
+ * There are 5 nodes:
+ * KeyInputNode, FocusTargetNode, RotaryInputNode, SemanticsNode and DragAndDropNode.
  */
-internal fun <T> List<T>.trimRootModifierNodes(): List<T> = dropLast(4)
+internal fun <T> List<T>.trimRootModifierNodes(): List<T> = dropLast(5)
 
 internal fun Modifier.elementOf(node: Modifier.Node): Modifier {
     return this.then(ElementOf { node })
diff --git a/compose/ui/ui/src/androidMain/kotlin/androidx/compose/ui/draganddrop/ComposeDragShadowBuilder.kt b/compose/ui/ui/src/androidMain/kotlin/androidx/compose/ui/draganddrop/ComposeDragShadowBuilder.kt
index f0ebab1..b8c1b0b 100644
--- a/compose/ui/ui/src/androidMain/kotlin/androidx/compose/ui/draganddrop/ComposeDragShadowBuilder.kt
+++ b/compose/ui/ui/src/androidMain/kotlin/androidx/compose/ui/draganddrop/ComposeDragShadowBuilder.kt
@@ -21,14 +21,12 @@
 import android.view.View
 import androidx.compose.ui.graphics.Canvas
 import androidx.compose.ui.graphics.drawscope.CanvasDrawScope
-import androidx.compose.ui.graphics.painter.Painter
 import androidx.compose.ui.unit.Density
 import androidx.compose.ui.unit.LayoutDirection
 
 /**
- * Draws a drag shadow for a [View.DragShadowBuilder] with a [Painter].
- * If there is no painter provided in [dragAndDropInfo], it will attempt to create a default by trying to
- * copy pixels in the rect bounded by the dragged item.
+ * Draws a drag shadow for a [View.DragShadowBuilder] with the DrawScope lambda
+ * provided by [DragAndDropInfo.onDrawDragShadow].
  */
 internal class ComposeDragShadowBuilder(
     private val density: Density,
diff --git a/compose/ui/ui/src/androidMain/kotlin/androidx/compose/ui/draganddrop/DragAndDrop.android.kt b/compose/ui/ui/src/androidMain/kotlin/androidx/compose/ui/draganddrop/DragAndDrop.android.kt
index dfe7d4e..38265fe 100644
--- a/compose/ui/ui/src/androidMain/kotlin/androidx/compose/ui/draganddrop/DragAndDrop.android.kt
+++ b/compose/ui/ui/src/androidMain/kotlin/androidx/compose/ui/draganddrop/DragAndDrop.android.kt
@@ -19,6 +19,7 @@
 import android.content.ClipData
 import android.view.DragEvent
 import android.view.View
+import androidx.collection.ArraySet
 import androidx.compose.ui.geometry.Offset
 
 /**
@@ -46,17 +47,27 @@
  * Android [DragAndDropEvent] which delegates to a [DragEvent]
  */
 actual class DragAndDropEvent(
-    /**
-     * An indication of the reason the drag and drop event was sent
-     */
-    actual var type: DragAndDropEventType,
-    internal var dragEvent: DragEvent
+    internal val dragEvent: DragEvent,
+    internal actual val interestedNodes: ArraySet<DragAndDropModifierNode> = ArraySet()
 )
 
 /**
  * Returns the backing [DragEvent] to read platform specific data
  */
-val DragAndDropEvent.dragEvent get() = this.dragEvent
+val DragAndDropEvent.dragEvent: DragEvent get() = this.dragEvent
+
+/**
+ * The mime types present in a [DragAndDropEvent]
+ */
+// TODO (TJ) make this expect/actual when desktop implements
+fun DragAndDropEvent.mimeTypes(): Set<String> {
+    val clipDescription = dragEvent.clipDescription ?: return emptySet()
+    return buildSet(clipDescription.mimeTypeCount) {
+        for (i in 0 until clipDescription.mimeTypeCount) {
+            add(clipDescription.getMimeType(i))
+        }
+    }
+}
 
 internal actual val DragAndDropEvent.positionInRoot: Offset
     get() = Offset(
diff --git a/compose/ui/ui/src/androidMain/kotlin/androidx/compose/ui/platform/AndroidComposeView.android.kt b/compose/ui/ui/src/androidMain/kotlin/androidx/compose/ui/platform/AndroidComposeView.android.kt
index 5859ede..0b9ce6d 100644
--- a/compose/ui/ui/src/androidMain/kotlin/androidx/compose/ui/platform/AndroidComposeView.android.kt
+++ b/compose/ui/ui/src/androidMain/kotlin/androidx/compose/ui/platform/AndroidComposeView.android.kt
@@ -26,6 +26,7 @@
 import android.util.Log
 import android.util.LongSparseArray
 import android.util.SparseArray
+import android.view.DragEvent
 import android.view.KeyEvent as AndroidKeyEvent
 import android.view.MotionEvent
 import android.view.MotionEvent.ACTION_CANCEL
@@ -54,6 +55,7 @@
 import androidx.annotation.DoNotInline
 import androidx.annotation.RequiresApi
 import androidx.annotation.VisibleForTesting
+import androidx.collection.ArraySet
 import androidx.compose.runtime.collection.mutableVectorOf
 import androidx.compose.runtime.derivedStateOf
 import androidx.compose.runtime.getValue
@@ -71,7 +73,11 @@
 import androidx.compose.ui.autofill.performAutofill
 import androidx.compose.ui.autofill.populateViewStructure
 import androidx.compose.ui.draganddrop.ComposeDragShadowBuilder
+import androidx.compose.ui.draganddrop.DragAndDropEvent
+import androidx.compose.ui.draganddrop.DragAndDropEventType
 import androidx.compose.ui.draganddrop.DragAndDropInfo
+import androidx.compose.ui.draganddrop.DragAndDropModifierNode
+import androidx.compose.ui.draganddrop.DragAndDropNode
 import androidx.compose.ui.focus.FocusDirection
 import androidx.compose.ui.focus.FocusDirection.Companion.Down
 import androidx.compose.ui.focus.FocusDirection.Companion.Exit
@@ -129,6 +135,7 @@
 import androidx.compose.ui.node.LayoutNode.UsageByParent
 import androidx.compose.ui.node.LayoutNodeDrawScope
 import androidx.compose.ui.node.MeasureAndLayoutDelegate
+import androidx.compose.ui.node.ModifierNodeElement
 import androidx.compose.ui.node.Nodes
 import androidx.compose.ui.node.OwnedLayer
 import androidx.compose.ui.node.Owner
@@ -230,6 +237,8 @@
         false
     }
 
+    private val dragAndDropModifierOnDragListener = DragAndDropModifierOnDragListener()
+
     private val canvasHolder = CanvasHolder()
 
     override val root = LayoutNode().also {
@@ -241,6 +250,7 @@
             .then(rotaryInputModifier)
             .then(focusOwner.modifier)
             .then(keyInputModifier)
+            .then(dragAndDropModifierOnDragListener.modifier)
     }
 
     override val rootForTest: RootForTest = this
@@ -601,6 +611,7 @@
         clipChildren = false
         ViewCompat.setAccessibilityDelegate(this, accessibilityDelegate)
         ViewRootForTest.onViewCreatedCallback?.invoke(this)
+        setOnDragListener(dragAndDropModifierOnDragListener)
         root.attach(this)
         if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) {
             // Support for this feature in Compose is tracked here: b/207654434
@@ -2211,3 +2222,54 @@
         dragAndDropInfo.transfer.flags,
     )
 }
+
+/**
+ * A Class that provides access [View.OnDragListener] APIs for a [DragAndDropNode].
+ */
+private class DragAndDropModifierOnDragListener : View.OnDragListener {
+
+    private val rootDragAndDropNode = DragAndDropNode { null }
+    // TODO (TJ): Move this into the Owner
+    private val interestedNodes = ArraySet<DragAndDropModifierNode>()
+
+    val modifier: Modifier = object : ModifierNodeElement<DragAndDropNode>() {
+        override fun create() = rootDragAndDropNode
+
+        override fun update(node: DragAndDropNode) = Unit
+
+        override fun InspectorInfo.inspectableProperties() {
+            name = "RootDragAndDropNode"
+        }
+
+        override fun hashCode(): Int = rootDragAndDropNode.hashCode()
+
+        override fun equals(other: Any?) = other === this
+    }
+
+    override fun onDrag(
+        view: View,
+        event: DragEvent
+    ): Boolean = rootDragAndDropNode.onDragAndDropEvent(
+        event = DragAndDropEvent(
+            dragEvent = event,
+            interestedNodes = interestedNodes
+        ),
+        type = when (event.action) {
+            DragEvent.ACTION_DRAG_STARTED -> DragAndDropEventType.Started
+
+            DragEvent.ACTION_DRAG_ENTERED -> DragAndDropEventType.Entered
+
+            DragEvent.ACTION_DRAG_LOCATION -> DragAndDropEventType.Moved
+
+            DragEvent.ACTION_DRAG_EXITED -> DragAndDropEventType.Exited
+
+            DragEvent.ACTION_DROP -> DragAndDropEventType.Dropped
+
+            DragEvent.ACTION_DRAG_ENDED -> DragAndDropEventType.Ended.also {
+                interestedNodes.clear()
+            }
+
+            else -> DragAndDropEventType.Unknown
+        }
+    )
+}
diff --git a/compose/ui/ui/src/androidMain/kotlin/androidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat.android.kt b/compose/ui/ui/src/androidMain/kotlin/androidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat.android.kt
index 3646246..2988fc8 100644
--- a/compose/ui/ui/src/androidMain/kotlin/androidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat.android.kt
+++ b/compose/ui/ui/src/androidMain/kotlin/androidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat.android.kt
@@ -436,7 +436,14 @@
         vertical: Boolean,
         direction: Int,
         position: Offset
-    ): Boolean = canScroll(currentSemanticsNodes.values, vertical, direction, position)
+    ): Boolean {
+        // Workaround for access from bg thread, it is not supported by semantics (b/298159434)
+        if (Looper.getMainLooper().thread != Thread.currentThread()) {
+            return false
+        }
+
+        return canScroll(currentSemanticsNodes.values, vertical, direction, position)
+    }
 
     @VisibleForTesting
     internal fun canScroll(
diff --git a/compose/ui/ui/src/androidMain/kotlin/androidx/compose/ui/platform/RenderNodeLayer.android.kt b/compose/ui/ui/src/androidMain/kotlin/androidx/compose/ui/platform/RenderNodeLayer.android.kt
index 2476012..3f3987c 100644
--- a/compose/ui/ui/src/androidMain/kotlin/androidx/compose/ui/platform/RenderNodeLayer.android.kt
+++ b/compose/ui/ui/src/androidMain/kotlin/androidx/compose/ui/platform/RenderNodeLayer.android.kt
@@ -24,13 +24,11 @@
 import androidx.compose.ui.geometry.Size
 import androidx.compose.ui.graphics.Canvas
 import androidx.compose.ui.graphics.CanvasHolder
-import androidx.compose.ui.graphics.Color
-import androidx.compose.ui.graphics.CompositingStrategy
+import androidx.compose.ui.graphics.Fields
 import androidx.compose.ui.graphics.Matrix
 import androidx.compose.ui.graphics.Paint
 import androidx.compose.ui.graphics.RectangleShape
-import androidx.compose.ui.graphics.RenderEffect
-import androidx.compose.ui.graphics.Shape
+import androidx.compose.ui.graphics.ReusableGraphicsLayerScope
 import androidx.compose.ui.graphics.TransformOrigin
 import androidx.compose.ui.graphics.nativeCanvas
 import androidx.compose.ui.graphics.toArgb
@@ -107,57 +105,83 @@
         fun getUniqueDrawingId(view: View) = view.uniqueDrawingId
     }
 
+    private var mutatedFields: Int = 0
+
     override fun updateLayerProperties(
-        scaleX: Float,
-        scaleY: Float,
-        alpha: Float,
-        translationX: Float,
-        translationY: Float,
-        shadowElevation: Float,
-        rotationX: Float,
-        rotationY: Float,
-        rotationZ: Float,
-        cameraDistance: Float,
-        transformOrigin: TransformOrigin,
-        shape: Shape,
-        clip: Boolean,
-        renderEffect: RenderEffect?,
-        ambientShadowColor: Color,
-        spotShadowColor: Color,
-        compositingStrategy: CompositingStrategy,
+        scope: ReusableGraphicsLayerScope,
         layoutDirection: LayoutDirection,
-        density: Density
+        density: Density,
     ) {
-        this.transformOrigin = transformOrigin
+        val maybeChangedFields = scope.mutatedFields or mutatedFields
+        if (maybeChangedFields and Fields.TransformOrigin != 0) {
+            this.transformOrigin = scope.transformOrigin
+        }
         val wasClippingManually = renderNode.clipToOutline && !outlineResolver.outlineClipSupported
-        renderNode.scaleX = scaleX
-        renderNode.scaleY = scaleY
-        renderNode.alpha = alpha
-        renderNode.translationX = translationX
-        renderNode.translationY = translationY
-        renderNode.elevation = shadowElevation
-        renderNode.ambientShadowColor = ambientShadowColor.toArgb()
-        renderNode.spotShadowColor = spotShadowColor.toArgb()
-        renderNode.rotationZ = rotationZ
-        renderNode.rotationX = rotationX
-        renderNode.rotationY = rotationY
-        renderNode.cameraDistance = cameraDistance
-        renderNode.pivotX = transformOrigin.pivotFractionX * renderNode.width
-        renderNode.pivotY = transformOrigin.pivotFractionY * renderNode.height
-        renderNode.clipToOutline = clip && shape !== RectangleShape
-        renderNode.clipToBounds = clip && shape === RectangleShape
-        renderNode.renderEffect = renderEffect
-        renderNode.compositingStrategy = compositingStrategy
-        val shapeChanged = outlineResolver.update(
-            shape,
-            renderNode.alpha,
-            renderNode.clipToOutline,
-            renderNode.elevation,
-            layoutDirection,
-            density
-        )
-        renderNode.setOutline(outlineResolver.outline)
-        val isClippingManually = renderNode.clipToOutline && !outlineResolver.outlineClipSupported
+        if (maybeChangedFields and Fields.ScaleX != 0) {
+            renderNode.scaleX = scope.scaleX
+        }
+        if (maybeChangedFields and Fields.ScaleY != 0) {
+            renderNode.scaleY = scope.scaleY
+        }
+        if (maybeChangedFields and Fields.Alpha != 0) {
+            renderNode.alpha = scope.alpha
+        }
+        if (maybeChangedFields and Fields.TranslationX != 0) {
+            renderNode.translationX = scope.translationX
+        }
+        if (maybeChangedFields and Fields.TranslationY != 0) {
+            renderNode.translationY = scope.translationY
+        }
+        if (maybeChangedFields and Fields.ShadowElevation != 0) {
+            renderNode.elevation = scope.shadowElevation
+        }
+        if (maybeChangedFields and Fields.AmbientShadowColor != 0) {
+            renderNode.ambientShadowColor = scope.ambientShadowColor.toArgb()
+        }
+        if (maybeChangedFields and Fields.SpotShadowColor != 0) {
+            renderNode.spotShadowColor = scope.spotShadowColor.toArgb()
+        }
+        if (maybeChangedFields and Fields.RotationZ != 0) {
+            renderNode.rotationZ = scope.rotationZ
+        }
+        if (maybeChangedFields and Fields.RotationX != 0) {
+            renderNode.rotationX = scope.rotationX
+        }
+        if (maybeChangedFields and Fields.RotationY != 0) {
+            renderNode.rotationY = scope.rotationY
+        }
+        if (maybeChangedFields and Fields.CameraDistance != 0) {
+            renderNode.cameraDistance = scope.cameraDistance
+        }
+        if (maybeChangedFields and Fields.TransformOrigin != 0) {
+            renderNode.pivotX = transformOrigin.pivotFractionX * renderNode.width
+            renderNode.pivotY = transformOrigin.pivotFractionY * renderNode.height
+        }
+        val clipToOutline = scope.clip && scope.shape !== RectangleShape
+        if (maybeChangedFields and (Fields.Clip or Fields.Shape) != 0) {
+            renderNode.clipToOutline = clipToOutline
+            renderNode.clipToBounds = scope.clip && scope.shape === RectangleShape
+        }
+        if (maybeChangedFields and Fields.RenderEffect != 0) {
+            renderNode.renderEffect = scope.renderEffect
+        }
+        if (maybeChangedFields and Fields.CompositingStrategy != 0) {
+            renderNode.compositingStrategy = scope.compositingStrategy
+        }
+        // Note that we an safely leave Fields.Alpha out of this because it
+        val shapeChanged = if (maybeChangedFields and Fields.OutlineAffectingFields != 0) {
+            outlineResolver.update(
+                scope.shape,
+                renderNode.alpha,
+                renderNode.clipToOutline,
+                renderNode.elevation,
+                layoutDirection,
+                density
+            ).also {
+                renderNode.setOutline(outlineResolver.outline)
+            }
+        } else false
+        val isClippingManually = clipToOutline && !outlineResolver.outlineClipSupported
         if (wasClippingManually != isClippingManually || (isClippingManually && shapeChanged)) {
             invalidate()
         } else {
@@ -166,7 +190,12 @@
         if (!drawnWithZ && renderNode.elevation > 0f) {
             invalidateParentLayer?.invoke()
         }
-        matrixCache.invalidate()
+
+        if (maybeChangedFields and Fields.MatrixAffectingFields != 0) {
+            matrixCache.invalidate()
+        }
+
+        mutatedFields = scope.mutatedFields
     }
 
     override fun isInLayer(position: Offset): Boolean {
diff --git a/compose/ui/ui/src/androidMain/kotlin/androidx/compose/ui/platform/ViewLayer.android.kt b/compose/ui/ui/src/androidMain/kotlin/androidx/compose/ui/platform/ViewLayer.android.kt
index dbf1063..6ed59e9 100644
--- a/compose/ui/ui/src/androidMain/kotlin/androidx/compose/ui/platform/ViewLayer.android.kt
+++ b/compose/ui/ui/src/androidMain/kotlin/androidx/compose/ui/platform/ViewLayer.android.kt
@@ -26,13 +26,13 @@
 import androidx.compose.ui.geometry.Size
 import androidx.compose.ui.graphics.Canvas
 import androidx.compose.ui.graphics.CanvasHolder
-import androidx.compose.ui.graphics.Color
 import androidx.compose.ui.graphics.CompositingStrategy
+import androidx.compose.ui.graphics.Fields
 import androidx.compose.ui.graphics.Matrix
 import androidx.compose.ui.graphics.Path
 import androidx.compose.ui.graphics.RectangleShape
 import androidx.compose.ui.graphics.RenderEffect
-import androidx.compose.ui.graphics.Shape
+import androidx.compose.ui.graphics.ReusableGraphicsLayerScope
 import androidx.compose.ui.graphics.TransformOrigin
 import androidx.compose.ui.graphics.toArgb
 import androidx.compose.ui.layout.GraphicLayerInfo
@@ -124,53 +124,67 @@
             cameraDistance = value * resources.displayMetrics.densityDpi
         }
 
+    private var mutatedFields: Int = 0
+
     override fun updateLayerProperties(
-        scaleX: Float,
-        scaleY: Float,
-        alpha: Float,
-        translationX: Float,
-        translationY: Float,
-        shadowElevation: Float,
-        rotationX: Float,
-        rotationY: Float,
-        rotationZ: Float,
-        cameraDistance: Float,
-        transformOrigin: TransformOrigin,
-        shape: Shape,
-        clip: Boolean,
-        renderEffect: RenderEffect?,
-        ambientShadowColor: Color,
-        spotShadowColor: Color,
-        compositingStrategy: CompositingStrategy,
+        scope: ReusableGraphicsLayerScope,
         layoutDirection: LayoutDirection,
-        density: Density
+        density: Density,
     ) {
-        this.mTransformOrigin = transformOrigin
-        this.scaleX = scaleX
-        this.scaleY = scaleY
-        this.alpha = alpha
-        this.translationX = translationX
-        this.translationY = translationY
-        this.elevation = shadowElevation
-        this.rotation = rotationZ
-        this.rotationX = rotationX
-        this.rotationY = rotationY
-        this.pivotX = mTransformOrigin.pivotFractionX * width
-        this.pivotY = mTransformOrigin.pivotFractionY * height
-        this.cameraDistancePx = cameraDistance
-        this.clipToBounds = clip && shape === RectangleShape
-        resetClipBounds()
+        val maybeChangedFields = scope.mutatedFields or mutatedFields
+        if (maybeChangedFields and Fields.TransformOrigin != 0) {
+            this.mTransformOrigin = scope.transformOrigin
+            this.pivotX = mTransformOrigin.pivotFractionX * width
+            this.pivotY = mTransformOrigin.pivotFractionY * height
+        }
+        if (maybeChangedFields and Fields.ScaleY != 0) {
+            this.scaleX = scope.scaleX
+        }
+        if (maybeChangedFields and Fields.ScaleY != 0) {
+            this.scaleY = scope.scaleY
+        }
+        if (maybeChangedFields and Fields.Alpha != 0) {
+            this.alpha = scope.alpha
+        }
+        if (maybeChangedFields and Fields.TranslationX != 0) {
+            this.translationX = scope.translationX
+        }
+        if (maybeChangedFields and Fields.TranslationY != 0) {
+            this.translationY = scope.translationY
+        }
+        if (maybeChangedFields and Fields.ShadowElevation != 0) {
+            this.elevation = scope.shadowElevation
+        }
+        if (maybeChangedFields and Fields.RotationZ != 0) {
+            this.rotation = scope.rotationZ
+        }
+        if (maybeChangedFields and Fields.RotationX != 0) {
+            this.rotationX = scope.rotationX
+        }
+        if (maybeChangedFields and Fields.RotationY != 0) {
+            this.rotationY = scope.rotationY
+        }
+        if (maybeChangedFields and Fields.CameraDistance != 0) {
+            this.cameraDistancePx = scope.cameraDistance
+        }
         val wasClippingManually = manualClipPath != null
-        this.clipToOutline = clip && shape !== RectangleShape
-        val shapeChanged = outlineResolver.update(
-            shape,
-            this.alpha,
-            this.clipToOutline,
-            this.elevation,
-            layoutDirection,
-            density
-        )
-        updateOutlineResolver()
+        if (maybeChangedFields and (Fields.Clip or Fields.Shape) != 0) {
+            this.clipToBounds = scope.clip && scope.shape === RectangleShape
+            resetClipBounds()
+            this.clipToOutline = scope.clip && scope.shape !== RectangleShape
+        }
+        val shapeChanged = if (maybeChangedFields and Fields.OutlineAffectingFields != 0) {
+            outlineResolver.update(
+                scope.shape,
+                this.alpha,
+                this.clipToOutline,
+                this.elevation,
+                layoutDirection,
+                density
+            ).also {
+                updateOutlineResolver()
+            }
+        } else false
         val isClippingManually = manualClipPath != null
         if (wasClippingManually != isClippingManually || (isClippingManually && shapeChanged)) {
             invalidate() // have to redraw the content
@@ -178,33 +192,48 @@
         if (!drawnWithZ && elevation > 0) {
             invalidateParentLayer?.invoke()
         }
-        matrixCache.invalidate()
+        if (maybeChangedFields and Fields.MatrixAffectingFields != 0) {
+            matrixCache.invalidate()
+        }
         if (Build.VERSION.SDK_INT >= 28) {
-            ViewLayerVerificationHelper28.setOutlineAmbientShadowColor(
-                this,
-                ambientShadowColor.toArgb()
-            )
-            ViewLayerVerificationHelper28.setOutlineSpotShadowColor(this, spotShadowColor.toArgb())
+            if (maybeChangedFields and Fields.AmbientShadowColor != 0) {
+                ViewLayerVerificationHelper28.setOutlineAmbientShadowColor(
+                    this,
+                    scope.ambientShadowColor.toArgb()
+                )
+            }
+            if (maybeChangedFields and Fields.SpotShadowColor != 0) {
+                ViewLayerVerificationHelper28.setOutlineSpotShadowColor(
+                    this,
+                    scope.spotShadowColor.toArgb()
+                )
+            }
         }
         if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.S) {
-            ViewLayerVerificationHelper31.setRenderEffect(this, renderEffect)
-        }
-
-        mHasOverlappingRendering = when (compositingStrategy) {
-            CompositingStrategy.Offscreen -> {
-                setLayerType(LAYER_TYPE_HARDWARE, null)
-                true
-            }
-
-            CompositingStrategy.ModulateAlpha -> {
-                setLayerType(LAYER_TYPE_NONE, null)
-                false
-            }
-            else -> { // CompositingStrategy.Auto
-                setLayerType(LAYER_TYPE_NONE, null)
-                true
+            if (maybeChangedFields and Fields.RenderEffect != 0) {
+                ViewLayerVerificationHelper31.setRenderEffect(this, scope.renderEffect)
             }
         }
+
+        if (maybeChangedFields and Fields.CompositingStrategy != 0) {
+            mHasOverlappingRendering = when (scope.compositingStrategy) {
+                CompositingStrategy.Offscreen -> {
+                    setLayerType(LAYER_TYPE_HARDWARE, null)
+                    true
+                }
+
+                CompositingStrategy.ModulateAlpha -> {
+                    setLayerType(LAYER_TYPE_NONE, null)
+                    false
+                }
+
+                else -> { // CompositingStrategy.Auto
+                    setLayerType(LAYER_TYPE_NONE, null)
+                    true
+                }
+            }
+        }
+        mutatedFields = scope.mutatedFields
     }
 
     override fun hasOverlappingRendering(): Boolean {
diff --git a/compose/ui/ui/src/androidUnitTest/kotlin/androidx/compose/ui/node/LayoutNodeTest.kt b/compose/ui/ui/src/androidUnitTest/kotlin/androidx/compose/ui/node/LayoutNodeTest.kt
index 8a9f3ad..ab3b685 100644
--- a/compose/ui/ui/src/androidUnitTest/kotlin/androidx/compose/ui/node/LayoutNodeTest.kt
+++ b/compose/ui/ui/src/androidUnitTest/kotlin/androidx/compose/ui/node/LayoutNodeTest.kt
@@ -28,11 +28,8 @@
 import androidx.compose.ui.geometry.MutableRect
 import androidx.compose.ui.geometry.Offset
 import androidx.compose.ui.graphics.Canvas
-import androidx.compose.ui.graphics.Color
-import androidx.compose.ui.graphics.CompositingStrategy
 import androidx.compose.ui.graphics.Matrix
-import androidx.compose.ui.graphics.RenderEffect
-import androidx.compose.ui.graphics.Shape
+import androidx.compose.ui.graphics.ReusableGraphicsLayerScope
 import androidx.compose.ui.graphics.TransformOrigin
 import androidx.compose.ui.graphics.drawscope.ContentDrawScope
 import androidx.compose.ui.graphics.graphicsLayer
@@ -2636,31 +2633,15 @@
         val inverseTransform = Matrix()
         return object : OwnedLayer {
             override fun updateLayerProperties(
-                scaleX: Float,
-                scaleY: Float,
-                alpha: Float,
-                translationX: Float,
-                translationY: Float,
-                shadowElevation: Float,
-                rotationX: Float,
-                rotationY: Float,
-                rotationZ: Float,
-                cameraDistance: Float,
-                transformOrigin: TransformOrigin,
-                shape: Shape,
-                clip: Boolean,
-                renderEffect: RenderEffect?,
-                ambientShadowColor: Color,
-                spotShadowColor: Color,
-                compositingStrategy: CompositingStrategy,
+                scope: ReusableGraphicsLayerScope,
                 layoutDirection: LayoutDirection,
                 density: Density
             ) {
                 transform.reset()
                 // This is not expected to be 100% accurate
-                transform.scale(scaleX, scaleY)
-                transform.rotateZ(rotationZ)
-                transform.translate(translationX, translationY)
+                transform.scale(scope.scaleX, scope.scaleY)
+                transform.rotateZ(scope.rotationZ)
+                transform.translate(scope.translationX, scope.translationY)
                 transform.invertTo(inverseTransform)
             }
 
diff --git a/compose/ui/ui/src/commonMain/kotlin/androidx/compose/ui/draganddrop/DragAndDrop.kt b/compose/ui/ui/src/commonMain/kotlin/androidx/compose/ui/draganddrop/DragAndDrop.kt
index de73bd3..8fca1a1 100644
--- a/compose/ui/ui/src/commonMain/kotlin/androidx/compose/ui/draganddrop/DragAndDrop.kt
+++ b/compose/ui/ui/src/commonMain/kotlin/androidx/compose/ui/draganddrop/DragAndDrop.kt
@@ -16,6 +16,7 @@
 
 package androidx.compose.ui.draganddrop
 
+import androidx.collection.ArraySet
 import androidx.compose.ui.geometry.Offset
 import androidx.compose.ui.geometry.Size
 import androidx.compose.ui.graphics.drawscope.DrawScope
@@ -90,11 +91,13 @@
  * A representation of an event sent by the platform during a drag and drop operation.
  */
 expect class DragAndDropEvent {
+    // TODO: Move this to the Owner interface
     /**
-     * An indication of the reason the drag and drop event was sent
+     * A collection [DragAndDropModifierNode] instances that registered interested in a
+     * drag and drop session by returning true in [DragAndDropModifierNode.onDragAndDropEvent]
+     * with a [DragAndDropEventType.Started] type.
      */
-    var type: DragAndDropEventType
-        private set
+    internal val interestedNodes: ArraySet<DragAndDropModifierNode>
 }
 
 /**
@@ -120,3 +123,28 @@
      */
     val onDrawDragShadow: DrawScope.() -> Unit,
 )
+
+/**
+ * This represents the target of a drag and drop action
+ */
+fun interface DragAndDropTarget {
+
+    /** An event has occurred in a drag and drop session.
+     * @return When the [type] is [DragAndDropEventType.Started], true indicates interest in the
+     * [DragAndDropEvent], while false indicates disinterest. A [DragAndDropTarget] that returns
+     * false for an event should no longer see future events for this drag and drop session.
+     * When the [type] is [DragAndDropEventType.Dropped], true indicates acceptance of the
+     * [DragAndDropEvent] while false a rejection of the event.
+     * For all other [DragAndDropEventType] values, false is returned.
+     */
+    fun onDragAndDropEvent(
+        /**
+         * The event containing information about the drag and drop action
+         */
+        event: DragAndDropEvent,
+        /**
+         * The type of the [DragAndDropEvent]
+         */
+        type: DragAndDropEventType
+    ): Boolean
+}
diff --git a/compose/ui/ui/src/commonMain/kotlin/androidx/compose/ui/draganddrop/DragAndDropNode.kt b/compose/ui/ui/src/commonMain/kotlin/androidx/compose/ui/draganddrop/DragAndDropNode.kt
new file mode 100644
index 0000000..6253635
--- /dev/null
+++ b/compose/ui/ui/src/commonMain/kotlin/androidx/compose/ui/draganddrop/DragAndDropNode.kt
@@ -0,0 +1,291 @@
+/*
+ * 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.ui.draganddrop
+
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.geometry.Offset
+import androidx.compose.ui.layout.positionInRoot
+import androidx.compose.ui.node.DelegatableNode
+import androidx.compose.ui.node.TraversableNode
+import androidx.compose.ui.node.requireLayoutNode
+import androidx.compose.ui.node.requireOwner
+import androidx.compose.ui.node.traverseChildren
+import androidx.compose.ui.node.traverseSubtreeWithKey
+
+/**
+ * A [Modifier.Node] providing low level access to platform drag and drop operations.
+ * In most cases, you will want to delegate to the [DragAndDropModifierNode] returned by
+ * the eponymous factory method.
+ */
+interface DragAndDropModifierNode : DelegatableNode, DragAndDropTarget {
+    /**
+     * Begins a drag and drop operation with the contents of [dragAndDropInfo]
+     */
+    fun drag(dragAndDropInfo: DragAndDropInfo)
+}
+
+/**
+ * Creates a [Modifier.Node] for integrating with platform level drag and drop events. All
+ * [DragAndDropModifierNode] instances provided by this function may start drag and drop events
+ * by calling [DragAndDropModifierNode.drag].
+ * @param onDragAndDropEvent a provider of a [DragAndDropTarget] that allows this [Modifier.Node]
+ * receive platform drag and drop events. If one is not provided, platform drag and drop events
+ * will always be rejected.
+ */
+fun DragAndDropModifierNode(
+    onDragAndDropEvent: (event: DragAndDropEvent) -> DragAndDropTarget? = { null }
+): DragAndDropModifierNode = DragAndDropNode(onDragAndDropEvent)
+
+/**
+ * Core implementation of drag and drop. This [Modifier.Node] implements tree traversal for
+ * drag and drop, as well as hit testing and propagation of events for drag or drop gestures.
+ *
+ * It uses the [DragAndDropEvent] as a representation of a single mutable drag and drop session.
+ */
+internal class DragAndDropNode(
+    private val onDragAndDropEvent: (event: DragAndDropEvent) -> DragAndDropTarget?
+) : Modifier.Node(),
+    TraversableNode,
+    DragAndDropModifierNode {
+    companion object {
+        private object DragAndDropTraversableKey
+
+        private inline fun DragAndDropModifierNode.firstChildOrNull(
+            crossinline predicate: (DragAndDropModifierNode) -> Boolean
+        ): DragAndDropModifierNode? {
+            var match: DragAndDropModifierNode? = null
+            traverseSubtreeWithKey(DragAndDropTraversableKey) { child ->
+                if (child is DragAndDropModifierNode && predicate(child)) {
+                    match = child
+                    return@traverseSubtreeWithKey false
+                }
+                true
+            }
+            return match
+        }
+    }
+
+    override val traverseKey: Any = DragAndDropTraversableKey
+
+    /** Child currently receiving drag gestures for dropping into **/
+    private var lastChildDragAndDropModifierNode: DragAndDropModifierNode? = null
+
+    /** This as a drop target if eligible for processing **/
+    private var thisDragAndDropTarget: DragAndDropTarget? = null
+
+    // start Node
+    override fun onDetach() {
+        // Clean up
+        thisDragAndDropTarget = null
+    }
+    // end Node
+
+    // start DragSource
+
+    override fun drag(dragAndDropInfo: DragAndDropInfo) {
+        requireOwner().drag(dragAndDropInfo)
+    }
+
+    // end DragSource
+
+    // start DropTarget
+    override fun onDragAndDropEvent(event: DragAndDropEvent, type: DragAndDropEventType): Boolean {
+        when (type) {
+            DragAndDropEventType.Started -> return onStarted(event)
+            DragAndDropEventType.Dropped -> return onDropped(event)
+            DragAndDropEventType.Entered -> onEntered(event)
+            DragAndDropEventType.Moved -> onMoved(event)
+            DragAndDropEventType.Exited -> onExited(event)
+            DragAndDropEventType.Changed -> onChanged(event)
+            DragAndDropEventType.Ended -> onEnded(event)
+        }
+        return false
+    }
+
+    private fun onStarted(event: DragAndDropEvent): Boolean {
+        check(thisDragAndDropTarget == null) {
+            "DragAndDropTarget self reference must be null at the start of a drag and drop session"
+        }
+
+        // Start receiving events
+        thisDragAndDropTarget = onDragAndDropEvent(event)
+
+        var handledByChild = false
+
+        traverseChildren { child ->
+            handledByChild = handledByChild or child.onDragAndDropEvent(
+                event = event,
+                type = DragAndDropEventType.Started
+            ).also { accepted ->
+                // TODO (TJ) add interested nodes to the Owner
+                if (accepted) event.interestedNodes.add(child)
+            }
+            true
+        }
+
+        return handledByChild || thisDragAndDropTarget != null
+    }
+
+    private fun onEntered(event: DragAndDropEvent) {
+        when (val self = thisDragAndDropTarget) {
+            null -> lastChildDragAndDropModifierNode?.onDragAndDropEvent(
+                event = event,
+                type = DragAndDropEventType.Entered
+            )
+
+            else -> self.onDragAndDropEvent(
+                event = event,
+                type = DragAndDropEventType.Entered
+            )
+        }
+    }
+
+    private fun onMoved(event: DragAndDropEvent) {
+        val currentChildNode: DragAndDropModifierNode? = lastChildDragAndDropModifierNode
+        val newChildNode: DragAndDropModifierNode? = when {
+            // Moved within child.
+            currentChildNode?.contains(event.positionInRoot) == true -> currentChildNode
+            // Position is now outside active child, maybe it entered a different one.
+            else -> firstChildOrNull { child ->
+                // Only dispatch to children who previously accepted the onStart gesture
+                // TODO (TJ) read interested nodes from Owner
+                event.interestedNodes.contains(child) && child.contains(event.positionInRoot)
+            }
+        }
+
+        when {
+            // Left us and went to a child.
+            newChildNode != null && currentChildNode == null -> {
+                thisDragAndDropTarget?.onDragAndDropEvent(
+                    event = event,
+                    type = DragAndDropEventType.Exited
+                )
+                newChildNode.dispatchEntered(event)
+            }
+            // Left the child and returned to us.
+            newChildNode == null && currentChildNode != null -> {
+                currentChildNode.onDragAndDropEvent(
+                    event = event,
+                    type = DragAndDropEventType.Exited
+                )
+                thisDragAndDropTarget?.dispatchEntered(event)
+            }
+            // Left one child and entered another.
+            newChildNode != currentChildNode -> {
+                currentChildNode?.onDragAndDropEvent(
+                    event = event,
+                    type = DragAndDropEventType.Exited
+                )
+                newChildNode?.dispatchEntered(event)
+            }
+            // Stayed in the same child.
+            newChildNode != null -> newChildNode.onDragAndDropEvent(
+                event = event,
+                type = DragAndDropEventType.Moved
+            )
+            // Stayed in us.
+            else -> thisDragAndDropTarget?.onDragAndDropEvent(
+                event = event,
+                type = DragAndDropEventType.Moved
+            )
+        }
+
+        this@DragAndDropNode.lastChildDragAndDropModifierNode = newChildNode
+    }
+
+    private fun onChanged(event: DragAndDropEvent) {
+        when (val self = thisDragAndDropTarget) {
+            null -> lastChildDragAndDropModifierNode?.onDragAndDropEvent(
+                event = event,
+                type = DragAndDropEventType.Changed
+            )
+
+            else -> self.onDragAndDropEvent(
+                event = event,
+                type = DragAndDropEventType.Changed
+            )
+        }
+    }
+
+    private fun onExited(event: DragAndDropEvent) {
+        thisDragAndDropTarget?.onDragAndDropEvent(
+            event = event,
+            type = DragAndDropEventType.Exited
+        )
+        lastChildDragAndDropModifierNode?.onDragAndDropEvent(
+            event = event,
+            type = DragAndDropEventType.Exited
+        )
+        lastChildDragAndDropModifierNode = null
+    }
+
+    private fun onDropped(event: DragAndDropEvent): Boolean {
+        return when (val currentChildDropTarget = lastChildDragAndDropModifierNode) {
+            null -> thisDragAndDropTarget?.onDragAndDropEvent(
+                event = event,
+                type = DragAndDropEventType.Dropped
+            ) ?: false
+
+            else -> currentChildDropTarget.onDragAndDropEvent(
+                event = event,
+                type = DragAndDropEventType.Dropped
+            )
+        }
+    }
+
+    private fun onEnded(event: DragAndDropEvent) {
+        traverseChildren { child ->
+            child.onDragAndDropEvent(
+                event = event,
+                type = DragAndDropEventType.Ended
+            )
+            true
+        }
+        thisDragAndDropTarget?.onDragAndDropEvent(
+            event = event,
+            type = DragAndDropEventType.Ended
+        )
+        thisDragAndDropTarget = null
+        lastChildDragAndDropModifierNode = null
+        // TODO (TJ) Clear interested nodes on the Owner
+        event.interestedNodes.clear()
+    }
+    // end DropTarget
+}
+
+private fun DragAndDropTarget.dispatchEntered(event: DragAndDropEvent) = run {
+    // Notify of entry
+    onDragAndDropEvent(event, DragAndDropEventType.Entered)
+    // Start move
+    onDragAndDropEvent(event, DragAndDropEventType.Moved)
+}
+
+/**
+ * Hit test for a [DragAndDropNode].
+ */
+private fun DragAndDropModifierNode.contains(position: Offset): Boolean {
+    if (!node.isAttached) return false
+    val currentCoordinates = requireLayoutNode().coordinates
+    if (!currentCoordinates.isAttached) return false
+
+    val (width, height) = currentCoordinates.size
+    val (x1, y1) = currentCoordinates.positionInRoot()
+    val x2 = x1 + width
+    val y2 = y1 + height
+
+    return position.x in x1..x2 && position.y in y1..y2
+}
diff --git a/compose/ui/ui/src/commonMain/kotlin/androidx/compose/ui/graphics/GraphicsLayerScope.kt b/compose/ui/ui/src/commonMain/kotlin/androidx/compose/ui/graphics/GraphicsLayerScope.kt
index 783a2c3..d57300c 100644
--- a/compose/ui/ui/src/commonMain/kotlin/androidx/compose/ui/graphics/GraphicsLayerScope.kt
+++ b/compose/ui/ui/src/commonMain/kotlin/androidx/compose/ui/graphics/GraphicsLayerScope.kt
@@ -222,24 +222,129 @@
  */
 fun GraphicsLayerScope(): GraphicsLayerScope = ReusableGraphicsLayerScope()
 
+internal object Fields {
+    const val ScaleX: Int = 0b1 shl 0
+    const val ScaleY: Int = 0b1 shl 1
+    const val Alpha: Int = 0b1 shl 2
+    const val TranslationX: Int = 0b1 shl 3
+    const val TranslationY: Int = 0b1 shl 4
+    const val ShadowElevation: Int = 0b1 shl 5
+    const val AmbientShadowColor: Int = 0b1 shl 6
+    const val SpotShadowColor: Int = 0b1 shl 7
+    const val RotationX: Int = 0b1 shl 8
+    const val RotationY: Int = 0b1 shl 9
+    const val RotationZ: Int = 0b1 shl 10
+    const val CameraDistance: Int = 0b1 shl 11
+    const val TransformOrigin: Int = 0b1 shl 12
+    const val Shape: Int = 0b1 shl 13
+    const val Clip: Int = 0b1 shl 14
+    const val CompositingStrategy: Int = 0b1 shl 15
+    const val Size: Int = 0b1 shl 16
+    const val RenderEffect: Int = 0b1 shl 17
+
+    const val OutlineAffectingFields = Clip or
+        Shape or
+        Alpha
+
+    const val MatrixAffectingFields = ScaleX or
+        ScaleY or
+        TranslationX or
+        TranslationY or
+        TransformOrigin or
+        RotationX or
+        RotationY or
+        RotationZ or
+        CameraDistance
+}
+
 internal class ReusableGraphicsLayerScope : GraphicsLayerScope {
+    internal var mutatedFields: Int = 0
+
     override var scaleX: Float = 1f
+        set(value) {
+            mutatedFields = mutatedFields or Fields.ScaleX
+            field = value
+        }
     override var scaleY: Float = 1f
+        set(value) {
+            mutatedFields = mutatedFields or Fields.ScaleY
+            field = value
+        }
     override var alpha: Float = 1f
+        set(value) {
+            mutatedFields = mutatedFields or Fields.Alpha
+            field = value
+        }
     override var translationX: Float = 0f
+        set(value) {
+            mutatedFields = mutatedFields or Fields.TranslationX
+            field = value
+        }
     override var translationY: Float = 0f
+        set(value) {
+            mutatedFields = mutatedFields or Fields.TranslationY
+            field = value
+        }
     override var shadowElevation: Float = 0f
+        set(value) {
+            mutatedFields = mutatedFields or Fields.ShadowElevation
+            field = value
+        }
     override var ambientShadowColor: Color = DefaultShadowColor
+        set(value) {
+            mutatedFields = mutatedFields or Fields.AmbientShadowColor
+            field = value
+        }
     override var spotShadowColor: Color = DefaultShadowColor
+        set(value) {
+            mutatedFields = mutatedFields or Fields.SpotShadowColor
+            field = value
+        }
     override var rotationX: Float = 0f
+        set(value) {
+            mutatedFields = mutatedFields or Fields.RotationX
+            field = value
+        }
     override var rotationY: Float = 0f
+        set(value) {
+            mutatedFields = mutatedFields or Fields.RotationY
+            field = value
+        }
     override var rotationZ: Float = 0f
+        set(value) {
+            mutatedFields = mutatedFields or Fields.RotationZ
+            field = value
+        }
     override var cameraDistance: Float = DefaultCameraDistance
+        set(value) {
+            mutatedFields = mutatedFields or Fields.CameraDistance
+            field = value
+        }
     override var transformOrigin: TransformOrigin = TransformOrigin.Center
+        set(value) {
+            mutatedFields = mutatedFields or Fields.TransformOrigin
+            field = value
+        }
     override var shape: Shape = RectangleShape
+        set(value) {
+            mutatedFields = mutatedFields or Fields.Shape
+            field = value
+        }
     override var clip: Boolean = false
+        set(value) {
+            mutatedFields = mutatedFields or Fields.Clip
+            field = value
+        }
     override var compositingStrategy: CompositingStrategy = CompositingStrategy.Auto
+        set(value) {
+            mutatedFields = mutatedFields or Fields.CompositingStrategy
+            field = value
+        }
     override var size: Size = Size.Unspecified
+        set(value) {
+            mutatedFields = mutatedFields or Fields.Size
+            field = value
+        }
 
     internal var graphicsDensity: Density = Density(1.0f)
 
@@ -250,8 +355,13 @@
         get() = graphicsDensity.fontScale
 
     override var renderEffect: RenderEffect? = null
+        set(value) {
+            mutatedFields = mutatedFields or Fields.RenderEffect
+            field = value
+        }
 
     fun reset() {
+        mutatedFields = 0
         scaleX = 1f
         scaleY = 1f
         alpha = 1f
diff --git a/compose/ui/ui/src/commonMain/kotlin/androidx/compose/ui/node/BackwardsCompatNode.kt b/compose/ui/ui/src/commonMain/kotlin/androidx/compose/ui/node/BackwardsCompatNode.kt
index 89ab17a..a094503 100644
--- a/compose/ui/ui/src/commonMain/kotlin/androidx/compose/ui/node/BackwardsCompatNode.kt
+++ b/compose/ui/ui/src/commonMain/kotlin/androidx/compose/ui/node/BackwardsCompatNode.kt
@@ -421,7 +421,9 @@
         check(focusOrderModifier is FocusOrderModifier) {
             "applyFocusProperties called on wrong node"
         }
-        focusProperties.apply(FocusOrderModifierToProperties(focusOrderModifier))
+
+        @Suppress("DEPRECATION")
+        focusOrderModifier.populateFocusOrder(FocusOrder(focusProperties))
     }
 
     override fun toString(): String = element.toString()
@@ -440,19 +442,6 @@
     it.updateModifierLocalConsumer()
 }
 
-/**
- * Used internally for FocusOrderModifiers so that we can compare the modifiers and can reuse
- * the ModifierLocalConsumerEntity and ModifierLocalProviderEntity.
- */
-@Suppress("DEPRECATION")
-private class FocusOrderModifierToProperties(
-    val modifier: FocusOrderModifier
-) : (FocusProperties) -> Unit {
-    override fun invoke(focusProperties: FocusProperties) {
-        modifier.populateFocusOrder(FocusOrder(focusProperties))
-    }
-}
-
 private fun BackwardsCompatNode.isChainUpdate(): Boolean {
     val tailNode = requireLayoutNode().nodes.tail as TailModifierNode
     return tailNode.attachHasBeenRun
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..3718c7b 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
@@ -57,8 +57,7 @@
     LookaheadCapablePlaceable(),
     Measurable,
     LayoutCoordinates,
-    OwnerScope,
-        (Canvas) -> Unit {
+    OwnerScope {
 
     abstract val tail: Modifier.Node
 
@@ -378,7 +377,7 @@
 
     // implementation of draw block passed to the OwnedLayer
     @Suppress("LiftReturnOrAssignment")
-    override fun invoke(canvas: Canvas) {
+    private val drawBlock: (Canvas) -> Unit = { canvas ->
         if (layoutNode.isPlaced) {
             snapshotObserver.observeReads(this, onCommitAffectingLayer) {
                 drawContainedDrawModifiers(canvas)
@@ -406,7 +405,7 @@
         if (isAttached && layerBlock != null) {
             if (layer == null) {
                 layer = layoutNode.requireOwner().createLayer(
-                    this,
+                    drawBlock,
                     invalidateParentLayer
                 ).apply {
                     resize(measuredSize)
@@ -448,25 +447,9 @@
                 ?: LayerPositionalProperties().also { layerPositionalProperties = it }
             layerPositionalProperties.copyFrom(graphicsLayerScope)
             layer.updateLayerProperties(
-                scaleX = graphicsLayerScope.scaleX,
-                scaleY = graphicsLayerScope.scaleY,
-                alpha = graphicsLayerScope.alpha,
-                translationX = graphicsLayerScope.translationX,
-                translationY = graphicsLayerScope.translationY,
-                shadowElevation = graphicsLayerScope.shadowElevation,
-                ambientShadowColor = graphicsLayerScope.ambientShadowColor,
-                spotShadowColor = graphicsLayerScope.spotShadowColor,
-                rotationX = graphicsLayerScope.rotationX,
-                rotationY = graphicsLayerScope.rotationY,
-                rotationZ = graphicsLayerScope.rotationZ,
-                cameraDistance = graphicsLayerScope.cameraDistance,
-                transformOrigin = graphicsLayerScope.transformOrigin,
-                shape = graphicsLayerScope.shape,
-                clip = graphicsLayerScope.clip,
-                renderEffect = graphicsLayerScope.renderEffect,
-                compositingStrategy = graphicsLayerScope.compositingStrategy,
-                layoutDirection = layoutNode.layoutDirection,
-                density = layoutNode.density
+                graphicsLayerScope,
+                layoutNode.layoutDirection,
+                layoutNode.density,
             )
             isClipping = graphicsLayerScope.clip
             lastLayerAlpha = graphicsLayerScope.alpha
@@ -935,6 +918,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/compose/ui/ui/src/commonMain/kotlin/androidx/compose/ui/node/OwnedLayer.kt b/compose/ui/ui/src/commonMain/kotlin/androidx/compose/ui/node/OwnedLayer.kt
index 79a754b..a82996a 100644
--- a/compose/ui/ui/src/commonMain/kotlin/androidx/compose/ui/node/OwnedLayer.kt
+++ b/compose/ui/ui/src/commonMain/kotlin/androidx/compose/ui/node/OwnedLayer.kt
@@ -19,12 +19,8 @@
 import androidx.compose.ui.geometry.MutableRect
 import androidx.compose.ui.geometry.Offset
 import androidx.compose.ui.graphics.Canvas
-import androidx.compose.ui.graphics.Color
-import androidx.compose.ui.graphics.CompositingStrategy
 import androidx.compose.ui.graphics.Matrix
-import androidx.compose.ui.graphics.RenderEffect
-import androidx.compose.ui.graphics.Shape
-import androidx.compose.ui.graphics.TransformOrigin
+import androidx.compose.ui.graphics.ReusableGraphicsLayerScope
 import androidx.compose.ui.unit.Density
 import androidx.compose.ui.unit.IntOffset
 import androidx.compose.ui.unit.IntSize
@@ -39,25 +35,9 @@
      * Applies the new layer properties and causing this layer to be redrawn.
      */
     fun updateLayerProperties(
-        scaleX: Float,
-        scaleY: Float,
-        alpha: Float,
-        translationX: Float,
-        translationY: Float,
-        shadowElevation: Float,
-        rotationX: Float,
-        rotationY: Float,
-        rotationZ: Float,
-        cameraDistance: Float,
-        transformOrigin: TransformOrigin,
-        shape: Shape,
-        clip: Boolean,
-        renderEffect: RenderEffect?,
-        ambientShadowColor: Color,
-        spotShadowColor: Color,
-        compositingStrategy: CompositingStrategy,
+        scope: ReusableGraphicsLayerScope,
         layoutDirection: LayoutDirection,
-        density: Density
+        density: Density,
     )
 
     /**
diff --git a/compose/ui/ui/src/desktopMain/kotlin/androidx/compose/ui/draganddrop/DragAndDrop.desktop.kt b/compose/ui/ui/src/desktopMain/kotlin/androidx/compose/ui/draganddrop/DragAndDrop.desktop.kt
index c23cc36..4d89a2da 100644
--- a/compose/ui/ui/src/desktopMain/kotlin/androidx/compose/ui/draganddrop/DragAndDrop.desktop.kt
+++ b/compose/ui/ui/src/desktopMain/kotlin/androidx/compose/ui/draganddrop/DragAndDrop.desktop.kt
@@ -16,6 +16,7 @@
 
 package androidx.compose.ui.draganddrop
 
+import androidx.collection.ArraySet
 import androidx.compose.ui.geometry.Offset
 import java.awt.dnd.DropTargetEvent as AwtDropTargetEvent
 
@@ -25,8 +26,8 @@
  * AWT [DragAndDropEvent] which delegates to a [AwtDropTargetEvent]
  */
 actual class DragAndDropEvent(
-    actual var type: DragAndDropEventType,
-    internal var dropTargetEvent: AwtDropTargetEvent
+    internal val dropTargetEvent: AwtDropTargetEvent,
+    internal actual val interestedNodes: ArraySet<DragAndDropModifierNode> = ArraySet()
 )
 
 internal actual val DragAndDropEvent.positionInRoot: Offset
diff --git a/compose/ui/ui/src/desktopTest/kotlin/androidx/compose/ui/platform/SkiaLayerTest.kt b/compose/ui/ui/src/desktopTest/kotlin/androidx/compose/ui/platform/SkiaLayerTest.kt
index 2556f82..5293ba2 100644
--- a/compose/ui/ui/src/desktopTest/kotlin/androidx/compose/ui/platform/SkiaLayerTest.kt
+++ b/compose/ui/ui/src/desktopTest/kotlin/androidx/compose/ui/platform/SkiaLayerTest.kt
@@ -23,6 +23,7 @@
 import androidx.compose.ui.graphics.DefaultShadowColor
 import androidx.compose.ui.graphics.RectangleShape
 import androidx.compose.ui.graphics.RenderEffect
+import androidx.compose.ui.graphics.ReusableGraphicsLayerScope
 import androidx.compose.ui.graphics.Shape
 import androidx.compose.ui.graphics.TransformOrigin
 import androidx.compose.ui.test.junit4.createComposeRule
@@ -395,11 +396,25 @@
         renderEffect: RenderEffect? = null,
         compositingStrategy: CompositingStrategy = CompositingStrategy.Auto
     ) {
-        updateLayerProperties(
-            scaleX, scaleY, alpha, translationX, translationY, shadowElevation, rotationX,
-            rotationY, rotationZ, cameraDistance, transformOrigin, shape, clip, renderEffect,
-            ambientShadowColor, spotShadowColor, compositingStrategy, LayoutDirection.Ltr,
-            Density(1f, 1f)
-        )
+        val scope = ReusableGraphicsLayerScope()
+        scope.cameraDistance = cameraDistance
+        scope.scaleX = scaleX
+        scope.scaleY = scaleY
+        scope.alpha = alpha
+        scope.translationX = translationX
+        scope.translationY = translationY
+        scope.shadowElevation = shadowElevation
+        scope.ambientShadowColor = ambientShadowColor
+        scope.spotShadowColor = spotShadowColor
+        scope.rotationX = rotationX
+        scope.rotationY = rotationY
+        scope.rotationZ = rotationZ
+        scope.cameraDistance = cameraDistance
+        scope.transformOrigin = transformOrigin
+        scope.shape = shape
+        scope.clip = clip
+        scope.renderEffect = renderEffect
+        scope.compositingStrategy = compositingStrategy
+        updateLayerProperties(scope, LayoutDirection.Ltr, Density(1f))
     }
 }
diff --git a/compose/ui/ui/src/skikoMain/kotlin/androidx/compose/ui/platform/SkiaLayer.skiko.kt b/compose/ui/ui/src/skikoMain/kotlin/androidx/compose/ui/platform/SkiaLayer.skiko.kt
index e7d9ae4..18568a9 100644
--- a/compose/ui/ui/src/skikoMain/kotlin/androidx/compose/ui/platform/SkiaLayer.skiko.kt
+++ b/compose/ui/ui/src/skikoMain/kotlin/androidx/compose/ui/platform/SkiaLayer.skiko.kt
@@ -26,13 +26,14 @@
 import androidx.compose.ui.graphics.Color
 import androidx.compose.ui.graphics.CompositingStrategy
 import androidx.compose.ui.graphics.DefaultShadowColor
+import androidx.compose.ui.graphics.Fields
 import androidx.compose.ui.graphics.Matrix
 import androidx.compose.ui.graphics.Outline
 import androidx.compose.ui.graphics.Paint
 import androidx.compose.ui.graphics.Path
 import androidx.compose.ui.graphics.RectangleShape
 import androidx.compose.ui.graphics.RenderEffect
-import androidx.compose.ui.graphics.Shape
+import androidx.compose.ui.graphics.ReusableGraphicsLayerScope
 import androidx.compose.ui.graphics.SkiaBackedCanvas
 import androidx.compose.ui.graphics.TransformOrigin
 import androidx.compose.ui.graphics.asComposeCanvas
@@ -145,49 +146,38 @@
             matrix
         }
     }
+    private var mutatedFields: Int = 0
 
     override fun updateLayerProperties(
-        scaleX: Float,
-        scaleY: Float,
-        alpha: Float,
-        translationX: Float,
-        translationY: Float,
-        shadowElevation: Float,
-        rotationX: Float,
-        rotationY: Float,
-        rotationZ: Float,
-        cameraDistance: Float,
-        transformOrigin: TransformOrigin,
-        shape: Shape,
-        clip: Boolean,
-        renderEffect: RenderEffect?,
-        ambientShadowColor: Color,
-        spotShadowColor: Color,
-        compositingStrategy: CompositingStrategy,
+        scope: ReusableGraphicsLayerScope,
         layoutDirection: LayoutDirection,
-        density: Density
+        density: Density,
     ) {
-        this.transformOrigin = transformOrigin
-        this.translationX = translationX
-        this.translationY = translationY
-        this.rotationX = rotationX
-        this.rotationY = rotationY
-        this.rotationZ = rotationZ
-        this.scaleX = scaleX
-        this.scaleY = scaleY
-        this.alpha = alpha
-        this.clip = clip
-        this.shadowElevation = shadowElevation
+        val maybeChangedFields = scope.mutatedFields or mutatedFields
+        this.transformOrigin = scope.transformOrigin
+        this.translationX = scope.translationX
+        this.translationY = scope.translationY
+        this.rotationX = scope.rotationX
+        this.rotationY = scope.rotationY
+        this.rotationZ = scope.rotationZ
+        this.scaleX = scope.scaleX
+        this.scaleY = scope.scaleY
+        this.alpha = scope.alpha
+        this.clip = scope.clip
+        this.shadowElevation = scope.shadowElevation
         this.density = density
-        this.renderEffect = renderEffect
-        this.ambientShadowColor = ambientShadowColor
-        this.spotShadowColor = spotShadowColor
-        this.compositingStrategy = compositingStrategy
-        outlineCache.shape = shape
+        this.renderEffect = scope.renderEffect
+        this.ambientShadowColor = scope.ambientShadowColor
+        this.spotShadowColor = scope.spotShadowColor
+        this.compositingStrategy = scope.compositingStrategy
+        outlineCache.shape = scope.shape
         outlineCache.layoutDirection = layoutDirection
         outlineCache.density = density
-        updateMatrix()
+        if (maybeChangedFields and Fields.MatrixAffectingFields != 0) {
+            updateMatrix()
+        }
         invalidate()
+        mutatedFields = scope.mutatedFields
     }
 
     // TODO(demin): support perspective projection for rotationX/rotationY (as in Android)
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/core/core-telecom/integration-tests/testapp/src/main/AndroidManifest.xml b/core/core-telecom/integration-tests/testapp/src/main/AndroidManifest.xml
index 529aa31..25c5e6d 100644
--- a/core/core-telecom/integration-tests/testapp/src/main/AndroidManifest.xml
+++ b/core/core-telecom/integration-tests/testapp/src/main/AndroidManifest.xml
@@ -17,6 +17,7 @@
 
 <manifest xmlns:android="http://schemas.android.com/apk/res/android">
     <uses-permission android:name="android.permission.MANAGE_OWN_CALLS" />
+    <uses-permission android:name="android.permission.RECORD_AUDIO" />
 
     <application
         android:icon="@drawable/ic_launcher"
diff --git a/core/core-telecom/integration-tests/testapp/src/main/java/androidx/core/telecom/test/CallListAdapter.kt b/core/core-telecom/integration-tests/testapp/src/main/java/androidx/core/telecom/test/CallListAdapter.kt
index bc49865..df48f8e 100644
--- a/core/core-telecom/integration-tests/testapp/src/main/java/androidx/core/telecom/test/CallListAdapter.kt
+++ b/core/core-telecom/integration-tests/testapp/src/main/java/androidx/core/telecom/test/CallListAdapter.kt
@@ -16,6 +16,8 @@
 
 package androidx.core.telecom.test
 
+import android.media.AudioManager.AudioRecordingCallback
+import android.media.AudioRecord
 import android.telecom.CallEndpoint
 import android.telecom.DisconnectCause
 import android.view.LayoutInflater
@@ -31,10 +33,13 @@
 import kotlinx.coroutines.launch
 
 @RequiresApi(34)
-class CallListAdapter(private var mList: ArrayList<CallRow>?) :
-    RecyclerView.Adapter<CallListAdapter.ViewHolder>() {
+class CallListAdapter(
+    private var mList: ArrayList<CallRow>?,
+    private var mAudioRecord: AudioRecord? = null
+) : RecyclerView.Adapter<CallListAdapter.ViewHolder>() {
     var mCallIdToViewHolder: MutableMap<String, ViewHolder> = mutableMapOf()
     private val CONTROL_ACTION_FAILED_MSG = "CurrentState=[FAILED-T]"
+    internal var mAudioRecordingCallback: AudioRecordingCallback? = null
 
     class ViewHolder(ItemView: View) : RecyclerView.ViewHolder(ItemView) {
         // TextViews
@@ -79,6 +84,11 @@
 
             holder.activeButton.setOnClickListener {
                 CoroutineScope(Dispatchers.Main).launch {
+                    // If the audio is not already recording, start it up (i.e. if call was set
+                    // to inactive just before).
+                    if (mAudioRecord?.recordingState != AudioRecord.RECORDSTATE_RECORDING) {
+                        mAudioRecord?.startRecording()
+                    }
                     when (ItemsViewModel.callObject.mCallControl!!.setActive()) {
                         is CallControlResult.Success -> {
                             holder.currentState.text = "CurrentState=[active]"
@@ -93,6 +103,8 @@
 
             holder.holdButton.setOnClickListener {
                 CoroutineScope(Dispatchers.Main).launch {
+                    // Pause recording but don't clear callback
+                    mAudioRecord?.stop()
                     when (ItemsViewModel.callObject.mCallControl!!.setInactive()) {
                         is CallControlResult.Success -> {
                             holder.currentState.text = "CurrentState=[onHold]"
@@ -107,6 +119,7 @@
 
             holder.disconnectButton.setOnClickListener {
                 CoroutineScope(Dispatchers.IO).launch {
+                    endAudioRecording()
                     ItemsViewModel.callObject.mCallControl?.disconnect(
                         DisconnectCause(
                             DisconnectCause.LOCAL
@@ -184,4 +197,16 @@
             holder?.currentEndpoint?.text = "currentEndpoint=[$endpoint]"
         }
     }
+
+    private fun endAudioRecording() {
+        try {
+            // Stop audio recording
+            mAudioRecord?.stop()
+            mAudioRecord?.unregisterAudioRecordingCallback(mAudioRecordingCallback!!)
+        } catch (e: java.lang.Exception) {
+            // pass through
+        } finally {
+            mAudioRecordingCallback = null
+        }
+    }
 }
diff --git a/core/core-telecom/integration-tests/testapp/src/main/java/androidx/core/telecom/test/CallingMainActivity.kt b/core/core-telecom/integration-tests/testapp/src/main/java/androidx/core/telecom/test/CallingMainActivity.kt
index b793f38..9de9603 100644
--- a/core/core-telecom/integration-tests/testapp/src/main/java/androidx/core/telecom/test/CallingMainActivity.kt
+++ b/core/core-telecom/integration-tests/testapp/src/main/java/androidx/core/telecom/test/CallingMainActivity.kt
@@ -18,6 +18,8 @@
 
 import android.annotation.SuppressLint
 import android.app.Activity
+import android.media.AudioManager.AudioRecordingCallback
+import android.media.AudioRecord
 import android.os.Bundle
 import android.telecom.DisconnectCause
 import android.util.Log
@@ -29,6 +31,7 @@
 import androidx.core.view.WindowCompat
 import androidx.recyclerview.widget.LinearLayoutManager
 import androidx.recyclerview.widget.RecyclerView
+import java.util.concurrent.Executors
 import kotlinx.coroutines.CoroutineExceptionHandler
 import kotlinx.coroutines.CoroutineScope
 import kotlinx.coroutines.Dispatchers
@@ -44,10 +47,14 @@
     // Telecom
     private var mCallsManager: CallsManager? = null
 
+    // Audio Record
+    private var mAudioRecord: AudioRecord? = null
+    private var mAudioRecordingCallback: AudioRecordingCallback? = null
+
     // Call Log objects
     private var mRecyclerView: RecyclerView? = null
     private var mCallObjects: ArrayList<CallRow> = ArrayList()
-    private var mAdapter: CallListAdapter? = CallListAdapter(mCallObjects)
+    private lateinit var mAdapter: CallListAdapter
 
     override fun onCreate(savedInstanceState: Bundle?) {
         WindowCompat.setDecorFitsSystemWindows(window, false)
@@ -68,6 +75,7 @@
         val addOutgoingCallButton = findViewById<Button>(R.id.addOutgoingCall)
         addOutgoingCallButton.setOnClickListener {
             mScope.launch {
+                startAudioRecording()
                 addCallWithAttributes(Utilities.OUTGOING_CALL_ATTRIBUTES)
             }
         }
@@ -75,10 +83,15 @@
         val addIncomingCallButton = findViewById<Button>(R.id.addIncomingCall)
         addIncomingCallButton.setOnClickListener {
             mScope.launch {
+                startAudioRecording()
                 addCallWithAttributes(Utilities.INCOMING_CALL_ATTRIBUTES)
             }
         }
 
+        // Set up AudioRecord
+        mAudioRecord = Utilities.createAudioRecord(applicationContext, this)
+        mAdapter = CallListAdapter(mCallObjects, mAudioRecord)
+
         // set up the call list view holder
         mRecyclerView = findViewById(R.id.callListRecyclerView)
         mRecyclerView?.layoutManager = LinearLayoutManager(this)
@@ -96,6 +109,10 @@
                 }
             }
         }
+
+        // Clean up AudioRecord
+        mAudioRecord?.release()
+        mAudioRecord = null
     }
 
     @SuppressLint("WrongConstant")
@@ -178,7 +195,15 @@
 
     private fun updateCallList() {
         runOnUiThread {
-            mAdapter?.notifyDataSetChanged()
+            mAdapter.notifyDataSetChanged()
         }
     }
+
+    private fun startAudioRecording() {
+        mAudioRecordingCallback = Utilities.TelecomAudioRecordingCallback(mAudioRecord!!)
+        mAudioRecord?.registerAudioRecordingCallback(
+            Executors.newSingleThreadExecutor(), mAudioRecordingCallback!!)
+        mAdapter.mAudioRecordingCallback = mAudioRecordingCallback
+        mAudioRecord?.startRecording()
+    }
 }
diff --git a/core/core-telecom/integration-tests/testapp/src/main/java/androidx/core/telecom/test/Utilities.kt b/core/core-telecom/integration-tests/testapp/src/main/java/androidx/core/telecom/test/Utilities.kt
index b1fd714..aa670ea 100644
--- a/core/core-telecom/integration-tests/testapp/src/main/java/androidx/core/telecom/test/Utilities.kt
+++ b/core/core-telecom/integration-tests/testapp/src/main/java/androidx/core/telecom/test/Utilities.kt
@@ -16,12 +16,23 @@
 
 package androidx.core.telecom.test
 
+import android.Manifest
+import android.content.Context
+import android.content.pm.PackageManager
+import android.media.AudioFormat
+import android.media.AudioManager.AudioRecordingCallback
+import android.media.AudioRecord
+import android.media.AudioRecordingConfiguration
+import android.media.MediaRecorder
 import android.net.Uri
+import android.util.Log
 import androidx.annotation.RequiresApi
+import androidx.core.app.ActivityCompat
 import androidx.core.telecom.CallAttributesCompat
 import androidx.core.telecom.CallAttributesCompat.Companion.CALL_TYPE_VIDEO_CALL
 import androidx.core.telecom.CallAttributesCompat.Companion.DIRECTION_INCOMING
 import androidx.core.telecom.CallAttributesCompat.Companion.DIRECTION_OUTGOING
+import androidx.core.util.Preconditions
 
 @RequiresApi(34)
 class Utilities {
@@ -50,5 +61,54 @@
                 DIRECTION_INCOMING,
                 CALL_TYPE_VIDEO_CALL,
                 ALL_CALL_CAPABILITIES)
+
+        // Audio recording config constants
+        private const val SAMPLE_RATE = 44100
+        private const val AUDIO_SOURCE = MediaRecorder.AudioSource.CAMCORDER
+        private const val CHANNEL_COUNT = 1
+        private const val AUDIO_FORMAT = AudioFormat.ENCODING_PCM_16BIT
+        private const val RECORD_AUDIO_REQUEST_CODE = 200
+
+        // Create AudioRecord
+        fun createAudioRecord(context: Context, mainActivity: CallingMainActivity): AudioRecord {
+            if (ActivityCompat.checkSelfPermission(context, Manifest.permission.RECORD_AUDIO) !=
+                PackageManager.PERMISSION_GRANTED) {
+                ActivityCompat.requestPermissions(mainActivity,
+                    arrayOf(Manifest.permission.RECORD_AUDIO), RECORD_AUDIO_REQUEST_CODE)
+            }
+            val channelMask = if (CHANNEL_COUNT == 1)
+                AudioFormat.CHANNEL_IN_MONO else AudioFormat.CHANNEL_IN_STEREO
+            var minBufferSize = AudioRecord.getMinBufferSize(
+                SAMPLE_RATE, channelMask, AUDIO_FORMAT)
+            Preconditions.checkState(minBufferSize > 0)
+            minBufferSize *= 2
+
+            val audioFormatObj = AudioFormat.Builder()
+                .setSampleRate(SAMPLE_RATE)
+                .setChannelMask(channelMask)
+                .setEncoding(AUDIO_FORMAT)
+                .build()
+            val audioRecordBuilder: AudioRecord.Builder = AudioRecord.Builder()
+            audioRecordBuilder.setAudioSource(AUDIO_SOURCE)
+            audioRecordBuilder.setAudioFormat(audioFormatObj)
+            audioRecordBuilder.setBufferSizeInBytes(minBufferSize)
+            return audioRecordBuilder.build()
+        }
+    }
+
+    // AudioRecordingCallback implementation
+    class TelecomAudioRecordingCallback(
+        private var mAudioRecord: AudioRecord
+    ) : AudioRecordingCallback() {
+        override fun onRecordingConfigChanged(configs: List<AudioRecordingConfiguration>) {
+            for (config in configs) {
+                if (config.clientAudioSessionId == mAudioRecord.audioSessionId) {
+                    Log.i(CallingMainActivity::class.simpleName, String.format(
+                        "onRecordingConfigChanged: random: isClientSilenced=[%b], config=[%s]",
+                        config.isClientSilenced, config))
+                    break
+                }
+            }
+        }
     }
 }
diff --git a/core/core-telecom/src/androidTest/java/androidx/core/telecom/test/InCallServiceCompatTest.kt b/core/core-telecom/src/androidTest/java/androidx/core/telecom/test/InCallServiceCompatTest.kt
index 30fda2f..8ee3c06 100644
--- a/core/core-telecom/src/androidTest/java/androidx/core/telecom/test/InCallServiceCompatTest.kt
+++ b/core/core-telecom/src/androidTest/java/androidx/core/telecom/test/InCallServiceCompatTest.kt
@@ -33,6 +33,9 @@
 import androidx.test.filters.LargeTest
 import androidx.test.filters.SdkSuppress
 import androidx.test.rule.GrantPermissionRule
+import kotlinx.coroutines.DelicateCoroutinesApi
+import kotlinx.coroutines.GlobalScope
+import kotlinx.coroutines.async
 import kotlinx.coroutines.launch
 import kotlinx.coroutines.runBlocking
 import org.junit.After
@@ -118,18 +121,8 @@
     @LargeTest
     @Test(timeout = 10000)
     fun testResolveCallExtension_CapabilityExchange() {
-        if (TestUtils.buildIsAtLeastU()) {
-            Log.w(TAG, "Setting up v2 tests for U+ device")
-            setUpV2Test()
-        } else {
-            Log.w(TAG, "Setting up backwards compatibility tests for pre-U device")
-            setUpBackwardsCompatTest()
-        }
-
         // Add EXTRA_VOIP_BACKWARDS_COMPATIBILITY_SUPPORTED for pre-U testing
-        val backwardsCompatExtra = if (!TestUtils.buildIsAtLeastU())
-            Pair(CallsManager.EXTRA_VOIP_BACKWARDS_COMPATIBILITY_SUPPORTED, true)
-        else null
+        val backwardsCompatExtra = configureCapabilityExchangeTypeTest()
         addAndVerifyCallExtensionType(
             TestUtils.OUTGOING_CALL_ATTRIBUTES,
             InCallServiceCompat.CAPABILITY_EXCHANGE,
@@ -140,6 +133,27 @@
     }
 
     /**
+     * Assert that for calls supporting [InCallServiceCompat.CAPABILITY_EXCHANGE] that capability
+     * exchange between the VOIP app and associated ICS is successful. This is signaled from the
+     * ICS side when the feature setup is completed via CapabilityExchange#featureSetupComplete.
+     *
+     * Note: The version codes for V is not available so we need to enforce a strict manual check
+     * to ensure the V test path is not executed by incompatible devices.
+     */
+    @LargeTest
+    @Test(timeout = 10000)
+    fun testCapabilityExchangeNegotiationSuccessful() {
+        // Add EXTRA_VOIP_BACKWARDS_COMPATIBILITY_SUPPORTED for pre-U testing
+        val backwardsCompatExtra = configureCapabilityExchangeTypeTest()
+        verifyICSCapabilitiesNegotiatedWithVoipApp(
+            TestUtils.OUTGOING_CALL_ATTRIBUTES,
+            // Waiting is not required for U+ testing
+            waitForCallDetailExtras = !TestUtils.buildIsAtLeastU(),
+            extraToInclude = backwardsCompatExtra
+        )
+    }
+
+    /**
      * Assert that NONE is the extension type for calls with phone accounts that do not support
      * transactional ops. Note that the caller must have had the read phone numbers permission.
      *
@@ -198,21 +212,9 @@
         runBlocking {
             assertWithinTimeout_addCall(callAttributesCompat) {
                 launch {
-                    val call = TestUtils.waitOnInCallServiceToReachXCalls(1)
-                    Assert.assertNotNull("The returned Call object is <NULL>", call!!)
-
                     // Enforce waiting logic to ensure that the call details extras are populated.
-                    if (waitForCallDetailExtras) {
-                        TestUtils.waitOnCallExtras(call)
-                    }
-
-                    val callDetails = call.details
-                    // Clear out extras to isolate the testing scenarios.
-                    call.details.extras?.clear()
-                    // Add extraToInclude for testing.
-                    if (extraToInclude != null) {
-                        callDetails.extras?.putBoolean(extraToInclude.first, extraToInclude.second)
-                    }
+                    val call = configureCallWithSanitizedExtras(
+                        waitForCallDetailExtras, extraToInclude)
 
                     // Assert call extension type.
                     assertEquals(expectedType, inCallServiceCompat.resolveCallExtensionsType(call))
@@ -224,4 +226,82 @@
             }
         }
     }
+
+    /**
+     * Helper to add a call via CallsManager#addCall and verify that the capabilities are properly
+     * negotiated between the VOIP app and ICS's given that the ICS supports the exchange
+     * ([InCallServiceCompat.CAPABILITY_EXCHANGE]).
+     *
+     * @param callAttributesCompat for the call.
+     * @param waitForCallDetailExtras used for waiting on the call details extras to be non-null.
+     * @param extraToInclude as part of the call extras.
+     */
+    @OptIn(DelicateCoroutinesApi::class)
+    private fun verifyICSCapabilitiesNegotiatedWithVoipApp(
+        callAttributesCompat: CallAttributesCompat,
+        waitForCallDetailExtras: Boolean = true,
+        extraToInclude: Pair<String, Boolean>? = null
+    ) {
+        runBlocking {
+            assertWithinTimeout_addCall(callAttributesCompat) {
+                launch {
+                    // Enforce waiting logic to ensure that the call details extras are populated.
+                    val call = configureCallWithSanitizedExtras(
+                        waitForCallDetailExtras, extraToInclude)
+                    // Initiate capability negotiation from ICS side with a new coroutine via
+                    // GlobalScope. This will ensure that the client/server tasks can operate
+                    // independently. Note that runBlocking uses an internal dispatcher (not the
+                    // same as Dispatchers.Main).
+                    GlobalScope.async {
+                        Assert.assertTrue(inCallServiceCompat.initiateICSCapabilityExchange(call))
+                    }.await()
+                    // Always send disconnect signal if possible.
+                    assertEquals(
+                        CallControlResult.Success(),
+                        disconnect(DisconnectCause(DisconnectCause.LOCAL)))
+                }
+            }
+        }
+    }
+
+    /**
+     * Helper to retrieve the call from MockInCallService and wait for any call detail extras
+     * to be populated, if needed.
+     */
+    private suspend fun configureCallWithSanitizedExtras(
+        waitForCallDetailExtras: Boolean,
+        extraToInclude: Pair<String, Boolean>? = null
+    ): Call {
+        val call = TestUtils.waitOnInCallServiceToReachXCalls(1)
+        Assert.assertNotNull("The returned Call object is <NULL>", call!!)
+
+        // Enforce waiting logic to ensure that the call details extras are populated.
+        if (waitForCallDetailExtras) {
+            TestUtils.waitOnCallExtras(call)
+        }
+
+        val callDetails = call.details
+        // Clear out extras to isolate the testing scenarios.
+        call.details.extras?.clear()
+        // Add extraToInclude for testing.
+        if (extraToInclude != null) {
+            callDetails.extras?.putBoolean(extraToInclude.first, extraToInclude.second)
+        }
+        return call
+    }
+
+    private fun configureCapabilityExchangeTypeTest(): Pair<String, Boolean>? {
+        if (TestUtils.buildIsAtLeastU()) {
+            Log.w(TAG, "Setting up v2 tests for U+ device")
+            setUpV2Test()
+        } else {
+            Log.w(TAG, "Setting up backwards compatibility tests for pre-U device")
+            setUpBackwardsCompatTest()
+        }
+
+        // Add EXTRA_VOIP_BACKWARDS_COMPATIBILITY_SUPPORTED for pre-U testing
+        return if (!TestUtils.buildIsAtLeastU())
+            Pair(CallsManager.EXTRA_VOIP_BACKWARDS_COMPATIBILITY_SUPPORTED, true)
+        else null
+    }
 }
diff --git a/core/core-telecom/src/androidTest/java/androidx/core/telecom/test/utils/TestUtils.kt b/core/core-telecom/src/androidTest/java/androidx/core/telecom/test/utils/TestUtils.kt
index dc1455a..1c59acb 100644
--- a/core/core-telecom/src/androidTest/java/androidx/core/telecom/test/utils/TestUtils.kt
+++ b/core/core-telecom/src/androidTest/java/androidx/core/telecom/test/utils/TestUtils.kt
@@ -326,22 +326,29 @@
      */
     suspend fun waitOnCallExtras(call: Call) {
         try {
-            withTimeout(TestUtils.WAIT_ON_CALL_STATE_TIMEOUT) {
-                while (isActive /* aka  within timeout window */ && (
-                        call.details?.extras == null || call.details.extras.isEmpty)) {
+            withTimeout(WAIT_ON_CALL_STATE_TIMEOUT) {
+                while (isActive /* aka  within timeout window */ && isCallDetailExtrasEmpty(call)) {
                     yield() // another mechanism to stop the while loop if the coroutine is dead
                     delay(1) // sleep x millisecond(s) instead of spamming check
                 }
             }
         } catch (e: TimeoutCancellationException) {
-            Log.i(TestUtils.LOG_TAG, "waitOnCallExtras: timeout reached")
-            TestUtils.dumpTelecom()
+            Log.i(LOG_TAG, "waitOnCallExtras: timeout reached")
+            dumpTelecom()
             MockInCallService.destroyAllCalls()
             throw AssertionError("Expected call detail extras to be non-null.")
         }
     }
 
     /**
+     * Helper used to determine if the call detail extras is empty or null, which is used as a basis
+     * for waiting in the voip app action tests (around capability exchange).
+     */
+    private fun isCallDetailExtrasEmpty(call: Call): Boolean {
+        return call.details?.extras == null || call.details.extras.isEmpty
+    }
+
+    /**
      * Used for testing in V. The build version is not available for referencing so this helper
      * performs a manual check instead.
      */
diff --git a/core/core-telecom/src/main/java/androidx/core/telecom/CallsManager.kt b/core/core-telecom/src/main/java/androidx/core/telecom/CallsManager.kt
index 716bebc..57bb60a 100644
--- a/core/core-telecom/src/main/java/androidx/core/telecom/CallsManager.kt
+++ b/core/core-telecom/src/main/java/androidx/core/telecom/CallsManager.kt
@@ -94,6 +94,24 @@
             "android.telecom.extra.VOIP_BACKWARDS_COMPATIBILITY_SUPPORTED"
 
         /**
+         * EVENT used by InCallService as part of sendCallEvent to notify the VOIP Application that
+         * this InCallService supports jetpack extensions
+         */
+        internal const val EVENT_JETPACK_CAPABILITY_EXCHANGE =
+            "android.telecom.event.CAPABILITY_EXCHANGE";
+
+        /**
+         * VERSION used for handling future compatibility in capability exchange.
+         */
+        internal const val EXTRA_CAPABILITY_EXCHANGE_VERSION = "CAPABILITY_EXCHANGE_VERSION"
+
+        /**
+         * BINDER used for handling capability exchange between the ICS and VOIP app sides, sent
+         * as part of sendCallEvent in the included extras.
+         */
+        internal const val EXTRA_CAPABILITY_EXCHANGE_BINDER = "CAPABILITY_EXCHANGE_BINDER"
+
+        /**
          * The connection is using transactional call APIs.
          *
          *
@@ -300,7 +318,7 @@
                 mDirectExecutor,
                 callControlOutcomeReceiver,
                 CallSession.CallControlCallbackImpl(callSession),
-                CallSession.CallEventCallbackImpl(callChannels)
+                CallSession.CallEventCallbackImpl(callChannels, coroutineContext)
             )
 
             pauseExecutionUntilCallIsReady_orTimeout(openResult)
diff --git a/core/core-telecom/src/main/java/androidx/core/telecom/extensions/CapabilityExchange.kt b/core/core-telecom/src/main/java/androidx/core/telecom/extensions/CapabilityExchange.kt
new file mode 100644
index 0000000..c43cc79
--- /dev/null
+++ b/core/core-telecom/src/main/java/androidx/core/telecom/extensions/CapabilityExchange.kt
@@ -0,0 +1,48 @@
+/*
+ * 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.core.telecom.extensions
+
+import androidx.annotation.RestrictTo
+import androidx.core.telecom.util.ExperimentalAppActions
+import java.util.concurrent.CountDownLatch
+
+@ExperimentalAppActions
+@RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY)
+internal class CapabilityExchange() : ICapabilityExchange.Stub() {
+    internal lateinit var capabilityExchangeListener: ICapabilityExchangeListener
+    internal lateinit var voipCapabilities: MutableList<Capability>
+    internal var hasFeatureSetupCompleted = false
+
+    internal val negotiatedCapabilitiesLatch = CountDownLatch(1)
+    internal val featureSetUpCompleteLatch = CountDownLatch(1)
+
+    override fun setListener(l: ICapabilityExchangeListener?) {
+        l?.let { capabilityExchangeListener = l }
+    }
+
+    override fun negotiateCapabilities(capabilities: MutableList<Capability>?) {
+        capabilities?.let {
+            voipCapabilities = capabilities
+            negotiatedCapabilitiesLatch.countDown()
+        }
+    }
+
+    override fun featureSetupComplete() {
+        hasFeatureSetupCompleted = true
+        featureSetUpCompleteLatch.countDown()
+    }
+}
diff --git a/core/core-telecom/src/main/java/androidx/core/telecom/extensions/CapabilityExchangeListener.kt b/core/core-telecom/src/main/java/androidx/core/telecom/extensions/CapabilityExchangeListener.kt
new file mode 100644
index 0000000..b583266
--- /dev/null
+++ b/core/core-telecom/src/main/java/androidx/core/telecom/extensions/CapabilityExchangeListener.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.core.telecom.extensions
+
+import androidx.annotation.RestrictTo
+import androidx.core.telecom.util.ExperimentalAppActions
+import java.util.concurrent.CountDownLatch
+
+@ExperimentalAppActions
+@RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY)
+internal class CapabilityExchangeListener() : ICapabilityExchangeListener.Stub() {
+    internal val onCapabilitiesNegotiatedLatch = CountDownLatch(1)
+    internal lateinit var negotiatedCapabilities: MutableList<Capability>
+
+    override fun onCapabilitiesNegotiated(filteredCapabilities: MutableList<Capability>?) {
+        filteredCapabilities?.let {
+            negotiatedCapabilities = filteredCapabilities
+            onCapabilitiesNegotiatedLatch.countDown()
+        }
+    }
+}
diff --git a/core/core-telecom/src/main/java/androidx/core/telecom/internal/CallSession.kt b/core/core-telecom/src/main/java/androidx/core/telecom/internal/CallSession.kt
index 00e5817..07d9fd1 100644
--- a/core/core-telecom/src/main/java/androidx/core/telecom/internal/CallSession.kt
+++ b/core/core-telecom/src/main/java/androidx/core/telecom/internal/CallSession.kt
@@ -21,11 +21,16 @@
 import android.os.ParcelUuid
 import android.telecom.CallException
 import android.telecom.DisconnectCause
+import android.util.Log
 import androidx.annotation.RequiresApi
 import androidx.core.telecom.CallControlResult
 import androidx.core.telecom.CallControlScope
 import androidx.core.telecom.CallEndpointCompat
+import androidx.core.telecom.CallsManager
+import androidx.core.telecom.extensions.Capability
+import androidx.core.telecom.internal.utils.CapabilityExchangeUtils
 import androidx.core.telecom.internal.utils.EndpointUtils
+import androidx.core.telecom.util.ExperimentalAppActions
 import java.util.function.Consumer
 import kotlin.coroutines.CoroutineContext
 import kotlinx.coroutines.CompletableDeferred
@@ -74,8 +79,17 @@
         }
     }
 
-    class CallEventCallbackImpl(private val callChannels: CallChannels) :
+    class CallEventCallbackImpl(
+        private val callChannels: CallChannels,
+        private val coroutineContext: CoroutineContext
+    ) :
         android.telecom.CallEventCallback {
+        private val CALL_EVENT_CALLBACK_TAG = CallEventCallbackImpl::class.simpleName
+        /**
+         * Stubbed supported capabilities for v2 connections.
+         */
+        @ExperimentalAppActions
+        private val supportedCapabilities = mutableListOf(Capability())
         override fun onCallEndpointChanged(
             endpoint: android.telecom.CallEndpoint
         ) {
@@ -100,8 +114,19 @@
             TODO("Implement with the CallStreaming code")
         }
 
+        @ExperimentalAppActions
         override fun onEvent(event: String, extras: Bundle) {
-            TODO("Implement when events are agreed upon by ICS and package")
+            // Call events are sent via Call#sendCallEvent(event, extras). Begin initial capability
+            // exchange procedure once we know that the ICS supports it.
+            if (event == CallsManager.EVENT_JETPACK_CAPABILITY_EXCHANGE) {
+                Log.i(CALL_EVENT_CALLBACK_TAG, "onEvent: EVENT_JETPACK_CAPABILITY_EXCHANGE: " +
+                        "beginning capability exchange.")
+                // Launch a new coroutine from the context of the current coroutine
+                CoroutineScope(coroutineContext).launch {
+                        CapabilityExchangeUtils.initiateVoipAppCapabilityExchange(
+                            extras, supportedCapabilities, CALL_EVENT_CALLBACK_TAG)
+                }
+            }
         }
     }
 
diff --git a/core/core-telecom/src/main/java/androidx/core/telecom/internal/CallSessionLegacy.kt b/core/core-telecom/src/main/java/androidx/core/telecom/internal/CallSessionLegacy.kt
index 2142201..ef45482 100644
--- a/core/core-telecom/src/main/java/androidx/core/telecom/internal/CallSessionLegacy.kt
+++ b/core/core-telecom/src/main/java/androidx/core/telecom/internal/CallSessionLegacy.kt
@@ -19,6 +19,7 @@
 import android.bluetooth.BluetoothDevice
 import android.os.Build
 import android.os.Build.VERSION_CODES
+import android.os.Bundle
 import android.os.ParcelUuid
 import android.telecom.Call
 import android.telecom.CallAudioState
@@ -30,7 +31,11 @@
 import androidx.core.telecom.CallControlScope
 import androidx.core.telecom.CallEndpointCompat
 import androidx.core.telecom.CallException
+import androidx.core.telecom.CallsManager
+import androidx.core.telecom.extensions.Capability
+import androidx.core.telecom.internal.utils.CapabilityExchangeUtils
 import androidx.core.telecom.internal.utils.EndpointUtils
+import androidx.core.telecom.util.ExperimentalAppActions
 import kotlin.coroutines.CoroutineContext
 import kotlinx.coroutines.CompletableDeferred
 import kotlinx.coroutines.CoroutineScope
@@ -53,6 +58,12 @@
     private val TAG: String = CallSessionLegacy::class.java.simpleName
     private var mCachedBluetoothDevices: ArrayList<BluetoothDevice> = ArrayList()
 
+    /**
+     * Stubbed supported capabilities for legacy connections.
+     */
+    @ExperimentalAppActions
+    private val supportedCapabilities = mutableListOf(Capability())
+
     companion object {
         // CallStates. All these states mirror the values in the platform.
         const val STATE_INITIALIZING = 0
@@ -108,6 +119,27 @@
 
     /**
      * =========================================================================================
+     *                Call Event Updates
+     * =========================================================================================
+     */
+    @ExperimentalAppActions
+    override fun onCallEvent(event: String?, extras: Bundle?) {
+        super.onCallEvent(event, extras)
+        // Call events are sent via Call#sendCallEvent(event, extras). Begin initial capability
+        // exchange procedure once we know that the ICS supports it.
+        if (event == CallsManager.EVENT_JETPACK_CAPABILITY_EXCHANGE) {
+            Log.i(TAG, "onCallEvent: EVENT_JETPACK_CAPABILITY_EXCHANGE: " +
+                "beginning capability exchange.")
+            // Launch a new coroutine from the context of the current coroutine
+            CoroutineScope(coroutineContext).launch {
+                CapabilityExchangeUtils.initiateVoipAppCapabilityExchange(
+                    extras!!, supportedCapabilities, TAG)
+            }
+        }
+    }
+
+    /**
+     * =========================================================================================
      *                CallControl
      * =========================================================================================
      */
diff --git a/core/core-telecom/src/main/java/androidx/core/telecom/internal/InCallServiceCompat.kt b/core/core-telecom/src/main/java/androidx/core/telecom/internal/InCallServiceCompat.kt
index f3063c0..6cb86aa 100644
--- a/core/core-telecom/src/main/java/androidx/core/telecom/internal/InCallServiceCompat.kt
+++ b/core/core-telecom/src/main/java/androidx/core/telecom/internal/InCallServiceCompat.kt
@@ -30,14 +30,26 @@
 import androidx.annotation.RequiresApi
 import androidx.core.content.ContextCompat
 import androidx.core.telecom.CallsManager
+import androidx.core.telecom.extensions.Capability
+import androidx.core.telecom.extensions.CapabilityExchange
+import androidx.core.telecom.internal.utils.CapabilityExchangeUtils
+import androidx.core.telecom.util.ExperimentalAppActions
+import java.util.concurrent.TimeUnit
+import kotlin.coroutines.coroutineContext
+import kotlinx.coroutines.CoroutineScope
+import kotlinx.coroutines.TimeoutCancellationException
+import kotlinx.coroutines.async
+import kotlinx.coroutines.withTimeout
 
 /**
  * This class defines the Jetpack ICS layer which will be leveraged as part of supporting VOIP app
  * actions.
  */
-@RequiresApi(Build.VERSION_CODES.M)
+@ExperimentalAppActions
+@RequiresApi(Build.VERSION_CODES.O)
 internal class InCallServiceCompat(context: Context) : InCallService() {
     private val mContext: Context = context
+    private val mSupportedCapabilities = mutableListOf(Capability())
 
     companion object {
         /**
@@ -52,6 +64,11 @@
         internal const val CAPABILITY_EXCHANGE = 2
         internal const val UNKNOWN = 3
 
+        /**
+         * Current capability exchange version
+         */
+        internal const val CAPABILITY_EXCHANGE_VERSION = 1
+
         private val TAG = InCallServiceCompat::class.simpleName
     }
 
@@ -95,8 +112,6 @@
      * @return the extension type [InCallServiceCompat.CapabilityExchangeType] resolved for the
      * call.
      */
-    @RequiresApi(Build.VERSION_CODES.O)
-    @CapabilityExchangeType
     internal fun resolveCallExtensionsType(call: Call): Int {
         var callDetails = call.details
         val callExtras = callDetails?.extras ?: Bundle()
@@ -125,4 +140,80 @@
         Log.i(TAG, "Unable to resolve call extension type. Returning $UNKNOWN.")
         return UNKNOWN
     }
+
+    /**
+     * Initiate capability exchange negotiation between ICS and VOIP app. The acknowledgement begins
+     * when the ICS sends a call event with [CallsManager.EVENT_JETPACK_CAPABILITY_EXCHANGE] to
+     * notify the VOIP app to begin capability exchange negotiation. At that point, 3 stages of
+     * acknowledgement are required between the two parties in order for negotiation to succeed.
+     *
+     * This entails the ICS side waiting for the VOIP app to communicate its supported capabilities,
+     * the VOIP side waiting for the ICS side to communicate its supported capabilities, and the
+     * VOIP side signaling the ICS side that feature setup (negotiation) is complete. If any one of
+     * the aforementioned stages of ACK fails (i.e. timeout), the negotiation will fail.
+     *
+     * Note: Negotiation is only supported by InCallServices that support capability exchange
+     * ([InCallServiceCompat.CAPABILITY_EXCHANGE]).
+     *
+     * @param call to initiate capability exchange for.
+     * @return the capability negotiation status.
+     * between the ICS and VOIP app.
+     */
+    internal suspend fun initiateICSCapabilityExchange(call: Call): Boolean {
+        Log.i(TAG, "initiateICSCapabilityExchange: " +
+            "Starting capability negotiation with VOIP app...")
+
+        // Initialize binder for facilitating IPC (capability exchange) between ICS and VOIP app
+        // and notify VOIP app via a call event.
+        val capExchange = CapabilityExchange()
+        val extras = Bundle()
+        extras.putBinder(CallsManager.EXTRA_CAPABILITY_EXCHANGE_BINDER, capExchange)
+        extras.putInt(CallsManager.EXTRA_CAPABILITY_EXCHANGE_VERSION, CAPABILITY_EXCHANGE_VERSION)
+        call.sendCallEvent(CallsManager.EVENT_JETPACK_CAPABILITY_EXCHANGE, extras)
+
+        // Launch a new coroutine from the context of the current coroutine and wait for task to
+        // complete.
+        return CoroutineScope(coroutineContext).async {
+            beginCapabilityNegotiationAck(capExchange)
+        }.await()
+    }
+
+    /**
+     * Helper to start acknowledgement process for capability negotiation between the ICS and VOIP
+     * app.
+     */
+    private suspend fun beginCapabilityNegotiationAck(capExchange: CapabilityExchange): Boolean {
+        var negotiationAckStatus = false
+        try {
+            withTimeout(CapabilityExchangeUtils.CAPABILITY_NEGOTIATION_COROUTINE_TIMEOUT) {
+                // Wait for VOIP app to return its supported capabilities.
+                if (capExchange.negotiatedCapabilitiesLatch.await(
+                        CapabilityExchangeUtils.CAPABILITY_EXCHANGE_TIMEOUT,
+                        TimeUnit.MILLISECONDS)) {
+                    // Respond back to the VOIP app with the InCallService's supported
+                    // capabilities (stub empty capabilities until implementation is supported).
+                    capExchange.capabilityExchangeListener
+                        .onCapabilitiesNegotiated(mSupportedCapabilities)
+                    // Ensure that feature setup is signaled from VOIP app side.
+                    if (capExchange.featureSetUpCompleteLatch.await(
+                            CapabilityExchangeUtils.CAPABILITY_EXCHANGE_TIMEOUT,
+                            TimeUnit.MILLISECONDS)) {
+                        Log.i(TAG, "initiateICSCapabilityExchange: " +
+                            "Completed capability exchange feature set up.")
+                        negotiationAckStatus = true
+                    }
+                }
+
+                // Report negotiation acknowledgement failure, if it occurred.
+                if (!negotiationAckStatus) {
+                    Log.i(TAG, "initiateICSCapabilityExchange: Unable to complete capability " +
+                            "exchange feature set up.")
+                }
+            }
+        } catch (e: TimeoutCancellationException) {
+            Log.i(TAG, "initiateICSCapabilityExchange: Capability negotiation job timed " +
+                "out in ICS side.")
+        }
+        return negotiationAckStatus
+    }
 }
diff --git a/core/core-telecom/src/main/java/androidx/core/telecom/internal/JetpackConnectionService.kt b/core/core-telecom/src/main/java/androidx/core/telecom/internal/JetpackConnectionService.kt
index e1fe957..7d43f6a 100644
--- a/core/core-telecom/src/main/java/androidx/core/telecom/internal/JetpackConnectionService.kt
+++ b/core/core-telecom/src/main/java/androidx/core/telecom/internal/JetpackConnectionService.kt
@@ -197,6 +197,9 @@
             )
         }
 
+        // Explicitly set voip audio mode on connection side
+        jetpackConnection.audioModeIsVoip = true
+
         targetRequest.completableDeferred?.complete(jetpackConnection)
         mPendingConnectionRequests.remove(targetRequest)
         return jetpackConnection
diff --git a/core/core-telecom/src/main/java/androidx/core/telecom/internal/utils/CapabilityExchangeUtils.kt b/core/core-telecom/src/main/java/androidx/core/telecom/internal/utils/CapabilityExchangeUtils.kt
new file mode 100644
index 0000000..7f876d7
--- /dev/null
+++ b/core/core-telecom/src/main/java/androidx/core/telecom/internal/utils/CapabilityExchangeUtils.kt
@@ -0,0 +1,97 @@
+/*
+ * 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.core.telecom.internal.utils
+
+import android.os.Build
+import android.os.Bundle
+import android.util.Log
+import androidx.annotation.RequiresApi
+import androidx.core.telecom.CallsManager
+import androidx.core.telecom.extensions.Capability
+import androidx.core.telecom.extensions.CapabilityExchange
+import androidx.core.telecom.extensions.CapabilityExchangeListener
+import androidx.core.telecom.util.ExperimentalAppActions
+import java.util.concurrent.TimeUnit
+import kotlinx.coroutines.TimeoutCancellationException
+import kotlinx.coroutines.withTimeout
+
+@ExperimentalAppActions
+@RequiresApi(Build.VERSION_CODES.O)
+internal class CapabilityExchangeUtils {
+    companion object {
+        private val TAG = Companion::class.java.simpleName
+
+        /**
+         * Timeouts to help facilitate capability exchange negotiation between ICS and VOIP app.
+         */
+        internal const val CAPABILITY_EXCHANGE_TIMEOUT = 1000L
+        internal const val CAPABILITY_NEGOTIATION_COROUTINE_TIMEOUT = 3000L
+
+        /**
+         * Internal helper to help facilitate acknowledgement for capability negotiation between
+         * the VOIP app and ICS. This helper is invoked on the VOIP side where negotiation begins
+         * when we are notified via a call event (containing
+         * [CallsManager.EVENT_JETPACK_CAPABILITY_EXCHANGE]). The VOIP side is responsible for
+         * informing the ICS of its supported capabilities, receiving the ICS's supported
+         * capabilities (ACK), and informing the ICS that negotiation has completed. If the VOIP
+         * side is unable to receive the ICS supported capabilities, feature setup will fail and
+         * the ICS will report the status for negotiation as successful.
+         *
+         * @param extras received from call event.
+         * @param supportedCapabilities for the VOIP app.
+         * @param logTag to help identify if legacy or v2 APIs are being used.
+         */
+        internal suspend fun initiateVoipAppCapabilityExchange(
+            extras: Bundle,
+            supportedCapabilities: MutableList<Capability>,
+            logTag: String? = TAG
+        ) {
+            try {
+                withTimeout(CAPABILITY_NEGOTIATION_COROUTINE_TIMEOUT) {
+                    Log.i(logTag, "Starting capability negotiation with ICS...")
+                    var isFeatureSetupComplete = false
+                    // Retrieve binder from ICS.
+                    val capabilityExchange: CapabilityExchange? = extras.getBinder(
+                        CallsManager.EXTRA_CAPABILITY_EXCHANGE_BINDER) as CapabilityExchange?
+
+                    // Initialize capability exchange listener and set it on binder
+                    val capabilityExchangeListener = CapabilityExchangeListener()
+                    capabilityExchange?.let {
+                        capabilityExchange.setListener(capabilityExchangeListener)
+                        // Negotiate the supported VOIP app capabilities to the ICS (stub with empty
+                        // capabilities until the implementation is supported).
+                        capabilityExchange.negotiateCapabilities(supportedCapabilities)
+                        // Wait for the ICS to return its supported capabilities and notify that the
+                        // setup is complete.
+                        if (capabilityExchangeListener.onCapabilitiesNegotiatedLatch
+                                .await(CAPABILITY_EXCHANGE_TIMEOUT, TimeUnit.MILLISECONDS)) {
+                            capabilityExchange.featureSetupComplete()
+                            isFeatureSetupComplete = true
+                            Log.i(logTag, "Capability negotiation with ICS has completed.")
+                        }
+                    }
+
+                    if (!isFeatureSetupComplete) {
+                        Log.i(logTag, "Unable to receive supported capabilities from (ICS) client.")
+                    }
+                }
+            } catch (e: TimeoutCancellationException) {
+                Log.i(logTag, "Capability negotiation job timed out in VOIP app side.")
+            }
+        }
+    }
+}
diff --git a/core/core-telecom/src/main/java/androidx/core/telecom/internal/utils/Utils.kt b/core/core-telecom/src/main/java/androidx/core/telecom/internal/utils/Utils.kt
index 47121d6..32eca7c 100644
--- a/core/core-telecom/src/main/java/androidx/core/telecom/internal/utils/Utils.kt
+++ b/core/core-telecom/src/main/java/androidx/core/telecom/internal/utils/Utils.kt
@@ -77,6 +77,7 @@
             }
         }
 
+        @RequiresApi(VERSION_CODES.O)
         fun remapJetpackCapabilitiesToPlatformCapabilities(
             @CallsManager.Companion.Capability clientBitmapSelection: Int
         ): Int {
@@ -100,10 +101,12 @@
             return (bitMap.and(targetCapability)) == targetCapability
         }
 
+        @RequiresApi(VERSION_CODES.O)
         private fun hasJetpackVideoCallingCapability(bitMap: Int): Boolean {
             return hasCapability(CallsManager.CAPABILITY_SUPPORTS_VIDEO_CALLING, bitMap)
         }
 
+        @RequiresApi(VERSION_CODES.O)
         private fun hasJetpackSteamingCapability(bitMap: Int): Boolean {
             return hasCapability(CallsManager.CAPABILITY_SUPPORTS_CALL_STREAMING, bitMap)
         }
diff --git a/core/core/api/api_lint.ignore b/core/core/api/api_lint.ignore
index 2a14724..842f89f 100644
--- a/core/core/api/api_lint.ignore
+++ b/core/core/api/api_lint.ignore
@@ -537,6 +537,8 @@
     Missing nullability on parameter `in` in method `createFromParcel`
 MissingNullability: androidx.core.os.ParcelableCompatCreatorCallbacks#createFromParcel(android.os.Parcel, ClassLoader) parameter #1:
     Missing nullability on parameter `loader` in method `createFromParcel`
+MissingNullability: androidx.core.os.ParcelableCompatCreatorCallbacks#newArray(int):
+    Missing nullability on method `newArray` return
 MissingNullability: androidx.core.provider.FontsContractCompat.FontFamilyResult#getFonts():
     Missing nullability on method `getFonts` return
 MissingNullability: androidx.core.provider.FontsContractCompat.FontRequestCallback#onTypefaceRetrieved(android.graphics.Typeface) parameter #0:
@@ -611,6 +613,8 @@
     Missing nullability on parameter `tag` in method `getSpanFlags`
 MissingNullability: androidx.core.text.PrecomputedTextCompat#getSpanStart(Object) parameter #0:
     Missing nullability on parameter `tag` in method `getSpanStart`
+MissingNullability: androidx.core.text.PrecomputedTextCompat#getSpans(int, int, Class<T>):
+    Missing nullability on method `getSpans` return
 MissingNullability: androidx.core.text.PrecomputedTextCompat#getSpans(int, int, Class<T>) parameter #2:
     Missing nullability on parameter `type` in method `getSpans`
 MissingNullability: androidx.core.text.PrecomputedTextCompat#getTextFuture(CharSequence, androidx.core.text.PrecomputedTextCompat.Params, java.util.concurrent.Executor):
diff --git a/core/core/src/androidTest/java/androidx/core/hardware/display/DisplayManagerCompatTest.kt b/core/core/src/androidTest/java/androidx/core/hardware/display/DisplayManagerCompatTest.kt
index 4c92a70..90e8665 100644
--- a/core/core/src/androidTest/java/androidx/core/hardware/display/DisplayManagerCompatTest.kt
+++ b/core/core/src/androidTest/java/androidx/core/hardware/display/DisplayManagerCompatTest.kt
@@ -21,7 +21,6 @@
 import androidx.test.filters.SmallTest
 import androidx.test.platform.app.InstrumentationRegistry
 import org.junit.Assert.assertNotNull
-import org.junit.Assert.assertSame
 import org.junit.Before
 import org.junit.Test
 import org.junit.runner.RunWith
@@ -41,9 +40,6 @@
     fun testGetInstance() {
         val displayManagerA = DisplayManagerCompat.getInstance(context)
         assertNotNull(displayManagerA)
-
-        val displayManagerB = DisplayManagerCompat.getInstance(context)
-        assertSame(displayManagerA, displayManagerB)
     }
 
     @Test
diff --git a/core/core/src/androidTest/java/androidx/core/text/util/LinkifyCompatTest.java b/core/core/src/androidTest/java/androidx/core/text/util/LinkifyCompatTest.java
index e0caa0f..170471c 100644
--- a/core/core/src/androidTest/java/androidx/core/text/util/LinkifyCompatTest.java
+++ b/core/core/src/androidTest/java/androidx/core/text/util/LinkifyCompatTest.java
@@ -436,7 +436,7 @@
 
     @Test
     public void testAddLinks_doesNotMatchUrlsWithoutProtocolAndWithUnknownTld() {
-        String url = "thank.you";
+        String url = "thank.unknowntld";
         verifyAddLinksWithWebUrlFails("Should not match URL that does not start with a protocol "
                 + "and does not contain a known TLD", url);
     }
@@ -449,7 +449,7 @@
 
     @Test
     public void testAddLinks_doesNotMatchUrlsWithEmojiWithoutProtocolAndWithoutKnownTld() {
-        String url = "Thank\u263A.you";
+        String url = "Thank\u263A.unknowntld";
         verifyAddLinksWithWebUrlFails("Should not match URLs containing emoji and with unknown "
                 + "TLD", url);
     }
diff --git a/core/core/src/androidTest/java/androidx/core/util/PatternsCompatTest.java b/core/core/src/androidTest/java/androidx/core/util/PatternsCompatTest.java
index 97225b2..059881b 100644
--- a/core/core/src/androidTest/java/androidx/core/util/PatternsCompatTest.java
+++ b/core/core/src/androidTest/java/androidx/core/util/PatternsCompatTest.java
@@ -374,7 +374,7 @@
     @Test
     public void testAutoLinkWebUrl_doesNotMatchUrlsWithoutProtocolAndWithUnknownTld()
             throws Exception {
-        String url = "thank.you";
+        String url = "thank.unknowntld";
         assertFalse("Should not match URL that does not start with a protocol and " +
                         "does not contain a known TLD",
                 PatternsCompat.AUTOLINK_WEB_URL.matcher(url).matches());
@@ -397,7 +397,7 @@
     @Test
     public void testAutoLinkWebUrl_doesNotMatchUrlsWithEmojiWithoutProtocolAndWithoutKnownTld()
             throws Exception {
-        String url = "Thank\u263A.you";
+        String url = "Thank\u263A.unknowntld";
         assertFalse("Should not match URLs containing emoji and with unknown TLD",
                 PatternsCompat.AUTOLINK_WEB_URL.matcher(url).matches());
     }
diff --git a/core/core/src/main/java/androidx/core/hardware/display/DisplayManagerCompat.java b/core/core/src/main/java/androidx/core/hardware/display/DisplayManagerCompat.java
index 214c8b5..4f6a511 100644
--- a/core/core/src/main/java/androidx/core/hardware/display/DisplayManagerCompat.java
+++ b/core/core/src/main/java/androidx/core/hardware/display/DisplayManagerCompat.java
@@ -27,16 +27,11 @@
 import androidx.annotation.Nullable;
 import androidx.annotation.RequiresApi;
 
-import java.lang.ref.WeakReference;
-import java.util.WeakHashMap;
-
 /**
  * Helper for accessing features in {@link android.hardware.display.DisplayManager}.
  */
 @SuppressWarnings("unused")
 public final class DisplayManagerCompat {
-    private static final WeakHashMap<Context, WeakReference<DisplayManagerCompat>> sInstances =
-            new WeakHashMap<>();
 
     /**
      * Display category: Presentation displays.
@@ -63,14 +58,7 @@
      */
     @NonNull
     public static DisplayManagerCompat getInstance(@NonNull Context context) {
-        synchronized (sInstances) {
-            WeakReference<DisplayManagerCompat> instance = sInstances.get(context);
-            if (instance == null || instance.get() == null) {
-                instance = new WeakReference<>(new DisplayManagerCompat(context));
-                sInstances.put(context, instance);
-            }
-            return instance.get();
-        }
+        return new DisplayManagerCompat(context);
     }
 
     /**
diff --git a/core/core/src/main/java/androidx/core/util/PatternsCompat.java b/core/core/src/main/java/androidx/core/util/PatternsCompat.java
index be438ad..16c9e50 100644
--- a/core/core/src/main/java/androidx/core/util/PatternsCompat.java
+++ b/core/core/src/main/java/androidx/core/util/PatternsCompat.java
@@ -29,126 +29,173 @@
     /**
      *  Regular expression to match all IANA top-level domains.
      *
-     *  List accurate as of 2015/11/24.  List taken from:
+     *  List accurate as of 2023/09/11.  List taken from:
      *  http://data.iana.org/TLD/tlds-alpha-by-domain.txt
      *  This pattern is auto-generated by frameworks/ex/common/tools/make-iana-tld-pattern.py
      */
     static final String IANA_TOP_LEVEL_DOMAINS =
         "(?:"
-        + "(?:aaa|aarp|abb|abbott|abogado|academy|accenture|accountant|accountants|aco|active"
-        + "|actor|ads|adult|aeg|aero|afl|agency|aig|airforce|airtel|allfinanz|alsace|amica|amsterdam"
-        + "|android|apartments|app|apple|aquarelle|aramco|archi|army|arpa|arte|asia|associates"
-        + "|attorney|auction|audio|auto|autos|axa|azure|a[cdefgilmoqrstuwxz])"
-        + "|(?:band|bank|bar|barcelona|barclaycard|barclays|bargains|bauhaus|bayern|bbc|bbva"
-        + "|bcn|beats|beer|bentley|berlin|best|bet|bharti|bible|bid|bike|bing|bingo|bio|biz|black"
-        + "|blackfriday|bloomberg|blue|bms|bmw|bnl|bnpparibas|boats|bom|bond|boo|boots|boutique"
-        + "|bradesco|bridgestone|broadway|broker|brother|brussels|budapest|build|builders|business"
-        + "|buzz|bzh|b[abdefghijmnorstvwyz])"
-        + "|(?:cab|cafe|cal|camera|camp|cancerresearch|canon|capetown|capital|car|caravan|cards"
-        + "|care|career|careers|cars|cartier|casa|cash|casino|cat|catering|cba|cbn|ceb|center|ceo"
-        + "|cern|cfa|cfd|chanel|channel|chat|cheap|chloe|christmas|chrome|church|cipriani|cisco"
-        + "|citic|city|cityeats|claims|cleaning|click|clinic|clothing|cloud|club|clubmed|coach"
-        + "|codes|coffee|college|cologne|com|commbank|community|company|computer|comsec|condos"
-        + "|construction|consulting|contractors|cooking|cool|coop|corsica|country|coupons|courses"
-        + "|credit|creditcard|creditunion|cricket|crown|crs|cruises|csc|cuisinella|cymru|cyou|c[acdfghiklmnoruvwxyz])"
-        + "|(?:dabur|dad|dance|date|dating|datsun|day|dclk|deals|degree|delivery|dell|delta"
-        + "|democrat|dental|dentist|desi|design|dev|diamonds|diet|digital|direct|directory|discount"
-        + "|dnp|docs|dog|doha|domains|doosan|download|drive|durban|dvag|d[ejkmoz])"
-        + "|(?:earth|eat|edu|education|email|emerck|energy|engineer|engineering|enterprises"
-        + "|epson|equipment|erni|esq|estate|eurovision|eus|events|everbank|exchange|expert|exposed"
-        + "|express|e[cegrstu])"
-        + "|(?:fage|fail|fairwinds|faith|family|fan|fans|farm|fashion|feedback|ferrero|film"
-        + "|final|finance|financial|firmdale|fish|fishing|fit|fitness|flights|florist|flowers|flsmidth"
-        + "|fly|foo|football|forex|forsale|forum|foundation|frl|frogans|fund|furniture|futbol|fyi"
-        + "|f[ijkmor])"
-        + "|(?:gal|gallery|game|garden|gbiz|gdn|gea|gent|genting|ggee|gift|gifts|gives|giving"
-        + "|glass|gle|global|globo|gmail|gmo|gmx|gold|goldpoint|golf|goo|goog|google|gop|gov|grainger"
-        + "|graphics|gratis|green|gripe|group|gucci|guge|guide|guitars|guru|g[abdefghilmnpqrstuwy])"
-        + "|(?:hamburg|hangout|haus|healthcare|help|here|hermes|hiphop|hitachi|hiv|hockey|holdings"
-        + "|holiday|homedepot|homes|honda|horse|host|hosting|hoteles|hotmail|house|how|hsbc|hyundai"
-        + "|h[kmnrtu])"
-        + "|(?:ibm|icbc|ice|icu|ifm|iinet|immo|immobilien|industries|infiniti|info|ing|ink|institute"
-        + "|insure|int|international|investments|ipiranga|irish|ist|istanbul|itau|iwc|i[delmnoqrst])"
-        + "|(?:jaguar|java|jcb|jetzt|jewelry|jlc|jll|jobs|joburg|jprs|juegos|j[emop])"
-        + "|(?:kaufen|kddi|kia|kim|kinder|kitchen|kiwi|koeln|komatsu|krd|kred|kyoto|k[eghimnprwyz])"
-        + "|(?:lacaixa|lancaster|land|landrover|lasalle|lat|latrobe|law|lawyer|lds|lease|leclerc"
-        + "|legal|lexus|lgbt|liaison|lidl|life|lifestyle|lighting|limited|limo|linde|link|live"
-        + "|lixil|loan|loans|lol|london|lotte|lotto|love|ltd|ltda|lupin|luxe|luxury|l[abcikrstuvy])"
-        + "|(?:madrid|maif|maison|man|management|mango|market|marketing|markets|marriott|mba"
-        + "|media|meet|melbourne|meme|memorial|men|menu|meo|miami|microsoft|mil|mini|mma|mobi|moda"
-        + "|moe|moi|mom|monash|money|montblanc|mormon|mortgage|moscow|motorcycles|mov|movie|movistar"
-        + "|mtn|mtpc|mtr|museum|mutuelle|m[acdeghklmnopqrstuvwxyz])"
-        + "|(?:nadex|nagoya|name|navy|nec|net|netbank|network|neustar|new|news|nexus|ngo|nhk"
-        + "|nico|ninja|nissan|nokia|nra|nrw|ntt|nyc|n[acefgilopruz])"
-        + "|(?:obi|office|okinawa|omega|one|ong|onl|online|ooo|oracle|orange|org|organic|osaka"
-        + "|otsuka|ovh|om)"
-        + "|(?:page|panerai|paris|partners|parts|party|pet|pharmacy|philips|photo|photography"
-        + "|photos|physio|piaget|pics|pictet|pictures|ping|pink|pizza|place|play|playstation|plumbing"
-        + "|plus|pohl|poker|porn|post|praxi|press|pro|prod|productions|prof|properties|property"
-        + "|protection|pub|p[aefghklmnrstwy])"
-        + "|(?:qpon|quebec|qa)"
-        + "|(?:racing|realtor|realty|recipes|red|redstone|rehab|reise|reisen|reit|ren|rent|rentals"
-        + "|repair|report|republican|rest|restaurant|review|reviews|rich|ricoh|rio|rip|rocher|rocks"
-        + "|rodeo|rsvp|ruhr|run|rwe|ryukyu|r[eosuw])"
-        + "|(?:saarland|sakura|sale|samsung|sandvik|sandvikcoromant|sanofi|sap|sapo|sarl|saxo"
-        + "|sbs|sca|scb|schmidt|scholarships|school|schule|schwarz|science|scor|scot|seat|security"
-        + "|seek|sener|services|seven|sew|sex|sexy|shiksha|shoes|show|shriram|singles|site|ski"
-        + "|sky|skype|sncf|soccer|social|software|sohu|solar|solutions|sony|soy|space|spiegel|spreadbetting"
-        + "|srl|stada|starhub|statoil|stc|stcgroup|stockholm|studio|study|style|sucks|supplies"
-        + "|supply|support|surf|surgery|suzuki|swatch|swiss|sydney|systems|s[abcdeghijklmnortuvxyz])"
-        + "|(?:tab|taipei|tatamotors|tatar|tattoo|tax|taxi|team|tech|technology|tel|telefonica"
-        + "|temasek|tennis|thd|theater|theatre|tickets|tienda|tips|tires|tirol|today|tokyo|tools"
-        + "|top|toray|toshiba|tours|town|toyota|toys|trade|trading|training|travel|trust|tui|t[cdfghjklmnortvwz])"
-        + "|(?:ubs|university|uno|uol|u[agksyz])"
-        + "|(?:vacations|vana|vegas|ventures|versicherung|vet|viajes|video|villas|vin|virgin"
-        + "|vision|vista|vistaprint|viva|vlaanderen|vodka|vote|voting|voto|voyage|v[aceginu])"
-        + "|(?:wales|walter|wang|watch|webcam|website|wed|wedding|weir|whoswho|wien|wiki|williamhill"
-        + "|win|windows|wine|wme|work|works|world|wtc|wtf|w[fs])"
-        + "|(?:\u03b5\u03bb|\u0431\u0435\u043b|\u0434\u0435\u0442\u0438|\u043a\u043e\u043c|\u043c\u043a\u0434"
+        + "(?:aaa|aarp|abb|abbott|abbvie|abc|able|abogado|abudhabi|academy|accenture|accountant"
+        + "|accountants|aco|actor|ads|adult|aeg|aero|aetna|afl|africa|agakhan|agency|aig|airbus"
+        + "|airforce|airtel|akdn|alibaba|alipay|allfinanz|allstate|ally|alsace|alstom|amazon|americanexpress"
+        + "|americanfamily|amex|amfam|amica|amsterdam|analytics|android|anquan|anz|aol|apartments"
+        + "|app|apple|aquarelle|arab|aramco|archi|army|arpa|art|arte|asda|asia|associates|athleta"
+        + "|attorney|auction|audi|audible|audio|auspost|author|auto|autos|avianca|aws|axa|azure"
+        + "|a[cdefgilmoqrstuwxz])"
+        + "|(?:baby|baidu|banamex|bananarepublic|band|bank|bar|barcelona|barclaycard|barclays"
+        + "|barefoot|bargains|baseball|basketball|bauhaus|bayern|bbc|bbt|bbva|bcg|bcn|beats|beauty"
+        + "|beer|bentley|berlin|best|bestbuy|bet|bharti|bible|bid|bike|bing|bingo|bio|biz|black"
+        + "|blackfriday|blockbuster|blog|bloomberg|blue|bms|bmw|bnpparibas|boats|boehringer|bofa"
+        + "|bom|bond|boo|book|booking|bosch|bostik|boston|bot|boutique|box|bradesco|bridgestone"
+        + "|broadway|broker|brother|brussels|build|builders|business|buy|buzz|bzh|b[abdefghijmnorstvwyz])"
+        + "|(?:cab|cafe|cal|call|calvinklein|cam|camera|camp|canon|capetown|capital|capitalone"
+        + "|car|caravan|cards|care|career|careers|cars|casa|case|cash|casino|cat|catering|catholic"
+        + "|cba|cbn|cbre|cbs|center|ceo|cern|cfa|cfd|chanel|channel|charity|chase|chat|cheap|chintai"
+        + "|christmas|chrome|church|cipriani|circle|cisco|citadel|citi|citic|city|cityeats|claims"
+        + "|cleaning|click|clinic|clinique|clothing|cloud|club|clubmed|coach|codes|coffee|college"
+        + "|cologne|com|comcast|commbank|community|company|compare|computer|comsec|condos|construction"
+        + "|consulting|contact|contractors|cooking|cool|coop|corsica|country|coupon|coupons|courses"
+        + "|cpa|credit|creditcard|creditunion|cricket|crown|crs|cruise|cruises|cuisinella|cymru"
+        + "|cyou|c[acdfghiklmnoruvwxyz])"
+        + "|(?:dabur|dad|dance|data|date|dating|datsun|day|dclk|dds|deal|dealer|deals|degree"
+        + "|delivery|dell|deloitte|delta|democrat|dental|dentist|desi|design|dev|dhl|diamonds|diet"
+        + "|digital|direct|directory|discount|discover|dish|diy|dnp|docs|doctor|dog|domains|dot"
+        + "|download|drive|dtv|dubai|dunlop|dupont|durban|dvag|dvr|d[ejkmoz])"
+        + "|(?:earth|eat|eco|edeka|edu|education|email|emerck|energy|engineer|engineering|enterprises"
+        + "|epson|equipment|ericsson|erni|esq|estate|etisalat|eurovision|eus|events|exchange|expert"
+        + "|exposed|express|extraspace|e[cegrstu])"
+        + "|(?:fage|fail|fairwinds|faith|family|fan|fans|farm|farmers|fashion|fast|fedex|feedback"
+        + "|ferrari|ferrero|fidelity|fido|film|final|finance|financial|fire|firestone|firmdale"
+        + "|fish|fishing|fit|fitness|flickr|flights|flir|florist|flowers|fly|foo|food|football"
+        + "|ford|forex|forsale|forum|foundation|fox|free|fresenius|frl|frogans|frontdoor|frontier"
+        + "|ftr|fujitsu|fun|fund|furniture|futbol|fyi|f[ijkmor])"
+        + "|(?:gal|gallery|gallo|gallup|game|games|gap|garden|gay|gbiz|gdn|gea|gent|genting"
+        + "|george|ggee|gift|gifts|gives|giving|glass|gle|global|globo|gmail|gmbh|gmo|gmx|godaddy"
+        + "|gold|goldpoint|golf|goo|goodyear|goog|google|gop|got|gov|grainger|graphics|gratis|green"
+        + "|gripe|grocery|group|guardian|gucci|guge|guide|guitars|guru|g[abdefghilmnpqrstuwy])"
+        + "|(?:hair|hamburg|hangout|haus|hbo|hdfc|hdfcbank|health|healthcare|help|helsinki|here"
+        + "|hermes|hiphop|hisamitsu|hitachi|hiv|hkt|hockey|holdings|holiday|homedepot|homegoods"
+        + "|homes|homesense|honda|horse|hospital|host|hosting|hot|hotels|hotmail|house|how|hsbc"
+        + "|hughes|hyatt|hyundai|h[kmnrtu])"
+        + "|(?:ibm|icbc|ice|icu|ieee|ifm|ikano|imamat|imdb|immo|immobilien|inc|industries|infiniti"
+        + "|info|ing|ink|institute|insurance|insure|int|international|intuit|investments|ipiranga"
+        + "|irish|ismaili|ist|istanbul|itau|itv|i[delmnoqrst])"
+        + "|(?:jaguar|java|jcb|jeep|jetzt|jewelry|jio|jll|jmp|jnj|jobs|joburg|jot|joy|jpmorgan"
+        + "|jprs|juegos|juniper|j[emop])"
+        + "|(?:kaufen|kddi|kerryhotels|kerrylogistics|kerryproperties|kfh|kia|kids|kim|kinder"
+        + "|kindle|kitchen|kiwi|koeln|komatsu|kosher|kpmg|kpn|krd|kred|kuokgroup|kyoto|k[eghimnprwyz])"
+        + "|(?:lacaixa|lamborghini|lamer|lancaster|land|landrover|lanxess|lasalle|lat|latino"
+        + "|latrobe|law|lawyer|lds|lease|leclerc|lefrak|legal|lego|lexus|lgbt|lidl|life|lifeinsurance"
+        + "|lifestyle|lighting|like|lilly|limited|limo|lincoln|link|lipsy|live|living|llc|llp|loan"
+        + "|loans|locker|locus|lol|london|lotte|lotto|love|lpl|lplfinancial|ltd|ltda|lundbeck|luxe"
+        + "|luxury|l[abcikrstuvy])"
+        + "|(?:madrid|maif|maison|makeup|man|management|mango|map|market|marketing|markets|marriott"
+        + "|marshalls|mattel|mba|mckinsey|med|media|meet|melbourne|meme|memorial|men|menu|merckmsd"
+        + "|miami|microsoft|mil|mini|mint|mit|mitsubishi|mlb|mls|mma|mobi|mobile|moda|moe|moi|mom"
+        + "|monash|money|monster|mormon|mortgage|moscow|moto|motorcycles|mov|movie|msd|mtn|mtr"
+        + "|museum|music|m[acdeghklmnopqrstuvwxyz])"
+        + "|(?:nab|nagoya|name|natura|navy|nba|nec|net|netbank|netflix|network|neustar|new|news"
+        + "|next|nextdirect|nexus|nfl|ngo|nhk|nico|nike|nikon|ninja|nissan|nissay|nokia|norton"
+        + "|now|nowruz|nowtv|nra|nrw|ntt|nyc|n[acefgilopruz])"
+        + "|(?:obi|observer|office|okinawa|olayan|olayangroup|oldnavy|ollo|omega|one|ong|onl"
+        + "|online|ooo|open|oracle|orange|org|organic|origins|osaka|otsuka|ott|ovh|om)"
+        + "|(?:page|panasonic|paris|pars|partners|parts|party|pay|pccw|pet|pfizer|pharmacy|phd"
+        + "|philips|phone|photo|photography|photos|physio|pics|pictet|pictures|pid|pin|ping|pink"
+        + "|pioneer|pizza|place|play|playstation|plumbing|plus|pnc|pohl|poker|politie|porn|post"
+        + "|pramerica|praxi|press|prime|pro|prod|productions|prof|progressive|promo|properties"
+        + "|property|protection|pru|prudential|pub|pwc|p[aefghklmnrstwy])"
+        + "|(?:qpon|quebec|quest|qa)"
+        + "|(?:racing|radio|read|realestate|realtor|realty|recipes|red|redstone|redumbrella"
+        + "|rehab|reise|reisen|reit|reliance|ren|rent|rentals|repair|report|republican|rest|restaurant"
+        + "|review|reviews|rexroth|rich|richardli|ricoh|ril|rio|rip|rocher|rocks|rodeo|rogers|room"
+        + "|rsvp|rugby|ruhr|run|rwe|ryukyu|r[eosuw])"
+        + "|(?:saarland|safe|safety|sakura|sale|salon|samsclub|samsung|sandvik|sandvikcoromant"
+        + "|sanofi|sap|sarl|sas|save|saxo|sbi|sbs|sca|scb|schaeffler|schmidt|scholarships|school"
+        + "|schule|schwarz|science|scot|search|seat|secure|security|seek|select|sener|services"
+        + "|seven|sew|sex|sexy|sfr|shangrila|sharp|shaw|shell|shia|shiksha|shoes|shop|shopping"
+        + "|shouji|show|showtime|silk|sina|singles|site|ski|skin|sky|skype|sling|smart|smile|sncf"
+        + "|soccer|social|softbank|software|sohu|solar|solutions|song|sony|soy|spa|space|sport"
+        + "|spot|srl|stada|staples|star|statebank|statefarm|stc|stcgroup|stockholm|storage|store"
+        + "|stream|studio|study|style|sucks|supplies|supply|support|surf|surgery|suzuki|swatch"
+        + "|swiss|sydney|systems|s[abcdeghijklmnorstuvxyz])"
+        + "|(?:tab|taipei|talk|taobao|target|tatamotors|tatar|tattoo|tax|taxi|tci|tdk|team|tech"
+        + "|technology|tel|temasek|tennis|teva|thd|theater|theatre|tiaa|tickets|tienda|tips|tires"
+        + "|tirol|tjmaxx|tjx|tkmaxx|tmall|today|tokyo|tools|top|toray|toshiba|total|tours|town"
+        + "|toyota|toys|trade|trading|training|travel|travelers|travelersinsurance|trust|trv|tube"
+        + "|tui|tunes|tushu|tvs|t[cdfghjklmnortvwz])"
+        + "|(?:ubank|ubs|unicom|university|uno|uol|ups|u[agksyz])"
+        + "|(?:vacations|vana|vanguard|vegas|ventures|verisign|versicherung|vet|viajes|video"
+        + "|vig|viking|villas|vin|vip|virgin|visa|vision|viva|vivo|vlaanderen|vodka|volkswagen"
+        + "|volvo|vote|voting|voto|voyage|v[aceginu])"
+        + "|(?:wales|walmart|walter|wang|wanggou|watch|watches|weather|weatherchannel|webcam"
+        + "|weber|website|wed|wedding|weibo|weir|whoswho|wien|wiki|williamhill|win|windows|wine"
+        + "|winners|wme|wolterskluwer|woodside|work|works|world|wow|wtc|wtf|w[fs])"
+        + "|(?:\u03b5\u03bb|\u03b5\u03c5|\u0431\u0433|\u0431\u0435\u043b|\u0434\u0435\u0442\u0438"
+        + "|\u0435\u044e|\u043a\u0430\u0442\u043e\u043b\u0438\u043a|\u043a\u043e\u043c|\u043c\u043a\u0434"
         + "|\u043c\u043e\u043d|\u043c\u043e\u0441\u043a\u0432\u0430|\u043e\u043d\u043b\u0430\u0439\u043d"
         + "|\u043e\u0440\u0433|\u0440\u0443\u0441|\u0440\u0444|\u0441\u0430\u0439\u0442|\u0441\u0440\u0431"
-        + "|\u0443\u043a\u0440|\u049b\u0430\u0437|\u0570\u0561\u0575|\u05e7\u05d5\u05dd|\u0627\u0631\u0627\u0645\u0643\u0648"
-        + "|\u0627\u0644\u0627\u0631\u062f\u0646|\u0627\u0644\u062c\u0632\u0627\u0626\u0631|\u0627\u0644\u0633\u0639\u0648\u062f\u064a\u0629"
-        + "|\u0627\u0644\u0645\u063a\u0631\u0628|\u0627\u0645\u0627\u0631\u0627\u062a|\u0627\u06cc\u0631\u0627\u0646"
-        + "|\u0628\u0627\u0632\u0627\u0631|\u0628\u06be\u0627\u0631\u062a|\u062a\u0648\u0646\u0633"
-        + "|\u0633\u0648\u062f\u0627\u0646|\u0633\u0648\u0631\u064a\u0629|\u0634\u0628\u0643\u0629"
-        + "|\u0639\u0631\u0627\u0642|\u0639\u0645\u0627\u0646|\u0641\u0644\u0633\u0637\u064a\u0646"
-        + "|\u0642\u0637\u0631|\u0643\u0648\u0645|\u0645\u0635\u0631|\u0645\u0644\u064a\u0633\u064a\u0627"
-        + "|\u0645\u0648\u0642\u0639|\u0915\u0949\u092e|\u0928\u0947\u091f|\u092d\u093e\u0930\u0924"
-        + "|\u0938\u0902\u0917\u0920\u0928|\u09ad\u09be\u09b0\u09a4|\u0a2d\u0a3e\u0a30\u0a24|\u0aad\u0abe\u0ab0\u0aa4"
-        + "|\u0b87\u0ba8\u0bcd\u0ba4\u0bbf\u0baf\u0bbe|\u0b87\u0bb2\u0b99\u0bcd\u0b95\u0bc8|\u0b9a\u0bbf\u0b99\u0bcd\u0b95\u0baa\u0bcd\u0baa\u0bc2\u0bb0\u0bcd"
-        + "|\u0c2d\u0c3e\u0c30\u0c24\u0c4d|\u0dbd\u0d82\u0d9a\u0dcf|\u0e04\u0e2d\u0e21|\u0e44\u0e17\u0e22"
-        + "|\u10d2\u10d4|\u307f\u3093\u306a|\u30b0\u30fc\u30b0\u30eb|\u30b3\u30e0|\u4e16\u754c"
-        + "|\u4e2d\u4fe1|\u4e2d\u56fd|\u4e2d\u570b|\u4e2d\u6587\u7f51|\u4f01\u4e1a|\u4f5b\u5c71"
-        + "|\u4fe1\u606f|\u5065\u5eb7|\u516b\u5366|\u516c\u53f8|\u516c\u76ca|\u53f0\u6e7e|\u53f0\u7063"
-        + "|\u5546\u57ce|\u5546\u5e97|\u5546\u6807|\u5728\u7ebf|\u5927\u62ff|\u5a31\u4e50|\u5de5\u884c"
-        + "|\u5e7f\u4e1c|\u6148\u5584|\u6211\u7231\u4f60|\u624b\u673a|\u653f\u52a1|\u653f\u5e9c"
-        + "|\u65b0\u52a0\u5761|\u65b0\u95fb|\u65f6\u5c1a|\u673a\u6784|\u6de1\u9a6c\u9521|\u6e38\u620f"
-        + "|\u70b9\u770b|\u79fb\u52a8|\u7ec4\u7ec7\u673a\u6784|\u7f51\u5740|\u7f51\u5e97|\u7f51\u7edc"
-        + "|\u8c37\u6b4c|\u96c6\u56e2|\u98de\u5229\u6d66|\u9910\u5385|\u9999\u6e2f|\ub2f7\ub137"
-        + "|\ub2f7\ucef4|\uc0bc\uc131|\ud55c\uad6d|xbox"
-        + "|xerox|xin|xn\\-\\-11b4c3d|xn\\-\\-1qqw23a|xn\\-\\-30rr7y|xn\\-\\-3bst00m|xn\\-\\-3ds443g"
-        + "|xn\\-\\-3e0b707e|xn\\-\\-3pxu8k|xn\\-\\-42c2d9a|xn\\-\\-45brj9c|xn\\-\\-45q11c|xn\\-\\-4gbrim"
-        + "|xn\\-\\-55qw42g|xn\\-\\-55qx5d|xn\\-\\-6frz82g|xn\\-\\-6qq986b3xl|xn\\-\\-80adxhks"
-        + "|xn\\-\\-80ao21a|xn\\-\\-80asehdb|xn\\-\\-80aswg|xn\\-\\-90a3ac|xn\\-\\-90ais|xn\\-\\-9dbq2a"
-        + "|xn\\-\\-9et52u|xn\\-\\-b4w605ferd|xn\\-\\-c1avg|xn\\-\\-c2br7g|xn\\-\\-cg4bki|xn\\-\\-clchc0ea0b2g2a9gcd"
-        + "|xn\\-\\-czr694b|xn\\-\\-czrs0t|xn\\-\\-czru2d|xn\\-\\-d1acj3b|xn\\-\\-d1alf|xn\\-\\-efvy88h"
-        + "|xn\\-\\-estv75g|xn\\-\\-fhbei|xn\\-\\-fiq228c5hs|xn\\-\\-fiq64b|xn\\-\\-fiqs8s|xn\\-\\-fiqz9s"
-        + "|xn\\-\\-fjq720a|xn\\-\\-flw351e|xn\\-\\-fpcrj9c3d|xn\\-\\-fzc2c9e2c|xn\\-\\-gecrj9c"
-        + "|xn\\-\\-h2brj9c|xn\\-\\-hxt814e|xn\\-\\-i1b6b1a6a2e|xn\\-\\-imr513n|xn\\-\\-io0a7i"
-        + "|xn\\-\\-j1aef|xn\\-\\-j1amh|xn\\-\\-j6w193g|xn\\-\\-kcrx77d1x4a|xn\\-\\-kprw13d|xn\\-\\-kpry57d"
+        + "|\u0443\u043a\u0440|\u049b\u0430\u0437|\u0570\u0561\u0575|\u05d9\u05e9\u05e8\u05d0\u05dc"
+        + "|\u05e7\u05d5\u05dd|\u0627\u0628\u0648\u0638\u0628\u064a|\u0627\u062a\u0635\u0627\u0644\u0627\u062a"
+        + "|\u0627\u0631\u0627\u0645\u0643\u0648|\u0627\u0644\u0627\u0631\u062f\u0646|\u0627\u0644\u0628\u062d\u0631\u064a\u0646"
+        + "|\u0627\u0644\u062c\u0632\u0627\u0626\u0631|\u0627\u0644\u0633\u0639\u0648\u062f\u064a\u0629"
+        + "|\u0627\u0644\u0639\u0644\u064a\u0627\u0646|\u0627\u0644\u0645\u063a\u0631\u0628|\u0627\u0645\u0627\u0631\u0627\u062a"
+        + "|\u0627\u06cc\u0631\u0627\u0646|\u0628\u0627\u0631\u062a|\u0628\u0627\u0632\u0627\u0631"
+        + "|\u0628\u064a\u062a\u0643|\u0628\u06be\u0627\u0631\u062a|\u062a\u0648\u0646\u0633|\u0633\u0648\u062f\u0627\u0646"
+        + "|\u0633\u0648\u0631\u064a\u0629|\u0634\u0628\u0643\u0629|\u0639\u0631\u0627\u0642|\u0639\u0631\u0628"
+        + "|\u0639\u0645\u0627\u0646|\u0641\u0644\u0633\u0637\u064a\u0646|\u0642\u0637\u0631|\u0643\u0627\u062b\u0648\u0644\u064a\u0643"
+        + "|\u0643\u0648\u0645|\u0645\u0635\u0631|\u0645\u0644\u064a\u0633\u064a\u0627|\u0645\u0648\u0631\u064a\u062a\u0627\u0646\u064a\u0627"
+        + "|\u0645\u0648\u0642\u0639|\u0647\u0645\u0631\u0627\u0647|\u067e\u0627\u06a9\u0633\u062a\u0627\u0646"
+        + "|\u0680\u0627\u0631\u062a|\u0915\u0949\u092e|\u0928\u0947\u091f|\u092d\u093e\u0930\u0924"
+        + "|\u092d\u093e\u0930\u0924\u092e\u094d|\u092d\u093e\u0930\u094b\u0924|\u0938\u0902\u0917\u0920\u0928"
+        + "|\u09ac\u09be\u0982\u09b2\u09be|\u09ad\u09be\u09b0\u09a4|\u09ad\u09be\u09f0\u09a4|\u0a2d\u0a3e\u0a30\u0a24"
+        + "|\u0aad\u0abe\u0ab0\u0aa4|\u0b2d\u0b3e\u0b30\u0b24|\u0b87\u0ba8\u0bcd\u0ba4\u0bbf\u0baf\u0bbe"
+        + "|\u0b87\u0bb2\u0b99\u0bcd\u0b95\u0bc8|\u0b9a\u0bbf\u0b99\u0bcd\u0b95\u0baa\u0bcd\u0baa\u0bc2\u0bb0\u0bcd"
+        + "|\u0c2d\u0c3e\u0c30\u0c24\u0c4d|\u0cad\u0cbe\u0cb0\u0ca4|\u0d2d\u0d3e\u0d30\u0d24\u0d02"
+        + "|\u0dbd\u0d82\u0d9a\u0dcf|\u0e04\u0e2d\u0e21|\u0e44\u0e17\u0e22|\u0ea5\u0eb2\u0ea7|\u10d2\u10d4"
+        + "|\u307f\u3093\u306a|\u30a2\u30de\u30be\u30f3|\u30af\u30e9\u30a6\u30c9|\u30b0\u30fc\u30b0\u30eb"
+        + "|\u30b3\u30e0|\u30b9\u30c8\u30a2|\u30bb\u30fc\u30eb|\u30d5\u30a1\u30c3\u30b7\u30e7\u30f3"
+        + "|\u30dd\u30a4\u30f3\u30c8|\u4e16\u754c|\u4e2d\u4fe1|\u4e2d\u56fd|\u4e2d\u570b|\u4e2d\u6587\u7f51"
+        + "|\u4e9a\u9a6c\u900a|\u4f01\u4e1a|\u4f5b\u5c71|\u4fe1\u606f|\u5065\u5eb7|\u516b\u5366"
+        + "|\u516c\u53f8|\u516c\u76ca|\u53f0\u6e7e|\u53f0\u7063|\u5546\u57ce|\u5546\u5e97|\u5546\u6807"
+        + "|\u5609\u91cc|\u5609\u91cc\u5927\u9152\u5e97|\u5728\u7ebf|\u5927\u62ff|\u5929\u4e3b\u6559"
+        + "|\u5a31\u4e50|\u5bb6\u96fb|\u5e7f\u4e1c|\u5fae\u535a|\u6148\u5584|\u6211\u7231\u4f60"
+        + "|\u624b\u673a|\u62db\u8058|\u653f\u52a1|\u653f\u5e9c|\u65b0\u52a0\u5761|\u65b0\u95fb"
+        + "|\u65f6\u5c1a|\u66f8\u7c4d|\u673a\u6784|\u6de1\u9a6c\u9521|\u6e38\u620f|\u6fb3\u9580"
+        + "|\u70b9\u770b|\u79fb\u52a8|\u7ec4\u7ec7\u673a\u6784|\u7f51\u5740|\u7f51\u5e97|\u7f51\u7ad9"
+        + "|\u7f51\u7edc|\u8054\u901a|\u8c37\u6b4c|\u8d2d\u7269|\u901a\u8ca9|\u96c6\u56e2|\u96fb\u8a0a\u76c8\u79d1"
+        + "|\u98de\u5229\u6d66|\u98df\u54c1|\u9910\u5385|\u9999\u683c\u91cc\u62c9|\u9999\u6e2f"
+        + "|\ub2f7\ub137|\ub2f7\ucef4|\uc0bc\uc131|\ud55c\uad6d"
+        + "|xbox|xerox|xfinity|xihuan|xin|xn\\-\\-11b4c3d|xn\\-\\-1ck2e1b|xn\\-\\-1qqw23a|xn\\-\\-2scrj9c"
+        + "|xn\\-\\-30rr7y|xn\\-\\-3bst00m|xn\\-\\-3ds443g|xn\\-\\-3e0b707e|xn\\-\\-3hcrj9c|xn\\-\\-3pxu8k"
+        + "|xn\\-\\-42c2d9a|xn\\-\\-45br5cyl|xn\\-\\-45brj9c|xn\\-\\-45q11c|xn\\-\\-4dbrk0ce|xn\\-\\-4gbrim"
+        + "|xn\\-\\-54b7fta0cc|xn\\-\\-55qw42g|xn\\-\\-55qx5d|xn\\-\\-5su34j936bgsg|xn\\-\\-5tzm5g"
+        + "|xn\\-\\-6frz82g|xn\\-\\-6qq986b3xl|xn\\-\\-80adxhks|xn\\-\\-80ao21a|xn\\-\\-80aqecdr1a"
+        + "|xn\\-\\-80asehdb|xn\\-\\-80aswg|xn\\-\\-8y0a063a|xn\\-\\-90a3ac|xn\\-\\-90ae|xn\\-\\-90ais"
+        + "|xn\\-\\-9dbq2a|xn\\-\\-9et52u|xn\\-\\-9krt00a|xn\\-\\-b4w605ferd|xn\\-\\-bck1b9a5dre4c"
+        + "|xn\\-\\-c1avg|xn\\-\\-c2br7g|xn\\-\\-cck2b3b|xn\\-\\-cckwcxetd|xn\\-\\-cg4bki|xn\\-\\-clchc0ea0b2g2a9gcd"
+        + "|xn\\-\\-czr694b|xn\\-\\-czrs0t|xn\\-\\-czru2d|xn\\-\\-d1acj3b|xn\\-\\-d1alf|xn\\-\\-e1a4c"
+        + "|xn\\-\\-eckvdtc9d|xn\\-\\-efvy88h|xn\\-\\-fct429k|xn\\-\\-fhbei|xn\\-\\-fiq228c5hs"
+        + "|xn\\-\\-fiq64b|xn\\-\\-fiqs8s|xn\\-\\-fiqz9s|xn\\-\\-fjq720a|xn\\-\\-flw351e|xn\\-\\-fpcrj9c3d"
+        + "|xn\\-\\-fzc2c9e2c|xn\\-\\-fzys8d69uvgm|xn\\-\\-g2xx48c|xn\\-\\-gckr3f0f|xn\\-\\-gecrj9c"
+        + "|xn\\-\\-gk3at1e|xn\\-\\-h2breg3eve|xn\\-\\-h2brj9c|xn\\-\\-h2brj9c8c|xn\\-\\-hxt814e"
+        + "|xn\\-\\-i1b6b1a6a2e|xn\\-\\-imr513n|xn\\-\\-io0a7i|xn\\-\\-j1aef|xn\\-\\-j1amh|xn\\-\\-j6w193g"
+        + "|xn\\-\\-jlq480n2rg|xn\\-\\-jvr189m|xn\\-\\-kcrx77d1x4a|xn\\-\\-kprw13d|xn\\-\\-kpry57d"
         + "|xn\\-\\-kput3i|xn\\-\\-l1acc|xn\\-\\-lgbbat1ad8j|xn\\-\\-mgb9awbf|xn\\-\\-mgba3a3ejt"
-        + "|xn\\-\\-mgba3a4f16a|xn\\-\\-mgbaam7a8h|xn\\-\\-mgbab2bd|xn\\-\\-mgbayh7gpa|xn\\-\\-mgbbh1a71e"
-        + "|xn\\-\\-mgbc0a9azcg|xn\\-\\-mgberp4a5d4ar|xn\\-\\-mgbpl2fh|xn\\-\\-mgbtx2b|xn\\-\\-mgbx4cd0ab"
-        + "|xn\\-\\-mk1bu44c|xn\\-\\-mxtq1m|xn\\-\\-ngbc5azd|xn\\-\\-node|xn\\-\\-nqv7f|xn\\-\\-nqv7fs00ema"
-        + "|xn\\-\\-nyqy26a|xn\\-\\-o3cw4h|xn\\-\\-ogbpf8fl|xn\\-\\-p1acf|xn\\-\\-p1ai|xn\\-\\-pgbs0dh"
-        + "|xn\\-\\-pssy2u|xn\\-\\-q9jyb4c|xn\\-\\-qcka1pmc|xn\\-\\-qxam|xn\\-\\-rhqv96g|xn\\-\\-s9brj9c"
-        + "|xn\\-\\-ses554g|xn\\-\\-t60b56a|xn\\-\\-tckwe|xn\\-\\-unup4y|xn\\-\\-vermgensberater\\-ctb"
-        + "|xn\\-\\-vermgensberatung\\-pwb|xn\\-\\-vhquv|xn\\-\\-vuq861b|xn\\-\\-wgbh1c|xn\\-\\-wgbl6a"
+        + "|xn\\-\\-mgba3a4f16a|xn\\-\\-mgba7c0bbn0a|xn\\-\\-mgbaakc7dvf|xn\\-\\-mgbaam7a8h|xn\\-\\-mgbab2bd"
+        + "|xn\\-\\-mgbah1a3hjkrd|xn\\-\\-mgbai9azgqp6j|xn\\-\\-mgbayh7gpa|xn\\-\\-mgbbh1a|xn\\-\\-mgbbh1a71e"
+        + "|xn\\-\\-mgbc0a9azcg|xn\\-\\-mgbca7dzdo|xn\\-\\-mgbcpq6gpa1a|xn\\-\\-mgberp4a5d4ar|xn\\-\\-mgbgu82a"
+        + "|xn\\-\\-mgbi4ecexp|xn\\-\\-mgbpl2fh|xn\\-\\-mgbt3dhd|xn\\-\\-mgbtx2b|xn\\-\\-mgbx4cd0ab"
+        + "|xn\\-\\-mix891f|xn\\-\\-mk1bu44c|xn\\-\\-mxtq1m|xn\\-\\-ngbc5azd|xn\\-\\-ngbe9e0a|xn\\-\\-ngbrx"
+        + "|xn\\-\\-node|xn\\-\\-nqv7f|xn\\-\\-nqv7fs00ema|xn\\-\\-nyqy26a|xn\\-\\-o3cw4h|xn\\-\\-ogbpf8fl"
+        + "|xn\\-\\-otu796d|xn\\-\\-p1acf|xn\\-\\-p1ai|xn\\-\\-pgbs0dh|xn\\-\\-pssy2u|xn\\-\\-q7ce6a"
+        + "|xn\\-\\-q9jyb4c|xn\\-\\-qcka1pmc|xn\\-\\-qxa6a|xn\\-\\-qxam|xn\\-\\-rhqv96g|xn\\-\\-rovu88b"
+        + "|xn\\-\\-rvc1e0am3e|xn\\-\\-s9brj9c|xn\\-\\-ses554g|xn\\-\\-t60b56a|xn\\-\\-tckwe|xn\\-\\-tiq49xqyj"
+        + "|xn\\-\\-unup4y|xn\\-\\-vermgensberater\\-ctb|xn\\-\\-vermgensberatung\\-pwb|xn\\-\\-vhquv"
+        + "|xn\\-\\-vuq861b|xn\\-\\-w4r85el8fhu5dnra|xn\\-\\-w4rs40l|xn\\-\\-wgbh1c|xn\\-\\-wgbl6a"
         + "|xn\\-\\-xhq521b|xn\\-\\-xkc2al3hye2a|xn\\-\\-xkc2dl3a5ee0h|xn\\-\\-y9a3aq|xn\\-\\-yfro4i67o"
-        + "|xn\\-\\-ygbi2ammx|xn\\-\\-zfr164b|xperia|xxx|xyz)"
-        + "|(?:yachts|yamaxun|yandex|yodobashi|yoga|yokohama|youtube|y[et])"
-        + "|(?:zara|zip|zone|zuerich|z[amw]))";
+        + "|xn\\-\\-ygbi2ammx|xn\\-\\-zfr164b|xxx|xyz)"
+        + "|(?:yachts|yahoo|yamaxun|yandex|yodobashi|yoga|yokohama|you|youtube|yun|y[et])"
+        + "|(?:zappos|zara|zero|zip|zone|zuerich|z[amw]))";
 
     public static final Pattern IP_ADDRESS
             = Pattern.compile(
diff --git a/credentials/credentials-play-services-auth/src/main/java/androidx/credentials/playservices/controllers/CredentialProviderBaseController.kt b/credentials/credentials-play-services-auth/src/main/java/androidx/credentials/playservices/controllers/CredentialProviderBaseController.kt
index c744990..c827b73 100644
--- a/credentials/credentials-play-services-auth/src/main/java/androidx/credentials/playservices/controllers/CredentialProviderBaseController.kt
+++ b/credentials/credentials-play-services-auth/src/main/java/androidx/credentials/playservices/controllers/CredentialProviderBaseController.kt
@@ -40,7 +40,6 @@
         // Common retryable status codes from the play modules found
         // https://developers.google.com/android/reference/com/google/android/gms/common/api/CommonStatusCodes
         val retryables: Set<Int> = setOf(
-            CommonStatusCodes.INTERNAL_ERROR,
             CommonStatusCodes.NETWORK_ERROR,
             CommonStatusCodes.CONNECTION_SUSPENDED_DURING_CALL
         )
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/build_log_simplifier/messages.ignore b/development/build_log_simplifier/messages.ignore
index 0f56a50..2e153d6 100644
--- a/development/build_log_simplifier/messages.ignore
+++ b/development/build_log_simplifier/messages.ignore
@@ -50,613 +50,440 @@
 # > Task :buildSrc:build UP-TO-DATE
 A fine\-grained performance profile is available\: use the \-\-scan option\.
 # > Task :docs
-WARN: Failed to resolve `@see <a href="http:\/\/developer\.android\.com\/design\/patterns\/navigation-drawer\.html">Navigation`! In in declaration of DrawerActions in file .*\/androidx\/test\/espresso\/contrib\/DrawerActions\.java at line 41\.
-WARN: Failed to resolve `@see <a href="http:\/\/developer\.android\.com\/guide\/topics\/ui\/controls\/pickers\.html">Pickers API`! In in declaration of PickerActions in file .*\/androidx\/test\/espresso\/contrib\/PickerActions\.java at line 35\.
-WARN: Failed to resolve `@see <a href="https:\/\/developer\.android\.com\/guide\/topics\/media\/media-routing">Media Routing<\/a>`! In in declaration of SystemOutputSwitcherDialogController in file .*\/androidx\/mediarouter\/app\/SystemOutputSwitcherDialogController\.java at line 39\.
-WARN: Failed to resolve `@see <a href="https:\/\/developer\.android\.com\/guide\/topics\/ui\/drag-drop">Drag and drop<\/a>`! In in declaration of DropHelper in file .*\/androidx\/draganddrop\/DropHelper\.java at line 69\.
-WARN: Failed to resolve `@see <a href="https:\/\/developer\.android\.com\/training\/transitions">Transition API Guide<\/a>`! In File location could not be determined\.
-WARN: Failed to resolve `@see NavAction\.getDefaultArguments`! Did you mean NavAction#getDefaultArguments\? In in declaration of defaultArguments in file .*\/androidx\/navigation\/NavDestinationBuilder\.kt at line 189\.
-WARN: Failed to resolve `@see NavAction\.getDefaultArguments`! Did you mean NavAction#getDefaultArguments\? In in declaration of getDefaultArguments in file .*\/androidx\/navigation\/NavDestinationBuilder\.kt, line number could not be determined\.
-WARN: Failed to resolve `@see PagingSource\.invalidate`! Did you mean PagingSource#invalidate\? In in declaration of refresh in file .*\/androidx\/paging\/compose\/LazyPagingItems\.kt at line 179\.
-WARN: Failed to resolve `@see PagingSource\.invalidate`! Did you mean PagingSource#invalidate\? In in declaration of refresh in file .*\/androidx\/paging\/compose\/LazyPagingItems\.kt at line 183\.
-WARN: Failed to resolve `@see  <a href="https:\/\/developer\.android\.com\/jetpack\/androidx\/releases\/car-app">Car App Library Release Notes<\/a>`! In in declaration of CarAppApiLevels in file .*\/androidx\/car\/app\/versioning\/CarAppApiLevels\.java at line 37\.
-WARN: Link to @throws type ArrayIndexOutOfBoundsException does not resolve\. Is it from a package that the containing file does not import\? Is docs inherited to an un-documented override function, but the exception class is not in scope in the inheriting class\? .*The general fix for these is to fully qualify the exception name,  e\.g\.`@throws java\.io\.IOException under some conditions`\. This was observed in Throws\(root=CustomDocTag\(children=\[P\(children=\[Text\(body=if , children=\[\], params={}\), DocumentationLink\(dri=androidx\.collection\/CircularArray\/\/\/PointingToDeclaration\/, children=\[Text\(body=CircularArray, children=\[\], params={}\)\], params={href=\[CircularArray\]}\), Text\(body= is empty \(on jvm\), children=\[\], params={}\)\], params={}\)\], params={}, name=MARKDOWN_FILE\), name=ArrayIndexOutOfBoundsException, exceptionAddress=null\) in in declaration of popFirst in file .*\/commonMain\/androidx\/collection\/CircularArray\.kt at line 101\.
-WARN: Link to @throws type ArrayIndexOutOfBoundsException does not resolve\. Is it from a package that the containing file does not import\? Is docs inherited to an un-documented override function, but the exception class is not in scope in the inheriting class\? .*The general fix for these is to fully qualify the exception name,  e\.g\.`@throws java\.io\.IOException under some conditions`\. This was observed in Throws\(root=CustomDocTag\(children=\[P\(children=\[Text\(body=if , children=\[\], params={}\), DocumentationLink\(dri=androidx\.collection\/CircularArray\/\/\/PointingToDeclaration\/, children=\[Text\(body=CircularArray, children=\[\], params={}\)\], params={href=\[CircularArray\]}\), Text\(body= is empty, children=\[\], params={}\)\], params={}\)\], params={}, name=MARKDOWN_FILE\), name=ArrayIndexOutOfBoundsException, exceptionAddress=null\) in in declaration of first in file .*\/commonMain\/androidx\/collection\/CircularArray\.kt at line 217\.
-WARN: Link to @throws type ArrayIndexOutOfBoundsException does not resolve\. Is it from a package that the containing file does not import\? Is docs inherited to an un-documented override function, but the exception class is not in scope in the inheriting class\? .*The general fix for these is to fully qualify the exception name,  e\.g\.`@throws java\.io\.IOException under some conditions`\. This was observed in Throws\(root=CustomDocTag\(children=\[P\(children=\[Text\(body=if , children=\[\], params={}\), DocumentationLink\(dri=androidx\.collection\/CircularArray\/\/\/PointingToDeclaration\/, children=\[Text\(body=CircularArray, children=\[\], params={}\)\], params={href=\[CircularArray\]}\), Text\(body= is empty, children=\[\], params={}\)\], params={}\)\], params={}, name=MARKDOWN_FILE\), name=ArrayIndexOutOfBoundsException, exceptionAddress=null\) in in declaration of getFirst in file .*\/commonMain\/androidx\/collection\/CircularArray\.kt, line number could not be determined\.
-WARN: Link to @throws type ArrayIndexOutOfBoundsException does not resolve\. Is it from a package that the containing file does not import\? Is docs inherited to an un-documented override function, but the exception class is not in scope in the inheriting class\? .*The general fix for these is to fully qualify the exception name,  e\.g\.`@throws java\.io\.IOException under some conditions`\. This was observed in Throws\(root=CustomDocTag\(children=\[P\(children=\[Text\(body=if , children=\[\], params={}\), DocumentationLink\(dri=androidx\.collection\/CircularArray\/\/\/PointingToDeclaration\/, children=\[Text\(body=CircularArray, children=\[\], params={}\)\], params={href=\[CircularArray\]}\), Text\(body= is empty, children=\[\], params={}\)\], params={}\)\], params={}, name=MARKDOWN_FILE\), name=ArrayIndexOutOfBoundsException, exceptionAddress=null\) in in declaration of getLast in file .*\/commonMain\/androidx\/collection\/CircularArray\.kt, line number could not be determined\.
-WARN: Link to @throws type ArrayIndexOutOfBoundsException does not resolve\. Is it from a package that the containing file does not import\? Is docs inherited to an un-documented override function, but the exception class is not in scope in the inheriting class\? .*The general fix for these is to fully qualify the exception name,  e\.g\.`@throws java\.io\.IOException under some conditions`\. This was observed in Throws\(root=CustomDocTag\(children=\[P\(children=\[Text\(body=if , children=\[\], params={}\), DocumentationLink\(dri=androidx\.collection\/CircularArray\/\/\/PointingToDeclaration\/, children=\[Text\(body=CircularArray, children=\[\], params={}\)\], params={href=\[CircularArray\]}\), Text\(body= is empty, children=\[\], params={}\)\], params={}\)\], params={}, name=MARKDOWN_FILE\), name=ArrayIndexOutOfBoundsException, exceptionAddress=null\) in in declaration of last in file .*\/commonMain\/androidx\/collection\/CircularArray\.kt at line 231\.
-WARN: Link to @throws type ArrayIndexOutOfBoundsException does not resolve\. Is it from a package that the containing file does not import\? Is docs inherited to an un-documented override function, but the exception class is not in scope in the inheriting class\? .*The general fix for these is to fully qualify the exception name,  e\.g\.`@throws java\.io\.IOException under some conditions`\. This was observed in Throws\(root=CustomDocTag\(children=\[P\(children=\[Text\(body=if , children=\[\], params={}\), DocumentationLink\(dri=androidx\.collection\/CircularArray\/\/\/PointingToDeclaration\/, children=\[Text\(body=CircularArray, children=\[\], params={}\)\], params={href=\[CircularArray\]}\), Text\(body= is empty, children=\[\], params={}\)\], params={}\)\], params={}, name=MARKDOWN_FILE\), name=ArrayIndexOutOfBoundsException, exceptionAddress=null\) in in declaration of popLast in file .*\/commonMain\/androidx\/collection\/CircularArray\.kt at line 119\.
-WARN: Link to @throws type ArrayIndexOutOfBoundsException does not resolve\. Is it from a package that the containing file does not import\? Is docs inherited to an un-documented override function, but the exception class is not in scope in the inheriting class\? .*The general fix for these is to fully qualify the exception name,  e\.g\.`@throws java\.io\.IOException under some conditions`\. This was observed in Throws\(root=CustomDocTag\(children=\[P\(children=\[Text\(body=if , children=\[\], params={}\), DocumentationLink\(dri=androidx\.collection\/CircularArray\/removeFromEnd\/#kotlin\.Int\/PointingToCallableParameters\(0\)\/, children=\[Text\(body=count, children=\[\], params={}\)\], params={href=\[count\]}\), Text\(body= is larger than , children=\[\], params={}\), DocumentationLink\(dri=androidx\.collection\/CircularArray\/size\/#\/PointingToDeclaration\/, children=\[Text\(body=size, children=\[\], params={}\)\], params={href=\[size\]}\)\], params={}\)\], params={}, name=MARKDOWN_FILE\), name=ArrayIndexOutOfBoundsException, exceptionAddress=null\) in in declaration of removeFromEnd in file .*\/commonMain\/androidx\/collection\/CircularArray\.kt at line 181\.
-WARN: Link to @throws type ArrayIndexOutOfBoundsException does not resolve\. Is it from a package that the containing file does not import\? Is docs inherited to an un-documented override function, but the exception class is not in scope in the inheriting class\? .*The general fix for these is to fully qualify the exception name,  e\.g\.`@throws java\.io\.IOException under some conditions`\. This was observed in Throws\(root=CustomDocTag\(children=\[P\(children=\[Text\(body=if , children=\[\], params={}\), DocumentationLink\(dri=androidx\.collection\/CircularArray\/removeFromStart\/#kotlin\.Int\/PointingToCallableParameters\(0\)\/, children=\[Text\(body=count, children=\[\], params={}\)\], params={href=\[count\]}\), Text\(body= is larger than , children=\[\], params={}\), DocumentationLink\(dri=androidx\.collection\/CircularArray\/size\/#\/PointingToDeclaration\/, children=\[Text\(body=size, children=\[\], params={}\)\], params={href=\[size\]}\)\], params={}\)\], params={}, name=MARKDOWN_FILE\), name=ArrayIndexOutOfBoundsException, exceptionAddress=null\) in in declaration of removeFromStart in file .*\/commonMain\/androidx\/collection\/CircularArray\.kt at line 146\.
-WARN: Link to @throws type ArrayIndexOutOfBoundsException does not resolve\. Is it from a package that the containing file does not import\? Is docs inherited to an un-documented override function, but the exception class is not in scope in the inheriting class\? .*The general fix for these is to fully qualify the exception name,  e\.g\.`@throws java\.io\.IOException under some conditions`\. This was observed in Throws\(root=CustomDocTag\(children=\[P\(children=\[Text\(body=if n , children=\[\], params={}\), Text\(body=<, children=\[\], params={content-type=html}\), Text\(body= 0 or n , children=\[\], params={}\), Text\(body=>, children=\[\], params={content-type=html}\), Text\(body== size\(\), children=\[\], params={}\)\], params={}\)\], params={}, name=MARKDOWN_FILE\), name=ArrayIndexOutOfBoundsException, exceptionAddress=null\) in in declaration of get in file .*\/commonMain\/androidx\/collection\/CircularArray\.kt at line 246\.
-WARN: Link to @throws type AssertionFailedError does not resolve\. Is it from a package that the containing file does not import\? Is docs inherited to an un-documented override function, but the exception class is not in scope in the inheriting class\? .*The general fix for these is to fully qualify the exception name,  e\.g\.`@throws java\.io\.IOException under some conditions`\. This was observed in Throws\(root=CustomDocTag\(children=\[P\(children=\[Text\(body=if the given , children=\[\], params={}\), DocumentationLink\(dri=org\.hamcrest\/Matcher\/\/\/PointingToDeclaration\/, children=\[Text\(body=Matcher, children=\[\], params={}\)\], params={}\), Text\(body= did not match any or matched more than one of the recorded intents, children=\[\], params={}\)\], params={}\)\], params={}, name=MARKDOWN_FILE\), name=AssertionFailedError, exceptionAddress=null\) in in declaration of intended in file .*\/androidx\/test\/espresso\/intent\/Intents\.java at line 162\.
-WARN: Link to @throws type AssertionFailedError does not resolve\. Is it from a package that the containing file does not import\? Is docs inherited to an un-documented override function, but the exception class is not in scope in the inheriting class\? .*The general fix for these is to fully qualify the exception name,  e\.g\.`@throws java\.io\.IOException under some conditions`\. This was observed in Throws\(root=CustomDocTag\(children=\[P\(children=\[Text\(body=if the given , children=\[\], params={}\), DocumentationLink\(dri=org\.hamcrest\/Matcher\/\/\/PointingToDeclaration\/, children=\[Text\(body=Matcher, children=\[\], params={}\)\], params={}\), Text\(body= did not match the expected number of recorded intents, children=\[\], params={}\)\], params={}\)\], params={}, name=MARKDOWN_FILE\), name=AssertionFailedError, exceptionAddress=null\) in in declaration of intended in file .*\/androidx\/test\/espresso\/intent\/Intents\.java at line 162\.
-WARN: Link to @throws type DeviceControllerOperationException does not resolve\. Is it from a package that the containing file does not import\? Is docs inherited to an un-documented override function, but the exception class is not in scope in the inheriting class\? .*The general fix for these is to fully qualify the exception name,  e\.g\.`@throws java\.io\.IOException under some conditions`\. This was observed in Throws\(root=CustomDocTag\(children=\[P\(children=\[Text\(body=when called on a non-foldable Emulator\., children=\[\], params={}\)\], params={}\)\], params={}, name=MARKDOWN_FILE\), name=DeviceControllerOperationException, exceptionAddress=null\) in in declaration of setBookMode in file .*\/androidx\/test\/espresso\/device\/action\/DeviceActions\.kt at line 58\.
-WARN: Link to @throws type DeviceControllerOperationException does not resolve\. Is it from a package that the containing file does not import\? Is docs inherited to an un-documented override function, but the exception class is not in scope in the inheriting class\? .*The general fix for these is to fully qualify the exception name,  e\.g\.`@throws java\.io\.IOException under some conditions`\. This was observed in Throws\(root=CustomDocTag\(children=\[P\(children=\[Text\(body=when called on a non-foldable Emulator\., children=\[\], params={}\)\], params={}\)\], params={}, name=MARKDOWN_FILE\), name=DeviceControllerOperationException, exceptionAddress=null\) in in declaration of setBookMode in file .*\/androidx\/test\/espresso\/device\/DeviceInteractionExt\.kt at line 59\.
-WARN: Link to @throws type DeviceControllerOperationException does not resolve\. Is it from a package that the containing file does not import\? Is docs inherited to an un-documented override function, but the exception class is not in scope in the inheriting class\? .*The general fix for these is to fully qualify the exception name,  e\.g\.`@throws java\.io\.IOException under some conditions`\. This was observed in Throws\(root=CustomDocTag\(children=\[P\(children=\[Text\(body=when called on a non-foldable Emulator\., children=\[\], params={}\)\], params={}\)\], params={}, name=MARKDOWN_FILE\), name=DeviceControllerOperationException, exceptionAddress=null\) in in declaration of setClosedMode in file .*\/androidx\/test\/espresso\/device\/action\/DeviceActions\.kt at line 87\.
-WARN: Link to @throws type DeviceControllerOperationException does not resolve\. Is it from a package that the containing file does not import\? Is docs inherited to an un-documented override function, but the exception class is not in scope in the inheriting class\? .*The general fix for these is to fully qualify the exception name,  e\.g\.`@throws java\.io\.IOException under some conditions`\. This was observed in Throws\(root=CustomDocTag\(children=\[P\(children=\[Text\(body=when called on a non-foldable Emulator\., children=\[\], params={}\)\], params={}\)\], params={}, name=MARKDOWN_FILE\), name=DeviceControllerOperationException, exceptionAddress=null\) in in declaration of setClosedMode in file .*\/androidx\/test\/espresso\/device\/DeviceInteractionExt\.kt at line 90\.
-WARN: Link to @throws type DeviceControllerOperationException does not resolve\. Is it from a package that the containing file does not import\? Is docs inherited to an un-documented override function, but the exception class is not in scope in the inheriting class\? .*The general fix for these is to fully qualify the exception name,  e\.g\.`@throws java\.io\.IOException under some conditions`\. This was observed in Throws\(root=CustomDocTag\(children=\[P\(children=\[Text\(body=when called on a non-foldable Emulator\., children=\[\], params={}\)\], params={}\)\], params={}, name=MARKDOWN_FILE\), name=DeviceControllerOperationException, exceptionAddress=null\) in in declaration of setFlatMode in file .*\/androidx\/test\/espresso\/device\/action\/DeviceActions\.kt at line 73\.
-WARN: Link to @throws type DeviceControllerOperationException does not resolve\. Is it from a package that the containing file does not import\? Is docs inherited to an un-documented override function, but the exception class is not in scope in the inheriting class\? .*The general fix for these is to fully qualify the exception name,  e\.g\.`@throws java\.io\.IOException under some conditions`\. This was observed in Throws\(root=CustomDocTag\(children=\[P\(children=\[Text\(body=when called on a non-foldable Emulator\., children=\[\], params={}\)\], params={}\)\], params={}, name=MARKDOWN_FILE\), name=DeviceControllerOperationException, exceptionAddress=null\) in in declaration of setFlatMode in file .*\/androidx\/test\/espresso\/device\/DeviceInteractionExt\.kt at line 75\.
-WARN: Link to @throws type DeviceControllerOperationException does not resolve\. Is it from a package that the containing file does not import\? Is docs inherited to an un-documented override function, but the exception class is not in scope in the inheriting class\? .*The general fix for these is to fully qualify the exception name,  e\.g\.`@throws java\.io\.IOException under some conditions`\. This was observed in Throws\(root=CustomDocTag\(children=\[P\(children=\[Text\(body=when called on a non-foldable Emulator\., children=\[\], params={}\)\], params={}\)\], params={}, name=MARKDOWN_FILE\), name=DeviceControllerOperationException, exceptionAddress=null\) in in declaration of setTabletopMode in file .*\/androidx\/test\/espresso\/device\/action\/DeviceActions\.kt at line 42\.
-WARN: Link to @throws type DeviceControllerOperationException does not resolve\. Is it from a package that the containing file does not import\? Is docs inherited to an un-documented override function, but the exception class is not in scope in the inheriting class\? .*The general fix for these is to fully qualify the exception name,  e\.g\.`@throws java\.io\.IOException under some conditions`\. This was observed in Throws\(root=CustomDocTag\(children=\[P\(children=\[Text\(body=when called on a non-foldable Emulator\., children=\[\], params={}\)\], params={}\)\], params={}, name=MARKDOWN_FILE\), name=DeviceControllerOperationException, exceptionAddress=null\) in in declaration of setTabletopMode in file .*\/androidx\/test\/espresso\/device\/DeviceInteractionExt\.kt at line 42\.
-WARN: Link to @throws type IOException does not resolve\. Is it from a package that the containing file does not import\? Is docs inherited to an un-documented override function, but the exception class is not in scope in the inheriting class\? .*The general fix for these is to fully qualify the exception name,  e\.g\.`@throws java\.io\.IOException under some conditions`\. This was observed in Throws\(root=CustomDocTag\(children=\[P\(children=\[Text\(body=For any disk I\/O issues\., children=\[\], params={}\)\], params={}\)\], params={}, name=MARKDOWN_FILE\), name=IOException, exceptionAddress=null\) in in declaration of aggregate in file .*\/androidx\/health\/connect\/client\/impl\/HealthConnectClientImpl\.kt at line 198\.
-WARN: Link to @throws type IOException does not resolve\. Is it from a package that the containing file does not import\? Is docs inherited to an un-documented override function, but the exception class is not in scope in the inheriting class\? .*The general fix for these is to fully qualify the exception name,  e\.g\.`@throws java\.io\.IOException under some conditions`\. This was observed in Throws\(root=CustomDocTag\(children=\[P\(children=\[Text\(body=For any disk I\/O issues\., children=\[\], params={}\)\], params={}\)\], params={}, name=MARKDOWN_FILE\), name=IOException, exceptionAddress=null\) in in declaration of aggregate in file .*\/androidx\/health\/connect\/client\/impl\/HealthConnectClientUpsideDownImpl\.kt at line 202\.
-WARN: Link to @throws type IOException does not resolve\. Is it from a package that the containing file does not import\? Is docs inherited to an un-documented override function, but the exception class is not in scope in the inheriting class\? .*The general fix for these is to fully qualify the exception name,  e\.g\.`@throws java\.io\.IOException under some conditions`\. This was observed in Throws\(root=CustomDocTag\(children=\[P\(children=\[Text\(body=For any disk I\/O issues\., children=\[\], params={}\)\], params={}\)\], params={}, name=MARKDOWN_FILE\), name=IOException, exceptionAddress=null\) in in declaration of aggregateGroupByDuration in file .*\/androidx\/health\/connect\/client\/impl\/HealthConnectClientImpl\.kt at line 206\.
-WARN: Link to @throws type IOException does not resolve\. Is it from a package that the containing file does not import\? Is docs inherited to an un-documented override function, but the exception class is not in scope in the inheriting class\? .*The general fix for these is to fully qualify the exception name,  e\.g\.`@throws java\.io\.IOException under some conditions`\. This was observed in Throws\(root=CustomDocTag\(children=\[P\(children=\[Text\(body=For any disk I\/O issues\., children=\[\], params={}\)\], params={}\)\], params={}, name=MARKDOWN_FILE\), name=IOException, exceptionAddress=null\) in in declaration of aggregateGroupByDuration in file .*\/androidx\/health\/connect\/client\/impl\/HealthConnectClientUpsideDownImpl\.kt at line 215\.
-WARN: Link to @throws type IOException does not resolve\. Is it from a package that the containing file does not import\? Is docs inherited to an un-documented override function, but the exception class is not in scope in the inheriting class\? .*The general fix for these is to fully qualify the exception name,  e\.g\.`@throws java\.io\.IOException under some conditions`\. This was observed in Throws\(root=CustomDocTag\(children=\[P\(children=\[Text\(body=For any disk I\/O issues\., children=\[\], params={}\)\], params={}\)\], params={}, name=MARKDOWN_FILE\), name=IOException, exceptionAddress=null\) in in declaration of aggregateGroupByPeriod in file .*\/androidx\/health\/connect\/client\/impl\/HealthConnectClientImpl\.kt at line 218\.
-WARN: Link to @throws type IOException does not resolve\. Is it from a package that the containing file does not import\? Is docs inherited to an un-documented override function, but the exception class is not in scope in the inheriting class\? .*The general fix for these is to fully qualify the exception name,  e\.g\.`@throws java\.io\.IOException under some conditions`\. This was observed in Throws\(root=CustomDocTag\(children=\[P\(children=\[Text\(body=For any disk I\/O issues\., children=\[\], params={}\)\], params={}\)\], params={}, name=MARKDOWN_FILE\), name=IOException, exceptionAddress=null\) in in declaration of aggregateGroupByPeriod in file .*\/androidx\/health\/connect\/client\/impl\/HealthConnectClientUpsideDownImpl\.kt at line 231\.
-WARN: Link to @throws type IOException does not resolve\. Is it from a package that the containing file does not import\? Is docs inherited to an un-documented override function, but the exception class is not in scope in the inheriting class\? .*The general fix for these is to fully qualify the exception name,  e\.g\.`@throws java\.io\.IOException under some conditions`\. This was observed in Throws\(root=CustomDocTag\(children=\[P\(children=\[Text\(body=For any disk I\/O issues\., children=\[\], params={}\)\], params={}\)\], params={}, name=MARKDOWN_FILE\), name=IOException, exceptionAddress=null\) in in declaration of deleteRecords in file .*\/androidx\/health\/connect\/client\/impl\/HealthConnectClientImpl\.kt at line 115\.
-WARN: Link to @throws type IOException does not resolve\. Is it from a package that the containing file does not import\? Is docs inherited to an un-documented override function, but the exception class is not in scope in the inheriting class\? .*The general fix for these is to fully qualify the exception name,  e\.g\.`@throws java\.io\.IOException under some conditions`\. This was observed in Throws\(root=CustomDocTag\(children=\[P\(children=\[Text\(body=For any disk I\/O issues\., children=\[\], params={}\)\], params={}\)\], params={}, name=MARKDOWN_FILE\), name=IOException, exceptionAddress=null\) in in declaration of deleteRecords in file .*\/androidx\/health\/connect\/client\/impl\/HealthConnectClientUpsideDownImpl\.kt at line 117\.
-WARN: Link to @throws type IOException does not resolve\. Is it from a package that the containing file does not import\? Is docs inherited to an un-documented override function, but the exception class is not in scope in the inheriting class\? .*The general fix for these is to fully qualify the exception name,  e\.g\.`@throws java\.io\.IOException under some conditions`\. This was observed in Throws\(root=CustomDocTag\(children=\[P\(children=\[Text\(body=For any disk I\/O issues\., children=\[\], params={}\)\], params={}\)\], params={}, name=MARKDOWN_FILE\), name=IOException, exceptionAddress=null\) in in declaration of insertRecords in file .*\/androidx\/health\/connect\/client\/impl\/HealthConnectClientImpl\.kt at line 104\.
-WARN: Link to @throws type IOException does not resolve\. Is it from a package that the containing file does not import\? Is docs inherited to an un-documented override function, but the exception class is not in scope in the inheriting class\? .*The general fix for these is to fully qualify the exception name,  e\.g\.`@throws java\.io\.IOException under some conditions`\. This was observed in Throws\(root=CustomDocTag\(children=\[P\(children=\[Text\(body=For any disk I\/O issues\., children=\[\], params={}\)\], params={}\)\], params={}, name=MARKDOWN_FILE\), name=IOException, exceptionAddress=null\) in in declaration of insertRecords in file .*\/androidx\/health\/connect\/client\/impl\/HealthConnectClientUpsideDownImpl\.kt at line 92\.
-WARN: Link to @throws type IOException does not resolve\. Is it from a package that the containing file does not import\? Is docs inherited to an un-documented override function, but the exception class is not in scope in the inheriting class\? .*The general fix for these is to fully qualify the exception name,  e\.g\.`@throws java\.io\.IOException under some conditions`\. This was observed in Throws\(root=CustomDocTag\(children=\[P\(children=\[Text\(body=For any disk I\/O issues\., children=\[\], params={}\)\], params={}\)\], params={}, name=MARKDOWN_FILE\), name=IOException, exceptionAddress=null\) in in declaration of readRecord in file .*\/androidx\/health\/connect\/client\/impl\/HealthConnectClientImpl\.kt, line number could not be determined\.
-WARN: Link to @throws type IOException does not resolve\. Is it from a package that the containing file does not import\? Is docs inherited to an un-documented override function, but the exception class is not in scope in the inheriting class\? .*The general fix for these is to fully qualify the exception name,  e\.g\.`@throws java\.io\.IOException under some conditions`\. This was observed in Throws\(root=CustomDocTag\(children=\[P\(children=\[Text\(body=For any disk I\/O issues\., children=\[\], params={}\)\], params={}\)\], params={}, name=MARKDOWN_FILE\), name=IOException, exceptionAddress=null\) in in declaration of readRecord in file .*\/androidx\/health\/connect\/client\/impl\/HealthConnectClientUpsideDownImpl\.kt, line number could not be determined\.
-WARN: Link to @throws type IOException does not resolve\. Is it from a package that the containing file does not import\? Is docs inherited to an un-documented override function, but the exception class is not in scope in the inheriting class\? .*The general fix for these is to fully qualify the exception name,  e\.g\.`@throws java\.io\.IOException under some conditions`\. This was observed in Throws\(root=CustomDocTag\(children=\[P\(children=\[Text\(body=For any disk I\/O issues\., children=\[\], params={}\)\], params={}\)\], params={}, name=MARKDOWN_FILE\), name=IOException, exceptionAddress=null\) in in declaration of readRecords in file .*\/androidx\/health\/connect\/client\/impl\/HealthConnectClientImpl\.kt, line number could not be determined\.
-WARN: Link to @throws type IOException does not resolve\. Is it from a package that the containing file does not import\? Is docs inherited to an un-documented override function, but the exception class is not in scope in the inheriting class\? .*The general fix for these is to fully qualify the exception name,  e\.g\.`@throws java\.io\.IOException under some conditions`\. This was observed in Throws\(root=CustomDocTag\(children=\[P\(children=\[Text\(body=For any disk I\/O issues\., children=\[\], params={}\)\], params={}\)\], params={}, name=MARKDOWN_FILE\), name=IOException, exceptionAddress=null\) in in declaration of readRecords in file .*\/androidx\/health\/connect\/client\/impl\/HealthConnectClientUpsideDownImpl\.kt, line number could not be determined\.
-WARN: Link to @throws type IOException does not resolve\. Is it from a package that the containing file does not import\? Is docs inherited to an un-documented override function, but the exception class is not in scope in the inheriting class\? .*The general fix for these is to fully qualify the exception name,  e\.g\.`@throws java\.io\.IOException under some conditions`\. This was observed in Throws\(root=CustomDocTag\(children=\[P\(children=\[Text\(body=For any disk I\/O issues\., children=\[\], params={}\)\], params={}\)\], params={}, name=MARKDOWN_FILE\), name=IOException, exceptionAddress=null\) in in declaration of updateRecords in file .*\/androidx\/health\/connect\/client\/impl\/HealthConnectClientImpl\.kt at line 110\.
-WARN: Link to @throws type IOException does not resolve\. Is it from a package that the containing file does not import\? Is docs inherited to an un-documented override function, but the exception class is not in scope in the inheriting class\? .*The general fix for these is to fully qualify the exception name,  e\.g\.`@throws java\.io\.IOException under some conditions`\. This was observed in Throws\(root=CustomDocTag\(children=\[P\(children=\[Text\(body=For any disk I\/O issues\., children=\[\], params={}\)\], params={}\)\], params={}, name=MARKDOWN_FILE\), name=IOException, exceptionAddress=null\) in in declaration of updateRecords in file .*\/androidx\/health\/connect\/client\/impl\/HealthConnectClientUpsideDownImpl\.kt at line 105\.
-WARN: Link to @throws type kotlin\.IllegalArgumentException does not resolve\. Is it from a package that the containing file does not import\? Is docs inherited to an un-documented override function, but the exception class is not in scope in the inheriting class\? .*The general fix for these is to fully qualify the exception name,  e\.g\.`@throws java\.io\.IOException under some conditions`\. This was observed in Throws\(root=CustomDocTag\(children=\[P\(children=\[Text\(body=if this enum type has no constant with the specified name, children=\[\], params={}\)\], params={}\)\], params={}, name=MARKDOWN_FILE\), name=kotlin\.IllegalArgumentException, exceptionAddress=null\) in in declaration of valueOf in file .*\/nonJvmMain\/androidx\/annotation\/RestrictTo\.nonJvm\.kt, line number could not be determined\.
-WARN: Link to @throws type RemoteException does not resolve\. Is it from a package that the containing file does not import\? Is docs inherited to an un-documented override function, but the exception class is not in scope in the inheriting class\? .*The general fix for these is to fully qualify the exception name,  e\.g\.`@throws java\.io\.IOException under some conditions`\. This was observed in Throws\(root=CustomDocTag\(children=\[P\(children=\[Text\(body=For any IPC transportation failures\. Deleting by invalid identifiers such as a non-existing identifier or deleting the same record multiple times will result in IPC failure\., children=\[\], params={}\)\], params={}\)\], params={}, name=MARKDOWN_FILE\), name=RemoteException, exceptionAddress=null\) in in declaration of deleteRecords in file .*\/androidx\/health\/connect\/client\/impl\/HealthConnectClientImpl\.kt at line 115\.
-WARN: Link to @throws type RemoteException does not resolve\. Is it from a package that the containing file does not import\? Is docs inherited to an un-documented override function, but the exception class is not in scope in the inheriting class\? .*The general fix for these is to fully qualify the exception name,  e\.g\.`@throws java\.io\.IOException under some conditions`\. This was observed in Throws\(root=CustomDocTag\(children=\[P\(children=\[Text\(body=For any IPC transportation failures\. Update with invalid identifiers will result in IPC failure\., children=\[\], params={}\)\], params={}\)\], params={}, name=MARKDOWN_FILE\), name=RemoteException, exceptionAddress=null\) in in declaration of readRecord in file .*\/androidx\/health\/connect\/client\/impl\/HealthConnectClientImpl\.kt, line number could not be determined\.
-WARN: Link to @throws type RemoteException does not resolve\. Is it from a package that the containing file does not import\? Is docs inherited to an un-documented override function, but the exception class is not in scope in the inheriting class\? .*The general fix for these is to fully qualify the exception name,  e\.g\.`@throws java\.io\.IOException under some conditions`\. This was observed in Throws\(root=CustomDocTag\(children=\[P\(children=\[Text\(body=For any IPC transportation failures\. Update with invalid identifiers will result in IPC failure\., children=\[\], params={}\)\], params={}\)\], params={}, name=MARKDOWN_FILE\), name=RemoteException, exceptionAddress=null\) in in declaration of updateRecords in file .*\/androidx\/health\/connect\/client\/impl\/HealthConnectClientImpl\.kt at line 110\.
-WARN: Link to @throws type RemoteException does not resolve\. Is it from a package that the containing file does not import\? Is docs inherited to an un-documented override function, but the exception class is not in scope in the inheriting class\? .*The general fix for these is to fully qualify the exception name,  e\.g\.`@throws java\.io\.IOException under some conditions`\. This was observed in Throws\(root=CustomDocTag\(children=\[P\(children=\[Text\(body=For any IPC transportation failures\., children=\[\], params={}\)\], params={}\)\], params={}, name=MARKDOWN_FILE\), name=RemoteException, exceptionAddress=null\) in in declaration of aggregate in file .*\/androidx\/health\/connect\/client\/impl\/HealthConnectClientImpl\.kt at line 198\.
-WARN: Link to @throws type RemoteException does not resolve\. Is it from a package that the containing file does not import\? Is docs inherited to an un-documented override function, but the exception class is not in scope in the inheriting class\? .*The general fix for these is to fully qualify the exception name,  e\.g\.`@throws java\.io\.IOException under some conditions`\. This was observed in Throws\(root=CustomDocTag\(children=\[P\(children=\[Text\(body=For any IPC transportation failures\., children=\[\], params={}\)\], params={}\)\], params={}, name=MARKDOWN_FILE\), name=RemoteException, exceptionAddress=null\) in in declaration of aggregateGroupByDuration in file .*\/androidx\/health\/connect\/client\/impl\/HealthConnectClientImpl\.kt at line 206\.
-WARN: Link to @throws type RemoteException does not resolve\. Is it from a package that the containing file does not import\? Is docs inherited to an un-documented override function, but the exception class is not in scope in the inheriting class\? .*The general fix for these is to fully qualify the exception name,  e\.g\.`@throws java\.io\.IOException under some conditions`\. This was observed in Throws\(root=CustomDocTag\(children=\[P\(children=\[Text\(body=For any IPC transportation failures\., children=\[\], params={}\)\], params={}\)\], params={}, name=MARKDOWN_FILE\), name=RemoteException, exceptionAddress=null\) in in declaration of aggregateGroupByPeriod in file .*\/androidx\/health\/connect\/client\/impl\/HealthConnectClientImpl\.kt at line 218\.
-WARN: Link to @throws type RemoteException does not resolve\. Is it from a package that the containing file does not import\? Is docs inherited to an un-documented override function, but the exception class is not in scope in the inheriting class\? .*The general fix for these is to fully qualify the exception name,  e\.g\.`@throws java\.io\.IOException under some conditions`\. This was observed in Throws\(root=CustomDocTag\(children=\[P\(children=\[Text\(body=For any IPC transportation failures\., children=\[\], params={}\)\], params={}\)\], params={}, name=MARKDOWN_FILE\), name=RemoteException, exceptionAddress=null\) in in declaration of deleteRecords in file .*\/androidx\/health\/connect\/client\/impl\/HealthConnectClientImpl\.kt at line 115\.
-WARN: Link to @throws type RemoteException does not resolve\. Is it from a package that the containing file does not import\? Is docs inherited to an un-documented override function, but the exception class is not in scope in the inheriting class\? .*The general fix for these is to fully qualify the exception name,  e\.g\.`@throws java\.io\.IOException under some conditions`\. This was observed in Throws\(root=CustomDocTag\(children=\[P\(children=\[Text\(body=For any IPC transportation failures\., children=\[\], params={}\)\], params={}\)\], params={}, name=MARKDOWN_FILE\), name=RemoteException, exceptionAddress=null\) in in declaration of getChanges in file .*\/androidx\/health\/connect\/client\/impl\/HealthConnectClientImpl\.kt at line 151\.
-WARN: Link to @throws type RemoteException does not resolve\. Is it from a package that the containing file does not import\? Is docs inherited to an un-documented override function, but the exception class is not in scope in the inheriting class\? .*The general fix for these is to fully qualify the exception name,  e\.g\.`@throws java\.io\.IOException under some conditions`\. This was observed in Throws\(root=CustomDocTag\(children=\[P\(children=\[Text\(body=For any IPC transportation failures\., children=\[\], params={}\)\], params={}\)\], params={}, name=MARKDOWN_FILE\), name=RemoteException, exceptionAddress=null\) in in declaration of getChangesToken in file .*\/androidx\/health\/connect\/client\/impl\/HealthConnectClientImpl\.kt at line 151\.
-WARN: Link to @throws type RemoteException does not resolve\. Is it from a package that the containing file does not import\? Is docs inherited to an un-documented override function, but the exception class is not in scope in the inheriting class\? .*The general fix for these is to fully qualify the exception name,  e\.g\.`@throws java\.io\.IOException under some conditions`\. This was observed in Throws\(root=CustomDocTag\(children=\[P\(children=\[Text\(body=For any IPC transportation failures\., children=\[\], params={}\)\], params={}\)\], params={}, name=MARKDOWN_FILE\), name=RemoteException, exceptionAddress=null\) in in declaration of insertRecords in file .*\/androidx\/health\/connect\/client\/impl\/HealthConnectClientImpl\.kt at line 104\.
-WARN: Link to @throws type RemoteException does not resolve\. Is it from a package that the containing file does not import\? Is docs inherited to an un-documented override function, but the exception class is not in scope in the inheriting class\? .*The general fix for these is to fully qualify the exception name,  e\.g\.`@throws java\.io\.IOException under some conditions`\. This was observed in Throws\(root=CustomDocTag\(children=\[P\(children=\[Text\(body=For any IPC transportation failures\., children=\[\], params={}\)\], params={}\)\], params={}, name=MARKDOWN_FILE\), name=RemoteException, exceptionAddress=null\) in in declaration of readRecords in file .*\/androidx\/health\/connect\/client\/impl\/HealthConnectClientImpl\.kt, line number could not be determined\.
-WARN: Link to @throws type Renderer\.GlesException does not resolve\. Is it from a package that the containing file does not import\? Is docs inherited to an un-documented override function, but the exception class is not in scope in the inheriting class\? .*The general fix for these is to fully qualify the exception name,  e\.g\.`@throws java\.io\.IOException under some conditions`\. This was observed in Throws\(root=CustomDocTag\(children=\[P\(children=\[Text\(body=If any GL calls fail during initialization\., children=\[\], params={}\)\], params={}\)\], params={}, name=MARKDOWN_FILE\), name=Renderer\.GlesException, exceptionAddress=null\) in in declaration of GlesRenderer2 in file .*\/androidx\/wear\/watchface\/Renderer\.kt at line .*\.
-WARN: Link to @throws type ServiceStartFailureException does not resolve\. Is it from a package that the containing file does not import\? Is docs inherited to an un-documented override function, but the exception class is not in scope in the inheriting class\? .*The general fix for these is to fully qualify the exception name,  e\.g\.`@throws java\.io\.IOException under some conditions`\. This was observed in Throws\(root=CustomDocTag\(children=\[P\(children=\[Text\(body=if the watchface dies during startup\., children=\[\], params={}\)\], params={}\)\], params={}, name=MARKDOWN_FILE\), name=ServiceStartFailureException, exceptionAddress=null\) in in declaration of getOrCreateInteractiveWatchFaceClient in file .*\/androidx\/wear\/watchface\/client\/ListenableWatchFaceControlClient\.kt at line 258\.
-WARN: Link to @throws type ServiceStartFailureException does not resolve\. Is it from a package that the containing file does not import\? Is docs inherited to an un-documented override function, but the exception class is not in scope in the inheriting class\? .*The general fix for these is to fully qualify the exception name,  e\.g\.`@throws java\.io\.IOException under some conditions`\. This was observed in Throws\(root=CustomDocTag\(children=\[P\(children=\[Text\(body=if the watchface dies during startup\., children=\[\], params={}\)\], params={}\)\], params={}, name=MARKDOWN_FILE\), name=ServiceStartFailureException, exceptionAddress=null\) in in declaration of getOrCreateInteractiveWatchFaceClient in file .*\/androidx\/wear\/watchface\/client\/ListenableWatchFaceControlClient\.kt at line 305\.
-WARN: Link to @throws type UnsupportedDeviceOperationException does not resolve\. Is it from a package that the containing file does not import\? Is docs inherited to an un-documented override function, but the exception class is not in scope in the inheriting class\? .*The general fix for these is to fully qualify the exception name,  e\.g\.`@throws java\.io\.IOException under some conditions`\. This was observed in Throws\(root=CustomDocTag\(children=\[P\(children=\[Text\(body=if used on a real device\., children=\[\], params={}\)\], params={}\)\], params={}, name=MARKDOWN_FILE\), name=UnsupportedDeviceOperationException, exceptionAddress=null\) in in declaration of setBookMode in file .*\/androidx\/test\/espresso\/device\/action\/DeviceActions\.kt at line 58\.
-WARN: Link to @throws type UnsupportedDeviceOperationException does not resolve\. Is it from a package that the containing file does not import\? Is docs inherited to an un-documented override function, but the exception class is not in scope in the inheriting class\? .*The general fix for these is to fully qualify the exception name,  e\.g\.`@throws java\.io\.IOException under some conditions`\. This was observed in Throws\(root=CustomDocTag\(children=\[P\(children=\[Text\(body=if used on a real device\., children=\[\], params={}\)\], params={}\)\], params={}, name=MARKDOWN_FILE\), name=UnsupportedDeviceOperationException, exceptionAddress=null\) in in declaration of setBookMode in file .*\/androidx\/test\/espresso\/device\/DeviceInteractionExt\.kt at line 59\.
-WARN: Link to @throws type UnsupportedDeviceOperationException does not resolve\. Is it from a package that the containing file does not import\? Is docs inherited to an un-documented override function, but the exception class is not in scope in the inheriting class\? .*The general fix for these is to fully qualify the exception name,  e\.g\.`@throws java\.io\.IOException under some conditions`\. This was observed in Throws\(root=CustomDocTag\(children=\[P\(children=\[Text\(body=if used on a real device\., children=\[\], params={}\)\], params={}\)\], params={}, name=MARKDOWN_FILE\), name=UnsupportedDeviceOperationException, exceptionAddress=null\) in in declaration of setClosedMode in file .*\/androidx\/test\/espresso\/device\/action\/DeviceActions\.kt at line 87\.
-WARN: Link to @throws type UnsupportedDeviceOperationException does not resolve\. Is it from a package that the containing file does not import\? Is docs inherited to an un-documented override function, but the exception class is not in scope in the inheriting class\? .*The general fix for these is to fully qualify the exception name,  e\.g\.`@throws java\.io\.IOException under some conditions`\. This was observed in Throws\(root=CustomDocTag\(children=\[P\(children=\[Text\(body=if used on a real device\., children=\[\], params={}\)\], params={}\)\], params={}, name=MARKDOWN_FILE\), name=UnsupportedDeviceOperationException, exceptionAddress=null\) in in declaration of setClosedMode in file .*\/androidx\/test\/espresso\/device\/DeviceInteractionExt\.kt at line 90\.
-WARN: Link to @throws type UnsupportedDeviceOperationException does not resolve\. Is it from a package that the containing file does not import\? Is docs inherited to an un-documented override function, but the exception class is not in scope in the inheriting class\? .*The general fix for these is to fully qualify the exception name,  e\.g\.`@throws java\.io\.IOException under some conditions`\. This was observed in Throws\(root=CustomDocTag\(children=\[P\(children=\[Text\(body=if used on a real device\., children=\[\], params={}\)\], params={}\)\], params={}, name=MARKDOWN_FILE\), name=UnsupportedDeviceOperationException, exceptionAddress=null\) in in declaration of setFlatMode in file .*\/androidx\/test\/espresso\/device\/action\/DeviceActions\.kt at line 73\.
-WARN: Link to @throws type UnsupportedDeviceOperationException does not resolve\. Is it from a package that the containing file does not import\? Is docs inherited to an un-documented override function, but the exception class is not in scope in the inheriting class\? .*The general fix for these is to fully qualify the exception name,  e\.g\.`@throws java\.io\.IOException under some conditions`\. This was observed in Throws\(root=CustomDocTag\(children=\[P\(children=\[Text\(body=if used on a real device\., children=\[\], params={}\)\], params={}\)\], params={}, name=MARKDOWN_FILE\), name=UnsupportedDeviceOperationException, exceptionAddress=null\) in in declaration of setFlatMode in file .*\/androidx\/test\/espresso\/device\/DeviceInteractionExt\.kt at line 75\.
-WARN: Link to @throws type UnsupportedDeviceOperationException does not resolve\. Is it from a package that the containing file does not import\? Is docs inherited to an un-documented override function, but the exception class is not in scope in the inheriting class\? .*The general fix for these is to fully qualify the exception name,  e\.g\.`@throws java\.io\.IOException under some conditions`\. This was observed in Throws\(root=CustomDocTag\(children=\[P\(children=\[Text\(body=if used on a real device\., children=\[\], params={}\)\], params={}\)\], params={}, name=MARKDOWN_FILE\), name=UnsupportedDeviceOperationException, exceptionAddress=null\) in in declaration of setTabletopMode in file .*\/androidx\/test\/espresso\/device\/action\/DeviceActions\.kt at line 42\.
-WARN: Link to @throws type UnsupportedDeviceOperationException does not resolve\. Is it from a package that the containing file does not import\? Is docs inherited to an un-documented override function, but the exception class is not in scope in the inheriting class\? .*The general fix for these is to fully qualify the exception name,  e\.g\.`@throws java\.io\.IOException under some conditions`\. This was observed in Throws\(root=CustomDocTag\(children=\[P\(children=\[Text\(body=if used on a real device\., children=\[\], params={}\)\], params={}\)\], params={}, name=MARKDOWN_FILE\), name=UnsupportedDeviceOperationException, exceptionAddress=null\) in in declaration of setTabletopMode in file .*\/androidx\/test\/espresso\/device\/DeviceInteractionExt\.kt at line 42\.
-WARN: Missing @param tag for parameter `action` of function androidx\.core\.os\/\/postAtTime\/android\.os\.Handler#kotlin\.Long#kotlin\.Any\?#kotlin\.Function0\[kotlin\.Unit\]\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `action` of function androidx\.core\.os\/HandlerKt\/postAtTime\/android\.os\.Handler#kotlin\.Long#kotlin\.Any\?#kotlin\.Function0\[kotlin\.Unit\]\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `action` of function androidx\.slice\.builders\/ListBuilder\.InputRangeBuilder\/addEndItem\/#androidx\.slice\.builders\.SliceAction#boolean\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `action` of function androidx\.slice\.builders\/ListBuilder\.RowBuilder\/addEndItem\/#androidx\.slice\.builders\.SliceAction#boolean\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `action` of function androidx\.slice\.builders\/ListBuilder\.RowBuilder\/setTitleItem\/#androidx\.slice\.builders\.SliceAction#boolean\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `activity` of function androidx\.appcompat\.app\/AppCompatDelegate\/create\/#android\.app\.Activity#androidx\.appcompat\.app\.AppCompatCallback\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `activity` of function androidx\.appcompat\.app\/AppCompatDelegate\/create\/#android\.content\.Context#android\.app\.Activity#androidx\.appcompat\.app\.AppCompatCallback\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `activity` of function androidx\.core\.app\/ActivityCompat\/requestDragAndDropPermissions\/#android\.app\.Activity#android\.view\.DragEvent\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `activity` of function androidx\.core\.app\/ActivityCompat\/requireViewById\/#android\.app\.Activity#int\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `activity` of function androidx\.core\.app\/ActivityCompat\/setEnterSharedElementCallback\/#android\.app\.Activity#androidx\.core\.app\.SharedElementCallback\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `activity` of function androidx\.core\.app\/ActivityCompat\/setExitSharedElementCallback\/#android\.app\.Activity#androidx\.core\.app\.SharedElementCallback\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `activity` of function androidx\.core\.app\/ActivityCompat\/setLocusContext\/#android\.app\.Activity#androidx\.core\.content\.LocusIdCompat#android\.os\.Bundle\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `activityClass` of function androidx\.test\.core\.app\/ActivityScenario\/launch\/#java\.lang\.Class<A>#android\.os\.Bundle\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `activityClass` of function androidx\.test\.core\.app\/ActivityScenario\/launchActivityForResult\/#java\.lang\.Class<A>#android\.os\.Bundle\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `activityClass` of function androidx\.test\.ext\.junit\.rules\/ActivityScenarioRule\/ActivityScenarioRule\/#java\.lang\.Class<A>#android\.os\.Bundle\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `alpha` of function androidx\.compose\.ui\.graphics\/Color\.Companion\/hsl\/#kotlin\.Float#kotlin\.Float#kotlin\.Float#kotlin\.Float#androidx\.compose\.ui\.graphics\.colorspace\.Rgb\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `alpha` of function androidx\.compose\.ui\.graphics\/Color\.Companion\/hsv\/#kotlin\.Float#kotlin\.Float#kotlin\.Float#kotlin\.Float#androidx\.compose\.ui\.graphics\.colorspace\.Rgb\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `ambientColor` of function androidx\.compose\.ui\.draw\/\/shadow\/androidx\.compose\.ui\.Modifier#androidx\.compose\.ui\.unit\.Dp#androidx\.compose\.ui\.graphics\.Shape#kotlin\.Boolean#androidx\.compose\.ui\.graphics\.Color#androidx\.compose\.ui\.graphics\.Color\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `ambientColor` of function androidx\.compose\.ui\/Modifier\/shadow\/androidx\.compose\.ui\.Modifier#androidx\.compose\.ui\.unit\.Dp#androidx\.compose\.ui\.graphics\.Shape#kotlin\.Boolean#androidx\.compose\.ui\.graphics\.Color#androidx\.compose\.ui\.graphics\.Color\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `animatedImageVector` of function androidx\.compose\.animation\.graphics\.res\/\/rememberAnimatedVectorPainter\/#androidx\.compose\.animation\.graphics\.vector\.AnimatedImageVector#kotlin\.Boolean\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `atPosition` of function androidx\.test\.espresso\/DataInteraction\.DisplayDataMatcher\/displayDataMatcher\/#org\.hamcrest\.Matcher<android\.view\.View>#org\.hamcrest\.Matcher<\? extends java\.lang\.Object>#org\.hamcrest\.Matcher<androidx\.test\.espresso\.Root>#androidx\.test\.espresso\.util\.EspressoOptional<java\.lang\.Integer>#androidx\.test\.espresso\.action\.AdapterViewProtocol\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `audioManager` of function androidx\.media\/AudioManagerCompat\/abandonAudioFocusRequest\/#android\.media\.AudioManager#androidx\.media\.AudioFocusRequestCompat\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `audioManager` of function androidx\.media\/AudioManagerCompat\/getStreamMaxVolume\/#android\.media\.AudioManager#int\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `audioManager` of function androidx\.media\/AudioManagerCompat\/getStreamMinVolume\/#android\.media\.AudioManager#int\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `audioManager` of function androidx\.media\/AudioManagerCompat\/requestAudioFocus\/#android\.media\.AudioManager#androidx\.media\.AudioFocusRequestCompat\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `autoMirror` of function androidx\.compose\.ui\.graphics\.vector\/\/rememberVectorPainter\/#androidx\.compose\.ui\.unit\.Dp#androidx\.compose\.ui\.unit\.Dp#kotlin\.Float#kotlin\.Float#kotlin\.String#androidx\.compose\.ui\.graphics\.Color#androidx\.compose\.ui\.graphics\.BlendMode#kotlin\.Boolean#kotlin\.Function2\[kotlin\.Float,kotlin\.Float,kotlin\.Unit\]\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `backgroundColor` of function androidx\.compose\.material\/\/BottomSheetScaffold\/#kotlin\.Function1\[androidx\.compose\.foundation\.layout\.ColumnScope,kotlin\.Unit\]#androidx\.compose\.ui\.Modifier#androidx\.compose\.material\.BottomSheetScaffoldState#kotlin\.Function0\[kotlin\.Unit\]\?#kotlin\.Function1\[androidx\.compose\.material\.SnackbarHostState,kotlin\.Unit\]#kotlin\.Function0\[kotlin\.Unit\]\?#androidx\.compose\.material\.FabPosition#kotlin\.Boolean#androidx\.compose\.ui\.graphics\.Shape#androidx\.compose\.ui\.unit\.Dp#androidx\.compose\.ui\.graphics\.Color#androidx\.compose\.ui\.graphics\.Color#androidx\.compose\.ui\.unit\.Dp#kotlin\.Function1\[androidx\.compose\.foundation\.layout\.ColumnScope,kotlin\.Unit\]\?#kotlin\.Boolean#androidx\.compose\.ui\.graphics\.Shape#androidx\.compose\.ui\.unit\.Dp#androidx\.compose\.ui\.graphics\.Color#androidx\.compose\.ui\.graphics\.Color#androidx\.compose\.ui\.graphics\.Color#androidx\.compose\.ui\.graphics\.Color#androidx\.compose\.ui\.graphics\.Color#kotlin\.Function1\[androidx\.compose\.foundation\.layout\.PaddingValues,kotlin\.Unit\]\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `bitmap` of function androidx\.core\.graphics\/BitmapCompat\/setHasMipMap\/#android\.graphics\.Bitmap#boolean\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `block` of function androidx\.compose\.foundation\.lazy\.layout\/IntervalList\/forEach\/#kotlin\.Int#kotlin\.Int#kotlin\.Function1\[androidx\.compose\.foundation\.lazy\.layout\.IntervalList\.Interval\[TypeParam\(bounds=\[kotlin\.Any\?\]\)\],kotlin\.Unit\]\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `block` of function androidx\.compose\.foundation\.lazy\.layout\/MutableIntervalList\/forEach\/#kotlin\.Int#kotlin\.Int#kotlin\.Function1\[androidx\.compose\.foundation\.lazy\.layout\.IntervalList\.Interval\[TypeParam\(bounds=\[kotlin\.Any\?\]\)\],kotlin\.Unit\]\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `block` of function androidx\.compose\.runtime\.snapshots\/Snapshot\.Companion\/observe\/#kotlin\.Function1\[kotlin\.Any,kotlin\.Unit\]\?#kotlin\.Function1\[kotlin\.Any,kotlin\.Unit\]\?#kotlin\.Function0\[TypeParam\(bounds=\[kotlin\.Any\?\]\)\]\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `block` of function androidx\.core\.content\/\/withStyledAttributes\/android\.content\.Context#android\.util\.AttributeSet\?#kotlin\.IntArray#kotlin\.Int#kotlin\.Int#kotlin\.Function1\[android\.content\.res\.TypedArray,kotlin\.Unit\]\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `block` of function androidx\.core\.content\/\/withStyledAttributes\/android\.content\.Context#kotlin\.Int#kotlin\.IntArray#kotlin\.Function1\[android\.content\.res\.TypedArray,kotlin\.Unit\]\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `block` of function androidx\.core\.content\/ContextKt\/withStyledAttributes\/android\.content\.Context#android\.util\.AttributeSet\?#kotlin\.IntArray#kotlin\.Int#kotlin\.Int#kotlin\.Function1\[android\.content\.res\.TypedArray,kotlin\.Unit\]\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `block` of function androidx\.core\.content\/ContextKt\/withStyledAttributes\/android\.content\.Context#kotlin\.Int#kotlin\.IntArray#kotlin\.Function1\[android\.content\.res\.TypedArray,kotlin\.Unit\]\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `block` of function androidx\.tracing\/\/traceAsync\/#kotlin\.Function0\[kotlin\.String\]#kotlin\.Function0\[kotlin\.Int\]#kotlin\.Function0\[TypeParam\(bounds=\[kotlin\.Any\?\]\)\]\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `block` of function androidx\.tracing\/\/traceAsync\/#kotlin\.String#kotlin\.Int#kotlin\.coroutines\.SuspendFunction0\[TypeParam\(bounds=\[kotlin\.Any\?\]\)\]\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `block` of function androidx\.tracing\/TraceKt\/traceAsync\/#kotlin\.Function0\[kotlin\.String\]#kotlin\.Function0\[kotlin\.Int\]#kotlin\.Function0\[TypeParam\(bounds=\[kotlin\.Any\?\]\)\]\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `block` of function androidx\.tracing\/TraceKt\/traceAsync\/#kotlin\.String#kotlin\.Int#kotlin\.coroutines\.SuspendFunction0\[TypeParam\(bounds=\[kotlin\.Any\?\]\)\]\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `body` of function androidx\.core\.database\.sqlite\/\/transaction\/android\.database\.sqlite\.SQLiteDatabase#kotlin\.Boolean#kotlin\.Function1\[android\.database\.sqlite\.SQLiteDatabase,TypeParam\(bounds=\[kotlin\.Any\?\]\)\]\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `body` of function androidx\.core\.database\.sqlite\/SQLiteDatabaseKt\/transaction\/android\.database\.sqlite\.SQLiteDatabase#kotlin\.Boolean#kotlin\.Function1\[android\.database\.sqlite\.SQLiteDatabase,TypeParam\(bounds=\[kotlin\.Any\?\]\)\]\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `body` of function androidx\.sqlite\.db\/\/transaction\/androidx\.sqlite\.db\.SupportSQLiteDatabase#kotlin\.Boolean#kotlin\.Function1\[androidx\.sqlite\.db\.SupportSQLiteDatabase,TypeParam\(bounds=\[kotlin\.Any\?\]\)\]\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `body` of function androidx\.sqlite\.db\/SupportSQLiteDatabase\/transaction\/androidx\.sqlite\.db\.SupportSQLiteDatabase#kotlin\.Boolean#kotlin\.Function1\[androidx\.sqlite\.db\.SupportSQLiteDatabase,TypeParam\(bounds=\[kotlin\.Any\?\]\)\]\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `body` of function androidx\.sqlite\.db\/SupportSQLiteDatabaseKt\/transaction\/androidx\.sqlite\.db\.SupportSQLiteDatabase#kotlin\.Boolean#kotlin\.Function1\[androidx\.sqlite\.db\.SupportSQLiteDatabase,TypeParam\(bounds=\[kotlin\.Any\?\]\)\]\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `bottom` of function androidx\.core\.graphics\.drawable\/DrawableCompat\/setHotspotBounds\/#android\.graphics\.drawable\.Drawable#int#int#int#int\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `bottom` of function androidx\.core\.widget\/TextViewCompat\/setCompoundDrawablesRelative\/#android\.widget\.TextView#android\.graphics\.drawable\.Drawable#android\.graphics\.drawable\.Drawable#android\.graphics\.drawable\.Drawable#android\.graphics\.drawable\.Drawable\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `bottom` of function androidx\.core\.widget\/TextViewCompat\/setCompoundDrawablesRelativeWithIntrinsicBounds\/#android\.widget\.TextView#android\.graphics\.drawable\.Drawable#android\.graphics\.drawable\.Drawable#android\.graphics\.drawable\.Drawable#android\.graphics\.drawable\.Drawable\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `boundingArc` of function androidx\.wear\.watchface\/CanvasComplication\/drawHighlight\/#android\.graphics\.Canvas#android\.graphics\.Rect#kotlin\.Int#java\.time\.ZonedDateTime#kotlin\.Int#androidx\.wear\.watchface\.BoundingArc\?\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `boundingArc` of function androidx\.wear\.watchface\/ComplicationSlot\.Companion\/createEdgeComplicationSlotBuilder\/#kotlin\.Int#androidx\.wear\.watchface\.CanvasComplicationFactory#kotlin\.collections\.List\[androidx\.wear\.watchface\.complications\.data\.ComplicationType\]#androidx\.wear\.watchface\.complications\.DefaultComplicationDataSourcePolicy#androidx\.wear\.watchface\.complications\.ComplicationSlotBounds#androidx\.wear\.watchface\.BoundingArc#androidx\.wear\.watchface\.ComplicationTapFilter\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `builder` of function androidx\.navigation\.dynamicfeatures\.fragment\/\/fragment\/androidx\.navigation\.dynamicfeatures\.DynamicNavGraphBuilder#kotlin\.Int#kotlin\.Function1\[androidx\.navigation\.dynamicfeatures\.fragment\.DynamicFragmentNavigatorDestinationBuilder,kotlin\.Unit\]\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `builder` of function androidx\.navigation\.dynamicfeatures\.fragment\/\/fragment\/androidx\.navigation\.dynamicfeatures\.DynamicNavGraphBuilder#kotlin\.Int#kotlin\.String#kotlin\.Function1\[androidx\.navigation\.dynamicfeatures\.fragment\.DynamicFragmentNavigatorDestinationBuilder,kotlin\.Unit\]\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `builder` of function androidx\.navigation\.dynamicfeatures\.fragment\/\/fragment\/androidx\.navigation\.dynamicfeatures\.DynamicNavGraphBuilder#kotlin\.String#kotlin\.Function1\[androidx\.navigation\.dynamicfeatures\.fragment\.DynamicFragmentNavigatorDestinationBuilder,kotlin\.Unit\]\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `builder` of function androidx\.navigation\.dynamicfeatures\.fragment\/\/fragment\/androidx\.navigation\.dynamicfeatures\.DynamicNavGraphBuilder#kotlin\.String#kotlin\.String#kotlin\.Function1\[androidx\.navigation\.dynamicfeatures\.fragment\.DynamicFragmentNavigatorDestinationBuilder,kotlin\.Unit\]\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `builder` of function androidx\.navigation\.dynamicfeatures\.fragment\/DynamicFragmentNavigatorDestinationBuilderKt\/fragment\/androidx\.navigation\.dynamicfeatures\.DynamicNavGraphBuilder#kotlin\.Int#kotlin\.Function1\[androidx\.navigation\.dynamicfeatures\.fragment\.DynamicFragmentNavigatorDestinationBuilder,kotlin\.Unit\]\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `builder` of function androidx\.navigation\.dynamicfeatures\.fragment\/DynamicFragmentNavigatorDestinationBuilderKt\/fragment\/androidx\.navigation\.dynamicfeatures\.DynamicNavGraphBuilder#kotlin\.Int#kotlin\.String#kotlin\.Function1\[androidx\.navigation\.dynamicfeatures\.fragment\.DynamicFragmentNavigatorDestinationBuilder,kotlin\.Unit\]\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `builder` of function androidx\.navigation\.dynamicfeatures\.fragment\/DynamicFragmentNavigatorDestinationBuilderKt\/fragment\/androidx\.navigation\.dynamicfeatures\.DynamicNavGraphBuilder#kotlin\.String#kotlin\.Function1\[androidx\.navigation\.dynamicfeatures\.fragment\.DynamicFragmentNavigatorDestinationBuilder,kotlin\.Unit\]\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `builder` of function androidx\.navigation\.dynamicfeatures\.fragment\/DynamicFragmentNavigatorDestinationBuilderKt\/fragment\/androidx\.navigation\.dynamicfeatures\.DynamicNavGraphBuilder#kotlin\.String#kotlin\.String#kotlin\.Function1\[androidx\.navigation\.dynamicfeatures\.fragment\.DynamicFragmentNavigatorDestinationBuilder,kotlin\.Unit\]\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `builder` of function androidx\.navigation\.dynamicfeatures\/\/activity\/androidx\.navigation\.dynamicfeatures\.DynamicNavGraphBuilder#kotlin\.Int#kotlin\.Function1\[androidx\.navigation\.dynamicfeatures\.DynamicActivityNavigatorDestinationBuilder,kotlin\.Unit\]\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `builder` of function androidx\.navigation\.dynamicfeatures\/\/activity\/androidx\.navigation\.dynamicfeatures\.DynamicNavGraphBuilder#kotlin\.String#kotlin\.Function1\[androidx\.navigation\.dynamicfeatures\.DynamicActivityNavigatorDestinationBuilder,kotlin\.Unit\]\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `builder` of function androidx\.navigation\.dynamicfeatures\/DynamicActivityNavigatorDestinationBuilderKt\/activity\/androidx\.navigation\.dynamicfeatures\.DynamicNavGraphBuilder#kotlin\.Int#kotlin\.Function1\[androidx\.navigation\.dynamicfeatures\.DynamicActivityNavigatorDestinationBuilder,kotlin\.Unit\]\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `builder` of function androidx\.navigation\.dynamicfeatures\/DynamicActivityNavigatorDestinationBuilderKt\/activity\/androidx\.navigation\.dynamicfeatures\.DynamicNavGraphBuilder#kotlin\.String#kotlin\.Function1\[androidx\.navigation\.dynamicfeatures\.DynamicActivityNavigatorDestinationBuilder,kotlin\.Unit\]\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `builder` of function androidx\.navigation\.dynamicfeatures\/DynamicNavGraphBuilder\/activity\/androidx\.navigation\.dynamicfeatures\.DynamicNavGraphBuilder#kotlin\.Int#kotlin\.Function1\[androidx\.navigation\.dynamicfeatures\.DynamicActivityNavigatorDestinationBuilder,kotlin\.Unit\]\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `builder` of function androidx\.navigation\.dynamicfeatures\/DynamicNavGraphBuilder\/activity\/androidx\.navigation\.dynamicfeatures\.DynamicNavGraphBuilder#kotlin\.String#kotlin\.Function1\[androidx\.navigation\.dynamicfeatures\.DynamicActivityNavigatorDestinationBuilder,kotlin\.Unit\]\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `builder` of function androidx\.navigation\.dynamicfeatures\/DynamicNavGraphBuilder\/fragment\/androidx\.navigation\.dynamicfeatures\.DynamicNavGraphBuilder#kotlin\.Int#kotlin\.Function1\[androidx\.navigation\.dynamicfeatures\.fragment\.DynamicFragmentNavigatorDestinationBuilder,kotlin\.Unit\]\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `builder` of function androidx\.navigation\.dynamicfeatures\/DynamicNavGraphBuilder\/fragment\/androidx\.navigation\.dynamicfeatures\.DynamicNavGraphBuilder#kotlin\.Int#kotlin\.String#kotlin\.Function1\[androidx\.navigation\.dynamicfeatures\.fragment\.DynamicFragmentNavigatorDestinationBuilder,kotlin\.Unit\]\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `builder` of function androidx\.navigation\.dynamicfeatures\/DynamicNavGraphBuilder\/fragment\/androidx\.navigation\.dynamicfeatures\.DynamicNavGraphBuilder#kotlin\.String#kotlin\.Function1\[androidx\.navigation\.dynamicfeatures\.fragment\.DynamicFragmentNavigatorDestinationBuilder,kotlin\.Unit\]\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `builder` of function androidx\.navigation\.dynamicfeatures\/DynamicNavGraphBuilder\/fragment\/androidx\.navigation\.dynamicfeatures\.DynamicNavGraphBuilder#kotlin\.String#kotlin\.String#kotlin\.Function1\[androidx\.navigation\.dynamicfeatures\.fragment\.DynamicFragmentNavigatorDestinationBuilder,kotlin\.Unit\]\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `button` of function androidx\.core\.widget\/CompoundButtonCompat\/setButtonTintList\/#android\.widget\.CompoundButton#android\.content\.res\.ColorStateList\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `button` of function androidx\.core\.widget\/CompoundButtonCompat\/setButtonTintMode\/#android\.widget\.CompoundButton#android\.graphics\.PorterDuff\.Mode\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `c` of function androidx\.cursoradapter\.widget\/ResourceCursorAdapter\/ResourceCursorAdapter\/#android\.content\.Context#int#android\.database\.Cursor\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `callback` of function androidx\.core\.os\/HandlerCompat\/createAsync\/#android\.os\.Looper#android\.os\.Handler\.Callback\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `carContext` of function androidx\.car\.app\/CarToast\/makeText\/#androidx\.car\.app\.CarContext#int#int\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `carContext` of function androidx\.car\.app\/CarToast\/makeText\/#androidx\.car\.app\.CarContext#java\.lang\.CharSequence#int\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `childCount` of function androidx\.recyclerview\.widget\/RecyclerView\.ChildDrawingOrderCallback\/onGetChildDrawingOrder\/#int#int\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `childMeasuredState` of function androidx\.core\.view\/ViewCompat\/resolveSizeAndState\/#int#int#int\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `color` of function androidx\.slice\.widget\/GridRowView\/addImageItem\/#androidx\.slice\.SliceItem#androidx\.slice\.SliceItem#int#android\.view\.ViewGroup#boolean\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `complicationTapFilter` of function androidx\.wear\.watchface\/ComplicationSlot\.Companion\/createEdgeComplicationSlotBuilder\/#kotlin\.Int#androidx\.wear\.watchface\.CanvasComplicationFactory#kotlin\.collections\.List\[androidx\.wear\.watchface\.complications\.data\.ComplicationType\]#androidx\.wear\.watchface\.complications\.DefaultComplicationDataSourcePolicy#androidx\.wear\.watchface\.complications\.ComplicationSlotBounds#androidx\.wear\.watchface\.BoundingArc#androidx\.wear\.watchface\.ComplicationTapFilter\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `condition` of function androidx\.compose\.ui\.test\/MainTestClock\/advanceTimeUntil\/#kotlin\.Long#kotlin\.Function0\[kotlin\.Boolean\]\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `content` of function androidx\.compose\.animation\.core\/Transition\/Crossfade\/androidx\.compose\.animation\.core\.Transition\[TypeParam\(bounds=\[kotlin\.Any\?\]\)\]#androidx\.compose\.ui\.Modifier#androidx\.compose\.animation\.core\.FiniteAnimationSpec\[kotlin\.Float\]#kotlin\.Function1\[TypeParam\(bounds=\[kotlin\.Any\?\]\),kotlin\.Any\?\]#kotlin\.Function1\[TypeParam\(bounds=\[kotlin\.Any\?\]\),kotlin\.Unit\]\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `content` of function androidx\.compose\.animation\/\/Crossfade\/#TypeParam\(bounds=\[kotlin\.Any\?\]\)#androidx\.compose\.ui\.Modifier#androidx\.compose\.animation\.core\.FiniteAnimationSpec\[kotlin\.Float\]#kotlin\.String#kotlin\.Function1\[TypeParam\(bounds=\[kotlin\.Any\?\]\),kotlin\.Unit\]\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `content` of function androidx\.compose\.animation\/\/Crossfade\/androidx\.compose\.animation\.core\.Transition\[TypeParam\(bounds=\[kotlin\.Any\?\]\)\]#androidx\.compose\.ui\.Modifier#androidx\.compose\.animation\.core\.FiniteAnimationSpec\[kotlin\.Float\]#kotlin\.Function1\[TypeParam\(bounds=\[kotlin\.Any\?\]\),kotlin\.Any\?\]#kotlin\.Function1\[TypeParam\(bounds=\[kotlin\.Any\?\]\),kotlin\.Unit\]\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `content` of function androidx\.compose\.foundation\.layout\/\/Column\/#androidx\.compose\.ui\.Modifier#androidx\.compose\.foundation\.layout\.Arrangement\.Vertical#androidx\.compose\.ui\.Alignment\.Horizontal#kotlin\.Function1\[androidx\.compose\.foundation\.layout\.ColumnScope,kotlin\.Unit\]\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `content` of function androidx\.compose\.foundation\.layout\/\/Row\/#androidx\.compose\.ui\.Modifier#androidx\.compose\.foundation\.layout\.Arrangement\.Horizontal#androidx\.compose\.ui\.Alignment\.Vertical#kotlin\.Function1\[androidx\.compose\.foundation\.layout\.RowScope,kotlin\.Unit\]\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `content` of function androidx\.compose\.material\/\/Button\/#kotlin\.Function0\[kotlin\.Unit\]#androidx\.compose\.ui\.Modifier#kotlin\.Boolean#androidx\.compose\.foundation\.interaction\.MutableInteractionSource#androidx\.compose\.material\.ButtonElevation\?#androidx\.compose\.ui\.graphics\.Shape#androidx\.compose\.foundation\.BorderStroke\?#androidx\.compose\.material\.ButtonColors#androidx\.compose\.foundation\.layout\.PaddingValues#kotlin\.Function1\[androidx\.compose\.foundation\.layout\.RowScope,kotlin\.Unit\]\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `content` of function androidx\.compose\.material\/\/Card\/#androidx\.compose\.ui\.Modifier#androidx\.compose\.ui\.graphics\.Shape#androidx\.compose\.ui\.graphics\.Color#androidx\.compose\.ui\.graphics\.Color#androidx\.compose\.foundation\.BorderStroke\?#androidx\.compose\.ui\.unit\.Dp#kotlin\.Function0\[kotlin\.Unit\]\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `content` of function androidx\.compose\.material\/\/Card\/#kotlin\.Function0\[kotlin\.Unit\]#androidx\.compose\.ui\.Modifier#androidx\.compose\.ui\.graphics\.Shape#androidx\.compose\.ui\.graphics\.Color#androidx\.compose\.ui\.graphics\.Color#androidx\.compose\.foundation\.BorderStroke\?#androidx\.compose\.ui\.unit\.Dp#androidx\.compose\.foundation\.interaction\.MutableInteractionSource#androidx\.compose\.foundation\.Indication\?#kotlin\.Boolean#kotlin\.String\?#androidx\.compose\.ui\.semantics\.Role\?#kotlin\.Function0\[kotlin\.Unit\]\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `content` of function androidx\.compose\.material\/\/Card\/#kotlin\.Function0\[kotlin\.Unit\]#androidx\.compose\.ui\.Modifier#kotlin\.Boolean#androidx\.compose\.ui\.graphics\.Shape#androidx\.compose\.ui\.graphics\.Color#androidx\.compose\.ui\.graphics\.Color#androidx\.compose\.foundation\.BorderStroke\?#androidx\.compose\.ui\.unit\.Dp#androidx\.compose\.foundation\.interaction\.MutableInteractionSource#kotlin\.Function0\[kotlin\.Unit\]\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `content` of function androidx\.compose\.material\/\/DropdownMenuItem\/#kotlin\.Function0\[kotlin\.Unit\]#androidx\.compose\.ui\.Modifier#kotlin\.Boolean#androidx\.compose\.foundation\.layout\.PaddingValues#androidx\.compose\.foundation\.interaction\.MutableInteractionSource#kotlin\.Function1\[androidx\.compose\.foundation\.layout\.RowScope,kotlin\.Unit\]\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `content` of function androidx\.compose\.material\/\/MaterialTheme\/#androidx\.compose\.material\.Colors#androidx\.compose\.material\.Typography#androidx\.compose\.material\.Shapes#kotlin\.Function0\[kotlin\.Unit\]\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `content` of function androidx\.compose\.material\/\/OutlinedButton\/#kotlin\.Function0\[kotlin\.Unit\]#androidx\.compose\.ui\.Modifier#kotlin\.Boolean#androidx\.compose\.foundation\.interaction\.MutableInteractionSource#androidx\.compose\.material\.ButtonElevation\?#androidx\.compose\.ui\.graphics\.Shape#androidx\.compose\.foundation\.BorderStroke\?#androidx\.compose\.material\.ButtonColors#androidx\.compose\.foundation\.layout\.PaddingValues#kotlin\.Function1\[androidx\.compose\.foundation\.layout\.RowScope,kotlin\.Unit\]\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `content` of function androidx\.compose\.material\/\/Surface\/#androidx\.compose\.ui\.Modifier#androidx\.compose\.ui\.graphics\.Shape#androidx\.compose\.ui\.graphics\.Color#androidx\.compose\.ui\.graphics\.Color#androidx\.compose\.foundation\.BorderStroke\?#androidx\.compose\.ui\.unit\.Dp#kotlin\.Function0\[kotlin\.Unit\]\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `content` of function androidx\.compose\.material\/\/Surface\/#kotlin\.Boolean#kotlin\.Function0\[kotlin\.Unit\]#androidx\.compose\.ui\.Modifier#kotlin\.Boolean#androidx\.compose\.ui\.graphics\.Shape#androidx\.compose\.ui\.graphics\.Color#androidx\.compose\.ui\.graphics\.Color#androidx\.compose\.foundation\.BorderStroke\?#androidx\.compose\.ui\.unit\.Dp#androidx\.compose\.foundation\.interaction\.MutableInteractionSource#kotlin\.Function0\[kotlin\.Unit\]\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `content` of function androidx\.compose\.material\/\/Surface\/#kotlin\.Boolean#kotlin\.Function1\[kotlin\.Boolean,kotlin\.Unit\]#androidx\.compose\.ui\.Modifier#kotlin\.Boolean#androidx\.compose\.ui\.graphics\.Shape#androidx\.compose\.ui\.graphics\.Color#androidx\.compose\.ui\.graphics\.Color#androidx\.compose\.foundation\.BorderStroke\?#androidx\.compose\.ui\.unit\.Dp#androidx\.compose\.foundation\.interaction\.MutableInteractionSource#kotlin\.Function0\[kotlin\.Unit\]\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `content` of function androidx\.compose\.material\/\/Surface\/#kotlin\.Function0\[kotlin\.Unit\]#androidx\.compose\.ui\.Modifier#androidx\.compose\.ui\.graphics\.Shape#androidx\.compose\.ui\.graphics\.Color#androidx\.compose\.ui\.graphics\.Color#androidx\.compose\.foundation\.BorderStroke\?#androidx\.compose\.ui\.unit\.Dp#androidx\.compose\.foundation\.interaction\.MutableInteractionSource#androidx\.compose\.foundation\.Indication\?#kotlin\.Boolean#kotlin\.String\?#androidx\.compose\.ui\.semantics\.Role\?#kotlin\.Function0\[kotlin\.Unit\]\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `content` of function androidx\.compose\.material\/\/Surface\/#kotlin\.Function0\[kotlin\.Unit\]#androidx\.compose\.ui\.Modifier#kotlin\.Boolean#androidx\.compose\.ui\.graphics\.Shape#androidx\.compose\.ui\.graphics\.Color#androidx\.compose\.ui\.graphics\.Color#androidx\.compose\.foundation\.BorderStroke\?#androidx\.compose\.ui\.unit\.Dp#androidx\.compose\.foundation\.interaction\.MutableInteractionSource#kotlin\.Function0\[kotlin\.Unit\]\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `content` of function androidx\.compose\.material\/\/TextButton\/#kotlin\.Function0\[kotlin\.Unit\]#androidx\.compose\.ui\.Modifier#kotlin\.Boolean#androidx\.compose\.foundation\.interaction\.MutableInteractionSource#androidx\.compose\.material\.ButtonElevation\?#androidx\.compose\.ui\.graphics\.Shape#androidx\.compose\.foundation\.BorderStroke\?#androidx\.compose\.material\.ButtonColors#androidx\.compose\.foundation\.layout\.PaddingValues#kotlin\.Function1\[androidx\.compose\.foundation\.layout\.RowScope,kotlin\.Unit\]\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `content` of function androidx\.compose\.material3\/\/Button\/#kotlin\.Function0\[kotlin\.Unit\]#androidx\.compose\.ui\.Modifier#kotlin\.Boolean#androidx\.compose\.ui\.graphics\.Shape#androidx\.compose\.material3\.ButtonColors#androidx\.compose\.material3\.ButtonElevation\?#androidx\.compose\.foundation\.BorderStroke\?#androidx\.compose\.foundation\.layout\.PaddingValues#androidx\.compose\.foundation\.interaction\.MutableInteractionSource#kotlin\.Function1\[androidx\.compose\.foundation\.layout\.RowScope,kotlin\.Unit\]\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `content` of function androidx\.compose\.material3\/\/Card\/#androidx\.compose\.ui\.Modifier#androidx\.compose\.ui\.graphics\.Shape#androidx\.compose\.material3\.CardColors#androidx\.compose\.material3\.CardElevation#androidx\.compose\.foundation\.BorderStroke\?#kotlin\.Function1\[androidx\.compose\.foundation\.layout\.ColumnScope,kotlin\.Unit\]\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `content` of function androidx\.compose\.material3\/\/Card\/#kotlin\.Function0\[kotlin\.Unit\]#androidx\.compose\.ui\.Modifier#kotlin\.Boolean#androidx\.compose\.ui\.graphics\.Shape#androidx\.compose\.material3\.CardColors#androidx\.compose\.material3\.CardElevation#androidx\.compose\.foundation\.BorderStroke\?#androidx\.compose\.foundation\.interaction\.MutableInteractionSource#kotlin\.Function1\[androidx\.compose\.foundation\.layout\.ColumnScope,kotlin\.Unit\]\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `content` of function androidx\.compose\.material3\/\/ElevatedButton\/#kotlin\.Function0\[kotlin\.Unit\]#androidx\.compose\.ui\.Modifier#kotlin\.Boolean#androidx\.compose\.ui\.graphics\.Shape#androidx\.compose\.material3\.ButtonColors#androidx\.compose\.material3\.ButtonElevation\?#androidx\.compose\.foundation\.BorderStroke\?#androidx\.compose\.foundation\.layout\.PaddingValues#androidx\.compose\.foundation\.interaction\.MutableInteractionSource#kotlin\.Function1\[androidx\.compose\.foundation\.layout\.RowScope,kotlin\.Unit\]\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `content` of function androidx\.compose\.material3\/\/ElevatedCard\/#androidx\.compose\.ui\.Modifier#androidx\.compose\.ui\.graphics\.Shape#androidx\.compose\.material3\.CardColors#androidx\.compose\.material3\.CardElevation#kotlin\.Function1\[androidx\.compose\.foundation\.layout\.ColumnScope,kotlin\.Unit\]\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `content` of function androidx\.compose\.material3\/\/ElevatedCard\/#kotlin\.Function0\[kotlin\.Unit\]#androidx\.compose\.ui\.Modifier#kotlin\.Boolean#androidx\.compose\.ui\.graphics\.Shape#androidx\.compose\.material3\.CardColors#androidx\.compose\.material3\.CardElevation#androidx\.compose\.foundation\.interaction\.MutableInteractionSource#kotlin\.Function1\[androidx\.compose\.foundation\.layout\.ColumnScope,kotlin\.Unit\]\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `content` of function androidx\.compose\.material3\/\/FilledTonalButton\/#kotlin\.Function0\[kotlin\.Unit\]#androidx\.compose\.ui\.Modifier#kotlin\.Boolean#androidx\.compose\.ui\.graphics\.Shape#androidx\.compose\.material3\.ButtonColors#androidx\.compose\.material3\.ButtonElevation\?#androidx\.compose\.foundation\.BorderStroke\?#androidx\.compose\.foundation\.layout\.PaddingValues#androidx\.compose\.foundation\.interaction\.MutableInteractionSource#kotlin\.Function1\[androidx\.compose\.foundation\.layout\.RowScope,kotlin\.Unit\]\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `content` of function androidx\.compose\.material3\/\/MaterialTheme\/#androidx\.compose\.material3\.ColorScheme#androidx\.compose\.material3\.Shapes#androidx\.compose\.material3\.Typography#kotlin\.Function0\[kotlin\.Unit\]\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `content` of function androidx\.compose\.material3\/\/OutlinedButton\/#kotlin\.Function0\[kotlin\.Unit\]#androidx\.compose\.ui\.Modifier#kotlin\.Boolean#androidx\.compose\.ui\.graphics\.Shape#androidx\.compose\.material3\.ButtonColors#androidx\.compose\.material3\.ButtonElevation\?#androidx\.compose\.foundation\.BorderStroke\?#androidx\.compose\.foundation\.layout\.PaddingValues#androidx\.compose\.foundation\.interaction\.MutableInteractionSource#kotlin\.Function1\[androidx\.compose\.foundation\.layout\.RowScope,kotlin\.Unit\]\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `content` of function androidx\.compose\.material3\/\/OutlinedCard\/#androidx\.compose\.ui\.Modifier#androidx\.compose\.ui\.graphics\.Shape#androidx\.compose\.material3\.CardColors#androidx\.compose\.material3\.CardElevation#androidx\.compose\.foundation\.BorderStroke#kotlin\.Function1\[androidx\.compose\.foundation\.layout\.ColumnScope,kotlin\.Unit\]\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `content` of function androidx\.compose\.material3\/\/OutlinedCard\/#kotlin\.Function0\[kotlin\.Unit\]#androidx\.compose\.ui\.Modifier#kotlin\.Boolean#androidx\.compose\.ui\.graphics\.Shape#androidx\.compose\.material3\.CardColors#androidx\.compose\.material3\.CardElevation#androidx\.compose\.foundation\.BorderStroke#androidx\.compose\.foundation\.interaction\.MutableInteractionSource#kotlin\.Function1\[androidx\.compose\.foundation\.layout\.ColumnScope,kotlin\.Unit\]\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `content` of function androidx\.compose\.material3\/\/Surface\/#androidx\.compose\.ui\.Modifier#androidx\.compose\.ui\.graphics\.Shape#androidx\.compose\.ui\.graphics\.Color#androidx\.compose\.ui\.graphics\.Color#androidx\.compose\.ui\.unit\.Dp#androidx\.compose\.ui\.unit\.Dp#androidx\.compose\.foundation\.BorderStroke\?#kotlin\.Function0\[kotlin\.Unit\]\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `content` of function androidx\.compose\.material3\/\/Surface\/#kotlin\.Boolean#kotlin\.Function0\[kotlin\.Unit\]#androidx\.compose\.ui\.Modifier#kotlin\.Boolean#androidx\.compose\.ui\.graphics\.Shape#androidx\.compose\.ui\.graphics\.Color#androidx\.compose\.ui\.graphics\.Color#androidx\.compose\.ui\.unit\.Dp#androidx\.compose\.ui\.unit\.Dp#androidx\.compose\.foundation\.BorderStroke\?#androidx\.compose\.foundation\.interaction\.MutableInteractionSource#kotlin\.Function0\[kotlin\.Unit\]\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `content` of function androidx\.compose\.material3\/\/Surface\/#kotlin\.Boolean#kotlin\.Function1\[kotlin\.Boolean,kotlin\.Unit\]#androidx\.compose\.ui\.Modifier#kotlin\.Boolean#androidx\.compose\.ui\.graphics\.Shape#androidx\.compose\.ui\.graphics\.Color#androidx\.compose\.ui\.graphics\.Color#androidx\.compose\.ui\.unit\.Dp#androidx\.compose\.ui\.unit\.Dp#androidx\.compose\.foundation\.BorderStroke\?#androidx\.compose\.foundation\.interaction\.MutableInteractionSource#kotlin\.Function0\[kotlin\.Unit\]\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `content` of function androidx\.compose\.material3\/\/Surface\/#kotlin\.Function0\[kotlin\.Unit\]#androidx\.compose\.ui\.Modifier#kotlin\.Boolean#androidx\.compose\.ui\.graphics\.Shape#androidx\.compose\.ui\.graphics\.Color#androidx\.compose\.ui\.graphics\.Color#androidx\.compose\.ui\.unit\.Dp#androidx\.compose\.ui\.unit\.Dp#androidx\.compose\.foundation\.BorderStroke\?#androidx\.compose\.foundation\.interaction\.MutableInteractionSource#kotlin\.Function0\[kotlin\.Unit\]\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `content` of function androidx\.compose\.material3\/\/TextButton\/#kotlin\.Function0\[kotlin\.Unit\]#androidx\.compose\.ui\.Modifier#kotlin\.Boolean#androidx\.compose\.ui\.graphics\.Shape#androidx\.compose\.material3\.ButtonColors#androidx\.compose\.material3\.ButtonElevation\?#androidx\.compose\.foundation\.BorderStroke\?#androidx\.compose\.foundation\.layout\.PaddingValues#androidx\.compose\.foundation\.interaction\.MutableInteractionSource#kotlin\.Function1\[androidx\.compose\.foundation\.layout\.RowScope,kotlin\.Unit\]\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `content` of function androidx\.compose\.runtime\.saveable\/SaveableStateHolder\/SaveableStateProvider\/#kotlin\.Any#kotlin\.Function0\[kotlin\.Unit\]\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `content` of function androidx\.core\.provider\/DocumentsContractCompat\/createDocument\/#android\.content\.ContentResolver#android\.net\.Uri#java\.lang\.String#java\.lang\.String\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `content` of function androidx\.core\.provider\/DocumentsContractCompat\/removeDocument\/#android\.content\.ContentResolver#android\.net\.Uri#android\.net\.Uri\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `content` of function androidx\.wear\.compose\.material\/\/AppCard\/#kotlin\.Function0\[kotlin\.Unit\]#kotlin\.Function1\[androidx\.compose\.foundation\.layout\.RowScope,kotlin\.Unit\]#kotlin\.Function1\[androidx\.compose\.foundation\.layout\.RowScope,kotlin\.Unit\]#kotlin\.Function1\[androidx\.compose\.foundation\.layout\.RowScope,kotlin\.Unit\]#androidx\.compose\.ui\.Modifier#kotlin\.Boolean#kotlin\.Function1\[androidx\.compose\.foundation\.layout\.RowScope,kotlin\.Unit\]\?#androidx\.compose\.ui\.graphics\.painter\.Painter#androidx\.compose\.ui\.graphics\.Color#androidx\.compose\.ui\.graphics\.Color#androidx\.compose\.ui\.graphics\.Color#androidx\.compose\.ui\.graphics\.Color#kotlin\.Function1\[androidx\.compose\.foundation\.layout\.ColumnScope,kotlin\.Unit\]\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `content` of function androidx\.wear\.compose\.material\/\/Card\/#kotlin\.Function0\[kotlin\.Unit\]#androidx\.compose\.ui\.Modifier#androidx\.compose\.ui\.graphics\.painter\.Painter#androidx\.compose\.ui\.graphics\.Color#kotlin\.Boolean#androidx\.compose\.foundation\.layout\.PaddingValues#androidx\.compose\.ui\.graphics\.Shape#androidx\.compose\.foundation\.interaction\.MutableInteractionSource#androidx\.compose\.ui\.semantics\.Role\?#kotlin\.Function1\[androidx\.compose\.foundation\.layout\.ColumnScope,kotlin\.Unit\]\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `content` of function androidx\.wear\.compose\.material\/\/Chip\/#kotlin\.Function0\[kotlin\.Unit\]#androidx\.wear\.compose\.material\.ChipColors#androidx\.wear\.compose\.material\.ChipBorder#androidx\.compose\.ui\.Modifier#kotlin\.Boolean#androidx\.compose\.foundation\.layout\.PaddingValues#androidx\.compose\.ui\.graphics\.Shape#androidx\.compose\.foundation\.interaction\.MutableInteractionSource#androidx\.compose\.ui\.semantics\.Role\?#kotlin\.Function1\[androidx\.compose\.foundation\.layout\.RowScope,kotlin\.Unit\]\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `content` of function androidx\.wear\.compose\.material\/\/ListHeader\/#androidx\.compose\.ui\.Modifier#androidx\.compose\.ui\.graphics\.Color#androidx\.compose\.ui\.graphics\.Color#kotlin\.Function1\[androidx\.compose\.foundation\.layout\.RowScope,kotlin\.Unit\]\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `content` of function androidx\.wear\.compose\.material\/\/MaterialTheme\/#androidx\.wear\.compose\.material\.Colors#androidx\.wear\.compose\.material\.Typography#androidx\.wear\.compose\.material\.Shapes#kotlin\.Function0\[kotlin\.Unit\]\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `content` of function androidx\.wear\.compose\.material\/\/Scaffold\/#androidx\.compose\.ui\.Modifier#kotlin\.Function0\[kotlin\.Unit\]\?#kotlin\.Function0\[kotlin\.Unit\]\?#kotlin\.Function0\[kotlin\.Unit\]\?#kotlin\.Function0\[kotlin\.Unit\]\?#kotlin\.Function0\[kotlin\.Unit\]\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `content` of function androidx\.wear\.compose\.material\/\/ScalingLazyColumn\/#androidx\.compose\.ui\.Modifier#androidx\.wear\.compose\.material\.ScalingLazyListState#androidx\.compose\.foundation\.layout\.PaddingValues#kotlin\.Boolean#androidx\.compose\.foundation\.layout\.Arrangement\.Vertical#androidx\.compose\.ui\.Alignment\.Horizontal#androidx\.compose\.foundation\.gestures\.FlingBehavior#kotlin\.Boolean#androidx\.wear\.compose\.material\.ScalingParams#androidx\.wear\.compose\.material\.ScalingLazyListAnchorType#androidx\.wear\.compose\.material\.AutoCenteringParams\?#kotlin\.Function1\[androidx\.wear\.compose\.material\.ScalingLazyListScope,kotlin\.Unit\]\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `content` of function androidx\.wear\.compose\.material\/\/TitleCard\/#kotlin\.Function0\[kotlin\.Unit\]#kotlin\.Function1\[androidx\.compose\.foundation\.layout\.RowScope,kotlin\.Unit\]#androidx\.compose\.ui\.Modifier#kotlin\.Boolean#kotlin\.Function1\[androidx\.compose\.foundation\.layout\.RowScope,kotlin\.Unit\]\?#androidx\.compose\.ui\.graphics\.painter\.Painter#androidx\.compose\.ui\.graphics\.Color#androidx\.compose\.ui\.graphics\.Color#androidx\.compose\.ui\.graphics\.Color#kotlin\.Function1\[androidx\.compose\.foundation\.layout\.ColumnScope,kotlin\.Unit\]\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `content` of function androidx\.wear\.compose\.material3\/\/Button\/#kotlin\.Function0\[kotlin\.Unit\]#androidx\.compose\.ui\.Modifier#kotlin\.Boolean#androidx\.compose\.ui\.graphics\.Shape#androidx\.wear\.compose\.material3\.ButtonColors#androidx\.compose\.foundation\.BorderStroke\?#androidx\.compose\.foundation\.layout\.PaddingValues#androidx\.compose\.foundation\.interaction\.MutableInteractionSource#kotlin\.Function1\[androidx\.compose\.foundation\.layout\.RowScope,kotlin\.Unit\]\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `content` of function androidx\.wear\.compose\.material3\/\/ChildButton\/#kotlin\.Function0\[kotlin\.Unit\]#androidx\.compose\.ui\.Modifier#kotlin\.Boolean#androidx\.compose\.ui\.graphics\.Shape#androidx\.wear\.compose\.material3\.ButtonColors#androidx\.compose\.foundation\.BorderStroke\?#androidx\.compose\.foundation\.layout\.PaddingValues#androidx\.compose\.foundation\.interaction\.MutableInteractionSource#kotlin\.Function1\[androidx\.compose\.foundation\.layout\.RowScope,kotlin\.Unit\]\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `content` of function androidx\.wear\.compose\.material3\/\/FilledTonalButton\/#kotlin\.Function0\[kotlin\.Unit\]#androidx\.compose\.ui\.Modifier#kotlin\.Boolean#androidx\.compose\.ui\.graphics\.Shape#androidx\.wear\.compose\.material3\.ButtonColors#androidx\.compose\.foundation\.BorderStroke\?#androidx\.compose\.foundation\.layout\.PaddingValues#androidx\.compose\.foundation\.interaction\.MutableInteractionSource#kotlin\.Function1\[androidx\.compose\.foundation\.layout\.RowScope,kotlin\.Unit\]\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `content` of function androidx\.wear\.compose\.material3\/\/MaterialTheme\/#androidx\.wear\.compose\.material3\.ColorScheme#androidx\.wear\.compose\.material3\.Typography#androidx\.wear\.compose\.material3\.Shapes#kotlin\.Function0\[kotlin\.Unit\]\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `content` of function androidx\.wear\.compose\.material3\/\/OutlinedButton\/#kotlin\.Function0\[kotlin\.Unit\]#androidx\.compose\.ui\.Modifier#kotlin\.Boolean#androidx\.compose\.ui\.graphics\.Shape#androidx\.wear\.compose\.material3\.ButtonColors#androidx\.compose\.foundation\.BorderStroke\?#androidx\.compose\.foundation\.layout\.PaddingValues#androidx\.compose\.foundation\.interaction\.MutableInteractionSource#kotlin\.Function1\[androidx\.compose\.foundation\.layout\.RowScope,kotlin\.Unit\]\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `contentBuilder` of function androidx\.wear\.compose\.foundation\/\/curvedColumn\/androidx\.wear\.compose\.foundation\.CurvedScope#androidx\.wear\.compose\.foundation\.CurvedModifier#androidx\.wear\.compose\.foundation\.CurvedDirection\.Radial\?#androidx\.wear\.compose\.foundation\.CurvedAlignment\.Angular\?#kotlin\.Function1\[androidx\.wear\.compose\.foundation\.CurvedScope,kotlin\.Unit\]\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `contentBuilder` of function androidx\.wear\.compose\.foundation\/\/curvedRow\/androidx\.wear\.compose\.foundation\.CurvedScope#androidx\.wear\.compose\.foundation\.CurvedModifier#androidx\.wear\.compose\.foundation\.CurvedAlignment\.Radial\?#androidx\.wear\.compose\.foundation\.CurvedDirection\.Angular\?#kotlin\.Function1\[androidx\.wear\.compose\.foundation\.CurvedScope,kotlin\.Unit\]\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `contentBuilder` of function androidx\.wear\.compose\.foundation\/CurvedScope\/curvedColumn\/androidx\.wear\.compose\.foundation\.CurvedScope#androidx\.wear\.compose\.foundation\.CurvedModifier#androidx\.wear\.compose\.foundation\.CurvedDirection\.Radial\?#androidx\.wear\.compose\.foundation\.CurvedAlignment\.Angular\?#kotlin\.Function1\[androidx\.wear\.compose\.foundation\.CurvedScope,kotlin\.Unit\]\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `contentBuilder` of function androidx\.wear\.compose\.foundation\/CurvedScope\/curvedRow\/androidx\.wear\.compose\.foundation\.CurvedScope#androidx\.wear\.compose\.foundation\.CurvedModifier#androidx\.wear\.compose\.foundation\.CurvedAlignment\.Radial\?#androidx\.wear\.compose\.foundation\.CurvedDirection\.Angular\?#kotlin\.Function1\[androidx\.wear\.compose\.foundation\.CurvedScope,kotlin\.Unit\]\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `contentColor` of function androidx\.compose\.material\/\/BottomSheetScaffold\/#kotlin\.Function1\[androidx\.compose\.foundation\.layout\.ColumnScope,kotlin\.Unit\]#androidx\.compose\.ui\.Modifier#androidx\.compose\.material\.BottomSheetScaffoldState#kotlin\.Function0\[kotlin\.Unit\]\?#kotlin\.Function1\[androidx\.compose\.material\.SnackbarHostState,kotlin\.Unit\]#kotlin\.Function0\[kotlin\.Unit\]\?#androidx\.compose\.material\.FabPosition#kotlin\.Boolean#androidx\.compose\.ui\.graphics\.Shape#androidx\.compose\.ui\.unit\.Dp#androidx\.compose\.ui\.graphics\.Color#androidx\.compose\.ui\.graphics\.Color#androidx\.compose\.ui\.unit\.Dp#kotlin\.Function1\[androidx\.compose\.foundation\.layout\.ColumnScope,kotlin\.Unit\]\?#kotlin\.Boolean#androidx\.compose\.ui\.graphics\.Shape#androidx\.compose\.ui\.unit\.Dp#androidx\.compose\.ui\.graphics\.Color#androidx\.compose\.ui\.graphics\.Color#androidx\.compose\.ui\.graphics\.Color#androidx\.compose\.ui\.graphics\.Color#androidx\.compose\.ui\.graphics\.Color#kotlin\.Function1\[androidx\.compose\.foundation\.layout\.PaddingValues,kotlin\.Unit\]\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `contentKey` of function androidx\.compose\.animation\.core\/Transition\/Crossfade\/androidx\.compose\.animation\.core\.Transition\[TypeParam\(bounds=\[kotlin\.Any\?\]\)\]#androidx\.compose\.ui\.Modifier#androidx\.compose\.animation\.core\.FiniteAnimationSpec\[kotlin\.Float\]#kotlin\.Function1\[TypeParam\(bounds=\[kotlin\.Any\?\]\),kotlin\.Any\?\]#kotlin\.Function1\[TypeParam\(bounds=\[kotlin\.Any\?\]\),kotlin\.Unit\]\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `contentKey` of function androidx\.compose\.animation\/\/Crossfade\/androidx\.compose\.animation\.core\.Transition\[TypeParam\(bounds=\[kotlin\.Any\?\]\)\]#androidx\.compose\.ui\.Modifier#androidx\.compose\.animation\.core\.FiniteAnimationSpec\[kotlin\.Float\]#kotlin\.Function1\[TypeParam\(bounds=\[kotlin\.Any\?\]\),kotlin\.Any\?\]#kotlin\.Function1\[TypeParam\(bounds=\[kotlin\.Any\?\]\),kotlin\.Unit\]\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `context` of function android\.support\.v4\.media\.session\/MediaControllerCompat\/MediaControllerCompat\/#android\.content\.Context#android\.support\.v4\.media\.session\.MediaSessionCompat\.Token\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `context` of function android\.support\.v4\.media\.session\/MediaControllerCompat\/MediaControllerCompat\/#android\.content\.Context#android\.support\.v4\.media\.session\.MediaSessionCompat\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `context` of function androidx\.appcompat\.app\/AppCompatDelegate\/create\/#android\.content\.Context#android\.app\.Activity#androidx\.appcompat\.app\.AppCompatCallback\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `context` of function androidx\.appcompat\.app\/AppCompatDelegate\/create\/#android\.content\.Context#android\.view\.Window#androidx\.appcompat\.app\.AppCompatCallback\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `context` of function androidx\.appcompat\.graphics\.drawable\/StateListDrawableCompat\/inflate\/#android\.content\.Context#android\.content\.res\.Resources#org\.xmlpull\.v1\.XmlPullParser#android\.util\.AttributeSet#android\.content\.res\.Resources\.Theme\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `context` of function androidx\.appsearch\.app\/ShortcutAdapter\/createShortcutBuilderFromDocument\/#android\.content\.Context#java\.lang\.Object\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `context` of function androidx\.appsearch\.localstorage\/LocalStorage\.SearchContext\.Builder\/Builder\/#android\.content\.Context#java\.lang\.String\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `context` of function androidx\.appsearch\.platformstorage\/PlatformStorage\.SearchContext\.Builder\/Builder\/#android\.content\.Context#java\.lang\.String\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `context` of function androidx\.appsearch\.playservicesstorage\/PlayServicesStorage\.SearchContext\.Builder\/Builder\/#android\.content\.Context#java\.lang\.String\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `context` of function androidx\.core\.content\.pm\/ShortcutManagerCompat\/createShortcutResultIntent\/#android\.content\.Context#androidx\.core\.content\.pm\.ShortcutInfoCompat\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `context` of function androidx\.core\.content\.pm\/ShortcutManagerCompat\/getShortcuts\/#android\.content\.Context#int\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `context` of function androidx\.core\.content\.pm\/ShortcutManagerCompat\/requestPinShortcut\/#android\.content\.Context#androidx\.core\.content\.pm\.ShortcutInfoCompat#android\.content\.IntentSender\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `context` of function androidx\.core\.content\/ContextCompat\/checkSelfPermission\/#android\.content\.Context#java\.lang\.String\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `context` of function androidx\.core\.content\/ContextCompat\/getColor\/#android\.content\.Context#int\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `context` of function androidx\.core\.content\/ContextCompat\/getColorStateList\/#android\.content\.Context#int\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `context` of function androidx\.core\.content\/ContextCompat\/getDrawable\/#android\.content\.Context#int\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `context` of function androidx\.core\.graphics\/TypefaceCompat\/create\/#android\.content\.Context#android\.graphics\.Typeface#int#boolean\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `context` of function androidx\.documentfile\.provider\/DocumentFile\/fromSingleUri\/#android\.content\.Context#android\.net\.Uri\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `context` of function androidx\.documentfile\.provider\/DocumentFile\/fromTreeUri\/#android\.content\.Context#android\.net\.Uri\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `context` of function androidx\.graphics\.opengl\.egl\/EGLSpec\/eglMakeCurrent\/#android\.opengl\.EGLContext#android\.opengl\.EGLSurface#android\.opengl\.EGLSurface\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `context` of function androidx\.mediarouter\.media\/RemotePlaybackClient\/RemotePlaybackClient\/#android\.content\.Context#androidx\.mediarouter\.media\.MediaRouter\.RouteInfo\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `context` of function androidx\.security\.crypto\/\/EncryptedSharedPreferences\/#android\.content\.Context#kotlin\.String#androidx\.security\.crypto\.MasterKey#androidx\.security\.crypto\.EncryptedSharedPreferences\.PrefKeyEncryptionScheme#androidx\.security\.crypto\.EncryptedSharedPreferences\.PrefValueEncryptionScheme\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `context` of function androidx\.security\.crypto\/EncryptedSharedPreferences\/create\/#android\.content\.Context#java\.lang\.String#androidx\.security\.crypto\.MasterKey#androidx\.security\.crypto\.EncryptedSharedPreferences\.PrefKeyEncryptionScheme#androidx\.security\.crypto\.EncryptedSharedPreferences\.PrefValueEncryptionScheme\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `context` of function androidx\.security\.crypto\/EncryptedSharedPreferencesKt\/EncryptedSharedPreferences\/#android\.content\.Context#kotlin\.String#androidx\.security\.crypto\.MasterKey#androidx\.security\.crypto\.EncryptedSharedPreferences\.PrefKeyEncryptionScheme#androidx\.security\.crypto\.EncryptedSharedPreferences\.PrefValueEncryptionScheme\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `context` of function androidx\.slice\.builders\/ListBuilder\/ListBuilder\/#android\.content\.Context#android\.net\.Uri#java\.time\.Duration\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `context` of function androidx\.slice\.builders\/ListBuilder\/ListBuilder\/#android\.content\.Context#android\.net\.Uri#long\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `context` of function androidx\.slice\/SliceUtils\/parseSlice\/#android\.content\.Context#java\.io\.InputStream#java\.lang\.String#androidx\.slice\.SliceUtils\.SliceActionListener\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `context` of function androidx\.tvprovider\.media\.tv\/PreviewChannelHelper\/PreviewChannelHelper\/#android\.content\.Context#int#int\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `controller` of function androidx\.media2\.session\/MediaSession\/sendCustomCommand\/#androidx\.media2\.session\.MediaSession\.ControllerInfo#androidx\.media2\.session\.SessionCommand#android\.os\.Bundle\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `cookieManager` of function androidx\.webkit\/CookieManagerCompat\/getCookieInfo\/#android\.webkit\.CookieManager#java\.lang\.String\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `coroutineDispatcher` of function androidx\.lifecycle\.testing\/TestLifecycleOwner\/TestLifecycleOwner\/#androidx\.lifecycle\.Lifecycle\.State#kotlinx\.coroutines\.CoroutineDispatcher\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `currentProgress` of function androidx\.constraintlayout\.core\.state\/Transition\/dragToProgress\/#float#int#int#float#float\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `dataKey` of function androidx\.compose\.runtime\/Composer\/startMovableGroup\/#kotlin\.Int#kotlin\.Any\?\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `detailsPresenter` of function androidx\.leanback\.widget\/DetailsOverviewRowPresenter\.ViewHolder\/ViewHolder\/#android\.view\.View#androidx\.leanback\.widget\.Presenter\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `detailsPresenter` of function androidx\.leanback\.widget\/FullWidthDetailsOverviewRowPresenter\.ViewHolder\/ViewHolder\/#android\.view\.View#androidx\.leanback\.widget\.Presenter#androidx\.leanback\.widget\.DetailsOverviewLogoPresenter\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `dialog` of function androidx\.appcompat\.app\/AppCompatDelegate\/create\/#android\.app\.Dialog#androidx\.appcompat\.app\.AppCompatCallback\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `disabledElevation` of function androidx\.compose\.material3\/CardDefaults\/cardElevation\/#androidx\.compose\.ui\.unit\.Dp#androidx\.compose\.ui\.unit\.Dp#androidx\.compose\.ui\.unit\.Dp#androidx\.compose\.ui\.unit\.Dp#androidx\.compose\.ui\.unit\.Dp#androidx\.compose\.ui\.unit\.Dp\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `disabledElevation` of function androidx\.compose\.material3\/CardDefaults\/elevatedCardElevation\/#androidx\.compose\.ui\.unit\.Dp#androidx\.compose\.ui\.unit\.Dp#androidx\.compose\.ui\.unit\.Dp#androidx\.compose\.ui\.unit\.Dp#androidx\.compose\.ui\.unit\.Dp#androidx\.compose\.ui\.unit\.Dp\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `disabledElevation` of function androidx\.compose\.material3\/CardDefaults\/outlinedCardElevation\/#androidx\.compose\.ui\.unit\.Dp#androidx\.compose\.ui\.unit\.Dp#androidx\.compose\.ui\.unit\.Dp#androidx\.compose\.ui\.unit\.Dp#androidx\.compose\.ui\.unit\.Dp#androidx\.compose\.ui\.unit\.Dp\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `dpToPixel` of function androidx\.constraintlayout\.core\.state\/TransitionParser\/parse\/#androidx\.constraintlayout\.core\.parser\.CLObject#androidx\.constraintlayout\.core\.state\.Transition#androidx\.constraintlayout\.core\.state\.CorePixelDp\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `drawable` of function androidx\.core\.graphics\.drawable\/DrawableCompat\/inflate\/#android\.graphics\.drawable\.Drawable#android\.content\.res\.Resources#org\.xmlpull\.v1\.XmlPullParser#android\.util\.AttributeSet#android\.content\.res\.Resources\.Theme\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `drawable` of function androidx\.core\.graphics\.drawable\/DrawableCompat\/setLayoutDirection\/#android\.graphics\.drawable\.Drawable#int\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `edgeEffect` of function androidx\.core\.widget\/EdgeEffectCompat\/onPullDistance\/#android\.widget\.EdgeEffect#float#float\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `editorInfo` of function androidx\.core\.view\.inputmethod\/EditorInfoCompat\/getInitialSelectedText\/#android\.view\.inputmethod\.EditorInfo#int\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `editorInfo` of function androidx\.core\.view\.inputmethod\/EditorInfoCompat\/getInitialTextAfterCursor\/#android\.view\.inputmethod\.EditorInfo#int#int\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `editorInfo` of function androidx\.core\.view\.inputmethod\/EditorInfoCompat\/getInitialTextBeforeCursor\/#android\.view\.inputmethod\.EditorInfo#int#int\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `editorInfo` of function androidx\.core\.view\.inputmethod\/EditorInfoCompat\/setInitialSurroundingSubText\/#android\.view\.inputmethod\.EditorInfo#java\.lang\.CharSequence#int\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `editorInfo` of function androidx\.core\.view\.inputmethod\/EditorInfoCompat\/setInitialSurroundingText\/#android\.view\.inputmethod\.EditorInfo#java\.lang\.CharSequence\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `enabled` of function androidx\.wear\.compose\.material3\/ButtonDefaults\/outlinedButtonBorder\/#kotlin\.Boolean#androidx\.compose\.ui\.graphics\.Color#androidx\.compose\.ui\.graphics\.Color#androidx\.compose\.ui\.unit\.Dp\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `end` of function androidx\.core\.widget\/TextViewCompat\/setCompoundDrawablesRelative\/#android\.widget\.TextView#android\.graphics\.drawable\.Drawable#android\.graphics\.drawable\.Drawable#android\.graphics\.drawable\.Drawable#android\.graphics\.drawable\.Drawable\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `end` of function androidx\.core\.widget\/TextViewCompat\/setCompoundDrawablesRelativeWithIntrinsicBounds\/#android\.widget\.TextView#android\.graphics\.drawable\.Drawable#android\.graphics\.drawable\.Drawable#android\.graphics\.drawable\.Drawable#android\.graphics\.drawable\.Drawable\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `event` of function androidx\.core\.view\.accessibility\/AccessibilityEventCompat\/appendRecord\/#android\.view\.accessibility\.AccessibilityEvent#androidx\.core\.view\.accessibility\.AccessibilityRecordCompat\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `event` of function androidx\.core\.view\.accessibility\/AccessibilityEventCompat\/getRecord\/#android\.view\.accessibility\.AccessibilityEvent#int\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `event` of function androidx\.core\.view\.accessibility\/AccessibilityEventCompat\/setAction\/#android\.view\.accessibility\.AccessibilityEvent#int\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `event` of function androidx\.core\.view\.accessibility\/AccessibilityEventCompat\/setContentChangeTypes\/#android\.view\.accessibility\.AccessibilityEvent#int\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `event` of function androidx\.core\.view\.accessibility\/AccessibilityEventCompat\/setMovementGranularity\/#android\.view\.accessibility\.AccessibilityEvent#int\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `event` of function androidx\.core\.view\/MotionEventCompat\/getAxisValue\/#android\.view\.MotionEvent#int\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `event` of function androidx\.core\.view\/MotionEventCompat\/getAxisValue\/#android\.view\.MotionEvent#int#int\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `event` of function androidx\.core\.view\/MotionEventCompat\/isFromSource\/#android\.view\.MotionEvent#int\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `executor` of function androidx\.slice\/SliceViewManager\/registerSliceCallback\/#android\.net\.Uri#java\.util\.concurrent\.Executor#androidx\.slice\.SliceViewManager\.SliceCallback\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `extras` of function androidx\.media2\.session\/MediaController\/setMediaUri\/#android\.net\.Uri#android\.os\.Bundle\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `factory` of function androidx\.lifecycle\.viewmodel\.compose\/\/viewModel\/#java\.lang\.Class\[TypeParam\(bounds=\[androidx\.lifecycle\.ViewModel\]\)\]#androidx\.lifecycle\.ViewModelStoreOwner#kotlin\.String\?#androidx\.lifecycle\.ViewModelProvider\.Factory\?#androidx\.lifecycle\.viewmodel\.CreationExtras\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `flags` of function androidx\.constraintlayout\.core\.widgets\/ConstraintWidgetContainer\/updateChildrenFromSolver\/#androidx\.constraintlayout\.core\.LinearSystem#boolean\[\]\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `fromX` of function androidx\.recyclerview\.widget\/DefaultItemAnimator\/animateMove\/#androidx\.recyclerview\.widget\.RecyclerView\.ViewHolder#int#int#int#int\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `fromX` of function androidx\.recyclerview\.widget\/SimpleItemAnimator\/animateMove\/#androidx\.recyclerview\.widget\.RecyclerView\.ViewHolder#int#int#int#int\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `fromY` of function androidx\.recyclerview\.widget\/DefaultItemAnimator\/animateMove\/#androidx\.recyclerview\.widget\.RecyclerView\.ViewHolder#int#int#int#int\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `fromY` of function androidx\.recyclerview\.widget\/SimpleItemAnimator\/animateMove\/#androidx\.recyclerview\.widget\.RecyclerView\.ViewHolder#int#int#int#int\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `group` of function androidx\.core\.view\/ViewGroupCompat\/setLayoutMode\/#android\.view\.ViewGroup#int\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `group` of function androidx\.core\.view\/ViewGroupCompat\/setTransitionGroup\/#android\.view\.ViewGroup#boolean\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `handler` of function androidx\.core\.os\/HandlerCompat\/postDelayed\/#android\.os\.Handler#java\.lang\.Runnable#java\.lang\.Object#long\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `holder` of function androidx\.paging\/LoadStateAdapter\/onBindViewHolder\/#TypeParam\(bounds=\[androidx\.recyclerview\.widget\.RecyclerView\.ViewHolder\]\)#androidx\.paging\.LoadState\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `horizontalGravity` of function androidx\.core\.widget\/RemoteViewsCompat\/setLinearLayoutHorizontalGravity\/android\.widget\.RemoteViews#kotlin\.Int#kotlin\.Int\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `horizontalGravity` of function androidx\.core\.widget\/RemoteViewsCompat\/setRelativeLayoutHorizontalGravity\/android\.widget\.RemoteViews#kotlin\.Int#kotlin\.Int\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `id` of function androidx\.leanback\.widget\/PlaybackControlsRow\.ThumbsAction\/ThumbsAction\/#int#android\.content\.Context#int#int\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `inflater` of function androidx\.fragment\.app\/Fragment\/onCreateOptionsMenu\/#android\.view\.Menu#android\.view\.MenuInflater\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `info` of function androidx\.compose\.runtime\/\/traceEventStart\/#kotlin\.Int#kotlin\.Int#kotlin\.Int#kotlin\.String\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `initial` of function androidx\.compose\.runtime\/\/collectAsState\/kotlinx\.coroutines\.flow\.Flow\[TypeParam\(bounds=\[TypeParam\(bounds=\[kotlin\.Any\?\]\)\]\)\]#TypeParam\(bounds=\[kotlin\.Any\?\]\)#kotlin\.coroutines\.CoroutineContext\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `initialValue` of function androidx\.compose\.animation\.core\/\/animate\/#kotlin\.Float#kotlin\.Float#kotlin\.Float#androidx\.compose\.animation\.core\.AnimationSpec\[kotlin\.Float\]#kotlin\.Function2\[kotlin\.Float,kotlin\.Float,kotlin\.Unit\]\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `initialValue` of function androidx\.compose\.animation\.core\/\/animateDecay\/#kotlin\.Float#kotlin\.Float#androidx\.compose\.animation\.core\.FloatDecayAnimationSpec#kotlin\.Function2\[kotlin\.Float,kotlin\.Float,kotlin\.Unit\]\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `initialVelocity` of function androidx\.compose\.animation\.core\/\/animateDecay\/#kotlin\.Float#kotlin\.Float#androidx\.compose\.animation\.core\.FloatDecayAnimationSpec#kotlin\.Function2\[kotlin\.Float,kotlin\.Float,kotlin\.Unit\]\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `isNullableAllowed` of function androidx\.navigation\/NavType\/NavType\/#kotlin\.Boolean\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `item` of function androidx\.core\.view\/MenuItemCompat\/setAlphabeticShortcut\/#android\.view\.MenuItem#char#int\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `item` of function androidx\.core\.view\/MenuItemCompat\/setIconTintList\/#android\.view\.MenuItem#android\.content\.res\.ColorStateList\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `item` of function androidx\.core\.view\/MenuItemCompat\/setIconTintMode\/#android\.view\.MenuItem#android\.graphics\.PorterDuff\.Mode\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `item` of function androidx\.core\.view\/MenuItemCompat\/setNumericShortcut\/#android\.view\.MenuItem#char#int\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `item` of function androidx\.core\.view\/MenuItemCompat\/setOnActionExpandListener\/#android\.view\.MenuItem#androidx\.core\.view\.MenuItemCompat\.OnActionExpandListener\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `item` of function androidx\.core\.view\/MenuItemCompat\/setShortcut\/#android\.view\.MenuItem#char#char#int#int\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `key` of function androidx\.collection\/LruCache\/entryRemoved\/#kotlin\.Boolean#TypeParam\(bounds=\[kotlin\.Any\]\)#TypeParam\(bounds=\[kotlin\.Any\]\)#TypeParam\(bounds=\[kotlin\.Any\]\)\?\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `key` of function androidx\.compose\.runtime\/\/traceEventStart\/#kotlin\.Int#kotlin\.Int#kotlin\.Int#kotlin\.String\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `key` of function androidx\.paging\/ItemKeyedDataSource\.LoadParams\/LoadParams\/#TypeParam\(bounds=\[kotlin\.Any\]\)#kotlin\.Int\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `key` of function androidx\.paging\/PageKeyedDataSource\.LoadParams\/LoadParams\/#TypeParam\(bounds=\[kotlin\.Any\]\)#kotlin\.Int\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `keyAlias` of function androidx\.security\.crypto\/MasterKey\.Builder\/Builder\/#android\.content\.Context#java\.lang\.String\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `label` of function androidx\.compose\.animation\.core\/Animatable\/Animatable\/#TypeParam\(bounds=\[kotlin\.Any\?\]\)#androidx\.compose\.animation\.core\.TwoWayConverter\[TypeParam\(bounds=\[kotlin\.Any\?\]\),TypeParam\(bounds=\[androidx\.compose\.animation\.core\.AnimationVector\]\)\]#TypeParam\(bounds=\[kotlin\.Any\?\]\)\?#kotlin\.String\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `label` of function androidx\.compose\.animation\/\/AnimatedVisibility\/#androidx\.compose\.animation\.core\.MutableTransitionState\[kotlin\.Boolean\]#androidx\.compose\.ui\.Modifier#androidx\.compose\.animation\.EnterTransition#androidx\.compose\.animation\.ExitTransition#kotlin\.String#kotlin\.Function1\[androidx\.compose\.animation\.AnimatedVisibilityScope,kotlin\.Unit\]\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `label` of function androidx\.compose\.animation\/\/AnimatedVisibility\/#kotlin\.Boolean#androidx\.compose\.ui\.Modifier#androidx\.compose\.animation\.EnterTransition#androidx\.compose\.animation\.ExitTransition#kotlin\.String#kotlin\.Function1\[androidx\.compose\.animation\.AnimatedVisibilityScope,kotlin\.Unit\]\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `label` of function androidx\.compose\.animation\/\/AnimatedVisibility\/androidx\.compose\.foundation\.layout\.ColumnScope#androidx\.compose\.animation\.core\.MutableTransitionState\[kotlin\.Boolean\]#androidx\.compose\.ui\.Modifier#androidx\.compose\.animation\.EnterTransition#androidx\.compose\.animation\.ExitTransition#kotlin\.String#kotlin\.Function1\[androidx\.compose\.animation\.AnimatedVisibilityScope,kotlin\.Unit\]\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `label` of function androidx\.compose\.animation\/\/AnimatedVisibility\/androidx\.compose\.foundation\.layout\.ColumnScope#kotlin\.Boolean#androidx\.compose\.ui\.Modifier#androidx\.compose\.animation\.EnterTransition#androidx\.compose\.animation\.ExitTransition#kotlin\.String#kotlin\.Function1\[androidx\.compose\.animation\.AnimatedVisibilityScope,kotlin\.Unit\]\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `label` of function androidx\.compose\.animation\/\/AnimatedVisibility\/androidx\.compose\.foundation\.layout\.RowScope#androidx\.compose\.animation\.core\.MutableTransitionState\[kotlin\.Boolean\]#androidx\.compose\.ui\.Modifier#androidx\.compose\.animation\.EnterTransition#androidx\.compose\.animation\.ExitTransition#kotlin\.String#kotlin\.Function1\[androidx\.compose\.animation\.AnimatedVisibilityScope,kotlin\.Unit\]\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `label` of function androidx\.compose\.animation\/\/AnimatedVisibility\/androidx\.compose\.foundation\.layout\.RowScope#kotlin\.Boolean#androidx\.compose\.ui\.Modifier#androidx\.compose\.animation\.EnterTransition#androidx\.compose\.animation\.ExitTransition#kotlin\.String#kotlin\.Function1\[androidx\.compose\.animation\.AnimatedVisibilityScope,kotlin\.Unit\]\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `label` of function androidx\.compose\.foundation\.layout\/ColumnScope\/AnimatedVisibility\/androidx\.compose\.foundation\.layout\.ColumnScope#androidx\.compose\.animation\.core\.MutableTransitionState\[kotlin\.Boolean\]#androidx\.compose\.ui\.Modifier#androidx\.compose\.animation\.EnterTransition#androidx\.compose\.animation\.ExitTransition#kotlin\.String#kotlin\.Function1\[androidx\.compose\.animation\.AnimatedVisibilityScope,kotlin\.Unit\]\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `label` of function androidx\.compose\.foundation\.layout\/ColumnScope\/AnimatedVisibility\/androidx\.compose\.foundation\.layout\.ColumnScope#kotlin\.Boolean#androidx\.compose\.ui\.Modifier#androidx\.compose\.animation\.EnterTransition#androidx\.compose\.animation\.ExitTransition#kotlin\.String#kotlin\.Function1\[androidx\.compose\.animation\.AnimatedVisibilityScope,kotlin\.Unit\]\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `label` of function androidx\.compose\.foundation\.layout\/RowScope\/AnimatedVisibility\/androidx\.compose\.foundation\.layout\.RowScope#androidx\.compose\.animation\.core\.MutableTransitionState\[kotlin\.Boolean\]#androidx\.compose\.ui\.Modifier#androidx\.compose\.animation\.EnterTransition#androidx\.compose\.animation\.ExitTransition#kotlin\.String#kotlin\.Function1\[androidx\.compose\.animation\.AnimatedVisibilityScope,kotlin\.Unit\]\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `label` of function androidx\.compose\.foundation\.layout\/RowScope\/AnimatedVisibility\/androidx\.compose\.foundation\.layout\.RowScope#kotlin\.Boolean#androidx\.compose\.ui\.Modifier#androidx\.compose\.animation\.EnterTransition#androidx\.compose\.animation\.ExitTransition#kotlin\.String#kotlin\.Function1\[androidx\.compose\.animation\.AnimatedVisibilityScope,kotlin\.Unit\]\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `label` of function androidx\.compose\.ui\.test\/\/onAllNodesWithContentDescription\/androidx\.compose\.ui\.test\.SemanticsNodeInteractionsProvider#kotlin\.String#kotlin\.Boolean#kotlin\.Boolean#kotlin\.Boolean\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `label` of function androidx\.compose\.ui\.test\/\/onNodeWithContentDescription\/androidx\.compose\.ui\.test\.SemanticsNodeInteractionsProvider#kotlin\.String#kotlin\.Boolean#kotlin\.Boolean#kotlin\.Boolean\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `label` of function androidx\.compose\.ui\.test\/SemanticsNodeInteractionsProvider\/onAllNodesWithContentDescription\/androidx\.compose\.ui\.test\.SemanticsNodeInteractionsProvider#kotlin\.String#kotlin\.Boolean#kotlin\.Boolean#kotlin\.Boolean\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `label` of function androidx\.compose\.ui\.test\/SemanticsNodeInteractionsProvider\/onNodeWithContentDescription\/androidx\.compose\.ui\.test\.SemanticsNodeInteractionsProvider#kotlin\.String#kotlin\.Boolean#kotlin\.Boolean#kotlin\.Boolean\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `leadingIconContentColor` of function androidx\.compose\.material\/ChipDefaults\/outlinedChipColors\/#androidx\.compose\.ui\.graphics\.Color#androidx\.compose\.ui\.graphics\.Color#androidx\.compose\.ui\.graphics\.Color#androidx\.compose\.ui\.graphics\.Color#androidx\.compose\.ui\.graphics\.Color#androidx\.compose\.ui\.graphics\.Color\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `left` of function androidx\.core\.graphics\.drawable\/DrawableCompat\/setHotspotBounds\/#android\.graphics\.drawable\.Drawable#int#int#int#int\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `len` of function androidx\.constraintlayout\.motion\.widget\/DesignTool\/getAnimationPath\/#java\.lang\.Object#float\[\]#int\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `listener` of function androidx\.camera\.view\/RotationProvider\/addListener\/#java\.util\.concurrent\.Executor#androidx\.camera\.view\.RotationProvider\.Listener\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `listener` of function androidx\.core\.view\/DragStartHelper\/DragStartHelper\/#android\.view\.View#androidx\.core\.view\.DragStartHelper\.OnDragStartListener\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `listener` of function androidx\.customview\.poolingcontainer\/\/addPoolingContainerListener\/android\.view\.View#androidx\.customview\.poolingcontainer\.PoolingContainerListener\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `listener` of function androidx\.customview\.poolingcontainer\/PoolingContainer\/addPoolingContainerListener\/android\.view\.View#androidx\.customview\.poolingcontainer\.PoolingContainerListener\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `listView` of function androidx\.core\.widget\/ListViewCompat\/canScrollList\/#android\.widget\.ListView#int\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `logoPresenter` of function androidx\.leanback\.widget\/FullWidthDetailsOverviewRowPresenter\.ViewHolder\/ViewHolder\/#android\.view\.View#androidx\.leanback\.widget\.Presenter#androidx\.leanback\.widget\.DetailsOverviewLogoPresenter\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `lp` of function androidx\.core\.view\/MarginLayoutParamsCompat\/setLayoutDirection\/#android\.view\.ViewGroup\.MarginLayoutParams#int\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `manager` of function androidx\.core\.view\.accessibility\/AccessibilityManagerCompat\/addTouchExplorationStateChangeListener\/#android\.view\.accessibility\.AccessibilityManager#androidx\.core\.view\.accessibility\.AccessibilityManagerCompat\.TouchExplorationStateChangeListener\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `manager` of function androidx\.core\.view\.accessibility\/AccessibilityManagerCompat\/removeTouchExplorationStateChangeListener\/#android\.view\.accessibility\.AccessibilityManager#androidx\.core\.view\.accessibility\.AccessibilityManagerCompat\.TouchExplorationStateChangeListener\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `margin` of function androidx\.constraintlayout\.widget\/ConstraintSet\/createBarrier\/#int#int#int#int\.\.\.\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `mask` of function androidx\.core\.view\/ViewCompat\/setScrollIndicators\/#android\.view\.View#int#int\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `matchHeightConstraintsFirst` of function androidx\.compose\.foundation\.layout\/\/aspectRatio\/androidx\.compose\.ui\.Modifier#kotlin\.Float#kotlin\.Boolean\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `matchHeightConstraintsFirst` of function androidx\.compose\.ui\/Modifier\/aspectRatio\/androidx\.compose\.ui\.Modifier#kotlin\.Float#kotlin\.Boolean\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `message` of function androidx\.core\.os\/MessageCompat\/setAsynchronous\/#android\.os\.Message#boolean\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `metadata` of function androidx\.media2\.common\/SessionPlayer\/setPlaylist\/#java\.util\.List<androidx\.media2\.common\.MediaItem>#androidx\.media2\.common\.MediaMetadata\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `metadata` of function androidx\.media2\.player\/MediaPlayer\/setPlaylist\/#java\.util\.List<androidx\.media2\.common\.MediaItem>#androidx\.media2\.common\.MediaMetadata\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `modifier` of function androidx\.compose\.material\/\/Divider\/#androidx\.compose\.ui\.Modifier#androidx\.compose\.ui\.graphics\.Color#androidx\.compose\.ui\.unit\.Dp#androidx\.compose\.ui\.unit\.Dp\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `motionScene` of function androidx\.constraintlayout\.compose\/\/MotionCarousel\/#androidx\.constraintlayout\.compose\.MotionScene#kotlin\.Int#kotlin\.Int#kotlin\.String#kotlin\.String#kotlin\.String#kotlin\.Boolean#kotlin\.Function1\[androidx\.constraintlayout\.compose\.MotionCarouselScope,kotlin\.Unit\]\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `name` of function androidx\.leanback\.widget\/Parallax\/createProperty\/#java\.lang\.String#int\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `name` of function androidx\.leanback\.widget\/RecyclerViewParallax\/createProperty\/#java\.lang\.String#int\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `nextPageKey` of function androidx\.paging\/PageKeyedDataSource\.LoadInitialCallback\/onResult\/#kotlin\.collections\.List\[TypeParam\(bounds=\[kotlin\.Any\?\]\)\]#kotlin\.Int#kotlin\.Int#TypeParam\(bounds=\[kotlin\.Any\?\]\)\?#TypeParam\(bounds=\[kotlin\.Any\?\]\)\?\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `night` of function androidx\.core\.widget\/RemoteViewsCompat\/setSwitchThumbIcon\/android\.widget\.RemoteViews#kotlin\.Int#android\.graphics\.drawable\.Icon\?#android\.graphics\.drawable\.Icon\?\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `night` of function androidx\.core\.widget\/RemoteViewsCompat\/setSwitchTrackIcon\/android\.widget\.RemoteViews#kotlin\.Int#android\.graphics\.drawable\.Icon\?#android\.graphics\.drawable\.Icon\?\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `oldValue` of function androidx\.collection\/LruCache\/entryRemoved\/#kotlin\.Boolean#TypeParam\(bounds=\[kotlin\.Any\]\)#TypeParam\(bounds=\[kotlin\.Any\]\)#TypeParam\(bounds=\[kotlin\.Any\]\)\?\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `onSelectAllRequested` of function androidx\.compose\.ui\.platform\/TextToolbar\/showMenu\/#androidx\.compose\.ui\.geometry\.Rect#kotlin\.Function0\[kotlin\.Unit\]\?#kotlin\.Function0\[kotlin\.Unit\]\?#kotlin\.Function0\[kotlin\.Unit\]\?#kotlin\.Function0\[kotlin\.Unit\]\?\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `operation` of function androidx\.compose\.ui\.graphics\/AndroidPath\/op\/#androidx\.compose\.ui\.graphics\.Path#androidx\.compose\.ui\.graphics\.Path#androidx\.compose\.ui\.graphics\.PathOperation\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `operation` of function androidx\.compose\.ui\.graphics\/Path\/op\/#androidx\.compose\.ui\.graphics\.Path#androidx\.compose\.ui\.graphics\.Path#androidx\.compose\.ui\.graphics\.PathOperation\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `outlineIconIndex` of function androidx\.leanback\.widget\/PlaybackControlsRow\.ThumbsAction\/ThumbsAction\/#int#android\.content\.Context#int#int\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `output` of function androidx\.datastore\.core\/Serializer\/writeTo\/#TypeParam\(bounds=\[kotlin\.Any\?\]\)#java\.io\.OutputStream\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `painter` of function androidx\.compose\.ui\.draw\/\/paint\/androidx\.compose\.ui\.Modifier#androidx\.compose\.ui\.graphics\.painter\.Painter#kotlin\.Boolean#androidx\.compose\.ui\.Alignment#androidx\.compose\.ui\.layout\.ContentScale#kotlin\.Float#androidx\.compose\.ui\.graphics\.ColorFilter\?\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `painter` of function androidx\.compose\.ui\/Modifier\/paint\/androidx\.compose\.ui\.Modifier#androidx\.compose\.ui\.graphics\.painter\.Painter#kotlin\.Boolean#androidx\.compose\.ui\.Alignment#androidx\.compose\.ui\.layout\.ContentScale#kotlin\.Float#androidx\.compose\.ui\.graphics\.ColorFilter\?\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `parcelableClass` of function androidx\.test\.espresso\.remote\/TypeProtoConverters\/byteStringToParcelable\/#com\.google\.protobuf\.ByteString#java\.lang\.Class<android\.os\.Parcelable>\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `parent` of function androidx\.core\.view\/ViewParentCompat\/notifySubtreeAccessibilityStateChanged\/#android\.view\.ViewParent#android\.view\.View#android\.view\.View#int\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `parent` of function androidx\.core\.view\/ViewParentCompat\/onNestedFling\/#android\.view\.ViewParent#android\.view\.View#float#float#boolean\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `parent` of function androidx\.core\.view\/ViewParentCompat\/onNestedPreFling\/#android\.view\.ViewParent#android\.view\.View#float#float\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `parent` of function androidx\.core\.view\/ViewParentCompat\/onNestedPreScroll\/#android\.view\.ViewParent#android\.view\.View#int#int#int\[\]\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `parent` of function androidx\.core\.view\/ViewParentCompat\/onNestedPreScroll\/#android\.view\.ViewParent#android\.view\.View#int#int#int\[\]#int\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `parent` of function androidx\.core\.view\/ViewParentCompat\/onNestedScroll\/#android\.view\.ViewParent#android\.view\.View#int#int#int#int\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `parent` of function androidx\.core\.view\/ViewParentCompat\/onNestedScroll\/#android\.view\.ViewParent#android\.view\.View#int#int#int#int#int\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `parent` of function androidx\.core\.view\/ViewParentCompat\/onNestedScroll\/#android\.view\.ViewParent#android\.view\.View#int#int#int#int#int#int\[\]\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `parent` of function androidx\.core\.view\/ViewParentCompat\/onNestedScrollAccepted\/#android\.view\.ViewParent#android\.view\.View#android\.view\.View#int\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `parent` of function androidx\.core\.view\/ViewParentCompat\/onNestedScrollAccepted\/#android\.view\.ViewParent#android\.view\.View#android\.view\.View#int#int\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `parent` of function androidx\.core\.view\/ViewParentCompat\/onStartNestedScroll\/#android\.view\.ViewParent#android\.view\.View#android\.view\.View#int\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `parent` of function androidx\.core\.view\/ViewParentCompat\/onStartNestedScroll\/#android\.view\.ViewParent#android\.view\.View#android\.view\.View#int#int\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `parent` of function androidx\.core\.view\/ViewParentCompat\/onStopNestedScroll\/#android\.view\.ViewParent#android\.view\.View\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `parent` of function androidx\.core\.view\/ViewParentCompat\/onStopNestedScroll\/#android\.view\.ViewParent#android\.view\.View#int\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `parent` of function androidx\.leanback\.widget\/GridLayoutManager\/requestChildRectangleOnScreen\/#androidx\.recyclerview\.widget\.RecyclerView#android\.view\.View#android\.graphics\.Rect#boolean\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `parent` of function androidx\.recyclerview\.widget\/RecyclerView\.LayoutManager\/requestChildRectangleOnScreen\/#androidx\.recyclerview\.widget\.RecyclerView#android\.view\.View#android\.graphics\.Rect#boolean\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `path` of function androidx\.core\.graphics\/PathUtils\/flatten\/#android\.graphics\.Path#float\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `pathFillType` of function androidx\.compose\.ui\.graphics\.vector\/\/path\/androidx\.compose\.ui\.graphics\.vector\.ImageVector\.Builder#kotlin\.String#androidx\.compose\.ui\.graphics\.Brush\?#kotlin\.Float#androidx\.compose\.ui\.graphics\.Brush\?#kotlin\.Float#kotlin\.Float#androidx\.compose\.ui\.graphics\.StrokeCap#androidx\.compose\.ui\.graphics\.StrokeJoin#kotlin\.Float#androidx\.compose\.ui\.graphics\.PathFillType#kotlin\.Function1\[androidx\.compose\.ui\.graphics\.vector\.PathBuilder,kotlin\.Unit\]\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `pathFillType` of function androidx\.compose\.ui\.graphics\.vector\/ImageVector\.Builder\/path\/androidx\.compose\.ui\.graphics\.vector\.ImageVector\.Builder#kotlin\.String#androidx\.compose\.ui\.graphics\.Brush\?#kotlin\.Float#androidx\.compose\.ui\.graphics\.Brush\?#kotlin\.Float#kotlin\.Float#androidx\.compose\.ui\.graphics\.StrokeCap#androidx\.compose\.ui\.graphics\.StrokeJoin#kotlin\.Float#androidx\.compose\.ui\.graphics\.PathFillType#kotlin\.Function1\[androidx\.compose\.ui\.graphics\.vector\.PathBuilder,kotlin\.Unit\]\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `payload` of function androidx\.core\.view\/ContentInfoCompat\/partition\/#android\.view\.ContentInfo#java\.util\.function\.Predicate<android\.content\.ClipData\.Item>\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `payload` of function androidx\.recyclerview\.widget\/BatchingListUpdateCallback\/onChanged\/#int#int#java\.lang\.Object\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `payload` of function androidx\.recyclerview\.widget\/ListUpdateCallback\/onChanged\/#int#int#java\.lang\.Object\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `payload` of function androidx\.recyclerview\.widget\/SortedList\.BatchedCallback\/onChanged\/#int#int#java\.lang\.Object\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `payload` of function androidx\.recyclerview\.widget\/SortedList\.Callback\/onChanged\/#int#int#java\.lang\.Object\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `payload` of function androidx\.recyclerview\.widget\/SortedListAdapterCallback\/onChanged\/#int#int#java\.lang\.Object\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `phase` of function androidx\.constraintlayout\.core\.motion\.utils\/KeyCycleOscillator\/setPoint\/#int#int#java\.lang\.String#int#float#float#float#float\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `phase` of function androidx\.constraintlayout\.core\.motion\.utils\/KeyCycleOscillator\/setPoint\/#int#int#java\.lang\.String#int#float#float#float#float#java\.lang\.Object\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `placeholdersEnabled` of function androidx\.paging\/ItemKeyedDataSource\.LoadInitialParams\/LoadInitialParams\/#TypeParam\(bounds=\[kotlin\.Any\]\)\?#kotlin\.Int#kotlin\.Boolean\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `placeholdersEnabled` of function androidx\.paging\/PageKeyedDataSource\.LoadInitialParams\/LoadInitialParams\/#kotlin\.Int#kotlin\.Boolean\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `pointCount` of function androidx\.constraintlayout\.core\.motion\/Motion\/buildPath\/#float\[\]#int\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `pointerId` of function androidx\.customview\.widget\/ViewDragHelper\/isEdgeTouched\/#int#int\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `popupWindow` of function androidx\.core\.widget\/PopupWindowCompat\/setOverlapAnchor\/#android\.widget\.PopupWindow#boolean\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `popupWindow` of function androidx\.core\.widget\/PopupWindowCompat\/setWindowLayoutType\/#android\.widget\.PopupWindow#int\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `position` of function androidx\.compose\.ui\.layout\/Placeable\.PlacementScope\/place\/androidx\.compose\.ui\.layout\.Placeable#androidx\.compose\.ui\.unit\.IntOffset#kotlin\.Float\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `position` of function androidx\.compose\.ui\.layout\/Placeable\.PlacementScope\/placeRelative\/androidx\.compose\.ui\.layout\.Placeable#androidx\.compose\.ui\.unit\.IntOffset#kotlin\.Float\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `position` of function androidx\.compose\.ui\.layout\/Placeable\.PlacementScope\/placeRelativeWithLayer\/androidx\.compose\.ui\.layout\.Placeable#androidx\.compose\.ui\.unit\.IntOffset#kotlin\.Float#kotlin\.Function1\[androidx\.compose\.ui\.graphics\.GraphicsLayerScope,kotlin\.Unit\]\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `position` of function androidx\.compose\.ui\.layout\/Placeable\.PlacementScope\/placeWithLayer\/androidx\.compose\.ui\.layout\.Placeable#androidx\.compose\.ui\.unit\.IntOffset#kotlin\.Float#kotlin\.Function1\[androidx\.compose\.ui\.graphics\.GraphicsLayerScope,kotlin\.Unit\]\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `position` of function androidx\.compose\.ui\.layout\/Placeable\/placeAt\/#androidx\.compose\.ui\.unit\.IntOffset#kotlin\.Float#kotlin\.Function1\[androidx\.compose\.ui\.graphics\.GraphicsLayerScope,kotlin\.Unit\]\?\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `previousPageKey` of function androidx\.paging\/PageKeyedDataSource\.LoadInitialCallback\/onResult\/#kotlin\.collections\.List\[TypeParam\(bounds=\[kotlin\.Any\?\]\)\]#kotlin\.Int#kotlin\.Int#TypeParam\(bounds=\[kotlin\.Any\?\]\)\?#TypeParam\(bounds=\[kotlin\.Any\?\]\)\?\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `priority` of function androidx\.camera\.camera2\.interop\/CaptureRequestOptions\/retrieveOptionWithPriority\/#androidx\.camera\.core\.impl\.Config\.Option<ValueT>#androidx\.camera\.core\.impl\.Config\.OptionPriority\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `priority` of function androidx\.camera\.core\/CameraXConfig\/retrieveOptionWithPriority\/#androidx\.camera\.core\.impl\.Config\.Option<ValueT>#androidx\.camera\.core\.impl\.Config\.OptionPriority\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `width` of function androidx\.camera\.testing\.impl\.fakes/FakeImageReaderProxy/newInstance/\#int\#int\#int\#int\#long/PointingToDeclaration/
-WARN: Missing @param tag for parameter `height` of function androidx\.camera\.testing\.impl\.fakes/FakeImageReaderProxy/newInstance/\#int\#int\#int\#int\#long/PointingToDeclaration/
-WARN: Missing @param tag for parameter `format` of function androidx\.camera\.testing\.impl\.fakes/FakeImageReaderProxy/newInstance/\#int\#int\#int\#int\#long/PointingToDeclaration/
-WARN: Missing @param tag for parameter `usage` of function androidx\.camera\.testing\.impl\.fakes/FakeImageReaderProxy/newInstance/\#int\#int\#int\#int\#long/PointingToDeclaration/
-WARN: Missing @param tag for parameter `priority` of function androidx\.camera\.testing\.impl\.fakes/FakeUseCaseConfig/retrieveOptionWithPriority/\#androidx\.camera\.core\.impl\.Config\.Option<ValueT>\#androidx\.camera\.core\.impl\.Config\.OptionPriority/PointingToDeclaration/
-WARN: Missing @param tag for parameter `classType` of function androidx\.camera\.testing\.impl\.mocks/MockConsumer/verifyAcceptCall/\#java\.lang\.Class<\?>\#boolean\#androidx\.camera\.testing\.impl\.mocks\.helpers\.CallTimes\#androidx\.camera\.testing\.impl\.mocks\.helpers\.ArgumentCaptor<T>/PointingToDeclaration/
-WARN: Missing @param tag for parameter `inOrder` of function androidx\.camera\.testing\.impl\.mocks/MockConsumer/verifyAcceptCall/\#java\.lang\.Class<\?>\#boolean\#androidx\.camera\.testing\.impl\.mocks\.helpers\.CallTimes\#androidx\.camera\.testing\.impl\.mocks\.helpers\.ArgumentCaptor<T>/PointingToDeclaration/
-WARN: Missing @param tag for parameter `callTimes` of function androidx\.camera\.testing\.impl\.mocks/MockConsumer/verifyAcceptCall/\#java\.lang\.Class<\?>\#boolean\#androidx\.camera\.testing\.impl\.mocks\.helpers\.CallTimes\#androidx\.camera\.testing\.impl\.mocks\.helpers\.ArgumentCaptor<T>/PointingToDeclaration/
-WARN: Missing @param tag for parameter `query` of function androidx\.leanback\.app\/SearchFragment\/createArgs\/#android\.os\.Bundle#java\.lang\.String\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `query` of function androidx\.leanback\.app\/SearchSupportFragment\/createArgs\/#android\.os\.Bundle#java\.lang\.String\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `radians` of function androidx\.compose\.ui\.graphics\/\/rotateRad\/androidx\.compose\.ui\.graphics\.Canvas#kotlin\.Float#kotlin\.Float#kotlin\.Float\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `radians` of function androidx\.compose\.ui\.graphics\/Canvas\/rotateRad\/androidx\.compose\.ui\.graphics\.Canvas#kotlin\.Float#kotlin\.Float#kotlin\.Float\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `reason` of function androidx\.car\.app\.model\/AlertCallbackDelegate\/sendCancel\/#int#androidx\.car\.app\.OnDoneCallback\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `removeFromDefinition` of function androidx\.constraintlayout\.core\/ArrayLinkedVariables\/add\/#androidx\.constraintlayout\.core\.SolverVariable#float#boolean\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `removeFromDefinition` of function androidx\.constraintlayout\.core\/ArrayLinkedVariables\/remove\/#androidx\.constraintlayout\.core\.SolverVariable#boolean\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `removeFromDefinition` of function androidx\.constraintlayout\.core\/ArrayLinkedVariables\/use\/#androidx\.constraintlayout\.core\.ArrayRow#boolean\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `renderEffect` of function androidx\.compose\.ui\.graphics\/BlurEffect\/BlurEffect\/#androidx\.compose\.ui\.graphics\.RenderEffect\?#kotlin\.Float#kotlin\.Float#androidx\.compose\.ui\.graphics\.TileMode\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `requestedInitialKey` of function androidx\.paging\/ItemKeyedDataSource\.LoadInitialParams\/LoadInitialParams\/#TypeParam\(bounds=\[kotlin\.Any\]\)\?#kotlin\.Int#kotlin\.Boolean\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `requestedLoadSize` of function androidx\.paging\/ItemKeyedDataSource\.LoadInitialParams\/LoadInitialParams\/#TypeParam\(bounds=\[kotlin\.Any\]\)\?#kotlin\.Int#kotlin\.Boolean\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `requestedLoadSize` of function androidx\.paging\/ItemKeyedDataSource\.LoadParams\/LoadParams\/#TypeParam\(bounds=\[kotlin\.Any\]\)#kotlin\.Int\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `requestedLoadSize` of function androidx\.paging\/PageKeyedDataSource\.LoadInitialParams\/LoadInitialParams\/#kotlin\.Int#kotlin\.Boolean\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `requestedLoadSize` of function androidx\.paging\/PageKeyedDataSource\.LoadParams\/LoadParams\/#TypeParam\(bounds=\[kotlin\.Any\]\)#kotlin\.Int\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `res` of function androidx\.core\.content\.res\/ResourcesCompat\/getColor\/#android\.content\.res\.Resources#int#android\.content\.res\.Resources\.Theme\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `res` of function androidx\.core\.content\.res\/ResourcesCompat\/getColorStateList\/#android\.content\.res\.Resources#int#android\.content\.res\.Resources\.Theme\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `res` of function androidx\.core\.content\.res\/ResourcesCompat\/getDrawable\/#android\.content\.res\.Resources#int#android\.content\.res\.Resources\.Theme\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `res` of function androidx\.core\.content\.res\/ResourcesCompat\/getDrawableForDensity\/#android\.content\.res\.Resources#int#int#android\.content\.res\.Resources\.Theme\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `res` of function androidx\.core\.content\.res\/ResourcesCompat\/getFloat\/#android\.content\.res\.Resources#int\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `resolver` of function androidx\.core\.content\/ContentResolverCompat\/query\/#android\.content\.ContentResolver#android\.net\.Uri#java\.lang\.String\[\]#java\.lang\.String#java\.lang\.String\[\]#java\.lang\.String#androidx\.core\.os\.CancellationSignal\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `resourceId` of function androidx\.core\.content\/\/withStyledAttributes\/android\.content\.Context#kotlin\.Int#kotlin\.IntArray#kotlin\.Function1\[android\.content\.res\.TypedArray,kotlin\.Unit\]\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `resourceId` of function androidx\.core\.content\/ContextKt\/withStyledAttributes\/android\.content\.Context#kotlin\.Int#kotlin\.IntArray#kotlin\.Function1\[android\.content\.res\.TypedArray,kotlin\.Unit\]\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `right` of function androidx\.core\.graphics\.drawable\/DrawableCompat\/setHotspotBounds\/#android\.graphics\.drawable\.Drawable#int#int#int#int\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `rootMatcher` of function androidx\.test\.espresso\/DataInteraction\.DisplayDataMatcher\/displayDataMatcher\/#org\.hamcrest\.Matcher<android\.view\.View>#org\.hamcrest\.Matcher<\? extends java\.lang\.Object>#org\.hamcrest\.Matcher<androidx\.test\.espresso\.Root>#androidx\.test\.espresso\.util\.EspressoOptional<java\.lang\.Integer>#androidx\.test\.espresso\.action\.AdapterViewProtocol\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `rv` of function androidx\.recyclerview\.widget\/RecyclerView\.OnItemTouchListener\/onInterceptTouchEvent\/#androidx\.recyclerview\.widget\.RecyclerView#android\.view\.MotionEvent\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `rv` of function androidx\.recyclerview\.widget\/RecyclerView\.OnItemTouchListener\/onTouchEvent\/#androidx\.recyclerview\.widget\.RecyclerView#android\.view\.MotionEvent\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `rv` of function androidx\.recyclerview\.widget\/RecyclerView\.SimpleOnItemTouchListener\/onInterceptTouchEvent\/#androidx\.recyclerview\.widget\.RecyclerView#android\.view\.MotionEvent\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `rv` of function androidx\.recyclerview\.widget\/RecyclerView\.SimpleOnItemTouchListener\/onTouchEvent\/#androidx\.recyclerview\.widget\.RecyclerView#android\.view\.MotionEvent\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `scaleGestureDetector` of function androidx\.core\.view\/ScaleGestureDetectorCompat\/setQuickScaleEnabled\/#android\.view\.ScaleGestureDetector#boolean\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `scaleGestureDetector` of function androidx\.core\.view\/ScaleGestureDetectorCompat\/setQuickScaleEnabled\/#java\.lang\.Object#boolean\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `sceneRoot` of function androidx\.transition\/TransitionInflater\/inflateTransitionManager\/#int#android\.view\.ViewGroup\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `serializer` of function androidx\.datastore\.rxjava2\/\/rxDataStore\/#kotlin\.String#androidx\.datastore\.core\.Serializer\[TypeParam\(bounds=\[kotlin\.Any\]\)\]#androidx\.datastore\.core\.handlers\.ReplaceFileCorruptionHandler\[TypeParam\(bounds=\[kotlin\.Any\]\)\]\?#kotlin\.Function1\[android\.content\.Context,kotlin\.collections\.List\[androidx\.datastore\.core\.DataMigration\[TypeParam\(bounds=\[kotlin\.Any\]\)\]\]\]#io\.reactivex\.Scheduler\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `serializer` of function androidx\.datastore\.rxjava2\/RxDataStoreDelegateKt\/rxDataStore\/#kotlin\.String#androidx\.datastore\.core\.Serializer\[TypeParam\(bounds=\[kotlin\.Any\]\)\]#androidx\.datastore\.core\.handlers\.ReplaceFileCorruptionHandler\[TypeParam\(bounds=\[kotlin\.Any\]\)\]\?#kotlin\.Function1\[android\.content\.Context,kotlin\.collections\.List\[androidx\.datastore\.core\.DataMigration\[TypeParam\(bounds=\[kotlin\.Any\]\)\]\]\]#io\.reactivex\.Scheduler\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `serializer` of function androidx\.datastore\.rxjava3\/\/rxDataStore\/#kotlin\.String#androidx\.datastore\.core\.Serializer\[TypeParam\(bounds=\[kotlin\.Any\]\)\]#androidx\.datastore\.core\.handlers\.ReplaceFileCorruptionHandler\[TypeParam\(bounds=\[kotlin\.Any\]\)\]\?#kotlin\.Function1\[android\.content\.Context,kotlin\.collections\.List\[androidx\.datastore\.core\.DataMigration\[TypeParam\(bounds=\[kotlin\.Any\]\)\]\]\]#io\.reactivex\.rxjava3\.core\.Scheduler\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `serializer` of function androidx\.datastore\.rxjava3\/RxDataStoreDelegateKt\/rxDataStore\/#kotlin\.String#androidx\.datastore\.core\.Serializer\[TypeParam\(bounds=\[kotlin\.Any\]\)\]#androidx\.datastore\.core\.handlers\.ReplaceFileCorruptionHandler\[TypeParam\(bounds=\[kotlin\.Any\]\)\]\?#kotlin\.Function1\[android\.content\.Context,kotlin\.collections\.List\[androidx\.datastore\.core\.DataMigration\[TypeParam\(bounds=\[kotlin\.Any\]\)\]\]\]#io\.reactivex\.rxjava3\.core\.Scheduler\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `serializer` of function androidx\.datastore\/\/dataStore\/#kotlin\.String#androidx\.datastore\.core\.Serializer\[TypeParam\(bounds=\[kotlin\.Any\?\]\)\]#androidx\.datastore\.core\.handlers\.ReplaceFileCorruptionHandler\[TypeParam\(bounds=\[kotlin\.Any\?\]\)\]\?#kotlin\.Function1\[android\.content\.Context,kotlin\.collections\.List\[androidx\.datastore\.core\.DataMigration\[TypeParam\(bounds=\[kotlin\.Any\?\]\)\]\]\]#kotlinx\.coroutines\.CoroutineScope\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `serializer` of function androidx\.datastore\/DataStoreDelegateKt\/dataStore\/#kotlin\.String#androidx\.datastore\.core\.Serializer\[TypeParam\(bounds=\[kotlin\.Any\?\]\)\]#androidx\.datastore\.core\.handlers\.ReplaceFileCorruptionHandler\[TypeParam\(bounds=\[kotlin\.Any\?\]\)\]\?#kotlin\.Function1\[android\.content\.Context,kotlin\.collections\.List\[androidx\.datastore\.core\.DataMigration\[TypeParam\(bounds=\[kotlin\.Any\?\]\)\]\]\]#kotlinx\.coroutines\.CoroutineScope\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `service` of function androidx\.core\.app\/ServiceCompat\/stopForeground\/#android\.app\.Service#int\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `settings` of function androidx\.webkit\/WebSettingsCompat\/setAlgorithmicDarkeningAllowed\/#android\.webkit\.WebSettings#boolean\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `settings` of function androidx\.webkit\/WebSettingsCompat\/setDisabledActionModeMenuItems\/#android\.webkit\.WebSettings#int\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `settings` of function androidx\.webkit\/WebSettingsCompat\/setEnterpriseAuthenticationAppLinkPolicyEnabled\/#android\.webkit\.WebSettings#boolean\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `settings` of function androidx\.webkit\/WebSettingsCompat\/setForceDark\/#android\.webkit\.WebSettings#int\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `settings` of function androidx\.webkit\/WebSettingsCompat\/setForceDarkStrategy\/#android\.webkit\.WebSettings#int\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `settings` of function androidx\.webkit\/WebSettingsCompat\/setSafeBrowsingEnabled\/#android\.webkit\.WebSettings#boolean\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `shape` of function androidx\.compose\.material\/\/Chip\/#kotlin\.Function0\[kotlin\.Unit\]#androidx\.compose\.ui\.Modifier#kotlin\.Boolean#androidx\.compose\.foundation\.interaction\.MutableInteractionSource#androidx\.compose\.ui\.graphics\.Shape#androidx\.compose\.foundation\.BorderStroke\?#androidx\.compose\.material\.ChipColors#kotlin\.Function0\[kotlin\.Unit\]\?#kotlin\.Function1\[androidx\.compose\.foundation\.layout\.RowScope,kotlin\.Unit\]\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `shape` of function androidx\.compose\.material\/TextFieldDefaults\/BorderBox\/#kotlin\.Boolean#kotlin\.Boolean#androidx\.compose\.foundation\.interaction\.InteractionSource#androidx\.compose\.material\.TextFieldColors#androidx\.compose\.ui\.graphics\.Shape#androidx\.compose\.ui\.unit\.Dp#androidx\.compose\.ui\.unit\.Dp\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `shape` of function androidx\.compose\.material3\/\/NavigationDrawerItem\/#kotlin\.Function0\[kotlin\.Unit\]#kotlin\.Boolean#kotlin\.Function0\[kotlin\.Unit\]#androidx\.compose\.ui\.Modifier#kotlin\.Function0\[kotlin\.Unit\]\?#kotlin\.Function0\[kotlin\.Unit\]\?#androidx\.compose\.ui\.graphics\.Shape#androidx\.compose\.material3\.NavigationDrawerItemColors#androidx\.compose\.foundation\.interaction\.MutableInteractionSource\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `shape` of function androidx\.constraintlayout\.core\.motion\.utils\/KeyCycleOscillator\/setPoint\/#int#int#java\.lang\.String#int#float#float#float#float\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `shape` of function androidx\.constraintlayout\.core\.motion\.utils\/KeyCycleOscillator\/setPoint\/#int#int#java\.lang\.String#int#float#float#float#float#java\.lang\.Object\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `shouldRunMigration` of function androidx\.datastore\.migrations\/SharedPreferencesMigration\/SharedPreferencesMigration\/#android\.content\.Context#kotlin\.String#kotlin\.collections\.Set\[kotlin\.String\]#kotlin\.coroutines\.SuspendFunction1\[TypeParam\(bounds=\[kotlin\.Any\?\]\),kotlin\.Boolean\]#kotlin\.coroutines\.SuspendFunction2\[androidx\.datastore\.migrations\.SharedPreferencesView,TypeParam\(bounds=\[kotlin\.Any\?\]\),TypeParam\(bounds=\[kotlin\.Any\?\]\)\]\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `shouldRunMigration` of function androidx\.datastore\.migrations\/SharedPreferencesMigration\/SharedPreferencesMigration\/#kotlin\.Function0\[android\.content\.SharedPreferences\]#kotlin\.collections\.Set\[kotlin\.String\]#kotlin\.coroutines\.SuspendFunction1\[TypeParam\(bounds=\[kotlin\.Any\?\]\),kotlin\.Boolean\]#kotlin\.coroutines\.SuspendFunction2\[androidx\.datastore\.migrations\.SharedPreferencesView,TypeParam\(bounds=\[kotlin\.Any\?\]\),TypeParam\(bounds=\[kotlin\.Any\?\]\)\]\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `solidIconIndex` of function androidx\.leanback\.widget\/PlaybackControlsRow\.ThumbsAction\/ThumbsAction\/#int#android\.content\.Context#int#int\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `spotColor` of function androidx\.compose\.ui\.draw\/\/shadow\/androidx\.compose\.ui\.Modifier#androidx\.compose\.ui\.unit\.Dp#androidx\.compose\.ui\.graphics\.Shape#kotlin\.Boolean#androidx\.compose\.ui\.graphics\.Color#androidx\.compose\.ui\.graphics\.Color\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `spotColor` of function androidx\.compose\.ui\/Modifier\/shadow\/androidx\.compose\.ui\.Modifier#androidx\.compose\.ui\.unit\.Dp#androidx\.compose\.ui\.graphics\.Shape#kotlin\.Boolean#androidx\.compose\.ui\.graphics\.Color#androidx\.compose\.ui\.graphics\.Color\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `start` of function androidx\.core\.widget\/TextViewCompat\/setCompoundDrawablesRelative\/#android\.widget\.TextView#android\.graphics\.drawable\.Drawable#android\.graphics\.drawable\.Drawable#android\.graphics\.drawable\.Drawable#android\.graphics\.drawable\.Drawable\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `start` of function androidx\.core\.widget\/TextViewCompat\/setCompoundDrawablesRelativeWithIntrinsicBounds\/#android\.widget\.TextView#android\.graphics\.drawable\.Drawable#android\.graphics\.drawable\.Drawable#android\.graphics\.drawable\.Drawable#android\.graphics\.drawable\.Drawable\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `startActivityIntent` of function androidx\.test\.core\.app\/ActivityScenario\/launch\/#android\.content\.Intent#android\.os\.Bundle\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `startActivityIntent` of function androidx\.test\.core\.app\/ActivityScenario\/launchActivityForResult\/#android\.content\.Intent#android\.os\.Bundle\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `startActivityIntent` of function androidx\.test\.ext\.junit\.rules\/ActivityScenarioRule\/ActivityScenarioRule\/#android\.content\.Intent#android\.os\.Bundle\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `startDestinationArgs` of function androidx\.navigation\/NavController\/setGraph\/#androidx\.navigation\.NavGraph#android\.os\.Bundle\?\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `subtitle` of function androidx\.slice\.builders\/ListBuilder\.HeaderBuilder\/setSubtitle\/#java\.lang\.CharSequence#boolean\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `subtitle` of function androidx\.slice\.builders\/ListBuilder\.RowBuilder\/setSubtitle\/#java\.lang\.CharSequence#boolean\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `summary` of function androidx\.slice\.builders\/ListBuilder\.HeaderBuilder\/setSummary\/#java\.lang\.CharSequence#boolean\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `tags` of function androidx\.work\.testing\/\/TestListenableWorkerBuilder\/#android\.content\.Context#androidx\.work\.Data#kotlin\.collections\.List\[kotlin\.String\]#kotlin\.Int#kotlin\.collections\.List\[android\.net\.Uri\]#kotlin\.collections\.List\[kotlin\.String\]\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `tags` of function androidx\.work\.testing\/\/TestWorkerBuilder\/#android\.content\.Context#java\.util\.concurrent\.Executor#androidx\.work\.Data#kotlin\.collections\.List\[kotlin\.String\]#kotlin\.Int#kotlin\.collections\.List\[android\.net\.Uri\]#kotlin\.collections\.List\[kotlin\.String\]\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `tags` of function androidx\.work\.testing\/TestListenableWorkerBuilderKt\/TestListenableWorkerBuilder\/#android\.content\.Context#androidx\.work\.Data#kotlin\.collections\.List\[kotlin\.String\]#kotlin\.Int#kotlin\.collections\.List\[android\.net\.Uri\]#kotlin\.collections\.List\[kotlin\.String\]\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `tags` of function androidx\.work\.testing\/TestWorkerBuilderKt\/TestWorkerBuilder\/#android\.content\.Context#java\.util\.concurrent\.Executor#androidx\.work\.Data#kotlin\.collections\.List\[kotlin\.String\]#kotlin\.Int#kotlin\.collections\.List\[android\.net\.Uri\]#kotlin\.collections\.List\[kotlin\.String\]\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `target` of function androidx\.camera\.view\.transform\/CoordinateTransform\/CoordinateTransform\/#androidx\.camera\.view\.transform\.OutputTransform#androidx\.camera\.view\.transform\.OutputTransform\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `target` of function androidx\.constraintlayout\.core\/LinearSystem\/addCenterPoint\/#androidx\.constraintlayout\.core\.widgets\.ConstraintWidget#androidx\.constraintlayout\.core\.widgets\.ConstraintWidget#float#int\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `target` of function androidx\.palette\.graphics\/Palette\/getColorForTarget\/#androidx\.palette\.graphics\.Target#int\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `targetValue` of function androidx\.compose\.animation\.core\/\/animate\/#kotlin\.Float#kotlin\.Float#kotlin\.Float#androidx\.compose\.animation\.core\.AnimationSpec\[kotlin\.Float\]#kotlin\.Function2\[kotlin\.Float,kotlin\.Float,kotlin\.Unit\]\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `testTag` of function androidx\.compose\.ui\.test\/\/onAllNodesWithTag\/androidx\.compose\.ui\.test\.SemanticsNodeInteractionsProvider#kotlin\.String#kotlin\.Boolean\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `testTag` of function androidx\.compose\.ui\.test\/\/onNodeWithTag\/androidx\.compose\.ui\.test\.SemanticsNodeInteractionsProvider#kotlin\.String#kotlin\.Boolean\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `testTag` of function androidx\.compose\.ui\.test\/SemanticsNodeInteractionsProvider\/onAllNodesWithTag\/androidx\.compose\.ui\.test\.SemanticsNodeInteractionsProvider#kotlin\.String#kotlin\.Boolean\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `testTag` of function androidx\.compose\.ui\.test\/SemanticsNodeInteractionsProvider\/onNodeWithTag\/androidx\.compose\.ui\.test\.SemanticsNodeInteractionsProvider#kotlin\.String#kotlin\.Boolean\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `text` of function androidx\.compose\.ui\.test\/\/onAllNodesWithText\/androidx\.compose\.ui\.test\.SemanticsNodeInteractionsProvider#kotlin\.String#kotlin\.Boolean#kotlin\.Boolean#kotlin\.Boolean\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `text` of function androidx\.compose\.ui\.test\/\/onNodeWithText\/androidx\.compose\.ui\.test\.SemanticsNodeInteractionsProvider#kotlin\.String#kotlin\.Boolean#kotlin\.Boolean#kotlin\.Boolean\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `text` of function androidx\.compose\.ui\.test\/SemanticsNodeInteractionsProvider\/onAllNodesWithText\/androidx\.compose\.ui\.test\.SemanticsNodeInteractionsProvider#kotlin\.String#kotlin\.Boolean#kotlin\.Boolean#kotlin\.Boolean\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `text` of function androidx\.compose\.ui\.test\/SemanticsNodeInteractionsProvider\/onNodeWithText\/androidx\.compose\.ui\.test\.SemanticsNodeInteractionsProvider#kotlin\.String#kotlin\.Boolean#kotlin\.Boolean#kotlin\.Boolean\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `text` of function androidx\.compose\.ui\.text\/\/AnnotatedString\/#kotlin\.String#androidx\.compose\.ui\.text\.ParagraphStyle\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `text` of function androidx\.compose\.ui\.text\/\/AnnotatedString\/#kotlin\.String#androidx\.compose\.ui\.text\.SpanStyle#androidx\.compose\.ui\.text\.ParagraphStyle\?\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `text` of function androidx\.compose\.ui\.text\/AnnotatedString\.Builder\/append\/#androidx\.compose\.ui\.text\.AnnotatedString#kotlin\.Int#kotlin\.Int\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `text` of function androidx\.compose\.ui\.text\/AnnotatedString\.Builder\/append\/#kotlin\.CharSequence\?#kotlin\.Int#kotlin\.Int\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `text` of function androidx\.slice\.builders\/GridRowBuilder\.CellBuilder\/addOverlayText\/#java\.lang\.CharSequence#boolean\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `text` of function androidx\.slice\.builders\/GridRowBuilder\.CellBuilder\/addText\/#java\.lang\.CharSequence#boolean\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `text` of function androidx\.slice\.builders\/GridRowBuilder\.CellBuilder\/addTitleText\/#java\.lang\.CharSequence#boolean\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `textView` of function androidx\.core\.widget\/CheckedTextViewCompat\/setCheckMarkTintList\/#android\.widget\.CheckedTextView#android\.content\.res\.ColorStateList\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `textView` of function androidx\.core\.widget\/CheckedTextViewCompat\/setCheckMarkTintMode\/#android\.widget\.CheckedTextView#android\.graphics\.PorterDuff\.Mode\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `textView` of function androidx\.core\.widget\/TextViewCompat\/setAutoSizeTextTypeUniformWithConfiguration\/#android\.widget\.TextView#int#int#int#int\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `textView` of function androidx\.core\.widget\/TextViewCompat\/setAutoSizeTextTypeUniformWithPresetSizes\/#android\.widget\.TextView#int\[\]#int\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `textView` of function androidx\.core\.widget\/TextViewCompat\/setAutoSizeTextTypeWithDefaults\/#android\.widget\.TextView#int\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `textView` of function androidx\.core\.widget\/TextViewCompat\/setFirstBaselineToTopHeight\/#android\.widget\.TextView#int\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `textView` of function androidx\.core\.widget\/TextViewCompat\/setLastBaselineToBottomHeight\/#android\.widget\.TextView#int\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `thumbSize` of function androidx\.compose\.material3\/SliderDefaults\/Thumb\/#androidx\.compose\.foundation\.interaction\.MutableInteractionSource#androidx\.compose\.ui\.Modifier#androidx\.compose\.material3\.SliderColors#kotlin\.Boolean#androidx\.compose\.ui\.unit\.DpSize\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `title` of function androidx\.slice\.builders\/ListBuilder\.HeaderBuilder\/setTitle\/#java\.lang\.CharSequence#boolean\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `title` of function androidx\.slice\.builders\/ListBuilder\.RowBuilder\/setTitle\/#java\.lang\.CharSequence#boolean\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `toJSON` of function androidx\.constraintlayout\.core\.state\/CoreMotionScene\/setTransitionContent\/#java\.lang\.String#java\.lang\.String\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `top` of function androidx\.core\.graphics\.drawable\/DrawableCompat\/setHotspotBounds\/#android\.graphics\.drawable\.Drawable#int#int#int#int\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `top` of function androidx\.core\.widget\/TextViewCompat\/setCompoundDrawablesRelative\/#android\.widget\.TextView#android\.graphics\.drawable\.Drawable#android\.graphics\.drawable\.Drawable#android\.graphics\.drawable\.Drawable#android\.graphics\.drawable\.Drawable\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `top` of function androidx\.core\.widget\/TextViewCompat\/setCompoundDrawablesRelativeWithIntrinsicBounds\/#android\.widget\.TextView#android\.graphics\.drawable\.Drawable#android\.graphics\.drawable\.Drawable#android\.graphics\.drawable\.Drawable#android\.graphics\.drawable\.Drawable\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `toX` of function androidx\.recyclerview\.widget\/DefaultItemAnimator\/animateMove\/#androidx\.recyclerview\.widget\.RecyclerView\.ViewHolder#int#int#int#int\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `toX` of function androidx\.recyclerview\.widget\/SimpleItemAnimator\/animateMove\/#androidx\.recyclerview\.widget\.RecyclerView\.ViewHolder#int#int#int#int\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `toY` of function androidx\.recyclerview\.widget\/DefaultItemAnimator\/animateMove\/#androidx\.recyclerview\.widget\.RecyclerView\.ViewHolder#int#int#int#int\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `toY` of function androidx\.recyclerview\.widget\/SimpleItemAnimator\/animateMove\/#androidx\.recyclerview\.widget\.RecyclerView\.ViewHolder#int#int#int#int\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `transformFilter` of function androidx\.core\.text\.util\/LinkifyCompat\/addLinks\/#android\.widget\.TextView#java\.util\.regex\.Pattern#java\.lang\.String#android\.text\.util\.Linkify\.MatchFilter#android\.text\.util\.Linkify\.TransformFilter\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `trimPathEnd` of function androidx\.compose\.ui\.graphics\.vector\/ImageVector\.Builder\/addPath\/#kotlin\.collections\.List\[androidx\.compose\.ui\.graphics\.vector\.PathNode\]#androidx\.compose\.ui\.graphics\.PathFillType#kotlin\.String#androidx\.compose\.ui\.graphics\.Brush\?#kotlin\.Float#androidx\.compose\.ui\.graphics\.Brush\?#kotlin\.Float#kotlin\.Float#androidx\.compose\.ui\.graphics\.StrokeCap#androidx\.compose\.ui\.graphics\.StrokeJoin#kotlin\.Float#kotlin\.Float#kotlin\.Float#kotlin\.Float\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `type` of function androidx\.constraintlayout\.core\.motion\/Motion\/getKeyFrameInfo\/#int#int\[\]\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `type` of function androidx\.constraintlayout\.motion\.widget\/DesignTool\/getKeyFrameInfo\/#java\.lang\.Object#int#int\[\]\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `type` of function androidx\.constraintlayout\.motion\.widget\/MotionController\/getKeyFrameInfo\/#int#int\[\]\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `type` of function androidx\.core\.view\/NestedScrollingChildHelper\/startNestedScroll\/#int#int\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `type` of function androidx\.textclassifier\/TextClassification\.Builder\/setEntityType\/#java\.lang\.String#float\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `type` of function androidx\.textclassifier\/TextSelection\.Builder\/setEntityType\/#java\.lang\.String#float\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `typeConverter` of function androidx\.compose\.animation\.core\/\/animateValueAsState\/#TypeParam\(bounds=\[kotlin\.Any\?\]\)#androidx\.compose\.animation\.core\.TwoWayConverter\[TypeParam\(bounds=\[kotlin\.Any\?\]\),TypeParam\(bounds=\[androidx\.compose\.animation\.core\.AnimationVector\]\)\]#androidx\.compose\.animation\.core\.AnimationSpec\[TypeParam\(bounds=\[kotlin\.Any\?\]\)\]#TypeParam\(bounds=\[kotlin\.Any\?\]\)\?#kotlin\.String#kotlin\.Function1\[TypeParam\(bounds=\[kotlin\.Any\?\]\),kotlin\.Unit\]\?\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `uptimeMillis` of function androidx\.core\.os\/\/postAtTime\/android\.os\.Handler#kotlin\.Long#kotlin\.Any\?#kotlin\.Function0\[kotlin\.Unit\]\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `uptimeMillis` of function androidx\.core\.os\/HandlerKt\/postAtTime\/android\.os\.Handler#kotlin\.Long#kotlin\.Any\?#kotlin\.Function0\[kotlin\.Unit\]\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `useEmojiAsDefaultStyle` of function androidx\.emoji\.text\/EmojiCompat\.Config\/setUseEmojiAsDefaultStyle\/#boolean#java\.util\.List<java\.lang\.Integer>\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `useEmojiAsDefaultStyle` of function androidx\.emoji2\.text\/EmojiCompat\.Config\/setUseEmojiAsDefaultStyle\/#boolean#java\.util\.List<java\.lang\.Integer>\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `v` of function androidx\.compose\.ui\.graphics\/ColorMatrix\/set\/#kotlin\.Int#kotlin\.Int#kotlin\.Float\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `v` of function androidx\.core\.view\/ViewCompat\/addOnUnhandledKeyEventListener\/#android\.view\.View#androidx\.core\.view\.ViewCompat\.OnUnhandledKeyEventListenerCompat\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `v` of function androidx\.core\.view\/ViewCompat\/removeOnUnhandledKeyEventListener\/#android\.view\.View#androidx\.core\.view\.ViewCompat\.OnUnhandledKeyEventListenerCompat\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `v` of function androidx\.core\.view\/ViewCompat\/setAccessibilityDelegate\/#android\.view\.View#androidx\.core\.view\.AccessibilityDelegateCompat\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `v` of function androidx\.core\.view\/ViewCompat\/setAutofillHints\/#android\.view\.View#java\.lang\.String\.\.\.\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `v` of function androidx\.core\.view\/ViewCompat\/setSaveFromParentEnabled\/#android\.view\.View#boolean\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `value` of function androidx\.datastore\.preferences\.core\/MutablePreferences\/set\/#androidx\.datastore\.preferences\.core\.Preferences\.Key\[TypeParam\(bounds=\[kotlin\.Any\?\]\)\]#TypeParam\(bounds=\[kotlin\.Any\?\]\)\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `variationSettings` of function androidx\.compose\.ui\.text\.font\/AndroidFont\/AndroidFont\/#androidx\.compose\.ui\.text\.font\.FontLoadingStrategy#androidx\.compose\.ui\.text\.font\.AndroidFont\.TypefaceLoader#androidx\.compose\.ui\.text\.font\.FontVariation\.Settings\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `verificationMode` of function androidx\.test\.espresso\.intent\/Intents\/intended\/#org\.hamcrest\.Matcher<android\.content\.Intent>#androidx\.test\.espresso\.intent\.VerificationMode\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `verticalGravity` of function androidx\.core\.widget\/RemoteViewsCompat\/setLinearLayoutVerticalGravity\/android\.widget\.RemoteViews#kotlin\.Int#kotlin\.Int\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `verticalGravity` of function androidx\.core\.widget\/RemoteViewsCompat\/setRelativeLayoutVerticalGravity\/android\.widget\.RemoteViews#kotlin\.Int#kotlin\.Int\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `view` of function androidx\.core\.view\/ViewCompat\/addKeyboardNavigationClusters\/#android\.view\.View#java\.util\.Collection<android\.view\.View>#int\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `view` of function androidx\.core\.view\/ViewCompat\/computeSystemWindowInsets\/#android\.view\.View#androidx\.core\.view\.WindowInsetsCompat#android\.graphics\.Rect\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `view` of function androidx\.core\.view\/ViewCompat\/dispatchApplyWindowInsets\/#android\.view\.View#androidx\.core\.view\.WindowInsetsCompat\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `view` of function androidx\.core\.view\/ViewCompat\/dispatchNestedFling\/#android\.view\.View#float#float#boolean\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `view` of function androidx\.core\.view\/ViewCompat\/dispatchNestedPreFling\/#android\.view\.View#float#float\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `view` of function androidx\.core\.view\/ViewCompat\/dispatchNestedPreScroll\/#android\.view\.View#int#int#int\[\]#int\[\]\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `view` of function androidx\.core\.view\/ViewCompat\/dispatchNestedPreScroll\/#android\.view\.View#int#int#int\[\]#int\[\]#int\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `view` of function androidx\.core\.view\/ViewCompat\/dispatchNestedScroll\/#android\.view\.View#int#int#int#int#int\[\]\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `view` of function androidx\.core\.view\/ViewCompat\/dispatchNestedScroll\/#android\.view\.View#int#int#int#int#int\[\]#int\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `view` of function androidx\.core\.view\/ViewCompat\/dispatchNestedScroll\/#android\.view\.View#int#int#int#int#int\[\]#int#int\[\]\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `view` of function androidx\.core\.view\/ViewCompat\/hasNestedScrollingParent\/#android\.view\.View#int\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `view` of function androidx\.core\.view\/ViewCompat\/keyboardNavigationClusterSearch\/#android\.view\.View#android\.view\.View#int\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `view` of function androidx\.core\.view\/ViewCompat\/offsetLeftAndRight\/#android\.view\.View#int\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `view` of function androidx\.core\.view\/ViewCompat\/offsetTopAndBottom\/#android\.view\.View#int\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `view` of function androidx\.core\.view\/ViewCompat\/performAccessibilityAction\/#android\.view\.View#int#android\.os\.Bundle\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `view` of function androidx\.core\.view\/ViewCompat\/requireViewById\/#android\.view\.View#int\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `view` of function androidx\.core\.view\/ViewCompat\/saveAttributeDataForStyleable\/#android\.view\.View#android\.content\.Context#int\[\]#android\.util\.AttributeSet#android\.content\.res\.TypedArray#int#int\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `view` of function androidx\.core\.view\/ViewCompat\/setActivated\/#android\.view\.View#boolean\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `view` of function androidx\.core\.view\/ViewCompat\/setAlpha\/#android\.view\.View#float\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `view` of function androidx\.core\.view\/ViewCompat\/setFocusedByDefault\/#android\.view\.View#boolean\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `view` of function androidx\.core\.view\/ViewCompat\/setKeyboardNavigationCluster\/#android\.view\.View#boolean\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `view` of function androidx\.core\.view\/ViewCompat\/setNestedScrollingEnabled\/#android\.view\.View#boolean\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `view` of function androidx\.core\.view\/ViewCompat\/setNextClusterForwardId\/#android\.view\.View#int\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `view` of function androidx\.core\.view\/ViewCompat\/setPivotX\/#android\.view\.View#float\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `view` of function androidx\.core\.view\/ViewCompat\/setPivotY\/#android\.view\.View#float\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `view` of function androidx\.core\.view\/ViewCompat\/setPointerIcon\/#android\.view\.View#androidx\.core\.view\.PointerIconCompat\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `view` of function androidx\.core\.view\/ViewCompat\/setRotation\/#android\.view\.View#float\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `view` of function androidx\.core\.view\/ViewCompat\/setRotationX\/#android\.view\.View#float\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `view` of function androidx\.core\.view\/ViewCompat\/setRotationY\/#android\.view\.View#float\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `view` of function androidx\.core\.view\/ViewCompat\/setScaleX\/#android\.view\.View#float\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `view` of function androidx\.core\.view\/ViewCompat\/setScaleY\/#android\.view\.View#float\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `view` of function androidx\.core\.view\/ViewCompat\/setScrollIndicators\/#android\.view\.View#int\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `view` of function androidx\.core\.view\/ViewCompat\/setScrollIndicators\/#android\.view\.View#int#int\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `view` of function androidx\.core\.view\/ViewCompat\/setStateDescription\/#android\.view\.View#java\.lang\.CharSequence\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `view` of function androidx\.core\.view\/ViewCompat\/setSystemGestureExclusionRects\/#android\.view\.View#java\.util\.List<android\.graphics\.Rect>\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `view` of function androidx\.core\.view\/ViewCompat\/setTooltipText\/#android\.view\.View#java\.lang\.CharSequence\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `view` of function androidx\.core\.view\/ViewCompat\/setTranslationX\/#android\.view\.View#float\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `view` of function androidx\.core\.view\/ViewCompat\/setTranslationY\/#android\.view\.View#float\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `view` of function androidx\.core\.view\/ViewCompat\/setWindowInsetsAnimationCallback\/#android\.view\.View#androidx\.core\.view\.WindowInsetsAnimationCompat\.Callback\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `view` of function androidx\.core\.view\/ViewCompat\/setX\/#android\.view\.View#float\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `view` of function androidx\.core\.view\/ViewCompat\/setY\/#android\.view\.View#float\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `view` of function androidx\.core\.view\/ViewCompat\/setZ\/#android\.view\.View#float\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `view` of function androidx\.core\.view\/ViewCompat\/startNestedScroll\/#android\.view\.View#int\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `view` of function androidx\.core\.view\/ViewCompat\/startNestedScroll\/#android\.view\.View#int#int\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `view` of function androidx\.core\.view\/ViewCompat\/stopNestedScroll\/#android\.view\.View#int\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `viewAssert` of function androidx\.test\.espresso\.remote\/RemoteInteraction\/createRemoteCheckCallable\/#org\.hamcrest\.Matcher<androidx\.test\.espresso\.Root>#org\.hamcrest\.Matcher<android\.view\.View>#java\.util\.Map<java\.lang\.String,android\.os\.IBinder>#androidx\.test\.espresso\.ViewAssertion\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `viewAssertion` of function androidx\.test\.espresso\.remote\/EspressoRemote\/createRemoteCheckCallable\/#org\.hamcrest\.Matcher<androidx\.test\.espresso\.Root>#org\.hamcrest\.Matcher<android\.view\.View>#java\.util\.Map<java\.lang\.String,android\.os\.IBinder>#androidx\.test\.espresso\.ViewAssertion\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `viewAssertion` of function androidx\.test\.espresso\.remote\/NoopRemoteInteraction\/createRemoteCheckCallable\/#org\.hamcrest\.Matcher<androidx\.test\.espresso\.Root>#org\.hamcrest\.Matcher<android\.view\.View>#java\.util\.Map<java\.lang\.String,android\.os\.IBinder>#androidx\.test\.espresso\.ViewAssertion\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `viewGroup` of function androidx\.core\.view\/ViewCompat\/setChildrenDrawingOrderEnabled\/#android\.view\.ViewGroup#boolean\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `viewId` of function androidx\.constraintlayout\.widget\/ConstraintSet\/setApplyElevation\/#int#boolean\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `waveString` of function androidx\.constraintlayout\.core\.motion\.utils\/KeyCycleOscillator\/setPoint\/#int#int#java\.lang\.String#int#float#float#float#float\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `waveString` of function androidx\.constraintlayout\.core\.motion\.utils\/KeyCycleOscillator\/setPoint\/#int#int#java\.lang\.String#int#float#float#float#float#java\.lang\.Object\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `webview` of function androidx\.webkit\/WebViewCompat\/postVisualStateCallback\/#android\.webkit\.WebView#long#androidx\.webkit\.WebViewCompat\.VisualStateCallback\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `webview` of function androidx\.webkit\/WebViewCompat\/postWebMessage\/#android\.webkit\.WebView#androidx\.webkit\.WebMessageCompat#android\.net\.Uri\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `webview` of function androidx\.webkit\/WebViewCompat\/removeWebMessageListener\/#android\.webkit\.WebView#java\.lang\.String\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `widget` of function androidx\.constraintlayout\.core\/LinearSystem\/addCenterPoint\/#androidx\.constraintlayout\.core\.widgets\.ConstraintWidget#androidx\.constraintlayout\.core\.widgets\.ConstraintWidget#float#int\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `widgets` of function androidx\.constraintlayout\.core\.widgets\/Chain\/applyChainConstraints\/#androidx\.constraintlayout\.core\.widgets\.ConstraintWidgetContainer#androidx\.constraintlayout\.core\.LinearSystem#java\.util\.ArrayList<androidx\.constraintlayout\.core\.widgets\.ConstraintWidget>#int\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `window` of function androidx\.appcompat\.app\/AppCompatDelegate\/create\/#android\.content\.Context#android\.view\.Window#androidx\.appcompat\.app\.AppCompatCallback\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `window` of function androidx\.core\.view\/WindowCompat\/requireViewById\/#android\.view\.Window#int\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `x` of function androidx\.compose\.ui\.layout\/Placeable\.PlacementScope\/place\/androidx\.compose\.ui\.layout\.Placeable#kotlin\.Int#kotlin\.Int#kotlin\.Float\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `x` of function androidx\.compose\.ui\.layout\/Placeable\.PlacementScope\/placeRelative\/androidx\.compose\.ui\.layout\.Placeable#kotlin\.Int#kotlin\.Int#kotlin\.Float\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `x` of function androidx\.compose\.ui\.layout\/Placeable\.PlacementScope\/placeRelativeWithLayer\/androidx\.compose\.ui\.layout\.Placeable#kotlin\.Int#kotlin\.Int#kotlin\.Float#kotlin\.Function1\[androidx\.compose\.ui\.graphics\.GraphicsLayerScope,kotlin\.Unit\]\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `x` of function androidx\.compose\.ui\.layout\/Placeable\.PlacementScope\/placeWithLayer\/androidx\.compose\.ui\.layout\.Placeable#kotlin\.Int#kotlin\.Int#kotlin\.Float#kotlin\.Function1\[androidx\.compose\.ui\.graphics\.GraphicsLayerScope,kotlin\.Unit\]\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `y` of function androidx\.compose\.ui\.layout\/Placeable\.PlacementScope\/place\/androidx\.compose\.ui\.layout\.Placeable#kotlin\.Int#kotlin\.Int#kotlin\.Float\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `y` of function androidx\.compose\.ui\.layout\/Placeable\.PlacementScope\/placeRelative\/androidx\.compose\.ui\.layout\.Placeable#kotlin\.Int#kotlin\.Int#kotlin\.Float\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `y` of function androidx\.compose\.ui\.layout\/Placeable\.PlacementScope\/placeRelativeWithLayer\/androidx\.compose\.ui\.layout\.Placeable#kotlin\.Int#kotlin\.Int#kotlin\.Float#kotlin\.Function1\[androidx\.compose\.ui\.graphics\.GraphicsLayerScope,kotlin\.Unit\]\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `y` of function androidx\.compose\.ui\.layout\/Placeable\.PlacementScope\/placeWithLayer\/androidx\.compose\.ui\.layout\.Placeable#kotlin\.Int#kotlin\.Int#kotlin\.Float#kotlin\.Function1\[androidx\.compose\.ui\.graphics\.GraphicsLayerScope,kotlin\.Unit\]\/PointingToDeclaration\/
-WARN: Unable to find what is referred to by "@param bounds" in DClass Builder\. Did you make a typo\? Are you trying to refer to something not visible to users\? in declaration of Builder in file .*\/androidx\/wear\/watchface\/ComplicationSlot\.kt at line 682\.
-WARN: Unable to find what is referred to by "@param bounds" in DClass Builder\. Did you make a typo\? Are you trying to refer to something not visible to users\? in declaration of Builder in file .*\/androidx\/wear\/watchface\/ComplicationSlot\.kt at line 686\.
-WARN: Unable to find what is referred to by "@param bounds" in DClass ComplicationSlot\. Did you make a typo\? Are you trying to refer to something not visible to users\? in declaration of ComplicationSlot in file .*\/androidx\/wear\/watchface\/ComplicationSlot\.kt at line 237\.
-WARN: Unable to find what is referred to by "@param boundsType" in DClass Builder\. Did you make a typo\? Are you trying to refer to something not visible to users\? in declaration of Builder in file .*\/androidx\/wear\/watchface\/ComplicationSlot\.kt at line 682\.
-WARN: Unable to find what is referred to by "@param boundsType" in DClass Builder\. Did you make a typo\? Are you trying to refer to something not visible to users\? in declaration of Builder in file .*\/androidx\/wear\/watchface\/ComplicationSlot\.kt at line 686\.
-WARN: Unable to find what is referred to by "@param canvasComplicationFactory" in DClass Builder\. Did you make a typo\? Are you trying to refer to something not visible to users\? in declaration of Builder in file .*\/androidx\/wear\/watchface\/ComplicationSlot\.kt at line 682\.
-WARN: Unable to find what is referred to by "@param canvasComplicationFactory" in DClass Builder\. Did you make a typo\? Are you trying to refer to something not visible to users\? in declaration of Builder in file .*\/androidx\/wear\/watchface\/ComplicationSlot\.kt at line 686\.
-WARN: Unable to find what is referred to by "@param complicationTapFilter" in DClass Builder\. Did you make a typo\? Are you trying to refer to something not visible to users\? in declaration of Builder in file .*\/androidx\/wear\/watchface\/ComplicationSlot\.kt at line 682\.
-WARN: Unable to find what is referred to by "@param complicationTapFilter" in DClass Builder\. Did you make a typo\? Are you trying to refer to something not visible to users\? in declaration of Builder in file .*\/androidx\/wear\/watchface\/ComplicationSlot\.kt at line 686\.
-WARN: Unable to find what is referred to by "@param copySelectedOptions" in DClass UserStyle\. Did you make a typo\? Are you trying to refer to something not visible to users\? in declaration of UserStyle in file .*\/androidx\/wear\/watchface\/style\/CurrentUserStyleRepository\.kt at line 56\.
-WARN: Unable to find what is referred to by "@param defaultDataSourcePolicy" in DClass Builder\. Did you make a typo\? Are you trying to refer to something not visible to users\? in declaration of Builder in file .*\/androidx\/wear\/watchface\/ComplicationSlot\.kt at line 682\.
-WARN: Unable to find what is referred to by "@param defaultDataSourcePolicy" in DClass Builder\. Did you make a typo\? Are you trying to refer to something not visible to users\? in declaration of Builder in file .*\/androidx\/wear\/watchface\/ComplicationSlot\.kt at line 686\.
-WARN: Unable to find what is referred to by "@param defaultPolicy" in DClass ComplicationSlot\. Did you make a typo\? Are you trying to refer to something not visible to users\? in declaration of ComplicationSlot in file .*\/androidx\/wear\/watchface\/ComplicationSlot\.kt at line 237\.
-WARN: Unable to find what is referred to by "@param id" in DClass Builder\. Did you make a typo\? Are you trying to refer to something not visible to users\? in declaration of Builder in file .*\/androidx\/wear\/watchface\/ComplicationSlot\.kt at line 682\.
-WARN: Unable to find what is referred to by "@param id" in DClass Builder\. Did you make a typo\? Are you trying to refer to something not visible to users\? in declaration of Builder in file .*\/androidx\/wear\/watchface\/ComplicationSlot\.kt at line 686\.
-WARN: Unable to find what is referred to by "@param supportedTypes" in DClass Builder\. Did you make a typo\? Are you trying to refer to something not visible to users\? in declaration of Builder in file .*\/androidx\/wear\/watchface\/ComplicationSlot\.kt at line 682\.
-WARN: Unable to find what is referred to by "@param supportedTypes" in DClass Builder\. Did you make a typo\? Are you trying to refer to something not visible to users\? in declaration of Builder in file .*\/androidx\/wear\/watchface\/ComplicationSlot\.kt at line 686\.
-WARN: Use @androidx\.annotation\.Nullable, not @org\.checkerframework\.checker\.nullness\.qual\/Nullable\/\/\/PointingToDeclaration\/
+WARN: .*\/unzippedJvmSources\/android\/support\/v4\/media\/session\/MediaControllerCompat\.java:[0-9]+ Missing @param tag for parameter `context` in DFunction MediaControllerCompat
+WARN: .*\/unzippedJvmSources\/androidx\/appcompat\/app\/AppCompatDelegate\.java:[0-9]+ Missing @param tag for parameter `activity` in DFunction create
+WARN: .*\/unzippedJvmSources\/androidx\/appcompat\/app\/AppCompatDelegate\.java:[0-9]+ Missing @param tag for parameter `context` in DFunction create
+WARN: .*\/unzippedJvmSources\/androidx\/appcompat\/app\/AppCompatDelegate\.java:[0-9]+ Missing @param tag for parameter `dialog` in DFunction create
+WARN: .*\/unzippedJvmSources\/androidx\/appcompat\/app\/AppCompatDelegate\.java:[0-9]+ Missing @param tag for parameter `window` in DFunction create
+WARN: .*\/unzippedJvmSources\/androidx\/appcompat\/graphics\/drawable\/StateListDrawableCompat\.java:[0-9]+ Missing @param tag for parameter `context` in DFunction inflate
+WARN: .*\/unzippedJvmSources\/androidx\/appsearch\/app\/ShortcutAdapter\.java:UnknownLine Missing @param tag for parameter `context` in DFunction createShortcutBuilderFromDocument
+WARN: .*\/unzippedJvmSources\/androidx\/appsearch\/localstorage\/LocalStorage\.java:[0-9]+ Missing @param tag for parameter `context` in DFunction Builder
+WARN: .*\/unzippedJvmSources\/androidx\/appsearch\/platformstorage\/PlatformStorage\.java:[0-9]+ Missing @param tag for parameter `context` in DFunction Builder
+WARN: .*\/unzippedJvmSources\/androidx\/appsearch\/playservicesstorage\/PlayServicesStorage\.java:[0-9]+ Missing @param tag for parameter `context` in DFunction Builder
+WARN: .*\/unzippedJvmSources\/androidx\/camera\/core\/impl\/ReadableConfig\.java:UnknownLine Missing @param tag for parameter `priority` in DFunction retrieveOptionWithPriority
+WARN: .*\/unzippedJvmSources\/androidx\/camera\/view\/RotationProvider\.java:[0-9]+ Missing @param tag for parameter `listener` in DFunction addListener
+WARN: .*\/unzippedJvmSources\/androidx\/camera\/view\/transform\/CoordinateTransform\.java:[0-9]+ Missing @param tag for parameter `target` in DFunction CoordinateTransform
+WARN: .*\/unzippedJvmSources\/androidx\/car\/app\/CarToast\.java:[0-9]+ Missing @param tag for parameter `carContext` in DFunction makeText
+WARN: .*\/unzippedJvmSources\/androidx\/car\/app\/model\/AlertCallbackDelegate\.java:UnknownLine Missing @param tag for parameter `reason` in DFunction sendCancel
+WARN: .*\/unzippedJvmSources\/androidx\/car\/app\/versioning\/CarAppApiLevels\.java\:[0-9]+ Failed to resolve See  \<a href="https:\/\/developer\.android\.com\/jetpack\/androidx\/releases\/car-app">Car App Library Release Notes<\/a> in DClass CarAppApiLevels
+WARN: .*\/unzippedJvmSources\/androidx\/constraintlayout\/core\/ArrayLinkedVariables\.java:[0-9]+ Missing @param tag for parameter `removeFromDefinition` in DFunction add
+WARN: .*\/unzippedJvmSources\/androidx\/constraintlayout\/core\/ArrayLinkedVariables\.java:[0-9]+ Missing @param tag for parameter `removeFromDefinition` in DFunction use
+WARN: .*\/unzippedJvmSources\/androidx\/constraintlayout\/core\/ArrayLinkedVariables\.java:[0-9]+ Missing @param tag for parameter `removeFromDefinition` in DFunction remove
+WARN: .*\/unzippedJvmSources\/androidx\/constraintlayout\/core\/LinearSystem\.java:[0-9]+ Missing @param tag for parameter `target` in DFunction addCenterPoint
+WARN: .*\/unzippedJvmSources\/androidx\/constraintlayout\/core\/LinearSystem\.java:[0-9]+ Missing @param tag for parameter `widget` in DFunction addCenterPoint
+WARN: .*\/unzippedJvmSources\/androidx\/constraintlayout\/core\/motion\/Motion\.java:[0-9]+ Missing @param tag for parameter `type` in DFunction getKeyFrameInfo
+WARN: .*\/unzippedJvmSources\/androidx\/constraintlayout\/core\/motion\/Motion\.java:[0-9]+ Missing @param tag for parameter `pointCount` in DFunction buildPath
+WARN: .*\/unzippedJvmSources\/androidx\/constraintlayout\/core\/motion\/utils\/KeyCycleOscillator\.java:[0-9]+ Missing @param tag for parameter `phase` in DFunction setPoint
+WARN: .*\/unzippedJvmSources\/androidx\/constraintlayout\/core\/motion\/utils\/KeyCycleOscillator\.java:[0-9]+ Missing @param tag for parameter `shape` in DFunction setPoint
+WARN: .*\/unzippedJvmSources\/androidx\/constraintlayout\/core\/motion\/utils\/KeyCycleOscillator\.java:[0-9]+ Missing @param tag for parameter `waveString` in DFunction setPoint
+WARN: .*\/unzippedJvmSources\/androidx\/constraintlayout\/core\/state\/CoreMotionScene\.java:UnknownLine Missing @param tag for parameter `toJSON` in DFunction setTransitionContent
+WARN: .*\/unzippedJvmSources\/androidx\/constraintlayout\/core\/state\/Transition\.java:[0-9]+ Missing @param tag for parameter `currentProgress` in DFunction dragToProgress
+WARN: .*\/unzippedJvmSources\/androidx\/constraintlayout\/core\/state\/TransitionParser\.java:[0-9]+ Missing @param tag for parameter `dpToPixel` in DFunction parse
+WARN: .*\/unzippedJvmSources\/androidx\/constraintlayout\/core\/widgets\/Chain\.java:[0-9]+ Missing @param tag for parameter `widgets` in DFunction applyChainConstraints
+WARN: .*\/unzippedJvmSources\/androidx\/constraintlayout\/core\/widgets\/ConstraintWidgetContainer\.java:[0-9]+ Missing @param tag for parameter `flags` in DFunction updateChildrenFromSolver
+WARN: .*\/unzippedJvmSources\/androidx\/constraintlayout\/motion\/widget\/DesignTool\.java:[0-9]+ Missing @param tag for parameter `len` in DFunction getAnimationPath
+WARN: .*\/unzippedJvmSources\/androidx\/constraintlayout\/motion\/widget\/DesignTool\.java:[0-9]+ Missing @param tag for parameter `type` in DFunction getKeyFrameInfo
+WARN: .*\/unzippedJvmSources\/androidx\/constraintlayout\/motion\/widget\/MotionController\.java:[0-9]+ Missing @param tag for parameter `type` in DFunction getKeyFrameInfo
+WARN: .*\/unzippedJvmSources\/androidx\/constraintlayout\/widget\/ConstraintSet\.java:[0-9]+ Missing @param tag for parameter `viewId` in DFunction setApplyElevation
+WARN: .*\/unzippedJvmSources\/androidx\/constraintlayout\/widget\/ConstraintSet\.java:[0-9]+ Missing @param tag for parameter `margin` in DFunction createBarrier
+WARN: .*\/unzippedJvmSources\/androidx\/core\/app\/ActivityCompat\.java:[0-9]+ Missing @param tag for parameter `activity` in DFunction setEnterSharedElementCallback
+WARN: .*\/unzippedJvmSources\/androidx\/core\/app\/ActivityCompat\.java:[0-9]+ Missing @param tag for parameter `activity` in DFunction setExitSharedElementCallback
+WARN: .*\/unzippedJvmSources\/androidx\/core\/app\/ActivityCompat\.java:[0-9]+ Missing @param tag for parameter `activity` in DFunction requestDragAndDropPermissions
+WARN: .*\/unzippedJvmSources\/androidx\/core\/app\/ActivityCompat\.java:[0-9]+ Missing @param tag for parameter `activity` in DFunction setLocusContext
+WARN: .*\/unzippedJvmSources\/androidx\/core\/app\/ActivityCompat\.java:UnknownLine Missing @param tag for parameter `activity` in DFunction requireViewById
+WARN: .*\/unzippedJvmSources\/androidx\/core\/app\/ServiceCompat\.java:[0-9]+ Missing @param tag for parameter `service` in DFunction stopForeground
+WARN: .*\/unzippedJvmSources\/androidx\/core\/content\/ContentResolverCompat\.java:[0-9]+ Missing @param tag for parameter `resolver` in DFunction query
+WARN: .*\/unzippedJvmSources\/androidx\/core\/content\/Context\.kt:[0-9]+ Missing @param tag for parameter `block` in DFunction withStyledAttributes
+WARN: .*\/unzippedJvmSources\/androidx\/core\/content\/Context\.kt:[0-9]+ Missing @param tag for parameter `resourceId` in DFunction withStyledAttributes
+WARN: .*\/unzippedJvmSources\/androidx\/core\/content\/ContextCompat\.java:[0-9]+ Missing @param tag for parameter `context` in DFunction getDrawable
+WARN: .*\/unzippedJvmSources\/androidx\/core\/content\/ContextCompat\.java:[0-9]+ Missing @param tag for parameter `context` in DFunction getColor
+WARN: .*\/unzippedJvmSources\/androidx\/core\/content\/ContextCompat\.java:[0-9]+ Missing @param tag for parameter `context` in DFunction getColorStateList
+WARN: .*\/unzippedJvmSources\/androidx\/core\/content\/ContextCompat\.java:[0-9]+ Missing @param tag for parameter `context` in DFunction checkSelfPermission
+WARN: .*\/unzippedJvmSources\/androidx\/core\/content\/pm\/ShortcutManagerCompat\.java:[0-9]+ Missing @param tag for parameter `context` in DFunction requestPinShortcut
+WARN: .*\/unzippedJvmSources\/androidx\/core\/content\/pm\/ShortcutManagerCompat\.java:[0-9]+ Missing @param tag for parameter `context` in DFunction createShortcutResultIntent
+WARN: .*\/unzippedJvmSources\/androidx\/core\/content\/pm\/ShortcutManagerCompat\.java:UnknownLine Missing @param tag for parameter `context` in DFunction getShortcuts
+WARN: .*\/unzippedJvmSources\/androidx\/core\/content\/res\/ResourcesCompat\.java:[0-9]+ Missing @param tag for parameter `res` in DFunction getDrawable
+WARN: .*\/unzippedJvmSources\/androidx\/core\/content\/res\/ResourcesCompat\.java:[0-9]+ Missing @param tag for parameter `res` in DFunction getDrawableForDensity
+WARN: .*\/unzippedJvmSources\/androidx\/core\/content\/res\/ResourcesCompat\.java:[0-9]+ Missing @param tag for parameter `res` in DFunction getColor
+WARN: .*\/unzippedJvmSources\/androidx\/core\/content\/res\/ResourcesCompat\.java:[0-9]+ Missing @param tag for parameter `res` in DFunction getColorStateList
+WARN: .*\/unzippedJvmSources\/androidx\/core\/content\/res\/ResourcesCompat\.java:[0-9]+ Missing @param tag for parameter `res` in DFunction getFloat
+WARN: .*\/unzippedJvmSources\/androidx\/core\/database\/sqlite\/SQLiteDatabase\.kt:UnknownLine Missing @param tag for parameter `body` in DFunction transaction
+WARN: .*\/unzippedJvmSources\/androidx\/core\/graphics\/BitmapCompat\.java:[0-9]+ Missing @param tag for parameter `bitmap` in DFunction setHasMipMap
+WARN: .*\/unzippedJvmSources\/androidx\/core\/graphics\/drawable\/DrawableCompat\.java:[0-9]+ Missing @param tag for parameter `bottom` in DFunction setHotspotBounds
+WARN: .*\/unzippedJvmSources\/androidx\/core\/graphics\/drawable\/DrawableCompat\.java:[0-9]+ Missing @param tag for parameter `left` in DFunction setHotspotBounds
+WARN: .*\/unzippedJvmSources\/androidx\/core\/graphics\/drawable\/DrawableCompat\.java:[0-9]+ Missing @param tag for parameter `right` in DFunction setHotspotBounds
+WARN: .*\/unzippedJvmSources\/androidx\/core\/graphics\/drawable\/DrawableCompat\.java:[0-9]+ Missing @param tag for parameter `top` in DFunction setHotspotBounds
+WARN: .*\/unzippedJvmSources\/androidx\/core\/graphics\/drawable\/DrawableCompat\.java:[0-9]+ Missing @param tag for parameter `drawable` in DFunction inflate
+WARN: .*\/unzippedJvmSources\/androidx\/core\/graphics\/drawable\/DrawableCompat\.java:[0-9]+ Missing @param tag for parameter `drawable` in DFunction setLayoutDirection
+WARN: .*\/unzippedJvmSources\/androidx\/core\/graphics\/PathUtils\.java:UnknownLine Missing @param tag for parameter `path` in DFunction flatten
+WARN: .*\/unzippedJvmSources\/androidx\/core\/graphics\/TypefaceCompat\.java:[0-9]+ Missing @param tag for parameter `context` in DFunction create
+WARN: .*\/unzippedJvmSources\/androidx\/core\/os\/Handler\.kt:[0-9]+ Missing @param tag for parameter `action` in DFunction postAtTime
+WARN: .*\/unzippedJvmSources\/androidx\/core\/os\/Handler\.kt:[0-9]+ Missing @param tag for parameter `uptimeMillis` in DFunction postAtTime
+WARN: .*\/unzippedJvmSources\/androidx\/core\/os\/HandlerCompat\.java:[0-9]+ Missing @param tag for parameter `handler` in DFunction postDelayed
+WARN: .*\/unzippedJvmSources\/androidx\/core\/os\/HandlerCompat\.java:[0-9]+ Missing @param tag for parameter `callback` in DFunction createAsync
+WARN: .*\/unzippedJvmSources\/androidx\/core\/os\/MessageCompat\.java:[0-9]+ Missing @param tag for parameter `message` in DFunction setAsynchronous
+WARN: .*\/unzippedJvmSources\/androidx\/core\/provider\/DocumentsContractCompat\.java:[0-9]+ Missing @param tag for parameter `content` in DFunction createDocument
+WARN: .*\/unzippedJvmSources\/androidx\/core\/provider\/DocumentsContractCompat\.java:[0-9]+ Missing @param tag for parameter `content` in DFunction removeDocument
+WARN: .*\/unzippedJvmSources\/androidx\/core\/text\/util\/LinkifyCompat\.java:[0-9]+ Missing @param tag for parameter `transformFilter` in DFunction addLinks
+WARN: .*\/unzippedJvmSources\/androidx\/core\/view\/accessibility\/AccessibilityEventCompat\.java:[0-9]+ Missing @param tag for parameter `event` in DFunction getRecord
+WARN: .*\/unzippedJvmSources\/androidx\/core\/view\/accessibility\/AccessibilityEventCompat\.java:[0-9]+ Missing @param tag for parameter `event` in DFunction appendRecord
+WARN: .*\/unzippedJvmSources\/androidx\/core\/view\/accessibility\/AccessibilityEventCompat\.java:[0-9]+ Missing @param tag for parameter `event` in DFunction setContentChangeTypes
+WARN: .*\/unzippedJvmSources\/androidx\/core\/view\/accessibility\/AccessibilityEventCompat\.java:[0-9]+ Missing @param tag for parameter `event` in DFunction setMovementGranularity
+WARN: .*\/unzippedJvmSources\/androidx\/core\/view\/accessibility\/AccessibilityEventCompat\.java:[0-9]+ Missing @param tag for parameter `event` in DFunction setAction
+WARN: .*\/unzippedJvmSources\/androidx\/core\/view\/accessibility\/AccessibilityManagerCompat\.java:[0-9]+ Missing @param tag for parameter `manager` in DFunction addTouchExplorationStateChangeListener
+WARN: .*\/unzippedJvmSources\/androidx\/core\/view\/accessibility\/AccessibilityManagerCompat\.java:[0-9]+ Missing @param tag for parameter `manager` in DFunction removeTouchExplorationStateChangeListener
+WARN: .*\/unzippedJvmSources\/androidx\/core\/view\/ContentInfoCompat\.java:UnknownLine Missing @param tag for parameter `payload` in DFunction partition
+WARN: .*\/unzippedJvmSources\/androidx\/core\/view\/DragStartHelper\.java:[0-9]+ Missing @param tag for parameter `listener` in DFunction DragStartHelper
+WARN: .*\/unzippedJvmSources\/androidx\/core\/view\/inputmethod\/EditorInfoCompat\.java:[0-9]+ Missing @param tag for parameter `editorInfo` in DFunction setInitialSurroundingText
+WARN: .*\/unzippedJvmSources\/androidx\/core\/view\/inputmethod\/EditorInfoCompat\.java:[0-9]+ Missing @param tag for parameter `editorInfo` in DFunction setInitialSurroundingSubText
+WARN: .*\/unzippedJvmSources\/androidx\/core\/view\/inputmethod\/EditorInfoCompat\.java:[0-9]+ Missing @param tag for parameter `editorInfo` in DFunction getInitialTextBeforeCursor
+WARN: .*\/unzippedJvmSources\/androidx\/core\/view\/inputmethod\/EditorInfoCompat\.java:[0-9]+ Missing @param tag for parameter `editorInfo` in DFunction getInitialSelectedText
+WARN: .*\/unzippedJvmSources\/androidx\/core\/view\/inputmethod\/EditorInfoCompat\.java:[0-9]+ Missing @param tag for parameter `editorInfo` in DFunction getInitialTextAfterCursor
+WARN: .*\/unzippedJvmSources\/androidx\/core\/view\/MarginLayoutParamsCompat\.java:[0-9]+ Missing @param tag for parameter `lp` in DFunction setLayoutDirection
+WARN: .*\/unzippedJvmSources\/androidx\/core\/view\/MenuItemCompat\.java:[0-9]+ Missing @param tag for parameter `item` in DFunction setOnActionExpandListener
+WARN: .*\/unzippedJvmSources\/androidx\/core\/view\/MenuItemCompat\.java:[0-9]+ Missing @param tag for parameter `item` in DFunction setShortcut
+WARN: .*\/unzippedJvmSources\/androidx\/core\/view\/MenuItemCompat\.java:[0-9]+ Missing @param tag for parameter `item` in DFunction setNumericShortcut
+WARN: .*\/unzippedJvmSources\/androidx\/core\/view\/MenuItemCompat\.java:[0-9]+ Missing @param tag for parameter `item` in DFunction setAlphabeticShortcut
+WARN: .*\/unzippedJvmSources\/androidx\/core\/view\/MenuItemCompat\.java:[0-9]+ Missing @param tag for parameter `item` in DFunction setIconTintList
+WARN: .*\/unzippedJvmSources\/androidx\/core\/view\/MenuItemCompat\.java:[0-9]+ Missing @param tag for parameter `item` in DFunction setIconTintMode
+WARN: .*\/unzippedJvmSources\/androidx\/core\/view\/MotionEventCompat\.java:[0-9]+ Missing @param tag for parameter `event` in DFunction isFromSource
+WARN: .*\/unzippedJvmSources\/androidx\/core\/view\/MotionEventCompat\.java:[0-9]+ Missing @param tag for parameter `event` in DFunction getAxisValue
+WARN: .*\/unzippedJvmSources\/androidx\/core\/view\/NestedScrollingChildHelper\.java:[0-9]+ Missing @param tag for parameter `type` in DFunction startNestedScroll
+WARN: .*\/unzippedJvmSources\/androidx\/core\/view\/ScaleGestureDetectorCompat\.java:[0-9]+ Missing @param tag for parameter `scaleGestureDetector` in DFunction setQuickScaleEnabled
+WARN: .*\/unzippedJvmSources\/androidx\/core\/view\/ViewCompat\.java:[0-9]+ Missing @param tag for parameter `view` in DFunction performAccessibilityAction
+WARN: .*\/unzippedJvmSources\/androidx\/core\/view\/ViewCompat\.java:[0-9]+ Missing @param tag for parameter `view` in DFunction setStateDescription
+WARN: .*\/unzippedJvmSources\/androidx\/core\/view\/ViewCompat\.java:[0-9]+ Missing @param tag for parameter `childMeasuredState` in DFunction resolveSizeAndState
+WARN: .*\/unzippedJvmSources\/androidx\/core\/view\/ViewCompat\.java:[0-9]+ Missing @param tag for parameter `view` in DFunction setTranslationX
+WARN: .*\/unzippedJvmSources\/androidx\/core\/view\/ViewCompat\.java:[0-9]+ Missing @param tag for parameter `view` in DFunction setTranslationY
+WARN: .*\/unzippedJvmSources\/androidx\/core\/view\/ViewCompat\.java:[0-9]+ Missing @param tag for parameter `view` in DFunction setAlpha
+WARN: .*\/unzippedJvmSources\/androidx\/core\/view\/ViewCompat\.java:[0-9]+ Missing @param tag for parameter `view` in DFunction setX
+WARN: .*\/unzippedJvmSources\/androidx\/core\/view\/ViewCompat\.java:[0-9]+ Missing @param tag for parameter `view` in DFunction setY
+WARN: .*\/unzippedJvmSources\/androidx\/core\/view\/ViewCompat\.java:[0-9]+ Missing @param tag for parameter `view` in DFunction setRotation
+WARN: .*\/unzippedJvmSources\/androidx\/core\/view\/ViewCompat\.java:[0-9]+ Missing @param tag for parameter `view` in DFunction setRotationX
+WARN: .*\/unzippedJvmSources\/androidx\/core\/view\/ViewCompat\.java:[0-9]+ Missing @param tag for parameter `view` in DFunction setRotationY
+WARN: .*\/unzippedJvmSources\/androidx\/core\/view\/ViewCompat\.java:[0-9]+ Missing @param tag for parameter `view` in DFunction setScaleX
+WARN: .*\/unzippedJvmSources\/androidx\/core\/view\/ViewCompat\.java:[0-9]+ Missing @param tag for parameter `view` in DFunction setScaleY
+WARN: .*\/unzippedJvmSources\/androidx\/core\/view\/ViewCompat\.java:[0-9]+ Missing @param tag for parameter `view` in DFunction setPivotX
+WARN: .*\/unzippedJvmSources\/androidx\/core\/view\/ViewCompat\.java:[0-9]+ Missing @param tag for parameter `view` in DFunction setPivotY
+WARN: .*\/unzippedJvmSources\/androidx\/core\/view\/ViewCompat\.java:[0-9]+ Missing @param tag for parameter `viewGroup` in DFunction setChildrenDrawingOrderEnabled
+WARN: .*\/unzippedJvmSources\/androidx\/core\/view\/ViewCompat\.java:[0-9]+ Missing @param tag for parameter `view` in DFunction dispatchApplyWindowInsets
+WARN: .*\/unzippedJvmSources\/androidx\/core\/view\/ViewCompat\.java:[0-9]+ Missing @param tag for parameter `view` in DFunction setSystemGestureExclusionRects
+WARN: .*\/unzippedJvmSources\/androidx\/core\/view\/ViewCompat\.java:[0-9]+ Missing @param tag for parameter `view` in DFunction computeSystemWindowInsets
+WARN: .*\/unzippedJvmSources\/androidx\/core\/view\/ViewCompat\.java:[0-9]+ Missing @param tag for parameter `view` in DFunction setWindowInsetsAnimationCallback
+WARN: .*\/unzippedJvmSources\/androidx\/core\/view\/ViewCompat\.java:[0-9]+ Missing @param tag for parameter `v` in DFunction setSaveFromParentEnabled
+WARN: .*\/unzippedJvmSources\/androidx\/core\/view\/ViewCompat\.java:[0-9]+ Missing @param tag for parameter `view` in DFunction setActivated
+WARN: .*\/unzippedJvmSources\/androidx\/core\/view\/ViewCompat\.java:[0-9]+ Missing @param tag for parameter `view` in DFunction setNestedScrollingEnabled
+WARN: .*\/unzippedJvmSources\/androidx\/core\/view\/ViewCompat\.java:[0-9]+ Missing @param tag for parameter `view` in DFunction startNestedScroll
+WARN: .*\/unzippedJvmSources\/androidx\/core\/view\/ViewCompat\.java:[0-9]+ Missing @param tag for parameter `view` in DFunction stopNestedScroll
+WARN: .*\/unzippedJvmSources\/androidx\/core\/view\/ViewCompat\.java:[0-9]+ Missing @param tag for parameter `view` in DFunction hasNestedScrollingParent
+WARN: .*\/unzippedJvmSources\/androidx\/core\/view\/ViewCompat\.java:[0-9]+ Missing @param tag for parameter `view` in DFunction dispatchNestedScroll
+WARN: .*\/unzippedJvmSources\/androidx\/core\/view\/ViewCompat\.java:[0-9]+ Missing @param tag for parameter `view` in DFunction dispatchNestedPreScroll
+WARN: .*\/unzippedJvmSources\/androidx\/core\/view\/ViewCompat\.java:[0-9]+ Missing @param tag for parameter `view` in DFunction dispatchNestedFling
+WARN: .*\/unzippedJvmSources\/androidx\/core\/view\/ViewCompat\.java:[0-9]+ Missing @param tag for parameter `view` in DFunction dispatchNestedPreFling
+WARN: .*\/unzippedJvmSources\/androidx\/core\/view\/ViewCompat\.java:[0-9]+ Missing @param tag for parameter `view` in DFunction setZ
+WARN: .*\/unzippedJvmSources\/androidx\/core\/view\/ViewCompat\.java:[0-9]+ Missing @param tag for parameter `view` in DFunction offsetTopAndBottom
+WARN: .*\/unzippedJvmSources\/androidx\/core\/view\/ViewCompat\.java:[0-9]+ Missing @param tag for parameter `view` in DFunction offsetLeftAndRight
+WARN: .*\/unzippedJvmSources\/androidx\/core\/view\/ViewCompat\.java:[0-9]+ Missing @param tag for parameter `mask` in DFunction setScrollIndicators
+WARN: .*\/unzippedJvmSources\/androidx\/core\/view\/ViewCompat\.java:[0-9]+ Missing @param tag for parameter `view` in DFunction setScrollIndicators
+WARN: .*\/unzippedJvmSources\/androidx\/core\/view\/ViewCompat\.java:[0-9]+ Missing @param tag for parameter `view` in DFunction setPointerIcon
+WARN: .*\/unzippedJvmSources\/androidx\/core\/view\/ViewCompat\.java:[0-9]+ Missing @param tag for parameter `view` in DFunction setTooltipText
+WARN: .*\/unzippedJvmSources\/androidx\/core\/view\/ViewCompat\.java:[0-9]+ Missing @param tag for parameter `view` in DFunction setNextClusterForwardId
+WARN: .*\/unzippedJvmSources\/androidx\/core\/view\/ViewCompat\.java:[0-9]+ Missing @param tag for parameter `view` in DFunction setKeyboardNavigationCluster
+WARN: .*\/unzippedJvmSources\/androidx\/core\/view\/ViewCompat\.java:[0-9]+ Missing @param tag for parameter `view` in DFunction setFocusedByDefault
+WARN: .*\/unzippedJvmSources\/androidx\/core\/view\/ViewCompat\.java:[0-9]+ Missing @param tag for parameter `view` in DFunction keyboardNavigationClusterSearch
+WARN: .*\/unzippedJvmSources\/androidx\/core\/view\/ViewCompat\.java:[0-9]+ Missing @param tag for parameter `view` in DFunction addKeyboardNavigationClusters
+WARN: .*\/unzippedJvmSources\/androidx\/core\/view\/ViewCompat\.java:[0-9]+ Missing @param tag for parameter `v` in DFunction addOnUnhandledKeyEventListener
+WARN: .*\/unzippedJvmSources\/androidx\/core\/view\/ViewCompat\.java:[0-9]+ Missing @param tag for parameter `v` in DFunction removeOnUnhandledKeyEventListener
+WARN: .*\/unzippedJvmSources\/androidx\/core\/view\/ViewCompat\.java:[0-9]+ Missing @param tag for parameter `view` in DFunction saveAttributeDataForStyleable
+WARN: .*\/unzippedJvmSources\/androidx\/core\/view\/ViewCompat\.java:[0-9]+ Missing @param tag for parameter `v` in DFunction setAccessibilityDelegate
+WARN: .*\/unzippedJvmSources\/androidx\/core\/view\/ViewCompat\.java:[0-9]+ Missing @param tag for parameter `v` in DFunction setAutofillHints
+WARN: .*\/unzippedJvmSources\/androidx\/core\/view\/ViewCompat\.java:UnknownLine Missing @param tag for parameter `view` in DFunction requireViewById
+WARN: .*\/unzippedJvmSources\/androidx\/core\/view\/ViewGroupCompat\.java:[0-9]+ Missing @param tag for parameter `group` in DFunction setLayoutMode
+WARN: .*\/unzippedJvmSources\/androidx\/core\/view\/ViewGroupCompat\.java:[0-9]+ Missing @param tag for parameter `group` in DFunction setTransitionGroup
+WARN: .*\/unzippedJvmSources\/androidx\/core\/view\/ViewParentCompat\.java:[0-9]+ Missing @param tag for parameter `parent` in DFunction onNestedScroll
+WARN: .*\/unzippedJvmSources\/androidx\/core\/view\/ViewParentCompat\.java:[0-9]+ Missing @param tag for parameter `parent` in DFunction onNestedScrollAccepted
+WARN: .*\/unzippedJvmSources\/androidx\/core\/view\/ViewParentCompat\.java:[0-9]+ Missing @param tag for parameter `parent` in DFunction onStopNestedScroll
+WARN: .*\/unzippedJvmSources\/androidx\/core\/view\/ViewParentCompat\.java:[0-9]+ Missing @param tag for parameter `parent` in DFunction onNestedPreScroll
+WARN: .*\/unzippedJvmSources\/androidx\/core\/view\/ViewParentCompat\.java:[0-9]+ Missing @param tag for parameter `parent` in DFunction onNestedFling
+WARN: .*\/unzippedJvmSources\/androidx\/core\/view\/ViewParentCompat\.java:[0-9]+ Missing @param tag for parameter `parent` in DFunction onNestedPreFling
+WARN: .*\/unzippedJvmSources\/androidx\/core\/view\/ViewParentCompat\.java:[0-9]+ Missing @param tag for parameter `parent` in DFunction notifySubtreeAccessibilityStateChanged
+WARN: .*\/unzippedJvmSources\/androidx\/core\/view\/ViewParentCompat\.java:[0-9]+ Missing @param tag for parameter `parent` in DFunction onStartNestedScroll
+WARN: .*\/unzippedJvmSources\/androidx\/core\/view\/WindowCompat\.java:UnknownLine Missing @param tag for parameter `window` in DFunction requireViewById
+WARN: .*\/unzippedJvmSources\/androidx\/core\/widget\/CheckedTextViewCompat\.java:[0-9]+ Missing @param tag for parameter `textView` in DFunction setCheckMarkTintList
+WARN: .*\/unzippedJvmSources\/androidx\/core\/widget\/CheckedTextViewCompat\.java:[0-9]+ Missing @param tag for parameter `textView` in DFunction setCheckMarkTintMode
+WARN: .*\/unzippedJvmSources\/androidx\/core\/widget\/CompoundButtonCompat\.java:[0-9]+ Missing @param tag for parameter `button` in DFunction setButtonTintList
+WARN: .*\/unzippedJvmSources\/androidx\/core\/widget\/CompoundButtonCompat\.java:[0-9]+ Missing @param tag for parameter `button` in DFunction setButtonTintMode
+WARN: .*\/unzippedJvmSources\/androidx\/core\/widget\/EdgeEffectCompat\.java:[0-9]+ Missing @param tag for parameter `edgeEffect` in DFunction onPullDistance
+WARN: .*\/unzippedJvmSources\/androidx\/core\/widget\/ListViewCompat\.java:[0-9]+ Missing @param tag for parameter `listView` in DFunction canScrollList
+WARN: .*\/unzippedJvmSources\/androidx\/core\/widget\/PopupWindowCompat\.java:[0-9]+ Missing @param tag for parameter `popupWindow` in DFunction setWindowLayoutType
+WARN: .*\/unzippedJvmSources\/androidx\/core\/widget\/PopupWindowCompat\.java:[0-9]+ Missing @param tag for parameter `popupWindow` in DFunction setOverlapAnchor
+WARN: .*\/unzippedJvmSources\/androidx\/core\/widget\/RemoteViewsCompat\.kt:[0-9]+ Missing @param tag for parameter `horizontalGravity` in DFunction setRelativeLayoutHorizontalGravity
+WARN: .*\/unzippedJvmSources\/androidx\/core\/widget\/RemoteViewsCompat\.kt:[0-9]+ Missing @param tag for parameter `verticalGravity` in DFunction setRelativeLayoutVerticalGravity
+WARN: .*\/unzippedJvmSources\/androidx\/core\/widget\/RemoteViewsCompat\.kt:[0-9]+ Missing @param tag for parameter `night` in DFunction setSwitchThumbIcon
+WARN: .*\/unzippedJvmSources\/androidx\/core\/widget\/RemoteViewsCompat\.kt:[0-9]+ Missing @param tag for parameter `night` in DFunction setSwitchTrackIcon
+WARN: .*\/unzippedJvmSources\/androidx\/core\/widget\/RemoteViewsCompat\.kt:[0-9]+ Missing @param tag for parameter `horizontalGravity` in DFunction setLinearLayoutHorizontalGravity
+WARN: .*\/unzippedJvmSources\/androidx\/core\/widget\/RemoteViewsCompat\.kt:[0-9]+ Missing @param tag for parameter `verticalGravity` in DFunction setLinearLayoutVerticalGravity
+WARN: .*\/unzippedJvmSources\/androidx\/core\/widget\/TextViewCompat\.java:[0-9]+ Missing @param tag for parameter `bottom` in DFunction setCompoundDrawablesRelative
+WARN: .*\/unzippedJvmSources\/androidx\/core\/widget\/TextViewCompat\.java:[0-9]+ Missing @param tag for parameter `end` in DFunction setCompoundDrawablesRelative
+WARN: .*\/unzippedJvmSources\/androidx\/core\/widget\/TextViewCompat\.java:[0-9]+ Missing @param tag for parameter `start` in DFunction setCompoundDrawablesRelative
+WARN: .*\/unzippedJvmSources\/androidx\/core\/widget\/TextViewCompat\.java:[0-9]+ Missing @param tag for parameter `top` in DFunction setCompoundDrawablesRelative
+WARN: .*\/unzippedJvmSources\/androidx\/core\/widget\/TextViewCompat\.java:[0-9]+ Missing @param tag for parameter `bottom` in DFunction setCompoundDrawablesRelativeWithIntrinsicBounds
+WARN: .*\/unzippedJvmSources\/androidx\/core\/widget\/TextViewCompat\.java:[0-9]+ Missing @param tag for parameter `end` in DFunction setCompoundDrawablesRelativeWithIntrinsicBounds
+WARN: .*\/unzippedJvmSources\/androidx\/core\/widget\/TextViewCompat\.java:[0-9]+ Missing @param tag for parameter `start` in DFunction setCompoundDrawablesRelativeWithIntrinsicBounds
+WARN: .*\/unzippedJvmSources\/androidx\/core\/widget\/TextViewCompat\.java:[0-9]+ Missing @param tag for parameter `top` in DFunction setCompoundDrawablesRelativeWithIntrinsicBounds
+WARN: .*\/unzippedJvmSources\/androidx\/core\/widget\/TextViewCompat\.java:[0-9]+ Missing @param tag for parameter `textView` in DFunction setAutoSizeTextTypeWithDefaults
+WARN: .*\/unzippedJvmSources\/androidx\/core\/widget\/TextViewCompat\.java:[0-9]+ Missing @param tag for parameter `textView` in DFunction setAutoSizeTextTypeUniformWithConfiguration
+WARN: .*\/unzippedJvmSources\/androidx\/core\/widget\/TextViewCompat\.java:[0-9]+ Missing @param tag for parameter `textView` in DFunction setAutoSizeTextTypeUniformWithPresetSizes
+WARN: .*\/unzippedJvmSources\/androidx\/core\/widget\/TextViewCompat\.java:[0-9]+ Missing @param tag for parameter `textView` in DFunction setFirstBaselineToTopHeight
+WARN: .*\/unzippedJvmSources\/androidx\/core\/widget\/TextViewCompat\.java:[0-9]+ Missing @param tag for parameter `textView` in DFunction setLastBaselineToBottomHeight
+WARN: .*\/unzippedJvmSources\/androidx\/cursoradapter\/widget\/ResourceCursorAdapter\.java:UnknownLine Missing @param tag for parameter `c` in DFunction ResourceCursorAdapter
+WARN: .*\/unzippedJvmSources\/androidx\/customview\/poolingcontainer\/PoolingContainer\.kt:[0-9]+ Missing @param tag for parameter `listener` in DFunction addPoolingContainerListener
+WARN: .*\/unzippedJvmSources\/androidx\/customview\/widget\/ViewDragHelper\.java:[0-9]+ Missing @param tag for parameter `pointerId` in DFunction isEdgeTouched
+WARN: .*\/unzippedJvmSources\/androidx\/datastore\/rxjava2\/RxDataStoreDelegate\.kt:UnknownLine Missing @param tag for parameter `serializer` in DFunction rxDataStore
+WARN: .*\/unzippedJvmSources\/androidx\/datastore\/rxjava3\/RxDataStoreDelegate\.kt:UnknownLine Missing @param tag for parameter `serializer` in DFunction rxDataStore
+WARN: .*\/unzippedJvmSources\/androidx\/documentfile\/provider\/DocumentFile\.java:[0-9]+ Missing @param tag for parameter `context` in DFunction fromSingleUri
+WARN: .*\/unzippedJvmSources\/androidx\/documentfile\/provider\/DocumentFile\.java:[0-9]+ Missing @param tag for parameter `context` in DFunction fromTreeUri
+WARN: .*\/unzippedJvmSources\/androidx\/draganddrop\/DropHelper\.java:[0-9]+ Failed to resolve See <a href="https:\/\/developer\.android\.com\/guide\/topics\/ui\/drag-drop">Drag and drop<\/a> in DClass DropHelper
+WARN: .*\/unzippedJvmSources\/androidx\/emoji\/text\/EmojiCompat\.java:[0-9]+ Missing @param tag for parameter `useEmojiAsDefaultStyle` in DFunction setUseEmojiAsDefaultStyle
+WARN: .*\/unzippedJvmSources\/androidx\/emoji2\/text\/EmojiCompat\.java:[0-9]+ Missing @param tag for parameter `useEmojiAsDefaultStyle` in DFunction setUseEmojiAsDefaultStyle
+WARN: .*\/unzippedJvmSources\/androidx\/fragment\/app\/Fragment\.java:[0-9]+ Missing @param tag for parameter `inflater` in DFunction onCreateOptionsMenu
+WARN: .*\/unzippedJvmSources\/androidx\/graphics\/opengl\/egl\/EGLSpec\.kt:[0-9]+ Missing @param tag for parameter `context` in DFunction eglMakeCurrent
+WARN: .*\/unzippedJvmSources\/androidx\/leanback\/app\/SearchFragment\.java:[0-9]+ Missing @param tag for parameter `query` in DFunction createArgs
+WARN: .*\/unzippedJvmSources\/androidx\/leanback\/app\/SearchSupportFragment\.java:[0-9]+ Missing @param tag for parameter `query` in DFunction createArgs
+WARN: .*\/unzippedJvmSources\/androidx\/leanback\/widget\/DetailsOverviewRowPresenter\.java:[0-9]+ Missing @param tag for parameter `detailsPresenter` in DFunction ViewHolder
+WARN: .*\/unzippedJvmSources\/androidx\/leanback\/widget\/FullWidthDetailsOverviewRowPresenter\.java:[0-9]+ Missing @param tag for parameter `detailsPresenter` in DFunction ViewHolder
+WARN: .*\/unzippedJvmSources\/androidx\/leanback\/widget\/FullWidthDetailsOverviewRowPresenter\.java:[0-9]+ Missing @param tag for parameter `logoPresenter` in DFunction ViewHolder
+WARN: .*\/unzippedJvmSources\/androidx\/leanback\/widget\/GridLayoutManager\.java:[0-9]+ Missing @param tag for parameter `parent` in DFunction requestChildRectangleOnScreen
+WARN: .*\/unzippedJvmSources\/androidx\/leanback\/widget\/Parallax\.java:UnknownLine Missing @param tag for parameter `name` in DFunction createProperty
+WARN: .*\/unzippedJvmSources\/androidx\/leanback\/widget\/PlaybackControlsRow\.java:UnknownLine Missing @param tag for parameter `id` in DFunction ThumbsAction
+WARN: .*\/unzippedJvmSources\/androidx\/leanback\/widget\/PlaybackControlsRow\.java:UnknownLine Missing @param tag for parameter `outlineIconIndex` in DFunction ThumbsAction
+WARN: .*\/unzippedJvmSources\/androidx\/leanback\/widget\/PlaybackControlsRow\.java:UnknownLine Missing @param tag for parameter `solidIconIndex` in DFunction ThumbsAction
+WARN: .*\/unzippedJvmSources\/androidx\/leanback\/widget\/RecyclerViewParallax\.java:[0-9]+ Missing @param tag for parameter `name` in DFunction createProperty
+WARN: .*\/unzippedJvmSources\/androidx\/lifecycle\/testing\/TestLifecycleOwner\.kt:[0-9]+ Missing @param tag for parameter `coroutineDispatcher` in DFunction TestLifecycleOwner
+WARN: .*\/unzippedJvmSources\/androidx\/lifecycle\/viewmodel\/compose\/ViewModel\.kt:UnknownLine Missing @param tag for parameter `factory` in DFunction viewModel
+WARN: .*\/unzippedJvmSources\/androidx\/media\/AudioManagerCompat\.java:[0-9]+ Missing @param tag for parameter `audioManager` in DFunction abandonAudioFocusRequest
+WARN: .*\/unzippedJvmSources\/androidx\/media\/AudioManagerCompat\.java:[0-9]+ Missing @param tag for parameter `audioManager` in DFunction getStreamMaxVolume
+WARN: .*\/unzippedJvmSources\/androidx\/media\/AudioManagerCompat\.java:[0-9]+ Missing @param tag for parameter `audioManager` in DFunction getStreamMinVolume
+WARN: .*\/unzippedJvmSources\/androidx\/media\/AudioManagerCompat\.java:[0-9]+ Missing @param tag for parameter `audioManager` in DFunction requestAudioFocus
+WARN: .*\/unzippedJvmSources\/androidx\/media2\/common\/SessionPlayer\.java:UnknownLine Missing @param tag for parameter `metadata` in DFunction setPlaylist
+WARN: .*\/unzippedJvmSources\/androidx\/media2\/player\/MediaPlayer\.java:UnknownLine Missing @param tag for parameter `metadata` in DFunction setPlaylist
+WARN: .*\/unzippedJvmSources\/androidx\/media2\/session\/MediaController\.java:UnknownLine Missing @param tag for parameter `extras` in DFunction setMediaUri
+WARN: .*\/unzippedJvmSources\/androidx\/media2\/session\/MediaSession\.java:UnknownLine Missing @param tag for parameter `controller` in DFunction sendCustomCommand
+WARN: .*\/unzippedJvmSources\/androidx\/mediarouter\/media\/RemotePlaybackClient\.java:[0-9]+ Missing @param tag for parameter `context` in DFunction RemotePlaybackClient
+WARN: .*\/unzippedJvmSources\/androidx\/navigation\/dynamicfeatures\/DynamicActivityNavigatorDestinationBuilder\.kt:[0-9]+ Missing @param tag for parameter `builder` in DFunction activity
+WARN: .*\/unzippedJvmSources\/androidx\/navigation\/dynamicfeatures\/fragment\/DynamicFragmentNavigatorDestinationBuilder\.kt:[0-9]+ Missing @param tag for parameter `builder` in DFunction fragment
+WARN: .*\/unzippedJvmSources\/androidx\/navigation\/NavController\.kt:[0-9]+ Missing @param tag for parameter `startDestinationArgs` in DFunction setGraph
+WARN: .*\/unzippedJvmSources\/androidx\/navigation\/NavDestinationBuilder\.kt:[0-9]+ Failed to resolve See NavAction\.getDefaultArguments in DProperty defaultArguments\. Did you mean NavAction#getDefaultArguments\?
+WARN: .*\/unzippedJvmSources\/androidx\/navigation\/NavDestinationBuilder\.kt:UnknownLine Failed to resolve See NavAction\.getDefaultArguments in DFunction getDefaultArguments\. Did you mean NavAction#getDefaultArguments\?
+WARN: .*\/unzippedJvmSources\/androidx\/navigation\/NavType\.kt:[0-9]+ Missing @param tag for parameter `isNullableAllowed` in DFunction NavType
+WARN: .*\/unzippedJvmSources\/androidx\/paging\/compose\/LazyPagingItems\.kt:[0-9]+ Failed to resolve See PagingSource\.invalidate in DFunction refresh\. Did you mean PagingSource#invalidate\?
+WARN: .*\/unzippedJvmSources\/androidx\/paging\/LoadStateAdapter\.kt:[0-9]+ Missing @param tag for parameter `holder` in DFunction onBindViewHolder
+WARN: .*\/unzippedJvmSources\/androidx\/palette\/graphics\/Palette\.java:[0-9]+ Missing @param tag for parameter `target` in DFunction getColorForTarget
+WARN: .*\/unzippedJvmSources\/androidx\/recyclerview\/widget\/BatchingListUpdateCallback\.java:[0-9]+ Missing @param tag for parameter `payload` in DFunction onChanged
+WARN: .*\/unzippedJvmSources\/androidx\/recyclerview\/widget\/DefaultItemAnimator\.java:[0-9]+ Missing @param tag for parameter `fromX` in DFunction animateMove
+WARN: .*\/unzippedJvmSources\/androidx\/recyclerview\/widget\/DefaultItemAnimator\.java:[0-9]+ Missing @param tag for parameter `fromY` in DFunction animateMove
+WARN: .*\/unzippedJvmSources\/androidx\/recyclerview\/widget\/DefaultItemAnimator\.java:[0-9]+ Missing @param tag for parameter `toX` in DFunction animateMove
+WARN: .*\/unzippedJvmSources\/androidx\/recyclerview\/widget\/DefaultItemAnimator\.java:[0-9]+ Missing @param tag for parameter `toY` in DFunction animateMove
+WARN: .*\/unzippedJvmSources\/androidx\/recyclerview\/widget\/ListUpdateCallback\.java:UnknownLine Missing @param tag for parameter `payload` in DFunction onChanged
+WARN: .*\/unzippedJvmSources\/androidx\/recyclerview\/widget\/RecyclerView\.java:[0-9]+ Missing @param tag for parameter `parent` in DFunction requestChildRectangleOnScreen
+WARN: .*\/unzippedJvmSources\/androidx\/recyclerview\/widget\/RecyclerView\.java:[0-9]+ Missing @param tag for parameter `rv` in DFunction onInterceptTouchEvent
+WARN: .*\/unzippedJvmSources\/androidx\/recyclerview\/widget\/RecyclerView\.java:[0-9]+ Missing @param tag for parameter `rv` in DFunction onTouchEvent
+WARN: .*\/unzippedJvmSources\/androidx\/recyclerview\/widget\/RecyclerView\.java:UnknownLine Missing @param tag for parameter `childCount` in DFunction onGetChildDrawingOrder
+WARN: .*\/unzippedJvmSources\/androidx\/recyclerview\/widget\/SimpleItemAnimator\.java:UnknownLine Missing @param tag for parameter `fromX` in DFunction animateMove
+WARN: .*\/unzippedJvmSources\/androidx\/recyclerview\/widget\/SimpleItemAnimator\.java:UnknownLine Missing @param tag for parameter `fromY` in DFunction animateMove
+WARN: .*\/unzippedJvmSources\/androidx\/recyclerview\/widget\/SimpleItemAnimator\.java:UnknownLine Missing @param tag for parameter `toX` in DFunction animateMove
+WARN: .*\/unzippedJvmSources\/androidx\/recyclerview\/widget\/SimpleItemAnimator\.java:UnknownLine Missing @param tag for parameter `toY` in DFunction animateMove
+WARN: .*\/unzippedJvmSources\/androidx\/recyclerview\/widget\/SortedList\.java:[0-9]+ Missing @param tag for parameter `payload` in DFunction onChanged
+WARN: .*\/unzippedJvmSources\/androidx\/recyclerview\/widget\/SortedListAdapterCallback\.java:[0-9]+ Missing @param tag for parameter `payload` in DFunction onChanged
+WARN: .*\/unzippedJvmSources\/androidx\/security\/crypto\/EncryptedSharedPreferences\.java:[0-9]+ Missing @param tag for parameter `context` in DFunction create
+WARN: .*\/unzippedJvmSources\/androidx\/security\/crypto\/EncryptedSharedPreferences\.kt:[0-9]+ Missing @param tag for parameter `context` in DFunction EncryptedSharedPreferences
+WARN: .*\/unzippedJvmSources\/androidx\/security\/crypto\/MasterKey\.java:[0-9]+ Missing @param tag for parameter `keyAlias` in DFunction Builder
+WARN: .*\/unzippedJvmSources\/androidx\/slice\/builders\/GridRowBuilder\.java:[0-9]+ Missing @param tag for parameter `text` in DFunction addText
+WARN: .*\/unzippedJvmSources\/androidx\/slice\/builders\/GridRowBuilder\.java:[0-9]+ Missing @param tag for parameter `text` in DFunction addTitleText
+WARN: .*\/unzippedJvmSources\/androidx\/slice\/builders\/GridRowBuilder\.java:[0-9]+ Missing @param tag for parameter `text` in DFunction addOverlayText
+WARN: .*\/unzippedJvmSources\/androidx\/slice\/builders\/ListBuilder\.java:[0-9]+ Missing @param tag for parameter `action` in DFunction addEndItem
+WARN: .*\/unzippedJvmSources\/androidx\/slice\/builders\/ListBuilder\.java:[0-9]+ Missing @param tag for parameter `context` in DFunction ListBuilder
+WARN: .*\/unzippedJvmSources\/androidx\/slice\/builders\/ListBuilder\.java:[0-9]+ Missing @param tag for parameter `summary` in DFunction setSummary
+WARN: .*\/unzippedJvmSources\/androidx\/slice\/builders\/ListBuilder\.java:[0-9]+ Missing @param tag for parameter `action` in DFunction setTitleItem
+WARN: .*\/unzippedJvmSources\/androidx\/slice\/builders\/ListBuilder\.java:[0-9]+ Missing @param tag for parameter `title` in DFunction setTitle
+WARN: .*\/unzippedJvmSources\/androidx\/slice\/builders\/ListBuilder\.java:[0-9]+ Missing @param tag for parameter `subtitle` in DFunction setSubtitle
+WARN: .*\/unzippedJvmSources\/androidx\/slice\/SliceUtils\.java:UnknownLine Missing @param tag for parameter `context` in DFunction parseSlice
+WARN: .*\/unzippedJvmSources\/androidx\/slice\/SliceViewManager\.java:UnknownLine Missing @param tag for parameter `executor` in DFunction registerSliceCallback
+WARN: .*\/unzippedJvmSources\/androidx\/slice\/widget\/GridRowView\.java:[0-9]+ Missing @param tag for parameter `color` in DFunction addImageItem
+WARN: .*\/unzippedJvmSources\/androidx\/sqlite\/db\/SupportSQLiteDatabaseExt\.kt:UnknownLine Missing @param tag for parameter `body` in DFunction transaction
+WARN: .*\/unzippedJvmSources\/androidx\/test\/core\/app\/ActivityScenario\.java:UnknownLine Missing @param tag for parameter `activityClass` in DFunction launch
+WARN: .*\/unzippedJvmSources\/androidx\/test\/core\/app\/ActivityScenario\.java:UnknownLine Missing @param tag for parameter `activityClass` in DFunction launchActivityForResult
+WARN: .*\/unzippedJvmSources\/androidx\/test\/core\/app\/ActivityScenario\.java:UnknownLine Missing @param tag for parameter `startActivityIntent` in DFunction launch
+WARN: .*\/unzippedJvmSources\/androidx\/test\/core\/app\/ActivityScenario\.java:UnknownLine Missing @param tag for parameter `startActivityIntent` in DFunction launchActivityForResult
+WARN: .*\/unzippedJvmSources\/androidx\/test\/espresso\/contrib\/DrawerActions\.java:[0-9]+ Failed to resolve See <a href="http:\/\/developer\.android\.com\/design\/patterns\/navigation-drawer\.html">Navigation in DClass DrawerActions
+WARN: .*\/unzippedJvmSources\/androidx\/test\/espresso\/contrib\/PickerActions\.java:[0-9]+ Failed to resolve See <a href="http:\/\/developer\.android\.com\/guide\/topics\/ui\/controls\/pickers\.html">Pickers API in DClass PickerActions
+WARN: .*\/unzippedJvmSources\/androidx\/test\/espresso\/DataInteraction\.java:[0-9]+ Missing @param tag for parameter `atPosition` in DFunction displayDataMatcher
+WARN: .*\/unzippedJvmSources\/androidx\/test\/espresso\/DataInteraction\.java:[0-9]+ Missing @param tag for parameter `rootMatcher` in DFunction displayDataMatcher
+WARN: .*\/unzippedJvmSources\/androidx\/test\/espresso\/device\/action\/DeviceActions\.kt:[0-9]+ Link does not resolve for @throws DeviceControllerOperationException in DFunction setTabletopMode\. Is it from a package that the containing file does not import\? Are docs inherited by an un-documented override function, but the exception class is not in scope in the inheriting class\? The general fix for these is to fully qualify the exception name, e\.g\. `@throws java\.io\.IOException under some conditions`\.
+WARN: .*\/unzippedJvmSources\/androidx\/test\/espresso\/device\/action\/DeviceActions\.kt:[0-9]+ Link does not resolve for @throws UnsupportedDeviceOperationException in DFunction setTabletopMode\. Is it from a package that the containing file does not import\? Are docs inherited by an un-documented override function, but the exception class is not in scope in the inheriting class\? The general fix for these is to fully qualify the exception name, e\.g\. `@throws java\.io\.IOException under some conditions`\.
+WARN: .*\/unzippedJvmSources\/androidx\/test\/espresso\/device\/action\/DeviceActions\.kt:[0-9]+ Link does not resolve for @throws DeviceControllerOperationException in DFunction setBookMode\. Is it from a package that the containing file does not import\? Are docs inherited by an un-documented override function, but the exception class is not in scope in the inheriting class\? The general fix for these is to fully qualify the exception name, e\.g\. `@throws java\.io\.IOException under some conditions`\.
+WARN: .*\/unzippedJvmSources\/androidx\/test\/espresso\/device\/action\/DeviceActions\.kt:[0-9]+ Link does not resolve for @throws UnsupportedDeviceOperationException in DFunction setBookMode\. Is it from a package that the containing file does not import\? Are docs inherited by an un-documented override function, but the exception class is not in scope in the inheriting class\? The general fix for these is to fully qualify the exception name, e\.g\. `@throws java\.io\.IOException under some conditions`\.
+WARN: .*\/unzippedJvmSources\/androidx\/test\/espresso\/device\/action\/DeviceActions\.kt:[0-9]+ Link does not resolve for @throws DeviceControllerOperationException in DFunction setFlatMode\. Is it from a package that the containing file does not import\? Are docs inherited by an un-documented override function, but the exception class is not in scope in the inheriting class\? The general fix for these is to fully qualify the exception name, e\.g\. `@throws java\.io\.IOException under some conditions`\.
+WARN: .*\/unzippedJvmSources\/androidx\/test\/espresso\/device\/action\/DeviceActions\.kt:[0-9]+ Link does not resolve for @throws UnsupportedDeviceOperationException in DFunction setFlatMode\. Is it from a package that the containing file does not import\? Are docs inherited by an un-documented override function, but the exception class is not in scope in the inheriting class\? The general fix for these is to fully qualify the exception name, e\.g\. `@throws java\.io\.IOException under some conditions`\.
+WARN: .*\/unzippedJvmSources\/androidx\/test\/espresso\/device\/action\/DeviceActions\.kt:[0-9]+ Link does not resolve for @throws DeviceControllerOperationException in DFunction setClosedMode\. Is it from a package that the containing file does not import\? Are docs inherited by an un-documented override function, but the exception class is not in scope in the inheriting class\? The general fix for these is to fully qualify the exception name, e\.g\. `@throws java\.io\.IOException under some conditions`\.
+WARN: .*\/unzippedJvmSources\/androidx\/test\/espresso\/device\/action\/DeviceActions\.kt:[0-9]+ Link does not resolve for @throws UnsupportedDeviceOperationException in DFunction setClosedMode\. Is it from a package that the containing file does not import\? Are docs inherited by an un-documented override function, but the exception class is not in scope in the inheriting class\? The general fix for these is to fully qualify the exception name, e\.g\. `@throws java\.io\.IOException under some conditions`\.
+WARN: .*\/unzippedJvmSources\/androidx\/test\/espresso\/device\/DeviceInteractionExt\.kt:[0-9]+ Link does not resolve for @throws DeviceControllerOperationException in DFunction setTabletopMode\. Is it from a package that the containing file does not import\? Are docs inherited by an un-documented override function, but the exception class is not in scope in the inheriting class\? The general fix for these is to fully qualify the exception name, e\.g\. `@throws java\.io\.IOException under some conditions`\.
+WARN: .*\/unzippedJvmSources\/androidx\/test\/espresso\/device\/DeviceInteractionExt\.kt:[0-9]+ Link does not resolve for @throws UnsupportedDeviceOperationException in DFunction setTabletopMode\. Is it from a package that the containing file does not import\? Are docs inherited by an un-documented override function, but the exception class is not in scope in the inheriting class\? The general fix for these is to fully qualify the exception name, e\.g\. `@throws java\.io\.IOException under some conditions`\.
+WARN: .*\/unzippedJvmSources\/androidx\/test\/espresso\/device\/DeviceInteractionExt\.kt:[0-9]+ Link does not resolve for @throws DeviceControllerOperationException in DFunction setBookMode\. Is it from a package that the containing file does not import\? Are docs inherited by an un-documented override function, but the exception class is not in scope in the inheriting class\? The general fix for these is to fully qualify the exception name, e\.g\. `@throws java\.io\.IOException under some conditions`\.
+WARN: .*\/unzippedJvmSources\/androidx\/test\/espresso\/device\/DeviceInteractionExt\.kt:[0-9]+ Link does not resolve for @throws UnsupportedDeviceOperationException in DFunction setBookMode\. Is it from a package that the containing file does not import\? Are docs inherited by an un-documented override function, but the exception class is not in scope in the inheriting class\? The general fix for these is to fully qualify the exception name, e\.g\. `@throws java\.io\.IOException under some conditions`\.
+WARN: .*\/unzippedJvmSources\/androidx\/test\/espresso\/device\/DeviceInteractionExt\.kt:[0-9]+ Link does not resolve for @throws DeviceControllerOperationException in DFunction setFlatMode\. Is it from a package that the containing file does not import\? Are docs inherited by an un-documented override function, but the exception class is not in scope in the inheriting class\? The general fix for these is to fully qualify the exception name, e\.g\. `@throws java\.io\.IOException under some conditions`\.
+WARN: .*\/unzippedJvmSources\/androidx\/test\/espresso\/device\/DeviceInteractionExt\.kt:[0-9]+ Link does not resolve for @throws UnsupportedDeviceOperationException in DFunction setFlatMode\. Is it from a package that the containing file does not import\? Are docs inherited by an un-documented override function, but the exception class is not in scope in the inheriting class\? The general fix for these is to fully qualify the exception name, e\.g\. `@throws java\.io\.IOException under some conditions`\.
+WARN: .*\/unzippedJvmSources\/androidx\/test\/espresso\/device\/DeviceInteractionExt\.kt:[0-9]+ Link does not resolve for @throws DeviceControllerOperationException in DFunction setClosedMode\. Is it from a package that the containing file does not import\? Are docs inherited by an un-documented override function, but the exception class is not in scope in the inheriting class\? The general fix for these is to fully qualify the exception name, e\.g\. `@throws java\.io\.IOException under some conditions`\.
+WARN: .*\/unzippedJvmSources\/androidx\/test\/espresso\/device\/DeviceInteractionExt\.kt:[0-9]+ Link does not resolve for @throws UnsupportedDeviceOperationException in DFunction setClosedMode\. Is it from a package that the containing file does not import\? Are docs inherited by an un-documented override function, but the exception class is not in scope in the inheriting class\? The general fix for these is to fully qualify the exception name, e\.g\. `@throws java\.io\.IOException under some conditions`\.
+WARN: .*\/unzippedJvmSources\/androidx\/test\/espresso\/intent\/Intents\.java:[0-9]+ Link does not resolve for @throws AssertionFailedError in DFunction intended\. Is it from a package that the containing file does not import\? Are docs inherited by an un-documented override function, but the exception class is not in scope in the inheriting class\? The general fix for these is to fully qualify the exception name, e\.g\. `@throws java\.io\.IOException under some conditions`\.
+WARN: .*\/unzippedJvmSources\/androidx\/test\/espresso\/intent\/Intents\.java:[0-9]+ Missing @param tag for parameter `verificationMode` in DFunction intended
+WARN: .*\/unzippedJvmSources\/androidx\/test\/espresso\/remote\/EspressoRemote\.java:UnknownLine Missing @param tag for parameter `viewAssertion` in DFunction createRemoteCheckCallable
+WARN: .*\/unzippedJvmSources\/androidx\/test\/espresso\/remote\/NoopRemoteInteraction\.java:UnknownLine Missing @param tag for parameter `viewAssertion` in DFunction createRemoteCheckCallable
+WARN: .*\/unzippedJvmSources\/androidx\/test\/espresso\/remote\/RemoteInteraction\.java:UnknownLine Missing @param tag for parameter `viewAssert` in DFunction createRemoteCheckCallable
+WARN: .*\/unzippedJvmSources\/androidx\/test\/espresso\/remote\/TypeProtoConverters\.java:[0-9]+ Missing @param tag for parameter `parcelableClass` in DFunction byteStringToParcelable
+WARN: .*\/unzippedJvmSources\/androidx\/test\/ext\/junit\/rules\/ActivityScenarioRule\.java:[0-9]+ Missing @param tag for parameter `activityClass` in DFunction ActivityScenarioRule
+WARN: .*\/unzippedJvmSources\/androidx\/test\/ext\/junit\/rules\/ActivityScenarioRule\.java:[0-9]+ Missing @param tag for parameter `startActivityIntent` in DFunction ActivityScenarioRule
+WARN: .*\/unzippedJvmSources\/androidx\/textclassifier\/TextClassification\.java:[0-9]+ Missing @param tag for parameter `type` in DFunction setEntityType
+WARN: .*\/unzippedJvmSources\/androidx\/textclassifier\/TextSelection\.java:[0-9]+ Missing @param tag for parameter `type` in DFunction setEntityType
+WARN: .*\/unzippedJvmSources\/androidx\/tracing\/Trace\.kt:UnknownLine Missing @param tag for parameter `block` in DFunction traceAsync
+WARN: .*\/unzippedJvmSources\/androidx\/transition\/TransitionInflater\.java:[0-9]+ Missing @param tag for parameter `sceneRoot` in DFunction inflateTransitionManager
+WARN: .*\/unzippedJvmSources\/androidx\/tvprovider\/media\/tv\/PreviewChannelHelper\.java:[0-9]+ Missing @param tag for parameter `context` in DFunction PreviewChannelHelper
+WARN: .*\/unzippedJvmSources\/androidx\/wear\/compose\/foundation\/CurvedColumn\.kt:[0-9]+ Missing @param tag for parameter `contentBuilder` in DFunction curvedColumn
+WARN: .*\/unzippedJvmSources\/androidx\/wear\/compose\/foundation\/CurvedRow\.kt:[0-9]+ Missing @param tag for parameter `contentBuilder` in DFunction curvedRow
+WARN: .*\/unzippedJvmSources\/androidx\/wear\/compose\/material\/Card\.kt:[0-9]+ Missing @param tag for parameter `content` in DFunction AppCard
+WARN: .*\/unzippedJvmSources\/androidx\/wear\/compose\/material\/Card\.kt:[0-9]+ Missing @param tag for parameter `content` in DFunction TitleCard
+WARN: .*\/unzippedJvmSources\/androidx\/wear\/compose\/material\/Card\.kt:[0-9]+ Missing @param tag for parameter `content` in DFunction Card
+WARN: .*\/unzippedJvmSources\/androidx\/wear\/compose\/material\/Chip\.kt:[0-9]+ Missing @param tag for parameter `content` in DFunction Chip
+WARN: .*\/unzippedJvmSources\/androidx\/wear\/compose\/material\/ListHeader\.kt:[0-9]+ Missing @param tag for parameter `content` in DFunction ListHeader
+WARN: .*\/unzippedJvmSources\/androidx\/wear\/compose\/material\/MaterialTheme\.kt:[0-9]+ Missing @param tag for parameter `content` in DFunction MaterialTheme
+WARN: .*\/unzippedJvmSources\/androidx\/wear\/compose\/material\/Scaffold\.kt:[0-9]+ Missing @param tag for parameter `content` in DFunction Scaffold
+WARN: .*\/unzippedJvmSources\/androidx\/wear\/compose\/material\/ScalingLazyColumn\.kt:[0-9]+ Missing @param tag for parameter `content` in DFunction ScalingLazyColumn
+WARN: .*\/unzippedJvmSources\/androidx\/wear\/compose\/material3\/Button\.kt:[0-9]+ Missing @param tag for parameter `content` in DFunction FilledTonalButton
+WARN: .*\/unzippedJvmSources\/androidx\/wear\/compose\/material3\/Button\.kt:[0-9]+ Missing @param tag for parameter `content` in DFunction OutlinedButton
+WARN: .*\/unzippedJvmSources\/androidx\/wear\/compose\/material3\/Button\.kt:[0-9]+ Missing @param tag for parameter `content` in DFunction ChildButton
+WARN: .*\/unzippedJvmSources\/androidx\/wear\/compose\/material3\/Button\.kt:[0-9]+ Missing @param tag for parameter `content` in DFunction Button
+WARN: .*\/unzippedJvmSources\/androidx\/wear\/compose\/material3\/Button\.kt:[0-9]+ Missing @param tag for parameter `enabled` in DFunction outlinedButtonBorder
+WARN: .*\/unzippedJvmSources\/androidx\/wear\/compose\/material3\/MaterialTheme\.kt:[0-9]+ Missing @param tag for parameter `content` in DFunction MaterialTheme
+WARN: .*\/unzippedJvmSources\/androidx\/wear\/watchface\/client\/ListenableWatchFaceControlClient\.kt:[0-9]+ Link does not resolve for @throws ServiceStartFailureException in DFunction getOrCreateInteractiveWatchFaceClient\. Is it from a package that the containing file does not import\? Are docs inherited by an un-documented override function, but the exception class is not in scope in the inheriting class\? The general fix for these is to fully qualify the exception name, e\.g\. `@throws java\.io\.IOException under some conditions`\.
+WARN: .*\/unzippedJvmSources\/androidx\/wear\/watchface\/ComplicationSlot\.kt:[0-9]+ Missing @param tag for parameter `boundingArc` in DFunction drawHighlight
+WARN: .*\/unzippedJvmSources\/androidx\/wear\/watchface\/ComplicationSlot\.kt:[0-9]+ Unable to find reference @param bounds in DClass ComplicationSlot\. Are you trying to refer to something not visible to users\?
+WARN: .*\/unzippedJvmSources\/androidx\/wear\/watchface\/ComplicationSlot\.kt:[0-9]+ Unable to find reference @param defaultPolicy in DClass ComplicationSlot\. Are you trying to refer to something not visible to users\?
+WARN: .*\/unzippedJvmSources\/androidx\/wear\/watchface\/ComplicationSlot\.kt:[0-9]+ Missing @param tag for parameter `boundingArc` in DFunction createEdgeComplicationSlotBuilder
+WARN: .*\/unzippedJvmSources\/androidx\/wear\/watchface\/ComplicationSlot\.kt:[0-9]+ Missing @param tag for parameter `complicationTapFilter` in DFunction createEdgeComplicationSlotBuilder
+WARN: .*\/unzippedJvmSources\/androidx\/wear\/watchface\/ComplicationSlot\.kt:[0-9]+ Unable to find reference @param bounds in DClass Builder\. Are you trying to refer to something not visible to users\?
+WARN: .*\/unzippedJvmSources\/androidx\/wear\/watchface\/ComplicationSlot\.kt:[0-9]+ Unable to find reference @param boundsType in DClass Builder\. Are you trying to refer to something not visible to users\?
+WARN: .*\/unzippedJvmSources\/androidx\/wear\/watchface\/ComplicationSlot\.kt:[0-9]+ Unable to find reference @param canvasComplicationFactory in DClass Builder\. Are you trying to refer to something not visible to users\?
+WARN: .*\/unzippedJvmSources\/androidx\/wear\/watchface\/ComplicationSlot\.kt:[0-9]+ Unable to find reference @param complicationTapFilter in DClass Builder\. Are you trying to refer to something not visible to users\?
+WARN: .*\/unzippedJvmSources\/androidx\/wear\/watchface\/ComplicationSlot\.kt:[0-9]+ Unable to find reference @param defaultDataSourcePolicy in DClass Builder\. Are you trying to refer to something not visible to users\?
+WARN: .*\/unzippedJvmSources\/androidx\/wear\/watchface\/ComplicationSlot\.kt:[0-9]+ Unable to find reference @param id in DClass Builder\. Are you trying to refer to something not visible to users\?
+WARN: .*\/unzippedJvmSources\/androidx\/wear\/watchface\/ComplicationSlot\.kt:[0-9]+ Unable to find reference @param supportedTypes in DClass Builder\. Are you trying to refer to something not visible to users\?
+WARN: .*\/unzippedJvmSources\/androidx\/wear\/watchface\/Renderer\.kt:[0-9]+ Link does not resolve for @throws Renderer\.GlesException in DClass GlesRenderer2\. Is it from a package that the containing file does not import\? Are docs inherited by an un-documented override function, but the exception class is not in scope in the inheriting class\? The general fix for these is to fully qualify the exception name, e\.g\. `@throws java\.io\.IOException under some conditions`\.
+WARN: .*\/unzippedJvmSources\/androidx\/wear\/watchface\/style\/CurrentUserStyleRepository\.kt:[0-9]+ Unable to find reference @param copySelectedOptions in DClass UserStyle\. Are you trying to refer to something not visible to users\?
+WARN: .*\/unzippedJvmSources\/androidx\/webkit\/CookieManagerCompat\.java:UnknownLine Missing @param tag for parameter `cookieManager` in DFunction getCookieInfo
+WARN: .*\/unzippedJvmSources\/androidx\/webkit\/WebSettingsCompat\.java:[0-9]+ Missing @param tag for parameter `settings` in DFunction setSafeBrowsingEnabled
+WARN: .*\/unzippedJvmSources\/androidx\/webkit\/WebSettingsCompat\.java:[0-9]+ Missing @param tag for parameter `settings` in DFunction setDisabledActionModeMenuItems
+WARN: .*\/unzippedJvmSources\/androidx\/webkit\/WebSettingsCompat\.java:[0-9]+ Missing @param tag for parameter `settings` in DFunction setForceDark
+WARN: .*\/unzippedJvmSources\/androidx\/webkit\/WebSettingsCompat\.java:[0-9]+ Missing @param tag for parameter `settings` in DFunction setAlgorithmicDarkeningAllowed
+WARN: .*\/unzippedJvmSources\/androidx\/webkit\/WebSettingsCompat\.java:[0-9]+ Missing @param tag for parameter `settings` in DFunction setForceDarkStrategy
+WARN: .*\/unzippedJvmSources\/androidx\/webkit\/WebSettingsCompat\.java:[0-9]+ Missing @param tag for parameter `settings` in DFunction setEnterpriseAuthenticationAppLinkPolicyEnabled
+WARN: .*\/unzippedJvmSources\/androidx\/webkit\/WebViewCompat\.java:[0-9]+ Missing @param tag for parameter `webview` in DFunction postVisualStateCallback
+WARN: .*\/unzippedJvmSources\/androidx\/webkit\/WebViewCompat\.java:[0-9]+ Missing @param tag for parameter `webview` in DFunction postWebMessage
+WARN: .*\/unzippedJvmSources\/androidx\/webkit\/WebViewCompat\.java:[0-9]+ Missing @param tag for parameter `webview` in DFunction removeWebMessageListener
+WARN: .*\/unzippedJvmSources\/androidx\/work\/testing\/TestListenableWorkerBuilder\.kt:UnknownLine Missing @param tag for parameter `tags` in DFunction TestListenableWorkerBuilder
+WARN: .*\/unzippedJvmSources\/androidx\/work\/testing\/TestWorkerBuilder\.kt:UnknownLine Missing @param tag for parameter `tags` in DFunction TestWorkerBuilder
+WARN: .*\/unzippedJvmSources\/commonJvmAndroidMain\/androidx\/paging\/ItemKeyedDataSource\.jvm\.kt:[0-9]+ Missing @param tag for parameter `placeholdersEnabled` in DFunction LoadInitialParams
+WARN: .*\/unzippedJvmSources\/commonJvmAndroidMain\/androidx\/paging\/ItemKeyedDataSource\.jvm\.kt:[0-9]+ Missing @param tag for parameter `requestedInitialKey` in DFunction LoadInitialParams
+WARN: .*\/unzippedJvmSources\/commonJvmAndroidMain\/androidx\/paging\/ItemKeyedDataSource\.jvm\.kt:[0-9]+ Missing @param tag for parameter `requestedLoadSize` in DFunction LoadInitialParams
+WARN: .*\/unzippedJvmSources\/commonJvmAndroidMain\/androidx\/paging\/ItemKeyedDataSource\.jvm\.kt:[0-9]+ Missing @param tag for parameter `key` in DFunction LoadParams
+WARN: .*\/unzippedJvmSources\/commonJvmAndroidMain\/androidx\/paging\/ItemKeyedDataSource\.jvm\.kt:[0-9]+ Missing @param tag for parameter `requestedLoadSize` in DFunction LoadParams
+WARN: .*\/unzippedJvmSources\/commonJvmAndroidMain\/androidx\/paging\/PageKeyedDataSource\.jvm\.kt:[0-9]+ Missing @param tag for parameter `nextPageKey` in DFunction onResult
+WARN: .*\/unzippedJvmSources\/commonJvmAndroidMain\/androidx\/paging\/PageKeyedDataSource\.jvm\.kt:[0-9]+ Missing @param tag for parameter `previousPageKey` in DFunction onResult
+WARN: .*\/unzippedJvmSources\/commonJvmAndroidMain\/androidx\/paging\/PageKeyedDataSource\.jvm\.kt:[0-9]+ Missing @param tag for parameter `placeholdersEnabled` in DFunction LoadInitialParams
+WARN: .*\/unzippedJvmSources\/commonJvmAndroidMain\/androidx\/paging\/PageKeyedDataSource\.jvm\.kt:[0-9]+ Missing @param tag for parameter `requestedLoadSize` in DFunction LoadInitialParams
+WARN: .*\/unzippedJvmSources\/commonJvmAndroidMain\/androidx\/paging\/PageKeyedDataSource\.jvm\.kt:[0-9]+ Missing @param tag for parameter `key` in DFunction LoadParams
+WARN: .*\/unzippedJvmSources\/commonJvmAndroidMain\/androidx\/paging\/PageKeyedDataSource\.jvm\.kt:[0-9]+ Missing @param tag for parameter `requestedLoadSize` in DFunction LoadParams
+WARN: .*\/unzippedMultiplatformSources\/androidMain\/androidx\/compose\/animation\/graphics\/res\/AnimatedVectorPainterResources\.android\.kt:[0-9]+ Missing @param tag for parameter `animatedImageVector` in DFunction rememberAnimatedVectorPainter
+WARN: .*\/unzippedMultiplatformSources\/androidMain\/androidx\/compose\/material\/AndroidMenu\.android\.kt:[0-9]+ Missing @param tag for parameter `content` in DFunction DropdownMenuItem
+WARN: .*\/unzippedMultiplatformSources\/androidMain\/androidx\/compose\/ui\/graphics\/AndroidPath\.android\.kt:[0-9]+ Missing @param tag for parameter `operation` in DFunction op
+WARN: .*\/unzippedMultiplatformSources\/androidMain\/androidx\/compose\/ui\/text\/font\/AndroidFont\.kt:[0-9]+ Missing @param tag for parameter `variationSettings` in DFunction AndroidFont
+WARN: .*\/unzippedMultiplatformSources\/androidMain\/androidx\/constraintlayout\/compose\/MotionCarousel\.kt:[0-9]+ Missing @param tag for parameter `motionScene` in DFunction MotionCarousel
+WARN: .*\/unzippedMultiplatformSources\/androidMain\/androidx\/datastore\/DataStoreDelegate\.kt:UnknownLine Missing @param tag for parameter `serializer` in DFunction dataStore
+WARN: .*\/unzippedMultiplatformSources\/androidMain\/androidx\/datastore\/migrations\/SharedPreferencesMigration\.kt:[0-9]+ Missing @param tag for parameter `shouldRunMigration` in DFunction SharedPreferencesMigration
+WARN: .*\/unzippedMultiplatformSources\/commonMain\/androidx\/collection\/LruCache\.kt:[0-9]+ Missing @param tag for parameter `key` in DFunction entryRemoved
+WARN: .*\/unzippedMultiplatformSources\/commonMain\/androidx\/collection\/LruCache\.kt:[0-9]+ Missing @param tag for parameter `oldValue` in DFunction entryRemoved
+WARN: .*\/unzippedMultiplatformSources\/commonMain\/androidx\/compose\/animation\/AnimatedVisibility\.kt:[0-9]+ Missing @param tag for parameter `label` in DFunction AnimatedVisibility
+WARN: .*\/unzippedMultiplatformSources\/commonMain\/androidx\/compose\/animation\/core\/Animatable\.kt:[0-9]+ Missing @param tag for parameter `label` in DFunction Animatable
+WARN: .*\/unzippedMultiplatformSources\/commonMain\/androidx\/compose\/animation\/core\/AnimateAsState\.kt:UnknownLine Missing @param tag for parameter `typeConverter` in DFunction animateValueAsState
+WARN: .*\/unzippedMultiplatformSources\/commonMain\/androidx\/compose\/animation\/core\/SuspendAnimation\.kt:[0-9]+ Missing @param tag for parameter `initialValue` in DFunction animate
+WARN: .*\/unzippedMultiplatformSources\/commonMain\/androidx\/compose\/animation\/core\/SuspendAnimation\.kt:[0-9]+ Missing @param tag for parameter `targetValue` in DFunction animate
+WARN: .*\/unzippedMultiplatformSources\/commonMain\/androidx\/compose\/animation\/core\/SuspendAnimation\.kt:[0-9]+ Missing @param tag for parameter `initialValue` in DFunction animateDecay
+WARN: .*\/unzippedMultiplatformSources\/commonMain\/androidx\/compose\/animation\/core\/SuspendAnimation\.kt:[0-9]+ Missing @param tag for parameter `initialVelocity` in DFunction animateDecay
+WARN: .*\/unzippedMultiplatformSources\/commonMain\/androidx\/compose\/animation\/Crossfade\.kt:UnknownLine Missing @param tag for parameter `content` in DFunction Crossfade
+WARN: .*\/unzippedMultiplatformSources\/commonMain\/androidx\/compose\/animation\/Crossfade\.kt:UnknownLine Missing @param tag for parameter `contentKey` in DFunction Crossfade
+WARN: .*\/unzippedMultiplatformSources\/commonMain\/androidx\/compose\/foundation\/layout\/AspectRatio\.kt:[0-9]+ Missing @param tag for parameter `matchHeightConstraintsFirst` in DFunction aspectRatio
+WARN: .*\/unzippedMultiplatformSources\/commonMain\/androidx\/compose\/foundation\/layout\/Column\.kt:[0-9]+ Missing @param tag for parameter `content` in DFunction Column
+WARN: .*\/unzippedMultiplatformSources\/commonMain\/androidx\/compose\/foundation\/layout\/Row\.kt:[0-9]+ Missing @param tag for parameter `content` in DFunction Row
+WARN: .*\/unzippedMultiplatformSources\/commonMain\/androidx\/compose\/foundation\/lazy\/layout\/IntervalList\.kt:[0-9]+ Missing @param tag for parameter `block` in DFunction forEach
+WARN: .*\/unzippedMultiplatformSources\/commonMain\/androidx\/compose\/material\/Button\.kt:[0-9]+ Missing @param tag for parameter `content` in DFunction OutlinedButton
+WARN: .*\/unzippedMultiplatformSources\/commonMain\/androidx\/compose\/material\/Button\.kt:[0-9]+ Missing @param tag for parameter `content` in DFunction TextButton
+WARN: .*\/unzippedMultiplatformSources\/commonMain\/androidx\/compose\/material\/Button\.kt:[0-9]+ Missing @param tag for parameter `content` in DFunction Button
+WARN: .*\/unzippedMultiplatformSources\/commonMain\/androidx\/compose\/material\/Card\.kt:[0-9]+ Missing @param tag for parameter `content` in DFunction Card
+WARN: .*\/unzippedMultiplatformSources\/commonMain\/androidx\/compose\/material\/Chip\.kt:[0-9]+ Missing @param tag for parameter `leadingIconContentColor` in DFunction outlinedChipColors
+WARN: .*\/unzippedMultiplatformSources\/commonMain\/androidx\/compose\/material\/Chip\.kt:[0-9]+ Missing @param tag for parameter `shape` in DFunction Chip
+WARN: .*\/unzippedMultiplatformSources\/commonMain\/androidx\/compose\/material\/Divider\.kt:[0-9]+ Missing @param tag for parameter `modifier` in DFunction Divider
+WARN: .*\/unzippedMultiplatformSources\/commonMain\/androidx\/compose\/material\/MaterialTheme\.kt:[0-9]+ Missing @param tag for parameter `content` in DFunction MaterialTheme
+WARN: .*\/unzippedMultiplatformSources\/commonMain\/androidx\/compose\/material\/Surface\.kt:[0-9]+ Missing @param tag for parameter `content` in DFunction Surface
+WARN: .*\/unzippedMultiplatformSources\/commonMain\/androidx\/compose\/material\/TextFieldDefaults\.kt:[0-9]+ Missing @param tag for parameter `shape` in DFunction BorderBox
+WARN: .*\/unzippedMultiplatformSources\/commonMain\/androidx\/compose\/material3\/Button\.kt:[0-9]+ Missing @param tag for parameter `content` in DFunction Button
+WARN: .*\/unzippedMultiplatformSources\/commonMain\/androidx\/compose\/material3\/Button\.kt:[0-9]+ Missing @param tag for parameter `content` in DFunction ElevatedButton
+WARN: .*\/unzippedMultiplatformSources\/commonMain\/androidx\/compose\/material3\/Button\.kt:[0-9]+ Missing @param tag for parameter `content` in DFunction FilledTonalButton
+WARN: .*\/unzippedMultiplatformSources\/commonMain\/androidx\/compose\/material3\/Button\.kt:[0-9]+ Missing @param tag for parameter `content` in DFunction OutlinedButton
+WARN: .*\/unzippedMultiplatformSources\/commonMain\/androidx\/compose\/material3\/Button\.kt:[0-9]+ Missing @param tag for parameter `content` in DFunction TextButton
+WARN: .*\/unzippedMultiplatformSources\/commonMain\/androidx\/compose\/material3\/Card\.kt:[0-9]+ Missing @param tag for parameter `content` in DFunction ElevatedCard
+WARN: .*\/unzippedMultiplatformSources\/commonMain\/androidx\/compose\/material3\/Card\.kt:[0-9]+ Missing @param tag for parameter `content` in DFunction OutlinedCard
+WARN: .*\/unzippedMultiplatformSources\/commonMain\/androidx\/compose\/material3\/Card\.kt:[0-9]+ Missing @param tag for parameter `disabledElevation` in DFunction cardElevation
+WARN: .*\/unzippedMultiplatformSources\/commonMain\/androidx\/compose\/material3\/Card\.kt:[0-9]+ Missing @param tag for parameter `disabledElevation` in DFunction elevatedCardElevation
+WARN: .*\/unzippedMultiplatformSources\/commonMain\/androidx\/compose\/material3\/Card\.kt:[0-9]+ Missing @param tag for parameter `disabledElevation` in DFunction outlinedCardElevation
+WARN: .*\/unzippedMultiplatformSources\/commonMain\/androidx\/compose\/material3\/Card\.kt:[0-9]+ Missing @param tag for parameter `content` in DFunction Card
+WARN: .*\/unzippedMultiplatformSources\/commonMain\/androidx\/compose\/material3\/MaterialTheme\.kt:[0-9]+ Missing @param tag for parameter `content` in DFunction MaterialTheme
+WARN: .*\/unzippedMultiplatformSources\/commonMain\/androidx\/compose\/material3\/NavigationDrawer\.kt:[0-9]+ Missing @param tag for parameter `shape` in DFunction NavigationDrawerItem
+WARN: .*\/unzippedMultiplatformSources\/commonMain\/androidx\/compose\/material3\/Slider\.kt:[0-9]+ Missing @param tag for parameter `thumbSize` in DFunction Thumb
+WARN: .*\/unzippedMultiplatformSources\/commonMain\/androidx\/compose\/material3\/Surface\.kt:[0-9]+ Missing @param tag for parameter `content` in DFunction Surface
+WARN: .*\/unzippedMultiplatformSources\/commonMain\/androidx\/compose\/runtime\/Composer\.kt:[0-9]+ Missing @param tag for parameter `info` in DFunction traceEventStart
+WARN: .*\/unzippedMultiplatformSources\/commonMain\/androidx\/compose\/runtime\/Composer\.kt:[0-9]+ Missing @param tag for parameter `key` in DFunction traceEventStart
+WARN: .*\/unzippedMultiplatformSources\/commonMain\/androidx\/compose\/runtime\/Composer\.kt:[0-9]+ Missing @param tag for parameter `dataKey` in DFunction startMovableGroup
+WARN: .*\/unzippedMultiplatformSources\/commonMain\/androidx\/compose\/runtime\/saveable\/SaveableStateHolder\.kt:[0-9]+ Missing @param tag for parameter `content` in DFunction SaveableStateProvider
+WARN: .*\/unzippedMultiplatformSources\/commonMain\/androidx\/compose\/runtime\/SnapshotFlow\.kt:UnknownLine Missing @param tag for parameter `initial` in DFunction collectAsState
+WARN: .*\/unzippedMultiplatformSources\/commonMain\/androidx\/compose\/runtime\/snapshots\/Snapshot\.kt:[0-9]+ Missing @param tag for parameter `block` in DFunction observe
+WARN: .*\/unzippedMultiplatformSources\/commonMain\/androidx\/compose\/ui\/draw\/PainterModifier\.kt:[0-9]+ Missing @param tag for parameter `painter` in DFunction paint
+WARN: .*\/unzippedMultiplatformSources\/commonMain\/androidx\/compose\/ui\/draw\/Shadow\.kt:[0-9]+ Missing @param tag for parameter `ambientColor` in DFunction shadow
+WARN: .*\/unzippedMultiplatformSources\/commonMain\/androidx\/compose\/ui\/draw\/Shadow\.kt:[0-9]+ Missing @param tag for parameter `spotColor` in DFunction shadow
+WARN: .*\/unzippedMultiplatformSources\/commonMain\/androidx\/compose\/ui\/graphics\/Canvas\.kt:[0-9]+ Missing @param tag for parameter `radians` in DFunction rotateRad
+WARN: .*\/unzippedMultiplatformSources\/commonMain\/androidx\/compose\/ui\/graphics\/Color\.kt:[0-9]+ Missing @param tag for parameter `alpha` in DFunction hsv
+WARN: .*\/unzippedMultiplatformSources\/commonMain\/androidx\/compose\/ui\/graphics\/Color\.kt:[0-9]+ Missing @param tag for parameter `alpha` in DFunction hsl
+WARN: .*\/unzippedMultiplatformSources\/commonMain\/androidx\/compose\/ui\/graphics\/ColorMatrix\.kt:[0-9]+ Missing @param tag for parameter `v` in DFunction set
+WARN: .*\/unzippedMultiplatformSources\/commonMain\/androidx\/compose\/ui\/graphics\/Path\.kt:[0-9]+ Missing @param tag for parameter `operation` in DFunction op
+WARN: .*\/unzippedMultiplatformSources\/commonMain\/androidx\/compose\/ui\/graphics\/RenderEffect\.kt:[0-9]+ Missing @param tag for parameter `renderEffect` in DFunction BlurEffect
+WARN: .*\/unzippedMultiplatformSources\/commonMain\/androidx\/compose\/ui\/graphics\/vector\/ImageVector\.kt:[0-9]+ Missing @param tag for parameter `trimPathEnd` in DFunction addPath
+WARN: .*\/unzippedMultiplatformSources\/commonMain\/androidx\/compose\/ui\/graphics\/vector\/ImageVector\.kt:[0-9]+ Missing @param tag for parameter `pathFillType` in DFunction path
+WARN: .*\/unzippedMultiplatformSources\/commonMain\/androidx\/compose\/ui\/graphics\/vector\/VectorPainter\.kt:[0-9]+ Missing @param tag for parameter `autoMirror` in DFunction rememberVectorPainter
+WARN: .*\/unzippedMultiplatformSources\/commonMain\/androidx\/compose\/ui\/layout\/Placeable\.kt:[0-9]+ Missing @param tag for parameter `position` in DFunction placeAt
+WARN: .*\/unzippedMultiplatformSources\/commonMain\/androidx\/compose\/ui\/platform\/TextToolbar\.kt:[0-9]+ Missing @param tag for parameter `onSelectAllRequested` in DFunction showMenu
+WARN: .*\/unzippedMultiplatformSources\/commonMain\/androidx\/compose\/ui\/test\/Finders\.kt:[0-9]+ Missing @param tag for parameter `label` in DFunction onAllNodesWithContentDescription
+WARN: .*\/unzippedMultiplatformSources\/commonMain\/androidx\/compose\/ui\/test\/Finders\.kt:[0-9]+ Missing @param tag for parameter `testTag` in DFunction onNodeWithTag
+WARN: .*\/unzippedMultiplatformSources\/commonMain\/androidx\/compose\/ui\/test\/Finders\.kt:[0-9]+ Missing @param tag for parameter `testTag` in DFunction onAllNodesWithTag
+WARN: .*\/unzippedMultiplatformSources\/commonMain\/androidx\/compose\/ui\/test\/Finders\.kt:[0-9]+ Missing @param tag for parameter `label` in DFunction onNodeWithContentDescription
+WARN: .*\/unzippedMultiplatformSources\/commonMain\/androidx\/compose\/ui\/test\/Finders\.kt:[0-9]+ Missing @param tag for parameter `text` in DFunction onNodeWithText
+WARN: .*\/unzippedMultiplatformSources\/commonMain\/androidx\/compose\/ui\/test\/Finders\.kt:[0-9]+ Missing @param tag for parameter `text` in DFunction onAllNodesWithText
+WARN: .*\/unzippedMultiplatformSources\/commonMain\/androidx\/compose\/ui\/test\/MainTestClock\.kt:[0-9]+ Missing @param tag for parameter `condition` in DFunction advanceTimeUntil
+WARN: .*\/unzippedMultiplatformSources\/commonMain\/androidx\/compose\/ui\/text\/AnnotatedString\.kt:[0-9]+ Missing @param tag for parameter `text` in DFunction append
+WARN: .*\/unzippedMultiplatformSources\/commonMain\/androidx\/compose\/ui\/text\/AnnotatedString\.kt:[0-9]+ Missing @param tag for parameter `text` in DFunction AnnotatedString
+WARN: .*\/unzippedMultiplatformSources\/commonMain\/androidx\/datastore\/preferences\/core\/Preferences\.kt:[0-9]+ Missing @param tag for parameter `value` in DFunction set
+WARN: .*\/unzippedMultiplatformSources\/commonMain\/androidx\/paging\/compose\/LazyPagingItems\.kt:[0-9]+ Failed to resolve See PagingSource\.invalidate in DFunction refresh\. Did you mean PagingSource#invalidate\?
+WARN: .*\/unzippedMultiplatformSources\/desktopMain\/androidx\/compose\/material\/DesktopMenu\.desktop\.kt:[0-9]+ Missing @param tag for parameter `content` in DFunction DropdownMenuItem
+WARN: .*\/unzippedMultiplatformSources\/jvmMain\/androidx\/datastore\/core\/Serializer\.kt:[0-9]+ Missing @param tag for parameter `output` in DFunction writeTo
+WARN: .*\/unzippedMultiplatformSources\/nonJvmMain\/androidx\/annotation\/RestrictTo\.nonJvm\.kt:UnknownLine Link does not resolve for @throws kotlin\.IllegalArgumentException in DFunction valueOf\. Is it from a package that the containing file does not import\? Are docs inherited by an un-documented override function, but the exception class is not in scope in the inheriting class\? The general fix for these is to fully qualify the exception name, e\.g\. `@throws java\.io\.IOException under some conditions`\.
+WARN: File location could not be determined\. Failed to resolve See <a href="https:\/\/developer\.android\.com\/training\/transitions">Transition API Guide<\/a> in DPackage androidx\.transition
 # > Task :compose:ui:ui-tooling:processDebugAndroidTestManifest
 \$SUPPORT/compose/ui/ui\-tooling/src/androidInstrumentedTest/AndroidManifest\.xml:[0-9]+:[0-9]+\-[0-9]+:[0-9]+ Warning:
 # ./gradlew tasks warns as we have warnings present
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 `mdb.jetpad-admins@google.com`.
-
-### 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/development/file-utils/diff-filterer.py b/development/file-utils/diff-filterer.py
index dd986c0..135e869 100755
--- a/development/file-utils/diff-filterer.py
+++ b/development/file-utils/diff-filterer.py
@@ -126,6 +126,17 @@
           return result
     return result
 
+  # returns the time at which <path> was last modified, without following symlinks
+  def getModificationTime(self, path):
+    if os.path.exists(path):
+      if os.path.islink(path):
+        # for a symlink, the last time the link itself was modified is the ctime (mtime for a broken link is undefined)
+        return os.path.getctime(path)
+      else:
+        # for a file, the last time its content was modified is the mtime
+        return os.path.getmtime(path)
+    return None
+
 fileIo = FileIo()
 
 # Returns cpu usage
@@ -138,44 +149,6 @@
 
 cpuStats = CpuStats()
 
-# Fast file copying
-class FileCopyCache(object):
-  def __init__(self):
-    self.modificationTimes = {}
-
-  # Puts a copy of <sourcePath> at <destPath>
-  # If we already have an unmodified copy, we just hardlink our existing unmodified copy
-  # If we don't have an unmodified copy, we first make a copy
-  def copyFile(self, sourcePath, destPath, cachePath):
-    if cachePath is None:
-      fileIo.copyFile(sourcePath, destPath)
-    else:
-      shareable = self.getShareableFile(sourcePath, cachePath)
-      fileIo.hardLink(shareable, destPath)
-
-  # gets a shareable copy of <sourcePath> in <cachePath> and returns its path
-  def getShareableFile(self, sourcePath, cachePath):
-    # note that absolute sourcePath is supported
-    path = os.path.abspath(cachePath + "/" + sourcePath)
-    if path in self.modificationTimes:
-      # we've already shared this file before; let's check whether it has been modified since then
-      if self.modificationTimes[path] == self.getModificationTime(path):
-        # this file hasn't been modified since we last shared it; we can just reuse it
-        return path
-    # we don't have an existing file that we can reuse, so we have to make one
-    fileIo.copyFile(sourcePath, path)
-    self.modificationTimes[path] = self.getModificationTime(path)
-    return path
-
-  # returns the time at which <path> was last modified
-  def getModificationTime(self, path):
-    if os.path.exists(path):
-      return os.path.getmtime(path)
-    return None
-
-
-fileCopyCache = FileCopyCache()
-
 # Runs a shell command
 class ShellScript(object):
   def __init__(self, commandText, cwd):
@@ -193,7 +166,7 @@
 
 # Base class that can hold the state of a file
 class FileContent(object):
-  def apply(self, filePath, cachePath=None):
+  def apply(self, filePath):
     pass
 
   def equals(self, other, checkWithFileSystem=False):
@@ -206,8 +179,8 @@
     self.referencePath = referencePath
     self.isLink = os.path.islink(self.referencePath)
 
-  def apply(self, filePath, cachePath=None):
-    fileCopyCache.copyFile(self.referencePath, filePath, cachePath)
+  def apply(self, filePath):
+    fileIo.copyFile(self.referencePath, filePath)
 
   def equals(self, other, checkWithFileSystem=False):
     if not isinstance(other, FileBacked_FileContent):
@@ -230,7 +203,7 @@
   def __init__(self):
     super(MissingFile_FileContent, self).__init__()
 
-  def apply(self, filePath, cachePath=None):
+  def apply(self, filePath):
     fileIo.removePath(filePath)
 
   def equals(self, other, checkWithFileSystem=False):
@@ -244,7 +217,7 @@
   def __init__(self):
     super(Directory_FileContent, self).__init__()
 
-  def apply(self, filePath, cachePath=None):
+  def apply(self, filePath):
     fileIo.ensureDirExists(filePath)
 
   def equals(self, other, checkWithFileSystem=False):
@@ -258,9 +231,9 @@
   def __init__(self):
     self.fileStates = OrderedDict()
 
-  def apply(self, filePath, cachePath=None):
+  def apply(self, filePath):
     for relPath, state in self.fileStates.items():
-      state.apply(fileIo.join(filePath, relPath), cachePath)
+      state.apply(fileIo.join(filePath, relPath))
 
   def add(self, filePath, fileContent):
     self.fileStates[filePath] = fileContent
@@ -487,15 +460,15 @@
   return state
 
 # runs a Job in this process
-def runJobInSameProcess(shellCommand, workPath, cachePath, originalState, assumeNoSideEffects, full_resetTo_state, testState, twoWayPipe):
-  job = Job(shellCommand, workPath, cachePath, originalState, assumeNoSideEffects, full_resetTo_state, testState, twoWayPipe)
+def runJobInSameProcess(shellCommand, workPath, originalState, assumeNoSideEffects, full_resetTo_state, testState, twoWayPipe):
+  job = Job(shellCommand, workPath, originalState, assumeNoSideEffects, full_resetTo_state, testState, twoWayPipe)
   job.runAndReport()
 
 # starts a Job in a new process
-def runJobInOtherProcess(shellCommand, workPath, cachePath, originalState, assumeNoSideEffects, full_resetTo_state, testState, queue, identifier):
+def runJobInOtherProcess(shellCommand, workPath, originalState, assumeNoSideEffects, full_resetTo_state, testState, queue, identifier):
   parentWriter, childReader = multiprocessing.Pipe()
   childInfo = TwoWayPipe(childReader, queue, identifier)
-  process = multiprocessing.Process(target=runJobInSameProcess, args=(shellCommand, workPath, cachePath, originalState, assumeNoSideEffects, full_resetTo_state, testState, childInfo,))
+  process = multiprocessing.Process(target=runJobInSameProcess, args=(shellCommand, workPath, originalState, assumeNoSideEffects, full_resetTo_state, testState, childInfo,))
   process.start()
   return parentWriter
 
@@ -507,7 +480,7 @@
 
 # Stores a subprocess for running tests and some information about which tests to run
 class Job(object):
-  def __init__(self, shellCommand, workPath, cachePath, originalState, assumeNoSideEffects, full_resetTo_state, testState, twoWayPipe):
+  def __init__(self, shellCommand, workPath, originalState, assumeNoSideEffects, full_resetTo_state, testState, twoWayPipe):
     # the test to run
     self.shellCommand = shellCommand
     # directory to run the test in
@@ -521,7 +494,6 @@
     # the changes we're considering
     self.testState = testState
     self.pipe = twoWayPipe
-    self.cachePath = cachePath
 
   def runAndReport(self):
     succeeded = False
@@ -561,7 +533,8 @@
         if isinstance(modified, FileBacked_FileContent):
           # If any filepath wasn't modified since the start of the test, then its content matches the original
           # (If the content is known to match the original, we won't have to reset it next time)
-          if os.path.getmtime(modified.referencePath) < testStartSeconds:
+          referenceModification = fileIo.getModificationTime(modified.referencePath)
+          if referenceModification is not None and referenceModification < testStartSeconds:
             original = fullStateToTest.getContent(key)
             if original is not None:
               if isinstance(original, FileBacked_FileContent):
@@ -624,7 +597,6 @@
             except IOError as e:
               if attempt >= numAttempts - 1:
                 raise Exception("Failed to remove " + path, e)
-    fileIo.removePath(os.path.join(self.workPath, "caches"))
 
   def runnerTest(self, testState, timeout = None):
     workPath = self.getWorkPath(0)
@@ -663,9 +635,6 @@
   def getWorkPath(self, jobId):
     return os.path.join(self.workPath, "job-" + str(jobId))
 
-  def getFilesCachePath(self, jobId):
-    return os.path.join(self.workPath, "caches", "job-" + str(jobId))
-
   def run(self):
     start = datetime.datetime.now()
     numIterationsCompleted = 0
@@ -716,6 +685,10 @@
     numCompletedTests = 2 # Already tested initial passing state and initial failing state
     numJobsAtFirstSuccessAfterMerge = None
     timedOut = False
+    summaryLogPath = os.path.join(self.workPath, "diff-filterer.log")
+    summaryLog = open(summaryLogPath, "w")
+    summaryLog.write("diff-filterer.py starting at " + str(datetime.datetime.now()))
+    summaryLog.flush()
     # continue until all files fail and no jobs are running
     while (numFailuresSinceLastSplitOrSuccess < self.resetTo_state.size() and not timedOut) or len(activeTestStatesById) > 0:
       # display status message
@@ -753,7 +726,8 @@
           numConsecutiveFailures = 0
           numFailuresSinceLastSplitOrSuccess = 0
           acceptedState = box #.getAllFiles()
-          #print("Succeeded : " + acceptedState.summarize() + " (job " + str(identifier) + ") at " + str(datetime.datetime.now()))
+          summaryLog.write("Succeeded : " + acceptedState.summarize() + " (job " + str(identifier) + ") at " + str(datetime.datetime.now()) + "\n")
+          summaryLog.flush()
           maxRunningSize = max([state.size() for state in activeTestStatesById.values()])
           maxRelevantSize = maxRunningSize / len(activeTestStatesById)
           if acceptedState.size() < maxRelevantSize:
@@ -888,12 +862,11 @@
               jobId += 1
             # start job
             workingDir = self.getWorkPath(jobId)
-            cacheDir = self.getFilesCachePath(jobId)
             if jobId in workerStatesById:
               workerPreviousState = workerStatesById[jobId]
             else:
               workerPreviousState = FilesState()
-            runJobInOtherProcess(self.testScript_path, workingDir, cacheDir, workerPreviousState, self.assumeNoSideEffects, self.full_resetTo_state, box, queue, jobId)
+            runJobInOtherProcess(self.testScript_path, workingDir, workerPreviousState, self.assumeNoSideEffects, self.full_resetTo_state, box, queue, jobId)
             activeTestStatesById[jobId] = box
             availableTestStates = availableTestStates[1:]
 
diff --git a/development/simplify-build-failure/impl/join.sh b/development/simplify-build-failure/impl/join.sh
index 9277d9e..8378038 100755
--- a/development/simplify-build-failure/impl/join.sh
+++ b/development/simplify-build-failure/impl/join.sh
@@ -46,8 +46,7 @@
 
   mkdir -p "$(dirname $sourceFile)"
 
-  cd $explodedPath
-  find -type f | sort | xargs cat > "$sourceFile"
+  bash -c "cd $explodedPath && find -type f | sort | xargs cat > $sourceFile"
   chmod u+x "$sourceFile"
 }
 
@@ -62,6 +61,9 @@
   for filePath in $filePaths; do
     joinPath "$explodedDir/$filePath" "$sourcePath/$filePath"
   done
+  for filePath in $(find -type l); do
+    cp -P "$explodedDir/$filePath" "$sourcePath/$filePath"
+  done
   echo done joining all file paths under $explodedDir into $sourcePath
 }
 
diff --git a/development/simplify-build-failure/impl/split.sh b/development/simplify-build-failure/impl/split.sh
index b3e1f1d..f38c53a 100755
--- a/development/simplify-build-failure/impl/split.sh
+++ b/development/simplify-build-failure/impl/split.sh
@@ -54,7 +54,6 @@
   mkdir -p "$explodedPath"
 
   # split $sourceFile into lines, and put each line into a file named 00001, 00002, 00003, ...
-  cd "$explodedPath"
   $scriptDir/explode.py $removeLeavesArg "$sourceFile" "$explodedPath"
   touch "$explodedPath/file"
 }
@@ -73,6 +72,9 @@
     for filePath in $(find -type f); do
       explodePath "$sourcePath/$filePath" "$explodedDir/$filePath"
     done
+    for filePath in $(find -type l); do
+      cp -P "$sourcePath/$filePath" "$explodedDir/$filePath"
+    done
   fi
   echo done splitting everything in $sourcePath into $explodedDir
 }
diff --git a/development/simplify-build-failure/simplify-build-failure.sh b/development/simplify-build-failure/simplify-build-failure.sh
index 3a7e8ff..3ac0e36 100755
--- a/development/simplify-build-failure/simplify-build-failure.sh
+++ b/development/simplify-build-failure/simplify-build-failure.sh
@@ -397,9 +397,18 @@
 
   # set up command for running diff-filterer against diffs within files
   filtererOptions="--num-jobs $numJobs"
-  if echo $subfilePath | grep -v buildSrc >/dev/null 2>/dev/null; then
-    # If we're not making changes in buildSrc, then we want to keep the gradle caches around for more speed
-    # If we are making changes in buildSrc, then Gradle doesn't necessarily do up-to-date checks correctly, and we want to clear the caches between builds
+
+  # Determine whether we are willing to rely on incremental builds
+  # If we're making changes to buildSrc or gradlew then we can't rely on incremental builds to be reliable
+  incrementalBuildReliable=true
+  if [ "$subfilePath" == "" ]; then
+    incrementalBuildReliable=false
+  else
+    if echo $subfilePath | grep -v buildSrc >/dev/null 2>/dev/null; then
+      incrementalBuildReliable=false
+    fi
+  fi
+  if [ "$incrementalBuildReliable" == false ]; then
     filtererOptions="$filtererOptions --assume-no-side-effects"
   fi
 
@@ -425,7 +434,7 @@
     # TODO: maybe we should make diff-filterer.py directly support checking individual line differences within files rather than first running split.sh and asking diff-filterer.py to run join.sh
     # It would be harder to implement in diff-filterer.py though because diff-filterer.py would also need to support comparing against nonempty files too
     echo Running diff-filterer.py again to identify which function bodies can be removed
-    if "$supportRoot/development/file-utils/diff-filterer.py" --assume-input-states-are-correct $filtererOptions --work-path "$(cd $supportRoot/../.. && pwd)" "$noFunctionBodies_Passing" "$noFunctionBodies_goal" "${scriptPath}/impl/join.sh ${splitsPath} ${noFunctionBodies_sandbox} && cd ${noFunctionBodies_work} && $testCommand"; then
+    if "$supportRoot/development/file-utils/diff-filterer.py" $filtererOptions --work-path "$(cd $supportRoot/../.. && pwd)" "$noFunctionBodies_Passing" "$noFunctionBodies_goal" "${scriptPath}/impl/join.sh ${splitsPath} ${noFunctionBodies_sandbox} && cd ${noFunctionBodies_work} && $testCommand"; then
       echo diff-filterer completed successfully
     else
       failed
diff --git a/docs-public/build.gradle b/docs-public/build.gradle
index 1a97422..4b7cca1 100644
--- a/docs-public/build.gradle
+++ b/docs-public/build.gradle
@@ -8,10 +8,10 @@
 }
 
 dependencies {
-    docs("androidx.activity:activity:1.8.0-beta01")
-    docs("androidx.activity:activity-compose:1.8.0-beta01")
-    samples("androidx.activity:activity-compose-samples:1.8.0-beta01")
-    docs("androidx.activity:activity-ktx:1.8.0-beta01")
+    docs("androidx.activity:activity:1.8.0-rc01")
+    docs("androidx.activity:activity-compose:1.8.0-rc01")
+    samples("androidx.activity:activity-compose-samples:1.8.0-rc01")
+    docs("androidx.activity:activity-ktx:1.8.0-rc01")
     // ads-identifier is deprecated
     docsWithoutApiSince("androidx.ads:ads-identifier:1.0.0-alpha05")
     docsWithoutApiSince("androidx.ads:ads-identifier-common:1.0.0-alpha05")
@@ -32,90 +32,92 @@
     docs("androidx.asynclayoutinflater:asynclayoutinflater:1.1.0-alpha01")
     docs("androidx.asynclayoutinflater:asynclayoutinflater-appcompat:1.1.0-alpha01")
     docs("androidx.autofill:autofill:1.3.0-alpha01")
-    docs("androidx.benchmark:benchmark-common:1.2.0-beta05")
-    docs("androidx.benchmark:benchmark-junit4:1.2.0-beta05")
-    docs("androidx.benchmark:benchmark-macro:1.2.0-beta05")
-    docs("androidx.benchmark:benchmark-macro-junit4:1.2.0-beta05")
+    docs("androidx.benchmark:benchmark-common:1.2.0-rc01")
+    docs("androidx.benchmark:benchmark-junit4:1.2.0-rc01")
+    docs("androidx.benchmark:benchmark-macro:1.2.0-rc01")
+    docs("androidx.benchmark:benchmark-macro-junit4:1.2.0-rc01")
     docs("androidx.biometric:biometric:1.2.0-alpha05")
     docs("androidx.biometric:biometric-ktx:1.2.0-alpha05")
     samples("androidx.biometric:biometric-ktx-samples:1.2.0-alpha05")
-    docs("androidx.browser:browser:1.6.0")
-    docs("androidx.camera:camera-camera2:1.3.0-rc01")
-    docs("androidx.camera:camera-core:1.3.0-rc01")
-    docs("androidx.camera:camera-extensions:1.3.0-rc01")
+    docs("androidx.bluetooth:bluetooth:1.0.0-alpha01")
+    docs("androidx.bluetooth:bluetooth-testing:1.0.0-alpha01")
+    docs("androidx.browser:browser:1.7.0-alpha01")
+    docs("androidx.camera:camera-camera2:1.4.0-alpha01")
+    docs("androidx.camera:camera-core:1.4.0-alpha01")
+    docs("androidx.camera:camera-extensions:1.4.0-alpha01")
     stubs(fileTree(dir: "../camera/camera-extensions-stub", include: ["camera-extensions-stub.jar"]))
-    docs("androidx.camera:camera-lifecycle:1.3.0-rc01")
-    docs("androidx.camera:camera-mlkit-vision:1.3.0-rc01")
+    docs("androidx.camera:camera-lifecycle:1.4.0-alpha01")
+    docs("androidx.camera:camera-mlkit-vision:1.4.0-alpha01")
     // camera-previewview is not hosted in androidx
     docsWithoutApiSince("androidx.camera:camera-previewview:1.1.0-beta02")
-    docs("androidx.camera:camera-video:1.3.0-rc01")
-    docs("androidx.camera:camera-view:1.3.0-rc01")
-    docs("androidx.camera:camera-viewfinder:1.3.0-rc01")
-    docs("androidx.camera:camera-viewfinder-compose:1.3.0-rc01")
-    docs("androidx.camera:camera-viewfinder-core:1.3.0-rc01")
-    docs("androidx.car.app:app:1.4.0-beta01")
-    docs("androidx.car.app:app-automotive:1.4.0-beta01")
-    docs("androidx.car.app:app-projected:1.4.0-beta01")
-    docs("androidx.car.app:app-testing:1.4.0-beta01")
+    docs("androidx.camera:camera-video:1.4.0-alpha01")
+    docs("androidx.camera:camera-view:1.4.0-alpha01")
+    docs("androidx.camera:camera-viewfinder:1.4.0-alpha01")
+    docs("androidx.camera:camera-viewfinder-compose:1.4.0-alpha01")
+    docs("androidx.camera:camera-viewfinder-core:1.4.0-alpha01")
+    docs("androidx.car.app:app:1.4.0-beta02")
+    docs("androidx.car.app:app-automotive:1.4.0-beta02")
+    docs("androidx.car.app:app-projected:1.4.0-beta02")
+    docs("androidx.car.app:app-testing:1.4.0-beta02")
     docs("androidx.cardview:cardview:1.0.0")
     kmpDocs("androidx.collection:collection:1.3.0-rc01")
     docs("androidx.collection:collection-ktx:1.3.0-rc01")
-    kmpDocs("androidx.compose.animation:animation:1.6.0-alpha05")
-    kmpDocs("androidx.compose.animation:animation-core:1.6.0-alpha05")
-    kmpDocs("androidx.compose.animation:animation-graphics:1.6.0-alpha05")
-    samples("androidx.compose.animation:animation-samples:1.6.0-alpha05")
-    samples("androidx.compose.animation:animation-core-samples:1.6.0-alpha05")
-    samples("androidx.compose.animation:animation-graphics-samples:1.6.0-alpha05")
-    kmpDocs("androidx.compose.foundation:foundation:1.6.0-alpha05")
-    kmpDocs("androidx.compose.foundation:foundation-layout:1.6.0-alpha05")
-    samples("androidx.compose.foundation:foundation-layout-samples:1.6.0-alpha05")
-    samples("androidx.compose.foundation:foundation-samples:1.6.0-alpha05")
-    kmpDocs("androidx.compose.material3:material3:1.2.0-alpha07")
-    samples("androidx.compose.material3:material3-samples:1.2.0-alpha07")
-    kmpDocs("androidx.compose.material3:material3-window-size-class:1.2.0-alpha07")
-    samples("androidx.compose.material3:material3-window-size-class-samples:1.2.0-alpha07")
-    kmpDocs("androidx.compose.material:material:1.6.0-alpha05")
-    kmpDocs("androidx.compose.material:material-icons-core:1.6.0-alpha05")
-    samples("androidx.compose.material:material-icons-core-samples:1.6.0-alpha05")
-    kmpDocs("androidx.compose.material:material-ripple:1.6.0-alpha05")
-    samples("androidx.compose.material:material-samples:1.6.0-alpha05")
-    kmpDocs("androidx.compose.runtime:runtime:1.6.0-alpha05")
-    docs("androidx.compose.runtime:runtime-livedata:1.6.0-alpha05")
-    samples("androidx.compose.runtime:runtime-livedata-samples:1.6.0-alpha05")
-    docs("androidx.compose.runtime:runtime-rxjava2:1.6.0-alpha05")
-    samples("androidx.compose.runtime:runtime-rxjava2-samples:1.6.0-alpha05")
-    docs("androidx.compose.runtime:runtime-rxjava3:1.6.0-alpha05")
-    samples("androidx.compose.runtime:runtime-rxjava3-samples:1.6.0-alpha05")
-    kmpDocs("androidx.compose.runtime:runtime-saveable:1.6.0-alpha05")
-    samples("androidx.compose.runtime:runtime-saveable-samples:1.6.0-alpha05")
-    samples("androidx.compose.runtime:runtime-samples:1.6.0-alpha05")
+    kmpDocs("androidx.compose.animation:animation:1.6.0-alpha06")
+    kmpDocs("androidx.compose.animation:animation-core:1.6.0-alpha06")
+    kmpDocs("androidx.compose.animation:animation-graphics:1.6.0-alpha06")
+    samples("androidx.compose.animation:animation-samples:1.6.0-alpha06")
+    samples("androidx.compose.animation:animation-core-samples:1.6.0-alpha06")
+    samples("androidx.compose.animation:animation-graphics-samples:1.6.0-alpha06")
+    kmpDocs("androidx.compose.foundation:foundation:1.6.0-alpha06")
+    kmpDocs("androidx.compose.foundation:foundation-layout:1.6.0-alpha06")
+    samples("androidx.compose.foundation:foundation-layout-samples:1.6.0-alpha06")
+    samples("androidx.compose.foundation:foundation-samples:1.6.0-alpha06")
+    kmpDocs("androidx.compose.material3:material3:1.2.0-alpha08")
+    samples("androidx.compose.material3:material3-samples:1.2.0-alpha08")
+    kmpDocs("androidx.compose.material3:material3-window-size-class:1.2.0-alpha08")
+    samples("androidx.compose.material3:material3-window-size-class-samples:1.2.0-alpha08")
+    kmpDocs("androidx.compose.material:material:1.6.0-alpha06")
+    kmpDocs("androidx.compose.material:material-icons-core:1.6.0-alpha06")
+    samples("androidx.compose.material:material-icons-core-samples:1.6.0-alpha06")
+    kmpDocs("androidx.compose.material:material-ripple:1.6.0-alpha06")
+    samples("androidx.compose.material:material-samples:1.6.0-alpha06")
+    kmpDocs("androidx.compose.runtime:runtime:1.6.0-alpha06")
+    docs("androidx.compose.runtime:runtime-livedata:1.6.0-alpha06")
+    samples("androidx.compose.runtime:runtime-livedata-samples:1.6.0-alpha06")
+    docs("androidx.compose.runtime:runtime-rxjava2:1.6.0-alpha06")
+    samples("androidx.compose.runtime:runtime-rxjava2-samples:1.6.0-alpha06")
+    docs("androidx.compose.runtime:runtime-rxjava3:1.6.0-alpha06")
+    samples("androidx.compose.runtime:runtime-rxjava3-samples:1.6.0-alpha06")
+    kmpDocs("androidx.compose.runtime:runtime-saveable:1.6.0-alpha06")
+    samples("androidx.compose.runtime:runtime-saveable-samples:1.6.0-alpha06")
+    samples("androidx.compose.runtime:runtime-samples:1.6.0-alpha06")
     docs("androidx.compose.runtime:runtime-tracing:1.0.0-alpha05")
-    kmpDocs("androidx.compose.ui:ui:1.6.0-alpha05")
-    kmpDocs("androidx.compose.ui:ui-geometry:1.6.0-alpha05")
-    kmpDocs("androidx.compose.ui:ui-graphics:1.6.0-alpha05")
-    samples("androidx.compose.ui:ui-graphics-samples:1.6.0-alpha05")
-    kmpDocs("androidx.compose.ui:ui-test:1.6.0-alpha05")
-    kmpDocs("androidx.compose.ui:ui-test-junit4:1.6.0-alpha05")
-    samples("androidx.compose.ui:ui-test-samples:1.6.0-alpha05")
-    kmpDocs("androidx.compose.ui:ui-text:1.6.0-alpha05")
-    docs("androidx.compose.ui:ui-text-google-fonts:1.6.0-alpha05")
-    samples("androidx.compose.ui:ui-text-samples:1.6.0-alpha05")
-    kmpDocs("androidx.compose.ui:ui-tooling:1.6.0-alpha05")
-    kmpDocs("androidx.compose.ui:ui-tooling-data:1.6.0-alpha05")
-    kmpDocs("androidx.compose.ui:ui-tooling-preview:1.6.0-alpha05")
-    kmpDocs("androidx.compose.ui:ui-unit:1.6.0-alpha05")
-    samples("androidx.compose.ui:ui-unit-samples:1.6.0-alpha05")
-    kmpDocs("androidx.compose.ui:ui-util:1.6.0-alpha05")
-    docs("androidx.compose.ui:ui-viewbinding:1.6.0-alpha05")
-    samples("androidx.compose.ui:ui-viewbinding-samples:1.6.0-alpha05")
-    samples("androidx.compose.ui:ui-samples:1.6.0-alpha05")
+    kmpDocs("androidx.compose.ui:ui:1.6.0-alpha06")
+    kmpDocs("androidx.compose.ui:ui-geometry:1.6.0-alpha06")
+    kmpDocs("androidx.compose.ui:ui-graphics:1.6.0-alpha06")
+    samples("androidx.compose.ui:ui-graphics-samples:1.6.0-alpha06")
+    kmpDocs("androidx.compose.ui:ui-test:1.6.0-alpha06")
+    kmpDocs("androidx.compose.ui:ui-test-junit4:1.6.0-alpha06")
+    samples("androidx.compose.ui:ui-test-samples:1.6.0-alpha06")
+    kmpDocs("androidx.compose.ui:ui-text:1.6.0-alpha06")
+    docs("androidx.compose.ui:ui-text-google-fonts:1.6.0-alpha06")
+    samples("androidx.compose.ui:ui-text-samples:1.6.0-alpha06")
+    kmpDocs("androidx.compose.ui:ui-tooling:1.6.0-alpha06")
+    kmpDocs("androidx.compose.ui:ui-tooling-data:1.6.0-alpha06")
+    kmpDocs("androidx.compose.ui:ui-tooling-preview:1.6.0-alpha06")
+    kmpDocs("androidx.compose.ui:ui-unit:1.6.0-alpha06")
+    samples("androidx.compose.ui:ui-unit-samples:1.6.0-alpha06")
+    kmpDocs("androidx.compose.ui:ui-util:1.6.0-alpha06")
+    docs("androidx.compose.ui:ui-viewbinding:1.6.0-alpha06")
+    samples("androidx.compose.ui:ui-viewbinding-samples:1.6.0-alpha06")
+    samples("androidx.compose.ui:ui-samples:1.6.0-alpha06")
     docs("androidx.concurrent:concurrent-futures:1.2.0-alpha02")
     docs("androidx.concurrent:concurrent-futures-ktx:1.2.0-alpha02")
     docs("androidx.constraintlayout:constraintlayout:2.2.0-alpha12")
     kmpDocs("androidx.constraintlayout:constraintlayout-compose:1.1.0-alpha12")
     docs("androidx.constraintlayout:constraintlayout-core:1.1.0-alpha12")
     docs("androidx.contentpager:contentpager:1.0.0")
-    docs("androidx.coordinatorlayout:coordinatorlayout:1.2.0")
+    docs("androidx.coordinatorlayout:coordinatorlayout:1.3.0-alpha01")
     docs("androidx.core:core:1.12.0-rc01")
     // TODO(b/294531403): Turn on apiSince for core-animation when it releases as alpha
     docsWithoutApiSince("androidx.core:core-animation:1.0.0-rc01")
@@ -135,9 +137,9 @@
     docs("androidx.core:core-testing:1.12.0-rc01")
     docs("androidx.core.uwb:uwb:1.0.0-alpha07")
     docs("androidx.core.uwb:uwb-rxjava3:1.0.0-alpha07")
-    docs("androidx.credentials:credentials:1.2.0-beta03")
-    docs("androidx.credentials:credentials-play-services-auth:1.2.0-beta03")
-    samples("androidx.credentials:credentials-samples:1.2.0-beta03")
+    docs("androidx.credentials:credentials:1.2.0-beta04")
+    docs("androidx.credentials:credentials-play-services-auth:1.2.0-beta04")
+    samples("androidx.credentials:credentials-samples:1.2.0-beta04")
     docs("androidx.cursoradapter:cursoradapter:1.0.0")
     docs("androidx.customview:customview:1.2.0-alpha02")
     // TODO(b/294531403): Turn on apiSince for customview-poolingcontainer when it releases as alpha
@@ -167,9 +169,9 @@
     docs("androidx.enterprise:enterprise-feedback:1.1.0")
     docs("androidx.enterprise:enterprise-feedback-testing:1.1.0")
     docs("androidx.exifinterface:exifinterface:1.3.6")
-    docs("androidx.fragment:fragment:1.7.0-alpha04")
-    docs("androidx.fragment:fragment-ktx:1.7.0-alpha04")
-    docs("androidx.fragment:fragment-testing:1.7.0-alpha04")
+    docs("androidx.fragment:fragment:1.7.0-alpha05")
+    docs("androidx.fragment:fragment-ktx:1.7.0-alpha05")
+    docs("androidx.fragment:fragment-testing:1.7.0-alpha05")
     docs("androidx.glance:glance:1.0.0")
     docs("androidx.glance:glance-appwidget:1.0.0")
     samples("androidx.glance:glance-appwidget-samples:1.0.0")
@@ -193,7 +195,7 @@
     samples("androidx.hilt:hilt-navigation-compose-samples:1.1.0-alpha01")
     docs("androidx.hilt:hilt-navigation-fragment:1.1.0-alpha02")
     docs("androidx.hilt:hilt-work:1.1.0-alpha01")
-    docs("androidx.input:input-motionprediction:1.0.0-beta02")
+    docs("androidx.input:input-motionprediction:1.0.0-beta03")
     docs("androidx.interpolator:interpolator:1.0.0")
     docs("androidx.javascriptengine:javascriptengine:1.0.0-alpha05")
     docs("androidx.leanback:leanback:1.2.0-alpha03")
@@ -231,59 +233,59 @@
     docs("androidx.media2:media2-widget:1.2.1")
     docs("androidx.media:media:1.6.0")
     // androidx.media3 is not hosted in androidx
-    docsWithoutApiSince("androidx.media3:media3-cast:1.1.0")
-    docsWithoutApiSince("androidx.media3:media3-common:1.1.0")
-    docsWithoutApiSince("androidx.media3:media3-container:1.1.0")
-    docsWithoutApiSince("androidx.media3:media3-database:1.1.0")
-    docsWithoutApiSince("androidx.media3:media3-datasource:1.1.0")
-    docsWithoutApiSince("androidx.media3:media3-datasource-cronet:1.1.0")
-    docsWithoutApiSince("androidx.media3:media3-datasource-okhttp:1.1.0")
-    docsWithoutApiSince("androidx.media3:media3-datasource-rtmp:1.1.0")
-    docsWithoutApiSince("androidx.media3:media3-decoder:1.1.0")
-    docsWithoutApiSince("androidx.media3:media3-effect:1.1.0")
-    docsWithoutApiSince("androidx.media3:media3-exoplayer:1.1.0")
-    docsWithoutApiSince("androidx.media3:media3-exoplayer-dash:1.1.0")
-    docsWithoutApiSince("androidx.media3:media3-exoplayer-hls:1.1.0")
-    docsWithoutApiSince("androidx.media3:media3-exoplayer-ima:1.1.0")
-    docsWithoutApiSince("androidx.media3:media3-exoplayer-rtsp:1.1.0")
-    docsWithoutApiSince("androidx.media3:media3-exoplayer-smoothstreaming:1.1.0")
-    docsWithoutApiSince("androidx.media3:media3-exoplayer-workmanager:1.1.0")
-    docsWithoutApiSince("androidx.media3:media3-extractor:1.1.0")
-    docsWithoutApiSince("androidx.media3:media3-muxer:1.1.0")
-    docsWithoutApiSince("androidx.media3:media3-session:1.1.0")
-    docsWithoutApiSince("androidx.media3:media3-test-utils:1.1.0")
-    docsWithoutApiSince("androidx.media3:media3-test-utils-robolectric:1.1.0")
-    docsWithoutApiSince("androidx.media3:media3-transformer:1.1.0")
-    docsWithoutApiSince("androidx.media3:media3-ui:1.1.0")
-    docsWithoutApiSince("androidx.media3:media3-ui-leanback:1.1.0")
-    docs("androidx.mediarouter:mediarouter:1.6.0-rc01")
-    docs("androidx.mediarouter:mediarouter-testing:1.6.0-rc01")
+    docsWithoutApiSince("androidx.media3:media3-cast:1.2.0-alpha01")
+    docsWithoutApiSince("androidx.media3:media3-common:1.2.0-alpha01")
+    docsWithoutApiSince("androidx.media3:media3-container:1.2.0-alpha01")
+    docsWithoutApiSince("androidx.media3:media3-database:1.2.0-alpha01")
+    docsWithoutApiSince("androidx.media3:media3-datasource:1.2.0-alpha01")
+    docsWithoutApiSince("androidx.media3:media3-datasource-cronet:1.2.0-alpha01")
+    docsWithoutApiSince("androidx.media3:media3-datasource-okhttp:1.2.0-alpha01")
+    docsWithoutApiSince("androidx.media3:media3-datasource-rtmp:1.2.0-alpha01")
+    docsWithoutApiSince("androidx.media3:media3-decoder:1.2.0-alpha01")
+    docsWithoutApiSince("androidx.media3:media3-effect:1.2.0-alpha01")
+    docsWithoutApiSince("androidx.media3:media3-exoplayer:1.2.0-alpha01")
+    docsWithoutApiSince("androidx.media3:media3-exoplayer-dash:1.2.0-alpha01")
+    docsWithoutApiSince("androidx.media3:media3-exoplayer-hls:1.2.0-alpha01")
+    docsWithoutApiSince("androidx.media3:media3-exoplayer-ima:1.2.0-alpha01")
+    docsWithoutApiSince("androidx.media3:media3-exoplayer-rtsp:1.2.0-alpha01")
+    docsWithoutApiSince("androidx.media3:media3-exoplayer-smoothstreaming:1.2.0-alpha01")
+    docsWithoutApiSince("androidx.media3:media3-exoplayer-workmanager:1.2.0-alpha01")
+    docsWithoutApiSince("androidx.media3:media3-extractor:1.2.0-alpha01")
+    docsWithoutApiSince("androidx.media3:media3-muxer:1.2.0-alpha01")
+    docsWithoutApiSince("androidx.media3:media3-session:1.2.0-alpha01")
+    docsWithoutApiSince("androidx.media3:media3-test-utils:1.2.0-alpha01")
+    docsWithoutApiSince("androidx.media3:media3-test-utils-robolectric:1.2.0-alpha01")
+    docsWithoutApiSince("androidx.media3:media3-transformer:1.2.0-alpha01")
+    docsWithoutApiSince("androidx.media3:media3-ui:1.2.0-alpha01")
+    docsWithoutApiSince("androidx.media3:media3-ui-leanback:1.2.0-alpha01")
+    docs("androidx.mediarouter:mediarouter:1.6.0")
+    docs("androidx.mediarouter:mediarouter-testing:1.6.0")
     docs("androidx.metrics:metrics-performance:1.0.0-alpha04")
-    docs("androidx.navigation:navigation-common:2.7.2")
-    docs("androidx.navigation:navigation-common-ktx:2.7.2")
-    docs("androidx.navigation:navigation-compose:2.7.2")
-    samples("androidx.navigation:navigation-compose-samples:2.7.2")
-    docs("androidx.navigation:navigation-dynamic-features-fragment:2.7.2")
-    docs("androidx.navigation:navigation-dynamic-features-runtime:2.7.2")
-    docs("androidx.navigation:navigation-fragment:2.7.2")
-    docs("androidx.navigation:navigation-fragment-ktx:2.7.2")
-    docs("androidx.navigation:navigation-runtime:2.7.2")
-    docs("androidx.navigation:navigation-runtime-ktx:2.7.2")
-    docs("androidx.navigation:navigation-testing:2.7.2")
-    docs("androidx.navigation:navigation-ui:2.7.2")
-    docs("androidx.navigation:navigation-ui-ktx:2.7.2")
-    docs("androidx.paging:paging-common:3.2.1")
-    docs("androidx.paging:paging-common-ktx:3.2.1")
-    docs("androidx.paging:paging-compose:3.2.1")
-    samples("androidx.paging:paging-compose-samples:3.2.1")
-    docs("androidx.paging:paging-guava:3.2.1")
-    docs("androidx.paging:paging-runtime:3.2.1")
-    docs("androidx.paging:paging-runtime-ktx:3.2.1")
-    docs("androidx.paging:paging-rxjava2:3.2.1")
-    docs("androidx.paging:paging-rxjava2-ktx:3.2.1")
-    docs("androidx.paging:paging-rxjava3:3.2.1")
-    samples("androidx.paging:paging-samples:3.2.1")
-    docs("androidx.paging:paging-testing:3.2.1")
+    docs("androidx.navigation:navigation-common:2.7.3")
+    docs("androidx.navigation:navigation-common-ktx:2.7.3")
+    docs("androidx.navigation:navigation-compose:2.7.3")
+    samples("androidx.navigation:navigation-compose-samples:2.7.3")
+    docs("androidx.navigation:navigation-dynamic-features-fragment:2.7.3")
+    docs("androidx.navigation:navigation-dynamic-features-runtime:2.7.3")
+    docs("androidx.navigation:navigation-fragment:2.7.3")
+    docs("androidx.navigation:navigation-fragment-ktx:2.7.3")
+    docs("androidx.navigation:navigation-runtime:2.7.3")
+    docs("androidx.navigation:navigation-runtime-ktx:2.7.3")
+    docs("androidx.navigation:navigation-testing:2.7.3")
+    docs("androidx.navigation:navigation-ui:2.7.3")
+    docs("androidx.navigation:navigation-ui-ktx:2.7.3")
+    docs("androidx.paging:paging-common:3.3.0-alpha01")
+    docs("androidx.paging:paging-common-ktx:3.3.0-alpha01")
+    kmpDocs("androidx.paging:paging-compose:3.3.0-alpha01")
+    samples("androidx.paging:paging-compose-samples:3.3.0-alpha01")
+    docs("androidx.paging:paging-guava:3.3.0-alpha01")
+    docs("androidx.paging:paging-runtime:3.3.0-alpha01")
+    docs("androidx.paging:paging-runtime-ktx:3.3.0-alpha01")
+    docs("androidx.paging:paging-rxjava2:3.3.0-alpha01")
+    docs("androidx.paging:paging-rxjava2-ktx:3.3.0-alpha01")
+    docs("androidx.paging:paging-rxjava3:3.3.0-alpha01")
+    samples("androidx.paging:paging-samples:3.3.0-alpha01")
+    docs("androidx.paging:paging-testing:3.3.0-alpha01")
     docs("androidx.palette:palette:1.0.0")
     docs("androidx.palette:palette-ktx:1.0.0")
     docs("androidx.percentlayout:percentlayout:1.0.1")
@@ -295,27 +297,27 @@
     docs("androidx.privacysandbox.sdkruntime:sdkruntime-client:1.0.0-alpha08")
     docs("androidx.privacysandbox.sdkruntime:sdkruntime-core:1.0.0-alpha08")
     docs("androidx.privacysandbox.tools:tools:1.0.0-alpha06")
-    docs("androidx.privacysandbox.ui:ui-client:1.0.0-alpha05")
-    docs("androidx.privacysandbox.ui:ui-core:1.0.0-alpha05")
-    docs("androidx.privacysandbox.ui:ui-provider:1.0.0-alpha05")
+    docs("androidx.privacysandbox.ui:ui-client:1.0.0-alpha06")
+    docs("androidx.privacysandbox.ui:ui-core:1.0.0-alpha06")
+    docs("androidx.privacysandbox.ui:ui-provider:1.0.0-alpha06")
     docs("androidx.profileinstaller:profileinstaller:1.3.1")
     docs("androidx.recommendation:recommendation:1.0.0")
     docs("androidx.recyclerview:recyclerview:1.3.1")
     docs("androidx.recyclerview:recyclerview-selection:2.0.0-alpha01")
     docs("androidx.remotecallback:remotecallback:1.0.0-alpha02")
     docs("androidx.resourceinspection:resourceinspection-annotation:1.0.1")
-    docs("androidx.room:room-common:2.6.0-beta01")
-    docs("androidx.room:room-guava:2.6.0-beta01")
-    docs("androidx.room:room-ktx:2.6.0-beta01")
-    docs("androidx.room:room-migration:2.6.0-beta01")
-    docs("androidx.room:room-paging:2.6.0-beta01")
-    docs("androidx.room:room-paging-guava:2.6.0-beta01")
-    docs("androidx.room:room-paging-rxjava2:2.6.0-beta01")
-    docs("androidx.room:room-paging-rxjava3:2.6.0-beta01")
-    docs("androidx.room:room-runtime:2.6.0-beta01")
-    docs("androidx.room:room-rxjava2:2.6.0-beta01")
-    docs("androidx.room:room-rxjava3:2.6.0-beta01")
-    docs("androidx.room:room-testing:2.6.0-beta01")
+    docs("androidx.room:room-common:2.6.0-rc01")
+    docs("androidx.room:room-guava:2.6.0-rc01")
+    docs("androidx.room:room-ktx:2.6.0-rc01")
+    docs("androidx.room:room-migration:2.6.0-rc01")
+    docs("androidx.room:room-paging:2.6.0-rc01")
+    docs("androidx.room:room-paging-guava:2.6.0-rc01")
+    docs("androidx.room:room-paging-rxjava2:2.6.0-rc01")
+    docs("androidx.room:room-paging-rxjava3:2.6.0-rc01")
+    docs("androidx.room:room-runtime:2.6.0-rc01")
+    docs("androidx.room:room-rxjava2:2.6.0-rc01")
+    docs("androidx.room:room-rxjava3:2.6.0-rc01")
+    docs("androidx.room:room-testing:2.6.0-rc01")
     docs("androidx.savedstate:savedstate:1.2.1")
     docs("androidx.savedstate:savedstate-ktx:1.2.1")
     docs("androidx.security:security-app-authenticator:1.0.0-alpha02")
@@ -329,9 +331,9 @@
     docs("androidx.slice:slice-core:1.1.0-alpha02")
     docs("androidx.slice:slice-view:1.1.0-alpha02")
     docs("androidx.slidingpanelayout:slidingpanelayout:1.2.0")
-    docs("androidx.sqlite:sqlite:2.4.0-beta01")
-    docs("androidx.sqlite:sqlite-framework:2.4.0-beta01")
-    docs("androidx.sqlite:sqlite-ktx:2.4.0-beta01")
+    docs("androidx.sqlite:sqlite:2.4.0-rc01")
+    docs("androidx.sqlite:sqlite-framework:2.4.0-rc01")
+    docs("androidx.sqlite:sqlite-ktx:2.4.0-rc01")
     docs("androidx.startup:startup-runtime:1.2.0-alpha02")
     docs("androidx.swiperefreshlayout:swiperefreshlayout:1.2.0-alpha01")
     // androidx.test is not hosted in androidx\
@@ -359,12 +361,12 @@
     docsWithoutApiSince("androidx.textclassifier:textclassifier:1.0.0-alpha04")
     docs("androidx.tracing:tracing:1.3.0-alpha02")
     docs("androidx.tracing:tracing-ktx:1.3.0-alpha02")
-    docs("androidx.tracing:tracing-perfetto:1.0.0-beta03")
+    docs("androidx.tracing:tracing-perfetto:1.0.0-rc01")
     // TODO(243405142) clean-up
     docsWithoutApiSince("androidx.tracing:tracing-perfetto-common:1.0.0-alpha16")
-    docs("androidx.tracing:tracing-perfetto-handshake:1.0.0-beta03")
-    docs("androidx.transition:transition:1.5.0-alpha02")
-    docs("androidx.transition:transition-ktx:1.5.0-alpha02")
+    docs("androidx.tracing:tracing-perfetto-handshake:1.0.0-rc01")
+    docs("androidx.transition:transition:1.5.0-alpha03")
+    docs("androidx.transition:transition-ktx:1.5.0-alpha03")
     docs("androidx.tv:tv-foundation:1.0.0-alpha09")
     docs("androidx.tv:tv-material:1.0.0-alpha09")
     samples("androidx.tv:tv-samples:1.0.0-alpha09")
@@ -375,16 +377,16 @@
     docs("androidx.versionedparcelable:versionedparcelable:1.1.1")
     docs("androidx.viewpager2:viewpager2:1.1.0-beta02")
     docs("androidx.viewpager:viewpager:1.1.0-alpha01")
-    docs("androidx.wear.compose:compose-foundation:1.3.0-alpha05")
-    samples("androidx.wear.compose:compose-foundation-samples:1.3.0-alpha05")
-    docs("androidx.wear.compose:compose-material:1.3.0-alpha05")
-    docs("androidx.wear.compose:compose-material-core:1.3.0-alpha05")
-    samples("androidx.wear.compose:compose-material-samples:1.3.0-alpha05")
-    docs("androidx.wear.compose:compose-material3:1.0.0-alpha11")
-    samples("androidx.wear.compose:compose-material3-samples:1.3.0-alpha05")
-    docs("androidx.wear.compose:compose-navigation:1.3.0-alpha05")
-    samples("androidx.wear.compose:compose-navigation-samples:1.3.0-alpha05")
-    docs("androidx.wear.compose:compose-ui-tooling:1.3.0-alpha05")
+    docs("androidx.wear.compose:compose-foundation:1.3.0-alpha06")
+    samples("androidx.wear.compose:compose-foundation-samples:1.3.0-alpha06")
+    docs("androidx.wear.compose:compose-material:1.3.0-alpha06")
+    docs("androidx.wear.compose:compose-material-core:1.3.0-alpha06")
+    samples("androidx.wear.compose:compose-material-samples:1.3.0-alpha06")
+    docs("androidx.wear.compose:compose-material3:1.0.0-alpha12")
+    samples("androidx.wear.compose:compose-material3-samples:1.3.0-alpha06")
+    docs("androidx.wear.compose:compose-navigation:1.3.0-alpha06")
+    samples("androidx.wear.compose:compose-navigation-samples:1.3.0-alpha06")
+    docs("androidx.wear.compose:compose-ui-tooling:1.3.0-alpha06")
     docs("androidx.wear.protolayout:protolayout:1.0.0")
     docs("androidx.wear.protolayout:protolayout-expression:1.0.0")
     docs("androidx.wear.protolayout:protolayout-expression-pipeline:1.0.0")
@@ -423,15 +425,15 @@
     docs("androidx.wear:wear-tooling-preview:1.0.0-alpha01")
     docs("androidx.webkit:webkit:1.8.0")
     docs("androidx.window.extensions.core:core:1.0.0")
-    docs("androidx.window:window:1.2.0-beta01")
+    docs("androidx.window:window:1.2.0-beta03")
     stubs(fileTree(dir: "../window/stubs/", include: ["window-sidecar-release-0.1.0-alpha01.aar"]))
-    docs("androidx.window:window-core:1.2.0-beta01")
+    docs("androidx.window:window-core:1.2.0-beta03")
     stubs("androidx.window:window-extensions:1.0.0-alpha01")
-    docs("androidx.window:window-java:1.2.0-beta01")
-    docs("androidx.window:window-rxjava2:1.2.0-beta01")
-    docs("androidx.window:window-rxjava3:1.2.0-beta01")
-    samples("androidx.window:window-samples:1.2.0-beta01")
-    docs("androidx.window:window-testing:1.2.0-beta01")
+    docs("androidx.window:window-java:1.2.0-beta03")
+    docs("androidx.window:window-rxjava2:1.2.0-beta03")
+    docs("androidx.window:window-rxjava3:1.2.0-beta03")
+    samples("androidx.window:window-samples:1.2.0-beta03")
+    docs("androidx.window:window-testing:1.2.0-beta03")
     docs("androidx.work:work-gcm:2.9.0-beta01")
     docs("androidx.work:work-multiprocess:2.9.0-beta01")
     docs("androidx.work:work-runtime:2.9.0-beta01")
diff --git a/docs-tip-of-tree/build.gradle b/docs-tip-of-tree/build.gradle
index 2af5022..e6838d3 100644
--- a/docs-tip-of-tree/build.gradle
+++ b/docs-tip-of-tree/build.gradle
@@ -294,6 +294,7 @@
     docs(project(":privacysandbox:ads:ads-adservices-java"))
     docs(project(":privacysandbox:sdkruntime:sdkruntime-client"))
     docs(project(":privacysandbox:sdkruntime:sdkruntime-core"))
+    docs(project(":privacysandbox:sdkruntime:sdkruntime-provider"))
     docs(project(":privacysandbox:tools:tools"))
     docs(project(":privacysandbox:ui:ui-client"))
     docs(project(":privacysandbox:ui:ui-core"))
diff --git a/fragment/fragment/api/restricted_current.txt b/fragment/fragment/api/restricted_current.txt
index d1e02606..74a19b6 100644
--- a/fragment/fragment/api/restricted_current.txt
+++ b/fragment/fragment/api/restricted_current.txt
@@ -452,7 +452,7 @@
     method public abstract void addTarget(Object, android.view.View);
     method public abstract void addTargets(Object, java.util.ArrayList<android.view.View!>);
     method public void animateToEnd(Object);
-    method public void animateToStart(Object);
+    method public Runnable! animateToStart(Object, android.view.ViewGroup, Runnable);
     method public abstract void beginDelayedTransition(android.view.ViewGroup, Object?);
     method protected static void bfsAddViewChildren(java.util.List<android.view.View!>!, android.view.View!);
     method public abstract boolean canHandle(Object);
diff --git a/fragment/fragment/src/main/java/androidx/fragment/app/DefaultSpecialEffectsController.kt b/fragment/fragment/src/main/java/androidx/fragment/app/DefaultSpecialEffectsController.kt
index a5f9e91..4d433aa 100644
--- a/fragment/fragment/src/main/java/androidx/fragment/app/DefaultSpecialEffectsController.kt
+++ b/fragment/fragment/src/main/java/androidx/fragment/app/DefaultSpecialEffectsController.kt
@@ -741,6 +741,7 @@
                 // Now set up our completion signal on the completely merged transition set
                 val (enteringViews, mergedTransition) =
                     createMergedTransition(container, lastIn, firstOut)
+                var animateToStartRunnable: Runnable? = null
                 transitionInfos.map { it.operation }.forEach { operation ->
                     val cancelRunnable = Runnable { seekCancelLambda?.invoke() }
                     transitionImpl.setListenerForTransitionEnd(
@@ -749,11 +750,24 @@
                         transitionSignal,
                         cancelRunnable,
                         Runnable {
-                            if (FragmentManager.isLoggingEnabled(Log.VERBOSE)) {
-                                Log.v(FragmentManager.TAG,
-                                    "Transition for operation $operation has completed")
+                            // If we are ended due to the transition being cancelled and calling
+                            // animateToStart, we need to cancel the transition to set transition
+                            // state back to the beginning before we complete the operation.
+                            if (animateToStartRunnable != null) {
+                                animateToStartRunnable?.run()
+                                transitionInfos.mapNotNull { it.operation.fragment.view }
+                                    .forEach { view ->
+                                        operation.finalState.applyState(view, container)
+                                    }
+                            } else {
+                                if (FragmentManager.isLoggingEnabled(Log.VERBOSE)) {
+                                    Log.v(
+                                        FragmentManager.TAG,
+                                        "Transition for operation $operation has completed"
+                                    )
+                                }
+                                operation.completeEffect(this)
                             }
-                            operation.completeEffect(this)
                         })
                 }
 
@@ -765,7 +779,25 @@
                     check(controller != null) {
                         "Unable to start transition $mergedTransition for container $container."
                     }
-                    seekCancelLambda = { transitionImpl.animateToStart(controller!!) }
+                    seekCancelLambda = {
+                        if (FragmentManager.isLoggingEnabled(Log.VERBOSE)) {
+                            Log.v(FragmentManager.TAG, "Animating to start")
+                        }
+                        animateToStartRunnable =
+                            transitionImpl.animateToStart(controller!!, container) {
+                                transitionInfos.map { it.operation }.forEach { operation ->
+                                    if (FragmentManager.isLoggingEnabled(Log.VERBOSE)) {
+                                        Log.v(
+                                            FragmentManager.TAG,
+                                            "Transition for operation $operation has " +
+                                                "completed as result of cancellation"
+                                        )
+                                    }
+                                    operation.completeEffect(this)
+                                    animateToStartRunnable = null
+                                }
+                            }
+                    }
                     if (FragmentManager.isLoggingEnabled(Log.VERBOSE)) {
                         Log.v(FragmentManager.TAG,
                             "Started executing operations from $firstOut to $lastIn")
diff --git a/fragment/fragment/src/main/java/androidx/fragment/app/FragmentTransitionImpl.java b/fragment/fragment/src/main/java/androidx/fragment/app/FragmentTransitionImpl.java
index 6a8d444..e035b0a 100644
--- a/fragment/fragment/src/main/java/androidx/fragment/app/FragmentTransitionImpl.java
+++ b/fragment/fragment/src/main/java/androidx/fragment/app/FragmentTransitionImpl.java
@@ -191,7 +191,10 @@
     /**
      * Animate the transition to start.
      */
-    public void animateToStart(@NonNull Object transitionController) { }
+    public Runnable animateToStart(@NonNull Object transitionController,
+            @NonNull ViewGroup sceneRoot, @NonNull Runnable completeRunnable) {
+        return () -> { };
+    }
 
     /**
      * Prepares for setting the shared element names by gathering the names of the incoming
diff --git a/fragment/fragment/src/main/java/androidx/fragment/app/SpecialEffectsController.kt b/fragment/fragment/src/main/java/androidx/fragment/app/SpecialEffectsController.kt
index 0e3ebf0..8a9a9f6 100644
--- a/fragment/fragment/src/main/java/androidx/fragment/app/SpecialEffectsController.kt
+++ b/fragment/fragment/src/main/java/androidx/fragment/app/SpecialEffectsController.kt
@@ -526,6 +526,20 @@
                             )
                         }
                         val parent = view.parent as? ViewGroup
+                        // For transitions it is possible that we complete the operation while
+                        // the view is still parented by the ViewOverlay so we need to make sure
+                        // the container is the proper view.
+                        if (parent != null && parent != container) {
+                            if (FragmentManager.isLoggingEnabled(Log.VERBOSE)) {
+                                Log.v(
+                                    FragmentManager.TAG, "SpecialEffectsController: " +
+                                        "Swapping view $view from parent $parent to Container " +
+                                        "$container"
+                                )
+                            }
+                            parent.removeView(view)
+                            container.addView(view)
+                        }
                         if (parent == null) {
                             if (FragmentManager.isLoggingEnabled(Log.VERBOSE)) {
                                 Log.v(
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/glance/glance/src/main/java/androidx/glance/session/SessionWorker.kt b/glance/glance/src/main/java/androidx/glance/session/SessionWorker.kt
index 72fd733..2f01317 100644
--- a/glance/glance/src/main/java/androidx/glance/session/SessionWorker.kt
+++ b/glance/glance/src/main/java/androidx/glance/session/SessionWorker.kt
@@ -18,6 +18,7 @@
 
 import android.content.Context
 import android.util.Log
+import androidx.annotation.VisibleForTesting
 import androidx.compose.runtime.Composition
 import androidx.compose.runtime.Recomposer
 import androidx.glance.Applier
@@ -87,6 +88,9 @@
     private val key = inputData.getString(sessionManager.keyParam)
         ?: error("SessionWorker must be started with a key")
 
+    @VisibleForTesting
+    internal var effectJob: Job? = null
+
     override suspend fun doWork() =
         withTimerOrNull(timeouts.timeSource) {
             observeIdleEvents(
@@ -117,8 +121,12 @@
         val snapshotMonitor = launch { globalSnapshotMonitor() }
         val root = session.createRootEmittable()
         val uiReady = MutableStateFlow(false)
-        // Use an independent Job with a CoroutineExceptionHandler so that we can catch errors from
-        // LaunchedEffects in the composition and they won't propagate up to the Worker context.
+        // For effects, use an independent Job with a CoroutineExceptionHandler so that we can catch
+        // errors from LaunchedEffects in the composition and they won't propagate up to TimerScope.
+        // If we set Job.parent, then we cannot use our own CoroutineExceptionHandler. However, this
+        // also means that cancellation of TimerScope does not propagate automatically to this Job,
+        // so we must set that up manually here to avoid leaking the effect Job after this scope
+        // ends.
         val effectExceptionHandler = CoroutineExceptionHandler { _, throwable ->
             launch {
                 session.onCompositionError(applicationContext, throwable)
@@ -126,7 +134,11 @@
                 uiReady.emit(true)
             }
         }
-        val effectCoroutineContext = coroutineContext + Job() + effectExceptionHandler
+        val effectCoroutineContext = Job().let { job ->
+            effectJob = job
+            coroutineContext[Job]?.invokeOnCompletion { job.cancel() }
+            coroutineContext + job + effectExceptionHandler
+        }
         val recomposer = Recomposer(effectCoroutineContext)
         val composition = Composition(Applier(root), recomposer)
 
diff --git a/glance/glance/src/test/kotlin/androidx/glance/session/SessionWorkerTest.kt b/glance/glance/src/test/kotlin/androidx/glance/session/SessionWorkerTest.kt
index c62f9c0..d5dfc4a 100644
--- a/glance/glance/src/test/kotlin/androidx/glance/session/SessionWorkerTest.kt
+++ b/glance/glance/src/test/kotlin/androidx/glance/session/SessionWorkerTest.kt
@@ -267,6 +267,36 @@
         assertThat(result).hasCauseThat().isEqualTo(cause)
         assertThat(result).hasMessageThat().isEqualTo("message")
     }
+
+    @Test
+    fun sessionWorkerDoesNotLeakEffectJobOnCancellation() = runTest {
+        val workerJob = launch {
+            var wasCancelled = false
+            try {
+                worker.doWork()
+            } catch (e: CancellationException) {
+                wasCancelled = true
+                assertThat(worker.effectJob?.isCancelled).isTrue()
+            } finally {
+                assertThat(wasCancelled).isTrue()
+            }
+        }
+
+        sessionManager.startSession(context).first()
+        workerJob.cancel()
+    }
+
+    @Test
+    fun sessionWorkerDoesNotLeakEffectJobOnClose() = runTest {
+        launch {
+            val result = worker.doWork()
+            assertThat(result).isEqualTo(Result.success())
+            assertThat(worker.effectJob?.isCancelled).isTrue()
+        }
+
+        sessionManager.startSession(context).first()
+        sessionManager.closeSession()
+    }
 }
 
 private const val SESSION_KEY = "123"
diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml
index b756b0c..c0b0c77 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"
@@ -105,7 +105,7 @@
 checkerframework = { module = "org.checkerframework:checker-qual", version = "2.5.3" }
 checkmark = { module = "net.saff.checkmark:checkmark", version = "0.1.6" }
 constraintLayout = { module = "androidx.constraintlayout:constraintlayout", version = "2.0.1"}
-dackka = { module = "com.google.devsite:dackka", version = "1.3.7" }
+dackka = { module = "com.google.devsite:dackka", version = "1.4.0" }
 dagger = { module = "com.google.dagger:dagger", version.ref = "dagger" }
 daggerCompiler = { module = "com.google.dagger:dagger-compiler", version.ref = "dagger" }
 dexmakerMockito = { module = "com.linkedin.dexmaker:dexmaker-mockito", version.ref = "dexmaker" }
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..55a065a 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"/>
@@ -537,6 +538,14 @@
             <sha256 value="19f7d921a20d3be022620dd78bd708b2c16362cece59781c94b74a51f078243c" origin="Generated by Gradle" reason="Artifact is not signed"/>
          </artifact>
       </component>
+      <component group="com.google.ads.interactivemedia.v3" name="interactivemedia" version="3.30.3">
+         <artifact name="interactivemedia-3.30.3.aar">
+            <sha256 value="b864d3e53a54935c3a159d6d0c73860a9d728b324d620bf1e5b82e97aca65c21" origin="Generated by Gradle" reason="Artifact is not signed"/>
+         </artifact>
+         <artifact name="interactivemedia-3.30.3.pom">
+            <sha256 value="2d12e7a750d530785b1c2843dda3e0b4c3362120ebdcc519ab4ca4453a6e9340" origin="Generated by Gradle" reason="Artifact is not signed"/>
+         </artifact>
+      </component>
       <component group="com.google.android.apps.common.testing.accessibility.framework" name="accessibility-test-framework" version="2.1">
          <artifact name="accessibility-test-framework-2.1.jar">
             <sha256 value="7b0aa6ed7553597ce0610684a9f7eca8021eee218f2e2f427c04a7fbf5f920bd" origin="Generated by Gradle" reason="Artifact is not signed"/>
diff --git a/health/connect/connect-client/api/current.txt b/health/connect/connect-client/api/current.txt
index 7b0863a..3d5bf74 100644
--- a/health/connect/connect-client/api/current.txt
+++ b/health/connect/connect-client/api/current.txt
@@ -9,7 +9,8 @@
     method public suspend Object? deleteRecords(kotlin.reflect.KClass<? extends androidx.health.connect.client.records.Record> recordType, java.util.List<java.lang.String> recordIdsList, java.util.List<java.lang.String> clientRecordIdsList, kotlin.coroutines.Continuation<? super kotlin.Unit>);
     method public suspend Object? getChanges(String changesToken, kotlin.coroutines.Continuation<? super androidx.health.connect.client.response.ChangesResponse>);
     method public suspend Object? getChangesToken(androidx.health.connect.client.request.ChangesTokenRequest request, kotlin.coroutines.Continuation<? super java.lang.String>);
-    method public static String getHealthConnectManageDataAction(android.content.Context context);
+    method public static android.content.Intent getHealthConnectManageDataIntent(android.content.Context context);
+    method public static android.content.Intent getHealthConnectManageDataIntent(android.content.Context context, optional String providerPackageName);
     method public static String getHealthConnectSettingsAction();
     method public static androidx.health.connect.client.HealthConnectClient getOrCreate(android.content.Context context);
     method public static androidx.health.connect.client.HealthConnectClient getOrCreate(android.content.Context context, optional String providerPackageName);
@@ -29,7 +30,8 @@
   }
 
   public static final class HealthConnectClient.Companion {
-    method public String getHealthConnectManageDataAction(android.content.Context context);
+    method public android.content.Intent getHealthConnectManageDataIntent(android.content.Context context);
+    method public android.content.Intent getHealthConnectManageDataIntent(android.content.Context context, optional String providerPackageName);
     method public String getHealthConnectSettingsAction();
     method public androidx.health.connect.client.HealthConnectClient getOrCreate(android.content.Context context);
     method public androidx.health.connect.client.HealthConnectClient getOrCreate(android.content.Context context, optional String providerPackageName);
@@ -41,6 +43,12 @@
     field public static final int SDK_UNAVAILABLE_PROVIDER_UPDATE_REQUIRED = 2; // 0x2
   }
 
+  public final class HealthConnectClientExt {
+    method public static suspend inline <reified T extends androidx.health.connect.client.records.Record> void deleteRecords(androidx.health.connect.client.HealthConnectClient, androidx.health.connect.client.time.TimeRangeFilter timeRangeFilter);
+    method public static suspend inline <reified T extends androidx.health.connect.client.records.Record> void deleteRecords(androidx.health.connect.client.HealthConnectClient, java.util.List<java.lang.String> recordIdsList, java.util.List<java.lang.String> clientRecordIdsList);
+    method public static suspend inline <reified T extends androidx.health.connect.client.records.Record> androidx.health.connect.client.response.ReadRecordResponse<T> readRecord(androidx.health.connect.client.HealthConnectClient, String recordId);
+  }
+
   @kotlin.jvm.JvmDefaultWithCompatibility public interface PermissionController {
     method public static androidx.activity.result.contract.ActivityResultContract<java.util.Set<java.lang.String>,java.util.Set<java.lang.String>> createRequestPermissionResultContract();
     method public static androidx.activity.result.contract.ActivityResultContract<java.util.Set<java.lang.String>,java.util.Set<java.lang.String>> createRequestPermissionResultContract(optional String providerPackageName);
@@ -65,8 +73,6 @@
     method public operator boolean contains(androidx.health.connect.client.aggregate.AggregateMetric<?> metric);
     method public operator <T> T? get(androidx.health.connect.client.aggregate.AggregateMetric<? extends T> metric);
     method public java.util.Set<androidx.health.connect.client.records.metadata.DataOrigin> getDataOrigins();
-    method @Deprecated public <T> T? getMetric(androidx.health.connect.client.aggregate.AggregateMetric<? extends T> metric);
-    method @Deprecated public boolean hasMetric(androidx.health.connect.client.aggregate.AggregateMetric<?> metric);
     property public final java.util.Set<androidx.health.connect.client.records.metadata.DataOrigin> dataOrigins;
   }
 
@@ -1395,6 +1401,10 @@
     ctor public ReadRecordsRequest(kotlin.reflect.KClass<T> recordType, androidx.health.connect.client.time.TimeRangeFilter timeRangeFilter, optional java.util.Set<androidx.health.connect.client.records.metadata.DataOrigin> dataOriginFilter, optional boolean ascendingOrder, optional int pageSize, optional String? pageToken);
   }
 
+  public final class ReadRecordsRequestKt {
+    method public static inline <reified T extends androidx.health.connect.client.records.Record> androidx.health.connect.client.request.ReadRecordsRequest<T> ReadRecordsRequest(androidx.health.connect.client.time.TimeRangeFilter timeRangeFilter, optional java.util.Set<androidx.health.connect.client.records.metadata.DataOrigin> dataOriginFilter, optional boolean ascendingOrder, optional int pageSize, optional String? pageToken);
+  }
+
 }
 
 package androidx.health.connect.client.response {
diff --git a/health/connect/connect-client/api/restricted_current.txt b/health/connect/connect-client/api/restricted_current.txt
index beb3500f..eecd117 100644
--- a/health/connect/connect-client/api/restricted_current.txt
+++ b/health/connect/connect-client/api/restricted_current.txt
@@ -9,7 +9,8 @@
     method public suspend Object? deleteRecords(kotlin.reflect.KClass<? extends androidx.health.connect.client.records.Record> recordType, java.util.List<java.lang.String> recordIdsList, java.util.List<java.lang.String> clientRecordIdsList, kotlin.coroutines.Continuation<? super kotlin.Unit>);
     method public suspend Object? getChanges(String changesToken, kotlin.coroutines.Continuation<? super androidx.health.connect.client.response.ChangesResponse>);
     method public suspend Object? getChangesToken(androidx.health.connect.client.request.ChangesTokenRequest request, kotlin.coroutines.Continuation<? super java.lang.String>);
-    method public static String getHealthConnectManageDataAction(android.content.Context context);
+    method public static android.content.Intent getHealthConnectManageDataIntent(android.content.Context context);
+    method public static android.content.Intent getHealthConnectManageDataIntent(android.content.Context context, optional String providerPackageName);
     method public static String getHealthConnectSettingsAction();
     method public static androidx.health.connect.client.HealthConnectClient getOrCreate(android.content.Context context);
     method public static androidx.health.connect.client.HealthConnectClient getOrCreate(android.content.Context context, optional String providerPackageName);
@@ -29,7 +30,8 @@
   }
 
   public static final class HealthConnectClient.Companion {
-    method public String getHealthConnectManageDataAction(android.content.Context context);
+    method public android.content.Intent getHealthConnectManageDataIntent(android.content.Context context);
+    method public android.content.Intent getHealthConnectManageDataIntent(android.content.Context context, optional String providerPackageName);
     method public String getHealthConnectSettingsAction();
     method public androidx.health.connect.client.HealthConnectClient getOrCreate(android.content.Context context);
     method public androidx.health.connect.client.HealthConnectClient getOrCreate(android.content.Context context, optional String providerPackageName);
@@ -41,6 +43,12 @@
     field public static final int SDK_UNAVAILABLE_PROVIDER_UPDATE_REQUIRED = 2; // 0x2
   }
 
+  public final class HealthConnectClientExt {
+    method public static suspend inline <reified T extends androidx.health.connect.client.records.Record> void deleteRecords(androidx.health.connect.client.HealthConnectClient, androidx.health.connect.client.time.TimeRangeFilter timeRangeFilter);
+    method public static suspend inline <reified T extends androidx.health.connect.client.records.Record> void deleteRecords(androidx.health.connect.client.HealthConnectClient, java.util.List<java.lang.String> recordIdsList, java.util.List<java.lang.String> clientRecordIdsList);
+    method public static suspend inline <reified T extends androidx.health.connect.client.records.Record> androidx.health.connect.client.response.ReadRecordResponse<T> readRecord(androidx.health.connect.client.HealthConnectClient, String recordId);
+  }
+
   @kotlin.jvm.JvmDefaultWithCompatibility public interface PermissionController {
     method public static androidx.activity.result.contract.ActivityResultContract<java.util.Set<java.lang.String>,java.util.Set<java.lang.String>> createRequestPermissionResultContract();
     method public static androidx.activity.result.contract.ActivityResultContract<java.util.Set<java.lang.String>,java.util.Set<java.lang.String>> createRequestPermissionResultContract(optional String providerPackageName);
@@ -65,8 +73,6 @@
     method public operator boolean contains(androidx.health.connect.client.aggregate.AggregateMetric<?> metric);
     method public operator <T> T? get(androidx.health.connect.client.aggregate.AggregateMetric<? extends T> metric);
     method public java.util.Set<androidx.health.connect.client.records.metadata.DataOrigin> getDataOrigins();
-    method @Deprecated public <T> T? getMetric(androidx.health.connect.client.aggregate.AggregateMetric<? extends T> metric);
-    method @Deprecated public boolean hasMetric(androidx.health.connect.client.aggregate.AggregateMetric<?> metric);
     property public final java.util.Set<androidx.health.connect.client.records.metadata.DataOrigin> dataOrigins;
   }
 
@@ -1418,6 +1424,10 @@
     ctor public ReadRecordsRequest(kotlin.reflect.KClass<T> recordType, androidx.health.connect.client.time.TimeRangeFilter timeRangeFilter, optional java.util.Set<androidx.health.connect.client.records.metadata.DataOrigin> dataOriginFilter, optional boolean ascendingOrder, optional int pageSize, optional String? pageToken);
   }
 
+  public final class ReadRecordsRequestKt {
+    method public static inline <reified T extends androidx.health.connect.client.records.Record> androidx.health.connect.client.request.ReadRecordsRequest<T> ReadRecordsRequest(androidx.health.connect.client.time.TimeRangeFilter timeRangeFilter, optional java.util.Set<androidx.health.connect.client.records.metadata.DataOrigin> dataOriginFilter, optional boolean ascendingOrder, optional int pageSize, optional String? pageToken);
+  }
+
 }
 
 package androidx.health.connect.client.response {
diff --git a/health/connect/connect-client/samples/src/main/java/androidx/health/connect/client/samples/DeleteRecordsSamples.kt b/health/connect/connect-client/samples/src/main/java/androidx/health/connect/client/samples/DeleteRecordsSamples.kt
index b36a5fc..366dcc12 100644
--- a/health/connect/connect-client/samples/src/main/java/androidx/health/connect/client/samples/DeleteRecordsSamples.kt
+++ b/health/connect/connect-client/samples/src/main/java/androidx/health/connect/client/samples/DeleteRecordsSamples.kt
@@ -20,6 +20,7 @@
 
 import androidx.annotation.Sampled
 import androidx.health.connect.client.HealthConnectClient
+import androidx.health.connect.client.deleteRecords
 import androidx.health.connect.client.records.StepsRecord
 import androidx.health.connect.client.time.TimeRangeFilter
 import java.time.Instant
@@ -30,8 +31,7 @@
     uid1: String,
     uid2: String
 ) {
-    healthConnectClient.deleteRecords(
-        StepsRecord::class,
+    healthConnectClient.deleteRecords<StepsRecord>(
         recordIdsList = listOf(uid1, uid2),
         clientRecordIdsList = emptyList()
     )
@@ -43,8 +43,7 @@
     startTime: Instant,
     endTime: Instant
 ) {
-    healthConnectClient.deleteRecords(
-        StepsRecord::class,
+    healthConnectClient.deleteRecords<StepsRecord>(
         timeRangeFilter = TimeRangeFilter.between(startTime, endTime)
     )
 }
diff --git a/health/connect/connect-client/samples/src/main/java/androidx/health/connect/client/samples/PermissionSamples.kt b/health/connect/connect-client/samples/src/main/java/androidx/health/connect/client/samples/PermissionSamples.kt
index b18cba92..33be6e1 100644
--- a/health/connect/connect-client/samples/src/main/java/androidx/health/connect/client/samples/PermissionSamples.kt
+++ b/health/connect/connect-client/samples/src/main/java/androidx/health/connect/client/samples/PermissionSamples.kt
@@ -22,6 +22,7 @@
 import androidx.annotation.Sampled
 import androidx.health.connect.client.PermissionController
 import androidx.health.connect.client.permission.HealthPermission
+import androidx.health.connect.client.permission.HealthPermission.Companion.PERMISSION_READ_HEALTH_DATA_IN_BACKGROUND
 import androidx.health.connect.client.records.StepsRecord
 
 @Sampled
@@ -42,6 +43,22 @@
 }
 
 @Sampled
+fun RequestBackgroundReadPermission(activity: ActivityResultCaller) {
+    val requestPermission =
+        activity.registerForActivityResult(
+            PermissionController.createRequestPermissionResultContract()
+        ) { grantedPermissions: Set<String> ->
+            if (PERMISSION_READ_HEALTH_DATA_IN_BACKGROUND in grantedPermissions) {
+                // It will be possible to read data in background from now on
+            } else {
+                // Permission denied, it won't be possible to read data in background
+            }
+        }
+
+    requestPermission.launch(setOf(PERMISSION_READ_HEALTH_DATA_IN_BACKGROUND))
+}
+
+@Sampled
 suspend fun GetPermissions(permissionController: PermissionController) {
     val grantedPermissions = permissionController.getGrantedPermissions()
 
diff --git a/health/connect/connect-client/samples/src/main/java/androidx/health/connect/client/samples/ReadRecordsSamples.kt b/health/connect/connect-client/samples/src/main/java/androidx/health/connect/client/samples/ReadRecordsSamples.kt
index e64ecd0..7181326 100644
--- a/health/connect/connect-client/samples/src/main/java/androidx/health/connect/client/samples/ReadRecordsSamples.kt
+++ b/health/connect/connect-client/samples/src/main/java/androidx/health/connect/client/samples/ReadRecordsSamples.kt
@@ -22,6 +22,8 @@
 import androidx.annotation.Sampled
 import androidx.health.connect.client.HealthConnectClient
 import androidx.health.connect.client.contracts.ExerciseRouteRequestContract
+import androidx.health.connect.client.permission.HealthPermission.Companion.PERMISSION_READ_HEALTH_DATA_IN_BACKGROUND
+import androidx.health.connect.client.readRecord
 import androidx.health.connect.client.records.ExerciseRoute
 import androidx.health.connect.client.records.ExerciseRouteResult
 import androidx.health.connect.client.records.ExerciseSessionRecord
@@ -40,8 +42,7 @@
 ) {
     val response =
         healthConnectClient.readRecords(
-            ReadRecordsRequest(
-                StepsRecord::class,
+            ReadRecordsRequest<StepsRecord>(
                 timeRangeFilter = TimeRangeFilter.between(startTime, endTime)
             )
         )
@@ -58,8 +59,7 @@
 ) {
     val response =
         healthConnectClient.readRecords(
-            ReadRecordsRequest(
-                ExerciseSessionRecord::class,
+            ReadRecordsRequest<ExerciseSessionRecord>(
                 timeRangeFilter = TimeRangeFilter.between(startTime, endTime)
             )
         )
@@ -69,8 +69,7 @@
         val heartRateRecords =
             healthConnectClient
                 .readRecords(
-                    ReadRecordsRequest(
-                        HeartRateRecord::class,
+                    ReadRecordsRequest<HeartRateRecord>(
                         timeRangeFilter =
                             TimeRangeFilter.between(
                                 exerciseRecord.startTime,
@@ -103,7 +102,7 @@
 
     // Show exercise route, based on user action
     val exerciseSessionRecord =
-        healthConnectClient.readRecord(ExerciseSessionRecord::class, recordId).record
+        healthConnectClient.readRecord<ExerciseSessionRecord>(recordId).record
 
     when (val exerciseRouteResult = exerciseSessionRecord.exerciseRouteResult) {
         is ExerciseRouteResult.Data -> displayExerciseRoute(exerciseRouteResult.exerciseRoute)
@@ -121,8 +120,7 @@
 ) {
     val response =
         healthConnectClient.readRecords(
-            ReadRecordsRequest(
-                SleepSessionRecord::class,
+            ReadRecordsRequest<SleepSessionRecord>(
                 timeRangeFilter = TimeRangeFilter.between(startTime, endTime)
             )
         )
@@ -130,3 +128,28 @@
         // Process each sleep record
     }
 }
+
+@Sampled
+suspend fun ReadRecordsInBackground(
+    healthConnectClient: HealthConnectClient,
+    startTime: Instant,
+    endTime: Instant,
+) {
+    val grantedPermissions = healthConnectClient.permissionController.getGrantedPermissions()
+
+    // The permission should be requested and granted beforehand when the app is in foreground
+    if (PERMISSION_READ_HEALTH_DATA_IN_BACKGROUND !in grantedPermissions) {
+        return
+    }
+
+    val response =
+        healthConnectClient.readRecords(
+            ReadRecordsRequest<StepsRecord>(
+                timeRangeFilter = TimeRangeFilter.between(startTime, endTime),
+            )
+        )
+
+    for (stepsRecord in response.records) {
+        // Process each record
+    }
+}
diff --git a/health/connect/connect-client/src/androidTest/java/androidx/health/connect/client/impl/HealthConnectClientUpsideDownImplTest.kt b/health/connect/connect-client/src/androidTest/java/androidx/health/connect/client/impl/HealthConnectClientUpsideDownImplTest.kt
index 00f6c95..1ded78e 100644
--- a/health/connect/connect-client/src/androidTest/java/androidx/health/connect/client/impl/HealthConnectClientUpsideDownImplTest.kt
+++ b/health/connect/connect-client/src/androidTest/java/androidx/health/connect/client/impl/HealthConnectClientUpsideDownImplTest.kt
@@ -24,6 +24,7 @@
 import androidx.health.connect.client.changes.DeletionChange
 import androidx.health.connect.client.changes.UpsertionChange
 import androidx.health.connect.client.permission.HealthPermission.Companion.PERMISSION_PREFIX
+import androidx.health.connect.client.readRecord
 import androidx.health.connect.client.records.HeartRateRecord
 import androidx.health.connect.client.records.NutritionRecord
 import androidx.health.connect.client.records.StepsRecord
@@ -485,6 +486,92 @@
     }
 
     @Test
+    fun aggregateRecordsGroupByPeriod_monthly() = runTest {
+        healthConnectClient.insertRecords(
+            listOf(
+                StepsRecord(
+                    count = 100,
+                    startTime = START_TIME - 40.days,
+                    startZoneOffset = ZONE_OFFSET,
+                    endTime = START_TIME - 40.days + 5.minutes,
+                    endZoneOffset = ZONE_OFFSET
+                ),
+                StepsRecord(
+                    count = 200,
+                    startTime = START_TIME - 40.days + 10.minutes,
+                    startZoneOffset = ZONE_OFFSET,
+                    endTime = START_TIME - 40.days + 30.minutes,
+                    endZoneOffset = ZONE_OFFSET
+                ),
+                StepsRecord(
+                    count = 50,
+                    startTime = START_TIME,
+                    startZoneOffset = ZONE_OFFSET,
+                    endTime = START_TIME + 10.minutes,
+                    endZoneOffset = ZONE_OFFSET
+                )
+            )
+        )
+
+        val queryStartTime = LocalDateTime.ofInstant(START_TIME - 40.days, ZONE_ID)
+        val queryEndTime = LocalDateTime.ofInstant(START_TIME + 2.days, ZONE_ID)
+
+        val aggregateResponse =
+            healthConnectClient.aggregateGroupByPeriod(
+                AggregateGroupByPeriodRequest(
+                    setOf(StepsRecord.COUNT_TOTAL),
+                    TimeRangeFilter.between(
+                        queryStartTime,
+                        queryEndTime,
+                    ),
+                    timeRangeSlicer = Period.ofMonths(1)
+                )
+            )
+
+        with(aggregateResponse) {
+            assertThat(this).hasSize(2)
+
+            assertThat(this[0].startTime).isEqualTo(queryStartTime)
+            assertThat(this[0].endTime).isEqualTo(queryStartTime.plus(Period.ofMonths(1)))
+            assertThat(this[0].result[StepsRecord.COUNT_TOTAL]).isEqualTo(300)
+
+            assertThat(this[1].startTime).isEqualTo(queryStartTime.plus(Period.ofMonths(1)))
+            assertThat(this[1].endTime).isEqualTo(queryEndTime)
+            assertThat(this[1].result[StepsRecord.COUNT_TOTAL]).isEqualTo(50)
+        }
+    }
+
+    @Test
+    fun aggregateRecordsGroupByPeriod_monthly_noData() = runTest {
+        val queryStartTime = LocalDateTime.ofInstant(START_TIME - 40.days, ZONE_ID)
+        val queryEndTime = LocalDateTime.ofInstant(START_TIME + 2.days, ZONE_ID)
+
+        val aggregateResponse =
+            healthConnectClient.aggregateGroupByPeriod(
+                AggregateGroupByPeriodRequest(
+                    setOf(StepsRecord.COUNT_TOTAL),
+                    TimeRangeFilter.between(
+                        queryStartTime,
+                        queryEndTime,
+                    ),
+                    timeRangeSlicer = Period.ofMonths(1)
+                )
+            )
+
+        with(aggregateResponse) {
+            assertThat(this).hasSize(2)
+
+            assertThat(this[0].startTime).isEqualTo(queryStartTime)
+            assertThat(this[0].endTime).isEqualTo(queryStartTime.plus(Period.ofMonths(1)))
+            assertThat(this[0].result[StepsRecord.COUNT_TOTAL]).isNull()
+
+            assertThat(this[1].startTime).isEqualTo(queryStartTime.plus(Period.ofMonths(1)))
+            assertThat(this[1].endTime).isEqualTo(queryEndTime)
+            assertThat(this[1].result[StepsRecord.COUNT_TOTAL]).isNull()
+        }
+    }
+
+    @Test
     fun getChangesToken() = runTest {
         val token =
             healthConnectClient.getChangesToken(
@@ -532,6 +619,87 @@
     }
 
     @Test
+    fun nutritionRecord_roundTrip_valuesEqual() = runTest {
+        val recordId =
+            healthConnectClient
+                .insertRecords(
+                    listOf(
+                        NutritionRecord(
+                            startTime = START_TIME,
+                            startZoneOffset = ZONE_OFFSET,
+                            endTime = START_TIME + 10.minutes,
+                            endZoneOffset = ZONE_OFFSET,
+                            calcium = Mass.grams(15.0),
+                            monounsaturatedFat = Mass.grams(50.0),
+                            energy = Energy.calories(300.0)
+                        )
+                    )
+                )
+                .recordIdsList[0]
+
+        val nutritionRecord = healthConnectClient.readRecord<NutritionRecord>(recordId).record
+
+        with(nutritionRecord) {
+            assertThat(calcium).isEqualTo(Mass.grams(15.0))
+            assertThat(monounsaturatedFat).isEqualTo(Mass.grams(50.0))
+            assertThat(energy).isEqualTo(Energy.calories(300.0))
+        }
+    }
+
+    @Test
+    fun nutritionRecord_roundTrip_zeroValues() = runTest {
+        val recordId =
+            healthConnectClient
+                .insertRecords(
+                    listOf(
+                        NutritionRecord(
+                            startTime = START_TIME,
+                            startZoneOffset = ZONE_OFFSET,
+                            endTime = START_TIME + 10.minutes,
+                            endZoneOffset = ZONE_OFFSET,
+                            calcium = Mass.grams(0.0),
+                            monounsaturatedFat = Mass.grams(0.0),
+                            energy = Energy.calories(0.0)
+                        )
+                    )
+                )
+                .recordIdsList[0]
+
+        val nutritionRecord = healthConnectClient.readRecord<NutritionRecord>(recordId).record
+
+        with(nutritionRecord) {
+            assertThat(calcium).isEqualTo(Mass.grams(0.0))
+            assertThat(monounsaturatedFat).isEqualTo(Mass.grams(0.0))
+            assertThat(energy).isEqualTo(Energy.calories(0.0))
+        }
+    }
+
+    @Test
+    fun nutritionRecord_roundTrip_nullValues() = runTest {
+        val recordId =
+            healthConnectClient
+                .insertRecords(
+                    listOf(
+                        NutritionRecord(
+                            startTime = START_TIME,
+                            startZoneOffset = ZONE_OFFSET,
+                            endTime = START_TIME + 10.minutes,
+                            endZoneOffset = ZONE_OFFSET,
+                        )
+                    )
+                )
+                .recordIdsList[0]
+
+        val nutritionRecord = healthConnectClient.readRecord<NutritionRecord>(recordId).record
+
+        with(nutritionRecord) {
+            assertThat(calcium).isNull()
+            assertThat(monounsaturatedFat).isNull()
+            assertThat(energy).isNull()
+        }
+    }
+
+    @Test
     fun getGrantedPermissions() = runTest {
         assertThat(healthConnectClient.permissionController.getGrantedPermissions())
             .containsExactlyElementsIn(allHealthPermissions)
diff --git a/health/connect/connect-client/src/androidTest/java/androidx/health/connect/client/impl/platform/records/RequestConvertersTest.kt b/health/connect/connect-client/src/androidTest/java/androidx/health/connect/client/impl/platform/records/RequestConvertersTest.kt
index 4dcd780..d2edf4b 100644
--- a/health/connect/connect-client/src/androidTest/java/androidx/health/connect/client/impl/platform/records/RequestConvertersTest.kt
+++ b/health/connect/connect-client/src/androidTest/java/androidx/health/connect/client/impl/platform/records/RequestConvertersTest.kt
@@ -45,6 +45,7 @@
 import java.time.LocalDateTime
 import java.time.Month
 import java.time.Period
+import java.time.ZoneOffset
 import org.junit.Test
 import org.junit.runner.RunWith
 
@@ -202,15 +203,81 @@
         val sdkRequest =
             AggregateGroupByPeriodRequest(
                 setOf(HeartRateRecord.BPM_MAX, HeartRateRecord.BPM_MIN, HeartRateRecord.BPM_AVG),
-                TimeRangeFilter.between(Instant.ofEpochMilli(123L), Instant.ofEpochMilli(456L)),
+                TimeRangeFilter.between(
+                    LocalDateTime.parse("2023-09-19T08:30"),
+                    LocalDateTime.parse("2023-09-19T10:30")
+                ),
                 Period.ofDays(1),
                 setOf(DataOrigin("package1"), DataOrigin("package2"), DataOrigin("package3"))
             )
 
         with(sdkRequest.toPlatformRequest()) {
-            with(timeRangeFilter as TimeInstantRangeFilter) {
-                assertThat(startTime).isEqualTo(Instant.ofEpochMilli(123L))
-                assertThat(endTime).isEqualTo(Instant.ofEpochMilli(456L))
+            with(timeRangeFilter as LocalTimeRangeFilter) {
+                assertThat(startTime).isEqualTo(LocalDateTime.parse("2023-09-19T08:30"))
+                assertThat(endTime).isEqualTo(LocalDateTime.parse("2023-09-19T10:30"))
+            }
+            assertThat(aggregationTypes)
+                .containsExactly(
+                    PlatformHeartRateRecord.BPM_MAX,
+                    PlatformHeartRateRecord.BPM_MIN,
+                    PlatformHeartRateRecord.BPM_AVG
+                )
+            assertThat(dataOriginsFilters)
+                .containsExactly(
+                    PlatformDataOrigin.Builder().setPackageName("package1").build(),
+                    PlatformDataOrigin.Builder().setPackageName("package2").build(),
+                    PlatformDataOrigin.Builder().setPackageName("package3").build()
+                )
+        }
+    }
+
+    @Test
+    fun aggregateGroupByPeriodRequest_fromSdkToPlatform_instantTime() {
+        val sdkRequest =
+            AggregateGroupByPeriodRequest(
+                setOf(HeartRateRecord.BPM_MAX, HeartRateRecord.BPM_MIN, HeartRateRecord.BPM_AVG),
+                TimeRangeFilter.between(
+                    LocalDateTime.parse("2023-09-19T08:30").toInstant(ZoneOffset.UTC),
+                    LocalDateTime.parse("2023-09-19T10:30").toInstant(ZoneOffset.UTC)
+                ),
+                Period.ofDays(1),
+                setOf(DataOrigin("package1"), DataOrigin("package2"), DataOrigin("package3"))
+            )
+
+        with(sdkRequest.toPlatformRequest()) {
+            with(timeRangeFilter as LocalTimeRangeFilter) {
+                assertThat(startTime).isEqualTo(LocalDateTime.parse("2023-09-19T08:30"))
+                assertThat(endTime).isEqualTo(LocalDateTime.parse("2023-09-19T10:30"))
+            }
+            assertThat(aggregationTypes)
+                .containsExactly(
+                    PlatformHeartRateRecord.BPM_MAX,
+                    PlatformHeartRateRecord.BPM_MIN,
+                    PlatformHeartRateRecord.BPM_AVG
+                )
+            assertThat(dataOriginsFilters)
+                .containsExactly(
+                    PlatformDataOrigin.Builder().setPackageName("package1").build(),
+                    PlatformDataOrigin.Builder().setPackageName("package2").build(),
+                    PlatformDataOrigin.Builder().setPackageName("package3").build()
+                )
+        }
+    }
+
+    @Test
+    fun aggregateGroupByPeriodRequest_fromSdkToPlatform_noTimeSet() {
+        val sdkRequest =
+            AggregateGroupByPeriodRequest(
+                setOf(HeartRateRecord.BPM_MAX, HeartRateRecord.BPM_MIN, HeartRateRecord.BPM_AVG),
+                TimeRangeFilter.none(),
+                Period.ofDays(1),
+                setOf(DataOrigin("package1"), DataOrigin("package2"), DataOrigin("package3"))
+            )
+
+        with(sdkRequest.toPlatformRequest()) {
+            with(timeRangeFilter as LocalTimeRangeFilter) {
+                assertThat(startTime)
+                    .isEqualTo(LocalDateTime.ofInstant(Instant.EPOCH, ZoneOffset.UTC))
             }
             assertThat(aggregationTypes)
                 .containsExactly(
diff --git a/health/connect/connect-client/src/main/java/androidx/health/connect/client/HealthConnectClient.kt b/health/connect/connect-client/src/main/java/androidx/health/connect/client/HealthConnectClient.kt
index 4f74132..9bc35b3 100644
--- a/health/connect/connect-client/src/main/java/androidx/health/connect/client/HealthConnectClient.kt
+++ b/health/connect/connect-client/src/main/java/androidx/health/connect/client/HealthConnectClient.kt
@@ -20,7 +20,6 @@
 import android.content.pm.PackageInfo
 import android.content.pm.PackageManager
 import android.os.Build
-import android.os.RemoteException
 import androidx.annotation.ChecksSdkIntAtLeast
 import androidx.annotation.IntDef
 import androidx.annotation.RestrictTo
@@ -44,7 +43,6 @@
 import androidx.health.connect.client.response.ReadRecordsResponse
 import androidx.health.connect.client.time.TimeRangeFilter
 import androidx.health.platform.client.HealthDataService
-import java.io.IOException
 import kotlin.reflect.KClass
 
 @JvmDefaultWithCompatibility
@@ -61,9 +59,9 @@
      *
      * @param records List of records to insert
      * @return List of unique identifiers in the order of inserted records.
-     * @throws RemoteException For any IPC transportation failures.
+     * @throws android.os.RemoteException For any IPC transportation failures.
      * @throws SecurityException For requests with unpermitted access.
-     * @throws IOException For any disk I/O issues.
+     * @throws java.io.IOException For any disk I/O issues.
      * @throws IllegalStateException If service is not available.
      *
      * For example, to insert basic data like step counts:
@@ -93,10 +91,10 @@
      * [records] is executed in a transaction - if one fails, none is inserted.
      *
      * @param records List of records to update
-     * @throws RemoteException For any IPC transportation failures. Update with invalid identifiers
-     *   will result in IPC failure.
+     * @throws android.os.RemoteException For any IPC transportation failures. Update with invalid
+     * identifiers will result in IPC failure.
      * @throws SecurityException For requests with unpermitted access.
-     * @throws IOException For any disk I/O issues.
+     * @throws java.io.IOException For any disk I/O issues.
      * @throws IllegalStateException If service is not available.
      */
     suspend fun updateRecords(records: List<Record>)
@@ -109,11 +107,11 @@
      * @param recordIdsList List of [androidx.health.connect.client.records.metadata.Metadata.id] of
      *   [Record] to delete
      * @param clientRecordIdsList List of client record IDs of [Record] to delete
-     * @throws RemoteException For any IPC transportation failures. Deleting by invalid identifiers
-     *   such as a non-existing identifier or deleting the same record multiple times will result in
-     *   IPC failure.
+     * @throws android.os.RemoteException For any IPC transportation failures. Deleting by invalid
+     * identifiers such as a non-existing identifier or deleting the same record multiple times will
+     * result in IPC failure.
      * @throws SecurityException For requests with unpermitted access.
-     * @throws IOException For any disk I/O issues.
+     * @throws java.io.IOException For any disk I/O issues.
      * @throws IllegalStateException If service is not available.
      *
      * Example usage to delete written steps data by its unique identifier:
@@ -133,9 +131,9 @@
      *
      * @param recordType Which type of [Record] to delete, such as `Steps::class`
      * @param timeRangeFilter The [TimeRangeFilter] to delete from
-     * @throws RemoteException For any IPC transportation failures.
+     * @throws android.os.RemoteException For any IPC transportation failures.
      * @throws SecurityException For requests with unpermitted access.
-     * @throws IOException For any disk I/O issues.
+     * @throws java.io.IOException For any disk I/O issues.
      * @throws IllegalStateException If service is not available.
      *
      * Example usage to delete written steps data in a time range:
@@ -151,10 +149,10 @@
      * @param recordId [androidx.health.connect.client.records.metadata.Metadata.id] of [Record] to
      *   read
      * @return The [Record] data point.
-     * @throws RemoteException For any IPC transportation failures. Update with invalid identifiers
-     *   will result in IPC failure.
+     * @throws android.os.RemoteException For any IPC transportation failures. Update with invalid
+     * identifiers will result in IPC failure.
      * @throws SecurityException For requests with unpermitted access.
-     * @throws IOException For any disk I/O issues.
+     * @throws java.io.IOException For any disk I/O issues.
      * @throws IllegalStateException If service is not available.
      */
     suspend fun <T : Record> readRecord(
@@ -168,9 +166,9 @@
      * @param T the type of [Record]
      * @param request [ReadRecordsRequest] object specifying time range and other filters
      * @return a response containing a collection of [Record]s.
-     * @throws RemoteException For any IPC transportation failures.
+     * @throws android.os.RemoteException For any IPC transportation failures.
      * @throws SecurityException For requests with unpermitted access.
-     * @throws IOException For any disk I/O issues.
+     * @throws java.io.IOException For any disk I/O issues.
      * @throws IllegalStateException If service is not available.
      *
      * Example code to read basic data like step counts:
@@ -186,9 +184,9 @@
      * @param request [AggregateRequest] object specifying [AggregateMetric]s to aggregate and other
      *   filters.
      * @return the [AggregationResult] that contains aggregated values.
-     * @throws RemoteException For any IPC transportation failures.
+     * @throws android.os.RemoteException For any IPC transportation failures.
      * @throws SecurityException For requests with unpermitted access.
-     * @throws IOException For any disk I/O issues.
+     * @throws java.io.IOException For any disk I/O issues.
      * @throws IllegalStateException If service is not available.
      *
      * Example code to aggregate cumulative data like distance:
@@ -216,9 +214,9 @@
      *   aggregate and other filters.
      * @return a list of [AggregationResultGroupedByDuration]s, each contains aggregated values and
      *   start/end time of the row. The list is sorted by time in ascending order.
-     * @throws RemoteException For any IPC transportation failures.
+     * @throws android.os.RemoteException For any IPC transportation failures.
      * @throws SecurityException For requests with unpermitted access.
-     * @throws IOException For any disk I/O issues.
+     * @throws java.io.IOException For any disk I/O issues.
      * @throws IllegalStateException If service is not available.
      *
      * Example code to retrieve cumulative step count for each minute within provided time range:
@@ -244,9 +242,9 @@
      *   aggregate and other filters.
      * @return a list of [AggregationResultGroupedByPeriod]s, each contains aggregated values and
      *   start/end time of the row. The list is sorted by time in ascending order.
-     * @throws RemoteException For any IPC transportation failures.
+     * @throws android.os.RemoteException For any IPC transportation failures.
      * @throws SecurityException For requests with unpermitted access.
-     * @throws IOException For any disk I/O issues.
+     * @throws java.io.IOException For any disk I/O issues.
      * @throws IllegalStateException If service is not available.
      *
      * Example code to retrieve cumulative step count for each month within provided time range:
@@ -270,7 +268,7 @@
      *
      * @param request Includes interested types of record to observe changes and optional filters.
      * @return a changes-token
-     * @throws RemoteException For any IPC transportation failures.
+     * @throws android.os.RemoteException For any IPC transportation failures.
      * @throws SecurityException For requests with unpermitted access.
      * @throws IllegalStateException If service is not available.
      * @see getChanges
@@ -301,7 +299,7 @@
      * @param changesToken A Changes-Token that represents a specific point in time in Android
      *   Health Platform.
      * @return a [ChangesResponse] with changes since provided [changesToken].
-     * @throws RemoteException For any IPC transportation failures.
+     * @throws android.os.RemoteException For any IPC transportation failures.
      * @throws SecurityException For requests with unpermitted access.
      * @throws IllegalStateException If service is not available.
      * @see getChangesToken
@@ -320,13 +318,6 @@
             "androidx.health.ACTION_HEALTH_CONNECT_SETTINGS"
 
         /**
-         * The minimum version code of the default provider APK that supports manage data intent
-         * action.
-         */
-        @RestrictTo(RestrictTo.Scope.LIBRARY)
-        internal const val ACTION_MANAGE_DATA_MIN_SUPPORTED_VERSION_CODE = 82932
-
-        /**
          * Intent action to open Health Connect settings on this phone. Developers should use this
          * if they want to re-direct the user to Health Connect.
          */
@@ -337,6 +328,12 @@
                 "android.health.connect.action.HEALTH_HOME_SETTINGS"
             else "androidx.health.ACTION_HEALTH_CONNECT_SETTINGS"
 
+        @RestrictTo(RestrictTo.Scope.LIBRARY)
+        internal val ACTION_HEALTH_CONNECT_MANAGE_DATA =
+            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.UPSIDE_DOWN_CAKE)
+                "android.health.connect.action.MANAGE_HEALTH_DATA"
+            else "androidx.health.ACTION_MANAGE_HEALTH_DATA"
+
         /**
          * The Health Connect SDK is unavailable on this device at the time. This can be due to
          * the device running a lower than required Android Version.
@@ -344,6 +341,7 @@
          * Apps should hide any integration points to Health Connect in this case.
          */
         const val SDK_UNAVAILABLE = 1
+
         /**
          * The Health Connect SDK APIs are currently unavailable, the provider is either not
          * installed or needs to be updated.
@@ -351,6 +349,7 @@
          * Apps may choose to redirect to package installers to find a suitable APK.
          */
         const val SDK_UNAVAILABLE_PROVIDER_UPDATE_REQUIRED = 2
+
         /**
          * The Health Connect SDK APIs are available.
          *
@@ -363,11 +362,11 @@
         @RestrictTo(RestrictTo.Scope.LIBRARY)
         @IntDef(
             value =
-                [
-                    SDK_UNAVAILABLE,
-                    SDK_UNAVAILABLE_PROVIDER_UPDATE_REQUIRED,
-                    SDK_AVAILABLE,
-                ]
+            [
+                SDK_UNAVAILABLE,
+                SDK_UNAVAILABLE_PROVIDER_UPDATE_REQUIRED,
+                SDK_AVAILABLE,
+            ]
         )
         annotation class AvailabilityStatus
 
@@ -469,26 +468,30 @@
         }
 
         /**
-         * Intent action to open Health Connect data management screen on this phone. Developers
+         * Intent to open Health Connect data management screen on this phone. Developers
          * should use this if they want to re-direct the user to Health Connect data management.
          *
          * @param context the context
-         * @return Intent action to open Health Connect data management screen.
+         * @param providerPackageName optional alternative package provider to choose for backend
+         * implementation
+         * @return Intent to open Health Connect data management screen.
          */
+        @JvmOverloads
         @JvmStatic
-        fun getHealthConnectManageDataAction(context: Context): String {
-            val action = if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.UPSIDE_DOWN_CAKE) {
-                "android.health.connect.action.MANAGE_HEALTH_DATA"
-            } else if (isProviderAvailable(
-                    context = context,
-                    providerVersionCode = ACTION_MANAGE_DATA_MIN_SUPPORTED_VERSION_CODE
-                )
+        fun getHealthConnectManageDataIntent(
+            context: Context,
+            providerPackageName: String = DEFAULT_PROVIDER_PACKAGE_NAME,
+        ): Intent {
+            val pm = context.packageManager
+            val manageDataIntent = Intent(ACTION_HEALTH_CONNECT_MANAGE_DATA)
+
+            return if (isProviderAvailable(context, providerPackageName) &&
+                pm.resolveActivity(manageDataIntent, /* flags */ 0) != null
             ) {
-                "androidx.health.ACTION_MANAGE_HEALTH_DATA"
+                manageDataIntent
             } else {
-                ACTION_HEALTH_CONNECT_SETTINGS
+                Intent(ACTION_HEALTH_CONNECT_SETTINGS)
             }
-            return action
         }
 
         @ChecksSdkIntAtLeast(api = Build.VERSION_CODES.P)
diff --git a/health/connect/connect-client/src/main/java/androidx/health/connect/client/HealthConnectClientExt.kt b/health/connect/connect-client/src/main/java/androidx/health/connect/client/HealthConnectClientExt.kt
new file mode 100644
index 0000000..fad5135
--- /dev/null
+++ b/health/connect/connect-client/src/main/java/androidx/health/connect/client/HealthConnectClientExt.kt
@@ -0,0 +1,106 @@
+/*
+ * 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.
+ */
+@file:JvmName("HealthConnectClientExt")
+
+package androidx.health.connect.client
+
+import android.os.RemoteException
+import androidx.health.connect.client.records.Record
+import androidx.health.connect.client.response.ReadRecordResponse
+import androidx.health.connect.client.time.TimeRangeFilter
+import java.io.IOException
+
+/**
+ * Deletes one or more [Record] by their identifiers. Deletion of multiple [Record] is executed
+ * in single transaction - if one fails, none is deleted.
+ *
+ * @param T Which type of [Record] to delete, such as `Steps`.
+ * @param recordIdsList List of [androidx.health.connect.client.records.metadata.Metadata.id] of
+ *   [Record] to delete
+ * @param clientRecordIdsList List of client record IDs of [Record] to delete
+ * @throws RemoteException For any IPC transportation failures. Deleting by invalid identifiers
+ *   such as a non-existing identifier or deleting the same record multiple times will result in
+ *   IPC failure.
+ * @throws SecurityException For requests with unpermitted access.
+ * @throws IOException For any disk I/O issues.
+ * @throws IllegalStateException If service is not available.
+ *
+ * @see HealthConnectClient.deleteRecords
+ *
+ * Example usage to delete written steps data by its unique identifier:
+ *
+ * @sample androidx.health.connect.client.samples.DeleteByUniqueIdentifier
+ */
+suspend inline fun <reified T : Record> HealthConnectClient.deleteRecords(
+    recordIdsList: List<String>,
+    clientRecordIdsList: List<String>,
+) {
+    deleteRecords(
+        recordType = T::class,
+        recordIdsList = recordIdsList,
+        clientRecordIdsList = clientRecordIdsList,
+    )
+}
+
+/**
+ * Deletes any [Record] of type [T] in the given [timeRangeFilter] (automatically
+ * filtered to [Record] belonging to the calling application). Deletion of multiple [Record] is
+ * executed in a transaction - if one fails, none is deleted.
+ *
+ * @param T Which type of [Record] to delete, such as `Steps`.
+ * @param timeRangeFilter The [TimeRangeFilter] to delete from
+ * @throws RemoteException For any IPC transportation failures.
+ * @throws SecurityException For requests with unpermitted access.
+ * @throws IOException For any disk I/O issues.
+ * @throws IllegalStateException If service is not available.
+ *
+ * @see HealthConnectClient.deleteRecords
+ *
+ * Example usage to delete written steps data in a time range:
+ *
+ * @sample androidx.health.connect.client.samples.DeleteByTimeRange
+ */
+suspend inline fun <reified T : Record> HealthConnectClient.deleteRecords(
+    timeRangeFilter: TimeRangeFilter,
+) {
+    deleteRecords(
+        recordType = T::class,
+        timeRangeFilter = timeRangeFilter,
+    )
+}
+
+/**
+ * Reads one [Record] point of type [T] and with the specified [recordId].
+ *
+ * @param T Which type of [Record] to read, such as `Steps`.
+ * @param recordId [androidx.health.connect.client.records.metadata.Metadata.id] of [Record] to
+ *   read
+ * @return The [Record] data point.
+ * @throws RemoteException For any IPC transportation failures. Update with invalid identifiers
+ *   will result in IPC failure.
+ * @throws SecurityException For requests with unpermitted access.
+ * @throws IOException For any disk I/O issues.
+ * @throws IllegalStateException If service is not available.
+ *
+ * @see HealthConnectClient.readRecord
+ */
+suspend inline fun <reified T : Record> HealthConnectClient.readRecord(
+    recordId: String
+): ReadRecordResponse<T> =
+    readRecord(
+        recordType = T::class,
+        recordId = recordId,
+    )
diff --git a/health/connect/connect-client/src/main/java/androidx/health/connect/client/aggregate/AggregationResult.kt b/health/connect/connect-client/src/main/java/androidx/health/connect/client/aggregate/AggregationResult.kt
index 0bd6c2b..b533072 100644
--- a/health/connect/connect-client/src/main/java/androidx/health/connect/client/aggregate/AggregationResult.kt
+++ b/health/connect/connect-client/src/main/java/androidx/health/connect/client/aggregate/AggregationResult.kt
@@ -47,19 +47,6 @@
      * @param metric an aggregate metric identifier.
      * @return whether given metric is set.
      */
-    @Deprecated(
-        message = "Please use contains(AggregateMetric)",
-        replaceWith = ReplaceWith("contains(metric)"),
-    )
-    fun hasMetric(metric: AggregateMetric<*>): Boolean = contains(metric)
-
-    /**
-     * Checks whether the aggregation result contains a metric or not. If there is no relevant
-     * record that contribute to requested metric, the metric will not be provided.
-     *
-     * @param metric an aggregate metric identifier.
-     * @return whether given metric is set.
-     */
     operator fun contains(metric: AggregateMetric<*>): Boolean =
         when (metric.converter) {
             is Converter.FromLong -> metric.metricKey in longValues
@@ -76,22 +63,6 @@
      *
      * @see contains
      */
-    @Deprecated(
-        message = "Please use get(AggregateMetric)",
-        replaceWith = ReplaceWith("get(metric)"),
-    )
-    fun <T : Any> getMetric(metric: AggregateMetric<T>): T? = get(metric)
-
-    /**
-     * Retrieves a metric with given metric identifier.
-     *
-     * If there are no relevant records contributing to the requested metric, the metric will not be
-     * provided.
-     *
-     * @return the value of the metric, or null if not set.
-     *
-     * @see contains
-     */
     operator fun <T : Any> get(metric: AggregateMetric<T>): T? =
         when (metric.converter) {
             is Converter.FromLong -> longValues[metric.metricKey]?.let(metric.converter)
diff --git a/health/connect/connect-client/src/main/java/androidx/health/connect/client/impl/HealthConnectClientImpl.kt b/health/connect/connect-client/src/main/java/androidx/health/connect/client/impl/HealthConnectClientImpl.kt
index ceb540b..9f5f592 100644
--- a/health/connect/connect-client/src/main/java/androidx/health/connect/client/impl/HealthConnectClientImpl.kt
+++ b/health/connect/connect-client/src/main/java/androidx/health/connect/client/impl/HealthConnectClientImpl.kt
@@ -63,16 +63,17 @@
 internal constructor(
     private val delegate: HealthDataAsyncClient,
     private val allPermissions: List<String> =
-        buildList() {
+        buildList {
             addAll(
                 HealthPermission.RECORD_TYPE_TO_PERMISSION.flatMap {
-                    listOf<String>(
+                    listOf(
                         HealthPermission.WRITE_PERMISSION_PREFIX + it.value,
                         HealthPermission.READ_PERMISSION_PREFIX + it.value
                     )
                 }
             )
             add(HealthPermission.PERMISSION_WRITE_EXERCISE_ROUTE)
+            add(HealthPermission.PERMISSION_READ_HEALTH_DATA_IN_BACKGROUND)
         },
 ) : HealthConnectClient, PermissionController {
 
diff --git a/health/connect/connect-client/src/main/java/androidx/health/connect/client/impl/HealthConnectClientUpsideDownImpl.kt b/health/connect/connect-client/src/main/java/androidx/health/connect/client/impl/HealthConnectClientUpsideDownImpl.kt
index 0a7a446..eac2033 100644
--- a/health/connect/connect-client/src/main/java/androidx/health/connect/client/impl/HealthConnectClientUpsideDownImpl.kt
+++ b/health/connect/connect-client/src/main/java/androidx/health/connect/client/impl/HealthConnectClientUpsideDownImpl.kt
@@ -25,7 +25,9 @@
 import android.health.connect.ReadRecordsRequestUsingIds
 import android.health.connect.RecordIdFilter
 import android.health.connect.changelog.ChangeLogsRequest
+import android.os.Build
 import android.os.RemoteException
+import android.os.ext.SdkExtensions
 import androidx.annotation.RequiresApi
 import androidx.annotation.VisibleForTesting
 import androidx.core.os.asOutcomeReceiver
@@ -36,6 +38,7 @@
 import androidx.health.connect.client.aggregate.AggregationResultGroupedByPeriod
 import androidx.health.connect.client.changes.DeletionChange
 import androidx.health.connect.client.changes.UpsertionChange
+import androidx.health.connect.client.impl.platform.records.toPlatformLocalTimeRangeFilter
 import androidx.health.connect.client.impl.platform.records.toPlatformRecord
 import androidx.health.connect.client.impl.platform.records.toPlatformRecordClass
 import androidx.health.connect.client.impl.platform.records.toPlatformRequest
@@ -61,10 +64,7 @@
 import kotlinx.coroutines.asExecutor
 import kotlinx.coroutines.suspendCancellableCoroutine
 
-/**
- * Implements the [HealthConnectClient] with APIs in UpsideDownCake.
- *
- */
+/** Implements the [HealthConnectClient] with APIs in UpsideDownCake. */
 @RequiresApi(api = 34)
 class HealthConnectClientUpsideDownImpl : HealthConnectClient, PermissionController {
 
@@ -242,7 +242,33 @@
                     )
                 }
             }
-            .map { it.toSdkResponse(request.metrics) }
+            .mapIndexed { index, platformResponse ->
+                if (
+                    SdkExtensions.getExtensionVersion(Build.VERSION_CODES.UPSIDE_DOWN_CAKE) >= 10 ||
+                        (request.timeRangeSlicer.months == 0 && request.timeRangeSlicer.years == 0)
+                ) {
+                    platformResponse.toSdkResponse(request.metrics)
+                } else {
+                    // Handle bug in the Platform for versions of module before SDK extensions 10
+                    val requestTimeRangeFilter =
+                        request.timeRangeFilter.toPlatformLocalTimeRangeFilter()
+                    val bucketStartTime =
+                        requestTimeRangeFilter.startTime!!.plus(
+                            request.timeRangeSlicer.multipliedBy(index)
+                        )
+                    val bucketEndTime = bucketStartTime.plus(request.timeRangeSlicer)
+                    platformResponse.toSdkResponse(
+                        metrics = request.metrics,
+                        bucketStartTime = bucketStartTime,
+                        bucketEndTime =
+                            if (requestTimeRangeFilter.endTime!!.isBefore(bucketEndTime)) {
+                                requestTimeRangeFilter.endTime!!
+                            } else {
+                                bucketEndTime
+                            }
+                    )
+                }
+            }
     }
 
     override suspend fun getChangesToken(request: ChangesTokenRequest): String {
diff --git a/health/connect/connect-client/src/main/java/androidx/health/connect/client/impl/platform/records/RecordConverters.kt b/health/connect/connect-client/src/main/java/androidx/health/connect/client/impl/platform/records/RecordConverters.kt
index ad43fd6..7d09ee9 100644
--- a/health/connect/connect-client/src/main/java/androidx/health/connect/client/impl/platform/records/RecordConverters.kt
+++ b/health/connect/connect-client/src/main/java/androidx/health/connect/client/impl/platform/records/RecordConverters.kt
@@ -294,7 +294,8 @@
         laps = laps.map { it.toSdkExerciseLap() }.sortedBy { it.startTime },
         segments = segments.map { it.toSdkExerciseSegment() }.sortedBy { it.startTime },
         metadata = metadata.toSdkMetadata(),
-        exerciseRouteResult = route?.let { ExerciseRouteResult.Data(it.toSdkExerciseRoute()) }
+        exerciseRouteResult =
+            route?.let { ExerciseRouteResult.Data(it.toSdkExerciseRoute()) }
                 ?: if (hasRoute()) ExerciseRouteResult.ConsentRequired()
                 else ExerciseRouteResult.NoData(),
     )
@@ -386,48 +387,48 @@
         name = mealName,
         mealType = mealType.toSdkMealType(),
         metadata = metadata.toSdkMetadata(),
-        biotin = biotin?.toSdkMass(),
-        caffeine = caffeine?.toSdkMass(),
-        calcium = calcium?.toSdkMass(),
-        energy = energy?.toSdkEnergy(),
-        energyFromFat = energyFromFat?.toSdkEnergy(),
-        chloride = chloride?.toSdkMass(),
-        cholesterol = cholesterol?.toSdkMass(),
-        chromium = chromium?.toSdkMass(),
-        copper = copper?.toSdkMass(),
-        dietaryFiber = dietaryFiber?.toSdkMass(),
-        folate = folate?.toSdkMass(),
-        folicAcid = folicAcid?.toSdkMass(),
-        iodine = iodine?.toSdkMass(),
-        iron = iron?.toSdkMass(),
-        magnesium = magnesium?.toSdkMass(),
-        manganese = manganese?.toSdkMass(),
-        molybdenum = molybdenum?.toSdkMass(),
-        monounsaturatedFat = monounsaturatedFat?.toSdkMass(),
-        niacin = niacin?.toSdkMass(),
-        pantothenicAcid = pantothenicAcid?.toSdkMass(),
-        phosphorus = phosphorus?.toSdkMass(),
-        polyunsaturatedFat = polyunsaturatedFat?.toSdkMass(),
-        potassium = potassium?.toSdkMass(),
-        protein = protein?.toSdkMass(),
-        riboflavin = riboflavin?.toSdkMass(),
-        saturatedFat = saturatedFat?.toSdkMass(),
-        selenium = selenium?.toSdkMass(),
-        sodium = sodium?.toSdkMass(),
-        sugar = sugar?.toSdkMass(),
-        thiamin = thiamin?.toSdkMass(),
-        totalCarbohydrate = totalCarbohydrate?.toSdkMass(),
-        totalFat = totalFat?.toSdkMass(),
-        transFat = transFat?.toSdkMass(),
-        unsaturatedFat = unsaturatedFat?.toSdkMass(),
-        vitaminA = vitaminA?.toSdkMass(),
-        vitaminB12 = vitaminB12?.toSdkMass(),
-        vitaminB6 = vitaminB6?.toSdkMass(),
-        vitaminC = vitaminC?.toSdkMass(),
-        vitaminD = vitaminD?.toSdkMass(),
-        vitaminE = vitaminE?.toSdkMass(),
-        vitaminK = vitaminK?.toSdkMass(),
-        zinc = zinc?.toSdkMass()
+        biotin = biotin?.toNonDefaultSdkMass(),
+        caffeine = caffeine?.toNonDefaultSdkMass(),
+        calcium = calcium?.toNonDefaultSdkMass(),
+        energy = energy?.toNonDefaultSdkEnergy(),
+        energyFromFat = energyFromFat?.toNonDefaultSdkEnergy(),
+        chloride = chloride?.toNonDefaultSdkMass(),
+        cholesterol = cholesterol?.toNonDefaultSdkMass(),
+        chromium = chromium?.toNonDefaultSdkMass(),
+        copper = copper?.toNonDefaultSdkMass(),
+        dietaryFiber = dietaryFiber?.toNonDefaultSdkMass(),
+        folate = folate?.toNonDefaultSdkMass(),
+        folicAcid = folicAcid?.toNonDefaultSdkMass(),
+        iodine = iodine?.toNonDefaultSdkMass(),
+        iron = iron?.toNonDefaultSdkMass(),
+        magnesium = magnesium?.toNonDefaultSdkMass(),
+        manganese = manganese?.toNonDefaultSdkMass(),
+        molybdenum = molybdenum?.toNonDefaultSdkMass(),
+        monounsaturatedFat = monounsaturatedFat?.toNonDefaultSdkMass(),
+        niacin = niacin?.toNonDefaultSdkMass(),
+        pantothenicAcid = pantothenicAcid?.toNonDefaultSdkMass(),
+        phosphorus = phosphorus?.toNonDefaultSdkMass(),
+        polyunsaturatedFat = polyunsaturatedFat?.toNonDefaultSdkMass(),
+        potassium = potassium?.toNonDefaultSdkMass(),
+        protein = protein?.toNonDefaultSdkMass(),
+        riboflavin = riboflavin?.toNonDefaultSdkMass(),
+        saturatedFat = saturatedFat?.toNonDefaultSdkMass(),
+        selenium = selenium?.toNonDefaultSdkMass(),
+        sodium = sodium?.toNonDefaultSdkMass(),
+        sugar = sugar?.toNonDefaultSdkMass(),
+        thiamin = thiamin?.toNonDefaultSdkMass(),
+        totalCarbohydrate = totalCarbohydrate?.toNonDefaultSdkMass(),
+        totalFat = totalFat?.toNonDefaultSdkMass(),
+        transFat = transFat?.toNonDefaultSdkMass(),
+        unsaturatedFat = unsaturatedFat?.toNonDefaultSdkMass(),
+        vitaminA = vitaminA?.toNonDefaultSdkMass(),
+        vitaminB12 = vitaminB12?.toNonDefaultSdkMass(),
+        vitaminB6 = vitaminB6?.toNonDefaultSdkMass(),
+        vitaminC = vitaminC?.toNonDefaultSdkMass(),
+        vitaminD = vitaminD?.toNonDefaultSdkMass(),
+        vitaminE = vitaminE?.toNonDefaultSdkMass(),
+        vitaminK = vitaminK?.toNonDefaultSdkMass(),
+        zinc = zinc?.toNonDefaultSdkMass()
     )
 
 private fun PlatformOvulationTestRecord.toSdkOvulationTestRecord() =
diff --git a/health/connect/connect-client/src/main/java/androidx/health/connect/client/impl/platform/records/RequestConverters.kt b/health/connect/connect-client/src/main/java/androidx/health/connect/client/impl/platform/records/RequestConverters.kt
index cce4e13..34699be 100644
--- a/health/connect/connect-client/src/main/java/androidx/health/connect/client/impl/platform/records/RequestConverters.kt
+++ b/health/connect/connect-client/src/main/java/androidx/health/connect/client/impl/platform/records/RequestConverters.kt
@@ -38,6 +38,8 @@
 import androidx.health.connect.client.request.ReadRecordsRequest
 import androidx.health.connect.client.time.TimeRangeFilter
 import java.time.Instant
+import java.time.LocalDateTime
+import java.time.ZoneOffset
 
 fun ReadRecordsRequest<out Record>.toPlatformRequest():
     ReadRecordsRequestUsingFilters<out PlatformRecord> {
@@ -66,6 +68,26 @@
     }
 }
 
+fun TimeRangeFilter.toPlatformLocalTimeRangeFilter(): LocalTimeRangeFilter {
+    return when {
+        localStartTime != null || localEndTime != null ->
+            LocalTimeRangeFilter.Builder()
+                .setStartTime(localStartTime)
+                .setEndTime(localEndTime)
+                .build()
+        startTime != null || endTime != null ->
+            LocalTimeRangeFilter.Builder()
+                .setStartTime(startTime?.toLocalDateTime())
+                .setEndTime(endTime?.toLocalDateTime())
+                .build()
+        else ->
+            // Platform doesn't allow both startTime and endTime to be null
+            LocalTimeRangeFilter.Builder().setStartTime(Instant.EPOCH.toLocalDateTime()).build()
+    }
+}
+
+private fun Instant.toLocalDateTime() = LocalDateTime.ofInstant(this, ZoneOffset.UTC)
+
 fun ChangesTokenRequest.toPlatformRequest(): ChangeLogTokenRequest {
     return ChangeLogTokenRequest.Builder()
         .apply {
@@ -94,7 +116,10 @@
 }
 
 fun AggregateGroupByPeriodRequest.toPlatformRequest(): AggregateRecordsRequest<Any> {
-    return AggregateRecordsRequest.Builder<Any>(timeRangeFilter.toPlatformTimeRangeFilter())
+    return AggregateRecordsRequest.Builder<Any>(
+            timeRangeFilter
+                .toPlatformLocalTimeRangeFilter() /* Platform only takes LocalTimeRange filter in aggregate by period request. */
+        )
         .apply {
             dataOriginFilter.forEach { addDataOriginsFilter(it.toPlatformDataOrigin()) }
             metrics.forEach { addAggregationType(it.toAggregationType()) }
@@ -106,12 +131,12 @@
 fun AggregateMetric<Any>.toAggregationType(): AggregationType<Any> {
     return DOUBLE_AGGREGATION_METRIC_TYPE_MAP[this] as AggregationType<Any>?
         ?: DURATION_AGGREGATION_METRIC_TYPE_MAP[this] as AggregationType<Any>?
-            ?: ENERGY_AGGREGATION_METRIC_TYPE_MAP[this] as AggregationType<Any>?
-            ?: LENGTH_AGGREGATION_METRIC_TYPE_MAP[this] as AggregationType<Any>?
-            ?: LONG_AGGREGATION_METRIC_TYPE_MAP[this] as AggregationType<Any>?
-            ?: GRAMS_AGGREGATION_METRIC_TYPE_MAP[this] as AggregationType<Any>?
-            ?: KILOGRAMS_AGGREGATION_METRIC_TYPE_MAP[this] as AggregationType<Any>?
-            ?: POWER_AGGREGATION_METRIC_TYPE_MAP[this] as AggregationType<Any>?
-            ?: VOLUME_AGGREGATION_METRIC_TYPE_MAP[this] as AggregationType<Any>?
-            ?: throw IllegalArgumentException("Unsupported aggregation type $metricKey")
+        ?: ENERGY_AGGREGATION_METRIC_TYPE_MAP[this] as AggregationType<Any>?
+        ?: LENGTH_AGGREGATION_METRIC_TYPE_MAP[this] as AggregationType<Any>?
+        ?: LONG_AGGREGATION_METRIC_TYPE_MAP[this] as AggregationType<Any>?
+        ?: GRAMS_AGGREGATION_METRIC_TYPE_MAP[this] as AggregationType<Any>?
+        ?: KILOGRAMS_AGGREGATION_METRIC_TYPE_MAP[this] as AggregationType<Any>?
+        ?: POWER_AGGREGATION_METRIC_TYPE_MAP[this] as AggregationType<Any>?
+        ?: VOLUME_AGGREGATION_METRIC_TYPE_MAP[this] as AggregationType<Any>?
+        ?: throw IllegalArgumentException("Unsupported aggregation type $metricKey")
 }
diff --git a/health/connect/connect-client/src/main/java/androidx/health/connect/client/impl/platform/records/ResponseConverters.kt b/health/connect/connect-client/src/main/java/androidx/health/connect/client/impl/platform/records/ResponseConverters.kt
index d07820f..30e2279 100644
--- a/health/connect/connect-client/src/main/java/androidx/health/connect/client/impl/platform/records/ResponseConverters.kt
+++ b/health/connect/connect-client/src/main/java/androidx/health/connect/client/impl/platform/records/ResponseConverters.kt
@@ -34,6 +34,7 @@
 import androidx.health.connect.client.aggregate.AggregationResultGroupedByPeriod
 import androidx.health.connect.client.units.Energy
 import androidx.health.connect.client.units.Mass
+import java.time.LocalDateTime
 import java.time.ZoneOffset
 
 fun AggregateRecordsResponse<Any>.toSdkResponse(metrics: Set<AggregateMetric<Any>>) =
@@ -57,6 +58,17 @@
 fun AggregateRecordsGroupedByPeriodResponse<Any>.toSdkResponse(metrics: Set<AggregateMetric<Any>>) =
     AggregationResultGroupedByPeriod(buildAggregationResult(metrics, ::get), startTime, endTime)
 
+fun AggregateRecordsGroupedByPeriodResponse<Any>.toSdkResponse(
+    metrics: Set<AggregateMetric<Any>>,
+    bucketStartTime: LocalDateTime,
+    bucketEndTime: LocalDateTime
+) =
+    AggregationResultGroupedByPeriod(
+        buildAggregationResult(metrics, ::get),
+        bucketStartTime,
+        bucketEndTime
+    )
+
 @VisibleForTesting
 internal fun buildAggregationResult(
     metrics: Set<AggregateMetric<Any>>,
diff --git a/health/connect/connect-client/src/main/java/androidx/health/connect/client/impl/platform/records/UnitConverters.kt b/health/connect/connect-client/src/main/java/androidx/health/connect/client/impl/platform/records/UnitConverters.kt
index c9a23f9..b6b8bd8 100644
--- a/health/connect/connect-client/src/main/java/androidx/health/connect/client/impl/platform/records/UnitConverters.kt
+++ b/health/connect/connect-client/src/main/java/androidx/health/connect/client/impl/platform/records/UnitConverters.kt
@@ -77,6 +77,9 @@
     return BloodGlucose.millimolesPerLiter(inMillimolesPerLiter)
 }
 
+internal fun PlatformEnergy.toNonDefaultSdkEnergy() =
+    takeIf { inCalories != Double.MIN_VALUE }?.toSdkEnergy()
+
 internal fun PlatformEnergy.toSdkEnergy(): Energy {
     return Energy.calories(inCalories)
 }
@@ -85,6 +88,9 @@
     return Length.meters(inMeters)
 }
 
+internal fun PlatformMass.toNonDefaultSdkMass() =
+    takeIf { inGrams != Double.MIN_VALUE }?.toSdkMass()
+
 internal fun PlatformMass.toSdkMass(): Mass {
     return Mass.grams(inGrams)
 }
diff --git a/health/connect/connect-client/src/main/java/androidx/health/connect/client/permission/HealthPermission.kt b/health/connect/connect-client/src/main/java/androidx/health/connect/client/permission/HealthPermission.kt
index 6c665b0..51c1863 100644
--- a/health/connect/connect-client/src/main/java/androidx/health/connect/client/permission/HealthPermission.kt
+++ b/health/connect/connect-client/src/main/java/androidx/health/connect/client/permission/HealthPermission.kt
@@ -146,6 +146,19 @@
          */
         const val PERMISSION_WRITE_EXERCISE_ROUTE = PERMISSION_PREFIX + "WRITE_EXERCISE_ROUTE"
 
+        /**
+         * A permission to read data in background.
+         *
+         * An attempt to read data in background without this permission may result
+         * in an error.
+         *
+         * @sample androidx.health.connect.client.samples.RequestBackgroundReadPermission
+         * @sample androidx.health.connect.client.samples.ReadRecordsInBackground
+         */
+        @RestrictTo(RestrictTo.Scope.LIBRARY) // Hidden for now
+        const val PERMISSION_READ_HEALTH_DATA_IN_BACKGROUND =
+            PERMISSION_PREFIX + "READ_HEALTH_DATA_IN_BACKGROUND"
+
         // Read permissions for ACTIVITY.
         internal const val READ_ACTIVE_CALORIES_BURNED =
             PERMISSION_PREFIX + "READ_ACTIVE_CALORIES_BURNED"
diff --git a/health/connect/connect-client/src/main/java/androidx/health/connect/client/request/ReadRecordsRequest.kt b/health/connect/connect-client/src/main/java/androidx/health/connect/client/request/ReadRecordsRequest.kt
index e328742..9da5e4a 100644
--- a/health/connect/connect-client/src/main/java/androidx/health/connect/client/request/ReadRecordsRequest.kt
+++ b/health/connect/connect-client/src/main/java/androidx/health/connect/client/request/ReadRecordsRequest.kt
@@ -21,6 +21,27 @@
 import kotlin.reflect.KClass
 
 /**
+ * A convenience factory function for [ReadRecordsRequest] with `reified` record type [T].
+ *
+ * @see [ReadRecordsRequest] for more information.
+ */
+inline fun <reified T : Record> ReadRecordsRequest(
+    timeRangeFilter: TimeRangeFilter,
+    dataOriginFilter: Set<DataOrigin> = emptySet(),
+    ascendingOrder: Boolean = true,
+    pageSize: Int = 1000,
+    pageToken: String? = null,
+): ReadRecordsRequest<T> =
+    ReadRecordsRequest(
+        recordType = T::class,
+        timeRangeFilter = timeRangeFilter,
+        dataOriginFilter = dataOriginFilter,
+        ascendingOrder = ascendingOrder,
+        pageSize = pageSize,
+        pageToken = pageToken,
+    )
+
+/**
  * Request object to read [Record]s in Android Health Platform determined by time range and other
  * filters.
  *
diff --git a/health/connect/connect-client/src/test/java/androidx/health/connect/client/HealthConnectClientTest.kt b/health/connect/connect-client/src/test/java/androidx/health/connect/client/HealthConnectClientTest.kt
index 81036fd..8ad0c67 100644
--- a/health/connect/connect-client/src/test/java/androidx/health/connect/client/HealthConnectClientTest.kt
+++ b/health/connect/connect-client/src/test/java/androidx/health/connect/client/HealthConnectClientTest.kt
@@ -123,11 +123,11 @@
         installService(context, HealthConnectClient.DEFAULT_PROVIDER_PACKAGE_NAME)
 
         assertThat(
-                HealthConnectClient.getSdkStatus(
-                    context,
-                    HealthConnectClient.DEFAULT_PROVIDER_PACKAGE_NAME
-                )
+            HealthConnectClient.getSdkStatus(
+                context,
+                HealthConnectClient.DEFAULT_PROVIDER_PACKAGE_NAME
             )
+        )
             .isEqualTo(HealthConnectClient.SDK_AVAILABLE)
         assertThat(HealthConnectClient.getOrCreate(context))
             .isInstanceOf(HealthConnectClientImpl::class.java)
@@ -146,11 +146,11 @@
         installService(context, HealthConnectClient.DEFAULT_PROVIDER_PACKAGE_NAME)
 
         assertThat(
-                HealthConnectClient.getSdkStatusLegacy(
-                    context,
-                    HealthConnectClient.DEFAULT_PROVIDER_PACKAGE_NAME
-                )
+            HealthConnectClient.getSdkStatusLegacy(
+                context,
+                HealthConnectClient.DEFAULT_PROVIDER_PACKAGE_NAME
             )
+        )
             .isEqualTo(HealthConnectClient.SDK_AVAILABLE)
         assertThat(HealthConnectClient.getOrCreateLegacy(context))
             .isInstanceOf(HealthConnectClientImpl::class.java)
@@ -180,15 +180,23 @@
 
     @Test
     @Config(sdk = [Build.VERSION_CODES.P])
+    fun getHealthConnectManageDataAction_noProvider_returnsDefaultIntent() {
+        assertThat(HealthConnectClient.getHealthConnectManageDataIntent(context).action).isEqualTo(
+            HealthConnectClient.ACTION_HEALTH_CONNECT_SETTINGS
+        )
+    }
+
+    @Test
+    @Config(sdk = [Build.VERSION_CODES.P])
     fun getHealthConnectManageDataAction_unsupportedClient_returnsDefaultIntent() {
         installPackage(
             context,
             HealthConnectClient.DEFAULT_PROVIDER_PACKAGE_NAME,
-            versionCode = HealthConnectClient.DEFAULT_PROVIDER_MIN_VERSION_CODE,
+            versionCode = HealthConnectClient.DEFAULT_PROVIDER_MIN_VERSION_CODE - 1,
             enabled = true
         )
 
-        assertThat(HealthConnectClient.getHealthConnectManageDataAction(context)).isEqualTo(
+        assertThat(HealthConnectClient.getHealthConnectManageDataIntent(context).action).isEqualTo(
             HealthConnectClient.ACTION_HEALTH_CONNECT_SETTINGS
         )
     }
@@ -199,12 +207,13 @@
         installPackage(
             context,
             HealthConnectClient.DEFAULT_PROVIDER_PACKAGE_NAME,
-            versionCode = HealthConnectClient.ACTION_MANAGE_DATA_MIN_SUPPORTED_VERSION_CODE,
+            versionCode = HealthConnectClient.DEFAULT_PROVIDER_MIN_VERSION_CODE,
             enabled = true
         )
+        installDataManagementHandler(context, HealthConnectClient.DEFAULT_PROVIDER_PACKAGE_NAME)
         installService(context, HealthConnectClient.DEFAULT_PROVIDER_PACKAGE_NAME)
 
-        assertThat(HealthConnectClient.getHealthConnectManageDataAction(context)).isEqualTo(
+        assertThat(HealthConnectClient.getHealthConnectManageDataIntent(context).action).isEqualTo(
             "androidx.health.ACTION_MANAGE_HEALTH_DATA"
         )
     }
@@ -212,7 +221,7 @@
     @Test
     @Config(minSdk = Build.VERSION_CODES.UPSIDE_DOWN_CAKE)
     fun getHealthConnectManageDataAction_platformSupported() {
-        assertThat(HealthConnectClient.getHealthConnectManageDataAction(context)).isEqualTo(
+        assertThat(HealthConnectClient.getHealthConnectManageDataIntent(context).action).isEqualTo(
             "android.health.connect.action.MANAGE_HEALTH_DATA"
         )
     }
@@ -233,6 +242,16 @@
         Shadows.shadowOf(packageManager).installPackage(packageInfo)
     }
 
+    private fun installDataManagementHandler(context: Context, packageName: String) {
+        val packageManager = context.packageManager
+        val componentName =
+            ComponentName(packageName, HealthConnectClient.ACTION_HEALTH_CONNECT_MANAGE_DATA)
+        val intentFilter = IntentFilter(HealthConnectClient.ACTION_HEALTH_CONNECT_MANAGE_DATA)
+        val shadowPackageManager = Shadows.shadowOf(packageManager)
+        shadowPackageManager.addActivityIfNotPresent(componentName)
+        shadowPackageManager.addIntentFilterForActivity(componentName, intentFilter)
+    }
+
     private fun installService(context: Context, packageName: String) {
         val packageManager = context.packageManager
         val serviceIntentFilter =
diff --git a/health/connect/connect-client/src/test/java/androidx/health/connect/client/impl/HealthConnectClientImplTest.kt b/health/connect/connect-client/src/test/java/androidx/health/connect/client/impl/HealthConnectClientImplTest.kt
index bc640cd..7379cf4 100644
--- a/health/connect/connect-client/src/test/java/androidx/health/connect/client/impl/HealthConnectClientImplTest.kt
+++ b/health/connect/connect-client/src/test/java/androidx/health/connect/client/impl/HealthConnectClientImplTest.kt
@@ -227,6 +227,22 @@
     }
 
     @Test
+    fun getGrantedPermissions_backgroundRead() = runTest {
+        fakeAhpServiceStub.addGrantedPermission(
+            androidx.health.platform.client.permission.Permission(
+                PermissionProto.Permission.newBuilder()
+                    .setPermission(HealthPermission.PERMISSION_READ_HEALTH_DATA_IN_BACKGROUND)
+                    .build()
+            )
+        )
+
+        val response = testBlocking { healthConnectClient.getGrantedPermissions() }
+
+        assertThat(response)
+            .containsExactly(HealthPermission.PERMISSION_READ_HEALTH_DATA_IN_BACKGROUND)
+    }
+
+    @Test
     fun insertRecords_steps() = runTest {
         fakeAhpServiceStub.insertDataResponse = InsertDataResponse(listOf("0"))
         val response = testBlocking {
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/inspection/inspection-gradle-plugin/src/main/kotlin/androidx/inspection/gradle/AGPExtensions.kt b/inspection/inspection-gradle-plugin/src/main/kotlin/androidx/inspection/gradle/AGPExtensions.kt
index 520e21d7..7eaecb6 100644
--- a/inspection/inspection-gradle-plugin/src/main/kotlin/androidx/inspection/gradle/AGPExtensions.kt
+++ b/inspection/inspection-gradle-plugin/src/main/kotlin/androidx/inspection/gradle/AGPExtensions.kt
@@ -17,8 +17,6 @@
 package androidx.inspection.gradle
 
 import com.android.build.api.variant.Variant
-import java.io.File
-import java.util.Locale
 import org.gradle.api.Project
 import org.gradle.api.file.Directory
 import org.gradle.api.provider.Provider
@@ -32,18 +30,3 @@
 ): Provider<Directory> {
     return layout.buildDirectory.dir("androidx_inspection/$baseName/${variant.name}")
 }
-
-// Functions below will be removed once registerGenerateProguardDetectionFileTask is migrated
-// that needs newly added function "addGeneratedSourceDirectory"
-@Suppress("DEPRECATION") // BaseVariant
-internal fun com.android.build.gradle.api.BaseVariant.taskName(baseName: String) =
-    "$baseName${name.capitalize(Locale.ENGLISH)}"
-
-@Suppress("DEPRECATION") // BaseVariant
-internal fun Project.taskWorkingDir(
-    variant: com.android.build.gradle.api.BaseVariant,
-    baseName: String
-): File {
-    val inspectionDir = File(project.buildDir, "androidx_inspection")
-    return File(File(inspectionDir, baseName), variant.dirName)
-}
diff --git a/inspection/inspection-gradle-plugin/src/main/kotlin/androidx/inspection/gradle/GenerateProguardDetectionFileTask.kt b/inspection/inspection-gradle-plugin/src/main/kotlin/androidx/inspection/gradle/GenerateProguardDetectionFileTask.kt
index aa6d722..ce4758a8 100644
--- a/inspection/inspection-gradle-plugin/src/main/kotlin/androidx/inspection/gradle/GenerateProguardDetectionFileTask.kt
+++ b/inspection/inspection-gradle-plugin/src/main/kotlin/androidx/inspection/gradle/GenerateProguardDetectionFileTask.kt
@@ -16,6 +16,7 @@
 
 package androidx.inspection.gradle
 
+import com.android.build.api.variant.Variant
 import java.io.File
 import org.gradle.api.DefaultTask
 import org.gradle.api.GradleException
@@ -30,7 +31,6 @@
  * Task purposely empty, unused class that would be removed by proguard. See javadoc below for more
  * information.
  */
-@Suppress("UnstableApiUsage")
 @DisableCachingByDefault(because = "Simply generates a small file and doesn't benefit from caching")
 abstract class GenerateProguardDetectionFileTask : DefaultTask() {
 
@@ -43,6 +43,7 @@
     @get:OutputDirectory
     abstract val outputDir: DirectoryProperty
 
+    @Suppress("LoggingStringTemplateAsArgument")
     @TaskAction
     fun generateProguardDetectionFile() {
         val packageName = generatePackageName(mavenGroup.get(), mavenArtifactId.get())
@@ -56,7 +57,7 @@
 
         val text = """
             package $packageName;
-            
+
             /**
              * Purposely empty, unused class that would be removed by proguard.
              *
@@ -73,11 +74,7 @@
     }
 }
 
-@ExperimentalStdlibApi
-@Suppress("DEPRECATION") // BaseVariant
-fun Project.registerGenerateProguardDetectionFileTask(
-    variant: com.android.build.gradle.api.BaseVariant
-) {
+fun Project.registerGenerateProguardDetectionFileTask(variant: Variant) {
     val outputDir = taskWorkingDir(variant, "generateProguardDetection")
     val taskName = variant.taskName("generateProguardDetection")
     val mavenGroup = project.group as? String
@@ -88,7 +85,7 @@
         it.mavenGroup.set(mavenGroup)
         it.mavenArtifactId.set(mavenArtifactId)
     }
-    variant.registerJavaGeneratingTask(task, outputDir)
+    variant.sources.java?.addGeneratedSourceDirectory(task) { it.outputDir }
 }
 
 /**
diff --git a/inspection/inspection-gradle-plugin/src/main/kotlin/androidx/inspection/gradle/InspectionPlugin.kt b/inspection/inspection-gradle-plugin/src/main/kotlin/androidx/inspection/gradle/InspectionPlugin.kt
index 79d870d..d77b646 100644
--- a/inspection/inspection-gradle-plugin/src/main/kotlin/androidx/inspection/gradle/InspectionPlugin.kt
+++ b/inspection/inspection-gradle-plugin/src/main/kotlin/androidx/inspection/gradle/InspectionPlugin.kt
@@ -16,6 +16,7 @@
 
 package androidx.inspection.gradle
 
+import com.android.build.api.artifact.SingleArtifact
 import com.android.build.api.variant.AndroidComponentsExtension
 import com.android.build.api.variant.Variant
 import com.android.build.gradle.LibraryExtension
@@ -23,6 +24,12 @@
 import com.google.protobuf.gradle.ProtobufExtension
 import com.google.protobuf.gradle.ProtobufPlugin
 import java.io.File
+import java.nio.file.Files
+import java.nio.file.attribute.FileTime
+import org.apache.tools.zip.ZipEntry
+import org.apache.tools.zip.ZipFile
+import org.apache.tools.zip.ZipOutputStream
+import org.gradle.api.DefaultTask
 import org.gradle.api.GradleException
 import org.gradle.api.Plugin
 import org.gradle.api.Project
@@ -31,10 +38,20 @@
 import org.gradle.api.artifacts.VersionCatalogsExtension
 import org.gradle.api.artifacts.type.ArtifactTypeDefinition
 import org.gradle.api.attributes.Attribute
+import org.gradle.api.file.FileCollection
+import org.gradle.api.file.RegularFileProperty
+import org.gradle.api.tasks.CacheableTask
+import org.gradle.api.tasks.InputFile
+import org.gradle.api.tasks.InputFiles
+import org.gradle.api.tasks.OutputFile
+import org.gradle.api.tasks.PathSensitive
+import org.gradle.api.tasks.PathSensitivity
 import org.gradle.api.tasks.StopExecutionException
+import org.gradle.api.tasks.TaskAction
 import org.gradle.kotlin.dsl.apply
 import org.gradle.kotlin.dsl.create
 import org.gradle.kotlin.dsl.dependencies
+import org.gradle.kotlin.dsl.register
 
 /**
  * A plugin which, when present, ensures that intermediate inspector
@@ -185,25 +202,31 @@
     libraryProject.dependencies {
         add(consumeInspector.name, inspectorProject)
     }
-    val consumeInspectorFiles = libraryProject.files(consumeInspector)
 
+    val consumeInspectorFiles = libraryProject.files(consumeInspector)
     generateProguardDetectionFile(libraryProject)
-    val libExtension = libraryProject.extensions.getByType(LibraryExtension::class.java)
-    libExtension.libraryVariants.all { variant ->
-        variant.packageLibraryProvider.configure { zip ->
-            zip.from(consumeInspectorFiles)
-            zip.rename {
-                if (it == consumeInspectorFiles.asFileTree.singleFile.name) {
-                    "inspector.jar"
-                } else it
-            }
-        }
+
+    val componentsExtension =
+        libraryProject.extensions.findByType(AndroidComponentsExtension::class.java)
+            ?: throw GradleException("android plugin must be used")
+    componentsExtension.onVariants { variant: Variant ->
+        val updateArtifact = libraryProject.tasks
+            .register<InspectionTransformerTask>("${variant.name}UpdateArtifact")
+        updateArtifact.configure { it.inspectorJar = consumeInspectorFiles }
+
+        variant.artifacts.use(updateArtifact)
+            .wiredWithFiles(
+                InspectionTransformerTask::aarFile,
+                InspectionTransformerTask::updatedAarFile
+            )
+            .toTransform(SingleArtifact.AAR)
     }
 
     libraryProject.configurations.create(IMPORT_INSPECTOR_DEPENDENCIES) {
         it.setupReleaseAttribute()
     }
-    libraryProject.dependencies.add(IMPORT_INSPECTOR_DEPENDENCIES,
+    libraryProject.dependencies.add(
+        IMPORT_INSPECTOR_DEPENDENCIES,
         libraryProject.dependencies.project(
             mapOf(
                 "path" to inspectorProjectPath,
@@ -256,8 +279,10 @@
 
 @ExperimentalStdlibApi
 private fun generateProguardDetectionFile(libraryProject: Project) {
-    val libExtension = libraryProject.extensions.getByType(LibraryExtension::class.java)
-    libExtension.libraryVariants.all { variant ->
+    val componentsExtension =
+        libraryProject.extensions.findByType(AndroidComponentsExtension::class.java)
+            ?: throw GradleException("android plugin must be used")
+    componentsExtension.onVariants { variant ->
         libraryProject.registerGenerateProguardDetectionFileTask(variant)
     }
 }
@@ -272,3 +297,75 @@
      */
     var name: String? = null
 }
+
+/**
+ * This task adds inspector.jar compiled from the corresponding inspection project to
+ * the aar.
+ */
+@Suppress("SyntheticAccessor")
+@CacheableTask
+abstract class InspectionTransformerTask : DefaultTask() {
+    @get:InputFile
+    @get:PathSensitive(PathSensitivity.RELATIVE)
+    abstract val aarFile: RegularFileProperty
+
+    @get:OutputFile
+    abstract val updatedAarFile: RegularFileProperty
+
+    @get:InputFiles
+    @get:PathSensitive(PathSensitivity.RELATIVE)
+    abstract var inspectorJar: FileCollection
+
+    @TaskAction
+    fun taskAction() {
+        val aar = aarFile.get().asFile
+        val updatedAar = updatedAarFile.get().asFile
+        val tempDir = Files.createTempDirectory("${name}Unzip").toFile()
+        tempDir.deleteOnExit()
+        ZipFile(aar).use { aarFile -> aarFile.unzipTo(tempDir) }
+        ZipOutputStream(updatedAar.outputStream()).use { stream ->
+            tempDir.listFiles()?.forEach { file -> stream.addFileRecursive(null, file) }
+            stream.addFileRecursive(null, inspectorJar.singleFile, "inspector.jar")
+        }
+        tempDir.deleteRecursively()
+    }
+}
+
+private fun ZipFile.unzipTo(tempDir: File) {
+    entries.iterator().forEach { entry ->
+        if (entry.isDirectory) {
+            File(tempDir, entry.name).mkdirs()
+        } else {
+            val file = File(tempDir, entry.name)
+            file.parentFile.mkdirs()
+            getInputStream(entry).use { stream -> file.writeBytes(stream.readBytes()) }
+        }
+    }
+}
+
+private fun ZipOutputStream.addFileRecursive(
+    parentPath: String?,
+    file: File,
+    nameOverride: String? = null
+) {
+    val name = nameOverride ?: file.name
+    val entryPath = if (parentPath != null) "$parentPath/$name" else name
+    val entry = ZipEntry(file, entryPath)
+
+    // Reset creation time of entry to make it deterministic.
+    entry.time = 0
+    entry.creationTime = FileTime.fromMillis(0)
+
+    if (file.isFile) {
+        putNextEntry(entry)
+        file.inputStream().use { stream -> stream.copyTo(this) }
+        closeEntry()
+    } else if (file.isDirectory) {
+        val listFiles = file.listFiles()
+        if (!listFiles.isNullOrEmpty()) {
+            putNextEntry(entry)
+            closeEntry()
+            listFiles.forEach { containedFile -> addFileRecursive(entryPath, containedFile) }
+        }
+    }
+}
diff --git a/inspection/inspection-gradle-plugin/src/test/kotlin/androidx/inspection/gradle/InspectionPluginTest.kt b/inspection/inspection-gradle-plugin/src/test/kotlin/androidx/inspection/gradle/InspectionPluginTest.kt
index 00b6f06..3404fae 100644
--- a/inspection/inspection-gradle-plugin/src/test/kotlin/androidx/inspection/gradle/InspectionPluginTest.kt
+++ b/inspection/inspection-gradle-plugin/src/test/kotlin/androidx/inspection/gradle/InspectionPluginTest.kt
@@ -17,15 +17,14 @@
 package androidx.inspection.gradle
 
 import androidx.testutils.gradle.ProjectSetupRule
-import java.io.BufferedReader
 import java.io.File
-import java.io.InputStreamReader
 import kotlin.test.assertEquals
+import kotlin.test.assertNotNull
 import kotlin.test.assertTrue
+import org.apache.tools.zip.ZipFile
 import org.gradle.testkit.runner.GradleRunner
 import org.gradle.testkit.runner.TaskOutcome
 import org.junit.Before
-import org.junit.Ignore
 import org.junit.Rule
 import org.junit.Test
 import org.junit.runner.RunWith
@@ -37,33 +36,33 @@
     val projectSetup = ProjectSetupRule()
 
     lateinit var gradleRunner: GradleRunner
-    lateinit var dxExecutable: String
 
     @Before
     fun setUp() {
-        val sdkDir = projectSetup.getSdkDirectory()
-        dxExecutable = File(sdkDir, "build-tools/${projectSetup.props.buildToolsVersion}/dx")
-            .absolutePath
-        File("src/test/test-data", "app-project").copyRecursively(projectSetup.rootDir)
-
+        File("src/test/test-data").copyRecursively(projectSetup.rootDir)
         gradleRunner = GradleRunner.create()
             .withProjectDir(projectSetup.rootDir)
             .withPluginClasspath()
     }
 
-    @Ignore // b/193918205
     @Test
-    fun applyInspection() {
-        File(projectSetup.rootDir, "settings.gradle")
-            .writeText("rootProject.name = \"test-inspector\"")
-        projectSetup.writeDefaultBuildGradle(
-            prefix = """
+    fun testInspectorJar() {
+        with(projectSetup) {
+            val prefix =
+                "import static androidx.inspection.gradle.InspectionPluginKt.packageInspector\n\n" +
+                "plugins { id(\"com.android.library\") }\n"
+            File(rootDir, "lib/build.gradle")
+                .writeText("$prefix\n\n" +
+                    "$repositories\n\n$androidProject\n${namespace("foox.lib")}\n" +
+                    "packageInspector(project, \":lib-inspector\")"
+                )
+            val inspectorPlugins = """
                 plugins {
                     id("com.android.library")
                     id("androidx.inspection")
                 }
-            """.trimIndent(),
-            suffix = """
+            """.trimIndent()
+            val suffix = """
                 dependencies {
                     implementation("androidx.inspection:inspection:1.0.0")
                 }
@@ -72,32 +71,31 @@
                         targetSdkVersion 30
                     }
                 }
-            """
-        )
-        val output = gradleRunner.withArguments("dexInspectorRelease", "--stacktrace").build()
-        assertEquals(output.task(":dexInspectorRelease")!!.outcome, TaskOutcome.SUCCESS)
-        val artifact = File(
-            projectSetup.rootDir,
-            "build/androidx_inspection/dexedInspector/release/test-inspector.jar"
-        )
+            """.trimIndent()
+
+            File(rootDir, "lib-inspector/build.gradle")
+                .writeText(
+                    "$inspectorPlugins\n$repositories\n\n$androidProject\n" +
+                        "${namespace("foox.lib.inspector")}\n$suffix"
+                )
+        }
+
+        val task = ":lib:assembleRelease"
+        val output = gradleRunner.withArguments(task).build()
+        assertEquals(output.task(task)!!.outcome, TaskOutcome.SUCCESS)
+        val artifact = File(projectSetup.rootDir, "lib/build/outputs/aar/lib-release.aar")
         assertTrue { artifact.exists() }
-        assertDeclaredInDex(artifact, "Ltest/inspector/TestInspector;")
-        assertDeclaredInDex(artifact, "Ltest/inspector/TestInspectorProtocol;")
-        assertDeclaredInDex(artifact, "Ldeps/test/inspector/com/google/protobuf/ByteString;")
-    }
-
-    // rely that classes should have a constructor and it is declared in class itself
-    private fun assertDeclaredInDex(artifact: File, className: String) {
-        val exec = Runtime.getRuntime().exec(
-            arrayOf(dxExecutable, "--find-usages", artifact.absolutePath, className, "<init>")
-        )
-        exec.waitFor()
-        assertEquals(exec.exitValue(), 0)
-
-        assertTrue {
-            BufferedReader(InputStreamReader(exec.inputStream)).readLines().any {
-                it.contains("<init> method declared")
+        val inspectorJar = ZipFile(artifact).use { aarFile ->
+            aarFile.entries.toList().find {
+                it.name == "inspector.jar"
             }
         }
+        assertNotNull(inspectorJar)
     }
 }
+
+private fun namespace(name: String) = """
+    android {
+         namespace "$name"
+    }
+""".trimIndent()
diff --git a/inspection/inspection-gradle-plugin/src/test/test-data/app-project/src/main/AndroidManifest.xml b/inspection/inspection-gradle-plugin/src/test/test-data/lib-inspector/src/main/AndroidManifest.xml
similarity index 92%
rename from inspection/inspection-gradle-plugin/src/test/test-data/app-project/src/main/AndroidManifest.xml
rename to inspection/inspection-gradle-plugin/src/test/test-data/lib-inspector/src/main/AndroidManifest.xml
index 148c23e..f04d862 100644
--- a/inspection/inspection-gradle-plugin/src/test/test-data/app-project/src/main/AndroidManifest.xml
+++ b/inspection/inspection-gradle-plugin/src/test/test-data/lib-inspector/src/main/AndroidManifest.xml
@@ -14,6 +14,5 @@
   See the License for the specific language governing permissions and
   limitations under the License.
   -->
-<manifest xmlns:android="http://schemas.android.com/apk/res/android"
-    package="androidx.inspection.test.project">
+<manifest xmlns:android="http://schemas.android.com/apk/res/android">
 </manifest>
diff --git a/inspection/inspection-gradle-plugin/src/test/test-data/app-project/src/main/java/test/inspector/TestInspector.java b/inspection/inspection-gradle-plugin/src/test/test-data/lib-inspector/src/main/java/test/inspector/TestInspector.java
similarity index 100%
rename from inspection/inspection-gradle-plugin/src/test/test-data/app-project/src/main/java/test/inspector/TestInspector.java
rename to inspection/inspection-gradle-plugin/src/test/test-data/lib-inspector/src/main/java/test/inspector/TestInspector.java
diff --git a/inspection/inspection-gradle-plugin/src/test/test-data/app-project/src/main/proto/test_protocol.proto b/inspection/inspection-gradle-plugin/src/test/test-data/lib-inspector/src/main/proto/test_protocol.proto
similarity index 100%
rename from inspection/inspection-gradle-plugin/src/test/test-data/app-project/src/main/proto/test_protocol.proto
rename to inspection/inspection-gradle-plugin/src/test/test-data/lib-inspector/src/main/proto/test_protocol.proto
diff --git a/inspection/inspection-gradle-plugin/src/test/test-data/app-project/src/main/AndroidManifest.xml b/inspection/inspection-gradle-plugin/src/test/test-data/lib/src/main/AndroidManifest.xml
similarity index 92%
copy from inspection/inspection-gradle-plugin/src/test/test-data/app-project/src/main/AndroidManifest.xml
copy to inspection/inspection-gradle-plugin/src/test/test-data/lib/src/main/AndroidManifest.xml
index 148c23e..f04d862 100644
--- a/inspection/inspection-gradle-plugin/src/test/test-data/app-project/src/main/AndroidManifest.xml
+++ b/inspection/inspection-gradle-plugin/src/test/test-data/lib/src/main/AndroidManifest.xml
@@ -14,6 +14,5 @@
   See the License for the specific language governing permissions and
   limitations under the License.
   -->
-<manifest xmlns:android="http://schemas.android.com/apk/res/android"
-    package="androidx.inspection.test.project">
+<manifest xmlns:android="http://schemas.android.com/apk/res/android">
 </manifest>
diff --git a/inspection/inspection-gradle-plugin/src/test/test-data/settings.gradle b/inspection/inspection-gradle-plugin/src/test/test-data/settings.gradle
new file mode 100644
index 0000000..94ec3be
--- /dev/null
+++ b/inspection/inspection-gradle-plugin/src/test/test-data/settings.gradle
@@ -0,0 +1,3 @@
+rootProject.name = "inspection-plugin-test"
+include "lib"
+include "lib-inspector"
\ No newline at end of file
diff --git a/javascriptengine/javascriptengine/api/aidlRelease/current/org/chromium/android_webview/js_sandbox/common/IJsSandboxIsolateSyncCallback.aidl b/javascriptengine/javascriptengine/api/aidlRelease/current/org/chromium/android_webview/js_sandbox/common/IJsSandboxIsolateSyncCallback.aidl
index 2235d47..84914ad 100644
--- a/javascriptengine/javascriptengine/api/aidlRelease/current/org/chromium/android_webview/js_sandbox/common/IJsSandboxIsolateSyncCallback.aidl
+++ b/javascriptengine/javascriptengine/api/aidlRelease/current/org/chromium/android_webview/js_sandbox/common/IJsSandboxIsolateSyncCallback.aidl
@@ -38,4 +38,5 @@
   void reportErrorWithFd(int errorType, in android.content.res.AssetFileDescriptor afd) = 3;
   const int JS_EVALUATION_ERROR = 0;
   const int MEMORY_LIMIT_EXCEEDED = 1;
+  const int FILE_DESCRIPTOR_IO_ERROR = 2;
 }
diff --git a/javascriptengine/javascriptengine/api/aidlRelease/current/org/chromium/android_webview/js_sandbox/common/IJsSandboxService.aidl b/javascriptengine/javascriptengine/api/aidlRelease/current/org/chromium/android_webview/js_sandbox/common/IJsSandboxService.aidl
index 78a0831..2c024c8 100644
--- a/javascriptengine/javascriptengine/api/aidlRelease/current/org/chromium/android_webview/js_sandbox/common/IJsSandboxService.aidl
+++ b/javascriptengine/javascriptengine/api/aidlRelease/current/org/chromium/android_webview/js_sandbox/common/IJsSandboxService.aidl
@@ -44,4 +44,5 @@
   const String EVALUATE_WITHOUT_TRANSACTION_LIMIT = "EVALUATE_WITHOUT_TRANSACTION_LIMIT";
   const String CONSOLE_MESSAGING = "CONSOLE_MESSAGING";
   const String ISOLATE_CLIENT = "ISOLATE_CLIENT";
+  const String EVALUATE_FROM_FD = "EVALUATE_FROM_FD";
 }
diff --git a/javascriptengine/javascriptengine/api/current.txt b/javascriptengine/javascriptengine/api/current.txt
index 77b4206c..19d2a86 100644
--- a/javascriptengine/javascriptengine/api/current.txt
+++ b/javascriptengine/javascriptengine/api/current.txt
@@ -52,6 +52,8 @@
   public final class JavaScriptIsolate implements java.lang.AutoCloseable {
     method @RequiresFeature(name=androidx.javascriptengine.JavaScriptSandbox.JS_FEATURE_CONSOLE_MESSAGING, enforcement="androidx.javascriptengine.JavaScriptSandbox#isFeatureSupported") public void clearConsoleCallback();
     method public void close();
+    method @RequiresFeature(name=androidx.javascriptengine.JavaScriptSandbox.JS_FEATURE_EVALUATE_FROM_FD, enforcement="androidx.javascriptengine.JavaScriptSandbox#isFeatureSupported") public com.google.common.util.concurrent.ListenableFuture<java.lang.String!> evaluateJavaScriptAsync(android.content.res.AssetFileDescriptor);
+    method @RequiresFeature(name=androidx.javascriptengine.JavaScriptSandbox.JS_FEATURE_EVALUATE_FROM_FD, enforcement="androidx.javascriptengine.JavaScriptSandbox#isFeatureSupported") public com.google.common.util.concurrent.ListenableFuture<java.lang.String!> evaluateJavaScriptAsync(android.os.ParcelFileDescriptor);
     method public com.google.common.util.concurrent.ListenableFuture<java.lang.String!> evaluateJavaScriptAsync(String);
     method @RequiresFeature(name=androidx.javascriptengine.JavaScriptSandbox.JS_FEATURE_PROVIDE_CONSUME_ARRAY_BUFFER, enforcement="androidx.javascriptengine.JavaScriptSandbox#isFeatureSupported") public boolean provideNamedData(String, byte[]);
     method @RequiresFeature(name=androidx.javascriptengine.JavaScriptSandbox.JS_FEATURE_CONSOLE_MESSAGING, enforcement="androidx.javascriptengine.JavaScriptSandbox#isFeatureSupported") public void setConsoleCallback(androidx.javascriptengine.JavaScriptConsoleCallback);
@@ -66,6 +68,7 @@
     method public boolean isFeatureSupported(String);
     method public static boolean isSupported();
     field public static final String JS_FEATURE_CONSOLE_MESSAGING = "JS_FEATURE_CONSOLE_MESSAGING";
+    field public static final String JS_FEATURE_EVALUATE_FROM_FD = "JS_FEATURE_EVALUATE_FROM_FD";
     field public static final String JS_FEATURE_EVALUATE_WITHOUT_TRANSACTION_LIMIT = "JS_FEATURE_EVALUATE_WITHOUT_TRANSACTION_LIMIT";
     field public static final String JS_FEATURE_ISOLATE_MAX_HEAP_SIZE = "JS_FEATURE_ISOLATE_MAX_HEAP_SIZE";
     field public static final String JS_FEATURE_ISOLATE_TERMINATION = "JS_FEATURE_ISOLATE_TERMINATION";
diff --git a/javascriptengine/javascriptengine/api/restricted_current.txt b/javascriptengine/javascriptengine/api/restricted_current.txt
index 77b4206c..19d2a86 100644
--- a/javascriptengine/javascriptengine/api/restricted_current.txt
+++ b/javascriptengine/javascriptengine/api/restricted_current.txt
@@ -52,6 +52,8 @@
   public final class JavaScriptIsolate implements java.lang.AutoCloseable {
     method @RequiresFeature(name=androidx.javascriptengine.JavaScriptSandbox.JS_FEATURE_CONSOLE_MESSAGING, enforcement="androidx.javascriptengine.JavaScriptSandbox#isFeatureSupported") public void clearConsoleCallback();
     method public void close();
+    method @RequiresFeature(name=androidx.javascriptengine.JavaScriptSandbox.JS_FEATURE_EVALUATE_FROM_FD, enforcement="androidx.javascriptengine.JavaScriptSandbox#isFeatureSupported") public com.google.common.util.concurrent.ListenableFuture<java.lang.String!> evaluateJavaScriptAsync(android.content.res.AssetFileDescriptor);
+    method @RequiresFeature(name=androidx.javascriptengine.JavaScriptSandbox.JS_FEATURE_EVALUATE_FROM_FD, enforcement="androidx.javascriptengine.JavaScriptSandbox#isFeatureSupported") public com.google.common.util.concurrent.ListenableFuture<java.lang.String!> evaluateJavaScriptAsync(android.os.ParcelFileDescriptor);
     method public com.google.common.util.concurrent.ListenableFuture<java.lang.String!> evaluateJavaScriptAsync(String);
     method @RequiresFeature(name=androidx.javascriptengine.JavaScriptSandbox.JS_FEATURE_PROVIDE_CONSUME_ARRAY_BUFFER, enforcement="androidx.javascriptengine.JavaScriptSandbox#isFeatureSupported") public boolean provideNamedData(String, byte[]);
     method @RequiresFeature(name=androidx.javascriptengine.JavaScriptSandbox.JS_FEATURE_CONSOLE_MESSAGING, enforcement="androidx.javascriptengine.JavaScriptSandbox#isFeatureSupported") public void setConsoleCallback(androidx.javascriptengine.JavaScriptConsoleCallback);
@@ -66,6 +68,7 @@
     method public boolean isFeatureSupported(String);
     method public static boolean isSupported();
     field public static final String JS_FEATURE_CONSOLE_MESSAGING = "JS_FEATURE_CONSOLE_MESSAGING";
+    field public static final String JS_FEATURE_EVALUATE_FROM_FD = "JS_FEATURE_EVALUATE_FROM_FD";
     field public static final String JS_FEATURE_EVALUATE_WITHOUT_TRANSACTION_LIMIT = "JS_FEATURE_EVALUATE_WITHOUT_TRANSACTION_LIMIT";
     field public static final String JS_FEATURE_ISOLATE_MAX_HEAP_SIZE = "JS_FEATURE_ISOLATE_MAX_HEAP_SIZE";
     field public static final String JS_FEATURE_ISOLATE_TERMINATION = "JS_FEATURE_ISOLATE_TERMINATION";
diff --git a/javascriptengine/javascriptengine/build.gradle b/javascriptengine/javascriptengine/build.gradle
index da6e844..b6684a5 100644
--- a/javascriptengine/javascriptengine/build.gradle
+++ b/javascriptengine/javascriptengine/build.gradle
@@ -49,6 +49,9 @@
             version 1
         }
     }
+    aaptOptions {
+        noCompress 'js'
+    }
     namespace "androidx.javascriptengine"
 }
 
diff --git a/bluetooth/integration-tests/testapp/src/main/java/androidx/bluetooth/integration/testapp/ui/common/ByteArray.kt b/javascriptengine/javascriptengine/src/androidTest/assets/print_hello.js
similarity index 77%
rename from bluetooth/integration-tests/testapp/src/main/java/androidx/bluetooth/integration/testapp/ui/common/ByteArray.kt
rename to javascriptengine/javascriptengine/src/androidTest/assets/print_hello.js
index 40b8f5b..e8d47d5 100644
--- a/bluetooth/integration-tests/testapp/src/main/java/androidx/bluetooth/integration/testapp/ui/common/ByteArray.kt
+++ b/javascriptengine/javascriptengine/src/androidTest/assets/print_hello.js
@@ -14,7 +14,5 @@
  * limitations under the License.
  */
 
-package androidx.bluetooth.integration.testapp.ui.common
-
-fun ByteArray.toHexString(): String =
-    joinToString(separator = " ", prefix = "0x") { String.format("%02X", it) }
+function hello() { return 'hello'; }
+hello();
diff --git a/javascriptengine/javascriptengine/src/androidTest/assets/wrong_js.txt b/javascriptengine/javascriptengine/src/androidTest/assets/wrong_js.txt
new file mode 100644
index 0000000..541b9aa
--- /dev/null
+++ b/javascriptengine/javascriptengine/src/androidTest/assets/wrong_js.txt
@@ -0,0 +1 @@
+Non javascript file.
diff --git a/javascriptengine/javascriptengine/src/androidTest/java/androidx/javascriptengine/WebViewJavaScriptSandboxTest.java b/javascriptengine/javascriptengine/src/androidTest/java/androidx/javascriptengine/WebViewJavaScriptSandboxTest.java
index d1f5af0..3de5e059 100644
--- a/javascriptengine/javascriptengine/src/androidTest/java/androidx/javascriptengine/WebViewJavaScriptSandboxTest.java
+++ b/javascriptengine/javascriptengine/src/androidTest/java/androidx/javascriptengine/WebViewJavaScriptSandboxTest.java
@@ -17,6 +17,8 @@
 package androidx.javascriptengine;
 
 import android.content.Context;
+import android.content.res.AssetFileDescriptor;
+import android.os.ParcelFileDescriptor;
 
 import androidx.annotation.GuardedBy;
 import androidx.annotation.NonNull;
@@ -35,6 +37,10 @@
 import org.junit.Test;
 import org.junit.runner.RunWith;
 
+import java.io.File;
+import java.io.FileOutputStream;
+import java.io.IOException;
+import java.io.InputStream;
 import java.nio.charset.StandardCharsets;
 import java.util.Vector;
 import java.util.concurrent.CountDownLatch;
@@ -50,6 +56,13 @@
     // and should be much smaller (for the purposes of testing).
     private static final long REASONABLE_HEAP_SIZE = 100 * 1024 * 1024;
 
+    private static class InputStreamThrowsReadError extends InputStream {
+        @Override
+        public int read() throws IOException {
+            throw new IOException("Mock InputStream read error");
+        }
+    }
+
     @Before
     public void setUp() {
         Assume.assumeTrue(JavaScriptSandbox.isSupported());
@@ -288,6 +301,52 @@
 
     @Test
     @MediumTest
+    public void testEvaluateJSFileAsAfd() throws Throwable {
+        Context context = ApplicationProvider.getApplicationContext();
+        try (AssetFileDescriptor afd = context.getAssets().openFd("print_hello.js")) {
+            ListenableFuture<JavaScriptSandbox> jsSandboxFuture =
+                    JavaScriptSandbox.createConnectedInstanceAsync(context);
+
+            try (JavaScriptSandbox jsSandbox = jsSandboxFuture.get(5, TimeUnit.SECONDS);
+                    JavaScriptIsolate jsIsolate = jsSandbox.createIsolate()) {
+                Assume.assumeTrue(jsSandbox.isFeatureSupported(
+                        JavaScriptSandbox.JS_FEATURE_EVALUATE_FROM_FD));
+                ListenableFuture<String> resultFuture = jsIsolate.evaluateJavaScriptAsync(afd);
+                String result = resultFuture.get(5, TimeUnit.SECONDS);
+                Assert.assertEquals("hello", result);
+            }
+        }
+    }
+
+    @Test
+    @MediumTest
+    public void testEvaluateJSFileAsPfd() throws Throwable {
+        Context context = ApplicationProvider.getApplicationContext();
+        String fileName  = "test_print_hello.js";
+        String fileContent = "function hello() { return 'hello'; } hello();";
+        try (FileOutputStream fos = context.openFileOutput(fileName, Context.MODE_PRIVATE)) {
+            fos.write(fileContent.getBytes(StandardCharsets.UTF_8));
+            File jsFile = new File(context.getFilesDir(), fileName);
+            try (ParcelFileDescriptor pfd = ParcelFileDescriptor.open(jsFile,
+                    ParcelFileDescriptor.MODE_READ_ONLY)) {
+                ListenableFuture<JavaScriptSandbox> jsSandboxFuture =
+                        JavaScriptSandbox.createConnectedInstanceAsync(context);
+                try (JavaScriptSandbox jsSandbox = jsSandboxFuture.get(5, TimeUnit.SECONDS);
+                        JavaScriptIsolate jsIsolate = jsSandbox.createIsolate()) {
+                    Assume.assumeTrue(jsSandbox.isFeatureSupported(
+                            JavaScriptSandbox.JS_FEATURE_EVALUATE_FROM_FD));
+                    ListenableFuture<String> resultFuture = jsIsolate.evaluateJavaScriptAsync(pfd);
+                    String result = resultFuture.get(5, TimeUnit.SECONDS);
+                    Assert.assertEquals("hello", result);
+                }
+            } finally {
+                jsFile.delete();
+            }
+        }
+    }
+
+    @Test
+    @MediumTest
     public void testArrayBufferWasmCompilation() throws Throwable {
         final String success = "success";
         // The bytes of a minimal WebAssembly module, courtesy of v8/test/cctest/test-api-wasm.cc
@@ -672,7 +731,7 @@
 
     @Test
     @LargeTest
-    public void testIsolateCreationAfterCrash() throws Throwable {
+    public void testIsolateCreationAfterOom() throws Throwable {
         final long maxHeapSize = REASONABLE_HEAP_SIZE;
         // We need to beat the v8 optimizer to ensure it really allocates the required memory. Note
         // that we're allocating an array of elements - not bytes. Filling will ensure that the
@@ -710,17 +769,23 @@
                     }
                 }
 
-                final CountDownLatch latch = new CountDownLatch(1);
+                final CountDownLatch latch1 = new CountDownLatch(1);
                 jsIsolate1.addOnTerminatedCallback(Runnable::run, info -> {
                     Assert.assertEquals(TerminationInfo.STATUS_MEMORY_LIMIT_EXCEEDED,
                             info.getStatus());
-                    latch.countDown();
+                    latch1.countDown();
                 });
-                Assert.assertTrue(latch.await(5, TimeUnit.SECONDS));
+                Assert.assertTrue(latch1.await(5, TimeUnit.SECONDS));
 
-                // Check that new isolates can no longer be created in the same sandbox.
-                Assert.assertThrows(IllegalStateException.class,
-                        () -> jsSandbox.createIsolate(isolateStartupParameters));
+                // Check that new isolates can still be created in the sandbox but are created dead.
+                final JavaScriptIsolate jsIsolate2 = jsSandbox.createIsolate();
+                final CountDownLatch latch2 = new CountDownLatch(1);
+                jsIsolate2.addOnTerminatedCallback(Runnable::run, info -> {
+                    Assert.assertEquals(TerminationInfo.STATUS_SANDBOX_DEAD,
+                            info.getStatus());
+                    latch2.countDown();
+                });
+                Assert.assertTrue(latch2.await(5, TimeUnit.SECONDS));
             }
         }
 
@@ -737,6 +802,50 @@
     }
 
     @Test
+    @LargeTest
+    public void testIsolateCreationAfterDeath() throws Throwable {
+        Context context = ApplicationProvider.getApplicationContext();
+        ListenableFuture<JavaScriptSandbox> jsSandboxFuture =
+                JavaScriptSandbox.createConnectedInstanceAsync(context);
+        try (JavaScriptSandbox jsSandbox = jsSandboxFuture.get(5, TimeUnit.SECONDS)) {
+            jsSandbox.killImmediatelyOnThread();
+            try (JavaScriptIsolate jsIsolate = jsSandbox.createIsolate()) {
+                final CountDownLatch latch = new CountDownLatch(1);
+                jsIsolate.addOnTerminatedCallback(Runnable::run, info -> {
+                    Assert.assertEquals(TerminationInfo.STATUS_SANDBOX_DEAD,
+                            info.getStatus());
+                    Assert.assertEquals("sandbox was dead before call to createIsolate",
+                            info.getMessage());
+                    latch.countDown();
+                });
+                Assert.assertTrue(latch.await(5, TimeUnit.SECONDS));
+            }
+        }
+    }
+
+    @Test
+    @LargeTest
+    public void testIsolateCreationAfterUnbinding() throws Throwable {
+        Context context = ApplicationProvider.getApplicationContext();
+        ListenableFuture<JavaScriptSandbox> jsSandboxFuture =
+                JavaScriptSandbox.createConnectedInstanceAsync(context);
+        try (JavaScriptSandbox jsSandbox = jsSandboxFuture.get(5, TimeUnit.SECONDS)) {
+            jsSandbox.unbindService();
+            try (JavaScriptIsolate jsIsolate = jsSandbox.createIsolate()) {
+                final CountDownLatch latch = new CountDownLatch(1);
+                jsIsolate.addOnTerminatedCallback(Runnable::run, info -> {
+                    Assert.assertEquals(TerminationInfo.STATUS_SANDBOX_DEAD,
+                            info.getStatus());
+                    Assert.assertEquals("sandbox found dead during call to createIsolate",
+                            info.getMessage());
+                    latch.countDown();
+                });
+                Assert.assertTrue(latch.await(5, TimeUnit.SECONDS));
+            }
+        }
+    }
+
+    @Test
     @MediumTest
     public void testAsyncPromiseCallbacks() throws Throwable {
         // Unlike testPromiseReturn and testPromiseEvaluationThrow, this test is guaranteed to
@@ -1159,7 +1268,7 @@
                     latch.countDown();
                 });
 
-                jsSandbox.close();
+                jsSandbox.killImmediatelyOnThread();
 
                 Assert.assertTrue(latch.await(5, TimeUnit.SECONDS));
             }
diff --git a/javascriptengine/javascriptengine/src/main/java/androidx/javascriptengine/EnvironmentDeadState.java b/javascriptengine/javascriptengine/src/main/java/androidx/javascriptengine/EnvironmentDeadState.java
index c10d56fd..74ce8a0 100644
--- a/javascriptengine/javascriptengine/src/main/java/androidx/javascriptengine/EnvironmentDeadState.java
+++ b/javascriptengine/javascriptengine/src/main/java/androidx/javascriptengine/EnvironmentDeadState.java
@@ -16,6 +16,9 @@
 
 package androidx.javascriptengine;
 
+import android.content.res.AssetFileDescriptor;
+import android.os.ParcelFileDescriptor;
+
 import androidx.annotation.NonNull;
 import androidx.concurrent.futures.CallbackToFutureAdapter;
 import androidx.core.util.Consumer;
@@ -44,11 +47,19 @@
     @NonNull
     @Override
     public ListenableFuture<String> evaluateJavaScriptAsync(@NonNull String code) {
-        return CallbackToFutureAdapter.getFuture(completer -> {
-            final String futureDebugMessage = "evaluateJavascript Future";
-            completer.setException(mTerminationInfo.toJavaScriptException());
-            return futureDebugMessage;
-        });
+        return getEnvironmentDeadFuture();
+    }
+
+    @NonNull
+    @Override
+    public ListenableFuture<String> evaluateJavaScriptAsync(@NonNull AssetFileDescriptor afd) {
+        return getEnvironmentDeadFuture();
+    }
+
+    @NonNull
+    @Override
+    public ListenableFuture<String> evaluateJavaScriptAsync(@NonNull ParcelFileDescriptor pfd) {
+        return getEnvironmentDeadFuture();
     }
 
     @Override
@@ -86,4 +97,12 @@
 
     @Override
     public void removeOnTerminatedCallback(@NonNull Consumer<TerminationInfo> callback) {}
+
+    private ListenableFuture<String> getEnvironmentDeadFuture() {
+        return CallbackToFutureAdapter.getFuture(completer -> {
+            final String futureDebugMessage = "evaluateJavascript Future";
+            completer.setException(mTerminationInfo.toJavaScriptException());
+            return futureDebugMessage;
+        });
+    }
 }
diff --git a/javascriptengine/javascriptengine/src/main/java/androidx/javascriptengine/FileDescriptorIOException.java b/javascriptengine/javascriptengine/src/main/java/androidx/javascriptengine/FileDescriptorIOException.java
new file mode 100644
index 0000000..d87dd72
--- /dev/null
+++ b/javascriptengine/javascriptengine/src/main/java/androidx/javascriptengine/FileDescriptorIOException.java
@@ -0,0 +1,36 @@
+/*
+ * 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.javascriptengine;
+
+import androidx.annotation.NonNull;
+import androidx.annotation.RestrictTo;
+
+/**
+ * Indicates that streaming JavaScript code into the JS evaluation environment has failed.
+ *
+ * The JavaScript isolate may continue to be used after this exception has been thrown. The
+ * JavaScript evaluation will not proceed if the JavaScript code streaming fails.
+ */
+@RestrictTo(RestrictTo.Scope.LIBRARY)
+public final class FileDescriptorIOException extends JavaScriptException {
+    public FileDescriptorIOException(@NonNull String error) {
+        super(error);
+    }
+    public FileDescriptorIOException() {
+        super();
+    }
+}
diff --git a/javascriptengine/javascriptengine/src/main/java/androidx/javascriptengine/IsolateClosedState.java b/javascriptengine/javascriptengine/src/main/java/androidx/javascriptengine/IsolateClosedState.java
index ba944b1..58f204b 100644
--- a/javascriptengine/javascriptengine/src/main/java/androidx/javascriptengine/IsolateClosedState.java
+++ b/javascriptengine/javascriptengine/src/main/java/androidx/javascriptengine/IsolateClosedState.java
@@ -16,6 +16,9 @@
 
 package androidx.javascriptengine;
 
+import android.content.res.AssetFileDescriptor;
+import android.os.ParcelFileDescriptor;
+
 import androidx.annotation.NonNull;
 import androidx.core.util.Consumer;
 
@@ -43,6 +46,20 @@
                 "Calling evaluateJavaScriptAsync() when " + mDescription);
     }
 
+    @NonNull
+    @Override
+    public ListenableFuture<String> evaluateJavaScriptAsync(@NonNull AssetFileDescriptor afd) {
+        throw new IllegalStateException(
+                "Calling evaluateJavaScriptAsync() when " + mDescription);
+    }
+
+    @NonNull
+    @Override
+    public ListenableFuture<String> evaluateJavaScriptAsync(@NonNull ParcelFileDescriptor pfd) {
+        throw new IllegalStateException(
+                "Calling evaluateJavaScriptAsync() when " + mDescription);
+    }
+
     @Override
     public void setConsoleCallback(@NonNull Executor executor,
             @NonNull JavaScriptConsoleCallback callback) {
diff --git a/javascriptengine/javascriptengine/src/main/java/androidx/javascriptengine/IsolateState.java b/javascriptengine/javascriptengine/src/main/java/androidx/javascriptengine/IsolateState.java
index 6188bc9..2ac876a 100644
--- a/javascriptengine/javascriptengine/src/main/java/androidx/javascriptengine/IsolateState.java
+++ b/javascriptengine/javascriptengine/src/main/java/androidx/javascriptengine/IsolateState.java
@@ -16,6 +16,9 @@
 
 package androidx.javascriptengine;
 
+import android.content.res.AssetFileDescriptor;
+import android.os.ParcelFileDescriptor;
+
 import androidx.annotation.NonNull;
 import androidx.core.util.Consumer;
 
@@ -38,6 +41,12 @@
     @NonNull
     ListenableFuture<String> evaluateJavaScriptAsync(@NonNull String code);
 
+    @NonNull
+    ListenableFuture<String> evaluateJavaScriptAsync(@NonNull AssetFileDescriptor afd);
+
+    @NonNull
+    ListenableFuture<String> evaluateJavaScriptAsync(@NonNull ParcelFileDescriptor pfd);
+
     void setConsoleCallback(@NonNull Executor executor,
             @NonNull JavaScriptConsoleCallback callback);
 
diff --git a/javascriptengine/javascriptengine/src/main/java/androidx/javascriptengine/IsolateUsableState.java b/javascriptengine/javascriptengine/src/main/java/androidx/javascriptengine/IsolateUsableState.java
index 8f7f2f9..eceddcb 100644
--- a/javascriptengine/javascriptengine/src/main/java/androidx/javascriptengine/IsolateUsableState.java
+++ b/javascriptengine/javascriptengine/src/main/java/androidx/javascriptengine/IsolateUsableState.java
@@ -19,6 +19,7 @@
 import android.content.res.AssetFileDescriptor;
 import android.os.Binder;
 import android.os.DeadObjectException;
+import android.os.ParcelFileDescriptor;
 import android.os.RemoteException;
 import android.util.Log;
 
@@ -265,6 +266,37 @@
         });
     }
 
+    @NonNull
+    @Override
+    public ListenableFuture<String> evaluateJavaScriptAsync(@NonNull AssetFileDescriptor afd) {
+        return CallbackToFutureAdapter.getFuture(completer -> {
+            final String futureDebugMessage = "evaluateJavascript Future";
+            IJsSandboxIsolateSyncCallbackStubWrapper callbackStub =
+                    new IJsSandboxIsolateSyncCallbackStubWrapper(completer);
+            try {
+                mJsIsolateStub.evaluateJavascriptWithFd(afd, callbackStub);
+                addPending(completer);
+            } catch (DeadObjectException e) {
+                // The sandbox process has died.
+                mJsIsolate.maybeSetSandboxDead();
+                completer.setException(new SandboxDeadException());
+            } catch (RemoteException e) {
+                completer.setException(new RuntimeException(e));
+            }
+            // Debug string.
+            return futureDebugMessage;
+        });
+    }
+
+    @NonNull
+    @Override
+    public ListenableFuture<String> evaluateJavaScriptAsync(@NonNull ParcelFileDescriptor pfd) {
+        long length = pfd.getStatSize() >= 0 ? pfd.getStatSize() :
+                AssetFileDescriptor.UNKNOWN_LENGTH;
+        AssetFileDescriptor wrapperAfd = new AssetFileDescriptor(pfd, 0, length);
+        return evaluateJavaScriptAsync(wrapperAfd);
+    }
+
     @Override
     public void setConsoleCallback(@NonNull Executor executor,
             @NonNull JavaScriptConsoleCallback callback) {
@@ -358,6 +390,9 @@
                 // the app to have already set up a race condition.
                 completer.setException(terminationInfo.toJavaScriptException());
                 break;
+            case IJsSandboxIsolateSyncCallback.FILE_DESCRIPTOR_IO_ERROR:
+                completer.setException(new FileDescriptorIOException(error));
+                break;
             default:
                 completer.setException(new JavaScriptException(
                         "Unknown error: code " + type + ": " + error));
diff --git a/javascriptengine/javascriptengine/src/main/java/androidx/javascriptengine/JavaScriptIsolate.java b/javascriptengine/javascriptengine/src/main/java/androidx/javascriptengine/JavaScriptIsolate.java
index ab19538..dc43886 100644
--- a/javascriptengine/javascriptengine/src/main/java/androidx/javascriptengine/JavaScriptIsolate.java
+++ b/javascriptengine/javascriptengine/src/main/java/androidx/javascriptengine/JavaScriptIsolate.java
@@ -16,7 +16,9 @@
 
 package androidx.javascriptengine;
 
+import android.content.res.AssetFileDescriptor;
 import android.os.Binder;
+import android.os.ParcelFileDescriptor;
 import android.os.RemoteException;
 import android.util.Log;
 
@@ -37,7 +39,7 @@
 import javax.annotation.concurrent.GuardedBy;
 
 /**
- * Environment within a {@link JavaScriptSandbox} where Javascript is executed.
+ * Environment within a {@link JavaScriptSandbox} where JavaScript is executed.
  * <p>
  * A single {@link JavaScriptSandbox} process can contain any number of {@link JavaScriptIsolate}
  * instances where JS can be evaluated independently and in parallel.
@@ -84,6 +86,20 @@
             IsolateStartupParameters settings) throws RemoteException {
         final JavaScriptIsolate isolate = new JavaScriptIsolate(sandbox);
         isolate.initialize(settings);
+        isolate.mGuard.open("close");
+        return isolate;
+    }
+
+    @NonNull
+    static JavaScriptIsolate createDead(@NonNull JavaScriptSandbox sandbox,
+            @NonNull String message) {
+        final JavaScriptIsolate isolate = new JavaScriptIsolate(sandbox);
+        final TerminationInfo terminationInfo =
+                new TerminationInfo(TerminationInfo.STATUS_SANDBOX_DEAD, message);
+        synchronized (isolate.mLock) {
+            isolate.mIsolateState = new EnvironmentDeadState(terminationInfo);
+        }
+        isolate.mGuard.open("close");
         return isolate;
     }
 
@@ -110,7 +126,6 @@
                     instanceCallback);
             mIsolateState = new IsolateUsableState(this, jsIsolateStub,
                     settings.getMaxEvaluationReturnSizeBytes());
-            mGuard.open("close");
         }
     }
 
@@ -211,6 +226,74 @@
     }
 
     /**
+     * Reads and evaluates the JavaScript code in the file described by the given
+     * AssetFileDescriptor.
+     * <p>
+     * Please refer to the documentation of {@link #evaluateJavaScriptAsync(String)} as the
+     * behavior of this method is similar other than for the input type.
+     * <p>
+     * This API exposes the underlying file to the service. In case the service process is
+     * compromised for unforeseen reasons, it might be able to read from the {@code
+     * AssetFileDescriptor} beyond the given length and offset.  This API does <strong> not
+     * </strong> close the given {@code AssetFileDescriptor}.
+     * <p>
+     * <strong>Note: The underlying file must be UTF-8 encoded.</strong>
+     * <p>
+     * This overload is useful when the source of the data is easily readable as a
+     * {@code AssetFileDescriptor}, e.g. an asset or raw resource.
+     *
+     * @param afd An {@code AssetFileDescriptor} for a file containing UTF-8 encoded JavaScript
+     *            code that is evaluated. Returns a String or a Promise of a String in case
+     *            {@link JavaScriptSandbox#JS_FEATURE_PROMISE_RETURN} is supported
+     * @return Future that evaluates to the result String of the evaluation or exceptions (see
+     * {@link JavaScriptException} and subclasses) if there is an error
+     */
+    @SuppressWarnings("NullAway")
+    @NonNull
+    @RequiresFeature(name = JavaScriptSandbox.JS_FEATURE_EVALUATE_FROM_FD,
+            enforcement = "androidx.javascriptengine.JavaScriptSandbox#isFeatureSupported")
+    public ListenableFuture<String> evaluateJavaScriptAsync(@NonNull AssetFileDescriptor afd) {
+        Objects.requireNonNull(afd);
+        synchronized (mLock) {
+            return mIsolateState.evaluateJavaScriptAsync(afd);
+        }
+    }
+
+    /**
+     * Reads and evaluates the JavaScript code in the file described by the given
+     * {@code ParcelFileDescriptor}.
+     * <p>
+     * Please refer to the documentation of {@link #evaluateJavaScriptAsync(String)} as the
+     * behavior of this method is similar other than for the input type.
+     * <p>
+     * This API exposes the underlying file to the service. In case the service process is
+     * compromised for unforeseen reasons, it might be able to read from the {@code
+     * ParcelFileDescriptor} beyond the given length and offset. This API does <strong> not
+     * </strong> close the given {@code ParcelFileDescriptor}.
+     * <p>
+     * <strong>Note: The underlying file must be UTF-8 encoded.</strong>
+     * <p>
+     * This overload is useful when the source of the data is easily readable as a
+     * {@code ParcelFileDescriptor}, e.g. a file from shared memory or the app's data directory.
+     *
+     * @param pfd A {@code ParcelFileDescriptor} for a file containing UTF-8 encoded JavaScript
+     *            code that is evaluated. Returns a String or a Promise of a String in case
+     *             {@link JavaScriptSandbox#JS_FEATURE_PROMISE_RETURN} is supported
+     * @return Future that evaluates to the result String of the evaluation or exceptions (see
+     * {@link JavaScriptException} and subclasses) if there is an error
+     */
+    @SuppressWarnings("NullAway")
+    @NonNull
+    @RequiresFeature(name = JavaScriptSandbox.JS_FEATURE_EVALUATE_FROM_FD,
+            enforcement = "androidx.javascriptengine.JavaScriptSandbox#isFeatureSupported")
+    public ListenableFuture<String> evaluateJavaScriptAsync(@NonNull ParcelFileDescriptor pfd) {
+        Objects.requireNonNull(pfd);
+        synchronized (mLock) {
+            return mIsolateState.evaluateJavaScriptAsync(pfd);
+        }
+    }
+
+    /**
      * Closes the {@link JavaScriptIsolate} object and renders it unusable.
      * <p>
      * Once closed, no more method calls should be made. Pending evaluations will reject with
@@ -227,9 +310,13 @@
      */
     @Override
     public void close() {
+        closeWithDescription("isolate closed");
+    }
+
+    void closeWithDescription(@NonNull String description) {
         synchronized (mLock) {
             mIsolateState.close();
-            mIsolateState = new IsolateClosedState("isolate closed");
+            mIsolateState = new IsolateClosedState(description);
         }
         // Do not hold mLock whilst calling into JavaScriptSandbox, as JavaScriptSandbox also has
         // its own lock and may want to call into JavaScriptIsolate from another thread.
diff --git a/javascriptengine/javascriptengine/src/main/java/androidx/javascriptengine/JavaScriptSandbox.java b/javascriptengine/javascriptengine/src/main/java/androidx/javascriptengine/JavaScriptSandbox.java
index 8a5c048..2919740 100644
--- a/javascriptengine/javascriptengine/src/main/java/androidx/javascriptengine/JavaScriptSandbox.java
+++ b/javascriptengine/javascriptengine/src/main/java/androidx/javascriptengine/JavaScriptSandbox.java
@@ -21,8 +21,10 @@
 import android.content.Intent;
 import android.content.ServiceConnection;
 import android.content.pm.PackageInfo;
+import android.os.DeadObjectException;
 import android.os.IBinder;
 import android.os.RemoteException;
+import android.util.Log;
 import android.webkit.WebView;
 
 import androidx.annotation.NonNull;
@@ -81,6 +83,7 @@
  * {@link JavaScriptIsolate} object cannot be shared.
  */
 public final class JavaScriptSandbox implements AutoCloseable {
+    private static final String TAG = "JavaScriptSandbox";
     // TODO(crbug.com/1297672): Add capability to this class to support spawning
     // different processes as needed. This might require that we have a static
     // variable in here that tracks the existing services we are connected to and
@@ -92,10 +95,9 @@
     private final Object mLock = new Object();
     private final CloseGuardHelper mGuard = CloseGuardHelper.create();
 
-    // This is null iff the sandbox is closed.
-    @Nullable
+    @NonNull
     @GuardedBy("mLock")
-    private IJsSandboxService mJsSandboxService;
+    private final IJsSandboxService mJsSandboxService;
 
     // Don't use mLock for the connection, allowing it to be severed at any time, regardless of
     // the status of the main mLock. Use an AtomicReference instead.
@@ -111,6 +113,16 @@
     @NonNull
     private Set<JavaScriptIsolate> mActiveIsolateSet;
 
+    private enum State {
+        ALIVE,
+        DEAD,
+        CLOSED,
+    }
+
+    @GuardedBy("mLock")
+    @NonNull
+    private State mState;
+
     final ExecutorService mThreadPoolTaskExecutor =
             Executors.newCachedThreadPool(new ThreadFactory() {
                 private final AtomicInteger mCount = new AtomicInteger(1);
@@ -135,6 +147,7 @@
                     JS_FEATURE_EVALUATE_WITHOUT_TRANSACTION_LIMIT,
                     JS_FEATURE_CONSOLE_MESSAGING,
                     JS_FEATURE_ISOLATE_CLIENT,
+                    JS_FEATURE_EVALUATE_FROM_FD,
             })
     @Retention(RetentionPolicy.SOURCE)
     @Target({ElementType.PARAMETER, ElementType.METHOD})
@@ -222,6 +235,15 @@
     static final String JS_FEATURE_ISOLATE_CLIENT =
             "JS_FEATURE_ISOLATE_CLIENT";
 
+    /**
+     * When this feature is present,
+     * {@link JavaScriptIsolate#evaluateJavaScriptAsync(android.content.res.AssetFileDescriptor)},
+     * and {@link JavaScriptIsolate#evaluateJavaScriptAsync(android.os.ParcelFileDescriptor)}
+     * can be used to evaluate JavaScript code of known and unknown length from file descriptors.
+     */
+    public static final String JS_FEATURE_EVALUATE_FROM_FD =
+            "JS_FEATURE_EVALUATE_FROM_FD";
+
     // This set must not be modified after JavaScriptSandbox construction.
     @NonNull
     private final HashSet<String> mClientSideFeatureSet;
@@ -268,7 +290,7 @@
         @Override
         public void onBindingDied(ComponentName name) {
             runShutdownTasks(
-                    new RuntimeException("JavaScriptSandbox internal error: onBindingDead()"));
+                    new RuntimeException("JavaScriptSandbox internal error: onBindingDied()"));
         }
 
         @Override
@@ -279,7 +301,8 @@
 
         private void runShutdownTasks(@NonNull Exception e) {
             if (mJsSandbox != null) {
-                mJsSandbox.close();
+                Log.e(TAG, "Sandbox has died", e);
+                mJsSandbox.killImmediatelyOnThread();
             } else {
                 mContext.unbindService(this);
                 sIsReadyToConnect.set(true);
@@ -419,6 +442,7 @@
         final List<String> features = mJsSandboxService.getSupportedFeatures();
         mClientSideFeatureSet = buildClientSideFeatureSet(features);
         mActiveIsolateSet = new HashSet<>();
+        mState = State.ALIVE;
         mGuard.open("close");
         // This should be at the end of the constructor.
     }
@@ -435,6 +459,9 @@
     /**
      * Creates and returns an {@link JavaScriptIsolate} within which JS can be executed with the
      * specified settings.
+     * <p>
+     * If the sandbox is dead, this will still return an isolate, but evaluations will fail with
+     * {@link SandboxDeadException}.
      *
      * @param settings configuration used to set up the isolate
      */
@@ -442,18 +469,28 @@
     public JavaScriptIsolate createIsolate(@NonNull IsolateStartupParameters settings) {
         Objects.requireNonNull(settings);
         synchronized (mLock) {
-            // TODO(b/290750354, b/290749782): Implement separate closed vs dead state and use
-            //  that instead of a mConnection nullness check.
-            if (mJsSandboxService == null || mConnection.get() == null) {
-                throw new IllegalStateException(
-                        "Attempting to createIsolate on a service that isn't connected");
-            }
-            final JavaScriptIsolate isolate;
-            try {
-                isolate = JavaScriptIsolate.create(this, settings);
-            } catch (RemoteException e) {
-                // TODO(b/286055647): Handle sandbox dying during createIsolate more sensibly.
-                throw new RuntimeException(e);
+            JavaScriptIsolate isolate;
+            switch (mState) {
+                case ALIVE:
+                    try {
+                        isolate = JavaScriptIsolate.create(this, settings);
+                    } catch (DeadObjectException e) {
+                        killDueToException(e);
+                        isolate = JavaScriptIsolate.createDead(this,
+                                "sandbox found dead during call to createIsolate");
+                    } catch (RemoteException e) {
+                        killDueToException(e);
+                        throw new RuntimeException(e);
+                    }
+                    break;
+                case DEAD:
+                    isolate = JavaScriptIsolate.createDead(this,
+                            "sandbox was dead before call to createIsolate");
+                    break;
+                case CLOSED:
+                    throw new IllegalStateException("Cannot create isolate in closed sandbox");
+                default:
+                    throw new AssertionError("unreachable");
             }
             mActiveIsolateSet.add(isolate);
             return isolate;
@@ -465,7 +502,7 @@
     IJsSandboxIsolate createIsolateOnService(@NonNull IsolateStartupParameters settings,
             @Nullable IJsSandboxIsolateClient isolateInstanceCallback) throws RemoteException {
         synchronized (mLock) {
-            Objects.requireNonNull(mJsSandboxService);
+            assert mState == State.ALIVE;
             if (isFeatureSupported(JavaScriptSandbox.JS_FEATURE_ISOLATE_CLIENT)) {
                 return mJsSandboxService.createIsolate2(settings.getMaxHeapSizeBytes(),
                         isolateInstanceCallback);
@@ -501,6 +538,11 @@
         if (features.contains(IJsSandboxService.ISOLATE_CLIENT + ":DEV")) {
             featureSet.add(JS_FEATURE_ISOLATE_CLIENT);
         }
+        // Temporarily adding :DEV suffix for this feature flag
+        // TODO: Figure out a long term solution for dev flags compatible with stableAidl
+        if (features.contains(IJsSandboxService.EVALUATE_FROM_FD + ":DEV")) {
+            featureSet.add(JS_FEATURE_EVALUATE_FROM_FD);
+        }
         return featureSet;
     }
 
@@ -536,20 +578,18 @@
      * can be made. Closing terminates the isolated process immediately. All pending evaluations are
      * immediately terminated. Once closed, the client may call
      * {@link JavaScriptSandbox#createConnectedInstanceAsync(Context)} to create another
-     * {@link JavaScriptSandbox}.
+     * {@link JavaScriptSandbox}. You should still call close even if the sandbox has died,
+     * otherwise you will not be able to create a new one.
      */
     @Override
     public void close() {
         synchronized (mLock) {
-            if (mJsSandboxService == null) {
+            if (mState == State.CLOSED) {
                 return;
             }
             unbindService();
-            // Currently we consider that we are ready for a new connection once we unbind. This
-            // might not be true if the process is not immediately killed by ActivityManager once it
-            // is unbound.
             sIsReadyToConnect.set(true);
-            mJsSandboxService = null;
+            mState = State.CLOSED;
         }
         notifyIsolatesAboutClosure();
         // This is the closest thing to a .close() method for ExecutorServices. This doesn't
@@ -559,22 +599,67 @@
         mThreadPoolTaskExecutor.shutdownNow();
     }
 
-    // Unbind the service if it hasn't been unbound already.
-    private void unbindService() {
+    /**
+     * Unbind the service if it hasn't been unbound already.
+     * <p>
+     * By itself, this will not put the sandbox into an official dead state, but any subsequent
+     * interaction with the sandbox will result in a DeadObjectException. As this method does NOT
+     * trigger ConnectionSetup.onServiceDisconnected or .onBindingDied, it is also useful for
+     * testing how methods handle DeadObjectException without a race against these callbacks.
+     * <p>
+     * This will not, by itself, make JSE ready to create a new sandbox. The JavaScriptSandbox
+     * object must still be explicitly closed.
+     */
+    @RestrictTo(RestrictTo.Scope.LIBRARY)
+    @VisibleForTesting
+    public void unbindService() {
         final ConnectionSetup connection = mConnection.getAndSet(null);
         if (connection != null) {
             mContext.unbindService(connection);
         }
     }
 
-    // Kill the sandbox immediately.
-    //
-    // This will unbind the sandbox service so that any future IPC will fail immediately.
-    // However, isolates will be notified asynchronously, from the main thread.
+    /**
+     * Kill the sandbox and immediately update state and trigger callbacks/futures on the calling
+     * thread.
+     * <p>
+     * There is a risk of deadlock if this is called from an isolate-related callback. In order
+     * to kill from code holding arbitrary locks, use {@link #kill} instead.
+     */
+    @RestrictTo(RestrictTo.Scope.LIBRARY)
+    @VisibleForTesting
+    public void killImmediatelyOnThread() {
+        synchronized (mLock) {
+            if (mState != State.ALIVE) {
+                return;
+            }
+            mState = State.DEAD;
+            unbindService();
+        }
+        notifyIsolatesAboutDeath();
+    }
+
+    /**
+     * Kill the sandbox.
+     * <p>
+     * This will unbind the sandbox service so that any future IPC will fail immediately.
+     * However, isolates will be notified asynchronously, from mContext's main executor.
+     */
     void kill() {
         unbindService();
-        // TODO(b/290750354, b/290749782): Implement separate closed vs dead state.
-        getMainExecutor().execute(this::close);
+        getMainExecutor().execute(this::killImmediatelyOnThread);
+    }
+
+    /**
+     * Same as {@link #kill}, but logs information about the cause.
+     */
+    void killDueToException(Exception e) {
+        if (e instanceof DeadObjectException) {
+            Log.e(TAG, "Sandbox died before or during during remote call", e);
+        } else {
+            Log.e(TAG, "Killing sandbox due to exception", e);
+        }
+        kill();
     }
 
     private void notifyIsolatesAboutClosure() {
@@ -586,8 +671,21 @@
             mActiveIsolateSet = Collections.emptySet();
         }
         for (JavaScriptIsolate isolate : activeIsolateSet) {
-            isolate.maybeSetIsolateDead(new TerminationInfo(TerminationInfo.STATUS_SANDBOX_DEAD,
-                    "sandbox closed"));
+            final TerminationInfo terminationInfo =
+                    new TerminationInfo(TerminationInfo.STATUS_SANDBOX_DEAD, "sandbox closed");
+            isolate.maybeSetIsolateDead(terminationInfo);
+        }
+    }
+
+    private void notifyIsolatesAboutDeath() {
+        // Do not hold mLock whilst calling into JavaScriptIsolate, as JavaScriptIsolate also has
+        // its own lock and may want to call into JavaScriptSandbox from another thread.
+        final JavaScriptIsolate[] activeIsolateSet;
+        synchronized (mLock) {
+            activeIsolateSet = mActiveIsolateSet.toArray(new JavaScriptIsolate[0]);
+        }
+        for (JavaScriptIsolate isolate : activeIsolateSet) {
+            isolate.maybeSetSandboxDead();
         }
     }
 
@@ -596,11 +694,7 @@
     protected void finalize() throws Throwable {
         try {
             mGuard.warnIfOpen();
-            synchronized (mLock) {
-                if (mJsSandboxService != null) {
-                    close();
-                }
-            }
+            close();
         } finally {
             super.finalize();
         }
diff --git a/javascriptengine/javascriptengine/src/main/java/androidx/javascriptengine/StreamingFailedException.java b/javascriptengine/javascriptengine/src/main/java/androidx/javascriptengine/StreamingFailedException.java
new file mode 100644
index 0000000..c9af354
--- /dev/null
+++ b/javascriptengine/javascriptengine/src/main/java/androidx/javascriptengine/StreamingFailedException.java
@@ -0,0 +1,36 @@
+/*
+ * 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.javascriptengine;
+
+import androidx.annotation.NonNull;
+import androidx.annotation.RestrictTo;
+
+/**
+ * Indicates that streaming JavaScript code into the JS evaluation environment has failed.
+ *
+ * The JavaScript isolate may continue to be used after this exception has been thrown. The
+ * JavaScript evaluation will not proceed if the JavaScript code streaming fails.
+ */
+@RestrictTo(RestrictTo.Scope.LIBRARY)
+public final class StreamingFailedException extends JavaScriptException {
+    public StreamingFailedException(@NonNull String error) {
+        super(error);
+    }
+    public StreamingFailedException() {
+        super();
+    }
+}
diff --git a/javascriptengine/javascriptengine/src/main/java/androidx/javascriptengine/common/Utils.java b/javascriptengine/javascriptengine/src/main/java/androidx/javascriptengine/common/Utils.java
index 1aeac99..fcc2b11 100644
--- a/javascriptengine/javascriptengine/src/main/java/androidx/javascriptengine/common/Utils.java
+++ b/javascriptengine/javascriptengine/src/main/java/androidx/javascriptengine/common/Utils.java
@@ -87,14 +87,30 @@
     /**
      * Checks if the given AssetFileDescriptor passes certain conditions.
      */
-    public static void checkAssetFileDescriptor(@NonNull AssetFileDescriptor afd) {
-        if (afd.getStartOffset() != 0) {
-            throw new UnsupportedOperationException(
-                    "AssetFileDescriptor.getStartOffset() != 0");
+
+    public static void checkAssetFileDescriptor(@NonNull AssetFileDescriptor afd,
+            boolean allowUnknownLength) {
+        if (afd.getStartOffset() < 0) {
+            throw new IllegalArgumentException(
+                    "AssetFileDescriptor offset should be >= 0");
         }
-        if (afd.getLength() < 0) {
+        if (afd.getLength() != AssetFileDescriptor.UNKNOWN_LENGTH && afd.getLength() < 0) {
+            throw new IllegalArgumentException(
+                    "AssetFileDescriptor should have valid length");
+        }
+        if (afd.getDeclaredLength() != AssetFileDescriptor.UNKNOWN_LENGTH
+                && afd.getDeclaredLength() < 0) {
+            throw new IllegalArgumentException(
+                    "AssetFileDescriptor should have valid declared length");
+        }
+        if (afd.getLength() == AssetFileDescriptor.UNKNOWN_LENGTH && afd.getStartOffset() != 0) {
             throw new UnsupportedOperationException(
-                    "AssetFileDescriptor.getLength() should be >=0");
+                    "AssetFileDescriptor offset should be 0 for unknown length");
+        }
+
+        if (!allowUnknownLength && afd.getLength() == AssetFileDescriptor.UNKNOWN_LENGTH) {
+            throw new UnsupportedOperationException(
+                    "AssetFileDescriptor should have known length");
         }
     }
 
@@ -155,7 +171,7 @@
             boolean truncate)
             throws IOException, LengthLimitExceededException {
         try {
-            Utils.checkAssetFileDescriptor(afd);
+            Utils.checkAssetFileDescriptor(afd, /*allowUnknownLength=*/ false);
             int lengthToRead = (int) afd.getLength();
             if (afd.getLength() > maxLength) {
                 if (truncate) {
diff --git a/javascriptengine/javascriptengine/src/main/stableAidl/org/chromium/android_webview/js_sandbox/common/IJsSandboxIsolateSyncCallback.aidl b/javascriptengine/javascriptengine/src/main/stableAidl/org/chromium/android_webview/js_sandbox/common/IJsSandboxIsolateSyncCallback.aidl
index 9e67eb9..cbb7313 100644
--- a/javascriptengine/javascriptengine/src/main/stableAidl/org/chromium/android_webview/js_sandbox/common/IJsSandboxIsolateSyncCallback.aidl
+++ b/javascriptengine/javascriptengine/src/main/stableAidl/org/chromium/android_webview/js_sandbox/common/IJsSandboxIsolateSyncCallback.aidl
@@ -30,6 +30,8 @@
     const int JS_EVALUATION_ERROR = 0;
     // The evaluation failed and the isolate crashed due to running out of heap memory.
     const int MEMORY_LIMIT_EXCEEDED = 1;
+    // The evaluation failed due to IO errors while reading from the file descriptor.
+    const int FILE_DESCRIPTOR_IO_ERROR = 2;
 
     /**
      * @param afd      input AssetFileDescriptor containing the return value of JS evaluation
diff --git a/javascriptengine/javascriptengine/src/main/stableAidl/org/chromium/android_webview/js_sandbox/common/IJsSandboxService.aidl b/javascriptengine/javascriptengine/src/main/stableAidl/org/chromium/android_webview/js_sandbox/common/IJsSandboxService.aidl
index 8afe48c..376de39 100644
--- a/javascriptengine/javascriptengine/src/main/stableAidl/org/chromium/android_webview/js_sandbox/common/IJsSandboxService.aidl
+++ b/javascriptengine/javascriptengine/src/main/stableAidl/org/chromium/android_webview/js_sandbox/common/IJsSandboxService.aidl
@@ -69,6 +69,12 @@
      */
     const String ISOLATE_CLIENT = "ISOLATE_CLIENT";
 
+     /**
+     * Feature flag indicating that an embedder can evaluate JavaScript through
+     * an AssetFileDescriptor or ParcelFileDescriptor with knwon or unknown length.
+     */
+    const String EVALUATE_FROM_FD = "EVALUATE_FROM_FD";
+
     /**
      * @return A list of feature names supported by this implementation.
      */
diff --git a/libraryversions.toml b/libraryversions.toml
index 7d65e62..94aaac9 100644
--- a/libraryversions.toml
+++ b/libraryversions.toml
@@ -41,9 +41,9 @@
 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-beta04"
+CREDENTIALS = "1.2.0-rc01"
 CREDENTIALS_FIDO_QUARANTINE = "1.0.0-alpha01"
 CURSORADAPTER = "1.1.0-alpha01"
 CUSTOMVIEW = "1.2.0-alpha03"
@@ -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"
@@ -137,7 +137,7 @@
 TRACING = "1.3.0-alpha02"
 TRACING_PERFETTO = "1.0.0-beta03"
 TRANSITION = "1.5.0-alpha03"
-TV = "1.0.0-alpha09"
+TV = "1.0.0-alpha10"
 TVPROVIDER = "1.1.0-alpha02"
 VECTORDRAWABLE = "1.2.0-rc01"
 VECTORDRAWABLE_ANIMATED = "1.2.0-rc01"
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/integration-tests/testapp/lint-baseline.xml b/paging/integration-tests/testapp/lint-baseline.xml
index 9aa9f52..e56a951 100644
--- a/paging/integration-tests/testapp/lint-baseline.xml
+++ b/paging/integration-tests/testapp/lint-baseline.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<issues format="6" by="lint 7.4.0-alpha08" type="baseline" client="gradle" dependencies="false" name="AGP (7.4.0-alpha08)" variant="all" version="7.4.0-alpha08">
+<issues format="6" by="lint 8.3.0-alpha02" type="baseline" client="gradle" dependencies="false" name="AGP (8.3.0-alpha02)" variant="all" version="8.3.0-alpha02">
 
     <issue
         id="MissingInflatedId"
@@ -7,7 +7,9 @@
         errorLine1="        final Button addButton = findViewById(R.id.addButton);"
         errorLine2="                                              ~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/paging/integration/testapp/room/RoomPagedListRxActivity.java"/>
+            file="src/main/java/androidx/paging/integration/testapp/room/RoomPagedListRxActivity.java"
+            line="51"
+            column="47"/>
     </issue>
 
     <issue
@@ -16,7 +18,196 @@
         errorLine1="        final Button clearButton = findViewById(R.id.clearButton);"
         errorLine2="                                                ~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/paging/integration/testapp/room/RoomPagedListRxActivity.java"/>
+            file="src/main/java/androidx/paging/integration/testapp/room/RoomPagedListRxActivity.java"
+            line="54"
+            column="49"/>
+    </issue>
+
+    <issue
+        id="RestrictedApiAndroidX"
+        message="ArchTaskExecutor.executeOnDiskIO can only be called from within the same library group prefix (referenced groupId=`androidx.arch.core` with prefix androidx.arch from groupId=`paging-playground.paging.integration-tests`)"
+        errorLine1="        ArchTaskExecutor.getInstance().executeOnDiskIO(() -> {"
+        errorLine2="                                       ~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/paging/integration/testapp/room/CustomerViewModel.java"
+            line="55"
+            column="40"/>
+    </issue>
+
+    <issue
+        id="RestrictedApiAndroidX"
+        message="ArchTaskExecutor.executeOnDiskIO can only be called from within the same library group prefix (referenced groupId=`androidx.arch.core` with prefix androidx.arch from groupId=`paging-playground.paging.integration-tests`)"
+        errorLine1="        ArchTaskExecutor.getInstance().executeOnDiskIO(() -> {"
+        errorLine2="                                                       ^">
+        <location
+            file="src/main/java/androidx/paging/integration/testapp/room/CustomerViewModel.java"
+            line="55"
+            column="56"/>
+    </issue>
+
+    <issue
+        id="RestrictedApiAndroidX"
+        message="ArchTaskExecutor.getInstance can only be called from within the same library group prefix (referenced groupId=`androidx.arch.core` with prefix androidx.arch from groupId=`paging-playground.paging.integration-tests`)"
+        errorLine1="        ArchTaskExecutor.getInstance().executeOnDiskIO(() -> {"
+        errorLine2="                         ~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/paging/integration/testapp/room/CustomerViewModel.java"
+            line="55"
+            column="26"/>
+    </issue>
+
+    <issue
+        id="RestrictedApiAndroidX"
+        message="ArchTaskExecutor.executeOnDiskIO can only be called from within the same library group prefix (referenced groupId=`androidx.arch.core` with prefix androidx.arch from groupId=`paging-playground.paging.integration-tests`)"
+        errorLine1="        ArchTaskExecutor.getInstance().executeOnDiskIO("
+        errorLine2="                                       ~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/paging/integration/testapp/room/CustomerViewModel.java"
+            line="78"
+            column="40"/>
+    </issue>
+
+    <issue
+        id="RestrictedApiAndroidX"
+        message="ArchTaskExecutor.getInstance can only be called from within the same library group prefix (referenced groupId=`androidx.arch.core` with prefix androidx.arch from groupId=`paging-playground.paging.integration-tests`)"
+        errorLine1="        ArchTaskExecutor.getInstance().executeOnDiskIO("
+        errorLine2="                         ~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/paging/integration/testapp/room/CustomerViewModel.java"
+            line="78"
+            column="26"/>
+    </issue>
+
+    <issue
+        id="RestrictedApiAndroidX"
+        message="ArchTaskExecutor.executeOnDiskIO can only be called from within the same library group prefix (referenced groupId=`androidx.arch.core` with prefix androidx.arch from groupId=`paging-playground.paging.integration-tests`)"
+        errorLine1="                () -> mDatabase.getCustomerDao().insert(createCustomer()));"
+        errorLine2="                ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/paging/integration/testapp/room/CustomerViewModel.java"
+            line="79"
+            column="17"/>
+    </issue>
+
+    <issue
+        id="RestrictedApiAndroidX"
+        message="ArchTaskExecutor.executeOnDiskIO can only be called from within the same library group prefix (referenced groupId=`androidx.arch.core` with prefix androidx.arch from groupId=`paging-playground.paging.integration-tests`)"
+        errorLine1="        ArchTaskExecutor.getInstance().executeOnDiskIO("
+        errorLine2="                                       ~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/paging/integration/testapp/room/CustomerViewModel.java"
+            line="84"
+            column="40"/>
+    </issue>
+
+    <issue
+        id="RestrictedApiAndroidX"
+        message="ArchTaskExecutor.getInstance can only be called from within the same library group prefix (referenced groupId=`androidx.arch.core` with prefix androidx.arch from groupId=`paging-playground.paging.integration-tests`)"
+        errorLine1="        ArchTaskExecutor.getInstance().executeOnDiskIO("
+        errorLine2="                         ~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/paging/integration/testapp/room/CustomerViewModel.java"
+            line="84"
+            column="26"/>
+    </issue>
+
+    <issue
+        id="RestrictedApiAndroidX"
+        message="ArchTaskExecutor.executeOnDiskIO can only be called from within the same library group prefix (referenced groupId=`androidx.arch.core` with prefix androidx.arch from groupId=`paging-playground.paging.integration-tests`)"
+        errorLine1="                () -> mDatabase.getCustomerDao().removeAll());"
+        errorLine2="                ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/paging/integration/testapp/room/CustomerViewModel.java"
+            line="85"
+            column="17"/>
+    </issue>
+
+    <issue
+        id="RestrictedApiAndroidX"
+        message="InvalidationTracker.addWeakObserver can only be called from within the same library group prefix (referenced groupId=`androidx.room` with prefix androidx from groupId=`paging-playground.paging.integration-tests`)"
+        errorLine1="        db.getInvalidationTracker().addWeakObserver(mObserver);"
+        errorLine2="                                    ~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/paging/integration/testapp/room/LastNameAscCustomerDataSource.java"
+            line="57"
+            column="37"/>
+    </issue>
+
+    <issue
+        id="RestrictedApiAndroidX"
+        message="InvalidationTracker.refreshVersionsSync can only be called from within the same library group prefix (referenced groupId=`androidx.room` with prefix androidx from groupId=`paging-playground.paging.integration-tests`)"
+        errorLine1="        mDb.getInvalidationTracker().refreshVersionsSync();"
+        errorLine2="                                     ~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/paging/integration/testapp/room/LastNameAscCustomerDataSource.java"
+            line="62"
+            column="38"/>
+    </issue>
+
+    <issue
+        id="RestrictedApiAndroidX"
+        message="ArchTaskExecutor.getInstance can only be called from within the same library group prefix (referenced groupId=`androidx.arch.core` with prefix androidx.arch from groupId=`paging-playground.paging.integration-tests`)"
+        errorLine1="        ArchTaskExecutor.getInstance()"
+        errorLine2="                         ~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/paging/integration/testapp/v3room/V3RoomViewModel.kt"
+            line="51"
+            column="26"/>
+    </issue>
+
+    <issue
+        id="RestrictedApiAndroidX"
+        message="ArchTaskExecutor.executeOnDiskIO can only be called from within the same library group prefix (referenced groupId=`androidx.arch.core` with prefix androidx.arch from groupId=`paging-playground.paging.integration-tests`)"
+        errorLine1="            .executeOnDiskIO { database.customerDao.insert(createCustomer()) }"
+        errorLine2="             ~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/paging/integration/testapp/v3room/V3RoomViewModel.kt"
+            line="52"
+            column="14"/>
+    </issue>
+
+    <issue
+        id="RestrictedApiAndroidX"
+        message="ArchTaskExecutor.executeOnDiskIO can only be called from within the same library group prefix (referenced groupId=`androidx.arch.core` with prefix androidx.arch from groupId=`paging-playground.paging.integration-tests`)"
+        errorLine1="            .executeOnDiskIO { database.customerDao.insert(createCustomer()) }"
+        errorLine2="                             ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/paging/integration/testapp/v3room/V3RoomViewModel.kt"
+            line="52"
+            column="30"/>
+    </issue>
+
+    <issue
+        id="RestrictedApiAndroidX"
+        message="ArchTaskExecutor.executeOnDiskIO can only be called from within the same library group prefix (referenced groupId=`androidx.arch.core` with prefix androidx.arch from groupId=`paging-playground.paging.integration-tests`)"
+        errorLine1="        ArchTaskExecutor.getInstance().executeOnDiskIO {"
+        errorLine2="                                       ~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/paging/integration/testapp/v3room/V3RoomViewModel.kt"
+            line="56"
+            column="40"/>
+    </issue>
+
+    <issue
+        id="RestrictedApiAndroidX"
+        message="ArchTaskExecutor.executeOnDiskIO can only be called from within the same library group prefix (referenced groupId=`androidx.arch.core` with prefix androidx.arch from groupId=`paging-playground.paging.integration-tests`)"
+        errorLine1="        ArchTaskExecutor.getInstance().executeOnDiskIO {"
+        errorLine2="                                                       ^">
+        <location
+            file="src/main/java/androidx/paging/integration/testapp/v3room/V3RoomViewModel.kt"
+            line="56"
+            column="56"/>
+    </issue>
+
+    <issue
+        id="RestrictedApiAndroidX"
+        message="ArchTaskExecutor.getInstance can only be called from within the same library group prefix (referenced groupId=`androidx.arch.core` with prefix androidx.arch from groupId=`paging-playground.paging.integration-tests`)"
+        errorLine1="        ArchTaskExecutor.getInstance().executeOnDiskIO {"
+        errorLine2="                         ~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/paging/integration/testapp/v3room/V3RoomViewModel.kt"
+            line="56"
+            column="26"/>
     </issue>
 
     <issue
@@ -25,7 +216,9 @@
         errorLine1="    public String getName() {"
         errorLine2="           ~~~~~~">
         <location
-            file="src/main/java/androidx/paging/integration/testapp/room/Customer.java"/>
+            file="src/main/java/androidx/paging/integration/testapp/room/Customer.java"
+            line="45"
+            column="12"/>
     </issue>
 
     <issue
@@ -34,7 +227,9 @@
         errorLine1="    public void setName(String name) {"
         errorLine2="                        ~~~~~~">
         <location
-            file="src/main/java/androidx/paging/integration/testapp/room/Customer.java"/>
+            file="src/main/java/androidx/paging/integration/testapp/room/Customer.java"
+            line="49"
+            column="25"/>
     </issue>
 
     <issue
@@ -43,7 +238,9 @@
         errorLine1="    public String getLastName() {"
         errorLine2="           ~~~~~~">
         <location
-            file="src/main/java/androidx/paging/integration/testapp/room/Customer.java"/>
+            file="src/main/java/androidx/paging/integration/testapp/room/Customer.java"
+            line="53"
+            column="12"/>
     </issue>
 
     <issue
@@ -52,7 +249,9 @@
         errorLine1="    public void setLastName(String lastName) {"
         errorLine2="                            ~~~~~~">
         <location
-            file="src/main/java/androidx/paging/integration/testapp/room/Customer.java"/>
+            file="src/main/java/androidx/paging/integration/testapp/room/Customer.java"
+            line="57"
+            column="29"/>
     </issue>
 
     <issue
@@ -61,7 +260,9 @@
         errorLine1="    void insert(Customer customer);"
         errorLine2="                ~~~~~~~~">
         <location
-            file="src/main/java/androidx/paging/integration/testapp/room/CustomerDao.java"/>
+            file="src/main/java/androidx/paging/integration/testapp/room/CustomerDao.java"
+            line="39"
+            column="17"/>
     </issue>
 
     <issue
@@ -70,7 +271,9 @@
         errorLine1="    void insertAll(Customer[] customers);"
         errorLine2="                   ~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/paging/integration/testapp/room/CustomerDao.java"/>
+            file="src/main/java/androidx/paging/integration/testapp/room/CustomerDao.java"
+            line="46"
+            column="20"/>
     </issue>
 
     <issue
@@ -79,7 +282,9 @@
         errorLine1="    DataSource.Factory&lt;Integer, Customer> loadPagedAgeOrder();"
         errorLine2="    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/paging/integration/testapp/room/CustomerDao.java"/>
+            file="src/main/java/androidx/paging/integration/testapp/room/CustomerDao.java"
+            line="59"
+            column="5"/>
     </issue>
 
     <issue
@@ -88,7 +293,9 @@
         errorLine1="    PagingSource&lt;Integer, Customer> loadPagedAgeOrderPagingSource();"
         errorLine2="    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/paging/integration/testapp/room/CustomerDao.java"/>
+            file="src/main/java/androidx/paging/integration/testapp/room/CustomerDao.java"
+            line="65"
+            column="5"/>
     </issue>
 
     <issue
@@ -97,7 +304,9 @@
         errorLine1="    LiveData&lt;List&lt;Customer>> all();"
         errorLine2="    ~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/paging/integration/testapp/room/CustomerDao.java"/>
+            file="src/main/java/androidx/paging/integration/testapp/room/CustomerDao.java"
+            line="77"
+            column="5"/>
     </issue>
 
     <issue
@@ -106,7 +315,9 @@
         errorLine1="    List&lt;Customer> customerNameInitial(int limit);"
         errorLine2="    ~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/paging/integration/testapp/room/CustomerDao.java"/>
+            file="src/main/java/androidx/paging/integration/testapp/room/CustomerDao.java"
+            line="82"
+            column="5"/>
     </issue>
 
     <issue
@@ -115,7 +326,9 @@
         errorLine1="    List&lt;Customer> customerNameLoadAfter(String key, int limit);"
         errorLine2="    ~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/paging/integration/testapp/room/CustomerDao.java"/>
+            file="src/main/java/androidx/paging/integration/testapp/room/CustomerDao.java"
+            line="85"
+            column="5"/>
     </issue>
 
     <issue
@@ -124,7 +337,9 @@
         errorLine1="    List&lt;Customer> customerNameLoadAfter(String key, int limit);"
         errorLine2="                                         ~~~~~~">
         <location
-            file="src/main/java/androidx/paging/integration/testapp/room/CustomerDao.java"/>
+            file="src/main/java/androidx/paging/integration/testapp/room/CustomerDao.java"
+            line="85"
+            column="42"/>
     </issue>
 
     <issue
@@ -133,7 +348,9 @@
         errorLine1="    int customerNameCountAfter(String key);"
         errorLine2="                               ~~~~~~">
         <location
-            file="src/main/java/androidx/paging/integration/testapp/room/CustomerDao.java"/>
+            file="src/main/java/androidx/paging/integration/testapp/room/CustomerDao.java"
+            line="88"
+            column="32"/>
     </issue>
 
     <issue
@@ -142,7 +359,9 @@
         errorLine1="    List&lt;Customer> customerNameLoadBefore(String key, int limit);"
         errorLine2="    ~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/paging/integration/testapp/room/CustomerDao.java"/>
+            file="src/main/java/androidx/paging/integration/testapp/room/CustomerDao.java"
+            line="91"
+            column="5"/>
     </issue>
 
     <issue
@@ -151,7 +370,9 @@
         errorLine1="    List&lt;Customer> customerNameLoadBefore(String key, int limit);"
         errorLine2="                                          ~~~~~~">
         <location
-            file="src/main/java/androidx/paging/integration/testapp/room/CustomerDao.java"/>
+            file="src/main/java/androidx/paging/integration/testapp/room/CustomerDao.java"
+            line="91"
+            column="43"/>
     </issue>
 
     <issue
@@ -160,7 +381,9 @@
         errorLine1="    int customerNameCountBefore(String key);"
         errorLine2="                                ~~~~~~">
         <location
-            file="src/main/java/androidx/paging/integration/testapp/room/CustomerDao.java"/>
+            file="src/main/java/androidx/paging/integration/testapp/room/CustomerDao.java"
+            line="94"
+            column="33"/>
     </issue>
 
     <issue
@@ -169,7 +392,9 @@
         errorLine1="    public CustomerViewModel(Application application) {"
         errorLine2="                             ~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/paging/integration/testapp/room/CustomerViewModel.java"/>
+            file="src/main/java/androidx/paging/integration/testapp/room/CustomerViewModel.java"
+            line="44"
+            column="30"/>
     </issue>
 
     <issue
@@ -178,7 +403,9 @@
         errorLine1="    protected void onCreate(final Bundle savedInstanceState) {"
         errorLine2="                                  ~~~~~~">
         <location
-            file="src/main/java/androidx/paging/integration/testapp/room/RoomPagedListActivity.java"/>
+            file="src/main/java/androidx/paging/integration/testapp/room/RoomPagedListActivity.java"
+            line="42"
+            column="35"/>
     </issue>
 
     <issue
@@ -187,7 +414,9 @@
         errorLine1="    protected void onSaveInstanceState(Bundle outState) {"
         errorLine2="                                       ~~~~~~">
         <location
-            file="src/main/java/androidx/paging/integration/testapp/room/RoomPagedListActivity.java"/>
+            file="src/main/java/androidx/paging/integration/testapp/room/RoomPagedListActivity.java"
+            line="79"
+            column="40"/>
     </issue>
 
     <issue
@@ -196,7 +425,9 @@
         errorLine1="    protected void onCreate(final Bundle savedInstanceState) {"
         errorLine2="                                  ~~~~~~">
         <location
-            file="src/main/java/androidx/paging/integration/testapp/room/RoomPagedListRxActivity.java"/>
+            file="src/main/java/androidx/paging/integration/testapp/room/RoomPagedListRxActivity.java"
+            line="40"
+            column="35"/>
     </issue>
 
 </issues>
diff --git a/paging/integration-tests/testapp/src/main/java/androidx/paging/integration/testapp/room/CustomerViewModel.java b/paging/integration-tests/testapp/src/main/java/androidx/paging/integration/testapp/room/CustomerViewModel.java
index 1fe8c8a..6800bf7 100644
--- a/paging/integration-tests/testapp/src/main/java/androidx/paging/integration/testapp/room/CustomerViewModel.java
+++ b/paging/integration-tests/testapp/src/main/java/androidx/paging/integration/testapp/room/CustomerViewModel.java
@@ -46,7 +46,6 @@
         createDb();
     }
 
-    @SuppressLint("RestrictedApi")
     private void createDb() {
         mDatabase = Room.databaseBuilder(this.getApplication(), SampleDatabase.class,
                         "customerDatabase")
@@ -75,7 +74,6 @@
         return customer;
     }
 
-    @SuppressLint("RestrictedApi")
     void insertCustomer() {
         ArchTaskExecutor.getInstance().executeOnDiskIO(
                 () -> mDatabase.getCustomerDao().insert(createCustomer()));
diff --git a/paging/integration-tests/testapp/src/main/java/androidx/paging/integration/testapp/room/LastNameAscCustomerDataSource.java b/paging/integration-tests/testapp/src/main/java/androidx/paging/integration/testapp/room/LastNameAscCustomerDataSource.java
index c135800..4786b8f 100644
--- a/paging/integration-tests/testapp/src/main/java/androidx/paging/integration/testapp/room/LastNameAscCustomerDataSource.java
+++ b/paging/integration-tests/testapp/src/main/java/androidx/paging/integration/testapp/room/LastNameAscCustomerDataSource.java
@@ -15,8 +15,6 @@
  */
 package androidx.paging.integration.testapp.room;
 
-import android.annotation.SuppressLint;
-
 import androidx.annotation.NonNull;
 import androidx.paging.DataSource;
 import androidx.paging.ItemKeyedDataSource;
@@ -47,7 +45,6 @@
     /**
      * Create a DataSource from the customer table of the given database
      */
-    @SuppressLint("RestrictedApi")
     private LastNameAscCustomerDataSource(SampleDatabase db) {
         mDb = db;
         mCustomerDao = db.getCustomerDao();
@@ -61,7 +58,6 @@
     }
 
     @Override
-    @SuppressLint("RestrictedApi")
     public boolean isInvalid() {
         mDb.getInvalidationTracker().refreshVersionsSync();
         return super.isInvalid();
diff --git a/paging/integration-tests/testapp/src/main/java/androidx/paging/integration/testapp/v3room/V3RoomViewModel.kt b/paging/integration-tests/testapp/src/main/java/androidx/paging/integration/testapp/v3room/V3RoomViewModel.kt
index 5c202ee..32ffe30 100644
--- a/paging/integration-tests/testapp/src/main/java/androidx/paging/integration/testapp/v3room/V3RoomViewModel.kt
+++ b/paging/integration-tests/testapp/src/main/java/androidx/paging/integration/testapp/v3room/V3RoomViewModel.kt
@@ -16,7 +16,6 @@
 
 package androidx.paging.integration.testapp.v3room
 
-import android.annotation.SuppressLint
 import android.app.Application
 import androidx.arch.core.executor.ArchTaskExecutor
 import androidx.lifecycle.AndroidViewModel
@@ -48,13 +47,11 @@
         return customer
     }
 
-    @SuppressLint("RestrictedApi")
     internal fun insertCustomer() {
         ArchTaskExecutor.getInstance()
             .executeOnDiskIO { database.customerDao.insert(createCustomer()) }
     }
 
-    @SuppressLint("RestrictedApi")
     internal fun clearAllCustomers() {
         ArchTaskExecutor.getInstance().executeOnDiskIO {
             database.runInTransaction {
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/playground-common/playground.properties b/playground-common/playground.properties
index 846b428..3a1d1fe 100644
--- a/playground-common/playground.properties
+++ b/playground-common/playground.properties
@@ -25,6 +25,6 @@
 kotlin.code.style=official
 # Disable docs
 androidx.enableDocumentation=false
-androidx.playground.snapshotBuildId=10710650
+androidx.playground.snapshotBuildId=10844108
 androidx.playground.metalavaBuildId=10726547
 androidx.studio.type=playground
diff --git a/privacysandbox/sdkruntime/sdkruntime-client/build.gradle b/privacysandbox/sdkruntime/sdkruntime-client/build.gradle
index e8985b4..42da8b0 100644
--- a/privacysandbox/sdkruntime/sdkruntime-client/build.gradle
+++ b/privacysandbox/sdkruntime/sdkruntime-client/build.gradle
@@ -140,7 +140,7 @@
 }
 
 androidx {
-    name = "androidx.privacysandbox.sdkruntime:sdkruntime-client"
+    name = "SdkRuntime Client"
     type = LibraryType.PUBLISHED_LIBRARY
     inceptionYear = "2022"
     description = "Provides components for SdkRuntime aware Applications"
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/sdkruntime/sdkruntime-core/build.gradle b/privacysandbox/sdkruntime/sdkruntime-core/build.gradle
index 2d6f9b2..3185bbd 100644
--- a/privacysandbox/sdkruntime/sdkruntime-core/build.gradle
+++ b/privacysandbox/sdkruntime/sdkruntime-core/build.gradle
@@ -51,9 +51,9 @@
 }
 
 androidx {
-    name = "androidx.privacysandbox.sdkruntime:sdkruntime-core"
+    name = "SdkRuntime Core"
     type = LibraryType.PUBLISHED_LIBRARY
     inceptionYear = "2022"
-    description = "Provides components for SdkRuntime aware SDKs"
+    description = "Provides shared components for SdkRuntime libraries"
     metalavaK2UastEnabled = true
 }
diff --git a/privacysandbox/sdkruntime/sdkruntime-core/src/androidTest/java/androidx/privacysandbox/sdkruntime/core/controller/SdkSandboxControllerCompatSandboxedTest.kt b/privacysandbox/sdkruntime/sdkruntime-core/src/androidTest/java/androidx/privacysandbox/sdkruntime/core/controller/SdkSandboxControllerCompatSandboxedTest.kt
index bcac996..48748c6 100644
--- a/privacysandbox/sdkruntime/sdkruntime-core/src/androidTest/java/androidx/privacysandbox/sdkruntime/core/controller/SdkSandboxControllerCompatSandboxedTest.kt
+++ b/privacysandbox/sdkruntime/sdkruntime-core/src/androidTest/java/androidx/privacysandbox/sdkruntime/core/controller/SdkSandboxControllerCompatSandboxedTest.kt
@@ -164,34 +164,30 @@
         UiThreadStatement.runOnUiThread {
             assertThat(activityHolderCaptor.value.lifecycle.currentState).isEqualTo(
                 Lifecycle.State.INITIALIZED)
-            activityLifecycleCallbackCaptor.value.onActivityCreated(activityMock, bundleMock)
+
+            activityLifecycleCallbackCaptor.value.onActivityPostCreated(activityMock, bundleMock)
             assertThat(activityHolderCaptor.value.lifecycle.currentState).isEqualTo(
                 Lifecycle.State.CREATED)
 
-            activityLifecycleCallbackCaptor.value.onActivityStarted(activityMock)
+            activityLifecycleCallbackCaptor.value.onActivityPostStarted(activityMock)
             assertThat(activityHolderCaptor.value.lifecycle.currentState).isEqualTo(
                 Lifecycle.State.STARTED)
 
-            activityLifecycleCallbackCaptor.value.onActivityResumed(activityMock)
+            activityLifecycleCallbackCaptor.value.onActivityPostResumed(activityMock)
             assertThat(activityHolderCaptor.value.lifecycle.currentState).isEqualTo(
                 Lifecycle.State.RESUMED)
 
-            activityLifecycleCallbackCaptor.value.onActivityPaused(activityMock)
+            activityLifecycleCallbackCaptor.value.onActivityPrePaused(activityMock)
             assertThat(activityHolderCaptor.value.lifecycle.currentState).isEqualTo(
                 Lifecycle.State.STARTED)
 
-            activityLifecycleCallbackCaptor.value.onActivityStopped(activityMock)
+            activityLifecycleCallbackCaptor.value.onActivityPreStopped(activityMock)
             assertThat(activityHolderCaptor.value.lifecycle.currentState).isEqualTo(
                 Lifecycle.State.CREATED)
 
-            activityLifecycleCallbackCaptor.value.onActivityDestroyed(activityMock)
+            activityLifecycleCallbackCaptor.value.onActivityPreDestroyed(activityMock)
             assertThat(activityHolderCaptor.value.lifecycle.currentState).isEqualTo(
                 Lifecycle.State.DESTROYED)
-
-            val currentState = activityHolderCaptor.value.lifecycle.currentState
-            activityLifecycleCallbackCaptor.value.onActivitySaveInstanceState(
-                activityMock, bundleMock)
-            assertThat(activityHolderCaptor.value.lifecycle.currentState).isEqualTo(currentState)
         }
     }
 
diff --git a/privacysandbox/sdkruntime/sdkruntime-core/src/main/java/androidx/privacysandbox/sdkruntime/core/androidx-privacysandbox-sdkruntime-sdkruntime-core-documentation.md b/privacysandbox/sdkruntime/sdkruntime-core/src/main/java/androidx/privacysandbox/sdkruntime/core/androidx-privacysandbox-sdkruntime-sdkruntime-core-documentation.md
index 24cc6ec..6729e20 100644
--- a/privacysandbox/sdkruntime/sdkruntime-core/src/main/java/androidx/privacysandbox/sdkruntime/core/androidx-privacysandbox-sdkruntime-sdkruntime-core-documentation.md
+++ b/privacysandbox/sdkruntime/sdkruntime-core/src/main/java/androidx/privacysandbox/sdkruntime/core/androidx-privacysandbox-sdkruntime-sdkruntime-core-documentation.md
@@ -4,4 +4,4 @@
 
 # Package androidx.privacysandbox.sdkruntime.core
 
-This package provides components for implementing SdkRuntime aware SDKs.
+This package provides shared components for implementing SdkRuntime aware Apps and SDKs.
diff --git a/privacysandbox/sdkruntime/sdkruntime-core/src/main/java/androidx/privacysandbox/sdkruntime/core/controller/impl/PlatformUDCImpl.kt b/privacysandbox/sdkruntime/sdkruntime-core/src/main/java/androidx/privacysandbox/sdkruntime/core/controller/impl/PlatformUDCImpl.kt
index 1ccf8de5..a143ea0 100644
--- a/privacysandbox/sdkruntime/sdkruntime-core/src/main/java/androidx/privacysandbox/sdkruntime/core/controller/impl/PlatformUDCImpl.kt
+++ b/privacysandbox/sdkruntime/sdkruntime-core/src/main/java/androidx/privacysandbox/sdkruntime/core/controller/impl/PlatformUDCImpl.kt
@@ -96,33 +96,46 @@
 
         private fun proxyLifeCycleEvents() {
             val callback = object : Application.ActivityLifecycleCallbacks {
-                override fun onActivityCreated(p0: Activity, p1: Bundle?) {
-                    lifecycleRegistry.currentState = Lifecycle.State.CREATED
+                override fun onActivityCreated(activity: Activity, bundle: Bundle?) {}
+
+                override fun onActivityPostCreated(
+                    activity: Activity,
+                    savedInstanceState: Bundle?
+                ) {
+                    lifecycleRegistry.handleLifecycleEvent(Lifecycle.Event.ON_CREATE)
                 }
 
-                override fun onActivityStarted(p0: Activity) {
-                    lifecycleRegistry.currentState = Lifecycle.State.STARTED
+                override fun onActivityStarted(activity: Activity) {}
+
+                override fun onActivityPostStarted(activity: Activity) {
+                    lifecycleRegistry.handleLifecycleEvent(Lifecycle.Event.ON_START)
                 }
 
-                override fun onActivityResumed(p0: Activity) {
-                    lifecycleRegistry.currentState = Lifecycle.State.RESUMED
+                override fun onActivityResumed(activity: Activity) {}
+
+                override fun onActivityPostResumed(activity: Activity) {
+                    lifecycleRegistry.handleLifecycleEvent(Lifecycle.Event.ON_RESUME)
                 }
 
-                override fun onActivityPaused(p0: Activity) {
-                    lifecycleRegistry.currentState = Lifecycle.State.STARTED
+                override fun onActivityPrePaused(activity: Activity) {
+                    lifecycleRegistry.handleLifecycleEvent(Lifecycle.Event.ON_PAUSE)
                 }
 
-                override fun onActivityStopped(p0: Activity) {
-                    lifecycleRegistry.currentState = Lifecycle.State.CREATED
+                override fun onActivityPaused(activity: Activity) {}
+
+                override fun onActivityPreStopped(activity: Activity) {
+                    lifecycleRegistry.handleLifecycleEvent(Lifecycle.Event.ON_STOP)
                 }
 
-                override fun onActivityDestroyed(p0: Activity) {
-                    lifecycleRegistry.currentState = Lifecycle.State.DESTROYED
+                override fun onActivityStopped(activity: Activity) {}
+
+                override fun onActivitySaveInstanceState(activity: Activity, bundle: Bundle) {}
+
+                override fun onActivityPreDestroyed(activity: Activity) {
+                    lifecycleRegistry.handleLifecycleEvent(Lifecycle.Event.ON_DESTROY)
                 }
 
-                override fun onActivitySaveInstanceState(p0: Activity, p1: Bundle) {
-                    // No need for proxying
-                }
+                override fun onActivityDestroyed(activity: Activity) {}
             }
             platformActivity.registerActivityLifecycleCallbacks(callback)
         }
diff --git a/privacysandbox/sdkruntime/sdkruntime-provider/api/current.txt b/privacysandbox/sdkruntime/sdkruntime-provider/api/current.txt
new file mode 100644
index 0000000..e6f50d0
--- /dev/null
+++ b/privacysandbox/sdkruntime/sdkruntime-provider/api/current.txt
@@ -0,0 +1 @@
+// Signature format: 4.0
diff --git a/privacysandbox/sdkruntime/sdkruntime-provider/api/res-current.txt b/privacysandbox/sdkruntime/sdkruntime-provider/api/res-current.txt
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/privacysandbox/sdkruntime/sdkruntime-provider/api/res-current.txt
diff --git a/privacysandbox/sdkruntime/sdkruntime-provider/api/restricted_current.txt b/privacysandbox/sdkruntime/sdkruntime-provider/api/restricted_current.txt
new file mode 100644
index 0000000..e6f50d0
--- /dev/null
+++ b/privacysandbox/sdkruntime/sdkruntime-provider/api/restricted_current.txt
@@ -0,0 +1 @@
+// Signature format: 4.0
diff --git a/privacysandbox/sdkruntime/sdkruntime-provider/build.gradle b/privacysandbox/sdkruntime/sdkruntime-provider/build.gradle
new file mode 100644
index 0000000..02a5786
--- /dev/null
+++ b/privacysandbox/sdkruntime/sdkruntime-provider/build.gradle
@@ -0,0 +1,38 @@
+/*
+ * Copyright (C) 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.
+ */
+
+import androidx.build.LibraryType
+
+plugins {
+    id("AndroidXPlugin")
+    id("com.android.library")
+    id("org.jetbrains.kotlin.android")
+}
+
+dependencies {
+    api project(path: ':privacysandbox:sdkruntime:sdkruntime-core')
+}
+
+android {
+    namespace "androidx.privacysandbox.sdkruntime.provider"
+}
+
+androidx {
+    name = "SdkRuntime Provider"
+    type = LibraryType.PUBLISHED_LIBRARY
+    inceptionYear = "2023"
+    description = "Provides components for SdkRuntime aware SDKs"
+}
diff --git a/bluetooth/integration-tests/testapp/src/main/java/androidx/bluetooth/integration/testapp/ui/common/ByteArray.kt b/privacysandbox/sdkruntime/sdkruntime-provider/src/main/java/androidx/privacysandbox/sdkruntime/provider/package-info.java
similarity index 70%
copy from bluetooth/integration-tests/testapp/src/main/java/androidx/bluetooth/integration/testapp/ui/common/ByteArray.kt
copy to privacysandbox/sdkruntime/sdkruntime-provider/src/main/java/androidx/privacysandbox/sdkruntime/provider/package-info.java
index 40b8f5b..e0778fd 100644
--- a/bluetooth/integration-tests/testapp/src/main/java/androidx/bluetooth/integration/testapp/ui/common/ByteArray.kt
+++ b/privacysandbox/sdkruntime/sdkruntime-provider/src/main/java/androidx/privacysandbox/sdkruntime/provider/package-info.java
@@ -1,5 +1,5 @@
 /*
- * Copyright 2023 The Android Open Source Project
+ * Copyright (C) 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.
@@ -14,7 +14,7 @@
  * limitations under the License.
  */
 
-package androidx.bluetooth.integration.testapp.ui.common
-
-fun ByteArray.toHexString(): String =
-    joinToString(separator = " ", prefix = "0x") { String.format("%02X", it) }
+/**
+ * This package provides components for implementing SdkRuntime aware SDKs.
+ */
+package androidx.privacysandbox.sdkruntime.provider;
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 600af27..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
@@ -66,6 +66,8 @@
     companion object {
         const val TEST_ONLY_USE_REMOTE_ADAPTER = "testOnlyUseRemoteAdapter"
         const val TIMEOUT = 1000.toLong()
+        const val INITIAL_HEIGHT = 10
+        const val INITIAL_WIDTH = 20
 
         @JvmStatic
         @Parameterized.Parameters(name = "{index}: invokeBackwardsCompatFlow={0}")
@@ -107,12 +109,7 @@
     @Ignore // b/271299184
     @Test
     fun testChangingSandboxedSdkViewLayoutChangesChildLayout() {
-        val adapter = TestSandboxedUiAdapter(
-            false /* hasFailiningTestSession */
-        )
-        val coreLibInfo = getCoreLibInfoFromAdapter(adapter)
-        val userRemoteAdapter = SandboxedUiAdapterFactory.createFromCoreLibInfo(coreLibInfo)
-        view.setAdapter(userRemoteAdapter)
+        createAdapterAndEstablishSession()
 
         val layoutChangeLatch = CountDownLatch(1)
         val childAddedLatch = CountDownLatch(1)
@@ -135,10 +132,10 @@
                     top: Int,
                     right: Int,
                     bottom: Int,
-                    old_left: Int,
-                    old_top: Int,
-                    old_right: Int,
-                    old_bottom: Int
+                    oldLeft: Int,
+                    oldTop: Int,
+                    oldRight: Int,
+                    oldBottom: Int
                 ) {
                     assertTrue(left == 10 && top == 10 && right == 10 && bottom == 10)
                     layoutChangeLatch.countDown()
@@ -156,51 +153,19 @@
 
     @Test
     fun testOpenSession_onSetAdapter() {
-        val adapter = TestSandboxedUiAdapter(false)
-        val coreLibInfo = getCoreLibInfoFromAdapter(adapter)
-        val userRemoteAdapter = SandboxedUiAdapterFactory.createFromCoreLibInfo(coreLibInfo)
-        view.setAdapter(userRemoteAdapter)
-
-        assertWithMessage("openSession is called on adapter")
-                .that(adapter.isOpenSessionCalled).isTrue()
-        var isSessionInitialised = try {
-            adapter.session
-            true
-        } catch (e: UninitializedPropertyAccessException) {
-            false
-        }
-        assertTrue(isSessionInitialised)
+        val adapter = createAdapterAndEstablishSession()
+        assertThat(adapter.session).isNotNull()
     }
 
     @Test
     fun testOpenSession_fromAdapter() {
-        val adapter = TestSandboxedUiAdapter(false)
-        val coreLibInfo = getCoreLibInfoFromAdapter(adapter)
-        val adapterFromCoreLibInfo = SandboxedUiAdapterFactory.createFromCoreLibInfo(coreLibInfo)
-        val testSessionClient = TestSessionClient()
-
-        adapterFromCoreLibInfo.openSession(
-            context,
-            Binder(),
-            10 /* initialWidth */,
-            10 /* initialHeight */,
-            true,
-            Runnable::run,
-            testSessionClient
-        )
-
-        assertThat(adapter.isOpenSessionCalled).isTrue()
-        assertThat(testSessionClient.isSessionOpened).isTrue()
+        val adapter = createAdapterAndEstablishSession(viewForSession = null)
+        assertThat(adapter.session).isNotNull()
     }
 
     @Test
     fun testConfigurationChanged() {
-        val sdkAdapter = TestSandboxedUiAdapter(/*hasfailingTestSession=*/false)
-        val coreLibInfo = getCoreLibInfoFromAdapter(sdkAdapter)
-        val adapter = SandboxedUiAdapterFactory.createFromCoreLibInfo(coreLibInfo)
-
-        view.setAdapter(adapter)
-        assertThat(sdkAdapter.isOpenSessionCalled).isTrue()
+        val sdkAdapter = createAdapterAndEstablishSession()
 
         activity.runOnUiThread {
             activity.requestedOrientation = ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE
@@ -216,11 +181,7 @@
      */
     @Test
     fun testZOrderChanged() {
-        val adapter = TestSandboxedUiAdapter(/* hasFailingTestSession=*/false)
-        val coreLibInfo = getCoreLibInfoFromAdapter(adapter)
-        val adapterFromCoreLibInfo = SandboxedUiAdapterFactory.createFromCoreLibInfo(coreLibInfo)
-        view.setAdapter(adapterFromCoreLibInfo)
-        assertThat(adapter.isOpenSessionCalled).isTrue()
+        val adapter = createAdapterAndEstablishSession()
 
         view.orderProviderUiAboveClientUi(!adapter.initialZOrderOnTop)
         val testSession = adapter.session as TestSandboxedUiAdapter.TestSession
@@ -232,11 +193,7 @@
      */
     @Test
     fun testZOrderUnchanged() {
-        val adapter = TestSandboxedUiAdapter(/* hasFailingTestSession=*/false)
-        val coreLibInfo = getCoreLibInfoFromAdapter(adapter)
-        val adapterFromCoreLibInfo = SandboxedUiAdapterFactory.createFromCoreLibInfo(coreLibInfo)
-        view.setAdapter(adapterFromCoreLibInfo)
-        assertThat(adapter.isOpenSessionCalled).isTrue()
+        val adapter = createAdapterAndEstablishSession()
 
         view.orderProviderUiAboveClientUi(adapter.initialZOrderOnTop)
         val testSession = adapter.session as TestSandboxedUiAdapter.TestSession
@@ -245,7 +202,7 @@
 
     @Test
     fun testHostCanSetZOrderAboveBeforeOpeningSession() {
-        val adapter = openSessionAndWaitToBeActive(true)
+        val adapter = createAdapterAndWaitToBeActive(initialZOrder = true)
         injectInputEventOnView()
         // the injected touch should be handled by the provider in Z-above mode
         assertThat(adapter.touchedLatch.await(TIMEOUT, TimeUnit.MILLISECONDS)).isTrue()
@@ -253,10 +210,10 @@
 
     @Test
     fun testHostCanSetZOrderBelowBeforeOpeningSession() {
-        // TODO(b/300396631): Skip for backward compats
+        // TODO(b/300396631): Skip for backward compat
         assumeTrue(!invokeBackwardsCompatFlow)
 
-        val adapter = openSessionAndWaitToBeActive(false)
+        val adapter = createAdapterAndWaitToBeActive(initialZOrder = false)
         injectInputEventOnView()
         // the injected touch should not reach the provider in Z-below mode
         assertThat(adapter.touchedLatch.await(TIMEOUT, TimeUnit.MILLISECONDS)).isFalse()
@@ -264,68 +221,71 @@
 
     @Test
     fun testSessionError() {
-        val adapter = TestSandboxedUiAdapter(true)
-        val coreLibInfo = getCoreLibInfoFromAdapter(adapter)
-        val adapterThatFailsToCreateUi =
-            SandboxedUiAdapterFactory.createFromCoreLibInfo(coreLibInfo)
-        view.setAdapter(adapterThatFailsToCreateUi)
+        createAdapterAndEstablishSession(hasFailingTestSession = true)
+
         assertThat(errorLatch.await(TIMEOUT, TimeUnit.MILLISECONDS)).isTrue()
         assertThat(stateChangeListener.error?.message).isEqualTo("Test Session Exception")
     }
 
     // TODO(b/300056633): Replace with actual e2e test flow that triggers resize request
     @Test
-    fun test_ProviderInitiatedResize_ReceivedByClient() {
-        val sdkAdapter = TestSandboxedUiAdapter(/*hasfailingTestSession=*/false)
-        val coreLibInfo = getCoreLibInfoFromAdapter(sdkAdapter)
-        val adapter = SandboxedUiAdapterFactory.createFromCoreLibInfo(coreLibInfo)
+    fun testResize_ProviderInitiated_ReceivedByClient() {
         val testSessionClient = TestSessionClient()
-
-        adapter.openSession(
-            context,
-            Binder(),
-            /*initialWidth=*/ 10,
-            /*initialHeight=*/ 10,
-            true,
-            Runnable::run,
-            testSessionClient
+        val sdkAdapter = createAdapterAndEstablishSession(
+            viewForSession = null,
+            testSessionClient = testSessionClient
         )
-        assertThat(testSessionClient.isSessionOpened).isTrue()
 
         // Request resize from Session side
         val testSession = sdkAdapter.session as TestSandboxedUiAdapter.TestSession
-        testSession.sessionClient.onResizeRequested(20, 30)
+        testSession.sessionClient.onResizeRequested(INITIAL_WIDTH + 10, INITIAL_HEIGHT + 10)
 
         // Verify SessionClient received the request
-        assertWithMessage("Resized width").that(testSessionClient.resizedWidth).isEqualTo(20)
-        assertWithMessage("Resized height").that(testSessionClient.resizedHeight).isEqualTo(30)
+        assertWithMessage("Resized width").that(testSessionClient.resizedWidth)
+            .isEqualTo(INITIAL_WIDTH + 10)
+        assertWithMessage("Resized height").that(testSessionClient.resizedHeight)
+            .isEqualTo(INITIAL_HEIGHT + 10)
     }
 
     // TODO(b/300056633): Replace with actual e2e test flow that triggers resize request
     @Test
-    fun test_ClientInitiatedResize_ReceivedByProvider() {
-        val sdkAdapter = TestSandboxedUiAdapter(/*hasfailingTestSession=*/false)
-        val coreLibInfo = getCoreLibInfoFromAdapter(sdkAdapter)
-        val adapter = SandboxedUiAdapterFactory.createFromCoreLibInfo(coreLibInfo)
+    fun testResize_ClientInitiated_ReceivedByProvider() {
         val testSessionClient = TestSessionClient()
-        adapter.openSession(
-            context,
-            Binder(),
-            /*initialWidth=*/ 10,
-            /*initialHeight=*/ 10,
-            true,
-            Runnable::run,
-            testSessionClient
+        val sdkAdapter = createAdapterAndEstablishSession(
+            viewForSession = null,
+            testSessionClient = testSessionClient
         )
-        assertThat(testSessionClient.isSessionOpened).isTrue()
 
         // Notify resized from the client
-        testSessionClient.session.notifyResized(20, 30)
+        testSessionClient.session?.notifyResized(INITIAL_WIDTH + 10, INITIAL_HEIGHT + 10)
 
         // Verify Session received the request
         val testSession = sdkAdapter.session as TestSandboxedUiAdapter.TestSession
-        assertWithMessage("Resized width").that(testSession.resizedWidth).isEqualTo(20)
-        assertWithMessage("Resized height").that(testSession.resizedHeight).isEqualTo(30)
+        assertWithMessage("Resized width").that(testSession.resizedWidth)
+            .isEqualTo(INITIAL_WIDTH + 10)
+        assertWithMessage("Resized height").that(testSession.resizedHeight)
+            .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 {
@@ -334,12 +294,50 @@
         return bundle
     }
 
-    private fun openSessionAndWaitToBeActive(initialZOrder: Boolean): TestSandboxedUiAdapter {
-        val adapter = TestSandboxedUiAdapter(/*hasFailingTestSession=*/ false)
-        val coreLibInfo = getCoreLibInfoFromAdapter(adapter)
-        val adapterFromCoreLibInfo = SandboxedUiAdapterFactory.createFromCoreLibInfo(coreLibInfo)
+    /**
+     * Creates a [TestSandboxedUiAdapter] and establishes session.
+     *
+     * If [view] is null, then session is opened using the adapter directly. Otherwise, the
+     * created adapter is set on [view] to establish session.
+     */
+    private fun createAdapterAndEstablishSession(
+            hasFailingTestSession: Boolean = false,
+            viewForSession: SandboxedSdkView? = view,
+            testSessionClient: TestSessionClient = TestSessionClient()
+        ): TestSandboxedUiAdapter {
+
+        val adapter = TestSandboxedUiAdapter(hasFailingTestSession)
+        val adapterFromCoreLibInfo = SandboxedUiAdapterFactory.createFromCoreLibInfo(
+            getCoreLibInfoFromAdapter(adapter)
+        )
+        if (viewForSession != null) {
+            viewForSession.setAdapter(adapterFromCoreLibInfo)
+        } else {
+            adapterFromCoreLibInfo.openSession(
+                context,
+                windowInputToken = Binder(),
+                INITIAL_WIDTH,
+                INITIAL_HEIGHT,
+                isZOrderOnTop = true,
+                clientExecutor = Runnable::run,
+                testSessionClient
+            )
+        }
+
+        assertWithMessage("openSession is called on adapter")
+            .that(adapter.isOpenSessionCalled).isTrue()
+        if (viewForSession == null) {
+            assertWithMessage("onSessionOpened received by SessionClient")
+                .that(testSessionClient.isSessionOpened).isTrue()
+        }
+        return adapter
+    }
+
+    private fun createAdapterAndWaitToBeActive(initialZOrder: Boolean): TestSandboxedUiAdapter {
         view.orderProviderUiAboveClientUi(initialZOrder)
-        view.setAdapter(adapterFromCoreLibInfo)
+
+        val adapter = createAdapterAndEstablishSession()
+
         val activeLatch = CountDownLatch(1)
         view.addStateChangedListener { state ->
             if (state is SandboxedSdkUiSessionState.Active) {
@@ -385,7 +383,7 @@
      *  If [hasFailingTestSession] is true, the fake server side logic returns error.
      */
     class TestSandboxedUiAdapter(
-        private val hasFailingTestSession: Boolean
+        private val hasFailingTestSession: Boolean = false
     ) : SandboxedUiAdapter {
 
         private val openSessionLatch: CountDownLatch = CountDownLatch(1)
@@ -511,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/settings.gradle b/settings.gradle
index 604404e..07f626d 100644
--- a/settings.gradle
+++ b/settings.gradle
@@ -909,6 +909,7 @@
 includeProject(":privacysandbox:plugins:plugins-privacysandbox-library", [BuildType.MAIN])
 includeProject(":privacysandbox:sdkruntime:sdkruntime-client", [BuildType.MAIN])
 includeProject(":privacysandbox:sdkruntime:sdkruntime-core", [BuildType.MAIN])
+includeProject(":privacysandbox:sdkruntime:sdkruntime-provider", [BuildType.MAIN])
 includeProject(":privacysandbox:sdkruntime:test-sdks:current", [BuildType.MAIN])
 includeProject(":privacysandbox:sdkruntime:test-sdks:v1", [BuildType.MAIN])
 includeProject(":privacysandbox:sdkruntime:test-sdks:v2", [BuildType.MAIN])
diff --git a/slidingpanelayout/slidingpanelayout/api/current.txt b/slidingpanelayout/slidingpanelayout/api/current.txt
index 5abadc5..6b138d4 100644
--- a/slidingpanelayout/slidingpanelayout/api/current.txt
+++ b/slidingpanelayout/slidingpanelayout/api/current.txt
@@ -16,6 +16,7 @@
     method @Px public int getParallaxDistance();
     method @Deprecated @ColorInt public int getSliderFadeColor();
     method public boolean isOpen();
+    method public final boolean isOverlappingEnabled();
     method public boolean isSlideable();
     method public void open();
     method public boolean openPane();
@@ -23,6 +24,7 @@
     method public void removeSlideableStateListener(androidx.slidingpanelayout.widget.SlidingPaneLayout.SlideableStateListener listener);
     method @Deprecated public void setCoveredFadeColor(int);
     method public final void setLockMode(int);
+    method public final void setOverlappingEnabled(boolean);
     method @Deprecated public void setPanelSlideListener(androidx.slidingpanelayout.widget.SlidingPaneLayout.PanelSlideListener? listener);
     method public void setParallaxDistance(@Px int);
     method @Deprecated public void setShadowDrawable(android.graphics.drawable.Drawable? drawable);
@@ -35,6 +37,7 @@
     method @Deprecated public void smoothSlideClosed();
     method @Deprecated public void smoothSlideOpen();
     property @Deprecated @ColorInt public int coveredFadeColor;
+    property public final boolean isOverlappingEnabled;
     property public boolean isSlideable;
     property public final int lockMode;
     property @Px public int parallaxDistance;
@@ -56,13 +59,9 @@
     ctor public SlidingPaneLayout.LayoutParams(android.view.ViewGroup.MarginLayoutParams source);
     ctor public SlidingPaneLayout.LayoutParams(androidx.slidingpanelayout.widget.SlidingPaneLayout.LayoutParams source);
     ctor public SlidingPaneLayout.LayoutParams(int width, int height);
-    field public static final androidx.slidingpanelayout.widget.SlidingPaneLayout.LayoutParams.Companion Companion;
     field public float weight;
   }
 
-  public static final class SlidingPaneLayout.LayoutParams.Companion {
-  }
-
   public static interface SlidingPaneLayout.PanelSlideListener {
     method public void onPanelClosed(android.view.View panel);
     method public void onPanelOpened(android.view.View panel);
diff --git a/slidingpanelayout/slidingpanelayout/api/restricted_current.txt b/slidingpanelayout/slidingpanelayout/api/restricted_current.txt
index 5abadc5..6b138d4 100644
--- a/slidingpanelayout/slidingpanelayout/api/restricted_current.txt
+++ b/slidingpanelayout/slidingpanelayout/api/restricted_current.txt
@@ -16,6 +16,7 @@
     method @Px public int getParallaxDistance();
     method @Deprecated @ColorInt public int getSliderFadeColor();
     method public boolean isOpen();
+    method public final boolean isOverlappingEnabled();
     method public boolean isSlideable();
     method public void open();
     method public boolean openPane();
@@ -23,6 +24,7 @@
     method public void removeSlideableStateListener(androidx.slidingpanelayout.widget.SlidingPaneLayout.SlideableStateListener listener);
     method @Deprecated public void setCoveredFadeColor(int);
     method public final void setLockMode(int);
+    method public final void setOverlappingEnabled(boolean);
     method @Deprecated public void setPanelSlideListener(androidx.slidingpanelayout.widget.SlidingPaneLayout.PanelSlideListener? listener);
     method public void setParallaxDistance(@Px int);
     method @Deprecated public void setShadowDrawable(android.graphics.drawable.Drawable? drawable);
@@ -35,6 +37,7 @@
     method @Deprecated public void smoothSlideClosed();
     method @Deprecated public void smoothSlideOpen();
     property @Deprecated @ColorInt public int coveredFadeColor;
+    property public final boolean isOverlappingEnabled;
     property public boolean isSlideable;
     property public final int lockMode;
     property @Px public int parallaxDistance;
@@ -56,13 +59,9 @@
     ctor public SlidingPaneLayout.LayoutParams(android.view.ViewGroup.MarginLayoutParams source);
     ctor public SlidingPaneLayout.LayoutParams(androidx.slidingpanelayout.widget.SlidingPaneLayout.LayoutParams source);
     ctor public SlidingPaneLayout.LayoutParams(int width, int height);
-    field public static final androidx.slidingpanelayout.widget.SlidingPaneLayout.LayoutParams.Companion Companion;
     field public float weight;
   }
 
-  public static final class SlidingPaneLayout.LayoutParams.Companion {
-  }
-
   public static interface SlidingPaneLayout.PanelSlideListener {
     method public void onPanelClosed(android.view.View panel);
     method public void onPanelOpened(android.view.View panel);
diff --git a/slidingpanelayout/slidingpanelayout/src/androidTest/AndroidManifest.xml b/slidingpanelayout/slidingpanelayout/src/androidTest/AndroidManifest.xml
index 33523b8..31e4bdb 100644
--- a/slidingpanelayout/slidingpanelayout/src/androidTest/AndroidManifest.xml
+++ b/slidingpanelayout/slidingpanelayout/src/androidTest/AndroidManifest.xml
@@ -25,5 +25,13 @@
                 <category android:name="android.intent.category.LAUNCHER" />
             </intent-filter>
         </activity>
+        <activity
+            android:name="androidx.slidingpanelayout.widget.helpers.EmptyTestActivity"
+            android:exported="false">
+            <intent-filter>
+                <action android:name="android.intent.action.MAIN" />
+                <category android:name="android.intent.category.LAUNCHER" />
+            </intent-filter>
+        </activity>
     </application>
 </manifest>
\ No newline at end of file
diff --git a/slidingpanelayout/slidingpanelayout/src/androidTest/java/androidx/slidingpanelayout/widget/DisallowOverlapTest.kt b/slidingpanelayout/slidingpanelayout/src/androidTest/java/androidx/slidingpanelayout/widget/DisallowOverlapTest.kt
new file mode 100644
index 0000000..4f093e6
--- /dev/null
+++ b/slidingpanelayout/slidingpanelayout/src/androidTest/java/androidx/slidingpanelayout/widget/DisallowOverlapTest.kt
@@ -0,0 +1,59 @@
+/*
+ * 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.slidingpanelayout.widget
+
+import android.view.View
+import android.view.View.MeasureSpec
+import android.view.ViewGroup.LayoutParams.MATCH_PARENT
+import androidx.test.ext.junit.runners.AndroidJUnit4
+import androidx.test.filters.SmallTest
+import androidx.test.platform.app.InstrumentationRegistry
+import com.google.common.truth.Truth.assertThat
+import org.junit.Test
+import org.junit.runner.RunWith
+
+@RunWith(AndroidJUnit4::class)
+@SmallTest
+class DisallowOverlapTest {
+    @Test
+    fun twoPaneModeTest() {
+        val context = InstrumentationRegistry.getInstrumentation().context
+        val spl = SlidingPaneLayout(context).apply {
+            isOverlappingEnabled = false
+        }
+
+        val firstPane = View(context).also {
+            spl.addView(it, SlidingPaneLayout.LayoutParams(30, MATCH_PARENT))
+        }
+        val secondPane = View(context).also {
+            spl.addView(it, SlidingPaneLayout.LayoutParams(MATCH_PARENT, MATCH_PARENT))
+        }
+
+        spl.measure(
+            MeasureSpec.makeMeasureSpec(100, MeasureSpec.EXACTLY),
+            MeasureSpec.makeMeasureSpec(100, MeasureSpec.EXACTLY)
+        )
+
+        assertThat(spl.measuredWidth).isEqualTo(100)
+        assertThat(spl.measuredHeight).isEqualTo(100)
+
+        spl.layout(0, 0, spl.measuredWidth, spl.measuredHeight)
+
+        assertThat(firstPane.measuredWidth).isEqualTo(30)
+        assertThat(secondPane.measuredWidth).isEqualTo(70)
+    }
+}
diff --git a/slidingpanelayout/slidingpanelayout/src/androidTest/java/androidx/slidingpanelayout/widget/FoldTest.kt b/slidingpanelayout/slidingpanelayout/src/androidTest/java/androidx/slidingpanelayout/widget/FoldTest.kt
index 3fe86c3..90ab2389 100644
--- a/slidingpanelayout/slidingpanelayout/src/androidTest/java/androidx/slidingpanelayout/widget/FoldTest.kt
+++ b/slidingpanelayout/slidingpanelayout/src/androidTest/java/androidx/slidingpanelayout/widget/FoldTest.kt
@@ -17,6 +17,7 @@
 package androidx.slidingpanelayout.widget
 
 import android.view.View
+import androidx.core.view.get
 import androidx.slidingpanelayout.test.R
 import androidx.slidingpanelayout.widget.helpers.TestActivity
 import androidx.slidingpanelayout.widget.helpers.findViewById
@@ -37,7 +38,6 @@
 import androidx.window.testing.layout.FoldingFeature
 import androidx.window.testing.layout.WindowLayoutInfoPublisherRule
 import com.google.common.truth.Truth.assertThat
-import org.hamcrest.core.IsNot.not
 import org.junit.After
 import org.junit.Rule
 import org.junit.Test
@@ -116,9 +116,10 @@
                 val info = WindowLayoutInfo(listOf(feature))
                 rule.overrideWindowLayoutInfo(info)
                 WindowMetricsCalculator.getOrCreate().computeCurrentWindowMetrics(this).bounds
+                val spl = findViewById<SlidingPaneLayout>(R.id.sliding_pane_fold_layout)
+                assertThat(spl.isSlideable).isFalse()
+                assertThat(spl[0].width).isLessThan(spl[1].width)
             }
-            Espresso.onView(ViewMatchers.withId(R.id.sliding_pane_fold_layout))
-                .check(ViewAssertions.matches(not(isTwoPane())))
         }
     }
 
diff --git a/slidingpanelayout/slidingpanelayout/src/androidTest/java/androidx/slidingpanelayout/widget/SlidingPaneLayoutTest.kt b/slidingpanelayout/slidingpanelayout/src/androidTest/java/androidx/slidingpanelayout/widget/SlidingPaneLayoutTest.kt
index 82b0b8f..2076ea3 100644
--- a/slidingpanelayout/slidingpanelayout/src/androidTest/java/androidx/slidingpanelayout/widget/SlidingPaneLayoutTest.kt
+++ b/slidingpanelayout/slidingpanelayout/src/androidTest/java/androidx/slidingpanelayout/widget/SlidingPaneLayoutTest.kt
@@ -17,6 +17,8 @@
 package androidx.slidingpanelayout.widget
 
 import android.view.View
+import android.view.View.MeasureSpec
+import android.view.View.MeasureSpec.EXACTLY
 import android.view.ViewGroup
 import android.view.ViewGroup.LayoutParams.MATCH_PARENT
 import android.view.ViewGroup.LayoutParams.WRAP_CONTENT
@@ -25,6 +27,7 @@
 import android.widget.LinearLayout
 import android.widget.ScrollView
 import androidx.slidingpanelayout.test.R
+import androidx.slidingpanelayout.widget.helpers.MeasureCountingView
 import androidx.slidingpanelayout.widget.helpers.TestActivity
 import androidx.slidingpanelayout.widget.helpers.isTwoPane
 import androidx.test.core.app.ActivityScenario
@@ -33,8 +36,10 @@
 import androidx.test.espresso.matcher.ViewMatchers
 import androidx.test.ext.junit.runners.AndroidJUnit4
 import androidx.test.filters.LargeTest
+import androidx.test.platform.app.InstrumentationRegistry
 import androidx.testutils.withActivity
 import com.google.common.truth.Truth.assertThat
+import com.google.common.truth.Truth.assertWithMessage
 import org.hamcrest.core.IsNot.not
 import org.junit.After
 import org.junit.Test
@@ -205,4 +210,80 @@
             }
         }
     }
+
+    @Test
+    fun testSingleLayoutPassLpWidthAndWeight() {
+        testSingleLayoutPass(
+            SlidingPaneLayout.LayoutParams(100, MATCH_PARENT),
+            SlidingPaneLayout.LayoutParams(0, MATCH_PARENT).apply {
+                weight = 1f
+            }
+        )
+    }
+
+    @Test
+    fun testSingleLayoutPassLpWidthAndMatch() {
+        testSingleLayoutPass(
+            SlidingPaneLayout.LayoutParams(100, MATCH_PARENT),
+            SlidingPaneLayout.LayoutParams(MATCH_PARENT, MATCH_PARENT)
+        )
+    }
+
+    @Test
+    fun testSingleLayoutPassMinWidthAndMatch() {
+        testSingleLayoutPass(
+            SlidingPaneLayout.LayoutParams(WRAP_CONTENT, MATCH_PARENT),
+            SlidingPaneLayout.LayoutParams(MATCH_PARENT, MATCH_PARENT)
+        ) {
+            minimumWidth = 100
+        }
+    }
+    @Test
+    fun testSingleLayoutPassMinWidthAndWeight() {
+        testSingleLayoutPass(
+            SlidingPaneLayout.LayoutParams(WRAP_CONTENT, MATCH_PARENT),
+            SlidingPaneLayout.LayoutParams(0, MATCH_PARENT).apply { weight = 1f }
+        ) {
+            minimumWidth = 100
+        }
+    }
+}
+
+private fun View.measureAndLayout(
+    width: Int,
+    height: Int
+) {
+    measure(
+        MeasureSpec.makeMeasureSpec(width, EXACTLY),
+        MeasureSpec.makeMeasureSpec(height, EXACTLY)
+    )
+    layout(0, 0, measuredWidth, measuredHeight)
+}
+
+private fun testSingleLayoutPass(
+    firstLayoutParams: SlidingPaneLayout.LayoutParams,
+    secondLayoutParams: SlidingPaneLayout.LayoutParams,
+    configFirst: MeasureCountingView.() -> Unit = {}
+) {
+    val context = InstrumentationRegistry.getInstrumentation().context
+    val firstChild = MeasureCountingView(context).apply(configFirst)
+    val secondChild = MeasureCountingView(context)
+    val spl = SlidingPaneLayout(context).apply {
+        isOverlappingEnabled = false
+        addView(firstChild, firstLayoutParams)
+        addView(secondChild, secondLayoutParams)
+    }
+
+    spl.measureAndLayout(300, 300)
+
+    firstChild.assertReportingMeasureCallTraces {
+        assertWithMessage("first child measure count")
+            .that(measureCount)
+            .isEqualTo(1)
+    }
+    secondChild.assertReportingMeasureCallTraces {
+        assertWithMessage("second child measure count")
+            .that(measureCount)
+            .isEqualTo(1)
+    }
 }
diff --git a/bluetooth/integration-tests/testapp/src/main/java/androidx/bluetooth/integration/testapp/ui/common/ByteArray.kt b/slidingpanelayout/slidingpanelayout/src/androidTest/java/androidx/slidingpanelayout/widget/helpers/EmptyTestActivity.kt
similarity index 77%
copy from bluetooth/integration-tests/testapp/src/main/java/androidx/bluetooth/integration/testapp/ui/common/ByteArray.kt
copy to slidingpanelayout/slidingpanelayout/src/androidTest/java/androidx/slidingpanelayout/widget/helpers/EmptyTestActivity.kt
index 40b8f5b..7d72c5d9 100644
--- a/bluetooth/integration-tests/testapp/src/main/java/androidx/bluetooth/integration/testapp/ui/common/ByteArray.kt
+++ b/slidingpanelayout/slidingpanelayout/src/androidTest/java/androidx/slidingpanelayout/widget/helpers/EmptyTestActivity.kt
@@ -14,7 +14,8 @@
  * limitations under the License.
  */
 
-package androidx.bluetooth.integration.testapp.ui.common
+package androidx.slidingpanelayout.widget.helpers
 
-fun ByteArray.toHexString(): String =
-    joinToString(separator = " ", prefix = "0x") { String.format("%02X", it) }
+import android.app.Activity
+
+class EmptyTestActivity : Activity()
diff --git a/slidingpanelayout/slidingpanelayout/src/androidTest/java/androidx/slidingpanelayout/widget/helpers/MeasureCountingView.kt b/slidingpanelayout/slidingpanelayout/src/androidTest/java/androidx/slidingpanelayout/widget/helpers/MeasureCountingView.kt
new file mode 100644
index 0000000..8a4cb2d
--- /dev/null
+++ b/slidingpanelayout/slidingpanelayout/src/androidTest/java/androidx/slidingpanelayout/widget/helpers/MeasureCountingView.kt
@@ -0,0 +1,71 @@
+/*
+ * 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.slidingpanelayout.widget.helpers
+
+import android.content.Context
+import android.util.AttributeSet
+import android.view.View
+import android.view.View.MeasureSpec.AT_MOST
+
+class MeasureCountingView @JvmOverloads constructor(
+    context: Context,
+    attrs: AttributeSet? = null
+) : View(context, attrs) {
+
+    private val _measureCallTraces = mutableListOf<Throwable>()
+    val measureCallTraces: List<Throwable>
+        get() = _measureCallTraces
+
+    val measureCount: Int
+        get() = _measureCallTraces.size
+
+    fun resetMeasureTracking() {
+        _measureCallTraces.clear()
+    }
+
+    /**
+     * Run [block] and append [measureCallTraces] to the
+     * [suppressed exceptions][Throwable.addSuppressed] of any [AssertionError] thrown for analysis
+     */
+    inline fun <R> assertReportingMeasureCallTraces(
+        block: MeasureCountingView.() -> R
+    ): R = try {
+        block()
+    } catch (ae: AssertionError) {
+        for (trace in measureCallTraces) {
+            ae.addSuppressed(trace)
+        }
+        throw ae
+    }
+
+    override fun onMeasure(
+        widthMeasureSpec: Int,
+        heightMeasureSpec: Int
+    ) {
+        _measureCallTraces += Throwable("measure pass ${measureCount + 1}")
+
+        // Default View measurement treats AT_MOST identically to EXACTLY; default to a
+        // content size of 100px
+        val modifiedWidthSpec = if (MeasureSpec.getMode(widthMeasureSpec) == AT_MOST) {
+            MeasureSpec.makeMeasureSpec(
+                MeasureSpec.getSize(widthMeasureSpec).coerceAtMost(100),
+                MeasureSpec.EXACTLY
+            )
+        } else widthMeasureSpec
+        super.onMeasure(modifiedWidthSpec, heightMeasureSpec)
+    }
+}
diff --git a/slidingpanelayout/slidingpanelayout/src/androidTest/res/layout/activity_test_fold_layout.xml b/slidingpanelayout/slidingpanelayout/src/androidTest/res/layout/activity_test_fold_layout.xml
index 6a0d564..c0a8bb5 100644
--- a/slidingpanelayout/slidingpanelayout/src/androidTest/res/layout/activity_test_fold_layout.xml
+++ b/slidingpanelayout/slidingpanelayout/src/androidTest/res/layout/activity_test_fold_layout.xml
@@ -24,14 +24,12 @@
         android:layout_width="10dp"
         android:layout_height="match_parent"
         android:layout_weight="1"
-        android:layout_gravity="left"
         android:text="List" />
 
     <TextView
         android:id="@+id/detail_pane"
         android:layout_width="10dp"
         android:layout_height="match_parent"
-        android:layout_gravity="right"
         android:layout_weight="2"
         android:text="Detail" />
 </androidx.slidingpanelayout.widget.SlidingPaneLayout>
\ No newline at end of file
diff --git a/slidingpanelayout/slidingpanelayout/src/androidTest/res/layout/activity_test_layout.xml b/slidingpanelayout/slidingpanelayout/src/androidTest/res/layout/activity_test_layout.xml
index 5d9b476..1aabf47 100644
--- a/slidingpanelayout/slidingpanelayout/src/androidTest/res/layout/activity_test_layout.xml
+++ b/slidingpanelayout/slidingpanelayout/src/androidTest/res/layout/activity_test_layout.xml
@@ -23,14 +23,12 @@
         android:id="@+id/list_pane"
         android:layout_width="100dp"
         android:layout_height="match_parent"
-        android:layout_gravity="left"
         android:text="List" />
 
     <TextView
         android:id="@+id/detail_pane"
         android:layout_width="match_parent"
         android:layout_height="match_parent"
-        android:layout_gravity="right"
         android:layout_weight="1"
         android:paddingLeft="16dp"
         android:paddingRight="16dp"
diff --git a/slidingpanelayout/slidingpanelayout/src/main/java/androidx/slidingpanelayout/widget/SlidingPaneLayout.kt b/slidingpanelayout/slidingpanelayout/src/main/java/androidx/slidingpanelayout/widget/SlidingPaneLayout.kt
index f9d8b6e..0ad221f 100644
--- a/slidingpanelayout/slidingpanelayout/src/main/java/androidx/slidingpanelayout/widget/SlidingPaneLayout.kt
+++ b/slidingpanelayout/slidingpanelayout/src/main/java/androidx/slidingpanelayout/widget/SlidingPaneLayout.kt
@@ -16,7 +16,6 @@
 
 package androidx.slidingpanelayout.widget
 
-import android.R
 import android.content.Context
 import android.graphics.Canvas
 import android.graphics.PixelFormat
@@ -27,11 +26,13 @@
 import android.os.Parcelable
 import android.os.Parcelable.ClassLoaderCreator
 import android.util.AttributeSet
-import android.util.Log
 import android.view.MotionEvent
 import android.view.View
+import android.view.View.MeasureSpec
 import android.view.ViewGroup
 import android.view.ViewGroup.LayoutParams
+import android.view.ViewGroup.LayoutParams.MATCH_PARENT
+import android.view.ViewGroup.LayoutParams.WRAP_CONTENT
 import android.view.ViewGroup.getChildMeasureSpec
 import android.view.accessibility.AccessibilityEvent
 import android.widget.FrameLayout
@@ -40,6 +41,7 @@
 import androidx.annotation.IntDef
 import androidx.annotation.Px
 import androidx.core.content.ContextCompat
+import androidx.core.content.withStyledAttributes
 import androidx.core.graphics.Insets
 import androidx.core.os.HandlerCompat
 import androidx.core.view.AccessibilityDelegateCompat
@@ -47,9 +49,11 @@
 import androidx.core.view.accessibility.AccessibilityNodeInfoCompat
 import androidx.core.view.animation.PathInterpolatorCompat
 import androidx.core.view.forEach
+import androidx.core.view.forEachIndexed
 import androidx.customview.view.AbsSavedState
 import androidx.customview.widget.Openable
 import androidx.customview.widget.ViewDragHelper
+import androidx.slidingpanelayout.R
 import androidx.transition.ChangeBounds
 import androidx.transition.Transition
 import androidx.transition.TransitionManager
@@ -59,6 +63,7 @@
 import kotlin.math.abs
 import kotlin.math.max
 import kotlin.math.min
+import kotlin.math.roundToInt
 import kotlinx.coroutines.CoroutineScope
 import kotlinx.coroutines.CoroutineStart
 import kotlinx.coroutines.Job
@@ -101,21 +106,31 @@
     } else ViewCompat.getMinimumWidth(child)
 }
 
-private fun measureChildHeight(child: View, spec: Int, padding: Int): Int {
-    val lp = child.layoutParams as SlidingPaneLayout.LayoutParams
-    val childHeightSpec: Int
-    val skippedFirstPass = lp.width == 0 && lp.weight > 0
-    childHeightSpec = if (skippedFirstPass) {
+private fun getChildHeightMeasureSpec(
+    child: View,
+    skippedFirstPass: Boolean,
+    spec: Int,
+    padding: Int
+): Int {
+    val lp = child.layoutParams
+    return if (skippedFirstPass) {
         // This was skipped the first time; figure out a real height spec.
         getChildMeasureSpec(spec, padding, lp.height)
     } else {
-        View.MeasureSpec.makeMeasureSpec(
-            child.measuredHeight, View.MeasureSpec.EXACTLY
-        )
+        MeasureSpec.makeMeasureSpec(child.measuredHeight, MeasureSpec.EXACTLY)
     }
-    return childHeightSpec
 }
 
+private inline val SlidingPaneLayout.LayoutParams.canInfluenceParentSize: Boolean
+    get() = (width != MATCH_PARENT && width != 0) ||
+        (height != MATCH_PARENT && height != 0)
+
+private inline val SlidingPaneLayout.LayoutParams.weightOnlyWidth: Boolean
+    get() = width == 0 && weight > 0
+
+private inline val SlidingPaneLayout.LayoutParams.canExpandWidth: Boolean
+    get() = width == MATCH_PARENT || weight > 0
+
 /**
  * Utility for calculating layout positioning of child views relative to a [FoldingFeature].
  * This class is not thread-safe.
@@ -247,6 +262,7 @@
  * how to divide leftover space after measurement is complete. It is only relevant for width.
  * When views do not overlap weight behaves as it does in a LinearLayout.
  */
+@Suppress("LeakingThis")
 open class SlidingPaneLayout @JvmOverloads constructor(
     context: Context,
     attrs: AttributeSet? = null,
@@ -379,6 +395,23 @@
             requestLayout()
         }
 
+    /**
+     * When set, if sufficient space is not available to present child panes side by side
+     * while respecting the child pane's [LayoutParams.width] or
+     * [minimum width][View.getMinimumWidth], the [SlidingPaneLayout] may allow the child panes
+     * to overlap. When child panes overlap [lockMode] determines whether the user can drag
+     * the top pane to one side to make the lower pane available for viewing or interaction.
+     *
+     * Defaults to `true`.
+     */
+    var isOverlappingEnabled: Boolean = true
+        set(value) {
+            if (value != field) {
+                field = value
+                requestLayout()
+            }
+        }
+
     private val systemGestureInsets: Insets?
         // Get system gesture insets when SDK version is larger than 29. Otherwise, return null.
         get() {
@@ -399,12 +432,16 @@
     private val windowInfoTracker = WindowInfoTracker.getOrCreate(context)
 
     init {
-        val density = context.resources.displayMetrics.density
         setWillNotDraw(false)
         ViewCompat.setAccessibilityDelegate(this, AccessibilityDelegate())
         ViewCompat.setImportantForAccessibility(this, ViewCompat.IMPORTANT_FOR_ACCESSIBILITY_YES)
         dragHelper = ViewDragHelper.create(this, 0.5f, DragHelperCallback())
-        dragHelper.minVelocity = MIN_FLING_VELOCITY * density
+        dragHelper.minVelocity = MIN_FLING_VELOCITY * context.resources.displayMetrics.density
+
+        context.withStyledAttributes(attrs, R.styleable.SlidingPaneLayout) {
+            isOverlappingEnabled =
+                getBoolean(R.styleable.SlidingPaneLayout_isOverlappingEnabled, true)
+        }
     }
 
     /**
@@ -487,7 +524,7 @@
         for (listener in panelSlideListeners) {
             listener.onPanelClosed(panel)
         }
-        sendAccessibilityEvent(AccessibilityEvent.TYPE_WINDOW_STATE_CHANGED);
+        sendAccessibilityEvent(AccessibilityEvent.TYPE_WINDOW_STATE_CHANGED)
     }
 
     private fun updateObscuredViewsVisibility(panel: View?) {
@@ -622,107 +659,126 @@
         var widthRemaining = widthAvailable
         val childCount = childCount
         if (childCount > 2) {
-            Log.e(TAG, "onMeasure: More than two child views are not supported.")
+            error("SlidingPaneLayout: More than two child views are not supported.")
         }
 
         // We'll find the current one below.
         slideableView = null
 
+        // Make kotlinc happy that this can't change while we run measurement
+        val allowOverlappingPanes = isOverlappingEnabled
+
+        var skippedChildMeasure = false
+
         // First pass. Measure based on child LayoutParams width/height.
-        // Weight will incur a second pass.
-        for (i in 0 until childCount) {
-            val child = getChildAt(i)
+        // Weight will incur a second pass; distributing leftover space in the event of overlap
+        // behaves similar to weight and will also incur a second pass.
+        forEachIndexed { i, child ->
             val lp = child.layoutParams as LayoutParams
             if (child.visibility == GONE) {
                 lp.dimWhenOffset = false
-                continue
+                return@forEachIndexed
             }
             if (lp.weight > 0) {
                 weightSum += lp.weight
 
                 // If we have no width, weight is the only contributor to the final size.
                 // Measure this view on the weight pass only.
-                if (lp.width == 0) continue
+                // If we do have width, then we need to measure this child to see how much space
+                // is left for other children.
+                if (lp.width == 0) {
+                    skippedChildMeasure = true
+                    return@forEachIndexed
+                }
             }
-            var childWidthSpec: Int
             val horizontalMargin = lp.leftMargin + lp.rightMargin
-            val childWidthSize = (widthAvailable - horizontalMargin).coerceAtLeast(0)
+            val widthAvailableToChild =
+                if (allowOverlappingPanes) widthAvailable else widthRemaining
             // When the parent width spec is UNSPECIFIED, measure each of child to get its
             // desired width.
-            childWidthSpec = when (lp.width) {
-                ViewGroup.LayoutParams.WRAP_CONTENT -> {
-                    MeasureSpec.makeMeasureSpec(
-                        childWidthSize,
-                        if (widthMode == MeasureSpec.UNSPECIFIED) widthMode else MeasureSpec.AT_MOST
-                    )
-                }
-                ViewGroup.LayoutParams.MATCH_PARENT -> {
-                    MeasureSpec.makeMeasureSpec(childWidthSize, widthMode)
-                }
-                else -> {
-                    MeasureSpec.makeMeasureSpec(lp.width, MeasureSpec.EXACTLY)
-                }
+            val childWidthSpec = when (lp.width) {
+                WRAP_CONTENT -> MeasureSpec.makeMeasureSpec(
+                    (widthAvailableToChild - horizontalMargin).coerceAtLeast(0),
+                    if (widthMode == MeasureSpec.UNSPECIFIED) widthMode else MeasureSpec.AT_MOST
+                )
+                MATCH_PARENT -> MeasureSpec.makeMeasureSpec(
+                    (widthAvailableToChild - horizontalMargin).coerceAtLeast(0),
+                    widthMode
+                )
+                else -> MeasureSpec.makeMeasureSpec(lp.width, MeasureSpec.EXACTLY)
             }
+            val childWidthSize = MeasureSpec.getSize(childWidthSpec)
             val childHeightSpec = getChildMeasureSpec(
                 heightMeasureSpec,
-                paddingTop + paddingBottom, lp.height
+                paddingTop + paddingBottom + lp.topMargin + lp.bottomMargin,
+                lp.height
             )
-            child.measure(childWidthSpec, childHeightSpec)
-            val childWidth = child.measuredWidth
-            val childHeight = child.measuredHeight
-            if (childHeight > layoutHeight) {
-                if (heightMode == MeasureSpec.AT_MOST) {
-                    layoutHeight = childHeight.coerceAtMost(maxLayoutHeight)
-                } else if (heightMode == MeasureSpec.UNSPECIFIED) {
-                    layoutHeight = childHeight
+            if (allowOverlappingPanes || lp.canInfluenceParentSize ||
+                MeasureSpec.getMode(childWidthSpec) != MeasureSpec.EXACTLY) {
+                child.measure(childWidthSpec, childHeightSpec)
+                val childWidth = child.measuredWidth
+                val childHeight = child.measuredHeight
+                if (childHeight > layoutHeight) {
+                    if (heightMode == MeasureSpec.AT_MOST) {
+                        layoutHeight = childHeight.coerceAtMost(maxLayoutHeight)
+                    } else if (heightMode == MeasureSpec.UNSPECIFIED) {
+                        layoutHeight = childHeight
+                    }
                 }
+                widthRemaining -= childWidth
+            } else {
+                // Skip actually measuring, but record how much width it will consume
+                widthRemaining -= childWidthSize
+                skippedChildMeasure = true
             }
-            widthRemaining -= childWidth
             // Skip first child (list pane), the list pane is always a non-sliding pane.
-            if (i == 0) {
-                continue
-            }
-            lp.slideable = widthRemaining < 0
-            canSlide = canSlide or lp.slideable
-            if (lp.slideable) {
-                slideableView = child
+            if (i > 0) {
+                lp.slideable = allowOverlappingPanes && widthRemaining < 0
+                canSlide = canSlide or lp.slideable
+                if (lp.slideable) {
+                    slideableView = child
+                }
             }
         }
-        // Second pass. Resolve weight.
-        // Child views overlap when the combined width of child views cannot fit into the
-        // available width. Each of child views is sized to fill all available space. If there is
-        // no overlap, distribute the extra width proportionally to weight.
-        if (canSlide || weightSum > 0) {
-            for (i in 0 until childCount) {
-                val child = getChildAt(i)
-                if (child.visibility == GONE) {
-                    continue
-                }
+
+        // Second pass. Resolve weight. This can still affect the size of the SlidingPaneLayout.
+        // Ideally we only measure any given child view once, but if a child has both nonzero
+        // lp.width and weight, we have to do both.
+        // If overlapping is permitted by [allowOverlappingPanes], child views overlap when
+        // the combined width of child views cannot fit into the available width.
+        // Each of child views is sized to fill all available space. If there is no overlap,
+        // distribute the extra width proportionally to weight.
+        if (canSlide || weightSum > 0 || skippedChildMeasure) {
+            var totalMeasuredWidth = 0
+            forEach { child ->
+                if (child.visibility == GONE) return@forEach
                 val lp = child.layoutParams as LayoutParams
-                val skippedFirstPass = lp.width == 0 && lp.weight > 0
+                val skippedFirstPass = !lp.canInfluenceParentSize || lp.weightOnlyWidth
                 val measuredWidth = if (skippedFirstPass) 0 else child.measuredWidth
-                var newWidth = measuredWidth
-                var childWidthSpec = 0
-                if (canSlide) {
+                val newWidth = when {
                     // Child view consumes available space if the combined width cannot fit into
                     // the layout available width.
-                    val horizontalMargin = lp.leftMargin + lp.rightMargin
-                    newWidth = widthAvailable - horizontalMargin
-                    childWidthSpec = MeasureSpec.makeMeasureSpec(
-                        newWidth, MeasureSpec.EXACTLY
-                    )
-                } else if (lp.weight > 0) {
-                    // Distribute the extra width proportionally similar to LinearLayout
-                    val widthToDistribute = widthRemaining.coerceAtLeast(0)
-                    val addedWidth = (lp.weight * widthToDistribute / weightSum).toInt()
-                    newWidth = measuredWidth + addedWidth
-                    childWidthSpec = MeasureSpec.makeMeasureSpec(newWidth, MeasureSpec.EXACTLY)
+                    canSlide -> widthAvailable - lp.horizontalMargin
+                    lp.weight > 0 -> {
+                        // Distribute the extra width proportionally similar to LinearLayout
+                        val widthToDistribute = widthRemaining.coerceAtLeast(0)
+                        val addedWidth = (lp.weight * widthToDistribute / weightSum).roundToInt()
+                        measuredWidth + addedWidth
+                    }
+                    lp.width == MATCH_PARENT -> {
+                        widthAvailable - lp.horizontalMargin - totalMeasuredWidth
+                    }
+                    lp.width > 0 -> lp.width
+                    else -> measuredWidth
                 }
-                val childHeightSpec = measureChildHeight(
-                    child, heightMeasureSpec,
-                    paddingTop + paddingBottom
-                )
                 if (measuredWidth != newWidth) {
+                    val childWidthSpec = MeasureSpec.makeMeasureSpec(newWidth, MeasureSpec.EXACTLY)
+                    val childHeightSpec = getChildHeightMeasureSpec(
+                        child,
+                        skippedFirstPass,
+                        heightMeasureSpec,
+                        paddingTop + paddingBottom + lp.topMargin + lp.bottomMargin
+                    )
                     child.measure(childWidthSpec, childHeightSpec)
                     val childHeight = child.measuredHeight
                     if (childHeight > layoutHeight) {
@@ -733,68 +789,14 @@
                         }
                     }
                 }
+                totalMeasuredWidth += newWidth + lp.leftMargin + lp.rightMargin
             }
         }
 
-        // At this point, all child views have been measured. Calculate the device fold position
-        // in the view. Update the split position to where the fold when it exists.
-        val leftSplitBounds = tmpRect
-        val rightSplitBounds = tmpRect2
-        val splitViews = foldBoundsCalculator.splitViewPositions(
-            foldingFeature,
-            this,
-            leftSplitBounds,
-            rightSplitBounds
-        )
-        if (splitViews && !canSlide) {
-            for (i in 0 until childCount) {
-                val child = getChildAt(i)
-                if (child.visibility == GONE) {
-                    continue
-                }
-                val splitView = when (i) {
-                    0 -> leftSplitBounds
-                    1 -> rightSplitBounds
-                    else -> error("too many children to split")
-                }
-                val lp = child.layoutParams as LayoutParams
+        // All children have been measured at least once.
 
-                // If child view cannot fit in the separating view, expand the child view to fill
-                // available space.
-                val horizontalMargin = lp.leftMargin + lp.rightMargin
-                val childHeightSpec = MeasureSpec.makeMeasureSpec(
-                    child.measuredHeight,
-                    MeasureSpec.EXACTLY
-                )
-                var childWidthSpec = MeasureSpec.makeMeasureSpec(
-                    splitView.width(),
-                    MeasureSpec.AT_MOST
-                )
-                child.measure(childWidthSpec, childHeightSpec)
-                if (child.measuredWidthAndState and MEASURED_STATE_TOO_SMALL == 1 ||
-                    (getMinimumWidth(child) != 0 && splitView.width() < getMinimumWidth(child))
-                ) {
-                    childWidthSpec = MeasureSpec.makeMeasureSpec(
-                        widthAvailable - horizontalMargin,
-                        MeasureSpec.EXACTLY
-                    )
-                    child.measure(childWidthSpec, childHeightSpec)
-                    // Skip first child (list pane), the list pane is always a non-sliding pane.
-                    if (i == 0) {
-                        continue
-                    }
-                    lp.slideable = true
-                    canSlide = true
-                    slideableView = child
-                } else {
-                    childWidthSpec = MeasureSpec.makeMeasureSpec(
-                        splitView.width(),
-                        MeasureSpec.EXACTLY
-                    )
-                    child.measure(childWidthSpec, childHeightSpec)
-                }
-            }
-        }
+        // By this point we know the parent size and whether we have any sliding panes.
+        // Set the parent size now and notify observers.
         val measuredHeight = layoutHeight + paddingTop + paddingBottom
         setMeasuredDimension(widthSize, measuredHeight)
         if (canSlide != isSlideable) {
@@ -809,7 +811,78 @@
         }
     }
 
+    /**
+     * Returns `true` if any measurement was performed, `false` otherwise
+     */
+    private fun remeasureForFoldingFeature(foldingFeature: FoldingFeature): Boolean {
+        // At this point, all child views have been measured. Calculate the device fold position
+        // in the view. Update the split position to where the fold when it exists.
+        val leftSplitBounds = tmpRect
+        val rightSplitBounds = tmpRect2
+        val hasFold = foldBoundsCalculator.splitViewPositions(
+            foldingFeature,
+            this,
+            leftSplitBounds,
+            rightSplitBounds
+        )
+        if (hasFold) {
+            // Determine if child configuration would prevent following the fold position;
+            // if so, make no changes.
+            forEachIndexed { i, child ->
+                if (child.visibility == GONE) return@forEachIndexed
+                val splitView = when (i) {
+                    0 -> leftSplitBounds
+                    1 -> rightSplitBounds
+                    else -> error("too many children to split")
+                }
+                val lp = child.layoutParams as LayoutParams
+                // If the child has been given exact width settings, don't make changes
+                if (!lp.canExpandWidth) return false
+                // minimumWidth will always be >= 0 so this coerceAtLeast is safe
+                val minChildWidth = getMinimumWidth(child).coerceAtLeast(lp.width)
+                // If the child has a minimum size larger than the area left by the fold's division,
+                // don't make changes
+                if (minChildWidth + lp.horizontalMargin > splitView.width()) return false
+            }
+
+            forEachIndexed { i, child ->
+                if (child.visibility == GONE) return@forEachIndexed
+                val splitView = when (i) {
+                    0 -> leftSplitBounds
+                    1 -> rightSplitBounds
+                    else -> error("too many children to split")
+                }
+                val lp = child.layoutParams as LayoutParams
+
+                val childWidthSpec = MeasureSpec.makeMeasureSpec(
+                    (splitView.width() - lp.horizontalMargin).coerceAtLeast(0),
+                    MeasureSpec.EXACTLY
+                )
+
+                // Use the child's existing height; all children have been measured once since
+                // their last layout
+                val childHeightSpec = MeasureSpec.makeMeasureSpec(
+                    child.measuredHeight,
+                    MeasureSpec.EXACTLY
+                )
+
+                child.measure(childWidthSpec, childHeightSpec)
+            }
+        }
+        return hasFold
+    }
+
     override fun onLayout(changed: Boolean, l: Int, t: Int, r: Int, b: Int) {
+        val foldingFeature = foldingFeature
+        if (!isSlideable) {
+            if (foldingFeature != null) {
+                // We can't determine the position of the screen fold relative to the placed
+                // SlidingPaneLayout until the SlidingPaneLayout is placed, which is complete
+                // when onLayout is called.
+                remeasureForFoldingFeature(foldingFeature)
+            }
+        }
+
         val isLayoutRtl = isLayoutRtlSupport
         val width = r - l
         val paddingStart = if (isLayoutRtl) paddingRight else paddingLeft
@@ -861,10 +934,10 @@
             // offset for the next child, in order to avoid rendering the content under it.
             var nextXOffset = 0
             if (foldingFeature != null &&
-                foldingFeature!!.orientation == FoldingFeature.Orientation.VERTICAL &&
-                foldingFeature!!.isSeparating
+                foldingFeature.orientation == FoldingFeature.Orientation.VERTICAL &&
+                foldingFeature.isSeparating
             ) {
-                nextXOffset = foldingFeature!!.bounds.width()
+                nextXOffset = foldingFeature.bounds.width()
             }
             nextXStart += child.width + abs(nextXOffset)
         }
@@ -1294,15 +1367,14 @@
      */
     protected open fun canScroll(v: View, checkV: Boolean, dx: Int, x: Int, y: Int): Boolean {
         if (v is ViewGroup) {
-            val group = v
             val scrollX = v.getScrollX()
             val scrollY = v.getScrollY()
-            val count = group.childCount
+            val count = v.childCount
             // Count backwards - let topmost views consume scroll distance first.
             for (i in count - 1 downTo 0) {
                 // TODO: Add versioned support here for transformed views.
                 // This will not work for transformed views in Honeycomb+
-                val child = group.getChildAt(i)
+                val child = v.getChildAt(i)
                 if (x + scrollX >= child.left &&
                     x + scrollX < child.right &&
                     y + scrollY >= child.top &&
@@ -1346,7 +1418,7 @@
         val superState = super.onSaveInstanceState()
         val ss = SavedState(superState)
         ss.isOpen = if (isSlideable) isOpen else preservedOpenState
-        ss.mLockMode = lockMode
+        ss.lockMode = lockMode
         return ss
     }
 
@@ -1362,7 +1434,7 @@
             closePane()
         }
         preservedOpenState = state.isOpen
-        lockMode = state.mLockMode
+        lockMode = state.lockMode
     }
 
     private inner class DragHelperCallback() : ViewDragHelper.Callback() {
@@ -1490,6 +1562,9 @@
         @JvmField
         internal var dimWhenOffset = false
 
+        internal inline val horizontalMargin: Int
+            get() = leftMargin + rightMargin
+
         constructor() : super(MATCH_PARENT, MATCH_PARENT)
         constructor(width: Int, height: Int) : super(width, height)
         constructor(source: ViewGroup.LayoutParams) : super(source)
@@ -1499,15 +1574,9 @@
         }
 
         constructor(context: Context, attrs: AttributeSet?) : super(context, attrs) {
-            val a = context.obtainStyledAttributes(attrs, ATTRS)
-            weight = a.getFloat(0, 0f)
-            a.recycle()
-        }
-
-        companion object {
-            private val ATTRS = intArrayOf(
-                R.attr.layout_weight
-            )
+            context.withStyledAttributes(attrs, R.styleable.SlidingPaneLayout_Layout) {
+                weight = getFloat(R.styleable.SlidingPaneLayout_Layout_android_layout_weight, 0f)
+            }
         }
     }
 
@@ -1515,18 +1584,18 @@
         var isOpen = false
 
         @LockMode
-        var mLockMode = 0
+        var lockMode = 0
 
         constructor(superState: Parcelable?) : super(superState!!)
-        constructor(`in`: Parcel, loader: ClassLoader?) : super(`in`, loader) {
-            isOpen = `in`.readInt() != 0
-            mLockMode = `in`.readInt()
+        constructor(parcel: Parcel, loader: ClassLoader?) : super(parcel, loader) {
+            isOpen = parcel.readInt() != 0
+            lockMode = parcel.readInt()
         }
 
         override fun writeToParcel(out: Parcel, flags: Int) {
             super.writeToParcel(out, flags)
             out.writeInt(if (isOpen) 1 else 0)
-            out.writeInt(mLockMode)
+            out.writeInt(lockMode)
         }
 
         companion object {
diff --git a/slidingpanelayout/slidingpanelayout/src/main/res/values/attrs.xml b/slidingpanelayout/slidingpanelayout/src/main/res/values/attrs.xml
new file mode 100644
index 0000000..c5a5344
--- /dev/null
+++ b/slidingpanelayout/slidingpanelayout/src/main/res/values/attrs.xml
@@ -0,0 +1,24 @@
+<?xml version="1.0" encoding="utf-8"?><!--
+  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.
+  -->
+
+<resources>
+    <declare-styleable name="SlidingPaneLayout">
+        <attr name="isOverlappingEnabled" format="boolean"/>
+    </declare-styleable>
+    <declare-styleable name="SlidingPaneLayout_Layout">
+        <attr name="android:layout_weight"/>
+    </declare-styleable>
+</resources>
\ No newline at end of file
diff --git a/testutils/testutils-gradle-plugin/src/main/java/androidx/testutils/gradle/ProjectSetupRule.kt b/testutils/testutils-gradle-plugin/src/main/java/androidx/testutils/gradle/ProjectSetupRule.kt
index b425ca5..81ddd1d 100644
--- a/testutils/testutils-gradle-plugin/src/main/java/androidx/testutils/gradle/ProjectSetupRule.kt
+++ b/testutils/testutils-gradle-plugin/src/main/java/androidx/testutils/gradle/ProjectSetupRule.kt
@@ -109,30 +109,6 @@
         writeGradleProperties()
     }
 
-    fun getSdkDirectory(): String {
-        val localProperties = File(props.rootProjectPath, "local.properties")
-        when {
-            localProperties.exists() -> {
-                val stream = localProperties.inputStream()
-                val properties = Properties()
-                properties.load(stream)
-                return properties.getProperty("sdk.dir")
-            }
-            System.getenv("ANDROID_HOME") != null -> {
-                return System.getenv("ANDROID_HOME")
-            }
-            System.getenv("ANDROID_SDK_ROOT") != null -> {
-                return System.getenv("ANDROID_SDK_ROOT")
-            }
-            else -> {
-                throw IllegalStateException(
-                    "ProjectSetupRule did find local.properties at: $localProperties and " +
-                        "neither ANDROID_HOME or ANDROID_SDK_ROOT was set."
-                )
-            }
-        }
-    }
-
     /**
      * Gets the latest version of a published library.
      *
diff --git a/transition/transition/src/androidTest/java/androidx/transition/FragmentTransitionSeekingTest.kt b/transition/transition/src/androidTest/java/androidx/transition/FragmentTransitionSeekingTest.kt
index 868a511..fa20a3c 100644
--- a/transition/transition/src/androidTest/java/androidx/transition/FragmentTransitionSeekingTest.kt
+++ b/transition/transition/src/androidTest/java/androidx/transition/FragmentTransitionSeekingTest.kt
@@ -30,6 +30,7 @@
 import com.google.common.truth.Truth.assertThat
 import java.util.concurrent.CountDownLatch
 import java.util.concurrent.TimeUnit
+import org.junit.Ignore
 import org.junit.Rule
 import org.junit.Test
 import org.junit.runner.RunWith
@@ -333,6 +334,7 @@
         assertThat(fragment1.requireView().parent).isNotNull()
     }
 
+    @Ignore // b/300694860
     @Test
     fun replaceOperationWithTransitionsThenOnBackPressedTwice() {
         val fm1 = activityRule.activity.supportFragmentManager
diff --git a/transition/transition/src/androidTest/java/androidx/transition/SeekTransitionTest.kt b/transition/transition/src/androidTest/java/androidx/transition/SeekTransitionTest.kt
index fd55d1a..d7adf74 100644
--- a/transition/transition/src/androidTest/java/androidx/transition/SeekTransitionTest.kt
+++ b/transition/transition/src/androidTest/java/androidx/transition/SeekTransitionTest.kt
@@ -454,7 +454,7 @@
         }
         verify(listener2, timeout(3000)).onTransitionStart(any())
         rule.runOnUiThread {
-            verify(listener2, times(1)).onTransitionEnd(any())
+            verify(listener2, times(2)).onTransitionEnd(any())
             // All transitions should be ended
             val runningTransitions = TransitionManager.getRunningTransitions()
             assertThat(runningTransitions[root]).isEmpty()
diff --git a/transition/transition/src/androidTest/java/androidx/transition/TransitionTest.java b/transition/transition/src/androidTest/java/androidx/transition/TransitionTest.java
index 30a88f5..08b967c 100644
--- a/transition/transition/src/androidTest/java/androidx/transition/TransitionTest.java
+++ b/transition/transition/src/androidTest/java/androidx/transition/TransitionTest.java
@@ -26,6 +26,7 @@
 import static org.hamcrest.Matchers.sameInstance;
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertTrue;
 import static org.junit.Assert.fail;
 import static org.mockito.ArgumentMatchers.any;
 import static org.mockito.Mockito.mock;
@@ -56,6 +57,8 @@
 import org.junit.Test;
 
 import java.util.List;
+import java.util.concurrent.CountDownLatch;
+import java.util.concurrent.TimeUnit;
 
 @MediumTest
 public class TransitionTest extends BaseTest {
@@ -433,6 +436,86 @@
         });
     }
 
+    // A listener removed from the parent is also removed from the child.
+    @Test
+    public void removedListenerNotNotifying() throws Throwable {
+        rule.runOnUiThread(() -> {
+            mScenes[0].enter();
+        });
+        View view = rule.getActivity().findViewById(R.id.view0);
+
+        final Transition slide = new Slide();
+        slide.setDuration(1);
+        final CountDownLatch latch1 = new CountDownLatch(1);
+        final CountDownLatch latch2 = new CountDownLatch(1);
+        final TransitionListenerAdapter listener1 = new TransitionListenerAdapter() {
+            @Override
+            public void onTransitionEnd(@NonNull Transition transition, boolean isReverse) {
+                latch1.countDown();
+            }
+        };
+        final TransitionListenerAdapter listener2 = new TransitionListenerAdapter() {
+            @Override
+            public void onTransitionStart(@NonNull Transition transition, boolean isReverse) {
+                transition.addListener(listener1);
+                slide.removeListener(this);
+                slide.removeListener(listener1); // should do nothing
+            }
+
+            @Override
+            public void onTransitionEnd(@NonNull Transition transition, boolean isReverse) {
+                latch2.countDown();
+            }
+        };
+        slide.addListener(listener2);
+        rule.runOnUiThread(() -> {
+            ViewGroup root = rule.getActivity().getRoot();
+            TransitionManager.beginDelayedTransition(root, slide);
+            view.setVisibility(View.INVISIBLE);
+        });
+        assertTrue(latch1.await(1, TimeUnit.SECONDS));
+        rule.runOnUiThread(() -> assertEquals(1, latch2.getCount()));
+    }
+
+    // A listener added to the parent is also added to the child.
+    @Test
+    public void addedListenerNotifying() throws Throwable {
+        rule.runOnUiThread(() -> {
+            mScenes[0].enter();
+        });
+        View view = rule.getActivity().findViewById(R.id.view0);
+
+        final Transition slide = new Slide();
+        slide.setDuration(1);
+        final CountDownLatch latch1 = new CountDownLatch(1);
+        final CountDownLatch latch2 = new CountDownLatch(1);
+        final TransitionListenerAdapter listener1 = new TransitionListenerAdapter() {
+            @Override
+            public void onTransitionEnd(@NonNull Transition transition, boolean isReverse) {
+                latch1.countDown();
+            }
+        };
+        final TransitionListenerAdapter listener2 = new TransitionListenerAdapter() {
+            @Override
+            public void onTransitionStart(@NonNull Transition transition, boolean isReverse) {
+                slide.addListener(listener1);
+            }
+
+            @Override
+            public void onTransitionEnd(@NonNull Transition transition, boolean isReverse) {
+                latch2.countDown();
+            }
+        };
+        slide.addListener(listener2);
+        rule.runOnUiThread(() -> {
+            ViewGroup root = rule.getActivity().getRoot();
+            TransitionManager.beginDelayedTransition(root, slide);
+            view.setVisibility(View.INVISIBLE);
+        });
+        assertTrue(latch1.await(1, TimeUnit.SECONDS));
+        assertTrue(latch2.await(1, TimeUnit.SECONDS));
+    }
+
     private void showInitialScene() throws Throwable {
         SyncRunnable enter0 = new SyncRunnable();
         mScenes[0].setEnterAction(enter0);
diff --git a/transition/transition/src/main/java/androidx/transition/FragmentTransitionSupport.java b/transition/transition/src/main/java/androidx/transition/FragmentTransitionSupport.java
index 52dacee..d6f55c5 100644
--- a/transition/transition/src/main/java/androidx/transition/FragmentTransitionSupport.java
+++ b/transition/transition/src/main/java/androidx/transition/FragmentTransitionSupport.java
@@ -275,10 +275,23 @@
         controller.animateToEnd();
     }
 
+    @NonNull
     @Override
-    public void animateToStart(@NonNull Object transitionController) {
+    public Runnable animateToStart(@NonNull Object transitionController,
+            @NonNull ViewGroup sceneRoot, @NonNull Runnable completeRunnable) {
         TransitionSeekController controller = (TransitionSeekController) transitionController;
         controller.animateToStart();
+        return () -> {
+            final Fade zeroDurationTransition = new Fade();
+            zeroDurationTransition.setDuration(0);
+            zeroDurationTransition.addListener(new TransitionListenerAdapter() {
+                @Override
+                public void onTransitionEnd(@NonNull Transition transition) {
+                    completeRunnable.run();
+                }
+            });
+            TransitionManager.beginDelayedTransition(sceneRoot, zeroDurationTransition);
+        };
     }
 
     @Override
diff --git a/transition/transition/src/main/java/androidx/transition/Transition.java b/transition/transition/src/main/java/androidx/transition/Transition.java
index 529448e..8e013cc 100644
--- a/transition/transition/src/main/java/androidx/transition/Transition.java
+++ b/transition/transition/src/main/java/androidx/transition/Transition.java
@@ -239,6 +239,9 @@
     // that have completed
     boolean mEnded = false;
 
+    // The transition that this was cloned from
+    private Transition mCloneParent = null;
+
     // The set of listeners to be sent transition lifecycle events.
     private ArrayList<Transition.TransitionListener> mListeners = null;
 
@@ -2138,7 +2141,9 @@
         if (mListeners == null) {
             return this;
         }
-        mListeners.remove(listener);
+        if (!mListeners.remove(listener) && mCloneParent != null) {
+            mCloneParent.removeListener(listener);
+        }
         if (mListeners.size() == 0) {
             mListeners = null;
         }
@@ -2306,9 +2311,8 @@
             clone.mStartValuesList = null;
             clone.mEndValuesList = null;
             clone.mSeekController = null;
-            if (mListeners != null) {
-                clone.mListeners = new ArrayList<>(mListeners);
-            }
+            clone.mCloneParent = this;
+            clone.mListeners = null;
             return clone;
         } catch (CloneNotSupportedException e) {
             throw new RuntimeException(e);
@@ -2336,6 +2340,17 @@
      * Calls notification on each listener.
      */
     void notifyListeners(TransitionNotification notification, boolean isReversed) {
+        notifyFromTransition(this, notification, isReversed);
+    }
+
+    private void notifyFromTransition(
+            Transition transition,
+            TransitionNotification notification,
+            boolean isReversed
+    ) {
+        if (mCloneParent != null) {
+            mCloneParent.notifyFromTransition(transition, notification, isReversed);
+        }
         if (mListeners != null && !mListeners.isEmpty()) {
             // Use a cache so that we don't have to keep allocating on every notification
             int size = mListeners.size();
@@ -2344,7 +2359,7 @@
             mListenersCache = null;
             listeners = mListeners.toArray(listeners);
             for (int i = 0; i < size; i++) {
-                notification.notifyListener(listeners[i], Transition.this, isReversed);
+                notification.notifyListener(listeners[i], transition, isReversed);
                 listeners[i] = null;
             }
             mListenersCache = listeners;
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/api/current.txt b/tv/tv-material/api/current.txt
index 2ccd66b..8518c961 100644
--- a/tv/tv-material/api/current.txt
+++ b/tv/tv-material/api/current.txt
@@ -747,8 +747,8 @@
   }
 
   @SuppressCompatibility @androidx.tv.material3.ExperimentalTvMaterial3Api public interface NavigationDrawerScope {
-    method public boolean getDoesNavigationDrawerHaveFocus();
-    property public abstract boolean doesNavigationDrawerHaveFocus;
+    method public boolean getHasFocus();
+    property public abstract boolean hasFocus;
   }
 
   @SuppressCompatibility @androidx.compose.runtime.Immutable @androidx.tv.material3.ExperimentalTvMaterial3Api public final class NonInteractiveSurfaceColors {
diff --git a/tv/tv-material/api/restricted_current.txt b/tv/tv-material/api/restricted_current.txt
index 2ccd66b..8518c961 100644
--- a/tv/tv-material/api/restricted_current.txt
+++ b/tv/tv-material/api/restricted_current.txt
@@ -747,8 +747,8 @@
   }
 
   @SuppressCompatibility @androidx.tv.material3.ExperimentalTvMaterial3Api public interface NavigationDrawerScope {
-    method public boolean getDoesNavigationDrawerHaveFocus();
-    property public abstract boolean doesNavigationDrawerHaveFocus;
+    method public boolean getHasFocus();
+    property public abstract boolean hasFocus;
   }
 
   @SuppressCompatibility @androidx.compose.runtime.Immutable @androidx.tv.material3.ExperimentalTvMaterial3Api public final class NonInteractiveSurfaceColors {
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/tv/tv-material/src/main/java/androidx/tv/material3/NavigationDrawerItem.kt b/tv/tv-material/src/main/java/androidx/tv/material3/NavigationDrawerItem.kt
index cc97ac8..297d92c 100644
--- a/tv/tv-material/src/main/java/androidx/tv/material3/NavigationDrawerItem.kt
+++ b/tv/tv-material/src/main/java/androidx/tv/material3/NavigationDrawerItem.kt
@@ -84,7 +84,7 @@
     content: @Composable () -> Unit,
 ) {
     val animatedWidth by animateDpAsState(
-        targetValue = if (doesNavigationDrawerHaveFocus) {
+        targetValue = if (hasFocus) {
             NavigationDrawerItemDefaults.ExpandedDrawerItemWidth
         } else {
             NavigationDrawerItemDefaults.CollapsedDrawerItemWidth
@@ -101,7 +101,7 @@
         onClick = onClick,
         headlineContent = {
             AnimatedVisibility(
-                visible = doesNavigationDrawerHaveFocus,
+                visible = hasFocus,
                 enter = NavigationDrawerItemDefaults.ContentAnimationEnter,
                 exit = NavigationDrawerItemDefaults.ContentAnimationExit,
             ) {
@@ -116,7 +116,7 @@
         trailingContent = trailingContent?.let {
             {
                 AnimatedVisibility(
-                    visible = doesNavigationDrawerHaveFocus,
+                    visible = hasFocus,
                     enter = NavigationDrawerItemDefaults.ContentAnimationEnter,
                     exit = NavigationDrawerItemDefaults.ContentAnimationExit,
                 ) {
@@ -127,7 +127,7 @@
         supportingContent = supportingContent?.let {
             {
                 AnimatedVisibility(
-                    visible = doesNavigationDrawerHaveFocus,
+                    visible = hasFocus,
                     enter = NavigationDrawerItemDefaults.ContentAnimationEnter,
                     exit = NavigationDrawerItemDefaults.ContentAnimationExit,
                 ) {
@@ -155,7 +155,7 @@
         onLongClick = onLongClick,
         tonalElevation = tonalElevation,
         shape = shape.toToggleableListItemShape(),
-        colors = colors.toToggleableListItemColors(doesNavigationDrawerHaveFocus),
+        colors = colors.toToggleableListItemColors(hasFocus),
         scale = scale.toToggleableListItemScale(),
         border = border.toToggleableListItemBorder(),
         glow = glow.toToggleableListItemGlow(),
diff --git a/tv/tv-material/src/main/java/androidx/tv/material3/NavigationDrawerScope.kt b/tv/tv-material/src/main/java/androidx/tv/material3/NavigationDrawerScope.kt
index 85434a3..8916e49 100644
--- a/tv/tv-material/src/main/java/androidx/tv/material3/NavigationDrawerScope.kt
+++ b/tv/tv-material/src/main/java/androidx/tv/material3/NavigationDrawerScope.kt
@@ -17,18 +17,19 @@
 package androidx.tv.material3
 
 /**
- * [NavigationDrawerScope] is used to provide the isActivated state to the [NavigationDrawerItem]
- * composable
+ * [NavigationDrawerScope] is used to provide the doesNavigationDrawerHaveFocus state to the
+ * [NavigationDrawerItem] composable
  */
 @ExperimentalTvMaterial3Api // TODO (b/263353219): Remove this before launching beta
 interface NavigationDrawerScope {
     /**
      * Whether any item within the [NavigationDrawer] or [ModalNavigationDrawer] is focused
      */
-    val doesNavigationDrawerHaveFocus: Boolean
+    @get:Suppress("GetterSetterNames")
+    val hasFocus: Boolean
 }
 
 @OptIn(ExperimentalTvMaterial3Api::class)
 internal class NavigationDrawerScopeImpl(
-    override val doesNavigationDrawerHaveFocus: Boolean
+    override val hasFocus: Boolean
 ) : NavigationDrawerScope
diff --git a/wear/compose/compose-foundation/samples/src/main/java/androidx/wear/compose/foundation/samples/SwipeToRevealSample.kt b/wear/compose/compose-foundation/samples/src/main/java/androidx/wear/compose/foundation/samples/SwipeToRevealSample.kt
index b43a669..cc1f9ce 100644
--- a/wear/compose/compose-foundation/samples/src/main/java/androidx/wear/compose/foundation/samples/SwipeToRevealSample.kt
+++ b/wear/compose/compose-foundation/samples/src/main/java/androidx/wear/compose/foundation/samples/SwipeToRevealSample.kt
@@ -17,6 +17,8 @@
 package androidx.wear.compose.foundation.samples
 
 import androidx.annotation.Sampled
+import androidx.compose.animation.core.animateFloatAsState
+import androidx.compose.animation.core.tween
 import androidx.compose.foundation.background
 import androidx.compose.foundation.clickable
 import androidx.compose.foundation.layout.Box
@@ -34,6 +36,10 @@
 import androidx.compose.ui.Alignment
 import androidx.compose.ui.Modifier
 import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.graphicsLayer
+import androidx.compose.ui.semantics.CustomAccessibilityAction
+import androidx.compose.ui.semantics.customActions
+import androidx.compose.ui.semantics.semantics
 import androidx.compose.ui.unit.dp
 import androidx.wear.compose.foundation.ExperimentalWearFoundationApi
 import androidx.wear.compose.foundation.RevealValue
@@ -56,6 +62,15 @@
 @Composable
 fun SwipeToRevealSample() {
     SwipeToReveal(
+        modifier = Modifier.semantics {
+            // Use custom actions to make the primary and secondary actions accessible
+            customActions = listOf(
+                CustomAccessibilityAction("Delete") {
+                    /* Add the primary action click handler */
+                    true
+                }
+            )
+        },
         primaryAction = {
             Box(
                 modifier = Modifier
@@ -89,9 +104,18 @@
 @OptIn(ExperimentalWearFoundationApi::class)
 @Sampled
 @Composable
-fun SwipeToRevealWithRevealOffset() {
+fun SwipeToRevealWithDelayedText() {
     val state = rememberRevealState()
     SwipeToReveal(
+        modifier = Modifier.semantics {
+            // Use custom actions to make the primary and secondary actions accessible
+            customActions = listOf(
+                CustomAccessibilityAction("Delete") {
+                    /* Add the primary action click handler */
+                    true
+                }
+            )
+        },
         state = state,
         primaryAction = {
             Box(
@@ -104,8 +128,19 @@
                     contentDescription = "Delete"
                 )
                 if (abs(state.offset) > revealOffset) {
-                    Spacer(Modifier.size(5.dp))
-                    Text("Clear")
+                    // Delay the text appearance so that it has enough space to be displayed
+                    val textAlpha = animateFloatAsState(
+                        targetValue = 1f,
+                        animationSpec = tween(
+                            durationMillis = 250,
+                            delayMillis = 250
+                        ),
+                        label = "PrimaryActionTextAlpha"
+                    )
+                    Box(modifier = Modifier.graphicsLayer { alpha = textAlpha.value }) {
+                        Spacer(Modifier.size(5.dp))
+                        Text("Clear")
+                    }
                 }
             }
         },
@@ -158,6 +193,18 @@
                 val revealState = rememberRevealState()
                 if (isExpanded) {
                     SwipeToReveal(
+                        modifier = Modifier.semantics {
+                            // Use custom actions to make the primary and secondary actions
+                            // accessible
+                            customActions = listOf(
+                                CustomAccessibilityAction("Delete") {
+                                    coroutineScope.launch {
+                                        revealState.animateTo(RevealValue.Revealed)
+                                    }
+                                    true
+                                }
+                            )
+                        },
                         state = revealState,
                         primaryAction = {
                             Box(
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-foundation/src/main/java/androidx/wear/compose/foundation/SwipeToReveal.kt b/wear/compose/compose-foundation/src/main/java/androidx/wear/compose/foundation/SwipeToReveal.kt
index 50f3c3b..136d2b8 100644
--- a/wear/compose/compose-foundation/src/main/java/androidx/wear/compose/foundation/SwipeToReveal.kt
+++ b/wear/compose/compose-foundation/src/main/java/androidx/wear/compose/foundation/SwipeToReveal.kt
@@ -380,8 +380,8 @@
  * Example of SwipeToReveal with primary action and undo action
  * @sample androidx.wear.compose.foundation.samples.SwipeToRevealSample
  *
- * Example of SwipeToReveal using [RevealScope]
- * @sample androidx.wear.compose.foundation.samples.SwipeToRevealWithRevealOffset
+ * Example of SwipeToReveal using [RevealScope] to delay the appearance of primary action text
+ * @sample androidx.wear.compose.foundation.samples.SwipeToRevealWithDelayedText
  *
  * Example of SwipeToReveal used with Expandables
  * @sample androidx.wear.compose.foundation.samples.SwipeToRevealWithExpandables
@@ -504,10 +504,18 @@
                             animationSpec = tween(durationMillis = QUICK_ANIMATION),
                             label = "SecondaryActionAnimationSpec"
                         )
-                        val actionContentAlpha = animateFloatAsState(
+                        val secondaryActionAlpha = animateFloatAsState(
+                            targetValue = if (!showSecondaryAction || hideActions) 0f else 1f,
+                            animationSpec = tween(
+                                durationMillis = QUICK_ANIMATION,
+                                easing = LinearEasing
+                            ),
+                            label = "SecondaryActionAlpha"
+                        )
+                        val primaryActionAlpha = animateFloatAsState(
                             targetValue = if (hideActions) 0f else 1f,
                             animationSpec = tween(durationMillis = 100, easing = LinearEasing),
-                            label = "ActionContentOpacity"
+                            label = "PrimaryActionAlpha"
                         )
                         val revealedContentAlpha = animateFloatAsState(
                             targetValue = if (swipeCompleted) 0f else 1f,
@@ -529,7 +537,7 @@
                                 ActionSlot(
                                     revealScope,
                                     weight = secondaryActionWeight.value,
-                                    opacity = actionContentAlpha,
+                                    opacity = secondaryActionAlpha,
                                     content = secondaryAction,
                                 )
                             }
@@ -537,7 +545,7 @@
                             ActionSlot(
                                 revealScope,
                                 content = primaryAction,
-                                opacity = actionContentAlpha
+                                opacity = primaryActionAlpha
                             )
                         }
                     }
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/ChipBenchmark.kt b/wear/compose/compose-material/benchmark/src/androidTest/java/androidx/wear/compose/material/benchmark/ChipBenchmark.kt
index e93b1f9..779f4ef 100644
--- a/wear/compose/compose-material/benchmark/src/androidTest/java/androidx/wear/compose/material/benchmark/ChipBenchmark.kt
+++ b/wear/compose/compose-material/benchmark/src/androidTest/java/androidx/wear/compose/material/benchmark/ChipBenchmark.kt
@@ -25,6 +25,7 @@
 import androidx.compose.testutils.benchmark.benchmarkFirstLayout
 import androidx.compose.testutils.benchmark.benchmarkFirstMeasure
 import androidx.compose.testutils.benchmark.benchmarkLayoutPerf
+import androidx.compose.testutils.benchmark.benchmarkToFirstPixel
 import androidx.test.ext.junit.runners.AndroidJUnit4
 import androidx.test.filters.LargeTest
 import androidx.wear.compose.material.Chip
@@ -48,6 +49,11 @@
     private val chipCaseFactory = { ChipTestCase() }
 
     @Test
+    fun first_pixel() {
+        benchmarkRule.benchmarkToFirstPixel(chipCaseFactory)
+    }
+
+    @Test
     fun first_compose() {
         benchmarkRule.benchmarkFirstCompose(chipCaseFactory)
     }
diff --git a/wear/compose/compose-material/benchmark/src/androidTest/java/androidx/wear/compose/material/benchmark/ListHeaderBenchmark.kt b/wear/compose/compose-material/benchmark/src/androidTest/java/androidx/wear/compose/material/benchmark/ListHeaderBenchmark.kt
new file mode 100644
index 0000000..3ffa865
--- /dev/null
+++ b/wear/compose/compose-material/benchmark/src/androidTest/java/androidx/wear/compose/material/benchmark/ListHeaderBenchmark.kt
@@ -0,0 +1,61 @@
+/*
+ * 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.testutils.LayeredComposeTestCase
+import androidx.compose.testutils.benchmark.ComposeBenchmarkRule
+import androidx.compose.testutils.benchmark.benchmarkToFirstPixel
+import androidx.test.ext.junit.runners.AndroidJUnit4
+import androidx.test.filters.LargeTest
+import androidx.wear.compose.material.ListHeader
+import androidx.wear.compose.material.MaterialTheme
+import androidx.wear.compose.material.Text
+import org.junit.Rule
+import org.junit.Test
+import org.junit.runner.RunWith
+
+@LargeTest
+@RunWith(AndroidJUnit4::class)
+class ListHeaderBenchmark {
+
+    @get:Rule
+    val benchmarkRule = ComposeBenchmarkRule()
+
+    private val listHeaderCaseFactory = { ListHeaderTestCase() }
+
+    @Test
+    fun first_pixel() {
+        benchmarkRule.benchmarkToFirstPixel(listHeaderCaseFactory)
+    }
+
+    internal class ListHeaderTestCase : LayeredComposeTestCase() {
+        @Composable
+        override fun MeasuredContent() {
+            ListHeader {
+                Text("Test")
+            }
+        }
+
+        @Composable
+        override fun ContentWrappers(content: @Composable () -> Unit) {
+            MaterialTheme {
+                content()
+            }
+        }
+    }
+}
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/benchmark/src/androidTest/java/androidx/wear/compose/material/benchmark/ToggleChipBenchmark.kt b/wear/compose/compose-material/benchmark/src/androidTest/java/androidx/wear/compose/material/benchmark/ToggleChipBenchmark.kt
index 642c441..0796556 100644
--- a/wear/compose/compose-material/benchmark/src/androidTest/java/androidx/wear/compose/material/benchmark/ToggleChipBenchmark.kt
+++ b/wear/compose/compose-material/benchmark/src/androidTest/java/androidx/wear/compose/material/benchmark/ToggleChipBenchmark.kt
@@ -25,6 +25,7 @@
 import androidx.compose.testutils.benchmark.benchmarkFirstLayout
 import androidx.compose.testutils.benchmark.benchmarkFirstMeasure
 import androidx.compose.testutils.benchmark.benchmarkLayoutPerf
+import androidx.compose.testutils.benchmark.benchmarkToFirstPixel
 import androidx.test.ext.junit.runners.AndroidJUnit4
 import androidx.test.filters.LargeTest
 import androidx.wear.compose.material.Icon
@@ -49,6 +50,11 @@
     private val toggleChipCaseFactory = { ToggleChipTestCase() }
 
     @Test
+    fun first_pixel() {
+        benchmarkRule.benchmarkToFirstPixel(toggleChipCaseFactory)
+    }
+
+    @Test
     fun first_compose() {
         benchmarkRule.benchmarkFirstCompose(toggleChipCaseFactory)
     }
diff --git a/wear/compose/compose-material/samples/src/main/java/androidx/wear/compose/material/samples/SwipeToRevealSample.kt b/wear/compose/compose-material/samples/src/main/java/androidx/wear/compose/material/samples/SwipeToRevealSample.kt
index e988234..d39af4a 100644
--- a/wear/compose/compose-material/samples/src/main/java/androidx/wear/compose/material/samples/SwipeToRevealSample.kt
+++ b/wear/compose/compose-material/samples/src/main/java/androidx/wear/compose/material/samples/SwipeToRevealSample.kt
@@ -24,7 +24,12 @@
 import androidx.compose.ui.Alignment
 import androidx.compose.ui.Modifier
 import androidx.compose.ui.res.painterResource
+import androidx.compose.ui.semantics.CustomAccessibilityAction
+import androidx.compose.ui.semantics.customActions
+import androidx.compose.ui.semantics.semantics
 import androidx.wear.compose.foundation.ExperimentalWearFoundationApi
+import androidx.wear.compose.foundation.SwipeToDismissBoxState
+import androidx.wear.compose.foundation.edgeSwipeToDismiss
 import androidx.wear.compose.foundation.rememberRevealState
 import androidx.wear.compose.material.AppCard
 import androidx.wear.compose.material.CardDefaults
@@ -40,10 +45,26 @@
 @OptIn(ExperimentalWearMaterialApi::class, ExperimentalWearFoundationApi::class)
 @Composable
 @Sampled
-fun SwipeToRevealChipSample() {
+fun SwipeToRevealChipSample(swipeToDismissBoxState: SwipeToDismissBoxState) {
     SwipeToRevealChip(
         revealState = rememberRevealState(),
-        modifier = Modifier.fillMaxWidth(),
+        modifier = Modifier
+            .fillMaxWidth()
+            // Use edgeSwipeToDismiss to allow SwipeToDismissBox to capture swipe events
+            .edgeSwipeToDismiss(swipeToDismissBoxState)
+            .semantics {
+                // Use custom actions to make the primary and secondary actions accessible
+                customActions = listOf(
+                    CustomAccessibilityAction("Delete") {
+                        /* Add the primary action click handler here */
+                        true
+                    },
+                    CustomAccessibilityAction("More Options") {
+                        /* Add the secondary click handler here */
+                        true
+                    }
+                )
+            },
         primaryAction = SwipeToRevealDefaults.primaryAction(
             icon = { Icon(SwipeToRevealDefaults.Delete, "Delete") },
             label = { Text("Delete") },
@@ -63,6 +84,7 @@
         )
     ) {
         Chip(
+            modifier = Modifier.fillMaxWidth(),
             onClick = { /* Add the chip click handler here */ },
             colors = ChipDefaults.primaryChipColors(),
             border = ChipDefaults.outlinedChipBorder()
@@ -75,10 +97,26 @@
 @OptIn(ExperimentalWearMaterialApi::class, ExperimentalWearFoundationApi::class)
 @Composable
 @Sampled
-fun SwipeToRevealCardSample() {
+fun SwipeToRevealCardSample(swipeToDismissBoxState: SwipeToDismissBoxState) {
     SwipeToRevealCard(
         revealState = rememberRevealState(),
-        modifier = Modifier.fillMaxWidth(),
+        modifier = Modifier
+            .fillMaxWidth()
+            // Use edgeSwipeToDismiss to allow SwipeToDismissBox to capture swipe events
+            .edgeSwipeToDismiss(swipeToDismissBoxState)
+            .semantics {
+                // Use custom actions to make the primary and secondary actions accessible
+                customActions = listOf(
+                    CustomAccessibilityAction("Delete") {
+                        /* Add the primary action click handler here */
+                        true
+                    },
+                    CustomAccessibilityAction("More Options") {
+                        /* Add the secondary click handler here */
+                        true
+                    }
+                )
+            },
         primaryAction = SwipeToRevealDefaults.primaryAction(
             icon = { Icon(SwipeToRevealDefaults.Delete, "Delete") },
             label = { Text("Delete") },
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-material/src/main/java/androidx/wear/compose/material/SwipeToReveal.kt b/wear/compose/compose-material/src/main/java/androidx/wear/compose/material/SwipeToReveal.kt
index 56ede21..1a1b0e7 100644
--- a/wear/compose/compose-material/src/main/java/androidx/wear/compose/material/SwipeToReveal.kt
+++ b/wear/compose/compose-material/src/main/java/androidx/wear/compose/material/SwipeToReveal.kt
@@ -16,6 +16,11 @@
 
 package androidx.wear.compose.material
 
+import androidx.compose.animation.AnimatedVisibility
+import androidx.compose.animation.ExitTransition
+import androidx.compose.animation.core.animateFloatAsState
+import androidx.compose.animation.core.tween
+import androidx.compose.animation.expandHorizontally
 import androidx.compose.foundation.background
 import androidx.compose.foundation.clickable
 import androidx.compose.foundation.interaction.MutableInteractionSource
@@ -45,6 +50,7 @@
 import androidx.compose.ui.graphics.vector.ImageVector
 import androidx.compose.ui.semantics.Role
 import androidx.compose.ui.unit.dp
+import androidx.compose.ui.util.lerp
 import androidx.wear.compose.foundation.ExperimentalWearFoundationApi
 import androidx.wear.compose.foundation.RevealActionType
 import androidx.wear.compose.foundation.RevealScope
@@ -358,12 +364,13 @@
 /**
  * A class containing the details required for describing the content of an action composable.
  * Both composables, [icon] and [label] are optional, however it is expected that at least one is
- * provided.
+ * provided. See the parameters below on how these are used based on action.
  *
- * @param icon A slot for providing the icon for this [SwipeToReveal] action
+ * @param icon A slot for providing the icon for this [SwipeToReveal] action. This is mandatory for
+ * primary and secondary action. It is recommended to not use this for undo action.
  * @param label A slot for providing a text label for this [SwipeToRevealAction] action. The
  * content provided here will be used in different perspective based on the action type
- * (primary action, secondary action or undo action).
+ * (primary action or undo action). It is recommended to not use this for secondary action.
  * @param modifier The [Modifier] to be applied on the action.
  * @param actionType The [RevealActionType] that gets applied to [RevealState.lastActionType] when
  * this action is clicked.
@@ -527,9 +534,11 @@
                     content = action.icon
                 )
             }
-            if (abs(revealState.offset) > revealOffset && action.label != null) {
-                Spacer(Modifier.size(5.dp))
-                action.label.invoke()
+            if (action.label != null) {
+                ActionLabel(
+                    revealState = revealState,
+                    content = action.label
+                )
             }
         }
     }
@@ -537,7 +546,7 @@
 
 @OptIn(ExperimentalWearFoundationApi::class, ExperimentalWearMaterialApi::class)
 @Composable
-private fun RevealScope.UndoAction(
+private fun UndoAction(
     revealState: RevealState,
     undoAction: SwipeToRevealAction,
     colors: SwipeToRevealActionColors
@@ -584,11 +593,14 @@
             ((-revealState.offset - revealOffset * 0.5f) / (revealOffset * 0.25f))
                 .coerceIn(0.0f, 1.0f)
         else 1f
-    // Scale icons from 50% to 100% between 50% and 100% of the progress
+    // Scale icons from 70% to 100% between 50% and 100% of the progress
     val iconScale =
         if (revealOffset > 0)
-            ((-revealState.offset - revealOffset * 0.5f) / revealOffset)
-                .coerceIn(0.0f, 0.5f) + 0.5f
+            lerp(
+                start = 0.7f,
+                stop = 1.0f,
+                fraction = (-revealState.offset - revealOffset * 0.5f) / revealOffset + 0.5f
+            )
         else 1f
     Box(
         modifier = Modifier.graphicsLayer {
@@ -600,3 +612,29 @@
         content()
     }
 }
+
+@OptIn(ExperimentalWearFoundationApi::class)
+@Composable
+private fun RevealScope.ActionLabel(
+    revealState: RevealState,
+    content: @Composable () -> Unit
+) {
+    val labelAlpha = animateFloatAsState(
+        targetValue = if (abs(revealState.offset) > revealOffset) 1f else 0f,
+        animationSpec = tween(
+            durationMillis = RAPID,
+            delayMillis = RAPID
+        ),
+        label = "ActionLabelAlpha"
+    )
+    AnimatedVisibility(
+        visible = abs(revealState.offset) > revealOffset,
+        enter = expandHorizontally(animationSpec = tween(durationMillis = RAPID)),
+        exit = ExitTransition.None
+    ) {
+        Box(modifier = Modifier.graphicsLayer { alpha = labelAlpha.value }) {
+            Spacer(Modifier.size(5.dp))
+            content.invoke()
+        }
+    }
+}
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/FoundationDemos.kt b/wear/compose/integration-tests/demos/src/main/java/androidx/wear/compose/integration/demos/FoundationDemos.kt
index a13d6d5..fc9ebf7 100644
--- a/wear/compose/integration-tests/demos/src/main/java/androidx/wear/compose/integration/demos/FoundationDemos.kt
+++ b/wear/compose/integration-tests/demos/src/main/java/androidx/wear/compose/integration/demos/FoundationDemos.kt
@@ -38,7 +38,6 @@
 import androidx.wear.compose.foundation.samples.SimpleScalingLazyColumnWithSnap
 import androidx.wear.compose.foundation.samples.SimpleSwipeToDismissBox
 import androidx.wear.compose.foundation.samples.StatefulSwipeToDismissBox
-import androidx.wear.compose.foundation.samples.SwipeToRevealWithExpandables
 import androidx.wear.compose.integration.demos.common.ComposableDemo
 import androidx.wear.compose.integration.demos.common.DemoCategory
 import androidx.wear.compose.material.samples.SwipeToRevealCardSample
@@ -152,33 +151,28 @@
         DemoCategory(
             "Swipe To Reveal",
             listOf(
-                ComposableDemo("Swipe To Reveal Chip") {
-                    SwipeToRevealChips()
-                },
-                ComposableDemo("Swipe To Reveal Card") {
-                    SwipeToRevealCards()
-                },
-                ComposableDemo("Swipe To Reveal - Custom") {
-                    SwipeToRevealWithSingleAction()
-                },
-                ComposableDemo("Swipe To Reveal - RTL") {
-                    SwipeToRevealInRtl()
-                },
-                ComposableDemo("Swipe To Reveal - Expandable") {
-                    SwipeToRevealWithExpandables()
-                },
-                ComposableDemo("Swipe To Reveal - Undo") {
-                    SwipeToRevealWithDifferentUndo()
-                },
-                ComposableDemo("S2R + EdgeSwipeToDismiss") { params ->
-                    SwipeToRevealWithEdgeSwipeToDismiss(params.navigateBack)
-                },
-                ComposableDemo("Material S2R Chip") {
-                    SwipeToRevealChipSample()
-                },
-                ComposableDemo("Material S2R Card") {
-                    SwipeToRevealCardSample()
-                }
+                DemoCategory(
+                    "Samples",
+                    listOf(
+                        ComposableDemo("Material S2R Chip") { params ->
+                            SwipeToRevealChipSample(params.swipeToDismissBoxState)
+                        },
+                        ComposableDemo("Material S2R Card") { params ->
+                            SwipeToRevealCardSample(params.swipeToDismissBoxState)
+                        },
+                    )
+                ),
+                DemoCategory(
+                    "Demos",
+                    listOf(
+                        ComposableDemo("S2R Chip") { params ->
+                            SwipeToRevealChips(params.swipeToDismissBoxState)
+                        },
+                        ComposableDemo("S2R Card") { params ->
+                            SwipeToRevealCards(params.swipeToDismissBoxState)
+                        },
+                    )
+                )
             )
         )
     ),
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/demos/src/main/java/androidx/wear/compose/integration/demos/SwipeToRevealDemo.kt b/wear/compose/integration-tests/demos/src/main/java/androidx/wear/compose/integration/demos/SwipeToRevealDemo.kt
index e37c1fc..5a6ec03 100644
--- a/wear/compose/integration-tests/demos/src/main/java/androidx/wear/compose/integration/demos/SwipeToRevealDemo.kt
+++ b/wear/compose/integration-tests/demos/src/main/java/androidx/wear/compose/integration/demos/SwipeToRevealDemo.kt
@@ -16,7 +16,6 @@
 
 package androidx.wear.compose.integration.demos
 
-import androidx.compose.foundation.layout.PaddingValues
 import androidx.compose.foundation.layout.Spacer
 import androidx.compose.foundation.layout.fillMaxSize
 import androidx.compose.foundation.layout.fillMaxWidth
@@ -26,7 +25,6 @@
 import androidx.compose.material.icons.filled.Email
 import androidx.compose.material.icons.outlined.Add
 import androidx.compose.runtime.Composable
-import androidx.compose.runtime.CompositionLocalProvider
 import androidx.compose.runtime.LaunchedEffect
 import androidx.compose.runtime.getValue
 import androidx.compose.runtime.mutableIntStateOf
@@ -35,24 +33,23 @@
 import androidx.compose.runtime.rememberCoroutineScope
 import androidx.compose.runtime.setValue
 import androidx.compose.ui.Modifier
-import androidx.compose.ui.platform.LocalLayoutDirection
+import androidx.compose.ui.semantics.CustomAccessibilityAction
+import androidx.compose.ui.semantics.customActions
+import androidx.compose.ui.semantics.semantics
 import androidx.compose.ui.text.style.TextAlign
 import androidx.compose.ui.text.style.TextOverflow
-import androidx.compose.ui.unit.LayoutDirection
 import androidx.compose.ui.unit.dp
 import androidx.wear.compose.foundation.ExpandableState
 import androidx.wear.compose.foundation.ExperimentalWearFoundationApi
 import androidx.wear.compose.foundation.RevealActionType
 import androidx.wear.compose.foundation.RevealValue
-import androidx.wear.compose.foundation.SwipeToDismissBox
-import androidx.wear.compose.foundation.createAnchors
+import androidx.wear.compose.foundation.SwipeToDismissBoxState
 import androidx.wear.compose.foundation.edgeSwipeToDismiss
 import androidx.wear.compose.foundation.expandableItem
 import androidx.wear.compose.foundation.lazy.ScalingLazyColumn
 import androidx.wear.compose.foundation.rememberExpandableState
 import androidx.wear.compose.foundation.rememberExpandableStateMapping
 import androidx.wear.compose.foundation.rememberRevealState
-import androidx.wear.compose.foundation.rememberSwipeToDismissBoxState
 import androidx.wear.compose.material.AppCard
 import androidx.wear.compose.material.Chip
 import androidx.wear.compose.material.ChipDefaults
@@ -67,92 +64,14 @@
 import kotlinx.coroutines.delay
 import kotlinx.coroutines.launch
 
-@Composable
-fun SwipeToRevealChips() {
-    val expandableStates = List(3) { rememberExpandableState(initiallyExpanded = true) }
-    ScalingLazyColumn(
-        modifier = Modifier.fillMaxSize()
-    ) {
-        item {
-            Text(text = "Swipe To Reveal Chips")
-            Spacer(Modifier.size(15.dp))
-        }
-        repeat(3) {
-            val currentState = expandableStates[it]
-            expandableItem(
-                state = currentState
-            ) { expanded ->
-                if (expanded) {
-                    SwipeToRevealChipExpandable(
-                        expandableState = currentState
-                    )
-                } else {
-                    Spacer(modifier = Modifier.width(200.dp))
-                }
-            }
-        }
-    }
-}
-
-@Composable
-fun SwipeToRevealCards() {
-    val emailMap = mutableMapOf(
-        "Android In" to
-            "Please add Swipe to dismiss to the demo.",
-        "Google Bangalore" to
-            "Hey everyone, We are pleased to inform that we are starting a new batch.",
-        "Google India" to
-            "Hi Googlers, Please be prepared for the new changes."
-    )
-    val expandableStates = List(emailMap.size) { rememberExpandableState(initiallyExpanded = true) }
-    ScalingLazyColumn(
-        modifier = Modifier.fillMaxSize()
-    ) {
-        item {
-            Text(text = "Swipe To Reveal Cards")
-            Spacer(Modifier.size(10.dp))
-        }
-        repeat(emailMap.size) {
-            val currentState = expandableStates[it]
-            val currentFrom = emailMap.keys.elementAt(it)
-            val currentEmail = emailMap.values.elementAt(it)
-            expandableItem(
-                state = currentState
-            ) { expanded ->
-                if (expanded) {
-                    SwipeToRevealCardExpandable(
-                        expandableState = currentState,
-                        from = currentFrom,
-                        email = currentEmail
-                    )
-                } else {
-                    Spacer(modifier = Modifier.width(200.dp))
-                }
-            }
-        }
-    }
-}
-
-@Composable
-fun SwipeToRevealWithSingleAction() {
-    SwipeToRevealSingleAction()
-}
-
-/**
- * Swipe to reveal in RTL. This is should be identical to LTR.
- */
-@Composable
-fun SwipeToRevealInRtl() {
-    SwipeToRevealSingleAction(LayoutDirection.Rtl)
-}
-
 @OptIn(ExperimentalWearFoundationApi::class, ExperimentalWearMaterialApi::class)
 @Composable
-fun SwipeToRevealWithDifferentUndo() {
+fun SwipeToRevealChips(swipeToDismissBoxState: SwipeToDismissBoxState) {
     val expandableStateMapping = rememberExpandableStateMapping<Int>(
         initiallyExpanded = { true }
     )
     var itemCount by remember { mutableIntStateOf(3) }
+
     ScalingLazyColumn(
         modifier = Modifier.fillMaxSize()
     ) {
@@ -166,9 +85,47 @@
                 state = currentState
             ) { expanded ->
                 val revealState = rememberRevealState()
+                val coroutineScope = rememberCoroutineScope()
+                val deleteItem = {
+                    coroutineScope.launch {
+                        revealState.animateTo(RevealValue.Revealed)
+
+                        // hide the content after some time if the state is still revealed
+                        delay(1500)
+                        if (revealState.currentValue == RevealValue.Revealed) {
+                            currentState.expanded = false
+                        }
+                    }
+                }
+                val addItem = {
+                    coroutineScope.launch {
+                        revealState.animateTo(RevealValue.Revealed)
+                        itemCount++
+
+                        // reset the state after some delay if the state is still revealed
+                        delay(2000)
+                        if (revealState.currentValue == RevealValue.Revealed) {
+                            revealState.animateTo(RevealValue.Covered)
+                            revealState.lastActionType = RevealActionType.None
+                        }
+                    }
+                }
                 if (expanded) {
-                    val coroutineScope = rememberCoroutineScope()
                     SwipeToRevealChip(
+                        modifier = Modifier
+                            .edgeSwipeToDismiss(swipeToDismissBoxState)
+                            .semantics {
+                                customActions = listOf(
+                                    CustomAccessibilityAction("Delete") {
+                                        deleteItem()
+                                        true
+                                    },
+                                    CustomAccessibilityAction("Duplicate") {
+                                        addItem()
+                                        true
+                                    }
+                                )
+                            },
                         revealState = revealState,
                         primaryAction = SwipeToRevealDefaults.primaryAction(
                             icon = {
@@ -180,41 +137,23 @@
                             label = { Text(text = "Delete") }
                         ) {
                             // Remove the item
-                            coroutineScope.launch {
-                                revealState.animateTo(RevealValue.Revealed)
-
-                                // hide the content after some time if the state is still revealed
-                                delay(1500)
-                                if (revealState.currentValue == RevealValue.Revealed) {
-                                    currentState.expanded = false
-                                }
-                            }
+                            deleteItem()
                         },
                         secondaryAction = SwipeToRevealDefaults.secondaryAction(
                             icon = {
                                 Icon(Icons.Outlined.Add, contentDescription = "Duplicate")
                             },
                         ) {
-                            coroutineScope.launch {
-                                revealState.animateTo(RevealValue.Revealed)
-                                itemCount++
-
-                                // reset the state after some delay if the state is still revealed
-                                delay(2000)
-                                if (revealState.currentValue == RevealValue.Revealed) {
-                                    revealState.animateTo(RevealValue.Covered)
-                                    revealState.lastActionType = RevealActionType.None
-                                }
-                            }
+                            addItem()
                         },
                         undoPrimaryAction = SwipeToRevealDefaults.undoAction(
                             label = { Text("Undo Primary Action") }
                         ) {
-                          coroutineScope.launch {
-                              // reset the state when undo is clicked
-                              revealState.animateTo(RevealValue.Covered)
-                              revealState.lastActionType = RevealActionType.None
-                          }
+                            coroutineScope.launch {
+                                // reset the state when undo is clicked
+                                revealState.animateTo(RevealValue.Covered)
+                                revealState.lastActionType = RevealActionType.None
+                            }
                         },
                         undoSecondaryAction = SwipeToRevealDefaults.undoAction(
                             label = { Text("Undo Secondary Action") }
@@ -244,107 +183,43 @@
     }
 }
 
-@OptIn(ExperimentalWearMaterialApi::class, ExperimentalWearFoundationApi::class)
 @Composable
-fun SwipeToRevealWithEdgeSwipeToDismiss(
-    navigateBack: () -> Unit
-) {
-    val swipeToDismissBoxState = rememberSwipeToDismissBoxState()
-    SwipeToDismissBox(
-        state = swipeToDismissBoxState,
-        onDismissed = navigateBack
-    ) {
-        ScalingLazyColumn(
-            contentPadding = PaddingValues(0.dp)
-        ) {
-            repeat(5) {
-                item {
-                    SwipeToRevealChip(
-                        modifier = Modifier
-                            .fillMaxWidth()
-                            .edgeSwipeToDismiss(swipeToDismissBoxState),
-                        primaryAction = SwipeToRevealDefaults.primaryAction(
-                            icon = { Icon(SwipeToRevealDefaults.Delete, "Delete") },
-                            label = { Text("Delete") }),
-                        revealState = rememberRevealState()
-                    ) {
-                        Chip(
-                            onClick = { /*TODO*/ },
-                            colors = ChipDefaults.secondaryChipColors(),
-                            modifier = Modifier.fillMaxWidth(),
-                            label = {
-                                Text("S2R Chip with defaults")
-                            }
-                        )
-                    }
-                }
-            }
-        }
-    }
-}
-
-@OptIn(ExperimentalWearFoundationApi::class, ExperimentalWearMaterialApi::class)
-@Composable
-private fun SwipeToRevealChipExpandable(
-    expandableState: ExpandableState
-) {
-    val state = rememberRevealState()
-    val coroutineScope = rememberCoroutineScope()
-    var showDialog by remember { mutableStateOf(false) }
-    LaunchedEffect(state.currentValue) {
-        if (state.currentValue == RevealValue.Revealed) {
-            delay(2000)
-            expandableState.expanded = false
-        }
-    }
-    LaunchedEffect(showDialog) {
-        if (!showDialog) {
-            delay(500)
-            state.animateTo(RevealValue.Covered)
-        }
-    }
-    ShowDialog(
-        showDialog = showDialog,
-        onClick = { showDialog = false },
-        onDismiss = {
-            coroutineScope.launch { state.animateTo(RevealValue.Covered) }
-        },
+fun SwipeToRevealCards(swipeToDismissBoxState: SwipeToDismissBoxState) {
+    val emailMap = mutableMapOf(
+        "Android In" to
+            "Please add Swipe to dismiss to the demo.",
+        "Google Bangalore" to
+            "Hey everyone, We are pleased to inform that we are starting a new batch.",
+        "Google India" to
+            "Hi Googlers, Please be prepared for the new changes."
     )
-    SwipeToRevealChip(
-        revealState = state,
-        primaryAction = SwipeToRevealDefaults.primaryAction(
-            icon = { Icon(SwipeToRevealDefaults.Delete, contentDescription = "Delete") },
-            label = { Text(text = "Delete") },
-            onClick = {
-                coroutineScope.launch {
-                    state.animateTo(RevealValue.Revealed)
-                }
-            }
-        ),
-        secondaryAction = SwipeToRevealDefaults.secondaryAction(
-            icon = { Icon(SwipeToRevealDefaults.MoreOptions, contentDescription = "More Options") },
-            actionType = RevealActionType.None, // reset click type since there is no undo for this
-            onClick = { showDialog = true }
-        ),
-        undoPrimaryAction = SwipeToRevealDefaults.undoAction(
-            label = { Text(text = "Undo") },
-            onClick = {
-                coroutineScope.launch {
-                    // reset the state when undo is clicked
-                    state.animateTo(RevealValue.Covered)
-                    state.lastActionType = RevealActionType.None
-                }
-            }
-        ),
+    val expandableStates = List(emailMap.size) { rememberExpandableState(initiallyExpanded = true) }
+    ScalingLazyColumn(
+        modifier = Modifier.fillMaxSize()
     ) {
-        Chip(
-            onClick = { /*TODO*/ },
-            colors = ChipDefaults.secondaryChipColors(),
-            modifier = Modifier.fillMaxWidth(),
-            label = {
-                Text("S2R Chip with defaults")
+        item {
+            Text(text = "Swipe To Reveal Cards")
+            Spacer(Modifier.size(10.dp))
+        }
+        repeat(emailMap.size) {
+            val currentState = expandableStates[it]
+            val currentFrom = emailMap.keys.elementAt(it)
+            val currentEmail = emailMap.values.elementAt(it)
+            expandableItem(
+                state = currentState
+            ) { expanded ->
+                if (expanded) {
+                    SwipeToRevealCardExpandable(
+                        expandableState = currentState,
+                        from = currentFrom,
+                        email = currentEmail,
+                        modifier = Modifier.edgeSwipeToDismiss(swipeToDismissBoxState)
+                    )
+                } else {
+                    Spacer(modifier = Modifier.width(200.dp))
+                }
             }
-        )
+        }
     }
 }
 
@@ -353,7 +228,8 @@
 private fun SwipeToRevealCardExpandable(
     expandableState: ExpandableState,
     from: String,
-    email: String
+    email: String,
+    modifier: Modifier = Modifier
 ) {
     val state = rememberRevealState()
     val coroutineScope = rememberCoroutineScope()
@@ -376,6 +252,20 @@
         onDismiss = { showDialog = false },
     )
     SwipeToRevealCard(
+        modifier = modifier.semantics {
+            customActions = listOf(
+                CustomAccessibilityAction("Delete") {
+                    coroutineScope.launch {
+                        state.animateTo(RevealValue.Revealed)
+                    }
+                    true
+                },
+                CustomAccessibilityAction("More Options") {
+                    showDialog = true
+                    true
+                }
+            )
+        },
         revealState = state,
         primaryAction = SwipeToRevealDefaults.primaryAction(
             icon = { Icon(SwipeToRevealDefaults.Delete, contentDescription = "Delete") },
@@ -424,72 +314,6 @@
     }
 }
 
-@OptIn(ExperimentalWearFoundationApi::class, ExperimentalWearMaterialApi::class)
-@Composable
-private fun SwipeToRevealSingleAction(
-    layoutDirection: LayoutDirection = LayoutDirection.Ltr
-) {
-    val itemCount = 2
-    val expandableState = List(itemCount) {
-        rememberExpandableState(initiallyExpanded = true)
-    }
-    val coroutineScope = rememberCoroutineScope()
-    ScalingLazyColumn {
-        item {
-            Text("Swipe to reveal One-Action")
-            Spacer(Modifier.size(10.dp))
-        }
-        repeat(itemCount) { curr ->
-            expandableItem(
-                state = expandableState[curr]
-            ) { expanded ->
-                val state = rememberRevealState(
-                    // Setting anchor to 0.4 since there is only one action.
-                    anchors = createAnchors(revealingAnchor = 0.4f),
-                )
-                if (expanded) {
-                    CompositionLocalProvider(
-                        LocalLayoutDirection provides layoutDirection
-                    ) {
-                        SwipeToRevealChip(
-                            revealState = state,
-                            primaryAction = SwipeToRevealDefaults.primaryAction(
-                                icon = {
-                                    Icon(
-                                        SwipeToRevealDefaults.Delete,
-                                        contentDescription = "Delete"
-                                    )
-                                },
-                                label = { Text(text = "Delete") },
-                                onClick = {
-                                    coroutineScope.launch {
-                                        state.animateTo(RevealValue.Revealed)
-                                    }
-                                }
-                            ),
-                        ) {
-                            Chip(
-                                onClick = { /*TODO*/ },
-                                colors = ChipDefaults.secondaryChipColors(),
-                                modifier = Modifier.fillMaxWidth(),
-                                label = { Text("Try this") }
-                            )
-                        }
-                    }
-                } else {
-                    Spacer(modifier = Modifier.width(200.dp))
-                }
-                LaunchedEffect(state.currentValue) {
-                    if (state.currentValue == RevealValue.Revealed) {
-                        delay(2000)
-                        expandableState[curr].expanded = false
-                    }
-                }
-            }
-        }
-    }
-}
-
 @Composable
 private fun ShowDialog(
     showDialog: Boolean,
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/wear/protolayout/protolayout-renderer/lint-baseline.xml b/wear/protolayout/protolayout-renderer/lint-baseline.xml
index d8b34d6..e489a77 100644
--- a/wear/protolayout/protolayout-renderer/lint-baseline.xml
+++ b/wear/protolayout/protolayout-renderer/lint-baseline.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<issues format="6" by="lint 8.2.0-alpha15" type="baseline" client="gradle" dependencies="false" name="AGP (8.2.0-alpha15)" variant="all" version="8.2.0-alpha15">
+<issues format="6" by="lint 8.3.0-alpha02" type="baseline" client="gradle" dependencies="false" name="AGP (8.3.0-alpha02)" variant="all" version="8.3.0-alpha02">
 
     <issue
         id="RestrictedApiAndroidX"
@@ -769,8 +769,8 @@
     <issue
         id="RestrictedApiAndroidX"
         message="AnimatedVisibility.hasEnterTransition can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
-        errorLine1="                                            &amp;&amp; animatedVisibility.hasEnterTransition();"
-        errorLine2="                                                                  ~~~~~~~~~~~~~~~~~~">
+        errorLine1="                                                &amp;&amp; animatedVisibility.hasEnterTransition();"
+        errorLine2="                                                                      ~~~~~~~~~~~~~~~~~~">
         <location
             file="src/main/java/androidx/wear/protolayout/renderer/dynamicdata/ProtoLayoutDynamicDataPipeline.java"/>
     </issue>
@@ -778,8 +778,17 @@
     <issue
         id="RestrictedApiAndroidX"
         message="AnimatedVisibility.getEnterTransition can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
-        errorLine1="                                    .getEnterTransition());"
-        errorLine2="                                     ~~~~~~~~~~~~~~~~~~">
+        errorLine1="                                        .getEnterTransition();"
+        errorLine2="                                         ~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/dynamicdata/ProtoLayoutDynamicDataPipeline.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApiAndroidX"
+        message="EnterTransition.hasSlideIn can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                        hasSlideInAnimation |= enterTransition.hasSlideIn();"
+        errorLine2="                                                               ~~~~~~~~~~">
         <location
             file="src/main/java/androidx/wear/protolayout/renderer/dynamicdata/ProtoLayoutDynamicDataPipeline.java"/>
     </issue>
diff --git a/wear/protolayout/protolayout-renderer/src/main/java/androidx/wear/protolayout/renderer/dynamicdata/ProtoLayoutDynamicDataPipeline.java b/wear/protolayout/protolayout-renderer/src/main/java/androidx/wear/protolayout/renderer/dynamicdata/ProtoLayoutDynamicDataPipeline.java
index 0fdf391..7f0c9a9 100644
--- a/wear/protolayout/protolayout-renderer/src/main/java/androidx/wear/protolayout/renderer/dynamicdata/ProtoLayoutDynamicDataPipeline.java
+++ b/wear/protolayout/protolayout-renderer/src/main/java/androidx/wear/protolayout/renderer/dynamicdata/ProtoLayoutDynamicDataPipeline.java
@@ -26,7 +26,10 @@
 import android.icu.util.ULocale;
 import android.util.Log;
 import android.view.View;
+import android.view.View.MeasureSpec;
 import android.view.ViewGroup;
+import android.view.ViewTreeObserver;
+import android.view.ViewTreeObserver.OnGlobalLayoutListener;
 import android.view.animation.AnimationSet;
 
 import androidx.annotation.NonNull;
@@ -369,6 +372,7 @@
          */
         @UiThread
         @RestrictTo(Scope.LIBRARY_GROUP)
+        @SuppressWarnings("RestrictTo")
         public void commit(@NonNull ViewGroup parentView, boolean isReattaching) {
             for (String nodePosId : mNodesPendingChildrenRemoval) {
                 mPipeline.removeChildNodesFor(nodePosId);
@@ -389,20 +393,68 @@
                 mChangedNodes.clear();
             }
 
-            Runnable runnable =
+            // Capture nodes with EnterTransition animation.
+            Map<String, EnterTransition> enterTransitionNodes = new ArrayMap<>();
+            boolean hasSlideInAnimation = false;
+            if (mPipeline.mEnableAnimations) {
+                for (String changedNode : mChangedNodes) {
+                    List<NodeInfo> nodesAffectedBy =
+                            mPipeline.getNodesAffectedBy(
+                                    changedNode,
+                                    node -> {
+                                        AnimatedVisibility animatedVisibility =
+                                                node.getAnimatedVisibility();
+                                        return animatedVisibility != null
+                                                && animatedVisibility.hasEnterTransition();
+                                    });
+                    for (NodeInfo affectedNode : nodesAffectedBy) {
+                        EnterTransition enterTransition =
+                                checkNotNull(affectedNode.getAnimatedVisibility())
+                                        .getEnterTransition();
+                        enterTransitionNodes.putIfAbsent(affectedNode.getPosId(), enterTransition);
+                        hasSlideInAnimation |= enterTransition.hasSlideIn();
+                    }
+                }
+            }
+
+            Runnable initLayoutRunnable =
                     () -> {
                         mPipeline.initNewLayout();
-                        playEnterAnimations(parentView, isReattaching);
+                        playEnterAnimations(parentView, isReattaching, enterTransitionNodes);
                     };
-            if (parentView.isInEditMode()) {
-                runnable.run();
+
+            // Slide animations need to know the new measurements of the view in order to calculate
+            // start and end positions, so we force a measure pass.
+            if (hasSlideInAnimation) {
+                // The GlobalLayoutListener ensures that initLayoutRunnable will run after the
+                // measure
+                // pass has finished.
+                ViewTreeObserver viewTreeObserver = parentView.getViewTreeObserver();
+                viewTreeObserver.addOnGlobalLayoutListener(
+                        new OnGlobalLayoutListener() {
+                            @Override
+                            public void onGlobalLayout() {
+                                if (viewTreeObserver.isAlive()) {
+                                    viewTreeObserver.removeOnGlobalLayoutListener(this);
+                                    initLayoutRunnable.run();
+                                }
+                            }
+                        });
+                parentView.measure(
+                        MeasureSpec.makeMeasureSpec(
+                                parentView.getMeasuredWidth(), MeasureSpec.EXACTLY),
+                        MeasureSpec.makeMeasureSpec(
+                                parentView.getMeasuredHeight(), MeasureSpec.EXACTLY));
             } else {
-                parentView.post(runnable);
+                initLayoutRunnable.run();
             }
         }
 
         @UiThread
-        private void playEnterAnimations(@NonNull ViewGroup parentView, boolean isReattaching) {
+        private void playEnterAnimations(
+                @NonNull ViewGroup parentView,
+                boolean isReattaching,
+                Map<String, EnterTransition> animatingNodes) {
             // Cancel any already running Enter animation.
             mPipeline.mEnterAnimations.forEach(QuotaAwareAnimationSet::cancelAnimations);
             mPipeline.mEnterAnimations.clear();
@@ -410,24 +462,6 @@
             if (isReattaching || !mPipeline.mFullyVisible || !mPipeline.mEnableAnimations) {
                 return;
             }
-            Map<String, EnterTransition> animatingNodes = new ArrayMap<>();
-            for (String changedNode : mChangedNodes) {
-                List<NodeInfo> nodesAffectedBy =
-                        mPipeline.getNodesAffectedBy(
-                                changedNode,
-                                node -> {
-                                    AnimatedVisibility animatedVisibility =
-                                            node.getAnimatedVisibility();
-                                    return animatedVisibility != null
-                                            && animatedVisibility.hasEnterTransition();
-                                });
-                for (NodeInfo affectedNode : nodesAffectedBy) {
-                    animatingNodes.putIfAbsent(
-                            affectedNode.getPosId(),
-                            checkNotNull(affectedNode.getAnimatedVisibility())
-                                    .getEnterTransition());
-                }
-            }
             for (Map.Entry<String, EnterTransition> animatingNode : animatingNodes.entrySet()) {
                 View associatedView = parentView.findViewWithTag(animatingNode.getKey());
                 if (associatedView != null) {
diff --git a/wear/protolayout/protolayout-renderer/src/main/java/androidx/wear/protolayout/renderer/impl/ProtoLayoutViewInstance.java b/wear/protolayout/protolayout-renderer/src/main/java/androidx/wear/protolayout/renderer/impl/ProtoLayoutViewInstance.java
index 1762d0b..798f1ad 100644
--- a/wear/protolayout/protolayout-renderer/src/main/java/androidx/wear/protolayout/renderer/impl/ProtoLayoutViewInstance.java
+++ b/wear/protolayout/protolayout-renderer/src/main/java/androidx/wear/protolayout/renderer/impl/ProtoLayoutViewInstance.java
@@ -16,6 +16,9 @@
 
 package androidx.wear.protolayout.renderer.impl;
 
+import static android.view.ViewGroup.LayoutParams.MATCH_PARENT;
+import static android.widget.FrameLayout.LayoutParams.UNSPECIFIED_GRAVITY;
+
 import static androidx.core.util.Preconditions.checkNotNull;
 
 import android.content.Context;
@@ -56,6 +59,8 @@
 import androidx.wear.protolayout.renderer.inflater.ProtoLayoutInflater.ViewMutationException;
 import androidx.wear.protolayout.renderer.inflater.ProtoLayoutThemeImpl;
 import androidx.wear.protolayout.renderer.inflater.RenderedMetadata;
+import androidx.wear.protolayout.renderer.inflater.RenderedMetadata.PendingFrameLayoutParams;
+import androidx.wear.protolayout.renderer.inflater.RenderedMetadata.ViewProperties;
 import androidx.wear.protolayout.renderer.inflater.ResourceResolvers;
 import androidx.wear.protolayout.renderer.inflater.StandardResourceResolvers;
 
@@ -114,6 +119,7 @@
 
     private final boolean mAdaptiveUpdateRatesEnabled;
     private boolean mWasFullyVisibleBefore;
+    private final boolean mAllowLayoutChangingBindsWithoutDefault;
 
     /** This keeps track of the current inflated parent for the layout. */
     @Nullable private ViewGroup mInflateParent = null;
@@ -268,11 +274,10 @@
                             TAG
                                     + " - inflated result was null, but inflating into new parent"
                                     + " requested.");
-            inflateResult.updateDynamicDataPipeline(isReattaching);
             parent.removeAllViews();
             parent.addView(
-                    inflateResult.inflateParent,
-                    new LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT));
+                    inflateResult.inflateParent, new LayoutParams(MATCH_PARENT, MATCH_PARENT));
+            inflateResult.updateDynamicDataPipeline(isReattaching);
             return Futures.immediateVoidFuture();
         }
     }
@@ -330,6 +335,7 @@
         private final boolean mUpdatesEnabled;
         private final boolean mAdaptiveUpdateRatesEnabled;
         private final boolean mIsViewFullyVisible;
+        private final boolean mAllowLayoutChangingBindsWithoutDefault;
 
         Config(
                 @NonNull Context uiContext,
@@ -347,7 +353,8 @@
                 int runningAnimationsLimit,
                 boolean updatesEnabled,
                 boolean adaptiveUpdateRatesEnabled,
-                boolean isViewFullyVisible) {
+                boolean isViewFullyVisible,
+                boolean allowLayoutChangingBindsWithoutDefault) {
             this.mUiContext = uiContext;
             this.mRendererResources = rendererResources;
             this.mResourceResolversProvider = resourceResolversProvider;
@@ -364,6 +371,7 @@
             this.mUpdatesEnabled = updatesEnabled;
             this.mAdaptiveUpdateRatesEnabled = adaptiveUpdateRatesEnabled;
             this.mIsViewFullyVisible = isViewFullyVisible;
+            this.mAllowLayoutChangingBindsWithoutDefault = allowLayoutChangingBindsWithoutDefault;
         }
 
         /** Returns UI Context used for interacting with the UI. */
@@ -466,6 +474,18 @@
             return mIsViewFullyVisible;
         }
 
+        /**
+         * Sets whether a "layout changing" data bind can be applied without the "value_for_layout"
+         * field being filled in, or being set to zero / empty. Defaults to false.
+         *
+         * <p>This is to support legacy apps which use layout-changing data bind before the full
+         * support was built.
+         */
+        @RestrictTo(Scope.LIBRARY)
+        public boolean getAllowLayoutChangingBindsWithoutDefault() {
+            return mAllowLayoutChangingBindsWithoutDefault;
+        }
+
         /** Builder for {@link Config}. */
         @RestrictTo(Scope.LIBRARY_GROUP_PREFIX)
         public static final class Builder {
@@ -490,6 +510,7 @@
             private boolean mUpdatesEnabled = true;
             private boolean mAdaptiveUpdateRatesEnabled = true;
             private boolean mIsViewFullyVisible = true;
+            private boolean mAllowLayoutChangingBindsWithoutDefault = false;
 
             /**
              * Builder for the {@link Config} class.
@@ -621,6 +642,23 @@
                 return this;
             }
 
+            /**
+             * Sets whether a "layout changing" data bind can be applied without the
+             * "value_for_layout" field being filled in, or being set to zero / empty. Defaults to
+             * false.
+             *
+             * <p>This is to support legacy apps which use layout-changing data bind before the full
+             * support was built.
+             */
+            @RestrictTo(Scope.LIBRARY)
+            @NonNull
+            public Builder setAllowLayoutChangingBindsWithoutDefault(
+                    boolean allowLayoutChangingBindsWithoutDefault) {
+                this.mAllowLayoutChangingBindsWithoutDefault =
+                        allowLayoutChangingBindsWithoutDefault;
+                return this;
+            }
+
             /** Builds {@link Config} object. */
             @NonNull
             public Config build() {
@@ -660,7 +698,8 @@
                         mRunningAnimationsLimit,
                         mUpdatesEnabled,
                         mAdaptiveUpdateRatesEnabled,
-                        mIsViewFullyVisible);
+                        mIsViewFullyVisible,
+                        mAllowLayoutChangingBindsWithoutDefault);
             }
         }
     }
@@ -678,6 +717,8 @@
         this.mClickableIdExtra = config.getClickableIdExtra();
         this.mAdaptiveUpdateRatesEnabled = config.getAdaptiveUpdateRatesEnabled();
         this.mWasFullyVisibleBefore = false;
+        this.mAllowLayoutChangingBindsWithoutDefault =
+                config.getAllowLayoutChangingBindsWithoutDefault();
 
         StateStore stateStore = config.getStateStore();
         if (stateStore != null) {
@@ -704,8 +745,8 @@
     private RenderResult renderOrComputeMutations(
             @NonNull Layout layout,
             @NonNull ResourceProto.Resources resources,
-            @Nullable RenderedMetadata prevRenderedMetadata) {
-
+            @Nullable RenderedMetadata prevRenderedMetadata,
+            @NonNull ViewProperties parentViewProp) {
         ResourceResolvers resolvers =
                 mResourceResolversProvider.getResourceResolvers(
                         mUiContext, resources, mUiExecutorService, mAnimationEnabled);
@@ -738,7 +779,8 @@
                         .setProtoLayoutTheme(mProtoLayoutTheme)
                         .setAnimationEnabled(mAnimationEnabled)
                         .setClickableIdExtra(mClickableIdExtra)
-                        .setAllowLayoutChangingBindsWithoutDefault(true);
+                        .setAllowLayoutChangingBindsWithoutDefault(
+                                mAllowLayoutChangingBindsWithoutDefault);
         if (mDataPipeline != null) {
             inflaterConfigBuilder.setDynamicDataPipeline(mDataPipeline);
         }
@@ -754,7 +796,7 @@
         if (mAdaptiveUpdateRatesEnabled && prevRenderedMetadata != null) {
             // Compute the mutation here, but if there is a change, apply it in the UI thread.
             try {
-                mutation = inflater.computeMutation(prevRenderedMetadata, layout);
+                mutation = inflater.computeMutation(prevRenderedMetadata, layout, parentViewProp);
             } catch (UnsupportedOperationException ex) {
                 Log.w(TAG, "Error computing mutation.", ex);
             }
@@ -824,7 +866,7 @@
     @UiThread
     @SuppressWarnings({
         "ReferenceEquality",
-        "ExecutorTaskName"
+        "ExecutorTaskName",
     }) // layout == prevLayout is intentional (and enough in this case)
     @NonNull
     public ListenableFuture<Void> renderAndAttach(
@@ -870,11 +912,33 @@
 
         if (mRenderFuture == null) {
             mPrevLayout = layout;
+
+            int gravity = UNSPECIFIED_GRAVITY;
+            LayoutParams layoutParams = new LayoutParams(MATCH_PARENT, MATCH_PARENT);
+
+            if (prevInflateParent != null && prevInflateParent.getChildCount() > 0) {
+                View firstChild = prevInflateParent.getChildAt(0);
+                if (firstChild != null) {
+                    FrameLayout.LayoutParams childLp =
+                            (FrameLayout.LayoutParams) firstChild.getLayoutParams();
+                    if (childLp != null) {
+                        gravity = childLp.gravity;
+                    }
+                }
+            }
+
+            ViewProperties parentViewProp =
+                    ViewProperties.fromViewGroup(
+                            parent,
+                            layoutParams,
+                            // We need this specific ones as otherwise gravity gets lost for
+                            // attachParent node.
+                            new PendingFrameLayoutParams(gravity));
+
             mRenderFuture =
                     mBgExecutorService.submit(
-                            () ->
-                                    renderOrComputeMutations(
-                                            layout, resources, prevRenderedMetadata));
+                            () -> renderOrComputeMutations(
+                                layout, resources, prevRenderedMetadata, parentViewProp));
             mCanReattachWithoutRendering = false;
         }
         SettableFuture<Void> result = SettableFuture.create();
diff --git a/wear/protolayout/protolayout-renderer/src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java b/wear/protolayout/protolayout-renderer/src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java
index 97c1f9a..03f8d50 100644
--- a/wear/protolayout/protolayout-renderer/src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java
+++ b/wear/protolayout/protolayout-renderer/src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java
@@ -1915,27 +1915,33 @@
         // Initialize the size wrapper here, if needed. This simplifies the logic below when
         // creating the actual Spacer and adding it to its parent...
         FrameLayout sizeWrapper = null;
-        if (needsSizeWrapper(spacer.getWidth()) || needsSizeWrapper(spacer.getHeight())) {
+        @Nullable Float widthForLayoutDp = resolveSizeForLayoutIfNeeded(spacer.getWidth());
+        @Nullable Float heightForLayoutDp = resolveSizeForLayoutIfNeeded(spacer.getHeight());
+
+        if (widthForLayoutDp != null || heightForLayoutDp != null) {
             sizeWrapper = new FrameLayout(mUiContext);
             LayoutParams spaceWrapperLayoutParams = generateDefaultLayoutParams();
             spaceWrapperLayoutParams.width = LayoutParams.WRAP_CONTENT;
             spaceWrapperLayoutParams.height = LayoutParams.WRAP_CONTENT;
 
-            // Technically speaking, this logic isn't 100% accurate. In legacy size-changing mode
-            // (before
-            // value_for_layout was introduced), apps may not set value_for_layout. That's fine; the
-            // needsSizeWrapper checks will catch that. It's possible that one dimension has
-            // value_for_layout set though, and the other relies on legacy size changing mode. We
-            // don't deal with that case; if value_for_layout is present on one dimension, and both
-            // are dynamic, then it must be set on both dimensions.
-            if (spacer.getWidth().getLinearDimension().hasDynamicValue()) {
-                float widthForLayout = spacer.getWidth().getLinearDimension().getValueForLayout();
-                spaceWrapperLayoutParams.width = safeDpToPx(widthForLayout);
+            if (widthForLayoutDp != null) {
+                if (widthForLayoutDp <= 0f) {
+                    Log.w(
+                            TAG,
+                            "Spacer width's value_for_layout is not a positive value. Element won't"
+                                + " be visible.");
+                }
+                spaceWrapperLayoutParams.width = safeDpToPx(widthForLayoutDp);
             }
 
-            if (spacer.getHeight().getLinearDimension().hasDynamicValue()) {
-                float heightForLayout = spacer.getHeight().getLinearDimension().getValueForLayout();
-                spaceWrapperLayoutParams.height = safeDpToPx(heightForLayout);
+            if (heightForLayoutDp != null) {
+                if (heightForLayoutDp <= 0f) {
+                    Log.w(
+                            TAG,
+                            "Spacer height's value_for_layout is not a positive value. Element"
+                                + " won't be visible.");
+                }
+                spaceWrapperLayoutParams.height = safeDpToPx(heightForLayoutDp);
             }
 
             int gravity =
@@ -2136,8 +2142,6 @@
 
         LayoutParams layoutParams = generateDefaultLayoutParams();
 
-        boolean needsSizeWrapper = needsSizeWrapper(text.getText());
-
         handleProp(
                 text.getText(),
                 t -> {
@@ -2163,9 +2167,11 @@
 
         textView.setGravity(textAlignToAndroidGravity(text.getMultilineAlignment().getValue()));
 
-        // Use needsSizeWrapper as a proxy for "has a dynamic size". If there's a dynamic binding
+        @Nullable String valueForLayout = resolveValueForLayoutIfNeeded(text.getText());
+
+        // Use valueForLayout as a proxy for "has a dynamic size". If there's a dynamic binding
         // for the text element, then it can only have a single line of text.
-        if (text.hasMaxLines() && !needsSizeWrapper) {
+        if (text.hasMaxLines() && valueForLayout == null) {
             textView.setMaxLines(max(TEXT_MIN_LINES, text.getMaxLines().getValue()));
         } else {
             textView.setMaxLines(TEXT_MAX_LINES_DEFAULT);
@@ -2204,9 +2210,10 @@
 
         View wrappedView = applyModifiers(textView, text.getModifiers(), posId, pipelineMaker);
 
-        if (needsSizeWrapper) {
-            // If we're here, then it's safe to unconditionally read size_for_layout.
-            String valueForLayout = text.getText().getValueForLayout();
+        if (valueForLayout != null) {
+            if (valueForLayout.isEmpty()) {
+                Log.w(TAG, "Text's value_for_layout is empty. Element won't be visible.");
+            }
 
             // Now create a "container" element, with that size, to hold the text.
             FrameLayout sizeChangingTextWrapper = new FrameLayout(mUiContext);
@@ -2652,15 +2659,19 @@
             handleProp(length, lineView::setLineSweepAngleDegrees, posId, pipelineMaker);
         }
 
-        float sizeForLayout =
-                getSizeForLayout(line.getLength(), WearCurvedLineView.SWEEP_ANGLE_WRAP_LENGTH);
-
         SizedArcContainer sizeWrapper = null;
         SizedArcContainer.LayoutParams sizedLp =
                 new SizedArcContainer.LayoutParams(
                         LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT);
-        if (needsSizeWrapper(length)) {
+        @Nullable Float sizeForLayout = resolveSizeForLayoutIfNeeded(length);
+        if (sizeForLayout != null) {
             sizeWrapper = new SizedArcContainer(mUiContext);
+            if (sizeForLayout <= 0f) {
+                Log.w(
+                        TAG,
+                        "ArcLine length's value_for_layout is not a positive value. Element won't"
+                            + " be visible.");
+            }
             sizeWrapper.setSweepAngleDegrees(sizeForLayout);
             sizedLp.setAngularAlignment(
                     angularAlignmentProtoToAngularAlignment(length.getAngularAlignmentForLayout()));
@@ -3347,64 +3358,58 @@
         }
     }
 
-    private boolean needsSizeWrapper(StringProp stringProp) {
-        if (stringProp.hasDynamicValue() && mDataPipeline.isPresent()) {
-            if (!stringProp.getValueForLayout().isEmpty()) {
-                // If value_for_layout is set, then a size wrapper is needed. This covers the case
-                // where mAllowLayoutChangingBindsWithoutDefault, but a size has been provided
-                // anyway.
-                return true;
-            } else {
-                return !mAllowLayoutChangingBindsWithoutDefault;
-            }
-        } else {
-            // Dynamic data disabled; we won't be using the dynamic value regardless...
-            return false;
+    /**
+     * Resolves the value for layout to be used in a Size Wrapper for elements containing dynamic
+     * values. Returns null if no size wrapper is needed.
+     */
+    @Nullable
+    private String resolveValueForLayoutIfNeeded(StringProp stringProp) {
+        if (!stringProp.hasDynamicValue() || !mDataPipeline.isPresent()) {
+            return null;
         }
+
+        // If value_for_layout is set to non-zero, always use it.
+        if (!stringProp.getValueForLayout().isEmpty()) {
+            return stringProp.getValueForLayout();
+        }
+
+        return mAllowLayoutChangingBindsWithoutDefault ? null : "";
     }
 
-    private boolean needsSizeWrapper(SpacerDimension spacerDimension) {
+    /**
+     * Resolves the value for layout to be used in a Size Wrapper for elements containing dynamic
+     * values. Returns null if no size wrapper is needed.
+     */
+    @Nullable
+    private Float resolveSizeForLayoutIfNeeded(SpacerDimension spacerDimension) {
         DpProp dimension = spacerDimension.getLinearDimension();
-        if (dimension.hasDynamicValue() && mDataPipeline.isPresent()) {
-            if (dimension.getValueForLayout() > 0f) {
-                return true;
-            } else {
-                return !mAllowLayoutChangingBindsWithoutDefault;
-            }
-        } else {
-            return false;
+        if (!dimension.hasDynamicValue() || !mDataPipeline.isPresent()) {
+            return null;
         }
+
+        if (dimension.getValueForLayout() > 0f) {
+            return dimension.getValueForLayout();
+        }
+
+        return mAllowLayoutChangingBindsWithoutDefault ? null : 0f;
     }
 
-    private boolean needsSizeWrapper(DegreesProp degreesProp) {
-        if (degreesProp.hasDynamicValue() && mDataPipeline.isPresent()) {
-            if (degreesProp.getValueForLayout() > 0f) {
-                return true;
-            } else {
-                return !mAllowLayoutChangingBindsWithoutDefault;
-            }
-        } else {
-            return false;
+    /**
+     * Resolves the value for layout to be used in a Size Wrapper for elements containing dynamic
+     * values. Returns null if no size wrapper is needed.
+     */
+    @Nullable
+    private Float resolveSizeForLayoutIfNeeded(DegreesProp degreesProp) {
+        if (!degreesProp.hasDynamicValue() || !mDataPipeline.isPresent()) {
+            return null;
         }
-    }
 
-    private float getSizeForLayout(DegreesProp degreesProp, float otherwise) {
-        if (degreesProp.hasDynamicValue() && mDataPipeline.isPresent()) {
-            if (degreesProp.getValueForLayout() > 0f) {
-                // If value_for_layout is set, always use it
-                return degreesProp.getValueForLayout();
-            } else if (mAllowLayoutChangingBindsWithoutDefault) {
-                // We're in "legacy binds" mode. Allow usage of the bind without needing
-                // value_for_layout
-                return otherwise;
-            } else {
-                // Neither set. Error condition (that should not happen without the developer
-                // manually building the proto).
-                return 0f;
-            }
-        } else {
-            return otherwise;
+        // If value_for_layout is set to non-zero, always use it
+        if (degreesProp.getValueForLayout() > 0f) {
+            return degreesProp.getValueForLayout();
         }
+
+        return mAllowLayoutChangingBindsWithoutDefault ? null : 0f;
     }
 
     private boolean canMeasureContainer(
@@ -3627,7 +3632,9 @@
      */
     @Nullable
     public ViewGroupMutation computeMutation(
-            @NonNull RenderedMetadata prevRenderedMetadata, @NonNull Layout targetLayout) {
+            @NonNull RenderedMetadata prevRenderedMetadata,
+            @NonNull Layout targetLayout,
+            @NonNull ViewProperties parentViewProp) {
         if (prevRenderedMetadata.getTreeFingerprint() == null) {
             Log.w(TAG, "No previous fingerprint available.");
             return null;
@@ -3659,7 +3666,7 @@
             }
             ViewProperties parentInfo;
             if (nodePosId.equals(ROOT_NODE_ID)) {
-                parentInfo = ViewProperties.EMPTY;
+                parentInfo = parentViewProp;
             } else {
                 String parentNodePosId = getParentNodePosId(nodePosId);
                 if (parentNodePosId == null || !prevLayoutInfo.contains(parentNodePosId)) {
diff --git a/wear/protolayout/protolayout-renderer/src/main/java/androidx/wear/protolayout/renderer/inflater/RenderedMetadata.java b/wear/protolayout/protolayout-renderer/src/main/java/androidx/wear/protolayout/renderer/inflater/RenderedMetadata.java
index 5b6bdc5..0ea9eff 100644
--- a/wear/protolayout/protolayout-renderer/src/main/java/androidx/wear/protolayout/renderer/inflater/RenderedMetadata.java
+++ b/wear/protolayout/protolayout-renderer/src/main/java/androidx/wear/protolayout/renderer/inflater/RenderedMetadata.java
@@ -128,10 +128,10 @@
     }
 
     /** Additional pending layout params for layout elements inside a {@link FrameLayout}. */
-    static final class PendingFrameLayoutParams implements PendingLayoutParams {
+    public static final class PendingFrameLayoutParams implements PendingLayoutParams {
         private final int mGravity;
 
-        PendingFrameLayoutParams(int gravity) {
+        public PendingFrameLayoutParams(int gravity) {
             this.mGravity = gravity;
         }
 
@@ -154,15 +154,16 @@
     }
 
     /** Holds properties of any container that are needed for background rendering. */
-    static class ViewProperties {
-        @NonNull static final ViewProperties EMPTY = new ViewProperties();
+    public static class ViewProperties {
+        @NonNull public static final ViewProperties EMPTY = new ViewProperties();
+
         /**
          * Creates a {@link ViewProperties} from any {@link ViewGroup} container. Note that {@code
          * rawLayoutParams} doesn't need to be a container-specific variant. But the {@code
          * childLayoutParams} should be of a container specific instance (if provided).
          */
         @NonNull
-        static ViewProperties fromViewGroup(
+        public static ViewProperties fromViewGroup(
                 @NonNull ViewGroup viewGroup,
                 @NonNull LayoutParams rawLayoutParams,
                 @NonNull PendingLayoutParams childLayoutParams) {
diff --git a/wear/protolayout/protolayout-renderer/src/test/java/androidx/wear/protolayout/renderer/dynamicdata/ProtoLayoutDynamicDataPipelineTest.java b/wear/protolayout/protolayout-renderer/src/test/java/androidx/wear/protolayout/renderer/dynamicdata/ProtoLayoutDynamicDataPipelineTest.java
index f4a1cfa..9bb0cbb 100644
--- a/wear/protolayout/protolayout-renderer/src/test/java/androidx/wear/protolayout/renderer/dynamicdata/ProtoLayoutDynamicDataPipelineTest.java
+++ b/wear/protolayout/protolayout-renderer/src/test/java/androidx/wear/protolayout/renderer/dynamicdata/ProtoLayoutDynamicDataPipelineTest.java
@@ -686,6 +686,8 @@
                 .addResolvedAnimatedImage(drawableAvd, triggerTileVisibleOnce, TEST_POS_ID)
                 .commit(mRootContainer, /* isReattaching= */ false);
 
+        // OnVisible animations haven't started yet, so we should be able to trigger them manually.
+
         pipeline.playAvdAnimations(InnerCase.ON_LOAD_TRIGGER);
         expect.that(drawableAvd.started).isFalse();
 
@@ -715,10 +717,8 @@
                 .addResolvedAnimatedImage(drawableAvd, triggerTileLoad, TEST_POS_ID)
                 .commit(mRootContainer, /* isReattaching= */ false);
 
-        pipeline.playAvdAnimations(InnerCase.ON_VISIBLE_TRIGGER);
-        expect.that(drawableAvd.started).isFalse();
+        // In commit(), OnLoad animations are started.
 
-        pipeline.playAvdAnimations(InnerCase.ON_LOAD_TRIGGER);
         expect.that(drawableAvd.started).isTrue();
 
         pipeline.resetAvdAnimations(InnerCase.ON_LOAD_TRIGGER);
@@ -1827,7 +1827,6 @@
         pipeline.newPipelineMaker()
                 .addPipelineFor(proto, TEST_POS_ID, receiver)
                 .commit(mRootContainer, /* isReattaching= */ false);
-        shadowOf(getMainLooper()).runOneTask();
         if (enableAnimations) {
             assertThat(pipeline.getRunningAnimationsCount()).isEqualTo(animationsNum);
         }
diff --git a/wear/protolayout/protolayout-renderer/src/test/java/androidx/wear/protolayout/renderer/helper/TestDsl.java b/wear/protolayout/protolayout-renderer/src/test/java/androidx/wear/protolayout/renderer/helper/TestDsl.java
index 9f7018ae..a291354 100644
--- a/wear/protolayout/protolayout-renderer/src/test/java/androidx/wear/protolayout/renderer/helper/TestDsl.java
+++ b/wear/protolayout/protolayout-renderer/src/test/java/androidx/wear/protolayout/renderer/helper/TestDsl.java
@@ -348,11 +348,20 @@
     }
 
     public static LayoutNode dynamicFixedText(String fixedText) {
-        return dynamicFixedText(/* propsConsumer= */ null, fixedText);
+        return dynamicFixedText(/* propsConsumer= */ null, fixedText, /* valueForLayout= */ null);
+    }
+
+    public static LayoutNode dynamicFixedText(String fixedText, @Nullable String valueForLayout) {
+        return dynamicFixedText(/* propsConsumer= */ null, fixedText, valueForLayout);
     }
 
     public static LayoutNode dynamicFixedText(Consumer<TextProps> propsConsumer, String fixedText) {
-        return textInternal(propsConsumer, dynamicStr(fixedText));
+        return textInternal(propsConsumer, dynamicStr(fixedText, /* valueForLayout= */ null));
+    }
+
+    public static LayoutNode dynamicFixedText(
+            Consumer<TextProps> propsConsumer, String fixedText, @Nullable String valueForLayout) {
+        return textInternal(propsConsumer, dynamicStr(fixedText, valueForLayout));
     }
 
     public static LayoutNode text(String text) {
@@ -578,11 +587,15 @@
         return StringProp.newBuilder().setValue(value).build();
     }
 
-    private static StringProp dynamicStr(String fixedValue) {
-        return StringProp.newBuilder()
-                .setDynamicValue(
-                        DynamicString.newBuilder()
-                                .setFixed(FixedString.newBuilder().setValue(fixedValue)))
-                .build();
+    private static StringProp dynamicStr(String fixedValue, @Nullable String valueForLayout) {
+        StringProp.Builder builder =
+                StringProp.newBuilder()
+                        .setDynamicValue(
+                                DynamicString.newBuilder()
+                                        .setFixed(FixedString.newBuilder().setValue(fixedValue)));
+        if (valueForLayout != null) {
+            builder.setValueForLayout(valueForLayout);
+        }
+        return builder.build();
     }
 }
diff --git a/wear/protolayout/protolayout-renderer/src/test/java/androidx/wear/protolayout/renderer/impl/ProtoLayoutViewInstanceTest.java b/wear/protolayout/protolayout-renderer/src/test/java/androidx/wear/protolayout/renderer/impl/ProtoLayoutViewInstanceTest.java
index 3ad5656..2f8401c 100644
--- a/wear/protolayout/protolayout-renderer/src/test/java/androidx/wear/protolayout/renderer/impl/ProtoLayoutViewInstanceTest.java
+++ b/wear/protolayout/protolayout-renderer/src/test/java/androidx/wear/protolayout/renderer/impl/ProtoLayoutViewInstanceTest.java
@@ -16,7 +16,10 @@
 
 package androidx.wear.protolayout.renderer.impl;
 
+import static android.widget.FrameLayout.LayoutParams.UNSPECIFIED_GRAVITY;
+
 import static androidx.test.core.app.ApplicationProvider.getApplicationContext;
+import static androidx.wear.protolayout.renderer.common.ProtoLayoutDiffer.ROOT_NODE_ID;
 import static androidx.wear.protolayout.renderer.helper.TestDsl.arc;
 import static androidx.wear.protolayout.renderer.helper.TestDsl.arcAdapter;
 import static androidx.wear.protolayout.renderer.helper.TestDsl.box;
@@ -37,10 +40,14 @@
 import android.content.Context;
 import android.os.Handler;
 import android.os.Looper;
+import android.view.Gravity;
 import android.view.View;
 import android.view.ViewGroup;
+import android.view.ViewGroup.LayoutParams;
 import android.widget.FrameLayout;
+import android.widget.LinearLayout;
 
+import androidx.annotation.NonNull;
 import androidx.test.ext.junit.runners.AndroidJUnit4;
 import androidx.wear.protolayout.expression.pipeline.StateStore;
 import androidx.wear.protolayout.proto.LayoutElementProto.Layout;
@@ -383,6 +390,60 @@
         assertThat(mRootContainer.getChildCount()).isEqualTo(0);
     }
 
+
+    @Test
+    public void adaptiveUpdateRatesEnabled_rootElementdiff_keepsElementCentered() throws Exception {
+        int dimension = 50;
+        setupInstance(/* adaptiveUpdateRatesEnabled= */ true);
+
+        // Full inflation.
+        ListenableFuture<Void> result =
+                mInstanceUnderTest.renderAndAttach(
+                        layout(
+                                column(
+                                        props -> {
+                                            props.heightDp = dimension;
+                                            props.widthDp = dimension;
+                                        })),
+                        RESOURCES,
+                        mRootContainer);
+        shadowOf(Looper.getMainLooper()).idle();
+
+        assertNoException(result);
+
+        View root = mRootContainer.findViewWithTag(ROOT_NODE_ID);
+
+        assertThat(root).isInstanceOf(ViewGroup.class);
+        ViewGroup columnBeforeMutation = (ViewGroup) root;
+        assertThat(columnBeforeMutation.getChildCount()).isEqualTo(0);
+        assertThat(getGravity(columnBeforeMutation.getLayoutParams())).isEqualTo(Gravity.CENTER);
+
+        // Diff update only for the root element.
+        result =
+                mInstanceUnderTest.renderAndAttach(
+                        layout(
+                                column(
+                                        props -> {
+                                            props.heightDp = dimension + 10;
+                                            props.widthDp = dimension + 10;
+                                        })),
+                        RESOURCES,
+                        mRootContainer);
+
+        shadowOf(Looper.getMainLooper()).idle();
+
+        assertNoException(result);
+
+        root = mRootContainer.findViewWithTag(ROOT_NODE_ID);
+
+        assertThat(root).isInstanceOf(ViewGroup.class);
+        ViewGroup columnAfterMutation = (ViewGroup) root;
+        assertThat(columnAfterMutation.getChildCount()).isEqualTo(0);
+
+        // Make sure that the root has stayed centered within the container.
+        assertThat(getGravity(columnAfterMutation.getLayoutParams())).isEqualTo(Gravity.CENTER);
+    }
+
     @Test
     public void close_clearsHostView() throws Exception {
         Layout layout = layout(text(TEXT1));
@@ -500,26 +561,29 @@
     }
 
     private void setupInstance(boolean adaptiveUpdateRatesEnabled) {
+        Config config = createInstanceConfig(adaptiveUpdateRatesEnabled).build();
+        mInstanceUnderTest = new ProtoLayoutViewInstance(config);
+    }
+
+    @NonNull
+    private Config.Builder createInstanceConfig(boolean adaptiveUpdateRatesEnabled) {
         FakeExecutorService uiThreadExecutor =
                 new FakeExecutorService(new Handler(Looper.getMainLooper()));
         ListeningExecutorService listeningExecutorService =
                 MoreExecutors.listeningDecorator(uiThreadExecutor);
 
-        ProtoLayoutViewInstance.Config config =
-                new Config.Builder(
-                                mApplicationContext,
-                                listeningExecutorService,
-                                listeningExecutorService,
-                                /* clickableIdExtra= */ "CLICKABLE_ID_EXTRA")
-                        .setStateStore(new StateStore(ImmutableMap.of()))
-                        .setLoadActionListener(nextState -> {})
-                        .setAnimationEnabled(true)
-                        .setRunningAnimationsLimit(Integer.MAX_VALUE)
-                        .setUpdatesEnabled(true)
-                        .setAdaptiveUpdateRatesEnabled(adaptiveUpdateRatesEnabled)
-                        .setIsViewFullyVisible(false)
-                        .build();
-        mInstanceUnderTest = new ProtoLayoutViewInstance(config);
+        return new Config.Builder(
+                        mApplicationContext,
+                        listeningExecutorService,
+                        listeningExecutorService,
+                        /* clickableIdExtra= */ "CLICKABLE_ID_EXTRA")
+                .setStateStore(new StateStore(ImmutableMap.of()))
+                .setLoadActionListener(nextState -> {})
+                .setAnimationEnabled(true)
+                .setRunningAnimationsLimit(Integer.MAX_VALUE)
+                .setUpdatesEnabled(true)
+                .setAdaptiveUpdateRatesEnabled(adaptiveUpdateRatesEnabled)
+                .setIsViewFullyVisible(false);
     }
 
     private List<View> findViewsWithText(ViewGroup root, String text) {
@@ -533,6 +597,18 @@
         result.get();
     }
 
+    private static int getGravity(LayoutParams params) {
+        if (params instanceof FrameLayout.LayoutParams) {
+            return ((FrameLayout.LayoutParams) params).gravity;
+        }
+
+        if (params instanceof LinearLayout.LayoutParams) {
+            return ((LinearLayout.LayoutParams) params).gravity;
+        }
+
+        return UNSPECIFIED_GRAVITY;
+    }
+
     static class FakeExecutorService extends AbstractExecutorService {
 
         private final Handler mHandler;
diff --git a/wear/protolayout/protolayout-renderer/src/test/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflaterTest.java b/wear/protolayout/protolayout-renderer/src/test/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflaterTest.java
index 5ed004c..b8d4ad3 100644
--- a/wear/protolayout/protolayout-renderer/src/test/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflaterTest.java
+++ b/wear/protolayout/protolayout-renderer/src/test/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflaterTest.java
@@ -187,6 +187,7 @@
 import androidx.wear.protolayout.renderer.inflater.ProtoLayoutInflater.InflateResult;
 import androidx.wear.protolayout.renderer.inflater.ProtoLayoutInflater.ViewGroupMutation;
 import androidx.wear.protolayout.renderer.inflater.ProtoLayoutInflater.ViewMutationException;
+import androidx.wear.protolayout.renderer.inflater.RenderedMetadata.ViewProperties;
 import androidx.wear.protolayout.renderer.test.R;
 import androidx.wear.widget.ArcLayout;
 import androidx.wear.widget.CurvedTextView;
@@ -280,6 +281,29 @@
         expect.that(tv.getText().toString()).isEmpty();
     }
 
+    @Test
+    public void inflate_textView_withEmptyValueForLayout() {
+        LayoutElement root =
+            LayoutElement.newBuilder()
+                .setText(
+                    Text.newBuilder()
+                        .setText(
+                            StringProp.newBuilder()
+                                .setValue("abcde")
+                                .setDynamicValue(
+                                    DynamicString.newBuilder()
+                                        .setFixed(
+                                            FixedString.newBuilder()
+                                                .setValue("Dynamic Fixed Text")))
+                                        .setValueForLayout("")))
+                .build();
+
+        FrameLayout rootLayout = renderer(fingerprintedLayout(root)).inflate();
+
+        FrameLayout sizedContainer = (FrameLayout) rootLayout.getChildAt(0);
+        expect.that(sizedContainer.getWidth()).isEqualTo(0);
+    }
+
     // obsoleteContentDescription is tested for backward compatibility
     @SuppressWarnings("deprecation")
     @Test
@@ -2153,6 +2177,38 @@
     }
 
     @Test
+    public void inflate_arcLine_usesZeroValueForLayout() {
+        DynamicFloat arcLength =
+                DynamicFloat.newBuilder().setFixed(FixedFloat.newBuilder().setValue(45f)).build();
+
+        LayoutElement root =
+                LayoutElement.newBuilder()
+                        .setArc(
+                                Arc.newBuilder()
+                                        .setAnchorAngle(degrees(0).build())
+                                        .addContents(
+                                                ArcLayoutElement.newBuilder()
+                                                        .setLine(
+                                                                ArcLine.newBuilder()
+                                                                        .setLength(
+                                                                                degreesDynamic(
+                                                                                        arcLength,
+                                                                                        0f))
+                                                                        .setThickness(dp(12)))))
+                        .build();
+
+        FrameLayout rootLayout = renderer(fingerprintedLayout(root)).inflate();
+
+        shadowOf(Looper.getMainLooper()).idle();
+
+        ArcLayout arcLayout = (ArcLayout) rootLayout.getChildAt(0);
+        SizedArcContainer sizedContainer = (SizedArcContainer) arcLayout.getChildAt(0);
+        expect.that(sizedContainer.getSweepAngleDegrees()).isEqualTo(0f);
+        WearCurvedLineView line = (WearCurvedLineView) sizedContainer.getChildAt(0);
+        expect.that(line.getMaxSweepAngleDegrees()).isEqualTo(0f);
+    }
+
+    @Test
     public void inflate_arcLine_dynamicData_updatesArcLength() {
         AppDataKey<DynamicBuilders.DynamicInt32> keyFoo = new AppDataKey<>("foo");
         mStateStore.setAppStateEntryValuesProto(
@@ -2262,7 +2318,7 @@
     }
 
     @Test
-    public void inflate_arcLine_withoutValueForLayout_noLegacyMode_usesArcLength() {
+    public void inflate_arcLine_withoutValueForLayout_legacyMode_usesArcLength() {
         DynamicFloat arcLength =
                 DynamicFloat.newBuilder().setFixed(FixedFloat.newBuilder().setValue(45f)).build();
 
@@ -3028,7 +3084,7 @@
         // Compute the mutation
         ViewGroupMutation mutation =
                 renderer.mRenderer.computeMutation(
-                        getRenderedMetadata(inflatedViewParent), layout2);
+                        getRenderedMetadata(inflatedViewParent), layout2, ViewProperties.EMPTY);
         assertThat(mutation).isNotNull();
         assertThat(mutation.isNoOp()).isFalse();
 
@@ -3074,10 +3130,10 @@
         // Compute the mutation
         ViewGroupMutation mutation2 =
                 renderer.mRenderer.computeMutation(
-                        getRenderedMetadata(inflatedViewParent1), layout2);
+                        getRenderedMetadata(inflatedViewParent1), layout2, ViewProperties.EMPTY);
         ViewGroupMutation mutation3 =
                 renderer.mRenderer.computeMutation(
-                        getRenderedMetadata(inflatedViewParent1), layout3);
+                        getRenderedMetadata(inflatedViewParent1), layout3, ViewProperties.EMPTY);
 
         renderer.mRenderer.applyMutation(inflatedViewParent1, mutation3).get();
         assertThrows(
@@ -3165,7 +3221,7 @@
         // Apply first mutation
         ViewGroupMutation mutation1 =
                 renderer.mRenderer.computeMutation(
-                        getRenderedMetadata(inflatedViewParent), layout2);
+                        getRenderedMetadata(inflatedViewParent), layout2, ViewProperties.EMPTY);
         assertThat(mutation1).isNotNull();
         assertThat(mutation1.isNoOp()).isFalse();
         renderer.mRenderer.applyMutation(inflatedViewParent, mutation1).get();
@@ -3186,7 +3242,7 @@
         // Apply second mutation
         ViewGroupMutation mutation2 =
                 renderer.mRenderer.computeMutation(
-                        getRenderedMetadata(inflatedViewParent), layout3);
+                        getRenderedMetadata(inflatedViewParent), layout3, ViewProperties.EMPTY);
         assertThat(mutation2).isNotNull();
         assertThat(mutation2.isNoOp()).isFalse();
         renderer.mRenderer.applyMutation(inflatedViewParent, mutation2).get();
@@ -3259,7 +3315,7 @@
 
         ViewGroupMutation mutation =
                 renderer.mRenderer.computeMutation(
-                        getRenderedMetadata(inflatedViewParent), layout2);
+                        getRenderedMetadata(inflatedViewParent), layout2, ViewProperties.EMPTY);
         renderer.mRenderer.applyMutation(inflatedViewParent, mutation).get();
 
         ViewGroup boxAfterMutation = (ViewGroup) inflatedViewParent.getChildAt(0);
@@ -3302,7 +3358,7 @@
 
         ViewGroupMutation mutation =
                 renderer.mRenderer.computeMutation(
-                        getRenderedMetadata(inflatedViewParent), layout2);
+                        getRenderedMetadata(inflatedViewParent), layout2, ViewProperties.EMPTY);
         renderer.mRenderer.applyMutation(inflatedViewParent, mutation).get();
 
         ViewGroup boxAfterMutation = (ViewGroup) inflatedViewParent.getChildAt(0);
@@ -3346,7 +3402,7 @@
 
         ViewGroupMutation mutation =
                 renderer.mRenderer.computeMutation(
-                        getRenderedMetadata(inflatedViewParent), layout2);
+                        getRenderedMetadata(inflatedViewParent), layout2, ViewProperties.EMPTY);
         renderer.mRenderer.applyMutation(inflatedViewParent, mutation).get();
 
         ViewGroup boxAfterMutation = (ViewGroup) inflatedViewParent.getChildAt(0);
@@ -3444,7 +3500,7 @@
         }
 
         ViewGroupMutation computeMutation(RenderedMetadata renderedMetadata, Layout targetLayout) {
-            return mRenderer.computeMutation(renderedMetadata, targetLayout);
+            return mRenderer.computeMutation(renderedMetadata, targetLayout, ViewProperties.EMPTY);
         }
 
         boolean applyMutation(ViewGroup parent, ViewGroupMutation mutation) {
diff --git a/wear/watchface/watchface/samples/src/main/java/androidx/wear/watchface/samples/ExampleCanvasAnalogWatchFaceService.kt b/wear/watchface/watchface/samples/src/main/java/androidx/wear/watchface/samples/ExampleCanvasAnalogWatchFaceService.kt
index 44f60d4..138bcd1 100644
--- a/wear/watchface/watchface/samples/src/main/java/androidx/wear/watchface/samples/ExampleCanvasAnalogWatchFaceService.kt
+++ b/wear/watchface/watchface/samples/src/main/java/androidx/wear/watchface/samples/ExampleCanvasAnalogWatchFaceService.kt
@@ -38,7 +38,6 @@
 import androidx.wear.watchface.WatchFace
 import androidx.wear.watchface.WatchFaceColors
 import androidx.wear.watchface.WatchFaceExperimental
-import androidx.wear.watchface.WatchFaceService
 import androidx.wear.watchface.WatchFaceType
 import androidx.wear.watchface.WatchState
 import androidx.wear.watchface.complications.ComplicationSlotBounds
@@ -74,7 +73,7 @@
 import kotlinx.coroutines.launch
 
 /** A simple example canvas based analog watch face. NB this is open for testing. */
-open class ExampleCanvasAnalogWatchFaceService : WatchFaceService() {
+open class ExampleCanvasAnalogWatchFaceService : SampleWatchFaceService() {
 
     // Lazy because the context isn't initialized til later.
     private val watchFaceStyle by lazy { WatchFaceColorStyle.create(this, RED_STYLE) }
diff --git a/wear/watchface/watchface/samples/src/main/java/androidx/wear/watchface/samples/ExampleCanvasDigitalWatchFaceService.kt b/wear/watchface/watchface/samples/src/main/java/androidx/wear/watchface/samples/ExampleCanvasDigitalWatchFaceService.kt
index ddfed4c..96757db 100644
--- a/wear/watchface/watchface/samples/src/main/java/androidx/wear/watchface/samples/ExampleCanvasDigitalWatchFaceService.kt
+++ b/wear/watchface/watchface/samples/src/main/java/androidx/wear/watchface/samples/ExampleCanvasDigitalWatchFaceService.kt
@@ -48,7 +48,6 @@
 import androidx.wear.watchface.WatchFace
 import androidx.wear.watchface.WatchFaceColors
 import androidx.wear.watchface.WatchFaceExperimental
-import androidx.wear.watchface.WatchFaceService
 import androidx.wear.watchface.WatchFaceType
 import androidx.wear.watchface.WatchState
 import androidx.wear.watchface.complications.ComplicationSlotBounds
@@ -73,7 +72,7 @@
 import kotlinx.coroutines.launch
 
 /** A simple example canvas based digital watch face. */
-class ExampleCanvasDigitalWatchFaceService : WatchFaceService() {
+class ExampleCanvasDigitalWatchFaceService : SampleWatchFaceService() {
     // Lazy because the context isn't initialized til later.
     private val watchFaceStyle by lazy { WatchFaceColorStyle.create(this, RED_STYLE) }
 
diff --git a/wear/watchface/watchface/samples/src/main/java/androidx/wear/watchface/samples/ExampleHierarchicalStyleWatchFaceService.kt b/wear/watchface/watchface/samples/src/main/java/androidx/wear/watchface/samples/ExampleHierarchicalStyleWatchFaceService.kt
index 8820469..205e03f 100644
--- a/wear/watchface/watchface/samples/src/main/java/androidx/wear/watchface/samples/ExampleHierarchicalStyleWatchFaceService.kt
+++ b/wear/watchface/watchface/samples/src/main/java/androidx/wear/watchface/samples/ExampleHierarchicalStyleWatchFaceService.kt
@@ -33,7 +33,6 @@
 import androidx.wear.watchface.RenderParameters
 import androidx.wear.watchface.Renderer
 import androidx.wear.watchface.WatchFace
-import androidx.wear.watchface.WatchFaceService
 import androidx.wear.watchface.WatchFaceType
 import androidx.wear.watchface.WatchState
 import androidx.wear.watchface.complications.ComplicationSlotBounds
@@ -56,7 +55,7 @@
 import kotlinx.coroutines.Dispatchers
 import kotlinx.coroutines.launch
 
-open class ExampleHierarchicalStyleWatchFaceService : WatchFaceService() {
+open class ExampleHierarchicalStyleWatchFaceService : SampleWatchFaceService() {
 
     internal val twelveHourClockOption by lazy {
         ListOption(
diff --git a/wear/watchface/watchface/samples/src/main/java/androidx/wear/watchface/samples/ExampleOpenGLBackgroundInitWatchFaceService.kt b/wear/watchface/watchface/samples/src/main/java/androidx/wear/watchface/samples/ExampleOpenGLBackgroundInitWatchFaceService.kt
index 4c887ab..f61f2b5 100644
--- a/wear/watchface/watchface/samples/src/main/java/androidx/wear/watchface/samples/ExampleOpenGLBackgroundInitWatchFaceService.kt
+++ b/wear/watchface/watchface/samples/src/main/java/androidx/wear/watchface/samples/ExampleOpenGLBackgroundInitWatchFaceService.kt
@@ -28,7 +28,6 @@
 import androidx.wear.watchface.ComplicationSlotsManager
 import androidx.wear.watchface.Renderer
 import androidx.wear.watchface.WatchFace
-import androidx.wear.watchface.WatchFaceService
 import androidx.wear.watchface.WatchFaceType
 import androidx.wear.watchface.WatchState
 import androidx.wear.watchface.complications.permission.dialogs.sample.ComplicationDeniedActivity
@@ -43,7 +42,7 @@
  * Sample watch face using OpenGL with textures loaded on a background thread by [createWatchFace]
  * which are used for rendering on the main thread.
  */
-open class ExampleOpenGLBackgroundInitWatchFaceService() : WatchFaceService() {
+open class ExampleOpenGLBackgroundInitWatchFaceService() : SampleWatchFaceService() {
     private val colorStyleSetting by lazy {
         UserStyleSetting.ListUserStyleSetting(
             UserStyleSetting.Id("color_style_setting"),
diff --git a/wear/watchface/watchface/samples/src/main/java/androidx/wear/watchface/samples/ExampleOpenGLWatchFaceService.kt b/wear/watchface/watchface/samples/src/main/java/androidx/wear/watchface/samples/ExampleOpenGLWatchFaceService.kt
index 14a0b40..c42dc9a6 100644
--- a/wear/watchface/watchface/samples/src/main/java/androidx/wear/watchface/samples/ExampleOpenGLWatchFaceService.kt
+++ b/wear/watchface/watchface/samples/src/main/java/androidx/wear/watchface/samples/ExampleOpenGLWatchFaceService.kt
@@ -32,7 +32,6 @@
 import androidx.wear.watchface.WatchFace
 import androidx.wear.watchface.WatchFaceColors
 import androidx.wear.watchface.WatchFaceExperimental
-import androidx.wear.watchface.WatchFaceService
 import androidx.wear.watchface.WatchFaceType
 import androidx.wear.watchface.WatchState
 import androidx.wear.watchface.complications.ComplicationSlotBounds
@@ -63,7 +62,7 @@
  *
  * NB this is open for testing.
  */
-open class ExampleOpenGLWatchFaceService : WatchFaceService() {
+open class ExampleOpenGLWatchFaceService : SampleWatchFaceService() {
     // Lazy because the context isn't initialized till later.
     private val watchFaceStyle by lazy { WatchFaceColorStyle.create(this, "white_style") }
 
diff --git a/wear/watchface/watchface/samples/src/main/java/androidx/wear/watchface/samples/SampleWatchFaceService.kt b/wear/watchface/watchface/samples/src/main/java/androidx/wear/watchface/samples/SampleWatchFaceService.kt
new file mode 100644
index 0000000..71127d9
--- /dev/null
+++ b/wear/watchface/watchface/samples/src/main/java/androidx/wear/watchface/samples/SampleWatchFaceService.kt
@@ -0,0 +1,51 @@
+/*
+ * 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.watchface.samples
+
+import android.content.BroadcastReceiver
+import android.content.Context
+import android.content.Intent
+import android.content.IntentFilter
+import android.util.Log
+import androidx.wear.watchface.WatchFaceService
+
+/**
+ * Common base class for the androidx sample watch faces.
+ *
+ * You can trigger these to quit with:
+ * `adb shell am broadcast -a androidx.wear.watchface.samples.QUIT`
+ */
+abstract class SampleWatchFaceService : WatchFaceService() {
+    override fun onCreate() {
+        super.onCreate()
+
+        registerReceiver(
+            object : BroadcastReceiver() {
+                override fun onReceive(context: Context, intent: Intent) {
+                    Log.d(TAG, "androidx.wear.watchface.samples.QUIT received, quitting.")
+                    System.exit(0)
+                }
+            },
+            IntentFilter("androidx.wear.watchface.samples.QUIT"),
+            Context.RECEIVER_EXPORTED
+        )
+    }
+
+    private companion object {
+        const val TAG = "SampleWatchFaceService"
+    }
+}
diff --git a/wear/watchface/watchface/src/main/java/androidx/wear/watchface/WatchFaceService.kt b/wear/watchface/watchface/src/main/java/androidx/wear/watchface/WatchFaceService.kt
index 7ff9161..8190059 100644
--- a/wear/watchface/watchface/src/main/java/androidx/wear/watchface/WatchFaceService.kt
+++ b/wear/watchface/watchface/src/main/java/androidx/wear/watchface/WatchFaceService.kt
@@ -1416,6 +1416,7 @@
                                             "${it.params.instanceId} and constructed instance id " +
                                             params.instanceId
                                     }
+                                    Log.d(TAG, "onInteractiveWatchFaceCreated: $instance")
                                     it.callback.onInteractiveWatchFaceCreated(instance)
                                 }
                         } catch (e: Exception) {
@@ -1462,6 +1463,7 @@
                                     pendingWallpaperInstance.params,
                                     "Boot with pendingWallpaperInstance"
                                 )
+                            Log.d(TAG, "onInteractiveWatchFaceCreated: $instance")
                             pendingWallpaperInstance.callback.onInteractiveWatchFaceCreated(
                                 instance
                             )
@@ -1507,6 +1509,7 @@
         ) {
             uiThreadCoroutineScope.launch {
                 try {
+                    Log.d(TAG, "attachToParameterlessEngine onInteractiveWatchFaceCreated")
                     pendingWallpaperInstance.callback.onInteractiveWatchFaceCreated(
                         createInteractiveInstance(
                             pendingWallpaperInstance.params,
@@ -2110,6 +2113,7 @@
             _createdBy: String
         ): InteractiveWatchFaceImpl =
             TraceEvent("EngineWrapper.createInteractiveInstance").use {
+                Log.d(TAG, "createInteractiveInstance: " + _createdBy)
                 mainThreadPriorityDelegate.setInteractivePriority()
 
                 require(!watchFaceCreatedOrPending()) {
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/WebViewCompat.java b/webkit/webkit/src/main/java/androidx/webkit/WebViewCompat.java
index 34472aa..8deb404 100644
--- a/webkit/webkit/src/main/java/androidx/webkit/WebViewCompat.java
+++ b/webkit/webkit/src/main/java/androidx/webkit/WebViewCompat.java
@@ -1072,6 +1072,66 @@
         }
     }
 
+    /**
+     * Sets the Profile with its name as the current Profile for this WebView.
+     * <ul>
+     * <li> This should be called before doing anything else with WebView other than attaching it to
+     * the view hierarchy.
+     * <li> This should be only called if WebView is to use a Profile other than the default.
+     * <li> This method will create the profile if it doesn't exist.
+     * </ul>
+     * This method must be called on the UI thread.
+     *
+     * @param webView the WebView to modify.
+     * @param profileName the name of the profile to use in the passed {@code webView}.
+     * @throws IllegalStateException if the WebView has been destroyed.
+     * @throws IllegalStateException if the previous profile has been accessed via a call to
+     * {@link WebViewCompat#getProfile(WebView)}.
+     * @throws IllegalStateException if the profile has already been set previously via this method.
+     * @throws IllegalStateException if {@link WebView#evaluateJavascript(String, ValueCallback)} is
+     * called on the WebView before this method.
+     * @throws IllegalStateException if the WebView has previously navigated to a web page.
+     */
+    @RestrictTo(RestrictTo.Scope.LIBRARY_GROUP)
+    @RequiresFeature(
+            name = WebViewFeature.MULTI_PROFILE,
+            enforcement = "androidx.webkit.WebViewFeature#isFeatureSupported")
+    public static void setProfile(@NonNull WebView webView,
+            @NonNull String profileName) throws IllegalStateException {
+        final ApiFeature.NoFramework feature = WebViewFeatureInternal.MULTI_PROFILE;
+        if (feature.isSupportedByWebView()) {
+            getProvider(webView).setProfileWithName(profileName);
+        } else {
+            throw WebViewFeatureInternal.getUnsupportedOperationException();
+        }
+    }
+
+    /**
+     * Gets the Profile associated with this WebView.
+     * <p>
+     * Gets the profile object set on this WebView using
+     * {@link WebViewCompat#setProfile(WebView, String)}, or the default profile if it has not
+     * been changed.
+     * <p> This method must be called on the UI thread.
+     *
+     * @param webView the WebView to get the profile object associated with.
+     * @return the profile object set to this WebView.
+     * @throws IllegalStateException if the WebView has been destroyed.
+     */
+    @NonNull
+    @RestrictTo(RestrictTo.Scope.LIBRARY_GROUP)
+    @RequiresFeature(
+            name = WebViewFeature.MULTI_PROFILE,
+            enforcement = "androidx.webkit.WebViewFeature#isFeatureSupported")
+    public static Profile getProfile(@NonNull WebView webView) throws IllegalStateException {
+        final ApiFeature.NoFramework feature = WebViewFeatureInternal.MULTI_PROFILE;
+        if (feature.isSupportedByWebView()) {
+            return getProvider(webView).getProfile();
+        } else {
+            throw WebViewFeatureInternal.getUnsupportedOperationException();
+        }
+    }
+
     private static WebViewProviderFactory getFactory() {
         return WebViewGlueCommunicator.getFactory();
     }
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/WebViewProviderAdapter.java b/webkit/webkit/src/main/java/androidx/webkit/internal/WebViewProviderAdapter.java
index 919c549..68c1056 100644
--- a/webkit/webkit/src/main/java/androidx/webkit/internal/WebViewProviderAdapter.java
+++ b/webkit/webkit/src/main/java/androidx/webkit/internal/WebViewProviderAdapter.java
@@ -26,12 +26,14 @@
 import androidx.annotation.NonNull;
 import androidx.annotation.Nullable;
 import androidx.annotation.RequiresApi;
+import androidx.webkit.Profile;
 import androidx.webkit.WebMessageCompat;
 import androidx.webkit.WebMessagePortCompat;
 import androidx.webkit.WebViewCompat;
 import androidx.webkit.WebViewRenderProcess;
 import androidx.webkit.WebViewRenderProcessClient;
 
+import org.chromium.support_lib_boundary.ProfileBoundaryInterface;
 import org.chromium.support_lib_boundary.WebViewProviderBoundaryInterface;
 import org.chromium.support_lib_boundary.util.BoundaryInterfaceReflectionUtil;
 
@@ -167,4 +169,22 @@
                 : null;
         mImpl.setWebViewRendererClient(handler);
     }
+
+    /**
+     * Adapter method for {@link WebViewCompat#setProfile(WebView, String)}.
+     */
+    public void setProfileWithName(@NonNull String profileName) {
+        mImpl.setProfile(profileName);
+    }
+
+    /**
+     * Adapter method for {@link WebViewCompat#getProfile(WebView)}.
+     */
+    @NonNull
+    public Profile getProfile() {
+        ProfileBoundaryInterface profile = BoundaryInterfaceReflectionUtil.castToSuppLibClass(
+                ProfileBoundaryInterface.class, mImpl.getProfile());
+
+        return new ProfileImpl(profile);
+    }
 }
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());
+    }
 }
diff --git a/window/window-demos/demo/src/main/AndroidManifest.xml b/window/window-demos/demo/src/main/AndroidManifest.xml
index 597cb51..5b81535 100644
--- a/window/window-demos/demo/src/main/AndroidManifest.xml
+++ b/window/window-demos/demo/src/main/AndroidManifest.xml
@@ -51,6 +51,22 @@
             android:supportsPictureInPicture="true"
             android:label="@string/display_features_no_config_change" />
         <activity
+            android:name=".DisplayFeaturesLetterboxPortraitSlimActivity"
+            android:exported="false"
+            android:resizeableActivity="false"
+            android:screenOrientation="portrait"
+            android:minAspectRatio="2"
+            android:maxAspectRatio="3"
+            android:label="@string/display_features_slim_portrait" />
+        <activity
+            android:name=".DisplayFeaturesLetterboxLandscapeSlimActivity"
+            android:exported="false"
+            android:resizeableActivity="false"
+            android:screenOrientation="landscape"
+            android:minAspectRatio="2"
+            android:maxAspectRatio="3"
+            android:label="@string/display_features_slim_landscape" />
+        <activity
             android:name=".SplitLayoutActivity"
             android:exported="false"
             android:label="@string/split_layout" />
diff --git a/bluetooth/integration-tests/testapp/src/main/java/androidx/bluetooth/integration/testapp/ui/common/ByteArray.kt b/window/window-demos/demo/src/main/java/androidx/window/demo/DisplayFeaturesLetterboxLandscapeSlimActivity.kt
similarity index 67%
copy from bluetooth/integration-tests/testapp/src/main/java/androidx/bluetooth/integration/testapp/ui/common/ByteArray.kt
copy to window/window-demos/demo/src/main/java/androidx/window/demo/DisplayFeaturesLetterboxLandscapeSlimActivity.kt
index 40b8f5b..e681ab8 100644
--- a/bluetooth/integration-tests/testapp/src/main/java/androidx/bluetooth/integration/testapp/ui/common/ByteArray.kt
+++ b/window/window-demos/demo/src/main/java/androidx/window/demo/DisplayFeaturesLetterboxLandscapeSlimActivity.kt
@@ -14,7 +14,12 @@
  * limitations under the License.
  */
 
-package androidx.bluetooth.integration.testapp.ui.common
+package androidx.window.demo
 
-fun ByteArray.toHexString(): String =
-    joinToString(separator = " ", prefix = "0x") { String.format("%02X", it) }
+import androidx.window.demo.common.DisplayFeaturesActivity
+
+/**
+ * An [android.app.Activity] that should be letterboxed even though the display has a landscape
+ * orientation.
+ */
+class DisplayFeaturesLetterboxLandscapeSlimActivity : DisplayFeaturesActivity()
diff --git a/bluetooth/integration-tests/testapp/src/main/java/androidx/bluetooth/integration/testapp/ui/common/ByteArray.kt b/window/window-demos/demo/src/main/java/androidx/window/demo/DisplayFeaturesLetterboxPortraitSlimActivity.kt
similarity index 67%
copy from bluetooth/integration-tests/testapp/src/main/java/androidx/bluetooth/integration/testapp/ui/common/ByteArray.kt
copy to window/window-demos/demo/src/main/java/androidx/window/demo/DisplayFeaturesLetterboxPortraitSlimActivity.kt
index 40b8f5b..50f1119 100644
--- a/bluetooth/integration-tests/testapp/src/main/java/androidx/bluetooth/integration/testapp/ui/common/ByteArray.kt
+++ b/window/window-demos/demo/src/main/java/androidx/window/demo/DisplayFeaturesLetterboxPortraitSlimActivity.kt
@@ -13,8 +13,12 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
+package androidx.window.demo
 
-package androidx.bluetooth.integration.testapp.ui.common
+import androidx.window.demo.common.DisplayFeaturesActivity
 
-fun ByteArray.toHexString(): String =
-    joinToString(separator = " ", prefix = "0x") { String.format("%02X", it) }
+/**
+ * An [android.app.Activity] that should be letterboxed even though the display has a portrait
+ * orientation.
+ */
+class DisplayFeaturesLetterboxPortraitSlimActivity : DisplayFeaturesActivity()
diff --git a/window/window-demos/demo/src/main/java/androidx/window/demo/demos/WindowDemosActivity.kt b/window/window-demos/demo/src/main/java/androidx/window/demo/demos/WindowDemosActivity.kt
index 109394a..e3d2706 100644
--- a/window/window-demos/demo/src/main/java/androidx/window/demo/demos/WindowDemosActivity.kt
+++ b/window/window-demos/demo/src/main/java/androidx/window/demo/demos/WindowDemosActivity.kt
@@ -19,14 +19,20 @@
 import android.os.Bundle
 import androidx.appcompat.app.AppCompatActivity
 import androidx.recyclerview.widget.RecyclerView
+import androidx.window.demo.DisplayFeaturesLetterboxLandscapeSlimActivity
+import androidx.window.demo.DisplayFeaturesLetterboxPortraitSlimActivity
 import androidx.window.demo.DisplayFeaturesNoConfigChangeActivity
 import androidx.window.demo.ImeActivity
 import androidx.window.demo.PresentationActivity
 import androidx.window.demo.R
 import androidx.window.demo.R.string.display_features_config_change
 import androidx.window.demo.R.string.display_features_no_config_change
+import androidx.window.demo.R.string.display_features_slim_landscape
+import androidx.window.demo.R.string.display_features_slim_portrait
 import androidx.window.demo.R.string.show_all_display_features_config_change_description
+import androidx.window.demo.R.string.show_all_display_features_landscape_slim
 import androidx.window.demo.R.string.show_all_display_features_no_config_change_description
+import androidx.window.demo.R.string.show_all_display_features_portrait_slim
 import androidx.window.demo.SplitLayoutActivity
 import androidx.window.demo.WindowMetricsActivity
 import androidx.window.demo.common.DisplayFeaturesActivity
@@ -51,6 +57,16 @@
                 clazz = DisplayFeaturesNoConfigChangeActivity::class.java
             ),
             DemoItem(
+                buttonTitle = getString(display_features_slim_portrait),
+                description = getString(show_all_display_features_portrait_slim),
+                clazz = DisplayFeaturesLetterboxPortraitSlimActivity::class.java
+            ),
+            DemoItem(
+                buttonTitle = getString(display_features_slim_landscape),
+                description = getString(show_all_display_features_landscape_slim),
+                clazz = DisplayFeaturesLetterboxLandscapeSlimActivity::class.java
+            ),
+            DemoItem(
                 buttonTitle = getString(R.string.window_metrics),
                 description = getString(R.string.window_metrics_description),
                 clazz = WindowMetricsActivity::class.java
diff --git a/window/window-demos/demo/src/main/res/values/strings.xml b/window/window-demos/demo/src/main/res/values/strings.xml
index fb13fde..892cecc 100644
--- a/window/window-demos/demo/src/main/res/values/strings.xml
+++ b/window/window-demos/demo/src/main/res/values/strings.xml
@@ -23,6 +23,8 @@
     <string name="green_droid">Green droid</string>
     <string name="display_features_config_change">Display features handle config change</string>
     <string name="display_features_no_config_change">Display features no config change</string>
+    <string name="display_features_slim_portrait">Display features slim portrait</string>
+    <string name="display_features_slim_landscape">Display features slim landscape</string>
     <string name="split_layout">Split layout</string>
     <string name="presentation">Presentation</string>
     <string name="start_presentation">Start presentation</string>
@@ -39,6 +41,8 @@
     <string name="test_activity">Test activity</string>
     <string name="show_all_display_features_config_change_description">Show all display features of the device on the screen and handle config changes</string>
     <string name="show_all_display_features_no_config_change_description">Show all display features of the device on the screen and do not handle config changes.  The activity is recreated instead on rotation or resize</string>
+    <string name="show_all_display_features_portrait_slim">Show all display features of the device on the screen with slim portrait window.</string>
+    <string name="show_all_display_features_landscape_slim">Show all display features of the device on the screen with slim landscape window.</string>
     <string name="split_layout_demo_description">Demo of a layout that splits the content to sides of a fold or a hinge. If not present or minimal size requirements are not meant, it behave like a FrameLayout.</string>
     <string name="presentation_demo_description">Demo of using Presentation API to show content on secondary display.</string>
     <string name="window_metrics">Window metrics</string>
diff --git a/work/work-inspection/src/androidTest/java/androidx/work/inspection/ProguardDetectionTest.kt b/work/work-inspection/src/androidTest/java/androidx/work/inspection/ProguardDetectionTest.kt
new file mode 100644
index 0000000..2fa42c5
--- /dev/null
+++ b/work/work-inspection/src/androidTest/java/androidx/work/inspection/ProguardDetectionTest.kt
@@ -0,0 +1,34 @@
+/*
+ * 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.work.inspection
+
+import androidx.test.ext.junit.runners.AndroidJUnit4
+import androidx.test.filters.MediumTest
+import com.google.common.truth.Truth
+import org.junit.Test
+import org.junit.runner.RunWith
+
+@MediumTest
+@RunWith(AndroidJUnit4::class)
+class ProguardDetectionTest {
+
+    @Test
+    fun testProguardFileExists() {
+        val proguard = Class.forName("androidx.inspection.work.runtime.ProguardDetection")
+        Truth.assertThat(proguard).isNotNull()
+    }
+}
diff --git a/work/work-runtime/src/androidTest/java/androidx/work/impl/WorkerWrapperTest.java b/work/work-runtime/src/androidTest/java/androidx/work/impl/WorkerWrapperTest.java
index a9209c7..38217c0 100644
--- a/work/work-runtime/src/androidTest/java/androidx/work/impl/WorkerWrapperTest.java
+++ b/work/work-runtime/src/androidTest/java/androidx/work/impl/WorkerWrapperTest.java
@@ -32,6 +32,7 @@
 import static org.hamcrest.Matchers.contains;
 import static org.hamcrest.Matchers.containsInAnyOrder;
 import static org.hamcrest.Matchers.greaterThan;
+import static org.hamcrest.Matchers.greaterThanOrEqualTo;
 import static org.hamcrest.Matchers.isOneOf;
 import static org.mockito.Mockito.mock;
 import static org.mockito.Mockito.never;
@@ -93,7 +94,6 @@
 
 import org.junit.After;
 import org.junit.Before;
-import org.junit.Ignore;
 import org.junit.Rule;
 import org.junit.Test;
 import org.junit.runner.RunWith;
@@ -404,7 +404,6 @@
                 containsInAnyOrder(value1, value2));
     }
 
-    @Ignore // b/268530685
     @Test
     @SmallTest
     public void testDependencies_setsPeriodStartTimesForUnblockedWork() {
@@ -425,12 +424,14 @@
             mDatabase.endTransaction();
         }
 
+        assertThat(mWorkSpecDao.getWorkSpec(work.getStringId()).lastEnqueueTime, is(-1L));
+
         long beforeUnblockedTime = System.currentTimeMillis();
 
         createBuilder(prerequisiteWork.getStringId()).build().run();
 
         WorkSpec workSpec = mWorkSpecDao.getWorkSpec(work.getStringId());
-        assertThat(workSpec.lastEnqueueTime, is(greaterThan(beforeUnblockedTime)));
+        assertThat(workSpec.lastEnqueueTime, is(greaterThanOrEqualTo(beforeUnblockedTime)));
     }
 
     @Test
