diff --git a/DEPS b/DEPS
index 91bc067..32c0c9ca 100644
--- a/DEPS
+++ b/DEPS
@@ -274,6 +274,11 @@
   # reclient CIPD package version
   'reclient_version': 're_client_version:0.125.0.f3883c2-gomaip',
 
+  # screen-ai CIPD package Linux version
+  # TODO(b/281483558): Use a tag to download the latest version of screen-ai
+  # (e.g. 'version:121.3') and find a way to automate updating //DEPS with it.
+  'screen_ai_linux': 'x8c4xOQj3V2uyBicjNa2YkN71brkj5FZg157RueHF_oC',
+
   # The path of the sysroots.json file.
   # This is used by vendor builds like Electron.
   'sysroots_json_path': 'build/linux/sysroot_scripts/sysroots.json',
@@ -307,11 +312,11 @@
   # Three lines of non-changing comments so that
   # the commit queue can handle CLs rolling V8
   # and whatever else without interference from each other.
-  'v8_revision': '87402b7de5af5ec6a63be94919c773d933b9a64d',
+  'v8_revision': '3b9eebc293329e7062db722b160a2f19e32e2fd5',
   # Three lines of non-changing comments so that
   # the commit queue can handle CLs rolling ANGLE
   # and whatever else without interference from each other.
-  'angle_revision': '136854656738f30e034a5e0827a5b17a5511f2f8',
+  'angle_revision': 'a114385768127994caf5e9c1cc30a337b51efb97',
   # Three lines of non-changing comments so that
   # the commit queue can handle CLs rolling SwiftShader
   # and whatever else without interference from each other.
@@ -394,7 +399,7 @@
   # Three lines of non-changing comments so that
   # the commit queue can handle CLs rolling devtools-frontend
   # and whatever else without interference from each other.
-  'devtools_frontend_revision': '98d992a07f471468ad5a07cb37e7640dc38c2132',
+  'devtools_frontend_revision': 'a20e7f45af8fb569776ee3b605b70d57f71afbef',
   # Three lines of non-changing comments so that
   # the commit queue can handle CLs rolling libprotobuf-mutator
   # and whatever else without interference from each other.
@@ -418,7 +423,7 @@
   # Three lines of non-changing comments so that
   # the commit queue can handle CLs rolling feed
   # and whatever else without interference from each other.
-  'dawn_revision': '8d196eadb653897a30f765a4c4a9c2016c79b7eb',
+  'dawn_revision': '464418b24f65fce81114f6af89b611900f988424',
   # Three lines of non-changing comments so that
   # the commit queue can handle CLs rolling feed
   # and whatever else without interference from each other.
@@ -818,7 +823,7 @@
 
   'src/clank': {
     'url': Var('chrome_git') + '/clank/internal/apps.git' + '@' +
-    '5e2c2c062fd5cd50be442ada3e3c368ea4f90ce4',
+    'e97c3ffb033feba08afc129e3c2e8192e406e006',
     'condition': 'checkout_android and checkout_src_internal',
   },
 
@@ -980,7 +985,7 @@
     'packages': [
       {
           'package': 'chromium/third_party/androidx',
-          'version': 'umiv0_Rv1JhkZJ9t-Onpz6nxwK83CDxtP6vrxt4XfTEC',
+          'version': '-DNp3W6PysyC-ORTgGZEPS1cSd-wEW_KogHTJPL8jFgC',
       },
     ],
     'condition': 'checkout_android',
@@ -1196,7 +1201,7 @@
     Var('chromium_git') + '/devtools/devtools-frontend' + '@' + Var('devtools_frontend_revision'),
 
   'src/third_party/devtools-frontend-internal': {
-      'url': Var('chrome_git') + '/devtools/devtools-internal.git' + '@' + 'cb8f270a8aa35b4e328e1daab63a4b6ec0d895dc',
+      'url': Var('chrome_git') + '/devtools/devtools-internal.git' + '@' + '1aa144373762ad547bc61052833c3ef9ea4eb418',
     'condition': 'checkout_src_internal',
   },
 
@@ -1434,7 +1439,7 @@
       'packages': [
           {
               'package': 'chromium/third_party/kotlinc',
-              'version': 'TW-qEGSqERSeeEdITH9I24qeAFvaEkvFIzRTD0n5RIUC',
+              'version': 'qIzbRHHektfb27pu4daejk9dRfw48IcsmoUX4Xjt-JQC',
           },
       ],
       'condition': 'checkout_android',
@@ -1454,7 +1459,7 @@
     Var('chromium_git') + '/external/libaddressinput.git' + '@' + 'e8712e415627f22d0b00ebee8db99547077f39bd',
 
   'src/third_party/libaom/source/libaom':
-    Var('aomedia_git') + '/aom.git' + '@' +  'ebe946034afb793a69d71fc864b561e691e403de',
+    Var('aomedia_git') + '/aom.git' + '@' +  'f30a3ed4e80e97c2df4cb5c71eb11cc90c034ae6',
 
   'src/third_party/libavif/src':
     Var('chromium_git') + '/external/github.com/AOMediaCodec/libavif.git' + '@' + Var('libavif_revision'),
@@ -1746,7 +1751,7 @@
     Var('chromium_git') + '/external/github.com/google/snappy.git' + '@' + 'c9f9edf6d75bb065fa47468bf035e051a57bec7c',
 
   'src/third_party/sqlite/src':
-    Var('chromium_git') + '/chromium/deps/sqlite.git' + '@' + 'a5ab5b2b89889c590b3496882f667d8d69569ee6',
+    Var('chromium_git') + '/chromium/deps/sqlite.git' + '@' + 'a5270ae741714a5aad187ba8dcd8bddca39f791f',
 
   'src/third_party/sqlite4java': {
       'packages': [
@@ -1841,7 +1846,7 @@
     Var('chromium_git') + '/external/github.com/gpuweb/cts.git' + '@' + 'f20c5f7b8f53904edaa98651d764e1b8305d7c14',
 
   'src/third_party/webrtc':
-    Var('webrtc_git') + '/src.git' + '@' + '4931512cb01c1932299db3cd7c822b08dd812125',
+    Var('webrtc_git') + '/src.git' + '@' + 'c039e836f30450f07a815a7e16a19bd3dee3d22d',
 
   # Wuffs' canonical repository is at github.com/google/wuffs, but we use
   # Skia's mirror of Wuffs, the same as in upstream Skia's DEPS file.
@@ -2008,7 +2013,7 @@
     'packages': [
       {
         'package': 'chromeos_internal/apps/projector_app/app',
-        'version': 'EyJ748r0DLJy6KspQe5i_l-y1VBvn5prTdVKPSgxUNkC',
+        'version': 'K1SE40-JuKf_MCBclvoFRr1yQCZtAmLNHIdKrk91PjwC',
       },
     ],
     'condition': 'checkout_chromeos and checkout_src_internal',
@@ -3944,7 +3949,7 @@
 
   'src/components/optimization_guide/internal': {
       'url': Var('chrome_git') + '/chrome/components/optimization_guide.git' + '@' +
-        '8d999c927e8818fa858ab41c9e7dc1cc4a20c0ea',
+        'ac6a9d373504b20eedd6631925fa4a23fa763ad7',
       'condition': 'checkout_src_internal',
   },
 
@@ -4082,6 +4087,17 @@
       'condition': 'checkout_src_internal',
   },
 
+  'src/third_party/screen-ai/linux': {
+      'packages': [
+          {
+              'package': 'chromium/third_party/screen-ai/linux',
+              'version': Var('screen_ai_linux'),
+          },
+      ],
+      'condition': 'checkout_linux',
+      'dep_type': 'cipd',
+  },
+
   'src/third_party/soda': {
       'packages': [
           {
diff --git a/android_webview/BUILD.gn b/android_webview/BUILD.gn
index c0a32235..b55c1fd 100644
--- a/android_webview/BUILD.gn
+++ b/android_webview/BUILD.gn
@@ -135,8 +135,7 @@
     is_base_module = true
 
     if (enable_manifest_verification) {
-      expected_android_manifest =
-          "expectations/system_webview_bundle.AndroidManifest.expected"
+      expected_android_manifest = "expectations/$_main_system_webview_bundle_target.AndroidManifest.expected"
     }
   }
 
@@ -171,6 +170,10 @@
     target_type = "android_app_bundle_module"
     is_base_module = true
     include_32_bit_webview = false
+    if (enable_manifest_verification) {
+      expected_android_manifest =
+          "expectations/system_webview_64_bundle.AndroidManifest.expected"
+    }
   }
 
   system_webview_bundle("system_webview_64_bundle") {
@@ -191,6 +194,10 @@
       target_type = "android_app_bundle_module"
       include_64_bit_webview = false
       is_base_module = true
+      if (enable_manifest_verification) {
+        expected_android_manifest =
+            "expectations/system_webview_32_bundle.AndroidManifest.expected"
+      }
     }
 
     system_webview_bundle("system_webview_32_bundle") {
@@ -261,8 +268,7 @@
     }
 
     if (enable_manifest_verification) {
-      expected_android_manifest =
-          "expectations/trichrome_webview_bundle.AndroidManifest.expected"
+      expected_android_manifest = "expectations/$_main_trichrome_webview_bundle_target.AndroidManifest.expected"
     }
     static_library_provider = _main_trichrome_library_provider
   }
@@ -273,7 +279,7 @@
     bundle_name = "TrichromeWebView"
     static_library_provider = _main_trichrome_library_provider
     if (enable_libs_and_assets_verification) {
-      expected_libs_and_assets = "expectations/trichrome_webview_bundle.$target_cpu.libs_and_assets.expected"
+      expected_libs_and_assets = "expectations/$_main_trichrome_webview_bundle_target.$target_cpu.libs_and_assets.expected"
     }
   }
 }
@@ -296,6 +302,10 @@
     is_64_bit_browser = true
     include_32_bit_webview = false
     static_library_provider = "//chrome/android:trichrome_library_64_apk"
+    if (enable_manifest_verification) {
+      expected_android_manifest =
+          "expectations/trichrome_webview_64_bundle.AndroidManifest.expected"
+    }
   }
 }
 
@@ -332,6 +342,10 @@
   trichrome_webview_64_32_tmpl("trichrome_webview_64_32_base_bundle_module") {
     target_type = "android_app_bundle_module"
     is_base_module = true
+    if (enable_manifest_verification) {
+      expected_android_manifest =
+          "expectations/trichrome_webview_64_32_bundle.AndroidManifest.expected"
+    }
   }
 
   system_webview_bundle("trichrome_webview_64_32_bundle") {
@@ -364,6 +378,10 @@
   trichrome_webview_32_tmpl("trichrome_webview_32_base_bundle_module") {
     target_type = "android_app_bundle_module"
     is_base_module = true
+    if (enable_manifest_verification) {
+      expected_android_manifest =
+          "expectations/trichrome_webview_32_bundle.AndroidManifest.expected"
+    }
   }
 
   system_webview_bundle("trichrome_webview_32_bundle") {
diff --git a/android_webview/expectations/system_webview_32_64_bundle.AndroidManifest.expected b/android_webview/expectations/system_webview_32_64_bundle.AndroidManifest.expected
new file mode 100644
index 0000000..6d36a675
--- /dev/null
+++ b/android_webview/expectations/system_webview_32_64_bundle.AndroidManifest.expected
@@ -0,0 +1,499 @@
+<?xml version="1.0" ?>
+<manifest
+    xmlns:android="http://schemas.android.com/apk/res/android"
+    package="com.android.webview"
+    platformBuildVersionCode="34"
+    platformBuildVersionName="14"
+    android:isolatedSplits="true"
+    android:versionCode="OFFSET=1"
+    android:versionName="#.#.#.#">
+  <uses-feature android:name="android.hardware.touchscreen" android:required="false"/>
+  <uses-feature android:name="android.software.leanback" android:required="false"/>
+  <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
+  <uses-permission android:name="android.permission.FOREGROUND_SERVICE"/>
+  <uses-permission android:name="android.permission.FOREGROUND_SERVICE_SPECIAL_USE"/>
+  <uses-permission android:name="android.permission.INTERNET"/>
+  <uses-permission android:name="android.permission.POST_NOTIFICATIONS"/>
+  <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED"/>
+  <uses-sdk android:minSdkVersion="26" android:targetSdkVersion="34"/>
+  <application
+      android:name="org.chromium.android_webview.nonembedded.WebViewApkApplication"
+      android:extractNativeLibs="false"
+      android:icon="@$PACKAGE:drawable/icon_webview"
+      android:label="Android System WebView"
+      android:multiArch="true"
+      android:use32bitAbi="true">
+    <activity  # DIFF-ANCHOR: ea1a94af
+        android:name="com.google.android.gms.common.api.GoogleApiActivity"
+        android:exported="false"
+        android:theme="@android:style/Theme.Translucent.NoTitleBar">
+    </activity>  # DIFF-ANCHOR: ea1a94af
+    <activity  # DIFF-ANCHOR: a4438884
+        android:name="org.chromium.android_webview.devui.MainActivity"
+        android:exported="true"
+        android:icon="@drawable/icon_webview"
+        android:label="WebView DevTools"
+        android:launchMode="singleTask"
+        android:process=":webview_apk"
+        android:taskAffinity="$PACKAGE.org.chromium.android_webview.devui"
+        android:theme="@style/Theme.DevUi.DayNight"
+        android:visibleToInstantApps="true"
+        android:windowSoftInputMode="adjustPan">
+      <intent-filter>  # DIFF-ANCHOR: b80aa336
+        <action android:name="$PACKAGE.SHOW_DEV_UI"/>
+        <category android:name="android.intent.category.DEFAULT"/>
+      </intent-filter>  # DIFF-ANCHOR: b80aa336
+    </activity>  # DIFF-ANCHOR: a4438884
+    <activity  # DIFF-ANCHOR: aeabab17
+        android:name="org.chromium.android_webview.nonembedded.LicenseActivity"
+        android:exported="true"
+        android:label="@string/license_activity_title"
+        android:process=":webview_apk">
+      <intent-filter>  # DIFF-ANCHOR: 23298d3b
+        <action android:name="android.settings.WEBVIEW_LICENSE"/>
+        <category android:name="android.intent.category.DEFAULT"/>
+      </intent-filter>  # DIFF-ANCHOR: 23298d3b
+      <meta-data android:name="com.android.settings.PRIMARY_PROFILE_CONTROLLED" android:value="true"/>
+    </activity>  # DIFF-ANCHOR: aeabab17
+    <activity-alias  # DIFF-ANCHOR: da85c28e
+        android:name="org.chromium.android_webview.SafeModeState"
+        android:enabled="false"
+        android:process=":webview_apk"
+        android:targetActivity="org.chromium.android_webview.devui.MainActivity"
+        android:visibleToInstantApps="true">
+    </activity-alias>  # DIFF-ANCHOR: da85c28e
+    <activity-alias  # DIFF-ANCHOR: b7cc06e9
+        android:name="org.chromium.android_webview.devui.DeveloperModeState"
+        android:enabled="false"
+        android:process=":webview_apk"
+        android:targetActivity="org.chromium.android_webview.devui.MainActivity"
+        android:visibleToInstantApps="true">
+    </activity-alias>  # DIFF-ANCHOR: b7cc06e9
+    <meta-data android:name="$PACKAGE.WebViewLibrary" android:value="libwebviewchromium.so"/>
+    <meta-data android:name="com.google.android.gms.version" android:value="@integer/google_play_services_version"/>
+    <meta-data android:name="org.chromium.content.browser.NUM_PRIVILEGED_SERVICES" android:value="0"/>
+    <meta-data android:name="org.chromium.content.browser.NUM_SANDBOXED_SERVICES" android:value="40"/>
+    <provider  # DIFF-ANCHOR: a5e78e63
+        android:name="org.chromium.android_webview.nonembedded.LicenseContentProvider"
+        android:authorities="$PACKAGE.LicenseContentProvider"
+        android:exported="true"
+        android:grantUriPermissions="true"
+        android:process=":webview_apk">
+    </provider>  # DIFF-ANCHOR: a5e78e63
+    <provider  # DIFF-ANCHOR: bfe37944
+        android:name="org.chromium.android_webview.services.DeveloperModeContentProvider"
+        android:authorities="$PACKAGE.DeveloperModeContentProvider"
+        android:exported="true"
+        android:process=":webview_service"
+        android:visibleToInstantApps="true">
+    </provider>  # DIFF-ANCHOR: bfe37944
+    <provider  # DIFF-ANCHOR: ecfff997
+        android:name="org.chromium.android_webview.services.SafeModeContentProvider"
+        android:authorities="$PACKAGE.SafeModeContentProvider"
+        android:exported="true"
+        android:process=":webview_service"
+        android:visibleToInstantApps="true">
+    </provider>  # DIFF-ANCHOR: ecfff997
+    <provider  # DIFF-ANCHOR: c41df08d
+        android:name="org.chromium.android_webview.services.SafeModeVariationsSeedContentProvider"
+        android:authorities="$PACKAGE.SafeModeVariationsSeedContentProvider"
+        android:exported="true"
+        android:process=":webview_service"
+        android:visibleToInstantApps="true">
+    </provider>  # DIFF-ANCHOR: c41df08d
+    <service  # DIFF-ANCHOR: 1d3bf514
+        android:name="org.chromium.android_webview.js_sandbox.service.JsSandboxService0"
+        android:exported="true"
+        android:externalService="true"
+        android:isolatedProcess="true"
+        android:process=":js_sandboxed_process0"
+        android:visibleToInstantApps="true">
+    </service>  # DIFF-ANCHOR: 1d3bf514
+    <service  # DIFF-ANCHOR: b9ec52c4
+        android:name="org.chromium.android_webview.nonembedded.AwComponentUpdateService"
+        android:exported="false"
+        android:permission="android.permission.BIND_JOB_SERVICE"
+        android:process=":webview_apk">
+    </service>  # DIFF-ANCHOR: b9ec52c4
+    <service  # DIFF-ANCHOR: 3cd6d713
+        android:name="org.chromium.android_webview.services.AwMinidumpUploadJobService"
+        android:exported="true"
+        android:permission="android.permission.BIND_JOB_SERVICE"
+        android:process=":webview_service">
+    </service>  # DIFF-ANCHOR: 3cd6d713
+    <service  # DIFF-ANCHOR: 65cddb26
+        android:name="org.chromium.android_webview.services.AwVariationsSeedFetcher"
+        android:exported="false"
+        android:permission="android.permission.BIND_JOB_SERVICE"
+        android:process=":webview_service">
+    </service>  # DIFF-ANCHOR: 65cddb26
+    <service  # DIFF-ANCHOR: c756cf8d
+        android:name="org.chromium.android_webview.services.ComponentsProviderService"
+        android:exported="true"
+        android:process=":webview_service"
+        android:visibleToInstantApps="true">
+    </service>  # DIFF-ANCHOR: c756cf8d
+    <service  # DIFF-ANCHOR: 5cda9608
+        android:name="org.chromium.android_webview.services.CrashReceiverService"
+        android:exported="true"
+        android:process=":webview_service">
+    </service>  # DIFF-ANCHOR: 5cda9608
+    <service  # DIFF-ANCHOR: adce9ea1
+        android:name="org.chromium.android_webview.services.DeveloperUiService"
+        android:exported="true"
+        android:foregroundServiceType="specialUse"
+        android:process=":webview_service">
+      <property android:name="android.app.PROPERTY_SPECIAL_USE_FGS_SUBTYPE" android:value="debugging"/>
+    </service>  # DIFF-ANCHOR: adce9ea1
+    <service  # DIFF-ANCHOR: eecf2fee
+        android:name="org.chromium.android_webview.services.MetricsBridgeService"
+        android:exported="true"
+        android:process=":webview_service"
+        android:visibleToInstantApps="true">
+    </service>  # DIFF-ANCHOR: eecf2fee
+    <service  # DIFF-ANCHOR: bda8b561
+        android:name="org.chromium.android_webview.services.MetricsUploadService"
+        android:exported="true"
+        android:process=":webview_service"
+        android:visibleToInstantApps="true">
+    </service>  # DIFF-ANCHOR: bda8b561
+    <service  # DIFF-ANCHOR: 47046f1b
+        android:name="org.chromium.android_webview.services.SafeModeService"
+        android:exported="true"
+        android:process=":webview_service">
+    </service>  # DIFF-ANCHOR: 47046f1b
+    <service  # DIFF-ANCHOR: c52936d7
+        android:name="org.chromium.android_webview.services.StartupFeatureMetadataHolder"
+        android:enabled="false"
+        android:exported="true">
+      <meta-data android:name="STARTUP_FEATURE_SET_DATA_DIRECTORY_SUFFIX" android:value="true"/>
+      <meta-data android:name="STARTUP_FEATURE_SET_DIRECTORY_BASE_PATH" android:value="true"/>
+    </service>  # DIFF-ANCHOR: c52936d7
+    <service  # DIFF-ANCHOR: dc926e35
+        android:name="org.chromium.android_webview.services.VariationsSeedServer"
+        android:exported="true"
+        android:process=":webview_service">
+    </service>  # DIFF-ANCHOR: dc926e35
+    <service  # DIFF-ANCHOR: b1e3e8bd
+        android:name="org.chromium.content.app.SandboxedProcessService0"
+        android:exported="true"
+        android:externalService="true"
+        android:isolatedProcess="true"
+        android:process=":sandboxed_process0"
+        android:visibleToInstantApps="true">
+    </service>  # DIFF-ANCHOR: b1e3e8bd
+    <service  # DIFF-ANCHOR: 76d1ccf8
+        android:name="org.chromium.content.app.SandboxedProcessService1"
+        android:exported="true"
+        android:externalService="true"
+        android:isolatedProcess="true"
+        android:process=":sandboxed_process1"
+        android:visibleToInstantApps="true">
+    </service>  # DIFF-ANCHOR: 76d1ccf8
+    <service  # DIFF-ANCHOR: 38b95266
+        android:name="org.chromium.content.app.SandboxedProcessService10"
+        android:exported="true"
+        android:externalService="true"
+        android:isolatedProcess="true"
+        android:process=":sandboxed_process10"
+        android:visibleToInstantApps="true">
+    </service>  # DIFF-ANCHOR: 38b95266
+    <service  # DIFF-ANCHOR: e4a2e4a2
+        android:name="org.chromium.content.app.SandboxedProcessService11"
+        android:exported="true"
+        android:externalService="true"
+        android:isolatedProcess="true"
+        android:process=":sandboxed_process11"
+        android:visibleToInstantApps="true">
+    </service>  # DIFF-ANCHOR: e4a2e4a2
+    <service  # DIFF-ANCHOR: d9b2ffba
+        android:name="org.chromium.content.app.SandboxedProcessService12"
+        android:exported="true"
+        android:externalService="true"
+        android:isolatedProcess="true"
+        android:process=":sandboxed_process12"
+        android:visibleToInstantApps="true">
+    </service>  # DIFF-ANCHOR: d9b2ffba
+    <service  # DIFF-ANCHOR: b41bb17d
+        android:name="org.chromium.content.app.SandboxedProcessService13"
+        android:exported="true"
+        android:externalService="true"
+        android:isolatedProcess="true"
+        android:process=":sandboxed_process13"
+        android:visibleToInstantApps="true">
+    </service>  # DIFF-ANCHOR: b41bb17d
+    <service  # DIFF-ANCHOR: aec0ea21
+        android:name="org.chromium.content.app.SandboxedProcessService14"
+        android:exported="true"
+        android:externalService="true"
+        android:isolatedProcess="true"
+        android:process=":sandboxed_process14"
+        android:visibleToInstantApps="true">
+    </service>  # DIFF-ANCHOR: aec0ea21
+    <service  # DIFF-ANCHOR: cf88a5e5
+        android:name="org.chromium.content.app.SandboxedProcessService15"
+        android:exported="true"
+        android:externalService="true"
+        android:isolatedProcess="true"
+        android:process=":sandboxed_process15"
+        android:visibleToInstantApps="true">
+    </service>  # DIFF-ANCHOR: cf88a5e5
+    <service  # DIFF-ANCHOR: 7d85889d
+        android:name="org.chromium.content.app.SandboxedProcessService16"
+        android:exported="true"
+        android:externalService="true"
+        android:isolatedProcess="true"
+        android:process=":sandboxed_process16"
+        android:visibleToInstantApps="true">
+    </service>  # DIFF-ANCHOR: 7d85889d
+    <service  # DIFF-ANCHOR: dae26ed4
+        android:name="org.chromium.content.app.SandboxedProcessService17"
+        android:exported="true"
+        android:externalService="true"
+        android:isolatedProcess="true"
+        android:process=":sandboxed_process17"
+        android:visibleToInstantApps="true">
+    </service>  # DIFF-ANCHOR: dae26ed4
+    <service  # DIFF-ANCHOR: 2c6cf029
+        android:name="org.chromium.content.app.SandboxedProcessService18"
+        android:exported="true"
+        android:externalService="true"
+        android:isolatedProcess="true"
+        android:process=":sandboxed_process18"
+        android:visibleToInstantApps="true">
+    </service>  # DIFF-ANCHOR: 2c6cf029
+    <service  # DIFF-ANCHOR: 1d2f0988
+        android:name="org.chromium.content.app.SandboxedProcessService19"
+        android:exported="true"
+        android:externalService="true"
+        android:isolatedProcess="true"
+        android:process=":sandboxed_process19"
+        android:visibleToInstantApps="true">
+    </service>  # DIFF-ANCHOR: 1d2f0988
+    <service  # DIFF-ANCHOR: 4a39041b
+        android:name="org.chromium.content.app.SandboxedProcessService2"
+        android:exported="true"
+        android:externalService="true"
+        android:isolatedProcess="true"
+        android:process=":sandboxed_process2"
+        android:visibleToInstantApps="true">
+    </service>  # DIFF-ANCHOR: 4a39041b
+    <service  # DIFF-ANCHOR: 073533bf
+        android:name="org.chromium.content.app.SandboxedProcessService20"
+        android:exported="true"
+        android:externalService="true"
+        android:isolatedProcess="true"
+        android:process=":sandboxed_process20"
+        android:visibleToInstantApps="true">
+    </service>  # DIFF-ANCHOR: 073533bf
+    <service  # DIFF-ANCHOR: d24da41d
+        android:name="org.chromium.content.app.SandboxedProcessService21"
+        android:exported="true"
+        android:externalService="true"
+        android:isolatedProcess="true"
+        android:process=":sandboxed_process21"
+        android:visibleToInstantApps="true">
+    </service>  # DIFF-ANCHOR: d24da41d
+    <service  # DIFF-ANCHOR: 594d8b32
+        android:name="org.chromium.content.app.SandboxedProcessService22"
+        android:exported="true"
+        android:externalService="true"
+        android:isolatedProcess="true"
+        android:process=":sandboxed_process22"
+        android:visibleToInstantApps="true">
+    </service>  # DIFF-ANCHOR: 594d8b32
+    <service  # DIFF-ANCHOR: 5528c0c3
+        android:name="org.chromium.content.app.SandboxedProcessService23"
+        android:exported="true"
+        android:externalService="true"
+        android:isolatedProcess="true"
+        android:process=":sandboxed_process23"
+        android:visibleToInstantApps="true">
+    </service>  # DIFF-ANCHOR: 5528c0c3
+    <service  # DIFF-ANCHOR: b7ab2ba3
+        android:name="org.chromium.content.app.SandboxedProcessService24"
+        android:exported="true"
+        android:externalService="true"
+        android:isolatedProcess="true"
+        android:process=":sandboxed_process24"
+        android:visibleToInstantApps="true">
+    </service>  # DIFF-ANCHOR: b7ab2ba3
+    <service  # DIFF-ANCHOR: cec6cb64
+        android:name="org.chromium.content.app.SandboxedProcessService25"
+        android:exported="true"
+        android:externalService="true"
+        android:isolatedProcess="true"
+        android:process=":sandboxed_process25"
+        android:visibleToInstantApps="true">
+    </service>  # DIFF-ANCHOR: cec6cb64
+    <service  # DIFF-ANCHOR: 5b4a00fe
+        android:name="org.chromium.content.app.SandboxedProcessService26"
+        android:exported="true"
+        android:externalService="true"
+        android:isolatedProcess="true"
+        android:process=":sandboxed_process26"
+        android:visibleToInstantApps="true">
+    </service>  # DIFF-ANCHOR: 5b4a00fe
+    <service  # DIFF-ANCHOR: ad49d203
+        android:name="org.chromium.content.app.SandboxedProcessService27"
+        android:exported="true"
+        android:externalService="true"
+        android:isolatedProcess="true"
+        android:process=":sandboxed_process27"
+        android:visibleToInstantApps="true">
+    </service>  # DIFF-ANCHOR: ad49d203
+    <service  # DIFF-ANCHOR: 573298e9
+        android:name="org.chromium.content.app.SandboxedProcessService28"
+        android:exported="true"
+        android:externalService="true"
+        android:isolatedProcess="true"
+        android:process=":sandboxed_process28"
+        android:visibleToInstantApps="true">
+    </service>  # DIFF-ANCHOR: 573298e9
+    <service  # DIFF-ANCHOR: 79897b32
+        android:name="org.chromium.content.app.SandboxedProcessService29"
+        android:exported="true"
+        android:externalService="true"
+        android:isolatedProcess="true"
+        android:process=":sandboxed_process29"
+        android:visibleToInstantApps="true">
+    </service>  # DIFF-ANCHOR: 79897b32
+    <service  # DIFF-ANCHOR: 84335864
+        android:name="org.chromium.content.app.SandboxedProcessService3"
+        android:exported="true"
+        android:externalService="true"
+        android:isolatedProcess="true"
+        android:process=":sandboxed_process3"
+        android:visibleToInstantApps="true">
+    </service>  # DIFF-ANCHOR: 84335864
+    <service  # DIFF-ANCHOR: c4bd371e
+        android:name="org.chromium.content.app.SandboxedProcessService30"
+        android:exported="true"
+        android:externalService="true"
+        android:isolatedProcess="true"
+        android:process=":sandboxed_process30"
+        android:visibleToInstantApps="true">
+    </service>  # DIFF-ANCHOR: c4bd371e
+    <service  # DIFF-ANCHOR: 394a9fd0
+        android:name="org.chromium.content.app.SandboxedProcessService31"
+        android:exported="true"
+        android:externalService="true"
+        android:isolatedProcess="true"
+        android:process=":sandboxed_process31"
+        android:visibleToInstantApps="true">
+    </service>  # DIFF-ANCHOR: 394a9fd0
+    <service  # DIFF-ANCHOR: b811afb8
+        android:name="org.chromium.content.app.SandboxedProcessService32"
+        android:exported="true"
+        android:externalService="true"
+        android:isolatedProcess="true"
+        android:process=":sandboxed_process32"
+        android:visibleToInstantApps="true">
+    </service>  # DIFF-ANCHOR: b811afb8
+    <service  # DIFF-ANCHOR: 2811ddd3
+        android:name="org.chromium.content.app.SandboxedProcessService33"
+        android:exported="true"
+        android:externalService="true"
+        android:isolatedProcess="true"
+        android:process=":sandboxed_process33"
+        android:visibleToInstantApps="true">
+    </service>  # DIFF-ANCHOR: 2811ddd3
+    <service  # DIFF-ANCHOR: 73ae1688
+        android:name="org.chromium.content.app.SandboxedProcessService34"
+        android:exported="true"
+        android:externalService="true"
+        android:isolatedProcess="true"
+        android:process=":sandboxed_process34"
+        android:visibleToInstantApps="true">
+    </service>  # DIFF-ANCHOR: 73ae1688
+    <service  # DIFF-ANCHOR: c476f324
+        android:name="org.chromium.content.app.SandboxedProcessService35"
+        android:exported="true"
+        android:externalService="true"
+        android:isolatedProcess="true"
+        android:process=":sandboxed_process35"
+        android:visibleToInstantApps="true">
+    </service>  # DIFF-ANCHOR: c476f324
+    <service  # DIFF-ANCHOR: 75d5304b
+        android:name="org.chromium.content.app.SandboxedProcessService36"
+        android:exported="true"
+        android:externalService="true"
+        android:isolatedProcess="true"
+        android:process=":sandboxed_process36"
+        android:visibleToInstantApps="true">
+    </service>  # DIFF-ANCHOR: 75d5304b
+    <service  # DIFF-ANCHOR: dc6d0617
+        android:name="org.chromium.content.app.SandboxedProcessService37"
+        android:exported="true"
+        android:externalService="true"
+        android:isolatedProcess="true"
+        android:process=":sandboxed_process37"
+        android:visibleToInstantApps="true">
+    </service>  # DIFF-ANCHOR: dc6d0617
+    <service  # DIFF-ANCHOR: e31efe49
+        android:name="org.chromium.content.app.SandboxedProcessService38"
+        android:exported="true"
+        android:externalService="true"
+        android:isolatedProcess="true"
+        android:process=":sandboxed_process38"
+        android:visibleToInstantApps="true">
+    </service>  # DIFF-ANCHOR: e31efe49
+    <service  # DIFF-ANCHOR: 5736507e
+        android:name="org.chromium.content.app.SandboxedProcessService39"
+        android:exported="true"
+        android:externalService="true"
+        android:isolatedProcess="true"
+        android:process=":sandboxed_process39"
+        android:visibleToInstantApps="true">
+    </service>  # DIFF-ANCHOR: 5736507e
+    <service  # DIFF-ANCHOR: a161be24
+        android:name="org.chromium.content.app.SandboxedProcessService4"
+        android:exported="true"
+        android:externalService="true"
+        android:isolatedProcess="true"
+        android:process=":sandboxed_process4"
+        android:visibleToInstantApps="true">
+    </service>  # DIFF-ANCHOR: a161be24
+    <service  # DIFF-ANCHOR: 8e591688
+        android:name="org.chromium.content.app.SandboxedProcessService5"
+        android:exported="true"
+        android:externalService="true"
+        android:isolatedProcess="true"
+        android:process=":sandboxed_process5"
+        android:visibleToInstantApps="true">
+    </service>  # DIFF-ANCHOR: 8e591688
+    <service  # DIFF-ANCHOR: 705141d0
+        android:name="org.chromium.content.app.SandboxedProcessService6"
+        android:exported="true"
+        android:externalService="true"
+        android:isolatedProcess="true"
+        android:process=":sandboxed_process6"
+        android:visibleToInstantApps="true">
+    </service>  # DIFF-ANCHOR: 705141d0
+    <service  # DIFF-ANCHOR: 38ed2189
+        android:name="org.chromium.content.app.SandboxedProcessService7"
+        android:exported="true"
+        android:externalService="true"
+        android:isolatedProcess="true"
+        android:process=":sandboxed_process7"
+        android:visibleToInstantApps="true">
+    </service>  # DIFF-ANCHOR: 38ed2189
+    <service  # DIFF-ANCHOR: aa417956
+        android:name="org.chromium.content.app.SandboxedProcessService8"
+        android:exported="true"
+        android:externalService="true"
+        android:isolatedProcess="true"
+        android:process=":sandboxed_process8"
+        android:visibleToInstantApps="true">
+    </service>  # DIFF-ANCHOR: aa417956
+    <service  # DIFF-ANCHOR: e2f3bbbd
+        android:name="org.chromium.content.app.SandboxedProcessService9"
+        android:exported="true"
+        android:externalService="true"
+        android:isolatedProcess="true"
+        android:process=":sandboxed_process9"
+        android:visibleToInstantApps="true">
+    </service>  # DIFF-ANCHOR: e2f3bbbd
+    <uses-library android:name="android.ext.adservices" android:required="false"/>
+  </application>
+</manifest>
diff --git a/android_webview/expectations/system_webview_32_bundle.AndroidManifest.expected b/android_webview/expectations/system_webview_32_bundle.AndroidManifest.expected
new file mode 100644
index 0000000..a06efb05
--- /dev/null
+++ b/android_webview/expectations/system_webview_32_bundle.AndroidManifest.expected
@@ -0,0 +1,498 @@
+<?xml version="1.0" ?>
+<manifest
+    xmlns:android="http://schemas.android.com/apk/res/android"
+    package="com.android.webview"
+    platformBuildVersionCode="34"
+    platformBuildVersionName="14"
+    android:isolatedSplits="true"
+    android:versionCode="OFFSET=0"
+    android:versionName="#.#.#.#">
+  <uses-feature android:name="android.hardware.touchscreen" android:required="false"/>
+  <uses-feature android:name="android.software.leanback" android:required="false"/>
+  <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
+  <uses-permission android:name="android.permission.FOREGROUND_SERVICE"/>
+  <uses-permission android:name="android.permission.FOREGROUND_SERVICE_SPECIAL_USE"/>
+  <uses-permission android:name="android.permission.INTERNET"/>
+  <uses-permission android:name="android.permission.POST_NOTIFICATIONS"/>
+  <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED"/>
+  <uses-sdk android:minSdkVersion="26" android:targetSdkVersion="34"/>
+  <application
+      android:name="org.chromium.android_webview.nonembedded.WebViewApkApplication"
+      android:extractNativeLibs="false"
+      android:icon="@$PACKAGE:drawable/icon_webview"
+      android:label="Android System WebView"
+      android:multiArch="true">
+    <activity  # DIFF-ANCHOR: ea1a94af
+        android:name="com.google.android.gms.common.api.GoogleApiActivity"
+        android:exported="false"
+        android:theme="@android:style/Theme.Translucent.NoTitleBar">
+    </activity>  # DIFF-ANCHOR: ea1a94af
+    <activity  # DIFF-ANCHOR: a4438884
+        android:name="org.chromium.android_webview.devui.MainActivity"
+        android:exported="true"
+        android:icon="@drawable/icon_webview"
+        android:label="WebView DevTools"
+        android:launchMode="singleTask"
+        android:process=":webview_apk"
+        android:taskAffinity="$PACKAGE.org.chromium.android_webview.devui"
+        android:theme="@style/Theme.DevUi.DayNight"
+        android:visibleToInstantApps="true"
+        android:windowSoftInputMode="adjustPan">
+      <intent-filter>  # DIFF-ANCHOR: b80aa336
+        <action android:name="$PACKAGE.SHOW_DEV_UI"/>
+        <category android:name="android.intent.category.DEFAULT"/>
+      </intent-filter>  # DIFF-ANCHOR: b80aa336
+    </activity>  # DIFF-ANCHOR: a4438884
+    <activity  # DIFF-ANCHOR: aeabab17
+        android:name="org.chromium.android_webview.nonembedded.LicenseActivity"
+        android:exported="true"
+        android:label="@string/license_activity_title"
+        android:process=":webview_apk">
+      <intent-filter>  # DIFF-ANCHOR: 23298d3b
+        <action android:name="android.settings.WEBVIEW_LICENSE"/>
+        <category android:name="android.intent.category.DEFAULT"/>
+      </intent-filter>  # DIFF-ANCHOR: 23298d3b
+      <meta-data android:name="com.android.settings.PRIMARY_PROFILE_CONTROLLED" android:value="true"/>
+    </activity>  # DIFF-ANCHOR: aeabab17
+    <activity-alias  # DIFF-ANCHOR: da85c28e
+        android:name="org.chromium.android_webview.SafeModeState"
+        android:enabled="false"
+        android:process=":webview_apk"
+        android:targetActivity="org.chromium.android_webview.devui.MainActivity"
+        android:visibleToInstantApps="true">
+    </activity-alias>  # DIFF-ANCHOR: da85c28e
+    <activity-alias  # DIFF-ANCHOR: b7cc06e9
+        android:name="org.chromium.android_webview.devui.DeveloperModeState"
+        android:enabled="false"
+        android:process=":webview_apk"
+        android:targetActivity="org.chromium.android_webview.devui.MainActivity"
+        android:visibleToInstantApps="true">
+    </activity-alias>  # DIFF-ANCHOR: b7cc06e9
+    <meta-data android:name="$PACKAGE.WebViewLibrary" android:value="libwebviewchromium.so"/>
+    <meta-data android:name="com.google.android.gms.version" android:value="@integer/google_play_services_version"/>
+    <meta-data android:name="org.chromium.content.browser.NUM_PRIVILEGED_SERVICES" android:value="0"/>
+    <meta-data android:name="org.chromium.content.browser.NUM_SANDBOXED_SERVICES" android:value="40"/>
+    <provider  # DIFF-ANCHOR: a5e78e63
+        android:name="org.chromium.android_webview.nonembedded.LicenseContentProvider"
+        android:authorities="$PACKAGE.LicenseContentProvider"
+        android:exported="true"
+        android:grantUriPermissions="true"
+        android:process=":webview_apk">
+    </provider>  # DIFF-ANCHOR: a5e78e63
+    <provider  # DIFF-ANCHOR: bfe37944
+        android:name="org.chromium.android_webview.services.DeveloperModeContentProvider"
+        android:authorities="$PACKAGE.DeveloperModeContentProvider"
+        android:exported="true"
+        android:process=":webview_service"
+        android:visibleToInstantApps="true">
+    </provider>  # DIFF-ANCHOR: bfe37944
+    <provider  # DIFF-ANCHOR: ecfff997
+        android:name="org.chromium.android_webview.services.SafeModeContentProvider"
+        android:authorities="$PACKAGE.SafeModeContentProvider"
+        android:exported="true"
+        android:process=":webview_service"
+        android:visibleToInstantApps="true">
+    </provider>  # DIFF-ANCHOR: ecfff997
+    <provider  # DIFF-ANCHOR: c41df08d
+        android:name="org.chromium.android_webview.services.SafeModeVariationsSeedContentProvider"
+        android:authorities="$PACKAGE.SafeModeVariationsSeedContentProvider"
+        android:exported="true"
+        android:process=":webview_service"
+        android:visibleToInstantApps="true">
+    </provider>  # DIFF-ANCHOR: c41df08d
+    <service  # DIFF-ANCHOR: 1d3bf514
+        android:name="org.chromium.android_webview.js_sandbox.service.JsSandboxService0"
+        android:exported="true"
+        android:externalService="true"
+        android:isolatedProcess="true"
+        android:process=":js_sandboxed_process0"
+        android:visibleToInstantApps="true">
+    </service>  # DIFF-ANCHOR: 1d3bf514
+    <service  # DIFF-ANCHOR: b9ec52c4
+        android:name="org.chromium.android_webview.nonembedded.AwComponentUpdateService"
+        android:exported="false"
+        android:permission="android.permission.BIND_JOB_SERVICE"
+        android:process=":webview_apk">
+    </service>  # DIFF-ANCHOR: b9ec52c4
+    <service  # DIFF-ANCHOR: 3cd6d713
+        android:name="org.chromium.android_webview.services.AwMinidumpUploadJobService"
+        android:exported="true"
+        android:permission="android.permission.BIND_JOB_SERVICE"
+        android:process=":webview_service">
+    </service>  # DIFF-ANCHOR: 3cd6d713
+    <service  # DIFF-ANCHOR: 65cddb26
+        android:name="org.chromium.android_webview.services.AwVariationsSeedFetcher"
+        android:exported="false"
+        android:permission="android.permission.BIND_JOB_SERVICE"
+        android:process=":webview_service">
+    </service>  # DIFF-ANCHOR: 65cddb26
+    <service  # DIFF-ANCHOR: c756cf8d
+        android:name="org.chromium.android_webview.services.ComponentsProviderService"
+        android:exported="true"
+        android:process=":webview_service"
+        android:visibleToInstantApps="true">
+    </service>  # DIFF-ANCHOR: c756cf8d
+    <service  # DIFF-ANCHOR: 5cda9608
+        android:name="org.chromium.android_webview.services.CrashReceiverService"
+        android:exported="true"
+        android:process=":webview_service">
+    </service>  # DIFF-ANCHOR: 5cda9608
+    <service  # DIFF-ANCHOR: adce9ea1
+        android:name="org.chromium.android_webview.services.DeveloperUiService"
+        android:exported="true"
+        android:foregroundServiceType="specialUse"
+        android:process=":webview_service">
+      <property android:name="android.app.PROPERTY_SPECIAL_USE_FGS_SUBTYPE" android:value="debugging"/>
+    </service>  # DIFF-ANCHOR: adce9ea1
+    <service  # DIFF-ANCHOR: eecf2fee
+        android:name="org.chromium.android_webview.services.MetricsBridgeService"
+        android:exported="true"
+        android:process=":webview_service"
+        android:visibleToInstantApps="true">
+    </service>  # DIFF-ANCHOR: eecf2fee
+    <service  # DIFF-ANCHOR: bda8b561
+        android:name="org.chromium.android_webview.services.MetricsUploadService"
+        android:exported="true"
+        android:process=":webview_service"
+        android:visibleToInstantApps="true">
+    </service>  # DIFF-ANCHOR: bda8b561
+    <service  # DIFF-ANCHOR: 47046f1b
+        android:name="org.chromium.android_webview.services.SafeModeService"
+        android:exported="true"
+        android:process=":webview_service">
+    </service>  # DIFF-ANCHOR: 47046f1b
+    <service  # DIFF-ANCHOR: c52936d7
+        android:name="org.chromium.android_webview.services.StartupFeatureMetadataHolder"
+        android:enabled="false"
+        android:exported="true">
+      <meta-data android:name="STARTUP_FEATURE_SET_DATA_DIRECTORY_SUFFIX" android:value="true"/>
+      <meta-data android:name="STARTUP_FEATURE_SET_DIRECTORY_BASE_PATH" android:value="true"/>
+    </service>  # DIFF-ANCHOR: c52936d7
+    <service  # DIFF-ANCHOR: dc926e35
+        android:name="org.chromium.android_webview.services.VariationsSeedServer"
+        android:exported="true"
+        android:process=":webview_service">
+    </service>  # DIFF-ANCHOR: dc926e35
+    <service  # DIFF-ANCHOR: b1e3e8bd
+        android:name="org.chromium.content.app.SandboxedProcessService0"
+        android:exported="true"
+        android:externalService="true"
+        android:isolatedProcess="true"
+        android:process=":sandboxed_process0"
+        android:visibleToInstantApps="true">
+    </service>  # DIFF-ANCHOR: b1e3e8bd
+    <service  # DIFF-ANCHOR: 76d1ccf8
+        android:name="org.chromium.content.app.SandboxedProcessService1"
+        android:exported="true"
+        android:externalService="true"
+        android:isolatedProcess="true"
+        android:process=":sandboxed_process1"
+        android:visibleToInstantApps="true">
+    </service>  # DIFF-ANCHOR: 76d1ccf8
+    <service  # DIFF-ANCHOR: 38b95266
+        android:name="org.chromium.content.app.SandboxedProcessService10"
+        android:exported="true"
+        android:externalService="true"
+        android:isolatedProcess="true"
+        android:process=":sandboxed_process10"
+        android:visibleToInstantApps="true">
+    </service>  # DIFF-ANCHOR: 38b95266
+    <service  # DIFF-ANCHOR: e4a2e4a2
+        android:name="org.chromium.content.app.SandboxedProcessService11"
+        android:exported="true"
+        android:externalService="true"
+        android:isolatedProcess="true"
+        android:process=":sandboxed_process11"
+        android:visibleToInstantApps="true">
+    </service>  # DIFF-ANCHOR: e4a2e4a2
+    <service  # DIFF-ANCHOR: d9b2ffba
+        android:name="org.chromium.content.app.SandboxedProcessService12"
+        android:exported="true"
+        android:externalService="true"
+        android:isolatedProcess="true"
+        android:process=":sandboxed_process12"
+        android:visibleToInstantApps="true">
+    </service>  # DIFF-ANCHOR: d9b2ffba
+    <service  # DIFF-ANCHOR: b41bb17d
+        android:name="org.chromium.content.app.SandboxedProcessService13"
+        android:exported="true"
+        android:externalService="true"
+        android:isolatedProcess="true"
+        android:process=":sandboxed_process13"
+        android:visibleToInstantApps="true">
+    </service>  # DIFF-ANCHOR: b41bb17d
+    <service  # DIFF-ANCHOR: aec0ea21
+        android:name="org.chromium.content.app.SandboxedProcessService14"
+        android:exported="true"
+        android:externalService="true"
+        android:isolatedProcess="true"
+        android:process=":sandboxed_process14"
+        android:visibleToInstantApps="true">
+    </service>  # DIFF-ANCHOR: aec0ea21
+    <service  # DIFF-ANCHOR: cf88a5e5
+        android:name="org.chromium.content.app.SandboxedProcessService15"
+        android:exported="true"
+        android:externalService="true"
+        android:isolatedProcess="true"
+        android:process=":sandboxed_process15"
+        android:visibleToInstantApps="true">
+    </service>  # DIFF-ANCHOR: cf88a5e5
+    <service  # DIFF-ANCHOR: 7d85889d
+        android:name="org.chromium.content.app.SandboxedProcessService16"
+        android:exported="true"
+        android:externalService="true"
+        android:isolatedProcess="true"
+        android:process=":sandboxed_process16"
+        android:visibleToInstantApps="true">
+    </service>  # DIFF-ANCHOR: 7d85889d
+    <service  # DIFF-ANCHOR: dae26ed4
+        android:name="org.chromium.content.app.SandboxedProcessService17"
+        android:exported="true"
+        android:externalService="true"
+        android:isolatedProcess="true"
+        android:process=":sandboxed_process17"
+        android:visibleToInstantApps="true">
+    </service>  # DIFF-ANCHOR: dae26ed4
+    <service  # DIFF-ANCHOR: 2c6cf029
+        android:name="org.chromium.content.app.SandboxedProcessService18"
+        android:exported="true"
+        android:externalService="true"
+        android:isolatedProcess="true"
+        android:process=":sandboxed_process18"
+        android:visibleToInstantApps="true">
+    </service>  # DIFF-ANCHOR: 2c6cf029
+    <service  # DIFF-ANCHOR: 1d2f0988
+        android:name="org.chromium.content.app.SandboxedProcessService19"
+        android:exported="true"
+        android:externalService="true"
+        android:isolatedProcess="true"
+        android:process=":sandboxed_process19"
+        android:visibleToInstantApps="true">
+    </service>  # DIFF-ANCHOR: 1d2f0988
+    <service  # DIFF-ANCHOR: 4a39041b
+        android:name="org.chromium.content.app.SandboxedProcessService2"
+        android:exported="true"
+        android:externalService="true"
+        android:isolatedProcess="true"
+        android:process=":sandboxed_process2"
+        android:visibleToInstantApps="true">
+    </service>  # DIFF-ANCHOR: 4a39041b
+    <service  # DIFF-ANCHOR: 073533bf
+        android:name="org.chromium.content.app.SandboxedProcessService20"
+        android:exported="true"
+        android:externalService="true"
+        android:isolatedProcess="true"
+        android:process=":sandboxed_process20"
+        android:visibleToInstantApps="true">
+    </service>  # DIFF-ANCHOR: 073533bf
+    <service  # DIFF-ANCHOR: d24da41d
+        android:name="org.chromium.content.app.SandboxedProcessService21"
+        android:exported="true"
+        android:externalService="true"
+        android:isolatedProcess="true"
+        android:process=":sandboxed_process21"
+        android:visibleToInstantApps="true">
+    </service>  # DIFF-ANCHOR: d24da41d
+    <service  # DIFF-ANCHOR: 594d8b32
+        android:name="org.chromium.content.app.SandboxedProcessService22"
+        android:exported="true"
+        android:externalService="true"
+        android:isolatedProcess="true"
+        android:process=":sandboxed_process22"
+        android:visibleToInstantApps="true">
+    </service>  # DIFF-ANCHOR: 594d8b32
+    <service  # DIFF-ANCHOR: 5528c0c3
+        android:name="org.chromium.content.app.SandboxedProcessService23"
+        android:exported="true"
+        android:externalService="true"
+        android:isolatedProcess="true"
+        android:process=":sandboxed_process23"
+        android:visibleToInstantApps="true">
+    </service>  # DIFF-ANCHOR: 5528c0c3
+    <service  # DIFF-ANCHOR: b7ab2ba3
+        android:name="org.chromium.content.app.SandboxedProcessService24"
+        android:exported="true"
+        android:externalService="true"
+        android:isolatedProcess="true"
+        android:process=":sandboxed_process24"
+        android:visibleToInstantApps="true">
+    </service>  # DIFF-ANCHOR: b7ab2ba3
+    <service  # DIFF-ANCHOR: cec6cb64
+        android:name="org.chromium.content.app.SandboxedProcessService25"
+        android:exported="true"
+        android:externalService="true"
+        android:isolatedProcess="true"
+        android:process=":sandboxed_process25"
+        android:visibleToInstantApps="true">
+    </service>  # DIFF-ANCHOR: cec6cb64
+    <service  # DIFF-ANCHOR: 5b4a00fe
+        android:name="org.chromium.content.app.SandboxedProcessService26"
+        android:exported="true"
+        android:externalService="true"
+        android:isolatedProcess="true"
+        android:process=":sandboxed_process26"
+        android:visibleToInstantApps="true">
+    </service>  # DIFF-ANCHOR: 5b4a00fe
+    <service  # DIFF-ANCHOR: ad49d203
+        android:name="org.chromium.content.app.SandboxedProcessService27"
+        android:exported="true"
+        android:externalService="true"
+        android:isolatedProcess="true"
+        android:process=":sandboxed_process27"
+        android:visibleToInstantApps="true">
+    </service>  # DIFF-ANCHOR: ad49d203
+    <service  # DIFF-ANCHOR: 573298e9
+        android:name="org.chromium.content.app.SandboxedProcessService28"
+        android:exported="true"
+        android:externalService="true"
+        android:isolatedProcess="true"
+        android:process=":sandboxed_process28"
+        android:visibleToInstantApps="true">
+    </service>  # DIFF-ANCHOR: 573298e9
+    <service  # DIFF-ANCHOR: 79897b32
+        android:name="org.chromium.content.app.SandboxedProcessService29"
+        android:exported="true"
+        android:externalService="true"
+        android:isolatedProcess="true"
+        android:process=":sandboxed_process29"
+        android:visibleToInstantApps="true">
+    </service>  # DIFF-ANCHOR: 79897b32
+    <service  # DIFF-ANCHOR: 84335864
+        android:name="org.chromium.content.app.SandboxedProcessService3"
+        android:exported="true"
+        android:externalService="true"
+        android:isolatedProcess="true"
+        android:process=":sandboxed_process3"
+        android:visibleToInstantApps="true">
+    </service>  # DIFF-ANCHOR: 84335864
+    <service  # DIFF-ANCHOR: c4bd371e
+        android:name="org.chromium.content.app.SandboxedProcessService30"
+        android:exported="true"
+        android:externalService="true"
+        android:isolatedProcess="true"
+        android:process=":sandboxed_process30"
+        android:visibleToInstantApps="true">
+    </service>  # DIFF-ANCHOR: c4bd371e
+    <service  # DIFF-ANCHOR: 394a9fd0
+        android:name="org.chromium.content.app.SandboxedProcessService31"
+        android:exported="true"
+        android:externalService="true"
+        android:isolatedProcess="true"
+        android:process=":sandboxed_process31"
+        android:visibleToInstantApps="true">
+    </service>  # DIFF-ANCHOR: 394a9fd0
+    <service  # DIFF-ANCHOR: b811afb8
+        android:name="org.chromium.content.app.SandboxedProcessService32"
+        android:exported="true"
+        android:externalService="true"
+        android:isolatedProcess="true"
+        android:process=":sandboxed_process32"
+        android:visibleToInstantApps="true">
+    </service>  # DIFF-ANCHOR: b811afb8
+    <service  # DIFF-ANCHOR: 2811ddd3
+        android:name="org.chromium.content.app.SandboxedProcessService33"
+        android:exported="true"
+        android:externalService="true"
+        android:isolatedProcess="true"
+        android:process=":sandboxed_process33"
+        android:visibleToInstantApps="true">
+    </service>  # DIFF-ANCHOR: 2811ddd3
+    <service  # DIFF-ANCHOR: 73ae1688
+        android:name="org.chromium.content.app.SandboxedProcessService34"
+        android:exported="true"
+        android:externalService="true"
+        android:isolatedProcess="true"
+        android:process=":sandboxed_process34"
+        android:visibleToInstantApps="true">
+    </service>  # DIFF-ANCHOR: 73ae1688
+    <service  # DIFF-ANCHOR: c476f324
+        android:name="org.chromium.content.app.SandboxedProcessService35"
+        android:exported="true"
+        android:externalService="true"
+        android:isolatedProcess="true"
+        android:process=":sandboxed_process35"
+        android:visibleToInstantApps="true">
+    </service>  # DIFF-ANCHOR: c476f324
+    <service  # DIFF-ANCHOR: 75d5304b
+        android:name="org.chromium.content.app.SandboxedProcessService36"
+        android:exported="true"
+        android:externalService="true"
+        android:isolatedProcess="true"
+        android:process=":sandboxed_process36"
+        android:visibleToInstantApps="true">
+    </service>  # DIFF-ANCHOR: 75d5304b
+    <service  # DIFF-ANCHOR: dc6d0617
+        android:name="org.chromium.content.app.SandboxedProcessService37"
+        android:exported="true"
+        android:externalService="true"
+        android:isolatedProcess="true"
+        android:process=":sandboxed_process37"
+        android:visibleToInstantApps="true">
+    </service>  # DIFF-ANCHOR: dc6d0617
+    <service  # DIFF-ANCHOR: e31efe49
+        android:name="org.chromium.content.app.SandboxedProcessService38"
+        android:exported="true"
+        android:externalService="true"
+        android:isolatedProcess="true"
+        android:process=":sandboxed_process38"
+        android:visibleToInstantApps="true">
+    </service>  # DIFF-ANCHOR: e31efe49
+    <service  # DIFF-ANCHOR: 5736507e
+        android:name="org.chromium.content.app.SandboxedProcessService39"
+        android:exported="true"
+        android:externalService="true"
+        android:isolatedProcess="true"
+        android:process=":sandboxed_process39"
+        android:visibleToInstantApps="true">
+    </service>  # DIFF-ANCHOR: 5736507e
+    <service  # DIFF-ANCHOR: a161be24
+        android:name="org.chromium.content.app.SandboxedProcessService4"
+        android:exported="true"
+        android:externalService="true"
+        android:isolatedProcess="true"
+        android:process=":sandboxed_process4"
+        android:visibleToInstantApps="true">
+    </service>  # DIFF-ANCHOR: a161be24
+    <service  # DIFF-ANCHOR: 8e591688
+        android:name="org.chromium.content.app.SandboxedProcessService5"
+        android:exported="true"
+        android:externalService="true"
+        android:isolatedProcess="true"
+        android:process=":sandboxed_process5"
+        android:visibleToInstantApps="true">
+    </service>  # DIFF-ANCHOR: 8e591688
+    <service  # DIFF-ANCHOR: 705141d0
+        android:name="org.chromium.content.app.SandboxedProcessService6"
+        android:exported="true"
+        android:externalService="true"
+        android:isolatedProcess="true"
+        android:process=":sandboxed_process6"
+        android:visibleToInstantApps="true">
+    </service>  # DIFF-ANCHOR: 705141d0
+    <service  # DIFF-ANCHOR: 38ed2189
+        android:name="org.chromium.content.app.SandboxedProcessService7"
+        android:exported="true"
+        android:externalService="true"
+        android:isolatedProcess="true"
+        android:process=":sandboxed_process7"
+        android:visibleToInstantApps="true">
+    </service>  # DIFF-ANCHOR: 38ed2189
+    <service  # DIFF-ANCHOR: aa417956
+        android:name="org.chromium.content.app.SandboxedProcessService8"
+        android:exported="true"
+        android:externalService="true"
+        android:isolatedProcess="true"
+        android:process=":sandboxed_process8"
+        android:visibleToInstantApps="true">
+    </service>  # DIFF-ANCHOR: aa417956
+    <service  # DIFF-ANCHOR: e2f3bbbd
+        android:name="org.chromium.content.app.SandboxedProcessService9"
+        android:exported="true"
+        android:externalService="true"
+        android:isolatedProcess="true"
+        android:process=":sandboxed_process9"
+        android:visibleToInstantApps="true">
+    </service>  # DIFF-ANCHOR: e2f3bbbd
+    <uses-library android:name="android.ext.adservices" android:required="false"/>
+  </application>
+</manifest>
diff --git a/android_webview/expectations/system_webview_64_bundle.AndroidManifest.expected b/android_webview/expectations/system_webview_64_bundle.AndroidManifest.expected
new file mode 100644
index 0000000..0df834f
--- /dev/null
+++ b/android_webview/expectations/system_webview_64_bundle.AndroidManifest.expected
@@ -0,0 +1,498 @@
+<?xml version="1.0" ?>
+<manifest
+    xmlns:android="http://schemas.android.com/apk/res/android"
+    package="com.android.webview"
+    platformBuildVersionCode="34"
+    platformBuildVersionName="14"
+    android:isolatedSplits="true"
+    android:versionCode="OFFSET=4"
+    android:versionName="#.#.#.#">
+  <uses-feature android:name="android.hardware.touchscreen" android:required="false"/>
+  <uses-feature android:name="android.software.leanback" android:required="false"/>
+  <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
+  <uses-permission android:name="android.permission.FOREGROUND_SERVICE"/>
+  <uses-permission android:name="android.permission.FOREGROUND_SERVICE_SPECIAL_USE"/>
+  <uses-permission android:name="android.permission.INTERNET"/>
+  <uses-permission android:name="android.permission.POST_NOTIFICATIONS"/>
+  <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED"/>
+  <uses-sdk android:minSdkVersion="26" android:targetSdkVersion="34"/>
+  <application
+      android:name="org.chromium.android_webview.nonembedded.WebViewApkApplication"
+      android:extractNativeLibs="false"
+      android:icon="@$PACKAGE:drawable/icon_webview"
+      android:label="Android System WebView"
+      android:multiArch="true">
+    <activity  # DIFF-ANCHOR: ea1a94af
+        android:name="com.google.android.gms.common.api.GoogleApiActivity"
+        android:exported="false"
+        android:theme="@android:style/Theme.Translucent.NoTitleBar">
+    </activity>  # DIFF-ANCHOR: ea1a94af
+    <activity  # DIFF-ANCHOR: a4438884
+        android:name="org.chromium.android_webview.devui.MainActivity"
+        android:exported="true"
+        android:icon="@drawable/icon_webview"
+        android:label="WebView DevTools"
+        android:launchMode="singleTask"
+        android:process=":webview_apk"
+        android:taskAffinity="$PACKAGE.org.chromium.android_webview.devui"
+        android:theme="@style/Theme.DevUi.DayNight"
+        android:visibleToInstantApps="true"
+        android:windowSoftInputMode="adjustPan">
+      <intent-filter>  # DIFF-ANCHOR: b80aa336
+        <action android:name="$PACKAGE.SHOW_DEV_UI"/>
+        <category android:name="android.intent.category.DEFAULT"/>
+      </intent-filter>  # DIFF-ANCHOR: b80aa336
+    </activity>  # DIFF-ANCHOR: a4438884
+    <activity  # DIFF-ANCHOR: aeabab17
+        android:name="org.chromium.android_webview.nonembedded.LicenseActivity"
+        android:exported="true"
+        android:label="@string/license_activity_title"
+        android:process=":webview_apk">
+      <intent-filter>  # DIFF-ANCHOR: 23298d3b
+        <action android:name="android.settings.WEBVIEW_LICENSE"/>
+        <category android:name="android.intent.category.DEFAULT"/>
+      </intent-filter>  # DIFF-ANCHOR: 23298d3b
+      <meta-data android:name="com.android.settings.PRIMARY_PROFILE_CONTROLLED" android:value="true"/>
+    </activity>  # DIFF-ANCHOR: aeabab17
+    <activity-alias  # DIFF-ANCHOR: da85c28e
+        android:name="org.chromium.android_webview.SafeModeState"
+        android:enabled="false"
+        android:process=":webview_apk"
+        android:targetActivity="org.chromium.android_webview.devui.MainActivity"
+        android:visibleToInstantApps="true">
+    </activity-alias>  # DIFF-ANCHOR: da85c28e
+    <activity-alias  # DIFF-ANCHOR: b7cc06e9
+        android:name="org.chromium.android_webview.devui.DeveloperModeState"
+        android:enabled="false"
+        android:process=":webview_apk"
+        android:targetActivity="org.chromium.android_webview.devui.MainActivity"
+        android:visibleToInstantApps="true">
+    </activity-alias>  # DIFF-ANCHOR: b7cc06e9
+    <meta-data android:name="$PACKAGE.WebViewLibrary" android:value="libwebviewchromium.so"/>
+    <meta-data android:name="com.google.android.gms.version" android:value="@integer/google_play_services_version"/>
+    <meta-data android:name="org.chromium.content.browser.NUM_PRIVILEGED_SERVICES" android:value="0"/>
+    <meta-data android:name="org.chromium.content.browser.NUM_SANDBOXED_SERVICES" android:value="40"/>
+    <provider  # DIFF-ANCHOR: a5e78e63
+        android:name="org.chromium.android_webview.nonembedded.LicenseContentProvider"
+        android:authorities="$PACKAGE.LicenseContentProvider"
+        android:exported="true"
+        android:grantUriPermissions="true"
+        android:process=":webview_apk">
+    </provider>  # DIFF-ANCHOR: a5e78e63
+    <provider  # DIFF-ANCHOR: bfe37944
+        android:name="org.chromium.android_webview.services.DeveloperModeContentProvider"
+        android:authorities="$PACKAGE.DeveloperModeContentProvider"
+        android:exported="true"
+        android:process=":webview_service"
+        android:visibleToInstantApps="true">
+    </provider>  # DIFF-ANCHOR: bfe37944
+    <provider  # DIFF-ANCHOR: ecfff997
+        android:name="org.chromium.android_webview.services.SafeModeContentProvider"
+        android:authorities="$PACKAGE.SafeModeContentProvider"
+        android:exported="true"
+        android:process=":webview_service"
+        android:visibleToInstantApps="true">
+    </provider>  # DIFF-ANCHOR: ecfff997
+    <provider  # DIFF-ANCHOR: c41df08d
+        android:name="org.chromium.android_webview.services.SafeModeVariationsSeedContentProvider"
+        android:authorities="$PACKAGE.SafeModeVariationsSeedContentProvider"
+        android:exported="true"
+        android:process=":webview_service"
+        android:visibleToInstantApps="true">
+    </provider>  # DIFF-ANCHOR: c41df08d
+    <service  # DIFF-ANCHOR: 1d3bf514
+        android:name="org.chromium.android_webview.js_sandbox.service.JsSandboxService0"
+        android:exported="true"
+        android:externalService="true"
+        android:isolatedProcess="true"
+        android:process=":js_sandboxed_process0"
+        android:visibleToInstantApps="true">
+    </service>  # DIFF-ANCHOR: 1d3bf514
+    <service  # DIFF-ANCHOR: b9ec52c4
+        android:name="org.chromium.android_webview.nonembedded.AwComponentUpdateService"
+        android:exported="false"
+        android:permission="android.permission.BIND_JOB_SERVICE"
+        android:process=":webview_apk">
+    </service>  # DIFF-ANCHOR: b9ec52c4
+    <service  # DIFF-ANCHOR: 3cd6d713
+        android:name="org.chromium.android_webview.services.AwMinidumpUploadJobService"
+        android:exported="true"
+        android:permission="android.permission.BIND_JOB_SERVICE"
+        android:process=":webview_service">
+    </service>  # DIFF-ANCHOR: 3cd6d713
+    <service  # DIFF-ANCHOR: 65cddb26
+        android:name="org.chromium.android_webview.services.AwVariationsSeedFetcher"
+        android:exported="false"
+        android:permission="android.permission.BIND_JOB_SERVICE"
+        android:process=":webview_service">
+    </service>  # DIFF-ANCHOR: 65cddb26
+    <service  # DIFF-ANCHOR: c756cf8d
+        android:name="org.chromium.android_webview.services.ComponentsProviderService"
+        android:exported="true"
+        android:process=":webview_service"
+        android:visibleToInstantApps="true">
+    </service>  # DIFF-ANCHOR: c756cf8d
+    <service  # DIFF-ANCHOR: 5cda9608
+        android:name="org.chromium.android_webview.services.CrashReceiverService"
+        android:exported="true"
+        android:process=":webview_service">
+    </service>  # DIFF-ANCHOR: 5cda9608
+    <service  # DIFF-ANCHOR: adce9ea1
+        android:name="org.chromium.android_webview.services.DeveloperUiService"
+        android:exported="true"
+        android:foregroundServiceType="specialUse"
+        android:process=":webview_service">
+      <property android:name="android.app.PROPERTY_SPECIAL_USE_FGS_SUBTYPE" android:value="debugging"/>
+    </service>  # DIFF-ANCHOR: adce9ea1
+    <service  # DIFF-ANCHOR: eecf2fee
+        android:name="org.chromium.android_webview.services.MetricsBridgeService"
+        android:exported="true"
+        android:process=":webview_service"
+        android:visibleToInstantApps="true">
+    </service>  # DIFF-ANCHOR: eecf2fee
+    <service  # DIFF-ANCHOR: bda8b561
+        android:name="org.chromium.android_webview.services.MetricsUploadService"
+        android:exported="true"
+        android:process=":webview_service"
+        android:visibleToInstantApps="true">
+    </service>  # DIFF-ANCHOR: bda8b561
+    <service  # DIFF-ANCHOR: 47046f1b
+        android:name="org.chromium.android_webview.services.SafeModeService"
+        android:exported="true"
+        android:process=":webview_service">
+    </service>  # DIFF-ANCHOR: 47046f1b
+    <service  # DIFF-ANCHOR: c52936d7
+        android:name="org.chromium.android_webview.services.StartupFeatureMetadataHolder"
+        android:enabled="false"
+        android:exported="true">
+      <meta-data android:name="STARTUP_FEATURE_SET_DATA_DIRECTORY_SUFFIX" android:value="true"/>
+      <meta-data android:name="STARTUP_FEATURE_SET_DIRECTORY_BASE_PATH" android:value="true"/>
+    </service>  # DIFF-ANCHOR: c52936d7
+    <service  # DIFF-ANCHOR: dc926e35
+        android:name="org.chromium.android_webview.services.VariationsSeedServer"
+        android:exported="true"
+        android:process=":webview_service">
+    </service>  # DIFF-ANCHOR: dc926e35
+    <service  # DIFF-ANCHOR: b1e3e8bd
+        android:name="org.chromium.content.app.SandboxedProcessService0"
+        android:exported="true"
+        android:externalService="true"
+        android:isolatedProcess="true"
+        android:process=":sandboxed_process0"
+        android:visibleToInstantApps="true">
+    </service>  # DIFF-ANCHOR: b1e3e8bd
+    <service  # DIFF-ANCHOR: 76d1ccf8
+        android:name="org.chromium.content.app.SandboxedProcessService1"
+        android:exported="true"
+        android:externalService="true"
+        android:isolatedProcess="true"
+        android:process=":sandboxed_process1"
+        android:visibleToInstantApps="true">
+    </service>  # DIFF-ANCHOR: 76d1ccf8
+    <service  # DIFF-ANCHOR: 38b95266
+        android:name="org.chromium.content.app.SandboxedProcessService10"
+        android:exported="true"
+        android:externalService="true"
+        android:isolatedProcess="true"
+        android:process=":sandboxed_process10"
+        android:visibleToInstantApps="true">
+    </service>  # DIFF-ANCHOR: 38b95266
+    <service  # DIFF-ANCHOR: e4a2e4a2
+        android:name="org.chromium.content.app.SandboxedProcessService11"
+        android:exported="true"
+        android:externalService="true"
+        android:isolatedProcess="true"
+        android:process=":sandboxed_process11"
+        android:visibleToInstantApps="true">
+    </service>  # DIFF-ANCHOR: e4a2e4a2
+    <service  # DIFF-ANCHOR: d9b2ffba
+        android:name="org.chromium.content.app.SandboxedProcessService12"
+        android:exported="true"
+        android:externalService="true"
+        android:isolatedProcess="true"
+        android:process=":sandboxed_process12"
+        android:visibleToInstantApps="true">
+    </service>  # DIFF-ANCHOR: d9b2ffba
+    <service  # DIFF-ANCHOR: b41bb17d
+        android:name="org.chromium.content.app.SandboxedProcessService13"
+        android:exported="true"
+        android:externalService="true"
+        android:isolatedProcess="true"
+        android:process=":sandboxed_process13"
+        android:visibleToInstantApps="true">
+    </service>  # DIFF-ANCHOR: b41bb17d
+    <service  # DIFF-ANCHOR: aec0ea21
+        android:name="org.chromium.content.app.SandboxedProcessService14"
+        android:exported="true"
+        android:externalService="true"
+        android:isolatedProcess="true"
+        android:process=":sandboxed_process14"
+        android:visibleToInstantApps="true">
+    </service>  # DIFF-ANCHOR: aec0ea21
+    <service  # DIFF-ANCHOR: cf88a5e5
+        android:name="org.chromium.content.app.SandboxedProcessService15"
+        android:exported="true"
+        android:externalService="true"
+        android:isolatedProcess="true"
+        android:process=":sandboxed_process15"
+        android:visibleToInstantApps="true">
+    </service>  # DIFF-ANCHOR: cf88a5e5
+    <service  # DIFF-ANCHOR: 7d85889d
+        android:name="org.chromium.content.app.SandboxedProcessService16"
+        android:exported="true"
+        android:externalService="true"
+        android:isolatedProcess="true"
+        android:process=":sandboxed_process16"
+        android:visibleToInstantApps="true">
+    </service>  # DIFF-ANCHOR: 7d85889d
+    <service  # DIFF-ANCHOR: dae26ed4
+        android:name="org.chromium.content.app.SandboxedProcessService17"
+        android:exported="true"
+        android:externalService="true"
+        android:isolatedProcess="true"
+        android:process=":sandboxed_process17"
+        android:visibleToInstantApps="true">
+    </service>  # DIFF-ANCHOR: dae26ed4
+    <service  # DIFF-ANCHOR: 2c6cf029
+        android:name="org.chromium.content.app.SandboxedProcessService18"
+        android:exported="true"
+        android:externalService="true"
+        android:isolatedProcess="true"
+        android:process=":sandboxed_process18"
+        android:visibleToInstantApps="true">
+    </service>  # DIFF-ANCHOR: 2c6cf029
+    <service  # DIFF-ANCHOR: 1d2f0988
+        android:name="org.chromium.content.app.SandboxedProcessService19"
+        android:exported="true"
+        android:externalService="true"
+        android:isolatedProcess="true"
+        android:process=":sandboxed_process19"
+        android:visibleToInstantApps="true">
+    </service>  # DIFF-ANCHOR: 1d2f0988
+    <service  # DIFF-ANCHOR: 4a39041b
+        android:name="org.chromium.content.app.SandboxedProcessService2"
+        android:exported="true"
+        android:externalService="true"
+        android:isolatedProcess="true"
+        android:process=":sandboxed_process2"
+        android:visibleToInstantApps="true">
+    </service>  # DIFF-ANCHOR: 4a39041b
+    <service  # DIFF-ANCHOR: 073533bf
+        android:name="org.chromium.content.app.SandboxedProcessService20"
+        android:exported="true"
+        android:externalService="true"
+        android:isolatedProcess="true"
+        android:process=":sandboxed_process20"
+        android:visibleToInstantApps="true">
+    </service>  # DIFF-ANCHOR: 073533bf
+    <service  # DIFF-ANCHOR: d24da41d
+        android:name="org.chromium.content.app.SandboxedProcessService21"
+        android:exported="true"
+        android:externalService="true"
+        android:isolatedProcess="true"
+        android:process=":sandboxed_process21"
+        android:visibleToInstantApps="true">
+    </service>  # DIFF-ANCHOR: d24da41d
+    <service  # DIFF-ANCHOR: 594d8b32
+        android:name="org.chromium.content.app.SandboxedProcessService22"
+        android:exported="true"
+        android:externalService="true"
+        android:isolatedProcess="true"
+        android:process=":sandboxed_process22"
+        android:visibleToInstantApps="true">
+    </service>  # DIFF-ANCHOR: 594d8b32
+    <service  # DIFF-ANCHOR: 5528c0c3
+        android:name="org.chromium.content.app.SandboxedProcessService23"
+        android:exported="true"
+        android:externalService="true"
+        android:isolatedProcess="true"
+        android:process=":sandboxed_process23"
+        android:visibleToInstantApps="true">
+    </service>  # DIFF-ANCHOR: 5528c0c3
+    <service  # DIFF-ANCHOR: b7ab2ba3
+        android:name="org.chromium.content.app.SandboxedProcessService24"
+        android:exported="true"
+        android:externalService="true"
+        android:isolatedProcess="true"
+        android:process=":sandboxed_process24"
+        android:visibleToInstantApps="true">
+    </service>  # DIFF-ANCHOR: b7ab2ba3
+    <service  # DIFF-ANCHOR: cec6cb64
+        android:name="org.chromium.content.app.SandboxedProcessService25"
+        android:exported="true"
+        android:externalService="true"
+        android:isolatedProcess="true"
+        android:process=":sandboxed_process25"
+        android:visibleToInstantApps="true">
+    </service>  # DIFF-ANCHOR: cec6cb64
+    <service  # DIFF-ANCHOR: 5b4a00fe
+        android:name="org.chromium.content.app.SandboxedProcessService26"
+        android:exported="true"
+        android:externalService="true"
+        android:isolatedProcess="true"
+        android:process=":sandboxed_process26"
+        android:visibleToInstantApps="true">
+    </service>  # DIFF-ANCHOR: 5b4a00fe
+    <service  # DIFF-ANCHOR: ad49d203
+        android:name="org.chromium.content.app.SandboxedProcessService27"
+        android:exported="true"
+        android:externalService="true"
+        android:isolatedProcess="true"
+        android:process=":sandboxed_process27"
+        android:visibleToInstantApps="true">
+    </service>  # DIFF-ANCHOR: ad49d203
+    <service  # DIFF-ANCHOR: 573298e9
+        android:name="org.chromium.content.app.SandboxedProcessService28"
+        android:exported="true"
+        android:externalService="true"
+        android:isolatedProcess="true"
+        android:process=":sandboxed_process28"
+        android:visibleToInstantApps="true">
+    </service>  # DIFF-ANCHOR: 573298e9
+    <service  # DIFF-ANCHOR: 79897b32
+        android:name="org.chromium.content.app.SandboxedProcessService29"
+        android:exported="true"
+        android:externalService="true"
+        android:isolatedProcess="true"
+        android:process=":sandboxed_process29"
+        android:visibleToInstantApps="true">
+    </service>  # DIFF-ANCHOR: 79897b32
+    <service  # DIFF-ANCHOR: 84335864
+        android:name="org.chromium.content.app.SandboxedProcessService3"
+        android:exported="true"
+        android:externalService="true"
+        android:isolatedProcess="true"
+        android:process=":sandboxed_process3"
+        android:visibleToInstantApps="true">
+    </service>  # DIFF-ANCHOR: 84335864
+    <service  # DIFF-ANCHOR: c4bd371e
+        android:name="org.chromium.content.app.SandboxedProcessService30"
+        android:exported="true"
+        android:externalService="true"
+        android:isolatedProcess="true"
+        android:process=":sandboxed_process30"
+        android:visibleToInstantApps="true">
+    </service>  # DIFF-ANCHOR: c4bd371e
+    <service  # DIFF-ANCHOR: 394a9fd0
+        android:name="org.chromium.content.app.SandboxedProcessService31"
+        android:exported="true"
+        android:externalService="true"
+        android:isolatedProcess="true"
+        android:process=":sandboxed_process31"
+        android:visibleToInstantApps="true">
+    </service>  # DIFF-ANCHOR: 394a9fd0
+    <service  # DIFF-ANCHOR: b811afb8
+        android:name="org.chromium.content.app.SandboxedProcessService32"
+        android:exported="true"
+        android:externalService="true"
+        android:isolatedProcess="true"
+        android:process=":sandboxed_process32"
+        android:visibleToInstantApps="true">
+    </service>  # DIFF-ANCHOR: b811afb8
+    <service  # DIFF-ANCHOR: 2811ddd3
+        android:name="org.chromium.content.app.SandboxedProcessService33"
+        android:exported="true"
+        android:externalService="true"
+        android:isolatedProcess="true"
+        android:process=":sandboxed_process33"
+        android:visibleToInstantApps="true">
+    </service>  # DIFF-ANCHOR: 2811ddd3
+    <service  # DIFF-ANCHOR: 73ae1688
+        android:name="org.chromium.content.app.SandboxedProcessService34"
+        android:exported="true"
+        android:externalService="true"
+        android:isolatedProcess="true"
+        android:process=":sandboxed_process34"
+        android:visibleToInstantApps="true">
+    </service>  # DIFF-ANCHOR: 73ae1688
+    <service  # DIFF-ANCHOR: c476f324
+        android:name="org.chromium.content.app.SandboxedProcessService35"
+        android:exported="true"
+        android:externalService="true"
+        android:isolatedProcess="true"
+        android:process=":sandboxed_process35"
+        android:visibleToInstantApps="true">
+    </service>  # DIFF-ANCHOR: c476f324
+    <service  # DIFF-ANCHOR: 75d5304b
+        android:name="org.chromium.content.app.SandboxedProcessService36"
+        android:exported="true"
+        android:externalService="true"
+        android:isolatedProcess="true"
+        android:process=":sandboxed_process36"
+        android:visibleToInstantApps="true">
+    </service>  # DIFF-ANCHOR: 75d5304b
+    <service  # DIFF-ANCHOR: dc6d0617
+        android:name="org.chromium.content.app.SandboxedProcessService37"
+        android:exported="true"
+        android:externalService="true"
+        android:isolatedProcess="true"
+        android:process=":sandboxed_process37"
+        android:visibleToInstantApps="true">
+    </service>  # DIFF-ANCHOR: dc6d0617
+    <service  # DIFF-ANCHOR: e31efe49
+        android:name="org.chromium.content.app.SandboxedProcessService38"
+        android:exported="true"
+        android:externalService="true"
+        android:isolatedProcess="true"
+        android:process=":sandboxed_process38"
+        android:visibleToInstantApps="true">
+    </service>  # DIFF-ANCHOR: e31efe49
+    <service  # DIFF-ANCHOR: 5736507e
+        android:name="org.chromium.content.app.SandboxedProcessService39"
+        android:exported="true"
+        android:externalService="true"
+        android:isolatedProcess="true"
+        android:process=":sandboxed_process39"
+        android:visibleToInstantApps="true">
+    </service>  # DIFF-ANCHOR: 5736507e
+    <service  # DIFF-ANCHOR: a161be24
+        android:name="org.chromium.content.app.SandboxedProcessService4"
+        android:exported="true"
+        android:externalService="true"
+        android:isolatedProcess="true"
+        android:process=":sandboxed_process4"
+        android:visibleToInstantApps="true">
+    </service>  # DIFF-ANCHOR: a161be24
+    <service  # DIFF-ANCHOR: 8e591688
+        android:name="org.chromium.content.app.SandboxedProcessService5"
+        android:exported="true"
+        android:externalService="true"
+        android:isolatedProcess="true"
+        android:process=":sandboxed_process5"
+        android:visibleToInstantApps="true">
+    </service>  # DIFF-ANCHOR: 8e591688
+    <service  # DIFF-ANCHOR: 705141d0
+        android:name="org.chromium.content.app.SandboxedProcessService6"
+        android:exported="true"
+        android:externalService="true"
+        android:isolatedProcess="true"
+        android:process=":sandboxed_process6"
+        android:visibleToInstantApps="true">
+    </service>  # DIFF-ANCHOR: 705141d0
+    <service  # DIFF-ANCHOR: 38ed2189
+        android:name="org.chromium.content.app.SandboxedProcessService7"
+        android:exported="true"
+        android:externalService="true"
+        android:isolatedProcess="true"
+        android:process=":sandboxed_process7"
+        android:visibleToInstantApps="true">
+    </service>  # DIFF-ANCHOR: 38ed2189
+    <service  # DIFF-ANCHOR: aa417956
+        android:name="org.chromium.content.app.SandboxedProcessService8"
+        android:exported="true"
+        android:externalService="true"
+        android:isolatedProcess="true"
+        android:process=":sandboxed_process8"
+        android:visibleToInstantApps="true">
+    </service>  # DIFF-ANCHOR: aa417956
+    <service  # DIFF-ANCHOR: e2f3bbbd
+        android:name="org.chromium.content.app.SandboxedProcessService9"
+        android:exported="true"
+        android:externalService="true"
+        android:isolatedProcess="true"
+        android:process=":sandboxed_process9"
+        android:visibleToInstantApps="true">
+    </service>  # DIFF-ANCHOR: e2f3bbbd
+    <uses-library android:name="android.ext.adservices" android:required="false"/>
+  </application>
+</manifest>
diff --git a/android_webview/expectations/trichrome_webview_32_64_bundle.AndroidManifest.expected b/android_webview/expectations/trichrome_webview_32_64_bundle.AndroidManifest.expected
new file mode 100644
index 0000000..d14d137
--- /dev/null
+++ b/android_webview/expectations/trichrome_webview_32_64_bundle.AndroidManifest.expected
@@ -0,0 +1,500 @@
+<?xml version="1.0" ?>
+<manifest
+    xmlns:android="http://schemas.android.com/apk/res/android"
+    package="com.android.webview"
+    platformBuildVersionCode="34"
+    platformBuildVersionName="14"
+    android:isolatedSplits="true"
+    android:versionCode="OFFSET=31"
+    android:versionName="#.#.#.#">
+  <uses-feature android:name="android.hardware.touchscreen" android:required="false"/>
+  <uses-feature android:name="android.software.leanback" android:required="false"/>
+  <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
+  <uses-permission android:name="android.permission.FOREGROUND_SERVICE"/>
+  <uses-permission android:name="android.permission.FOREGROUND_SERVICE_SPECIAL_USE"/>
+  <uses-permission android:name="android.permission.INTERNET"/>
+  <uses-permission android:name="android.permission.POST_NOTIFICATIONS"/>
+  <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED"/>
+  <uses-sdk android:minSdkVersion="29" android:targetSdkVersion="34"/>
+  <application
+      android:name="org.chromium.android_webview.nonembedded.WebViewApkApplication"
+      android:extractNativeLibs="false"
+      android:icon="@$PACKAGE:drawable/icon_webview"
+      android:label="Android System WebView"
+      android:multiArch="true"
+      android:use32bitAbi="true">
+    <activity  # DIFF-ANCHOR: ea1a94af
+        android:name="com.google.android.gms.common.api.GoogleApiActivity"
+        android:exported="false"
+        android:theme="@android:style/Theme.Translucent.NoTitleBar">
+    </activity>  # DIFF-ANCHOR: ea1a94af
+    <activity  # DIFF-ANCHOR: a4438884
+        android:name="org.chromium.android_webview.devui.MainActivity"
+        android:exported="true"
+        android:icon="@drawable/icon_webview"
+        android:label="WebView DevTools"
+        android:launchMode="singleTask"
+        android:process=":webview_apk"
+        android:taskAffinity="$PACKAGE.org.chromium.android_webview.devui"
+        android:theme="@style/Theme.DevUi.DayNight"
+        android:visibleToInstantApps="true"
+        android:windowSoftInputMode="adjustPan">
+      <intent-filter>  # DIFF-ANCHOR: b80aa336
+        <action android:name="$PACKAGE.SHOW_DEV_UI"/>
+        <category android:name="android.intent.category.DEFAULT"/>
+      </intent-filter>  # DIFF-ANCHOR: b80aa336
+    </activity>  # DIFF-ANCHOR: a4438884
+    <activity  # DIFF-ANCHOR: aeabab17
+        android:name="org.chromium.android_webview.nonembedded.LicenseActivity"
+        android:exported="true"
+        android:label="@string/license_activity_title"
+        android:process=":webview_apk">
+      <intent-filter>  # DIFF-ANCHOR: 23298d3b
+        <action android:name="android.settings.WEBVIEW_LICENSE"/>
+        <category android:name="android.intent.category.DEFAULT"/>
+      </intent-filter>  # DIFF-ANCHOR: 23298d3b
+      <meta-data android:name="com.android.settings.PRIMARY_PROFILE_CONTROLLED" android:value="true"/>
+    </activity>  # DIFF-ANCHOR: aeabab17
+    <activity-alias  # DIFF-ANCHOR: da85c28e
+        android:name="org.chromium.android_webview.SafeModeState"
+        android:enabled="false"
+        android:process=":webview_apk"
+        android:targetActivity="org.chromium.android_webview.devui.MainActivity"
+        android:visibleToInstantApps="true">
+    </activity-alias>  # DIFF-ANCHOR: da85c28e
+    <activity-alias  # DIFF-ANCHOR: b7cc06e9
+        android:name="org.chromium.android_webview.devui.DeveloperModeState"
+        android:enabled="false"
+        android:process=":webview_apk"
+        android:targetActivity="org.chromium.android_webview.devui.MainActivity"
+        android:visibleToInstantApps="true">
+    </activity-alias>  # DIFF-ANCHOR: b7cc06e9
+    <meta-data android:name="$PACKAGE.WebViewLibrary" android:value="libmonochrome.so"/>
+    <meta-data android:name="com.google.android.gms.version" android:value="@integer/google_play_services_version"/>
+    <meta-data android:name="org.chromium.content.browser.NUM_PRIVILEGED_SERVICES" android:value="0"/>
+    <meta-data android:name="org.chromium.content.browser.NUM_SANDBOXED_SERVICES" android:value="40"/>
+    <provider  # DIFF-ANCHOR: a5e78e63
+        android:name="org.chromium.android_webview.nonembedded.LicenseContentProvider"
+        android:authorities="$PACKAGE.LicenseContentProvider"
+        android:exported="true"
+        android:grantUriPermissions="true"
+        android:process=":webview_apk">
+    </provider>  # DIFF-ANCHOR: a5e78e63
+    <provider  # DIFF-ANCHOR: bfe37944
+        android:name="org.chromium.android_webview.services.DeveloperModeContentProvider"
+        android:authorities="$PACKAGE.DeveloperModeContentProvider"
+        android:exported="true"
+        android:process=":webview_service"
+        android:visibleToInstantApps="true">
+    </provider>  # DIFF-ANCHOR: bfe37944
+    <provider  # DIFF-ANCHOR: ecfff997
+        android:name="org.chromium.android_webview.services.SafeModeContentProvider"
+        android:authorities="$PACKAGE.SafeModeContentProvider"
+        android:exported="true"
+        android:process=":webview_service"
+        android:visibleToInstantApps="true">
+    </provider>  # DIFF-ANCHOR: ecfff997
+    <provider  # DIFF-ANCHOR: c41df08d
+        android:name="org.chromium.android_webview.services.SafeModeVariationsSeedContentProvider"
+        android:authorities="$PACKAGE.SafeModeVariationsSeedContentProvider"
+        android:exported="true"
+        android:process=":webview_service"
+        android:visibleToInstantApps="true">
+    </provider>  # DIFF-ANCHOR: c41df08d
+    <service  # DIFF-ANCHOR: 1d3bf514
+        android:name="org.chromium.android_webview.js_sandbox.service.JsSandboxService0"
+        android:exported="true"
+        android:externalService="true"
+        android:isolatedProcess="true"
+        android:process=":js_sandboxed_process0"
+        android:visibleToInstantApps="true">
+    </service>  # DIFF-ANCHOR: 1d3bf514
+    <service  # DIFF-ANCHOR: b9ec52c4
+        android:name="org.chromium.android_webview.nonembedded.AwComponentUpdateService"
+        android:exported="false"
+        android:permission="android.permission.BIND_JOB_SERVICE"
+        android:process=":webview_apk">
+    </service>  # DIFF-ANCHOR: b9ec52c4
+    <service  # DIFF-ANCHOR: 3cd6d713
+        android:name="org.chromium.android_webview.services.AwMinidumpUploadJobService"
+        android:exported="true"
+        android:permission="android.permission.BIND_JOB_SERVICE"
+        android:process=":webview_service">
+    </service>  # DIFF-ANCHOR: 3cd6d713
+    <service  # DIFF-ANCHOR: 65cddb26
+        android:name="org.chromium.android_webview.services.AwVariationsSeedFetcher"
+        android:exported="false"
+        android:permission="android.permission.BIND_JOB_SERVICE"
+        android:process=":webview_service">
+    </service>  # DIFF-ANCHOR: 65cddb26
+    <service  # DIFF-ANCHOR: c756cf8d
+        android:name="org.chromium.android_webview.services.ComponentsProviderService"
+        android:exported="true"
+        android:process=":webview_service"
+        android:visibleToInstantApps="true">
+    </service>  # DIFF-ANCHOR: c756cf8d
+    <service  # DIFF-ANCHOR: 5cda9608
+        android:name="org.chromium.android_webview.services.CrashReceiverService"
+        android:exported="true"
+        android:process=":webview_service">
+    </service>  # DIFF-ANCHOR: 5cda9608
+    <service  # DIFF-ANCHOR: adce9ea1
+        android:name="org.chromium.android_webview.services.DeveloperUiService"
+        android:exported="true"
+        android:foregroundServiceType="specialUse"
+        android:process=":webview_service">
+      <property android:name="android.app.PROPERTY_SPECIAL_USE_FGS_SUBTYPE" android:value="debugging"/>
+    </service>  # DIFF-ANCHOR: adce9ea1
+    <service  # DIFF-ANCHOR: eecf2fee
+        android:name="org.chromium.android_webview.services.MetricsBridgeService"
+        android:exported="true"
+        android:process=":webview_service"
+        android:visibleToInstantApps="true">
+    </service>  # DIFF-ANCHOR: eecf2fee
+    <service  # DIFF-ANCHOR: bda8b561
+        android:name="org.chromium.android_webview.services.MetricsUploadService"
+        android:exported="true"
+        android:process=":webview_service"
+        android:visibleToInstantApps="true">
+    </service>  # DIFF-ANCHOR: bda8b561
+    <service  # DIFF-ANCHOR: 47046f1b
+        android:name="org.chromium.android_webview.services.SafeModeService"
+        android:exported="true"
+        android:process=":webview_service">
+    </service>  # DIFF-ANCHOR: 47046f1b
+    <service  # DIFF-ANCHOR: c52936d7
+        android:name="org.chromium.android_webview.services.StartupFeatureMetadataHolder"
+        android:enabled="false"
+        android:exported="true">
+      <meta-data android:name="STARTUP_FEATURE_SET_DATA_DIRECTORY_SUFFIX" android:value="true"/>
+      <meta-data android:name="STARTUP_FEATURE_SET_DIRECTORY_BASE_PATH" android:value="true"/>
+    </service>  # DIFF-ANCHOR: c52936d7
+    <service  # DIFF-ANCHOR: dc926e35
+        android:name="org.chromium.android_webview.services.VariationsSeedServer"
+        android:exported="true"
+        android:process=":webview_service">
+    </service>  # DIFF-ANCHOR: dc926e35
+    <service  # DIFF-ANCHOR: b1e3e8bd
+        android:name="org.chromium.content.app.SandboxedProcessService0"
+        android:exported="true"
+        android:externalService="true"
+        android:isolatedProcess="true"
+        android:process=":sandboxed_process0"
+        android:visibleToInstantApps="true">
+    </service>  # DIFF-ANCHOR: b1e3e8bd
+    <service  # DIFF-ANCHOR: 76d1ccf8
+        android:name="org.chromium.content.app.SandboxedProcessService1"
+        android:exported="true"
+        android:externalService="true"
+        android:isolatedProcess="true"
+        android:process=":sandboxed_process1"
+        android:visibleToInstantApps="true">
+    </service>  # DIFF-ANCHOR: 76d1ccf8
+    <service  # DIFF-ANCHOR: 38b95266
+        android:name="org.chromium.content.app.SandboxedProcessService10"
+        android:exported="true"
+        android:externalService="true"
+        android:isolatedProcess="true"
+        android:process=":sandboxed_process10"
+        android:visibleToInstantApps="true">
+    </service>  # DIFF-ANCHOR: 38b95266
+    <service  # DIFF-ANCHOR: e4a2e4a2
+        android:name="org.chromium.content.app.SandboxedProcessService11"
+        android:exported="true"
+        android:externalService="true"
+        android:isolatedProcess="true"
+        android:process=":sandboxed_process11"
+        android:visibleToInstantApps="true">
+    </service>  # DIFF-ANCHOR: e4a2e4a2
+    <service  # DIFF-ANCHOR: d9b2ffba
+        android:name="org.chromium.content.app.SandboxedProcessService12"
+        android:exported="true"
+        android:externalService="true"
+        android:isolatedProcess="true"
+        android:process=":sandboxed_process12"
+        android:visibleToInstantApps="true">
+    </service>  # DIFF-ANCHOR: d9b2ffba
+    <service  # DIFF-ANCHOR: b41bb17d
+        android:name="org.chromium.content.app.SandboxedProcessService13"
+        android:exported="true"
+        android:externalService="true"
+        android:isolatedProcess="true"
+        android:process=":sandboxed_process13"
+        android:visibleToInstantApps="true">
+    </service>  # DIFF-ANCHOR: b41bb17d
+    <service  # DIFF-ANCHOR: aec0ea21
+        android:name="org.chromium.content.app.SandboxedProcessService14"
+        android:exported="true"
+        android:externalService="true"
+        android:isolatedProcess="true"
+        android:process=":sandboxed_process14"
+        android:visibleToInstantApps="true">
+    </service>  # DIFF-ANCHOR: aec0ea21
+    <service  # DIFF-ANCHOR: cf88a5e5
+        android:name="org.chromium.content.app.SandboxedProcessService15"
+        android:exported="true"
+        android:externalService="true"
+        android:isolatedProcess="true"
+        android:process=":sandboxed_process15"
+        android:visibleToInstantApps="true">
+    </service>  # DIFF-ANCHOR: cf88a5e5
+    <service  # DIFF-ANCHOR: 7d85889d
+        android:name="org.chromium.content.app.SandboxedProcessService16"
+        android:exported="true"
+        android:externalService="true"
+        android:isolatedProcess="true"
+        android:process=":sandboxed_process16"
+        android:visibleToInstantApps="true">
+    </service>  # DIFF-ANCHOR: 7d85889d
+    <service  # DIFF-ANCHOR: dae26ed4
+        android:name="org.chromium.content.app.SandboxedProcessService17"
+        android:exported="true"
+        android:externalService="true"
+        android:isolatedProcess="true"
+        android:process=":sandboxed_process17"
+        android:visibleToInstantApps="true">
+    </service>  # DIFF-ANCHOR: dae26ed4
+    <service  # DIFF-ANCHOR: 2c6cf029
+        android:name="org.chromium.content.app.SandboxedProcessService18"
+        android:exported="true"
+        android:externalService="true"
+        android:isolatedProcess="true"
+        android:process=":sandboxed_process18"
+        android:visibleToInstantApps="true">
+    </service>  # DIFF-ANCHOR: 2c6cf029
+    <service  # DIFF-ANCHOR: 1d2f0988
+        android:name="org.chromium.content.app.SandboxedProcessService19"
+        android:exported="true"
+        android:externalService="true"
+        android:isolatedProcess="true"
+        android:process=":sandboxed_process19"
+        android:visibleToInstantApps="true">
+    </service>  # DIFF-ANCHOR: 1d2f0988
+    <service  # DIFF-ANCHOR: 4a39041b
+        android:name="org.chromium.content.app.SandboxedProcessService2"
+        android:exported="true"
+        android:externalService="true"
+        android:isolatedProcess="true"
+        android:process=":sandboxed_process2"
+        android:visibleToInstantApps="true">
+    </service>  # DIFF-ANCHOR: 4a39041b
+    <service  # DIFF-ANCHOR: 073533bf
+        android:name="org.chromium.content.app.SandboxedProcessService20"
+        android:exported="true"
+        android:externalService="true"
+        android:isolatedProcess="true"
+        android:process=":sandboxed_process20"
+        android:visibleToInstantApps="true">
+    </service>  # DIFF-ANCHOR: 073533bf
+    <service  # DIFF-ANCHOR: d24da41d
+        android:name="org.chromium.content.app.SandboxedProcessService21"
+        android:exported="true"
+        android:externalService="true"
+        android:isolatedProcess="true"
+        android:process=":sandboxed_process21"
+        android:visibleToInstantApps="true">
+    </service>  # DIFF-ANCHOR: d24da41d
+    <service  # DIFF-ANCHOR: 594d8b32
+        android:name="org.chromium.content.app.SandboxedProcessService22"
+        android:exported="true"
+        android:externalService="true"
+        android:isolatedProcess="true"
+        android:process=":sandboxed_process22"
+        android:visibleToInstantApps="true">
+    </service>  # DIFF-ANCHOR: 594d8b32
+    <service  # DIFF-ANCHOR: 5528c0c3
+        android:name="org.chromium.content.app.SandboxedProcessService23"
+        android:exported="true"
+        android:externalService="true"
+        android:isolatedProcess="true"
+        android:process=":sandboxed_process23"
+        android:visibleToInstantApps="true">
+    </service>  # DIFF-ANCHOR: 5528c0c3
+    <service  # DIFF-ANCHOR: b7ab2ba3
+        android:name="org.chromium.content.app.SandboxedProcessService24"
+        android:exported="true"
+        android:externalService="true"
+        android:isolatedProcess="true"
+        android:process=":sandboxed_process24"
+        android:visibleToInstantApps="true">
+    </service>  # DIFF-ANCHOR: b7ab2ba3
+    <service  # DIFF-ANCHOR: cec6cb64
+        android:name="org.chromium.content.app.SandboxedProcessService25"
+        android:exported="true"
+        android:externalService="true"
+        android:isolatedProcess="true"
+        android:process=":sandboxed_process25"
+        android:visibleToInstantApps="true">
+    </service>  # DIFF-ANCHOR: cec6cb64
+    <service  # DIFF-ANCHOR: 5b4a00fe
+        android:name="org.chromium.content.app.SandboxedProcessService26"
+        android:exported="true"
+        android:externalService="true"
+        android:isolatedProcess="true"
+        android:process=":sandboxed_process26"
+        android:visibleToInstantApps="true">
+    </service>  # DIFF-ANCHOR: 5b4a00fe
+    <service  # DIFF-ANCHOR: ad49d203
+        android:name="org.chromium.content.app.SandboxedProcessService27"
+        android:exported="true"
+        android:externalService="true"
+        android:isolatedProcess="true"
+        android:process=":sandboxed_process27"
+        android:visibleToInstantApps="true">
+    </service>  # DIFF-ANCHOR: ad49d203
+    <service  # DIFF-ANCHOR: 573298e9
+        android:name="org.chromium.content.app.SandboxedProcessService28"
+        android:exported="true"
+        android:externalService="true"
+        android:isolatedProcess="true"
+        android:process=":sandboxed_process28"
+        android:visibleToInstantApps="true">
+    </service>  # DIFF-ANCHOR: 573298e9
+    <service  # DIFF-ANCHOR: 79897b32
+        android:name="org.chromium.content.app.SandboxedProcessService29"
+        android:exported="true"
+        android:externalService="true"
+        android:isolatedProcess="true"
+        android:process=":sandboxed_process29"
+        android:visibleToInstantApps="true">
+    </service>  # DIFF-ANCHOR: 79897b32
+    <service  # DIFF-ANCHOR: 84335864
+        android:name="org.chromium.content.app.SandboxedProcessService3"
+        android:exported="true"
+        android:externalService="true"
+        android:isolatedProcess="true"
+        android:process=":sandboxed_process3"
+        android:visibleToInstantApps="true">
+    </service>  # DIFF-ANCHOR: 84335864
+    <service  # DIFF-ANCHOR: c4bd371e
+        android:name="org.chromium.content.app.SandboxedProcessService30"
+        android:exported="true"
+        android:externalService="true"
+        android:isolatedProcess="true"
+        android:process=":sandboxed_process30"
+        android:visibleToInstantApps="true">
+    </service>  # DIFF-ANCHOR: c4bd371e
+    <service  # DIFF-ANCHOR: 394a9fd0
+        android:name="org.chromium.content.app.SandboxedProcessService31"
+        android:exported="true"
+        android:externalService="true"
+        android:isolatedProcess="true"
+        android:process=":sandboxed_process31"
+        android:visibleToInstantApps="true">
+    </service>  # DIFF-ANCHOR: 394a9fd0
+    <service  # DIFF-ANCHOR: b811afb8
+        android:name="org.chromium.content.app.SandboxedProcessService32"
+        android:exported="true"
+        android:externalService="true"
+        android:isolatedProcess="true"
+        android:process=":sandboxed_process32"
+        android:visibleToInstantApps="true">
+    </service>  # DIFF-ANCHOR: b811afb8
+    <service  # DIFF-ANCHOR: 2811ddd3
+        android:name="org.chromium.content.app.SandboxedProcessService33"
+        android:exported="true"
+        android:externalService="true"
+        android:isolatedProcess="true"
+        android:process=":sandboxed_process33"
+        android:visibleToInstantApps="true">
+    </service>  # DIFF-ANCHOR: 2811ddd3
+    <service  # DIFF-ANCHOR: 73ae1688
+        android:name="org.chromium.content.app.SandboxedProcessService34"
+        android:exported="true"
+        android:externalService="true"
+        android:isolatedProcess="true"
+        android:process=":sandboxed_process34"
+        android:visibleToInstantApps="true">
+    </service>  # DIFF-ANCHOR: 73ae1688
+    <service  # DIFF-ANCHOR: c476f324
+        android:name="org.chromium.content.app.SandboxedProcessService35"
+        android:exported="true"
+        android:externalService="true"
+        android:isolatedProcess="true"
+        android:process=":sandboxed_process35"
+        android:visibleToInstantApps="true">
+    </service>  # DIFF-ANCHOR: c476f324
+    <service  # DIFF-ANCHOR: 75d5304b
+        android:name="org.chromium.content.app.SandboxedProcessService36"
+        android:exported="true"
+        android:externalService="true"
+        android:isolatedProcess="true"
+        android:process=":sandboxed_process36"
+        android:visibleToInstantApps="true">
+    </service>  # DIFF-ANCHOR: 75d5304b
+    <service  # DIFF-ANCHOR: dc6d0617
+        android:name="org.chromium.content.app.SandboxedProcessService37"
+        android:exported="true"
+        android:externalService="true"
+        android:isolatedProcess="true"
+        android:process=":sandboxed_process37"
+        android:visibleToInstantApps="true">
+    </service>  # DIFF-ANCHOR: dc6d0617
+    <service  # DIFF-ANCHOR: e31efe49
+        android:name="org.chromium.content.app.SandboxedProcessService38"
+        android:exported="true"
+        android:externalService="true"
+        android:isolatedProcess="true"
+        android:process=":sandboxed_process38"
+        android:visibleToInstantApps="true">
+    </service>  # DIFF-ANCHOR: e31efe49
+    <service  # DIFF-ANCHOR: 5736507e
+        android:name="org.chromium.content.app.SandboxedProcessService39"
+        android:exported="true"
+        android:externalService="true"
+        android:isolatedProcess="true"
+        android:process=":sandboxed_process39"
+        android:visibleToInstantApps="true">
+    </service>  # DIFF-ANCHOR: 5736507e
+    <service  # DIFF-ANCHOR: a161be24
+        android:name="org.chromium.content.app.SandboxedProcessService4"
+        android:exported="true"
+        android:externalService="true"
+        android:isolatedProcess="true"
+        android:process=":sandboxed_process4"
+        android:visibleToInstantApps="true">
+    </service>  # DIFF-ANCHOR: a161be24
+    <service  # DIFF-ANCHOR: 8e591688
+        android:name="org.chromium.content.app.SandboxedProcessService5"
+        android:exported="true"
+        android:externalService="true"
+        android:isolatedProcess="true"
+        android:process=":sandboxed_process5"
+        android:visibleToInstantApps="true">
+    </service>  # DIFF-ANCHOR: 8e591688
+    <service  # DIFF-ANCHOR: 705141d0
+        android:name="org.chromium.content.app.SandboxedProcessService6"
+        android:exported="true"
+        android:externalService="true"
+        android:isolatedProcess="true"
+        android:process=":sandboxed_process6"
+        android:visibleToInstantApps="true">
+    </service>  # DIFF-ANCHOR: 705141d0
+    <service  # DIFF-ANCHOR: 38ed2189
+        android:name="org.chromium.content.app.SandboxedProcessService7"
+        android:exported="true"
+        android:externalService="true"
+        android:isolatedProcess="true"
+        android:process=":sandboxed_process7"
+        android:visibleToInstantApps="true">
+    </service>  # DIFF-ANCHOR: 38ed2189
+    <service  # DIFF-ANCHOR: aa417956
+        android:name="org.chromium.content.app.SandboxedProcessService8"
+        android:exported="true"
+        android:externalService="true"
+        android:isolatedProcess="true"
+        android:process=":sandboxed_process8"
+        android:visibleToInstantApps="true">
+    </service>  # DIFF-ANCHOR: aa417956
+    <service  # DIFF-ANCHOR: e2f3bbbd
+        android:name="org.chromium.content.app.SandboxedProcessService9"
+        android:exported="true"
+        android:externalService="true"
+        android:isolatedProcess="true"
+        android:process=":sandboxed_process9"
+        android:visibleToInstantApps="true">
+    </service>  # DIFF-ANCHOR: e2f3bbbd
+    <uses-library android:name="android.ext.adservices" android:required="false"/>
+    <uses-static-library android:name="org.chromium.trichromelibrary" android:certDigest="32a2fc74d731105859e5a85df16d95f102d85b22099b8064c5d8915c61dad1e0" android:version="OFFSET=31"/>
+  </application>
+</manifest>
diff --git a/android_webview/expectations/trichrome_webview_32_64_bundle.arm64.libs_and_assets.expected b/android_webview/expectations/trichrome_webview_32_64_bundle.arm64.libs_and_assets.expected
new file mode 100644
index 0000000..5197e7f
--- /dev/null
+++ b/android_webview/expectations/trichrome_webview_32_64_bundle.arm64.libs_and_assets.expected
@@ -0,0 +1,86 @@
+apk_path=lib/arm64-v8a/libcrashpad_handler_trampoline.so, compress=False, alignment=16384
+apk_path=lib/arm64-v8a/libmonochrome.so, compress=False, alignment=16384
+apk_path=assets/chrome_100_percent.pak, compress=False, alignment=4
+apk_path=assets/resources.pak, compress=False, alignment=4
+apk_path=assets/snapshot_blob_64.bin, compress=False, alignment=4
+apk_path=assets/stored-locales/af.pak, compress=False, alignment=4
+apk_path=assets/stored-locales/am.pak, compress=False, alignment=4
+apk_path=assets/stored-locales/ar.pak, compress=False, alignment=4
+apk_path=assets/stored-locales/as.pak, compress=False, alignment=4
+apk_path=assets/stored-locales/az.pak, compress=False, alignment=4
+apk_path=assets/stored-locales/be.pak, compress=False, alignment=4
+apk_path=assets/stored-locales/bg.pak, compress=False, alignment=4
+apk_path=assets/stored-locales/bn.pak, compress=False, alignment=4
+apk_path=assets/stored-locales/bs.pak, compress=False, alignment=4
+apk_path=assets/stored-locales/ca.pak, compress=False, alignment=4
+apk_path=assets/stored-locales/cs.pak, compress=False, alignment=4
+apk_path=assets/stored-locales/da.pak, compress=False, alignment=4
+apk_path=assets/stored-locales/de.pak, compress=False, alignment=4
+apk_path=assets/stored-locales/el.pak, compress=False, alignment=4
+apk_path=assets/stored-locales/en-GB.pak, compress=False, alignment=4
+apk_path=assets/stored-locales/en-US.pak, compress=False, alignment=4
+apk_path=assets/stored-locales/es-419.pak, compress=False, alignment=4
+apk_path=assets/stored-locales/es.pak, compress=False, alignment=4
+apk_path=assets/stored-locales/et.pak, compress=False, alignment=4
+apk_path=assets/stored-locales/eu.pak, compress=False, alignment=4
+apk_path=assets/stored-locales/fa.pak, compress=False, alignment=4
+apk_path=assets/stored-locales/fi.pak, compress=False, alignment=4
+apk_path=assets/stored-locales/fil.pak, compress=False, alignment=4
+apk_path=assets/stored-locales/fr-CA.pak, compress=False, alignment=4
+apk_path=assets/stored-locales/fr.pak, compress=False, alignment=4
+apk_path=assets/stored-locales/gl.pak, compress=False, alignment=4
+apk_path=assets/stored-locales/gu.pak, compress=False, alignment=4
+apk_path=assets/stored-locales/he.pak, compress=False, alignment=4
+apk_path=assets/stored-locales/hi.pak, compress=False, alignment=4
+apk_path=assets/stored-locales/hr.pak, compress=False, alignment=4
+apk_path=assets/stored-locales/hu.pak, compress=False, alignment=4
+apk_path=assets/stored-locales/hy.pak, compress=False, alignment=4
+apk_path=assets/stored-locales/id.pak, compress=False, alignment=4
+apk_path=assets/stored-locales/is.pak, compress=False, alignment=4
+apk_path=assets/stored-locales/it.pak, compress=False, alignment=4
+apk_path=assets/stored-locales/ja.pak, compress=False, alignment=4
+apk_path=assets/stored-locales/ka.pak, compress=False, alignment=4
+apk_path=assets/stored-locales/kk.pak, compress=False, alignment=4
+apk_path=assets/stored-locales/km.pak, compress=False, alignment=4
+apk_path=assets/stored-locales/kn.pak, compress=False, alignment=4
+apk_path=assets/stored-locales/ko.pak, compress=False, alignment=4
+apk_path=assets/stored-locales/ky.pak, compress=False, alignment=4
+apk_path=assets/stored-locales/lo.pak, compress=False, alignment=4
+apk_path=assets/stored-locales/lt.pak, compress=False, alignment=4
+apk_path=assets/stored-locales/lv.pak, compress=False, alignment=4
+apk_path=assets/stored-locales/mk.pak, compress=False, alignment=4
+apk_path=assets/stored-locales/ml.pak, compress=False, alignment=4
+apk_path=assets/stored-locales/mn.pak, compress=False, alignment=4
+apk_path=assets/stored-locales/mr.pak, compress=False, alignment=4
+apk_path=assets/stored-locales/ms.pak, compress=False, alignment=4
+apk_path=assets/stored-locales/my.pak, compress=False, alignment=4
+apk_path=assets/stored-locales/nb.pak, compress=False, alignment=4
+apk_path=assets/stored-locales/ne.pak, compress=False, alignment=4
+apk_path=assets/stored-locales/nl.pak, compress=False, alignment=4
+apk_path=assets/stored-locales/or.pak, compress=False, alignment=4
+apk_path=assets/stored-locales/pa.pak, compress=False, alignment=4
+apk_path=assets/stored-locales/pl.pak, compress=False, alignment=4
+apk_path=assets/stored-locales/pt-BR.pak, compress=False, alignment=4
+apk_path=assets/stored-locales/pt-PT.pak, compress=False, alignment=4
+apk_path=assets/stored-locales/ro.pak, compress=False, alignment=4
+apk_path=assets/stored-locales/ru.pak, compress=False, alignment=4
+apk_path=assets/stored-locales/si.pak, compress=False, alignment=4
+apk_path=assets/stored-locales/sk.pak, compress=False, alignment=4
+apk_path=assets/stored-locales/sl.pak, compress=False, alignment=4
+apk_path=assets/stored-locales/sq.pak, compress=False, alignment=4
+apk_path=assets/stored-locales/sr-Latn.pak, compress=False, alignment=4
+apk_path=assets/stored-locales/sr.pak, compress=False, alignment=4
+apk_path=assets/stored-locales/sv.pak, compress=False, alignment=4
+apk_path=assets/stored-locales/sw.pak, compress=False, alignment=4
+apk_path=assets/stored-locales/ta.pak, compress=False, alignment=4
+apk_path=assets/stored-locales/te.pak, compress=False, alignment=4
+apk_path=assets/stored-locales/th.pak, compress=False, alignment=4
+apk_path=assets/stored-locales/tr.pak, compress=False, alignment=4
+apk_path=assets/stored-locales/uk.pak, compress=False, alignment=4
+apk_path=assets/stored-locales/ur.pak, compress=False, alignment=4
+apk_path=assets/stored-locales/uz.pak, compress=False, alignment=4
+apk_path=assets/stored-locales/vi.pak, compress=False, alignment=4
+apk_path=assets/stored-locales/zh-CN.pak, compress=False, alignment=4
+apk_path=assets/stored-locales/zh-HK.pak, compress=False, alignment=4
+apk_path=assets/stored-locales/zh-TW.pak, compress=False, alignment=4
+apk_path=assets/stored-locales/zu.pak, compress=False, alignment=4
diff --git a/android_webview/expectations/trichrome_webview_32_bundle.AndroidManifest.expected b/android_webview/expectations/trichrome_webview_32_bundle.AndroidManifest.expected
new file mode 100644
index 0000000..31bf725
--- /dev/null
+++ b/android_webview/expectations/trichrome_webview_32_bundle.AndroidManifest.expected
@@ -0,0 +1,499 @@
+<?xml version="1.0" ?>
+<manifest
+    xmlns:android="http://schemas.android.com/apk/res/android"
+    package="com.android.webview"
+    platformBuildVersionCode="34"
+    platformBuildVersionName="14"
+    android:isolatedSplits="true"
+    android:versionCode="OFFSET=30"
+    android:versionName="#.#.#.#">
+  <uses-feature android:name="android.hardware.touchscreen" android:required="false"/>
+  <uses-feature android:name="android.software.leanback" android:required="false"/>
+  <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
+  <uses-permission android:name="android.permission.FOREGROUND_SERVICE"/>
+  <uses-permission android:name="android.permission.FOREGROUND_SERVICE_SPECIAL_USE"/>
+  <uses-permission android:name="android.permission.INTERNET"/>
+  <uses-permission android:name="android.permission.POST_NOTIFICATIONS"/>
+  <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED"/>
+  <uses-sdk android:minSdkVersion="29" android:targetSdkVersion="34"/>
+  <application
+      android:name="org.chromium.android_webview.nonembedded.WebViewApkApplication"
+      android:extractNativeLibs="false"
+      android:icon="@$PACKAGE:drawable/icon_webview"
+      android:label="Android System WebView"
+      android:multiArch="true">
+    <activity  # DIFF-ANCHOR: ea1a94af
+        android:name="com.google.android.gms.common.api.GoogleApiActivity"
+        android:exported="false"
+        android:theme="@android:style/Theme.Translucent.NoTitleBar">
+    </activity>  # DIFF-ANCHOR: ea1a94af
+    <activity  # DIFF-ANCHOR: a4438884
+        android:name="org.chromium.android_webview.devui.MainActivity"
+        android:exported="true"
+        android:icon="@drawable/icon_webview"
+        android:label="WebView DevTools"
+        android:launchMode="singleTask"
+        android:process=":webview_apk"
+        android:taskAffinity="$PACKAGE.org.chromium.android_webview.devui"
+        android:theme="@style/Theme.DevUi.DayNight"
+        android:visibleToInstantApps="true"
+        android:windowSoftInputMode="adjustPan">
+      <intent-filter>  # DIFF-ANCHOR: b80aa336
+        <action android:name="$PACKAGE.SHOW_DEV_UI"/>
+        <category android:name="android.intent.category.DEFAULT"/>
+      </intent-filter>  # DIFF-ANCHOR: b80aa336
+    </activity>  # DIFF-ANCHOR: a4438884
+    <activity  # DIFF-ANCHOR: aeabab17
+        android:name="org.chromium.android_webview.nonembedded.LicenseActivity"
+        android:exported="true"
+        android:label="@string/license_activity_title"
+        android:process=":webview_apk">
+      <intent-filter>  # DIFF-ANCHOR: 23298d3b
+        <action android:name="android.settings.WEBVIEW_LICENSE"/>
+        <category android:name="android.intent.category.DEFAULT"/>
+      </intent-filter>  # DIFF-ANCHOR: 23298d3b
+      <meta-data android:name="com.android.settings.PRIMARY_PROFILE_CONTROLLED" android:value="true"/>
+    </activity>  # DIFF-ANCHOR: aeabab17
+    <activity-alias  # DIFF-ANCHOR: da85c28e
+        android:name="org.chromium.android_webview.SafeModeState"
+        android:enabled="false"
+        android:process=":webview_apk"
+        android:targetActivity="org.chromium.android_webview.devui.MainActivity"
+        android:visibleToInstantApps="true">
+    </activity-alias>  # DIFF-ANCHOR: da85c28e
+    <activity-alias  # DIFF-ANCHOR: b7cc06e9
+        android:name="org.chromium.android_webview.devui.DeveloperModeState"
+        android:enabled="false"
+        android:process=":webview_apk"
+        android:targetActivity="org.chromium.android_webview.devui.MainActivity"
+        android:visibleToInstantApps="true">
+    </activity-alias>  # DIFF-ANCHOR: b7cc06e9
+    <meta-data android:name="$PACKAGE.WebViewLibrary" android:value="libmonochrome.so"/>
+    <meta-data android:name="com.google.android.gms.version" android:value="@integer/google_play_services_version"/>
+    <meta-data android:name="org.chromium.content.browser.NUM_PRIVILEGED_SERVICES" android:value="0"/>
+    <meta-data android:name="org.chromium.content.browser.NUM_SANDBOXED_SERVICES" android:value="40"/>
+    <provider  # DIFF-ANCHOR: a5e78e63
+        android:name="org.chromium.android_webview.nonembedded.LicenseContentProvider"
+        android:authorities="$PACKAGE.LicenseContentProvider"
+        android:exported="true"
+        android:grantUriPermissions="true"
+        android:process=":webview_apk">
+    </provider>  # DIFF-ANCHOR: a5e78e63
+    <provider  # DIFF-ANCHOR: bfe37944
+        android:name="org.chromium.android_webview.services.DeveloperModeContentProvider"
+        android:authorities="$PACKAGE.DeveloperModeContentProvider"
+        android:exported="true"
+        android:process=":webview_service"
+        android:visibleToInstantApps="true">
+    </provider>  # DIFF-ANCHOR: bfe37944
+    <provider  # DIFF-ANCHOR: ecfff997
+        android:name="org.chromium.android_webview.services.SafeModeContentProvider"
+        android:authorities="$PACKAGE.SafeModeContentProvider"
+        android:exported="true"
+        android:process=":webview_service"
+        android:visibleToInstantApps="true">
+    </provider>  # DIFF-ANCHOR: ecfff997
+    <provider  # DIFF-ANCHOR: c41df08d
+        android:name="org.chromium.android_webview.services.SafeModeVariationsSeedContentProvider"
+        android:authorities="$PACKAGE.SafeModeVariationsSeedContentProvider"
+        android:exported="true"
+        android:process=":webview_service"
+        android:visibleToInstantApps="true">
+    </provider>  # DIFF-ANCHOR: c41df08d
+    <service  # DIFF-ANCHOR: 1d3bf514
+        android:name="org.chromium.android_webview.js_sandbox.service.JsSandboxService0"
+        android:exported="true"
+        android:externalService="true"
+        android:isolatedProcess="true"
+        android:process=":js_sandboxed_process0"
+        android:visibleToInstantApps="true">
+    </service>  # DIFF-ANCHOR: 1d3bf514
+    <service  # DIFF-ANCHOR: b9ec52c4
+        android:name="org.chromium.android_webview.nonembedded.AwComponentUpdateService"
+        android:exported="false"
+        android:permission="android.permission.BIND_JOB_SERVICE"
+        android:process=":webview_apk">
+    </service>  # DIFF-ANCHOR: b9ec52c4
+    <service  # DIFF-ANCHOR: 3cd6d713
+        android:name="org.chromium.android_webview.services.AwMinidumpUploadJobService"
+        android:exported="true"
+        android:permission="android.permission.BIND_JOB_SERVICE"
+        android:process=":webview_service">
+    </service>  # DIFF-ANCHOR: 3cd6d713
+    <service  # DIFF-ANCHOR: 65cddb26
+        android:name="org.chromium.android_webview.services.AwVariationsSeedFetcher"
+        android:exported="false"
+        android:permission="android.permission.BIND_JOB_SERVICE"
+        android:process=":webview_service">
+    </service>  # DIFF-ANCHOR: 65cddb26
+    <service  # DIFF-ANCHOR: c756cf8d
+        android:name="org.chromium.android_webview.services.ComponentsProviderService"
+        android:exported="true"
+        android:process=":webview_service"
+        android:visibleToInstantApps="true">
+    </service>  # DIFF-ANCHOR: c756cf8d
+    <service  # DIFF-ANCHOR: 5cda9608
+        android:name="org.chromium.android_webview.services.CrashReceiverService"
+        android:exported="true"
+        android:process=":webview_service">
+    </service>  # DIFF-ANCHOR: 5cda9608
+    <service  # DIFF-ANCHOR: adce9ea1
+        android:name="org.chromium.android_webview.services.DeveloperUiService"
+        android:exported="true"
+        android:foregroundServiceType="specialUse"
+        android:process=":webview_service">
+      <property android:name="android.app.PROPERTY_SPECIAL_USE_FGS_SUBTYPE" android:value="debugging"/>
+    </service>  # DIFF-ANCHOR: adce9ea1
+    <service  # DIFF-ANCHOR: eecf2fee
+        android:name="org.chromium.android_webview.services.MetricsBridgeService"
+        android:exported="true"
+        android:process=":webview_service"
+        android:visibleToInstantApps="true">
+    </service>  # DIFF-ANCHOR: eecf2fee
+    <service  # DIFF-ANCHOR: bda8b561
+        android:name="org.chromium.android_webview.services.MetricsUploadService"
+        android:exported="true"
+        android:process=":webview_service"
+        android:visibleToInstantApps="true">
+    </service>  # DIFF-ANCHOR: bda8b561
+    <service  # DIFF-ANCHOR: 47046f1b
+        android:name="org.chromium.android_webview.services.SafeModeService"
+        android:exported="true"
+        android:process=":webview_service">
+    </service>  # DIFF-ANCHOR: 47046f1b
+    <service  # DIFF-ANCHOR: c52936d7
+        android:name="org.chromium.android_webview.services.StartupFeatureMetadataHolder"
+        android:enabled="false"
+        android:exported="true">
+      <meta-data android:name="STARTUP_FEATURE_SET_DATA_DIRECTORY_SUFFIX" android:value="true"/>
+      <meta-data android:name="STARTUP_FEATURE_SET_DIRECTORY_BASE_PATH" android:value="true"/>
+    </service>  # DIFF-ANCHOR: c52936d7
+    <service  # DIFF-ANCHOR: dc926e35
+        android:name="org.chromium.android_webview.services.VariationsSeedServer"
+        android:exported="true"
+        android:process=":webview_service">
+    </service>  # DIFF-ANCHOR: dc926e35
+    <service  # DIFF-ANCHOR: b1e3e8bd
+        android:name="org.chromium.content.app.SandboxedProcessService0"
+        android:exported="true"
+        android:externalService="true"
+        android:isolatedProcess="true"
+        android:process=":sandboxed_process0"
+        android:visibleToInstantApps="true">
+    </service>  # DIFF-ANCHOR: b1e3e8bd
+    <service  # DIFF-ANCHOR: 76d1ccf8
+        android:name="org.chromium.content.app.SandboxedProcessService1"
+        android:exported="true"
+        android:externalService="true"
+        android:isolatedProcess="true"
+        android:process=":sandboxed_process1"
+        android:visibleToInstantApps="true">
+    </service>  # DIFF-ANCHOR: 76d1ccf8
+    <service  # DIFF-ANCHOR: 38b95266
+        android:name="org.chromium.content.app.SandboxedProcessService10"
+        android:exported="true"
+        android:externalService="true"
+        android:isolatedProcess="true"
+        android:process=":sandboxed_process10"
+        android:visibleToInstantApps="true">
+    </service>  # DIFF-ANCHOR: 38b95266
+    <service  # DIFF-ANCHOR: e4a2e4a2
+        android:name="org.chromium.content.app.SandboxedProcessService11"
+        android:exported="true"
+        android:externalService="true"
+        android:isolatedProcess="true"
+        android:process=":sandboxed_process11"
+        android:visibleToInstantApps="true">
+    </service>  # DIFF-ANCHOR: e4a2e4a2
+    <service  # DIFF-ANCHOR: d9b2ffba
+        android:name="org.chromium.content.app.SandboxedProcessService12"
+        android:exported="true"
+        android:externalService="true"
+        android:isolatedProcess="true"
+        android:process=":sandboxed_process12"
+        android:visibleToInstantApps="true">
+    </service>  # DIFF-ANCHOR: d9b2ffba
+    <service  # DIFF-ANCHOR: b41bb17d
+        android:name="org.chromium.content.app.SandboxedProcessService13"
+        android:exported="true"
+        android:externalService="true"
+        android:isolatedProcess="true"
+        android:process=":sandboxed_process13"
+        android:visibleToInstantApps="true">
+    </service>  # DIFF-ANCHOR: b41bb17d
+    <service  # DIFF-ANCHOR: aec0ea21
+        android:name="org.chromium.content.app.SandboxedProcessService14"
+        android:exported="true"
+        android:externalService="true"
+        android:isolatedProcess="true"
+        android:process=":sandboxed_process14"
+        android:visibleToInstantApps="true">
+    </service>  # DIFF-ANCHOR: aec0ea21
+    <service  # DIFF-ANCHOR: cf88a5e5
+        android:name="org.chromium.content.app.SandboxedProcessService15"
+        android:exported="true"
+        android:externalService="true"
+        android:isolatedProcess="true"
+        android:process=":sandboxed_process15"
+        android:visibleToInstantApps="true">
+    </service>  # DIFF-ANCHOR: cf88a5e5
+    <service  # DIFF-ANCHOR: 7d85889d
+        android:name="org.chromium.content.app.SandboxedProcessService16"
+        android:exported="true"
+        android:externalService="true"
+        android:isolatedProcess="true"
+        android:process=":sandboxed_process16"
+        android:visibleToInstantApps="true">
+    </service>  # DIFF-ANCHOR: 7d85889d
+    <service  # DIFF-ANCHOR: dae26ed4
+        android:name="org.chromium.content.app.SandboxedProcessService17"
+        android:exported="true"
+        android:externalService="true"
+        android:isolatedProcess="true"
+        android:process=":sandboxed_process17"
+        android:visibleToInstantApps="true">
+    </service>  # DIFF-ANCHOR: dae26ed4
+    <service  # DIFF-ANCHOR: 2c6cf029
+        android:name="org.chromium.content.app.SandboxedProcessService18"
+        android:exported="true"
+        android:externalService="true"
+        android:isolatedProcess="true"
+        android:process=":sandboxed_process18"
+        android:visibleToInstantApps="true">
+    </service>  # DIFF-ANCHOR: 2c6cf029
+    <service  # DIFF-ANCHOR: 1d2f0988
+        android:name="org.chromium.content.app.SandboxedProcessService19"
+        android:exported="true"
+        android:externalService="true"
+        android:isolatedProcess="true"
+        android:process=":sandboxed_process19"
+        android:visibleToInstantApps="true">
+    </service>  # DIFF-ANCHOR: 1d2f0988
+    <service  # DIFF-ANCHOR: 4a39041b
+        android:name="org.chromium.content.app.SandboxedProcessService2"
+        android:exported="true"
+        android:externalService="true"
+        android:isolatedProcess="true"
+        android:process=":sandboxed_process2"
+        android:visibleToInstantApps="true">
+    </service>  # DIFF-ANCHOR: 4a39041b
+    <service  # DIFF-ANCHOR: 073533bf
+        android:name="org.chromium.content.app.SandboxedProcessService20"
+        android:exported="true"
+        android:externalService="true"
+        android:isolatedProcess="true"
+        android:process=":sandboxed_process20"
+        android:visibleToInstantApps="true">
+    </service>  # DIFF-ANCHOR: 073533bf
+    <service  # DIFF-ANCHOR: d24da41d
+        android:name="org.chromium.content.app.SandboxedProcessService21"
+        android:exported="true"
+        android:externalService="true"
+        android:isolatedProcess="true"
+        android:process=":sandboxed_process21"
+        android:visibleToInstantApps="true">
+    </service>  # DIFF-ANCHOR: d24da41d
+    <service  # DIFF-ANCHOR: 594d8b32
+        android:name="org.chromium.content.app.SandboxedProcessService22"
+        android:exported="true"
+        android:externalService="true"
+        android:isolatedProcess="true"
+        android:process=":sandboxed_process22"
+        android:visibleToInstantApps="true">
+    </service>  # DIFF-ANCHOR: 594d8b32
+    <service  # DIFF-ANCHOR: 5528c0c3
+        android:name="org.chromium.content.app.SandboxedProcessService23"
+        android:exported="true"
+        android:externalService="true"
+        android:isolatedProcess="true"
+        android:process=":sandboxed_process23"
+        android:visibleToInstantApps="true">
+    </service>  # DIFF-ANCHOR: 5528c0c3
+    <service  # DIFF-ANCHOR: b7ab2ba3
+        android:name="org.chromium.content.app.SandboxedProcessService24"
+        android:exported="true"
+        android:externalService="true"
+        android:isolatedProcess="true"
+        android:process=":sandboxed_process24"
+        android:visibleToInstantApps="true">
+    </service>  # DIFF-ANCHOR: b7ab2ba3
+    <service  # DIFF-ANCHOR: cec6cb64
+        android:name="org.chromium.content.app.SandboxedProcessService25"
+        android:exported="true"
+        android:externalService="true"
+        android:isolatedProcess="true"
+        android:process=":sandboxed_process25"
+        android:visibleToInstantApps="true">
+    </service>  # DIFF-ANCHOR: cec6cb64
+    <service  # DIFF-ANCHOR: 5b4a00fe
+        android:name="org.chromium.content.app.SandboxedProcessService26"
+        android:exported="true"
+        android:externalService="true"
+        android:isolatedProcess="true"
+        android:process=":sandboxed_process26"
+        android:visibleToInstantApps="true">
+    </service>  # DIFF-ANCHOR: 5b4a00fe
+    <service  # DIFF-ANCHOR: ad49d203
+        android:name="org.chromium.content.app.SandboxedProcessService27"
+        android:exported="true"
+        android:externalService="true"
+        android:isolatedProcess="true"
+        android:process=":sandboxed_process27"
+        android:visibleToInstantApps="true">
+    </service>  # DIFF-ANCHOR: ad49d203
+    <service  # DIFF-ANCHOR: 573298e9
+        android:name="org.chromium.content.app.SandboxedProcessService28"
+        android:exported="true"
+        android:externalService="true"
+        android:isolatedProcess="true"
+        android:process=":sandboxed_process28"
+        android:visibleToInstantApps="true">
+    </service>  # DIFF-ANCHOR: 573298e9
+    <service  # DIFF-ANCHOR: 79897b32
+        android:name="org.chromium.content.app.SandboxedProcessService29"
+        android:exported="true"
+        android:externalService="true"
+        android:isolatedProcess="true"
+        android:process=":sandboxed_process29"
+        android:visibleToInstantApps="true">
+    </service>  # DIFF-ANCHOR: 79897b32
+    <service  # DIFF-ANCHOR: 84335864
+        android:name="org.chromium.content.app.SandboxedProcessService3"
+        android:exported="true"
+        android:externalService="true"
+        android:isolatedProcess="true"
+        android:process=":sandboxed_process3"
+        android:visibleToInstantApps="true">
+    </service>  # DIFF-ANCHOR: 84335864
+    <service  # DIFF-ANCHOR: c4bd371e
+        android:name="org.chromium.content.app.SandboxedProcessService30"
+        android:exported="true"
+        android:externalService="true"
+        android:isolatedProcess="true"
+        android:process=":sandboxed_process30"
+        android:visibleToInstantApps="true">
+    </service>  # DIFF-ANCHOR: c4bd371e
+    <service  # DIFF-ANCHOR: 394a9fd0
+        android:name="org.chromium.content.app.SandboxedProcessService31"
+        android:exported="true"
+        android:externalService="true"
+        android:isolatedProcess="true"
+        android:process=":sandboxed_process31"
+        android:visibleToInstantApps="true">
+    </service>  # DIFF-ANCHOR: 394a9fd0
+    <service  # DIFF-ANCHOR: b811afb8
+        android:name="org.chromium.content.app.SandboxedProcessService32"
+        android:exported="true"
+        android:externalService="true"
+        android:isolatedProcess="true"
+        android:process=":sandboxed_process32"
+        android:visibleToInstantApps="true">
+    </service>  # DIFF-ANCHOR: b811afb8
+    <service  # DIFF-ANCHOR: 2811ddd3
+        android:name="org.chromium.content.app.SandboxedProcessService33"
+        android:exported="true"
+        android:externalService="true"
+        android:isolatedProcess="true"
+        android:process=":sandboxed_process33"
+        android:visibleToInstantApps="true">
+    </service>  # DIFF-ANCHOR: 2811ddd3
+    <service  # DIFF-ANCHOR: 73ae1688
+        android:name="org.chromium.content.app.SandboxedProcessService34"
+        android:exported="true"
+        android:externalService="true"
+        android:isolatedProcess="true"
+        android:process=":sandboxed_process34"
+        android:visibleToInstantApps="true">
+    </service>  # DIFF-ANCHOR: 73ae1688
+    <service  # DIFF-ANCHOR: c476f324
+        android:name="org.chromium.content.app.SandboxedProcessService35"
+        android:exported="true"
+        android:externalService="true"
+        android:isolatedProcess="true"
+        android:process=":sandboxed_process35"
+        android:visibleToInstantApps="true">
+    </service>  # DIFF-ANCHOR: c476f324
+    <service  # DIFF-ANCHOR: 75d5304b
+        android:name="org.chromium.content.app.SandboxedProcessService36"
+        android:exported="true"
+        android:externalService="true"
+        android:isolatedProcess="true"
+        android:process=":sandboxed_process36"
+        android:visibleToInstantApps="true">
+    </service>  # DIFF-ANCHOR: 75d5304b
+    <service  # DIFF-ANCHOR: dc6d0617
+        android:name="org.chromium.content.app.SandboxedProcessService37"
+        android:exported="true"
+        android:externalService="true"
+        android:isolatedProcess="true"
+        android:process=":sandboxed_process37"
+        android:visibleToInstantApps="true">
+    </service>  # DIFF-ANCHOR: dc6d0617
+    <service  # DIFF-ANCHOR: e31efe49
+        android:name="org.chromium.content.app.SandboxedProcessService38"
+        android:exported="true"
+        android:externalService="true"
+        android:isolatedProcess="true"
+        android:process=":sandboxed_process38"
+        android:visibleToInstantApps="true">
+    </service>  # DIFF-ANCHOR: e31efe49
+    <service  # DIFF-ANCHOR: 5736507e
+        android:name="org.chromium.content.app.SandboxedProcessService39"
+        android:exported="true"
+        android:externalService="true"
+        android:isolatedProcess="true"
+        android:process=":sandboxed_process39"
+        android:visibleToInstantApps="true">
+    </service>  # DIFF-ANCHOR: 5736507e
+    <service  # DIFF-ANCHOR: a161be24
+        android:name="org.chromium.content.app.SandboxedProcessService4"
+        android:exported="true"
+        android:externalService="true"
+        android:isolatedProcess="true"
+        android:process=":sandboxed_process4"
+        android:visibleToInstantApps="true">
+    </service>  # DIFF-ANCHOR: a161be24
+    <service  # DIFF-ANCHOR: 8e591688
+        android:name="org.chromium.content.app.SandboxedProcessService5"
+        android:exported="true"
+        android:externalService="true"
+        android:isolatedProcess="true"
+        android:process=":sandboxed_process5"
+        android:visibleToInstantApps="true">
+    </service>  # DIFF-ANCHOR: 8e591688
+    <service  # DIFF-ANCHOR: 705141d0
+        android:name="org.chromium.content.app.SandboxedProcessService6"
+        android:exported="true"
+        android:externalService="true"
+        android:isolatedProcess="true"
+        android:process=":sandboxed_process6"
+        android:visibleToInstantApps="true">
+    </service>  # DIFF-ANCHOR: 705141d0
+    <service  # DIFF-ANCHOR: 38ed2189
+        android:name="org.chromium.content.app.SandboxedProcessService7"
+        android:exported="true"
+        android:externalService="true"
+        android:isolatedProcess="true"
+        android:process=":sandboxed_process7"
+        android:visibleToInstantApps="true">
+    </service>  # DIFF-ANCHOR: 38ed2189
+    <service  # DIFF-ANCHOR: aa417956
+        android:name="org.chromium.content.app.SandboxedProcessService8"
+        android:exported="true"
+        android:externalService="true"
+        android:isolatedProcess="true"
+        android:process=":sandboxed_process8"
+        android:visibleToInstantApps="true">
+    </service>  # DIFF-ANCHOR: aa417956
+    <service  # DIFF-ANCHOR: e2f3bbbd
+        android:name="org.chromium.content.app.SandboxedProcessService9"
+        android:exported="true"
+        android:externalService="true"
+        android:isolatedProcess="true"
+        android:process=":sandboxed_process9"
+        android:visibleToInstantApps="true">
+    </service>  # DIFF-ANCHOR: e2f3bbbd
+    <uses-library android:name="android.ext.adservices" android:required="false"/>
+    <uses-static-library android:name="org.chromium.trichromelibrary" android:certDigest="32a2fc74d731105859e5a85df16d95f102d85b22099b8064c5d8915c61dad1e0" android:version="OFFSET=30"/>
+  </application>
+</manifest>
diff --git a/android_webview/expectations/trichrome_webview_64_32_bundle.AndroidManifest.expected b/android_webview/expectations/trichrome_webview_64_32_bundle.AndroidManifest.expected
new file mode 100644
index 0000000..20661fb3
--- /dev/null
+++ b/android_webview/expectations/trichrome_webview_64_32_bundle.AndroidManifest.expected
@@ -0,0 +1,499 @@
+<?xml version="1.0" ?>
+<manifest
+    xmlns:android="http://schemas.android.com/apk/res/android"
+    package="com.android.webview"
+    platformBuildVersionCode="34"
+    platformBuildVersionName="14"
+    android:isolatedSplits="true"
+    android:versionCode="OFFSET=32"
+    android:versionName="#.#.#.#">
+  <uses-feature android:name="android.hardware.touchscreen" android:required="false"/>
+  <uses-feature android:name="android.software.leanback" android:required="false"/>
+  <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
+  <uses-permission android:name="android.permission.FOREGROUND_SERVICE"/>
+  <uses-permission android:name="android.permission.FOREGROUND_SERVICE_SPECIAL_USE"/>
+  <uses-permission android:name="android.permission.INTERNET"/>
+  <uses-permission android:name="android.permission.POST_NOTIFICATIONS"/>
+  <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED"/>
+  <uses-sdk android:minSdkVersion="29" android:targetSdkVersion="34"/>
+  <application
+      android:name="org.chromium.android_webview.nonembedded.WebViewApkApplication"
+      android:extractNativeLibs="false"
+      android:icon="@$PACKAGE:drawable/icon_webview"
+      android:label="Android System WebView"
+      android:multiArch="true">
+    <activity  # DIFF-ANCHOR: ea1a94af
+        android:name="com.google.android.gms.common.api.GoogleApiActivity"
+        android:exported="false"
+        android:theme="@android:style/Theme.Translucent.NoTitleBar">
+    </activity>  # DIFF-ANCHOR: ea1a94af
+    <activity  # DIFF-ANCHOR: a4438884
+        android:name="org.chromium.android_webview.devui.MainActivity"
+        android:exported="true"
+        android:icon="@drawable/icon_webview"
+        android:label="WebView DevTools"
+        android:launchMode="singleTask"
+        android:process=":webview_apk"
+        android:taskAffinity="$PACKAGE.org.chromium.android_webview.devui"
+        android:theme="@style/Theme.DevUi.DayNight"
+        android:visibleToInstantApps="true"
+        android:windowSoftInputMode="adjustPan">
+      <intent-filter>  # DIFF-ANCHOR: b80aa336
+        <action android:name="$PACKAGE.SHOW_DEV_UI"/>
+        <category android:name="android.intent.category.DEFAULT"/>
+      </intent-filter>  # DIFF-ANCHOR: b80aa336
+    </activity>  # DIFF-ANCHOR: a4438884
+    <activity  # DIFF-ANCHOR: aeabab17
+        android:name="org.chromium.android_webview.nonembedded.LicenseActivity"
+        android:exported="true"
+        android:label="@string/license_activity_title"
+        android:process=":webview_apk">
+      <intent-filter>  # DIFF-ANCHOR: 23298d3b
+        <action android:name="android.settings.WEBVIEW_LICENSE"/>
+        <category android:name="android.intent.category.DEFAULT"/>
+      </intent-filter>  # DIFF-ANCHOR: 23298d3b
+      <meta-data android:name="com.android.settings.PRIMARY_PROFILE_CONTROLLED" android:value="true"/>
+    </activity>  # DIFF-ANCHOR: aeabab17
+    <activity-alias  # DIFF-ANCHOR: da85c28e
+        android:name="org.chromium.android_webview.SafeModeState"
+        android:enabled="false"
+        android:process=":webview_apk"
+        android:targetActivity="org.chromium.android_webview.devui.MainActivity"
+        android:visibleToInstantApps="true">
+    </activity-alias>  # DIFF-ANCHOR: da85c28e
+    <activity-alias  # DIFF-ANCHOR: b7cc06e9
+        android:name="org.chromium.android_webview.devui.DeveloperModeState"
+        android:enabled="false"
+        android:process=":webview_apk"
+        android:targetActivity="org.chromium.android_webview.devui.MainActivity"
+        android:visibleToInstantApps="true">
+    </activity-alias>  # DIFF-ANCHOR: b7cc06e9
+    <meta-data android:name="$PACKAGE.WebViewLibrary" android:value="libmonochrome_64.so"/>
+    <meta-data android:name="com.google.android.gms.version" android:value="@integer/google_play_services_version"/>
+    <meta-data android:name="org.chromium.content.browser.NUM_PRIVILEGED_SERVICES" android:value="0"/>
+    <meta-data android:name="org.chromium.content.browser.NUM_SANDBOXED_SERVICES" android:value="40"/>
+    <provider  # DIFF-ANCHOR: a5e78e63
+        android:name="org.chromium.android_webview.nonembedded.LicenseContentProvider"
+        android:authorities="$PACKAGE.LicenseContentProvider"
+        android:exported="true"
+        android:grantUriPermissions="true"
+        android:process=":webview_apk">
+    </provider>  # DIFF-ANCHOR: a5e78e63
+    <provider  # DIFF-ANCHOR: bfe37944
+        android:name="org.chromium.android_webview.services.DeveloperModeContentProvider"
+        android:authorities="$PACKAGE.DeveloperModeContentProvider"
+        android:exported="true"
+        android:process=":webview_service"
+        android:visibleToInstantApps="true">
+    </provider>  # DIFF-ANCHOR: bfe37944
+    <provider  # DIFF-ANCHOR: ecfff997
+        android:name="org.chromium.android_webview.services.SafeModeContentProvider"
+        android:authorities="$PACKAGE.SafeModeContentProvider"
+        android:exported="true"
+        android:process=":webview_service"
+        android:visibleToInstantApps="true">
+    </provider>  # DIFF-ANCHOR: ecfff997
+    <provider  # DIFF-ANCHOR: c41df08d
+        android:name="org.chromium.android_webview.services.SafeModeVariationsSeedContentProvider"
+        android:authorities="$PACKAGE.SafeModeVariationsSeedContentProvider"
+        android:exported="true"
+        android:process=":webview_service"
+        android:visibleToInstantApps="true">
+    </provider>  # DIFF-ANCHOR: c41df08d
+    <service  # DIFF-ANCHOR: 1d3bf514
+        android:name="org.chromium.android_webview.js_sandbox.service.JsSandboxService0"
+        android:exported="true"
+        android:externalService="true"
+        android:isolatedProcess="true"
+        android:process=":js_sandboxed_process0"
+        android:visibleToInstantApps="true">
+    </service>  # DIFF-ANCHOR: 1d3bf514
+    <service  # DIFF-ANCHOR: b9ec52c4
+        android:name="org.chromium.android_webview.nonembedded.AwComponentUpdateService"
+        android:exported="false"
+        android:permission="android.permission.BIND_JOB_SERVICE"
+        android:process=":webview_apk">
+    </service>  # DIFF-ANCHOR: b9ec52c4
+    <service  # DIFF-ANCHOR: 3cd6d713
+        android:name="org.chromium.android_webview.services.AwMinidumpUploadJobService"
+        android:exported="true"
+        android:permission="android.permission.BIND_JOB_SERVICE"
+        android:process=":webview_service">
+    </service>  # DIFF-ANCHOR: 3cd6d713
+    <service  # DIFF-ANCHOR: 65cddb26
+        android:name="org.chromium.android_webview.services.AwVariationsSeedFetcher"
+        android:exported="false"
+        android:permission="android.permission.BIND_JOB_SERVICE"
+        android:process=":webview_service">
+    </service>  # DIFF-ANCHOR: 65cddb26
+    <service  # DIFF-ANCHOR: c756cf8d
+        android:name="org.chromium.android_webview.services.ComponentsProviderService"
+        android:exported="true"
+        android:process=":webview_service"
+        android:visibleToInstantApps="true">
+    </service>  # DIFF-ANCHOR: c756cf8d
+    <service  # DIFF-ANCHOR: 5cda9608
+        android:name="org.chromium.android_webview.services.CrashReceiverService"
+        android:exported="true"
+        android:process=":webview_service">
+    </service>  # DIFF-ANCHOR: 5cda9608
+    <service  # DIFF-ANCHOR: adce9ea1
+        android:name="org.chromium.android_webview.services.DeveloperUiService"
+        android:exported="true"
+        android:foregroundServiceType="specialUse"
+        android:process=":webview_service">
+      <property android:name="android.app.PROPERTY_SPECIAL_USE_FGS_SUBTYPE" android:value="debugging"/>
+    </service>  # DIFF-ANCHOR: adce9ea1
+    <service  # DIFF-ANCHOR: eecf2fee
+        android:name="org.chromium.android_webview.services.MetricsBridgeService"
+        android:exported="true"
+        android:process=":webview_service"
+        android:visibleToInstantApps="true">
+    </service>  # DIFF-ANCHOR: eecf2fee
+    <service  # DIFF-ANCHOR: bda8b561
+        android:name="org.chromium.android_webview.services.MetricsUploadService"
+        android:exported="true"
+        android:process=":webview_service"
+        android:visibleToInstantApps="true">
+    </service>  # DIFF-ANCHOR: bda8b561
+    <service  # DIFF-ANCHOR: 47046f1b
+        android:name="org.chromium.android_webview.services.SafeModeService"
+        android:exported="true"
+        android:process=":webview_service">
+    </service>  # DIFF-ANCHOR: 47046f1b
+    <service  # DIFF-ANCHOR: c52936d7
+        android:name="org.chromium.android_webview.services.StartupFeatureMetadataHolder"
+        android:enabled="false"
+        android:exported="true">
+      <meta-data android:name="STARTUP_FEATURE_SET_DATA_DIRECTORY_SUFFIX" android:value="true"/>
+      <meta-data android:name="STARTUP_FEATURE_SET_DIRECTORY_BASE_PATH" android:value="true"/>
+    </service>  # DIFF-ANCHOR: c52936d7
+    <service  # DIFF-ANCHOR: dc926e35
+        android:name="org.chromium.android_webview.services.VariationsSeedServer"
+        android:exported="true"
+        android:process=":webview_service">
+    </service>  # DIFF-ANCHOR: dc926e35
+    <service  # DIFF-ANCHOR: b1e3e8bd
+        android:name="org.chromium.content.app.SandboxedProcessService0"
+        android:exported="true"
+        android:externalService="true"
+        android:isolatedProcess="true"
+        android:process=":sandboxed_process0"
+        android:visibleToInstantApps="true">
+    </service>  # DIFF-ANCHOR: b1e3e8bd
+    <service  # DIFF-ANCHOR: 76d1ccf8
+        android:name="org.chromium.content.app.SandboxedProcessService1"
+        android:exported="true"
+        android:externalService="true"
+        android:isolatedProcess="true"
+        android:process=":sandboxed_process1"
+        android:visibleToInstantApps="true">
+    </service>  # DIFF-ANCHOR: 76d1ccf8
+    <service  # DIFF-ANCHOR: 38b95266
+        android:name="org.chromium.content.app.SandboxedProcessService10"
+        android:exported="true"
+        android:externalService="true"
+        android:isolatedProcess="true"
+        android:process=":sandboxed_process10"
+        android:visibleToInstantApps="true">
+    </service>  # DIFF-ANCHOR: 38b95266
+    <service  # DIFF-ANCHOR: e4a2e4a2
+        android:name="org.chromium.content.app.SandboxedProcessService11"
+        android:exported="true"
+        android:externalService="true"
+        android:isolatedProcess="true"
+        android:process=":sandboxed_process11"
+        android:visibleToInstantApps="true">
+    </service>  # DIFF-ANCHOR: e4a2e4a2
+    <service  # DIFF-ANCHOR: d9b2ffba
+        android:name="org.chromium.content.app.SandboxedProcessService12"
+        android:exported="true"
+        android:externalService="true"
+        android:isolatedProcess="true"
+        android:process=":sandboxed_process12"
+        android:visibleToInstantApps="true">
+    </service>  # DIFF-ANCHOR: d9b2ffba
+    <service  # DIFF-ANCHOR: b41bb17d
+        android:name="org.chromium.content.app.SandboxedProcessService13"
+        android:exported="true"
+        android:externalService="true"
+        android:isolatedProcess="true"
+        android:process=":sandboxed_process13"
+        android:visibleToInstantApps="true">
+    </service>  # DIFF-ANCHOR: b41bb17d
+    <service  # DIFF-ANCHOR: aec0ea21
+        android:name="org.chromium.content.app.SandboxedProcessService14"
+        android:exported="true"
+        android:externalService="true"
+        android:isolatedProcess="true"
+        android:process=":sandboxed_process14"
+        android:visibleToInstantApps="true">
+    </service>  # DIFF-ANCHOR: aec0ea21
+    <service  # DIFF-ANCHOR: cf88a5e5
+        android:name="org.chromium.content.app.SandboxedProcessService15"
+        android:exported="true"
+        android:externalService="true"
+        android:isolatedProcess="true"
+        android:process=":sandboxed_process15"
+        android:visibleToInstantApps="true">
+    </service>  # DIFF-ANCHOR: cf88a5e5
+    <service  # DIFF-ANCHOR: 7d85889d
+        android:name="org.chromium.content.app.SandboxedProcessService16"
+        android:exported="true"
+        android:externalService="true"
+        android:isolatedProcess="true"
+        android:process=":sandboxed_process16"
+        android:visibleToInstantApps="true">
+    </service>  # DIFF-ANCHOR: 7d85889d
+    <service  # DIFF-ANCHOR: dae26ed4
+        android:name="org.chromium.content.app.SandboxedProcessService17"
+        android:exported="true"
+        android:externalService="true"
+        android:isolatedProcess="true"
+        android:process=":sandboxed_process17"
+        android:visibleToInstantApps="true">
+    </service>  # DIFF-ANCHOR: dae26ed4
+    <service  # DIFF-ANCHOR: 2c6cf029
+        android:name="org.chromium.content.app.SandboxedProcessService18"
+        android:exported="true"
+        android:externalService="true"
+        android:isolatedProcess="true"
+        android:process=":sandboxed_process18"
+        android:visibleToInstantApps="true">
+    </service>  # DIFF-ANCHOR: 2c6cf029
+    <service  # DIFF-ANCHOR: 1d2f0988
+        android:name="org.chromium.content.app.SandboxedProcessService19"
+        android:exported="true"
+        android:externalService="true"
+        android:isolatedProcess="true"
+        android:process=":sandboxed_process19"
+        android:visibleToInstantApps="true">
+    </service>  # DIFF-ANCHOR: 1d2f0988
+    <service  # DIFF-ANCHOR: 4a39041b
+        android:name="org.chromium.content.app.SandboxedProcessService2"
+        android:exported="true"
+        android:externalService="true"
+        android:isolatedProcess="true"
+        android:process=":sandboxed_process2"
+        android:visibleToInstantApps="true">
+    </service>  # DIFF-ANCHOR: 4a39041b
+    <service  # DIFF-ANCHOR: 073533bf
+        android:name="org.chromium.content.app.SandboxedProcessService20"
+        android:exported="true"
+        android:externalService="true"
+        android:isolatedProcess="true"
+        android:process=":sandboxed_process20"
+        android:visibleToInstantApps="true">
+    </service>  # DIFF-ANCHOR: 073533bf
+    <service  # DIFF-ANCHOR: d24da41d
+        android:name="org.chromium.content.app.SandboxedProcessService21"
+        android:exported="true"
+        android:externalService="true"
+        android:isolatedProcess="true"
+        android:process=":sandboxed_process21"
+        android:visibleToInstantApps="true">
+    </service>  # DIFF-ANCHOR: d24da41d
+    <service  # DIFF-ANCHOR: 594d8b32
+        android:name="org.chromium.content.app.SandboxedProcessService22"
+        android:exported="true"
+        android:externalService="true"
+        android:isolatedProcess="true"
+        android:process=":sandboxed_process22"
+        android:visibleToInstantApps="true">
+    </service>  # DIFF-ANCHOR: 594d8b32
+    <service  # DIFF-ANCHOR: 5528c0c3
+        android:name="org.chromium.content.app.SandboxedProcessService23"
+        android:exported="true"
+        android:externalService="true"
+        android:isolatedProcess="true"
+        android:process=":sandboxed_process23"
+        android:visibleToInstantApps="true">
+    </service>  # DIFF-ANCHOR: 5528c0c3
+    <service  # DIFF-ANCHOR: b7ab2ba3
+        android:name="org.chromium.content.app.SandboxedProcessService24"
+        android:exported="true"
+        android:externalService="true"
+        android:isolatedProcess="true"
+        android:process=":sandboxed_process24"
+        android:visibleToInstantApps="true">
+    </service>  # DIFF-ANCHOR: b7ab2ba3
+    <service  # DIFF-ANCHOR: cec6cb64
+        android:name="org.chromium.content.app.SandboxedProcessService25"
+        android:exported="true"
+        android:externalService="true"
+        android:isolatedProcess="true"
+        android:process=":sandboxed_process25"
+        android:visibleToInstantApps="true">
+    </service>  # DIFF-ANCHOR: cec6cb64
+    <service  # DIFF-ANCHOR: 5b4a00fe
+        android:name="org.chromium.content.app.SandboxedProcessService26"
+        android:exported="true"
+        android:externalService="true"
+        android:isolatedProcess="true"
+        android:process=":sandboxed_process26"
+        android:visibleToInstantApps="true">
+    </service>  # DIFF-ANCHOR: 5b4a00fe
+    <service  # DIFF-ANCHOR: ad49d203
+        android:name="org.chromium.content.app.SandboxedProcessService27"
+        android:exported="true"
+        android:externalService="true"
+        android:isolatedProcess="true"
+        android:process=":sandboxed_process27"
+        android:visibleToInstantApps="true">
+    </service>  # DIFF-ANCHOR: ad49d203
+    <service  # DIFF-ANCHOR: 573298e9
+        android:name="org.chromium.content.app.SandboxedProcessService28"
+        android:exported="true"
+        android:externalService="true"
+        android:isolatedProcess="true"
+        android:process=":sandboxed_process28"
+        android:visibleToInstantApps="true">
+    </service>  # DIFF-ANCHOR: 573298e9
+    <service  # DIFF-ANCHOR: 79897b32
+        android:name="org.chromium.content.app.SandboxedProcessService29"
+        android:exported="true"
+        android:externalService="true"
+        android:isolatedProcess="true"
+        android:process=":sandboxed_process29"
+        android:visibleToInstantApps="true">
+    </service>  # DIFF-ANCHOR: 79897b32
+    <service  # DIFF-ANCHOR: 84335864
+        android:name="org.chromium.content.app.SandboxedProcessService3"
+        android:exported="true"
+        android:externalService="true"
+        android:isolatedProcess="true"
+        android:process=":sandboxed_process3"
+        android:visibleToInstantApps="true">
+    </service>  # DIFF-ANCHOR: 84335864
+    <service  # DIFF-ANCHOR: c4bd371e
+        android:name="org.chromium.content.app.SandboxedProcessService30"
+        android:exported="true"
+        android:externalService="true"
+        android:isolatedProcess="true"
+        android:process=":sandboxed_process30"
+        android:visibleToInstantApps="true">
+    </service>  # DIFF-ANCHOR: c4bd371e
+    <service  # DIFF-ANCHOR: 394a9fd0
+        android:name="org.chromium.content.app.SandboxedProcessService31"
+        android:exported="true"
+        android:externalService="true"
+        android:isolatedProcess="true"
+        android:process=":sandboxed_process31"
+        android:visibleToInstantApps="true">
+    </service>  # DIFF-ANCHOR: 394a9fd0
+    <service  # DIFF-ANCHOR: b811afb8
+        android:name="org.chromium.content.app.SandboxedProcessService32"
+        android:exported="true"
+        android:externalService="true"
+        android:isolatedProcess="true"
+        android:process=":sandboxed_process32"
+        android:visibleToInstantApps="true">
+    </service>  # DIFF-ANCHOR: b811afb8
+    <service  # DIFF-ANCHOR: 2811ddd3
+        android:name="org.chromium.content.app.SandboxedProcessService33"
+        android:exported="true"
+        android:externalService="true"
+        android:isolatedProcess="true"
+        android:process=":sandboxed_process33"
+        android:visibleToInstantApps="true">
+    </service>  # DIFF-ANCHOR: 2811ddd3
+    <service  # DIFF-ANCHOR: 73ae1688
+        android:name="org.chromium.content.app.SandboxedProcessService34"
+        android:exported="true"
+        android:externalService="true"
+        android:isolatedProcess="true"
+        android:process=":sandboxed_process34"
+        android:visibleToInstantApps="true">
+    </service>  # DIFF-ANCHOR: 73ae1688
+    <service  # DIFF-ANCHOR: c476f324
+        android:name="org.chromium.content.app.SandboxedProcessService35"
+        android:exported="true"
+        android:externalService="true"
+        android:isolatedProcess="true"
+        android:process=":sandboxed_process35"
+        android:visibleToInstantApps="true">
+    </service>  # DIFF-ANCHOR: c476f324
+    <service  # DIFF-ANCHOR: 75d5304b
+        android:name="org.chromium.content.app.SandboxedProcessService36"
+        android:exported="true"
+        android:externalService="true"
+        android:isolatedProcess="true"
+        android:process=":sandboxed_process36"
+        android:visibleToInstantApps="true">
+    </service>  # DIFF-ANCHOR: 75d5304b
+    <service  # DIFF-ANCHOR: dc6d0617
+        android:name="org.chromium.content.app.SandboxedProcessService37"
+        android:exported="true"
+        android:externalService="true"
+        android:isolatedProcess="true"
+        android:process=":sandboxed_process37"
+        android:visibleToInstantApps="true">
+    </service>  # DIFF-ANCHOR: dc6d0617
+    <service  # DIFF-ANCHOR: e31efe49
+        android:name="org.chromium.content.app.SandboxedProcessService38"
+        android:exported="true"
+        android:externalService="true"
+        android:isolatedProcess="true"
+        android:process=":sandboxed_process38"
+        android:visibleToInstantApps="true">
+    </service>  # DIFF-ANCHOR: e31efe49
+    <service  # DIFF-ANCHOR: 5736507e
+        android:name="org.chromium.content.app.SandboxedProcessService39"
+        android:exported="true"
+        android:externalService="true"
+        android:isolatedProcess="true"
+        android:process=":sandboxed_process39"
+        android:visibleToInstantApps="true">
+    </service>  # DIFF-ANCHOR: 5736507e
+    <service  # DIFF-ANCHOR: a161be24
+        android:name="org.chromium.content.app.SandboxedProcessService4"
+        android:exported="true"
+        android:externalService="true"
+        android:isolatedProcess="true"
+        android:process=":sandboxed_process4"
+        android:visibleToInstantApps="true">
+    </service>  # DIFF-ANCHOR: a161be24
+    <service  # DIFF-ANCHOR: 8e591688
+        android:name="org.chromium.content.app.SandboxedProcessService5"
+        android:exported="true"
+        android:externalService="true"
+        android:isolatedProcess="true"
+        android:process=":sandboxed_process5"
+        android:visibleToInstantApps="true">
+    </service>  # DIFF-ANCHOR: 8e591688
+    <service  # DIFF-ANCHOR: 705141d0
+        android:name="org.chromium.content.app.SandboxedProcessService6"
+        android:exported="true"
+        android:externalService="true"
+        android:isolatedProcess="true"
+        android:process=":sandboxed_process6"
+        android:visibleToInstantApps="true">
+    </service>  # DIFF-ANCHOR: 705141d0
+    <service  # DIFF-ANCHOR: 38ed2189
+        android:name="org.chromium.content.app.SandboxedProcessService7"
+        android:exported="true"
+        android:externalService="true"
+        android:isolatedProcess="true"
+        android:process=":sandboxed_process7"
+        android:visibleToInstantApps="true">
+    </service>  # DIFF-ANCHOR: 38ed2189
+    <service  # DIFF-ANCHOR: aa417956
+        android:name="org.chromium.content.app.SandboxedProcessService8"
+        android:exported="true"
+        android:externalService="true"
+        android:isolatedProcess="true"
+        android:process=":sandboxed_process8"
+        android:visibleToInstantApps="true">
+    </service>  # DIFF-ANCHOR: aa417956
+    <service  # DIFF-ANCHOR: e2f3bbbd
+        android:name="org.chromium.content.app.SandboxedProcessService9"
+        android:exported="true"
+        android:externalService="true"
+        android:isolatedProcess="true"
+        android:process=":sandboxed_process9"
+        android:visibleToInstantApps="true">
+    </service>  # DIFF-ANCHOR: e2f3bbbd
+    <uses-library android:name="android.ext.adservices" android:required="false"/>
+    <uses-static-library android:name="org.chromium.trichromelibrary" android:certDigest="32a2fc74d731105859e5a85df16d95f102d85b22099b8064c5d8915c61dad1e0" android:version="OFFSET=32"/>
+  </application>
+</manifest>
diff --git a/android_webview/expectations/trichrome_webview_64_bundle.AndroidManifest.expected b/android_webview/expectations/trichrome_webview_64_bundle.AndroidManifest.expected
new file mode 100644
index 0000000..ae90fdb2
--- /dev/null
+++ b/android_webview/expectations/trichrome_webview_64_bundle.AndroidManifest.expected
@@ -0,0 +1,499 @@
+<?xml version="1.0" ?>
+<manifest
+    xmlns:android="http://schemas.android.com/apk/res/android"
+    package="com.android.webview"
+    platformBuildVersionCode="34"
+    platformBuildVersionName="14"
+    android:isolatedSplits="true"
+    android:versionCode="OFFSET=34"
+    android:versionName="#.#.#.#">
+  <uses-feature android:name="android.hardware.touchscreen" android:required="false"/>
+  <uses-feature android:name="android.software.leanback" android:required="false"/>
+  <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
+  <uses-permission android:name="android.permission.FOREGROUND_SERVICE"/>
+  <uses-permission android:name="android.permission.FOREGROUND_SERVICE_SPECIAL_USE"/>
+  <uses-permission android:name="android.permission.INTERNET"/>
+  <uses-permission android:name="android.permission.POST_NOTIFICATIONS"/>
+  <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED"/>
+  <uses-sdk android:minSdkVersion="29" android:targetSdkVersion="34"/>
+  <application
+      android:name="org.chromium.android_webview.nonembedded.WebViewApkApplication"
+      android:extractNativeLibs="false"
+      android:icon="@$PACKAGE:drawable/icon_webview"
+      android:label="Android System WebView"
+      android:multiArch="true">
+    <activity  # DIFF-ANCHOR: ea1a94af
+        android:name="com.google.android.gms.common.api.GoogleApiActivity"
+        android:exported="false"
+        android:theme="@android:style/Theme.Translucent.NoTitleBar">
+    </activity>  # DIFF-ANCHOR: ea1a94af
+    <activity  # DIFF-ANCHOR: a4438884
+        android:name="org.chromium.android_webview.devui.MainActivity"
+        android:exported="true"
+        android:icon="@drawable/icon_webview"
+        android:label="WebView DevTools"
+        android:launchMode="singleTask"
+        android:process=":webview_apk"
+        android:taskAffinity="$PACKAGE.org.chromium.android_webview.devui"
+        android:theme="@style/Theme.DevUi.DayNight"
+        android:visibleToInstantApps="true"
+        android:windowSoftInputMode="adjustPan">
+      <intent-filter>  # DIFF-ANCHOR: b80aa336
+        <action android:name="$PACKAGE.SHOW_DEV_UI"/>
+        <category android:name="android.intent.category.DEFAULT"/>
+      </intent-filter>  # DIFF-ANCHOR: b80aa336
+    </activity>  # DIFF-ANCHOR: a4438884
+    <activity  # DIFF-ANCHOR: aeabab17
+        android:name="org.chromium.android_webview.nonembedded.LicenseActivity"
+        android:exported="true"
+        android:label="@string/license_activity_title"
+        android:process=":webview_apk">
+      <intent-filter>  # DIFF-ANCHOR: 23298d3b
+        <action android:name="android.settings.WEBVIEW_LICENSE"/>
+        <category android:name="android.intent.category.DEFAULT"/>
+      </intent-filter>  # DIFF-ANCHOR: 23298d3b
+      <meta-data android:name="com.android.settings.PRIMARY_PROFILE_CONTROLLED" android:value="true"/>
+    </activity>  # DIFF-ANCHOR: aeabab17
+    <activity-alias  # DIFF-ANCHOR: da85c28e
+        android:name="org.chromium.android_webview.SafeModeState"
+        android:enabled="false"
+        android:process=":webview_apk"
+        android:targetActivity="org.chromium.android_webview.devui.MainActivity"
+        android:visibleToInstantApps="true">
+    </activity-alias>  # DIFF-ANCHOR: da85c28e
+    <activity-alias  # DIFF-ANCHOR: b7cc06e9
+        android:name="org.chromium.android_webview.devui.DeveloperModeState"
+        android:enabled="false"
+        android:process=":webview_apk"
+        android:targetActivity="org.chromium.android_webview.devui.MainActivity"
+        android:visibleToInstantApps="true">
+    </activity-alias>  # DIFF-ANCHOR: b7cc06e9
+    <meta-data android:name="$PACKAGE.WebViewLibrary" android:value="libmonochrome_64.so"/>
+    <meta-data android:name="com.google.android.gms.version" android:value="@integer/google_play_services_version"/>
+    <meta-data android:name="org.chromium.content.browser.NUM_PRIVILEGED_SERVICES" android:value="0"/>
+    <meta-data android:name="org.chromium.content.browser.NUM_SANDBOXED_SERVICES" android:value="40"/>
+    <provider  # DIFF-ANCHOR: a5e78e63
+        android:name="org.chromium.android_webview.nonembedded.LicenseContentProvider"
+        android:authorities="$PACKAGE.LicenseContentProvider"
+        android:exported="true"
+        android:grantUriPermissions="true"
+        android:process=":webview_apk">
+    </provider>  # DIFF-ANCHOR: a5e78e63
+    <provider  # DIFF-ANCHOR: bfe37944
+        android:name="org.chromium.android_webview.services.DeveloperModeContentProvider"
+        android:authorities="$PACKAGE.DeveloperModeContentProvider"
+        android:exported="true"
+        android:process=":webview_service"
+        android:visibleToInstantApps="true">
+    </provider>  # DIFF-ANCHOR: bfe37944
+    <provider  # DIFF-ANCHOR: ecfff997
+        android:name="org.chromium.android_webview.services.SafeModeContentProvider"
+        android:authorities="$PACKAGE.SafeModeContentProvider"
+        android:exported="true"
+        android:process=":webview_service"
+        android:visibleToInstantApps="true">
+    </provider>  # DIFF-ANCHOR: ecfff997
+    <provider  # DIFF-ANCHOR: c41df08d
+        android:name="org.chromium.android_webview.services.SafeModeVariationsSeedContentProvider"
+        android:authorities="$PACKAGE.SafeModeVariationsSeedContentProvider"
+        android:exported="true"
+        android:process=":webview_service"
+        android:visibleToInstantApps="true">
+    </provider>  # DIFF-ANCHOR: c41df08d
+    <service  # DIFF-ANCHOR: 1d3bf514
+        android:name="org.chromium.android_webview.js_sandbox.service.JsSandboxService0"
+        android:exported="true"
+        android:externalService="true"
+        android:isolatedProcess="true"
+        android:process=":js_sandboxed_process0"
+        android:visibleToInstantApps="true">
+    </service>  # DIFF-ANCHOR: 1d3bf514
+    <service  # DIFF-ANCHOR: b9ec52c4
+        android:name="org.chromium.android_webview.nonembedded.AwComponentUpdateService"
+        android:exported="false"
+        android:permission="android.permission.BIND_JOB_SERVICE"
+        android:process=":webview_apk">
+    </service>  # DIFF-ANCHOR: b9ec52c4
+    <service  # DIFF-ANCHOR: 3cd6d713
+        android:name="org.chromium.android_webview.services.AwMinidumpUploadJobService"
+        android:exported="true"
+        android:permission="android.permission.BIND_JOB_SERVICE"
+        android:process=":webview_service">
+    </service>  # DIFF-ANCHOR: 3cd6d713
+    <service  # DIFF-ANCHOR: 65cddb26
+        android:name="org.chromium.android_webview.services.AwVariationsSeedFetcher"
+        android:exported="false"
+        android:permission="android.permission.BIND_JOB_SERVICE"
+        android:process=":webview_service">
+    </service>  # DIFF-ANCHOR: 65cddb26
+    <service  # DIFF-ANCHOR: c756cf8d
+        android:name="org.chromium.android_webview.services.ComponentsProviderService"
+        android:exported="true"
+        android:process=":webview_service"
+        android:visibleToInstantApps="true">
+    </service>  # DIFF-ANCHOR: c756cf8d
+    <service  # DIFF-ANCHOR: 5cda9608
+        android:name="org.chromium.android_webview.services.CrashReceiverService"
+        android:exported="true"
+        android:process=":webview_service">
+    </service>  # DIFF-ANCHOR: 5cda9608
+    <service  # DIFF-ANCHOR: adce9ea1
+        android:name="org.chromium.android_webview.services.DeveloperUiService"
+        android:exported="true"
+        android:foregroundServiceType="specialUse"
+        android:process=":webview_service">
+      <property android:name="android.app.PROPERTY_SPECIAL_USE_FGS_SUBTYPE" android:value="debugging"/>
+    </service>  # DIFF-ANCHOR: adce9ea1
+    <service  # DIFF-ANCHOR: eecf2fee
+        android:name="org.chromium.android_webview.services.MetricsBridgeService"
+        android:exported="true"
+        android:process=":webview_service"
+        android:visibleToInstantApps="true">
+    </service>  # DIFF-ANCHOR: eecf2fee
+    <service  # DIFF-ANCHOR: bda8b561
+        android:name="org.chromium.android_webview.services.MetricsUploadService"
+        android:exported="true"
+        android:process=":webview_service"
+        android:visibleToInstantApps="true">
+    </service>  # DIFF-ANCHOR: bda8b561
+    <service  # DIFF-ANCHOR: 47046f1b
+        android:name="org.chromium.android_webview.services.SafeModeService"
+        android:exported="true"
+        android:process=":webview_service">
+    </service>  # DIFF-ANCHOR: 47046f1b
+    <service  # DIFF-ANCHOR: c52936d7
+        android:name="org.chromium.android_webview.services.StartupFeatureMetadataHolder"
+        android:enabled="false"
+        android:exported="true">
+      <meta-data android:name="STARTUP_FEATURE_SET_DATA_DIRECTORY_SUFFIX" android:value="true"/>
+      <meta-data android:name="STARTUP_FEATURE_SET_DIRECTORY_BASE_PATH" android:value="true"/>
+    </service>  # DIFF-ANCHOR: c52936d7
+    <service  # DIFF-ANCHOR: dc926e35
+        android:name="org.chromium.android_webview.services.VariationsSeedServer"
+        android:exported="true"
+        android:process=":webview_service">
+    </service>  # DIFF-ANCHOR: dc926e35
+    <service  # DIFF-ANCHOR: b1e3e8bd
+        android:name="org.chromium.content.app.SandboxedProcessService0"
+        android:exported="true"
+        android:externalService="true"
+        android:isolatedProcess="true"
+        android:process=":sandboxed_process0"
+        android:visibleToInstantApps="true">
+    </service>  # DIFF-ANCHOR: b1e3e8bd
+    <service  # DIFF-ANCHOR: 76d1ccf8
+        android:name="org.chromium.content.app.SandboxedProcessService1"
+        android:exported="true"
+        android:externalService="true"
+        android:isolatedProcess="true"
+        android:process=":sandboxed_process1"
+        android:visibleToInstantApps="true">
+    </service>  # DIFF-ANCHOR: 76d1ccf8
+    <service  # DIFF-ANCHOR: 38b95266
+        android:name="org.chromium.content.app.SandboxedProcessService10"
+        android:exported="true"
+        android:externalService="true"
+        android:isolatedProcess="true"
+        android:process=":sandboxed_process10"
+        android:visibleToInstantApps="true">
+    </service>  # DIFF-ANCHOR: 38b95266
+    <service  # DIFF-ANCHOR: e4a2e4a2
+        android:name="org.chromium.content.app.SandboxedProcessService11"
+        android:exported="true"
+        android:externalService="true"
+        android:isolatedProcess="true"
+        android:process=":sandboxed_process11"
+        android:visibleToInstantApps="true">
+    </service>  # DIFF-ANCHOR: e4a2e4a2
+    <service  # DIFF-ANCHOR: d9b2ffba
+        android:name="org.chromium.content.app.SandboxedProcessService12"
+        android:exported="true"
+        android:externalService="true"
+        android:isolatedProcess="true"
+        android:process=":sandboxed_process12"
+        android:visibleToInstantApps="true">
+    </service>  # DIFF-ANCHOR: d9b2ffba
+    <service  # DIFF-ANCHOR: b41bb17d
+        android:name="org.chromium.content.app.SandboxedProcessService13"
+        android:exported="true"
+        android:externalService="true"
+        android:isolatedProcess="true"
+        android:process=":sandboxed_process13"
+        android:visibleToInstantApps="true">
+    </service>  # DIFF-ANCHOR: b41bb17d
+    <service  # DIFF-ANCHOR: aec0ea21
+        android:name="org.chromium.content.app.SandboxedProcessService14"
+        android:exported="true"
+        android:externalService="true"
+        android:isolatedProcess="true"
+        android:process=":sandboxed_process14"
+        android:visibleToInstantApps="true">
+    </service>  # DIFF-ANCHOR: aec0ea21
+    <service  # DIFF-ANCHOR: cf88a5e5
+        android:name="org.chromium.content.app.SandboxedProcessService15"
+        android:exported="true"
+        android:externalService="true"
+        android:isolatedProcess="true"
+        android:process=":sandboxed_process15"
+        android:visibleToInstantApps="true">
+    </service>  # DIFF-ANCHOR: cf88a5e5
+    <service  # DIFF-ANCHOR: 7d85889d
+        android:name="org.chromium.content.app.SandboxedProcessService16"
+        android:exported="true"
+        android:externalService="true"
+        android:isolatedProcess="true"
+        android:process=":sandboxed_process16"
+        android:visibleToInstantApps="true">
+    </service>  # DIFF-ANCHOR: 7d85889d
+    <service  # DIFF-ANCHOR: dae26ed4
+        android:name="org.chromium.content.app.SandboxedProcessService17"
+        android:exported="true"
+        android:externalService="true"
+        android:isolatedProcess="true"
+        android:process=":sandboxed_process17"
+        android:visibleToInstantApps="true">
+    </service>  # DIFF-ANCHOR: dae26ed4
+    <service  # DIFF-ANCHOR: 2c6cf029
+        android:name="org.chromium.content.app.SandboxedProcessService18"
+        android:exported="true"
+        android:externalService="true"
+        android:isolatedProcess="true"
+        android:process=":sandboxed_process18"
+        android:visibleToInstantApps="true">
+    </service>  # DIFF-ANCHOR: 2c6cf029
+    <service  # DIFF-ANCHOR: 1d2f0988
+        android:name="org.chromium.content.app.SandboxedProcessService19"
+        android:exported="true"
+        android:externalService="true"
+        android:isolatedProcess="true"
+        android:process=":sandboxed_process19"
+        android:visibleToInstantApps="true">
+    </service>  # DIFF-ANCHOR: 1d2f0988
+    <service  # DIFF-ANCHOR: 4a39041b
+        android:name="org.chromium.content.app.SandboxedProcessService2"
+        android:exported="true"
+        android:externalService="true"
+        android:isolatedProcess="true"
+        android:process=":sandboxed_process2"
+        android:visibleToInstantApps="true">
+    </service>  # DIFF-ANCHOR: 4a39041b
+    <service  # DIFF-ANCHOR: 073533bf
+        android:name="org.chromium.content.app.SandboxedProcessService20"
+        android:exported="true"
+        android:externalService="true"
+        android:isolatedProcess="true"
+        android:process=":sandboxed_process20"
+        android:visibleToInstantApps="true">
+    </service>  # DIFF-ANCHOR: 073533bf
+    <service  # DIFF-ANCHOR: d24da41d
+        android:name="org.chromium.content.app.SandboxedProcessService21"
+        android:exported="true"
+        android:externalService="true"
+        android:isolatedProcess="true"
+        android:process=":sandboxed_process21"
+        android:visibleToInstantApps="true">
+    </service>  # DIFF-ANCHOR: d24da41d
+    <service  # DIFF-ANCHOR: 594d8b32
+        android:name="org.chromium.content.app.SandboxedProcessService22"
+        android:exported="true"
+        android:externalService="true"
+        android:isolatedProcess="true"
+        android:process=":sandboxed_process22"
+        android:visibleToInstantApps="true">
+    </service>  # DIFF-ANCHOR: 594d8b32
+    <service  # DIFF-ANCHOR: 5528c0c3
+        android:name="org.chromium.content.app.SandboxedProcessService23"
+        android:exported="true"
+        android:externalService="true"
+        android:isolatedProcess="true"
+        android:process=":sandboxed_process23"
+        android:visibleToInstantApps="true">
+    </service>  # DIFF-ANCHOR: 5528c0c3
+    <service  # DIFF-ANCHOR: b7ab2ba3
+        android:name="org.chromium.content.app.SandboxedProcessService24"
+        android:exported="true"
+        android:externalService="true"
+        android:isolatedProcess="true"
+        android:process=":sandboxed_process24"
+        android:visibleToInstantApps="true">
+    </service>  # DIFF-ANCHOR: b7ab2ba3
+    <service  # DIFF-ANCHOR: cec6cb64
+        android:name="org.chromium.content.app.SandboxedProcessService25"
+        android:exported="true"
+        android:externalService="true"
+        android:isolatedProcess="true"
+        android:process=":sandboxed_process25"
+        android:visibleToInstantApps="true">
+    </service>  # DIFF-ANCHOR: cec6cb64
+    <service  # DIFF-ANCHOR: 5b4a00fe
+        android:name="org.chromium.content.app.SandboxedProcessService26"
+        android:exported="true"
+        android:externalService="true"
+        android:isolatedProcess="true"
+        android:process=":sandboxed_process26"
+        android:visibleToInstantApps="true">
+    </service>  # DIFF-ANCHOR: 5b4a00fe
+    <service  # DIFF-ANCHOR: ad49d203
+        android:name="org.chromium.content.app.SandboxedProcessService27"
+        android:exported="true"
+        android:externalService="true"
+        android:isolatedProcess="true"
+        android:process=":sandboxed_process27"
+        android:visibleToInstantApps="true">
+    </service>  # DIFF-ANCHOR: ad49d203
+    <service  # DIFF-ANCHOR: 573298e9
+        android:name="org.chromium.content.app.SandboxedProcessService28"
+        android:exported="true"
+        android:externalService="true"
+        android:isolatedProcess="true"
+        android:process=":sandboxed_process28"
+        android:visibleToInstantApps="true">
+    </service>  # DIFF-ANCHOR: 573298e9
+    <service  # DIFF-ANCHOR: 79897b32
+        android:name="org.chromium.content.app.SandboxedProcessService29"
+        android:exported="true"
+        android:externalService="true"
+        android:isolatedProcess="true"
+        android:process=":sandboxed_process29"
+        android:visibleToInstantApps="true">
+    </service>  # DIFF-ANCHOR: 79897b32
+    <service  # DIFF-ANCHOR: 84335864
+        android:name="org.chromium.content.app.SandboxedProcessService3"
+        android:exported="true"
+        android:externalService="true"
+        android:isolatedProcess="true"
+        android:process=":sandboxed_process3"
+        android:visibleToInstantApps="true">
+    </service>  # DIFF-ANCHOR: 84335864
+    <service  # DIFF-ANCHOR: c4bd371e
+        android:name="org.chromium.content.app.SandboxedProcessService30"
+        android:exported="true"
+        android:externalService="true"
+        android:isolatedProcess="true"
+        android:process=":sandboxed_process30"
+        android:visibleToInstantApps="true">
+    </service>  # DIFF-ANCHOR: c4bd371e
+    <service  # DIFF-ANCHOR: 394a9fd0
+        android:name="org.chromium.content.app.SandboxedProcessService31"
+        android:exported="true"
+        android:externalService="true"
+        android:isolatedProcess="true"
+        android:process=":sandboxed_process31"
+        android:visibleToInstantApps="true">
+    </service>  # DIFF-ANCHOR: 394a9fd0
+    <service  # DIFF-ANCHOR: b811afb8
+        android:name="org.chromium.content.app.SandboxedProcessService32"
+        android:exported="true"
+        android:externalService="true"
+        android:isolatedProcess="true"
+        android:process=":sandboxed_process32"
+        android:visibleToInstantApps="true">
+    </service>  # DIFF-ANCHOR: b811afb8
+    <service  # DIFF-ANCHOR: 2811ddd3
+        android:name="org.chromium.content.app.SandboxedProcessService33"
+        android:exported="true"
+        android:externalService="true"
+        android:isolatedProcess="true"
+        android:process=":sandboxed_process33"
+        android:visibleToInstantApps="true">
+    </service>  # DIFF-ANCHOR: 2811ddd3
+    <service  # DIFF-ANCHOR: 73ae1688
+        android:name="org.chromium.content.app.SandboxedProcessService34"
+        android:exported="true"
+        android:externalService="true"
+        android:isolatedProcess="true"
+        android:process=":sandboxed_process34"
+        android:visibleToInstantApps="true">
+    </service>  # DIFF-ANCHOR: 73ae1688
+    <service  # DIFF-ANCHOR: c476f324
+        android:name="org.chromium.content.app.SandboxedProcessService35"
+        android:exported="true"
+        android:externalService="true"
+        android:isolatedProcess="true"
+        android:process=":sandboxed_process35"
+        android:visibleToInstantApps="true">
+    </service>  # DIFF-ANCHOR: c476f324
+    <service  # DIFF-ANCHOR: 75d5304b
+        android:name="org.chromium.content.app.SandboxedProcessService36"
+        android:exported="true"
+        android:externalService="true"
+        android:isolatedProcess="true"
+        android:process=":sandboxed_process36"
+        android:visibleToInstantApps="true">
+    </service>  # DIFF-ANCHOR: 75d5304b
+    <service  # DIFF-ANCHOR: dc6d0617
+        android:name="org.chromium.content.app.SandboxedProcessService37"
+        android:exported="true"
+        android:externalService="true"
+        android:isolatedProcess="true"
+        android:process=":sandboxed_process37"
+        android:visibleToInstantApps="true">
+    </service>  # DIFF-ANCHOR: dc6d0617
+    <service  # DIFF-ANCHOR: e31efe49
+        android:name="org.chromium.content.app.SandboxedProcessService38"
+        android:exported="true"
+        android:externalService="true"
+        android:isolatedProcess="true"
+        android:process=":sandboxed_process38"
+        android:visibleToInstantApps="true">
+    </service>  # DIFF-ANCHOR: e31efe49
+    <service  # DIFF-ANCHOR: 5736507e
+        android:name="org.chromium.content.app.SandboxedProcessService39"
+        android:exported="true"
+        android:externalService="true"
+        android:isolatedProcess="true"
+        android:process=":sandboxed_process39"
+        android:visibleToInstantApps="true">
+    </service>  # DIFF-ANCHOR: 5736507e
+    <service  # DIFF-ANCHOR: a161be24
+        android:name="org.chromium.content.app.SandboxedProcessService4"
+        android:exported="true"
+        android:externalService="true"
+        android:isolatedProcess="true"
+        android:process=":sandboxed_process4"
+        android:visibleToInstantApps="true">
+    </service>  # DIFF-ANCHOR: a161be24
+    <service  # DIFF-ANCHOR: 8e591688
+        android:name="org.chromium.content.app.SandboxedProcessService5"
+        android:exported="true"
+        android:externalService="true"
+        android:isolatedProcess="true"
+        android:process=":sandboxed_process5"
+        android:visibleToInstantApps="true">
+    </service>  # DIFF-ANCHOR: 8e591688
+    <service  # DIFF-ANCHOR: 705141d0
+        android:name="org.chromium.content.app.SandboxedProcessService6"
+        android:exported="true"
+        android:externalService="true"
+        android:isolatedProcess="true"
+        android:process=":sandboxed_process6"
+        android:visibleToInstantApps="true">
+    </service>  # DIFF-ANCHOR: 705141d0
+    <service  # DIFF-ANCHOR: 38ed2189
+        android:name="org.chromium.content.app.SandboxedProcessService7"
+        android:exported="true"
+        android:externalService="true"
+        android:isolatedProcess="true"
+        android:process=":sandboxed_process7"
+        android:visibleToInstantApps="true">
+    </service>  # DIFF-ANCHOR: 38ed2189
+    <service  # DIFF-ANCHOR: aa417956
+        android:name="org.chromium.content.app.SandboxedProcessService8"
+        android:exported="true"
+        android:externalService="true"
+        android:isolatedProcess="true"
+        android:process=":sandboxed_process8"
+        android:visibleToInstantApps="true">
+    </service>  # DIFF-ANCHOR: aa417956
+    <service  # DIFF-ANCHOR: e2f3bbbd
+        android:name="org.chromium.content.app.SandboxedProcessService9"
+        android:exported="true"
+        android:externalService="true"
+        android:isolatedProcess="true"
+        android:process=":sandboxed_process9"
+        android:visibleToInstantApps="true">
+    </service>  # DIFF-ANCHOR: e2f3bbbd
+    <uses-library android:name="android.ext.adservices" android:required="false"/>
+    <uses-static-library android:name="org.chromium.trichromelibrary" android:certDigest="32a2fc74d731105859e5a85df16d95f102d85b22099b8064c5d8915c61dad1e0" android:version="OFFSET=34"/>
+  </application>
+</manifest>
diff --git a/ash/BUILD.gn b/ash/BUILD.gn
index 297287e5..8196862 100644
--- a/ash/BUILD.gn
+++ b/ash/BUILD.gn
@@ -2749,8 +2749,6 @@
     "wm/window_properties.h",
     "wm/window_resizer.cc",
     "wm/window_resizer.h",
-    "wm/window_restore/informed_restore_dialog.cc",
-    "wm/window_restore/informed_restore_dialog.h",
     "wm/window_restore/pine_contents_view.cc",
     "wm/window_restore/pine_contents_view.h",
     "wm/window_restore/window_restore_controller.cc",
@@ -3875,7 +3873,6 @@
     "wm/window_positioner_unittest.cc",
     "wm/window_positioning_utils_unittest.cc",
     "wm/window_preview_view_unittest.cc",
-    "wm/window_restore/informed_restore_dialog_unittest.cc",
     "wm/window_restore/pine_unittest.cc",
     "wm/window_restore/window_restore_controller_unittest.cc",
     "wm/window_state_unittest.cc",
diff --git a/ash/constants/ash_features.cc b/ash/constants/ash_features.cc
index 8005f937..904e635 100644
--- a/ash/constants/ash_features.cc
+++ b/ash/constants/ash_features.cc
@@ -180,12 +180,6 @@
              "AssistMultiWordExpanded",
              base::FEATURE_DISABLED_BY_DEFAULT);
 
-// Controls enabling / disabling the orca feature from the feature management
-// module.
-BASE_FEATURE(kFeatureManagementOrca,
-             "FeatureManagementOrca",
-             base::FEATURE_DISABLED_BY_DEFAULT);
-
 BASE_FEATURE(kAssistantNativeIcons,
              "AssistantNativeIcons",
              base::FEATURE_ENABLED_BY_DEFAULT);
@@ -2194,10 +2188,6 @@
              "PolicyProvidedTrustAnchorsAllowedAtLockScreen",
              base::FEATURE_ENABLED_BY_DEFAULT);
 
-BASE_FEATURE(kPostLoginGlanceables,
-             "PostLoginGlanceables",
-             base::FEATURE_DISABLED_BY_DEFAULT);
-
 // Enables or disables the preference of using constant frame rate for camera
 // when streaming.
 BASE_FEATURE(kPreferConstantFrameRate,
@@ -3918,12 +3908,6 @@
          base::FeatureList::IsEnabled(kOobeDisplaySize);
 }
 
-bool IsOrcaEnabled() {
-  return base::FeatureList::IsEnabled(chromeos::features::kOrcaDogfood) ||
-         (base::FeatureList::IsEnabled(chromeos::features::kOrca) &&
-          base::FeatureList::IsEnabled(kFeatureManagementOrca));
-}
-
 bool IsOsFeedbackDialogEnabled() {
   return base::FeatureList::IsEnabled(kOsFeedbackDialog);
 }
@@ -4056,10 +4040,6 @@
   return base::FeatureList::IsEnabled(kPipTuck);
 }
 
-bool ArePostLoginGlanceablesEnabled() {
-  return base::FeatureList::IsEnabled(kPostLoginGlanceables);
-}
-
 bool IsPrinterSettingsPrinterStatusEnabled() {
   return base::FeatureList::IsEnabled(kPrinterSettingsPrinterStatus);
 }
diff --git a/ash/constants/ash_features.h b/ash/constants/ash_features.h
index 0e1beea..2a91e39 100644
--- a/ash/constants/ash_features.h
+++ b/ash/constants/ash_features.h
@@ -590,7 +590,6 @@
 BASE_DECLARE_FEATURE(kOneDriveUploadImmediateReauth);
 COMPONENT_EXPORT(ASH_CONSTANTS)
 BASE_DECLARE_FEATURE(kSearchCustomizableShortcutsInLauncher);
-COMPONENT_EXPORT(ASH_CONSTANTS) BASE_DECLARE_FEATURE(kFeatureManagementOrca);
 COMPONENT_EXPORT(ASH_CONSTANTS) BASE_DECLARE_FEATURE(kOobeChoobe);
 COMPONENT_EXPORT(ASH_CONSTANTS) BASE_DECLARE_FEATURE(kOobeCrosEvents);
 COMPONENT_EXPORT(ASH_CONSTANTS) BASE_DECLARE_FEATURE(kOobeDrivePinning);
@@ -685,7 +684,6 @@
 COMPONENT_EXPORT(ASH_CONSTANTS) BASE_DECLARE_FEATURE(kPipTuck);
 COMPONENT_EXPORT(ASH_CONSTANTS)
 BASE_DECLARE_FEATURE(kPolicyProvidedTrustAnchorsAllowedAtLockScreen);
-COMPONENT_EXPORT(ASH_CONSTANTS) BASE_DECLARE_FEATURE(kPostLoginGlanceables);
 COMPONENT_EXPORT(ASH_CONSTANTS) BASE_DECLARE_FEATURE(kPreferConstantFrameRate);
 COMPONENT_EXPORT(ASH_CONSTANTS)
 BASE_DECLARE_FEATURE(kPrinterSettingsPrinterStatus);
@@ -1128,7 +1126,6 @@
 COMPONENT_EXPORT(ASH_CONSTANTS) bool IsBootAnimationEnabled();
 COMPONENT_EXPORT(ASH_CONSTANTS) bool IsOobeSkipAssistantEnabled();
 COMPONENT_EXPORT(ASH_CONSTANTS) bool IsOobeSoftwareUpdateEnabled();
-COMPONENT_EXPORT(ASH_CONSTANTS) bool IsOrcaEnabled();
 COMPONENT_EXPORT(ASH_CONSTANTS) bool IsKioskEnrollmentInOobeEnabled();
 COMPONENT_EXPORT(ASH_CONSTANTS) bool IsKioskLoginScreenEnabled();
 COMPONENT_EXPORT(ASH_CONSTANTS)
@@ -1174,7 +1171,6 @@
 COMPONENT_EXPORT(ASH_CONSTANTS) bool IsPipPinchToResizeEnabled();
 COMPONENT_EXPORT(ASH_CONSTANTS) bool IsPipTiltEnabled();
 COMPONENT_EXPORT(ASH_CONSTANTS) bool IsPipTuckEnabled();
-COMPONENT_EXPORT(ASH_CONSTANTS) bool ArePostLoginGlanceablesEnabled();
 COMPONENT_EXPORT(ASH_CONSTANTS) bool IsPrivacyIndicatorsEnabled();
 COMPONENT_EXPORT(ASH_CONSTANTS) bool IsLocalPrinterObservingEnabled();
 COMPONENT_EXPORT(ASH_CONSTANTS) bool IsPrinterSettingsPrinterStatusEnabled();
diff --git a/ash/game_dashboard/game_dashboard_context_test_api.cc b/ash/game_dashboard/game_dashboard_context_test_api.cc
index 0c3bd90b..1a7f72b 100644
--- a/ash/game_dashboard/game_dashboard_context_test_api.cc
+++ b/ash/game_dashboard/game_dashboard_context_test_api.cc
@@ -15,6 +15,7 @@
 #include "ash/public/cpp/ash_view_ids.h"
 #include "ash/style/icon_button.h"
 #include "ash/style/pill_button.h"
+#include "ash/system/toast/anchored_nudge.h"
 #include "ash/system/unified/feature_tile.h"
 #include "base/timer/timer.h"
 #include "base/types/cxx23_to_underlying.h"
@@ -129,6 +130,13 @@
       GetMainMenuViewById(VIEW_ID_GD_GENERAL_SETTINGS_BUTTON));
 }
 
+AnchoredNudge* GameDashboardContextTestApi::GetGameControlsSetupNudge() {
+  if (auto* main_menu = GetMainMenuView()) {
+    return main_menu->GetGameControlsSetupNudgeForTesting();
+  }
+  return nullptr;
+}
+
 void GameDashboardContextTestApi::OpenTheMainMenu() {
   ASSERT_FALSE(GetMainMenuView()) << "The main menu view is already open.";
   ASSERT_FALSE(GetMainMenuWidget()) << "The main menu widget is already open.";
diff --git a/ash/game_dashboard/game_dashboard_context_test_api.h b/ash/game_dashboard/game_dashboard_context_test_api.h
index 1698163..0a00a1fe 100644
--- a/ash/game_dashboard/game_dashboard_context_test_api.h
+++ b/ash/game_dashboard/game_dashboard_context_test_api.h
@@ -28,6 +28,7 @@
 
 namespace ash {
 
+class AnchoredNudge;
 class FeatureTile;
 class GameDashboardButton;
 class GameDashboardMainMenuView;
@@ -71,6 +72,9 @@
   IconButton* GetMainMenuHelpButton();
   IconButton* GetMainMenuSettingsButton();
 
+  // Returns the Game Controls setup nudge.
+  AnchoredNudge* GetGameControlsSetupNudge();
+
   // Opens the main menu.
   // Before opening the main menu, verifies that the main menu is closed.
   // After opening the main menu, verifies it opened and waits for the thread to
diff --git a/ash/game_dashboard/game_dashboard_context_unittest.cc b/ash/game_dashboard/game_dashboard_context_unittest.cc
index 4ff0e9d4..e887608 100644
--- a/ash/game_dashboard/game_dashboard_context_unittest.cc
+++ b/ash/game_dashboard/game_dashboard_context_unittest.cc
@@ -29,6 +29,7 @@
 #include "ash/style/icon_button.h"
 #include "ash/style/pill_button.h"
 #include "ash/style/switch.h"
+#include "ash/system/toast/anchored_nudge_manager_impl.h"
 #include "ash/system/unified/feature_tile.h"
 #include "ash/wm/overview/overview_controller.h"
 #include "ash/wm/overview/overview_observer.h"
@@ -504,6 +505,22 @@
       /*setup_exists=*/false);
 }
 
+TEST_F(GameDashboardContextTest, GameControlsSetupNudge) {
+  CreateGameWindow(/*is_arc_window=*/true);
+
+  game_window_->SetProperty(
+      kArcGameControlsFlagsKey,
+      static_cast<ArcGameControlsFlag>(
+          ArcGameControlsFlag::kKnown | ArcGameControlsFlag::kAvailable |
+          ArcGameControlsFlag::kEmpty | ArcGameControlsFlag::kEnabled));
+
+  test_api_->OpenTheMainMenu();
+  EXPECT_TRUE(test_api_->GetGameControlsSetupNudge());
+  task_environment()->FastForwardBy(
+      AnchoredNudgeManagerImpl::kNudgeMediumDuration);
+  EXPECT_FALSE(test_api_->GetGameControlsSetupNudge());
+}
+
 // Verifies Game Controls button logics.
 TEST_F(GameDashboardContextTest, GameControlsMenuFunctions) {
   CreateGameWindow(/*is_arc_window=*/true);
diff --git a/ash/game_dashboard/game_dashboard_main_menu_view.cc b/ash/game_dashboard/game_dashboard_main_menu_view.cc
index 67171dd..2e776c64 100644
--- a/ash/game_dashboard/game_dashboard_main_menu_view.cc
+++ b/ash/game_dashboard/game_dashboard_main_menu_view.cc
@@ -810,10 +810,24 @@
   // TODO(b/274690042): Replace it with localized strings.
   nudge_data.title_text = u"This game uses your touchscreen";
   nudge_data.arrow = views::BubbleBorder::LEFT_CENTER;
+  nudge_data.background_color_id = cros_tokens::kCrosSysBaseHighlight;
+  nudge_data.image_background_color_id = cros_tokens::kCrosSysOnBaseHighlight;
+  nudge_data.duration = NudgeDuration::kMediumDuration;
 
   Shell::Get()->anchored_nudge_manager()->Show(nudge_data);
 }
 
+AnchoredNudge*
+GameDashboardMainMenuView::GetGameControlsSetupNudgeForTesting() {
+  if (Shell::Get()->anchored_nudge_manager()->IsNudgeShown(kSetupNudgeId)) {
+    return Shell::Get()
+        ->anchored_nudge_manager()
+        ->GetShownNudgeForTest(  // IN-TEST
+            kSetupNudgeId);
+  }
+  return nullptr;
+}
+
 BEGIN_METADATA(GameDashboardMainMenuView, views::BubbleDialogDelegateView)
 END_METADATA
 
diff --git a/ash/game_dashboard/game_dashboard_main_menu_view.h b/ash/game_dashboard/game_dashboard_main_menu_view.h
index d743b02..22c5045 100644
--- a/ash/game_dashboard/game_dashboard_main_menu_view.h
+++ b/ash/game_dashboard/game_dashboard_main_menu_view.h
@@ -14,6 +14,7 @@
 
 namespace ash {
 
+class AnchoredNudge;
 class FeatureTile;
 class GameDashboardContext;
 class PillButton;
@@ -126,6 +127,9 @@
   // Shows education nudge for `game_controls_setup_button_`.
   void ShowNudgeForSetupButton();
 
+  // For test to access the nudge ID in the anonymous namespace.
+  AnchoredNudge* GetGameControlsSetupNudgeForTesting();
+
   // Allows this class to access `GameDashboardContext` owned functions/objects.
   const raw_ptr<GameDashboardContext, ExperimentalAsh> context_;
 
diff --git a/ash/shelf/shelf_app_button.cc b/ash/shelf/shelf_app_button.cc
index b508443..d0c8a65 100644
--- a/ash/shelf/shelf_app_button.cc
+++ b/ash/shelf/shelf_app_button.cc
@@ -553,28 +553,31 @@
 
 gfx::ImageSkia ShelfAppButton::GetIconImage(float icon_scale) const {
   gfx::ImageSkia icon_image;
-  const ui::ImageModel& image_model = !fallback_icon_image_model_.IsEmpty()
-                                          ? fallback_icon_image_model_
-                                          : icon_image_model_;
 
-    auto* color_provider = GetColorProvider();
-    if (!color_provider) {
-      color_provider = shelf_view_->GetColorProvider();
-    }
-    if (image_model.IsImage()) {
-      icon_image = image_model.GetImage().AsImageSkia();
-    } else if (image_model.IsVectorIcon()) {
-      icon_image = ui::ThemedVectorIcon(image_model.GetVectorIcon())
-                       .GetImageSkia(color_provider);
-    }
-    const gfx::Size preferred_size =
-        GetPreferredIconSize(image_model, icon_scale);
-    if (icon_image.size() != preferred_size) {
-      icon_image = gfx::ImageSkiaOperations::CreateResizedImage(
-          icon_image, skia::ImageOperations::RESIZE_BEST, preferred_size);
-    }
+  bool use_fallback_icon =
+      force_fallback_icon_ || !fallback_icon_image_model_.IsEmpty();
 
-  if (is_promise_app_ || force_fallback_icon_) {
+  const ui::ImageModel& image_model =
+      use_fallback_icon ? fallback_icon_image_model_ : icon_image_model_;
+
+  auto* color_provider = GetColorProvider();
+  if (!color_provider) {
+    color_provider = shelf_view_->GetColorProvider();
+  }
+  if (image_model.IsImage()) {
+    icon_image = image_model.GetImage().AsImageSkia();
+  } else if (image_model.IsVectorIcon()) {
+    icon_image = ui::ThemedVectorIcon(image_model.GetVectorIcon())
+                     .GetImageSkia(color_provider);
+  }
+  const gfx::Size preferred_size =
+      GetPreferredIconSize(image_model, icon_scale);
+  if (icon_image.size() != preferred_size) {
+    icon_image = gfx::ImageSkiaOperations::CreateResizedImage(
+        icon_image, skia::ImageOperations::RESIZE_BEST, preferred_size);
+  }
+
+  if (is_promise_app_ || use_fallback_icon) {
     icon_image = gfx::ImageSkiaOperations::CreateImageWithRoundRectClip(
         preferred_size.width(), icon_image);
   }
diff --git a/ash/shelf/shelf_layout_manager_pixeltest.cc b/ash/shelf/shelf_layout_manager_pixeltest.cc
index 82a431af..462f9343 100644
--- a/ash/shelf/shelf_layout_manager_pixeltest.cc
+++ b/ash/shelf/shelf_layout_manager_pixeltest.cc
@@ -55,7 +55,7 @@
   shelf->SetAutoHideBehavior(ShelfAutoHideBehavior::kNever);
   EXPECT_TRUE(GetPixelDiffer()->CompareUiComponentsOnPrimaryScreen(
       "shelf_no_auto_hide",
-      /*revision_number=*/10, shelf->GetWindow(), shelf->hotseat_widget()));
+      /*revision_number=*/11, shelf->GetWindow(), shelf->hotseat_widget()));
 
   // When the auto-hide is set and a window is shown fullscreen, the shelf
   // should not be showing on the screen.
@@ -72,7 +72,7 @@
 
   EXPECT_TRUE(GetPixelDiffer()->CompareUiComponentsOnPrimaryScreen(
       "shelf_show_with_auto_hide",
-      /*revision_number=*/9, shelf->GetWindow(), shelf->hotseat_widget()));
+      /*revision_number=*/10, shelf->GetWindow(), shelf->hotseat_widget()));
 }
 
 }  // namespace ash
diff --git a/ash/system/focus_mode/focus_mode_chip_carousel.cc b/ash/system/focus_mode/focus_mode_chip_carousel.cc
index 68d433b..0283f51 100644
--- a/ash/system/focus_mode/focus_mode_chip_carousel.cc
+++ b/ash/system/focus_mode/focus_mode_chip_carousel.cc
@@ -167,6 +167,9 @@
             base::UTF8ToUTF16(task->title)));
     SetupChip(chip, /*first=*/(i == 0));
   }
+
+  // Scroll back to the beginning after repopulating the carousel.
+  scroll_view_->ScrollToOffset(gfx::PointF(0, 0));
 }
 
 void FocusModeChipCarousel::UpdateGradient() {
diff --git a/ash/system/focus_mode/focus_mode_chip_carousel.h b/ash/system/focus_mode/focus_mode_chip_carousel.h
index 580db2b5..a9a9682d 100644
--- a/ash/system/focus_mode/focus_mode_chip_carousel.h
+++ b/ash/system/focus_mode/focus_mode_chip_carousel.h
@@ -36,7 +36,8 @@
   ~FocusModeChipCarousel() override;
 
   // TODO(b/305085993): Update setting logic once API is integrated.
-  // Updates the carousel of task chips from the first 5 tasks in `tasks`.
+  // Updates the carousel of task chips from the first 5 tasks in `tasks` and
+  // scrolls the carousel back to the beginning.
   void SetTasks(const std::vector<const api::Task*>& tasks);
 
   // Returns whether the carousel is currently displaying any tasks.
diff --git a/ash/system/status_area_widget_delegate.cc b/ash/system/status_area_widget_delegate.cc
index c99b85eda..428eb58 100644
--- a/ash/system/status_area_widget_delegate.cc
+++ b/ash/system/status_area_widget_delegate.cc
@@ -39,6 +39,7 @@
 constexpr int kPaddingBetweenTrayItems = 8;
 constexpr int kPaddingBetweenTrayItemsTabletMode = 6;
 constexpr int kPaddingBetweenPrimaryTraySetItems = kPaddingBetweenTrayItems - 4;
+constexpr int kPaddingBetweenPrimaryTraySetItemsInApp = -4;
 
 class StatusAreaWidgetDelegateAnimationSettings
     : public ui::ScopedLayerAnimationSettings {
@@ -88,11 +89,12 @@
 
 int PaddingBetweenTrayItems(const bool is_in_primary_tray_set) {
   if (is_in_primary_tray_set) {
+    // In in-app mode, a negative padding is set. This is because it is set to 6
+    // in `TrayContainer`, and this is easier then rewriting TrayContainer to
+    // react to `ShelfLayoutManager` state changes. See https://b/310272268.
     return (ShelfConfig::Get()->in_tablet_mode() &&
             ShelfConfig::Get()->is_in_app())
-               ? kPaddingBetweenTrayItemsTabletMode -
-                     2 * ShelfConfig::Get()
-                             ->in_app_control_button_height_inset()
+               ? kPaddingBetweenPrimaryTraySetItemsInApp
                : kPaddingBetweenPrimaryTraySetItems;
   }
 
@@ -270,6 +272,8 @@
 
 void StatusAreaWidgetDelegate::SetBorderOnChild(views::View* child,
                                                 bool is_child_on_edge) {
+  // TODO(https://b/310272268): Setting padding both here and in `TrayContainer`
+  // is a bit confusing. This is fragile, and we should rewrite this.
   const int vertical_padding =
       (ShelfConfig::Get()->shelf_size() - kTrayItemSize) / 2;
 
diff --git a/ash/webui/common/resources/cr_elements/BUILD.gn b/ash/webui/common/resources/cr_elements/BUILD.gn
index ad30c86..f495ab62 100644
--- a/ash/webui/common/resources/cr_elements/BUILD.gn
+++ b/ash/webui/common/resources/cr_elements/BUILD.gn
@@ -11,11 +11,20 @@
   grd_prefix = "ash_common_cr_elements"
 
   web_component_files = [
+    "cr_button/cr_button.ts",
     "cr_checkbox/cr_checkbox.ts",
+    "cr_dialog/cr_dialog.ts",
+    "cr_expand_button/cr_expand_button.ts",
+    "cr_icon_button/cr_icon_button.ts",
+    "cr_input/cr_input.ts",
     "cr_toast/cr_toast.ts",
     "cr_toast/cr_toast_manager.ts",
   ]
 
+  css_files = [ "cr_input/cr_input_style.css" ]
+
+  icons_html_files = [ "icons.html" ]
+
   ts_out_dir =
       "$root_gen_dir/ash/webui/common/resources/preprocessed/cr_elements"
   ts_composite = true
@@ -24,6 +33,8 @@
     "//ui/webui/resources/cr_elements:build_ts",
     "//ui/webui/resources/js:build_ts",
   ]
+  ts_definitions = [ "//tools/typescript/definitions/pending.d.ts" ]
+
   generate_grdp = true
   grd_resource_path_prefix = "ash/common/cr_elements"
 }
diff --git a/ash/webui/common/resources/cr_elements/cr_button/cr_button.html b/ash/webui/common/resources/cr_elements/cr_button/cr_button.html
new file mode 100644
index 0000000..2adbb64
--- /dev/null
+++ b/ash/webui/common/resources/cr_elements/cr_button/cr_button.html
@@ -0,0 +1,367 @@
+<style include="cr-hidden-style">
+  :host {
+    --active-shadow-rgb: var(--google-grey-800-rgb);
+    --active-shadow-action-rgb: var(--google-blue-500-rgb);
+    --bg-action: var(--google-blue-600);
+    --border-color: var(--google-grey-300);
+    --disabled-bg-action: var(--google-grey-100);
+    --disabled-bg: white;
+    --disabled-border-color: var(--google-grey-100);
+    --disabled-text-color: var(--google-grey-600);
+    --focus-shadow-color: rgba(var(--google-blue-600-rgb), .4);
+    --hover-bg-action: rgba(var(--google-blue-600-rgb), .9);
+    --hover-bg-color: rgba(var(--google-blue-500-rgb), .04);
+    --hover-border-color: var(--google-blue-100);
+    --hover-shadow-action-rgb: var(--google-blue-500-rgb);
+    --ink-color-action: white;
+    /* Blue-ish color used either as a background or as a text color,
+     * depending on the type of button. */
+    --ink-color: var(--google-blue-600);
+    --ripple-opacity-action: .32;
+    --ripple-opacity: .1;
+    --text-color-action: white;
+    --text-color: var(--google-blue-600);
+  }
+
+  @media (prefers-color-scheme: dark) {
+    :host {
+      /* Only in dark. */
+      --active-bg: black linear-gradient(rgba(255, 255, 255, .06),
+                                         rgba(255, 255, 255, .06));
+      --active-shadow-rgb: 0, 0, 0;
+      --active-shadow-action-rgb: var(--google-blue-500-rgb);
+      --bg-action: var(--google-blue-300);
+      --border-color: var(--google-grey-700);
+      --disabled-bg-action: var(--google-grey-800);
+      /* TODO(dbeam): get --disabled-bg from Namrata. */
+      --disabled-bg: transparent;
+      --disabled-border-color: var(--google-grey-800);
+      --disabled-text-color: var(--google-grey-500);
+      --focus-shadow-color: rgba(var(--google-blue-300-rgb), .5);
+      --hover-bg-action: var(--bg-action)
+          linear-gradient(rgba(0, 0, 0, .08), rgba(0, 0, 0, .08));
+      --hover-bg-color: rgba(var(--google-blue-300-rgb), .08);
+      --ink-color-action: black;
+      --ink-color: var(--google-blue-300);
+      --ripple-opacity-action: .16;
+      --ripple-opacity: .16;
+      --text-color-action: var(--google-grey-900);
+      --text-color: var(--google-blue-300);
+    }
+  }
+
+  :host {
+    --paper-ripple-opacity: var(--ripple-opacity);
+    -webkit-tap-highlight-color: transparent;
+    align-items: center;
+    border: 1px solid var(--border-color);
+    border-radius: 4px;
+    box-sizing: border-box;
+    color: var(--text-color);
+    cursor: pointer;
+    display: inline-flex;
+    flex-shrink: 0;
+    font-weight: 500;
+    height: var(--cr-button-height);
+    justify-content: center;
+    min-width: 5.14em;
+    outline-width: 0;
+    overflow: hidden;
+    padding: 8px 16px;
+    position: relative;
+    user-select: none;
+  }
+
+  :host-context([chrome-refresh-2023]):host {
+    /* Default button colors. */
+    --border-color: var(--color-button-border,
+        var(--cr-fallback-color-tonal-outline));
+    --text-color: var(--color-button-foreground,
+        var(--cr-fallback-color-primary));
+    --hover-bg-color: transparent;
+    --hover-border-color: var(--border-color);
+    --active-bg: transparent;
+    --active-shadow: none;
+    --ink-color: var(--cr-active-background-color);
+    --ripple-opacity: 1;
+
+    /* Disabled default button colors. */
+    --disabled-bg: transparent;
+    --disabled-border-color: var(--color-button-border-disabled,
+        var(--cr-fallback-color-disabled-background));
+    --disabled-text-color: var(--color-button-foreground-disabled,
+        var(--cr-fallback-color-disabled-foreground));
+
+    /* Action button colors. */
+    --bg-action: var(--color-button-background-prominent,
+        var(--cr-fallback-color-primary));
+    --text-color-action: var(--color-button-foreground-prominent,
+        var(--cr-fallback-color-on-primary));
+    --hover-bg-action: var(--bg-action);
+    --active-shadow-action: none;
+    --ink-color-action: var(--cr-active-background-color);
+    --ripple-opacity-action: 1;
+
+    /* Disabled action button colors. */
+    --disabled-bg-action: var(--color-button-background-prominent-disabled,
+        var(--cr-fallback-color-disabled-background));
+
+    background: transparent;
+    border-radius: 100px;
+    isolation: isolate;
+    line-height: 20px;
+  }
+
+  :host([has-prefix-icon_]),
+  :host([has-suffix-icon_]) {
+    --iron-icon-height: 16px;
+    --iron-icon-width: 16px;
+    gap: 8px;
+    padding: 8px;
+  }
+
+  :host-context([chrome-refresh-2023]):host([has-prefix-icon_]),
+  :host-context([chrome-refresh-2023]):host([has-suffix-icon_]) {
+    --iron-icon-height: 20px;
+    --iron-icon-width: 20px;
+    --icon-block-padding-large: 16px;
+    --icon-block-padding-small: 12px;
+    padding-block-end: 8px;
+    padding-block-start: 8px;
+  }
+
+  :host-context([chrome-refresh-2023]):host([has-prefix-icon_]) {
+    padding-inline-end: var(--icon-block-padding-large);
+    padding-inline-start: var(--icon-block-padding-small);
+  }
+
+  :host-context([chrome-refresh-2023]):host([has-suffix-icon_]) {
+    padding-inline-end: var(--icon-block-padding-small);
+    padding-inline-start: var(--icon-block-padding-large);
+  }
+
+  :host-context(.focus-outline-visible):host(:focus) {
+    box-shadow: 0 0 0 2px var(--focus-shadow-color);
+  }
+
+  @media (forced-colors: active) {
+    :host-context(.focus-outline-visible):host(:focus) {
+      /* Use outline instead of box-shadow (which does not work) in Windows
+         HCM. */
+      outline: var(--cr-focus-outline-hcm);
+    }
+
+    :host-context([chrome-refresh-2023]):host {
+      /* Refresh styles either use color pipeline colors which automatically
+       * provide high-contrast colors in high-contrast mode, or use fallback
+       * vars that have high-contrast fallbacks for critically important
+       * states such as disabled state. */
+      forced-color-adjust: none;
+    }
+  }
+
+  :host-context([chrome-refresh-2023].focus-outline-visible):host(:focus) {
+    box-shadow: none;
+    outline: 2px solid var(--cr-focus-outline-color);
+    outline-offset: 2px;
+  }
+
+  :host(:active) {
+    background: var(--active-bg);
+    box-shadow: var(--active-shadow,
+        0 1px 2px 0 rgba(var(--active-shadow-rgb), .3),
+        0 3px 6px 2px rgba(var(--active-shadow-rgb), .15));
+  }
+
+  :host(:hover) {
+    background-color: var(--hover-bg-color);
+  }
+
+  @media (prefers-color-scheme: light) {
+    :host(:hover) {
+      border-color: var(--hover-border-color);
+    }
+  }
+
+  #background {
+    border-radius: inherit;
+    inset: 0;
+    pointer-events: none;
+    position: absolute;
+    z-index: 0;
+  }
+
+  :host-context([chrome-refresh-2023]):host(:hover) #background {
+    background-color: var(--hover-bg-color);
+  }
+
+  :host-context([chrome-refresh-2023].focus-outline-visible):host(:focus)
+      #background {
+    background-clip: padding-box;
+  }
+
+  :host-context([chrome-refresh-2023]):host(.action-button) #background {
+    background-color: var(--bg-action);
+  }
+
+  :host-context([chrome-refresh-2023]):host([disabled]) #background {
+    background-color: var(--disabled-bg);
+  }
+
+  :host-context([chrome-refresh-2023]):host(.action-button[disabled])
+      #background {
+    background-color: var(--disabled-bg-action);
+  }
+
+  :host-context([chrome-refresh-2023]):host(.tonal-button) #background,
+  :host-context([chrome-refresh-2023]):host(.floating-button) #background {
+    background-color: var(--color-button-background-tonal,
+        var(--cr-fallback-color-secondary-container));
+  }
+
+  :host-context([chrome-refresh-2023]):host([disabled].tonal-button)
+      #background,
+  :host-context([chrome-refresh-2023]):host([disabled].floating-button)
+      #background {
+    background-color: var(--color-button-background-tonal-disabled,
+        var(--cr-fallback-color-disabled-background));
+  }
+
+  #content {
+    display: contents;
+  }
+
+  :host-context([chrome-refresh-2023]) #content {
+    display: inline;
+    z-index: 2;
+  }
+
+  :host-context([chrome-refresh-2023]) ::slotted(*) {
+    z-index: 2;
+  }
+
+  #hoverBackground {
+    content: '';
+    display: none;
+    inset: 0;
+    pointer-events: none;
+    position: absolute;
+    z-index: 1;
+  }
+
+  :host-context([chrome-refresh-2023]):host(:hover) #hoverBackground {
+    background: var(--cr-hover-background-color);
+    display: block;
+  }
+
+  :host-context([chrome-refresh-2023]):host(.action-button:hover)
+      #hoverBackground {
+    background: var(--cr-hover-on-prominent-background-color);
+  }
+
+  :host(.action-button) {
+    --ink-color: var(--ink-color-action);
+    --paper-ripple-opacity: var(--ripple-opacity-action);
+    background-color: var(--bg-action);
+    border: none;
+    color: var(--text-color-action);
+  }
+
+  :host-context([chrome-refresh-2023]):host(.action-button) {
+    --ink-color: var(--cr-active-on-primary-background-color);
+    background-color: transparent;
+  }
+
+  :host(.action-button:active) {
+    box-shadow: var(--active-shadow-action,
+        0 1px 2px 0 rgba(var(--active-shadow-action-rgb), .3),
+        0 3px 6px 2px rgba(var(--active-shadow-action-rgb), .15));
+  }
+
+  :host(.action-button:hover) {
+    background: var(--hover-bg-action);
+  }
+
+  @media (prefers-color-scheme: light) {
+    :host(.action-button:not(:active):hover) {
+      box-shadow:
+          0 1px 2px 0 rgba(var(--hover-shadow-action-rgb), .3),
+          0 1px 3px 1px rgba(var(--hover-shadow-action-rgb), .15);
+    }
+
+    :host-context([chrome-refresh-2023]):host(
+        .action-button:not(:active):hover) {
+      box-shadow: none;
+    }
+  }
+
+  :host([disabled]) {
+    background-color: var(--disabled-bg);
+    border-color: var(--disabled-border-color);
+    color: var(--disabled-text-color);
+    cursor: auto;
+    pointer-events: none;
+  }
+
+  :host(.action-button[disabled]) {
+    background-color: var(--disabled-bg-action);
+    border-color: transparent;
+  }
+
+  /* cancel-button is meant to be used within a cr-dialog */
+  :host(.cancel-button) {
+    margin-inline-end: 8px;
+  }
+
+  :host(.action-button),
+  :host(.cancel-button) {
+    line-height: 154%;
+  }
+
+  :host-context([chrome-refresh-2023]):host(.tonal-button),
+  :host-context([chrome-refresh-2023]):host(.floating-button) {
+    border: none;
+    color: var(--color-button-foreground-tonal,
+        var(--cr-fallback-color-on-tonal-container));
+  }
+
+  :host-context([chrome-refresh-2023]):host(.tonal-button[disabled]),
+  :host-context([chrome-refresh-2023]):host(.floating-button[disabled]) {
+    border: none;
+    color: var(--disabled-text-color);
+  }
+
+  :host-context([chrome-refresh-2023]):host(.floating-button) {
+    border-radius: 8px;
+    height: 40px;
+    transition: box-shadow 80ms linear;
+  }
+
+  :host-context([chrome-refresh-2023]):host(.floating-button:hover) {
+    box-shadow: var(--cr-elevation-3);
+  }
+
+  paper-ripple {
+    color: var(--ink-color);
+    height: var(--paper-ripple-height);
+    /* Fallback to 0 to match the values in paper-ripple.html. Falls back
+     * to null without this. */
+    left: var(--paper-ripple-left, 0);
+    top: var(--paper-ripple-top, 0);
+    width: var(--paper-ripple-width);
+  }
+
+  :host-context([chrome-refresh-2023]) paper-ripple {
+    z-index: 1;
+  }
+</style>
+
+<div id="background"></div>
+<slot id="prefixIcon" name="prefix-icon"
+    on-slotchange="onPrefixIconSlotChanged_">
+</slot>
+<span id="content"><slot></slot></span>
+<slot id="suffixIcon" name="suffix-icon"
+    on-slotchange="onSuffixIconSlotChanged_">
+</slot>
+<div id="hoverBackground" part="hoverBackground"></div>
diff --git a/ash/webui/common/resources/cr_elements/cr_button/cr_button.ts b/ash/webui/common/resources/cr_elements/cr_button/cr_button.ts
new file mode 100644
index 0000000..f2960cd
--- /dev/null
+++ b/ash/webui/common/resources/cr_elements/cr_button/cr_button.ts
@@ -0,0 +1,254 @@
+// Copyright 2019 The Chromium Authors
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+/**
+ * @fileoverview 'cr-button' is a button which displays slotted elements. It can
+ * be interacted with like a normal button using click as well as space and
+ * enter to effectively click the button and fire a 'click' event. It can also
+ * style an icon inside of the button with the [has-icon] attribute.
+ *
+ * Forked from ui/webui/resources/cr_elements/cr_button/cr_button.ts
+ */
+import '//resources/cr_elements/cr_hidden_style.css.js';
+import '//resources/cr_elements/cr_shared_vars.css.js';
+import '//resources/polymer/v3_0/paper-styles/color.js';
+
+import {FocusOutlineManager} from '//resources/js/focus_outline_manager.js';
+import {PaperRippleBehavior} from '//resources/polymer/v3_0/paper-behaviors/paper-ripple-behavior.js';
+import {mixinBehaviors, PolymerElement} from '//resources/polymer/v3_0/polymer/polymer_bundled.min.js';
+
+import {getTemplate} from './cr_button.html.js';
+
+export interface CrButtonElement {
+  $: {
+    prefixIcon: HTMLSlotElement,
+    suffixIcon: HTMLSlotElement,
+  };
+}
+
+const CrButtonElementBase =
+    mixinBehaviors([PaperRippleBehavior], PolymerElement) as {
+      new (): PolymerElement & PaperRippleBehavior,
+    };
+
+export class CrButtonElement extends CrButtonElementBase {
+  static get is() {
+    return 'cr-button';
+  }
+
+  static get template() {
+    return getTemplate();
+  }
+
+  static get properties() {
+    return {
+      disabled: {
+        type: Boolean,
+        value: false,
+        reflectToAttribute: true,
+        observer: 'disabledChanged_',
+      },
+
+      /**
+       * Use this property in order to configure the "tabindex" attribute.
+       */
+      customTabIndex: {
+        type: Number,
+        observer: 'applyTabIndex_',
+      },
+
+      /**
+       * Flag used for formatting ripples on circle shaped cr-buttons.
+       * @private
+       */
+      circleRipple: {
+        type: Boolean,
+        value: false,
+      },
+
+      hasPrefixIcon_: {
+        type: Boolean,
+        reflectToAttribute: true,
+        value: false,
+      },
+
+      hasSuffixIcon_: {
+        type: Boolean,
+        reflectToAttribute: true,
+        value: false,
+      },
+    };
+  }
+
+  disabled: boolean;
+  customTabIndex: number;
+  circleRipple: boolean;
+  private hasPrefixIcon_: boolean;
+  private hasSuffixIcon_: boolean;
+
+  /**
+   * It is possible to activate a tab when the space key is pressed down. When
+   * this element has focus, the keyup event for the space key should not
+   * perform a 'click'. |spaceKeyDown_| tracks when a space pressed and
+   * handled by this element. Space keyup will only result in a 'click' when
+   * |spaceKeyDown_| is true. |spaceKeyDown_| is set to false when element
+   * loses focus.
+   */
+  private spaceKeyDown_: boolean = false;
+  private timeoutIds_: Set<number> = new Set();
+
+  constructor() {
+    super();
+
+    this.addEventListener('blur', this.onBlur_.bind(this));
+    // Must be added in constructor so that stopImmediatePropagation() works as
+    // expected.
+    this.addEventListener('click', this.onClick_.bind(this));
+    this.addEventListener('keydown', this.onKeyDown_.bind(this));
+    this.addEventListener('keyup', this.onKeyUp_.bind(this));
+    this.addEventListener('pointerdown', this.onPointerDown_.bind(this));
+  }
+
+  override ready() {
+    super.ready();
+    if (!this.hasAttribute('role')) {
+      this.setAttribute('role', 'button');
+    }
+    if (!this.hasAttribute('tabindex')) {
+      this.setAttribute('tabindex', '0');
+    }
+    if (!this.hasAttribute('aria-disabled')) {
+      this.setAttribute('aria-disabled', this.disabled ? 'true' : 'false');
+    }
+
+    FocusOutlineManager.forDocument(document);
+  }
+
+  override disconnectedCallback() {
+    super.disconnectedCallback();
+    this.timeoutIds_.forEach(clearTimeout);
+    this.timeoutIds_.clear();
+  }
+
+  private setTimeout_(fn: () => void, delay?: number) {
+    if (!this.isConnected) {
+      return;
+    }
+    const id = setTimeout(() => {
+      this.timeoutIds_.delete(id);
+      fn();
+    }, delay);
+    this.timeoutIds_.add(id);
+  }
+
+  private disabledChanged_(newValue: boolean, oldValue: boolean|undefined) {
+    if (!newValue && oldValue === undefined) {
+      return;
+    }
+    if (this.disabled) {
+      this.blur();
+    }
+    this.setAttribute('aria-disabled', this.disabled ? 'true' : 'false');
+    this.applyTabIndex_();
+  }
+
+  /**
+   * Updates the tabindex HTML attribute to the actual value.
+   */
+  private applyTabIndex_() {
+    let value = this.customTabIndex;
+    if (value === undefined) {
+      value = this.disabled ? -1 : 0;
+    }
+    this.setAttribute('tabindex', value.toString());
+  }
+
+  private onBlur_() {
+    this.spaceKeyDown_ = false;
+    // If a keyup event is never fired (e.g. after keydown the focus is moved to
+    // another element), we need to clear the ripple here. 100ms delay was
+    // chosen manually as a good time period for the ripple to be visible.
+    this.setTimeout_(() => this.getRipple().uiUpAction(), 100);
+  }
+
+  private onClick_(e: Event) {
+    if (this.disabled) {
+      e.stopImmediatePropagation();
+    }
+  }
+
+  private onPrefixIconSlotChanged_() {
+    this.hasPrefixIcon_ = this.$.prefixIcon.assignedElements().length > 0;
+  }
+
+  private onSuffixIconSlotChanged_() {
+    this.hasSuffixIcon_ = this.$.suffixIcon.assignedElements().length > 0;
+  }
+
+  private onKeyDown_(e: KeyboardEvent) {
+    if (e.key !== ' ' && e.key !== 'Enter') {
+      return;
+    }
+
+    e.preventDefault();
+    e.stopPropagation();
+
+    if (e.repeat) {
+      return;
+    }
+
+    this.getRipple().uiDownAction();
+    if (e.key === 'Enter') {
+      this.click();
+      // Delay was chosen manually as a good time period for the ripple to be
+      // visible.
+      this.setTimeout_(() => this.getRipple().uiUpAction(), 100);
+    } else if (e.key === ' ') {
+      this.spaceKeyDown_ = true;
+    }
+  }
+
+  private onKeyUp_(e: KeyboardEvent) {
+    if (e.key !== ' ' && e.key !== 'Enter') {
+      return;
+    }
+
+    e.preventDefault();
+    e.stopPropagation();
+
+    if (this.spaceKeyDown_ && e.key === ' ') {
+      this.spaceKeyDown_ = false;
+      this.click();
+      this.getRipple().uiUpAction();
+    }
+  }
+
+  private onPointerDown_() {
+    this.ensureRipple();
+  }
+
+  /**
+   * Customize the element's ripple. Overriding the '_createRipple' function
+   * from PaperRippleBehavior.
+   */
+  /* eslint-disable-next-line @typescript-eslint/naming-convention */
+  override _createRipple() {
+    const ripple = super._createRipple();
+
+    if (this.circleRipple) {
+      ripple.setAttribute('center', '');
+      ripple.classList.add('circle');
+    }
+
+    return ripple;
+  }
+}
+
+declare global {
+  interface HTMLElementTagNameMap {
+    'cr-button': CrButtonElement;
+  }
+}
+
+customElements.define(CrButtonElement.is, CrButtonElement);
diff --git a/ash/webui/common/resources/cr_elements/cr_dialog/cr_dialog.html b/ash/webui/common/resources/cr_elements/cr_dialog/cr_dialog.html
new file mode 100644
index 0000000..bc04e89
--- /dev/null
+++ b/ash/webui/common/resources/cr_elements/cr_dialog/cr_dialog.html
@@ -0,0 +1,183 @@
+<style include="cr-hidden-style cr-icons">
+  dialog {
+    --scroll-border-color: var(--paper-grey-300);
+    --scroll-border: 1px solid var(--scroll-border-color);
+    background-color: var(--cr-dialog-background-color, white);
+    border: 0;
+    border-radius: var(--cr-dialog-border-radius, 8px);
+    bottom: 50%;
+    box-shadow: 0 0 16px rgba(0, 0, 0, 0.12),
+                0 16px 16px rgba(0, 0, 0, 0.24);
+    color: inherit;
+    max-height: initial;
+    max-width: initial;
+    overflow-y: hidden;
+    padding: 0;
+    position: absolute;
+    top: 50%;
+    width: var(--cr-dialog-width, 512px);
+  }
+
+  @media (prefers-color-scheme: dark) {
+    dialog {
+      --scroll-border-color: var(--google-grey-700);
+      background-color: var(--cr-dialog-background-color,
+          var(--google-grey-900));
+      /* Note: the colors in linear-gradient() are intentionally the same to
+       * add a 4% white layer on top of the fully opaque background-color. */
+      background-image: linear-gradient(rgba(255, 255, 255, .04),
+                                        rgba(255, 255, 255, .04));
+    }
+  }
+
+  @media (forced-colors: active) {
+    dialog {
+      /* Use border instead of box-shadow (which does not work) in Windows
+         HCM. */
+      border: var(--cr-border-hcm);
+    }
+  }
+
+  dialog[open] #content-wrapper {
+    /* Keep max-height within viewport, and flex content accordingly. */
+    display: flex;
+    flex-direction: column;
+    max-height: 100vh;
+    overflow: auto;
+  }
+
+  /* When needing to flex, force .body-container alone to shrink. */
+  .top-container,
+  :host ::slotted([slot=button-container]),
+  :host ::slotted([slot=footer]) {
+    flex-shrink: 0;
+  }
+
+  dialog::backdrop {
+    background-color: rgba(0, 0, 0, 0.6);
+    bottom: 0;
+    left: 0;
+    position: fixed;
+    right: 0;
+    top: 0;
+  }
+
+  :host ::slotted([slot=body]) {
+    color: var(--cr-secondary-text-color);
+    padding: 0 var(--cr-dialog-body-padding-horizontal, 20px);
+  }
+
+  :host ::slotted([slot=title]) {
+    color: var(--cr-primary-text-color);
+    flex: 1;
+    font-family: var(--cr-dialog-font-family, inherit);
+    font-size: var(--cr-dialog-title-font-size, calc(15 / 13 * 100%));
+    line-height: 1;
+    padding-bottom: var(--cr-dialog-title-slot-padding-bottom, 16px);
+    padding-inline-end:  var(--cr-dialog-title-slot-padding-end, 20px);
+    padding-inline-start: var(--cr-dialog-title-slot-padding-start, 20px);
+    padding-top: var(--cr-dialog-title-slot-padding-top, 20px);
+  }
+
+  /* Note that if the padding is non-uniform and the button-container
+   * border is visible, then the buttons will appear off-center. */
+  :host ::slotted([slot=button-container]) {
+    display: flex;
+    justify-content: flex-end;
+    padding-bottom: var(--cr-dialog-button-container-padding-bottom, 16px);
+    padding-inline-end: var(--cr-dialog-button-container-padding-horizontal, 16px);
+    padding-inline-start: var(--cr-dialog-button-container-padding-horizontal, 16px);
+    padding-top: var(--cr-dialog-button-container-padding-top, 16px);
+  }
+
+  :host ::slotted([slot=footer]) {
+    border-bottom-left-radius: inherit;
+    border-bottom-right-radius: inherit;
+    border-top: 1px solid #dbdbdb;
+    margin: 0;
+    padding: 16px 20px;
+  }
+
+  :host([hide-backdrop]) dialog::backdrop {
+    opacity: 0;
+  }
+
+  @media (prefers-color-scheme: dark) {
+    :host ::slotted([slot=footer]) {
+      border-top-color: var(--cr-separator-color);
+    }
+  }
+
+  .body-container {
+    box-sizing: border-box;
+    display: flex;
+    flex-direction: column;
+    min-height: 1.375rem; /* Minimum reasonably usable height. */
+    overflow: auto;
+  }
+
+  :host {
+    --transparent-border: 1px solid transparent;
+  }
+
+  /* Cr Dialog uses borders instead of box-shadows. */
+  #cr-container-shadow-top {
+    border-bottom: var(--cr-dialog-body-border-top,
+        var(--transparent-border));
+  }
+
+  #cr-container-shadow-bottom {
+    border-bottom: var(--cr-dialog-body-border-bottom,
+        var(--transparent-border));
+  }
+
+  #cr-container-shadow-top.has-shadow,
+  #cr-container-shadow-bottom.has-shadow {
+    border-bottom: var(--scroll-border);
+  }
+
+  .top-container {
+    align-items: flex-start;
+    display: flex;
+    min-height: var(--cr-dialog-top-container-min-height, 31px);
+  }
+
+  .title-container {
+    display: flex;
+    flex: 1;
+    font-size: inherit;
+    font-weight: inherit;
+    margin: 0;
+    outline: none;
+  }
+
+  #close {
+    align-self: flex-start;
+    margin-inline-end: 4px;
+    margin-top: 4px;
+  }
+</style>
+<dialog id="dialog" on-close="onNativeDialogClose_"
+    on-cancel="onNativeDialogCancel_" part="dialog"
+    aria-labelledby="title" aria-description$="[[ariaDescriptionText]]">
+<!-- This wrapper is necessary, such that the "pulse" animation is not
+    erroneously played when the user clicks on the outer-most scrollbar. -->
+  <div id="content-wrapper" part="wrapper">
+    <div class="top-container">
+      <h2 id="title" class="title-container" tabindex="-1">
+        <slot name="title"></slot>
+      </h2>
+      <cr-icon-button id="close" class="icon-clear"
+          hidden$="[[!showCloseButton]]" aria-label$="[[closeText]]"
+          on-click="cancel" on-keypress="onCloseKeypress_">
+      </cr-icon-button>
+    </div>
+    <slot name="header"></slot>
+    <div class="body-container" id="container" show-bottom-shadow
+        part="body-container">
+      <slot name="body"></slot>
+    </div>
+    <slot name="button-container"></slot>
+    <slot name="footer"></slot>
+  </div>
+</dialog>
diff --git a/ash/webui/common/resources/cr_elements/cr_dialog/cr_dialog.ts b/ash/webui/common/resources/cr_elements/cr_dialog/cr_dialog.ts
new file mode 100644
index 0000000..4fbc967
--- /dev/null
+++ b/ash/webui/common/resources/cr_elements/cr_dialog/cr_dialog.ts
@@ -0,0 +1,373 @@
+// Copyright 2016 The Chromium Authors
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+/**
+ * @fileoverview 'cr-dialog' is a component for showing a modal dialog. If the
+ * dialog is closed via close(), a 'close' event is fired. If the dialog is
+ * canceled via cancel(), a 'cancel' event is fired followed by a 'close' event.
+ *
+ * Additionally clients can get a reference to the internal native <dialog> via
+ * calling getNative() and inspecting the |returnValue| property inside
+ * the 'close' event listener to determine whether it was canceled or just
+ * closed, where a truthy value means success, and a falsy value means it was
+ * canceled.
+ *
+ * Note that <cr-dialog> wrapper itself always has 0x0 dimensions, and
+ * specifying width/height on <cr-dialog> directly will have no effect on the
+ * internal native <dialog>. Instead use cr-dialog::part(dialog) to specify
+ * width/height (as well as other available mixins to style other parts of the
+ * dialog contents).
+ *
+ * Forked from ui/webui/resources/cr_elements/cr_dialog/cr_dialog.ts
+ */
+import '../cr_icon_button/cr_icon_button.js';
+import '//resources/cr_elements/cr_icons.css.js';
+import '//resources/cr_elements/cr_hidden_style.css.js';
+import '//resources/cr_elements/cr_shared_vars.css.js';
+
+import {CrContainerShadowMixin} from '//resources/cr_elements/cr_container_shadow_mixin.js';
+import {assert} from '//resources/js/assert.js';
+import {PolymerElement} from '//resources/polymer/v3_0/polymer/polymer_bundled.min.js';
+
+import {CrIconButtonElement} from '../cr_icon_button/cr_icon_button.js';
+import {CrInputElement} from '../cr_input/cr_input.js';
+
+import {getTemplate} from './cr_dialog.html.js';
+
+const CrDialogElementBase = CrContainerShadowMixin(PolymerElement);
+
+export interface CrDialogElement {
+  $: {
+    close: CrIconButtonElement,
+    dialog: HTMLDialogElement,
+  };
+}
+
+export class CrDialogElement extends CrDialogElementBase {
+  static get is() {
+    return 'cr-dialog';
+  }
+
+  static get template() {
+    return getTemplate();
+  }
+
+  static get properties() {
+    return {
+      open: {
+        type: Boolean,
+        value: false,
+        reflectToAttribute: true,
+      },
+
+      /**
+       * Alt-text for the dialog close button.
+       */
+      closeText: String,
+
+      /**
+       * True if the dialog should remain open on 'popstate' events. This is
+       * used for navigable dialogs that have their separate navigation handling
+       * code.
+       */
+      ignorePopstate: {
+        type: Boolean,
+        value: false,
+      },
+
+      /**
+       * True if the dialog should ignore 'Enter' keypresses.
+       */
+      ignoreEnterKey: {
+        type: Boolean,
+        value: false,
+      },
+
+      /**
+       * True if the dialog should consume 'keydown' events. If ignoreEnterKey
+       * is true, 'Enter' key won't be consumed.
+       */
+      consumeKeydownEvent: {
+        type: Boolean,
+        value: false,
+      },
+
+      /**
+       * True if the dialog should not be able to be cancelled, which will
+       * prevent 'Escape' key presses from closing the dialog.
+       */
+      noCancel: {
+        type: Boolean,
+        value: false,
+      },
+
+      // True if dialog should show the 'X' close button.
+      showCloseButton: {
+        type: Boolean,
+        value: false,
+      },
+
+      showOnAttach: {
+        type: Boolean,
+        value: false,
+      },
+
+      /**
+       * Text for the aria description.
+       */
+      ariaDescriptionText: String,
+    };
+  }
+
+  closeText: string;
+  consumeKeydownEvent: boolean;
+  ignoreEnterKey: boolean;
+  ignorePopstate: boolean;
+  noCancel: boolean;
+  open: boolean;
+  showCloseButton: boolean;
+  showOnAttach: boolean;
+  ariaDescriptionText: string;
+
+  private intersectionObserver_: IntersectionObserver|null = null;
+  private mutationObserver_: MutationObserver|null = null;
+  private boundKeydown_: ((e: KeyboardEvent) => void)|null = null;
+
+  override ready() {
+    super.ready();
+
+    // If the active history entry changes (i.e. user clicks back button),
+    // all open dialogs should be cancelled.
+    window.addEventListener('popstate', () => {
+      if (!this.ignorePopstate && this.$.dialog.open) {
+        this.cancel();
+      }
+    });
+
+    if (!this.ignoreEnterKey) {
+      this.addEventListener('keypress', this.onKeypress_.bind(this));
+    }
+    this.addEventListener('pointerdown', e => this.onPointerdown_(e));
+  }
+
+  override connectedCallback() {
+    super.connectedCallback();
+    const mutationObserverCallback = () => {
+      if (this.$.dialog.open) {
+        this.enableShadowBehavior(true);
+        this.addKeydownListener_();
+      } else {
+        this.enableShadowBehavior(false);
+        this.removeKeydownListener_();
+      }
+    };
+
+    this.mutationObserver_ = new MutationObserver(mutationObserverCallback);
+
+    this.mutationObserver_.observe(this.$.dialog, {
+      attributes: true,
+      attributeFilter: ['open'],
+    });
+
+    // In some cases dialog already has the 'open' attribute by this point.
+    mutationObserverCallback();
+    if (this.showOnAttach) {
+      this.showModal();
+    }
+  }
+
+  override disconnectedCallback() {
+    super.disconnectedCallback();
+    this.removeKeydownListener_();
+    if (this.mutationObserver_) {
+      this.mutationObserver_.disconnect();
+      this.mutationObserver_ = null;
+    }
+  }
+
+  private addKeydownListener_() {
+    if (!this.consumeKeydownEvent) {
+      return;
+    }
+
+    this.boundKeydown_ = this.boundKeydown_ || this.onKeydown_.bind(this);
+
+    this.addEventListener('keydown', this.boundKeydown_);
+
+    // Sometimes <body> is key event's target and in that case the event
+    // will bypass cr-dialog. We should consume those events too in order to
+    // behave modally. This prevents accidentally triggering keyboard commands.
+    document.body.addEventListener('keydown', this.boundKeydown_);
+  }
+
+  private removeKeydownListener_() {
+    if (!this.boundKeydown_) {
+      return;
+    }
+
+    this.removeEventListener('keydown', this.boundKeydown_);
+    document.body.removeEventListener('keydown', this.boundKeydown_);
+    this.boundKeydown_ = null;
+  }
+
+  showModal() {
+    this.$.dialog.showModal();
+    assert(this.$.dialog.open);
+    this.open = true;
+    this.dispatchEvent(
+        new CustomEvent('cr-dialog-open', {bubbles: true, composed: true}));
+  }
+
+  cancel() {
+    this.dispatchEvent(
+        new CustomEvent('cancel', {bubbles: true, composed: true}));
+    this.$.dialog.close();
+    assert(!this.$.dialog.open);
+    this.open = false;
+  }
+
+  close() {
+    this.$.dialog.close('success');
+    assert(!this.$.dialog.open);
+    this.open = false;
+  }
+
+  /**
+   * Set the title of the dialog for a11y reader.
+   * @param title Title of the dialog.
+   */
+  setTitleAriaLabel(title: string) {
+    this.$.dialog.removeAttribute('aria-labelledby');
+    this.$.dialog.setAttribute('aria-label', title);
+  }
+
+  private onCloseKeypress_(e: Event) {
+    // Because the dialog may have a default Enter key handler, prevent
+    // keypress events from bubbling up from this element.
+    e.stopPropagation();
+  }
+
+  private onNativeDialogClose_(e: Event) {
+    // Ignore any 'close' events not fired directly by the <dialog> element.
+    if (e.target !== this.getNative()) {
+      return;
+    }
+
+    // Catch and re-fire the 'close' event such that it bubbles across Shadow
+    // DOM v1.
+    this.dispatchEvent(
+        new CustomEvent('close', {bubbles: true, composed: true}));
+  }
+
+  private onNativeDialogCancel_(e: Event) {
+    // Ignore any 'cancel' events not fired directly by the <dialog> element.
+    if (e.target !== this.getNative()) {
+      return;
+    }
+
+    if (this.noCancel) {
+      e.preventDefault();
+      return;
+    }
+
+    // When the dialog is dismissed using the 'Esc' key, need to manually update
+    // the |open| property (since close() is not called).
+    this.open = false;
+
+    // Catch and re-fire the native 'cancel' event such that it bubbles across
+    // Shadow DOM v1.
+    this.dispatchEvent(
+        new CustomEvent('cancel', {bubbles: true, composed: true}));
+  }
+
+  /**
+   * Expose the inner native <dialog> for some rare cases where it needs to be
+   * directly accessed (for example to programmatically setheight/width, which
+   * would not work on the wrapper).
+   */
+  getNative(): HTMLDialogElement {
+    return this.$.dialog;
+  }
+
+  private onKeypress_(e: KeyboardEvent) {
+    if (e.key !== 'Enter') {
+      return;
+    }
+
+    // Accept Enter keys from either the dialog itself, or a child cr-input,
+    // considering that the event may have been retargeted, for example if the
+    // cr-input is nested inside another element. Also exclude inputs of type
+    // 'search', since hitting 'Enter' on a search field most likely intends to
+    // trigger searching.
+    const accept = e.target === this ||
+        e.composedPath().some(
+            el => (el as HTMLElement).tagName === 'CR-INPUT' &&
+                (el as CrInputElement).type !== 'search');
+    if (!accept) {
+      return;
+    }
+    const actionButton = this.querySelector<HTMLElement>(
+        '.action-button:not([disabled]):not([hidden])');
+    if (actionButton) {
+      actionButton.click();
+      e.preventDefault();
+    }
+  }
+
+  private onKeydown_(e: KeyboardEvent) {
+    assert(this.consumeKeydownEvent);
+
+    if (!this.getNative().open) {
+      return;
+    }
+
+    if (this.ignoreEnterKey && e.key === 'Enter') {
+      return;
+    }
+
+    // Stop propagation to behave modally.
+    e.stopPropagation();
+  }
+
+  private onPointerdown_(e: PointerEvent) {
+    // Only show pulse animation if user left-clicked outside of the dialog
+    // contents.
+    if (e.button !== 0 ||
+        (e.composedPath()[0]! as HTMLElement).tagName !== 'DIALOG') {
+      return;
+    }
+
+    this.$.dialog.animate(
+        [
+          {transform: 'scale(1)', offset: 0},
+          {transform: 'scale(1.02)', offset: 0.4},
+          {transform: 'scale(1.02)', offset: 0.6},
+          {transform: 'scale(1)', offset: 1},
+        ],
+        {
+          duration: 180,
+          easing: 'ease-in-out',
+          iterations: 1,
+        });
+
+    // Prevent any text from being selected within the dialog when clicking in
+    // the backdrop area.
+    e.preventDefault();
+  }
+
+  override focus() {
+    const titleContainer =
+        this.shadowRoot!.querySelector<HTMLElement>('.title-container');
+    assert(titleContainer);
+    titleContainer.focus();
+  }
+}
+
+declare global {
+  interface HTMLElementTagNameMap {
+    'cr-dialog': CrDialogElement;
+  }
+}
+
+customElements.define(CrDialogElement.is, CrDialogElement);
diff --git a/ash/webui/common/resources/cr_elements/cr_expand_button/cr_expand_button.html b/ash/webui/common/resources/cr_elements/cr_expand_button/cr_expand_button.html
new file mode 100644
index 0000000..f29825b
--- /dev/null
+++ b/ash/webui/common/resources/cr_elements/cr_expand_button/cr_expand_button.html
@@ -0,0 +1,24 @@
+<style include="cr-actionable-row-style">
+  :host([disabled]) {
+    opacity: 0.65;
+    pointer-events: none;
+  }
+
+  :host([disabled]) cr-icon-button {
+    display: var(--cr-expand-button-disabled-display, initial);
+  }
+
+  #label {
+    flex: 1;
+    padding: var(--cr-section-vertical-padding) 0;
+  }
+
+  cr-icon-button {
+    --cr-icon-button-icon-size: var(--cr-expand-button-icon-size, 20px);
+    --cr-icon-button-size: var(--cr-expand-button-size, 36px);
+  }
+</style>
+
+<div id="label" aria-hidden="true"><slot></slot></div>
+<cr-icon-button id="icon" aria-labelledby="label" disabled="[[disabled]]"
+    tabindex="[[tabIndex]]" part="icon"></cr-icon-button>
diff --git a/ash/webui/common/resources/cr_elements/cr_expand_button/cr_expand_button.ts b/ash/webui/common/resources/cr_elements/cr_expand_button/cr_expand_button.ts
new file mode 100644
index 0000000..a9cd29fe
--- /dev/null
+++ b/ash/webui/common/resources/cr_elements/cr_expand_button/cr_expand_button.ts
@@ -0,0 +1,175 @@
+// Copyright 2015 The Chromium Authors
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+/**
+ * @fileoverview
+ * 'cr-expand-button' is a chrome-specific wrapper around a button that toggles
+ * between an opened (expanded) and closed state.
+ *
+ * Forked from
+ * ui/webui/resources/cr_elements/cr_expand_button/cr_expand_button.ts
+ */
+import '//resources/cr_elements/cr_actionable_row_style.css.js';
+import '../cr_icon_button/cr_icon_button.js';
+import '//resources/cr_elements/cr_shared_vars.css.js';
+import '../icons.html.js';
+
+import {focusWithoutInk} from '//resources/js/focus_without_ink.js';
+import {PolymerElement} from '//resources/polymer/v3_0/polymer/polymer_bundled.min.js';
+
+import {CrIconButtonElement} from '../cr_icon_button/cr_icon_button.js';
+
+import {getTemplate} from './cr_expand_button.html.js';
+
+export interface CrExpandButtonElement {
+  $: {
+    icon: CrIconButtonElement,
+  };
+}
+
+export class CrExpandButtonElement extends PolymerElement {
+  static get is() {
+    return 'cr-expand-button';
+  }
+
+  static get template() {
+    return getTemplate();
+  }
+
+  static get properties() {
+    return {
+      /**
+       * If true, the button is in the expanded state and will show the icon
+       * specified in the `collapseIcon` property. If false, the button shows
+       * the icon specified in the `expandIcon` property.
+       */
+      expanded: {
+        type: Boolean,
+        value: false,
+        notify: true,
+        observer: 'onExpandedChange_',
+      },
+
+      /**
+       * If true, the button will be disabled and grayed out.
+       */
+      disabled: {
+        type: Boolean,
+        value: false,
+        reflectToAttribute: true,
+      },
+
+      /** A11y text descriptor for this control. */
+      ariaLabel: {
+        type: String,
+        observer: 'onAriaLabelChange_',
+      },
+
+      tabIndex: {
+        type: Number,
+        value: 0,
+      },
+
+      expandIcon: {
+        type: String,
+        value: 'cr:expand-more',
+        observer: 'onIconChange_',
+      },
+
+      collapseIcon: {
+        type: String,
+        value: 'cr:expand-less',
+        observer: 'onIconChange_',
+      },
+
+      expandTitle: String,
+      collapseTitle: String,
+
+      tooltipText_: {
+        type: String,
+        computed: 'computeTooltipText_(expandTitle, collapseTitle, expanded)',
+        observer: 'onTooltipTextChange_',
+      },
+    };
+  }
+
+  expanded: boolean;
+  disabled: boolean;
+  expandIcon: string;
+  collapseIcon: string;
+  expandTitle: string;
+  collapseTitle: string;
+  private tooltipText_: string;
+
+  static get observers() {
+    return ['updateAriaExpanded_(disabled, expanded)'];
+  }
+
+  override ready() {
+    super.ready();
+    this.addEventListener('click', this.toggleExpand_);
+  }
+
+  private computeTooltipText_(): string {
+    return this.expanded ? this.collapseTitle : this.expandTitle;
+  }
+
+  private onTooltipTextChange_() {
+    this.title = this.tooltipText_;
+  }
+
+  override focus() {
+    this.$.icon.focus();
+  }
+
+  private onAriaLabelChange_() {
+    if (this.ariaLabel) {
+      this.$.icon.removeAttribute('aria-labelledby');
+      this.$.icon.setAttribute('aria-label', this.ariaLabel);
+    } else {
+      this.$.icon.removeAttribute('aria-label');
+      this.$.icon.setAttribute('aria-labelledby', 'label');
+    }
+  }
+
+  private onExpandedChange_() {
+    this.updateIcon_();
+  }
+
+  private onIconChange_() {
+    this.updateIcon_();
+  }
+
+  private updateIcon_() {
+    this.$.icon.ironIcon = this.expanded ? this.collapseIcon : this.expandIcon;
+  }
+
+  private toggleExpand_(event: Event) {
+    // Prevent |click| event from bubbling. It can cause parents of this
+    // elements to erroneously re-toggle this control.
+    event.stopPropagation();
+    event.preventDefault();
+
+    this.scrollIntoViewIfNeeded();
+    this.expanded = !this.expanded;
+    focusWithoutInk(this.$.icon);
+  }
+
+  private updateAriaExpanded_() {
+    if (this.disabled) {
+      this.$.icon.removeAttribute('aria-expanded');
+    } else {
+      this.$.icon.setAttribute(
+          'aria-expanded', this.expanded ? 'true' : 'false');
+    }
+  }
+}
+
+declare global {
+  interface HTMLElementTagNameMap {
+    'cr-expand-button': CrExpandButtonElement;
+  }
+}
+
+customElements.define(CrExpandButtonElement.is, CrExpandButtonElement);
diff --git a/ash/webui/common/resources/cr_elements/cr_icon_button/cr_icon_button.html b/ash/webui/common/resources/cr_elements/cr_icon_button/cr_icon_button.html
new file mode 100644
index 0000000..3b2c019
--- /dev/null
+++ b/ash/webui/common/resources/cr_elements/cr_icon_button/cr_icon_button.html
@@ -0,0 +1,135 @@
+<style>
+  :host {
+    --cr-icon-button-fill-color: var(--google-grey-700);
+    --cr-icon-button-icon-start-offset: 0;
+    --cr-icon-button-icon-size: 20px;
+    --cr-icon-button-size: 36px;
+    --cr-icon-button-height: var(--cr-icon-button-size);
+    --cr-icon-button-transition: 150ms ease-in-out;
+    --cr-icon-button-width: var(--cr-icon-button-size);
+    /* Copied from paper-fab.html. Prevents square touch highlight. */
+    -webkit-tap-highlight-color: transparent;
+    border-radius: 50%;
+    color: var(--cr-icon-button-stroke-color,
+        var(--cr-icon-button-fill-color));
+    cursor: pointer;
+    display: inline-flex;
+    flex-shrink: 0;
+    height: var(--cr-icon-button-height);
+    margin-inline-end: var(--cr-icon-button-margin-end,
+        var(--cr-icon-ripple-margin));
+    margin-inline-start: var(--cr-icon-button-margin-start);
+    outline: none;
+    overflow: hidden;
+    user-select: none;
+    vertical-align: middle;
+    width: var(--cr-icon-button-width);
+  }
+
+  :host-context([chrome-refresh-2023]):host {
+    --cr-icon-button-fill-color: currentColor;
+    --cr-icon-button-size: 32px;
+    position: relative;
+  }
+
+  :host(:hover) {
+    background-color: var(--cr-icon-button-hover-background-color,
+        var(--cr-hover-background-color));
+  }
+
+  :host(:focus-visible:focus) {
+    box-shadow: inset 0 0 0 2px var(--cr-icon-button-focus-outline-color,
+        var(--cr-focus-outline-color));
+  }
+
+  @media (forced-colors: active) {
+    :host(:focus-visible:focus) {
+      /* Use outline instead of box-shadow (which does not work) in Windows
+         HCM. */
+      outline: var(--cr-focus-outline-hcm);
+    }
+  }
+
+  :host-context(html:not([chrome-refresh-2023])) :host(:active) {
+    background-color: var(--cr-icon-button-active-background-color,
+        var(--cr-active-background-color));
+  }
+
+  paper-ripple {
+    display: none;
+  }
+
+  :host-context([chrome-refresh-2023]) paper-ripple {
+    --paper-ripple-opacity: 1;
+    color: var(--cr-active-background-color);
+    display: block;
+  }
+
+  :host([disabled]) {
+    cursor: initial;
+    opacity: var(--cr-disabled-opacity);
+    pointer-events: none;
+  }
+
+  :host(.no-overlap) {
+    --cr-icon-button-margin-end: 0;
+    --cr-icon-button-margin-start: 0;
+  }
+
+  :host-context([dir=rtl]):host(:not([dir=ltr]):not([multiple-icons_])) {
+    transform: scaleX(-1);  /* Invert X: flip on the Y axis (aka mirror). */
+  }
+
+  :host-context([dir=rtl]):host(:not([dir=ltr])[multiple-icons_])
+      iron-icon {
+    transform: scaleX(-1);  /* Invert X: flip on the Y axis (aka mirror). */
+  }
+
+  :host(:not([iron-icon])) #maskedImage {
+    -webkit-mask-image: var(--cr-icon-image);
+    -webkit-mask-position: center;
+    -webkit-mask-repeat: no-repeat;
+    -webkit-mask-size: var(--cr-icon-button-icon-size);
+    -webkit-transform: var(--cr-icon-image-transform, none);
+    background-color: var(--cr-icon-button-fill-color);
+    height: 100%;
+    transition: background-color var(--cr-icon-button-transition);
+    width: 100%;
+  }
+
+  @media (forced-colors: active) {
+    :host(:not([iron-icon])) #maskedImage {
+      background-color: ButtonText;
+    }
+  }
+
+  #icon {
+    align-items: center;
+    border-radius: 4px;
+    display: flex;
+    height: 100%;
+    justify-content: center;
+    padding-inline-start: var(--cr-icon-button-icon-start-offset);
+    /* The |_rippleContainer| must be position relative. */
+    position: relative;
+    width: 100%;
+  }
+
+  iron-icon {
+    --iron-icon-fill-color: var(--cr-icon-button-fill-color);
+    --iron-icon-stroke-color: var(--cr-icon-button-stroke-color, none);
+    --iron-icon-height: var(--cr-icon-button-icon-size);
+    --iron-icon-width: var(--cr-icon-button-icon-size);
+    transition: fill var(--cr-icon-button-transition),
+        stroke var(--cr-icon-button-transition);
+  }
+
+  @media (prefers-color-scheme: dark) {
+    :host {
+      --cr-icon-button-fill-color: var(--google-grey-500);
+    }
+  }
+</style>
+<div id="icon">
+  <div id="maskedImage"></div>
+</div>
diff --git a/ash/webui/common/resources/cr_elements/cr_icon_button/cr_icon_button.ts b/ash/webui/common/resources/cr_elements/cr_icon_button/cr_icon_button.ts
new file mode 100644
index 0000000..d73ab5b0
--- /dev/null
+++ b/ash/webui/common/resources/cr_elements/cr_icon_button/cr_icon_button.ts
@@ -0,0 +1,242 @@
+// Copyright 2018 The Chromium Authors
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+/**
+ * @fileoverview 'cr-icon-button' is a button which displays an icon with a
+ * ripple. It can be interacted with like a normal button using click as well as
+ * space and enter to effectively click the button and fire a 'click' event.
+ *
+ * Forked from ui/webui/resources/cr_elements/cr_icon_button/cr_icon_button.ts
+ *
+ * There are two sources to icons, cr-icons and iron-iconset-svg. The cr-icon's
+ * are defined as background images with a reference to a resource file
+ * associated with a CSS class name. The iron-icon's are defined as inline SVG's
+ * under a key that is stored in a global map that is accessible to the
+ * iron-icon element.
+ *
+ * Example of using a cr-icon:
+ * <link rel="import" href="chrome://resources/cr_elements/cr_icons.css.html">
+ * <dom-module id="module">
+ *   <template>
+ *     <style includes="cr-icons"></style>
+ *     <cr-icon-button class="icon-class-name"></cr-icon-button>
+ *   </template>
+ * </dom-module>
+ *
+ * In general when an icon is specified using a class, the expectation is the
+ * class will set an image to the --cr-icon-image variable.
+ *
+ * Example of using an iron-icon:
+ * In the TS file:
+ * import 'chrome://resources/cr_elements/icons.html.js';
+ *
+ * In the HTML template file:
+ * <cr-icon-button iron-icon="cr:icon-key"></cr-icon-button>
+ *
+ * The color of the icon can be overridden using CSS variables. When using
+ * iron-icon both the fill and stroke can be overridden the variables:
+ * --cr-icon-button-fill-color
+ * --cr-icon-button-stroke-color
+ *
+ * When not using iron-icon (ie. specifying --cr-icon-image), the icons support
+ * one color and the 'stroke' variables are ignored.
+ *
+ * When using iron-icon's, more than one icon can be specified by setting
+ * the |ironIcon| property to a comma-delimited list of keys.
+ */
+
+import '//resources/cr_elements/cr_shared_vars.css.js';
+import '//resources/polymer/v3_0/iron-icon/iron-icon.js';
+
+import {PaperRippleBehavior} from '//resources/polymer/v3_0/paper-behaviors/paper-ripple-behavior.js';
+import {mixinBehaviors, PolymerElement} from '//resources/polymer/v3_0/polymer/polymer_bundled.min.js';
+
+import {getTemplate} from './cr_icon_button.html.js';
+
+export interface CrIconButtonElement {
+  $: {
+    icon: HTMLElement,
+  };
+}
+
+const CrIconbuttonElementBase =
+    mixinBehaviors([PaperRippleBehavior], PolymerElement) as {
+      new (): PolymerElement & PaperRippleBehavior,
+    };
+
+
+export class CrIconButtonElement extends CrIconbuttonElementBase {
+  static get is() {
+    return 'cr-icon-button';
+  }
+
+  static get template() {
+    return getTemplate();
+  }
+
+  static get properties() {
+    return {
+      disabled: {
+        type: Boolean,
+        value: false,
+        reflectToAttribute: true,
+        observer: 'disabledChanged_',
+      },
+
+      /**
+       * Use this property in order to configure the "tabindex" attribute.
+       */
+      customTabIndex: {
+        type: Number,
+        observer: 'applyTabIndex_',
+      },
+
+      ironIcon: {
+        type: String,
+        observer: 'onIronIconChanged_',
+        reflectToAttribute: true,
+      },
+
+      multipleIcons_: {
+        type: Boolean,
+        reflectToAttribute: true,
+      },
+    };
+  }
+
+  disabled: boolean;
+  customTabIndex: number;
+  ironIcon: string;
+  private multipleIcons_: boolean;
+
+  /**
+   * It is possible to activate a tab when the space key is pressed down. When
+   * this element has focus, the keyup event for the space key should not
+   * perform a 'click'. |spaceKeyDown_| tracks when a space pressed and
+   * handled by this element. Space keyup will only result in a 'click' when
+   * |spaceKeyDown_| is true. |spaceKeyDown_| is set to false when element
+   * loses focus.
+   */
+  private spaceKeyDown_: boolean = false;
+
+  constructor() {
+    super();
+
+    this.addEventListener('blur', this.onBlur_.bind(this));
+    this.addEventListener('click', this.onClick_.bind(this));
+    this.addEventListener('keydown', this.onKeyDown_.bind(this));
+    this.addEventListener('keyup', this.onKeyUp_.bind(this));
+
+    if (document.documentElement.hasAttribute('chrome-refresh-2023')) {
+      this.addEventListener('pointerdown', this.onPointerDown_.bind(this));
+    }
+  }
+
+  override ready() {
+    super.ready();
+    this.setAttribute('aria-disabled', this.disabled ? 'true' : 'false');
+    if (!this.hasAttribute('role')) {
+      this.setAttribute('role', 'button');
+    }
+    if (!this.hasAttribute('tabindex')) {
+      this.setAttribute('tabindex', '0');
+    }
+  }
+
+  toggleClass(className: string) {
+    this.classList.toggle(className);
+  }
+
+  private disabledChanged_(newValue: boolean, oldValue?: boolean) {
+    if (!newValue && oldValue === undefined) {
+      return;
+    }
+    if (this.disabled) {
+      this.blur();
+    }
+    this.setAttribute('aria-disabled', this.disabled ? 'true' : 'false');
+    this.applyTabIndex_();
+  }
+
+  /**
+   * Updates the tabindex HTML attribute to the actual value.
+   */
+  private applyTabIndex_() {
+    let value = this.customTabIndex;
+    if (value === undefined) {
+      value = this.disabled ? -1 : 0;
+    }
+    this.setAttribute('tabindex', value.toString());
+  }
+
+  private onBlur_() {
+    this.spaceKeyDown_ = false;
+  }
+
+  private onClick_(e: Event) {
+    if (this.disabled) {
+      e.stopImmediatePropagation();
+    }
+  }
+
+  private onIronIconChanged_() {
+    this.shadowRoot!.querySelectorAll('iron-icon').forEach(el => el.remove());
+    if (!this.ironIcon) {
+      return;
+    }
+    const icons = (this.ironIcon || '').split(',');
+    this.multipleIcons_ = icons.length > 1;
+    icons.forEach(icon => {
+      const ironIcon = document.createElement('iron-icon');
+      ironIcon.icon = icon;
+      this.$.icon.appendChild(ironIcon);
+      if (ironIcon.shadowRoot) {
+        ironIcon.shadowRoot.querySelectorAll('svg, img')
+            .forEach(child => child.setAttribute('role', 'none'));
+      }
+    });
+  }
+
+  private onKeyDown_(e: KeyboardEvent) {
+    if (e.key !== ' ' && e.key !== 'Enter') {
+      return;
+    }
+
+    e.preventDefault();
+    e.stopPropagation();
+    if (e.repeat) {
+      return;
+    }
+
+    if (e.key === 'Enter') {
+      this.click();
+    } else if (e.key === ' ') {
+      this.spaceKeyDown_ = true;
+    }
+  }
+
+  private onKeyUp_(e: KeyboardEvent) {
+    if (e.key === ' ' || e.key === 'Enter') {
+      e.preventDefault();
+      e.stopPropagation();
+    }
+
+    if (this.spaceKeyDown_ && e.key === ' ') {
+      this.spaceKeyDown_ = false;
+      this.click();
+    }
+  }
+
+  private onPointerDown_() {
+    this.ensureRipple();
+  }
+}
+
+declare global {
+  interface HTMLElementTagNameMap {
+    'cr-icon-button': CrIconButtonElement;
+  }
+}
+
+customElements.define(CrIconButtonElement.is, CrIconButtonElement);
diff --git a/ash/webui/common/resources/cr_elements/cr_input/cr_input.html b/ash/webui/common/resources/cr_elements/cr_input/cr_input.html
new file mode 100644
index 0000000..8015014
--- /dev/null
+++ b/ash/webui/common/resources/cr_elements/cr_input/cr_input.html
@@ -0,0 +1,174 @@
+<style include="cr-hidden-style cr-input-style cr-shared-style">
+  /*
+    A 'suffix' element will be outside the underlined space, while a
+    'inline-prefix' and 'inline-suffix' elements will be inside the
+    underlined space by default.
+
+    Regarding cr-input's width:
+    When there's no element in the 'inline-prefix', 'inline-suffix' or
+    'suffix' slot, setting the width of cr-input as follows will work as
+    expected:
+
+      cr-input {
+        width: 200px;
+      }
+
+    However, when there's an element in the 'suffix', 'inline-suffix' and/or
+    'inline-prefix' slot, setting the 'width' will dictate the total width
+    of the input field *plus* the 'inline-prefix', 'inline-suffix' and
+    'suffix' elements. To set the width of the input field +
+    'inline-prefix' + 'inline-suffix' when a 'suffix' is present,
+    use --cr-input-width.
+
+      cr-input {
+        --cr-input-width: 200px;
+      }
+  */
+
+  /* Disabled status should not impact suffix slot. */
+  :host([disabled]) :-webkit-any(#label, #error, #input-container) {
+    opacity: var(--cr-disabled-opacity);
+    pointer-events: none;
+  }
+
+  :host-context([chrome-refresh-2023]):host([disabled])
+      :is(#label, #error, #input-container) {
+    opacity: 1;
+  }
+
+  /* Margin between <input> and <cr-button> in the 'suffix' slot */
+  :host ::slotted(cr-button[slot=suffix]) {
+    margin-inline-start: var(--cr-button-edge-spacing) !important;
+  }
+
+  :host([invalid]) #label {
+    color: var(--cr-input-error-color);
+  }
+
+  #input {
+    border-bottom: var(--cr-input-border-bottom, none);
+    letter-spacing: var(--cr-input-letter-spacing);
+  }
+
+  :host-context([chrome-refresh-2023]) #input {
+    border-bottom: none;
+  }
+
+  :host-context([chrome-refresh-2023]) #input-container {
+    border: var(--cr-input-border, none);
+  }
+
+  #input::placeholder {
+    color: var(--cr-input-placeholder-color, var(--cr-secondary-text-color));
+    letter-spacing: var(--cr-input-placeholder-letter-spacing);
+  }
+
+  :host([invalid]) #input {
+    caret-color: var(--cr-input-error-color);
+  }
+
+  :host([readonly]) #input {
+    opacity: var(--cr-input-readonly-opacity, 0.6);
+  }
+
+  :host([invalid]) #underline {
+    border-color: var(--cr-input-error-color);
+  }
+
+  /* Error styling below. */
+  #error {
+    /* Defaults to "display: block" and "visibility:hidden" to allocate
+       space for error message, such that the page does not shift when
+       error appears. For cr-inputs that can't be invalid, but are in a
+       form with cr-inputs that can be invalid, this space is also desired
+       in order to have consistent spacing.
+
+       If spacing is not needed, apply "--cr-input-error-display: none".
+
+       When grouping cr-inputs horizontally, it might be helpful to set
+       --cr-input-error-white-space to "nowrap" and set a fixed width for
+       each cr-input so that a long error label does not shift the inputs
+       forward. */
+    color: var(--cr-input-error-color);
+    display: var(--cr-input-error-display, block);
+    font-size: var(--cr-form-field-label-font-size);
+    height: var(--cr-form-field-label-height);
+    line-height: var(--cr-form-field-label-line-height);
+    margin: 8px 0;
+    visibility: hidden;
+    white-space: var(--cr-input-error-white-space);
+  }
+
+  :host-context([chrome-refresh-2023]) #error {
+    font-size: 11px;
+    line-height: 16px;
+    margin: 4px 10px;
+  }
+
+  :host([invalid]) #error {
+    visibility: visible;
+  }
+
+  #row-container,
+  #inner-input-content {
+    align-items: center;
+    display: flex;
+    /* This will spread the input field and the suffix apart only if the
+       host element width is intentionally set to something large. */
+    justify-content: space-between;
+    position: relative;
+  }
+
+  :host-context([chrome-refresh-2023]) #inner-input-content {
+    gap: 4px;
+    height: 16px;
+    /* Ensures content sits above the hover layer */
+    z-index: 1;
+  }
+
+  #input[type='search']::-webkit-search-cancel-button {
+    display: none;
+  }
+
+  :host-context([dir=rtl]) #input[type=url] {
+    text-align: right;  /* csschecker-disable-line left-right */
+  }
+
+  #input[type=url] {
+    direction: ltr;
+  }
+</style>
+<div id="label" class="cr-form-field-label" hidden="[[!label]]"
+    aria-hidden="true">
+  [[label]]
+</div>
+<div id="row-container" part="row-container">
+  <div id="input-container">
+    <div id="inner-input-container">
+      <div id="hover-layer"></div>
+      <div id="inner-input-content">
+        <slot name="inline-prefix"></slot>
+        <!-- Only attributes that are named inconsistently between html and js
+            need to use attr$="", such as |readonly| vs .readOnly. -->
+        <input id="input" disabled="[[disabled]]" autofocus="[[autofocus]]"
+            value="{{value::input}}" tabindex$="[[inputTabindex]]"
+            type="[[type]]"
+            readonly$="[[readonly]]" maxlength$="[[maxlength]]"
+            pattern$="[[pattern]]" required="[[required]]"
+            minlength$="[[minlength]]" inputmode$="[[inputmode]]"
+            aria-description$="[[ariaDescription]]"
+            aria-label$="[[getAriaLabel_(ariaLabel, label, placeholder)]]"
+            aria-invalid$="[[getAriaInvalid_(invalid)]]"
+            max="[[max]]" min="[[min]]" on-focus="onInputFocus_"
+            on-blur="onInputBlur_" on-change="onInputChange_"
+            part="input"
+            autocomplete="off">
+        <slot name="inline-suffix"></slot>
+      </div>
+    </div>
+    <div id="underline-base"></div>
+    <div id="underline"></div>
+  </div>
+  <slot name="suffix"></slot>
+</div>
+<div id="error" aria-live="assertive">[[displayErrorMessage_]]</div>
diff --git a/ash/webui/common/resources/cr_elements/cr_input/cr_input.ts b/ash/webui/common/resources/cr_elements/cr_input/cr_input.ts
new file mode 100644
index 0000000..68a304d
--- /dev/null
+++ b/ash/webui/common/resources/cr_elements/cr_input/cr_input.ts
@@ -0,0 +1,371 @@
+// Copyright 2018 The Chromium Authors
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Forked from ui/webui/resources/cr_elements/cr_input/cr_input.ts
+
+import '//resources/polymer/v3_0/paper-styles/color.js';
+import '//resources/cr_elements/cr_hidden_style.css.js';
+import '//resources/cr_elements/cr_shared_style.css.js';
+import '//resources/cr_elements/cr_shared_vars.css.js';
+import './cr_input_style.css.js';
+
+import {assert} from '//resources/js/assert.js';
+import {PolymerElement} from '//resources/polymer/v3_0/polymer/polymer_bundled.min.js';
+
+import {getTemplate} from './cr_input.html.js';
+
+
+/**
+ * Input types supported by cr-input.
+ */
+const SUPPORTED_INPUT_TYPES: Set<string> = new Set([
+  'number',
+  'password',
+  'search',
+  'text',
+  'url',
+]);
+
+/**
+ * @fileoverview 'cr-input' is a component similar to native input.
+ *
+ * Native input attributes that are currently supported by cr-inputs are:
+ *   autofocus
+ *   disabled
+ *   max (only applicable when type="number")
+ *   min (only applicable when type="number")
+ *   maxlength
+ *   minlength
+ *   pattern
+ *   placeholder
+ *   readonly
+ *   required
+ *   tabindex (set through input-tabindex)
+ *   type (see |SUPPORTED_INPUT_TYPES| above)
+ *   value
+ *
+ * Additional attributes that you can use with cr-input:
+ *   label
+ *   auto-validate - triggers validation based on |pattern| and |required|,
+ *                   whenever |value| changes.
+ *   error-message - message displayed under the input when |invalid| is true.
+ *   invalid
+ *
+ * You may pass an element into cr-input via [slot="suffix"] to be vertically
+ * center-aligned with the input field, regardless of position of the label and
+ * error-message. Example:
+ *   <cr-input>
+ *     <cr-button slot="suffix"></cr-button>
+ *   </cr-input>
+ */
+export interface CrInputElement {
+  $: {
+    error: HTMLElement,
+    label: HTMLElement,
+    input: HTMLInputElement,
+    underline: HTMLElement,
+  };
+}
+
+export class CrInputElement extends PolymerElement {
+  static get is() {
+    return 'cr-input';
+  }
+
+  static get template() {
+    return getTemplate();
+  }
+
+  static get properties() {
+    return {
+      ariaDescription: {
+        type: String,
+      },
+
+      ariaLabel: {
+        type: String,
+        value: '',
+      },
+
+      autofocus: {
+        type: Boolean,
+        value: false,
+        reflectToAttribute: true,
+      },
+
+      autoValidate: Boolean,
+
+      disabled: {
+        type: Boolean,
+        value: false,
+        reflectToAttribute: true,
+      },
+
+      errorMessage: {
+        type: String,
+        value: '',
+        observer: 'onInvalidOrErrorMessageChanged_',
+      },
+
+      displayErrorMessage_: {
+        type: String,
+        value: '',
+      },
+
+      /**
+       * This is strictly used internally for styling, do not attempt to use
+       * this to set focus.
+       */
+      focused_: {
+        type: Boolean,
+        value: false,
+        reflectToAttribute: true,
+      },
+
+      invalid: {
+        type: Boolean,
+        value: false,
+        notify: true,
+        reflectToAttribute: true,
+        observer: 'onInvalidOrErrorMessageChanged_',
+      },
+
+      max: {
+        type: Number,
+        reflectToAttribute: true,
+      },
+
+      min: {
+        type: Number,
+        reflectToAttribute: true,
+      },
+
+      maxlength: {
+        type: Number,
+        reflectToAttribute: true,
+      },
+
+      minlength: {
+        type: Number,
+        reflectToAttribute: true,
+      },
+
+      pattern: {
+        type: String,
+        reflectToAttribute: true,
+      },
+
+      inputmode: String,
+
+      label: {
+        type: String,
+        value: '',
+      },
+
+      placeholder: {
+        type: String,
+        value: null,
+        observer: 'placeholderChanged_',
+      },
+
+      readonly: {
+        type: Boolean,
+        reflectToAttribute: true,
+      },
+
+      required: {
+        type: Boolean,
+        reflectToAttribute: true,
+      },
+
+      inputTabindex: {
+        type: Number,
+        value: 0,
+        observer: 'onInputTabindexChanged_',
+      },
+
+      type: {
+        type: String,
+        value: 'text',
+        observer: 'onTypeChanged_',
+      },
+
+      value: {
+        type: String,
+        value: '',
+        notify: true,
+        observer: 'onValueChanged_',
+      },
+    };
+  }
+
+  ariaDescription: string|undefined;
+  autoFocus: boolean;
+  autoValidate: boolean;
+  disabled: boolean;
+  errorMessage: string;
+  inputmode: string;
+  inputTabindex: number;
+  invalid: boolean;
+  label: string;
+  max: number;
+  min: number;
+  maxlength: number;
+  minlength: number;
+  pattern: string;
+  placeholder: string|null;
+  readonly: boolean;
+  required: boolean;
+  type: string;
+  value: string;
+
+  private displayErrorMessage_: string;
+  private focused_: boolean;
+
+  override ready() {
+    super.ready();
+
+    // Use inputTabindex instead.
+    assert(!this.hasAttribute('tabindex'));
+  }
+
+  private onInputTabindexChanged_() {
+    // CrInput only supports 0 or -1 values for the input's tabindex to allow
+    // having the input in tab order or not. Values greater than 0 will not work
+    // as the shadow root encapsulates tabindices.
+    assert(this.inputTabindex === 0 || this.inputTabindex === -1);
+  }
+
+  private onTypeChanged_() {
+    // Check that the 'type' is one of the supported types.
+    assert(SUPPORTED_INPUT_TYPES.has(this.type));
+  }
+
+  get inputElement(): HTMLInputElement {
+    return this.$.input;
+  }
+
+  /**
+   * Returns the aria label to be used with the input element.
+   */
+  private getAriaLabel_(ariaLabel: string, label: string, placeholder: string):
+      string {
+    return ariaLabel || label || placeholder;
+  }
+
+  /**
+   * Returns 'true' or 'false' as a string for the aria-invalid attribute.
+   */
+  private getAriaInvalid_(invalid: boolean): string {
+    return invalid ? 'true' : 'false';
+  }
+
+  private onInvalidOrErrorMessageChanged_() {
+    this.displayErrorMessage_ = this.invalid ? this.errorMessage : '';
+
+    // On VoiceOver role="alert" is not consistently announced when its content
+    // changes. Adding and removing the |role| attribute every time there
+    // is an error, triggers VoiceOver to consistently announce.
+    const ERROR_ID = 'error';
+    const errorElement =
+        this.shadowRoot!.querySelector<HTMLElement>(`#${ERROR_ID}`);
+    assert(errorElement);
+    if (this.invalid) {
+      errorElement.setAttribute('role', 'alert');
+      this.inputElement.setAttribute('aria-errormessage', ERROR_ID);
+    } else {
+      errorElement.removeAttribute('role');
+      this.inputElement.removeAttribute('aria-errormessage');
+    }
+  }
+
+  /**
+   * This is necessary instead of doing <input placeholder="[[placeholder]]">
+   * because if this.placeholder is set to a truthy value then removed, it
+   * would show "null" as placeholder.
+   */
+  private placeholderChanged_() {
+    if (this.placeholder || this.placeholder === '') {
+      this.inputElement.setAttribute('placeholder', this.placeholder);
+    } else {
+      this.inputElement.removeAttribute('placeholder');
+    }
+  }
+
+  override focus() {
+    this.focusInput();
+  }
+
+  /**
+   * Focuses the input element.
+   * TODO(crbug.com/882612): Replace this with focus() after resolving the text
+   * selection issue described in onFocus_().
+   * @return Whether the <input> element was focused.
+   */
+  focusInput(): boolean {
+    if (this.shadowRoot!.activeElement === this.inputElement) {
+      return false;
+    }
+    this.inputElement.focus();
+    return true;
+  }
+
+  private onValueChanged_(newValue: string, oldValue: string) {
+    if (!newValue && !oldValue) {
+      return;
+    }
+    if (this.autoValidate) {
+      this.validate();
+    }
+  }
+
+  /**
+   * 'change' event fires when <input> value changes and user presses 'Enter'.
+   * This function helps propagate it to host since change events don't
+   * propagate across Shadow DOM boundary by default.
+   */
+  private onInputChange_(e: Event) {
+    this.dispatchEvent(new CustomEvent(
+        'change', {bubbles: true, composed: true, detail: {sourceEvent: e}}));
+  }
+
+  private onInputFocus_() {
+    this.focused_ = true;
+  }
+
+  private onInputBlur_() {
+    this.focused_ = false;
+  }
+
+  /**
+   * Selects the text within the input. If no parameters are passed, it will
+   * select the entire string. Either no params or both params should be passed.
+   * Publicly, this function should be used instead of inputElement.select() or
+   * manipulating inputElement.selectionStart/selectionEnd because the order of
+   * execution between focus() and select() is sensitive.
+   */
+  select(start?: number, end?: number) {
+    this.inputElement.focus();
+    if (start !== undefined && end !== undefined) {
+      this.inputElement.setSelectionRange(start, end);
+    } else {
+      // Can't just pass one param.
+      assert(start === undefined && end === undefined);
+      this.inputElement.select();
+    }
+  }
+
+  validate(): boolean {
+    this.invalid = !this.inputElement.checkValidity();
+    return !this.invalid;
+  }
+}
+
+declare global {
+  interface HTMLElementTagNameMap {
+    'cr-input': CrInputElement;
+  }
+}
+
+customElements.define(CrInputElement.is, CrInputElement);
diff --git a/ash/webui/common/resources/cr_elements/cr_input/cr_input_externs.js b/ash/webui/common/resources/cr_elements/cr_input/cr_input_externs.js
new file mode 100644
index 0000000..2923142f
--- /dev/null
+++ b/ash/webui/common/resources/cr_elements/cr_input/cr_input_externs.js
@@ -0,0 +1,40 @@
+// Copyright 2022 The Chromium Authors
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+/* Minimal externs file provided for places in the code that
+ * still use JavaScript instead of TypeScript.
+ * @externs
+ */
+
+/**
+ * @constructor
+ * @extends {HTMLElement}
+ */
+function CrInputElement() {}
+
+/** @type {string} */
+CrInputElement.prototype.ariaLabel;
+
+/** @type {boolean} */
+CrInputElement.prototype.invalid;
+
+/** @type {number} */
+CrInputElement.prototype.maxlength;
+
+/** @type {string} */
+CrInputElement.prototype.value;
+
+/** @type {!HTMLInputElement} */
+CrInputElement.prototype.inputElement;
+
+CrInputElement.prototype.focusInput = function() {};
+
+/**
+ * @param {number=} start
+ * @param {number=} end
+ */
+CrInputElement.prototype.select = function(start, end) {};
+
+/** @return {boolean} */
+CrInputElement.prototype.validate = function() {};
diff --git a/ash/webui/common/resources/cr_elements/cr_input/cr_input_style.css b/ash/webui/common/resources/cr_elements/cr_input/cr_input_style.css
new file mode 100644
index 0000000..598e36da
--- /dev/null
+++ b/ash/webui/common/resources/cr_elements/cr_input/cr_input_style.css
@@ -0,0 +1,238 @@
+/* Copyright 2022 The Chromium Authors
+ * Use of this source code is governed by a BSD-style license that can be
+ * found in the LICENSE file. */
+
+/* #css_wrapper_metadata_start
+ * #type=style
+ * #import=//resources/cr_elements/cr_shared_vars.css.js
+ * #scheme=relative
+ * #css_wrapper_metadata_end */
+
+      :host {
+        --cr-input-background-color: var(--google-grey-100);
+        --cr-input-color: var(--cr-primary-text-color);
+        --cr-input-error-color: var(--google-red-600);
+        --cr-input-focus-color: var(--google-blue-600);
+        display: block;
+        /* Avoid showing outline when focus() programmatically called multiple
+           times in a row. */
+        outline: none;
+      }
+
+      :host-context([chrome-refresh-2023]):host {
+        --cr-input-background-color: var(--color-textfield-filled-background,
+            var(--cr-fallback-color-surface-variant));
+        --cr-input-border-bottom: 1px solid
+            var(--color-textfield-filled-underline,
+                var(--cr-fallback-color-outline));
+        --cr-input-border-radius: 8px 8px 0 0;
+        --cr-input-error-color: var(--color-textfield-filled-error,
+            var(--cr-fallback-color-error));
+        --cr-input-focus-color: var(--color-textfield-filled-underline-focused,
+            var(--cr-fallback-color-primary));
+        --cr-input-hover-background-color: var(--cr-hover-background-color);
+        --cr-input-label-color: var(--color-textfield-foreground-label,
+            var(--cr-fallback-color-on-surface-subtle));
+        --cr-input-padding-bottom: 10px;
+        --cr-input-padding-end: 10px;
+        --cr-input-padding-start: 10px;
+        --cr-input-padding-top: 10px;
+        --cr-input-placeholder-color:
+            var(--color-textfield-foreground-placeholder,
+                var(--cr-fallback-on-surface-subtle));
+        isolation: isolate;
+      }
+
+      :host-context([chrome-refresh-2023]):host([readonly]) {
+        --cr-input-border-radius: 8px 8px;
+      }
+
+      @media (prefers-color-scheme: dark) {
+        :host {
+          --cr-input-background-color: rgba(0, 0, 0, .3);
+          --cr-input-error-color: var(--google-red-300);
+          --cr-input-focus-color: var(--google-blue-300);
+        }
+      }
+
+      :host-context(html:not([chrome-refresh-2023])):host([focused_]:not([readonly]):not([invalid]))
+          #label {
+        color: var(--cr-input-focus-color);
+      }
+
+      :host-context([chrome-refresh-2023]) #label {
+        color: var(--cr-input-label-color);
+        font-size: 11px;
+        line-height: 16px;
+      }
+
+      :host-context([chrome-refresh-2023]):host([focused_]:not([readonly]):not([invalid]))
+          #label {
+        color: var(--cr-input-focus-label-color, var(--cr-input-label-color));
+      }
+
+      /* Input styling below. */
+      #input-container {
+        border-radius: var(--cr-input-border-radius, 4px);
+        overflow: hidden;
+        position: relative;
+        width: var(--cr-input-width, 100%);
+      }
+
+      :host-context([chrome-refresh-2023]):host([focused_]) #input-container {
+        outline: var(--cr-input-focus-outline, none);
+      }
+
+      #inner-input-container {
+        background-color: var(--cr-input-background-color);
+        box-sizing: border-box;
+        padding: 0;
+      }
+
+      :host-context([chrome-refresh-2023]) #inner-input-content ::slotted(*) {
+        --cr-icon-button-fill-color: var(--color-textfield-foreground-icon,
+            var(--cr-fallback-color-on-surface-subtle));
+        --cr-icon-button-icon-size: 16px;
+        --cr-icon-button-size: 24px;
+        --cr-icon-button-margin-start: 0;
+        --cr-icon-color: var(--color-textfield-foreground-icon,
+            var(--cr-fallback-color-on-surface-subtle));
+      }
+
+      :host-context([chrome-refresh-2023]) #inner-input-content
+          ::slotted([slot='inline-prefix']) {
+        --cr-icon-button-margin-start: -8px;
+      }
+
+      :host-context([chrome-refresh-2023]) #inner-input-content
+          ::slotted([slot='inline-suffix']) {
+        --cr-icon-button-margin-end: -4px;
+      }
+
+      :host-context([chrome-refresh-2023]):host([invalid])
+          #inner-input-content ::slotted(*) {
+        --cr-icon-color: var(--cr-input-error-color);
+        --cr-icon-button-fill-color: var(--cr-input-error-color);
+      }
+
+      #hover-layer {
+        display: none;
+      }
+
+      :host-context([chrome-refresh-2023]) #hover-layer {
+        background-color: var(--cr-input-hover-background-color);
+        inset: 0;
+        pointer-events: none;
+        position: absolute;
+        z-index: 0;
+      }
+
+      :host-context([chrome-refresh-2023]):host(:not([readonly]):not([disabled]))
+          #input-container:hover #hover-layer {
+        display: block;
+      }
+
+      #input {
+        -webkit-appearance: none;
+        /* Transparent, #inner-input-container will apply background. */
+        background-color: transparent;
+        border: none;
+        box-sizing: border-box;
+        caret-color: var(--cr-input-focus-color);
+        color: var(--cr-input-color);
+        font-family: inherit;
+        font-size: inherit;
+        font-weight: inherit;
+        line-height: inherit;
+        min-height: var(--cr-input-min-height, auto);
+        outline: none;
+
+        /**
+         * When using mixins, avoid using padding shorthand. Using both the
+         * shorthand and top/bottom/start/end can lead to style override issues.
+         * This is only noticable when the |optimize_webui=true| build argument
+         * is used.
+         *
+         * See https://crbug.com/846254 and associated CL for more information.
+         */
+        padding-bottom: var(--cr-input-padding-bottom, 6px);
+        padding-inline-end: var(--cr-input-padding-end, 8px);
+        padding-inline-start: var(--cr-input-padding-start, 8px);
+        padding-top: var(--cr-input-padding-top, 6px);
+
+        text-align: inherit;
+        text-overflow: ellipsis;
+        width: 100%;
+      }
+
+      :host-context([chrome-refresh-2023]) #input {
+        font-size: 12px;
+        line-height: 16px;
+        padding: 0;
+      }
+
+      :host-context([chrome-refresh-2023]) #inner-input-content {
+        padding-bottom: var(--cr-input-padding-bottom);
+        padding-inline-end: var(--cr-input-padding-end);
+        padding-inline-start: var(--cr-input-padding-start);
+        padding-top: var(--cr-input-padding-top);
+      }
+
+      /* Underline styling below. */
+      #underline {
+        border-bottom: 2px solid var(--cr-input-focus-color);
+        border-radius: var(--cr-input-underline-border-radius, 0);
+        bottom: 0;
+        box-sizing: border-box;
+        display: var(--cr-input-underline-display);
+        height: var(--cr-input-underline-height, 0);
+        left: 0;
+        margin: auto;
+        opacity: 0;
+        position: absolute;
+        right: 0;
+        transition: opacity 120ms ease-out, width 0s linear 180ms;
+        width: 0;
+      }
+
+      :host([invalid]) #underline,
+      :host([force-underline]) #underline,
+      :host([focused_]) #underline {
+        opacity: 1;
+        transition: opacity 120ms ease-in, width 180ms ease-out;
+        width: 100%;
+      }
+
+      #underline-base {
+        display: none;
+      }
+
+      :host-context([chrome-refresh-2023]):host([readonly]) #underline {
+        display: none;
+      }
+
+      :host-context([chrome-refresh-2023]):host(:not([readonly]))
+          #underline-base {
+        border-bottom: var(--cr-input-border-bottom);
+        bottom: 0;
+        display: block;
+        left: 0;
+        position: absolute;
+        right: 0;
+      }
+
+      :host-context([chrome-refresh-2023]):host([disabled]) {
+        color: var(--color-textfield-foreground-disabled,
+            var(--cr-fallback-color-disabled-foreground));
+        --cr-input-border-bottom: 1px solid currentColor;
+        --cr-input-placeholder-color: currentColor;
+        --cr-input-color: currentColor;
+        --cr-input-background-color: var(--color-textfield-background-disabled,
+            var(--cr-fallback-color-disabled-background));
+      }
+
+      :host-context([chrome-refresh-2023]):host([disabled])
+          #inner-input-content ::slotted(*) {
+        --cr-icon-color: currentColor;
+        --cr-icon-button-fill-color: currentColor;
+      }
diff --git a/ash/webui/common/resources/cr_elements/cros_color_overrides.css b/ash/webui/common/resources/cr_elements/cros_color_overrides.css
new file mode 100644
index 0000000..936973eb
--- /dev/null
+++ b/ash/webui/common/resources/cr_elements/cros_color_overrides.css
@@ -0,0 +1,464 @@
+/* Copyright 2022 The Chromium Authors
+ * Use of this source code is governed by a BSD-style license that can be
+ * found in the LICENSE file. */
+
+/* #css_wrapper_metadata_start
+ * #type=style
+ * #scheme=relative
+ * #css_wrapper_metadata_end */
+
+/*
+ * Style Module that defines overrides for cr-elements on ChromeOS. This file
+ * plumbs semantic colors and fonts into cr-elements.
+ *
+ * To get ChromeOS System colors, an element must:
+ * 1) Have an ancestor element with the "cros" attribute in the <html> tag.
+ * 2) Import the "cros_color_overrides.css.js" CSS wrapper file in JS/TS.
+ * 3) Include the "cros-color-overrides" style module in HTML.
+ *
+ * To get ChromeOS Jelly colors, an element must:
+ * 1) Have an ancestor element with the "jelly-enabled" class in the <body> tag.
+ * 2) Import the "cros_color_overrides.css.js" CSS wrapper file in JS/TS.
+ * 3) Include the "cros-color-overrides" style module in HTML.
+ *
+ * To apply ChromeOS overrides for Chrome Refresh 2023 styles, an element must:
+ * 1) Have an ancestor element with both the "cros" and "chrome-refresh-2023"
+ *    attributes in the <html> tag.
+ * 2) Import the "cros_color_overrides.css.js" CSS wrapper file in JS/TS.
+ * 3) Include the "cros-color-overrides" style module in HTML.
+ */
+
+:host-context([cros]) a:not(.item)[href] {
+  color: var(--cros-link-color);
+}
+
+:host-context([cros]) cr-button[has-prefix-icon_],
+:host-context([cros]) cr-button[has-suffix-icon_] {
+  --iron-icon-fill-color: currentColor;
+}
+
+:host-context([cros]) cr-dialog::part(dialog) {
+  --cr-dialog-background-color: var(--cros-bg-color-elevation-3);
+  background-image: none;
+  box-shadow: var(--cros-elevation-3-shadow);
+}
+
+:host-context([cros]) cr-radio-button {
+  --cr-radio-button-checked-color: var(--cros-radio-button-color);
+  --cr-radio-button-checked-ripple-color:
+      var(--cros-radio-button-ripple-color);
+  --cr-radio-button-unchecked-color:
+      var(--cros-radio-button-color-unchecked);
+  --cr-radio-button-unchecked-ripple-color:
+      var(--cros-radio-button-ripple-color-unchecked);
+}
+
+:host-context([cros]) cr-toast {
+  --cr-toast-background-color: var(--cros-toast-background-color);
+  --cr-toast-background: var(--cros-toast-background-color);
+  --cr-toast-text-color: var(--cros-toast-text-color);
+  --iron-icon-fill-color: var(--cros-toast-icon-color);
+}
+
+:host-context([cros]) cr-toast .error-message {
+  color: var(--cros-toast-text-color);
+}
+
+:host-context([cros]) cr-toggle {
+  --cr-toggle-checked-bar-color: var(--cros-switch-track-color-active);
+  /* |--cros-switch-track-color-active| already includes opacity. */
+  --cr-toggle-checked-bar-opacity: 100%;
+  --cr-toggle-checked-button-color: var(--cros-switch-knob-color-active);
+  --cr-toggle-checked-ripple-color: var(--cros-focus-aura-color);
+  --cr-toggle-unchecked-bar-color: var(--cros-switch-track-color-inactive);
+  --cr-toggle-unchecked-button-color: var(--cros-switch-knob-color-inactive);
+  --cr-toggle-unchecked-ripple-color: var(--cros-ripple-color);
+  --cr-toggle-box-shadow: var(--cros-elevation-1-shadow);
+  --cr-toggle-ripple-diameter: 32px;
+}
+
+:host-context([cros]):host-context(.focus-outline-visible) cr-toggle:focus {
+  --cr-toggle-ripple-ring: 2px solid var(--cros-focus-ring-color);
+}
+
+:host-context([cros]) .primary-toggle {
+  color: var(--cros-text-color-secondary);
+}
+
+:host-context([cros]) .primary-toggle[checked] {
+  color: var(--cros-text-color-prominent);
+}
+
+:host-context([cros]) paper-spinner-lite {
+  --paper-spinner-color: var(--cros-icon-color-prominent);
+}
+
+:host-context([cros]) cr-tooltip-icon {
+  --cr-link-color: var(--cros-tooltip-link-color);
+}
+
+/** Jelly-specific styles below */
+
+/** General color overrides */
+:host-context(body.jelly-enabled) {
+  /* TODO(b/266837484) --cros-* values will be updated globally. Remove these
+    definitions after the swap. */
+  --cros-button-label-color-primary: var(--cros-sys-on_primary);
+  --cros-link-color: var(--cros-sys-primary);
+  --cros-separator-color: var(--cros-sys-separator);
+  --cros-tab-slider-track-color: var(--cros-sys-surface_variant, 80%);
+
+  --cr-form-field-label-color: var(--cros-sys-on_surface);
+  --cr-link-color: var(--cros-sys-primary);
+  --cr-primary-text-color: var(--cros-sys-on_surface);
+  --cr-secondary-text-color: var(--cros-sys-on_surface_variant);
+}
+
+:host-context([cros][chrome-refresh-2023]) {
+  --cr-focus-outline-color: var(--cros-sys-focus_ring);
+  --cr-disabled-opacity: var(--cros-disabled-opacity);
+}
+
+/* Button */
+:host-context(body.jelly-enabled) cr-button {
+  /* Default button colors */
+  --text-color: var(--cros-sys-on_primary_container);
+  --ink-color: var(--cros-sys-ripple_primary);
+  --iron-icon-fill-color: currentColor;
+  --hover-bg-color: var(--cros-sys-hover_on_subtle);
+  --ripple-opacity: .1;
+
+  /* Action button colors */
+  --bg-action: var(--cros-sys-primary);
+  --ink-color-action: var(--cros-sys-ripple_primary);
+  --text-color-action: var(--cros-sys-on_primary);
+  --hover-bg-action: var(--cros-sys-hover_on_prominent);
+  --ripple-opacity-action: 1;
+
+  /* Disabled button colors */
+  --disabled-bg: var(--cros-sys-disabled_container);
+  --disabled-bg-action: var(--cros-sys-disabled_container);
+  --disabled-text-color: var(--cros-sys-disabled);
+
+  background-color: var(--cros-sys-primary_container);
+  border: none;
+}
+
+:host-context(body.jelly-enabled) cr-button:hover::part(hoverBackground) {
+  background-color: var(--hover-bg-color);
+  display: block;
+}
+
+:host-context(body.jelly-enabled) cr-button:active,
+:host-context(body.jelly-enabled) cr-button.action-button:not(:active):hover  {
+  box-shadow: none;
+}
+
+:host-context(body.jelly-enabled) cr-button.action-button {
+  background-color: var(--bg-action);
+}
+
+:host-context(body.jelly-enabled)
+    cr-button.action-button:hover::part(hoverBackground) {
+  background-color: var(--hover-bg-action);
+}
+
+:host-context(body.jelly-enabled) cr-button[disabled] {
+  background-color: var(--cros-sys-disabled_container);
+}
+
+:host-context(body.jelly-enabled):host-context(.focus-outline-visible)
+    cr-button:focus {
+  box-shadow: none;
+  outline: 2px solid var(--cros-sys-focus_ring);
+}
+
+/* Checkbox */
+:host-context(body.jelly-enabled) cr-checkbox {
+  --cr-checkbox-checked-box-color: var(--cros-sys-primary);
+  --cr-checkbox-ripple-checked-color: var(--cros-sys-ripple_primary);
+  --cr-checkbox-checked-ripple-opacity: 1;
+  --cr-checkbox-mark-color: var(--cros-sys-inverse_on_surface);
+  --cr-checkbox-ripple-unchecked-color: var(--cros-sys-ripple_primary);
+  --cr-checkbox-unchecked-box-color: var(--cros-sys-on_surface);
+  --cr-checkbox-unchecked-ripple-opacity: 1;
+}
+
+:host-context([cros][chrome-refresh-2023]) cr-checkbox {
+  --cr-checkbox-focus-outline: none;
+}
+
+:host-context([cros][chrome-refresh-2023]) cr-checkbox[disabled] {
+  opacity: var(--cros-disabled-opacity);
+}
+
+:host-context([cros][chrome-refresh-2023]):host-context(.focus-outline-visible)
+    cr-checkbox:focus {
+  --cr-checkbox-ripple-ring: 2px solid var(--cros-sys-focus_ring);
+}
+
+/* Dialog */
+:host-context(body.jelly-enabled) cr-dialog::part(dialog) {
+  --cr-dialog-background-color: var(--cros-sys-base_elevated);
+  background-image: none;
+
+  /* TODO(b/266837484) Replace with cros.sys.app-elevation3 when available */
+  box-shadow: 0 0 12px 0 var(--cros-sys-shadow);
+}
+
+:host-context(body.jelly-enabled) cr-dialog > [slot='title'] {
+  font: var(--cros-display-7-font);
+}
+
+/* Drawer */
+:host-context(body.jelly-enabled) cr-drawer {
+  --cr-drawer-background-color: var(--cros-sys-app_base_shaded);
+}
+
+/* Icon button */
+:host-context(body.jelly-enabled) cr-icon-button,
+:host-context(body.jelly-enabled) cr-link-row::part(icon),
+:host-context(body.jelly-enabled) cr-expand-button::part(icon) {
+  --cr-icon-button-fill-color: var(--cros-sys-secondary);
+}
+
+/* Input and Textarea */
+:host-context(body.jelly-enabled) cr-input,
+:host-context(body.jelly-enabled) cr-search-field::part(searchInput),
+:host-context(body.jelly-enabled) cr-searchable-drop-down::part(input),
+:host-context(body.jelly-enabled) cr-textarea {
+  --cr-input-background-color: var(--cros-sys-input_field_on_base);
+  --cr-input-error-color: var(--cros-sys-error);
+  --cr-input-focus-color: var(--cros-sys-primary);
+  --cr-input-placeholder-color: var(--cros-sys-secondary);
+}
+
+:host-context([cros][chrome-refresh-2023]) cr-input,
+:host-context([cros][chrome-refresh-2023]) cr-search-field::part(searchInput) {
+  --cr-input-background-color: var(--cros-sys-input_field_on_base);
+  --cr-input-border: none;
+  --cr-input-border-bottom: none;
+  --cr-input-border-radius: 8px;
+  --cr-input-label-color: var(--cros-sys-on-surface);
+  --cr-input-padding-start: 16px;
+  --cr-input-padding-end: 16px;
+  --cr-input-placeholder-color: var(--cros-sys-secondary);
+  --cr-input-underline-display: none;
+
+  font: var(--cros-body-2-font);
+
+  /* Focused state */
+  --cr-input-focus-color: var(--cros-sys-primary);
+  --cr-input-focus-label-color: var(--cros-sys-primary);
+  --cr-input-focus-outline: 2px solid var(--cros-sys-focus_ring);
+
+  /* Hover state */
+  --cr-input-hover-background-color: transparent;
+
+  /* Invalid state */
+  --cr-input-error-color: var(--cros-sys-error);
+}
+
+:host-context([cros][chrome-refresh-2023]) cr-input[disabled] {
+  color: currentColor;
+  opacity: var(--cros-disabled-opacity);
+}
+
+:host-context([cros][chrome-refresh-2023]) cr-input[invalid] {
+  --cr-input-focus-outline: 2px solid var(--cros-sys-error);
+}
+
+/* Toolbar search field */
+:host-context([cros][chrome-refresh-2023]) cr-toolbar-search-field {
+  --cr-toolbar-search-field-hover-background: none;
+}
+
+/* md-select */
+:host-context(body.jelly-enabled) .md-select {
+  --md-select-bg-color: var(--cros-sys-input_field_on_base);
+  --md-select-focus-shadow-color: var(--cros-sys-primary);
+  --md-select-option-bg-color: var(--cros-sys-base_elevated);
+  --md-select-text-color: var(--cros-sys-on_surface);
+}
+
+:host-context([cros][chrome-refresh-2023]) .md-select {
+  --md-arrow-width: 7px;
+  --md-select-bg-color: var(--cros-sys-input_field_on_base);
+  --md-select-focus-shadow-color: transparent;
+  --md-select-option-bg-color: var(--cros-sys-base_elevated);
+  --md-select-side-padding: 16px;
+  --md-select-text-color: var(--cros-sys-on_surface);
+  border: none;
+  border-radius: 8px;
+  font: var(--cros-body-2-font);
+  height: 36px;
+  line-height: 36px;
+}
+
+:host-context([cros][chrome-refresh-2023]) .md-select:hover {
+  background-color: var(--md-select-bg-color);
+}
+
+:host-context([cros][chrome-refresh-2023]) .md-select[disabled] {
+  background-color: var(--md-select-bg-color);
+  border-color: transparent;
+  color: var(--md-select-text-color);
+  opacity: var(--cros-disabled-opacity);
+}
+
+/* Menu */
+:host-context(body.jelly-enabled) cr-action-menu {
+  --cr-menu-background-color: var(--cros-sys-base_elevated);
+  --cr-menu-background-focus-color: var(--cros-sys-hover_on_subtle);
+}
+
+/* Radio button */
+:host-context(body.jelly-enabled),
+:host-context(body.jelly-enabled) cr-radio-button {
+  --cr-radio-button-checked-color: var(--cros-sys-primary);
+  --cr-radio-button-checked-ripple-color: var(--cros-sys-ripple_primary);
+  --cr-radio-button-unchecked-color: var(--cros-sys-on_surface);
+  --cr-radio-button-unchecked-ripple-color:
+      var(--cros-sys-ripple_neutral_on_subtle);
+}
+
+:host-context([cros][chrome-refresh-2023]),
+:host-context([cros][chrome-refresh-2023]) cr-radio-button {
+  --cr-radio-button-checked-color: var(--cros-sys-primary);
+  --cr-radio-button-checked-ripple-color: var(--cros-sys-ripple_primary);
+  --cr-radio-button-unchecked-color: var(--cros-sys-on_surface);
+  --cr-radio-button-unchecked-ripple-color:
+    var(--cros-sys-ripple_neutral_on_subtle);
+  --cr-radio-button-ink-size: 40px;
+}
+
+:host-context([cros][chrome-refresh-2023]) cr-radio-button[disabled] {
+  --cr-radio-button-checked-color: var(--cros-sys-disabled);
+  --cr-radio-button-unchecked-color: var(--cros-sys-disabled);
+}
+
+:host-context(body.jelly-enabled) cr-card-radio-button {
+  --cr-card-background-color: var(--cros-sys-app_base);
+  --cr-checked-color: var(--cros-sys-primary);
+  --cr-radio-button-checked-ripple-color: var(--cros-sys-ripple_primary);
+  --hover-bg-color: var(--cros-sys-hover_on_subtle);
+}
+
+/* Search field */
+:host-context(body.jelly-enabled) cr-search-field {
+  --cr-search-field-clear-icon-fill: var(--cros-sys-primary);
+  --cr-search-field-clear-icon-margin-end: 6px;
+  --cr-search-field-input-border-bottom: none;
+  --cr-search-field-input-padding-start: 8px;
+  --cr-search-field-input-underline-border-radius: 4px;
+  --cr-search-field-search-icon-display: none;
+  --cr-search-field-search-icon-fill: var(--cros-sys-primary);
+  --cr-search-field-search-icon-inline-display: block;
+  --cr-search-field-search-icon-inline-margin-start: 6px;
+  border-radius: 4px;
+}
+
+:host-context([cros][chrome-refresh-2023]) cr-search-field {
+  /* Search icon */
+  --cr-search-field-search-icon-fill: var(--cros-sys-secondary);
+  --cr-search-field-search-icon-inline-margin-start: 0;
+
+  /* Clear icon */
+  --cr-search-field-clear-icon-fill: var(--cros-sys-secondary);
+  --cr-search-field-clear-icon-margin-end: 6px;
+  --cr-search-field-clear-icon-size: 16px;
+}
+
+:host-context([cros][chrome-refresh-2023]) cr-search-field::part(searchInput) {
+  /* Modify the styles defined in "Input and Textarea" above. */
+  --cr-input-padding-bottom: 10px;
+  --cr-input-padding-end: 28px;
+  --cr-input-padding-start: 8px;
+  --cr-input-padding-top: 10px;
+}
+
+/* Searchable Dropdown */
+:host-context(body.jelly-enabled) cr-searchable-drop-down {
+  --cr-searchable-drop-down-bg-color: var(--cros-sys-base_elevated);
+  --cr-searchable-drop-down-icon-color-focus: var(--cros-sys-primary);
+  --cr-searchable-drop-down-list-bg-color-selected:
+      var(--cros-sys-base_highlight);
+  --cr-searchable-drop-down-list-item-color: var(--cros-sys-on_surface);
+  --cr-searchable-drop-down-shadow: var(--cros-elevation-3-shadow);
+}
+
+/* Slider */
+:host-context(body.jelly-enabled) cr-slider {
+  --cr-slider-active-color: var(--cros-sys-primary);
+  --cr-slider-container-color: var(--cros-sys-primary_container);
+  --cr-slider-container-disabled-color: var(--cros-sys-disabled_container);
+  --cr-slider-disabled-color: var(--cros-sys-disabled);
+  --cr-slider-knob-active-color: var(--cros-sys-primary);
+  --cr-slider-knob-disabled-color: var(--cros-sys-disabled);
+  --cr-slider-marker-active-color: var(--cros-sys-primary_container);
+  --cr-slider-marker-color: var(--cros-sys-primary);
+  --cr-slider-marker-disabled-color: var(--cros-sys-disabled);
+  --cr-slider-ripple-color: var(--cros-sys-hover_on_prominent);
+}
+
+:host-context(body.jelly-enabled) cr-slider:not([disabled])::part(knob) {
+  background-color: var(--cros-sys-primary);
+}
+
+:host-context(body.jelly-enabled) cr-slider[disabled]::part(knob) {
+  border: none;
+}
+
+:host-context(body.jelly-enabled) cr-slider::part(label) {
+  background: var(--cros-sys-primary);
+  color: var(--cros-sys-on_primary);
+}
+
+/* Tabs */
+:host-context(body.jelly-enabled) cr-tabs {
+  --cr-tabs-selected-color: var(--cros-sys-primary);
+}
+
+/* Toggle */
+:host-context(body.jelly-enabled) cr-toggle {
+  --cr-toggle-checked-bar-color: var(--cros-sys-primary_container);
+  --cr-toggle-checked-bar-opacity: 100%;
+  --cr-toggle-checked-button-color: var(--cros-sys-primary);
+  --cr-toggle-checked-ripple-color: var(--cros-sys-hover_on_prominent);
+  --cr-toggle-unchecked-bar-color: var(--cros-sys-secondary);
+  --cr-toggle-unchecked-button-color: var(--cros-sys-surface_variant);
+  --cr-toggle-unchecked-ripple-color: var(--cros-sys-hover_on_prominent);
+  /* TODO(b/266837484) Replace with cros.sys.app-elevation1 when available */
+  --cr-toggle-box-shadow: var(--cros-elevation-1-shadow);
+  --cr-toggle-ripple-diameter: 32px;
+}
+
+:host-context(body.jelly-enabled):host-context(.focus-outline-visible)
+    cr-toggle:focus {
+  --cr-toggle-ripple-ring: 2px solid var(--cros-sys-focus_ring);
+}
+
+:host-context([cros][chrome-refresh-2023]) cr-toggle {
+  --cr-toggle-bar-width: 32px;
+  --cr-toggle-knob-diameter: 12px;
+  --cr-toggle-bar-border: none;
+
+  /* "On" state */
+  --cr-toggle-checked-bar-color: var(--cros-sys-primary);
+  --cr-toggle-checked-button-color: var(--cros-sys-on_primary);
+
+  /* "Off" state */
+  --cr-toggle-unchecked-bar-color: var(--cros-sys-secondary);
+  --cr-toggle-unchecked-button-color: var(--cros-sys-on_secondary);
+
+  /* Hover state */
+  --color-toggle-button-thumb-on-hover: var(--cros-sys-on_primary);
+
+  /* Disabled state */
+  --cr-toggle-disabled-opacity: var(--cros-disabled-opacity);
+}
+
+:host-context([cros][chrome-refresh-2023]):host-context(.focus-outline-visible)
+    cr-toggle:focus {
+  --cr-toggle-ripple-ring: none;
+}
diff --git a/ash/webui/common/resources/cr_elements/icons.html b/ash/webui/common/resources/cr_elements/icons.html
new file mode 100644
index 0000000..b0c72fa1
--- /dev/null
+++ b/ash/webui/common/resources/cr_elements/icons.html
@@ -0,0 +1,340 @@
+<!--
+List commonly used icons here to prevent duplication.
+Do not add rarely used icons here; place those in your application.
+Note that 20px and 24px icons are specified separately (size="", below).
+
+Icons are rendered at 20x20 px, but we don't have 20 px SVGs for everything.
+The 24 px icons are used where 20 px icons are unavailable (which may appear
+blurry at 20 px). Please use 20 px icons when available.
+-->
+<iron-iconset-svg name="cr20" size="20">
+  <svg>
+    <defs>
+      <!--
+      Keep these in sorted order by id="". See also http://goo.gl/Y1OdAq
+      -->
+      <g id="block">
+        <path fill-rule="evenodd" clip-rule="evenodd"
+          d="M10 0C4.48 0 0 4.48 0 10C0 15.52 4.48 20 10 20C15.52 20 20 15.52 20 10C20 4.48 15.52 0 10 0ZM2 10C2 5.58 5.58 2 10 2C11.85 2 13.55 2.63 14.9 3.69L3.69 14.9C2.63 13.55 2 11.85 2 10ZM5.1 16.31C6.45 17.37 8.15 18 10 18C14.42 18 18 14.42 18 10C18 8.15 17.37 6.45 16.31 5.1L5.1 16.31Z">
+        </path>
+      </g>
+      <g id="cloud-off">
+        <path
+          d="M16 18.125L13.875 16H5C3.88889 16 2.94444 15.6111 2.16667 14.8333C1.38889 14.0556 1 13.1111 1 12C1 10.9444 1.36111 10.0347 2.08333 9.27083C2.80556 8.50694 3.6875 8.09028 4.72917 8.02083C4.77083 7.86805 4.8125 7.72222 4.85417 7.58333C4.90972 7.44444 4.97222 7.30555 5.04167 7.16667L1.875 4L2.9375 2.9375L17.0625 17.0625L16 18.125ZM5 14.5H12.375L6.20833 8.33333C6.15278 8.51389 6.09722 8.70139 6.04167 8.89583C6 9.07639 5.95139 9.25694 5.89583 9.4375L4.83333 9.52083C4.16667 9.57639 3.61111 9.84028 3.16667 10.3125C2.72222 10.7708 2.5 11.3333 2.5 12C2.5 12.6944 2.74306 13.2847 3.22917 13.7708C3.71528 14.2569 4.30556 14.5 5 14.5ZM17.5 15.375L16.3958 14.2917C16.7153 14.125 16.9792 13.8819 17.1875 13.5625C17.3958 13.2431 17.5 12.8889 17.5 12.5C17.5 11.9444 17.3056 11.4722 16.9167 11.0833C16.5278 10.6944 16.0556 10.5 15.5 10.5H14.125L14 9.14583C13.9028 8.11806 13.4722 7.25694 12.7083 6.5625C11.9444 5.85417 11.0417 5.5 10 5.5C9.65278 5.5 9.31944 5.54167 9 5.625C8.69444 5.70833 8.39583 5.82639 8.10417 5.97917L7.02083 4.89583C7.46528 4.61806 7.93056 4.40278 8.41667 4.25C8.91667 4.08333 9.44444 4 10 4C11.4306 4 12.6736 4.48611 13.7292 5.45833C14.7847 6.41667 15.375 7.59722 15.5 9C16.4722 9 17.2986 9.34028 17.9792 10.0208C18.6597 10.7014 19 11.5278 19 12.5C19 13.0972 18.8611 13.6458 18.5833 14.1458C18.3194 14.6458 17.9583 15.0556 17.5 15.375Z">
+        </path>
+      </g>
+      <g id="domain">
+        <path
+          d="M2,3 L2,17 L11.8267655,17 L13.7904799,17 L18,17 L18,7 L12,7 L12,3 L2,3 Z M8,13 L10,13 L10,15 L8,15 L8,13 Z M4,13 L6,13 L6,15 L4,15 L4,13 Z M8,9 L10,9 L10,11 L8,11 L8,9 Z M4,9 L6,9 L6,11 L4,11 L4,9 Z M12,9 L16,9 L16,15 L12,15 L12,9 Z M12,11 L14,11 L14,13 L12,13 L12,11 Z M8,5 L10,5 L10,7 L8,7 L8,5 Z M4,5 L6,5 L6,7 L4,7 L4,5 Z">
+        </path>
+      </g>
+      <g id="kite">
+        <path fill-rule="evenodd" clip-rule="evenodd"
+          d="M4.6327 8.00094L10.3199 2L16 8.00094L10.1848 16.8673C10.0995 16.9873 10.0071 17.1074 9.90047 17.2199C9.42417 17.7225 8.79147 18 8.11611 18C7.44076 18 6.80806 17.7225 6.33175 17.2199C5.85545 16.7173 5.59242 16.0497 5.59242 15.3371C5.59242 14.977 5.46445 14.647 5.22275 14.3919C4.98104 14.1369 4.66825 14.0019 4.32701 14.0019H4V12.6667H4.32701C5.00237 12.6667 5.63507 12.9442 6.11137 13.4468C6.58768 13.9494 6.85071 14.617 6.85071 15.3296C6.85071 15.6896 6.97867 16.0197 7.22038 16.2747C7.46209 16.5298 7.77488 16.6648 8.11611 16.6648C8.45735 16.6648 8.77014 16.5223 9.01185 16.2747C9.02396 16.2601 9.03607 16.246 9.04808 16.2319C9.08541 16.1883 9.12176 16.1458 9.15403 16.0947L9.55213 15.4946L4.6327 8.00094ZM10.3199 13.9371L6.53802 8.17116L10.3199 4.1814L14.0963 8.17103L10.3199 13.9371Z">
+        </path>
+      </g>
+      <g id="menu">
+        <path d="M2 4h16v2H2zM2 9h16v2H2zM2 14h16v2H2z"></path>
+      </g>
+      <if expr="chromeos_ash">
+        <g id="banner-warning">
+          <path fill-rule="evenodd" clip-rule="evenodd"
+            d="M9.13177 1.50386C9.51566 0.832046 10.4844 0.832046 10.8683 1.50386L18.8683 15.5039C19.2492 16.1705 18.7678 17 18 17H2.00001C1.23219 17 0.750823 16.1705 1.13177 15.5039L9.13177 1.50386ZM10 4.01556L3.72321 15H16.2768L10 4.01556ZM9 11H11V7H9V11ZM11 14H9V12H11V14Z">
+          </path>
+        </g>
+        <g id="warning">
+          <path fill-rule="evenodd" clip-rule="evenodd"
+            d="M9.13177 1.50386C9.51566 0.832046 10.4844 0.832046 10.8683 1.50386L18.8683 15.5039C19.2492 16.1705 18.7678 17 18 17H2.00001C1.23219 17 0.750823 16.1705 1.13177 15.5039L9.13177 1.50386ZM10 4.01556L3.72321 15H16.2768L10 4.01556ZM9 11H11V7H9V11ZM11 14H9V12H11V14Z">
+          </path>
+        </g>
+      </if>
+  </svg>
+</iron-iconset-svg>
+
+<!-- NOTE: In the common case that the final icon will be 20x20, export the SVG
+     at 20px and place it in the section above. -->
+<iron-iconset-svg name="cr" size="24">
+  <svg>
+    <defs>
+      <!--
+      These icons are copied from Polymer's iron-icons and kept in sorted order.
+      See http://goo.gl/Y1OdAq for instructions on adding additional icons.
+      -->
+      <g id="account-child-invert" viewBox="0 0 48 48">
+        <path d="M24 4c3.31 0 6 2.69 6 6s-2.69 6-6 6-6-2.69-6-6 2.69-6 6-6z"></path>
+        <path fill="none" d="M0 0h48v48H0V0z"></path>
+        <circle fill="none" cx="24" cy="26" r="4"></circle>
+        <path
+          d="M24 18c-6.16 0-13 3.12-13 7.23v11.54c0 2.32 2.19 4.33 5.2 5.63 2.32 1 5.12 1.59 7.8 1.59.66 0 1.33-.06 2-.14v-5.2c-.67.08-1.34.14-2 .14-2.63 0-5.39-.57-7.68-1.55.67-2.12 4.34-3.65 7.68-3.65.86 0 1.75.11 2.6.29 2.79.62 5.2 2.15 5.2 4.04v4.47c3.01-1.31 5.2-3.31 5.2-5.63V25.23C37 21.12 30.16 18 24 18zm0 12c-2.21 0-4-1.79-4-4s1.79-4 4-4 4 1.79 4 4-1.79 4-4 4z">
+        </path>
+      </g>
+      <g id="add">
+        <path d="M19 13h-6v6h-2v-6H5v-2h6V5h2v6h6v2z" />
+      </g>
+      <g id="arrow-back">
+        <path
+          d="M20 11H7.83l5.59-5.59L12 4l-8 8 8 8 1.41-1.41L7.83 13H20v-2z">
+        </path>
+      </g>
+      <g id="arrow-drop-up">
+        <path d="M7 14l5-5 5 5z"></path>
+      </g>
+      <g id="arrow-drop-down">
+        <path d="M7 10l5 5 5-5z"></path>
+      </g>
+      <g id="arrow-forward">
+        <path
+          d="M12 4l-1.41 1.41L16.17 11H4v2h12.17l-5.58 5.59L12 20l8-8z">
+        </path>
+      </g>
+      <g id="arrow-right">
+        <path d="M10 7l5 5-5 5z"></path>
+      </g>
+      <if expr="chromeos_ash">
+        <g id="bluetooth">
+          <path
+            d="M17.71 7.71L12 2h-1v7.59L6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 11 14.41V22h1l5.71-5.71-4.3-4.29 4.3-4.29zM13 5.83l1.88 1.88L13 9.59V5.83zm1.88 10.46L13 18.17v-3.76l1.88 1.88z">
+          </path>
+        </g>
+        <g id="camera-alt">
+          <circle cx="12" cy="12" r="3.2"></circle>
+          <path
+            d="M9 2L7.17 4H4c-1.1 0-2 .9-2 2v12c0 1.1.9 2 2 2h16c1.1 0 2-.9 2-2V6c0-1.1-.9-2-2-2h-3.17L15 2H9zm3 15c-2.76 0-5-2.24-5-5s2.24-5 5-5 5 2.24 5 5-2.24 5-5 5z">
+          </path>
+        </g>
+        <g id="work">
+          <path
+            d="M20 6h-4V4c0-1.11-.89-2-2-2h-4c-1.11 0-2 .89-2 2v2H4c-1.11 0-1.99.89-1.99 2L2 19c0 1.11.89 2 2 2h16c1.11 0 2-.89 2-2V8c0-1.11-.89-2-2-2zm-6 0h-4V4h4v2z">
+          </path>
+        </g>
+      </if>
+      <g id="cancel">
+        <path
+          d="M12 2C6.47 2 2 6.47 2 12s4.47 10 10 10 10-4.47 10-10S17.53 2 12 2zm5 13.59L15.59 17 12 13.41 8.41 17 7 15.59 10.59 12 7 8.41 8.41 7 12 10.59 15.59 7 17 8.41 13.41 12 17 15.59z">
+        </path>
+      </g>
+      <g id="check">
+        <path d="M9 16.17L4.83 12l-1.42 1.41L9 19 21 7l-1.41-1.41z"></path>
+      </g>
+      <g id="check-circle">
+        <path
+          d="M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm-2 15l-5-5 1.41-1.41L10 14.17l7.59-7.59L19 8l-9 9z">
+        </path>
+      </g>
+      <g id="chevron-left">
+        <path d="M15.41 7.41L14 6l-6 6 6 6 1.41-1.41L10.83 12z"></path>
+      </g>
+      <g id="chevron-right">
+        <path d="M10 6L8.59 7.41 13.17 12l-4.58 4.59L10 18l6-6z"></path>
+      </g>
+      <g id="clear">
+        <path
+          d="M19 6.41L17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12z">
+        </path>
+      </g>
+      <g id="close">
+        <path
+          d="M19 6.41L17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12z">
+        </path>
+      </g>
+      <g id="computer">
+        <path
+          d="M20 18c1.1 0 1.99-.9 1.99-2L22 6c0-1.1-.9-2-2-2H4c-1.1 0-2 .9-2 2v10c0 1.1.9 2 2 2H0v2h24v-2h-4zM4 6h16v10H4V6z">
+        </path>
+      </g>
+      <g id="create">
+        <path
+          d="M3 17.25V21h3.75L17.81 9.94l-3.75-3.75L3 17.25zM20.71 7.04c.39-.39.39-1.02 0-1.41l-2.34-2.34c-.39-.39-1.02-.39-1.41 0l-1.83 1.83 3.75 3.75 1.83-1.83z">
+        </path>
+      </g>
+      <g id="delete">
+        <path
+          d="M6 19c0 1.1.9 2 2 2h8c1.1 0 2-.9 2-2V7H6v12zM19 4h-3.5l-1-1h-5l-1 1H5v2h14V4z">
+        </path>
+      </g>
+      <g id="domain">
+        <path
+          d="M12 7V3H2v18h20V7H12zM6 19H4v-2h2v2zm0-4H4v-2h2v2zm0-4H4V9h2v2zm0-4H4V5h2v2zm4 12H8v-2h2v2zm0-4H8v-2h2v2zm0-4H8V9h2v2zm0-4H8V5h2v2zm10 12h-8v-2h2v-2h-2v-2h2v-2h-2V9h8v10zm-2-8h-2v2h2v-2zm0 4h-2v2h2v-2z">
+        </path>
+      </g>
+      <g id="error">
+        <path
+          d="M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm1 15h-2v-2h2v2zm0-4h-2V7h2v6z">
+        </path>
+      </g>
+      <g id="error-outline">
+        <path
+          d="M11 15h2v2h-2zm0-8h2v6h-2zm.99-5C6.47 2 2 6.48 2 12s4.47 10 9.99 10C17.52 22 22 17.52 22 12S17.52 2 11.99 2zM12 20c-4.42 0-8-3.58-8-8s3.58-8 8-8 8 3.58 8 8-3.58 8-8 8z">
+        </path>
+      </g>
+      <g id="expand-less">
+        <path d="M12 8l-6 6 1.41 1.41L12 10.83l4.59 4.58L18 14z"></path>
+      </g>
+      <g id="expand-more">
+        <path d="M16.59 8.59L12 13.17 7.41 8.59 6 10l6 6 6-6z"></path>
+      </g>
+      <g id="extension">
+        <path
+          d="M20.5 11H19V7c0-1.1-.9-2-2-2h-4V3.5C13 2.12 11.88 1 10.5 1S8 2.12 8 3.5V5H4c-1.1 0-1.99.9-1.99 2v3.8H3.5c1.49 0 2.7 1.21 2.7 2.7s-1.21 2.7-2.7 2.7H2V20c0 1.1.9 2 2 2h3.8v-1.5c0-1.49 1.21-2.7 2.7-2.7 1.49 0 2.7 1.21 2.7 2.7V22H17c1.1 0 2-.9 2-2v-4h1.5c1.38 0 2.5-1.12 2.5-2.5S21.88 11 20.5 11z">
+        </path>
+      </g>
+      <g id="file-download">
+        <path d="M19 9h-4V3H9v6H5l7 7 7-7zM5 18v2h14v-2H5z"></path>
+      </g>
+      <if expr="chromeos_ash">
+        <g id="folder-filled">
+          <path
+            d="M10 4H4c-1.1 0-1.99.9-1.99 2L2 18c0 1.1.9 2 2 2h16c1.1 0 2-.9 2-2V8c0-1.1-.9-2-2-2h-8l-2-2z">
+          </path>
+        </g>
+      </if>
+      <g id="fullscreen">
+        <path
+          d="M7 14H5v5h5v-2H7v-3zm-2-4h2V7h3V5H5v5zm12 7h-3v2h5v-5h-2v3zM14 5v2h3v3h2V5h-5z">
+        </path>
+      </g>
+      <g id="group">
+        <path
+          d="M16 11c1.66 0 2.99-1.34 2.99-3S17.66 5 16 5c-1.66 0-3 1.34-3 3s1.34 3 3 3zm-8 0c1.66 0 2.99-1.34 2.99-3S9.66 5 8 5C6.34 5 5 6.34 5 8s1.34 3 3 3zm0 2c-2.33 0-7 1.17-7 3.5V19h14v-2.5c0-2.33-4.67-3.5-7-3.5zm8 0c-.29 0-.62.02-.97.05 1.16.84 1.97 1.97 1.97 3.45V19h6v-2.5c0-2.33-4.67-3.5-7-3.5z">
+        </path>
+      </g>
+      <g id="help-outline">
+        <path
+          d="M11 18h2v-2h-2v2zm1-16C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm0 18c-4.41 0-8-3.59-8-8s3.59-8 8-8 8 3.59 8 8-3.59 8-8 8zm0-14c-2.21 0-4 1.79-4 4h2c0-1.1.9-2 2-2s2 .9 2 2c0 2-3 1.75-3 5h2c0-2.25 3-2.5 3-5 0-2.21-1.79-4-4-4z">
+        </path>
+      </g>
+      <g id="history">
+        <path
+          d="M12.945312 22.75 C 10.320312 22.75 8.074219 21.839844 6.207031 20.019531 C 4.335938 18.199219 3.359375 15.972656 3.269531 13.34375 L 5.089844 13.34375 C 5.175781 15.472656 5.972656 17.273438 7.480469 18.742188 C 8.988281 20.210938 10.808594 20.945312 12.945312 20.945312 C 15.179688 20.945312 17.070312 20.164062 18.621094 18.601562 C 20.167969 17.039062 20.945312 15.144531 20.945312 12.910156 C 20.945312 10.714844 20.164062 8.855469 18.601562 7.335938 C 17.039062 5.816406 15.15625 5.054688 12.945312 5.054688 C 11.710938 5.054688 10.554688 5.339844 9.480469 5.902344 C 8.402344 6.46875 7.476562 7.226562 6.699219 8.179688 L 9.585938 8.179688 L 9.585938 9.984375 L 3.648438 9.984375 L 3.648438 4.0625 L 5.453125 4.0625 L 5.453125 6.824219 C 6.386719 5.707031 7.503906 4.828125 8.804688 4.199219 C 10.109375 3.566406 11.488281 3.25 12.945312 3.25 C 14.300781 3.25 15.570312 3.503906 16.761719 4.011719 C 17.949219 4.519531 18.988281 5.214844 19.875 6.089844 C 20.761719 6.964844 21.464844 7.992188 21.976562 9.167969 C 22.492188 10.34375 22.75 11.609375 22.75 12.964844 C 22.75 14.316406 22.492188 15.589844 21.976562 16.777344 C 21.464844 17.964844 20.761719 19.003906 19.875 19.882812 C 18.988281 20.765625 17.949219 21.464844 16.761719 21.976562 C 15.570312 22.492188 14.300781 22.75 12.945312 22.75 Z M 16.269531 17.460938 L 12.117188 13.34375 L 12.117188 7.527344 L 13.921875 7.527344 L 13.921875 12.601562 L 17.550781 16.179688 Z M 16.269531 17.460938">
+        </path>
+      </g>
+      <g id="info">
+        <path
+          d="M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm1 15h-2v-6h2v6zm0-8h-2V7h2v2z">
+        </path>
+      </g>
+      <g id="info-outline">
+        <path
+          d="M11 17h2v-6h-2v6zm1-15C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm0 18c-4.41 0-8-3.59-8-8s3.59-8 8-8 8 3.59 8 8-3.59 8-8 8zM11 9h2V7h-2v2z">
+        </path>
+      </g>
+      <g id="insert-drive-file">
+        <path
+          d="M6 2c-1.1 0-1.99.9-1.99 2L4 20c0 1.1.89 2 1.99 2H18c1.1 0 2-.9 2-2V8l-6-6H6zm7 7V3.5L18.5 9H13z">
+        </path>
+      </g>
+      <g id="location-on">
+        <path
+          d="M12 2C8.13 2 5 5.13 5 9c0 5.25 7 13 7 13s7-7.75 7-13c0-3.87-3.13-7-7-7zm0 9.5c-1.38 0-2.5-1.12-2.5-2.5s1.12-2.5 2.5-2.5 2.5 1.12 2.5 2.5-1.12 2.5-2.5 2.5z">
+        </path>
+      </g>
+      <g id="mic">
+        <path
+          d="M12 14c1.66 0 2.99-1.34 2.99-3L15 5c0-1.66-1.34-3-3-3S9 3.34 9 5v6c0 1.66 1.34 3 3 3zm5.3-3c0 3-2.54 5.1-5.3 5.1S6.7 14 6.7 11H5c0 3.41 2.72 6.23 6 6.72V21h2v-3.28c3.28-.48 6-3.3 6-6.72h-1.7z">
+        </path>
+      </g>
+      <g id="more-vert">
+        <path
+          d="M12 8c1.1 0 2-.9 2-2s-.9-2-2-2-2 .9-2 2 .9 2 2 2zm0 2c-1.1 0-2 .9-2 2s.9 2 2 2 2-.9 2-2-.9-2-2-2zm0 6c-1.1 0-2 .9-2 2s.9 2 2 2 2-.9 2-2-.9-2-2-2z">
+        </path>
+      </g>
+      <g id="open-in-new">
+        <path
+          d="M19 19H5V5h7V3H5c-1.11 0-2 .9-2 2v14c0 1.1.89 2 2 2h14c1.1 0 2-.9 2-2v-7h-2v7zM14 3v2h3.59l-9.83 9.83 1.41 1.41L19 6.41V10h2V3h-7z">
+        </path>
+      </g>
+      <g id="person">
+        <path
+          d="M12 12c2.21 0 4-1.79 4-4s-1.79-4-4-4-4 1.79-4 4 1.79 4 4 4zm0 2c-2.67 0-8 1.34-8 4v2h16v-2c0-2.66-5.33-4-8-4z">
+        </path>
+      </g>
+      <g id="phonelink">
+        <path
+          d="M4 6h18V4H4c-1.1 0-2 .9-2 2v11H0v3h14v-3H4V6zm19 2h-6c-.55 0-1 .45-1 1v10c0 .55.45 1 1 1h6c.55 0 1-.45 1-1V9c0-.55-.45-1-1-1zm-1 9h-4v-7h4v7z">
+        </path>
+      </g>
+      <g id="print">
+        <path
+          d="M19 8H5c-1.66 0-3 1.34-3 3v6h4v4h12v-4h4v-6c0-1.66-1.34-3-3-3zm-3 11H8v-5h8v5zm3-7c-.55 0-1-.45-1-1s.45-1 1-1 1 .45 1 1-.45 1-1 1zm-1-9H6v4h12V3z">
+        </path>
+      </g>
+      <g id="schedule">
+        <path
+          d="M11.99 2C6.47 2 2 6.48 2 12s4.47 10 9.99 10C17.52 22 22 17.52 22 12S17.52 2 11.99 2zM12 20c-4.42 0-8-3.58-8-8s3.58-8 8-8 8 3.58 8 8-3.58 8-8 8zm.5-13H11v6l5.25 3.15.75-1.23-4.5-2.67z">
+        </path>
+      </g>
+      <g id="search">
+        <path
+          d="M15.5 14h-.79l-.28-.27C15.41 12.59 16 11.11 16 9.5 16 5.91 13.09 3 9.5 3S3 5.91 3 9.5 5.91 16 9.5 16c1.61 0 3.09-.59 4.23-1.57l.27.28v.79l5 4.99L20.49 19l-4.99-5zm-6 0C7.01 14 5 11.99 5 9.5S7.01 5 9.5 5 14 7.01 14 9.5 11.99 14 9.5 14z">
+        </path>
+      </g>
+      <g id="security">
+        <path
+          d="M12 1L3 5v6c0 5.55 3.84 10.74 9 12 5.16-1.26 9-6.45 9-12V5l-9-4zm0 10.99h7c-.53 4.12-3.28 7.79-7 8.94V12H5V6.3l7-3.11v8.8z">
+        </path>
+      </g>
+      <if expr="chromeos_ash">
+        <g id="sim-card-alert">
+          <path
+            d="M18 2h-8L4.02 8 4 20c0 1.1.9 2 2 2h12c1.1 0 2-.9 2-2V4c0-1.1-.9-2-2-2zm-5 15h-2v-2h2v2zm0-4h-2V8h2v5z">
+          </path>
+        </g>
+        <g id="sim-lock">
+          <path
+            d="M18 8h-1V6c0-2.76-2.24-5-5-5S7 3.24 7 6v2H6c-1.1 0-2 .9-2 2v10c0 1.1.9 2 2 2h12c1.1 0 2-.9 2-2V10c0-1.1-.9-2-2-2zm-6 9c-1.1 0-2-.9-2-2s.9-2 2-2 2 .9 2 2-.9 2-2 2zm3.1-9H8.9V6c0-1.71 1.39-3.1 3.1-3.1 1.71 0 3.1 1.39 3.1 3.1v2z">
+          </path>
+        </g>
+        <g id="sms-connect">
+          <path
+            d="M20,2C21.1,2 22,2.9 22,4L22,16C22,17.1 21.1,18 20,18L6,18L2,22L2.01,4C2.01,2.9 2.9,2 4,2L20,2ZM8,8L4,12L8,16L8,13L14,13L14,11L8,11L8,8ZM19.666,7.872L16.038,4.372L16.038,6.997L10,6.997L10,9L16.038,9L16.038,11.372L19.666,7.872Z">
+          </path>
+        </g>
+      </if>
+      <!-- The <g> IDs are exposed as global variables in Vulcanized mode, which
+        conflicts with the "settings" namespace of MD Settings. Using an "_icon"
+        suffix prevents the naming conflict. -->
+      <g id="settings_icon">
+        <path
+          d="M19.43 12.98c.04-.32.07-.64.07-.98s-.03-.66-.07-.98l2.11-1.65c.19-.15.24-.42.12-.64l-2-3.46c-.12-.22-.39-.3-.61-.22l-2.49 1c-.52-.4-1.08-.73-1.69-.98l-.38-2.65C14.46 2.18 14.25 2 14 2h-4c-.25 0-.46.18-.49.42l-.38 2.65c-.61.25-1.17.59-1.69.98l-2.49-1c-.23-.09-.49 0-.61.22l-2 3.46c-.13.22-.07.49.12.64l2.11 1.65c-.04.32-.07.65-.07.98s.03.66.07.98l-2.11 1.65c-.19.15-.24.42-.12.64l2 3.46c.12.22.39.3.61.22l2.49-1c.52.4 1.08.73 1.69.98l.38 2.65c.03.24.24.42.49.42h4c.25 0 .46-.18.49-.42l.38-2.65c.61-.25 1.17-.59 1.69-.98l2.49 1c.23.09.49 0 .61-.22l2-3.46c.12-.22.07-.49-.12-.64l-2.11-1.65zM12 15.5c-1.93 0-3.5-1.57-3.5-3.5s1.57-3.5 3.5-3.5 3.5 1.57 3.5 3.5-1.57 3.5-3.5 3.5z">
+        </path>
+      </g>
+      <g id="star">
+        <path
+          d="M12 17.27L18.18 21l-1.64-7.03L22 9.24l-7.19-.61L12 2 9.19 8.63 2 9.24l5.46 4.73L5.82 21z">
+        </path>
+      </g>
+      <g id="sync">
+        <path
+          d="M12 4V1L8 5l4 4V6c3.31 0 6 2.69 6 6 0 1.01-.25 1.97-.7 2.8l1.46 1.46C19.54 15.03 20 13.57 20 12c0-4.42-3.58-8-8-8zm0 14c-3.31 0-6-2.69-6-6 0-1.01.25-1.97.7-2.8L5.24 7.74C4.46 8.97 4 10.43 4 12c0 4.42 3.58 8 8 8v3l4-4-4-4v3z">
+        </path>
+      </g>
+      <g id="thumbs-down">
+        <path
+            d="M6 3h11v13l-7 7-1.25-1.25a1.454 1.454 0 0 1-.3-.475c-.067-.2-.1-.392-.1-.575v-.35L9.45 16H3c-.533 0-1-.2-1.4-.6-.4-.4-.6-.867-.6-1.4v-2c0-.117.017-.242.05-.375s.067-.258.1-.375l3-7.05c.15-.333.4-.617.75-.85C5.25 3.117 5.617 3 6 3Zm9 2H6l-3 7v2h9l-1.35 5.5L15 15.15V5Zm0 10.15V5v10.15Zm2 .85v-2h3V5h-3V3h5v13h-5Z">
+        </path>
+      </g>
+      <g id="thumbs-down-filled">
+        <path
+            d="M6 3h10v13l-7 7-1.25-1.25a1.336 1.336 0 0 1-.29-.477 1.66 1.66 0 0 1-.108-.574v-.347L8.449 16H3c-.535 0-1-.2-1.398-.602C1.199 15 1 14.535 1 14v-2c0-.117.012-.242.04-.375.022-.133.062-.258.108-.375l3-7.05c.153-.333.403-.618.75-.848A1.957 1.957 0 0 1 6 3Zm12 13V3h4v13Zm0 0">
+        </path>
+      </g>
+      <g id="thumbs-up">
+        <path
+            d="M18 21H7V8l7-7 1.25 1.25c.117.117.208.275.275.475.083.2.125.392.125.575v.35L14.55 8H21c.533 0 1 .2 1.4.6.4.4.6.867.6 1.4v2c0 .117-.017.242-.05.375s-.067.258-.1.375l-3 7.05c-.15.333-.4.617-.75.85-.35.233-.717.35-1.1.35Zm-9-2h9l3-7v-2h-9l1.35-5.5L9 8.85V19ZM9 8.85V19 8.85ZM7 8v2H4v9h3v2H2V8h5Z">
+        </path>
+      </g>
+      <g id="thumbs-up-filled">
+        <path
+            d="M18 21H8V8l7-7 1.25 1.25c.117.117.21.273.29.477.073.199.108.39.108.574v.347L15.551 8H21c.535 0 1 .2 1.398.602C22.801 9 23 9.465 23 10v2c0 .117-.012.242-.04.375a1.897 1.897 0 0 1-.108.375l-3 7.05a2.037 2.037 0 0 1-.75.848A1.957 1.957 0 0 1 18 21ZM6 8v13H2V8Zm0 0">
+      </g>
+      <g id="videocam">
+        <path
+          d="M17 10.5V7c0-.55-.45-1-1-1H4c-.55 0-1 .45-1 1v10c0 .55.45 1 1 1h12c.55 0 1-.45 1-1v-3.5l4 4v-11l-4 4z">
+        </path>
+      </g>
+      <g id="warning">
+        <path d="M1 21h22L12 2 1 21zm12-3h-2v-2h2v2zm0-4h-2v-4h2v4z"></path>
+      </g>
+    </defs>
+  </svg>
+</iron-iconset-svg>
diff --git a/ash/webui/os_feedback_ui/mojom/BUILD.gn b/ash/webui/os_feedback_ui/mojom/BUILD.gn
index b4ea66b3..9570604 100644
--- a/ash/webui/os_feedback_ui/mojom/BUILD.gn
+++ b/ash/webui/os_feedback_ui/mojom/BUILD.gn
@@ -11,7 +11,6 @@
   sources = [ "os_feedback_ui.mojom" ]
 
   webui_module_path = "/"
-  generate_webui_js_bindings = true
 
   public_deps = [
     "//mojo/public/mojom/base",
diff --git a/ash/webui/os_feedback_ui/resources/BUILD.gn b/ash/webui/os_feedback_ui/resources/BUILD.gn
index 230837c3..0c80f468 100644
--- a/ash/webui/os_feedback_ui/resources/BUILD.gn
+++ b/ash/webui/os_feedback_ui/resources/BUILD.gn
@@ -39,11 +39,12 @@
     "questionnaire.ts",
   ]
 
-  mojo_files = [ "$root_gen_dir/mojom-webui/ash/webui/os_feedback_ui/mojom/os_feedback_ui.mojom-webui.js" ]
+  mojo_files = [ "$root_gen_dir/ash/webui/os_feedback_ui/mojom/os_feedback_ui.mojom-webui.ts" ]
 
-  mojo_files_deps = [ "//ash/webui/os_feedback_ui/mojom:mojom_webui_js" ]
+  mojo_files_deps = [ "//ash/webui/os_feedback_ui/mojom:mojom_ts__generator" ]
 
   ts_composite = true
+
   ts_definitions = [ "//tools/typescript/definitions/chrome_send.d.ts" ]
 
   ts_deps = [
diff --git a/ash/webui/os_feedback_ui/resources/fake_data.ts b/ash/webui/os_feedback_ui/resources/fake_data.ts
index 4231a3e..7ab792a 100644
--- a/ash/webui/os_feedback_ui/resources/fake_data.ts
+++ b/ash/webui/os_feedback_ui/resources/fake_data.ts
@@ -154,6 +154,21 @@
       wifiDebugLogsAllowed: false,
     };
 
+export const fakeFeedbackContextWithExtraDiagnostics: FeedbackContext = {
+  assistantDebugInfoAllowed: false,
+  autofillMetadata: '',
+  categoryTag: '',
+  email: 'test.user@google.com',
+  extraDiagnostics: 'some extra info',
+  fromAssistant: true,
+  fromAutofill: false,
+  fromSettingsSearch: true,
+  hasLinkedCrossDevicePhone: false,
+  isInternalAccount: true,
+  pageUrl: {url: 'chrome://tab/'},
+  traceId: 1,
+  wifiDebugLogsAllowed: false,
+};
 export const fakePngData: number[] = [
   137, 80,  78, 71,  13,  10, 26, 10,  0,  0,  0,   13,  73,  72,  68,  82,
   0,   0,   0,  8,   0,   0,  0,  8,   8,  2,  0,   0,   0,   75,  109, 41,
diff --git a/ash/webui/os_feedback_ui/resources/fake_feedback_service_provider.ts b/ash/webui/os_feedback_ui/resources/fake_feedback_service_provider.ts
index 3a9121f..f6425ea 100644
--- a/ash/webui/os_feedback_ui/resources/fake_feedback_service_provider.ts
+++ b/ash/webui/os_feedback_ui/resources/fake_feedback_service_provider.ts
@@ -155,12 +155,12 @@
     }
   }
 
-  getRecordPreSubmitActionCallCount(action: FeedbackAppPostSubmitAction):
+  getRecordPreSubmitActionCallCount(action: FeedbackAppPreSubmitAction):
       number {
     return this.preSubmitActionMap.get(action) || 0;
   }
 
-  recordPreSubmitAction(action: FeedbackAppPostSubmitAction) {
+  recordPreSubmitAction(action: FeedbackAppPreSubmitAction) {
     this.preSubmitActionMap.set(
         action, this.getRecordPreSubmitActionCallCount(action) + 1);
   }
diff --git a/ash/webui/os_feedback_ui/resources/feedback_flow.ts b/ash/webui/os_feedback_ui/resources/feedback_flow.ts
index fcd3b95..c5f57e0 100644
--- a/ash/webui/os_feedback_ui/resources/feedback_flow.ts
+++ b/ash/webui/os_feedback_ui/resources/feedback_flow.ts
@@ -154,8 +154,8 @@
 
   static get properties() {
     return {
-      currentState: {type: FeedbackFlowState},
-      feedbackContext: {type: FeedbackContext, readonly: false, notify: true},
+      currentState: {type: String},
+      feedbackContext: {type: Object, readonly: false, notify: true},
     };
   }
 
@@ -621,11 +621,13 @@
     return this.descriptionPlaceholderText;
   }
 
-
   getIsUserLoggedInForTesting(): boolean {
     return this.isUserLoggedIn;
   }
 
+  getFeedbackContextForTesting(): FeedbackContext|null {
+    return this.feedbackContext;
+  }
 
   getShouldShowWifiDebugLogsCheckboxForTesting(): boolean {
     return this.shouldShowWifiDebugLogsCheckbox;
diff --git a/ash/webui/os_feedback_ui/resources/search_page.ts b/ash/webui/os_feedback_ui/resources/search_page.ts
index 3dd6663..fe14fa6b 100644
--- a/ash/webui/os_feedback_ui/resources/search_page.ts
+++ b/ash/webui/os_feedback_ui/resources/search_page.ts
@@ -92,7 +92,7 @@
 
   static get properties() {
     return {
-      feedbackContext: {type: FeedbackContext, readOnly: false, notify: true},
+      feedbackContext: {type: Object, readOnly: false, notify: true},
       descriptionTemplate: {
         type: String,
         readonly: true,
diff --git a/ash/webui/os_feedback_ui/resources/share_data_page.ts b/ash/webui/os_feedback_ui/resources/share_data_page.ts
index b2aceecd..3f4e4e4f 100644
--- a/ash/webui/os_feedback_ui/resources/share_data_page.ts
+++ b/ash/webui/os_feedback_ui/resources/share_data_page.ts
@@ -44,7 +44,7 @@
   static get properties() {
     return {
       feedbackContext: {
-        type: FeedbackContext,
+        type: Object,
         readOnly: false,
         notify: true,
         observer: ShareDataPageElement.prototype.onFeedbackContextChanged,
diff --git a/ash/webui/personalization_app/resources/js/wallpaper/sea_pen/sea_pen_template_query_element.html b/ash/webui/personalization_app/resources/js/wallpaper/sea_pen/sea_pen_template_query_element.html
index 7c6e52ce..59d79bd0 100644
--- a/ash/webui/personalization_app/resources/js/wallpaper/sea_pen/sea_pen_template_query_element.html
+++ b/ash/webui/personalization_app/resources/js/wallpaper/sea_pen/sea_pen_template_query_element.html
@@ -10,28 +10,57 @@
 
   #template {
     align-items: start;
+    border-bottom-color: var(--cros-text-color-primary);
     color: var(--cros-text-color-primary);
     display: flex;
     font: var(--cros-display-6_regular-font);
-    gap: 6px;
     height: 40%;
     justify-content: center;
+    padding: 2px 0;
   }
 
   #template .unselected {
+    border-bottom-color: var(--cros-text-color-disabled);
     color: var(--cros-text-color-disabled);
   }
 
-  .clickable {
+  .chip-container {
+    cursor: pointer;
+    display: grid;
+    grid-template-areas: 'chip';
+  }
+
+  .template-text {
+    padding: 0 4px;
+  }
+
+  .chip-text {
+    border: 2px solid transparent;
+    border-radius: 8px;
+    bottom: 2px;
+    grid-area: chip;
+    padding: 0 4px;
+    position: relative;
+  }
+
+  .chip-text:hover {
+    background-color: var(--cros-sys-hover_on_subtle);
+  }
+
+  .chip-text:focus {
+    background-color: var(--cros-sys-ripple_primary);
+    border: 2px solid var(--cros-sys-focus_ring);
+  }
+
+  .underline {
     border-bottom: 2px dotted;
-  }
-
-  .clickable.selected {
-    border-bottom-color: var(--cros-text-color-primary);
-  }
-
-  .clickable.unselected {
-    border-bottom-color: var(--cros-text-color-disabled);
+    grid-area: chip;
+    /* Add one pixel to move the underline below the border. */
+    height: calc(100% + 1px);
+    justify-self: center;
+    /* Subtract 8 pixels so as to not underline the padding from .chip-text. */
+    width: calc(100% - 8px);
+    z-index: -1;
   }
 
   #options {
@@ -45,6 +74,7 @@
     display: flex;
     gap: 8px;
     overflow-x: auto;
+    padding: 4px;
   }
 
   #searchButtons {
@@ -79,19 +109,19 @@
 <div class="main">
   <div id="template">
     <template is="dom-repeat" items="[[templateTokens_]]" as="token">
-      <div>
-        <template is="dom-if" if="[[isChip_(token)]]">
-          <div class$="[[getChipClassName_(token, selectedChip_)]]"
-              on-click="onClickChip_">
+      <template is="dom-if" if="[[isChip_(token)]]">
+        <div class$="chip-container [[getChipClassName_(token, selectedChip_)]]">
+          <div class="underline"></div>
+          <div class="chip-text" tabindex="0" on-click="onClickChip_" on-keypress="onClickChip_">
             [[token.translation]]
           </div>
-        </template>
-        <template is="dom-if" if="[[!isChip_(token)]]">
-          <div class$="[[getTextClassName_(selectedChip_)]]">
-            [[token]]
-          </div>
-        </template>
-      </div>
+        </div>
+      </template>
+      <template is="dom-if" if="[[!isChip_(token)]]">
+        <div class$="template-text [[getTextClassName_(selectedChip_)]]">
+          [[token]]
+        </div>
+      </template>
     </template>
   </div>
   <div id="options">
diff --git a/ash/webui/personalization_app/resources/js/wallpaper/sea_pen/sea_pen_template_query_element.ts b/ash/webui/personalization_app/resources/js/wallpaper/sea_pen/sea_pen_template_query_element.ts
index b6d95c1..3462aa7e 100644
--- a/ash/webui/personalization_app/resources/js/wallpaper/sea_pen/sea_pen_template_query_element.ts
+++ b/ash/webui/personalization_app/resources/js/wallpaper/sea_pen/sea_pen_template_query_element.ts
@@ -188,21 +188,20 @@
           translation: selectedOptions.get(templateChip)?.translation || '',
           id: templateChip,
         });
-      } else {
+      } else if (str.trim().length > 0) {
         tokens.push(str);
       }
     });
     return tokens;
   }
 
-  private getChipClassName_(chip: ChipToken, selectedChip: ChipToken|null) {
+  private getChipClassName_(chip: ChipToken, selectedChip: ChipToken|null):
+      'selected'|'unselected' {
     assert(this.isChip_(chip), 'Token must be a chip');
     // If there are no selected chips, then use the 'selected' styling on all
     // chips.
-    const selected = !selectedChip || chip.id === selectedChip.id ?
-        'selected' :
-        'unselected';
-    return `clickable ${selected}`;
+    return !selectedChip || chip.id === selectedChip.id ? 'selected' :
+                                                          'unselected';
   }
 
   private isOptionSelected_(
diff --git a/ash/webui/scanning/resources/action_toolbar.ts b/ash/webui/scanning/resources/action_toolbar.ts
index d94f9bc..57c870d 100644
--- a/ash/webui/scanning/resources/action_toolbar.ts
+++ b/ash/webui/scanning/resources/action_toolbar.ts
@@ -4,7 +4,7 @@
 
 import './scanning_shared.css.js';
 import './strings.m.js';
-import 'chrome://resources/cr_elements/cr_icon_button/cr_icon_button.js';
+import 'chrome://resources/ash/common/cr_elements/cr_icon_button/cr_icon_button.js';
 
 import {assert} from 'chrome://resources/ash/common/assert.js';
 import {I18nMixin} from 'chrome://resources/cr_elements/i18n_mixin.js';
diff --git a/ash/webui/scanning/resources/loading_page.ts b/ash/webui/scanning/resources/loading_page.ts
index 7da55ec..2973172 100644
--- a/ash/webui/scanning/resources/loading_page.ts
+++ b/ash/webui/scanning/resources/loading_page.ts
@@ -2,7 +2,7 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-import 'chrome://resources/cr_elements/cr_button/cr_button.js';
+import 'chrome://resources/ash/common/cr_elements/cr_button/cr_button.js';
 import 'chrome://resources/polymer/v3_0/iron-media-query/iron-media-query.js';
 import 'chrome://resources/polymer/v3_0/paper-progress/paper-progress.js';
 import './strings.m.js';
diff --git a/ash/webui/scanning/resources/multi_page_scan.ts b/ash/webui/scanning/resources/multi_page_scan.ts
index 6f19f82..f2ccaf4 100644
--- a/ash/webui/scanning/resources/multi_page_scan.ts
+++ b/ash/webui/scanning/resources/multi_page_scan.ts
@@ -3,7 +3,7 @@
 // found in the LICENSE file.
 
 import 'chrome://resources/cr_elements/chromeos/cros_color_overrides.css.js';
-import 'chrome://resources/cr_elements/cr_button/cr_button.js';
+import 'chrome://resources/ash/common/cr_elements/cr_button/cr_button.js';
 import './scanning_fonts.css.js';
 import './strings.m.js';
 
diff --git a/ash/webui/scanning/resources/scan_done_section.ts b/ash/webui/scanning/resources/scan_done_section.ts
index 8913ce9..891561b 100644
--- a/ash/webui/scanning/resources/scan_done_section.ts
+++ b/ash/webui/scanning/resources/scan_done_section.ts
@@ -3,8 +3,8 @@
 // found in the LICENSE file.
 
 import 'chrome://resources/cr_elements/chromeos/cros_color_overrides.css.js';
-import 'chrome://resources/cr_elements/cr_button/cr_button.js';
-import 'chrome://resources/cr_elements/cr_icon_button/cr_icon_button.js';
+import 'chrome://resources/ash/common/cr_elements/cr_button/cr_button.js';
+import 'chrome://resources/ash/common/cr_elements/cr_icon_button/cr_icon_button.js';
 import 'chrome://resources/polymer/v3_0/iron-icon/iron-icon.js';
 import './strings.m.js';
 
diff --git a/ash/webui/scanning/resources/scan_preview.ts b/ash/webui/scanning/resources/scan_preview.ts
index 694d427..1b22288 100644
--- a/ash/webui/scanning/resources/scan_preview.ts
+++ b/ash/webui/scanning/resources/scan_preview.ts
@@ -6,14 +6,14 @@
 import './scanning_fonts.css.js';
 import './scanning_shared.css.js';
 import './strings.m.js';
-import 'chrome://resources/cr_elements/cr_dialog/cr_dialog.js';
+import 'chrome://resources/ash/common/cr_elements/cr_dialog/cr_dialog.js';
 import 'chrome://resources/polymer/v3_0/iron-media-query/iron-media-query.js';
 import 'chrome://resources/polymer/v3_0/paper-progress/paper-progress.js';
 
 import {assert} from 'chrome://resources/ash/common/assert.js';
+import {CrButtonElement} from 'chrome://resources/ash/common/cr_elements/cr_button/cr_button.js';
+import {CrDialogElement} from 'chrome://resources/ash/common/cr_elements/cr_dialog/cr_dialog.js';
 import {loadTimeData} from 'chrome://resources/ash/common/load_time_data.m.js';
-import {CrButtonElement} from 'chrome://resources/cr_elements/cr_button/cr_button.js';
-import {CrDialogElement} from 'chrome://resources/cr_elements/cr_dialog/cr_dialog.js';
 import {I18nMixin} from 'chrome://resources/cr_elements/i18n_mixin.js';
 import {DomRepeatEvent, PolymerElement} from 'chrome://resources/polymer/v3_0/polymer/polymer_bundled.min.js';
 
diff --git a/ash/webui/scanning/resources/scanning_app.ts b/ash/webui/scanning/resources/scanning_app.ts
index 29ad5b6..4b68ddd 100644
--- a/ash/webui/scanning/resources/scanning_app.ts
+++ b/ash/webui/scanning/resources/scanning_app.ts
@@ -2,10 +2,10 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-import 'chrome://resources/cr_elements/cr_button/cr_button.js';
-import 'chrome://resources/cr_elements/cr_dialog/cr_dialog.js';
+import 'chrome://resources/ash/common/cr_elements/cr_button/cr_button.js';
+import 'chrome://resources/ash/common/cr_elements/cr_dialog/cr_dialog.js';
 import 'chrome://resources/ash/common/cr_elements/cr_toast/cr_toast.js';
-import 'chrome://resources/cr_elements/icons.html.js';
+import 'chrome://resources/ash/common/cr_elements/icons.html.js';
 import 'chrome://resources/cr_elements/cr_shared_vars.css.js';
 import 'chrome://resources/mojo/mojo/public/mojom/base/big_buffer.mojom-webui.js';
 import 'chrome://resources/mojo/mojo/public/mojom/base/string16.mojom-webui.js';
@@ -29,13 +29,13 @@
 import './source_select.js';
 
 import {assert} from 'chrome://resources/ash/common/assert.js';
+import {CrButtonElement} from 'chrome://resources/ash/common/cr_elements/cr_button/cr_button.js';
+import {CrDialogElement} from 'chrome://resources/ash/common/cr_elements/cr_dialog/cr_dialog.js';
 import {CrToastElement} from 'chrome://resources/ash/common/cr_elements/cr_toast/cr_toast.js';
 import {loadTimeData} from 'chrome://resources/ash/common/load_time_data.m.js';
 import {strictQuery} from 'chrome://resources/ash/common/typescript_utils/strict_query.js';
 import {ColorChangeUpdater} from 'chrome://resources/cr_components/color_change_listener/colors_css_updater.js';
-import {CrButtonElement} from 'chrome://resources/cr_elements/cr_button/cr_button.js';
 import {CrContainerShadowMixin, CrContainerShadowMixinInterface} from 'chrome://resources/cr_elements/cr_container_shadow_mixin.js';
-import {CrDialogElement} from 'chrome://resources/cr_elements/cr_dialog/cr_dialog.js';
 import {I18nMixin, I18nMixinInterface} from 'chrome://resources/cr_elements/i18n_mixin.js';
 import {FilePath} from 'chrome://resources/mojo/mojo/public/mojom/base/file_path.mojom-webui.js';
 import {UnguessableToken} from 'chrome://resources/mojo/mojo/public/mojom/base/unguessable_token.mojom-webui.js';
diff --git a/ash/webui/shimless_rma/resources/BUILD.gn b/ash/webui/shimless_rma/resources/BUILD.gn
index 66bf91c..a59ef47 100644
--- a/ash/webui/shimless_rma/resources/BUILD.gn
+++ b/ash/webui/shimless_rma/resources/BUILD.gn
@@ -40,8 +40,8 @@
     "critical_error_page.ts",
     "hardware_error_page.ts",
     "onboarding_choose_destination_page.ts",
-    "onboarding_choose_wp_disable_method_page.js",
-    "onboarding_choose_wipe_device_page.js",
+    "onboarding_choose_wp_disable_method_page.ts",
+    "onboarding_choose_wipe_device_page.ts",
     "onboarding_enter_rsu_wp_disable_code_page.js",
     "onboarding_landing_page.js",
     "onboarding_network_page.js",
diff --git a/ash/webui/shimless_rma/resources/onboarding_choose_wipe_device_page.js b/ash/webui/shimless_rma/resources/onboarding_choose_wipe_device_page.ts
similarity index 62%
rename from ash/webui/shimless_rma/resources/onboarding_choose_wipe_device_page.js
rename to ash/webui/shimless_rma/resources/onboarding_choose_wipe_device_page.ts
index f47c608..7f42c08 100644
--- a/ash/webui/shimless_rma/resources/onboarding_choose_wipe_device_page.js
+++ b/ash/webui/shimless_rma/resources/onboarding_choose_wipe_device_page.ts
@@ -8,13 +8,13 @@
 import '//resources/cr_elements/cr_radio_group/cr_radio_group.js';
 
 import {assert} from 'chrome://resources/ash/common/assert.js';
-import {I18nBehavior, I18nBehaviorInterface} from 'chrome://resources/ash/common/i18n_behavior.js';
-import {mixinBehaviors, PolymerElement} from 'chrome://resources/polymer/v3_0/polymer/polymer_bundled.min.js';
-
+import {PolymerElement} from 'chrome://resources/polymer/v3_0/polymer/polymer_bundled.min.js';
+import {I18nMixin} from 'chrome://resources/cr_elements/i18n_mixin.js';
 import {getShimlessRmaService} from './mojo_interface_provider.js';
 import {getTemplate} from './onboarding_choose_wipe_device_page.html.js';
 import {ShimlessRmaServiceInterface, StateResult} from './shimless_rma.mojom-webui.js';
 import {enableNextButton, focusPageTitle} from './shimless_rma_util.js';
+import {OnSelectedChangedEvent} from './events.js';
 
 /**
  * @fileoverview
@@ -22,28 +22,20 @@
  * the device data at the end of the RMA process or preserving it.
  */
 
-/**
- * @constructor
- * @extends {PolymerElement}
- * @implements {I18nBehaviorInterface}
- */
-const OnboardingChooseWipeDevicePageBase =
-    mixinBehaviors([I18nBehavior], PolymerElement);
+const OnboardingChooseWipeDevicePageBase = I18nMixin(PolymerElement);
 
 /**
  * Supported options for the wipe device state.
- * @enum {string}
  */
-const WipeDeviceOption = {
-  WIPE_DEVICE: 'wipeDevice',
-  PRESERVE_DATA: 'preserveData',
-};
+enum WipeDeviceOption {
+  WIPE_DEVICE = 'wipeDevice',
+  PRESERVE_DATA = 'preserveData',
+}
 
-/** @polymer */
 export class OnboardingChooseWipeDevicePage extends
     OnboardingChooseWipeDevicePageBase {
   static get is() {
-    return 'onboarding-choose-wipe-device-page';
+    return 'onboarding-choose-wipe-device-page' as const;
   }
 
   static get template() {
@@ -52,19 +44,16 @@
 
   static get properties() {
     return {
+      // Set by shimless_rma.ts.
+      allButtonsDisabled: Boolean,
+
       /**
        * Used to refer to the enum values in HTML file.
-       * @protected {?WipeDeviceOption}
        */
       wipeDeviceOption: {
         type: Object,
         value: WipeDeviceOption,
       },
-
-      // Set by shimless_rma.js.
-      allButtonsDisabled: Boolean,
-
-      /** @protected */
       selectedWipeDeviceOption: {
         type: String,
         value: '',
@@ -72,39 +61,35 @@
     };
   }
 
-  constructor() {
-    super();
-    /** @private {ShimlessRmaServiceInterface} */
-    this.shimlessRmaService = getShimlessRmaService();
-  }
+  allButtonsDisabled: boolean;
+  shimlessRmaService: ShimlessRmaServiceInterface = getShimlessRmaService();
+  protected selectedWipeDeviceOption: string;
 
-  /** @override */
-  ready() {
+  override ready() {
     super.ready();
 
     focusPageTitle(this);
   }
 
-
-  /**
-   * @param {!CustomEvent<{value: string}>} event
-   * @protected
-   */
-  onOptionChanged(event) {
-    this.selectedWipeDeviceOption =
-        /** @type {!WipeDeviceOption} */ (event.detail.value);
+  protected onOptionChanged(event: OnSelectedChangedEvent): void {
+    this.selectedWipeDeviceOption = event.detail.value;
 
     // Enable the next button when an option is chosen.
     enableNextButton(this);
   }
 
-  /** @return {!Promise<!{stateResult: !StateResult}>} */
-  onNextButtonClick() {
+  onNextButtonClick(): Promise<{stateResult: StateResult}> {
     assert(!!this.selectedWipeDeviceOption);
     return this.shimlessRmaService.setWipeDevice(
         this.selectedWipeDeviceOption === WipeDeviceOption.WIPE_DEVICE);
   }
 }
 
+declare global {
+  interface HTMLElementTagNameMap {
+    [OnboardingChooseWipeDevicePage.is]: OnboardingChooseWipeDevicePage;
+  }
+}
+
 customElements.define(
     OnboardingChooseWipeDevicePage.is, OnboardingChooseWipeDevicePage);
diff --git a/ash/webui/shimless_rma/resources/onboarding_choose_wp_disable_method_page.js b/ash/webui/shimless_rma/resources/onboarding_choose_wp_disable_method_page.ts
similarity index 61%
rename from ash/webui/shimless_rma/resources/onboarding_choose_wp_disable_method_page.js
rename to ash/webui/shimless_rma/resources/onboarding_choose_wp_disable_method_page.ts
index 26c4c80..cb817384 100644
--- a/ash/webui/shimless_rma/resources/onboarding_choose_wp_disable_method_page.js
+++ b/ash/webui/shimless_rma/resources/onboarding_choose_wp_disable_method_page.ts
@@ -5,13 +5,14 @@
 import './shimless_rma_shared.css.js';
 import './base_page.js';
 
-import {I18nBehavior, I18nBehaviorInterface} from 'chrome://resources/ash/common/i18n_behavior.js';
-import {mixinBehaviors, PolymerElement} from 'chrome://resources/polymer/v3_0/polymer/polymer_bundled.min.js';
+import {PolymerElement} from 'chrome://resources/polymer/v3_0/polymer/polymer_bundled.min.js';
+import {I18nMixin} from 'chrome://resources/cr_elements/i18n_mixin.js';
 
 import {getShimlessRmaService} from './mojo_interface_provider.js';
 import {getTemplate} from './onboarding_choose_wp_disable_method_page.html.js';
 import {ShimlessRmaServiceInterface, StateResult} from './shimless_rma.mojom-webui.js';
 import {disableNextButton, enableNextButton, focusPageTitle} from './shimless_rma_util.js';
+import {OnSelectedChangedEvent} from './events.js';
 
 /**
  * @fileoverview
@@ -22,19 +23,12 @@
  * status.
  */
 
-/**
- * @constructor
- * @extends {PolymerElement}
- * @implements {I18nBehaviorInterface}
- */
-const OnboardingChooseWpDisableMethodPageBase =
-    mixinBehaviors([I18nBehavior], PolymerElement);
+const OnboardingChooseWpDisableMethodPageBase = I18nMixin(PolymerElement);
 
-/** @polymer */
 export class OnboardingChooseWpDisableMethodPage extends
-    OnboardingChooseWpDisableMethodPageBase {
+  OnboardingChooseWpDisableMethodPageBase {
   static get is() {
-    return 'onboarding-choose-wp-disable-method-page';
+    return 'onboarding-choose-wp-disable-method-page' as const;
   }
 
   static get template() {
@@ -44,12 +38,10 @@
   static get properties() {
     return {
       /**
-       * Set by shimless_rma.js.
-       * @type {boolean}
+       * Set by shimless_rma.ts.
        */
       allButtonsDisabled: Boolean,
 
-      /** @private */
       hwwpMethod: {
         type: String,
         value: '',
@@ -57,24 +49,17 @@
     };
   }
 
-  constructor() {
-    super();
-    /** @private {ShimlessRmaServiceInterface} */
-    this.shimlessRmaService = getShimlessRmaService();
-  }
+  shimlessRmaService: ShimlessRmaServiceInterface = getShimlessRmaService();
+  allButtonsDisabled: boolean;
+  private hwwpMethod: string;
 
-  /** @override */
-  ready() {
+  override ready() {
     super.ready();
 
     focusPageTitle(this);
   }
 
-  /**
-   * @param {!CustomEvent<{value: string}>} event
-   * @protected
-   */
-  onHwwpDisableMethodSelectionChanged(event) {
+  protected onHwwpDisableMethodSelectionChanged(event: OnSelectedChangedEvent) {
     this.hwwpMethod = event.detail.value;
     const disabled = !this.hwwpMethod;
     if (disabled) {
@@ -84,8 +69,7 @@
     }
   }
 
-  /** @return {!Promise<!{stateResult: !StateResult}>} */
-  onNextButtonClick() {
+  onNextButtonClick(): Promise<{stateResult: StateResult}> {
     if (this.hwwpMethod === 'hwwpDisableMethodManual') {
       return this.shimlessRmaService.chooseManuallyDisableWriteProtect();
     } else if (this.hwwpMethod === 'hwwpDisableMethodRsu') {
@@ -96,6 +80,12 @@
   }
 }
 
+declare global {
+  interface HTMLElementTagNameMap {
+    [OnboardingChooseWpDisableMethodPage.is]: OnboardingChooseWpDisableMethodPage;
+  }
+}
+
 customElements.define(
-    OnboardingChooseWpDisableMethodPage.is,
-    OnboardingChooseWpDisableMethodPage);
+  OnboardingChooseWpDisableMethodPage.is,
+  OnboardingChooseWpDisableMethodPage);
diff --git a/ash/wm/window_restore/informed_restore_dialog.cc b/ash/wm/window_restore/informed_restore_dialog.cc
deleted file mode 100644
index fdd4645..0000000
--- a/ash/wm/window_restore/informed_restore_dialog.cc
+++ /dev/null
@@ -1,201 +0,0 @@
-// Copyright 2023 The Chromium Authors
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#include "ash/wm/window_restore/informed_restore_dialog.h"
-
-#include <string>
-
-#include "ash/public/cpp/saved_desk_delegate.h"
-#include "ash/resources/vector_icons/vector_icons.h"
-#include "ash/shell.h"
-#include "ash/wm/desks/desks_util.h"
-#include "components/account_id/account_id.h"
-#include "components/services/app_service/public/cpp/app_registry_cache.h"
-#include "components/services/app_service/public/cpp/app_registry_cache_wrapper.h"
-#include "ui/base/metadata/metadata_impl_macros.h"
-#include "ui/gfx/image/image_skia.h"
-#include "ui/views/background.h"
-#include "ui/views/controls/button/image_button.h"
-#include "ui/views/controls/button/image_button_factory.h"
-#include "ui/views/controls/image_view.h"
-#include "ui/views/controls/label.h"
-#include "ui/views/layout/box_layout_view.h"
-#include "ui/views/layout/table_layout_view.h"
-
-namespace ash {
-
-namespace {
-
-// TODO(sammiequon|zxdan): Match specs.
-constexpr gfx::Size kItemIconPreferredSize(30, 30);
-constexpr gfx::Size kItemPreferredSize(160, 100);
-constexpr int kSettingsIconSize = 24;
-constexpr int kTableNumColumns = 3;
-constexpr int kTablePaddingDp = 8;
-
-constexpr int kAppIdImageSize = 64;
-
-}  // namespace
-
-// Represents an app that will be restored by full restore. Contains the app
-// title and app icon.
-// TODO(sammiequon|zxdan): Match specs.
-class InformedRestoreItemView : public views::BoxLayoutView {
- public:
-  METADATA_HEADER(InformedRestoreItemView);
-
-  explicit InformedRestoreItemView(const std::string& app_title) {
-    SetBackground(views::CreateSolidBackground(SK_ColorBLACK));
-    SetCrossAxisAlignment(views::BoxLayout::CrossAxisAlignment::kStart);
-    SetOrientation(views::BoxLayout::Orientation::kVertical);
-    SetPreferredSize(kItemPreferredSize);
-
-    AddChildView(views::Builder<views::ImageView>()
-                     .CopyAddressTo(&image_view_)
-                     .SetImageSize(kItemIconPreferredSize)
-                     .Build());
-    AddChildView(views::Builder<views::Label>()
-                     .SetEnabledColor(SK_ColorWHITE)
-                     .SetFontList(gfx::FontList({"Roboto"}, gfx::Font::NORMAL,
-                                                14, gfx::Font::Weight::NORMAL))
-                     .SetHorizontalAlignment(gfx::ALIGN_LEFT)
-                     .SetText(base::ASCIIToUTF16(app_title))
-                     .Build());
-  }
-  InformedRestoreItemView(const InformedRestoreItemView&) = delete;
-  InformedRestoreItemView& operator=(const InformedRestoreItemView&) = delete;
-  ~InformedRestoreItemView() override = default;
-
-  views::ImageView* image_view() { return image_view_; }
-
-  base::WeakPtr<InformedRestoreItemView> GetWeakPtr() {
-    return weak_ptr_factory_.GetWeakPtr();
-  }
-
- private:
-  raw_ptr<views::ImageView> image_view_;
-
-  base::WeakPtrFactory<InformedRestoreItemView> weak_ptr_factory_{this};
-};
-
-BEGIN_METADATA(InformedRestoreItemView, views::BoxLayoutView)
-END_METADATA
-
-// The contents of the informed restore dialog. It is a table that holds a
-// couple `InformedItemView`'s. One item per window entry in the full restore
-// file.
-class InformedRestoreContentsView : public views::TableLayoutView {
- public:
-  METADATA_HEADER(InformedRestoreContentsView);
-
-  explicit InformedRestoreContentsView(
-      const InformedRestoreDialog::AppIds& app_ids) {
-    const int elements = static_cast<int>(app_ids.size());
-    CHECK_GT(elements, 0);
-
-    for (int i = 0; i < kTableNumColumns; ++i) {
-      if (i != 0) {
-        AddPaddingColumn(views::TableLayout::kFixedSize, kTablePaddingDp);
-      }
-      AddColumn(views::LayoutAlignment::kStart, views::LayoutAlignment::kStart,
-                views::TableLayout::kFixedSize,
-                views::TableLayout::ColumnSize::kUsePreferred, 0, 0);
-    }
-
-    // TODO(sammiequon|zxdan): Add a scroll view for if we have many items.
-    for (int i = 0; i < elements; i += kTableNumColumns) {
-      if (i != 0) {
-        AddPaddingRow(views::TableLayout::kFixedSize, kTablePaddingDp);
-      }
-      AddRows(/*n=*/1, views::TableLayout::kFixedSize);
-    }
-
-    // TODO: Handle case where the app is not ready or installed.
-    apps::AppRegistryCache* cache =
-        apps::AppRegistryCacheWrapper::Get().GetAppRegistryCache(
-            Shell::Get()->session_controller()->GetActiveAccountId());
-    auto* delegate = Shell::Get()->saved_desk_delegate();
-    for (const std::string& app_id : app_ids) {
-      std::string title;
-      // `cache` might be null in a test environment. In that case, we will use
-      // an empty title.
-      if (cache) {
-        cache->ForOneApp(app_id, [&title](const apps::AppUpdate& update) {
-          title = update.Name();
-        });
-      }
-
-      auto item_view = std::make_unique<InformedRestoreItemView>(title);
-      auto* item_view_ptr = item_view.get();
-      AddChildView(std::move(item_view));
-
-      // The callback may be called synchronously.
-      delegate->GetIconForAppId(
-          app_id, kAppIdImageSize,
-          base::BindOnce(
-              [](base::WeakPtr<InformedRestoreItemView> item_view,
-                 const gfx::ImageSkia& icon) {
-                if (item_view) {
-                  item_view->image_view()->SetImage(
-                      ui::ImageModel::FromImageSkia(icon));
-                }
-              },
-              item_view_ptr->GetWeakPtr()));
-    }
-  }
-  InformedRestoreContentsView(const InformedRestoreContentsView&) = delete;
-  InformedRestoreContentsView& operator=(const InformedRestoreContentsView&) =
-      delete;
-  ~InformedRestoreContentsView() override = default;
-};
-
-BEGIN_METADATA(InformedRestoreContentsView, views::View)
-END_METADATA
-
-InformedRestoreDialog::~InformedRestoreDialog() = default;
-
-// static
-std::unique_ptr<views::Widget> InformedRestoreDialog::Create(
-    aura::Window* root) {
-  // TODO(sammiequon|zxdan): Remove this temporary data used for testing.
-  AppIds kTestingAppsData = {
-      "mgndgikekgjfcpckkfioiadnlibdjbkf",  // Chrome
-      "njfbnohfdkmbmnjapinfcopialeghnmh",  // Camera
-      "odknhmnlageboeamepcngndbggdpaobj",  // Settings
-      "fkiggjmkendpmbegkagpmagjepfkpmeb",  // Files
-      "nbljnnecbjbmifnoehiemkgefbnpoeak"   // Explore
-  };
-
-  views::Widget::InitParams params;
-  params.delegate = new InformedRestoreDialog(kTestingAppsData);
-  params.name = "InformedRestoreDialog";
-  params.parent = desks_util::GetActiveDeskContainerForRoot(root);
-  params.type = views::Widget::InitParams::TYPE_WINDOW_FRAMELESS;
-
-  return std::make_unique<views::Widget>(std::move(params));
-}
-
-InformedRestoreDialog::InformedRestoreDialog(const AppIds& app_ids) {
-  // TODO(sammiequon|zxdan): Localize all these strings.
-  views::Builder<SystemDialogDelegateView>(this)
-      .SetAcceptButtonText(u"Restore")
-      .SetCancelButtonText(u"No Thanks")
-      .SetDescription(u"Continue where you left off?")
-      .SetModalType(ui::ModalType::MODAL_TYPE_SYSTEM)
-      .SetTitleText(u"Welcome Back")
-      .SetAdditionalViewInButtonRow(
-          views::Builder<views::ImageButton>(
-              views::CreateVectorImageButtonWithNativeTheme(
-                  views::Button::PressedCallback(), kSettingsIcon,
-                  kSettingsIconSize))
-              .SetTooltipText(u"Settings"))
-      .BuildChildren();
-
-  SetMiddleContentView(std::make_unique<InformedRestoreContentsView>(app_ids));
-}
-
-BEGIN_METADATA(InformedRestoreDialog, SystemDialogDelegateView)
-END_METADATA
-
-}  // namespace ash
diff --git a/ash/wm/window_restore/informed_restore_dialog.h b/ash/wm/window_restore/informed_restore_dialog.h
deleted file mode 100644
index effd2c6..0000000
--- a/ash/wm/window_restore/informed_restore_dialog.h
+++ /dev/null
@@ -1,38 +0,0 @@
-// Copyright 2023 The Chromium Authors
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#ifndef ASH_WM_WINDOW_RESTORE_INFORMED_RESTORE_DIALOG_H_
-#define ASH_WM_WINDOW_RESTORE_INFORMED_RESTORE_DIALOG_H_
-
-#include <memory>
-
-#include "ash/style/system_dialog_delegate_view.h"
-#include "ui/base/metadata/metadata_header_macros.h"
-#include "ui/views/widget/widget.h"
-
-namespace aura {
-class Window;
-}
-
-namespace ash {
-
-class InformedRestoreDialog : public SystemDialogDelegateView {
- public:
-  METADATA_HEADER(InformedRestoreDialog);
-
-  using AppIds = std::vector<std::string>;
-
-  InformedRestoreDialog(const InformedRestoreDialog&) = delete;
-  InformedRestoreDialog& operator=(const InformedRestoreDialog&) = delete;
-  ~InformedRestoreDialog() override;
-
-  static std::unique_ptr<views::Widget> Create(aura::Window* root);
-
- private:
-  explicit InformedRestoreDialog(const AppIds& app_ids);
-};
-
-}  // namespace ash
-
-#endif  // ASH_WM_WINDOW_RESTORE_INFORMED_RESTORE_DIALOG_H_
diff --git a/ash/wm/window_restore/informed_restore_dialog_unittest.cc b/ash/wm/window_restore/informed_restore_dialog_unittest.cc
deleted file mode 100644
index 09da237..0000000
--- a/ash/wm/window_restore/informed_restore_dialog_unittest.cc
+++ /dev/null
@@ -1,31 +0,0 @@
-// Copyright 2023 The Chromium Authors
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#include "ash/wm/window_restore/informed_restore_dialog.h"
-
-#include "ash/shell.h"
-#include "ash/test/ash_test_base.h"
-#include "ash/wm/window_restore/window_restore_controller.h"
-#include "base/test/scoped_feature_list.h"
-
-namespace ash {
-
-class InformedRestoreDialogTest : public AshTestBase {
- public:
-  InformedRestoreDialogTest() = default;
-  InformedRestoreDialogTest(const InformedRestoreDialogTest&) = delete;
-  InformedRestoreDialogTest& operator=(const InformedRestoreDialogTest&) =
-      delete;
-  ~InformedRestoreDialogTest() override = default;
-
- private:
-  base::test::ScopedFeatureList scoped_feature_list_{
-      features::kPostLoginGlanceables};
-};
-
-TEST_F(InformedRestoreDialogTest, Show) {
-  Shell::Get()->window_restore_controller()->MaybeStartPineOverviewSession();
-}
-
-}  // namespace ash
diff --git a/ash/wm/wm_shadow_controller_delegate.cc b/ash/wm/wm_shadow_controller_delegate.cc
index 8f51f12..f967522c 100644
--- a/ash/wm/wm_shadow_controller_delegate.cc
+++ b/ash/wm/wm_shadow_controller_delegate.cc
@@ -122,10 +122,8 @@
 
 bool WmShadowControllerDelegate::ShouldHaveRoundedShadowForWindow(
     const aura::Window* window) {
-  // Apply rounded corner to shadow, only if the frame associated with the
-  // `window` has rounded corners. Rounded corners on the frame are applied
-  // based on the `WindowStateType` of `window`.
-  return chromeos::GetFrameCornerRadius(window) > 0;
+  // Apply rounded corner to shadow, if the `window` has rounded corners.
+  return chromeos::ShouldWindowHaveRoundedCorners(window);
 }
 
 bool WmShadowControllerDelegate::ShouldUpdateShadowOnWindowPropertyChange(
diff --git a/base/BUILD.gn b/base/BUILD.gn
index 49e105d..82c0c93 100644
--- a/base/BUILD.gn
+++ b/base/BUILD.gn
@@ -1333,8 +1333,8 @@
     deps += [
       ":base_jni",
       ":process_launcher_jni",
-      "//third_party/jni_zero:jni_zero_utils",
     ]
+    public_deps += [ "//third_party/jni_zero:jni_zero_utils" ]
   }  # is_android || is_robolectric
 
   # Chromeos.
diff --git a/base/android/java/src/org/chromium/base/LocaleUtils.java b/base/android/java/src/org/chromium/base/LocaleUtils.java
index 81a36a6..f916f4a 100644
--- a/base/android/java/src/org/chromium/base/LocaleUtils.java
+++ b/base/android/java/src/org/chromium/base/LocaleUtils.java
@@ -195,7 +195,7 @@
      * @return The default country code set during install.
      */
     @CalledByNative
-    private static String getDefaultCountryCode() {
+    public static String getDefaultCountryCode() {
         CommandLine commandLine = CommandLine.getInstance();
         return commandLine.hasSwitch(BaseSwitches.DEFAULT_COUNTRY_CODE_AT_INSTALL)
                 ? commandLine.getSwitchValue(BaseSwitches.DEFAULT_COUNTRY_CODE_AT_INSTALL)
diff --git a/base/android/jni_android.cc b/base/android/jni_android.cc
index e040d7b..ab0b823 100644
--- a/base/android/jni_android.cc
+++ b/base/android/jni_android.cc
@@ -33,7 +33,6 @@
              "HandleJniExceptionsInJava",
              base::FEATURE_ENABLED_BY_DEFAULT);
 
-JavaVM* g_jvm = nullptr;
 jobject g_class_loader = nullptr;
 jclass g_out_of_memory_error_class = nullptr;
 jmethodID g_class_loader_load_class_method_id = nullptr;
@@ -91,81 +90,15 @@
 const char kOomInGetJavaExceptionInfoMessage[] =
     "Unable to obtain Java stack trace due to OutOfMemoryError";
 
-JNIEnv* AttachCurrentThread() {
-  DCHECK(g_jvm);
-  JNIEnv* env = nullptr;
-  jint ret = g_jvm->GetEnv(reinterpret_cast<void**>(&env), JNI_VERSION_1_2);
-  if (ret == JNI_EDETACHED || !env) {
-    JavaVMAttachArgs args;
-    args.version = JNI_VERSION_1_2;
-    args.group = nullptr;
-
-    // 16 is the maximum size for thread names on Android.
-    char thread_name[16];
-    int err = prctl(PR_GET_NAME, thread_name);
-    if (err < 0) {
-      DPLOG(ERROR) << "prctl(PR_GET_NAME)";
-      args.name = nullptr;
-    } else {
-      args.name = thread_name;
-    }
-
-#if BUILDFLAG(IS_ANDROID)
-    ret = g_jvm->AttachCurrentThread(&env, &args);
-#else
-    ret = g_jvm->AttachCurrentThread(reinterpret_cast<void**>(&env), &args);
-#endif
-    CHECK_EQ(JNI_OK, ret);
-  }
-  return env;
-}
-
-JNIEnv* AttachCurrentThreadWithName(const std::string& thread_name) {
-  DCHECK(g_jvm);
-  JavaVMAttachArgs args;
-  args.version = JNI_VERSION_1_2;
-  args.name = const_cast<char*>(thread_name.c_str());
-  args.group = nullptr;
-  JNIEnv* env = nullptr;
-#if BUILDFLAG(IS_ANDROID)
-  jint ret = g_jvm->AttachCurrentThread(&env, &args);
-#else
-  jint ret = g_jvm->AttachCurrentThread(reinterpret_cast<void**>(&env), &args);
-#endif
-  CHECK_EQ(JNI_OK, ret);
-  return env;
-}
-
-void DetachFromVM() {
-  // Ignore the return value, if the thread is not attached, DetachCurrentThread
-  // will fail. But it is ok as the native thread may never be attached.
-  if (g_jvm)
-    g_jvm->DetachCurrentThread();
-}
-
 void InitVM(JavaVM* vm) {
-  DCHECK(!g_jvm || g_jvm == vm);
-  g_jvm = vm;
   jni_zero::InitVM(vm);
-  JNIEnv* env = base::android::AttachCurrentThread();
+  jni_zero::SetExceptionHandler(CheckException);
+  JNIEnv* env = jni_zero::AttachCurrentThread();
   g_out_of_memory_error_class = static_cast<jclass>(
       env->NewGlobalRef(env->FindClass("java/lang/OutOfMemoryError")));
   DCHECK(g_out_of_memory_error_class);
 }
 
-bool IsVMInitialized() {
-  return g_jvm != nullptr;
-}
-
-JavaVM* GetVM() {
-  return g_jvm;
-}
-
-void DisableJvmForTesting() {
-  g_jvm = nullptr;
-  jni_zero::DisableJvmForTesting();
-}
-
 void InitGlobalClassLoader(JNIEnv* env) {
   DCHECK(g_class_loader == nullptr);
 
@@ -407,8 +340,9 @@
 
 std::string GetJavaStackTraceIfPresent() {
   JNIEnv* env = nullptr;
-  if (g_jvm) {
-    g_jvm->GetEnv(reinterpret_cast<void**>(&env), JNI_VERSION_1_2);
+  JavaVM* jvm = jni_zero::GetVM();
+  if (jvm) {
+    jvm->GetEnv(reinterpret_cast<void**>(&env), JNI_VERSION_1_2);
   }
   if (!env) {
     // JNI has not been initialized on this thread.
diff --git a/base/android/jni_android.h b/base/android/jni_android.h
index 4f76bfe..e53d258 100644
--- a/base/android/jni_android.h
+++ b/base/android/jni_android.h
@@ -17,6 +17,7 @@
 #include "base/compiler_specific.h"
 #include "base/debug/debugging_buildflags.h"
 #include "base/debug/stack_trace.h"
+#include "third_party/jni_zero/core.h"
 
 namespace base {
 namespace android {
@@ -38,32 +39,44 @@
 BASE_EXPORT extern const char kOomInGetJavaExceptionInfoMessage[];
 
 // Attaches the current thread to the VM (if necessary) and return the JNIEnv*.
-BASE_EXPORT JNIEnv* AttachCurrentThread();
+inline JNIEnv* AttachCurrentThread() {
+  return jni_zero::AttachCurrentThread();
+}
 
 // Same to AttachCurrentThread except that thread name will be set to
 // |thread_name| if it is the first call. Otherwise, thread_name won't be
 // changed. AttachCurrentThread() doesn't regard underlying platform thread
 // name, but just resets it to "Thread-???". This function should be called
 // right after new thread is created if it is important to keep thread name.
-BASE_EXPORT JNIEnv* AttachCurrentThreadWithName(const std::string& thread_name);
+inline JNIEnv* AttachCurrentThreadWithName(const std::string& thread_name) {
+  return jni_zero::AttachCurrentThreadWithName(thread_name);
+}
 
 // Detaches the current thread from VM if it is attached.
-BASE_EXPORT void DetachFromVM();
+inline void DetachFromVM() {
+  jni_zero::DetachFromVM();
+}
 
 // Initializes the global JVM.
 BASE_EXPORT void InitVM(JavaVM* vm);
 
 // Returns true if the global JVM has been initialized.
-BASE_EXPORT bool IsVMInitialized();
+inline bool IsVMInitialized() {
+  return jni_zero::IsVMInitialized();
+}
 
 // Returns the global JVM, or nullptr if it has not been initialized.
-BASE_EXPORT JavaVM* GetVM();
+inline JavaVM* GetVM() {
+  return jni_zero::GetVM();
+}
 
 // Do not allow any future native->java calls.
 // This is necessary in gtest DEATH_TESTS to prevent
 // GetJavaStackTraceIfPresent() from accessing a defunct JVM (due to fork()).
 // https://crbug.com/1484834
-BASE_EXPORT void DisableJvmForTesting();
+inline void DisableJvmForTesting() {
+  return jni_zero::DisableJvmForTesting();
+}
 
 // Initializes the global ClassLoader used by the GetClass and LazyGetClass
 // methods. This is needed because JNI will use the base ClassLoader when there
diff --git a/base/win/pe_image_reader.cc b/base/win/pe_image_reader.cc
index de2f9a5..859b3442 100644
--- a/base/win/pe_image_reader.cc
+++ b/base/win/pe_image_reader.cc
@@ -70,9 +70,8 @@
   Clear();
 }
 
-bool PeImageReader::Initialize(const uint8_t* image_data, size_t image_size) {
+bool PeImageReader::Initialize(span<const uint8_t> image_data) {
   image_data_ = image_data;
-  image_size_ = image_size;
 
   if (!ValidateDosHeader() || !ValidatePeSignature() ||
       !ValidateCoffFileHeader() || !ValidateOptionalHeader() ||
@@ -90,13 +89,16 @@
 
 const IMAGE_DOS_HEADER* PeImageReader::GetDosHeader() {
   DCHECK_NE((validation_state_ & VALID_DOS_HEADER), 0U);
-  return reinterpret_cast<const IMAGE_DOS_HEADER*>(image_data_);
+  return reinterpret_cast<const IMAGE_DOS_HEADER*>(image_data_.data());
 }
 
 const IMAGE_FILE_HEADER* PeImageReader::GetCoffFileHeader() {
   DCHECK_NE((validation_state_ & VALID_COFF_FILE_HEADER), 0U);
   return reinterpret_cast<const IMAGE_FILE_HEADER*>(
-      image_data_ + GetDosHeader()->e_lfanew + sizeof(DWORD));
+      image_data_
+          .subspan(checked_cast<size_t>(GetDosHeader()->e_lfanew) +
+                   sizeof(DWORD))
+          .data());
 }
 
 const uint8_t* PeImageReader::GetOptionalHeaderData(
@@ -195,8 +197,7 @@
 }
 
 void PeImageReader::Clear() {
-  image_data_ = nullptr;
-  image_size_ = 0;
+  image_data_ = raw_span<const uint8_t>();
   validation_state_ = 0;
   optional_header_.reset();
 }
@@ -254,18 +255,19 @@
   if (*optional_header_magic == IMAGE_NT_OPTIONAL_HDR32_MAGIC) {
     optional_header =
         std::make_unique<OptionalHeaderImpl<IMAGE_OPTIONAL_HEADER32>>(
-            image_data_ + optional_header_offset);
+            image_data_.subspan(optional_header_offset).data());
   } else if (*optional_header_magic == IMAGE_NT_OPTIONAL_HDR64_MAGIC) {
     optional_header =
         std::make_unique<OptionalHeaderImpl<IMAGE_OPTIONAL_HEADER64>>(
-            image_data_ + optional_header_offset);
+            image_data_.subspan(optional_header_offset).data());
   } else {
     return false;
   }
 
   // Does all of the claimed optional header fit in the image?
-  if (optional_header_size > image_size_ - optional_header_offset)
+  if (optional_header_size > image_data_.size() - optional_header_offset) {
     return false;
+  }
 
   // Is the claimed optional header big enough for everything but the dir?
   if (optional_header->GetDataDirectoryOffset() > optional_header_size)
@@ -289,9 +291,10 @@
   const size_t number_of_sections = GetNumberOfSections();
 
   // Do all section headers fit in the image?
-  if (!GetStructureAt(static_cast<size_t>(first_section_header - image_data_),
-                      number_of_sections * sizeof(IMAGE_SECTION_HEADER),
-                      &first_section_header)) {
+  if (!GetStructureAt(
+          static_cast<size_t>(first_section_header - image_data_.data()),
+          number_of_sections * sizeof(IMAGE_SECTION_HEADER),
+          &first_section_header)) {
     return false;
   }
 
@@ -301,8 +304,10 @@
 
 const uint8_t* PeImageReader::GetOptionalHeaderStart() {
   DCHECK_NE((validation_state_ & VALID_OPTIONAL_HEADER), 0U);
-  return (image_data_ + GetDosHeader()->e_lfanew +
-          offsetof(IMAGE_NT_HEADERS32, OptionalHeader));
+  return image_data_
+      .subspan(checked_cast<size_t>(GetDosHeader()->e_lfanew) +
+               offsetof(IMAGE_NT_HEADERS32, OptionalHeader))
+      .data();
 }
 
 size_t PeImageReader::GetOptionalHeaderSize() {
@@ -352,12 +357,12 @@
   // file pointer rather than an RVA.
   if (index == IMAGE_DIRECTORY_ENTRY_SECURITY) {
     // Does the data fit within the file.
-    if (entry->VirtualAddress > image_size_ ||
-        image_size_ - entry->VirtualAddress < entry->Size) {
+    if (entry->VirtualAddress > image_data_.size() ||
+        image_data_.size() - entry->VirtualAddress < entry->Size) {
       return nullptr;
     }
     *data_length = entry->Size;
-    return image_data_ + entry->VirtualAddress;
+    return image_data_.subspan(entry->VirtualAddress).data();
   }
 
   // Find the section containing the data.
@@ -378,7 +383,7 @@
   }
 
   *data_length = entry->Size;
-  return image_data_ + header->PointerToRawData + data_offset;
+  return image_data_.subspan(header->PointerToRawData + data_offset).data();
 }
 
 }  // namespace win
diff --git a/base/win/pe_image_reader.h b/base/win/pe_image_reader.h
index 4c4fbb7..c7a0b40 100644
--- a/base/win/pe_image_reader.h
+++ b/base/win/pe_image_reader.h
@@ -12,6 +12,9 @@
 #include <memory>
 
 #include "base/base_export.h"
+#include "base/containers/span.h"
+#include "base/memory/raw_span.h"
+#include "base/numerics/safe_math.h"
 
 namespace base {
 namespace win {
@@ -49,7 +52,7 @@
   ~PeImageReader();
 
   // Returns false if the given data does not appear to be a valid PE image.
-  bool Initialize(const uint8_t* image_data, size_t image_size);
+  bool Initialize(span<const uint8_t> image_data);
 
   // Returns the machine word size for the image.
   WordSize GetWordSize();
@@ -156,16 +159,18 @@
   bool GetStructureAt(size_t offset,
                       size_t structure_size,
                       const T** structure) {
-    if (offset > image_size_)
+    size_t remaining_bytes = 0;
+    if (!CheckSub(image_data_.size(), offset).AssignIfValid(&remaining_bytes)) {
       return false;
-    if (structure_size > image_size_ - offset)
+    }
+    if (structure_size > remaining_bytes) {
       return false;
-    *structure = reinterpret_cast<const T*>(image_data_ + offset);
+    }
+    *structure = reinterpret_cast<const T*>(image_data_.subspan(offset).data());
     return true;
   }
 
-  const uint8_t* image_data_ = nullptr;
-  size_t image_size_ = 0;
+  raw_span<const uint8_t> image_data_;
   uint32_t validation_state_ = 0;
   std::unique_ptr<OptionalHeader> optional_header_;
 };
diff --git a/base/win/pe_image_reader_unittest.cc b/base/win/pe_image_reader_unittest.cc
index 62d07e8..cf69a92 100644
--- a/base/win/pe_image_reader_unittest.cc
+++ b/base/win/pe_image_reader_unittest.cc
@@ -47,8 +47,7 @@
 
     ASSERT_TRUE(data_file_.Initialize(data_file_path_));
 
-    ASSERT_TRUE(
-        image_reader_.Initialize(data_file_.data(), data_file_.length()));
+    ASSERT_TRUE(image_reader_.Initialize(data_file_.bytes()));
   }
 
   raw_ptr<const TestData> expected_data_;
@@ -108,11 +107,12 @@
   PeImageReader short_reader;
 
   // Initialize should succeed when all headers are present.
-  EXPECT_TRUE(short_reader.Initialize(data_file_.data(), header_size));
+  EXPECT_TRUE(
+      short_reader.Initialize(make_span(data_file_.data(), header_size)));
 
   // But fail if anything is missing.
   for (size_t i = 0; i < header_size; ++i) {
-    EXPECT_FALSE(short_reader.Initialize(data_file_.data(), i));
+    EXPECT_FALSE(short_reader.Initialize(make_span(data_file_.data(), i)));
   }
 }
 
@@ -222,8 +222,7 @@
     data_file_path_ = data_file_path_.AppendASCII("pe_image_reader");
     data_file_path_ = data_file_path_.AppendASCII(expected_data_->filename);
     ASSERT_TRUE(data_file_.Initialize(data_file_path_));
-    ASSERT_TRUE(
-        image_reader_.Initialize(data_file_.data(), data_file_.length()));
+    ASSERT_TRUE(image_reader_.Initialize(data_file_.bytes()));
   }
 
   raw_ptr<const CertificateTestData> expected_data_;
diff --git a/build/config/fuchsia/test/context_provider.shard.test-cml b/build/config/fuchsia/test/context_provider.shard.test-cml
index e5db2f1f..a1bf40a 100644
--- a/build/config/fuchsia/test/context_provider.shard.test-cml
+++ b/build/config/fuchsia/test/context_provider.shard.test-cml
@@ -26,5 +26,10 @@
             from: "parent",
             to: "#context_provider",
         },
+        {
+              directory: "tzdata-icu",
+              from: "parent",
+              to: "#context_provider",
+        },
     ],
 }
diff --git a/build/config/fuchsia/test/minimum.shard.test-cml b/build/config/fuchsia/test/minimum.shard.test-cml
index 17b4927..78e4d467 100644
--- a/build/config/fuchsia/test/minimum.shard.test-cml
+++ b/build/config/fuchsia/test/minimum.shard.test-cml
@@ -29,6 +29,14 @@
       rights: [ "r*" ],
       path: "/config/data",
     },
+    // Holds ICU time zone data files.
+    // See:
+    // https://fuchsia.dev/fuchsia-src/concepts/process/namespaces?typical_directory_structure
+    {
+      directory: "tzdata-icu",
+      rights: [ "r*" ],
+      path: "/config/tzdata/icu",
+    },
     {
       storage: "cache",
       path: "/cache",
diff --git a/build/config/fuchsia/test/system_test_minimum.shard.test-cml b/build/config/fuchsia/test/system_test_minimum.shard.test-cml
index 6efde20f..6d9e515 100644
--- a/build/config/fuchsia/test/system_test_minimum.shard.test-cml
+++ b/build/config/fuchsia/test/system_test_minimum.shard.test-cml
@@ -12,6 +12,11 @@
       path: "/config/data",
     },
     {
+      directory: "tzdata-icu",
+      rights: [ "r*" ],
+      path: "/config/tzdata/icu",
+    },
+    {
       storage: "cache",
       path: "/cache",
     },
diff --git a/chrome/android/BUILD.gn b/chrome/android/BUILD.gn
index 0fcabf9..5cb0741b 100644
--- a/chrome/android/BUILD.gn
+++ b/chrome/android/BUILD.gn
@@ -29,6 +29,7 @@
 import("//chrome/chrome_paks.gni")
 import("//chrome/common/features.gni")
 import("//chrome/version.gni")
+import("//components/plus_addresses/buildflags.gni")
 import("//device/vr/buildflags/buildflags.gni")
 import("//printing/buildflags/buildflags.gni")
 import("//testing/test.gni")
@@ -232,6 +233,12 @@
       "//third_party/androidx:androidx_gridlayout_gridlayout_java",
       "//third_party/androidx:androidx_preference_preference_java",
     ]
+
+    if (plus_addresses_use_internal_android_resources) {
+      deps += [ "//clank/components/plus_addresses:java_resources" ]
+    } else {
+      deps += [ "//components/plus_addresses/android:java_resources" ]
+    }
   }
 
   android_library("app_hooks_java") {
@@ -261,6 +268,7 @@
       "//chrome/browser/xsurface_provider:hooks_public_impl_java",
       "//components/externalauth/android:google_delegate_public_impl_java",
       "//components/language/android:ulp_delegate_public_java",
+      "//components/search_engines/android:delegate_public_impl_java",
       "//components/signin/public/android:account_email_domain_displayability_java",
       "//components/webauthn/android:delegate_public_java",
       "//content/public/android:identity_credentials_public_impl_java",
@@ -2663,11 +2671,10 @@
       }
 
       if (enable_manifest_verification) {
-        expected_android_manifest =
-            "expectations/trichrome_library_apk.AndroidManifest.expected"
+        expected_android_manifest = "expectations/$_main_trichrome_library_apk_target.AndroidManifest.expected"
       }
       if (enable_libs_and_assets_verification) {
-        expected_libs_and_assets = "expectations/trichrome_library_apk.$target_cpu.libs_and_assets.expected"
+        expected_libs_and_assets = "expectations/$_main_trichrome_library_apk_target.$target_cpu.libs_and_assets.expected"
       }
     }
 
@@ -2695,6 +2702,10 @@
       apk_name = "TrichromeLibrary64"
       is_64_bit_browser = true
       include_32_bit_webview = false
+      if (enable_manifest_verification) {
+        expected_android_manifest =
+            "expectations/$target_name.AndroidManifest.expected"
+      }
       if (enable_libs_and_assets_verification) {
         expected_libs_and_assets =
             "expectations/$target_name.$target_cpu.libs_and_assets.expected"
@@ -2710,12 +2721,20 @@
           expected_libs_and_assets =
               "expectations/$target_name.$target_cpu.libs_and_assets.expected"
         }
+        if (enable_manifest_verification) {
+          expected_android_manifest =
+              "expectations/$target_name.AndroidManifest.expected"
+        }
       }
 
       trichrome_library_apk_tmpl("trichrome_library_64_32_apk") {
         apk_name = "TrichromeLibrary6432"
         is_64_bit_browser = true
         include_32_bit_webview = true
+        if (enable_manifest_verification) {
+          expected_android_manifest =
+              "expectations/$target_name.AndroidManifest.expected"
+        }
         if (enable_libs_and_assets_verification) {
           expected_libs_and_assets =
               "expectations/$target_name.$target_cpu.libs_and_assets.expected"
@@ -3156,12 +3175,10 @@
         include_64_bit_webview = true
       }
       if (enable_manifest_verification) {
-        expected_android_manifest_template = "expectations/monochrome_public_bundle__SPLIT_NAME.AndroidManifest.expected"
-        expected_proguard_config =
-            "expectations/monochrome_public_bundle.proguard_flags.expected"
+        expected_android_manifest = "expectations/${_main_monochrome_public_bundle_target}__base.AndroidManifest.expected"
       }
       if (enable_libs_and_assets_verification) {
-        expected_libs_and_assets = "expectations/monochrome_public_bundle.$target_cpu.libs_and_assets.expected"
+        expected_libs_and_assets = "expectations/${_main_monochrome_public_bundle_target}.$target_cpu.libs_and_assets.expected"
       }
     }
 
@@ -3208,11 +3225,11 @@
       }
 
       if (enable_manifest_verification) {
-        # Monochrome verifies all bundle modules, so only check base module here.
-        expected_android_manifest = "expectations/trichrome_chrome_bundle__base.AndroidManifest.expected"
+        # Monochrome6432 verifies all bundle modules, so only check base module here.
+        expected_android_manifest = "expectations/${_main_trichrome_chrome_bundle_target}__base.AndroidManifest.expected"
       }
       if (enable_libs_and_assets_verification) {
-        expected_libs_and_assets = "expectations/trichrome_chrome_bundle.$target_cpu.libs_and_assets.expected"
+        expected_libs_and_assets = "expectations/$_main_trichrome_chrome_bundle_target.$target_cpu.libs_and_assets.expected"
       }
     }
 
@@ -3360,6 +3377,10 @@
       bundle_name = "MonochromePublic64"
       is_64_bit_browser = true
       include_32_bit_webview = false
+      if (enable_manifest_verification) {
+        # Monochrome6432 verifies all bundle modules, so only check base module here.
+        expected_android_manifest = "expectations/monochrome_64_public_bundle__base.AndroidManifest.expected"
+      }
     }
 
     chrome_public_bundle("trichrome_chrome_64_bundle") {
@@ -3368,6 +3389,10 @@
       is_64_bit_browser = true
       include_32_bit_webview = false
       static_library_provider = ":trichrome_library_64_apk"
+      if (enable_manifest_verification) {
+        # Monochrome6432 verifies all bundle modules, so only check base module here.
+        expected_android_manifest = "expectations/trichrome_chrome_64_bundle__base.AndroidManifest.expected"
+      }
       if (enable_libs_and_assets_verification) {
         expected_libs_and_assets =
             "expectations/$target_name.$target_cpu.libs_and_assets.expected"
@@ -3380,6 +3405,10 @@
         bundle_name = "MonochromePublic32"
         is_64_bit_browser = false
         include_64_bit_webview = false
+        if (enable_manifest_verification) {
+          # Monochrome6432 verifies all bundle modules, so only check base module here.
+          expected_android_manifest = "expectations/monochrome_32_public_bundle__base.AndroidManifest.expected"
+        }
       }
 
       chrome_public_bundle("monochrome_64_32_public_bundle") {
@@ -3387,6 +3416,14 @@
         bundle_name = "MonochromePublic6432"
         is_64_bit_browser = true
         include_32_bit_webview = true
+        if (enable_manifest_verification) {
+          expected_android_manifest_template = "expectations/monochrome_64_32_public_bundle__SPLIT_NAME.AndroidManifest.expected"
+          expected_proguard_config = "expectations/monochrome_64_32_public_bundle.proguard_flags.expected"
+        }
+        if (enable_libs_and_assets_verification) {
+          expected_libs_and_assets =
+              "expectations/$target_name.$target_cpu.libs_and_assets.expected"
+        }
       }
 
       chrome_public_bundle("trichrome_chrome_64_32_bundle") {
@@ -3395,6 +3432,10 @@
         is_64_bit_browser = true
         include_32_bit_webview = true
         static_library_provider = ":trichrome_library_64_32_apk"
+        if (enable_manifest_verification) {
+          # Monochrome6432 verifies all bundle modules, so only check base module here.
+          expected_android_manifest = "expectations/trichrome_chrome_64_32_bundle__base.AndroidManifest.expected"
+        }
         if (enable_libs_and_assets_verification) {
           expected_libs_and_assets =
               "expectations/$target_name.$target_cpu.libs_and_assets.expected"
@@ -3406,6 +3447,10 @@
         is_64_bit_browser = false
         include_64_bit_webview = false
         static_library_provider = ":trichrome_library_32_apk"
+        if (enable_manifest_verification) {
+          # Monochrome6432 verifies all bundle modules, so only check base module here.
+          expected_android_manifest = "expectations/trichrome_chrome_32_bundle__base.AndroidManifest.expected"
+        }
         if (enable_libs_and_assets_verification) {
           expected_libs_and_assets =
               "expectations/$target_name.$target_cpu.libs_and_assets.expected"
@@ -3883,16 +3928,14 @@
   group("validate_expectations") {
     deps = []
     if (enable_libs_and_assets_verification) {
-      deps += [
-        ":${_main_monochrome_public_bundle_target}_validate_libs_and_assets",
-        ":${_main_trichrome_chrome_bundle_target}_validate_libs_and_assets",
-        ":${_main_trichrome_library_apk_target}_validate_libs_and_assets",
-      ]
       if (android_64bit_target_cpu) {
         deps += [
+          ":monochrome_64_32_public_bundle_validate_libs_and_assets",
+          ":trichrome_chrome_32_64_bundle_validate_libs_and_assets",
           ":trichrome_chrome_32_bundle_validate_libs_and_assets",
           ":trichrome_chrome_64_32_bundle_validate_libs_and_assets",
           ":trichrome_chrome_64_bundle_validate_libs_and_assets",
+          ":trichrome_library_32_64_apk_validate_libs_and_assets",
           ":trichrome_library_32_apk_validate_libs_and_assets",
           ":trichrome_library_64_32_apk_validate_libs_and_assets",
           ":trichrome_library_64_apk_validate_libs_and_assets",
@@ -3903,24 +3946,43 @@
         ]
       } else {
         deps += [
+          ":${_main_monochrome_public_bundle_target}_validate_libs_and_assets",
+          ":${_main_trichrome_chrome_bundle_target}_validate_libs_and_assets",
+          ":${_main_trichrome_library_apk_target}_validate_libs_and_assets",
           "//android_webview:trichrome_webview_bundle_validate_libs_and_assets",
         ]
       }
     }
     if (enable_manifest_verification) {
-      deps += [
-        ":${_main_monochrome_public_bundle_target}_validate_manifests",
-        ":${_main_monochrome_public_bundle_target}_validate_proguard_config",
-        ":${_main_trichrome_chrome_bundle_target}__base_bundle_module_validate_android_manifest",
-        ":${_main_trichrome_library_apk_target}_validate_android_manifest",
-      ]
       if (android_64bit_target_cpu) {
         deps += [
+          ":monochrome_32_64_public_bundle__base_bundle_module_validate_android_manifest",
+          ":monochrome_32_public_bundle__base_bundle_module_validate_android_manifest",
+          ":monochrome_64_32_public_bundle_validate_manifests",
+          ":monochrome_64_32_public_bundle_validate_proguard_config",
+          ":monochrome_64_public_bundle__base_bundle_module_validate_android_manifest",
+          ":trichrome_chrome_32_64_bundle__base_bundle_module_validate_android_manifest",
+          ":trichrome_chrome_32_bundle__base_bundle_module_validate_android_manifest",
+          ":trichrome_chrome_64_32_bundle__base_bundle_module_validate_android_manifest",
+          ":trichrome_chrome_64_bundle__base_bundle_module_validate_android_manifest",
+          ":trichrome_library_32_64_apk_validate_android_manifest",
+          ":trichrome_library_32_apk_validate_android_manifest",
+          ":trichrome_library_64_32_apk_validate_android_manifest",
+          ":trichrome_library_64_apk_validate_android_manifest",
           "//android_webview:system_webview_32_64_base_bundle_module_validate_android_manifest",
+          "//android_webview:system_webview_32_base_bundle_module_validate_android_manifest",
+          "//android_webview:system_webview_64_base_bundle_module_validate_android_manifest",
           "//android_webview:trichrome_webview_32_64_base_bundle_module_validate_android_manifest",
+          "//android_webview:trichrome_webview_32_base_bundle_module_validate_android_manifest",
+          "//android_webview:trichrome_webview_64_32_base_bundle_module_validate_android_manifest",
+          "//android_webview:trichrome_webview_64_base_bundle_module_validate_android_manifest",
         ]
       } else {
         deps += [
+          ":${_main_monochrome_public_bundle_target}_validate_manifests",
+          ":${_main_monochrome_public_bundle_target}_validate_proguard_config",
+          ":${_main_trichrome_chrome_bundle_target}__base_bundle_module_validate_android_manifest",
+          ":${_main_trichrome_library_apk_target}_validate_android_manifest",
           "//android_webview:system_webview_base_bundle_module_validate_android_manifest",
           "//android_webview:trichrome_webview_base_bundle_module_validate_android_manifest",
         ]
diff --git a/chrome/android/expectations/monochrome_32_64_public_bundle.arm64.libs_and_assets.expected b/chrome/android/expectations/monochrome_32_64_public_bundle.arm64.libs_and_assets.expected
new file mode 100644
index 0000000..5e688fe
--- /dev/null
+++ b/chrome/android/expectations/monochrome_32_64_public_bundle.arm64.libs_and_assets.expected
@@ -0,0 +1,174 @@
+apk_path=lib/arm64-v8a/libcrashpad_handler_trampoline.so, compress=False, alignment=16384
+apk_path=lib/arm64-v8a/libmonochrome.so, compress=False, alignment=16384
+apk_path=lib/armeabi-v7a/libarcore_sdk_c.so, compress=False, alignment=4096
+apk_path=lib/armeabi-v7a/libcrashpad_handler_trampoline.so, compress=False, alignment=4096
+apk_path=lib/armeabi-v7a/libmonochrome.so, compress=False, alignment=4096
+apk_path=assets/chrome_100_percent.pak, compress=False, alignment=4
+apk_path=assets/icudtl.dat, compress=False, alignment=4
+apk_path=assets/locales/af.pak, compress=False, alignment=4
+apk_path=assets/locales/am.pak, compress=False, alignment=4
+apk_path=assets/locales/ar.pak, compress=False, alignment=4
+apk_path=assets/locales/as.pak, compress=False, alignment=4
+apk_path=assets/locales/az.pak, compress=False, alignment=4
+apk_path=assets/locales/be.pak, compress=False, alignment=4
+apk_path=assets/locales/bg.pak, compress=False, alignment=4
+apk_path=assets/locales/bn.pak, compress=False, alignment=4
+apk_path=assets/locales/bs.pak, compress=False, alignment=4
+apk_path=assets/locales/ca.pak, compress=False, alignment=4
+apk_path=assets/locales/cs.pak, compress=False, alignment=4
+apk_path=assets/locales/da.pak, compress=False, alignment=4
+apk_path=assets/locales/de.pak, compress=False, alignment=4
+apk_path=assets/locales/el.pak, compress=False, alignment=4
+apk_path=assets/locales/en-GB.pak, compress=False, alignment=4
+apk_path=assets/locales/en-US.pak, compress=False, alignment=4
+apk_path=assets/locales/es-419.pak, compress=False, alignment=4
+apk_path=assets/locales/es.pak, compress=False, alignment=4
+apk_path=assets/locales/et.pak, compress=False, alignment=4
+apk_path=assets/locales/eu.pak, compress=False, alignment=4
+apk_path=assets/locales/fa.pak, compress=False, alignment=4
+apk_path=assets/locales/fi.pak, compress=False, alignment=4
+apk_path=assets/locales/fil.pak, compress=False, alignment=4
+apk_path=assets/locales/fr-CA.pak, compress=False, alignment=4
+apk_path=assets/locales/fr.pak, compress=False, alignment=4
+apk_path=assets/locales/gl.pak, compress=False, alignment=4
+apk_path=assets/locales/gu.pak, compress=False, alignment=4
+apk_path=assets/locales/he.pak, compress=False, alignment=4
+apk_path=assets/locales/hi.pak, compress=False, alignment=4
+apk_path=assets/locales/hr.pak, compress=False, alignment=4
+apk_path=assets/locales/hu.pak, compress=False, alignment=4
+apk_path=assets/locales/hy.pak, compress=False, alignment=4
+apk_path=assets/locales/id.pak, compress=False, alignment=4
+apk_path=assets/locales/is.pak, compress=False, alignment=4
+apk_path=assets/locales/it.pak, compress=False, alignment=4
+apk_path=assets/locales/ja.pak, compress=False, alignment=4
+apk_path=assets/locales/ka.pak, compress=False, alignment=4
+apk_path=assets/locales/kk.pak, compress=False, alignment=4
+apk_path=assets/locales/km.pak, compress=False, alignment=4
+apk_path=assets/locales/kn.pak, compress=False, alignment=4
+apk_path=assets/locales/ko.pak, compress=False, alignment=4
+apk_path=assets/locales/ky.pak, compress=False, alignment=4
+apk_path=assets/locales/lo.pak, compress=False, alignment=4
+apk_path=assets/locales/lt.pak, compress=False, alignment=4
+apk_path=assets/locales/lv.pak, compress=False, alignment=4
+apk_path=assets/locales/mk.pak, compress=False, alignment=4
+apk_path=assets/locales/ml.pak, compress=False, alignment=4
+apk_path=assets/locales/mn.pak, compress=False, alignment=4
+apk_path=assets/locales/mr.pak, compress=False, alignment=4
+apk_path=assets/locales/ms.pak, compress=False, alignment=4
+apk_path=assets/locales/my.pak, compress=False, alignment=4
+apk_path=assets/locales/nb.pak, compress=False, alignment=4
+apk_path=assets/locales/ne.pak, compress=False, alignment=4
+apk_path=assets/locales/nl.pak, compress=False, alignment=4
+apk_path=assets/locales/or.pak, compress=False, alignment=4
+apk_path=assets/locales/pa.pak, compress=False, alignment=4
+apk_path=assets/locales/pl.pak, compress=False, alignment=4
+apk_path=assets/locales/pt-BR.pak, compress=False, alignment=4
+apk_path=assets/locales/pt-PT.pak, compress=False, alignment=4
+apk_path=assets/locales/ro.pak, compress=False, alignment=4
+apk_path=assets/locales/ru.pak, compress=False, alignment=4
+apk_path=assets/locales/si.pak, compress=False, alignment=4
+apk_path=assets/locales/sk.pak, compress=False, alignment=4
+apk_path=assets/locales/sl.pak, compress=False, alignment=4
+apk_path=assets/locales/sq.pak, compress=False, alignment=4
+apk_path=assets/locales/sr-Latn.pak, compress=False, alignment=4
+apk_path=assets/locales/sr.pak, compress=False, alignment=4
+apk_path=assets/locales/sv.pak, compress=False, alignment=4
+apk_path=assets/locales/sw.pak, compress=False, alignment=4
+apk_path=assets/locales/ta.pak, compress=False, alignment=4
+apk_path=assets/locales/te.pak, compress=False, alignment=4
+apk_path=assets/locales/th.pak, compress=False, alignment=4
+apk_path=assets/locales/tr.pak, compress=False, alignment=4
+apk_path=assets/locales/uk.pak, compress=False, alignment=4
+apk_path=assets/locales/ur.pak, compress=False, alignment=4
+apk_path=assets/locales/uz.pak, compress=False, alignment=4
+apk_path=assets/locales/vi.pak, compress=False, alignment=4
+apk_path=assets/locales/zh-CN.pak, compress=False, alignment=4
+apk_path=assets/locales/zh-HK.pak, compress=False, alignment=4
+apk_path=assets/locales/zh-TW.pak, compress=False, alignment=4
+apk_path=assets/locales/zu.pak, compress=False, alignment=4
+apk_path=assets/resources.pak, compress=False, alignment=4
+apk_path=assets/snapshot_blob_32.bin, compress=False, alignment=4
+apk_path=assets/snapshot_blob_64.bin, compress=False, alignment=4
+apk_path=assets/stored-locales/af.pak, compress=False, alignment=4
+apk_path=assets/stored-locales/am.pak, compress=False, alignment=4
+apk_path=assets/stored-locales/ar.pak, compress=False, alignment=4
+apk_path=assets/stored-locales/as.pak, compress=False, alignment=4
+apk_path=assets/stored-locales/az.pak, compress=False, alignment=4
+apk_path=assets/stored-locales/be.pak, compress=False, alignment=4
+apk_path=assets/stored-locales/bg.pak, compress=False, alignment=4
+apk_path=assets/stored-locales/bn.pak, compress=False, alignment=4
+apk_path=assets/stored-locales/bs.pak, compress=False, alignment=4
+apk_path=assets/stored-locales/ca.pak, compress=False, alignment=4
+apk_path=assets/stored-locales/cs.pak, compress=False, alignment=4
+apk_path=assets/stored-locales/da.pak, compress=False, alignment=4
+apk_path=assets/stored-locales/de.pak, compress=False, alignment=4
+apk_path=assets/stored-locales/el.pak, compress=False, alignment=4
+apk_path=assets/stored-locales/en-GB.pak, compress=False, alignment=4
+apk_path=assets/stored-locales/en-US.pak, compress=False, alignment=4
+apk_path=assets/stored-locales/es-419.pak, compress=False, alignment=4
+apk_path=assets/stored-locales/es.pak, compress=False, alignment=4
+apk_path=assets/stored-locales/et.pak, compress=False, alignment=4
+apk_path=assets/stored-locales/eu.pak, compress=False, alignment=4
+apk_path=assets/stored-locales/fa.pak, compress=False, alignment=4
+apk_path=assets/stored-locales/fi.pak, compress=False, alignment=4
+apk_path=assets/stored-locales/fil.pak, compress=False, alignment=4
+apk_path=assets/stored-locales/fr-CA.pak, compress=False, alignment=4
+apk_path=assets/stored-locales/fr.pak, compress=False, alignment=4
+apk_path=assets/stored-locales/gl.pak, compress=False, alignment=4
+apk_path=assets/stored-locales/gu.pak, compress=False, alignment=4
+apk_path=assets/stored-locales/he.pak, compress=False, alignment=4
+apk_path=assets/stored-locales/hi.pak, compress=False, alignment=4
+apk_path=assets/stored-locales/hr.pak, compress=False, alignment=4
+apk_path=assets/stored-locales/hu.pak, compress=False, alignment=4
+apk_path=assets/stored-locales/hy.pak, compress=False, alignment=4
+apk_path=assets/stored-locales/id.pak, compress=False, alignment=4
+apk_path=assets/stored-locales/is.pak, compress=False, alignment=4
+apk_path=assets/stored-locales/it.pak, compress=False, alignment=4
+apk_path=assets/stored-locales/ja.pak, compress=False, alignment=4
+apk_path=assets/stored-locales/ka.pak, compress=False, alignment=4
+apk_path=assets/stored-locales/kk.pak, compress=False, alignment=4
+apk_path=assets/stored-locales/km.pak, compress=False, alignment=4
+apk_path=assets/stored-locales/kn.pak, compress=False, alignment=4
+apk_path=assets/stored-locales/ko.pak, compress=False, alignment=4
+apk_path=assets/stored-locales/ky.pak, compress=False, alignment=4
+apk_path=assets/stored-locales/lo.pak, compress=False, alignment=4
+apk_path=assets/stored-locales/lt.pak, compress=False, alignment=4
+apk_path=assets/stored-locales/lv.pak, compress=False, alignment=4
+apk_path=assets/stored-locales/mk.pak, compress=False, alignment=4
+apk_path=assets/stored-locales/ml.pak, compress=False, alignment=4
+apk_path=assets/stored-locales/mn.pak, compress=False, alignment=4
+apk_path=assets/stored-locales/mr.pak, compress=False, alignment=4
+apk_path=assets/stored-locales/ms.pak, compress=False, alignment=4
+apk_path=assets/stored-locales/my.pak, compress=False, alignment=4
+apk_path=assets/stored-locales/nb.pak, compress=False, alignment=4
+apk_path=assets/stored-locales/ne.pak, compress=False, alignment=4
+apk_path=assets/stored-locales/nl.pak, compress=False, alignment=4
+apk_path=assets/stored-locales/or.pak, compress=False, alignment=4
+apk_path=assets/stored-locales/pa.pak, compress=False, alignment=4
+apk_path=assets/stored-locales/pl.pak, compress=False, alignment=4
+apk_path=assets/stored-locales/pt-BR.pak, compress=False, alignment=4
+apk_path=assets/stored-locales/pt-PT.pak, compress=False, alignment=4
+apk_path=assets/stored-locales/ro.pak, compress=False, alignment=4
+apk_path=assets/stored-locales/ru.pak, compress=False, alignment=4
+apk_path=assets/stored-locales/si.pak, compress=False, alignment=4
+apk_path=assets/stored-locales/sk.pak, compress=False, alignment=4
+apk_path=assets/stored-locales/sl.pak, compress=False, alignment=4
+apk_path=assets/stored-locales/sq.pak, compress=False, alignment=4
+apk_path=assets/stored-locales/sr-Latn.pak, compress=False, alignment=4
+apk_path=assets/stored-locales/sr.pak, compress=False, alignment=4
+apk_path=assets/stored-locales/sv.pak, compress=False, alignment=4
+apk_path=assets/stored-locales/sw.pak, compress=False, alignment=4
+apk_path=assets/stored-locales/ta.pak, compress=False, alignment=4
+apk_path=assets/stored-locales/te.pak, compress=False, alignment=4
+apk_path=assets/stored-locales/th.pak, compress=False, alignment=4
+apk_path=assets/stored-locales/tr.pak, compress=False, alignment=4
+apk_path=assets/stored-locales/uk.pak, compress=False, alignment=4
+apk_path=assets/stored-locales/ur.pak, compress=False, alignment=4
+apk_path=assets/stored-locales/uz.pak, compress=False, alignment=4
+apk_path=assets/stored-locales/vi.pak, compress=False, alignment=4
+apk_path=assets/stored-locales/zh-CN.pak, compress=False, alignment=4
+apk_path=assets/stored-locales/zh-HK.pak, compress=False, alignment=4
+apk_path=assets/stored-locales/zh-TW.pak, compress=False, alignment=4
+apk_path=assets/stored-locales/zu.pak, compress=False, alignment=4
+apk_path=assets/webapk8.dex, compress=True, alignment=0
+apk_path=assets/webapk_dex_version.txt, compress=True, alignment=0
diff --git a/chrome/android/expectations/monochrome_32_64_public_bundle__base.AndroidManifest.expected b/chrome/android/expectations/monochrome_32_64_public_bundle__base.AndroidManifest.expected
new file mode 100644
index 0000000..4d28107
--- /dev/null
+++ b/chrome/android/expectations/monochrome_32_64_public_bundle__base.AndroidManifest.expected
@@ -0,0 +1,742 @@
+<?xml version="1.0" ?>
+<manifest
+    xmlns:android="http://schemas.android.com/apk/res/android"
+    package="org.chromium.chrome.stable"
+    platformBuildVersionCode="34"
+    platformBuildVersionName="14"
+    android:isolatedSplits="true"
+    android:versionCode="OFFSET=21"
+    android:versionName="#.#.#.#">
+  <permission android:name="$PACKAGE.TOS_ACKED" android:protectionLevel="signatureOrSystem"/>
+  <permission android:name="$PACKAGE.permission.C2D_MESSAGE" android:protectionLevel="signature"/>
+  <permission android:name="$PACKAGE.permission.CHILD_SERVICE" android:protectionLevel="signature"/>
+  <permission android:name="$PACKAGE.permission.DEBUG" android:label="Debug web pages" android:protectionLevel="signature"/>
+  <permission android:name="$PACKAGE.permission.READ_WRITE_BOOKMARK_FOLDERS" android:protectionLevel="signatureOrSystem"/>
+  <queries>  # DIFF-ANCHOR: 9588fea7
+    <package android:name="com.google.ar.core"/>
+  </queries>  # DIFF-ANCHOR: 9588fea7
+  <uses-feature android:glEsVersion="0x00020000"/>
+  <uses-feature android:name="android.hardware.camera" android:required="false"/>
+  <uses-feature android:name="android.hardware.camera.autofocus" android:required="false"/>
+  <uses-feature android:name="android.hardware.location.gps" android:required="false"/>
+  <uses-feature android:name="android.hardware.microphone" android:required="false"/>
+  <uses-feature android:name="android.hardware.screen.landscape" android:required="false"/>
+  <uses-feature android:name="android.hardware.sensor.accelerometer" android:required="false"/>
+  <uses-feature android:name="android.hardware.sensor.gyroscope" android:required="false"/>
+  <uses-feature android:name="android.hardware.touchscreen" android:required="false"/>
+  <uses-feature android:name="android.hardware.vr.headtracking" android:required="false" android:version="1"/>
+  <uses-feature android:name="android.hardware.vr.high_performance" android:required="false"/>
+  <uses-feature android:name="android.software.vr.mode" android:required="false"/>
+  <uses-permission android:name="$PACKAGE.TOS_ACKED"/>
+  <uses-permission android:name="$PACKAGE.permission.C2D_MESSAGE"/>
+  <uses-permission android:name="$PACKAGE.permission.READ_WRITE_BOOKMARK_FOLDERS"/>
+  <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>
+  <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
+  <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
+  <uses-permission android:name="android.permission.CAMERA"/>
+  <uses-permission android:name="android.permission.CREDENTIAL_MANAGER_QUERY_CANDIDATE_CREDENTIALS"/>
+  <uses-permission android:name="android.permission.CREDENTIAL_MANAGER_SET_ALLOWED_PROVIDERS"/>
+  <uses-permission android:name="android.permission.CREDENTIAL_MANAGER_SET_ORIGIN"/>
+  <uses-permission android:name="android.permission.DOWNLOAD_WITHOUT_NOTIFICATION"/>
+  <uses-permission android:name="android.permission.FOREGROUND_SERVICE"/>
+  <uses-permission android:name="android.permission.FOREGROUND_SERVICE_DATA_SYNC"/>
+  <uses-permission android:name="android.permission.FOREGROUND_SERVICE_MEDIA_PLAYBACK"/>
+  <uses-permission android:name="android.permission.GET_ACCOUNTS"/>
+  <uses-permission android:name="android.permission.INTERNET"/>
+  <uses-permission android:name="android.permission.MANAGE_ACCOUNTS"/>
+  <uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS"/>
+  <uses-permission android:name="android.permission.NFC"/>
+  <uses-permission android:name="android.permission.POST_NOTIFICATIONS"/>
+  <uses-permission android:name="android.permission.QUERY_ALL_PACKAGES"/>
+  <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
+  <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED"/>
+  <uses-permission android:name="android.permission.RECORD_AUDIO"/>
+  <uses-permission android:name="android.permission.RUN_USER_INITIATED_JOBS"/>
+  <uses-permission android:name="android.permission.USE_CREDENTIALS"/>
+  <uses-permission android:name="android.permission.VIBRATE"/>
+  <uses-permission android:name="android.permission.WAKE_LOCK"/>
+  <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
+  <uses-permission android:name="com.android.launcher.permission.INSTALL_SHORTCUT"/>
+  <uses-permission android:name="com.chrome.permission.DEVICE_EXTRAS"/>
+  <uses-permission android:name="com.google.android.apps.now.CURRENT_ACCOUNT_ACCESS"/>
+  <uses-permission android:name="com.google.android.c2dm.permission.RECEIVE"/>
+  <uses-permission-sdk-23 android:name="android.permission.ACCESS_ADSERVICES_ATTRIBUTION"/>
+  <uses-permission-sdk-23 android:name="android.permission.ACCESS_WIFI_STATE"/>
+  <uses-permission-sdk-23 android:name="android.permission.BLUETOOTH"/>
+  <uses-permission-sdk-23 android:name="android.permission.BLUETOOTH_ADMIN" android:maxSdkVersion="30"/>
+  <uses-permission-sdk-23 android:name="android.permission.BLUETOOTH_ADVERTISE"/>
+  <uses-permission-sdk-23 android:name="android.permission.BLUETOOTH_CONNECT"/>
+  <uses-permission-sdk-23 android:name="android.permission.BLUETOOTH_SCAN" android:usesPermissionFlags="neverForLocation"/>
+  <uses-permission-sdk-23 android:name="android.permission.READ_CONTACTS"/>
+  <uses-permission-sdk-23 android:name="android.permission.READ_MEDIA_AUDIO"/>
+  <uses-permission-sdk-23 android:name="android.permission.READ_MEDIA_IMAGES"/>
+  <uses-permission-sdk-23 android:name="android.permission.READ_MEDIA_VIDEO"/>
+  <uses-permission-sdk-23 android:name="android.permission.REORDER_TASKS"/>
+  <uses-permission-sdk-23 android:name="android.permission.REQUEST_INSTALL_PACKAGES"/>
+  <uses-permission-sdk-23 android:name="android.permission.USE_BIOMETRIC"/>
+  <uses-permission-sdk-23 android:name="android.permission.USE_FINGERPRINT"/>
+  <uses-sdk android:minSdkVersion="26" android:targetSdkVersion="34"/>
+  <application
+      android:name="org.chromium.chrome.browser.base.SplitMonochromeApplication"
+      android:allowAudioPlaybackCapture="false"
+      android:allowBackup="false"
+      android:appComponentFactory="org.chromium.chrome.browser.base.SplitCompatAppComponentFactory"
+      android:enableOnBackInvokedCallback="true"
+      android:extractNativeLibs="false"
+      android:icon="@drawable/ic_launcher"
+      android:label="@string/app_name"
+      android:largeHeap="false"
+      android:manageSpaceActivity="@string/manage_space_activity"
+      android:memtagMode="async"
+      android:multiArch="true"
+      android:networkSecurityConfig="@xml/network_security_config"
+      android:roundIcon="@drawable/ic_launcher_round"
+      android:supportsRtl="true"
+      android:use32bitAbi="true"
+      android:zygotePreloadName="org.chromium.content_public.app.ZygotePreload">
+    <activity  # DIFF-ANCHOR: ea1a94af
+        android:name="com.google.android.gms.common.api.GoogleApiActivity"
+        android:exported="false"
+        android:theme="@android:style/Theme.Translucent.NoTitleBar">
+    </activity>  # DIFF-ANCHOR: ea1a94af
+    <activity  # DIFF-ANCHOR: a2bae37c
+        android:name="com.google.android.play.core.common.PlayCoreDialogWrapperActivity"
+        android:exported="false"
+        android:stateNotNeeded="true"
+        android:theme="@style/Theme.PlayCore.Transparent">
+    </activity>  # DIFF-ANCHOR: a2bae37c
+    <activity  # DIFF-ANCHOR: a4438884
+        android:name="org.chromium.android_webview.devui.MainActivity"
+        android:exported="true"
+        android:icon="@drawable/icon_webview"
+        android:label="WebView DevTools"
+        android:launchMode="singleTask"
+        android:process=":webview_apk"
+        android:taskAffinity="$PACKAGE.org.chromium.android_webview.devui"
+        android:theme="@style/Theme.DevUi.DayNight"
+        android:visibleToInstantApps="true"
+        android:windowSoftInputMode="adjustPan">
+      <intent-filter>  # DIFF-ANCHOR: a167e73d
+        <action android:name="com.android.webview.SHOW_DEV_UI"/>
+        <category android:name="android.intent.category.DEFAULT"/>
+      </intent-filter>  # DIFF-ANCHOR: a167e73d
+    </activity>  # DIFF-ANCHOR: a4438884
+    <activity  # DIFF-ANCHOR: aeabab17
+        android:name="org.chromium.android_webview.nonembedded.LicenseActivity"
+        android:exported="true"
+        android:label="@string/license_activity_title"
+        android:process=":webview_apk">
+      <intent-filter>  # DIFF-ANCHOR: 23298d3b
+        <action android:name="android.settings.WEBVIEW_LICENSE"/>
+        <category android:name="android.intent.category.DEFAULT"/>
+      </intent-filter>  # DIFF-ANCHOR: 23298d3b
+      <meta-data android:name="com.android.settings.PRIMARY_PROFILE_CONTROLLED" android:value="true"/>
+    </activity>  # DIFF-ANCHOR: aeabab17
+    <activity-alias  # DIFF-ANCHOR: da85c28e
+        android:name="org.chromium.android_webview.SafeModeState"
+        android:enabled="false"
+        android:process=":webview_apk"
+        android:targetActivity="org.chromium.android_webview.devui.MainActivity"
+        android:visibleToInstantApps="true">
+    </activity-alias>  # DIFF-ANCHOR: da85c28e
+    <activity-alias  # DIFF-ANCHOR: b7cc06e9
+        android:name="org.chromium.android_webview.devui.DeveloperModeState"
+        android:enabled="false"
+        android:process=":webview_apk"
+        android:targetActivity="org.chromium.android_webview.devui.MainActivity"
+        android:visibleToInstantApps="true">
+    </activity-alias>  # DIFF-ANCHOR: b7cc06e9
+    <activity-alias  # DIFF-ANCHOR: 32e34aba
+        android:name="org.chromium.android_webview.devui.MonochromeLauncherActivity"
+        android:enabled="false"
+        android:exported="true"
+        android:label="WebView DevTools"
+        android:targetActivity="org.chromium.android_webview.devui.MainActivity">
+      <intent-filter>  # DIFF-ANCHOR: a5330430
+        <action android:name="android.intent.action.MAIN"/>
+        <category android:name="android.intent.category.LAUNCHER"/>
+      </intent-filter>  # DIFF-ANCHOR: a5330430
+    </activity-alias>  # DIFF-ANCHOR: 32e34aba
+    <meta-data android:name="android.allow_multiple_resumed_activities" android:value="true"/>
+    <meta-data android:name="android.content.APP_RESTRICTIONS" android:resource="@xml/app_restrictions"/>
+    <meta-data android:name="com.android.webview.WebViewLibrary" android:value="libmonochrome.so"/>
+    <meta-data android:name="com.google.android.gms.cast.framework.OPTIONS_PROVIDER_CLASS_NAME" android:value="org.chromium.components.media_router.caf.CastOptionsProvider"/>
+    <meta-data android:name="com.google.android.gms.version" android:value="@integer/google_play_services_version"/>
+    <meta-data android:name="com.google.ar.core" android:value="optional"/>
+    <meta-data android:name="com.google.ar.core.load_32bit_so_from_split_module" android:value="optional"/>
+    <meta-data android:name="com.google.ar.core.min_apk_version" android:value="231450000"/>
+    <meta-data android:name="com.google.ar.core.session_settings" android:value="allow_front_facing_motion_tracking_6dof,"/>
+    <meta-data android:name="com.samsung.android.sdk.multiwindow.enable" android:value="true"/>
+    <meta-data android:name="com.samsung.android.sdk.multiwindow.penwindow.enable" android:value="true"/>
+    <meta-data android:name="org.chromium.content.browser.NUM_PRIVILEGED_SERVICES" android:value="5"/>
+    <meta-data android:name="org.chromium.content.browser.NUM_SANDBOXED_SERVICES" android:value="40"/>
+    <provider  # DIFF-ANCHOR: bc0a9a7a
+        android:name="com.google.firebase.provider.FirebaseInitProvider"
+        android:authorities="$PACKAGE.firebaseinitprovider"
+        android:directBootAware="true"
+        android:exported="false"
+        android:initOrder="100">
+    </provider>  # DIFF-ANCHOR: bc0a9a7a
+    <provider  # DIFF-ANCHOR: a5e78e63
+        android:name="org.chromium.android_webview.nonembedded.LicenseContentProvider"
+        android:authorities="$PACKAGE.LicenseContentProvider"
+        android:exported="true"
+        android:grantUriPermissions="true"
+        android:process=":webview_apk">
+    </provider>  # DIFF-ANCHOR: a5e78e63
+    <provider  # DIFF-ANCHOR: bfe37944
+        android:name="org.chromium.android_webview.services.DeveloperModeContentProvider"
+        android:authorities="$PACKAGE.DeveloperModeContentProvider"
+        android:exported="true"
+        android:process=":webview_service"
+        android:visibleToInstantApps="true">
+    </provider>  # DIFF-ANCHOR: bfe37944
+    <provider  # DIFF-ANCHOR: ecfff997
+        android:name="org.chromium.android_webview.services.SafeModeContentProvider"
+        android:authorities="$PACKAGE.SafeModeContentProvider"
+        android:exported="true"
+        android:process=":webview_service"
+        android:visibleToInstantApps="true">
+    </provider>  # DIFF-ANCHOR: ecfff997
+    <provider  # DIFF-ANCHOR: c41df08d
+        android:name="org.chromium.android_webview.services.SafeModeVariationsSeedContentProvider"
+        android:authorities="$PACKAGE.SafeModeVariationsSeedContentProvider"
+        android:exported="true"
+        android:process=":webview_service"
+        android:visibleToInstantApps="true">
+    </provider>  # DIFF-ANCHOR: c41df08d
+    <provider  # DIFF-ANCHOR: b73a881a
+        android:name="org.chromium.chrome.browser.download.DownloadFileProvider"
+        android:authorities="$PACKAGE.DownloadFileProvider"
+        android:exported="false"
+        android:grantUriPermissions="true">
+      <meta-data android:name="android.support.FILE_PROVIDER_PATHS" android:resource="@xml/file_paths"/>
+    </provider>  # DIFF-ANCHOR: b73a881a
+    <provider  # DIFF-ANCHOR: f1c2d7e1
+        android:name="org.chromium.chrome.browser.provider.ChromeBrowserProvider"
+        android:authorities="$PACKAGE.ChromeBrowserProvider;$PACKAGE.browser;$PACKAGE"
+        android:exported="true">
+      <path-permission android:path="/bookmarks/search_suggest_query" android:readPermission="android.permission.GLOBAL_SEARCH"/>
+    </provider>  # DIFF-ANCHOR: f1c2d7e1
+    <provider  # DIFF-ANCHOR: 67014fab
+        android:name="org.chromium.chrome.browser.util.ChromeFileProvider"
+        android:authorities="$PACKAGE.FileProvider"
+        android:exported="false"
+        android:grantUriPermissions="true">
+      <meta-data android:name="android.support.FILE_PROVIDER_PATHS" android:resource="@xml/file_paths"/>
+    </provider>  # DIFF-ANCHOR: 67014fab
+    <provider  # DIFF-ANCHOR: cb51666f
+        android:name="org.chromium.ui.dragdrop.DropDataContentProvider"
+        android:authorities="$PACKAGE.DropDataProvider"
+        android:exported="false"
+        android:grantUriPermissions="true">
+    </provider>  # DIFF-ANCHOR: cb51666f
+    <receiver  # DIFF-ANCHOR: 0a6f8fa5
+        android:name="com.google.android.gms.cast.framework.media.MediaIntentReceiver"
+        android:exported="false">
+    </receiver>  # DIFF-ANCHOR: 0a6f8fa5
+    <receiver  # DIFF-ANCHOR: f1c9c29d
+        android:name="com.google.firebase.iid.FirebaseInstanceIdReceiver"
+        android:exported="true"
+        android:permission="com.google.android.c2dm.permission.SEND">
+      <intent-filter>  # DIFF-ANCHOR: aae22013
+        <action android:name="com.google.android.c2dm.intent.RECEIVE"/>
+      </intent-filter>  # DIFF-ANCHOR: aae22013
+    </receiver>  # DIFF-ANCHOR: f1c9c29d
+    <service  # DIFF-ANCHOR: 749391ed
+        android:name="com.google.android.gms.cast.framework.ReconnectionService"
+        android:exported="false">
+    </service>  # DIFF-ANCHOR: 749391ed
+    <service  # DIFF-ANCHOR: 48ce9d28
+        android:name="com.google.android.gms.cast.framework.media.MediaNotificationService"
+        android:exported="false">
+    </service>  # DIFF-ANCHOR: 48ce9d28
+    <service  # DIFF-ANCHOR: 7e26656b
+        android:name="com.google.firebase.components.ComponentDiscoveryService"
+        android:directBootAware="true"
+        android:exported="false">
+      <meta-data android:name="com.google.firebase.components:com.google.firebase.dynamicloading.DynamicLoadingRegistrar" android:value="com.google.firebase.components.ComponentRegistrar"/>
+      <meta-data android:name="com.google.firebase.components:com.google.firebase.iid.Registrar" android:value="com.google.firebase.components.ComponentRegistrar"/>
+      <meta-data android:name="com.google.firebase.components:com.google.firebase.installations.FirebaseInstallationsRegistrar" android:value="com.google.firebase.components.ComponentRegistrar"/>
+      <meta-data android:name="com.google.firebase.components:com.google.firebase.messaging.FirebaseMessagingRegistrar" android:value="com.google.firebase.components.ComponentRegistrar"/>
+    </service>  # DIFF-ANCHOR: 7e26656b
+    <service  # DIFF-ANCHOR: 2295960c
+        android:name="com.google.firebase.messaging.FirebaseMessagingService"
+        android:directBootAware="true"
+        android:exported="false">
+      <intent-filter android:priority="-500">  # DIFF-ANCHOR: 69e70070
+        <action android:name="com.google.firebase.MESSAGING_EVENT"/>
+      </intent-filter>  # DIFF-ANCHOR: 69e70070
+    </service>  # DIFF-ANCHOR: 2295960c
+    <service  # DIFF-ANCHOR: 1d3bf514
+        android:name="org.chromium.android_webview.js_sandbox.service.JsSandboxService0"
+        android:exported="true"
+        android:externalService="true"
+        android:isolatedProcess="true"
+        android:process=":js_sandboxed_process0"
+        android:visibleToInstantApps="true">
+    </service>  # DIFF-ANCHOR: 1d3bf514
+    <service  # DIFF-ANCHOR: b9ec52c4
+        android:name="org.chromium.android_webview.nonembedded.AwComponentUpdateService"
+        android:exported="false"
+        android:permission="android.permission.BIND_JOB_SERVICE"
+        android:process=":webview_apk">
+    </service>  # DIFF-ANCHOR: b9ec52c4
+    <service  # DIFF-ANCHOR: 3cd6d713
+        android:name="org.chromium.android_webview.services.AwMinidumpUploadJobService"
+        android:exported="true"
+        android:permission="android.permission.BIND_JOB_SERVICE"
+        android:process=":webview_service">
+    </service>  # DIFF-ANCHOR: 3cd6d713
+    <service  # DIFF-ANCHOR: 65cddb26
+        android:name="org.chromium.android_webview.services.AwVariationsSeedFetcher"
+        android:exported="false"
+        android:permission="android.permission.BIND_JOB_SERVICE"
+        android:process=":webview_service">
+    </service>  # DIFF-ANCHOR: 65cddb26
+    <service  # DIFF-ANCHOR: c756cf8d
+        android:name="org.chromium.android_webview.services.ComponentsProviderService"
+        android:exported="true"
+        android:process=":webview_service"
+        android:visibleToInstantApps="true">
+    </service>  # DIFF-ANCHOR: c756cf8d
+    <service  # DIFF-ANCHOR: 5cda9608
+        android:name="org.chromium.android_webview.services.CrashReceiverService"
+        android:exported="true"
+        android:process=":webview_service">
+    </service>  # DIFF-ANCHOR: 5cda9608
+    <service  # DIFF-ANCHOR: adce9ea1
+        android:name="org.chromium.android_webview.services.DeveloperUiService"
+        android:exported="true"
+        android:foregroundServiceType="specialUse"
+        android:process=":webview_service">
+      <property android:name="android.app.PROPERTY_SPECIAL_USE_FGS_SUBTYPE" android:value="debugging"/>
+    </service>  # DIFF-ANCHOR: adce9ea1
+    <service  # DIFF-ANCHOR: eecf2fee
+        android:name="org.chromium.android_webview.services.MetricsBridgeService"
+        android:exported="true"
+        android:process=":webview_service"
+        android:visibleToInstantApps="true">
+    </service>  # DIFF-ANCHOR: eecf2fee
+    <service  # DIFF-ANCHOR: bda8b561
+        android:name="org.chromium.android_webview.services.MetricsUploadService"
+        android:exported="true"
+        android:process=":webview_service"
+        android:visibleToInstantApps="true">
+    </service>  # DIFF-ANCHOR: bda8b561
+    <service  # DIFF-ANCHOR: 47046f1b
+        android:name="org.chromium.android_webview.services.SafeModeService"
+        android:exported="true"
+        android:process=":webview_service">
+    </service>  # DIFF-ANCHOR: 47046f1b
+    <service  # DIFF-ANCHOR: c52936d7
+        android:name="org.chromium.android_webview.services.StartupFeatureMetadataHolder"
+        android:enabled="false"
+        android:exported="true">
+      <meta-data android:name="STARTUP_FEATURE_SET_DATA_DIRECTORY_SUFFIX" android:value="true"/>
+      <meta-data android:name="STARTUP_FEATURE_SET_DIRECTORY_BASE_PATH" android:value="true"/>
+    </service>  # DIFF-ANCHOR: c52936d7
+    <service  # DIFF-ANCHOR: dc926e35
+        android:name="org.chromium.android_webview.services.VariationsSeedServer"
+        android:exported="true"
+        android:process=":webview_service">
+    </service>  # DIFF-ANCHOR: dc926e35
+    <service  # DIFF-ANCHOR: 0c6c4fd9
+        android:name="org.chromium.content.app.PrivilegedProcessService0"
+        android:exported="false"
+        android:isolatedProcess="false"
+        android:permission="$PACKAGE.permission.CHILD_SERVICE"
+        android:process=":privileged_process0">
+    </service>  # DIFF-ANCHOR: 0c6c4fd9
+    <service  # DIFF-ANCHOR: 6f89af32
+        android:name="org.chromium.content.app.PrivilegedProcessService1"
+        android:exported="false"
+        android:isolatedProcess="false"
+        android:permission="$PACKAGE.permission.CHILD_SERVICE"
+        android:process=":privileged_process1">
+    </service>  # DIFF-ANCHOR: 6f89af32
+    <service  # DIFF-ANCHOR: 40e0d738
+        android:name="org.chromium.content.app.PrivilegedProcessService2"
+        android:exported="false"
+        android:isolatedProcess="false"
+        android:permission="$PACKAGE.permission.CHILD_SERVICE"
+        android:process=":privileged_process2">
+    </service>  # DIFF-ANCHOR: 40e0d738
+    <service  # DIFF-ANCHOR: b197517d
+        android:name="org.chromium.content.app.PrivilegedProcessService3"
+        android:exported="false"
+        android:isolatedProcess="false"
+        android:permission="$PACKAGE.permission.CHILD_SERVICE"
+        android:process=":privileged_process3">
+    </service>  # DIFF-ANCHOR: b197517d
+    <service  # DIFF-ANCHOR: 52303702
+        android:name="org.chromium.content.app.PrivilegedProcessService4"
+        android:exported="false"
+        android:isolatedProcess="false"
+        android:permission="$PACKAGE.permission.CHILD_SERVICE"
+        android:process=":privileged_process4">
+    </service>  # DIFF-ANCHOR: 52303702
+    <service  # DIFF-ANCHOR: b1e3e8bd
+        android:name="org.chromium.content.app.SandboxedProcessService0"
+        android:exported="true"
+        android:externalService="true"
+        android:isolatedProcess="true"
+        android:permission="$PACKAGE.permission.CHILD_SERVICE"
+        android:process=":sandboxed_process0"
+        android:useAppZygote="true"
+        android:visibleToInstantApps="true">
+    </service>  # DIFF-ANCHOR: b1e3e8bd
+    <service  # DIFF-ANCHOR: 76d1ccf8
+        android:name="org.chromium.content.app.SandboxedProcessService1"
+        android:exported="true"
+        android:externalService="true"
+        android:isolatedProcess="true"
+        android:permission="$PACKAGE.permission.CHILD_SERVICE"
+        android:process=":sandboxed_process1"
+        android:visibleToInstantApps="true">
+    </service>  # DIFF-ANCHOR: 76d1ccf8
+    <service  # DIFF-ANCHOR: 38b95266
+        android:name="org.chromium.content.app.SandboxedProcessService10"
+        android:exported="true"
+        android:externalService="true"
+        android:isolatedProcess="true"
+        android:permission="$PACKAGE.permission.CHILD_SERVICE"
+        android:process=":sandboxed_process10"
+        android:visibleToInstantApps="true">
+    </service>  # DIFF-ANCHOR: 38b95266
+    <service  # DIFF-ANCHOR: e4a2e4a2
+        android:name="org.chromium.content.app.SandboxedProcessService11"
+        android:exported="true"
+        android:externalService="true"
+        android:isolatedProcess="true"
+        android:permission="$PACKAGE.permission.CHILD_SERVICE"
+        android:process=":sandboxed_process11"
+        android:visibleToInstantApps="true">
+    </service>  # DIFF-ANCHOR: e4a2e4a2
+    <service  # DIFF-ANCHOR: d9b2ffba
+        android:name="org.chromium.content.app.SandboxedProcessService12"
+        android:exported="true"
+        android:externalService="true"
+        android:isolatedProcess="true"
+        android:permission="$PACKAGE.permission.CHILD_SERVICE"
+        android:process=":sandboxed_process12"
+        android:visibleToInstantApps="true">
+    </service>  # DIFF-ANCHOR: d9b2ffba
+    <service  # DIFF-ANCHOR: b41bb17d
+        android:name="org.chromium.content.app.SandboxedProcessService13"
+        android:exported="true"
+        android:externalService="true"
+        android:isolatedProcess="true"
+        android:permission="$PACKAGE.permission.CHILD_SERVICE"
+        android:process=":sandboxed_process13"
+        android:visibleToInstantApps="true">
+    </service>  # DIFF-ANCHOR: b41bb17d
+    <service  # DIFF-ANCHOR: aec0ea21
+        android:name="org.chromium.content.app.SandboxedProcessService14"
+        android:exported="true"
+        android:externalService="true"
+        android:isolatedProcess="true"
+        android:permission="$PACKAGE.permission.CHILD_SERVICE"
+        android:process=":sandboxed_process14"
+        android:visibleToInstantApps="true">
+    </service>  # DIFF-ANCHOR: aec0ea21
+    <service  # DIFF-ANCHOR: cf88a5e5
+        android:name="org.chromium.content.app.SandboxedProcessService15"
+        android:exported="true"
+        android:externalService="true"
+        android:isolatedProcess="true"
+        android:permission="$PACKAGE.permission.CHILD_SERVICE"
+        android:process=":sandboxed_process15"
+        android:visibleToInstantApps="true">
+    </service>  # DIFF-ANCHOR: cf88a5e5
+    <service  # DIFF-ANCHOR: 7d85889d
+        android:name="org.chromium.content.app.SandboxedProcessService16"
+        android:exported="true"
+        android:externalService="true"
+        android:isolatedProcess="true"
+        android:permission="$PACKAGE.permission.CHILD_SERVICE"
+        android:process=":sandboxed_process16"
+        android:visibleToInstantApps="true">
+    </service>  # DIFF-ANCHOR: 7d85889d
+    <service  # DIFF-ANCHOR: dae26ed4
+        android:name="org.chromium.content.app.SandboxedProcessService17"
+        android:exported="true"
+        android:externalService="true"
+        android:isolatedProcess="true"
+        android:permission="$PACKAGE.permission.CHILD_SERVICE"
+        android:process=":sandboxed_process17"
+        android:visibleToInstantApps="true">
+    </service>  # DIFF-ANCHOR: dae26ed4
+    <service  # DIFF-ANCHOR: 2c6cf029
+        android:name="org.chromium.content.app.SandboxedProcessService18"
+        android:exported="true"
+        android:externalService="true"
+        android:isolatedProcess="true"
+        android:permission="$PACKAGE.permission.CHILD_SERVICE"
+        android:process=":sandboxed_process18"
+        android:visibleToInstantApps="true">
+    </service>  # DIFF-ANCHOR: 2c6cf029
+    <service  # DIFF-ANCHOR: 1d2f0988
+        android:name="org.chromium.content.app.SandboxedProcessService19"
+        android:exported="true"
+        android:externalService="true"
+        android:isolatedProcess="true"
+        android:permission="$PACKAGE.permission.CHILD_SERVICE"
+        android:process=":sandboxed_process19"
+        android:visibleToInstantApps="true">
+    </service>  # DIFF-ANCHOR: 1d2f0988
+    <service  # DIFF-ANCHOR: 4a39041b
+        android:name="org.chromium.content.app.SandboxedProcessService2"
+        android:exported="true"
+        android:externalService="true"
+        android:isolatedProcess="true"
+        android:permission="$PACKAGE.permission.CHILD_SERVICE"
+        android:process=":sandboxed_process2"
+        android:visibleToInstantApps="true">
+    </service>  # DIFF-ANCHOR: 4a39041b
+    <service  # DIFF-ANCHOR: 073533bf
+        android:name="org.chromium.content.app.SandboxedProcessService20"
+        android:exported="true"
+        android:externalService="true"
+        android:isolatedProcess="true"
+        android:permission="$PACKAGE.permission.CHILD_SERVICE"
+        android:process=":sandboxed_process20"
+        android:visibleToInstantApps="true">
+    </service>  # DIFF-ANCHOR: 073533bf
+    <service  # DIFF-ANCHOR: d24da41d
+        android:name="org.chromium.content.app.SandboxedProcessService21"
+        android:exported="true"
+        android:externalService="true"
+        android:isolatedProcess="true"
+        android:permission="$PACKAGE.permission.CHILD_SERVICE"
+        android:process=":sandboxed_process21"
+        android:visibleToInstantApps="true">
+    </service>  # DIFF-ANCHOR: d24da41d
+    <service  # DIFF-ANCHOR: 594d8b32
+        android:name="org.chromium.content.app.SandboxedProcessService22"
+        android:exported="true"
+        android:externalService="true"
+        android:isolatedProcess="true"
+        android:permission="$PACKAGE.permission.CHILD_SERVICE"
+        android:process=":sandboxed_process22"
+        android:visibleToInstantApps="true">
+    </service>  # DIFF-ANCHOR: 594d8b32
+    <service  # DIFF-ANCHOR: 5528c0c3
+        android:name="org.chromium.content.app.SandboxedProcessService23"
+        android:exported="true"
+        android:externalService="true"
+        android:isolatedProcess="true"
+        android:permission="$PACKAGE.permission.CHILD_SERVICE"
+        android:process=":sandboxed_process23"
+        android:visibleToInstantApps="true">
+    </service>  # DIFF-ANCHOR: 5528c0c3
+    <service  # DIFF-ANCHOR: b7ab2ba3
+        android:name="org.chromium.content.app.SandboxedProcessService24"
+        android:exported="true"
+        android:externalService="true"
+        android:isolatedProcess="true"
+        android:permission="$PACKAGE.permission.CHILD_SERVICE"
+        android:process=":sandboxed_process24"
+        android:visibleToInstantApps="true">
+    </service>  # DIFF-ANCHOR: b7ab2ba3
+    <service  # DIFF-ANCHOR: cec6cb64
+        android:name="org.chromium.content.app.SandboxedProcessService25"
+        android:exported="true"
+        android:externalService="true"
+        android:isolatedProcess="true"
+        android:permission="$PACKAGE.permission.CHILD_SERVICE"
+        android:process=":sandboxed_process25"
+        android:visibleToInstantApps="true">
+    </service>  # DIFF-ANCHOR: cec6cb64
+    <service  # DIFF-ANCHOR: 5b4a00fe
+        android:name="org.chromium.content.app.SandboxedProcessService26"
+        android:exported="true"
+        android:externalService="true"
+        android:isolatedProcess="true"
+        android:permission="$PACKAGE.permission.CHILD_SERVICE"
+        android:process=":sandboxed_process26"
+        android:visibleToInstantApps="true">
+    </service>  # DIFF-ANCHOR: 5b4a00fe
+    <service  # DIFF-ANCHOR: ad49d203
+        android:name="org.chromium.content.app.SandboxedProcessService27"
+        android:exported="true"
+        android:externalService="true"
+        android:isolatedProcess="true"
+        android:permission="$PACKAGE.permission.CHILD_SERVICE"
+        android:process=":sandboxed_process27"
+        android:visibleToInstantApps="true">
+    </service>  # DIFF-ANCHOR: ad49d203
+    <service  # DIFF-ANCHOR: 573298e9
+        android:name="org.chromium.content.app.SandboxedProcessService28"
+        android:exported="true"
+        android:externalService="true"
+        android:isolatedProcess="true"
+        android:permission="$PACKAGE.permission.CHILD_SERVICE"
+        android:process=":sandboxed_process28"
+        android:visibleToInstantApps="true">
+    </service>  # DIFF-ANCHOR: 573298e9
+    <service  # DIFF-ANCHOR: 79897b32
+        android:name="org.chromium.content.app.SandboxedProcessService29"
+        android:exported="true"
+        android:externalService="true"
+        android:isolatedProcess="true"
+        android:permission="$PACKAGE.permission.CHILD_SERVICE"
+        android:process=":sandboxed_process29"
+        android:visibleToInstantApps="true">
+    </service>  # DIFF-ANCHOR: 79897b32
+    <service  # DIFF-ANCHOR: 84335864
+        android:name="org.chromium.content.app.SandboxedProcessService3"
+        android:exported="true"
+        android:externalService="true"
+        android:isolatedProcess="true"
+        android:permission="$PACKAGE.permission.CHILD_SERVICE"
+        android:process=":sandboxed_process3"
+        android:visibleToInstantApps="true">
+    </service>  # DIFF-ANCHOR: 84335864
+    <service  # DIFF-ANCHOR: c4bd371e
+        android:name="org.chromium.content.app.SandboxedProcessService30"
+        android:exported="true"
+        android:externalService="true"
+        android:isolatedProcess="true"
+        android:permission="$PACKAGE.permission.CHILD_SERVICE"
+        android:process=":sandboxed_process30"
+        android:visibleToInstantApps="true">
+    </service>  # DIFF-ANCHOR: c4bd371e
+    <service  # DIFF-ANCHOR: 394a9fd0
+        android:name="org.chromium.content.app.SandboxedProcessService31"
+        android:exported="true"
+        android:externalService="true"
+        android:isolatedProcess="true"
+        android:permission="$PACKAGE.permission.CHILD_SERVICE"
+        android:process=":sandboxed_process31"
+        android:visibleToInstantApps="true">
+    </service>  # DIFF-ANCHOR: 394a9fd0
+    <service  # DIFF-ANCHOR: b811afb8
+        android:name="org.chromium.content.app.SandboxedProcessService32"
+        android:exported="true"
+        android:externalService="true"
+        android:isolatedProcess="true"
+        android:permission="$PACKAGE.permission.CHILD_SERVICE"
+        android:process=":sandboxed_process32"
+        android:visibleToInstantApps="true">
+    </service>  # DIFF-ANCHOR: b811afb8
+    <service  # DIFF-ANCHOR: 2811ddd3
+        android:name="org.chromium.content.app.SandboxedProcessService33"
+        android:exported="true"
+        android:externalService="true"
+        android:isolatedProcess="true"
+        android:permission="$PACKAGE.permission.CHILD_SERVICE"
+        android:process=":sandboxed_process33"
+        android:visibleToInstantApps="true">
+    </service>  # DIFF-ANCHOR: 2811ddd3
+    <service  # DIFF-ANCHOR: 73ae1688
+        android:name="org.chromium.content.app.SandboxedProcessService34"
+        android:exported="true"
+        android:externalService="true"
+        android:isolatedProcess="true"
+        android:permission="$PACKAGE.permission.CHILD_SERVICE"
+        android:process=":sandboxed_process34"
+        android:visibleToInstantApps="true">
+    </service>  # DIFF-ANCHOR: 73ae1688
+    <service  # DIFF-ANCHOR: c476f324
+        android:name="org.chromium.content.app.SandboxedProcessService35"
+        android:exported="true"
+        android:externalService="true"
+        android:isolatedProcess="true"
+        android:permission="$PACKAGE.permission.CHILD_SERVICE"
+        android:process=":sandboxed_process35"
+        android:visibleToInstantApps="true">
+    </service>  # DIFF-ANCHOR: c476f324
+    <service  # DIFF-ANCHOR: 75d5304b
+        android:name="org.chromium.content.app.SandboxedProcessService36"
+        android:exported="true"
+        android:externalService="true"
+        android:isolatedProcess="true"
+        android:permission="$PACKAGE.permission.CHILD_SERVICE"
+        android:process=":sandboxed_process36"
+        android:visibleToInstantApps="true">
+    </service>  # DIFF-ANCHOR: 75d5304b
+    <service  # DIFF-ANCHOR: dc6d0617
+        android:name="org.chromium.content.app.SandboxedProcessService37"
+        android:exported="true"
+        android:externalService="true"
+        android:isolatedProcess="true"
+        android:permission="$PACKAGE.permission.CHILD_SERVICE"
+        android:process=":sandboxed_process37"
+        android:visibleToInstantApps="true">
+    </service>  # DIFF-ANCHOR: dc6d0617
+    <service  # DIFF-ANCHOR: e31efe49
+        android:name="org.chromium.content.app.SandboxedProcessService38"
+        android:exported="true"
+        android:externalService="true"
+        android:isolatedProcess="true"
+        android:permission="$PACKAGE.permission.CHILD_SERVICE"
+        android:process=":sandboxed_process38"
+        android:visibleToInstantApps="true">
+    </service>  # DIFF-ANCHOR: e31efe49
+    <service  # DIFF-ANCHOR: 5736507e
+        android:name="org.chromium.content.app.SandboxedProcessService39"
+        android:exported="true"
+        android:externalService="true"
+        android:isolatedProcess="true"
+        android:permission="$PACKAGE.permission.CHILD_SERVICE"
+        android:process=":sandboxed_process39"
+        android:visibleToInstantApps="true">
+    </service>  # DIFF-ANCHOR: 5736507e
+    <service  # DIFF-ANCHOR: a161be24
+        android:name="org.chromium.content.app.SandboxedProcessService4"
+        android:exported="true"
+        android:externalService="true"
+        android:isolatedProcess="true"
+        android:permission="$PACKAGE.permission.CHILD_SERVICE"
+        android:process=":sandboxed_process4"
+        android:visibleToInstantApps="true">
+    </service>  # DIFF-ANCHOR: a161be24
+    <service  # DIFF-ANCHOR: 8e591688
+        android:name="org.chromium.content.app.SandboxedProcessService5"
+        android:exported="true"
+        android:externalService="true"
+        android:isolatedProcess="true"
+        android:permission="$PACKAGE.permission.CHILD_SERVICE"
+        android:process=":sandboxed_process5"
+        android:visibleToInstantApps="true">
+    </service>  # DIFF-ANCHOR: 8e591688
+    <service  # DIFF-ANCHOR: 705141d0
+        android:name="org.chromium.content.app.SandboxedProcessService6"
+        android:exported="true"
+        android:externalService="true"
+        android:isolatedProcess="true"
+        android:permission="$PACKAGE.permission.CHILD_SERVICE"
+        android:process=":sandboxed_process6"
+        android:visibleToInstantApps="true">
+    </service>  # DIFF-ANCHOR: 705141d0
+    <service  # DIFF-ANCHOR: 38ed2189
+        android:name="org.chromium.content.app.SandboxedProcessService7"
+        android:exported="true"
+        android:externalService="true"
+        android:isolatedProcess="true"
+        android:permission="$PACKAGE.permission.CHILD_SERVICE"
+        android:process=":sandboxed_process7"
+        android:visibleToInstantApps="true">
+    </service>  # DIFF-ANCHOR: 38ed2189
+    <service  # DIFF-ANCHOR: aa417956
+        android:name="org.chromium.content.app.SandboxedProcessService8"
+        android:exported="true"
+        android:externalService="true"
+        android:isolatedProcess="true"
+        android:permission="$PACKAGE.permission.CHILD_SERVICE"
+        android:process=":sandboxed_process8"
+        android:visibleToInstantApps="true">
+    </service>  # DIFF-ANCHOR: aa417956
+    <service  # DIFF-ANCHOR: e2f3bbbd
+        android:name="org.chromium.content.app.SandboxedProcessService9"
+        android:exported="true"
+        android:externalService="true"
+        android:isolatedProcess="true"
+        android:permission="$PACKAGE.permission.CHILD_SERVICE"
+        android:process=":sandboxed_process9"
+        android:visibleToInstantApps="true">
+    </service>  # DIFF-ANCHOR: e2f3bbbd
+    <uses-library android:name="android.ext.adservices" android:required="false"/>
+  </application>
+</manifest>
diff --git a/chrome/android/expectations/monochrome_32_public_bundle__base.AndroidManifest.expected b/chrome/android/expectations/monochrome_32_public_bundle__base.AndroidManifest.expected
new file mode 100644
index 0000000..6f7e536
--- /dev/null
+++ b/chrome/android/expectations/monochrome_32_public_bundle__base.AndroidManifest.expected
@@ -0,0 +1,741 @@
+<?xml version="1.0" ?>
+<manifest
+    xmlns:android="http://schemas.android.com/apk/res/android"
+    package="org.chromium.chrome.stable"
+    platformBuildVersionCode="34"
+    platformBuildVersionName="14"
+    android:isolatedSplits="true"
+    android:versionCode="OFFSET=20"
+    android:versionName="#.#.#.#">
+  <permission android:name="$PACKAGE.TOS_ACKED" android:protectionLevel="signatureOrSystem"/>
+  <permission android:name="$PACKAGE.permission.C2D_MESSAGE" android:protectionLevel="signature"/>
+  <permission android:name="$PACKAGE.permission.CHILD_SERVICE" android:protectionLevel="signature"/>
+  <permission android:name="$PACKAGE.permission.DEBUG" android:label="Debug web pages" android:protectionLevel="signature"/>
+  <permission android:name="$PACKAGE.permission.READ_WRITE_BOOKMARK_FOLDERS" android:protectionLevel="signatureOrSystem"/>
+  <queries>  # DIFF-ANCHOR: 9588fea7
+    <package android:name="com.google.ar.core"/>
+  </queries>  # DIFF-ANCHOR: 9588fea7
+  <uses-feature android:glEsVersion="0x00020000"/>
+  <uses-feature android:name="android.hardware.camera" android:required="false"/>
+  <uses-feature android:name="android.hardware.camera.autofocus" android:required="false"/>
+  <uses-feature android:name="android.hardware.location.gps" android:required="false"/>
+  <uses-feature android:name="android.hardware.microphone" android:required="false"/>
+  <uses-feature android:name="android.hardware.screen.landscape" android:required="false"/>
+  <uses-feature android:name="android.hardware.sensor.accelerometer" android:required="false"/>
+  <uses-feature android:name="android.hardware.sensor.gyroscope" android:required="false"/>
+  <uses-feature android:name="android.hardware.touchscreen" android:required="false"/>
+  <uses-feature android:name="android.hardware.vr.headtracking" android:required="false" android:version="1"/>
+  <uses-feature android:name="android.hardware.vr.high_performance" android:required="false"/>
+  <uses-feature android:name="android.software.vr.mode" android:required="false"/>
+  <uses-permission android:name="$PACKAGE.TOS_ACKED"/>
+  <uses-permission android:name="$PACKAGE.permission.C2D_MESSAGE"/>
+  <uses-permission android:name="$PACKAGE.permission.READ_WRITE_BOOKMARK_FOLDERS"/>
+  <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>
+  <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
+  <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
+  <uses-permission android:name="android.permission.CAMERA"/>
+  <uses-permission android:name="android.permission.CREDENTIAL_MANAGER_QUERY_CANDIDATE_CREDENTIALS"/>
+  <uses-permission android:name="android.permission.CREDENTIAL_MANAGER_SET_ALLOWED_PROVIDERS"/>
+  <uses-permission android:name="android.permission.CREDENTIAL_MANAGER_SET_ORIGIN"/>
+  <uses-permission android:name="android.permission.DOWNLOAD_WITHOUT_NOTIFICATION"/>
+  <uses-permission android:name="android.permission.FOREGROUND_SERVICE"/>
+  <uses-permission android:name="android.permission.FOREGROUND_SERVICE_DATA_SYNC"/>
+  <uses-permission android:name="android.permission.FOREGROUND_SERVICE_MEDIA_PLAYBACK"/>
+  <uses-permission android:name="android.permission.GET_ACCOUNTS"/>
+  <uses-permission android:name="android.permission.INTERNET"/>
+  <uses-permission android:name="android.permission.MANAGE_ACCOUNTS"/>
+  <uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS"/>
+  <uses-permission android:name="android.permission.NFC"/>
+  <uses-permission android:name="android.permission.POST_NOTIFICATIONS"/>
+  <uses-permission android:name="android.permission.QUERY_ALL_PACKAGES"/>
+  <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
+  <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED"/>
+  <uses-permission android:name="android.permission.RECORD_AUDIO"/>
+  <uses-permission android:name="android.permission.RUN_USER_INITIATED_JOBS"/>
+  <uses-permission android:name="android.permission.USE_CREDENTIALS"/>
+  <uses-permission android:name="android.permission.VIBRATE"/>
+  <uses-permission android:name="android.permission.WAKE_LOCK"/>
+  <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
+  <uses-permission android:name="com.android.launcher.permission.INSTALL_SHORTCUT"/>
+  <uses-permission android:name="com.chrome.permission.DEVICE_EXTRAS"/>
+  <uses-permission android:name="com.google.android.apps.now.CURRENT_ACCOUNT_ACCESS"/>
+  <uses-permission android:name="com.google.android.c2dm.permission.RECEIVE"/>
+  <uses-permission-sdk-23 android:name="android.permission.ACCESS_ADSERVICES_ATTRIBUTION"/>
+  <uses-permission-sdk-23 android:name="android.permission.ACCESS_WIFI_STATE"/>
+  <uses-permission-sdk-23 android:name="android.permission.BLUETOOTH"/>
+  <uses-permission-sdk-23 android:name="android.permission.BLUETOOTH_ADMIN" android:maxSdkVersion="30"/>
+  <uses-permission-sdk-23 android:name="android.permission.BLUETOOTH_ADVERTISE"/>
+  <uses-permission-sdk-23 android:name="android.permission.BLUETOOTH_CONNECT"/>
+  <uses-permission-sdk-23 android:name="android.permission.BLUETOOTH_SCAN" android:usesPermissionFlags="neverForLocation"/>
+  <uses-permission-sdk-23 android:name="android.permission.READ_CONTACTS"/>
+  <uses-permission-sdk-23 android:name="android.permission.READ_MEDIA_AUDIO"/>
+  <uses-permission-sdk-23 android:name="android.permission.READ_MEDIA_IMAGES"/>
+  <uses-permission-sdk-23 android:name="android.permission.READ_MEDIA_VIDEO"/>
+  <uses-permission-sdk-23 android:name="android.permission.REORDER_TASKS"/>
+  <uses-permission-sdk-23 android:name="android.permission.REQUEST_INSTALL_PACKAGES"/>
+  <uses-permission-sdk-23 android:name="android.permission.USE_BIOMETRIC"/>
+  <uses-permission-sdk-23 android:name="android.permission.USE_FINGERPRINT"/>
+  <uses-sdk android:minSdkVersion="26" android:targetSdkVersion="34"/>
+  <application
+      android:name="org.chromium.chrome.browser.base.SplitMonochromeApplication"
+      android:allowAudioPlaybackCapture="false"
+      android:allowBackup="false"
+      android:appComponentFactory="org.chromium.chrome.browser.base.SplitCompatAppComponentFactory"
+      android:enableOnBackInvokedCallback="true"
+      android:extractNativeLibs="false"
+      android:icon="@drawable/ic_launcher"
+      android:label="@string/app_name"
+      android:largeHeap="false"
+      android:manageSpaceActivity="@string/manage_space_activity"
+      android:memtagMode="async"
+      android:multiArch="true"
+      android:networkSecurityConfig="@xml/network_security_config"
+      android:roundIcon="@drawable/ic_launcher_round"
+      android:supportsRtl="true"
+      android:zygotePreloadName="org.chromium.content_public.app.ZygotePreload">
+    <activity  # DIFF-ANCHOR: ea1a94af
+        android:name="com.google.android.gms.common.api.GoogleApiActivity"
+        android:exported="false"
+        android:theme="@android:style/Theme.Translucent.NoTitleBar">
+    </activity>  # DIFF-ANCHOR: ea1a94af
+    <activity  # DIFF-ANCHOR: a2bae37c
+        android:name="com.google.android.play.core.common.PlayCoreDialogWrapperActivity"
+        android:exported="false"
+        android:stateNotNeeded="true"
+        android:theme="@style/Theme.PlayCore.Transparent">
+    </activity>  # DIFF-ANCHOR: a2bae37c
+    <activity  # DIFF-ANCHOR: a4438884
+        android:name="org.chromium.android_webview.devui.MainActivity"
+        android:exported="true"
+        android:icon="@drawable/icon_webview"
+        android:label="WebView DevTools"
+        android:launchMode="singleTask"
+        android:process=":webview_apk"
+        android:taskAffinity="$PACKAGE.org.chromium.android_webview.devui"
+        android:theme="@style/Theme.DevUi.DayNight"
+        android:visibleToInstantApps="true"
+        android:windowSoftInputMode="adjustPan">
+      <intent-filter>  # DIFF-ANCHOR: a167e73d
+        <action android:name="com.android.webview.SHOW_DEV_UI"/>
+        <category android:name="android.intent.category.DEFAULT"/>
+      </intent-filter>  # DIFF-ANCHOR: a167e73d
+    </activity>  # DIFF-ANCHOR: a4438884
+    <activity  # DIFF-ANCHOR: aeabab17
+        android:name="org.chromium.android_webview.nonembedded.LicenseActivity"
+        android:exported="true"
+        android:label="@string/license_activity_title"
+        android:process=":webview_apk">
+      <intent-filter>  # DIFF-ANCHOR: 23298d3b
+        <action android:name="android.settings.WEBVIEW_LICENSE"/>
+        <category android:name="android.intent.category.DEFAULT"/>
+      </intent-filter>  # DIFF-ANCHOR: 23298d3b
+      <meta-data android:name="com.android.settings.PRIMARY_PROFILE_CONTROLLED" android:value="true"/>
+    </activity>  # DIFF-ANCHOR: aeabab17
+    <activity-alias  # DIFF-ANCHOR: da85c28e
+        android:name="org.chromium.android_webview.SafeModeState"
+        android:enabled="false"
+        android:process=":webview_apk"
+        android:targetActivity="org.chromium.android_webview.devui.MainActivity"
+        android:visibleToInstantApps="true">
+    </activity-alias>  # DIFF-ANCHOR: da85c28e
+    <activity-alias  # DIFF-ANCHOR: b7cc06e9
+        android:name="org.chromium.android_webview.devui.DeveloperModeState"
+        android:enabled="false"
+        android:process=":webview_apk"
+        android:targetActivity="org.chromium.android_webview.devui.MainActivity"
+        android:visibleToInstantApps="true">
+    </activity-alias>  # DIFF-ANCHOR: b7cc06e9
+    <activity-alias  # DIFF-ANCHOR: 32e34aba
+        android:name="org.chromium.android_webview.devui.MonochromeLauncherActivity"
+        android:enabled="false"
+        android:exported="true"
+        android:label="WebView DevTools"
+        android:targetActivity="org.chromium.android_webview.devui.MainActivity">
+      <intent-filter>  # DIFF-ANCHOR: a5330430
+        <action android:name="android.intent.action.MAIN"/>
+        <category android:name="android.intent.category.LAUNCHER"/>
+      </intent-filter>  # DIFF-ANCHOR: a5330430
+    </activity-alias>  # DIFF-ANCHOR: 32e34aba
+    <meta-data android:name="android.allow_multiple_resumed_activities" android:value="true"/>
+    <meta-data android:name="android.content.APP_RESTRICTIONS" android:resource="@xml/app_restrictions"/>
+    <meta-data android:name="com.android.webview.WebViewLibrary" android:value="libmonochrome.so"/>
+    <meta-data android:name="com.google.android.gms.cast.framework.OPTIONS_PROVIDER_CLASS_NAME" android:value="org.chromium.components.media_router.caf.CastOptionsProvider"/>
+    <meta-data android:name="com.google.android.gms.version" android:value="@integer/google_play_services_version"/>
+    <meta-data android:name="com.google.ar.core" android:value="optional"/>
+    <meta-data android:name="com.google.ar.core.load_32bit_so_from_split_module" android:value="optional"/>
+    <meta-data android:name="com.google.ar.core.min_apk_version" android:value="231450000"/>
+    <meta-data android:name="com.google.ar.core.session_settings" android:value="allow_front_facing_motion_tracking_6dof,"/>
+    <meta-data android:name="com.samsung.android.sdk.multiwindow.enable" android:value="true"/>
+    <meta-data android:name="com.samsung.android.sdk.multiwindow.penwindow.enable" android:value="true"/>
+    <meta-data android:name="org.chromium.content.browser.NUM_PRIVILEGED_SERVICES" android:value="5"/>
+    <meta-data android:name="org.chromium.content.browser.NUM_SANDBOXED_SERVICES" android:value="40"/>
+    <provider  # DIFF-ANCHOR: bc0a9a7a
+        android:name="com.google.firebase.provider.FirebaseInitProvider"
+        android:authorities="$PACKAGE.firebaseinitprovider"
+        android:directBootAware="true"
+        android:exported="false"
+        android:initOrder="100">
+    </provider>  # DIFF-ANCHOR: bc0a9a7a
+    <provider  # DIFF-ANCHOR: a5e78e63
+        android:name="org.chromium.android_webview.nonembedded.LicenseContentProvider"
+        android:authorities="$PACKAGE.LicenseContentProvider"
+        android:exported="true"
+        android:grantUriPermissions="true"
+        android:process=":webview_apk">
+    </provider>  # DIFF-ANCHOR: a5e78e63
+    <provider  # DIFF-ANCHOR: bfe37944
+        android:name="org.chromium.android_webview.services.DeveloperModeContentProvider"
+        android:authorities="$PACKAGE.DeveloperModeContentProvider"
+        android:exported="true"
+        android:process=":webview_service"
+        android:visibleToInstantApps="true">
+    </provider>  # DIFF-ANCHOR: bfe37944
+    <provider  # DIFF-ANCHOR: ecfff997
+        android:name="org.chromium.android_webview.services.SafeModeContentProvider"
+        android:authorities="$PACKAGE.SafeModeContentProvider"
+        android:exported="true"
+        android:process=":webview_service"
+        android:visibleToInstantApps="true">
+    </provider>  # DIFF-ANCHOR: ecfff997
+    <provider  # DIFF-ANCHOR: c41df08d
+        android:name="org.chromium.android_webview.services.SafeModeVariationsSeedContentProvider"
+        android:authorities="$PACKAGE.SafeModeVariationsSeedContentProvider"
+        android:exported="true"
+        android:process=":webview_service"
+        android:visibleToInstantApps="true">
+    </provider>  # DIFF-ANCHOR: c41df08d
+    <provider  # DIFF-ANCHOR: b73a881a
+        android:name="org.chromium.chrome.browser.download.DownloadFileProvider"
+        android:authorities="$PACKAGE.DownloadFileProvider"
+        android:exported="false"
+        android:grantUriPermissions="true">
+      <meta-data android:name="android.support.FILE_PROVIDER_PATHS" android:resource="@xml/file_paths"/>
+    </provider>  # DIFF-ANCHOR: b73a881a
+    <provider  # DIFF-ANCHOR: f1c2d7e1
+        android:name="org.chromium.chrome.browser.provider.ChromeBrowserProvider"
+        android:authorities="$PACKAGE.ChromeBrowserProvider;$PACKAGE.browser;$PACKAGE"
+        android:exported="true">
+      <path-permission android:path="/bookmarks/search_suggest_query" android:readPermission="android.permission.GLOBAL_SEARCH"/>
+    </provider>  # DIFF-ANCHOR: f1c2d7e1
+    <provider  # DIFF-ANCHOR: 67014fab
+        android:name="org.chromium.chrome.browser.util.ChromeFileProvider"
+        android:authorities="$PACKAGE.FileProvider"
+        android:exported="false"
+        android:grantUriPermissions="true">
+      <meta-data android:name="android.support.FILE_PROVIDER_PATHS" android:resource="@xml/file_paths"/>
+    </provider>  # DIFF-ANCHOR: 67014fab
+    <provider  # DIFF-ANCHOR: cb51666f
+        android:name="org.chromium.ui.dragdrop.DropDataContentProvider"
+        android:authorities="$PACKAGE.DropDataProvider"
+        android:exported="false"
+        android:grantUriPermissions="true">
+    </provider>  # DIFF-ANCHOR: cb51666f
+    <receiver  # DIFF-ANCHOR: 0a6f8fa5
+        android:name="com.google.android.gms.cast.framework.media.MediaIntentReceiver"
+        android:exported="false">
+    </receiver>  # DIFF-ANCHOR: 0a6f8fa5
+    <receiver  # DIFF-ANCHOR: f1c9c29d
+        android:name="com.google.firebase.iid.FirebaseInstanceIdReceiver"
+        android:exported="true"
+        android:permission="com.google.android.c2dm.permission.SEND">
+      <intent-filter>  # DIFF-ANCHOR: aae22013
+        <action android:name="com.google.android.c2dm.intent.RECEIVE"/>
+      </intent-filter>  # DIFF-ANCHOR: aae22013
+    </receiver>  # DIFF-ANCHOR: f1c9c29d
+    <service  # DIFF-ANCHOR: 749391ed
+        android:name="com.google.android.gms.cast.framework.ReconnectionService"
+        android:exported="false">
+    </service>  # DIFF-ANCHOR: 749391ed
+    <service  # DIFF-ANCHOR: 48ce9d28
+        android:name="com.google.android.gms.cast.framework.media.MediaNotificationService"
+        android:exported="false">
+    </service>  # DIFF-ANCHOR: 48ce9d28
+    <service  # DIFF-ANCHOR: 7e26656b
+        android:name="com.google.firebase.components.ComponentDiscoveryService"
+        android:directBootAware="true"
+        android:exported="false">
+      <meta-data android:name="com.google.firebase.components:com.google.firebase.dynamicloading.DynamicLoadingRegistrar" android:value="com.google.firebase.components.ComponentRegistrar"/>
+      <meta-data android:name="com.google.firebase.components:com.google.firebase.iid.Registrar" android:value="com.google.firebase.components.ComponentRegistrar"/>
+      <meta-data android:name="com.google.firebase.components:com.google.firebase.installations.FirebaseInstallationsRegistrar" android:value="com.google.firebase.components.ComponentRegistrar"/>
+      <meta-data android:name="com.google.firebase.components:com.google.firebase.messaging.FirebaseMessagingRegistrar" android:value="com.google.firebase.components.ComponentRegistrar"/>
+    </service>  # DIFF-ANCHOR: 7e26656b
+    <service  # DIFF-ANCHOR: 2295960c
+        android:name="com.google.firebase.messaging.FirebaseMessagingService"
+        android:directBootAware="true"
+        android:exported="false">
+      <intent-filter android:priority="-500">  # DIFF-ANCHOR: 69e70070
+        <action android:name="com.google.firebase.MESSAGING_EVENT"/>
+      </intent-filter>  # DIFF-ANCHOR: 69e70070
+    </service>  # DIFF-ANCHOR: 2295960c
+    <service  # DIFF-ANCHOR: 1d3bf514
+        android:name="org.chromium.android_webview.js_sandbox.service.JsSandboxService0"
+        android:exported="true"
+        android:externalService="true"
+        android:isolatedProcess="true"
+        android:process=":js_sandboxed_process0"
+        android:visibleToInstantApps="true">
+    </service>  # DIFF-ANCHOR: 1d3bf514
+    <service  # DIFF-ANCHOR: b9ec52c4
+        android:name="org.chromium.android_webview.nonembedded.AwComponentUpdateService"
+        android:exported="false"
+        android:permission="android.permission.BIND_JOB_SERVICE"
+        android:process=":webview_apk">
+    </service>  # DIFF-ANCHOR: b9ec52c4
+    <service  # DIFF-ANCHOR: 3cd6d713
+        android:name="org.chromium.android_webview.services.AwMinidumpUploadJobService"
+        android:exported="true"
+        android:permission="android.permission.BIND_JOB_SERVICE"
+        android:process=":webview_service">
+    </service>  # DIFF-ANCHOR: 3cd6d713
+    <service  # DIFF-ANCHOR: 65cddb26
+        android:name="org.chromium.android_webview.services.AwVariationsSeedFetcher"
+        android:exported="false"
+        android:permission="android.permission.BIND_JOB_SERVICE"
+        android:process=":webview_service">
+    </service>  # DIFF-ANCHOR: 65cddb26
+    <service  # DIFF-ANCHOR: c756cf8d
+        android:name="org.chromium.android_webview.services.ComponentsProviderService"
+        android:exported="true"
+        android:process=":webview_service"
+        android:visibleToInstantApps="true">
+    </service>  # DIFF-ANCHOR: c756cf8d
+    <service  # DIFF-ANCHOR: 5cda9608
+        android:name="org.chromium.android_webview.services.CrashReceiverService"
+        android:exported="true"
+        android:process=":webview_service">
+    </service>  # DIFF-ANCHOR: 5cda9608
+    <service  # DIFF-ANCHOR: adce9ea1
+        android:name="org.chromium.android_webview.services.DeveloperUiService"
+        android:exported="true"
+        android:foregroundServiceType="specialUse"
+        android:process=":webview_service">
+      <property android:name="android.app.PROPERTY_SPECIAL_USE_FGS_SUBTYPE" android:value="debugging"/>
+    </service>  # DIFF-ANCHOR: adce9ea1
+    <service  # DIFF-ANCHOR: eecf2fee
+        android:name="org.chromium.android_webview.services.MetricsBridgeService"
+        android:exported="true"
+        android:process=":webview_service"
+        android:visibleToInstantApps="true">
+    </service>  # DIFF-ANCHOR: eecf2fee
+    <service  # DIFF-ANCHOR: bda8b561
+        android:name="org.chromium.android_webview.services.MetricsUploadService"
+        android:exported="true"
+        android:process=":webview_service"
+        android:visibleToInstantApps="true">
+    </service>  # DIFF-ANCHOR: bda8b561
+    <service  # DIFF-ANCHOR: 47046f1b
+        android:name="org.chromium.android_webview.services.SafeModeService"
+        android:exported="true"
+        android:process=":webview_service">
+    </service>  # DIFF-ANCHOR: 47046f1b
+    <service  # DIFF-ANCHOR: c52936d7
+        android:name="org.chromium.android_webview.services.StartupFeatureMetadataHolder"
+        android:enabled="false"
+        android:exported="true">
+      <meta-data android:name="STARTUP_FEATURE_SET_DATA_DIRECTORY_SUFFIX" android:value="true"/>
+      <meta-data android:name="STARTUP_FEATURE_SET_DIRECTORY_BASE_PATH" android:value="true"/>
+    </service>  # DIFF-ANCHOR: c52936d7
+    <service  # DIFF-ANCHOR: dc926e35
+        android:name="org.chromium.android_webview.services.VariationsSeedServer"
+        android:exported="true"
+        android:process=":webview_service">
+    </service>  # DIFF-ANCHOR: dc926e35
+    <service  # DIFF-ANCHOR: 0c6c4fd9
+        android:name="org.chromium.content.app.PrivilegedProcessService0"
+        android:exported="false"
+        android:isolatedProcess="false"
+        android:permission="$PACKAGE.permission.CHILD_SERVICE"
+        android:process=":privileged_process0">
+    </service>  # DIFF-ANCHOR: 0c6c4fd9
+    <service  # DIFF-ANCHOR: 6f89af32
+        android:name="org.chromium.content.app.PrivilegedProcessService1"
+        android:exported="false"
+        android:isolatedProcess="false"
+        android:permission="$PACKAGE.permission.CHILD_SERVICE"
+        android:process=":privileged_process1">
+    </service>  # DIFF-ANCHOR: 6f89af32
+    <service  # DIFF-ANCHOR: 40e0d738
+        android:name="org.chromium.content.app.PrivilegedProcessService2"
+        android:exported="false"
+        android:isolatedProcess="false"
+        android:permission="$PACKAGE.permission.CHILD_SERVICE"
+        android:process=":privileged_process2">
+    </service>  # DIFF-ANCHOR: 40e0d738
+    <service  # DIFF-ANCHOR: b197517d
+        android:name="org.chromium.content.app.PrivilegedProcessService3"
+        android:exported="false"
+        android:isolatedProcess="false"
+        android:permission="$PACKAGE.permission.CHILD_SERVICE"
+        android:process=":privileged_process3">
+    </service>  # DIFF-ANCHOR: b197517d
+    <service  # DIFF-ANCHOR: 52303702
+        android:name="org.chromium.content.app.PrivilegedProcessService4"
+        android:exported="false"
+        android:isolatedProcess="false"
+        android:permission="$PACKAGE.permission.CHILD_SERVICE"
+        android:process=":privileged_process4">
+    </service>  # DIFF-ANCHOR: 52303702
+    <service  # DIFF-ANCHOR: b1e3e8bd
+        android:name="org.chromium.content.app.SandboxedProcessService0"
+        android:exported="true"
+        android:externalService="true"
+        android:isolatedProcess="true"
+        android:permission="$PACKAGE.permission.CHILD_SERVICE"
+        android:process=":sandboxed_process0"
+        android:useAppZygote="true"
+        android:visibleToInstantApps="true">
+    </service>  # DIFF-ANCHOR: b1e3e8bd
+    <service  # DIFF-ANCHOR: 76d1ccf8
+        android:name="org.chromium.content.app.SandboxedProcessService1"
+        android:exported="true"
+        android:externalService="true"
+        android:isolatedProcess="true"
+        android:permission="$PACKAGE.permission.CHILD_SERVICE"
+        android:process=":sandboxed_process1"
+        android:visibleToInstantApps="true">
+    </service>  # DIFF-ANCHOR: 76d1ccf8
+    <service  # DIFF-ANCHOR: 38b95266
+        android:name="org.chromium.content.app.SandboxedProcessService10"
+        android:exported="true"
+        android:externalService="true"
+        android:isolatedProcess="true"
+        android:permission="$PACKAGE.permission.CHILD_SERVICE"
+        android:process=":sandboxed_process10"
+        android:visibleToInstantApps="true">
+    </service>  # DIFF-ANCHOR: 38b95266
+    <service  # DIFF-ANCHOR: e4a2e4a2
+        android:name="org.chromium.content.app.SandboxedProcessService11"
+        android:exported="true"
+        android:externalService="true"
+        android:isolatedProcess="true"
+        android:permission="$PACKAGE.permission.CHILD_SERVICE"
+        android:process=":sandboxed_process11"
+        android:visibleToInstantApps="true">
+    </service>  # DIFF-ANCHOR: e4a2e4a2
+    <service  # DIFF-ANCHOR: d9b2ffba
+        android:name="org.chromium.content.app.SandboxedProcessService12"
+        android:exported="true"
+        android:externalService="true"
+        android:isolatedProcess="true"
+        android:permission="$PACKAGE.permission.CHILD_SERVICE"
+        android:process=":sandboxed_process12"
+        android:visibleToInstantApps="true">
+    </service>  # DIFF-ANCHOR: d9b2ffba
+    <service  # DIFF-ANCHOR: b41bb17d
+        android:name="org.chromium.content.app.SandboxedProcessService13"
+        android:exported="true"
+        android:externalService="true"
+        android:isolatedProcess="true"
+        android:permission="$PACKAGE.permission.CHILD_SERVICE"
+        android:process=":sandboxed_process13"
+        android:visibleToInstantApps="true">
+    </service>  # DIFF-ANCHOR: b41bb17d
+    <service  # DIFF-ANCHOR: aec0ea21
+        android:name="org.chromium.content.app.SandboxedProcessService14"
+        android:exported="true"
+        android:externalService="true"
+        android:isolatedProcess="true"
+        android:permission="$PACKAGE.permission.CHILD_SERVICE"
+        android:process=":sandboxed_process14"
+        android:visibleToInstantApps="true">
+    </service>  # DIFF-ANCHOR: aec0ea21
+    <service  # DIFF-ANCHOR: cf88a5e5
+        android:name="org.chromium.content.app.SandboxedProcessService15"
+        android:exported="true"
+        android:externalService="true"
+        android:isolatedProcess="true"
+        android:permission="$PACKAGE.permission.CHILD_SERVICE"
+        android:process=":sandboxed_process15"
+        android:visibleToInstantApps="true">
+    </service>  # DIFF-ANCHOR: cf88a5e5
+    <service  # DIFF-ANCHOR: 7d85889d
+        android:name="org.chromium.content.app.SandboxedProcessService16"
+        android:exported="true"
+        android:externalService="true"
+        android:isolatedProcess="true"
+        android:permission="$PACKAGE.permission.CHILD_SERVICE"
+        android:process=":sandboxed_process16"
+        android:visibleToInstantApps="true">
+    </service>  # DIFF-ANCHOR: 7d85889d
+    <service  # DIFF-ANCHOR: dae26ed4
+        android:name="org.chromium.content.app.SandboxedProcessService17"
+        android:exported="true"
+        android:externalService="true"
+        android:isolatedProcess="true"
+        android:permission="$PACKAGE.permission.CHILD_SERVICE"
+        android:process=":sandboxed_process17"
+        android:visibleToInstantApps="true">
+    </service>  # DIFF-ANCHOR: dae26ed4
+    <service  # DIFF-ANCHOR: 2c6cf029
+        android:name="org.chromium.content.app.SandboxedProcessService18"
+        android:exported="true"
+        android:externalService="true"
+        android:isolatedProcess="true"
+        android:permission="$PACKAGE.permission.CHILD_SERVICE"
+        android:process=":sandboxed_process18"
+        android:visibleToInstantApps="true">
+    </service>  # DIFF-ANCHOR: 2c6cf029
+    <service  # DIFF-ANCHOR: 1d2f0988
+        android:name="org.chromium.content.app.SandboxedProcessService19"
+        android:exported="true"
+        android:externalService="true"
+        android:isolatedProcess="true"
+        android:permission="$PACKAGE.permission.CHILD_SERVICE"
+        android:process=":sandboxed_process19"
+        android:visibleToInstantApps="true">
+    </service>  # DIFF-ANCHOR: 1d2f0988
+    <service  # DIFF-ANCHOR: 4a39041b
+        android:name="org.chromium.content.app.SandboxedProcessService2"
+        android:exported="true"
+        android:externalService="true"
+        android:isolatedProcess="true"
+        android:permission="$PACKAGE.permission.CHILD_SERVICE"
+        android:process=":sandboxed_process2"
+        android:visibleToInstantApps="true">
+    </service>  # DIFF-ANCHOR: 4a39041b
+    <service  # DIFF-ANCHOR: 073533bf
+        android:name="org.chromium.content.app.SandboxedProcessService20"
+        android:exported="true"
+        android:externalService="true"
+        android:isolatedProcess="true"
+        android:permission="$PACKAGE.permission.CHILD_SERVICE"
+        android:process=":sandboxed_process20"
+        android:visibleToInstantApps="true">
+    </service>  # DIFF-ANCHOR: 073533bf
+    <service  # DIFF-ANCHOR: d24da41d
+        android:name="org.chromium.content.app.SandboxedProcessService21"
+        android:exported="true"
+        android:externalService="true"
+        android:isolatedProcess="true"
+        android:permission="$PACKAGE.permission.CHILD_SERVICE"
+        android:process=":sandboxed_process21"
+        android:visibleToInstantApps="true">
+    </service>  # DIFF-ANCHOR: d24da41d
+    <service  # DIFF-ANCHOR: 594d8b32
+        android:name="org.chromium.content.app.SandboxedProcessService22"
+        android:exported="true"
+        android:externalService="true"
+        android:isolatedProcess="true"
+        android:permission="$PACKAGE.permission.CHILD_SERVICE"
+        android:process=":sandboxed_process22"
+        android:visibleToInstantApps="true">
+    </service>  # DIFF-ANCHOR: 594d8b32
+    <service  # DIFF-ANCHOR: 5528c0c3
+        android:name="org.chromium.content.app.SandboxedProcessService23"
+        android:exported="true"
+        android:externalService="true"
+        android:isolatedProcess="true"
+        android:permission="$PACKAGE.permission.CHILD_SERVICE"
+        android:process=":sandboxed_process23"
+        android:visibleToInstantApps="true">
+    </service>  # DIFF-ANCHOR: 5528c0c3
+    <service  # DIFF-ANCHOR: b7ab2ba3
+        android:name="org.chromium.content.app.SandboxedProcessService24"
+        android:exported="true"
+        android:externalService="true"
+        android:isolatedProcess="true"
+        android:permission="$PACKAGE.permission.CHILD_SERVICE"
+        android:process=":sandboxed_process24"
+        android:visibleToInstantApps="true">
+    </service>  # DIFF-ANCHOR: b7ab2ba3
+    <service  # DIFF-ANCHOR: cec6cb64
+        android:name="org.chromium.content.app.SandboxedProcessService25"
+        android:exported="true"
+        android:externalService="true"
+        android:isolatedProcess="true"
+        android:permission="$PACKAGE.permission.CHILD_SERVICE"
+        android:process=":sandboxed_process25"
+        android:visibleToInstantApps="true">
+    </service>  # DIFF-ANCHOR: cec6cb64
+    <service  # DIFF-ANCHOR: 5b4a00fe
+        android:name="org.chromium.content.app.SandboxedProcessService26"
+        android:exported="true"
+        android:externalService="true"
+        android:isolatedProcess="true"
+        android:permission="$PACKAGE.permission.CHILD_SERVICE"
+        android:process=":sandboxed_process26"
+        android:visibleToInstantApps="true">
+    </service>  # DIFF-ANCHOR: 5b4a00fe
+    <service  # DIFF-ANCHOR: ad49d203
+        android:name="org.chromium.content.app.SandboxedProcessService27"
+        android:exported="true"
+        android:externalService="true"
+        android:isolatedProcess="true"
+        android:permission="$PACKAGE.permission.CHILD_SERVICE"
+        android:process=":sandboxed_process27"
+        android:visibleToInstantApps="true">
+    </service>  # DIFF-ANCHOR: ad49d203
+    <service  # DIFF-ANCHOR: 573298e9
+        android:name="org.chromium.content.app.SandboxedProcessService28"
+        android:exported="true"
+        android:externalService="true"
+        android:isolatedProcess="true"
+        android:permission="$PACKAGE.permission.CHILD_SERVICE"
+        android:process=":sandboxed_process28"
+        android:visibleToInstantApps="true">
+    </service>  # DIFF-ANCHOR: 573298e9
+    <service  # DIFF-ANCHOR: 79897b32
+        android:name="org.chromium.content.app.SandboxedProcessService29"
+        android:exported="true"
+        android:externalService="true"
+        android:isolatedProcess="true"
+        android:permission="$PACKAGE.permission.CHILD_SERVICE"
+        android:process=":sandboxed_process29"
+        android:visibleToInstantApps="true">
+    </service>  # DIFF-ANCHOR: 79897b32
+    <service  # DIFF-ANCHOR: 84335864
+        android:name="org.chromium.content.app.SandboxedProcessService3"
+        android:exported="true"
+        android:externalService="true"
+        android:isolatedProcess="true"
+        android:permission="$PACKAGE.permission.CHILD_SERVICE"
+        android:process=":sandboxed_process3"
+        android:visibleToInstantApps="true">
+    </service>  # DIFF-ANCHOR: 84335864
+    <service  # DIFF-ANCHOR: c4bd371e
+        android:name="org.chromium.content.app.SandboxedProcessService30"
+        android:exported="true"
+        android:externalService="true"
+        android:isolatedProcess="true"
+        android:permission="$PACKAGE.permission.CHILD_SERVICE"
+        android:process=":sandboxed_process30"
+        android:visibleToInstantApps="true">
+    </service>  # DIFF-ANCHOR: c4bd371e
+    <service  # DIFF-ANCHOR: 394a9fd0
+        android:name="org.chromium.content.app.SandboxedProcessService31"
+        android:exported="true"
+        android:externalService="true"
+        android:isolatedProcess="true"
+        android:permission="$PACKAGE.permission.CHILD_SERVICE"
+        android:process=":sandboxed_process31"
+        android:visibleToInstantApps="true">
+    </service>  # DIFF-ANCHOR: 394a9fd0
+    <service  # DIFF-ANCHOR: b811afb8
+        android:name="org.chromium.content.app.SandboxedProcessService32"
+        android:exported="true"
+        android:externalService="true"
+        android:isolatedProcess="true"
+        android:permission="$PACKAGE.permission.CHILD_SERVICE"
+        android:process=":sandboxed_process32"
+        android:visibleToInstantApps="true">
+    </service>  # DIFF-ANCHOR: b811afb8
+    <service  # DIFF-ANCHOR: 2811ddd3
+        android:name="org.chromium.content.app.SandboxedProcessService33"
+        android:exported="true"
+        android:externalService="true"
+        android:isolatedProcess="true"
+        android:permission="$PACKAGE.permission.CHILD_SERVICE"
+        android:process=":sandboxed_process33"
+        android:visibleToInstantApps="true">
+    </service>  # DIFF-ANCHOR: 2811ddd3
+    <service  # DIFF-ANCHOR: 73ae1688
+        android:name="org.chromium.content.app.SandboxedProcessService34"
+        android:exported="true"
+        android:externalService="true"
+        android:isolatedProcess="true"
+        android:permission="$PACKAGE.permission.CHILD_SERVICE"
+        android:process=":sandboxed_process34"
+        android:visibleToInstantApps="true">
+    </service>  # DIFF-ANCHOR: 73ae1688
+    <service  # DIFF-ANCHOR: c476f324
+        android:name="org.chromium.content.app.SandboxedProcessService35"
+        android:exported="true"
+        android:externalService="true"
+        android:isolatedProcess="true"
+        android:permission="$PACKAGE.permission.CHILD_SERVICE"
+        android:process=":sandboxed_process35"
+        android:visibleToInstantApps="true">
+    </service>  # DIFF-ANCHOR: c476f324
+    <service  # DIFF-ANCHOR: 75d5304b
+        android:name="org.chromium.content.app.SandboxedProcessService36"
+        android:exported="true"
+        android:externalService="true"
+        android:isolatedProcess="true"
+        android:permission="$PACKAGE.permission.CHILD_SERVICE"
+        android:process=":sandboxed_process36"
+        android:visibleToInstantApps="true">
+    </service>  # DIFF-ANCHOR: 75d5304b
+    <service  # DIFF-ANCHOR: dc6d0617
+        android:name="org.chromium.content.app.SandboxedProcessService37"
+        android:exported="true"
+        android:externalService="true"
+        android:isolatedProcess="true"
+        android:permission="$PACKAGE.permission.CHILD_SERVICE"
+        android:process=":sandboxed_process37"
+        android:visibleToInstantApps="true">
+    </service>  # DIFF-ANCHOR: dc6d0617
+    <service  # DIFF-ANCHOR: e31efe49
+        android:name="org.chromium.content.app.SandboxedProcessService38"
+        android:exported="true"
+        android:externalService="true"
+        android:isolatedProcess="true"
+        android:permission="$PACKAGE.permission.CHILD_SERVICE"
+        android:process=":sandboxed_process38"
+        android:visibleToInstantApps="true">
+    </service>  # DIFF-ANCHOR: e31efe49
+    <service  # DIFF-ANCHOR: 5736507e
+        android:name="org.chromium.content.app.SandboxedProcessService39"
+        android:exported="true"
+        android:externalService="true"
+        android:isolatedProcess="true"
+        android:permission="$PACKAGE.permission.CHILD_SERVICE"
+        android:process=":sandboxed_process39"
+        android:visibleToInstantApps="true">
+    </service>  # DIFF-ANCHOR: 5736507e
+    <service  # DIFF-ANCHOR: a161be24
+        android:name="org.chromium.content.app.SandboxedProcessService4"
+        android:exported="true"
+        android:externalService="true"
+        android:isolatedProcess="true"
+        android:permission="$PACKAGE.permission.CHILD_SERVICE"
+        android:process=":sandboxed_process4"
+        android:visibleToInstantApps="true">
+    </service>  # DIFF-ANCHOR: a161be24
+    <service  # DIFF-ANCHOR: 8e591688
+        android:name="org.chromium.content.app.SandboxedProcessService5"
+        android:exported="true"
+        android:externalService="true"
+        android:isolatedProcess="true"
+        android:permission="$PACKAGE.permission.CHILD_SERVICE"
+        android:process=":sandboxed_process5"
+        android:visibleToInstantApps="true">
+    </service>  # DIFF-ANCHOR: 8e591688
+    <service  # DIFF-ANCHOR: 705141d0
+        android:name="org.chromium.content.app.SandboxedProcessService6"
+        android:exported="true"
+        android:externalService="true"
+        android:isolatedProcess="true"
+        android:permission="$PACKAGE.permission.CHILD_SERVICE"
+        android:process=":sandboxed_process6"
+        android:visibleToInstantApps="true">
+    </service>  # DIFF-ANCHOR: 705141d0
+    <service  # DIFF-ANCHOR: 38ed2189
+        android:name="org.chromium.content.app.SandboxedProcessService7"
+        android:exported="true"
+        android:externalService="true"
+        android:isolatedProcess="true"
+        android:permission="$PACKAGE.permission.CHILD_SERVICE"
+        android:process=":sandboxed_process7"
+        android:visibleToInstantApps="true">
+    </service>  # DIFF-ANCHOR: 38ed2189
+    <service  # DIFF-ANCHOR: aa417956
+        android:name="org.chromium.content.app.SandboxedProcessService8"
+        android:exported="true"
+        android:externalService="true"
+        android:isolatedProcess="true"
+        android:permission="$PACKAGE.permission.CHILD_SERVICE"
+        android:process=":sandboxed_process8"
+        android:visibleToInstantApps="true">
+    </service>  # DIFF-ANCHOR: aa417956
+    <service  # DIFF-ANCHOR: e2f3bbbd
+        android:name="org.chromium.content.app.SandboxedProcessService9"
+        android:exported="true"
+        android:externalService="true"
+        android:isolatedProcess="true"
+        android:permission="$PACKAGE.permission.CHILD_SERVICE"
+        android:process=":sandboxed_process9"
+        android:visibleToInstantApps="true">
+    </service>  # DIFF-ANCHOR: e2f3bbbd
+    <uses-library android:name="android.ext.adservices" android:required="false"/>
+  </application>
+</manifest>
diff --git a/chrome/android/expectations/monochrome_64_32_public_bundle.arm64.libs_and_assets.expected b/chrome/android/expectations/monochrome_64_32_public_bundle.arm64.libs_and_assets.expected
new file mode 100644
index 0000000..7a785f5
--- /dev/null
+++ b/chrome/android/expectations/monochrome_64_32_public_bundle.arm64.libs_and_assets.expected
@@ -0,0 +1,174 @@
+apk_path=lib/arm64-v8a/libarcore_sdk_c.so, compress=False, alignment=16384
+apk_path=lib/arm64-v8a/libcrashpad_handler_trampoline.so, compress=False, alignment=16384
+apk_path=lib/arm64-v8a/libmonochrome_64.so, compress=False, alignment=16384
+apk_path=lib/armeabi-v7a/libcrashpad_handler_trampoline.so, compress=False, alignment=4096
+apk_path=lib/armeabi-v7a/libmonochrome_64.so, compress=False, alignment=4096
+apk_path=assets/chrome_100_percent.pak, compress=False, alignment=4
+apk_path=assets/icudtl.dat, compress=False, alignment=4
+apk_path=assets/locales/af.pak, compress=False, alignment=4
+apk_path=assets/locales/am.pak, compress=False, alignment=4
+apk_path=assets/locales/ar.pak, compress=False, alignment=4
+apk_path=assets/locales/as.pak, compress=False, alignment=4
+apk_path=assets/locales/az.pak, compress=False, alignment=4
+apk_path=assets/locales/be.pak, compress=False, alignment=4
+apk_path=assets/locales/bg.pak, compress=False, alignment=4
+apk_path=assets/locales/bn.pak, compress=False, alignment=4
+apk_path=assets/locales/bs.pak, compress=False, alignment=4
+apk_path=assets/locales/ca.pak, compress=False, alignment=4
+apk_path=assets/locales/cs.pak, compress=False, alignment=4
+apk_path=assets/locales/da.pak, compress=False, alignment=4
+apk_path=assets/locales/de.pak, compress=False, alignment=4
+apk_path=assets/locales/el.pak, compress=False, alignment=4
+apk_path=assets/locales/en-GB.pak, compress=False, alignment=4
+apk_path=assets/locales/en-US.pak, compress=False, alignment=4
+apk_path=assets/locales/es-419.pak, compress=False, alignment=4
+apk_path=assets/locales/es.pak, compress=False, alignment=4
+apk_path=assets/locales/et.pak, compress=False, alignment=4
+apk_path=assets/locales/eu.pak, compress=False, alignment=4
+apk_path=assets/locales/fa.pak, compress=False, alignment=4
+apk_path=assets/locales/fi.pak, compress=False, alignment=4
+apk_path=assets/locales/fil.pak, compress=False, alignment=4
+apk_path=assets/locales/fr-CA.pak, compress=False, alignment=4
+apk_path=assets/locales/fr.pak, compress=False, alignment=4
+apk_path=assets/locales/gl.pak, compress=False, alignment=4
+apk_path=assets/locales/gu.pak, compress=False, alignment=4
+apk_path=assets/locales/he.pak, compress=False, alignment=4
+apk_path=assets/locales/hi.pak, compress=False, alignment=4
+apk_path=assets/locales/hr.pak, compress=False, alignment=4
+apk_path=assets/locales/hu.pak, compress=False, alignment=4
+apk_path=assets/locales/hy.pak, compress=False, alignment=4
+apk_path=assets/locales/id.pak, compress=False, alignment=4
+apk_path=assets/locales/is.pak, compress=False, alignment=4
+apk_path=assets/locales/it.pak, compress=False, alignment=4
+apk_path=assets/locales/ja.pak, compress=False, alignment=4
+apk_path=assets/locales/ka.pak, compress=False, alignment=4
+apk_path=assets/locales/kk.pak, compress=False, alignment=4
+apk_path=assets/locales/km.pak, compress=False, alignment=4
+apk_path=assets/locales/kn.pak, compress=False, alignment=4
+apk_path=assets/locales/ko.pak, compress=False, alignment=4
+apk_path=assets/locales/ky.pak, compress=False, alignment=4
+apk_path=assets/locales/lo.pak, compress=False, alignment=4
+apk_path=assets/locales/lt.pak, compress=False, alignment=4
+apk_path=assets/locales/lv.pak, compress=False, alignment=4
+apk_path=assets/locales/mk.pak, compress=False, alignment=4
+apk_path=assets/locales/ml.pak, compress=False, alignment=4
+apk_path=assets/locales/mn.pak, compress=False, alignment=4
+apk_path=assets/locales/mr.pak, compress=False, alignment=4
+apk_path=assets/locales/ms.pak, compress=False, alignment=4
+apk_path=assets/locales/my.pak, compress=False, alignment=4
+apk_path=assets/locales/nb.pak, compress=False, alignment=4
+apk_path=assets/locales/ne.pak, compress=False, alignment=4
+apk_path=assets/locales/nl.pak, compress=False, alignment=4
+apk_path=assets/locales/or.pak, compress=False, alignment=4
+apk_path=assets/locales/pa.pak, compress=False, alignment=4
+apk_path=assets/locales/pl.pak, compress=False, alignment=4
+apk_path=assets/locales/pt-BR.pak, compress=False, alignment=4
+apk_path=assets/locales/pt-PT.pak, compress=False, alignment=4
+apk_path=assets/locales/ro.pak, compress=False, alignment=4
+apk_path=assets/locales/ru.pak, compress=False, alignment=4
+apk_path=assets/locales/si.pak, compress=False, alignment=4
+apk_path=assets/locales/sk.pak, compress=False, alignment=4
+apk_path=assets/locales/sl.pak, compress=False, alignment=4
+apk_path=assets/locales/sq.pak, compress=False, alignment=4
+apk_path=assets/locales/sr-Latn.pak, compress=False, alignment=4
+apk_path=assets/locales/sr.pak, compress=False, alignment=4
+apk_path=assets/locales/sv.pak, compress=False, alignment=4
+apk_path=assets/locales/sw.pak, compress=False, alignment=4
+apk_path=assets/locales/ta.pak, compress=False, alignment=4
+apk_path=assets/locales/te.pak, compress=False, alignment=4
+apk_path=assets/locales/th.pak, compress=False, alignment=4
+apk_path=assets/locales/tr.pak, compress=False, alignment=4
+apk_path=assets/locales/uk.pak, compress=False, alignment=4
+apk_path=assets/locales/ur.pak, compress=False, alignment=4
+apk_path=assets/locales/uz.pak, compress=False, alignment=4
+apk_path=assets/locales/vi.pak, compress=False, alignment=4
+apk_path=assets/locales/zh-CN.pak, compress=False, alignment=4
+apk_path=assets/locales/zh-HK.pak, compress=False, alignment=4
+apk_path=assets/locales/zh-TW.pak, compress=False, alignment=4
+apk_path=assets/locales/zu.pak, compress=False, alignment=4
+apk_path=assets/resources.pak, compress=False, alignment=4
+apk_path=assets/snapshot_blob_32.bin, compress=False, alignment=4
+apk_path=assets/snapshot_blob_64.bin, compress=False, alignment=4
+apk_path=assets/stored-locales/af.pak, compress=False, alignment=4
+apk_path=assets/stored-locales/am.pak, compress=False, alignment=4
+apk_path=assets/stored-locales/ar.pak, compress=False, alignment=4
+apk_path=assets/stored-locales/as.pak, compress=False, alignment=4
+apk_path=assets/stored-locales/az.pak, compress=False, alignment=4
+apk_path=assets/stored-locales/be.pak, compress=False, alignment=4
+apk_path=assets/stored-locales/bg.pak, compress=False, alignment=4
+apk_path=assets/stored-locales/bn.pak, compress=False, alignment=4
+apk_path=assets/stored-locales/bs.pak, compress=False, alignment=4
+apk_path=assets/stored-locales/ca.pak, compress=False, alignment=4
+apk_path=assets/stored-locales/cs.pak, compress=False, alignment=4
+apk_path=assets/stored-locales/da.pak, compress=False, alignment=4
+apk_path=assets/stored-locales/de.pak, compress=False, alignment=4
+apk_path=assets/stored-locales/el.pak, compress=False, alignment=4
+apk_path=assets/stored-locales/en-GB.pak, compress=False, alignment=4
+apk_path=assets/stored-locales/en-US.pak, compress=False, alignment=4
+apk_path=assets/stored-locales/es-419.pak, compress=False, alignment=4
+apk_path=assets/stored-locales/es.pak, compress=False, alignment=4
+apk_path=assets/stored-locales/et.pak, compress=False, alignment=4
+apk_path=assets/stored-locales/eu.pak, compress=False, alignment=4
+apk_path=assets/stored-locales/fa.pak, compress=False, alignment=4
+apk_path=assets/stored-locales/fi.pak, compress=False, alignment=4
+apk_path=assets/stored-locales/fil.pak, compress=False, alignment=4
+apk_path=assets/stored-locales/fr-CA.pak, compress=False, alignment=4
+apk_path=assets/stored-locales/fr.pak, compress=False, alignment=4
+apk_path=assets/stored-locales/gl.pak, compress=False, alignment=4
+apk_path=assets/stored-locales/gu.pak, compress=False, alignment=4
+apk_path=assets/stored-locales/he.pak, compress=False, alignment=4
+apk_path=assets/stored-locales/hi.pak, compress=False, alignment=4
+apk_path=assets/stored-locales/hr.pak, compress=False, alignment=4
+apk_path=assets/stored-locales/hu.pak, compress=False, alignment=4
+apk_path=assets/stored-locales/hy.pak, compress=False, alignment=4
+apk_path=assets/stored-locales/id.pak, compress=False, alignment=4
+apk_path=assets/stored-locales/is.pak, compress=False, alignment=4
+apk_path=assets/stored-locales/it.pak, compress=False, alignment=4
+apk_path=assets/stored-locales/ja.pak, compress=False, alignment=4
+apk_path=assets/stored-locales/ka.pak, compress=False, alignment=4
+apk_path=assets/stored-locales/kk.pak, compress=False, alignment=4
+apk_path=assets/stored-locales/km.pak, compress=False, alignment=4
+apk_path=assets/stored-locales/kn.pak, compress=False, alignment=4
+apk_path=assets/stored-locales/ko.pak, compress=False, alignment=4
+apk_path=assets/stored-locales/ky.pak, compress=False, alignment=4
+apk_path=assets/stored-locales/lo.pak, compress=False, alignment=4
+apk_path=assets/stored-locales/lt.pak, compress=False, alignment=4
+apk_path=assets/stored-locales/lv.pak, compress=False, alignment=4
+apk_path=assets/stored-locales/mk.pak, compress=False, alignment=4
+apk_path=assets/stored-locales/ml.pak, compress=False, alignment=4
+apk_path=assets/stored-locales/mn.pak, compress=False, alignment=4
+apk_path=assets/stored-locales/mr.pak, compress=False, alignment=4
+apk_path=assets/stored-locales/ms.pak, compress=False, alignment=4
+apk_path=assets/stored-locales/my.pak, compress=False, alignment=4
+apk_path=assets/stored-locales/nb.pak, compress=False, alignment=4
+apk_path=assets/stored-locales/ne.pak, compress=False, alignment=4
+apk_path=assets/stored-locales/nl.pak, compress=False, alignment=4
+apk_path=assets/stored-locales/or.pak, compress=False, alignment=4
+apk_path=assets/stored-locales/pa.pak, compress=False, alignment=4
+apk_path=assets/stored-locales/pl.pak, compress=False, alignment=4
+apk_path=assets/stored-locales/pt-BR.pak, compress=False, alignment=4
+apk_path=assets/stored-locales/pt-PT.pak, compress=False, alignment=4
+apk_path=assets/stored-locales/ro.pak, compress=False, alignment=4
+apk_path=assets/stored-locales/ru.pak, compress=False, alignment=4
+apk_path=assets/stored-locales/si.pak, compress=False, alignment=4
+apk_path=assets/stored-locales/sk.pak, compress=False, alignment=4
+apk_path=assets/stored-locales/sl.pak, compress=False, alignment=4
+apk_path=assets/stored-locales/sq.pak, compress=False, alignment=4
+apk_path=assets/stored-locales/sr-Latn.pak, compress=False, alignment=4
+apk_path=assets/stored-locales/sr.pak, compress=False, alignment=4
+apk_path=assets/stored-locales/sv.pak, compress=False, alignment=4
+apk_path=assets/stored-locales/sw.pak, compress=False, alignment=4
+apk_path=assets/stored-locales/ta.pak, compress=False, alignment=4
+apk_path=assets/stored-locales/te.pak, compress=False, alignment=4
+apk_path=assets/stored-locales/th.pak, compress=False, alignment=4
+apk_path=assets/stored-locales/tr.pak, compress=False, alignment=4
+apk_path=assets/stored-locales/uk.pak, compress=False, alignment=4
+apk_path=assets/stored-locales/ur.pak, compress=False, alignment=4
+apk_path=assets/stored-locales/uz.pak, compress=False, alignment=4
+apk_path=assets/stored-locales/vi.pak, compress=False, alignment=4
+apk_path=assets/stored-locales/zh-CN.pak, compress=False, alignment=4
+apk_path=assets/stored-locales/zh-HK.pak, compress=False, alignment=4
+apk_path=assets/stored-locales/zh-TW.pak, compress=False, alignment=4
+apk_path=assets/stored-locales/zu.pak, compress=False, alignment=4
+apk_path=assets/webapk8.dex, compress=True, alignment=0
+apk_path=assets/webapk_dex_version.txt, compress=True, alignment=0
diff --git a/chrome/android/expectations/monochrome_64_32_public_bundle.proguard_flags.expected b/chrome/android/expectations/monochrome_64_32_public_bundle.proguard_flags.expected
new file mode 100644
index 0000000..9e7eb08
--- /dev/null
+++ b/chrome/android/expectations/monochrome_64_32_public_bundle.proguard_flags.expected
@@ -0,0 +1,964 @@
+# File: ../../third_party/androidx/androidx_annotations.flags
+# Copyright 2023 The Chromium Authors
+# Use of this source code is governed by a BSD-style license that can be
+# found in the LICENSE file.
+
+-keep @androidx.annotation.Keep class *
+-keepclasseswithmembers,allowaccessmodification class * {
+  @androidx.annotation.Keep <fields>;
+}
+-keepclasseswithmembers,allowaccessmodification class * {
+  @androidx.annotation.Keep <methods>;
+}
+
+# File: ../../third_party/androidx/androidx_fragment.flags
+# Copyright 2020 The Chromium Authors
+# Use of this source code is governed by a BSD-style license that can be
+# found in the LICENSE file.
+
+# Help R8 to remove debug related coded. All of these static constants are
+# initialized to: Log.isLoggable(DEBUG, TAG).
+
+-assumevalues class androidx.fragment.** {
+  static boolean DEBUG return false;
+}
+
+-assumenosideeffects class androidx.fragment.app.FragmentManager {
+  static boolean isLoggingEnabled(...) return false;
+}
+
+# File: ../../third_party/androidx/androidx_mediarouter.flags
+# Copyright 2019 The Chromium Authors
+# Use of this source code is governed by a BSD-style license that can be
+# found in the LICENSE file.
+
+# Help R8 determine that we don't use MediaRouteDynamicChooserDialog.
+# https://crbug.com/1147188
+-assumevalues class ** {
+  boolean mUseDynamicGroup return false;
+}
+
+# File: ../../third_party/androidx/androidx_preferences.flags
+# Copyright 2023 The Chromium Authors
+# Use of this source code is governed by a BSD-style license that can be
+# found in the LICENSE file.
+
+# AndroidX classes that are inflated via reflection.
+-keep public class androidx.preference.ListPreference {
+    public <init>(android.content.Context, android.util.AttributeSet);
+}
+-keep public class androidx.preference.Preference {
+    public <init>(android.content.Context, android.util.AttributeSet);
+}
+-keep public class androidx.preference.PreferenceCategory {
+    public <init>(android.content.Context, android.util.AttributeSet);
+}
+-keep public class androidx.preference.PreferenceScreen {
+    public <init>(android.content.Context, android.util.AttributeSet);
+}
+
+# Referenced by androidx.preference.PreferenceInflater.
+-keep public class androidx.preference.SwitchPreference {}
+
+# File: ../../third_party/jni_zero/checkdiscard_proguard.flags
+# Copyright 2023 The Chromium Authors
+# Use of this source code is governed by a BSD-style license that can be
+# found in the LICENSE file.
+
+# Chromium only applies this check when ENABLE_DCHECK=false.
+
+-checkdiscard @org.jni_zero.CheckDiscard class ** {
+  *;
+}
+-checkdiscard class ** {
+  @org.jni_zero.CheckDiscard *;
+}
+
+# File: ../../build/android/chromium_annotations.flags
+# Copyright 2022 The Chromium Authors
+# Use of this source code is governed by a BSD-style license that can be
+# found in the LICENSE file.
+
+# Contains flags related to annotations in //build/android that can be safely
+# shared with Cronet, and thus would be appropriate for third-party apps to
+# include.
+
+# Keep all annotation related attributes that can affect runtime
+-keepattributes RuntimeVisible*Annotations
+-keepattributes AnnotationDefault
+
+# Keeps for class level annotations.
+-keep,allowaccessmodification @org.chromium.build.annotations.UsedByReflection class ** {}
+
+# Keeps for method level annotations.
+-keepclasseswithmembers,allowaccessmodification class ** {
+  @org.chromium.build.annotations.UsedByReflection <methods>;
+}
+-keepclasseswithmembers,allowaccessmodification class ** {
+  @org.chromium.build.annotations.UsedByReflection <fields>;
+}
+
+# Never inline classes, methods, or fields with this annotation, but allow
+# shrinking and obfuscation.
+# Relevant to fields when they are needed to store strong references to objects
+# that are held as weak references by native code.
+-if @org.chromium.build.annotations.DoNotInline class * {
+    *** *(...);
+}
+-keep,allowobfuscation,allowaccessmodification class <1> {
+    *** <2>(...);
+}
+-keepclassmembers,allowobfuscation,allowaccessmodification class * {
+   @org.chromium.build.annotations.DoNotInline <methods>;
+}
+-keepclassmembers,allowobfuscation,allowaccessmodification class * {
+   @org.chromium.build.annotations.DoNotInline <fields>;
+}
+
+-alwaysinline class * {
+    @org.chromium.build.annotations.AlwaysInline *;
+}
+
+# Keep all logs (Log.VERBOSE = 2). R8 does not allow setting to 0.
+-maximumremovedandroidloglevel 1 class ** {
+   @org.chromium.build.annotations.DoNotStripLogs <methods>;
+}
+-maximumremovedandroidloglevel 1 @org.chromium.build.annotations.DoNotStripLogs class ** {
+   <methods>;
+}
+
+# Never merge classes horizontally or vertically with this annotation.
+# Relevant to classes being used as a key in maps or sets.
+-keep,allowaccessmodification,allowobfuscation,allowshrinking @org.chromium.build.annotations.DoNotClassMerge class *
+
+# Mark members annotated with IdentifierNameString as identifier name strings
+-identifiernamestring class * {
+    @org.chromium.build.annotations.IdentifierNameString *;
+}
+
+# File: ../../base/android/proguard/chromium_apk.flags
+# Copyright 2016 The Chromium Authors
+# Use of this source code is governed by a BSD-style license that can be
+# found in the LICENSE file.
+
+# Contains flags that we'd like all Chromium .apks to use.
+
+# Keep line number information, useful for stack traces.
+-keepattributes SourceFile,LineNumberTable
+
+# Enable protobuf-related optimizations.
+-shrinkunusedprotofields
+
+# Allowing Proguard to change modifiers.
+-allowaccessmodification
+
+# Keep all CREATOR fields within Parcelable that are kept.
+-keepclassmembers class !cr_allowunused,** implements android.os.Parcelable {
+  public static *** CREATOR;
+}
+
+# Don't obfuscate Parcelables as they might be marshalled outside Chrome.
+# If we annotated all Parcelables that get put into Bundles other than
+# for saveInstanceState (e.g. PendingIntents), then we could actually keep the
+# names of just those ones. For now, we'll just keep them all.
+-keepnames class !cr_allowunused,** implements android.os.Parcelable {}
+
+# Keep all default constructors for used Fragments. Required since they are
+# called reflectively when fragments are reinflated after the app is killed.
+-keepclassmembers class !cr_allowunused,** extends android.app.Fragment {
+  public <init>();
+}
+-keepclassmembers class !cr_allowunused,** extends androidx.fragment.app.Fragment {
+  public <init>();
+}
+
+# Keep all enum values and valueOf methods. See
+# http://proguard.sourceforge.net/index.html#manual/examples.html
+# for the reason for this. Also, see http://crbug.com/248037.
+-keepclassmembers enum !cr_allowunused,** {
+    public static **[] values();
+}
+
+# This is to workaround crbug.com/1204690 - an old GMS app version crashes when
+# ObjectWrapper contains > 1 fields, and this prevents R8 from inserting a
+# synthetic field.
+-keep,allowaccessmodification class !cr_allowunused,com.google.android.gms.dynamic.ObjectWrapper {
+  <fields>;
+}
+
+# Remove calls to String.format() where the result goes unused. This can mask
+# exceptions if the parameters to String.format() are invalid, but such cases
+# are generally programming bugs anyways.
+# Not using the return value generally occurs due to logging being stripped.
+-assumenosideeffects class java.lang.String {
+  static java.lang.String format(...);
+}
+
+# Allows R8 to remove static field accesses to library APIs when the results
+# are unused (E.g. tell it that it's okay to not trigger <clinit>).
+# Not using the return value generally occurs due to logging being stripped.
+-assumenosideeffects class android.**, java.** {
+  static <fields>;
+}
+
+# Keep the names of exception types, to make it easier to understand stack
+# traces in contexts where it's not trivial to deobfuscate them - for example
+# when reported to app developers who are using WebView.
+-keepnames class ** extends java.lang.Throwable {}
+
+# File: ../../base/android/proguard/chromium_code.flags
+# Copyright 2016 The Chromium Authors
+# Use of this source code is governed by a BSD-style license that can be
+# found in the LICENSE file.
+
+# Contains flags that can be safely shared with Cronet, and thus would be
+# appropriate for third-party apps to include.
+
+# Allow unused native methods to be removed, but prevent renaming on those that are kept.
+-keepclasseswithmembernames,includedescriptorclasses,allowaccessmodification class !cr_allowunused,** {
+  native <methods>;
+}
+
+# Use assumevalues block instead of assumenosideeffects block because Google3 proguard cannot parse
+# assumenosideeffects blocks which overwrite return value.
+# chromium_code.flags rather than remove_logging.flags so that it's included
+# in cronet.
+-assumevalues class org.chromium.base.Log {
+  static boolean isDebug() return false;
+}
+
+# Keep all CREATOR fields within Parcelable that are kept.
+-keepclassmembers class !cr_allowunused,org.chromium.** implements android.os.Parcelable {
+  public static *** CREATOR;
+}
+
+# Don't obfuscate Parcelables as they might be marshalled outside Chrome.
+# If we annotated all Parcelables that get put into Bundles other than
+# for saveInstanceState (e.g. PendingIntents), then we could actually keep the
+# names of just those ones. For now, we'll just keep them all.
+-keepnames,allowaccessmodification class !cr_allowunused,org.chromium.** implements android.os.Parcelable {}
+
+# Keep all enum values and valueOf methods. See
+# http://proguard.sourceforge.net/index.html#manual/examples.html
+# for the reason for this. Also, see http://crbug.com/248037.
+-keepclassmembers enum !cr_allowunused,org.chromium.** {
+    public static **[] values();
+}
+
+# -identifiernamestring doesn't keep the module impl around, we have to
+# explicitly keep it.
+-if @org.chromium.components.module_installer.builder.ModuleInterface interface *
+-keep,allowobfuscation,allowaccessmodification class !cr_allowunused,** extends <1> {
+  <init>();
+}
+
+# TODO(agrieve): Remove once we start to use Android U SDK.
+-dontwarn android.window.BackEvent
+-dontwarn android.window.OnBackAnimationCallback
+
+# File: ../../build/android/dcheck_is_off.flags
+# Copyright 2019 The Chromium Authors
+# Use of this source code is governed by a BSD-style license that can be
+# found in the LICENSE file.
+
+# Contains flags that are applied only when ENABLE_DCHECK=false.
+
+-checkdiscard @org.chromium.build.annotations.CheckDiscard class ** {
+  *;
+}
+-checkdiscard class ** {
+  @org.chromium.build.annotations.CheckDiscard *;
+}
+
+# We always expect ServiceLoader.load() calls to be resolved by R8.
+-whyareyounotinlining class java.util.ServiceLoader { *** load(...); }
+
+# This has a ServiceLoader.load() failure that we filter out in dex.py.
+-checkdiscard class !cr_allowunused,kotlinx.coroutines.internal.FastServiceLoader {
+  *;
+}
+
+# Remove kotlin assertions since they add a lot of string and rarely fail.
+-assumenosideeffects class kotlin.jvm.internal.Intrinsics {
+  public static void check*(...);
+}
+
+# File: ../../chrome/android/proguard/main.flags
+# Copyright 2016 The Chromium Authors
+# Use of this source code is governed by a BSD-style license that can be
+# found in the LICENSE file.
+
+# Every fragment must have an empty constructor, so it can be instantiated when
+# restoring its activity's state.
+-keep public class org.chromium.** extends androidx.fragment.app.Fragment {
+  public <init>();
+}
+
+# These classes aren't themselves referenced, but __ProcessService[0,1,2...] are
+# referenced, and we look up these services by appending a number onto the name
+# of the base class. Thus, we need to keep the base class name around so that
+# the child classes can be looked up.
+-keep class org.chromium.content.app.SandboxedProcessService {
+  public <init>();
+}
+-keep class org.chromium.content.app.PrivilegedProcessService {
+  public <init>();
+}
+
+# Let proguard know CastMediaOptions in CastOptions is always null, so it can
+# trim unused MediaNotificationService methods. This saves about 170 methods in
+# the dex file. https://crbug.com/855081
+-assumenosideeffects class com.google.android.gms.cast.framework.CastOptions {
+  *** getCastMediaOptions() return null;
+}
+
+# Also, because CastOptions creates a default CastMediaOptions object upon
+# construction, we need to trim out the its builder as well, so we are truly
+# assuming there's no CastMediaOptions instances anywhere. This is to avoid
+# CastMediaOptions to reference resources upon construction.
+-assumenosideeffects class com.google.android.gms.cast.framework.media.CastMediaOptions$Builder {
+  public <init>();
+  public <clinit>();
+  *** build() return null;
+}
+
+# Keep implementation classes needed for split compat. These will be accessed by
+# reflection.
+-keep,allowobfuscation public class ** extends org.chromium.chrome.browser.base.SplitCompat*$Impl {
+  public <init>();
+}
+
+# File: ../../third_party/android_deps/material_design.flags
+# Copyright 2021 The Chromium Authors
+# Use of this source code is governed by a BSD-style license that can be
+# found in the LICENSE file.
+
+# We're setting ignore_proguard_configs to avoid a rule keeping Behaviour
+# subclasses, but we need this one still.
+-if class androidx.appcompat.app.AppCompatViewInflater
+-keep class com.google.android.material.theme.MaterialComponentsViewInflater {
+    <init>();
+}
+
+# File: ../../third_party/cardboard/proguard-rules.pro
+# Copyright 2023 The Chromium Authors
+# Use of this source code is governed by a BSD-style license that can be
+# found in the LICENSE file.
+# Keep classes, methods, and fields that are accessed with JNI.
+-keep class com.google.cardboard.sdk.UsedByNative
+-keepclasseswithmembers,includedescriptorclasses class ** {
+  @com.google.cardboard.sdk.UsedByNative *;
+}
+# Keep proto methods that are directly queried over JNI since proguard cannot
+# determine which methods those are.
+-keep,includedescriptorclasses class com.google.cardboard.proto.CardboardDevice$DeviceParams$VerticalAlignmentType {
+  ordinal();
+}
+-keep,includedescriptorclasses class com.google.cardboard.proto.CardboardDevice$DeviceParams {
+  getScreenToLensDistance();
+  getInterLensDistance();
+  getTrayToLensDistance();
+  getVerticalAlignment();
+  getDistortionCoefficients(int);
+  getDistortionCoefficientsCount();
+  getLeftEyeFieldOfViewAngles(int);
+}
+
+# File: ../../android_webview/support_library/boundary_interfaces/proguard.flags
+# Copyright 2018 The Chromium Authors
+# Use of this source code is governed by a BSD-style license that can be
+# found in the LICENSE file.
+
+# We need to avoid obfuscating the support library boundary interface because
+# this API is shared with the Android Support Library.
+# Note that we only 'keep' the package org.chromium.support_lib_boundary itself,
+# any sub-packages of that package can still be obfuscated.
+-keep public class org.chromium.support_lib_boundary.* { public *; }
+
+# File: ../../android_webview/nonembedded/java/proguard.flags
+# Copyright 2016 The Chromium Authors
+# Use of this source code is governed by a BSD-style license that can be
+# found in the LICENSE file.
+
+-keepclassmembers class org.chromium.android_webview.AwPdfExporter {
+    android.view.ViewGroup mContainerView;
+}
+
+# Keep the factory and its public members; it's the main entry point used by the
+# framework. Also keep the factory's constructors as some things are using them
+# via reflection; crbug.com/1462346
+-keep class com.android.webview.chromium.WebViewChromiumFactoryProvider {
+    public *;
+    <init>(...);
+}
+-keep class com.android.webview.chromium.WebViewChromiumFactoryProviderFor* {
+    public *;
+    <init>(...);
+}
+
+-keep class * implements android.webkit.WebViewFactoryProvider$Statics {
+    *;
+}
+
+-keep class com.android.webview.chromium.ContentSettingsAdapter {
+    public *;
+}
+
+-keep class com.android.webview.chromium.WebViewDatabaseAdapter {
+  public *;
+}
+
+# This is the main entry point for APIs. It is kept to make developing with
+# unreleased Android easier.
+-keep class com.android.webview.chromium.WebViewChromium {
+  public *;
+}
+
+# This rule prevents class merging on R$* resource classes (for example, R$anim,
+# R$styleable, R$bool). This causes issues for WebView when unused resource
+# stripping, since in WebView we are forced to detect which resources are unused
+# by scanning the dex file for R$<res_type>.<res_name>. Having the R$* classes
+# being merged together means that R$anim.foo may now be found in R$bool.foo,
+# and this mistakenly will mark the foo resouce to be removed. More details in
+# crbug.com/1348329.
+-keep,allowaccessmodification,allowobfuscation,allowshrinking class **.R$*
+
+# Functor classes with native methods implemented in Android.
+-keep class com.android.webview.chromium.DrawFunctor
+-keep class com.android.webview.chromium.DrawGLFunctor
+-keep class com.android.webview.chromium.GraphicsUtils
+
+# The lock file object must be kept explicitly to avoid it being optimized
+# away and the lock released by the object's finalizer.
+-keep class org.chromium.android_webview.AwDataDirLock {
+    java.nio.channels.FileLock sExclusiveFileLock;
+    java.io.RandomAccessFile sLockFile;
+}
+
+# File: ../../third_party/jni_zero/proguard.flags
+# Copyright 2023 The Chromium Authors
+# Use of this source code is governed by a BSD-style license that can be
+# found in the LICENSE file.
+
+# Keeps for method level annotations.
+-keepclasseswithmembers,allowaccessmodification class ** {
+  @org.jni_zero.AccessedByNative <fields>;
+}
+-keepclasseswithmembers,includedescriptorclasses,allowaccessmodification class ** {
+  @org.jni_zero.CalledByNative <methods>;
+}
+-keepclasseswithmembers,includedescriptorclasses,allowaccessmodification class ** {
+  @org.jni_zero.CalledByNativeUnchecked <methods>;
+}
+
+# File: ../../chrome/android/features/start_surface/proguard.flags
+# Copyright 2019 The Chromium Authors
+# Use of this source code is governed by a BSD-style license that can be
+# found in the LICENSE file.
+
+
+# To fix crbug/1017396. This is because AppBarLayout$ScrollingViewBehavior
+# is instantiated via java.lang.reflect.Constructor in CoordinatorLayout.java.
+# Note that AppBarLayout$Behavior is needed to keep the scrolling behavior.
+-keep class com.google.android.material.appbar.AppBarLayout$Behavior {
+    public <init>(android.content.Context, android.util.AttributeSet);
+    public <init>();
+}
+-keep class com.google.android.material.appbar.AppBarLayout$ScrollingViewBehavior {
+    public <init>(android.content.Context, android.util.AttributeSet);
+    public <init>();
+}
+
+# File: obj/third_party/androidx/androidx_appcompat_appcompat_java/proguard.txt
+# Copyright (C) 2018 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.
+
+# Never inline methods, but allow shrinking and obfuscation.
+-keepclassmembernames,allowobfuscation,allowshrinking class androidx.appcompat.widget.AppCompatTextViewAutoSizeHelper$Impl* {
+  <methods>;
+}
+
+# File: obj/third_party/androidx/androidx_fragment_fragment_java/proguard.txt
+# Copyright (C) 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.
+
+# The default FragmentFactory creates Fragment instances using reflection
+-if public class ** extends androidx.fragment.app.Fragment
+-keepclasseswithmembers,allowobfuscation public class <1> {
+    public <init>();
+}
+
+# FragmentTransition will reflectively lookup:
+# androidx.transition.FragmentTransitionSupport
+# We should ensure that we keep the constructor if the code using this is alive
+-if class androidx.fragment.app.FragmentTransition {
+   private static androidx.fragment.app.FragmentTransitionImpl resolveSupportImpl();
+}
+-keep class androidx.transition.FragmentTransitionSupport {
+    public <init>();
+}
+
+# File: obj/third_party/androidx/androidx_lifecycle_lifecycle_viewmodel_java/proguard.txt
+-keepclassmembers,allowobfuscation class * extends androidx.lifecycle.ViewModel {
+    <init>();
+}
+
+-keepclassmembers,allowobfuscation class * extends androidx.lifecycle.AndroidViewModel {
+    <init>(android.app.Application);
+}
+
+# File: obj/third_party/androidx/androidx_lifecycle_lifecycle_viewmodel_savedstate_java/proguard.txt
+-keepclassmembers,allowobfuscation class * extends androidx.lifecycle.ViewModel {
+    <init>(androidx.lifecycle.SavedStateHandle);
+}
+
+-keepclassmembers,allowobfuscation class * extends androidx.lifecycle.AndroidViewModel {
+    <init>(android.app.Application,androidx.lifecycle.SavedStateHandle);
+}
+
+# File: obj/third_party/androidx/androidx_media_media_java/proguard.txt
+# Copyright (C) 2017 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.
+
+# Prevent Parcelable objects from being removed or renamed.
+-keep class android.support.v4.media.** implements android.os.Parcelable {
+    public static final android.os.Parcelable$Creator *;
+}
+
+# Prevent Parcelable objects from being removed or renamed.
+-keep class androidx.media.** implements android.os.Parcelable {
+    public static final android.os.Parcelable$Creator *;
+}
+
+# File: obj/third_party/androidx/androidx_mediarouter_mediarouter_java/proguard.txt
+# Copyright 2019 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.
+
+# Allow R8 / ProGuard to remove debugging code.
+-assumevalues class androidx.mediarouter.** {
+  static boolean DEBUG return false;
+}
+
+# File: obj/third_party/androidx/androidx_recyclerview_recyclerview_java/proguard.txt
+# Copyright (C) 2015 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.
+
+# When layoutManager xml attribute is used, RecyclerView inflates
+#LayoutManagers' constructors using reflection.
+-keep public class * extends androidx.recyclerview.widget.RecyclerView$LayoutManager {
+    public <init>(android.content.Context, android.util.AttributeSet, int, int);
+    public <init>();
+}
+
+-keepclassmembers class androidx.recyclerview.widget.RecyclerView {
+    public void suppressLayout(boolean);
+    public boolean isLayoutSuppressed();
+}
+
+# File: obj/third_party/androidx/androidx_savedstate_savedstate_java/proguard.txt
+# Copyright (C) 2019 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.
+
+-keepclassmembers,allowobfuscation class * implements androidx.savedstate.SavedStateRegistry$AutoRecreated {
+    <init>();
+}
+
+# File: obj/third_party/androidx/androidx_transition_transition_java/proguard.txt
+# Copyright (C) 2017 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.
+
+# Keep a field in transition that is used to keep a reference to weakly-referenced object
+-keepclassmembers class androidx.transition.ChangeBounds$* extends android.animation.AnimatorListenerAdapter {
+  androidx.transition.ChangeBounds$ViewBounds mViewBounds;
+}
+
+# File: obj/third_party/androidx/androidx_vectordrawable_vectordrawable_animated_java/proguard.txt
+# Copyright (C) 2016 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.
+
+# keep setters in VectorDrawables so that animations can still work.
+-keepclassmembers class androidx.vectordrawable.graphics.drawable.VectorDrawableCompat$* {
+   void set*(***);
+   *** get*();
+}
+
+# File: obj/third_party/androidx/androidx_versionedparcelable_versionedparcelable_java/proguard.txt
+-keep class * implements androidx.versionedparcelable.VersionedParcelable
+-keep public class android.support.**Parcelizer { *; }
+-keep public class androidx.**Parcelizer { *; }
+-keep public class androidx.versionedparcelable.ParcelImpl
+
+# File: ../../third_party/arcore-android-sdk-client/proguard.txt
+# Keep ARCore public-facing classes
+# This line from the ARCore SDK's .aar should not be needed when consuming ARCore SDK:
+# -keepparameternames
+
+# These are part of the Java <-> native interfaces for ARCore.
+-keepclasseswithmembernames,includedescriptorclasses class !com.google.ar.core.viewer.**, !com.google.ar.core.services.logging.**, !com.google.ar.sceneform.**, com.google.ar.** {
+    native <methods>;
+}
+
+# This line from the ARCore SDK's .aar should not be needed when consuming ARCore SDK:
+# -keep public class !com.google.ar.core.viewer.**, !com.google.ar.core**.R$*, !com.google.ar.core.services.logging.**, com.google.ar.core.** {*;}
+
+# If you need to build a library on top of arcore_client, and use this library for your project
+# Please un-comment this line below.
+# -keepattributes *Annotation*
+
+-keep class com.google.ar.core.annotations.UsedByNative
+-keep @com.google.ar.core.annotations.UsedByNative class *
+-keepclassmembers class * {
+    @com.google.ar.core.annotations.UsedByNative *;
+}
+
+-keep class com.google.ar.core.annotations.UsedByReflection
+-keep @com.google.ar.core.annotations.UsedByReflection class *
+-keepclassmembers class * {
+    @com.google.ar.core.annotations.UsedByReflection *;
+}
+# Keep Dynamite classes
+
+# .aidl file will be proguarded, we should keep all Aidls.
+# These lines from the ARCore SDK's .aar should not be needed when consuming ARCore SDK:
+# -keep class com.google.vr.dynamite.client.IObjectWrapper { *; }
+# -keep class com.google.vr.dynamite.client.ILoadedInstanceCreator { *; }
+# -keep class com.google.vr.dynamite.client.INativeLibraryLoader { *; }
+
+# Keep annotation files and the file got annotated.
+-keep class com.google.vr.dynamite.client.UsedByNative
+-keep @com.google.vr.dynamite.client.UsedByNative class *
+-keepclassmembers class * {
+    @com.google.vr.dynamite.client.UsedByNative *;
+}
+
+-keep class com.google.vr.dynamite.client.UsedByReflection
+-keep @com.google.vr.dynamite.client.UsedByReflection class *
+-keepclassmembers class * {
+    @com.google.vr.dynamite.client.UsedByReflection *;
+}
+
+# File: obj/third_party/android_deps/google_android_datatransport_transport_api_java/proguard.txt
+-dontwarn com.google.auto.value.AutoValue
+-dontwarn com.google.auto.value.AutoValue$Builder
+
+# File: obj/third_party/android_deps/google_firebase_firebase_common_java/proguard.txt
+-dontwarn com.google.firebase.platforminfo.KotlinDetector
+-dontwarn com.google.auto.value.AutoValue
+-dontwarn com.google.auto.value.AutoValue$Builder
+
+# File: obj/third_party/android_deps/google_firebase_firebase_components_java/proguard.txt
+-dontwarn com.google.firebase.components.Component$Instantiation
+-dontwarn com.google.firebase.components.Component$ComponentType
+
+-keep class * implements com.google.firebase.components.ComponentRegistrar
+
+# File: obj/third_party/android_deps/google_firebase_firebase_messaging_java/proguard.txt
+# Analytics library is optional.
+# Access to this class is protected by try/catch(NoClassDefFoundError e)
+# b/35686744 Don't fail during proguard if the class is missing from the APK.
+-dontwarn com.google.android.gms.measurement.AppMeasurement*
+
+# File: obj/third_party/android_deps/google_play_services_auth_base_java/proguard.txt
+# We keep all fields for every generated proto file as the runtime uses
+# reflection over them that ProGuard cannot detect. Without this keep
+# rule, fields may be removed that would cause runtime failures.
+-keepclassmembers class * extends com.google.android.gms.internal.auth.zzer {
+  <fields>;
+}
+
+# File: obj/third_party/android_deps/google_play_services_base_java/proguard.txt
+# b/35135904 Ensure that proguard will not strip the mResultGuardian.
+-keepclassmembers class com.google.android.gms.common.api.internal.BasePendingResult {
+  com.google.android.gms.common.api.internal.BasePendingResult$ReleasableResultGuardian mResultGuardian;
+}
+
+# File: obj/third_party/android_deps/google_play_services_basement_java/proguard.txt
+# Needed when building against pre-Marshmallow SDK.
+-dontwarn android.security.NetworkSecurityPolicy
+
+# Needed when building against Marshmallow SDK.
+-dontwarn android.app.Notification
+
+# Protobuf has references not on the Android boot classpath
+-dontwarn sun.misc.Unsafe
+-dontwarn libcore.io.Memory
+
+# Internal Google annotations for generating Proguard keep rules.
+-dontwarn com.google.android.apps.common.proguard.UsedBy*
+
+# Annotations referenced by the SDK but whose definitions are contained in
+# non-required dependencies.
+-dontwarn javax.annotation.**
+-dontwarn org.checkerframework.**
+-dontwarn com.google.errorprone.annotations.**
+-dontwarn org.jspecify.nullness.NullMarked
+
+# Proguard flags for consumers of the Google Play services SDK
+# https://developers.google.com/android/guides/setup#add_google_play_services_to_your_project
+
+# Keep SafeParcelable NULL value, needed for reflection by DowngradeableSafeParcel
+-keepclassmembers public class com.google.android.gms.common.internal.safeparcel.SafeParcelable {
+    public static final *** NULL;
+}
+
+# Needed for Parcelable/SafeParcelable classes & their creators to not get renamed, as they are
+# found via reflection.
+-keep class com.google.android.gms.common.internal.ReflectedParcelable
+-keepnames class * implements com.google.android.gms.common.internal.ReflectedParcelable
+-keepclassmembers class * implements android.os.Parcelable {
+  public static final *** CREATOR;
+}
+
+# Keep the classes/members we need for client functionality.
+-keep @interface android.support.annotation.Keep
+-keep @androidx.annotation.Keep class *
+-keepclasseswithmembers class * {
+  @androidx.annotation.Keep <fields>;
+}
+-keepclasseswithmembers class * {
+  @androidx.annotation.Keep <methods>;
+}
+
+# Keep androidX equivalent of above android.support to allow Jetification.
+-keep @interface androidx.annotation.Keep
+-keep @androidx.annotation.Keep class *
+-keepclasseswithmembers class * {
+  @androidx.annotation.Keep <fields>;
+}
+-keepclasseswithmembers class * {
+  @androidx.annotation.Keep <methods>;
+}
+
+# Keep the names of classes/members we need for client functionality.
+-keep @interface com.google.android.gms.common.annotation.KeepName
+-keepnames @com.google.android.gms.common.annotation.KeepName class *
+-keepclassmembernames class * {
+  @com.google.android.gms.common.annotation.KeepName *;
+}
+
+# Keep Dynamite API entry points
+-keep @interface com.google.android.gms.common.util.DynamiteApi
+-keep @com.google.android.gms.common.util.DynamiteApi public class * {
+  public <fields>;
+  public <methods>;
+}
+
+# File: obj/third_party/android_deps/google_play_services_cast_framework_java/proguard.txt
+-keep public class * implements com.google.android.gms.cast.framework.OptionsProvider
+
+# File: obj/third_party/android_deps/google_play_services_clearcut_java/proguard.txt
+# We keep all fields for every generated proto file as the runtime uses
+# reflection over them that ProGuard cannot detect. Without this keep
+# rule, fields may be removed that would cause runtime failures.
+-keepclassmembers class * extends com.google.android.gms.internal.clearcut.zzcg {
+  <fields>;
+}
+
+# File: obj/third_party/android_deps/google_play_services_gcm_java/proguard.txt
+# Ensure that proguard will not strip the handleIntent method.
+-keepclassmembers class com.google.android.gms.gcm.GcmListenerService {
+    public void handleIntent(android.content.Intent);
+}
+
+# File: obj/third_party/android_deps/google_play_services_vision_common_java/proguard.txt
+# We keep all fields for every generated proto file as the runtime uses
+# reflection over them that ProGuard cannot detect. Without this keep
+# rule, fields may be removed that would cause runtime failures.
+-keepclassmembers class * extends com.google.android.gms.internal.vision.zzjb {
+  <fields>;
+}
+
+# File: obj/third_party/android_deps/google_play_services_vision_java/proguard.txt
+# We keep all fields for every generated proto file as the runtime uses
+# reflection over them that ProGuard cannot detect. Without this keep
+# rule, fields may be removed that would cause runtime failures.
+-keepclassmembers class * extends com.google.android.gms.internal.vision.zzjb {
+  <fields>;
+}
+
+# File: ../../base/android/proguard/remove_logging.flags
+# Copyright 2022 The Chromium Authors
+# Use of this source code is governed by a BSD-style license that can be
+# found in the LICENSE file.
+
+# Remove Log.d(), Log.v(), and corresponding isLoggable() calls.
+# Log.DEBUG = 3, Log.VERBOSE = 2.
+# https://stackoverflow.com/questions/73876633/what-does-the-r8-maximumremovedandroidloglevel-option
+-maximumremovedandroidloglevel 3
+
+# Makes try-with-resources less inefficient. Saved 3.8kb when added.
+-assumenosideeffects class java.lang.Throwable {
+  void addSuppressed(...);
+}
+
+# Remove all logging calls via JDK Loggers. They are generally from
+# unused parts of third-party libraries.
+-assumenosideeffects class java.util.logging.Logger {
+    void finest(...);
+    void finer(...);
+    void fine(...);
+    void info(...);
+    void warning(...);
+    void severe(...);
+    void throwing(...);
+    void log(...);
+    void logp(...);
+    static java.util.logging.Logger getLogger(...) return _NONNULL_;
+    boolean isLoggable(...) return false;
+}
+
+# Remove accesses to Level.<thing> that go unused.
+-assumenosideeffects class java.util.logging.Level {
+  <fields>;
+  # Flogger uses Level objects, so do not set a return value for intValue().
+  int intValue();
+}
+
+# Remove fields of type Logger.
+-assumenosideeffects class * {
+  java.util.logging.Logger * return _NONNULL_;
+}
+
+# File: ../../third_party/android_deps/libs/org_jetbrains_kotlinx_kotlinx_coroutines_android/kotlinx-coroutines-android-1.6.4.jar:META-INF/com.android.tools/r8-from-1.6.0/coroutines.pro
+# Allow R8 to optimize away the FastServiceLoader.
+# Together with ServiceLoader optimization in R8
+# this results in direct instantiation when loading Dispatchers.Main
+-assumenosideeffects class kotlinx.coroutines.internal.MainDispatcherLoader {
+    boolean FAST_SERVICE_LOADER_ENABLED return false;
+}
+
+-assumenosideeffects class kotlinx.coroutines.internal.FastServiceLoaderKt {
+    boolean ANDROID_DETECTED return true;
+}
+
+# Disable support for "Missing Main Dispatcher", since we always have Android main dispatcher
+-assumenosideeffects class kotlinx.coroutines.internal.MainDispatchersKt {
+    boolean SUPPORT_MISSING return false;
+}
+
+# Statically turn off all debugging facilities and assertions
+-assumenosideeffects class kotlinx.coroutines.DebugKt {
+    boolean getASSERTIONS_ENABLED() return false;
+    boolean getDEBUG() return false;
+    boolean getRECOVER_STACK_TRACES() return false;
+}
+
+# File: ../../third_party/android_deps/libs/org_jetbrains_kotlinx_kotlinx_coroutines_core_jvm/kotlinx-coroutines-core-jvm-1.6.4.jar:META-INF/com.android.tools/r8/coroutines.pro
+# When editing this file, update the following files as well:
+# - META-INF/proguard/coroutines.pro
+# - META-INF/com.android.tools/proguard/coroutines.pro
+
+# Most of volatile fields are updated with AFU and should not be mangled
+-keepclassmembers class kotlinx.coroutines.** {
+    volatile <fields>;
+}
+
+# Same story for the standard library's SafeContinuation that also uses AtomicReferenceFieldUpdater
+-keepclassmembers class kotlin.coroutines.SafeContinuation {
+    volatile <fields>;
+}
+
+# These classes are only required by kotlinx.coroutines.debug.AgentPremain, which is only loaded when
+# kotlinx-coroutines-core is used as a Java agent, so these are not needed in contexts where ProGuard is used.
+-dontwarn java.lang.instrument.ClassFileTransformer
+-dontwarn sun.misc.SignalHandler
+-dontwarn java.lang.instrument.Instrumentation
+-dontwarn sun.misc.Signal
+
+# Only used in `kotlinx.coroutines.internal.ExceptionsConstructor`.
+# The case when it is not available is hidden in a `try`-`catch`, as well as a check for Android.
+-dontwarn java.lang.ClassValue
+
+# An annotation used for build tooling, won't be directly accessed.
+-dontwarn org.codehaus.mojo.animal_sniffer.IgnoreJRERequirement
+
+# File: //build/android/gyp/proguard.py (generated rules)
+-repackageclasses ''
diff --git a/chrome/android/expectations/monochrome_64_32_public_bundle__base.AndroidManifest.expected b/chrome/android/expectations/monochrome_64_32_public_bundle__base.AndroidManifest.expected
new file mode 100644
index 0000000..9f4befa
--- /dev/null
+++ b/chrome/android/expectations/monochrome_64_32_public_bundle__base.AndroidManifest.expected
@@ -0,0 +1,741 @@
+<?xml version="1.0" ?>
+<manifest
+    xmlns:android="http://schemas.android.com/apk/res/android"
+    package="org.chromium.chrome.stable"
+    platformBuildVersionCode="34"
+    platformBuildVersionName="14"
+    android:isolatedSplits="true"
+    android:versionCode="OFFSET=22"
+    android:versionName="#.#.#.#">
+  <permission android:name="$PACKAGE.TOS_ACKED" android:protectionLevel="signatureOrSystem"/>
+  <permission android:name="$PACKAGE.permission.C2D_MESSAGE" android:protectionLevel="signature"/>
+  <permission android:name="$PACKAGE.permission.CHILD_SERVICE" android:protectionLevel="signature"/>
+  <permission android:name="$PACKAGE.permission.DEBUG" android:label="Debug web pages" android:protectionLevel="signature"/>
+  <permission android:name="$PACKAGE.permission.READ_WRITE_BOOKMARK_FOLDERS" android:protectionLevel="signatureOrSystem"/>
+  <queries>  # DIFF-ANCHOR: 9588fea7
+    <package android:name="com.google.ar.core"/>
+  </queries>  # DIFF-ANCHOR: 9588fea7
+  <uses-feature android:glEsVersion="0x00020000"/>
+  <uses-feature android:name="android.hardware.camera" android:required="false"/>
+  <uses-feature android:name="android.hardware.camera.autofocus" android:required="false"/>
+  <uses-feature android:name="android.hardware.location.gps" android:required="false"/>
+  <uses-feature android:name="android.hardware.microphone" android:required="false"/>
+  <uses-feature android:name="android.hardware.screen.landscape" android:required="false"/>
+  <uses-feature android:name="android.hardware.sensor.accelerometer" android:required="false"/>
+  <uses-feature android:name="android.hardware.sensor.gyroscope" android:required="false"/>
+  <uses-feature android:name="android.hardware.touchscreen" android:required="false"/>
+  <uses-feature android:name="android.hardware.vr.headtracking" android:required="false" android:version="1"/>
+  <uses-feature android:name="android.hardware.vr.high_performance" android:required="false"/>
+  <uses-feature android:name="android.software.vr.mode" android:required="false"/>
+  <uses-permission android:name="$PACKAGE.TOS_ACKED"/>
+  <uses-permission android:name="$PACKAGE.permission.C2D_MESSAGE"/>
+  <uses-permission android:name="$PACKAGE.permission.READ_WRITE_BOOKMARK_FOLDERS"/>
+  <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>
+  <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
+  <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
+  <uses-permission android:name="android.permission.CAMERA"/>
+  <uses-permission android:name="android.permission.CREDENTIAL_MANAGER_QUERY_CANDIDATE_CREDENTIALS"/>
+  <uses-permission android:name="android.permission.CREDENTIAL_MANAGER_SET_ALLOWED_PROVIDERS"/>
+  <uses-permission android:name="android.permission.CREDENTIAL_MANAGER_SET_ORIGIN"/>
+  <uses-permission android:name="android.permission.DOWNLOAD_WITHOUT_NOTIFICATION"/>
+  <uses-permission android:name="android.permission.FOREGROUND_SERVICE"/>
+  <uses-permission android:name="android.permission.FOREGROUND_SERVICE_DATA_SYNC"/>
+  <uses-permission android:name="android.permission.FOREGROUND_SERVICE_MEDIA_PLAYBACK"/>
+  <uses-permission android:name="android.permission.GET_ACCOUNTS"/>
+  <uses-permission android:name="android.permission.INTERNET"/>
+  <uses-permission android:name="android.permission.MANAGE_ACCOUNTS"/>
+  <uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS"/>
+  <uses-permission android:name="android.permission.NFC"/>
+  <uses-permission android:name="android.permission.POST_NOTIFICATIONS"/>
+  <uses-permission android:name="android.permission.QUERY_ALL_PACKAGES"/>
+  <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
+  <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED"/>
+  <uses-permission android:name="android.permission.RECORD_AUDIO"/>
+  <uses-permission android:name="android.permission.RUN_USER_INITIATED_JOBS"/>
+  <uses-permission android:name="android.permission.USE_CREDENTIALS"/>
+  <uses-permission android:name="android.permission.VIBRATE"/>
+  <uses-permission android:name="android.permission.WAKE_LOCK"/>
+  <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
+  <uses-permission android:name="com.android.launcher.permission.INSTALL_SHORTCUT"/>
+  <uses-permission android:name="com.chrome.permission.DEVICE_EXTRAS"/>
+  <uses-permission android:name="com.google.android.apps.now.CURRENT_ACCOUNT_ACCESS"/>
+  <uses-permission android:name="com.google.android.c2dm.permission.RECEIVE"/>
+  <uses-permission-sdk-23 android:name="android.permission.ACCESS_ADSERVICES_ATTRIBUTION"/>
+  <uses-permission-sdk-23 android:name="android.permission.ACCESS_WIFI_STATE"/>
+  <uses-permission-sdk-23 android:name="android.permission.BLUETOOTH"/>
+  <uses-permission-sdk-23 android:name="android.permission.BLUETOOTH_ADMIN" android:maxSdkVersion="30"/>
+  <uses-permission-sdk-23 android:name="android.permission.BLUETOOTH_ADVERTISE"/>
+  <uses-permission-sdk-23 android:name="android.permission.BLUETOOTH_CONNECT"/>
+  <uses-permission-sdk-23 android:name="android.permission.BLUETOOTH_SCAN" android:usesPermissionFlags="neverForLocation"/>
+  <uses-permission-sdk-23 android:name="android.permission.READ_CONTACTS"/>
+  <uses-permission-sdk-23 android:name="android.permission.READ_MEDIA_AUDIO"/>
+  <uses-permission-sdk-23 android:name="android.permission.READ_MEDIA_IMAGES"/>
+  <uses-permission-sdk-23 android:name="android.permission.READ_MEDIA_VIDEO"/>
+  <uses-permission-sdk-23 android:name="android.permission.REORDER_TASKS"/>
+  <uses-permission-sdk-23 android:name="android.permission.REQUEST_INSTALL_PACKAGES"/>
+  <uses-permission-sdk-23 android:name="android.permission.USE_BIOMETRIC"/>
+  <uses-permission-sdk-23 android:name="android.permission.USE_FINGERPRINT"/>
+  <uses-sdk android:minSdkVersion="26" android:targetSdkVersion="34"/>
+  <application
+      android:name="org.chromium.chrome.browser.base.SplitMonochromeApplication"
+      android:allowAudioPlaybackCapture="false"
+      android:allowBackup="false"
+      android:appComponentFactory="org.chromium.chrome.browser.base.SplitCompatAppComponentFactory"
+      android:enableOnBackInvokedCallback="true"
+      android:extractNativeLibs="false"
+      android:icon="@drawable/ic_launcher"
+      android:label="@string/app_name"
+      android:largeHeap="false"
+      android:manageSpaceActivity="@string/manage_space_activity"
+      android:memtagMode="async"
+      android:multiArch="true"
+      android:networkSecurityConfig="@xml/network_security_config"
+      android:roundIcon="@drawable/ic_launcher_round"
+      android:supportsRtl="true"
+      android:zygotePreloadName="org.chromium.content_public.app.ZygotePreload">
+    <activity  # DIFF-ANCHOR: ea1a94af
+        android:name="com.google.android.gms.common.api.GoogleApiActivity"
+        android:exported="false"
+        android:theme="@android:style/Theme.Translucent.NoTitleBar">
+    </activity>  # DIFF-ANCHOR: ea1a94af
+    <activity  # DIFF-ANCHOR: a2bae37c
+        android:name="com.google.android.play.core.common.PlayCoreDialogWrapperActivity"
+        android:exported="false"
+        android:stateNotNeeded="true"
+        android:theme="@style/Theme.PlayCore.Transparent">
+    </activity>  # DIFF-ANCHOR: a2bae37c
+    <activity  # DIFF-ANCHOR: a4438884
+        android:name="org.chromium.android_webview.devui.MainActivity"
+        android:exported="true"
+        android:icon="@drawable/icon_webview"
+        android:label="WebView DevTools"
+        android:launchMode="singleTask"
+        android:process=":webview_apk"
+        android:taskAffinity="$PACKAGE.org.chromium.android_webview.devui"
+        android:theme="@style/Theme.DevUi.DayNight"
+        android:visibleToInstantApps="true"
+        android:windowSoftInputMode="adjustPan">
+      <intent-filter>  # DIFF-ANCHOR: a167e73d
+        <action android:name="com.android.webview.SHOW_DEV_UI"/>
+        <category android:name="android.intent.category.DEFAULT"/>
+      </intent-filter>  # DIFF-ANCHOR: a167e73d
+    </activity>  # DIFF-ANCHOR: a4438884
+    <activity  # DIFF-ANCHOR: aeabab17
+        android:name="org.chromium.android_webview.nonembedded.LicenseActivity"
+        android:exported="true"
+        android:label="@string/license_activity_title"
+        android:process=":webview_apk">
+      <intent-filter>  # DIFF-ANCHOR: 23298d3b
+        <action android:name="android.settings.WEBVIEW_LICENSE"/>
+        <category android:name="android.intent.category.DEFAULT"/>
+      </intent-filter>  # DIFF-ANCHOR: 23298d3b
+      <meta-data android:name="com.android.settings.PRIMARY_PROFILE_CONTROLLED" android:value="true"/>
+    </activity>  # DIFF-ANCHOR: aeabab17
+    <activity-alias  # DIFF-ANCHOR: da85c28e
+        android:name="org.chromium.android_webview.SafeModeState"
+        android:enabled="false"
+        android:process=":webview_apk"
+        android:targetActivity="org.chromium.android_webview.devui.MainActivity"
+        android:visibleToInstantApps="true">
+    </activity-alias>  # DIFF-ANCHOR: da85c28e
+    <activity-alias  # DIFF-ANCHOR: b7cc06e9
+        android:name="org.chromium.android_webview.devui.DeveloperModeState"
+        android:enabled="false"
+        android:process=":webview_apk"
+        android:targetActivity="org.chromium.android_webview.devui.MainActivity"
+        android:visibleToInstantApps="true">
+    </activity-alias>  # DIFF-ANCHOR: b7cc06e9
+    <activity-alias  # DIFF-ANCHOR: 32e34aba
+        android:name="org.chromium.android_webview.devui.MonochromeLauncherActivity"
+        android:enabled="false"
+        android:exported="true"
+        android:label="WebView DevTools"
+        android:targetActivity="org.chromium.android_webview.devui.MainActivity">
+      <intent-filter>  # DIFF-ANCHOR: a5330430
+        <action android:name="android.intent.action.MAIN"/>
+        <category android:name="android.intent.category.LAUNCHER"/>
+      </intent-filter>  # DIFF-ANCHOR: a5330430
+    </activity-alias>  # DIFF-ANCHOR: 32e34aba
+    <meta-data android:name="android.allow_multiple_resumed_activities" android:value="true"/>
+    <meta-data android:name="android.content.APP_RESTRICTIONS" android:resource="@xml/app_restrictions"/>
+    <meta-data android:name="com.android.webview.WebViewLibrary" android:value="libmonochrome_64.so"/>
+    <meta-data android:name="com.google.android.gms.cast.framework.OPTIONS_PROVIDER_CLASS_NAME" android:value="org.chromium.components.media_router.caf.CastOptionsProvider"/>
+    <meta-data android:name="com.google.android.gms.version" android:value="@integer/google_play_services_version"/>
+    <meta-data android:name="com.google.ar.core" android:value="optional"/>
+    <meta-data android:name="com.google.ar.core.load_32bit_so_from_split_module" android:value="optional"/>
+    <meta-data android:name="com.google.ar.core.min_apk_version" android:value="231450000"/>
+    <meta-data android:name="com.google.ar.core.session_settings" android:value="allow_front_facing_motion_tracking_6dof,"/>
+    <meta-data android:name="com.samsung.android.sdk.multiwindow.enable" android:value="true"/>
+    <meta-data android:name="com.samsung.android.sdk.multiwindow.penwindow.enable" android:value="true"/>
+    <meta-data android:name="org.chromium.content.browser.NUM_PRIVILEGED_SERVICES" android:value="5"/>
+    <meta-data android:name="org.chromium.content.browser.NUM_SANDBOXED_SERVICES" android:value="40"/>
+    <provider  # DIFF-ANCHOR: bc0a9a7a
+        android:name="com.google.firebase.provider.FirebaseInitProvider"
+        android:authorities="$PACKAGE.firebaseinitprovider"
+        android:directBootAware="true"
+        android:exported="false"
+        android:initOrder="100">
+    </provider>  # DIFF-ANCHOR: bc0a9a7a
+    <provider  # DIFF-ANCHOR: a5e78e63
+        android:name="org.chromium.android_webview.nonembedded.LicenseContentProvider"
+        android:authorities="$PACKAGE.LicenseContentProvider"
+        android:exported="true"
+        android:grantUriPermissions="true"
+        android:process=":webview_apk">
+    </provider>  # DIFF-ANCHOR: a5e78e63
+    <provider  # DIFF-ANCHOR: bfe37944
+        android:name="org.chromium.android_webview.services.DeveloperModeContentProvider"
+        android:authorities="$PACKAGE.DeveloperModeContentProvider"
+        android:exported="true"
+        android:process=":webview_service"
+        android:visibleToInstantApps="true">
+    </provider>  # DIFF-ANCHOR: bfe37944
+    <provider  # DIFF-ANCHOR: ecfff997
+        android:name="org.chromium.android_webview.services.SafeModeContentProvider"
+        android:authorities="$PACKAGE.SafeModeContentProvider"
+        android:exported="true"
+        android:process=":webview_service"
+        android:visibleToInstantApps="true">
+    </provider>  # DIFF-ANCHOR: ecfff997
+    <provider  # DIFF-ANCHOR: c41df08d
+        android:name="org.chromium.android_webview.services.SafeModeVariationsSeedContentProvider"
+        android:authorities="$PACKAGE.SafeModeVariationsSeedContentProvider"
+        android:exported="true"
+        android:process=":webview_service"
+        android:visibleToInstantApps="true">
+    </provider>  # DIFF-ANCHOR: c41df08d
+    <provider  # DIFF-ANCHOR: b73a881a
+        android:name="org.chromium.chrome.browser.download.DownloadFileProvider"
+        android:authorities="$PACKAGE.DownloadFileProvider"
+        android:exported="false"
+        android:grantUriPermissions="true">
+      <meta-data android:name="android.support.FILE_PROVIDER_PATHS" android:resource="@xml/file_paths"/>
+    </provider>  # DIFF-ANCHOR: b73a881a
+    <provider  # DIFF-ANCHOR: f1c2d7e1
+        android:name="org.chromium.chrome.browser.provider.ChromeBrowserProvider"
+        android:authorities="$PACKAGE.ChromeBrowserProvider;$PACKAGE.browser;$PACKAGE"
+        android:exported="true">
+      <path-permission android:path="/bookmarks/search_suggest_query" android:readPermission="android.permission.GLOBAL_SEARCH"/>
+    </provider>  # DIFF-ANCHOR: f1c2d7e1
+    <provider  # DIFF-ANCHOR: 67014fab
+        android:name="org.chromium.chrome.browser.util.ChromeFileProvider"
+        android:authorities="$PACKAGE.FileProvider"
+        android:exported="false"
+        android:grantUriPermissions="true">
+      <meta-data android:name="android.support.FILE_PROVIDER_PATHS" android:resource="@xml/file_paths"/>
+    </provider>  # DIFF-ANCHOR: 67014fab
+    <provider  # DIFF-ANCHOR: cb51666f
+        android:name="org.chromium.ui.dragdrop.DropDataContentProvider"
+        android:authorities="$PACKAGE.DropDataProvider"
+        android:exported="false"
+        android:grantUriPermissions="true">
+    </provider>  # DIFF-ANCHOR: cb51666f
+    <receiver  # DIFF-ANCHOR: 0a6f8fa5
+        android:name="com.google.android.gms.cast.framework.media.MediaIntentReceiver"
+        android:exported="false">
+    </receiver>  # DIFF-ANCHOR: 0a6f8fa5
+    <receiver  # DIFF-ANCHOR: f1c9c29d
+        android:name="com.google.firebase.iid.FirebaseInstanceIdReceiver"
+        android:exported="true"
+        android:permission="com.google.android.c2dm.permission.SEND">
+      <intent-filter>  # DIFF-ANCHOR: aae22013
+        <action android:name="com.google.android.c2dm.intent.RECEIVE"/>
+      </intent-filter>  # DIFF-ANCHOR: aae22013
+    </receiver>  # DIFF-ANCHOR: f1c9c29d
+    <service  # DIFF-ANCHOR: 749391ed
+        android:name="com.google.android.gms.cast.framework.ReconnectionService"
+        android:exported="false">
+    </service>  # DIFF-ANCHOR: 749391ed
+    <service  # DIFF-ANCHOR: 48ce9d28
+        android:name="com.google.android.gms.cast.framework.media.MediaNotificationService"
+        android:exported="false">
+    </service>  # DIFF-ANCHOR: 48ce9d28
+    <service  # DIFF-ANCHOR: 7e26656b
+        android:name="com.google.firebase.components.ComponentDiscoveryService"
+        android:directBootAware="true"
+        android:exported="false">
+      <meta-data android:name="com.google.firebase.components:com.google.firebase.dynamicloading.DynamicLoadingRegistrar" android:value="com.google.firebase.components.ComponentRegistrar"/>
+      <meta-data android:name="com.google.firebase.components:com.google.firebase.iid.Registrar" android:value="com.google.firebase.components.ComponentRegistrar"/>
+      <meta-data android:name="com.google.firebase.components:com.google.firebase.installations.FirebaseInstallationsRegistrar" android:value="com.google.firebase.components.ComponentRegistrar"/>
+      <meta-data android:name="com.google.firebase.components:com.google.firebase.messaging.FirebaseMessagingRegistrar" android:value="com.google.firebase.components.ComponentRegistrar"/>
+    </service>  # DIFF-ANCHOR: 7e26656b
+    <service  # DIFF-ANCHOR: 2295960c
+        android:name="com.google.firebase.messaging.FirebaseMessagingService"
+        android:directBootAware="true"
+        android:exported="false">
+      <intent-filter android:priority="-500">  # DIFF-ANCHOR: 69e70070
+        <action android:name="com.google.firebase.MESSAGING_EVENT"/>
+      </intent-filter>  # DIFF-ANCHOR: 69e70070
+    </service>  # DIFF-ANCHOR: 2295960c
+    <service  # DIFF-ANCHOR: 1d3bf514
+        android:name="org.chromium.android_webview.js_sandbox.service.JsSandboxService0"
+        android:exported="true"
+        android:externalService="true"
+        android:isolatedProcess="true"
+        android:process=":js_sandboxed_process0"
+        android:visibleToInstantApps="true">
+    </service>  # DIFF-ANCHOR: 1d3bf514
+    <service  # DIFF-ANCHOR: b9ec52c4
+        android:name="org.chromium.android_webview.nonembedded.AwComponentUpdateService"
+        android:exported="false"
+        android:permission="android.permission.BIND_JOB_SERVICE"
+        android:process=":webview_apk">
+    </service>  # DIFF-ANCHOR: b9ec52c4
+    <service  # DIFF-ANCHOR: 3cd6d713
+        android:name="org.chromium.android_webview.services.AwMinidumpUploadJobService"
+        android:exported="true"
+        android:permission="android.permission.BIND_JOB_SERVICE"
+        android:process=":webview_service">
+    </service>  # DIFF-ANCHOR: 3cd6d713
+    <service  # DIFF-ANCHOR: 65cddb26
+        android:name="org.chromium.android_webview.services.AwVariationsSeedFetcher"
+        android:exported="false"
+        android:permission="android.permission.BIND_JOB_SERVICE"
+        android:process=":webview_service">
+    </service>  # DIFF-ANCHOR: 65cddb26
+    <service  # DIFF-ANCHOR: c756cf8d
+        android:name="org.chromium.android_webview.services.ComponentsProviderService"
+        android:exported="true"
+        android:process=":webview_service"
+        android:visibleToInstantApps="true">
+    </service>  # DIFF-ANCHOR: c756cf8d
+    <service  # DIFF-ANCHOR: 5cda9608
+        android:name="org.chromium.android_webview.services.CrashReceiverService"
+        android:exported="true"
+        android:process=":webview_service">
+    </service>  # DIFF-ANCHOR: 5cda9608
+    <service  # DIFF-ANCHOR: adce9ea1
+        android:name="org.chromium.android_webview.services.DeveloperUiService"
+        android:exported="true"
+        android:foregroundServiceType="specialUse"
+        android:process=":webview_service">
+      <property android:name="android.app.PROPERTY_SPECIAL_USE_FGS_SUBTYPE" android:value="debugging"/>
+    </service>  # DIFF-ANCHOR: adce9ea1
+    <service  # DIFF-ANCHOR: eecf2fee
+        android:name="org.chromium.android_webview.services.MetricsBridgeService"
+        android:exported="true"
+        android:process=":webview_service"
+        android:visibleToInstantApps="true">
+    </service>  # DIFF-ANCHOR: eecf2fee
+    <service  # DIFF-ANCHOR: bda8b561
+        android:name="org.chromium.android_webview.services.MetricsUploadService"
+        android:exported="true"
+        android:process=":webview_service"
+        android:visibleToInstantApps="true">
+    </service>  # DIFF-ANCHOR: bda8b561
+    <service  # DIFF-ANCHOR: 47046f1b
+        android:name="org.chromium.android_webview.services.SafeModeService"
+        android:exported="true"
+        android:process=":webview_service">
+    </service>  # DIFF-ANCHOR: 47046f1b
+    <service  # DIFF-ANCHOR: c52936d7
+        android:name="org.chromium.android_webview.services.StartupFeatureMetadataHolder"
+        android:enabled="false"
+        android:exported="true">
+      <meta-data android:name="STARTUP_FEATURE_SET_DATA_DIRECTORY_SUFFIX" android:value="true"/>
+      <meta-data android:name="STARTUP_FEATURE_SET_DIRECTORY_BASE_PATH" android:value="true"/>
+    </service>  # DIFF-ANCHOR: c52936d7
+    <service  # DIFF-ANCHOR: dc926e35
+        android:name="org.chromium.android_webview.services.VariationsSeedServer"
+        android:exported="true"
+        android:process=":webview_service">
+    </service>  # DIFF-ANCHOR: dc926e35
+    <service  # DIFF-ANCHOR: 0c6c4fd9
+        android:name="org.chromium.content.app.PrivilegedProcessService0"
+        android:exported="false"
+        android:isolatedProcess="false"
+        android:permission="$PACKAGE.permission.CHILD_SERVICE"
+        android:process=":privileged_process0">
+    </service>  # DIFF-ANCHOR: 0c6c4fd9
+    <service  # DIFF-ANCHOR: 6f89af32
+        android:name="org.chromium.content.app.PrivilegedProcessService1"
+        android:exported="false"
+        android:isolatedProcess="false"
+        android:permission="$PACKAGE.permission.CHILD_SERVICE"
+        android:process=":privileged_process1">
+    </service>  # DIFF-ANCHOR: 6f89af32
+    <service  # DIFF-ANCHOR: 40e0d738
+        android:name="org.chromium.content.app.PrivilegedProcessService2"
+        android:exported="false"
+        android:isolatedProcess="false"
+        android:permission="$PACKAGE.permission.CHILD_SERVICE"
+        android:process=":privileged_process2">
+    </service>  # DIFF-ANCHOR: 40e0d738
+    <service  # DIFF-ANCHOR: b197517d
+        android:name="org.chromium.content.app.PrivilegedProcessService3"
+        android:exported="false"
+        android:isolatedProcess="false"
+        android:permission="$PACKAGE.permission.CHILD_SERVICE"
+        android:process=":privileged_process3">
+    </service>  # DIFF-ANCHOR: b197517d
+    <service  # DIFF-ANCHOR: 52303702
+        android:name="org.chromium.content.app.PrivilegedProcessService4"
+        android:exported="false"
+        android:isolatedProcess="false"
+        android:permission="$PACKAGE.permission.CHILD_SERVICE"
+        android:process=":privileged_process4">
+    </service>  # DIFF-ANCHOR: 52303702
+    <service  # DIFF-ANCHOR: b1e3e8bd
+        android:name="org.chromium.content.app.SandboxedProcessService0"
+        android:exported="true"
+        android:externalService="true"
+        android:isolatedProcess="true"
+        android:permission="$PACKAGE.permission.CHILD_SERVICE"
+        android:process=":sandboxed_process0"
+        android:useAppZygote="true"
+        android:visibleToInstantApps="true">
+    </service>  # DIFF-ANCHOR: b1e3e8bd
+    <service  # DIFF-ANCHOR: 76d1ccf8
+        android:name="org.chromium.content.app.SandboxedProcessService1"
+        android:exported="true"
+        android:externalService="true"
+        android:isolatedProcess="true"
+        android:permission="$PACKAGE.permission.CHILD_SERVICE"
+        android:process=":sandboxed_process1"
+        android:visibleToInstantApps="true">
+    </service>  # DIFF-ANCHOR: 76d1ccf8
+    <service  # DIFF-ANCHOR: 38b95266
+        android:name="org.chromium.content.app.SandboxedProcessService10"
+        android:exported="true"
+        android:externalService="true"
+        android:isolatedProcess="true"
+        android:permission="$PACKAGE.permission.CHILD_SERVICE"
+        android:process=":sandboxed_process10"
+        android:visibleToInstantApps="true">
+    </service>  # DIFF-ANCHOR: 38b95266
+    <service  # DIFF-ANCHOR: e4a2e4a2
+        android:name="org.chromium.content.app.SandboxedProcessService11"
+        android:exported="true"
+        android:externalService="true"
+        android:isolatedProcess="true"
+        android:permission="$PACKAGE.permission.CHILD_SERVICE"
+        android:process=":sandboxed_process11"
+        android:visibleToInstantApps="true">
+    </service>  # DIFF-ANCHOR: e4a2e4a2
+    <service  # DIFF-ANCHOR: d9b2ffba
+        android:name="org.chromium.content.app.SandboxedProcessService12"
+        android:exported="true"
+        android:externalService="true"
+        android:isolatedProcess="true"
+        android:permission="$PACKAGE.permission.CHILD_SERVICE"
+        android:process=":sandboxed_process12"
+        android:visibleToInstantApps="true">
+    </service>  # DIFF-ANCHOR: d9b2ffba
+    <service  # DIFF-ANCHOR: b41bb17d
+        android:name="org.chromium.content.app.SandboxedProcessService13"
+        android:exported="true"
+        android:externalService="true"
+        android:isolatedProcess="true"
+        android:permission="$PACKAGE.permission.CHILD_SERVICE"
+        android:process=":sandboxed_process13"
+        android:visibleToInstantApps="true">
+    </service>  # DIFF-ANCHOR: b41bb17d
+    <service  # DIFF-ANCHOR: aec0ea21
+        android:name="org.chromium.content.app.SandboxedProcessService14"
+        android:exported="true"
+        android:externalService="true"
+        android:isolatedProcess="true"
+        android:permission="$PACKAGE.permission.CHILD_SERVICE"
+        android:process=":sandboxed_process14"
+        android:visibleToInstantApps="true">
+    </service>  # DIFF-ANCHOR: aec0ea21
+    <service  # DIFF-ANCHOR: cf88a5e5
+        android:name="org.chromium.content.app.SandboxedProcessService15"
+        android:exported="true"
+        android:externalService="true"
+        android:isolatedProcess="true"
+        android:permission="$PACKAGE.permission.CHILD_SERVICE"
+        android:process=":sandboxed_process15"
+        android:visibleToInstantApps="true">
+    </service>  # DIFF-ANCHOR: cf88a5e5
+    <service  # DIFF-ANCHOR: 7d85889d
+        android:name="org.chromium.content.app.SandboxedProcessService16"
+        android:exported="true"
+        android:externalService="true"
+        android:isolatedProcess="true"
+        android:permission="$PACKAGE.permission.CHILD_SERVICE"
+        android:process=":sandboxed_process16"
+        android:visibleToInstantApps="true">
+    </service>  # DIFF-ANCHOR: 7d85889d
+    <service  # DIFF-ANCHOR: dae26ed4
+        android:name="org.chromium.content.app.SandboxedProcessService17"
+        android:exported="true"
+        android:externalService="true"
+        android:isolatedProcess="true"
+        android:permission="$PACKAGE.permission.CHILD_SERVICE"
+        android:process=":sandboxed_process17"
+        android:visibleToInstantApps="true">
+    </service>  # DIFF-ANCHOR: dae26ed4
+    <service  # DIFF-ANCHOR: 2c6cf029
+        android:name="org.chromium.content.app.SandboxedProcessService18"
+        android:exported="true"
+        android:externalService="true"
+        android:isolatedProcess="true"
+        android:permission="$PACKAGE.permission.CHILD_SERVICE"
+        android:process=":sandboxed_process18"
+        android:visibleToInstantApps="true">
+    </service>  # DIFF-ANCHOR: 2c6cf029
+    <service  # DIFF-ANCHOR: 1d2f0988
+        android:name="org.chromium.content.app.SandboxedProcessService19"
+        android:exported="true"
+        android:externalService="true"
+        android:isolatedProcess="true"
+        android:permission="$PACKAGE.permission.CHILD_SERVICE"
+        android:process=":sandboxed_process19"
+        android:visibleToInstantApps="true">
+    </service>  # DIFF-ANCHOR: 1d2f0988
+    <service  # DIFF-ANCHOR: 4a39041b
+        android:name="org.chromium.content.app.SandboxedProcessService2"
+        android:exported="true"
+        android:externalService="true"
+        android:isolatedProcess="true"
+        android:permission="$PACKAGE.permission.CHILD_SERVICE"
+        android:process=":sandboxed_process2"
+        android:visibleToInstantApps="true">
+    </service>  # DIFF-ANCHOR: 4a39041b
+    <service  # DIFF-ANCHOR: 073533bf
+        android:name="org.chromium.content.app.SandboxedProcessService20"
+        android:exported="true"
+        android:externalService="true"
+        android:isolatedProcess="true"
+        android:permission="$PACKAGE.permission.CHILD_SERVICE"
+        android:process=":sandboxed_process20"
+        android:visibleToInstantApps="true">
+    </service>  # DIFF-ANCHOR: 073533bf
+    <service  # DIFF-ANCHOR: d24da41d
+        android:name="org.chromium.content.app.SandboxedProcessService21"
+        android:exported="true"
+        android:externalService="true"
+        android:isolatedProcess="true"
+        android:permission="$PACKAGE.permission.CHILD_SERVICE"
+        android:process=":sandboxed_process21"
+        android:visibleToInstantApps="true">
+    </service>  # DIFF-ANCHOR: d24da41d
+    <service  # DIFF-ANCHOR: 594d8b32
+        android:name="org.chromium.content.app.SandboxedProcessService22"
+        android:exported="true"
+        android:externalService="true"
+        android:isolatedProcess="true"
+        android:permission="$PACKAGE.permission.CHILD_SERVICE"
+        android:process=":sandboxed_process22"
+        android:visibleToInstantApps="true">
+    </service>  # DIFF-ANCHOR: 594d8b32
+    <service  # DIFF-ANCHOR: 5528c0c3
+        android:name="org.chromium.content.app.SandboxedProcessService23"
+        android:exported="true"
+        android:externalService="true"
+        android:isolatedProcess="true"
+        android:permission="$PACKAGE.permission.CHILD_SERVICE"
+        android:process=":sandboxed_process23"
+        android:visibleToInstantApps="true">
+    </service>  # DIFF-ANCHOR: 5528c0c3
+    <service  # DIFF-ANCHOR: b7ab2ba3
+        android:name="org.chromium.content.app.SandboxedProcessService24"
+        android:exported="true"
+        android:externalService="true"
+        android:isolatedProcess="true"
+        android:permission="$PACKAGE.permission.CHILD_SERVICE"
+        android:process=":sandboxed_process24"
+        android:visibleToInstantApps="true">
+    </service>  # DIFF-ANCHOR: b7ab2ba3
+    <service  # DIFF-ANCHOR: cec6cb64
+        android:name="org.chromium.content.app.SandboxedProcessService25"
+        android:exported="true"
+        android:externalService="true"
+        android:isolatedProcess="true"
+        android:permission="$PACKAGE.permission.CHILD_SERVICE"
+        android:process=":sandboxed_process25"
+        android:visibleToInstantApps="true">
+    </service>  # DIFF-ANCHOR: cec6cb64
+    <service  # DIFF-ANCHOR: 5b4a00fe
+        android:name="org.chromium.content.app.SandboxedProcessService26"
+        android:exported="true"
+        android:externalService="true"
+        android:isolatedProcess="true"
+        android:permission="$PACKAGE.permission.CHILD_SERVICE"
+        android:process=":sandboxed_process26"
+        android:visibleToInstantApps="true">
+    </service>  # DIFF-ANCHOR: 5b4a00fe
+    <service  # DIFF-ANCHOR: ad49d203
+        android:name="org.chromium.content.app.SandboxedProcessService27"
+        android:exported="true"
+        android:externalService="true"
+        android:isolatedProcess="true"
+        android:permission="$PACKAGE.permission.CHILD_SERVICE"
+        android:process=":sandboxed_process27"
+        android:visibleToInstantApps="true">
+    </service>  # DIFF-ANCHOR: ad49d203
+    <service  # DIFF-ANCHOR: 573298e9
+        android:name="org.chromium.content.app.SandboxedProcessService28"
+        android:exported="true"
+        android:externalService="true"
+        android:isolatedProcess="true"
+        android:permission="$PACKAGE.permission.CHILD_SERVICE"
+        android:process=":sandboxed_process28"
+        android:visibleToInstantApps="true">
+    </service>  # DIFF-ANCHOR: 573298e9
+    <service  # DIFF-ANCHOR: 79897b32
+        android:name="org.chromium.content.app.SandboxedProcessService29"
+        android:exported="true"
+        android:externalService="true"
+        android:isolatedProcess="true"
+        android:permission="$PACKAGE.permission.CHILD_SERVICE"
+        android:process=":sandboxed_process29"
+        android:visibleToInstantApps="true">
+    </service>  # DIFF-ANCHOR: 79897b32
+    <service  # DIFF-ANCHOR: 84335864
+        android:name="org.chromium.content.app.SandboxedProcessService3"
+        android:exported="true"
+        android:externalService="true"
+        android:isolatedProcess="true"
+        android:permission="$PACKAGE.permission.CHILD_SERVICE"
+        android:process=":sandboxed_process3"
+        android:visibleToInstantApps="true">
+    </service>  # DIFF-ANCHOR: 84335864
+    <service  # DIFF-ANCHOR: c4bd371e
+        android:name="org.chromium.content.app.SandboxedProcessService30"
+        android:exported="true"
+        android:externalService="true"
+        android:isolatedProcess="true"
+        android:permission="$PACKAGE.permission.CHILD_SERVICE"
+        android:process=":sandboxed_process30"
+        android:visibleToInstantApps="true">
+    </service>  # DIFF-ANCHOR: c4bd371e
+    <service  # DIFF-ANCHOR: 394a9fd0
+        android:name="org.chromium.content.app.SandboxedProcessService31"
+        android:exported="true"
+        android:externalService="true"
+        android:isolatedProcess="true"
+        android:permission="$PACKAGE.permission.CHILD_SERVICE"
+        android:process=":sandboxed_process31"
+        android:visibleToInstantApps="true">
+    </service>  # DIFF-ANCHOR: 394a9fd0
+    <service  # DIFF-ANCHOR: b811afb8
+        android:name="org.chromium.content.app.SandboxedProcessService32"
+        android:exported="true"
+        android:externalService="true"
+        android:isolatedProcess="true"
+        android:permission="$PACKAGE.permission.CHILD_SERVICE"
+        android:process=":sandboxed_process32"
+        android:visibleToInstantApps="true">
+    </service>  # DIFF-ANCHOR: b811afb8
+    <service  # DIFF-ANCHOR: 2811ddd3
+        android:name="org.chromium.content.app.SandboxedProcessService33"
+        android:exported="true"
+        android:externalService="true"
+        android:isolatedProcess="true"
+        android:permission="$PACKAGE.permission.CHILD_SERVICE"
+        android:process=":sandboxed_process33"
+        android:visibleToInstantApps="true">
+    </service>  # DIFF-ANCHOR: 2811ddd3
+    <service  # DIFF-ANCHOR: 73ae1688
+        android:name="org.chromium.content.app.SandboxedProcessService34"
+        android:exported="true"
+        android:externalService="true"
+        android:isolatedProcess="true"
+        android:permission="$PACKAGE.permission.CHILD_SERVICE"
+        android:process=":sandboxed_process34"
+        android:visibleToInstantApps="true">
+    </service>  # DIFF-ANCHOR: 73ae1688
+    <service  # DIFF-ANCHOR: c476f324
+        android:name="org.chromium.content.app.SandboxedProcessService35"
+        android:exported="true"
+        android:externalService="true"
+        android:isolatedProcess="true"
+        android:permission="$PACKAGE.permission.CHILD_SERVICE"
+        android:process=":sandboxed_process35"
+        android:visibleToInstantApps="true">
+    </service>  # DIFF-ANCHOR: c476f324
+    <service  # DIFF-ANCHOR: 75d5304b
+        android:name="org.chromium.content.app.SandboxedProcessService36"
+        android:exported="true"
+        android:externalService="true"
+        android:isolatedProcess="true"
+        android:permission="$PACKAGE.permission.CHILD_SERVICE"
+        android:process=":sandboxed_process36"
+        android:visibleToInstantApps="true">
+    </service>  # DIFF-ANCHOR: 75d5304b
+    <service  # DIFF-ANCHOR: dc6d0617
+        android:name="org.chromium.content.app.SandboxedProcessService37"
+        android:exported="true"
+        android:externalService="true"
+        android:isolatedProcess="true"
+        android:permission="$PACKAGE.permission.CHILD_SERVICE"
+        android:process=":sandboxed_process37"
+        android:visibleToInstantApps="true">
+    </service>  # DIFF-ANCHOR: dc6d0617
+    <service  # DIFF-ANCHOR: e31efe49
+        android:name="org.chromium.content.app.SandboxedProcessService38"
+        android:exported="true"
+        android:externalService="true"
+        android:isolatedProcess="true"
+        android:permission="$PACKAGE.permission.CHILD_SERVICE"
+        android:process=":sandboxed_process38"
+        android:visibleToInstantApps="true">
+    </service>  # DIFF-ANCHOR: e31efe49
+    <service  # DIFF-ANCHOR: 5736507e
+        android:name="org.chromium.content.app.SandboxedProcessService39"
+        android:exported="true"
+        android:externalService="true"
+        android:isolatedProcess="true"
+        android:permission="$PACKAGE.permission.CHILD_SERVICE"
+        android:process=":sandboxed_process39"
+        android:visibleToInstantApps="true">
+    </service>  # DIFF-ANCHOR: 5736507e
+    <service  # DIFF-ANCHOR: a161be24
+        android:name="org.chromium.content.app.SandboxedProcessService4"
+        android:exported="true"
+        android:externalService="true"
+        android:isolatedProcess="true"
+        android:permission="$PACKAGE.permission.CHILD_SERVICE"
+        android:process=":sandboxed_process4"
+        android:visibleToInstantApps="true">
+    </service>  # DIFF-ANCHOR: a161be24
+    <service  # DIFF-ANCHOR: 8e591688
+        android:name="org.chromium.content.app.SandboxedProcessService5"
+        android:exported="true"
+        android:externalService="true"
+        android:isolatedProcess="true"
+        android:permission="$PACKAGE.permission.CHILD_SERVICE"
+        android:process=":sandboxed_process5"
+        android:visibleToInstantApps="true">
+    </service>  # DIFF-ANCHOR: 8e591688
+    <service  # DIFF-ANCHOR: 705141d0
+        android:name="org.chromium.content.app.SandboxedProcessService6"
+        android:exported="true"
+        android:externalService="true"
+        android:isolatedProcess="true"
+        android:permission="$PACKAGE.permission.CHILD_SERVICE"
+        android:process=":sandboxed_process6"
+        android:visibleToInstantApps="true">
+    </service>  # DIFF-ANCHOR: 705141d0
+    <service  # DIFF-ANCHOR: 38ed2189
+        android:name="org.chromium.content.app.SandboxedProcessService7"
+        android:exported="true"
+        android:externalService="true"
+        android:isolatedProcess="true"
+        android:permission="$PACKAGE.permission.CHILD_SERVICE"
+        android:process=":sandboxed_process7"
+        android:visibleToInstantApps="true">
+    </service>  # DIFF-ANCHOR: 38ed2189
+    <service  # DIFF-ANCHOR: aa417956
+        android:name="org.chromium.content.app.SandboxedProcessService8"
+        android:exported="true"
+        android:externalService="true"
+        android:isolatedProcess="true"
+        android:permission="$PACKAGE.permission.CHILD_SERVICE"
+        android:process=":sandboxed_process8"
+        android:visibleToInstantApps="true">
+    </service>  # DIFF-ANCHOR: aa417956
+    <service  # DIFF-ANCHOR: e2f3bbbd
+        android:name="org.chromium.content.app.SandboxedProcessService9"
+        android:exported="true"
+        android:externalService="true"
+        android:isolatedProcess="true"
+        android:permission="$PACKAGE.permission.CHILD_SERVICE"
+        android:process=":sandboxed_process9"
+        android:visibleToInstantApps="true">
+    </service>  # DIFF-ANCHOR: e2f3bbbd
+    <uses-library android:name="android.ext.adservices" android:required="false"/>
+  </application>
+</manifest>
diff --git a/chrome/android/expectations/monochrome_64_32_public_bundle__cablev2_authenticator.AndroidManifest.expected b/chrome/android/expectations/monochrome_64_32_public_bundle__cablev2_authenticator.AndroidManifest.expected
new file mode 100644
index 0000000..f82fd8f
--- /dev/null
+++ b/chrome/android/expectations/monochrome_64_32_public_bundle__cablev2_authenticator.AndroidManifest.expected
@@ -0,0 +1,17 @@
+<?xml version="1.0" ?>
+<manifest
+    xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:dist="http://schemas.android.com/apk/distribution"
+    featureSplit="cablev2_authenticator"
+    package="org.chromium.chrome.stable"
+    platformBuildVersionCode="34"
+    platformBuildVersionName="14"
+    android:versionCode="OFFSET=22"
+    android:versionName="#.#.#.#">
+  <dist:module dist:onDemand="false" dist:title="@string/cablev2_authenticator_module_title">  # DIFF-ANCHOR: 4362cefb
+    <dist:fusing dist:include="true"/>
+  </dist:module>  # DIFF-ANCHOR: 4362cefb
+  <uses-sdk android:minSdkVersion="26" android:targetSdkVersion="34"/>
+  <uses-split android:name="chrome"/>
+  <application/>
+</manifest>
diff --git a/chrome/android/expectations/monochrome_64_32_public_bundle__chrome.AndroidManifest.expected b/chrome/android/expectations/monochrome_64_32_public_bundle__chrome.AndroidManifest.expected
new file mode 100644
index 0000000..baaaa1b
--- /dev/null
+++ b/chrome/android/expectations/monochrome_64_32_public_bundle__chrome.AndroidManifest.expected
@@ -0,0 +1,1015 @@
+<?xml version="1.0" ?>
+<manifest
+    xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:dist="http://schemas.android.com/apk/distribution"
+    featureSplit="chrome"
+    package="org.chromium.chrome.stable"
+    platformBuildVersionCode="34"
+    platformBuildVersionName="14"
+    android:versionCode="OFFSET=22"
+    android:versionName="#.#.#.#">
+  <dist:module dist:onDemand="false">  # DIFF-ANCHOR: 2805007f
+    <dist:fusing dist:include="true"/>
+  </dist:module>  # DIFF-ANCHOR: 2805007f
+  <uses-sdk android:minSdkVersion="26" android:targetSdkVersion="34"/>
+  <application>
+    <activity  # DIFF-ANCHOR: 28dc9019
+        android:name="com.google.ar.core.InstallActivity"
+        android:configChanges="keyboardHidden|orientation|screenSize"
+        android:excludeFromRecents="true"
+        android:exported="false"
+        android:launchMode="singleTop"
+        android:theme="@android:style/Theme.Material.Light.Dialog.Alert">
+    </activity>  # DIFF-ANCHOR: 28dc9019
+    <activity  # DIFF-ANCHOR: ce279235
+        android:name="com.google.cardboard.sdk.QrCodeCaptureActivity"
+        android:exported="false"
+        android:label="@string/title_activity_qr_code_capture"
+        android:theme="@style/Theme.AppCompat.NoActionBar">
+    </activity>  # DIFF-ANCHOR: ce279235
+    <activity  # DIFF-ANCHOR: 93d41352
+        android:name="org.chromium.chrome.browser.BrowserRestartActivity"
+        android:excludeFromRecents="true"
+        android:exported="false"
+        android:launchMode="singleInstance"
+        android:process=":browser_restart_process"
+        android:theme="@style/Theme.BrowserUI.Translucent.NoTitleBar">
+    </activity>  # DIFF-ANCHOR: 93d41352
+    <activity  # DIFF-ANCHOR: 61b2c776
+        android:name="org.chromium.chrome.browser.ChromeTabbedActivity"
+        android:configChanges="orientation|keyboardHidden|keyboard|screenSize|mcc|mnc|screenLayout|smallestScreenSize|uiMode|navigation"
+        android:exported="true"
+        android:hardwareAccelerated="false"
+        android:launchMode="singleTask"
+        android:resizeableActivity="true"
+        android:supportsPictureInPicture="true"
+        android:theme="@style/Theme.Chromium.TabbedMode"
+        android:windowSoftInputMode="adjustResize">
+      <intent-filter>  # DIFF-ANCHOR: dea53031
+        <action android:name="org.chromium.chrome.browser.dummy.action"/>
+        <category android:name="com.google.intent.category.CARDBOARD"/>
+        <category android:name="com.google.intent.category.DAYDREAM"/>
+      </intent-filter>  # DIFF-ANCHOR: dea53031
+      <meta-data android:name="android.activity.launch_mode" android:value="singleInstancePerTask"/>
+    </activity>  # DIFF-ANCHOR: 61b2c776
+    <activity  # DIFF-ANCHOR: 610e8ccf
+        android:name="org.chromium.chrome.browser.ChromeTabbedActivity2"
+        android:configChanges="orientation|keyboardHidden|keyboard|screenSize|mcc|mnc|screenLayout|smallestScreenSize|uiMode|navigation"
+        android:exported="false"
+        android:hardwareAccelerated="false"
+        android:launchMode="singleTask"
+        android:resizeableActivity="true"
+        android:supportsPictureInPicture="true"
+        android:taskAffinity="$PACKAGE.ChromeTabbedActivity2"
+        android:theme="@style/Theme.Chromium.TabbedMode"
+        android:windowSoftInputMode="adjustResize">
+      <intent-filter>  # DIFF-ANCHOR: dea53031
+        <action android:name="org.chromium.chrome.browser.dummy.action"/>
+        <category android:name="com.google.intent.category.CARDBOARD"/>
+        <category android:name="com.google.intent.category.DAYDREAM"/>
+      </intent-filter>  # DIFF-ANCHOR: dea53031
+    </activity>  # DIFF-ANCHOR: 610e8ccf
+    <activity  # DIFF-ANCHOR: b5c66095
+        android:name="org.chromium.chrome.browser.DragAndDropLauncherActivity"
+        android:excludeFromRecents="true"
+        android:exported="false"
+        android:launchMode="singleInstancePerTask"
+        android:taskAffinity=""
+        android:theme="@style/LauncherTheme">
+      <intent-filter>  # DIFF-ANCHOR: f18dfa5a
+        <action android:name="org.chromium.chrome.browser.dragdrop.action.VIEW"/>
+        <category android:name="android.intent.category.BROWSABLE"/>
+        <data android:scheme="http"/>
+        <data android:scheme="https"/>
+      </intent-filter>  # DIFF-ANCHOR: f18dfa5a
+    </activity>  # DIFF-ANCHOR: b5c66095
+    <activity  # DIFF-ANCHOR: 76686af9
+        android:name="org.chromium.chrome.browser.LauncherShortcutActivity"
+        android:excludeFromRecents="true"
+        android:exported="false"
+        android:taskAffinity=""
+        android:theme="@style/Theme.BrowserUI.NoDisplay">
+    </activity>  # DIFF-ANCHOR: 76686af9
+    <activity  # DIFF-ANCHOR: dc170161
+        android:name="org.chromium.chrome.browser.app.bookmarks.BookmarkActivity"
+        android:configChanges="orientation|keyboardHidden|keyboard|screenSize|mcc|mnc|screenLayout|smallestScreenSize"
+        android:exported="false"
+        android:theme="@style/Theme.Chromium.Activity.Fullscreen"
+        android:windowSoftInputMode="stateAlwaysHidden|adjustResize">
+    </activity>  # DIFF-ANCHOR: dc170161
+    <activity  # DIFF-ANCHOR: d8508de6
+        android:name="org.chromium.chrome.browser.app.bookmarks.BookmarkAddEditFolderActivity"
+        android:configChanges="orientation|keyboardHidden|keyboard|screenSize|mcc|mnc|screenLayout|smallestScreenSize"
+        android:exported="false"
+        android:theme="@style/Theme.Chromium.DialogWhenLarge">
+    </activity>  # DIFF-ANCHOR: d8508de6
+    <activity  # DIFF-ANCHOR: 766e66bd
+        android:name="org.chromium.chrome.browser.app.bookmarks.BookmarkEditActivity"
+        android:configChanges="orientation|keyboardHidden|keyboard|screenSize|mcc|mnc|screenLayout|smallestScreenSize"
+        android:exported="false"
+        android:label="@string/edit_bookmark"
+        android:theme="@style/Theme.Chromium.DialogWhenLarge"
+        android:windowSoftInputMode="stateHidden">
+    </activity>  # DIFF-ANCHOR: 766e66bd
+    <activity  # DIFF-ANCHOR: 002f9e99
+        android:name="org.chromium.chrome.browser.app.bookmarks.BookmarkFolderPickerActivity"
+        android:configChanges="orientation|keyboardHidden|keyboard|screenSize|mcc|mnc|screenLayout|smallestScreenSize"
+        android:exported="false"
+        android:label="@string/bookmark_choose_folder"
+        android:theme="@style/Theme.Chromium.DialogWhenLarge"
+        android:windowSoftInputMode="stateAlwaysHidden">
+    </activity>  # DIFF-ANCHOR: 002f9e99
+    <activity  # DIFF-ANCHOR: 8f8d0c81
+        android:name="org.chromium.chrome.browser.app.bookmarks.BookmarkFolderSelectActivity"
+        android:configChanges="orientation|keyboardHidden|keyboard|screenSize|mcc|mnc|screenLayout|smallestScreenSize"
+        android:exported="false"
+        android:label="@string/bookmark_choose_folder"
+        android:theme="@style/Theme.Chromium.DialogWhenLarge"
+        android:windowSoftInputMode="stateAlwaysHidden">
+    </activity>  # DIFF-ANCHOR: 8f8d0c81
+    <activity  # DIFF-ANCHOR: 9bfe10ab
+        android:name="org.chromium.chrome.browser.app.creator.CreatorActivity"
+        android:configChanges="orientation|keyboardHidden|keyboard|screenSize|mcc|mnc|screenLayout|smallestScreenSize"
+        android:exported="false"
+        android:theme="@style/Theme.Chromium.Activity.Fullscreen"
+        android:windowSoftInputMode="stateAlwaysHidden|adjustResize">
+    </activity>  # DIFF-ANCHOR: 9bfe10ab
+    <activity  # DIFF-ANCHOR: 8f3f76d9
+        android:name="org.chromium.chrome.browser.app.download.home.DownloadActivity"
+        android:configChanges="orientation|keyboardHidden|keyboard|screenSize|mcc|mnc|screenLayout|smallestScreenSize"
+        android:exported="false"
+        android:theme="@style/Theme.Chromium.Activity.Fullscreen"
+        android:windowSoftInputMode="stateAlwaysHidden|adjustResize">
+    </activity>  # DIFF-ANCHOR: 8f3f76d9
+    <activity  # DIFF-ANCHOR: 3d32d400
+        android:name="org.chromium.chrome.browser.app.feed.feedmanagement.FeedManagementActivity"
+        android:configChanges="orientation|keyboardHidden|keyboard|screenSize|mcc|mnc|screenLayout|smallestScreenSize"
+        android:exported="false"
+        android:theme="@style/Theme.Chromium.Settings"
+        android:windowSoftInputMode="stateAlwaysHidden|adjustResize">
+    </activity>  # DIFF-ANCHOR: 3d32d400
+    <activity  # DIFF-ANCHOR: 98c8c9be
+        android:name="org.chromium.chrome.browser.app.feed.followmanagement.FollowManagementActivity"
+        android:configChanges="orientation|keyboardHidden|keyboard|screenSize|mcc|mnc|screenLayout|smallestScreenSize"
+        android:exported="false"
+        android:theme="@style/Theme.Chromium.Settings"
+        android:windowSoftInputMode="stateAlwaysHidden|adjustResize">
+      <intent-filter>  # DIFF-ANCHOR: 0bc48fdf
+        <action android:name="org.chromium.chrome.browser.app.feed.followmanagement.FollowManagementActivity.ACTIVATE"/>
+        <category android:name="android.intent.category.DEFAULT"/>
+      </intent-filter>  # DIFF-ANCHOR: 0bc48fdf
+    </activity>  # DIFF-ANCHOR: 98c8c9be
+    <activity  # DIFF-ANCHOR: 50c7105b
+        android:name="org.chromium.chrome.browser.app.reengagement.ReengagementActivity"
+        android:excludeFromRecents="true"
+        android:exported="false"
+        android:taskAffinity=""
+        android:theme="@style/Theme.BrowserUI.Translucent">
+    </activity>  # DIFF-ANCHOR: 50c7105b
+    <activity  # DIFF-ANCHOR: be2dce69
+        android:name="org.chromium.chrome.browser.bookmarkswidget.BookmarkWidgetProxy"
+        android:excludeFromRecents="true"
+        android:exported="false"
+        android:noHistory="true"
+        android:taskAffinity=""
+        android:theme="@style/Theme.BrowserUI.NoDisplay">
+    </activity>  # DIFF-ANCHOR: be2dce69
+    <activity  # DIFF-ANCHOR: 209b5ded
+        android:name="org.chromium.chrome.browser.browserservices.ClearDataDialogActivity"
+        android:exported="false"
+        android:theme="@style/Theme.Chromium.ClearDataDialogActivity">
+    </activity>  # DIFF-ANCHOR: 209b5ded
+    <activity  # DIFF-ANCHOR: 2b0ee4cd
+        android:name="org.chromium.chrome.browser.browserservices.ManageTrustedWebActivityDataActivity"
+        android:exported="true"
+        android:theme="@style/Theme.Chromium.Activity.Fullscreen.Transparent">
+      <intent-filter>  # DIFF-ANCHOR: 38d9d906
+        <action android:name="android.support.customtabs.action.ACTION_MANAGE_TRUSTED_WEB_ACTIVITY_DATA"/>
+        <category android:name="android.intent.category.DEFAULT"/>
+        <data android:scheme="https"/>
+      </intent-filter>  # DIFF-ANCHOR: 38d9d906
+      <intent-filter>  # DIFF-ANCHOR: 38d9d906
+        <action android:name="android.support.customtabs.action.ACTION_MANAGE_TRUSTED_WEB_ACTIVITY_DATA"/>
+        <category android:name="android.intent.category.DEFAULT"/>
+      </intent-filter>  # DIFF-ANCHOR: 38d9d906
+    </activity>  # DIFF-ANCHOR: 2b0ee4cd
+    <activity  # DIFF-ANCHOR: 44266a6a
+        android:name="org.chromium.chrome.browser.customtabs.CustomTabActivity"
+        android:configChanges="orientation|keyboardHidden|keyboard|screenSize|mcc|mnc|screenLayout|smallestScreenSize|uiMode|navigation"
+        android:exported="false"
+        android:hardwareAccelerated="false"
+        android:resizeableActivity="true"
+        android:supportsPictureInPicture="true"
+        android:theme="@style/Theme.Chromium.Activity"
+        android:windowSoftInputMode="adjustResize">
+      <intent-filter>  # DIFF-ANCHOR: dea53031
+        <action android:name="org.chromium.chrome.browser.dummy.action"/>
+        <category android:name="com.google.intent.category.CARDBOARD"/>
+        <category android:name="com.google.intent.category.DAYDREAM"/>
+      </intent-filter>  # DIFF-ANCHOR: dea53031
+    </activity>  # DIFF-ANCHOR: 44266a6a
+    <activity  # DIFF-ANCHOR: 4d923622
+        android:name="org.chromium.chrome.browser.customtabs.TranslucentCustomTabActivity"
+        android:configChanges="orientation|keyboardHidden|keyboard|screenSize|mcc|mnc|screenLayout|smallestScreenSize|uiMode|navigation"
+        android:exported="false"
+        android:hardwareAccelerated="false"
+        android:resizeableActivity="true"
+        android:supportsPictureInPicture="true"
+        android:theme="@style/Theme.Chromium.Activity.FakeTranslucent"
+        android:windowSoftInputMode="adjustResize">
+      <intent-filter>  # DIFF-ANCHOR: dea53031
+        <action android:name="org.chromium.chrome.browser.dummy.action"/>
+        <category android:name="com.google.intent.category.CARDBOARD"/>
+        <category android:name="com.google.intent.category.DAYDREAM"/>
+      </intent-filter>  # DIFF-ANCHOR: dea53031
+    </activity>  # DIFF-ANCHOR: 4d923622
+    <activity  # DIFF-ANCHOR: 6ad7b5dd
+        android:name="org.chromium.chrome.browser.device_lock.DeviceLockActivity"
+        android:configChanges="orientation|keyboardHidden|keyboard|screenSize|mcc|mnc|screenLayout|smallestScreenSize"
+        android:exported="false"
+        android:theme="@style/Theme.Chromium.DialogWhenLarge">
+    </activity>  # DIFF-ANCHOR: 6ad7b5dd
+    <activity  # DIFF-ANCHOR: 1acdfd19
+        android:name="org.chromium.chrome.browser.document.ChromeLauncherActivity"
+        android:configChanges="orientation|keyboardHidden|keyboard|screenSize|mcc|mnc|screenLayout|smallestScreenSize|uiMode|density"
+        android:excludeFromRecents="true"
+        android:relinquishTaskIdentity="true"
+        android:taskAffinity=""
+        android:theme="@style/LauncherTheme">
+    </activity>  # DIFF-ANCHOR: 1acdfd19
+    <activity  # DIFF-ANCHOR: 2121eb0d
+        android:name="org.chromium.chrome.browser.firstrun.FirstRunActivity"
+        android:autoRemoveFromRecents="true"
+        android:configChanges="orientation|keyboardHidden|keyboard|screenSize|mcc|mnc|screenLayout|smallestScreenSize"
+        android:excludeFromRecents="true"
+        android:label="@string/fre_activity_label"
+        android:launchMode="singleTop"
+        android:theme="@style/Theme.Chromium.DialogWhenLarge"
+        android:windowSoftInputMode="stateHidden|adjustPan">
+    </activity>  # DIFF-ANCHOR: 2121eb0d
+    <activity  # DIFF-ANCHOR: 67932092
+        android:name="org.chromium.chrome.browser.firstrun.LightweightFirstRunActivity"
+        android:autoRemoveFromRecents="true"
+        android:configChanges="orientation|keyboardHidden|keyboard|screenSize|mcc|mnc|screenLayout|smallestScreenSize"
+        android:excludeFromRecents="true"
+        android:label="@string/fre_activity_label"
+        android:launchMode="singleInstance"
+        android:theme="@style/Theme.BrowserUI.AlertDialog.NoActionBar.DayNight"
+        android:windowSoftInputMode="stateHidden|adjustPan">
+    </activity>  # DIFF-ANCHOR: 67932092
+    <activity  # DIFF-ANCHOR: bb612a34
+        android:name="org.chromium.chrome.browser.firstrun.TabbedModeFirstRunActivity"
+        android:autoRemoveFromRecents="true"
+        android:configChanges="orientation|keyboardHidden|keyboard|screenSize|mcc|mnc|screenLayout|smallestScreenSize"
+        android:excludeFromRecents="true"
+        android:label="@string/fre_activity_label"
+        android:launchMode="singleTop"
+        android:theme="@style/Theme.Chromium.TabbedMode"
+        android:windowSoftInputMode="stateHidden|adjustPan">
+    </activity>  # DIFF-ANCHOR: bb612a34
+    <activity  # DIFF-ANCHOR: 05911131
+        android:name="org.chromium.chrome.browser.history.HistoryActivity"
+        android:configChanges="orientation|keyboardHidden|keyboard|screenSize|mcc|mnc|screenLayout|smallestScreenSize"
+        android:exported="false"
+        android:theme="@style/Theme.Chromium.Activity.Fullscreen"
+        android:windowSoftInputMode="stateAlwaysHidden|adjustResize">
+    </activity>  # DIFF-ANCHOR: 05911131
+    <activity  # DIFF-ANCHOR: b98302dc
+        android:name="org.chromium.chrome.browser.incognito.IncognitoTabLauncher"
+        android:enabled="false"
+        android:excludeFromRecents="true"
+        android:exported="true"
+        android:taskAffinity=""
+        android:theme="@style/Theme.BrowserUI.NoDisplay">
+      <intent-filter>  # DIFF-ANCHOR: 8f811d02
+        <action android:name="org.chromium.chrome.browser.incognito.OPEN_PRIVATE_TAB"/>
+        <category android:name="android.intent.category.DEFAULT"/>
+      </intent-filter>  # DIFF-ANCHOR: 8f811d02
+    </activity>  # DIFF-ANCHOR: b98302dc
+    <activity  # DIFF-ANCHOR: 060360d2
+        android:name="org.chromium.chrome.browser.init.LaunchFailedActivity"
+        android:excludeFromRecents="true"
+        android:exported="false"
+        android:launchMode="singleInstance"
+        android:process=":launch_failed"
+        android:theme="@style/Theme.BrowserUI.Translucent.NoTitleBar">
+    </activity>  # DIFF-ANCHOR: 060360d2
+    <activity  # DIFF-ANCHOR: ecd48344
+        android:name="org.chromium.chrome.browser.media.MediaLauncherActivity"
+        android:enabled="false"
+        android:excludeFromRecents="true"
+        android:exported="true"
+        android:theme="@style/Theme.BrowserUI.NoDisplay">
+      <intent-filter>  # DIFF-ANCHOR: 13c9b0a8
+        <action android:name="android.intent.action.VIEW"/>
+        <category android:name="android.intent.category.DEFAULT"/>
+        <data android:mimeType="image/*"/>
+        <data android:mimeType="video/*"/>
+        <data android:scheme="content"/>
+        <data android:scheme="file"/>
+      </intent-filter>  # DIFF-ANCHOR: 13c9b0a8
+    </activity>  # DIFF-ANCHOR: ecd48344
+    <activity  # DIFF-ANCHOR: d706d96e
+        android:name="org.chromium.chrome.browser.media.PictureInPictureActivity"
+        android:configChanges="screenSize|smallestScreenSize|screenLayout|orientation"
+        android:excludeFromRecents="true"
+        android:exported="false"
+        android:noHistory="true"
+        android:resizeableActivity="true"
+        android:supportsPictureInPicture="true"
+        android:theme="@style/Theme.Chromium.Activity">
+    </activity>  # DIFF-ANCHOR: d706d96e
+    <activity  # DIFF-ANCHOR: 9023f153
+        android:name="org.chromium.chrome.browser.multiwindow.MultiInstanceChromeTabbedActivity"
+        android:configChanges="orientation|keyboardHidden|keyboard|screenSize|mcc|mnc|screenLayout|smallestScreenSize|uiMode|navigation"
+        android:exported="false"
+        android:hardwareAccelerated="false"
+        android:theme="@style/Theme.Chromium.TabbedMode"
+        android:windowSoftInputMode="adjustResize">
+    </activity>  # DIFF-ANCHOR: 9023f153
+    <activity  # DIFF-ANCHOR: e86e2b49
+        android:name="org.chromium.chrome.browser.notifications.NotificationIntentInterceptor$TrampolineActivity"
+        android:autoRemoveFromRecents="true"
+        android:documentLaunchMode="always"
+        android:excludeFromRecents="true"
+        android:exported="false"
+        android:noHistory="true"
+        android:theme="@style/Theme.BrowserUI.NoDisplay">
+    </activity>  # DIFF-ANCHOR: e86e2b49
+    <activity  # DIFF-ANCHOR: 7ff74272
+        android:name="org.chromium.chrome.browser.price_tracking.PriceDropNotificationManagerImpl$DismissNotificationChromeActivity"
+        android:autoRemoveFromRecents="true"
+        android:documentLaunchMode="always"
+        android:excludeFromRecents="true"
+        android:exported="false"
+        android:noHistory="true"
+        android:theme="@style/Theme.BrowserUI.NoDisplay">
+    </activity>  # DIFF-ANCHOR: 7ff74272
+    <activity  # DIFF-ANCHOR: 71702606
+        android:name="org.chromium.chrome.browser.price_tracking.PriceDropNotificationManagerImpl$TrampolineActivity"
+        android:autoRemoveFromRecents="true"
+        android:documentLaunchMode="always"
+        android:excludeFromRecents="true"
+        android:exported="false"
+        android:noHistory="true"
+        android:theme="@style/Theme.BrowserUI.NoDisplay">
+    </activity>  # DIFF-ANCHOR: 71702606
+    <activity  # DIFF-ANCHOR: 7468a722
+        android:name="org.chromium.chrome.browser.searchwidget.SearchActivity"
+        android:clearTaskOnLaunch="true"
+        android:configChanges="orientation|keyboardHidden|keyboard|screenSize|mcc|mnc|screenLayout|smallestScreenSize"
+        android:excludeFromRecents="true"
+        android:exported="false"
+        android:hardwareAccelerated="false"
+        android:label="Search"
+        android:launchMode="singleTask"
+        android:taskAffinity=""
+        android:theme="@style/Theme.Chromium.SearchActivity"
+        android:windowSoftInputMode="adjustResize">
+    </activity>  # DIFF-ANCHOR: 7468a722
+    <activity  # DIFF-ANCHOR: d32b85df
+        android:name="org.chromium.chrome.browser.settings.SettingsActivity"
+        android:configChanges="orientation|keyboardHidden|keyboard|screenSize|mcc|mnc|screenLayout|smallestScreenSize"
+        android:exported="false"
+        android:label="@string/settings"
+        android:theme="@style/Theme.Chromium.Settings">
+    </activity>  # DIFF-ANCHOR: d32b85df
+    <activity  # DIFF-ANCHOR: fbf1ba15
+        android:name="org.chromium.chrome.browser.signin.SyncConsentActivity"
+        android:configChanges="orientation|keyboardHidden|keyboard|screenSize|mcc|mnc|screenLayout|smallestScreenSize"
+        android:exported="false"
+        android:theme="@style/Theme.Chromium.DialogWhenLarge">
+    </activity>  # DIFF-ANCHOR: fbf1ba15
+    <activity  # DIFF-ANCHOR: d2967c86
+        android:name="org.chromium.chrome.browser.site_settings.ManageSpaceActivity"
+        android:configChanges="orientation|keyboardHidden|keyboard|screenSize|mcc|mnc|screenLayout|smallestScreenSize"
+        android:exported="false"
+        android:label="@string/storage_management_activity_label"
+        android:theme="@style/Theme.Chromium.Settings.ManageSpace">
+    </activity>  # DIFF-ANCHOR: d2967c86
+    <activity  # DIFF-ANCHOR: 8492e3fd
+        android:name="org.chromium.chrome.browser.sync.ui.PassphraseActivity"
+        android:autoRemoveFromRecents="true"
+        android:theme="@style/Theme.Chromium.Activity">
+    </activity>  # DIFF-ANCHOR: 8492e3fd
+    <activity  # DIFF-ANCHOR: 45a98fa4
+        android:name="org.chromium.chrome.browser.sync.ui.SyncTrustedVaultProxyActivity"
+        android:excludeFromRecents="true"
+        android:exported="false"
+        android:theme="@style/Theme.MaterialComponents">
+    </activity>  # DIFF-ANCHOR: 45a98fa4
+    <activity  # DIFF-ANCHOR: 43bfa5de
+        android:name="org.chromium.chrome.browser.test_dummy.TestDummyActivity"
+        android:configChanges="orientation|keyboardHidden|keyboard|screenSize|mcc|mnc|screenLayout|smallestScreenSize"
+        android:excludeFromRecents="true"
+        android:exported="true"
+        android:noHistory="true"
+        android:theme="@style/Theme.MaterialComponents">
+    </activity>  # DIFF-ANCHOR: 43bfa5de
+    <activity  # DIFF-ANCHOR: 9bb1f409
+        android:name="org.chromium.chrome.browser.webapps.ActivateWebApkActivity"
+        android:exported="true"
+        android:theme="@style/Theme.BrowserUI.NoDisplay">
+      <intent-filter>  # DIFF-ANCHOR: 0d72b7f0
+        <action android:name="org.chromium.chrome.browser.webapps.ActivateWebApkActivity.ACTIVATE"/>
+        <category android:name="android.intent.category.DEFAULT"/>
+      </intent-filter>  # DIFF-ANCHOR: 0d72b7f0
+    </activity>  # DIFF-ANCHOR: 9bb1f409
+    <activity  # DIFF-ANCHOR: f1dc024a
+        android:name="org.chromium.chrome.browser.webapps.SameTaskWebApkActivity"
+        android:configChanges="orientation|keyboardHidden|keyboard|screenSize|mcc|mnc|screenLayout|smallestScreenSize|uiMode|navigation"
+        android:exported="false"
+        android:hardwareAccelerated="false"
+        android:label="@string/webapp_activity_title"
+        android:persistableMode="persistNever"
+        android:resizeableActivity="true"
+        android:supportsPictureInPicture="true"
+        android:theme="@style/Theme.Chromium.Webapp.Translucent"
+        android:windowSoftInputMode="adjustResize">
+      <intent-filter>  # DIFF-ANCHOR: dea53031
+        <action android:name="org.chromium.chrome.browser.dummy.action"/>
+        <category android:name="com.google.intent.category.CARDBOARD"/>
+        <category android:name="com.google.intent.category.DAYDREAM"/>
+      </intent-filter>  # DIFF-ANCHOR: dea53031
+    </activity>  # DIFF-ANCHOR: f1dc024a
+    <activity  # DIFF-ANCHOR: 5e467d8a
+        android:name="org.chromium.chrome.browser.webapps.WebappActivity"
+        android:configChanges="orientation|keyboardHidden|keyboard|screenSize|mcc|mnc|screenLayout|smallestScreenSize|uiMode|navigation"
+        android:documentLaunchMode="intoExisting"
+        android:exported="false"
+        android:hardwareAccelerated="false"
+        android:label="@string/webapp_activity_title"
+        android:launchMode="singleTop"
+        android:persistableMode="persistNever"
+        android:resizeableActivity="true"
+        android:supportsPictureInPicture="true"
+        android:theme="@style/Theme.Chromium.Webapp"
+        android:windowSoftInputMode="adjustResize">
+      <intent-filter>  # DIFF-ANCHOR: dea53031
+        <action android:name="org.chromium.chrome.browser.dummy.action"/>
+        <category android:name="com.google.intent.category.CARDBOARD"/>
+        <category android:name="com.google.intent.category.DAYDREAM"/>
+      </intent-filter>  # DIFF-ANCHOR: dea53031
+    </activity>  # DIFF-ANCHOR: 5e467d8a
+    <activity  # DIFF-ANCHOR: aea75380
+        android:name="org.chromium.chrome.browser.webapps.WebappLauncherActivity"
+        android:excludeFromRecents="true"
+        android:exported="true"
+        android:taskAffinity=""
+        android:theme="@style/Theme.BrowserUI.NoDisplay">
+      <intent-filter>  # DIFF-ANCHOR: faf519ad
+        <action android:name="com.google.android.apps.chrome.webapps.WebappManager.ACTION_START_WEBAPP"/>
+        <category android:name="android.intent.category.DEFAULT"/>
+      </intent-filter>  # DIFF-ANCHOR: faf519ad
+      <intent-filter>  # DIFF-ANCHOR: 9c5197e9
+        <action android:name="org.webapk.ACTION_START_WEBAPK"/>
+        <category android:name="android.intent.category.DEFAULT"/>
+      </intent-filter>  # DIFF-ANCHOR: 9c5197e9
+    </activity>  # DIFF-ANCHOR: aea75380
+    <activity  # DIFF-ANCHOR: a1fac31f
+        android:name="org.chromium.chrome.browser.webauth.authenticator.CableAuthenticatorActivity"
+        android:configChanges="density|fontScale|keyboard|keyboardHidden|layoutDirection|locale|mcc|mnc|navigation|orientation|screenLayout|screenSize|smallestScreenSize|touchscreen|uiMode"
+        android:excludeFromRecents="true"
+        android:exported="true"
+        android:label="@string/cablev2_activity_title"
+        android:launchMode="singleTop"
+        android:permission="com.google.android.gms.auth.cryptauth.permission.CABLEV2_SERVER_LINK"
+        android:theme="@style/Theme.Chromium.Activity.Fullscreen">
+    </activity>  # DIFF-ANCHOR: a1fac31f
+    <activity  # DIFF-ANCHOR: b21cfcff
+        android:name="org.chromium.chrome.browser.webauth.authenticator.CableAuthenticatorUSBActivity"
+        android:configChanges="density|fontScale|keyboard|keyboardHidden|layoutDirection|locale|mcc|mnc|navigation|orientation|screenLayout|screenSize|smallestScreenSize|touchscreen|uiMode"
+        android:excludeFromRecents="true"
+        android:exported="false"
+        android:label="@string/cablev2_activity_title"
+        android:launchMode="singleTop"
+        android:theme="@style/Theme.Chromium.Activity.Fullscreen">
+      <intent-filter>  # DIFF-ANCHOR: 5873407a
+        <action android:name="android.hardware.usb.action.USB_ACCESSORY_ATTACHED"/>
+      </intent-filter>  # DIFF-ANCHOR: 5873407a
+      <meta-data android:name="android.hardware.usb.action.USB_ACCESSORY_ATTACHED" android:resource="@xml/phone_as_a_security_key_accessory_filter"/>
+    </activity>  # DIFF-ANCHOR: b21cfcff
+    <activity  # DIFF-ANCHOR: 1d9b4077
+        android:name="org.chromium.components.media_router.caf.remoting.CafExpandedControllerActivity"
+        android:configChanges="orientation|keyboardHidden|keyboard|screenSize|mcc|mnc|screenLayout|smallestScreenSize"
+        android:excludeFromRecents="true"
+        android:hardwareAccelerated="true"
+        android:label="Chrome.CafExpandedControllerActivity"
+        android:launchMode="singleTask"
+        android:noHistory="true"
+        android:theme="@style/Theme.Chromium.Activity">
+    </activity>  # DIFF-ANCHOR: 1d9b4077
+    <activity  # DIFF-ANCHOR: 5d3091ca
+        android:name="org.chromium.components.webxr.XrHostActivity"
+        android:configChanges="orientation|keyboardHidden|keyboard|screenSize|mcc|mnc|screenLayout|smallestScreenSize|uiMode|navigation"
+        android:excludeFromRecents="true"
+        android:exported="false"
+        android:hardwareAccelerated="false"
+        android:label="WebXR"
+        android:launchMode="singleTask"
+        android:noHistory="true"
+        android:resizeableActivity="false"
+        android:screenOrientation="landscape"
+        android:theme="@android:style/Theme.Black.NoTitleBar.Fullscreen"
+        android:windowSoftInputMode="adjustResize">
+      <intent-filter>  # DIFF-ANCHOR: 48f4c2ef
+        <category android:name="android.intent.category.XR"/>
+      </intent-filter>  # DIFF-ANCHOR: 48f4c2ef
+      <property android:name="android.window.PROPERTY_ACTIVITY_STARTS_IN_IMMERSIVE_XR" android:value="true"/>
+    </activity>  # DIFF-ANCHOR: 5d3091ca
+    <activity-alias  # DIFF-ANCHOR: 9da0e5b6
+        android:name="com.google.android.apps.chrome.IntentDispatcher"
+        android:exported="true"
+        android:targetActivity="org.chromium.chrome.browser.document.ChromeLauncherActivity">
+      <intent-filter>  # DIFF-ANCHOR: a5330430
+        <action android:name="android.intent.action.MAIN"/>
+        <category android:name="android.intent.category.NOTIFICATION_PREFERENCES"/>
+      </intent-filter>  # DIFF-ANCHOR: a5330430
+      <intent-filter>  # DIFF-ANCHOR: 436dfef3
+        <action android:name="android.intent.action.MEDIA_SEARCH"/>
+        <category android:name="android.intent.category.DEFAULT"/>
+      </intent-filter>  # DIFF-ANCHOR: 436dfef3
+      <intent-filter>  # DIFF-ANCHOR: 8f70c92f
+        <action android:name="android.intent.action.SEARCH"/>
+      </intent-filter>  # DIFF-ANCHOR: 8f70c92f
+      <intent-filter>  # DIFF-ANCHOR: 4ee601b7
+        <action android:name="android.intent.action.SEND"/>
+        <category android:name="android.intent.category.DEFAULT"/>
+        <data android:mimeType="text/plain"/>
+      </intent-filter>  # DIFF-ANCHOR: 4ee601b7
+      <intent-filter>  # DIFF-ANCHOR: 13c9b0a8
+        <action android:name="android.intent.action.VIEW"/>
+        <category android:name="android.intent.category.BROWSABLE"/>
+        <category android:name="android.intent.category.DEFAULT"/>
+        <data android:mimeType="application/xhtml+xml"/>
+        <data android:mimeType="text/html"/>
+        <data android:mimeType="text/plain"/>
+        <data android:scheme="about"/>
+        <data android:scheme="googlechrome"/>
+        <data android:scheme="http"/>
+        <data android:scheme="https"/>
+      </intent-filter>  # DIFF-ANCHOR: 13c9b0a8
+      <intent-filter>  # DIFF-ANCHOR: 13c9b0a8
+        <action android:name="android.intent.action.VIEW"/>
+        <category android:name="android.intent.category.BROWSABLE"/>
+        <category android:name="android.intent.category.DEFAULT"/>
+        <data android:host="*"/>
+        <data android:mimeType="*/*"/>
+        <data android:pathPattern="/.*\\..*\\..*\\..*\\..*\\..*\\..*\\..*\\..*\\..*\\.mht"/>
+        <data android:pathPattern="/.*\\..*\\..*\\..*\\..*\\..*\\..*\\..*\\..*\\..*\\.mhtml"/>
+        <data android:pathPattern="/.*\\..*\\..*\\..*\\..*\\..*\\..*\\..*\\..*\\.mht"/>
+        <data android:pathPattern="/.*\\..*\\..*\\..*\\..*\\..*\\..*\\..*\\..*\\.mhtml"/>
+        <data android:pathPattern="/.*\\..*\\..*\\..*\\..*\\..*\\..*\\..*\\.mht"/>
+        <data android:pathPattern="/.*\\..*\\..*\\..*\\..*\\..*\\..*\\..*\\.mhtml"/>
+        <data android:pathPattern="/.*\\..*\\..*\\..*\\..*\\..*\\..*\\.mht"/>
+        <data android:pathPattern="/.*\\..*\\..*\\..*\\..*\\..*\\..*\\.mhtml"/>
+        <data android:pathPattern="/.*\\..*\\..*\\..*\\..*\\..*\\.mht"/>
+        <data android:pathPattern="/.*\\..*\\..*\\..*\\..*\\..*\\.mhtml"/>
+        <data android:pathPattern="/.*\\..*\\..*\\..*\\..*\\.mht"/>
+        <data android:pathPattern="/.*\\..*\\..*\\..*\\..*\\.mhtml"/>
+        <data android:pathPattern="/.*\\..*\\..*\\..*\\.mht"/>
+        <data android:pathPattern="/.*\\..*\\..*\\..*\\.mhtml"/>
+        <data android:pathPattern="/.*\\..*\\..*\\.mht"/>
+        <data android:pathPattern="/.*\\..*\\..*\\.mhtml"/>
+        <data android:pathPattern="/.*\\..*\\.mht"/>
+        <data android:pathPattern="/.*\\..*\\.mhtml"/>
+        <data android:pathPattern="/.*\\.mht"/>
+        <data android:pathPattern="/.*\\.mhtml"/>
+        <data android:scheme="file"/>
+      </intent-filter>  # DIFF-ANCHOR: 13c9b0a8
+      <intent-filter>  # DIFF-ANCHOR: 13c9b0a8
+        <action android:name="android.intent.action.VIEW"/>
+        <category android:name="android.intent.category.BROWSABLE"/>
+        <category android:name="android.intent.category.DEFAULT"/>
+        <data android:host="*"/>
+        <data android:pathPattern="/.*\\..*\\..*\\..*\\..*\\..*\\..*\\..*\\..*\\..*\\.mht"/>
+        <data android:pathPattern="/.*\\..*\\..*\\..*\\..*\\..*\\..*\\..*\\..*\\..*\\.mhtml"/>
+        <data android:pathPattern="/.*\\..*\\..*\\..*\\..*\\..*\\..*\\..*\\..*\\.mht"/>
+        <data android:pathPattern="/.*\\..*\\..*\\..*\\..*\\..*\\..*\\..*\\..*\\.mhtml"/>
+        <data android:pathPattern="/.*\\..*\\..*\\..*\\..*\\..*\\..*\\..*\\.mht"/>
+        <data android:pathPattern="/.*\\..*\\..*\\..*\\..*\\..*\\..*\\..*\\.mhtml"/>
+        <data android:pathPattern="/.*\\..*\\..*\\..*\\..*\\..*\\..*\\.mht"/>
+        <data android:pathPattern="/.*\\..*\\..*\\..*\\..*\\..*\\..*\\.mhtml"/>
+        <data android:pathPattern="/.*\\..*\\..*\\..*\\..*\\..*\\.mht"/>
+        <data android:pathPattern="/.*\\..*\\..*\\..*\\..*\\..*\\.mhtml"/>
+        <data android:pathPattern="/.*\\..*\\..*\\..*\\..*\\.mht"/>
+        <data android:pathPattern="/.*\\..*\\..*\\..*\\..*\\.mhtml"/>
+        <data android:pathPattern="/.*\\..*\\..*\\..*\\.mht"/>
+        <data android:pathPattern="/.*\\..*\\..*\\..*\\.mhtml"/>
+        <data android:pathPattern="/.*\\..*\\..*\\.mht"/>
+        <data android:pathPattern="/.*\\..*\\..*\\.mhtml"/>
+        <data android:pathPattern="/.*\\..*\\.mht"/>
+        <data android:pathPattern="/.*\\..*\\.mhtml"/>
+        <data android:pathPattern="/.*\\.mht"/>
+        <data android:pathPattern="/.*\\.mhtml"/>
+        <data android:scheme="file"/>
+      </intent-filter>  # DIFF-ANCHOR: 13c9b0a8
+      <intent-filter>  # DIFF-ANCHOR: 13c9b0a8
+        <action android:name="android.intent.action.VIEW"/>
+        <category android:name="android.intent.category.BROWSABLE"/>
+        <category android:name="android.intent.category.DEFAULT"/>
+        <data android:mimeType="multipart/related"/>
+        <data android:scheme="file"/>
+      </intent-filter>  # DIFF-ANCHOR: 13c9b0a8
+      <intent-filter>  # DIFF-ANCHOR: 13c9b0a8
+        <action android:name="android.intent.action.VIEW"/>
+        <category android:name="android.intent.category.BROWSABLE"/>
+        <category android:name="android.intent.category.DEFAULT"/>
+        <data android:scheme="about"/>
+        <data android:scheme="googlechrome"/>
+        <data android:scheme="http"/>
+        <data android:scheme="https"/>
+      </intent-filter>  # DIFF-ANCHOR: 13c9b0a8
+      <intent-filter>  # DIFF-ANCHOR: 13c9b0a8
+        <action android:name="android.intent.action.VIEW"/>
+        <category android:name="android.intent.category.DEFAULT"/>
+        <data android:mimeType="application/xhtml+xml"/>
+        <data android:mimeType="text/html"/>
+        <data android:mimeType="text/plain"/>
+        <data android:scheme="content"/>
+      </intent-filter>  # DIFF-ANCHOR: 13c9b0a8
+      <intent-filter>  # DIFF-ANCHOR: 13c9b0a8
+        <action android:name="android.intent.action.VIEW"/>
+        <category android:name="android.intent.category.DEFAULT"/>
+        <data android:mimeType="message/rfc822"/>
+        <data android:scheme="content"/>
+        <data android:scheme="file"/>
+      </intent-filter>  # DIFF-ANCHOR: 13c9b0a8
+      <intent-filter>  # DIFF-ANCHOR: 13c9b0a8
+        <action android:name="android.intent.action.VIEW"/>
+        <category android:name="android.intent.category.DEFAULT"/>
+        <data android:mimeType="multipart/related"/>
+        <data android:scheme="content"/>
+      </intent-filter>  # DIFF-ANCHOR: 13c9b0a8
+      <intent-filter>  # DIFF-ANCHOR: 7a3b3be8
+        <action android:name="android.nfc.action.NDEF_DISCOVERED"/>
+        <category android:name="android.intent.category.DEFAULT"/>
+        <data android:scheme="http"/>
+        <data android:scheme="https"/>
+      </intent-filter>  # DIFF-ANCHOR: 7a3b3be8
+      <intent-filter>  # DIFF-ANCHOR: 2a3a3c3d
+        <action android:name="android.speech.action.VOICE_SEARCH_RESULTS"/>
+        <category android:name="android.intent.category.DEFAULT"/>
+      </intent-filter>  # DIFF-ANCHOR: 2a3a3c3d
+      <intent-filter>  # DIFF-ANCHOR: 83919a44
+        <action android:name="com.sec.android.airview.HOVER"/>
+      </intent-filter>  # DIFF-ANCHOR: 83919a44
+      <meta-data android:name="android.app.searchable" android:resource="@xml/searchable"/>
+    </activity-alias>  # DIFF-ANCHOR: 9da0e5b6
+    <activity-alias  # DIFF-ANCHOR: 5042984f
+        android:name="com.google.android.apps.chrome.Main"
+        android:exported="true"
+        android:targetActivity="org.chromium.chrome.browser.ChromeTabbedActivity">
+      <intent-filter>  # DIFF-ANCHOR: a5330430
+        <action android:name="android.intent.action.MAIN"/>
+        <category android:name="android.intent.category.APP_BROWSER"/>
+        <category android:name="android.intent.category.BROWSABLE"/>
+        <category android:name="android.intent.category.DEFAULT"/>
+        <category android:name="android.intent.category.LAUNCHER"/>
+      </intent-filter>  # DIFF-ANCHOR: a5330430
+      <intent-filter>  # DIFF-ANCHOR: dea53031
+        <action android:name="org.chromium.chrome.browser.dummy.action"/>
+        <category android:name="com.google.intent.category.CARDBOARD"/>
+        <category android:name="com.google.intent.category.DAYDREAM"/>
+      </intent-filter>  # DIFF-ANCHOR: dea53031
+      <meta-data android:name="android.app.shortcuts" android:resource="@xml/launchershortcuts"/>
+    </activity-alias>  # DIFF-ANCHOR: 5042984f
+    <activity-alias  # DIFF-ANCHOR: dcfe2999
+        android:name="com.google.android.apps.chrome.webapps.WebappActivity"
+        android:label="@string/webapp_activity_title"
+        android:resizeableActivity="true"
+        android:supportsPictureInPicture="true"
+        android:targetActivity="org.chromium.chrome.browser.webapps.WebappActivity">
+    </activity-alias>  # DIFF-ANCHOR: dcfe2999
+    <activity-alias  # DIFF-ANCHOR: 8e23336d
+        android:name="com.google.android.apps.chrome.webapps.WebappManager"
+        android:targetActivity="org.chromium.chrome.browser.webapps.WebappLauncherActivity">
+    </activity-alias>  # DIFF-ANCHOR: 8e23336d
+    <activity-alias  # DIFF-ANCHOR: 5c83a464
+        android:name="org.chromium.chrome.browser.download.DownloadActivity"
+        android:configChanges="orientation|keyboardHidden|keyboard|screenSize|mcc|mnc|screenLayout|smallestScreenSize"
+        android:exported="false"
+        android:targetActivity="org.chromium.chrome.browser.app.download.home.DownloadActivity"
+        android:theme="@style/Theme.Chromium.Activity.Fullscreen"
+        android:windowSoftInputMode="stateAlwaysHidden|adjustResize">
+    </activity-alias>  # DIFF-ANCHOR: 5c83a464
+    <activity-alias  # DIFF-ANCHOR: b4a6221b
+        android:name="org.chromium.chrome.browser.media.AudioLauncherActivity"
+        android:enabled="false"
+        android:excludeFromRecents="true"
+        android:exported="true"
+        android:targetActivity="org.chromium.chrome.browser.media.MediaLauncherActivity"
+        android:theme="@style/Theme.BrowserUI.NoDisplay">
+      <intent-filter>  # DIFF-ANCHOR: 13c9b0a8
+        <action android:name="android.intent.action.VIEW"/>
+        <category android:name="android.intent.category.DEFAULT"/>
+        <data android:mimeType="audio/*"/>
+        <data android:scheme="content"/>
+        <data android:scheme="file"/>
+      </intent-filter>  # DIFF-ANCHOR: 13c9b0a8
+    </activity-alias>  # DIFF-ANCHOR: b4a6221b
+    <activity-alias  # DIFF-ANCHOR: 7c349c4f
+        android:name="org.chromium.chrome.browser.webapps.SecureWebAppLauncher"
+        android:exported="false"
+        android:targetActivity="org.chromium.chrome.browser.webapps.WebappLauncherActivity">
+      <intent-filter>  # DIFF-ANCHOR: 9fe4b527
+        <action android:name="org.chromium.chrome.browser.webapps.WebappManager.ACTION_START_SECURE_WEBAPP"/>
+        <category android:name="android.intent.category.DEFAULT"/>
+      </intent-filter>  # DIFF-ANCHOR: 9fe4b527
+    </activity-alias>  # DIFF-ANCHOR: 7c349c4f
+    <meta-data android:name="org.chromium.content.browser.SMART_CLIP_PROVIDER" android:value="org.chromium.content_public.browser.SmartClipProvider"/>
+    <property android:name="android.adservices.AD_SERVICES_CONFIG" android:resource="@xml/ad_services_config"/>
+    <receiver  # DIFF-ANCHOR: 58d39a0f
+        android:name="com.google.android.apps.chrome.appwidget.bookmarks.BookmarkThumbnailWidgetProvider"
+        android:exported="true"
+        android:label="@string/bookmark_widget_title">
+      <intent-filter>  # DIFF-ANCHOR: 1ebe78e9
+        <action android:name=".BOOKMARK_APPWIDGET_UPDATE"/>
+        <action android:name="android.appwidget.action.APPWIDGET_UPDATE"/>
+      </intent-filter>  # DIFF-ANCHOR: 1ebe78e9
+      <meta-data android:name="android.appwidget.provider" android:resource="@xml/bookmark_widget_info"/>
+    </receiver>  # DIFF-ANCHOR: 58d39a0f
+    <receiver  # DIFF-ANCHOR: 68e22783
+        android:name="org.chromium.chrome.browser.announcement.AnnouncementNotificationManager$Receiver"
+        android:exported="false">
+    </receiver>  # DIFF-ANCHOR: 68e22783
+    <receiver  # DIFF-ANCHOR: f6d77f5a
+        android:name="org.chromium.chrome.browser.app.send_tab_to_self.SendTabToSelfNotificationReceiver"
+        android:exported="false">
+    </receiver>  # DIFF-ANCHOR: f6d77f5a
+    <receiver  # DIFF-ANCHOR: bb762b77
+        android:name="org.chromium.chrome.browser.browserservices.InstalledWebappBroadcastReceiver"
+        android:exported="true">
+      <intent-filter>  # DIFF-ANCHOR: e5bb6a36
+        <action android:name="android.intent.action.PACKAGE_DATA_CLEARED"/>
+        <action android:name="android.intent.action.PACKAGE_FULLY_REMOVED"/>
+        <data android:scheme="package"/>
+      </intent-filter>  # DIFF-ANCHOR: e5bb6a36
+    </receiver>  # DIFF-ANCHOR: bb762b77
+    <receiver  # DIFF-ANCHOR: 2f4b69ac
+        android:name="org.chromium.chrome.browser.browserservices.ui.trustedwebactivity.DisclosureAcceptanceBroadcastReceiver"
+        android:exported="false">
+    </receiver>  # DIFF-ANCHOR: 2f4b69ac
+    <receiver  # DIFF-ANCHOR: fd245bee
+        android:name="org.chromium.chrome.browser.customtabs.CustomTabsShareBroadcastReceiver"
+        android:exported="false">
+    </receiver>  # DIFF-ANCHOR: fd245bee
+    <receiver  # DIFF-ANCHOR: 2b9c19aa
+        android:name="org.chromium.chrome.browser.notifications.NotificationIntentInterceptor$Receiver"
+        android:exported="false">
+    </receiver>  # DIFF-ANCHOR: 2b9c19aa
+    <receiver  # DIFF-ANCHOR: d8a2af42
+        android:name="org.chromium.chrome.browser.notifications.NotificationService$Receiver"
+        android:exported="false">
+    </receiver>  # DIFF-ANCHOR: d8a2af42
+    <receiver  # DIFF-ANCHOR: df76237f
+        android:name="org.chromium.chrome.browser.notifications.NotificationServiceImpl$Receiver"
+        android:exported="false">
+      <intent-filter>  # DIFF-ANCHOR: 1c1c5ed8
+        <action android:name="org.chromium.chrome.browser.notifications.CLICK_NOTIFICATION"/>
+        <action android:name="org.chromium.chrome.browser.notifications.CLOSE_NOTIFICATION"/>
+      </intent-filter>  # DIFF-ANCHOR: 1c1c5ed8
+    </receiver>  # DIFF-ANCHOR: df76237f
+    <receiver  # DIFF-ANCHOR: a9b53579
+        android:name="org.chromium.chrome.browser.notifications.channels.LocaleChangedBroadcastReceiver"
+        android:exported="true">
+      <intent-filter>  # DIFF-ANCHOR: 5458f2a2
+        <action android:name="android.intent.action.LOCALE_CHANGED"/>
+      </intent-filter>  # DIFF-ANCHOR: 5458f2a2
+    </receiver>  # DIFF-ANCHOR: a9b53579
+    <receiver  # DIFF-ANCHOR: 64dc49ab
+        android:name="org.chromium.chrome.browser.notifications.permissions.NotificationPermissionChangeReceiver"
+        android:exported="false">
+      <intent-filter>  # DIFF-ANCHOR: 772631d2
+        <action android:name="android.app.action.APP_BLOCK_STATE_CHANGED"/>
+      </intent-filter>  # DIFF-ANCHOR: 772631d2
+    </receiver>  # DIFF-ANCHOR: 64dc49ab
+    <receiver  # DIFF-ANCHOR: 0cefd906
+        android:name="org.chromium.chrome.browser.notifications.scheduler.DisplayAgent$Receiver"
+        android:exported="false">
+    </receiver>  # DIFF-ANCHOR: 0cefd906
+    <receiver  # DIFF-ANCHOR: 7d28c8e4
+        android:name="org.chromium.chrome.browser.offlinepages.AutoFetchNotifier$CompleteNotificationReceiver"
+        android:exported="false">
+    </receiver>  # DIFF-ANCHOR: 7d28c8e4
+    <receiver  # DIFF-ANCHOR: 05f19ac3
+        android:name="org.chromium.chrome.browser.offlinepages.AutoFetchNotifier$InProgressCancelReceiver"
+        android:exported="false">
+    </receiver>  # DIFF-ANCHOR: 05f19ac3
+    <receiver  # DIFF-ANCHOR: 226134db
+        android:name="org.chromium.chrome.browser.quickactionsearchwidget.QuickActionSearchWidgetProvider$QuickActionSearchWidgetProviderDino"
+        android:exported="true"
+        android:label="@string/dino_widget_text">
+      <intent-filter>  # DIFF-ANCHOR: 4ed161a4
+        <action android:name="android.appwidget.action.APPWIDGET_UPDATE"/>
+      </intent-filter>  # DIFF-ANCHOR: 4ed161a4
+      <meta-data android:name="android.appwidget.provider" android:resource="@xml/quick_action_search_widget_dino_info"/>
+    </receiver>  # DIFF-ANCHOR: 226134db
+    <receiver  # DIFF-ANCHOR: 5a0b9536
+        android:name="org.chromium.chrome.browser.quickactionsearchwidget.QuickActionSearchWidgetProvider$QuickActionSearchWidgetProviderSearch"
+        android:exported="true"
+        android:label="@string/quick_action_search_widget_title">
+      <intent-filter>  # DIFF-ANCHOR: 4ed161a4
+        <action android:name="android.appwidget.action.APPWIDGET_UPDATE"/>
+      </intent-filter>  # DIFF-ANCHOR: 4ed161a4
+      <meta-data android:name="android.appwidget.provider" android:resource="@xml/quick_action_search_widget_small_info"/>
+    </receiver>  # DIFF-ANCHOR: 5a0b9536
+    <receiver  # DIFF-ANCHOR: 8d506dab
+        android:name="org.chromium.chrome.browser.safe_browsing.PasswordProtectionBroadcastReceiver"
+        android:exported="true"
+        android:permission="com.google.android.gms.permission.INTERNAL_BROADCAST">
+      <intent-filter>  # DIFF-ANCHOR: 84a815d3
+        <action android:name="com.android.chrome.safe_browsing.LOGIN"/>
+      </intent-filter>  # DIFF-ANCHOR: 84a815d3
+    </receiver>  # DIFF-ANCHOR: 8d506dab
+    <receiver  # DIFF-ANCHOR: a0d83ae5
+        android:name="org.chromium.chrome.browser.searchwidget.SearchWidgetProvider"
+        android:exported="true"
+        android:label="@string/search_widget_title">
+      <intent-filter>  # DIFF-ANCHOR: 4ed161a4
+        <action android:name="android.appwidget.action.APPWIDGET_UPDATE"/>
+      </intent-filter>  # DIFF-ANCHOR: 4ed161a4
+      <meta-data android:name="android.appwidget.provider" android:resource="@xml/search_widget_info"/>
+    </receiver>  # DIFF-ANCHOR: a0d83ae5
+    <receiver  # DIFF-ANCHOR: 2f1fe689
+        android:name="org.chromium.chrome.browser.sharing.click_to_call.ClickToCallMessageHandler$PhoneUnlockedReceiver"
+        android:exported="true">
+      <intent-filter>  # DIFF-ANCHOR: 4b5ec7a9
+        <action android:name="android.intent.action.USER_PRESENT"/>
+      </intent-filter>  # DIFF-ANCHOR: 4b5ec7a9
+    </receiver>  # DIFF-ANCHOR: 2f1fe689
+    <receiver  # DIFF-ANCHOR: 124ac9a1
+        android:name="org.chromium.chrome.browser.sharing.click_to_call.ClickToCallMessageHandler$TapReceiver"
+        android:exported="false">
+    </receiver>  # DIFF-ANCHOR: 124ac9a1
+    <receiver  # DIFF-ANCHOR: 84094425
+        android:name="org.chromium.chrome.browser.sharing.shared_clipboard.SharedClipboardMessageHandler$TapReceiver"
+        android:exported="false">
+    </receiver>  # DIFF-ANCHOR: 84094425
+    <receiver  # DIFF-ANCHOR: 352611a4
+        android:name="org.chromium.chrome.browser.sharing.shared_clipboard.SharedClipboardMessageHandler$TryAgainReceiver"
+        android:exported="false">
+    </receiver>  # DIFF-ANCHOR: 352611a4
+    <receiver  # DIFF-ANCHOR: 420d0678
+        android:name="org.chromium.chrome.browser.sharing.sms_fetcher.SmsFetcherMessageHandler$NotificationReceiver"
+        android:exported="false">
+    </receiver>  # DIFF-ANCHOR: 420d0678
+    <receiver  # DIFF-ANCHOR: 9015e3cf
+        android:name="org.chromium.chrome.browser.upgrade.PackageReplacedBroadcastReceiver"
+        android:exported="false">
+      <intent-filter>  # DIFF-ANCHOR: e8cce90c
+        <action android:name="android.intent.action.MY_PACKAGE_REPLACED"/>
+      </intent-filter>  # DIFF-ANCHOR: e8cce90c
+    </receiver>  # DIFF-ANCHOR: 9015e3cf
+    <receiver  # DIFF-ANCHOR: 2553238b
+        android:name="org.chromium.chrome.browser.webapps.WebApkInstallBroadcastReceiver"
+        android:exported="false">
+    </receiver>  # DIFF-ANCHOR: 2553238b
+    <receiver  # DIFF-ANCHOR: c787586e
+        android:name="org.chromium.components.background_task_scheduler.internal.BackgroundTaskBroadcastReceiver"
+        android:exported="false">
+    </receiver>  # DIFF-ANCHOR: c787586e
+    <service android:name="androidx.browser.customtabs.PostMessageService"/>
+    <service  # DIFF-ANCHOR: 4c2196d9
+        android:name="com.google.ipc.invalidation.ticl.android2.channel.GcmRegistrationTaskService"
+        android:exported="true"
+        android:permission="com.google.android.gms.permission.BIND_NETWORK_TASK_SERVICE">
+      <intent-filter>  # DIFF-ANCHOR: 99686c45
+        <action android:name="com.google.android.gms.gcm.ACTION_TASK_READY"/>
+      </intent-filter>  # DIFF-ANCHOR: 99686c45
+    </service>  # DIFF-ANCHOR: 4c2196d9
+    <service  # DIFF-ANCHOR: c34d99ad
+        android:name="org.chromium.chrome.browser.ChromeBackgroundService"
+        android:exported="true"
+        android:permission="com.google.android.gms.permission.BIND_NETWORK_TASK_SERVICE">
+      <intent-filter>  # DIFF-ANCHOR: 99686c45
+        <action android:name="com.google.android.gms.gcm.ACTION_TASK_READY"/>
+      </intent-filter>  # DIFF-ANCHOR: 99686c45
+    </service>  # DIFF-ANCHOR: c34d99ad
+    <service  # DIFF-ANCHOR: b56e4a55
+        android:name="org.chromium.chrome.browser.app.bluetooth.BluetoothNotificationService"
+        android:exported="false">
+    </service>  # DIFF-ANCHOR: b56e4a55
+    <service  # DIFF-ANCHOR: 2af739d5
+        android:name="org.chromium.chrome.browser.app.usb.UsbNotificationService"
+        android:exported="false">
+    </service>  # DIFF-ANCHOR: 2af739d5
+    <service  # DIFF-ANCHOR: ac44dbad
+        android:name="org.chromium.chrome.browser.bookmarkswidget.BookmarkWidgetService"
+        android:exported="false"
+        android:permission="android.permission.BIND_REMOTEVIEWS">
+    </service>  # DIFF-ANCHOR: ac44dbad
+    <service  # DIFF-ANCHOR: 90d2ec9b
+        android:name="org.chromium.chrome.browser.crash.ChromeMinidumpUploadJobService"
+        android:exported="false"
+        android:permission="android.permission.BIND_JOB_SERVICE">
+    </service>  # DIFF-ANCHOR: 90d2ec9b
+    <service  # DIFF-ANCHOR: f72bb7bc
+        android:name="org.chromium.chrome.browser.crash.MinidumpUploadService"
+        android:exported="false">
+    </service>  # DIFF-ANCHOR: f72bb7bc
+    <service  # DIFF-ANCHOR: ee1c39a8
+        android:name="org.chromium.chrome.browser.customtabs.CustomTabsConnectionService"
+        android:exported="true">
+      <intent-filter>  # DIFF-ANCHOR: d46bf795
+        <action android:name="android.support.customtabs.action.CustomTabsService"/>
+        <category android:name="androidx.browser.customtabs.category.ColorSchemeCustomization"/>
+        <category android:name="androidx.browser.customtabs.category.NavBarColorCustomization"/>
+        <category android:name="androidx.browser.trusted.category.ImmersiveMode"/>
+        <category android:name="androidx.browser.trusted.category.LaunchSiteSettings"/>
+        <category android:name="androidx.browser.trusted.category.LaunchWebApkSiteSettings"/>
+        <category android:name="androidx.browser.trusted.category.TrustedWebActivities"/>
+        <category android:name="androidx.browser.trusted.category.TrustedWebActivitySplashScreensV1"/>
+        <category android:name="androidx.browser.trusted.category.WebShareTargetV2"/>
+      </intent-filter>  # DIFF-ANCHOR: d46bf795
+    </service>  # DIFF-ANCHOR: ee1c39a8
+    <service  # DIFF-ANCHOR: 4b22c3f5
+        android:name="org.chromium.chrome.browser.download.DownloadBroadcastManager"
+        android:exported="false">
+    </service>  # DIFF-ANCHOR: 4b22c3f5
+    <service  # DIFF-ANCHOR: 413310e5
+        android:name="org.chromium.chrome.browser.download.DownloadForegroundService"
+        android:exported="false"
+        android:foregroundServiceType="dataSync">
+    </service>  # DIFF-ANCHOR: 413310e5
+    <service  # DIFF-ANCHOR: 7e3ff13a
+        android:name="org.chromium.chrome.browser.incognito.IncognitoNotificationService"
+        android:exported="false">
+    </service>  # DIFF-ANCHOR: 7e3ff13a
+    <service  # DIFF-ANCHOR: ac8469ff
+        android:name="org.chromium.chrome.browser.media.MediaCaptureNotificationService"
+        android:exported="false">
+    </service>  # DIFF-ANCHOR: ac8469ff
+    <service  # DIFF-ANCHOR: 7ef9e4e5
+        android:name="org.chromium.chrome.browser.media.ui.ChromeMediaNotificationControllerServices$CastListenerService"
+        android:exported="false"
+        android:foregroundServiceType="mediaPlayback">
+      <intent-filter>  # DIFF-ANCHOR: f401157d
+        <action android:name="android.intent.action.MEDIA_BUTTON"/>
+      </intent-filter>  # DIFF-ANCHOR: f401157d
+    </service>  # DIFF-ANCHOR: 7ef9e4e5
+    <service  # DIFF-ANCHOR: 41fa6492
+        android:name="org.chromium.chrome.browser.media.ui.ChromeMediaNotificationControllerServices$PlaybackListenerService"
+        android:exported="false"
+        android:foregroundServiceType="mediaPlayback">
+      <intent-filter>  # DIFF-ANCHOR: f401157d
+        <action android:name="android.intent.action.MEDIA_BUTTON"/>
+      </intent-filter>  # DIFF-ANCHOR: f401157d
+    </service>  # DIFF-ANCHOR: 41fa6492
+    <service  # DIFF-ANCHOR: 1260bca4
+        android:name="org.chromium.chrome.browser.media.ui.ChromeMediaNotificationControllerServices$PresentationListenerService"
+        android:exported="false"
+        android:foregroundServiceType="mediaPlayback">
+      <intent-filter>  # DIFF-ANCHOR: f401157d
+        <action android:name="android.intent.action.MEDIA_BUTTON"/>
+      </intent-filter>  # DIFF-ANCHOR: f401157d
+    </service>  # DIFF-ANCHOR: 1260bca4
+    <service  # DIFF-ANCHOR: 4b2220c4
+        android:name="org.chromium.chrome.browser.notifications.NotificationJobService"
+        android:exported="false"
+        android:permission="android.permission.BIND_JOB_SERVICE">
+    </service>  # DIFF-ANCHOR: 4b2220c4
+    <service  # DIFF-ANCHOR: 7fb8c03f
+        android:name="org.chromium.chrome.browser.notifications.NotificationService"
+        android:exported="false">
+    </service>  # DIFF-ANCHOR: 7fb8c03f
+    <service  # DIFF-ANCHOR: 53256720
+        android:name="org.chromium.chrome.browser.photo_picker.DecoderService"
+        android:description="@string/decoder_description"
+        android:exported="false"
+        android:isolatedProcess="true"
+        android:process=":decoder_service">
+    </service>  # DIFF-ANCHOR: 53256720
+    <service  # DIFF-ANCHOR: 6d9cb216
+        android:name="org.chromium.chrome.browser.services.gcm.ChromeGcmListenerService"
+        android:exported="false">
+      <intent-filter>  # DIFF-ANCHOR: 69e70070
+        <action android:name="com.google.firebase.MESSAGING_EVENT"/>
+      </intent-filter>  # DIFF-ANCHOR: 69e70070
+    </service>  # DIFF-ANCHOR: 6d9cb216
+    <service  # DIFF-ANCHOR: 7b05db30
+        android:name="org.chromium.chrome.browser.services.gcm.GCMBackgroundService"
+        android:exported="false">
+    </service>  # DIFF-ANCHOR: 7b05db30
+    <service  # DIFF-ANCHOR: dcd6fa39
+        android:name="org.chromium.chrome.browser.services.gcm.InvalidationGcmUpstreamSender"
+        android:exported="false">
+    </service>  # DIFF-ANCHOR: dcd6fa39
+    <service  # DIFF-ANCHOR: c26364a8
+        android:name="org.chromium.chrome.browser.tracing.TracingNotificationService"
+        android:exported="false">
+    </service>  # DIFF-ANCHOR: c26364a8
+    <service  # DIFF-ANCHOR: a550decc
+        android:name="org.chromium.components.background_task_scheduler.internal.BackgroundTaskJobService"
+        android:exported="false"
+        android:permission="android.permission.BIND_JOB_SERVICE">
+    </service>  # DIFF-ANCHOR: a550decc
+    <service  # DIFF-ANCHOR: 2a1cd701
+        android:name="org.chromium.components.payments.PaymentDetailsUpdateService"
+        android:exported="true">
+      <intent-filter>  # DIFF-ANCHOR: c68af934
+        <action android:name="org.chromium.intent.action.UPDATE_PAYMENT_DETAILS"/>
+      </intent-filter>  # DIFF-ANCHOR: c68af934
+    </service>  # DIFF-ANCHOR: 2a1cd701
+  </application>
+</manifest>
diff --git a/chrome/android/expectations/monochrome_64_32_public_bundle__dev_ui.AndroidManifest.expected b/chrome/android/expectations/monochrome_64_32_public_bundle__dev_ui.AndroidManifest.expected
new file mode 100644
index 0000000..4751266
--- /dev/null
+++ b/chrome/android/expectations/monochrome_64_32_public_bundle__dev_ui.AndroidManifest.expected
@@ -0,0 +1,16 @@
+<?xml version="1.0" ?>
+<manifest
+    xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:dist="http://schemas.android.com/apk/distribution"
+    featureSplit="dev_ui"
+    package="org.chromium.chrome.stable"
+    platformBuildVersionCode="34"
+    platformBuildVersionName="14"
+    android:versionCode="OFFSET=22"
+    android:versionName="#.#.#.#">
+  <dist:module dist:onDemand="true" dist:title="@string/dev_ui_module_title">  # DIFF-ANCHOR: 671a5c9f
+    <dist:fusing dist:include="true"/>
+  </dist:module>  # DIFF-ANCHOR: 671a5c9f
+  <uses-sdk android:minSdkVersion="26" android:targetSdkVersion="34"/>
+  <application/>
+</manifest>
diff --git a/chrome/android/expectations/monochrome_64_32_public_bundle__stack_unwinder.AndroidManifest.expected b/chrome/android/expectations/monochrome_64_32_public_bundle__stack_unwinder.AndroidManifest.expected
new file mode 100644
index 0000000..eca02c4
--- /dev/null
+++ b/chrome/android/expectations/monochrome_64_32_public_bundle__stack_unwinder.AndroidManifest.expected
@@ -0,0 +1,16 @@
+<?xml version="1.0" ?>
+<manifest
+    xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:dist="http://schemas.android.com/apk/distribution"
+    featureSplit="stack_unwinder"
+    package="org.chromium.chrome.stable"
+    platformBuildVersionCode="34"
+    platformBuildVersionName="14"
+    android:versionCode="OFFSET=22"
+    android:versionName="#.#.#.#">
+  <dist:module dist:onDemand="true" dist:title="@string/stack_unwinder_module_title">  # DIFF-ANCHOR: 2d9e963c
+    <dist:fusing dist:include="true"/>
+  </dist:module>  # DIFF-ANCHOR: 2d9e963c
+  <uses-sdk android:minSdkVersion="26" android:targetSdkVersion="34"/>
+  <application/>
+</manifest>
diff --git a/chrome/android/expectations/monochrome_64_32_public_bundle__test_dummy.AndroidManifest.expected b/chrome/android/expectations/monochrome_64_32_public_bundle__test_dummy.AndroidManifest.expected
new file mode 100644
index 0000000..4820dbb
--- /dev/null
+++ b/chrome/android/expectations/monochrome_64_32_public_bundle__test_dummy.AndroidManifest.expected
@@ -0,0 +1,16 @@
+<?xml version="1.0" ?>
+<manifest
+    xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:dist="http://schemas.android.com/apk/distribution"
+    featureSplit="test_dummy"
+    package="org.chromium.chrome.stable"
+    platformBuildVersionCode="34"
+    platformBuildVersionName="14"
+    android:versionCode="OFFSET=22"
+    android:versionName="#.#.#.#">
+  <dist:module dist:onDemand="true" dist:title="@string/test_dummy_module_title">  # DIFF-ANCHOR: d029b25b
+    <dist:fusing dist:include="true"/>
+  </dist:module>  # DIFF-ANCHOR: d029b25b
+  <uses-sdk android:minSdkVersion="26" android:targetSdkVersion="34"/>
+  <application/>
+</manifest>
diff --git a/chrome/android/expectations/monochrome_64_public_bundle__base.AndroidManifest.expected b/chrome/android/expectations/monochrome_64_public_bundle__base.AndroidManifest.expected
new file mode 100644
index 0000000..d97290c
--- /dev/null
+++ b/chrome/android/expectations/monochrome_64_public_bundle__base.AndroidManifest.expected
@@ -0,0 +1,741 @@
+<?xml version="1.0" ?>
+<manifest
+    xmlns:android="http://schemas.android.com/apk/res/android"
+    package="org.chromium.chrome.stable"
+    platformBuildVersionCode="34"
+    platformBuildVersionName="14"
+    android:isolatedSplits="true"
+    android:versionCode="OFFSET=24"
+    android:versionName="#.#.#.#">
+  <permission android:name="$PACKAGE.TOS_ACKED" android:protectionLevel="signatureOrSystem"/>
+  <permission android:name="$PACKAGE.permission.C2D_MESSAGE" android:protectionLevel="signature"/>
+  <permission android:name="$PACKAGE.permission.CHILD_SERVICE" android:protectionLevel="signature"/>
+  <permission android:name="$PACKAGE.permission.DEBUG" android:label="Debug web pages" android:protectionLevel="signature"/>
+  <permission android:name="$PACKAGE.permission.READ_WRITE_BOOKMARK_FOLDERS" android:protectionLevel="signatureOrSystem"/>
+  <queries>  # DIFF-ANCHOR: 9588fea7
+    <package android:name="com.google.ar.core"/>
+  </queries>  # DIFF-ANCHOR: 9588fea7
+  <uses-feature android:glEsVersion="0x00020000"/>
+  <uses-feature android:name="android.hardware.camera" android:required="false"/>
+  <uses-feature android:name="android.hardware.camera.autofocus" android:required="false"/>
+  <uses-feature android:name="android.hardware.location.gps" android:required="false"/>
+  <uses-feature android:name="android.hardware.microphone" android:required="false"/>
+  <uses-feature android:name="android.hardware.screen.landscape" android:required="false"/>
+  <uses-feature android:name="android.hardware.sensor.accelerometer" android:required="false"/>
+  <uses-feature android:name="android.hardware.sensor.gyroscope" android:required="false"/>
+  <uses-feature android:name="android.hardware.touchscreen" android:required="false"/>
+  <uses-feature android:name="android.hardware.vr.headtracking" android:required="false" android:version="1"/>
+  <uses-feature android:name="android.hardware.vr.high_performance" android:required="false"/>
+  <uses-feature android:name="android.software.vr.mode" android:required="false"/>
+  <uses-permission android:name="$PACKAGE.TOS_ACKED"/>
+  <uses-permission android:name="$PACKAGE.permission.C2D_MESSAGE"/>
+  <uses-permission android:name="$PACKAGE.permission.READ_WRITE_BOOKMARK_FOLDERS"/>
+  <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>
+  <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
+  <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
+  <uses-permission android:name="android.permission.CAMERA"/>
+  <uses-permission android:name="android.permission.CREDENTIAL_MANAGER_QUERY_CANDIDATE_CREDENTIALS"/>
+  <uses-permission android:name="android.permission.CREDENTIAL_MANAGER_SET_ALLOWED_PROVIDERS"/>
+  <uses-permission android:name="android.permission.CREDENTIAL_MANAGER_SET_ORIGIN"/>
+  <uses-permission android:name="android.permission.DOWNLOAD_WITHOUT_NOTIFICATION"/>
+  <uses-permission android:name="android.permission.FOREGROUND_SERVICE"/>
+  <uses-permission android:name="android.permission.FOREGROUND_SERVICE_DATA_SYNC"/>
+  <uses-permission android:name="android.permission.FOREGROUND_SERVICE_MEDIA_PLAYBACK"/>
+  <uses-permission android:name="android.permission.GET_ACCOUNTS"/>
+  <uses-permission android:name="android.permission.INTERNET"/>
+  <uses-permission android:name="android.permission.MANAGE_ACCOUNTS"/>
+  <uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS"/>
+  <uses-permission android:name="android.permission.NFC"/>
+  <uses-permission android:name="android.permission.POST_NOTIFICATIONS"/>
+  <uses-permission android:name="android.permission.QUERY_ALL_PACKAGES"/>
+  <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
+  <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED"/>
+  <uses-permission android:name="android.permission.RECORD_AUDIO"/>
+  <uses-permission android:name="android.permission.RUN_USER_INITIATED_JOBS"/>
+  <uses-permission android:name="android.permission.USE_CREDENTIALS"/>
+  <uses-permission android:name="android.permission.VIBRATE"/>
+  <uses-permission android:name="android.permission.WAKE_LOCK"/>
+  <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
+  <uses-permission android:name="com.android.launcher.permission.INSTALL_SHORTCUT"/>
+  <uses-permission android:name="com.chrome.permission.DEVICE_EXTRAS"/>
+  <uses-permission android:name="com.google.android.apps.now.CURRENT_ACCOUNT_ACCESS"/>
+  <uses-permission android:name="com.google.android.c2dm.permission.RECEIVE"/>
+  <uses-permission-sdk-23 android:name="android.permission.ACCESS_ADSERVICES_ATTRIBUTION"/>
+  <uses-permission-sdk-23 android:name="android.permission.ACCESS_WIFI_STATE"/>
+  <uses-permission-sdk-23 android:name="android.permission.BLUETOOTH"/>
+  <uses-permission-sdk-23 android:name="android.permission.BLUETOOTH_ADMIN" android:maxSdkVersion="30"/>
+  <uses-permission-sdk-23 android:name="android.permission.BLUETOOTH_ADVERTISE"/>
+  <uses-permission-sdk-23 android:name="android.permission.BLUETOOTH_CONNECT"/>
+  <uses-permission-sdk-23 android:name="android.permission.BLUETOOTH_SCAN" android:usesPermissionFlags="neverForLocation"/>
+  <uses-permission-sdk-23 android:name="android.permission.READ_CONTACTS"/>
+  <uses-permission-sdk-23 android:name="android.permission.READ_MEDIA_AUDIO"/>
+  <uses-permission-sdk-23 android:name="android.permission.READ_MEDIA_IMAGES"/>
+  <uses-permission-sdk-23 android:name="android.permission.READ_MEDIA_VIDEO"/>
+  <uses-permission-sdk-23 android:name="android.permission.REORDER_TASKS"/>
+  <uses-permission-sdk-23 android:name="android.permission.REQUEST_INSTALL_PACKAGES"/>
+  <uses-permission-sdk-23 android:name="android.permission.USE_BIOMETRIC"/>
+  <uses-permission-sdk-23 android:name="android.permission.USE_FINGERPRINT"/>
+  <uses-sdk android:minSdkVersion="26" android:targetSdkVersion="34"/>
+  <application
+      android:name="org.chromium.chrome.browser.base.SplitMonochromeApplication"
+      android:allowAudioPlaybackCapture="false"
+      android:allowBackup="false"
+      android:appComponentFactory="org.chromium.chrome.browser.base.SplitCompatAppComponentFactory"
+      android:enableOnBackInvokedCallback="true"
+      android:extractNativeLibs="false"
+      android:icon="@drawable/ic_launcher"
+      android:label="@string/app_name"
+      android:largeHeap="false"
+      android:manageSpaceActivity="@string/manage_space_activity"
+      android:memtagMode="async"
+      android:multiArch="true"
+      android:networkSecurityConfig="@xml/network_security_config"
+      android:roundIcon="@drawable/ic_launcher_round"
+      android:supportsRtl="true"
+      android:zygotePreloadName="org.chromium.content_public.app.ZygotePreload">
+    <activity  # DIFF-ANCHOR: ea1a94af
+        android:name="com.google.android.gms.common.api.GoogleApiActivity"
+        android:exported="false"
+        android:theme="@android:style/Theme.Translucent.NoTitleBar">
+    </activity>  # DIFF-ANCHOR: ea1a94af
+    <activity  # DIFF-ANCHOR: a2bae37c
+        android:name="com.google.android.play.core.common.PlayCoreDialogWrapperActivity"
+        android:exported="false"
+        android:stateNotNeeded="true"
+        android:theme="@style/Theme.PlayCore.Transparent">
+    </activity>  # DIFF-ANCHOR: a2bae37c
+    <activity  # DIFF-ANCHOR: a4438884
+        android:name="org.chromium.android_webview.devui.MainActivity"
+        android:exported="true"
+        android:icon="@drawable/icon_webview"
+        android:label="WebView DevTools"
+        android:launchMode="singleTask"
+        android:process=":webview_apk"
+        android:taskAffinity="$PACKAGE.org.chromium.android_webview.devui"
+        android:theme="@style/Theme.DevUi.DayNight"
+        android:visibleToInstantApps="true"
+        android:windowSoftInputMode="adjustPan">
+      <intent-filter>  # DIFF-ANCHOR: a167e73d
+        <action android:name="com.android.webview.SHOW_DEV_UI"/>
+        <category android:name="android.intent.category.DEFAULT"/>
+      </intent-filter>  # DIFF-ANCHOR: a167e73d
+    </activity>  # DIFF-ANCHOR: a4438884
+    <activity  # DIFF-ANCHOR: aeabab17
+        android:name="org.chromium.android_webview.nonembedded.LicenseActivity"
+        android:exported="true"
+        android:label="@string/license_activity_title"
+        android:process=":webview_apk">
+      <intent-filter>  # DIFF-ANCHOR: 23298d3b
+        <action android:name="android.settings.WEBVIEW_LICENSE"/>
+        <category android:name="android.intent.category.DEFAULT"/>
+      </intent-filter>  # DIFF-ANCHOR: 23298d3b
+      <meta-data android:name="com.android.settings.PRIMARY_PROFILE_CONTROLLED" android:value="true"/>
+    </activity>  # DIFF-ANCHOR: aeabab17
+    <activity-alias  # DIFF-ANCHOR: da85c28e
+        android:name="org.chromium.android_webview.SafeModeState"
+        android:enabled="false"
+        android:process=":webview_apk"
+        android:targetActivity="org.chromium.android_webview.devui.MainActivity"
+        android:visibleToInstantApps="true">
+    </activity-alias>  # DIFF-ANCHOR: da85c28e
+    <activity-alias  # DIFF-ANCHOR: b7cc06e9
+        android:name="org.chromium.android_webview.devui.DeveloperModeState"
+        android:enabled="false"
+        android:process=":webview_apk"
+        android:targetActivity="org.chromium.android_webview.devui.MainActivity"
+        android:visibleToInstantApps="true">
+    </activity-alias>  # DIFF-ANCHOR: b7cc06e9
+    <activity-alias  # DIFF-ANCHOR: 32e34aba
+        android:name="org.chromium.android_webview.devui.MonochromeLauncherActivity"
+        android:enabled="false"
+        android:exported="true"
+        android:label="WebView DevTools"
+        android:targetActivity="org.chromium.android_webview.devui.MainActivity">
+      <intent-filter>  # DIFF-ANCHOR: a5330430
+        <action android:name="android.intent.action.MAIN"/>
+        <category android:name="android.intent.category.LAUNCHER"/>
+      </intent-filter>  # DIFF-ANCHOR: a5330430
+    </activity-alias>  # DIFF-ANCHOR: 32e34aba
+    <meta-data android:name="android.allow_multiple_resumed_activities" android:value="true"/>
+    <meta-data android:name="android.content.APP_RESTRICTIONS" android:resource="@xml/app_restrictions"/>
+    <meta-data android:name="com.android.webview.WebViewLibrary" android:value="libmonochrome_64.so"/>
+    <meta-data android:name="com.google.android.gms.cast.framework.OPTIONS_PROVIDER_CLASS_NAME" android:value="org.chromium.components.media_router.caf.CastOptionsProvider"/>
+    <meta-data android:name="com.google.android.gms.version" android:value="@integer/google_play_services_version"/>
+    <meta-data android:name="com.google.ar.core" android:value="optional"/>
+    <meta-data android:name="com.google.ar.core.load_32bit_so_from_split_module" android:value="optional"/>
+    <meta-data android:name="com.google.ar.core.min_apk_version" android:value="231450000"/>
+    <meta-data android:name="com.google.ar.core.session_settings" android:value="allow_front_facing_motion_tracking_6dof,"/>
+    <meta-data android:name="com.samsung.android.sdk.multiwindow.enable" android:value="true"/>
+    <meta-data android:name="com.samsung.android.sdk.multiwindow.penwindow.enable" android:value="true"/>
+    <meta-data android:name="org.chromium.content.browser.NUM_PRIVILEGED_SERVICES" android:value="5"/>
+    <meta-data android:name="org.chromium.content.browser.NUM_SANDBOXED_SERVICES" android:value="40"/>
+    <provider  # DIFF-ANCHOR: bc0a9a7a
+        android:name="com.google.firebase.provider.FirebaseInitProvider"
+        android:authorities="$PACKAGE.firebaseinitprovider"
+        android:directBootAware="true"
+        android:exported="false"
+        android:initOrder="100">
+    </provider>  # DIFF-ANCHOR: bc0a9a7a
+    <provider  # DIFF-ANCHOR: a5e78e63
+        android:name="org.chromium.android_webview.nonembedded.LicenseContentProvider"
+        android:authorities="$PACKAGE.LicenseContentProvider"
+        android:exported="true"
+        android:grantUriPermissions="true"
+        android:process=":webview_apk">
+    </provider>  # DIFF-ANCHOR: a5e78e63
+    <provider  # DIFF-ANCHOR: bfe37944
+        android:name="org.chromium.android_webview.services.DeveloperModeContentProvider"
+        android:authorities="$PACKAGE.DeveloperModeContentProvider"
+        android:exported="true"
+        android:process=":webview_service"
+        android:visibleToInstantApps="true">
+    </provider>  # DIFF-ANCHOR: bfe37944
+    <provider  # DIFF-ANCHOR: ecfff997
+        android:name="org.chromium.android_webview.services.SafeModeContentProvider"
+        android:authorities="$PACKAGE.SafeModeContentProvider"
+        android:exported="true"
+        android:process=":webview_service"
+        android:visibleToInstantApps="true">
+    </provider>  # DIFF-ANCHOR: ecfff997
+    <provider  # DIFF-ANCHOR: c41df08d
+        android:name="org.chromium.android_webview.services.SafeModeVariationsSeedContentProvider"
+        android:authorities="$PACKAGE.SafeModeVariationsSeedContentProvider"
+        android:exported="true"
+        android:process=":webview_service"
+        android:visibleToInstantApps="true">
+    </provider>  # DIFF-ANCHOR: c41df08d
+    <provider  # DIFF-ANCHOR: b73a881a
+        android:name="org.chromium.chrome.browser.download.DownloadFileProvider"
+        android:authorities="$PACKAGE.DownloadFileProvider"
+        android:exported="false"
+        android:grantUriPermissions="true">
+      <meta-data android:name="android.support.FILE_PROVIDER_PATHS" android:resource="@xml/file_paths"/>
+    </provider>  # DIFF-ANCHOR: b73a881a
+    <provider  # DIFF-ANCHOR: f1c2d7e1
+        android:name="org.chromium.chrome.browser.provider.ChromeBrowserProvider"
+        android:authorities="$PACKAGE.ChromeBrowserProvider;$PACKAGE.browser;$PACKAGE"
+        android:exported="true">
+      <path-permission android:path="/bookmarks/search_suggest_query" android:readPermission="android.permission.GLOBAL_SEARCH"/>
+    </provider>  # DIFF-ANCHOR: f1c2d7e1
+    <provider  # DIFF-ANCHOR: 67014fab
+        android:name="org.chromium.chrome.browser.util.ChromeFileProvider"
+        android:authorities="$PACKAGE.FileProvider"
+        android:exported="false"
+        android:grantUriPermissions="true">
+      <meta-data android:name="android.support.FILE_PROVIDER_PATHS" android:resource="@xml/file_paths"/>
+    </provider>  # DIFF-ANCHOR: 67014fab
+    <provider  # DIFF-ANCHOR: cb51666f
+        android:name="org.chromium.ui.dragdrop.DropDataContentProvider"
+        android:authorities="$PACKAGE.DropDataProvider"
+        android:exported="false"
+        android:grantUriPermissions="true">
+    </provider>  # DIFF-ANCHOR: cb51666f
+    <receiver  # DIFF-ANCHOR: 0a6f8fa5
+        android:name="com.google.android.gms.cast.framework.media.MediaIntentReceiver"
+        android:exported="false">
+    </receiver>  # DIFF-ANCHOR: 0a6f8fa5
+    <receiver  # DIFF-ANCHOR: f1c9c29d
+        android:name="com.google.firebase.iid.FirebaseInstanceIdReceiver"
+        android:exported="true"
+        android:permission="com.google.android.c2dm.permission.SEND">
+      <intent-filter>  # DIFF-ANCHOR: aae22013
+        <action android:name="com.google.android.c2dm.intent.RECEIVE"/>
+      </intent-filter>  # DIFF-ANCHOR: aae22013
+    </receiver>  # DIFF-ANCHOR: f1c9c29d
+    <service  # DIFF-ANCHOR: 749391ed
+        android:name="com.google.android.gms.cast.framework.ReconnectionService"
+        android:exported="false">
+    </service>  # DIFF-ANCHOR: 749391ed
+    <service  # DIFF-ANCHOR: 48ce9d28
+        android:name="com.google.android.gms.cast.framework.media.MediaNotificationService"
+        android:exported="false">
+    </service>  # DIFF-ANCHOR: 48ce9d28
+    <service  # DIFF-ANCHOR: 7e26656b
+        android:name="com.google.firebase.components.ComponentDiscoveryService"
+        android:directBootAware="true"
+        android:exported="false">
+      <meta-data android:name="com.google.firebase.components:com.google.firebase.dynamicloading.DynamicLoadingRegistrar" android:value="com.google.firebase.components.ComponentRegistrar"/>
+      <meta-data android:name="com.google.firebase.components:com.google.firebase.iid.Registrar" android:value="com.google.firebase.components.ComponentRegistrar"/>
+      <meta-data android:name="com.google.firebase.components:com.google.firebase.installations.FirebaseInstallationsRegistrar" android:value="com.google.firebase.components.ComponentRegistrar"/>
+      <meta-data android:name="com.google.firebase.components:com.google.firebase.messaging.FirebaseMessagingRegistrar" android:value="com.google.firebase.components.ComponentRegistrar"/>
+    </service>  # DIFF-ANCHOR: 7e26656b
+    <service  # DIFF-ANCHOR: 2295960c
+        android:name="com.google.firebase.messaging.FirebaseMessagingService"
+        android:directBootAware="true"
+        android:exported="false">
+      <intent-filter android:priority="-500">  # DIFF-ANCHOR: 69e70070
+        <action android:name="com.google.firebase.MESSAGING_EVENT"/>
+      </intent-filter>  # DIFF-ANCHOR: 69e70070
+    </service>  # DIFF-ANCHOR: 2295960c
+    <service  # DIFF-ANCHOR: 1d3bf514
+        android:name="org.chromium.android_webview.js_sandbox.service.JsSandboxService0"
+        android:exported="true"
+        android:externalService="true"
+        android:isolatedProcess="true"
+        android:process=":js_sandboxed_process0"
+        android:visibleToInstantApps="true">
+    </service>  # DIFF-ANCHOR: 1d3bf514
+    <service  # DIFF-ANCHOR: b9ec52c4
+        android:name="org.chromium.android_webview.nonembedded.AwComponentUpdateService"
+        android:exported="false"
+        android:permission="android.permission.BIND_JOB_SERVICE"
+        android:process=":webview_apk">
+    </service>  # DIFF-ANCHOR: b9ec52c4
+    <service  # DIFF-ANCHOR: 3cd6d713
+        android:name="org.chromium.android_webview.services.AwMinidumpUploadJobService"
+        android:exported="true"
+        android:permission="android.permission.BIND_JOB_SERVICE"
+        android:process=":webview_service">
+    </service>  # DIFF-ANCHOR: 3cd6d713
+    <service  # DIFF-ANCHOR: 65cddb26
+        android:name="org.chromium.android_webview.services.AwVariationsSeedFetcher"
+        android:exported="false"
+        android:permission="android.permission.BIND_JOB_SERVICE"
+        android:process=":webview_service">
+    </service>  # DIFF-ANCHOR: 65cddb26
+    <service  # DIFF-ANCHOR: c756cf8d
+        android:name="org.chromium.android_webview.services.ComponentsProviderService"
+        android:exported="true"
+        android:process=":webview_service"
+        android:visibleToInstantApps="true">
+    </service>  # DIFF-ANCHOR: c756cf8d
+    <service  # DIFF-ANCHOR: 5cda9608
+        android:name="org.chromium.android_webview.services.CrashReceiverService"
+        android:exported="true"
+        android:process=":webview_service">
+    </service>  # DIFF-ANCHOR: 5cda9608
+    <service  # DIFF-ANCHOR: adce9ea1
+        android:name="org.chromium.android_webview.services.DeveloperUiService"
+        android:exported="true"
+        android:foregroundServiceType="specialUse"
+        android:process=":webview_service">
+      <property android:name="android.app.PROPERTY_SPECIAL_USE_FGS_SUBTYPE" android:value="debugging"/>
+    </service>  # DIFF-ANCHOR: adce9ea1
+    <service  # DIFF-ANCHOR: eecf2fee
+        android:name="org.chromium.android_webview.services.MetricsBridgeService"
+        android:exported="true"
+        android:process=":webview_service"
+        android:visibleToInstantApps="true">
+    </service>  # DIFF-ANCHOR: eecf2fee
+    <service  # DIFF-ANCHOR: bda8b561
+        android:name="org.chromium.android_webview.services.MetricsUploadService"
+        android:exported="true"
+        android:process=":webview_service"
+        android:visibleToInstantApps="true">
+    </service>  # DIFF-ANCHOR: bda8b561
+    <service  # DIFF-ANCHOR: 47046f1b
+        android:name="org.chromium.android_webview.services.SafeModeService"
+        android:exported="true"
+        android:process=":webview_service">
+    </service>  # DIFF-ANCHOR: 47046f1b
+    <service  # DIFF-ANCHOR: c52936d7
+        android:name="org.chromium.android_webview.services.StartupFeatureMetadataHolder"
+        android:enabled="false"
+        android:exported="true">
+      <meta-data android:name="STARTUP_FEATURE_SET_DATA_DIRECTORY_SUFFIX" android:value="true"/>
+      <meta-data android:name="STARTUP_FEATURE_SET_DIRECTORY_BASE_PATH" android:value="true"/>
+    </service>  # DIFF-ANCHOR: c52936d7
+    <service  # DIFF-ANCHOR: dc926e35
+        android:name="org.chromium.android_webview.services.VariationsSeedServer"
+        android:exported="true"
+        android:process=":webview_service">
+    </service>  # DIFF-ANCHOR: dc926e35
+    <service  # DIFF-ANCHOR: 0c6c4fd9
+        android:name="org.chromium.content.app.PrivilegedProcessService0"
+        android:exported="false"
+        android:isolatedProcess="false"
+        android:permission="$PACKAGE.permission.CHILD_SERVICE"
+        android:process=":privileged_process0">
+    </service>  # DIFF-ANCHOR: 0c6c4fd9
+    <service  # DIFF-ANCHOR: 6f89af32
+        android:name="org.chromium.content.app.PrivilegedProcessService1"
+        android:exported="false"
+        android:isolatedProcess="false"
+        android:permission="$PACKAGE.permission.CHILD_SERVICE"
+        android:process=":privileged_process1">
+    </service>  # DIFF-ANCHOR: 6f89af32
+    <service  # DIFF-ANCHOR: 40e0d738
+        android:name="org.chromium.content.app.PrivilegedProcessService2"
+        android:exported="false"
+        android:isolatedProcess="false"
+        android:permission="$PACKAGE.permission.CHILD_SERVICE"
+        android:process=":privileged_process2">
+    </service>  # DIFF-ANCHOR: 40e0d738
+    <service  # DIFF-ANCHOR: b197517d
+        android:name="org.chromium.content.app.PrivilegedProcessService3"
+        android:exported="false"
+        android:isolatedProcess="false"
+        android:permission="$PACKAGE.permission.CHILD_SERVICE"
+        android:process=":privileged_process3">
+    </service>  # DIFF-ANCHOR: b197517d
+    <service  # DIFF-ANCHOR: 52303702
+        android:name="org.chromium.content.app.PrivilegedProcessService4"
+        android:exported="false"
+        android:isolatedProcess="false"
+        android:permission="$PACKAGE.permission.CHILD_SERVICE"
+        android:process=":privileged_process4">
+    </service>  # DIFF-ANCHOR: 52303702
+    <service  # DIFF-ANCHOR: b1e3e8bd
+        android:name="org.chromium.content.app.SandboxedProcessService0"
+        android:exported="true"
+        android:externalService="true"
+        android:isolatedProcess="true"
+        android:permission="$PACKAGE.permission.CHILD_SERVICE"
+        android:process=":sandboxed_process0"
+        android:useAppZygote="true"
+        android:visibleToInstantApps="true">
+    </service>  # DIFF-ANCHOR: b1e3e8bd
+    <service  # DIFF-ANCHOR: 76d1ccf8
+        android:name="org.chromium.content.app.SandboxedProcessService1"
+        android:exported="true"
+        android:externalService="true"
+        android:isolatedProcess="true"
+        android:permission="$PACKAGE.permission.CHILD_SERVICE"
+        android:process=":sandboxed_process1"
+        android:visibleToInstantApps="true">
+    </service>  # DIFF-ANCHOR: 76d1ccf8
+    <service  # DIFF-ANCHOR: 38b95266
+        android:name="org.chromium.content.app.SandboxedProcessService10"
+        android:exported="true"
+        android:externalService="true"
+        android:isolatedProcess="true"
+        android:permission="$PACKAGE.permission.CHILD_SERVICE"
+        android:process=":sandboxed_process10"
+        android:visibleToInstantApps="true">
+    </service>  # DIFF-ANCHOR: 38b95266
+    <service  # DIFF-ANCHOR: e4a2e4a2
+        android:name="org.chromium.content.app.SandboxedProcessService11"
+        android:exported="true"
+        android:externalService="true"
+        android:isolatedProcess="true"
+        android:permission="$PACKAGE.permission.CHILD_SERVICE"
+        android:process=":sandboxed_process11"
+        android:visibleToInstantApps="true">
+    </service>  # DIFF-ANCHOR: e4a2e4a2
+    <service  # DIFF-ANCHOR: d9b2ffba
+        android:name="org.chromium.content.app.SandboxedProcessService12"
+        android:exported="true"
+        android:externalService="true"
+        android:isolatedProcess="true"
+        android:permission="$PACKAGE.permission.CHILD_SERVICE"
+        android:process=":sandboxed_process12"
+        android:visibleToInstantApps="true">
+    </service>  # DIFF-ANCHOR: d9b2ffba
+    <service  # DIFF-ANCHOR: b41bb17d
+        android:name="org.chromium.content.app.SandboxedProcessService13"
+        android:exported="true"
+        android:externalService="true"
+        android:isolatedProcess="true"
+        android:permission="$PACKAGE.permission.CHILD_SERVICE"
+        android:process=":sandboxed_process13"
+        android:visibleToInstantApps="true">
+    </service>  # DIFF-ANCHOR: b41bb17d
+    <service  # DIFF-ANCHOR: aec0ea21
+        android:name="org.chromium.content.app.SandboxedProcessService14"
+        android:exported="true"
+        android:externalService="true"
+        android:isolatedProcess="true"
+        android:permission="$PACKAGE.permission.CHILD_SERVICE"
+        android:process=":sandboxed_process14"
+        android:visibleToInstantApps="true">
+    </service>  # DIFF-ANCHOR: aec0ea21
+    <service  # DIFF-ANCHOR: cf88a5e5
+        android:name="org.chromium.content.app.SandboxedProcessService15"
+        android:exported="true"
+        android:externalService="true"
+        android:isolatedProcess="true"
+        android:permission="$PACKAGE.permission.CHILD_SERVICE"
+        android:process=":sandboxed_process15"
+        android:visibleToInstantApps="true">
+    </service>  # DIFF-ANCHOR: cf88a5e5
+    <service  # DIFF-ANCHOR: 7d85889d
+        android:name="org.chromium.content.app.SandboxedProcessService16"
+        android:exported="true"
+        android:externalService="true"
+        android:isolatedProcess="true"
+        android:permission="$PACKAGE.permission.CHILD_SERVICE"
+        android:process=":sandboxed_process16"
+        android:visibleToInstantApps="true">
+    </service>  # DIFF-ANCHOR: 7d85889d
+    <service  # DIFF-ANCHOR: dae26ed4
+        android:name="org.chromium.content.app.SandboxedProcessService17"
+        android:exported="true"
+        android:externalService="true"
+        android:isolatedProcess="true"
+        android:permission="$PACKAGE.permission.CHILD_SERVICE"
+        android:process=":sandboxed_process17"
+        android:visibleToInstantApps="true">
+    </service>  # DIFF-ANCHOR: dae26ed4
+    <service  # DIFF-ANCHOR: 2c6cf029
+        android:name="org.chromium.content.app.SandboxedProcessService18"
+        android:exported="true"
+        android:externalService="true"
+        android:isolatedProcess="true"
+        android:permission="$PACKAGE.permission.CHILD_SERVICE"
+        android:process=":sandboxed_process18"
+        android:visibleToInstantApps="true">
+    </service>  # DIFF-ANCHOR: 2c6cf029
+    <service  # DIFF-ANCHOR: 1d2f0988
+        android:name="org.chromium.content.app.SandboxedProcessService19"
+        android:exported="true"
+        android:externalService="true"
+        android:isolatedProcess="true"
+        android:permission="$PACKAGE.permission.CHILD_SERVICE"
+        android:process=":sandboxed_process19"
+        android:visibleToInstantApps="true">
+    </service>  # DIFF-ANCHOR: 1d2f0988
+    <service  # DIFF-ANCHOR: 4a39041b
+        android:name="org.chromium.content.app.SandboxedProcessService2"
+        android:exported="true"
+        android:externalService="true"
+        android:isolatedProcess="true"
+        android:permission="$PACKAGE.permission.CHILD_SERVICE"
+        android:process=":sandboxed_process2"
+        android:visibleToInstantApps="true">
+    </service>  # DIFF-ANCHOR: 4a39041b
+    <service  # DIFF-ANCHOR: 073533bf
+        android:name="org.chromium.content.app.SandboxedProcessService20"
+        android:exported="true"
+        android:externalService="true"
+        android:isolatedProcess="true"
+        android:permission="$PACKAGE.permission.CHILD_SERVICE"
+        android:process=":sandboxed_process20"
+        android:visibleToInstantApps="true">
+    </service>  # DIFF-ANCHOR: 073533bf
+    <service  # DIFF-ANCHOR: d24da41d
+        android:name="org.chromium.content.app.SandboxedProcessService21"
+        android:exported="true"
+        android:externalService="true"
+        android:isolatedProcess="true"
+        android:permission="$PACKAGE.permission.CHILD_SERVICE"
+        android:process=":sandboxed_process21"
+        android:visibleToInstantApps="true">
+    </service>  # DIFF-ANCHOR: d24da41d
+    <service  # DIFF-ANCHOR: 594d8b32
+        android:name="org.chromium.content.app.SandboxedProcessService22"
+        android:exported="true"
+        android:externalService="true"
+        android:isolatedProcess="true"
+        android:permission="$PACKAGE.permission.CHILD_SERVICE"
+        android:process=":sandboxed_process22"
+        android:visibleToInstantApps="true">
+    </service>  # DIFF-ANCHOR: 594d8b32
+    <service  # DIFF-ANCHOR: 5528c0c3
+        android:name="org.chromium.content.app.SandboxedProcessService23"
+        android:exported="true"
+        android:externalService="true"
+        android:isolatedProcess="true"
+        android:permission="$PACKAGE.permission.CHILD_SERVICE"
+        android:process=":sandboxed_process23"
+        android:visibleToInstantApps="true">
+    </service>  # DIFF-ANCHOR: 5528c0c3
+    <service  # DIFF-ANCHOR: b7ab2ba3
+        android:name="org.chromium.content.app.SandboxedProcessService24"
+        android:exported="true"
+        android:externalService="true"
+        android:isolatedProcess="true"
+        android:permission="$PACKAGE.permission.CHILD_SERVICE"
+        android:process=":sandboxed_process24"
+        android:visibleToInstantApps="true">
+    </service>  # DIFF-ANCHOR: b7ab2ba3
+    <service  # DIFF-ANCHOR: cec6cb64
+        android:name="org.chromium.content.app.SandboxedProcessService25"
+        android:exported="true"
+        android:externalService="true"
+        android:isolatedProcess="true"
+        android:permission="$PACKAGE.permission.CHILD_SERVICE"
+        android:process=":sandboxed_process25"
+        android:visibleToInstantApps="true">
+    </service>  # DIFF-ANCHOR: cec6cb64
+    <service  # DIFF-ANCHOR: 5b4a00fe
+        android:name="org.chromium.content.app.SandboxedProcessService26"
+        android:exported="true"
+        android:externalService="true"
+        android:isolatedProcess="true"
+        android:permission="$PACKAGE.permission.CHILD_SERVICE"
+        android:process=":sandboxed_process26"
+        android:visibleToInstantApps="true">
+    </service>  # DIFF-ANCHOR: 5b4a00fe
+    <service  # DIFF-ANCHOR: ad49d203
+        android:name="org.chromium.content.app.SandboxedProcessService27"
+        android:exported="true"
+        android:externalService="true"
+        android:isolatedProcess="true"
+        android:permission="$PACKAGE.permission.CHILD_SERVICE"
+        android:process=":sandboxed_process27"
+        android:visibleToInstantApps="true">
+    </service>  # DIFF-ANCHOR: ad49d203
+    <service  # DIFF-ANCHOR: 573298e9
+        android:name="org.chromium.content.app.SandboxedProcessService28"
+        android:exported="true"
+        android:externalService="true"
+        android:isolatedProcess="true"
+        android:permission="$PACKAGE.permission.CHILD_SERVICE"
+        android:process=":sandboxed_process28"
+        android:visibleToInstantApps="true">
+    </service>  # DIFF-ANCHOR: 573298e9
+    <service  # DIFF-ANCHOR: 79897b32
+        android:name="org.chromium.content.app.SandboxedProcessService29"
+        android:exported="true"
+        android:externalService="true"
+        android:isolatedProcess="true"
+        android:permission="$PACKAGE.permission.CHILD_SERVICE"
+        android:process=":sandboxed_process29"
+        android:visibleToInstantApps="true">
+    </service>  # DIFF-ANCHOR: 79897b32
+    <service  # DIFF-ANCHOR: 84335864
+        android:name="org.chromium.content.app.SandboxedProcessService3"
+        android:exported="true"
+        android:externalService="true"
+        android:isolatedProcess="true"
+        android:permission="$PACKAGE.permission.CHILD_SERVICE"
+        android:process=":sandboxed_process3"
+        android:visibleToInstantApps="true">
+    </service>  # DIFF-ANCHOR: 84335864
+    <service  # DIFF-ANCHOR: c4bd371e
+        android:name="org.chromium.content.app.SandboxedProcessService30"
+        android:exported="true"
+        android:externalService="true"
+        android:isolatedProcess="true"
+        android:permission="$PACKAGE.permission.CHILD_SERVICE"
+        android:process=":sandboxed_process30"
+        android:visibleToInstantApps="true">
+    </service>  # DIFF-ANCHOR: c4bd371e
+    <service  # DIFF-ANCHOR: 394a9fd0
+        android:name="org.chromium.content.app.SandboxedProcessService31"
+        android:exported="true"
+        android:externalService="true"
+        android:isolatedProcess="true"
+        android:permission="$PACKAGE.permission.CHILD_SERVICE"
+        android:process=":sandboxed_process31"
+        android:visibleToInstantApps="true">
+    </service>  # DIFF-ANCHOR: 394a9fd0
+    <service  # DIFF-ANCHOR: b811afb8
+        android:name="org.chromium.content.app.SandboxedProcessService32"
+        android:exported="true"
+        android:externalService="true"
+        android:isolatedProcess="true"
+        android:permission="$PACKAGE.permission.CHILD_SERVICE"
+        android:process=":sandboxed_process32"
+        android:visibleToInstantApps="true">
+    </service>  # DIFF-ANCHOR: b811afb8
+    <service  # DIFF-ANCHOR: 2811ddd3
+        android:name="org.chromium.content.app.SandboxedProcessService33"
+        android:exported="true"
+        android:externalService="true"
+        android:isolatedProcess="true"
+        android:permission="$PACKAGE.permission.CHILD_SERVICE"
+        android:process=":sandboxed_process33"
+        android:visibleToInstantApps="true">
+    </service>  # DIFF-ANCHOR: 2811ddd3
+    <service  # DIFF-ANCHOR: 73ae1688
+        android:name="org.chromium.content.app.SandboxedProcessService34"
+        android:exported="true"
+        android:externalService="true"
+        android:isolatedProcess="true"
+        android:permission="$PACKAGE.permission.CHILD_SERVICE"
+        android:process=":sandboxed_process34"
+        android:visibleToInstantApps="true">
+    </service>  # DIFF-ANCHOR: 73ae1688
+    <service  # DIFF-ANCHOR: c476f324
+        android:name="org.chromium.content.app.SandboxedProcessService35"
+        android:exported="true"
+        android:externalService="true"
+        android:isolatedProcess="true"
+        android:permission="$PACKAGE.permission.CHILD_SERVICE"
+        android:process=":sandboxed_process35"
+        android:visibleToInstantApps="true">
+    </service>  # DIFF-ANCHOR: c476f324
+    <service  # DIFF-ANCHOR: 75d5304b
+        android:name="org.chromium.content.app.SandboxedProcessService36"
+        android:exported="true"
+        android:externalService="true"
+        android:isolatedProcess="true"
+        android:permission="$PACKAGE.permission.CHILD_SERVICE"
+        android:process=":sandboxed_process36"
+        android:visibleToInstantApps="true">
+    </service>  # DIFF-ANCHOR: 75d5304b
+    <service  # DIFF-ANCHOR: dc6d0617
+        android:name="org.chromium.content.app.SandboxedProcessService37"
+        android:exported="true"
+        android:externalService="true"
+        android:isolatedProcess="true"
+        android:permission="$PACKAGE.permission.CHILD_SERVICE"
+        android:process=":sandboxed_process37"
+        android:visibleToInstantApps="true">
+    </service>  # DIFF-ANCHOR: dc6d0617
+    <service  # DIFF-ANCHOR: e31efe49
+        android:name="org.chromium.content.app.SandboxedProcessService38"
+        android:exported="true"
+        android:externalService="true"
+        android:isolatedProcess="true"
+        android:permission="$PACKAGE.permission.CHILD_SERVICE"
+        android:process=":sandboxed_process38"
+        android:visibleToInstantApps="true">
+    </service>  # DIFF-ANCHOR: e31efe49
+    <service  # DIFF-ANCHOR: 5736507e
+        android:name="org.chromium.content.app.SandboxedProcessService39"
+        android:exported="true"
+        android:externalService="true"
+        android:isolatedProcess="true"
+        android:permission="$PACKAGE.permission.CHILD_SERVICE"
+        android:process=":sandboxed_process39"
+        android:visibleToInstantApps="true">
+    </service>  # DIFF-ANCHOR: 5736507e
+    <service  # DIFF-ANCHOR: a161be24
+        android:name="org.chromium.content.app.SandboxedProcessService4"
+        android:exported="true"
+        android:externalService="true"
+        android:isolatedProcess="true"
+        android:permission="$PACKAGE.permission.CHILD_SERVICE"
+        android:process=":sandboxed_process4"
+        android:visibleToInstantApps="true">
+    </service>  # DIFF-ANCHOR: a161be24
+    <service  # DIFF-ANCHOR: 8e591688
+        android:name="org.chromium.content.app.SandboxedProcessService5"
+        android:exported="true"
+        android:externalService="true"
+        android:isolatedProcess="true"
+        android:permission="$PACKAGE.permission.CHILD_SERVICE"
+        android:process=":sandboxed_process5"
+        android:visibleToInstantApps="true">
+    </service>  # DIFF-ANCHOR: 8e591688
+    <service  # DIFF-ANCHOR: 705141d0
+        android:name="org.chromium.content.app.SandboxedProcessService6"
+        android:exported="true"
+        android:externalService="true"
+        android:isolatedProcess="true"
+        android:permission="$PACKAGE.permission.CHILD_SERVICE"
+        android:process=":sandboxed_process6"
+        android:visibleToInstantApps="true">
+    </service>  # DIFF-ANCHOR: 705141d0
+    <service  # DIFF-ANCHOR: 38ed2189
+        android:name="org.chromium.content.app.SandboxedProcessService7"
+        android:exported="true"
+        android:externalService="true"
+        android:isolatedProcess="true"
+        android:permission="$PACKAGE.permission.CHILD_SERVICE"
+        android:process=":sandboxed_process7"
+        android:visibleToInstantApps="true">
+    </service>  # DIFF-ANCHOR: 38ed2189
+    <service  # DIFF-ANCHOR: aa417956
+        android:name="org.chromium.content.app.SandboxedProcessService8"
+        android:exported="true"
+        android:externalService="true"
+        android:isolatedProcess="true"
+        android:permission="$PACKAGE.permission.CHILD_SERVICE"
+        android:process=":sandboxed_process8"
+        android:visibleToInstantApps="true">
+    </service>  # DIFF-ANCHOR: aa417956
+    <service  # DIFF-ANCHOR: e2f3bbbd
+        android:name="org.chromium.content.app.SandboxedProcessService9"
+        android:exported="true"
+        android:externalService="true"
+        android:isolatedProcess="true"
+        android:permission="$PACKAGE.permission.CHILD_SERVICE"
+        android:process=":sandboxed_process9"
+        android:visibleToInstantApps="true">
+    </service>  # DIFF-ANCHOR: e2f3bbbd
+    <uses-library android:name="android.ext.adservices" android:required="false"/>
+  </application>
+</manifest>
diff --git a/chrome/android/expectations/trichrome_chrome_32_64_bundle.arm64.libs_and_assets.expected b/chrome/android/expectations/trichrome_chrome_32_64_bundle.arm64.libs_and_assets.expected
new file mode 100644
index 0000000..a57a100
--- /dev/null
+++ b/chrome/android/expectations/trichrome_chrome_32_64_bundle.arm64.libs_and_assets.expected
@@ -0,0 +1,86 @@
+apk_path=lib/armeabi-v7a/libchromium_android_linker.so, compress=False, alignment=4096
+apk_path=assets/chrome_100_percent.pak, compress=False, alignment=4
+apk_path=assets/locales/af.pak, compress=False, alignment=4
+apk_path=assets/locales/am.pak, compress=False, alignment=4
+apk_path=assets/locales/ar.pak, compress=False, alignment=4
+apk_path=assets/locales/as.pak, compress=False, alignment=4
+apk_path=assets/locales/az.pak, compress=False, alignment=4
+apk_path=assets/locales/be.pak, compress=False, alignment=4
+apk_path=assets/locales/bg.pak, compress=False, alignment=4
+apk_path=assets/locales/bn.pak, compress=False, alignment=4
+apk_path=assets/locales/bs.pak, compress=False, alignment=4
+apk_path=assets/locales/ca.pak, compress=False, alignment=4
+apk_path=assets/locales/cs.pak, compress=False, alignment=4
+apk_path=assets/locales/da.pak, compress=False, alignment=4
+apk_path=assets/locales/de.pak, compress=False, alignment=4
+apk_path=assets/locales/el.pak, compress=False, alignment=4
+apk_path=assets/locales/en-GB.pak, compress=False, alignment=4
+apk_path=assets/locales/en-US.pak, compress=False, alignment=4
+apk_path=assets/locales/es-419.pak, compress=False, alignment=4
+apk_path=assets/locales/es.pak, compress=False, alignment=4
+apk_path=assets/locales/et.pak, compress=False, alignment=4
+apk_path=assets/locales/eu.pak, compress=False, alignment=4
+apk_path=assets/locales/fa.pak, compress=False, alignment=4
+apk_path=assets/locales/fi.pak, compress=False, alignment=4
+apk_path=assets/locales/fil.pak, compress=False, alignment=4
+apk_path=assets/locales/fr-CA.pak, compress=False, alignment=4
+apk_path=assets/locales/fr.pak, compress=False, alignment=4
+apk_path=assets/locales/gl.pak, compress=False, alignment=4
+apk_path=assets/locales/gu.pak, compress=False, alignment=4
+apk_path=assets/locales/he.pak, compress=False, alignment=4
+apk_path=assets/locales/hi.pak, compress=False, alignment=4
+apk_path=assets/locales/hr.pak, compress=False, alignment=4
+apk_path=assets/locales/hu.pak, compress=False, alignment=4
+apk_path=assets/locales/hy.pak, compress=False, alignment=4
+apk_path=assets/locales/id.pak, compress=False, alignment=4
+apk_path=assets/locales/is.pak, compress=False, alignment=4
+apk_path=assets/locales/it.pak, compress=False, alignment=4
+apk_path=assets/locales/ja.pak, compress=False, alignment=4
+apk_path=assets/locales/ka.pak, compress=False, alignment=4
+apk_path=assets/locales/kk.pak, compress=False, alignment=4
+apk_path=assets/locales/km.pak, compress=False, alignment=4
+apk_path=assets/locales/kn.pak, compress=False, alignment=4
+apk_path=assets/locales/ko.pak, compress=False, alignment=4
+apk_path=assets/locales/ky.pak, compress=False, alignment=4
+apk_path=assets/locales/lo.pak, compress=False, alignment=4
+apk_path=assets/locales/lt.pak, compress=False, alignment=4
+apk_path=assets/locales/lv.pak, compress=False, alignment=4
+apk_path=assets/locales/mk.pak, compress=False, alignment=4
+apk_path=assets/locales/ml.pak, compress=False, alignment=4
+apk_path=assets/locales/mn.pak, compress=False, alignment=4
+apk_path=assets/locales/mr.pak, compress=False, alignment=4
+apk_path=assets/locales/ms.pak, compress=False, alignment=4
+apk_path=assets/locales/my.pak, compress=False, alignment=4
+apk_path=assets/locales/nb.pak, compress=False, alignment=4
+apk_path=assets/locales/ne.pak, compress=False, alignment=4
+apk_path=assets/locales/nl.pak, compress=False, alignment=4
+apk_path=assets/locales/or.pak, compress=False, alignment=4
+apk_path=assets/locales/pa.pak, compress=False, alignment=4
+apk_path=assets/locales/pl.pak, compress=False, alignment=4
+apk_path=assets/locales/pt-BR.pak, compress=False, alignment=4
+apk_path=assets/locales/pt-PT.pak, compress=False, alignment=4
+apk_path=assets/locales/ro.pak, compress=False, alignment=4
+apk_path=assets/locales/ru.pak, compress=False, alignment=4
+apk_path=assets/locales/si.pak, compress=False, alignment=4
+apk_path=assets/locales/sk.pak, compress=False, alignment=4
+apk_path=assets/locales/sl.pak, compress=False, alignment=4
+apk_path=assets/locales/sq.pak, compress=False, alignment=4
+apk_path=assets/locales/sr-Latn.pak, compress=False, alignment=4
+apk_path=assets/locales/sr.pak, compress=False, alignment=4
+apk_path=assets/locales/sv.pak, compress=False, alignment=4
+apk_path=assets/locales/sw.pak, compress=False, alignment=4
+apk_path=assets/locales/ta.pak, compress=False, alignment=4
+apk_path=assets/locales/te.pak, compress=False, alignment=4
+apk_path=assets/locales/th.pak, compress=False, alignment=4
+apk_path=assets/locales/tr.pak, compress=False, alignment=4
+apk_path=assets/locales/uk.pak, compress=False, alignment=4
+apk_path=assets/locales/ur.pak, compress=False, alignment=4
+apk_path=assets/locales/uz.pak, compress=False, alignment=4
+apk_path=assets/locales/vi.pak, compress=False, alignment=4
+apk_path=assets/locales/zh-CN.pak, compress=False, alignment=4
+apk_path=assets/locales/zh-HK.pak, compress=False, alignment=4
+apk_path=assets/locales/zh-TW.pak, compress=False, alignment=4
+apk_path=assets/locales/zu.pak, compress=False, alignment=4
+apk_path=assets/resources.pak, compress=False, alignment=4
+apk_path=assets/webapk8.dex, compress=True, alignment=0
+apk_path=assets/webapk_dex_version.txt, compress=True, alignment=0
diff --git a/chrome/android/expectations/trichrome_chrome_32_64_bundle__base.AndroidManifest.expected b/chrome/android/expectations/trichrome_chrome_32_64_bundle__base.AndroidManifest.expected
new file mode 100644
index 0000000..5463aac
--- /dev/null
+++ b/chrome/android/expectations/trichrome_chrome_32_64_bundle__base.AndroidManifest.expected
@@ -0,0 +1,507 @@
+<?xml version="1.0" ?>
+<manifest
+    xmlns:android="http://schemas.android.com/apk/res/android"
+    package="org.chromium.chrome.stable"
+    platformBuildVersionCode="34"
+    platformBuildVersionName="14"
+    android:isolatedSplits="true"
+    android:versionCode="OFFSET=31"
+    android:versionName="#.#.#.#">
+  <permission android:name="$PACKAGE.TOS_ACKED" android:protectionLevel="signatureOrSystem"/>
+  <permission android:name="$PACKAGE.permission.C2D_MESSAGE" android:protectionLevel="signature"/>
+  <permission android:name="$PACKAGE.permission.CHILD_SERVICE" android:protectionLevel="signature"/>
+  <permission android:name="$PACKAGE.permission.DEBUG" android:label="Debug web pages" android:protectionLevel="signature"/>
+  <permission android:name="$PACKAGE.permission.READ_WRITE_BOOKMARK_FOLDERS" android:protectionLevel="signatureOrSystem"/>
+  <queries>  # DIFF-ANCHOR: 9588fea7
+    <package android:name="com.google.ar.core"/>
+  </queries>  # DIFF-ANCHOR: 9588fea7
+  <uses-feature android:glEsVersion="0x00020000"/>
+  <uses-feature android:name="android.hardware.camera" android:required="false"/>
+  <uses-feature android:name="android.hardware.camera.autofocus" android:required="false"/>
+  <uses-feature android:name="android.hardware.location.gps" android:required="false"/>
+  <uses-feature android:name="android.hardware.microphone" android:required="false"/>
+  <uses-feature android:name="android.hardware.screen.landscape" android:required="false"/>
+  <uses-feature android:name="android.hardware.sensor.accelerometer" android:required="false"/>
+  <uses-feature android:name="android.hardware.sensor.gyroscope" android:required="false"/>
+  <uses-feature android:name="android.hardware.touchscreen" android:required="false"/>
+  <uses-feature android:name="android.hardware.vr.headtracking" android:required="false" android:version="1"/>
+  <uses-feature android:name="android.hardware.vr.high_performance" android:required="false"/>
+  <uses-feature android:name="android.software.vr.mode" android:required="false"/>
+  <uses-permission android:name="$PACKAGE.TOS_ACKED"/>
+  <uses-permission android:name="$PACKAGE.permission.C2D_MESSAGE"/>
+  <uses-permission android:name="$PACKAGE.permission.READ_WRITE_BOOKMARK_FOLDERS"/>
+  <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>
+  <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
+  <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
+  <uses-permission android:name="android.permission.CAMERA"/>
+  <uses-permission android:name="android.permission.CREDENTIAL_MANAGER_QUERY_CANDIDATE_CREDENTIALS"/>
+  <uses-permission android:name="android.permission.CREDENTIAL_MANAGER_SET_ALLOWED_PROVIDERS"/>
+  <uses-permission android:name="android.permission.CREDENTIAL_MANAGER_SET_ORIGIN"/>
+  <uses-permission android:name="android.permission.DOWNLOAD_WITHOUT_NOTIFICATION"/>
+  <uses-permission android:name="android.permission.FOREGROUND_SERVICE"/>
+  <uses-permission android:name="android.permission.FOREGROUND_SERVICE_DATA_SYNC"/>
+  <uses-permission android:name="android.permission.FOREGROUND_SERVICE_MEDIA_PLAYBACK"/>
+  <uses-permission android:name="android.permission.GET_ACCOUNTS"/>
+  <uses-permission android:name="android.permission.INTERNET"/>
+  <uses-permission android:name="android.permission.MANAGE_ACCOUNTS"/>
+  <uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS"/>
+  <uses-permission android:name="android.permission.NFC"/>
+  <uses-permission android:name="android.permission.POST_NOTIFICATIONS"/>
+  <uses-permission android:name="android.permission.QUERY_ALL_PACKAGES"/>
+  <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
+  <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED"/>
+  <uses-permission android:name="android.permission.RECORD_AUDIO"/>
+  <uses-permission android:name="android.permission.RUN_USER_INITIATED_JOBS"/>
+  <uses-permission android:name="android.permission.USE_CREDENTIALS"/>
+  <uses-permission android:name="android.permission.VIBRATE"/>
+  <uses-permission android:name="android.permission.WAKE_LOCK"/>
+  <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
+  <uses-permission android:name="com.android.launcher.permission.INSTALL_SHORTCUT"/>
+  <uses-permission android:name="com.chrome.permission.DEVICE_EXTRAS"/>
+  <uses-permission android:name="com.google.android.apps.now.CURRENT_ACCOUNT_ACCESS"/>
+  <uses-permission android:name="com.google.android.c2dm.permission.RECEIVE"/>
+  <uses-permission-sdk-23 android:name="android.permission.ACCESS_ADSERVICES_ATTRIBUTION"/>
+  <uses-permission-sdk-23 android:name="android.permission.ACCESS_WIFI_STATE"/>
+  <uses-permission-sdk-23 android:name="android.permission.BLUETOOTH"/>
+  <uses-permission-sdk-23 android:name="android.permission.BLUETOOTH_ADMIN" android:maxSdkVersion="30"/>
+  <uses-permission-sdk-23 android:name="android.permission.BLUETOOTH_ADVERTISE"/>
+  <uses-permission-sdk-23 android:name="android.permission.BLUETOOTH_CONNECT"/>
+  <uses-permission-sdk-23 android:name="android.permission.BLUETOOTH_SCAN" android:usesPermissionFlags="neverForLocation"/>
+  <uses-permission-sdk-23 android:name="android.permission.READ_CONTACTS"/>
+  <uses-permission-sdk-23 android:name="android.permission.READ_MEDIA_AUDIO"/>
+  <uses-permission-sdk-23 android:name="android.permission.READ_MEDIA_IMAGES"/>
+  <uses-permission-sdk-23 android:name="android.permission.READ_MEDIA_VIDEO"/>
+  <uses-permission-sdk-23 android:name="android.permission.REORDER_TASKS"/>
+  <uses-permission-sdk-23 android:name="android.permission.REQUEST_INSTALL_PACKAGES"/>
+  <uses-permission-sdk-23 android:name="android.permission.USE_BIOMETRIC"/>
+  <uses-permission-sdk-23 android:name="android.permission.USE_FINGERPRINT"/>
+  <uses-sdk android:minSdkVersion="29" android:targetSdkVersion="34"/>
+  <application
+      android:name="org.chromium.chrome.browser.base.SplitChromeApplication"
+      android:allowAudioPlaybackCapture="false"
+      android:allowBackup="false"
+      android:appComponentFactory="org.chromium.chrome.browser.base.SplitCompatAppComponentFactory"
+      android:enableOnBackInvokedCallback="true"
+      android:extractNativeLibs="false"
+      android:icon="@drawable/ic_launcher"
+      android:label="@string/app_name"
+      android:largeHeap="false"
+      android:manageSpaceActivity="@string/manage_space_activity"
+      android:memtagMode="async"
+      android:multiArch="true"
+      android:networkSecurityConfig="@xml/network_security_config"
+      android:roundIcon="@drawable/ic_launcher_round"
+      android:supportsRtl="true"
+      android:zygotePreloadName="org.chromium.chrome.app.TrichromeZygotePreload">
+    <activity  # DIFF-ANCHOR: ea1a94af
+        android:name="com.google.android.gms.common.api.GoogleApiActivity"
+        android:exported="false"
+        android:theme="@android:style/Theme.Translucent.NoTitleBar">
+    </activity>  # DIFF-ANCHOR: ea1a94af
+    <activity  # DIFF-ANCHOR: a2bae37c
+        android:name="com.google.android.play.core.common.PlayCoreDialogWrapperActivity"
+        android:exported="false"
+        android:stateNotNeeded="true"
+        android:theme="@style/Theme.PlayCore.Transparent">
+    </activity>  # DIFF-ANCHOR: a2bae37c
+    <meta-data android:name="android.allow_multiple_resumed_activities" android:value="true"/>
+    <meta-data android:name="android.content.APP_RESTRICTIONS" android:resource="@xml/app_restrictions"/>
+    <meta-data android:name="com.google.android.gms.cast.framework.OPTIONS_PROVIDER_CLASS_NAME" android:value="org.chromium.components.media_router.caf.CastOptionsProvider"/>
+    <meta-data android:name="com.google.android.gms.version" android:value="@integer/google_play_services_version"/>
+    <meta-data android:name="com.google.ar.core" android:value="optional"/>
+    <meta-data android:name="com.google.ar.core.load_32bit_so_from_split_module" android:value="optional"/>
+    <meta-data android:name="com.google.ar.core.min_apk_version" android:value="231450000"/>
+    <meta-data android:name="com.google.ar.core.session_settings" android:value="allow_front_facing_motion_tracking_6dof,"/>
+    <meta-data android:name="com.samsung.android.sdk.multiwindow.enable" android:value="true"/>
+    <meta-data android:name="com.samsung.android.sdk.multiwindow.penwindow.enable" android:value="true"/>
+    <meta-data android:name="org.chromium.content.browser.NUM_PRIVILEGED_SERVICES" android:value="5"/>
+    <meta-data android:name="org.chromium.content.browser.NUM_SANDBOXED_SERVICES" android:value="40"/>
+    <provider  # DIFF-ANCHOR: bc0a9a7a
+        android:name="com.google.firebase.provider.FirebaseInitProvider"
+        android:authorities="$PACKAGE.firebaseinitprovider"
+        android:directBootAware="true"
+        android:exported="false"
+        android:initOrder="100">
+    </provider>  # DIFF-ANCHOR: bc0a9a7a
+    <provider  # DIFF-ANCHOR: b73a881a
+        android:name="org.chromium.chrome.browser.download.DownloadFileProvider"
+        android:authorities="$PACKAGE.DownloadFileProvider"
+        android:exported="false"
+        android:grantUriPermissions="true">
+      <meta-data android:name="android.support.FILE_PROVIDER_PATHS" android:resource="@xml/file_paths"/>
+    </provider>  # DIFF-ANCHOR: b73a881a
+    <provider  # DIFF-ANCHOR: f1c2d7e1
+        android:name="org.chromium.chrome.browser.provider.ChromeBrowserProvider"
+        android:authorities="$PACKAGE.ChromeBrowserProvider;$PACKAGE.browser;$PACKAGE"
+        android:exported="true">
+      <path-permission android:path="/bookmarks/search_suggest_query" android:readPermission="android.permission.GLOBAL_SEARCH"/>
+    </provider>  # DIFF-ANCHOR: f1c2d7e1
+    <provider  # DIFF-ANCHOR: 67014fab
+        android:name="org.chromium.chrome.browser.util.ChromeFileProvider"
+        android:authorities="$PACKAGE.FileProvider"
+        android:exported="false"
+        android:grantUriPermissions="true">
+      <meta-data android:name="android.support.FILE_PROVIDER_PATHS" android:resource="@xml/file_paths"/>
+    </provider>  # DIFF-ANCHOR: 67014fab
+    <provider  # DIFF-ANCHOR: cb51666f
+        android:name="org.chromium.ui.dragdrop.DropDataContentProvider"
+        android:authorities="$PACKAGE.DropDataProvider"
+        android:exported="false"
+        android:grantUriPermissions="true">
+    </provider>  # DIFF-ANCHOR: cb51666f
+    <receiver  # DIFF-ANCHOR: 0a6f8fa5
+        android:name="com.google.android.gms.cast.framework.media.MediaIntentReceiver"
+        android:exported="false">
+    </receiver>  # DIFF-ANCHOR: 0a6f8fa5
+    <receiver  # DIFF-ANCHOR: f1c9c29d
+        android:name="com.google.firebase.iid.FirebaseInstanceIdReceiver"
+        android:exported="true"
+        android:permission="com.google.android.c2dm.permission.SEND">
+      <intent-filter>  # DIFF-ANCHOR: aae22013
+        <action android:name="com.google.android.c2dm.intent.RECEIVE"/>
+      </intent-filter>  # DIFF-ANCHOR: aae22013
+    </receiver>  # DIFF-ANCHOR: f1c9c29d
+    <service  # DIFF-ANCHOR: 749391ed
+        android:name="com.google.android.gms.cast.framework.ReconnectionService"
+        android:exported="false">
+    </service>  # DIFF-ANCHOR: 749391ed
+    <service  # DIFF-ANCHOR: 48ce9d28
+        android:name="com.google.android.gms.cast.framework.media.MediaNotificationService"
+        android:exported="false">
+    </service>  # DIFF-ANCHOR: 48ce9d28
+    <service  # DIFF-ANCHOR: 7e26656b
+        android:name="com.google.firebase.components.ComponentDiscoveryService"
+        android:directBootAware="true"
+        android:exported="false">
+      <meta-data android:name="com.google.firebase.components:com.google.firebase.dynamicloading.DynamicLoadingRegistrar" android:value="com.google.firebase.components.ComponentRegistrar"/>
+      <meta-data android:name="com.google.firebase.components:com.google.firebase.iid.Registrar" android:value="com.google.firebase.components.ComponentRegistrar"/>
+      <meta-data android:name="com.google.firebase.components:com.google.firebase.installations.FirebaseInstallationsRegistrar" android:value="com.google.firebase.components.ComponentRegistrar"/>
+      <meta-data android:name="com.google.firebase.components:com.google.firebase.messaging.FirebaseMessagingRegistrar" android:value="com.google.firebase.components.ComponentRegistrar"/>
+    </service>  # DIFF-ANCHOR: 7e26656b
+    <service  # DIFF-ANCHOR: 2295960c
+        android:name="com.google.firebase.messaging.FirebaseMessagingService"
+        android:directBootAware="true"
+        android:exported="false">
+      <intent-filter android:priority="-500">  # DIFF-ANCHOR: 69e70070
+        <action android:name="com.google.firebase.MESSAGING_EVENT"/>
+      </intent-filter>  # DIFF-ANCHOR: 69e70070
+    </service>  # DIFF-ANCHOR: 2295960c
+    <service  # DIFF-ANCHOR: 0c6c4fd9
+        android:name="org.chromium.content.app.PrivilegedProcessService0"
+        android:exported="false"
+        android:isolatedProcess="false"
+        android:permission="$PACKAGE.permission.CHILD_SERVICE"
+        android:process=":privileged_process0">
+    </service>  # DIFF-ANCHOR: 0c6c4fd9
+    <service  # DIFF-ANCHOR: 6f89af32
+        android:name="org.chromium.content.app.PrivilegedProcessService1"
+        android:exported="false"
+        android:isolatedProcess="false"
+        android:permission="$PACKAGE.permission.CHILD_SERVICE"
+        android:process=":privileged_process1">
+    </service>  # DIFF-ANCHOR: 6f89af32
+    <service  # DIFF-ANCHOR: 40e0d738
+        android:name="org.chromium.content.app.PrivilegedProcessService2"
+        android:exported="false"
+        android:isolatedProcess="false"
+        android:permission="$PACKAGE.permission.CHILD_SERVICE"
+        android:process=":privileged_process2">
+    </service>  # DIFF-ANCHOR: 40e0d738
+    <service  # DIFF-ANCHOR: b197517d
+        android:name="org.chromium.content.app.PrivilegedProcessService3"
+        android:exported="false"
+        android:isolatedProcess="false"
+        android:permission="$PACKAGE.permission.CHILD_SERVICE"
+        android:process=":privileged_process3">
+    </service>  # DIFF-ANCHOR: b197517d
+    <service  # DIFF-ANCHOR: 52303702
+        android:name="org.chromium.content.app.PrivilegedProcessService4"
+        android:exported="false"
+        android:isolatedProcess="false"
+        android:permission="$PACKAGE.permission.CHILD_SERVICE"
+        android:process=":privileged_process4">
+    </service>  # DIFF-ANCHOR: 52303702
+    <service  # DIFF-ANCHOR: b1e3e8bd
+        android:name="org.chromium.content.app.SandboxedProcessService0"
+        android:exported="False"
+        android:isolatedProcess="true"
+        android:permission="$PACKAGE.permission.CHILD_SERVICE"
+        android:process=":sandboxed_process0"
+        android:useAppZygote="true">
+    </service>  # DIFF-ANCHOR: b1e3e8bd
+    <service  # DIFF-ANCHOR: 76d1ccf8
+        android:name="org.chromium.content.app.SandboxedProcessService1"
+        android:exported="False"
+        android:isolatedProcess="true"
+        android:permission="$PACKAGE.permission.CHILD_SERVICE"
+        android:process=":sandboxed_process1">
+    </service>  # DIFF-ANCHOR: 76d1ccf8
+    <service  # DIFF-ANCHOR: 38b95266
+        android:name="org.chromium.content.app.SandboxedProcessService10"
+        android:exported="False"
+        android:isolatedProcess="true"
+        android:permission="$PACKAGE.permission.CHILD_SERVICE"
+        android:process=":sandboxed_process10">
+    </service>  # DIFF-ANCHOR: 38b95266
+    <service  # DIFF-ANCHOR: e4a2e4a2
+        android:name="org.chromium.content.app.SandboxedProcessService11"
+        android:exported="False"
+        android:isolatedProcess="true"
+        android:permission="$PACKAGE.permission.CHILD_SERVICE"
+        android:process=":sandboxed_process11">
+    </service>  # DIFF-ANCHOR: e4a2e4a2
+    <service  # DIFF-ANCHOR: d9b2ffba
+        android:name="org.chromium.content.app.SandboxedProcessService12"
+        android:exported="False"
+        android:isolatedProcess="true"
+        android:permission="$PACKAGE.permission.CHILD_SERVICE"
+        android:process=":sandboxed_process12">
+    </service>  # DIFF-ANCHOR: d9b2ffba
+    <service  # DIFF-ANCHOR: b41bb17d
+        android:name="org.chromium.content.app.SandboxedProcessService13"
+        android:exported="False"
+        android:isolatedProcess="true"
+        android:permission="$PACKAGE.permission.CHILD_SERVICE"
+        android:process=":sandboxed_process13">
+    </service>  # DIFF-ANCHOR: b41bb17d
+    <service  # DIFF-ANCHOR: aec0ea21
+        android:name="org.chromium.content.app.SandboxedProcessService14"
+        android:exported="False"
+        android:isolatedProcess="true"
+        android:permission="$PACKAGE.permission.CHILD_SERVICE"
+        android:process=":sandboxed_process14">
+    </service>  # DIFF-ANCHOR: aec0ea21
+    <service  # DIFF-ANCHOR: cf88a5e5
+        android:name="org.chromium.content.app.SandboxedProcessService15"
+        android:exported="False"
+        android:isolatedProcess="true"
+        android:permission="$PACKAGE.permission.CHILD_SERVICE"
+        android:process=":sandboxed_process15">
+    </service>  # DIFF-ANCHOR: cf88a5e5
+    <service  # DIFF-ANCHOR: 7d85889d
+        android:name="org.chromium.content.app.SandboxedProcessService16"
+        android:exported="False"
+        android:isolatedProcess="true"
+        android:permission="$PACKAGE.permission.CHILD_SERVICE"
+        android:process=":sandboxed_process16">
+    </service>  # DIFF-ANCHOR: 7d85889d
+    <service  # DIFF-ANCHOR: dae26ed4
+        android:name="org.chromium.content.app.SandboxedProcessService17"
+        android:exported="False"
+        android:isolatedProcess="true"
+        android:permission="$PACKAGE.permission.CHILD_SERVICE"
+        android:process=":sandboxed_process17">
+    </service>  # DIFF-ANCHOR: dae26ed4
+    <service  # DIFF-ANCHOR: 2c6cf029
+        android:name="org.chromium.content.app.SandboxedProcessService18"
+        android:exported="False"
+        android:isolatedProcess="true"
+        android:permission="$PACKAGE.permission.CHILD_SERVICE"
+        android:process=":sandboxed_process18">
+    </service>  # DIFF-ANCHOR: 2c6cf029
+    <service  # DIFF-ANCHOR: 1d2f0988
+        android:name="org.chromium.content.app.SandboxedProcessService19"
+        android:exported="False"
+        android:isolatedProcess="true"
+        android:permission="$PACKAGE.permission.CHILD_SERVICE"
+        android:process=":sandboxed_process19">
+    </service>  # DIFF-ANCHOR: 1d2f0988
+    <service  # DIFF-ANCHOR: 4a39041b
+        android:name="org.chromium.content.app.SandboxedProcessService2"
+        android:exported="False"
+        android:isolatedProcess="true"
+        android:permission="$PACKAGE.permission.CHILD_SERVICE"
+        android:process=":sandboxed_process2">
+    </service>  # DIFF-ANCHOR: 4a39041b
+    <service  # DIFF-ANCHOR: 073533bf
+        android:name="org.chromium.content.app.SandboxedProcessService20"
+        android:exported="False"
+        android:isolatedProcess="true"
+        android:permission="$PACKAGE.permission.CHILD_SERVICE"
+        android:process=":sandboxed_process20">
+    </service>  # DIFF-ANCHOR: 073533bf
+    <service  # DIFF-ANCHOR: d24da41d
+        android:name="org.chromium.content.app.SandboxedProcessService21"
+        android:exported="False"
+        android:isolatedProcess="true"
+        android:permission="$PACKAGE.permission.CHILD_SERVICE"
+        android:process=":sandboxed_process21">
+    </service>  # DIFF-ANCHOR: d24da41d
+    <service  # DIFF-ANCHOR: 594d8b32
+        android:name="org.chromium.content.app.SandboxedProcessService22"
+        android:exported="False"
+        android:isolatedProcess="true"
+        android:permission="$PACKAGE.permission.CHILD_SERVICE"
+        android:process=":sandboxed_process22">
+    </service>  # DIFF-ANCHOR: 594d8b32
+    <service  # DIFF-ANCHOR: 5528c0c3
+        android:name="org.chromium.content.app.SandboxedProcessService23"
+        android:exported="False"
+        android:isolatedProcess="true"
+        android:permission="$PACKAGE.permission.CHILD_SERVICE"
+        android:process=":sandboxed_process23">
+    </service>  # DIFF-ANCHOR: 5528c0c3
+    <service  # DIFF-ANCHOR: b7ab2ba3
+        android:name="org.chromium.content.app.SandboxedProcessService24"
+        android:exported="False"
+        android:isolatedProcess="true"
+        android:permission="$PACKAGE.permission.CHILD_SERVICE"
+        android:process=":sandboxed_process24">
+    </service>  # DIFF-ANCHOR: b7ab2ba3
+    <service  # DIFF-ANCHOR: cec6cb64
+        android:name="org.chromium.content.app.SandboxedProcessService25"
+        android:exported="False"
+        android:isolatedProcess="true"
+        android:permission="$PACKAGE.permission.CHILD_SERVICE"
+        android:process=":sandboxed_process25">
+    </service>  # DIFF-ANCHOR: cec6cb64
+    <service  # DIFF-ANCHOR: 5b4a00fe
+        android:name="org.chromium.content.app.SandboxedProcessService26"
+        android:exported="False"
+        android:isolatedProcess="true"
+        android:permission="$PACKAGE.permission.CHILD_SERVICE"
+        android:process=":sandboxed_process26">
+    </service>  # DIFF-ANCHOR: 5b4a00fe
+    <service  # DIFF-ANCHOR: ad49d203
+        android:name="org.chromium.content.app.SandboxedProcessService27"
+        android:exported="False"
+        android:isolatedProcess="true"
+        android:permission="$PACKAGE.permission.CHILD_SERVICE"
+        android:process=":sandboxed_process27">
+    </service>  # DIFF-ANCHOR: ad49d203
+    <service  # DIFF-ANCHOR: 573298e9
+        android:name="org.chromium.content.app.SandboxedProcessService28"
+        android:exported="False"
+        android:isolatedProcess="true"
+        android:permission="$PACKAGE.permission.CHILD_SERVICE"
+        android:process=":sandboxed_process28">
+    </service>  # DIFF-ANCHOR: 573298e9
+    <service  # DIFF-ANCHOR: 79897b32
+        android:name="org.chromium.content.app.SandboxedProcessService29"
+        android:exported="False"
+        android:isolatedProcess="true"
+        android:permission="$PACKAGE.permission.CHILD_SERVICE"
+        android:process=":sandboxed_process29">
+    </service>  # DIFF-ANCHOR: 79897b32
+    <service  # DIFF-ANCHOR: 84335864
+        android:name="org.chromium.content.app.SandboxedProcessService3"
+        android:exported="False"
+        android:isolatedProcess="true"
+        android:permission="$PACKAGE.permission.CHILD_SERVICE"
+        android:process=":sandboxed_process3">
+    </service>  # DIFF-ANCHOR: 84335864
+    <service  # DIFF-ANCHOR: c4bd371e
+        android:name="org.chromium.content.app.SandboxedProcessService30"
+        android:exported="False"
+        android:isolatedProcess="true"
+        android:permission="$PACKAGE.permission.CHILD_SERVICE"
+        android:process=":sandboxed_process30">
+    </service>  # DIFF-ANCHOR: c4bd371e
+    <service  # DIFF-ANCHOR: 394a9fd0
+        android:name="org.chromium.content.app.SandboxedProcessService31"
+        android:exported="False"
+        android:isolatedProcess="true"
+        android:permission="$PACKAGE.permission.CHILD_SERVICE"
+        android:process=":sandboxed_process31">
+    </service>  # DIFF-ANCHOR: 394a9fd0
+    <service  # DIFF-ANCHOR: b811afb8
+        android:name="org.chromium.content.app.SandboxedProcessService32"
+        android:exported="False"
+        android:isolatedProcess="true"
+        android:permission="$PACKAGE.permission.CHILD_SERVICE"
+        android:process=":sandboxed_process32">
+    </service>  # DIFF-ANCHOR: b811afb8
+    <service  # DIFF-ANCHOR: 2811ddd3
+        android:name="org.chromium.content.app.SandboxedProcessService33"
+        android:exported="False"
+        android:isolatedProcess="true"
+        android:permission="$PACKAGE.permission.CHILD_SERVICE"
+        android:process=":sandboxed_process33">
+    </service>  # DIFF-ANCHOR: 2811ddd3
+    <service  # DIFF-ANCHOR: 73ae1688
+        android:name="org.chromium.content.app.SandboxedProcessService34"
+        android:exported="False"
+        android:isolatedProcess="true"
+        android:permission="$PACKAGE.permission.CHILD_SERVICE"
+        android:process=":sandboxed_process34">
+    </service>  # DIFF-ANCHOR: 73ae1688
+    <service  # DIFF-ANCHOR: c476f324
+        android:name="org.chromium.content.app.SandboxedProcessService35"
+        android:exported="False"
+        android:isolatedProcess="true"
+        android:permission="$PACKAGE.permission.CHILD_SERVICE"
+        android:process=":sandboxed_process35">
+    </service>  # DIFF-ANCHOR: c476f324
+    <service  # DIFF-ANCHOR: 75d5304b
+        android:name="org.chromium.content.app.SandboxedProcessService36"
+        android:exported="False"
+        android:isolatedProcess="true"
+        android:permission="$PACKAGE.permission.CHILD_SERVICE"
+        android:process=":sandboxed_process36">
+    </service>  # DIFF-ANCHOR: 75d5304b
+    <service  # DIFF-ANCHOR: dc6d0617
+        android:name="org.chromium.content.app.SandboxedProcessService37"
+        android:exported="False"
+        android:isolatedProcess="true"
+        android:permission="$PACKAGE.permission.CHILD_SERVICE"
+        android:process=":sandboxed_process37">
+    </service>  # DIFF-ANCHOR: dc6d0617
+    <service  # DIFF-ANCHOR: e31efe49
+        android:name="org.chromium.content.app.SandboxedProcessService38"
+        android:exported="False"
+        android:isolatedProcess="true"
+        android:permission="$PACKAGE.permission.CHILD_SERVICE"
+        android:process=":sandboxed_process38">
+    </service>  # DIFF-ANCHOR: e31efe49
+    <service  # DIFF-ANCHOR: 5736507e
+        android:name="org.chromium.content.app.SandboxedProcessService39"
+        android:exported="False"
+        android:isolatedProcess="true"
+        android:permission="$PACKAGE.permission.CHILD_SERVICE"
+        android:process=":sandboxed_process39">
+    </service>  # DIFF-ANCHOR: 5736507e
+    <service  # DIFF-ANCHOR: a161be24
+        android:name="org.chromium.content.app.SandboxedProcessService4"
+        android:exported="False"
+        android:isolatedProcess="true"
+        android:permission="$PACKAGE.permission.CHILD_SERVICE"
+        android:process=":sandboxed_process4">
+    </service>  # DIFF-ANCHOR: a161be24
+    <service  # DIFF-ANCHOR: 8e591688
+        android:name="org.chromium.content.app.SandboxedProcessService5"
+        android:exported="False"
+        android:isolatedProcess="true"
+        android:permission="$PACKAGE.permission.CHILD_SERVICE"
+        android:process=":sandboxed_process5">
+    </service>  # DIFF-ANCHOR: 8e591688
+    <service  # DIFF-ANCHOR: 705141d0
+        android:name="org.chromium.content.app.SandboxedProcessService6"
+        android:exported="False"
+        android:isolatedProcess="true"
+        android:permission="$PACKAGE.permission.CHILD_SERVICE"
+        android:process=":sandboxed_process6">
+    </service>  # DIFF-ANCHOR: 705141d0
+    <service  # DIFF-ANCHOR: 38ed2189
+        android:name="org.chromium.content.app.SandboxedProcessService7"
+        android:exported="False"
+        android:isolatedProcess="true"
+        android:permission="$PACKAGE.permission.CHILD_SERVICE"
+        android:process=":sandboxed_process7">
+    </service>  # DIFF-ANCHOR: 38ed2189
+    <service  # DIFF-ANCHOR: aa417956
+        android:name="org.chromium.content.app.SandboxedProcessService8"
+        android:exported="False"
+        android:isolatedProcess="true"
+        android:permission="$PACKAGE.permission.CHILD_SERVICE"
+        android:process=":sandboxed_process8">
+    </service>  # DIFF-ANCHOR: aa417956
+    <service  # DIFF-ANCHOR: e2f3bbbd
+        android:name="org.chromium.content.app.SandboxedProcessService9"
+        android:exported="False"
+        android:isolatedProcess="true"
+        android:permission="$PACKAGE.permission.CHILD_SERVICE"
+        android:process=":sandboxed_process9">
+    </service>  # DIFF-ANCHOR: e2f3bbbd
+    <uses-static-library android:name="org.chromium.trichromelibrary" android:certDigest="32a2fc74d731105859e5a85df16d95f102d85b22099b8064c5d8915c61dad1e0" android:version="OFFSET=31"/>
+  </application>
+</manifest>
diff --git a/chrome/android/expectations/trichrome_chrome_32_bundle__base.AndroidManifest.expected b/chrome/android/expectations/trichrome_chrome_32_bundle__base.AndroidManifest.expected
new file mode 100644
index 0000000..66d47e31
--- /dev/null
+++ b/chrome/android/expectations/trichrome_chrome_32_bundle__base.AndroidManifest.expected
@@ -0,0 +1,507 @@
+<?xml version="1.0" ?>
+<manifest
+    xmlns:android="http://schemas.android.com/apk/res/android"
+    package="org.chromium.chrome.stable"
+    platformBuildVersionCode="34"
+    platformBuildVersionName="14"
+    android:isolatedSplits="true"
+    android:versionCode="OFFSET=30"
+    android:versionName="#.#.#.#">
+  <permission android:name="$PACKAGE.TOS_ACKED" android:protectionLevel="signatureOrSystem"/>
+  <permission android:name="$PACKAGE.permission.C2D_MESSAGE" android:protectionLevel="signature"/>
+  <permission android:name="$PACKAGE.permission.CHILD_SERVICE" android:protectionLevel="signature"/>
+  <permission android:name="$PACKAGE.permission.DEBUG" android:label="Debug web pages" android:protectionLevel="signature"/>
+  <permission android:name="$PACKAGE.permission.READ_WRITE_BOOKMARK_FOLDERS" android:protectionLevel="signatureOrSystem"/>
+  <queries>  # DIFF-ANCHOR: 9588fea7
+    <package android:name="com.google.ar.core"/>
+  </queries>  # DIFF-ANCHOR: 9588fea7
+  <uses-feature android:glEsVersion="0x00020000"/>
+  <uses-feature android:name="android.hardware.camera" android:required="false"/>
+  <uses-feature android:name="android.hardware.camera.autofocus" android:required="false"/>
+  <uses-feature android:name="android.hardware.location.gps" android:required="false"/>
+  <uses-feature android:name="android.hardware.microphone" android:required="false"/>
+  <uses-feature android:name="android.hardware.screen.landscape" android:required="false"/>
+  <uses-feature android:name="android.hardware.sensor.accelerometer" android:required="false"/>
+  <uses-feature android:name="android.hardware.sensor.gyroscope" android:required="false"/>
+  <uses-feature android:name="android.hardware.touchscreen" android:required="false"/>
+  <uses-feature android:name="android.hardware.vr.headtracking" android:required="false" android:version="1"/>
+  <uses-feature android:name="android.hardware.vr.high_performance" android:required="false"/>
+  <uses-feature android:name="android.software.vr.mode" android:required="false"/>
+  <uses-permission android:name="$PACKAGE.TOS_ACKED"/>
+  <uses-permission android:name="$PACKAGE.permission.C2D_MESSAGE"/>
+  <uses-permission android:name="$PACKAGE.permission.READ_WRITE_BOOKMARK_FOLDERS"/>
+  <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>
+  <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
+  <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
+  <uses-permission android:name="android.permission.CAMERA"/>
+  <uses-permission android:name="android.permission.CREDENTIAL_MANAGER_QUERY_CANDIDATE_CREDENTIALS"/>
+  <uses-permission android:name="android.permission.CREDENTIAL_MANAGER_SET_ALLOWED_PROVIDERS"/>
+  <uses-permission android:name="android.permission.CREDENTIAL_MANAGER_SET_ORIGIN"/>
+  <uses-permission android:name="android.permission.DOWNLOAD_WITHOUT_NOTIFICATION"/>
+  <uses-permission android:name="android.permission.FOREGROUND_SERVICE"/>
+  <uses-permission android:name="android.permission.FOREGROUND_SERVICE_DATA_SYNC"/>
+  <uses-permission android:name="android.permission.FOREGROUND_SERVICE_MEDIA_PLAYBACK"/>
+  <uses-permission android:name="android.permission.GET_ACCOUNTS"/>
+  <uses-permission android:name="android.permission.INTERNET"/>
+  <uses-permission android:name="android.permission.MANAGE_ACCOUNTS"/>
+  <uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS"/>
+  <uses-permission android:name="android.permission.NFC"/>
+  <uses-permission android:name="android.permission.POST_NOTIFICATIONS"/>
+  <uses-permission android:name="android.permission.QUERY_ALL_PACKAGES"/>
+  <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
+  <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED"/>
+  <uses-permission android:name="android.permission.RECORD_AUDIO"/>
+  <uses-permission android:name="android.permission.RUN_USER_INITIATED_JOBS"/>
+  <uses-permission android:name="android.permission.USE_CREDENTIALS"/>
+  <uses-permission android:name="android.permission.VIBRATE"/>
+  <uses-permission android:name="android.permission.WAKE_LOCK"/>
+  <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
+  <uses-permission android:name="com.android.launcher.permission.INSTALL_SHORTCUT"/>
+  <uses-permission android:name="com.chrome.permission.DEVICE_EXTRAS"/>
+  <uses-permission android:name="com.google.android.apps.now.CURRENT_ACCOUNT_ACCESS"/>
+  <uses-permission android:name="com.google.android.c2dm.permission.RECEIVE"/>
+  <uses-permission-sdk-23 android:name="android.permission.ACCESS_ADSERVICES_ATTRIBUTION"/>
+  <uses-permission-sdk-23 android:name="android.permission.ACCESS_WIFI_STATE"/>
+  <uses-permission-sdk-23 android:name="android.permission.BLUETOOTH"/>
+  <uses-permission-sdk-23 android:name="android.permission.BLUETOOTH_ADMIN" android:maxSdkVersion="30"/>
+  <uses-permission-sdk-23 android:name="android.permission.BLUETOOTH_ADVERTISE"/>
+  <uses-permission-sdk-23 android:name="android.permission.BLUETOOTH_CONNECT"/>
+  <uses-permission-sdk-23 android:name="android.permission.BLUETOOTH_SCAN" android:usesPermissionFlags="neverForLocation"/>
+  <uses-permission-sdk-23 android:name="android.permission.READ_CONTACTS"/>
+  <uses-permission-sdk-23 android:name="android.permission.READ_MEDIA_AUDIO"/>
+  <uses-permission-sdk-23 android:name="android.permission.READ_MEDIA_IMAGES"/>
+  <uses-permission-sdk-23 android:name="android.permission.READ_MEDIA_VIDEO"/>
+  <uses-permission-sdk-23 android:name="android.permission.REORDER_TASKS"/>
+  <uses-permission-sdk-23 android:name="android.permission.REQUEST_INSTALL_PACKAGES"/>
+  <uses-permission-sdk-23 android:name="android.permission.USE_BIOMETRIC"/>
+  <uses-permission-sdk-23 android:name="android.permission.USE_FINGERPRINT"/>
+  <uses-sdk android:minSdkVersion="29" android:targetSdkVersion="34"/>
+  <application
+      android:name="org.chromium.chrome.browser.base.SplitChromeApplication"
+      android:allowAudioPlaybackCapture="false"
+      android:allowBackup="false"
+      android:appComponentFactory="org.chromium.chrome.browser.base.SplitCompatAppComponentFactory"
+      android:enableOnBackInvokedCallback="true"
+      android:extractNativeLibs="false"
+      android:icon="@drawable/ic_launcher"
+      android:label="@string/app_name"
+      android:largeHeap="false"
+      android:manageSpaceActivity="@string/manage_space_activity"
+      android:memtagMode="async"
+      android:multiArch="true"
+      android:networkSecurityConfig="@xml/network_security_config"
+      android:roundIcon="@drawable/ic_launcher_round"
+      android:supportsRtl="true"
+      android:zygotePreloadName="org.chromium.chrome.app.TrichromeZygotePreload">
+    <activity  # DIFF-ANCHOR: ea1a94af
+        android:name="com.google.android.gms.common.api.GoogleApiActivity"
+        android:exported="false"
+        android:theme="@android:style/Theme.Translucent.NoTitleBar">
+    </activity>  # DIFF-ANCHOR: ea1a94af
+    <activity  # DIFF-ANCHOR: a2bae37c
+        android:name="com.google.android.play.core.common.PlayCoreDialogWrapperActivity"
+        android:exported="false"
+        android:stateNotNeeded="true"
+        android:theme="@style/Theme.PlayCore.Transparent">
+    </activity>  # DIFF-ANCHOR: a2bae37c
+    <meta-data android:name="android.allow_multiple_resumed_activities" android:value="true"/>
+    <meta-data android:name="android.content.APP_RESTRICTIONS" android:resource="@xml/app_restrictions"/>
+    <meta-data android:name="com.google.android.gms.cast.framework.OPTIONS_PROVIDER_CLASS_NAME" android:value="org.chromium.components.media_router.caf.CastOptionsProvider"/>
+    <meta-data android:name="com.google.android.gms.version" android:value="@integer/google_play_services_version"/>
+    <meta-data android:name="com.google.ar.core" android:value="optional"/>
+    <meta-data android:name="com.google.ar.core.load_32bit_so_from_split_module" android:value="optional"/>
+    <meta-data android:name="com.google.ar.core.min_apk_version" android:value="231450000"/>
+    <meta-data android:name="com.google.ar.core.session_settings" android:value="allow_front_facing_motion_tracking_6dof,"/>
+    <meta-data android:name="com.samsung.android.sdk.multiwindow.enable" android:value="true"/>
+    <meta-data android:name="com.samsung.android.sdk.multiwindow.penwindow.enable" android:value="true"/>
+    <meta-data android:name="org.chromium.content.browser.NUM_PRIVILEGED_SERVICES" android:value="5"/>
+    <meta-data android:name="org.chromium.content.browser.NUM_SANDBOXED_SERVICES" android:value="40"/>
+    <provider  # DIFF-ANCHOR: bc0a9a7a
+        android:name="com.google.firebase.provider.FirebaseInitProvider"
+        android:authorities="$PACKAGE.firebaseinitprovider"
+        android:directBootAware="true"
+        android:exported="false"
+        android:initOrder="100">
+    </provider>  # DIFF-ANCHOR: bc0a9a7a
+    <provider  # DIFF-ANCHOR: b73a881a
+        android:name="org.chromium.chrome.browser.download.DownloadFileProvider"
+        android:authorities="$PACKAGE.DownloadFileProvider"
+        android:exported="false"
+        android:grantUriPermissions="true">
+      <meta-data android:name="android.support.FILE_PROVIDER_PATHS" android:resource="@xml/file_paths"/>
+    </provider>  # DIFF-ANCHOR: b73a881a
+    <provider  # DIFF-ANCHOR: f1c2d7e1
+        android:name="org.chromium.chrome.browser.provider.ChromeBrowserProvider"
+        android:authorities="$PACKAGE.ChromeBrowserProvider;$PACKAGE.browser;$PACKAGE"
+        android:exported="true">
+      <path-permission android:path="/bookmarks/search_suggest_query" android:readPermission="android.permission.GLOBAL_SEARCH"/>
+    </provider>  # DIFF-ANCHOR: f1c2d7e1
+    <provider  # DIFF-ANCHOR: 67014fab
+        android:name="org.chromium.chrome.browser.util.ChromeFileProvider"
+        android:authorities="$PACKAGE.FileProvider"
+        android:exported="false"
+        android:grantUriPermissions="true">
+      <meta-data android:name="android.support.FILE_PROVIDER_PATHS" android:resource="@xml/file_paths"/>
+    </provider>  # DIFF-ANCHOR: 67014fab
+    <provider  # DIFF-ANCHOR: cb51666f
+        android:name="org.chromium.ui.dragdrop.DropDataContentProvider"
+        android:authorities="$PACKAGE.DropDataProvider"
+        android:exported="false"
+        android:grantUriPermissions="true">
+    </provider>  # DIFF-ANCHOR: cb51666f
+    <receiver  # DIFF-ANCHOR: 0a6f8fa5
+        android:name="com.google.android.gms.cast.framework.media.MediaIntentReceiver"
+        android:exported="false">
+    </receiver>  # DIFF-ANCHOR: 0a6f8fa5
+    <receiver  # DIFF-ANCHOR: f1c9c29d
+        android:name="com.google.firebase.iid.FirebaseInstanceIdReceiver"
+        android:exported="true"
+        android:permission="com.google.android.c2dm.permission.SEND">
+      <intent-filter>  # DIFF-ANCHOR: aae22013
+        <action android:name="com.google.android.c2dm.intent.RECEIVE"/>
+      </intent-filter>  # DIFF-ANCHOR: aae22013
+    </receiver>  # DIFF-ANCHOR: f1c9c29d
+    <service  # DIFF-ANCHOR: 749391ed
+        android:name="com.google.android.gms.cast.framework.ReconnectionService"
+        android:exported="false">
+    </service>  # DIFF-ANCHOR: 749391ed
+    <service  # DIFF-ANCHOR: 48ce9d28
+        android:name="com.google.android.gms.cast.framework.media.MediaNotificationService"
+        android:exported="false">
+    </service>  # DIFF-ANCHOR: 48ce9d28
+    <service  # DIFF-ANCHOR: 7e26656b
+        android:name="com.google.firebase.components.ComponentDiscoveryService"
+        android:directBootAware="true"
+        android:exported="false">
+      <meta-data android:name="com.google.firebase.components:com.google.firebase.dynamicloading.DynamicLoadingRegistrar" android:value="com.google.firebase.components.ComponentRegistrar"/>
+      <meta-data android:name="com.google.firebase.components:com.google.firebase.iid.Registrar" android:value="com.google.firebase.components.ComponentRegistrar"/>
+      <meta-data android:name="com.google.firebase.components:com.google.firebase.installations.FirebaseInstallationsRegistrar" android:value="com.google.firebase.components.ComponentRegistrar"/>
+      <meta-data android:name="com.google.firebase.components:com.google.firebase.messaging.FirebaseMessagingRegistrar" android:value="com.google.firebase.components.ComponentRegistrar"/>
+    </service>  # DIFF-ANCHOR: 7e26656b
+    <service  # DIFF-ANCHOR: 2295960c
+        android:name="com.google.firebase.messaging.FirebaseMessagingService"
+        android:directBootAware="true"
+        android:exported="false">
+      <intent-filter android:priority="-500">  # DIFF-ANCHOR: 69e70070
+        <action android:name="com.google.firebase.MESSAGING_EVENT"/>
+      </intent-filter>  # DIFF-ANCHOR: 69e70070
+    </service>  # DIFF-ANCHOR: 2295960c
+    <service  # DIFF-ANCHOR: 0c6c4fd9
+        android:name="org.chromium.content.app.PrivilegedProcessService0"
+        android:exported="false"
+        android:isolatedProcess="false"
+        android:permission="$PACKAGE.permission.CHILD_SERVICE"
+        android:process=":privileged_process0">
+    </service>  # DIFF-ANCHOR: 0c6c4fd9
+    <service  # DIFF-ANCHOR: 6f89af32
+        android:name="org.chromium.content.app.PrivilegedProcessService1"
+        android:exported="false"
+        android:isolatedProcess="false"
+        android:permission="$PACKAGE.permission.CHILD_SERVICE"
+        android:process=":privileged_process1">
+    </service>  # DIFF-ANCHOR: 6f89af32
+    <service  # DIFF-ANCHOR: 40e0d738
+        android:name="org.chromium.content.app.PrivilegedProcessService2"
+        android:exported="false"
+        android:isolatedProcess="false"
+        android:permission="$PACKAGE.permission.CHILD_SERVICE"
+        android:process=":privileged_process2">
+    </service>  # DIFF-ANCHOR: 40e0d738
+    <service  # DIFF-ANCHOR: b197517d
+        android:name="org.chromium.content.app.PrivilegedProcessService3"
+        android:exported="false"
+        android:isolatedProcess="false"
+        android:permission="$PACKAGE.permission.CHILD_SERVICE"
+        android:process=":privileged_process3">
+    </service>  # DIFF-ANCHOR: b197517d
+    <service  # DIFF-ANCHOR: 52303702
+        android:name="org.chromium.content.app.PrivilegedProcessService4"
+        android:exported="false"
+        android:isolatedProcess="false"
+        android:permission="$PACKAGE.permission.CHILD_SERVICE"
+        android:process=":privileged_process4">
+    </service>  # DIFF-ANCHOR: 52303702
+    <service  # DIFF-ANCHOR: b1e3e8bd
+        android:name="org.chromium.content.app.SandboxedProcessService0"
+        android:exported="False"
+        android:isolatedProcess="true"
+        android:permission="$PACKAGE.permission.CHILD_SERVICE"
+        android:process=":sandboxed_process0"
+        android:useAppZygote="true">
+    </service>  # DIFF-ANCHOR: b1e3e8bd
+    <service  # DIFF-ANCHOR: 76d1ccf8
+        android:name="org.chromium.content.app.SandboxedProcessService1"
+        android:exported="False"
+        android:isolatedProcess="true"
+        android:permission="$PACKAGE.permission.CHILD_SERVICE"
+        android:process=":sandboxed_process1">
+    </service>  # DIFF-ANCHOR: 76d1ccf8
+    <service  # DIFF-ANCHOR: 38b95266
+        android:name="org.chromium.content.app.SandboxedProcessService10"
+        android:exported="False"
+        android:isolatedProcess="true"
+        android:permission="$PACKAGE.permission.CHILD_SERVICE"
+        android:process=":sandboxed_process10">
+    </service>  # DIFF-ANCHOR: 38b95266
+    <service  # DIFF-ANCHOR: e4a2e4a2
+        android:name="org.chromium.content.app.SandboxedProcessService11"
+        android:exported="False"
+        android:isolatedProcess="true"
+        android:permission="$PACKAGE.permission.CHILD_SERVICE"
+        android:process=":sandboxed_process11">
+    </service>  # DIFF-ANCHOR: e4a2e4a2
+    <service  # DIFF-ANCHOR: d9b2ffba
+        android:name="org.chromium.content.app.SandboxedProcessService12"
+        android:exported="False"
+        android:isolatedProcess="true"
+        android:permission="$PACKAGE.permission.CHILD_SERVICE"
+        android:process=":sandboxed_process12">
+    </service>  # DIFF-ANCHOR: d9b2ffba
+    <service  # DIFF-ANCHOR: b41bb17d
+        android:name="org.chromium.content.app.SandboxedProcessService13"
+        android:exported="False"
+        android:isolatedProcess="true"
+        android:permission="$PACKAGE.permission.CHILD_SERVICE"
+        android:process=":sandboxed_process13">
+    </service>  # DIFF-ANCHOR: b41bb17d
+    <service  # DIFF-ANCHOR: aec0ea21
+        android:name="org.chromium.content.app.SandboxedProcessService14"
+        android:exported="False"
+        android:isolatedProcess="true"
+        android:permission="$PACKAGE.permission.CHILD_SERVICE"
+        android:process=":sandboxed_process14">
+    </service>  # DIFF-ANCHOR: aec0ea21
+    <service  # DIFF-ANCHOR: cf88a5e5
+        android:name="org.chromium.content.app.SandboxedProcessService15"
+        android:exported="False"
+        android:isolatedProcess="true"
+        android:permission="$PACKAGE.permission.CHILD_SERVICE"
+        android:process=":sandboxed_process15">
+    </service>  # DIFF-ANCHOR: cf88a5e5
+    <service  # DIFF-ANCHOR: 7d85889d
+        android:name="org.chromium.content.app.SandboxedProcessService16"
+        android:exported="False"
+        android:isolatedProcess="true"
+        android:permission="$PACKAGE.permission.CHILD_SERVICE"
+        android:process=":sandboxed_process16">
+    </service>  # DIFF-ANCHOR: 7d85889d
+    <service  # DIFF-ANCHOR: dae26ed4
+        android:name="org.chromium.content.app.SandboxedProcessService17"
+        android:exported="False"
+        android:isolatedProcess="true"
+        android:permission="$PACKAGE.permission.CHILD_SERVICE"
+        android:process=":sandboxed_process17">
+    </service>  # DIFF-ANCHOR: dae26ed4
+    <service  # DIFF-ANCHOR: 2c6cf029
+        android:name="org.chromium.content.app.SandboxedProcessService18"
+        android:exported="False"
+        android:isolatedProcess="true"
+        android:permission="$PACKAGE.permission.CHILD_SERVICE"
+        android:process=":sandboxed_process18">
+    </service>  # DIFF-ANCHOR: 2c6cf029
+    <service  # DIFF-ANCHOR: 1d2f0988
+        android:name="org.chromium.content.app.SandboxedProcessService19"
+        android:exported="False"
+        android:isolatedProcess="true"
+        android:permission="$PACKAGE.permission.CHILD_SERVICE"
+        android:process=":sandboxed_process19">
+    </service>  # DIFF-ANCHOR: 1d2f0988
+    <service  # DIFF-ANCHOR: 4a39041b
+        android:name="org.chromium.content.app.SandboxedProcessService2"
+        android:exported="False"
+        android:isolatedProcess="true"
+        android:permission="$PACKAGE.permission.CHILD_SERVICE"
+        android:process=":sandboxed_process2">
+    </service>  # DIFF-ANCHOR: 4a39041b
+    <service  # DIFF-ANCHOR: 073533bf
+        android:name="org.chromium.content.app.SandboxedProcessService20"
+        android:exported="False"
+        android:isolatedProcess="true"
+        android:permission="$PACKAGE.permission.CHILD_SERVICE"
+        android:process=":sandboxed_process20">
+    </service>  # DIFF-ANCHOR: 073533bf
+    <service  # DIFF-ANCHOR: d24da41d
+        android:name="org.chromium.content.app.SandboxedProcessService21"
+        android:exported="False"
+        android:isolatedProcess="true"
+        android:permission="$PACKAGE.permission.CHILD_SERVICE"
+        android:process=":sandboxed_process21">
+    </service>  # DIFF-ANCHOR: d24da41d
+    <service  # DIFF-ANCHOR: 594d8b32
+        android:name="org.chromium.content.app.SandboxedProcessService22"
+        android:exported="False"
+        android:isolatedProcess="true"
+        android:permission="$PACKAGE.permission.CHILD_SERVICE"
+        android:process=":sandboxed_process22">
+    </service>  # DIFF-ANCHOR: 594d8b32
+    <service  # DIFF-ANCHOR: 5528c0c3
+        android:name="org.chromium.content.app.SandboxedProcessService23"
+        android:exported="False"
+        android:isolatedProcess="true"
+        android:permission="$PACKAGE.permission.CHILD_SERVICE"
+        android:process=":sandboxed_process23">
+    </service>  # DIFF-ANCHOR: 5528c0c3
+    <service  # DIFF-ANCHOR: b7ab2ba3
+        android:name="org.chromium.content.app.SandboxedProcessService24"
+        android:exported="False"
+        android:isolatedProcess="true"
+        android:permission="$PACKAGE.permission.CHILD_SERVICE"
+        android:process=":sandboxed_process24">
+    </service>  # DIFF-ANCHOR: b7ab2ba3
+    <service  # DIFF-ANCHOR: cec6cb64
+        android:name="org.chromium.content.app.SandboxedProcessService25"
+        android:exported="False"
+        android:isolatedProcess="true"
+        android:permission="$PACKAGE.permission.CHILD_SERVICE"
+        android:process=":sandboxed_process25">
+    </service>  # DIFF-ANCHOR: cec6cb64
+    <service  # DIFF-ANCHOR: 5b4a00fe
+        android:name="org.chromium.content.app.SandboxedProcessService26"
+        android:exported="False"
+        android:isolatedProcess="true"
+        android:permission="$PACKAGE.permission.CHILD_SERVICE"
+        android:process=":sandboxed_process26">
+    </service>  # DIFF-ANCHOR: 5b4a00fe
+    <service  # DIFF-ANCHOR: ad49d203
+        android:name="org.chromium.content.app.SandboxedProcessService27"
+        android:exported="False"
+        android:isolatedProcess="true"
+        android:permission="$PACKAGE.permission.CHILD_SERVICE"
+        android:process=":sandboxed_process27">
+    </service>  # DIFF-ANCHOR: ad49d203
+    <service  # DIFF-ANCHOR: 573298e9
+        android:name="org.chromium.content.app.SandboxedProcessService28"
+        android:exported="False"
+        android:isolatedProcess="true"
+        android:permission="$PACKAGE.permission.CHILD_SERVICE"
+        android:process=":sandboxed_process28">
+    </service>  # DIFF-ANCHOR: 573298e9
+    <service  # DIFF-ANCHOR: 79897b32
+        android:name="org.chromium.content.app.SandboxedProcessService29"
+        android:exported="False"
+        android:isolatedProcess="true"
+        android:permission="$PACKAGE.permission.CHILD_SERVICE"
+        android:process=":sandboxed_process29">
+    </service>  # DIFF-ANCHOR: 79897b32
+    <service  # DIFF-ANCHOR: 84335864
+        android:name="org.chromium.content.app.SandboxedProcessService3"
+        android:exported="False"
+        android:isolatedProcess="true"
+        android:permission="$PACKAGE.permission.CHILD_SERVICE"
+        android:process=":sandboxed_process3">
+    </service>  # DIFF-ANCHOR: 84335864
+    <service  # DIFF-ANCHOR: c4bd371e
+        android:name="org.chromium.content.app.SandboxedProcessService30"
+        android:exported="False"
+        android:isolatedProcess="true"
+        android:permission="$PACKAGE.permission.CHILD_SERVICE"
+        android:process=":sandboxed_process30">
+    </service>  # DIFF-ANCHOR: c4bd371e
+    <service  # DIFF-ANCHOR: 394a9fd0
+        android:name="org.chromium.content.app.SandboxedProcessService31"
+        android:exported="False"
+        android:isolatedProcess="true"
+        android:permission="$PACKAGE.permission.CHILD_SERVICE"
+        android:process=":sandboxed_process31">
+    </service>  # DIFF-ANCHOR: 394a9fd0
+    <service  # DIFF-ANCHOR: b811afb8
+        android:name="org.chromium.content.app.SandboxedProcessService32"
+        android:exported="False"
+        android:isolatedProcess="true"
+        android:permission="$PACKAGE.permission.CHILD_SERVICE"
+        android:process=":sandboxed_process32">
+    </service>  # DIFF-ANCHOR: b811afb8
+    <service  # DIFF-ANCHOR: 2811ddd3
+        android:name="org.chromium.content.app.SandboxedProcessService33"
+        android:exported="False"
+        android:isolatedProcess="true"
+        android:permission="$PACKAGE.permission.CHILD_SERVICE"
+        android:process=":sandboxed_process33">
+    </service>  # DIFF-ANCHOR: 2811ddd3
+    <service  # DIFF-ANCHOR: 73ae1688
+        android:name="org.chromium.content.app.SandboxedProcessService34"
+        android:exported="False"
+        android:isolatedProcess="true"
+        android:permission="$PACKAGE.permission.CHILD_SERVICE"
+        android:process=":sandboxed_process34">
+    </service>  # DIFF-ANCHOR: 73ae1688
+    <service  # DIFF-ANCHOR: c476f324
+        android:name="org.chromium.content.app.SandboxedProcessService35"
+        android:exported="False"
+        android:isolatedProcess="true"
+        android:permission="$PACKAGE.permission.CHILD_SERVICE"
+        android:process=":sandboxed_process35">
+    </service>  # DIFF-ANCHOR: c476f324
+    <service  # DIFF-ANCHOR: 75d5304b
+        android:name="org.chromium.content.app.SandboxedProcessService36"
+        android:exported="False"
+        android:isolatedProcess="true"
+        android:permission="$PACKAGE.permission.CHILD_SERVICE"
+        android:process=":sandboxed_process36">
+    </service>  # DIFF-ANCHOR: 75d5304b
+    <service  # DIFF-ANCHOR: dc6d0617
+        android:name="org.chromium.content.app.SandboxedProcessService37"
+        android:exported="False"
+        android:isolatedProcess="true"
+        android:permission="$PACKAGE.permission.CHILD_SERVICE"
+        android:process=":sandboxed_process37">
+    </service>  # DIFF-ANCHOR: dc6d0617
+    <service  # DIFF-ANCHOR: e31efe49
+        android:name="org.chromium.content.app.SandboxedProcessService38"
+        android:exported="False"
+        android:isolatedProcess="true"
+        android:permission="$PACKAGE.permission.CHILD_SERVICE"
+        android:process=":sandboxed_process38">
+    </service>  # DIFF-ANCHOR: e31efe49
+    <service  # DIFF-ANCHOR: 5736507e
+        android:name="org.chromium.content.app.SandboxedProcessService39"
+        android:exported="False"
+        android:isolatedProcess="true"
+        android:permission="$PACKAGE.permission.CHILD_SERVICE"
+        android:process=":sandboxed_process39">
+    </service>  # DIFF-ANCHOR: 5736507e
+    <service  # DIFF-ANCHOR: a161be24
+        android:name="org.chromium.content.app.SandboxedProcessService4"
+        android:exported="False"
+        android:isolatedProcess="true"
+        android:permission="$PACKAGE.permission.CHILD_SERVICE"
+        android:process=":sandboxed_process4">
+    </service>  # DIFF-ANCHOR: a161be24
+    <service  # DIFF-ANCHOR: 8e591688
+        android:name="org.chromium.content.app.SandboxedProcessService5"
+        android:exported="False"
+        android:isolatedProcess="true"
+        android:permission="$PACKAGE.permission.CHILD_SERVICE"
+        android:process=":sandboxed_process5">
+    </service>  # DIFF-ANCHOR: 8e591688
+    <service  # DIFF-ANCHOR: 705141d0
+        android:name="org.chromium.content.app.SandboxedProcessService6"
+        android:exported="False"
+        android:isolatedProcess="true"
+        android:permission="$PACKAGE.permission.CHILD_SERVICE"
+        android:process=":sandboxed_process6">
+    </service>  # DIFF-ANCHOR: 705141d0
+    <service  # DIFF-ANCHOR: 38ed2189
+        android:name="org.chromium.content.app.SandboxedProcessService7"
+        android:exported="False"
+        android:isolatedProcess="true"
+        android:permission="$PACKAGE.permission.CHILD_SERVICE"
+        android:process=":sandboxed_process7">
+    </service>  # DIFF-ANCHOR: 38ed2189
+    <service  # DIFF-ANCHOR: aa417956
+        android:name="org.chromium.content.app.SandboxedProcessService8"
+        android:exported="False"
+        android:isolatedProcess="true"
+        android:permission="$PACKAGE.permission.CHILD_SERVICE"
+        android:process=":sandboxed_process8">
+    </service>  # DIFF-ANCHOR: aa417956
+    <service  # DIFF-ANCHOR: e2f3bbbd
+        android:name="org.chromium.content.app.SandboxedProcessService9"
+        android:exported="False"
+        android:isolatedProcess="true"
+        android:permission="$PACKAGE.permission.CHILD_SERVICE"
+        android:process=":sandboxed_process9">
+    </service>  # DIFF-ANCHOR: e2f3bbbd
+    <uses-static-library android:name="org.chromium.trichromelibrary" android:certDigest="32a2fc74d731105859e5a85df16d95f102d85b22099b8064c5d8915c61dad1e0" android:version="OFFSET=30"/>
+  </application>
+</manifest>
diff --git a/chrome/android/expectations/trichrome_chrome_64_32_bundle__base.AndroidManifest.expected b/chrome/android/expectations/trichrome_chrome_64_32_bundle__base.AndroidManifest.expected
new file mode 100644
index 0000000..c79455f
--- /dev/null
+++ b/chrome/android/expectations/trichrome_chrome_64_32_bundle__base.AndroidManifest.expected
@@ -0,0 +1,507 @@
+<?xml version="1.0" ?>
+<manifest
+    xmlns:android="http://schemas.android.com/apk/res/android"
+    package="org.chromium.chrome.stable"
+    platformBuildVersionCode="34"
+    platformBuildVersionName="14"
+    android:isolatedSplits="true"
+    android:versionCode="OFFSET=32"
+    android:versionName="#.#.#.#">
+  <permission android:name="$PACKAGE.TOS_ACKED" android:protectionLevel="signatureOrSystem"/>
+  <permission android:name="$PACKAGE.permission.C2D_MESSAGE" android:protectionLevel="signature"/>
+  <permission android:name="$PACKAGE.permission.CHILD_SERVICE" android:protectionLevel="signature"/>
+  <permission android:name="$PACKAGE.permission.DEBUG" android:label="Debug web pages" android:protectionLevel="signature"/>
+  <permission android:name="$PACKAGE.permission.READ_WRITE_BOOKMARK_FOLDERS" android:protectionLevel="signatureOrSystem"/>
+  <queries>  # DIFF-ANCHOR: 9588fea7
+    <package android:name="com.google.ar.core"/>
+  </queries>  # DIFF-ANCHOR: 9588fea7
+  <uses-feature android:glEsVersion="0x00020000"/>
+  <uses-feature android:name="android.hardware.camera" android:required="false"/>
+  <uses-feature android:name="android.hardware.camera.autofocus" android:required="false"/>
+  <uses-feature android:name="android.hardware.location.gps" android:required="false"/>
+  <uses-feature android:name="android.hardware.microphone" android:required="false"/>
+  <uses-feature android:name="android.hardware.screen.landscape" android:required="false"/>
+  <uses-feature android:name="android.hardware.sensor.accelerometer" android:required="false"/>
+  <uses-feature android:name="android.hardware.sensor.gyroscope" android:required="false"/>
+  <uses-feature android:name="android.hardware.touchscreen" android:required="false"/>
+  <uses-feature android:name="android.hardware.vr.headtracking" android:required="false" android:version="1"/>
+  <uses-feature android:name="android.hardware.vr.high_performance" android:required="false"/>
+  <uses-feature android:name="android.software.vr.mode" android:required="false"/>
+  <uses-permission android:name="$PACKAGE.TOS_ACKED"/>
+  <uses-permission android:name="$PACKAGE.permission.C2D_MESSAGE"/>
+  <uses-permission android:name="$PACKAGE.permission.READ_WRITE_BOOKMARK_FOLDERS"/>
+  <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>
+  <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
+  <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
+  <uses-permission android:name="android.permission.CAMERA"/>
+  <uses-permission android:name="android.permission.CREDENTIAL_MANAGER_QUERY_CANDIDATE_CREDENTIALS"/>
+  <uses-permission android:name="android.permission.CREDENTIAL_MANAGER_SET_ALLOWED_PROVIDERS"/>
+  <uses-permission android:name="android.permission.CREDENTIAL_MANAGER_SET_ORIGIN"/>
+  <uses-permission android:name="android.permission.DOWNLOAD_WITHOUT_NOTIFICATION"/>
+  <uses-permission android:name="android.permission.FOREGROUND_SERVICE"/>
+  <uses-permission android:name="android.permission.FOREGROUND_SERVICE_DATA_SYNC"/>
+  <uses-permission android:name="android.permission.FOREGROUND_SERVICE_MEDIA_PLAYBACK"/>
+  <uses-permission android:name="android.permission.GET_ACCOUNTS"/>
+  <uses-permission android:name="android.permission.INTERNET"/>
+  <uses-permission android:name="android.permission.MANAGE_ACCOUNTS"/>
+  <uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS"/>
+  <uses-permission android:name="android.permission.NFC"/>
+  <uses-permission android:name="android.permission.POST_NOTIFICATIONS"/>
+  <uses-permission android:name="android.permission.QUERY_ALL_PACKAGES"/>
+  <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
+  <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED"/>
+  <uses-permission android:name="android.permission.RECORD_AUDIO"/>
+  <uses-permission android:name="android.permission.RUN_USER_INITIATED_JOBS"/>
+  <uses-permission android:name="android.permission.USE_CREDENTIALS"/>
+  <uses-permission android:name="android.permission.VIBRATE"/>
+  <uses-permission android:name="android.permission.WAKE_LOCK"/>
+  <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
+  <uses-permission android:name="com.android.launcher.permission.INSTALL_SHORTCUT"/>
+  <uses-permission android:name="com.chrome.permission.DEVICE_EXTRAS"/>
+  <uses-permission android:name="com.google.android.apps.now.CURRENT_ACCOUNT_ACCESS"/>
+  <uses-permission android:name="com.google.android.c2dm.permission.RECEIVE"/>
+  <uses-permission-sdk-23 android:name="android.permission.ACCESS_ADSERVICES_ATTRIBUTION"/>
+  <uses-permission-sdk-23 android:name="android.permission.ACCESS_WIFI_STATE"/>
+  <uses-permission-sdk-23 android:name="android.permission.BLUETOOTH"/>
+  <uses-permission-sdk-23 android:name="android.permission.BLUETOOTH_ADMIN" android:maxSdkVersion="30"/>
+  <uses-permission-sdk-23 android:name="android.permission.BLUETOOTH_ADVERTISE"/>
+  <uses-permission-sdk-23 android:name="android.permission.BLUETOOTH_CONNECT"/>
+  <uses-permission-sdk-23 android:name="android.permission.BLUETOOTH_SCAN" android:usesPermissionFlags="neverForLocation"/>
+  <uses-permission-sdk-23 android:name="android.permission.READ_CONTACTS"/>
+  <uses-permission-sdk-23 android:name="android.permission.READ_MEDIA_AUDIO"/>
+  <uses-permission-sdk-23 android:name="android.permission.READ_MEDIA_IMAGES"/>
+  <uses-permission-sdk-23 android:name="android.permission.READ_MEDIA_VIDEO"/>
+  <uses-permission-sdk-23 android:name="android.permission.REORDER_TASKS"/>
+  <uses-permission-sdk-23 android:name="android.permission.REQUEST_INSTALL_PACKAGES"/>
+  <uses-permission-sdk-23 android:name="android.permission.USE_BIOMETRIC"/>
+  <uses-permission-sdk-23 android:name="android.permission.USE_FINGERPRINT"/>
+  <uses-sdk android:minSdkVersion="29" android:targetSdkVersion="34"/>
+  <application
+      android:name="org.chromium.chrome.browser.base.SplitChromeApplication"
+      android:allowAudioPlaybackCapture="false"
+      android:allowBackup="false"
+      android:appComponentFactory="org.chromium.chrome.browser.base.SplitCompatAppComponentFactory"
+      android:enableOnBackInvokedCallback="true"
+      android:extractNativeLibs="false"
+      android:icon="@drawable/ic_launcher"
+      android:label="@string/app_name"
+      android:largeHeap="false"
+      android:manageSpaceActivity="@string/manage_space_activity"
+      android:memtagMode="async"
+      android:multiArch="true"
+      android:networkSecurityConfig="@xml/network_security_config"
+      android:roundIcon="@drawable/ic_launcher_round"
+      android:supportsRtl="true"
+      android:zygotePreloadName="org.chromium.chrome.app.TrichromeZygotePreload">
+    <activity  # DIFF-ANCHOR: ea1a94af
+        android:name="com.google.android.gms.common.api.GoogleApiActivity"
+        android:exported="false"
+        android:theme="@android:style/Theme.Translucent.NoTitleBar">
+    </activity>  # DIFF-ANCHOR: ea1a94af
+    <activity  # DIFF-ANCHOR: a2bae37c
+        android:name="com.google.android.play.core.common.PlayCoreDialogWrapperActivity"
+        android:exported="false"
+        android:stateNotNeeded="true"
+        android:theme="@style/Theme.PlayCore.Transparent">
+    </activity>  # DIFF-ANCHOR: a2bae37c
+    <meta-data android:name="android.allow_multiple_resumed_activities" android:value="true"/>
+    <meta-data android:name="android.content.APP_RESTRICTIONS" android:resource="@xml/app_restrictions"/>
+    <meta-data android:name="com.google.android.gms.cast.framework.OPTIONS_PROVIDER_CLASS_NAME" android:value="org.chromium.components.media_router.caf.CastOptionsProvider"/>
+    <meta-data android:name="com.google.android.gms.version" android:value="@integer/google_play_services_version"/>
+    <meta-data android:name="com.google.ar.core" android:value="optional"/>
+    <meta-data android:name="com.google.ar.core.load_32bit_so_from_split_module" android:value="optional"/>
+    <meta-data android:name="com.google.ar.core.min_apk_version" android:value="231450000"/>
+    <meta-data android:name="com.google.ar.core.session_settings" android:value="allow_front_facing_motion_tracking_6dof,"/>
+    <meta-data android:name="com.samsung.android.sdk.multiwindow.enable" android:value="true"/>
+    <meta-data android:name="com.samsung.android.sdk.multiwindow.penwindow.enable" android:value="true"/>
+    <meta-data android:name="org.chromium.content.browser.NUM_PRIVILEGED_SERVICES" android:value="5"/>
+    <meta-data android:name="org.chromium.content.browser.NUM_SANDBOXED_SERVICES" android:value="40"/>
+    <provider  # DIFF-ANCHOR: bc0a9a7a
+        android:name="com.google.firebase.provider.FirebaseInitProvider"
+        android:authorities="$PACKAGE.firebaseinitprovider"
+        android:directBootAware="true"
+        android:exported="false"
+        android:initOrder="100">
+    </provider>  # DIFF-ANCHOR: bc0a9a7a
+    <provider  # DIFF-ANCHOR: b73a881a
+        android:name="org.chromium.chrome.browser.download.DownloadFileProvider"
+        android:authorities="$PACKAGE.DownloadFileProvider"
+        android:exported="false"
+        android:grantUriPermissions="true">
+      <meta-data android:name="android.support.FILE_PROVIDER_PATHS" android:resource="@xml/file_paths"/>
+    </provider>  # DIFF-ANCHOR: b73a881a
+    <provider  # DIFF-ANCHOR: f1c2d7e1
+        android:name="org.chromium.chrome.browser.provider.ChromeBrowserProvider"
+        android:authorities="$PACKAGE.ChromeBrowserProvider;$PACKAGE.browser;$PACKAGE"
+        android:exported="true">
+      <path-permission android:path="/bookmarks/search_suggest_query" android:readPermission="android.permission.GLOBAL_SEARCH"/>
+    </provider>  # DIFF-ANCHOR: f1c2d7e1
+    <provider  # DIFF-ANCHOR: 67014fab
+        android:name="org.chromium.chrome.browser.util.ChromeFileProvider"
+        android:authorities="$PACKAGE.FileProvider"
+        android:exported="false"
+        android:grantUriPermissions="true">
+      <meta-data android:name="android.support.FILE_PROVIDER_PATHS" android:resource="@xml/file_paths"/>
+    </provider>  # DIFF-ANCHOR: 67014fab
+    <provider  # DIFF-ANCHOR: cb51666f
+        android:name="org.chromium.ui.dragdrop.DropDataContentProvider"
+        android:authorities="$PACKAGE.DropDataProvider"
+        android:exported="false"
+        android:grantUriPermissions="true">
+    </provider>  # DIFF-ANCHOR: cb51666f
+    <receiver  # DIFF-ANCHOR: 0a6f8fa5
+        android:name="com.google.android.gms.cast.framework.media.MediaIntentReceiver"
+        android:exported="false">
+    </receiver>  # DIFF-ANCHOR: 0a6f8fa5
+    <receiver  # DIFF-ANCHOR: f1c9c29d
+        android:name="com.google.firebase.iid.FirebaseInstanceIdReceiver"
+        android:exported="true"
+        android:permission="com.google.android.c2dm.permission.SEND">
+      <intent-filter>  # DIFF-ANCHOR: aae22013
+        <action android:name="com.google.android.c2dm.intent.RECEIVE"/>
+      </intent-filter>  # DIFF-ANCHOR: aae22013
+    </receiver>  # DIFF-ANCHOR: f1c9c29d
+    <service  # DIFF-ANCHOR: 749391ed
+        android:name="com.google.android.gms.cast.framework.ReconnectionService"
+        android:exported="false">
+    </service>  # DIFF-ANCHOR: 749391ed
+    <service  # DIFF-ANCHOR: 48ce9d28
+        android:name="com.google.android.gms.cast.framework.media.MediaNotificationService"
+        android:exported="false">
+    </service>  # DIFF-ANCHOR: 48ce9d28
+    <service  # DIFF-ANCHOR: 7e26656b
+        android:name="com.google.firebase.components.ComponentDiscoveryService"
+        android:directBootAware="true"
+        android:exported="false">
+      <meta-data android:name="com.google.firebase.components:com.google.firebase.dynamicloading.DynamicLoadingRegistrar" android:value="com.google.firebase.components.ComponentRegistrar"/>
+      <meta-data android:name="com.google.firebase.components:com.google.firebase.iid.Registrar" android:value="com.google.firebase.components.ComponentRegistrar"/>
+      <meta-data android:name="com.google.firebase.components:com.google.firebase.installations.FirebaseInstallationsRegistrar" android:value="com.google.firebase.components.ComponentRegistrar"/>
+      <meta-data android:name="com.google.firebase.components:com.google.firebase.messaging.FirebaseMessagingRegistrar" android:value="com.google.firebase.components.ComponentRegistrar"/>
+    </service>  # DIFF-ANCHOR: 7e26656b
+    <service  # DIFF-ANCHOR: 2295960c
+        android:name="com.google.firebase.messaging.FirebaseMessagingService"
+        android:directBootAware="true"
+        android:exported="false">
+      <intent-filter android:priority="-500">  # DIFF-ANCHOR: 69e70070
+        <action android:name="com.google.firebase.MESSAGING_EVENT"/>
+      </intent-filter>  # DIFF-ANCHOR: 69e70070
+    </service>  # DIFF-ANCHOR: 2295960c
+    <service  # DIFF-ANCHOR: 0c6c4fd9
+        android:name="org.chromium.content.app.PrivilegedProcessService0"
+        android:exported="false"
+        android:isolatedProcess="false"
+        android:permission="$PACKAGE.permission.CHILD_SERVICE"
+        android:process=":privileged_process0">
+    </service>  # DIFF-ANCHOR: 0c6c4fd9
+    <service  # DIFF-ANCHOR: 6f89af32
+        android:name="org.chromium.content.app.PrivilegedProcessService1"
+        android:exported="false"
+        android:isolatedProcess="false"
+        android:permission="$PACKAGE.permission.CHILD_SERVICE"
+        android:process=":privileged_process1">
+    </service>  # DIFF-ANCHOR: 6f89af32
+    <service  # DIFF-ANCHOR: 40e0d738
+        android:name="org.chromium.content.app.PrivilegedProcessService2"
+        android:exported="false"
+        android:isolatedProcess="false"
+        android:permission="$PACKAGE.permission.CHILD_SERVICE"
+        android:process=":privileged_process2">
+    </service>  # DIFF-ANCHOR: 40e0d738
+    <service  # DIFF-ANCHOR: b197517d
+        android:name="org.chromium.content.app.PrivilegedProcessService3"
+        android:exported="false"
+        android:isolatedProcess="false"
+        android:permission="$PACKAGE.permission.CHILD_SERVICE"
+        android:process=":privileged_process3">
+    </service>  # DIFF-ANCHOR: b197517d
+    <service  # DIFF-ANCHOR: 52303702
+        android:name="org.chromium.content.app.PrivilegedProcessService4"
+        android:exported="false"
+        android:isolatedProcess="false"
+        android:permission="$PACKAGE.permission.CHILD_SERVICE"
+        android:process=":privileged_process4">
+    </service>  # DIFF-ANCHOR: 52303702
+    <service  # DIFF-ANCHOR: b1e3e8bd
+        android:name="org.chromium.content.app.SandboxedProcessService0"
+        android:exported="False"
+        android:isolatedProcess="true"
+        android:permission="$PACKAGE.permission.CHILD_SERVICE"
+        android:process=":sandboxed_process0"
+        android:useAppZygote="true">
+    </service>  # DIFF-ANCHOR: b1e3e8bd
+    <service  # DIFF-ANCHOR: 76d1ccf8
+        android:name="org.chromium.content.app.SandboxedProcessService1"
+        android:exported="False"
+        android:isolatedProcess="true"
+        android:permission="$PACKAGE.permission.CHILD_SERVICE"
+        android:process=":sandboxed_process1">
+    </service>  # DIFF-ANCHOR: 76d1ccf8
+    <service  # DIFF-ANCHOR: 38b95266
+        android:name="org.chromium.content.app.SandboxedProcessService10"
+        android:exported="False"
+        android:isolatedProcess="true"
+        android:permission="$PACKAGE.permission.CHILD_SERVICE"
+        android:process=":sandboxed_process10">
+    </service>  # DIFF-ANCHOR: 38b95266
+    <service  # DIFF-ANCHOR: e4a2e4a2
+        android:name="org.chromium.content.app.SandboxedProcessService11"
+        android:exported="False"
+        android:isolatedProcess="true"
+        android:permission="$PACKAGE.permission.CHILD_SERVICE"
+        android:process=":sandboxed_process11">
+    </service>  # DIFF-ANCHOR: e4a2e4a2
+    <service  # DIFF-ANCHOR: d9b2ffba
+        android:name="org.chromium.content.app.SandboxedProcessService12"
+        android:exported="False"
+        android:isolatedProcess="true"
+        android:permission="$PACKAGE.permission.CHILD_SERVICE"
+        android:process=":sandboxed_process12">
+    </service>  # DIFF-ANCHOR: d9b2ffba
+    <service  # DIFF-ANCHOR: b41bb17d
+        android:name="org.chromium.content.app.SandboxedProcessService13"
+        android:exported="False"
+        android:isolatedProcess="true"
+        android:permission="$PACKAGE.permission.CHILD_SERVICE"
+        android:process=":sandboxed_process13">
+    </service>  # DIFF-ANCHOR: b41bb17d
+    <service  # DIFF-ANCHOR: aec0ea21
+        android:name="org.chromium.content.app.SandboxedProcessService14"
+        android:exported="False"
+        android:isolatedProcess="true"
+        android:permission="$PACKAGE.permission.CHILD_SERVICE"
+        android:process=":sandboxed_process14">
+    </service>  # DIFF-ANCHOR: aec0ea21
+    <service  # DIFF-ANCHOR: cf88a5e5
+        android:name="org.chromium.content.app.SandboxedProcessService15"
+        android:exported="False"
+        android:isolatedProcess="true"
+        android:permission="$PACKAGE.permission.CHILD_SERVICE"
+        android:process=":sandboxed_process15">
+    </service>  # DIFF-ANCHOR: cf88a5e5
+    <service  # DIFF-ANCHOR: 7d85889d
+        android:name="org.chromium.content.app.SandboxedProcessService16"
+        android:exported="False"
+        android:isolatedProcess="true"
+        android:permission="$PACKAGE.permission.CHILD_SERVICE"
+        android:process=":sandboxed_process16">
+    </service>  # DIFF-ANCHOR: 7d85889d
+    <service  # DIFF-ANCHOR: dae26ed4
+        android:name="org.chromium.content.app.SandboxedProcessService17"
+        android:exported="False"
+        android:isolatedProcess="true"
+        android:permission="$PACKAGE.permission.CHILD_SERVICE"
+        android:process=":sandboxed_process17">
+    </service>  # DIFF-ANCHOR: dae26ed4
+    <service  # DIFF-ANCHOR: 2c6cf029
+        android:name="org.chromium.content.app.SandboxedProcessService18"
+        android:exported="False"
+        android:isolatedProcess="true"
+        android:permission="$PACKAGE.permission.CHILD_SERVICE"
+        android:process=":sandboxed_process18">
+    </service>  # DIFF-ANCHOR: 2c6cf029
+    <service  # DIFF-ANCHOR: 1d2f0988
+        android:name="org.chromium.content.app.SandboxedProcessService19"
+        android:exported="False"
+        android:isolatedProcess="true"
+        android:permission="$PACKAGE.permission.CHILD_SERVICE"
+        android:process=":sandboxed_process19">
+    </service>  # DIFF-ANCHOR: 1d2f0988
+    <service  # DIFF-ANCHOR: 4a39041b
+        android:name="org.chromium.content.app.SandboxedProcessService2"
+        android:exported="False"
+        android:isolatedProcess="true"
+        android:permission="$PACKAGE.permission.CHILD_SERVICE"
+        android:process=":sandboxed_process2">
+    </service>  # DIFF-ANCHOR: 4a39041b
+    <service  # DIFF-ANCHOR: 073533bf
+        android:name="org.chromium.content.app.SandboxedProcessService20"
+        android:exported="False"
+        android:isolatedProcess="true"
+        android:permission="$PACKAGE.permission.CHILD_SERVICE"
+        android:process=":sandboxed_process20">
+    </service>  # DIFF-ANCHOR: 073533bf
+    <service  # DIFF-ANCHOR: d24da41d
+        android:name="org.chromium.content.app.SandboxedProcessService21"
+        android:exported="False"
+        android:isolatedProcess="true"
+        android:permission="$PACKAGE.permission.CHILD_SERVICE"
+        android:process=":sandboxed_process21">
+    </service>  # DIFF-ANCHOR: d24da41d
+    <service  # DIFF-ANCHOR: 594d8b32
+        android:name="org.chromium.content.app.SandboxedProcessService22"
+        android:exported="False"
+        android:isolatedProcess="true"
+        android:permission="$PACKAGE.permission.CHILD_SERVICE"
+        android:process=":sandboxed_process22">
+    </service>  # DIFF-ANCHOR: 594d8b32
+    <service  # DIFF-ANCHOR: 5528c0c3
+        android:name="org.chromium.content.app.SandboxedProcessService23"
+        android:exported="False"
+        android:isolatedProcess="true"
+        android:permission="$PACKAGE.permission.CHILD_SERVICE"
+        android:process=":sandboxed_process23">
+    </service>  # DIFF-ANCHOR: 5528c0c3
+    <service  # DIFF-ANCHOR: b7ab2ba3
+        android:name="org.chromium.content.app.SandboxedProcessService24"
+        android:exported="False"
+        android:isolatedProcess="true"
+        android:permission="$PACKAGE.permission.CHILD_SERVICE"
+        android:process=":sandboxed_process24">
+    </service>  # DIFF-ANCHOR: b7ab2ba3
+    <service  # DIFF-ANCHOR: cec6cb64
+        android:name="org.chromium.content.app.SandboxedProcessService25"
+        android:exported="False"
+        android:isolatedProcess="true"
+        android:permission="$PACKAGE.permission.CHILD_SERVICE"
+        android:process=":sandboxed_process25">
+    </service>  # DIFF-ANCHOR: cec6cb64
+    <service  # DIFF-ANCHOR: 5b4a00fe
+        android:name="org.chromium.content.app.SandboxedProcessService26"
+        android:exported="False"
+        android:isolatedProcess="true"
+        android:permission="$PACKAGE.permission.CHILD_SERVICE"
+        android:process=":sandboxed_process26">
+    </service>  # DIFF-ANCHOR: 5b4a00fe
+    <service  # DIFF-ANCHOR: ad49d203
+        android:name="org.chromium.content.app.SandboxedProcessService27"
+        android:exported="False"
+        android:isolatedProcess="true"
+        android:permission="$PACKAGE.permission.CHILD_SERVICE"
+        android:process=":sandboxed_process27">
+    </service>  # DIFF-ANCHOR: ad49d203
+    <service  # DIFF-ANCHOR: 573298e9
+        android:name="org.chromium.content.app.SandboxedProcessService28"
+        android:exported="False"
+        android:isolatedProcess="true"
+        android:permission="$PACKAGE.permission.CHILD_SERVICE"
+        android:process=":sandboxed_process28">
+    </service>  # DIFF-ANCHOR: 573298e9
+    <service  # DIFF-ANCHOR: 79897b32
+        android:name="org.chromium.content.app.SandboxedProcessService29"
+        android:exported="False"
+        android:isolatedProcess="true"
+        android:permission="$PACKAGE.permission.CHILD_SERVICE"
+        android:process=":sandboxed_process29">
+    </service>  # DIFF-ANCHOR: 79897b32
+    <service  # DIFF-ANCHOR: 84335864
+        android:name="org.chromium.content.app.SandboxedProcessService3"
+        android:exported="False"
+        android:isolatedProcess="true"
+        android:permission="$PACKAGE.permission.CHILD_SERVICE"
+        android:process=":sandboxed_process3">
+    </service>  # DIFF-ANCHOR: 84335864
+    <service  # DIFF-ANCHOR: c4bd371e
+        android:name="org.chromium.content.app.SandboxedProcessService30"
+        android:exported="False"
+        android:isolatedProcess="true"
+        android:permission="$PACKAGE.permission.CHILD_SERVICE"
+        android:process=":sandboxed_process30">
+    </service>  # DIFF-ANCHOR: c4bd371e
+    <service  # DIFF-ANCHOR: 394a9fd0
+        android:name="org.chromium.content.app.SandboxedProcessService31"
+        android:exported="False"
+        android:isolatedProcess="true"
+        android:permission="$PACKAGE.permission.CHILD_SERVICE"
+        android:process=":sandboxed_process31">
+    </service>  # DIFF-ANCHOR: 394a9fd0
+    <service  # DIFF-ANCHOR: b811afb8
+        android:name="org.chromium.content.app.SandboxedProcessService32"
+        android:exported="False"
+        android:isolatedProcess="true"
+        android:permission="$PACKAGE.permission.CHILD_SERVICE"
+        android:process=":sandboxed_process32">
+    </service>  # DIFF-ANCHOR: b811afb8
+    <service  # DIFF-ANCHOR: 2811ddd3
+        android:name="org.chromium.content.app.SandboxedProcessService33"
+        android:exported="False"
+        android:isolatedProcess="true"
+        android:permission="$PACKAGE.permission.CHILD_SERVICE"
+        android:process=":sandboxed_process33">
+    </service>  # DIFF-ANCHOR: 2811ddd3
+    <service  # DIFF-ANCHOR: 73ae1688
+        android:name="org.chromium.content.app.SandboxedProcessService34"
+        android:exported="False"
+        android:isolatedProcess="true"
+        android:permission="$PACKAGE.permission.CHILD_SERVICE"
+        android:process=":sandboxed_process34">
+    </service>  # DIFF-ANCHOR: 73ae1688
+    <service  # DIFF-ANCHOR: c476f324
+        android:name="org.chromium.content.app.SandboxedProcessService35"
+        android:exported="False"
+        android:isolatedProcess="true"
+        android:permission="$PACKAGE.permission.CHILD_SERVICE"
+        android:process=":sandboxed_process35">
+    </service>  # DIFF-ANCHOR: c476f324
+    <service  # DIFF-ANCHOR: 75d5304b
+        android:name="org.chromium.content.app.SandboxedProcessService36"
+        android:exported="False"
+        android:isolatedProcess="true"
+        android:permission="$PACKAGE.permission.CHILD_SERVICE"
+        android:process=":sandboxed_process36">
+    </service>  # DIFF-ANCHOR: 75d5304b
+    <service  # DIFF-ANCHOR: dc6d0617
+        android:name="org.chromium.content.app.SandboxedProcessService37"
+        android:exported="False"
+        android:isolatedProcess="true"
+        android:permission="$PACKAGE.permission.CHILD_SERVICE"
+        android:process=":sandboxed_process37">
+    </service>  # DIFF-ANCHOR: dc6d0617
+    <service  # DIFF-ANCHOR: e31efe49
+        android:name="org.chromium.content.app.SandboxedProcessService38"
+        android:exported="False"
+        android:isolatedProcess="true"
+        android:permission="$PACKAGE.permission.CHILD_SERVICE"
+        android:process=":sandboxed_process38">
+    </service>  # DIFF-ANCHOR: e31efe49
+    <service  # DIFF-ANCHOR: 5736507e
+        android:name="org.chromium.content.app.SandboxedProcessService39"
+        android:exported="False"
+        android:isolatedProcess="true"
+        android:permission="$PACKAGE.permission.CHILD_SERVICE"
+        android:process=":sandboxed_process39">
+    </service>  # DIFF-ANCHOR: 5736507e
+    <service  # DIFF-ANCHOR: a161be24
+        android:name="org.chromium.content.app.SandboxedProcessService4"
+        android:exported="False"
+        android:isolatedProcess="true"
+        android:permission="$PACKAGE.permission.CHILD_SERVICE"
+        android:process=":sandboxed_process4">
+    </service>  # DIFF-ANCHOR: a161be24
+    <service  # DIFF-ANCHOR: 8e591688
+        android:name="org.chromium.content.app.SandboxedProcessService5"
+        android:exported="False"
+        android:isolatedProcess="true"
+        android:permission="$PACKAGE.permission.CHILD_SERVICE"
+        android:process=":sandboxed_process5">
+    </service>  # DIFF-ANCHOR: 8e591688
+    <service  # DIFF-ANCHOR: 705141d0
+        android:name="org.chromium.content.app.SandboxedProcessService6"
+        android:exported="False"
+        android:isolatedProcess="true"
+        android:permission="$PACKAGE.permission.CHILD_SERVICE"
+        android:process=":sandboxed_process6">
+    </service>  # DIFF-ANCHOR: 705141d0
+    <service  # DIFF-ANCHOR: 38ed2189
+        android:name="org.chromium.content.app.SandboxedProcessService7"
+        android:exported="False"
+        android:isolatedProcess="true"
+        android:permission="$PACKAGE.permission.CHILD_SERVICE"
+        android:process=":sandboxed_process7">
+    </service>  # DIFF-ANCHOR: 38ed2189
+    <service  # DIFF-ANCHOR: aa417956
+        android:name="org.chromium.content.app.SandboxedProcessService8"
+        android:exported="False"
+        android:isolatedProcess="true"
+        android:permission="$PACKAGE.permission.CHILD_SERVICE"
+        android:process=":sandboxed_process8">
+    </service>  # DIFF-ANCHOR: aa417956
+    <service  # DIFF-ANCHOR: e2f3bbbd
+        android:name="org.chromium.content.app.SandboxedProcessService9"
+        android:exported="False"
+        android:isolatedProcess="true"
+        android:permission="$PACKAGE.permission.CHILD_SERVICE"
+        android:process=":sandboxed_process9">
+    </service>  # DIFF-ANCHOR: e2f3bbbd
+    <uses-static-library android:name="org.chromium.trichromelibrary" android:certDigest="32a2fc74d731105859e5a85df16d95f102d85b22099b8064c5d8915c61dad1e0" android:version="OFFSET=32"/>
+  </application>
+</manifest>
diff --git a/chrome/android/expectations/trichrome_chrome_64_bundle__base.AndroidManifest.expected b/chrome/android/expectations/trichrome_chrome_64_bundle__base.AndroidManifest.expected
new file mode 100644
index 0000000..3244a433
--- /dev/null
+++ b/chrome/android/expectations/trichrome_chrome_64_bundle__base.AndroidManifest.expected
@@ -0,0 +1,507 @@
+<?xml version="1.0" ?>
+<manifest
+    xmlns:android="http://schemas.android.com/apk/res/android"
+    package="org.chromium.chrome.stable"
+    platformBuildVersionCode="34"
+    platformBuildVersionName="14"
+    android:isolatedSplits="true"
+    android:versionCode="OFFSET=34"
+    android:versionName="#.#.#.#">
+  <permission android:name="$PACKAGE.TOS_ACKED" android:protectionLevel="signatureOrSystem"/>
+  <permission android:name="$PACKAGE.permission.C2D_MESSAGE" android:protectionLevel="signature"/>
+  <permission android:name="$PACKAGE.permission.CHILD_SERVICE" android:protectionLevel="signature"/>
+  <permission android:name="$PACKAGE.permission.DEBUG" android:label="Debug web pages" android:protectionLevel="signature"/>
+  <permission android:name="$PACKAGE.permission.READ_WRITE_BOOKMARK_FOLDERS" android:protectionLevel="signatureOrSystem"/>
+  <queries>  # DIFF-ANCHOR: 9588fea7
+    <package android:name="com.google.ar.core"/>
+  </queries>  # DIFF-ANCHOR: 9588fea7
+  <uses-feature android:glEsVersion="0x00020000"/>
+  <uses-feature android:name="android.hardware.camera" android:required="false"/>
+  <uses-feature android:name="android.hardware.camera.autofocus" android:required="false"/>
+  <uses-feature android:name="android.hardware.location.gps" android:required="false"/>
+  <uses-feature android:name="android.hardware.microphone" android:required="false"/>
+  <uses-feature android:name="android.hardware.screen.landscape" android:required="false"/>
+  <uses-feature android:name="android.hardware.sensor.accelerometer" android:required="false"/>
+  <uses-feature android:name="android.hardware.sensor.gyroscope" android:required="false"/>
+  <uses-feature android:name="android.hardware.touchscreen" android:required="false"/>
+  <uses-feature android:name="android.hardware.vr.headtracking" android:required="false" android:version="1"/>
+  <uses-feature android:name="android.hardware.vr.high_performance" android:required="false"/>
+  <uses-feature android:name="android.software.vr.mode" android:required="false"/>
+  <uses-permission android:name="$PACKAGE.TOS_ACKED"/>
+  <uses-permission android:name="$PACKAGE.permission.C2D_MESSAGE"/>
+  <uses-permission android:name="$PACKAGE.permission.READ_WRITE_BOOKMARK_FOLDERS"/>
+  <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>
+  <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
+  <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
+  <uses-permission android:name="android.permission.CAMERA"/>
+  <uses-permission android:name="android.permission.CREDENTIAL_MANAGER_QUERY_CANDIDATE_CREDENTIALS"/>
+  <uses-permission android:name="android.permission.CREDENTIAL_MANAGER_SET_ALLOWED_PROVIDERS"/>
+  <uses-permission android:name="android.permission.CREDENTIAL_MANAGER_SET_ORIGIN"/>
+  <uses-permission android:name="android.permission.DOWNLOAD_WITHOUT_NOTIFICATION"/>
+  <uses-permission android:name="android.permission.FOREGROUND_SERVICE"/>
+  <uses-permission android:name="android.permission.FOREGROUND_SERVICE_DATA_SYNC"/>
+  <uses-permission android:name="android.permission.FOREGROUND_SERVICE_MEDIA_PLAYBACK"/>
+  <uses-permission android:name="android.permission.GET_ACCOUNTS"/>
+  <uses-permission android:name="android.permission.INTERNET"/>
+  <uses-permission android:name="android.permission.MANAGE_ACCOUNTS"/>
+  <uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS"/>
+  <uses-permission android:name="android.permission.NFC"/>
+  <uses-permission android:name="android.permission.POST_NOTIFICATIONS"/>
+  <uses-permission android:name="android.permission.QUERY_ALL_PACKAGES"/>
+  <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
+  <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED"/>
+  <uses-permission android:name="android.permission.RECORD_AUDIO"/>
+  <uses-permission android:name="android.permission.RUN_USER_INITIATED_JOBS"/>
+  <uses-permission android:name="android.permission.USE_CREDENTIALS"/>
+  <uses-permission android:name="android.permission.VIBRATE"/>
+  <uses-permission android:name="android.permission.WAKE_LOCK"/>
+  <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
+  <uses-permission android:name="com.android.launcher.permission.INSTALL_SHORTCUT"/>
+  <uses-permission android:name="com.chrome.permission.DEVICE_EXTRAS"/>
+  <uses-permission android:name="com.google.android.apps.now.CURRENT_ACCOUNT_ACCESS"/>
+  <uses-permission android:name="com.google.android.c2dm.permission.RECEIVE"/>
+  <uses-permission-sdk-23 android:name="android.permission.ACCESS_ADSERVICES_ATTRIBUTION"/>
+  <uses-permission-sdk-23 android:name="android.permission.ACCESS_WIFI_STATE"/>
+  <uses-permission-sdk-23 android:name="android.permission.BLUETOOTH"/>
+  <uses-permission-sdk-23 android:name="android.permission.BLUETOOTH_ADMIN" android:maxSdkVersion="30"/>
+  <uses-permission-sdk-23 android:name="android.permission.BLUETOOTH_ADVERTISE"/>
+  <uses-permission-sdk-23 android:name="android.permission.BLUETOOTH_CONNECT"/>
+  <uses-permission-sdk-23 android:name="android.permission.BLUETOOTH_SCAN" android:usesPermissionFlags="neverForLocation"/>
+  <uses-permission-sdk-23 android:name="android.permission.READ_CONTACTS"/>
+  <uses-permission-sdk-23 android:name="android.permission.READ_MEDIA_AUDIO"/>
+  <uses-permission-sdk-23 android:name="android.permission.READ_MEDIA_IMAGES"/>
+  <uses-permission-sdk-23 android:name="android.permission.READ_MEDIA_VIDEO"/>
+  <uses-permission-sdk-23 android:name="android.permission.REORDER_TASKS"/>
+  <uses-permission-sdk-23 android:name="android.permission.REQUEST_INSTALL_PACKAGES"/>
+  <uses-permission-sdk-23 android:name="android.permission.USE_BIOMETRIC"/>
+  <uses-permission-sdk-23 android:name="android.permission.USE_FINGERPRINT"/>
+  <uses-sdk android:minSdkVersion="29" android:targetSdkVersion="34"/>
+  <application
+      android:name="org.chromium.chrome.browser.base.SplitChromeApplication"
+      android:allowAudioPlaybackCapture="false"
+      android:allowBackup="false"
+      android:appComponentFactory="org.chromium.chrome.browser.base.SplitCompatAppComponentFactory"
+      android:enableOnBackInvokedCallback="true"
+      android:extractNativeLibs="false"
+      android:icon="@drawable/ic_launcher"
+      android:label="@string/app_name"
+      android:largeHeap="false"
+      android:manageSpaceActivity="@string/manage_space_activity"
+      android:memtagMode="async"
+      android:multiArch="true"
+      android:networkSecurityConfig="@xml/network_security_config"
+      android:roundIcon="@drawable/ic_launcher_round"
+      android:supportsRtl="true"
+      android:zygotePreloadName="org.chromium.chrome.app.TrichromeZygotePreload">
+    <activity  # DIFF-ANCHOR: ea1a94af
+        android:name="com.google.android.gms.common.api.GoogleApiActivity"
+        android:exported="false"
+        android:theme="@android:style/Theme.Translucent.NoTitleBar">
+    </activity>  # DIFF-ANCHOR: ea1a94af
+    <activity  # DIFF-ANCHOR: a2bae37c
+        android:name="com.google.android.play.core.common.PlayCoreDialogWrapperActivity"
+        android:exported="false"
+        android:stateNotNeeded="true"
+        android:theme="@style/Theme.PlayCore.Transparent">
+    </activity>  # DIFF-ANCHOR: a2bae37c
+    <meta-data android:name="android.allow_multiple_resumed_activities" android:value="true"/>
+    <meta-data android:name="android.content.APP_RESTRICTIONS" android:resource="@xml/app_restrictions"/>
+    <meta-data android:name="com.google.android.gms.cast.framework.OPTIONS_PROVIDER_CLASS_NAME" android:value="org.chromium.components.media_router.caf.CastOptionsProvider"/>
+    <meta-data android:name="com.google.android.gms.version" android:value="@integer/google_play_services_version"/>
+    <meta-data android:name="com.google.ar.core" android:value="optional"/>
+    <meta-data android:name="com.google.ar.core.load_32bit_so_from_split_module" android:value="optional"/>
+    <meta-data android:name="com.google.ar.core.min_apk_version" android:value="231450000"/>
+    <meta-data android:name="com.google.ar.core.session_settings" android:value="allow_front_facing_motion_tracking_6dof,"/>
+    <meta-data android:name="com.samsung.android.sdk.multiwindow.enable" android:value="true"/>
+    <meta-data android:name="com.samsung.android.sdk.multiwindow.penwindow.enable" android:value="true"/>
+    <meta-data android:name="org.chromium.content.browser.NUM_PRIVILEGED_SERVICES" android:value="5"/>
+    <meta-data android:name="org.chromium.content.browser.NUM_SANDBOXED_SERVICES" android:value="40"/>
+    <provider  # DIFF-ANCHOR: bc0a9a7a
+        android:name="com.google.firebase.provider.FirebaseInitProvider"
+        android:authorities="$PACKAGE.firebaseinitprovider"
+        android:directBootAware="true"
+        android:exported="false"
+        android:initOrder="100">
+    </provider>  # DIFF-ANCHOR: bc0a9a7a
+    <provider  # DIFF-ANCHOR: b73a881a
+        android:name="org.chromium.chrome.browser.download.DownloadFileProvider"
+        android:authorities="$PACKAGE.DownloadFileProvider"
+        android:exported="false"
+        android:grantUriPermissions="true">
+      <meta-data android:name="android.support.FILE_PROVIDER_PATHS" android:resource="@xml/file_paths"/>
+    </provider>  # DIFF-ANCHOR: b73a881a
+    <provider  # DIFF-ANCHOR: f1c2d7e1
+        android:name="org.chromium.chrome.browser.provider.ChromeBrowserProvider"
+        android:authorities="$PACKAGE.ChromeBrowserProvider;$PACKAGE.browser;$PACKAGE"
+        android:exported="true">
+      <path-permission android:path="/bookmarks/search_suggest_query" android:readPermission="android.permission.GLOBAL_SEARCH"/>
+    </provider>  # DIFF-ANCHOR: f1c2d7e1
+    <provider  # DIFF-ANCHOR: 67014fab
+        android:name="org.chromium.chrome.browser.util.ChromeFileProvider"
+        android:authorities="$PACKAGE.FileProvider"
+        android:exported="false"
+        android:grantUriPermissions="true">
+      <meta-data android:name="android.support.FILE_PROVIDER_PATHS" android:resource="@xml/file_paths"/>
+    </provider>  # DIFF-ANCHOR: 67014fab
+    <provider  # DIFF-ANCHOR: cb51666f
+        android:name="org.chromium.ui.dragdrop.DropDataContentProvider"
+        android:authorities="$PACKAGE.DropDataProvider"
+        android:exported="false"
+        android:grantUriPermissions="true">
+    </provider>  # DIFF-ANCHOR: cb51666f
+    <receiver  # DIFF-ANCHOR: 0a6f8fa5
+        android:name="com.google.android.gms.cast.framework.media.MediaIntentReceiver"
+        android:exported="false">
+    </receiver>  # DIFF-ANCHOR: 0a6f8fa5
+    <receiver  # DIFF-ANCHOR: f1c9c29d
+        android:name="com.google.firebase.iid.FirebaseInstanceIdReceiver"
+        android:exported="true"
+        android:permission="com.google.android.c2dm.permission.SEND">
+      <intent-filter>  # DIFF-ANCHOR: aae22013
+        <action android:name="com.google.android.c2dm.intent.RECEIVE"/>
+      </intent-filter>  # DIFF-ANCHOR: aae22013
+    </receiver>  # DIFF-ANCHOR: f1c9c29d
+    <service  # DIFF-ANCHOR: 749391ed
+        android:name="com.google.android.gms.cast.framework.ReconnectionService"
+        android:exported="false">
+    </service>  # DIFF-ANCHOR: 749391ed
+    <service  # DIFF-ANCHOR: 48ce9d28
+        android:name="com.google.android.gms.cast.framework.media.MediaNotificationService"
+        android:exported="false">
+    </service>  # DIFF-ANCHOR: 48ce9d28
+    <service  # DIFF-ANCHOR: 7e26656b
+        android:name="com.google.firebase.components.ComponentDiscoveryService"
+        android:directBootAware="true"
+        android:exported="false">
+      <meta-data android:name="com.google.firebase.components:com.google.firebase.dynamicloading.DynamicLoadingRegistrar" android:value="com.google.firebase.components.ComponentRegistrar"/>
+      <meta-data android:name="com.google.firebase.components:com.google.firebase.iid.Registrar" android:value="com.google.firebase.components.ComponentRegistrar"/>
+      <meta-data android:name="com.google.firebase.components:com.google.firebase.installations.FirebaseInstallationsRegistrar" android:value="com.google.firebase.components.ComponentRegistrar"/>
+      <meta-data android:name="com.google.firebase.components:com.google.firebase.messaging.FirebaseMessagingRegistrar" android:value="com.google.firebase.components.ComponentRegistrar"/>
+    </service>  # DIFF-ANCHOR: 7e26656b
+    <service  # DIFF-ANCHOR: 2295960c
+        android:name="com.google.firebase.messaging.FirebaseMessagingService"
+        android:directBootAware="true"
+        android:exported="false">
+      <intent-filter android:priority="-500">  # DIFF-ANCHOR: 69e70070
+        <action android:name="com.google.firebase.MESSAGING_EVENT"/>
+      </intent-filter>  # DIFF-ANCHOR: 69e70070
+    </service>  # DIFF-ANCHOR: 2295960c
+    <service  # DIFF-ANCHOR: 0c6c4fd9
+        android:name="org.chromium.content.app.PrivilegedProcessService0"
+        android:exported="false"
+        android:isolatedProcess="false"
+        android:permission="$PACKAGE.permission.CHILD_SERVICE"
+        android:process=":privileged_process0">
+    </service>  # DIFF-ANCHOR: 0c6c4fd9
+    <service  # DIFF-ANCHOR: 6f89af32
+        android:name="org.chromium.content.app.PrivilegedProcessService1"
+        android:exported="false"
+        android:isolatedProcess="false"
+        android:permission="$PACKAGE.permission.CHILD_SERVICE"
+        android:process=":privileged_process1">
+    </service>  # DIFF-ANCHOR: 6f89af32
+    <service  # DIFF-ANCHOR: 40e0d738
+        android:name="org.chromium.content.app.PrivilegedProcessService2"
+        android:exported="false"
+        android:isolatedProcess="false"
+        android:permission="$PACKAGE.permission.CHILD_SERVICE"
+        android:process=":privileged_process2">
+    </service>  # DIFF-ANCHOR: 40e0d738
+    <service  # DIFF-ANCHOR: b197517d
+        android:name="org.chromium.content.app.PrivilegedProcessService3"
+        android:exported="false"
+        android:isolatedProcess="false"
+        android:permission="$PACKAGE.permission.CHILD_SERVICE"
+        android:process=":privileged_process3">
+    </service>  # DIFF-ANCHOR: b197517d
+    <service  # DIFF-ANCHOR: 52303702
+        android:name="org.chromium.content.app.PrivilegedProcessService4"
+        android:exported="false"
+        android:isolatedProcess="false"
+        android:permission="$PACKAGE.permission.CHILD_SERVICE"
+        android:process=":privileged_process4">
+    </service>  # DIFF-ANCHOR: 52303702
+    <service  # DIFF-ANCHOR: b1e3e8bd
+        android:name="org.chromium.content.app.SandboxedProcessService0"
+        android:exported="False"
+        android:isolatedProcess="true"
+        android:permission="$PACKAGE.permission.CHILD_SERVICE"
+        android:process=":sandboxed_process0"
+        android:useAppZygote="true">
+    </service>  # DIFF-ANCHOR: b1e3e8bd
+    <service  # DIFF-ANCHOR: 76d1ccf8
+        android:name="org.chromium.content.app.SandboxedProcessService1"
+        android:exported="False"
+        android:isolatedProcess="true"
+        android:permission="$PACKAGE.permission.CHILD_SERVICE"
+        android:process=":sandboxed_process1">
+    </service>  # DIFF-ANCHOR: 76d1ccf8
+    <service  # DIFF-ANCHOR: 38b95266
+        android:name="org.chromium.content.app.SandboxedProcessService10"
+        android:exported="False"
+        android:isolatedProcess="true"
+        android:permission="$PACKAGE.permission.CHILD_SERVICE"
+        android:process=":sandboxed_process10">
+    </service>  # DIFF-ANCHOR: 38b95266
+    <service  # DIFF-ANCHOR: e4a2e4a2
+        android:name="org.chromium.content.app.SandboxedProcessService11"
+        android:exported="False"
+        android:isolatedProcess="true"
+        android:permission="$PACKAGE.permission.CHILD_SERVICE"
+        android:process=":sandboxed_process11">
+    </service>  # DIFF-ANCHOR: e4a2e4a2
+    <service  # DIFF-ANCHOR: d9b2ffba
+        android:name="org.chromium.content.app.SandboxedProcessService12"
+        android:exported="False"
+        android:isolatedProcess="true"
+        android:permission="$PACKAGE.permission.CHILD_SERVICE"
+        android:process=":sandboxed_process12">
+    </service>  # DIFF-ANCHOR: d9b2ffba
+    <service  # DIFF-ANCHOR: b41bb17d
+        android:name="org.chromium.content.app.SandboxedProcessService13"
+        android:exported="False"
+        android:isolatedProcess="true"
+        android:permission="$PACKAGE.permission.CHILD_SERVICE"
+        android:process=":sandboxed_process13">
+    </service>  # DIFF-ANCHOR: b41bb17d
+    <service  # DIFF-ANCHOR: aec0ea21
+        android:name="org.chromium.content.app.SandboxedProcessService14"
+        android:exported="False"
+        android:isolatedProcess="true"
+        android:permission="$PACKAGE.permission.CHILD_SERVICE"
+        android:process=":sandboxed_process14">
+    </service>  # DIFF-ANCHOR: aec0ea21
+    <service  # DIFF-ANCHOR: cf88a5e5
+        android:name="org.chromium.content.app.SandboxedProcessService15"
+        android:exported="False"
+        android:isolatedProcess="true"
+        android:permission="$PACKAGE.permission.CHILD_SERVICE"
+        android:process=":sandboxed_process15">
+    </service>  # DIFF-ANCHOR: cf88a5e5
+    <service  # DIFF-ANCHOR: 7d85889d
+        android:name="org.chromium.content.app.SandboxedProcessService16"
+        android:exported="False"
+        android:isolatedProcess="true"
+        android:permission="$PACKAGE.permission.CHILD_SERVICE"
+        android:process=":sandboxed_process16">
+    </service>  # DIFF-ANCHOR: 7d85889d
+    <service  # DIFF-ANCHOR: dae26ed4
+        android:name="org.chromium.content.app.SandboxedProcessService17"
+        android:exported="False"
+        android:isolatedProcess="true"
+        android:permission="$PACKAGE.permission.CHILD_SERVICE"
+        android:process=":sandboxed_process17">
+    </service>  # DIFF-ANCHOR: dae26ed4
+    <service  # DIFF-ANCHOR: 2c6cf029
+        android:name="org.chromium.content.app.SandboxedProcessService18"
+        android:exported="False"
+        android:isolatedProcess="true"
+        android:permission="$PACKAGE.permission.CHILD_SERVICE"
+        android:process=":sandboxed_process18">
+    </service>  # DIFF-ANCHOR: 2c6cf029
+    <service  # DIFF-ANCHOR: 1d2f0988
+        android:name="org.chromium.content.app.SandboxedProcessService19"
+        android:exported="False"
+        android:isolatedProcess="true"
+        android:permission="$PACKAGE.permission.CHILD_SERVICE"
+        android:process=":sandboxed_process19">
+    </service>  # DIFF-ANCHOR: 1d2f0988
+    <service  # DIFF-ANCHOR: 4a39041b
+        android:name="org.chromium.content.app.SandboxedProcessService2"
+        android:exported="False"
+        android:isolatedProcess="true"
+        android:permission="$PACKAGE.permission.CHILD_SERVICE"
+        android:process=":sandboxed_process2">
+    </service>  # DIFF-ANCHOR: 4a39041b
+    <service  # DIFF-ANCHOR: 073533bf
+        android:name="org.chromium.content.app.SandboxedProcessService20"
+        android:exported="False"
+        android:isolatedProcess="true"
+        android:permission="$PACKAGE.permission.CHILD_SERVICE"
+        android:process=":sandboxed_process20">
+    </service>  # DIFF-ANCHOR: 073533bf
+    <service  # DIFF-ANCHOR: d24da41d
+        android:name="org.chromium.content.app.SandboxedProcessService21"
+        android:exported="False"
+        android:isolatedProcess="true"
+        android:permission="$PACKAGE.permission.CHILD_SERVICE"
+        android:process=":sandboxed_process21">
+    </service>  # DIFF-ANCHOR: d24da41d
+    <service  # DIFF-ANCHOR: 594d8b32
+        android:name="org.chromium.content.app.SandboxedProcessService22"
+        android:exported="False"
+        android:isolatedProcess="true"
+        android:permission="$PACKAGE.permission.CHILD_SERVICE"
+        android:process=":sandboxed_process22">
+    </service>  # DIFF-ANCHOR: 594d8b32
+    <service  # DIFF-ANCHOR: 5528c0c3
+        android:name="org.chromium.content.app.SandboxedProcessService23"
+        android:exported="False"
+        android:isolatedProcess="true"
+        android:permission="$PACKAGE.permission.CHILD_SERVICE"
+        android:process=":sandboxed_process23">
+    </service>  # DIFF-ANCHOR: 5528c0c3
+    <service  # DIFF-ANCHOR: b7ab2ba3
+        android:name="org.chromium.content.app.SandboxedProcessService24"
+        android:exported="False"
+        android:isolatedProcess="true"
+        android:permission="$PACKAGE.permission.CHILD_SERVICE"
+        android:process=":sandboxed_process24">
+    </service>  # DIFF-ANCHOR: b7ab2ba3
+    <service  # DIFF-ANCHOR: cec6cb64
+        android:name="org.chromium.content.app.SandboxedProcessService25"
+        android:exported="False"
+        android:isolatedProcess="true"
+        android:permission="$PACKAGE.permission.CHILD_SERVICE"
+        android:process=":sandboxed_process25">
+    </service>  # DIFF-ANCHOR: cec6cb64
+    <service  # DIFF-ANCHOR: 5b4a00fe
+        android:name="org.chromium.content.app.SandboxedProcessService26"
+        android:exported="False"
+        android:isolatedProcess="true"
+        android:permission="$PACKAGE.permission.CHILD_SERVICE"
+        android:process=":sandboxed_process26">
+    </service>  # DIFF-ANCHOR: 5b4a00fe
+    <service  # DIFF-ANCHOR: ad49d203
+        android:name="org.chromium.content.app.SandboxedProcessService27"
+        android:exported="False"
+        android:isolatedProcess="true"
+        android:permission="$PACKAGE.permission.CHILD_SERVICE"
+        android:process=":sandboxed_process27">
+    </service>  # DIFF-ANCHOR: ad49d203
+    <service  # DIFF-ANCHOR: 573298e9
+        android:name="org.chromium.content.app.SandboxedProcessService28"
+        android:exported="False"
+        android:isolatedProcess="true"
+        android:permission="$PACKAGE.permission.CHILD_SERVICE"
+        android:process=":sandboxed_process28">
+    </service>  # DIFF-ANCHOR: 573298e9
+    <service  # DIFF-ANCHOR: 79897b32
+        android:name="org.chromium.content.app.SandboxedProcessService29"
+        android:exported="False"
+        android:isolatedProcess="true"
+        android:permission="$PACKAGE.permission.CHILD_SERVICE"
+        android:process=":sandboxed_process29">
+    </service>  # DIFF-ANCHOR: 79897b32
+    <service  # DIFF-ANCHOR: 84335864
+        android:name="org.chromium.content.app.SandboxedProcessService3"
+        android:exported="False"
+        android:isolatedProcess="true"
+        android:permission="$PACKAGE.permission.CHILD_SERVICE"
+        android:process=":sandboxed_process3">
+    </service>  # DIFF-ANCHOR: 84335864
+    <service  # DIFF-ANCHOR: c4bd371e
+        android:name="org.chromium.content.app.SandboxedProcessService30"
+        android:exported="False"
+        android:isolatedProcess="true"
+        android:permission="$PACKAGE.permission.CHILD_SERVICE"
+        android:process=":sandboxed_process30">
+    </service>  # DIFF-ANCHOR: c4bd371e
+    <service  # DIFF-ANCHOR: 394a9fd0
+        android:name="org.chromium.content.app.SandboxedProcessService31"
+        android:exported="False"
+        android:isolatedProcess="true"
+        android:permission="$PACKAGE.permission.CHILD_SERVICE"
+        android:process=":sandboxed_process31">
+    </service>  # DIFF-ANCHOR: 394a9fd0
+    <service  # DIFF-ANCHOR: b811afb8
+        android:name="org.chromium.content.app.SandboxedProcessService32"
+        android:exported="False"
+        android:isolatedProcess="true"
+        android:permission="$PACKAGE.permission.CHILD_SERVICE"
+        android:process=":sandboxed_process32">
+    </service>  # DIFF-ANCHOR: b811afb8
+    <service  # DIFF-ANCHOR: 2811ddd3
+        android:name="org.chromium.content.app.SandboxedProcessService33"
+        android:exported="False"
+        android:isolatedProcess="true"
+        android:permission="$PACKAGE.permission.CHILD_SERVICE"
+        android:process=":sandboxed_process33">
+    </service>  # DIFF-ANCHOR: 2811ddd3
+    <service  # DIFF-ANCHOR: 73ae1688
+        android:name="org.chromium.content.app.SandboxedProcessService34"
+        android:exported="False"
+        android:isolatedProcess="true"
+        android:permission="$PACKAGE.permission.CHILD_SERVICE"
+        android:process=":sandboxed_process34">
+    </service>  # DIFF-ANCHOR: 73ae1688
+    <service  # DIFF-ANCHOR: c476f324
+        android:name="org.chromium.content.app.SandboxedProcessService35"
+        android:exported="False"
+        android:isolatedProcess="true"
+        android:permission="$PACKAGE.permission.CHILD_SERVICE"
+        android:process=":sandboxed_process35">
+    </service>  # DIFF-ANCHOR: c476f324
+    <service  # DIFF-ANCHOR: 75d5304b
+        android:name="org.chromium.content.app.SandboxedProcessService36"
+        android:exported="False"
+        android:isolatedProcess="true"
+        android:permission="$PACKAGE.permission.CHILD_SERVICE"
+        android:process=":sandboxed_process36">
+    </service>  # DIFF-ANCHOR: 75d5304b
+    <service  # DIFF-ANCHOR: dc6d0617
+        android:name="org.chromium.content.app.SandboxedProcessService37"
+        android:exported="False"
+        android:isolatedProcess="true"
+        android:permission="$PACKAGE.permission.CHILD_SERVICE"
+        android:process=":sandboxed_process37">
+    </service>  # DIFF-ANCHOR: dc6d0617
+    <service  # DIFF-ANCHOR: e31efe49
+        android:name="org.chromium.content.app.SandboxedProcessService38"
+        android:exported="False"
+        android:isolatedProcess="true"
+        android:permission="$PACKAGE.permission.CHILD_SERVICE"
+        android:process=":sandboxed_process38">
+    </service>  # DIFF-ANCHOR: e31efe49
+    <service  # DIFF-ANCHOR: 5736507e
+        android:name="org.chromium.content.app.SandboxedProcessService39"
+        android:exported="False"
+        android:isolatedProcess="true"
+        android:permission="$PACKAGE.permission.CHILD_SERVICE"
+        android:process=":sandboxed_process39">
+    </service>  # DIFF-ANCHOR: 5736507e
+    <service  # DIFF-ANCHOR: a161be24
+        android:name="org.chromium.content.app.SandboxedProcessService4"
+        android:exported="False"
+        android:isolatedProcess="true"
+        android:permission="$PACKAGE.permission.CHILD_SERVICE"
+        android:process=":sandboxed_process4">
+    </service>  # DIFF-ANCHOR: a161be24
+    <service  # DIFF-ANCHOR: 8e591688
+        android:name="org.chromium.content.app.SandboxedProcessService5"
+        android:exported="False"
+        android:isolatedProcess="true"
+        android:permission="$PACKAGE.permission.CHILD_SERVICE"
+        android:process=":sandboxed_process5">
+    </service>  # DIFF-ANCHOR: 8e591688
+    <service  # DIFF-ANCHOR: 705141d0
+        android:name="org.chromium.content.app.SandboxedProcessService6"
+        android:exported="False"
+        android:isolatedProcess="true"
+        android:permission="$PACKAGE.permission.CHILD_SERVICE"
+        android:process=":sandboxed_process6">
+    </service>  # DIFF-ANCHOR: 705141d0
+    <service  # DIFF-ANCHOR: 38ed2189
+        android:name="org.chromium.content.app.SandboxedProcessService7"
+        android:exported="False"
+        android:isolatedProcess="true"
+        android:permission="$PACKAGE.permission.CHILD_SERVICE"
+        android:process=":sandboxed_process7">
+    </service>  # DIFF-ANCHOR: 38ed2189
+    <service  # DIFF-ANCHOR: aa417956
+        android:name="org.chromium.content.app.SandboxedProcessService8"
+        android:exported="False"
+        android:isolatedProcess="true"
+        android:permission="$PACKAGE.permission.CHILD_SERVICE"
+        android:process=":sandboxed_process8">
+    </service>  # DIFF-ANCHOR: aa417956
+    <service  # DIFF-ANCHOR: e2f3bbbd
+        android:name="org.chromium.content.app.SandboxedProcessService9"
+        android:exported="False"
+        android:isolatedProcess="true"
+        android:permission="$PACKAGE.permission.CHILD_SERVICE"
+        android:process=":sandboxed_process9">
+    </service>  # DIFF-ANCHOR: e2f3bbbd
+    <uses-static-library android:name="org.chromium.trichromelibrary" android:certDigest="32a2fc74d731105859e5a85df16d95f102d85b22099b8064c5d8915c61dad1e0" android:version="OFFSET=34"/>
+  </application>
+</manifest>
diff --git a/chrome/android/expectations/trichrome_library_32_64_apk.AndroidManifest.expected b/chrome/android/expectations/trichrome_library_32_64_apk.AndroidManifest.expected
new file mode 100644
index 0000000..6b8b05a8
--- /dev/null
+++ b/chrome/android/expectations/trichrome_library_32_64_apk.AndroidManifest.expected
@@ -0,0 +1,22 @@
+<?xml version="1.0" ?>
+<manifest
+    xmlns:android="http://schemas.android.com/apk/res/android"
+    package="org.chromium.trichromelibrary"
+    platformBuildVersionCode="34"
+    platformBuildVersionName="14"
+    android:versionCode="OFFSET=31"
+    android:versionName="#.#.#.#">
+  <uses-feature android:glEsVersion="0x00020000"/>
+  <uses-feature android:name="android.hardware.touchscreen" android:required="false"/>
+  <uses-feature android:name="android.software.leanback" android:required="false"/>
+  <uses-sdk android:minSdkVersion="29" android:targetSdkVersion="34"/>
+  <application
+      android:extractNativeLibs="false"
+      android:hasCode="false"
+      android:icon="@drawable/icon_webview"
+      android:label="Trichrome Library"
+      android:multiArch="true"
+      android:use32bitAbi="true">
+    <static-library android:name="$PACKAGE" android:version="OFFSET=31"/>
+  </application>
+</manifest>
diff --git a/chrome/android/expectations/trichrome_library_32_64_apk.arm64.libs_and_assets.expected b/chrome/android/expectations/trichrome_library_32_64_apk.arm64.libs_and_assets.expected
new file mode 100644
index 0000000..45c1cbd9
--- /dev/null
+++ b/chrome/android/expectations/trichrome_library_32_64_apk.arm64.libs_and_assets.expected
@@ -0,0 +1,5 @@
+apk_path=lib/armeabi-v7a/libarcore_sdk_c.so, compress=False, alignment=4096
+apk_path=lib/armeabi-v7a/libcrashpad_handler_trampoline.so, compress=False, alignment=4096
+apk_path=lib/armeabi-v7a/libmonochrome.so, compress=False, alignment=4096
+apk_path=assets/icudtl.dat, compress=False, alignment=4
+apk_path=assets/snapshot_blob_32.bin, compress=False, alignment=4
diff --git a/chrome/android/expectations/trichrome_library_32_apk.AndroidManifest.expected b/chrome/android/expectations/trichrome_library_32_apk.AndroidManifest.expected
new file mode 100644
index 0000000..3d62634d
--- /dev/null
+++ b/chrome/android/expectations/trichrome_library_32_apk.AndroidManifest.expected
@@ -0,0 +1,21 @@
+<?xml version="1.0" ?>
+<manifest
+    xmlns:android="http://schemas.android.com/apk/res/android"
+    package="org.chromium.trichromelibrary"
+    platformBuildVersionCode="34"
+    platformBuildVersionName="14"
+    android:versionCode="OFFSET=30"
+    android:versionName="#.#.#.#">
+  <uses-feature android:glEsVersion="0x00020000"/>
+  <uses-feature android:name="android.hardware.touchscreen" android:required="false"/>
+  <uses-feature android:name="android.software.leanback" android:required="false"/>
+  <uses-sdk android:minSdkVersion="29" android:targetSdkVersion="34"/>
+  <application
+      android:extractNativeLibs="false"
+      android:hasCode="false"
+      android:icon="@drawable/icon_webview"
+      android:label="Trichrome Library"
+      android:multiArch="true">
+    <static-library android:name="$PACKAGE" android:version="OFFSET=30"/>
+  </application>
+</manifest>
diff --git a/chrome/android/expectations/trichrome_library_64_32_apk.AndroidManifest.expected b/chrome/android/expectations/trichrome_library_64_32_apk.AndroidManifest.expected
new file mode 100644
index 0000000..cc6fc93
--- /dev/null
+++ b/chrome/android/expectations/trichrome_library_64_32_apk.AndroidManifest.expected
@@ -0,0 +1,21 @@
+<?xml version="1.0" ?>
+<manifest
+    xmlns:android="http://schemas.android.com/apk/res/android"
+    package="org.chromium.trichromelibrary"
+    platformBuildVersionCode="34"
+    platformBuildVersionName="14"
+    android:versionCode="OFFSET=32"
+    android:versionName="#.#.#.#">
+  <uses-feature android:glEsVersion="0x00020000"/>
+  <uses-feature android:name="android.hardware.touchscreen" android:required="false"/>
+  <uses-feature android:name="android.software.leanback" android:required="false"/>
+  <uses-sdk android:minSdkVersion="29" android:targetSdkVersion="34"/>
+  <application
+      android:extractNativeLibs="false"
+      android:hasCode="false"
+      android:icon="@drawable/icon_webview"
+      android:label="Trichrome Library"
+      android:multiArch="true">
+    <static-library android:name="$PACKAGE" android:version="OFFSET=32"/>
+  </application>
+</manifest>
diff --git a/chrome/android/expectations/trichrome_library_64_apk.AndroidManifest.expected b/chrome/android/expectations/trichrome_library_64_apk.AndroidManifest.expected
new file mode 100644
index 0000000..0fe5b9e
--- /dev/null
+++ b/chrome/android/expectations/trichrome_library_64_apk.AndroidManifest.expected
@@ -0,0 +1,21 @@
+<?xml version="1.0" ?>
+<manifest
+    xmlns:android="http://schemas.android.com/apk/res/android"
+    package="org.chromium.trichromelibrary"
+    platformBuildVersionCode="34"
+    platformBuildVersionName="14"
+    android:versionCode="OFFSET=34"
+    android:versionName="#.#.#.#">
+  <uses-feature android:glEsVersion="0x00020000"/>
+  <uses-feature android:name="android.hardware.touchscreen" android:required="false"/>
+  <uses-feature android:name="android.software.leanback" android:required="false"/>
+  <uses-sdk android:minSdkVersion="29" android:targetSdkVersion="34"/>
+  <application
+      android:extractNativeLibs="false"
+      android:hasCode="false"
+      android:icon="@drawable/icon_webview"
+      android:label="Trichrome Library"
+      android:multiArch="true">
+    <static-library android:name="$PACKAGE" android:version="OFFSET=34"/>
+  </application>
+</manifest>
diff --git a/chrome/android/features/start_surface/java/res/layout/tasks_surface_search_box_layout.xml b/chrome/android/features/start_surface/java/res/layout/tasks_surface_search_box_layout.xml
index e5e39b3..d9e47038 100644
--- a/chrome/android/features/start_surface/java/res/layout/tasks_surface_search_box_layout.xml
+++ b/chrome/android/features/start_surface/java/res/layout/tasks_surface_search_box_layout.xml
@@ -48,7 +48,7 @@
       android:layout_width="@dimen/tasks_surface_location_bar_url_button_size"
       android:layout_height="@dimen/tasks_surface_location_bar_url_button_size"
       android:contentDescription="@string/accessibility_toolbar_btn_mic"
-      android:src="@drawable/btn_mic" />
+      android:src="@drawable/ic_mic_white_24dp" />
   <org.chromium.ui.widget.ChromeImageView
       android:id="@+id/lens_camera_button"
       style="@style/LocationBarActionButton"
diff --git a/chrome/android/features/start_surface/java/src/org/chromium/chrome/features/start_surface/StartSurfaceConfiguration.java b/chrome/android/features/start_surface/java/src/org/chromium/chrome/features/start_surface/StartSurfaceConfiguration.java
index 70fd243..9664407 100644
--- a/chrome/android/features/start_surface/java/src/org/chromium/chrome/features/start_surface/StartSurfaceConfiguration.java
+++ b/chrome/android/features/start_surface/java/src/org/chromium/chrome/features/start_surface/StartSurfaceConfiguration.java
@@ -110,10 +110,6 @@
             new BooleanCachedFieldTrialParameter(
                     ChromeFeatureList.SURFACE_POLISH, SURFACE_POLISH_SCROLLABLE_MVT_PARAM, false);
 
-    public static final BooleanCachedFieldTrialParameter SURFACE_POLISH_USE_MAGIC_SPACE =
-            new BooleanCachedFieldTrialParameter(
-                    ChromeFeatureList.SURFACE_POLISH, "use_magic_space", false);
-
     private static final String STARTUP_UMA_PREFIX = "Startup.Android.";
     private static final String INSTANT_START_SUBFIX = ".Instant";
     private static final String REGULAR_START_SUBFIX = ".NoInstant";
@@ -138,7 +134,7 @@
     /** Returns whether a magic space is enabled on Start surface. */
     public static boolean useMagicSpace() {
         return ChromeFeatureList.sSurfacePolish.isEnabled()
-                && SURFACE_POLISH_USE_MAGIC_SPACE.getValue()
+                && ChromeFeatureList.sMagicStackAndroid.isEnabled()
                 && ChromeFeatureList.sStartSurfaceRefactor.isEnabled();
     }
 
diff --git a/chrome/android/features/start_surface/javatests/src/org/chromium/chrome/features/start_surface/StartSurfaceMVTilesTest.java b/chrome/android/features/start_surface/javatests/src/org/chromium/chrome/features/start_surface/StartSurfaceMVTilesTest.java
index b57a0869..baa6e9b 100644
--- a/chrome/android/features/start_surface/javatests/src/org/chromium/chrome/features/start_surface/StartSurfaceMVTilesTest.java
+++ b/chrome/android/features/start_surface/javatests/src/org/chromium/chrome/features/start_surface/StartSurfaceMVTilesTest.java
@@ -174,8 +174,12 @@
     @Test
     @MediumTest
     @Feature({"StartSurface"})
-    @CommandLineFlags.Add({START_SURFACE_TEST_SINGLE_ENABLED_PARAMS + "/use_magic_space/true"})
-    @EnableFeatures({ChromeFeatureList.START_SURFACE_REFACTOR, ChromeFeatureList.SURFACE_POLISH})
+    @CommandLineFlags.Add({START_SURFACE_TEST_SINGLE_ENABLED_PARAMS})
+    @EnableFeatures({
+        ChromeFeatureList.START_SURFACE_REFACTOR,
+        ChromeFeatureList.SURFACE_POLISH,
+        ChromeFeatureList.MAGIC_STACK_ANDROID
+    })
     public void testTapMVTilesInSingleSurfaceWithSurfacePolish() {
         testTapMVTilesInSingleSurfaceImpl();
     }
diff --git a/chrome/android/features/start_surface/junit/src/org/chromium/chrome/features/start_surface/StartSurfaceMediatorUnitTest.java b/chrome/android/features/start_surface/junit/src/org/chromium/chrome/features/start_surface/StartSurfaceMediatorUnitTest.java
index fc35e220..b5382ab9 100644
--- a/chrome/android/features/start_surface/junit/src/org/chromium/chrome/features/start_surface/StartSurfaceMediatorUnitTest.java
+++ b/chrome/android/features/start_surface/junit/src/org/chromium/chrome/features/start_surface/StartSurfaceMediatorUnitTest.java
@@ -29,7 +29,6 @@
 import static org.mockito.Mockito.when;
 
 import static org.chromium.chrome.browser.flags.ChromeFeatureList.INSTANT_START;
-import static org.chromium.chrome.features.start_surface.StartSurfaceConfiguration.SURFACE_POLISH_USE_MAGIC_SPACE;
 import static org.chromium.chrome.features.start_surface.StartSurfaceProperties.BOTTOM_BAR_HEIGHT;
 import static org.chromium.chrome.features.start_surface.StartSurfaceProperties.EXPLORE_SURFACE_COORDINATOR;
 import static org.chromium.chrome.features.start_surface.StartSurfaceProperties.IS_EXPLORE_SURFACE_VISIBLE;
@@ -1879,11 +1878,14 @@
     }
 
     @Test
-    @EnableFeatures({ChromeFeatureList.START_SURFACE_REFACTOR, ChromeFeatureList.SURFACE_POLISH})
+    @EnableFeatures({
+        ChromeFeatureList.START_SURFACE_REFACTOR,
+        ChromeFeatureList.SURFACE_POLISH,
+        ChromeFeatureList.MAGIC_STACK_ANDROID
+    })
     public void testObserverWithSurfacePolish() {
-        SURFACE_POLISH_USE_MAGIC_SPACE.setForTesting(true);
         Assert.assertTrue(ChromeFeatureList.sSurfacePolish.isEnabled());
-        Assert.assertTrue(SURFACE_POLISH_USE_MAGIC_SPACE.getValue());
+        Assert.assertTrue(ChromeFeatureList.sMagicStackAndroid.isEnabled());
 
         doReturn(false).when(mTabModelSelector).isIncognitoSelected();
         doReturn(mVoiceRecognitionHandler).when(mOmniboxStub).getVoiceRecognitionHandler();
@@ -1952,11 +1954,14 @@
     }
 
     @Test
-    @EnableFeatures({ChromeFeatureList.START_SURFACE_REFACTOR, ChromeFeatureList.SURFACE_POLISH})
+    @EnableFeatures({
+        ChromeFeatureList.START_SURFACE_REFACTOR,
+        ChromeFeatureList.SURFACE_POLISH,
+        ChromeFeatureList.MAGIC_STACK_ANDROID
+    })
     public void testShowAndOnHideWithSurfacePolish() {
-        SURFACE_POLISH_USE_MAGIC_SPACE.setForTesting(true);
         Assert.assertTrue(ChromeFeatureList.sSurfacePolish.isEnabled());
-        Assert.assertTrue(SURFACE_POLISH_USE_MAGIC_SPACE.getValue());
+        Assert.assertTrue(ChromeFeatureList.sMagicStackAndroid.isEnabled());
 
         doReturn(false).when(mTabModelSelector).isIncognitoSelected();
         doReturn(mVoiceRecognitionHandler).when(mOmniboxStub).getVoiceRecognitionHandler();
diff --git a/chrome/android/java/res/layout/custom_tabs_toolbar.xml b/chrome/android/java/res/layout/custom_tabs_toolbar.xml
index fed1be9..20aa131 100644
--- a/chrome/android/java/res/layout/custom_tabs_toolbar.xml
+++ b/chrome/android/java/res/layout/custom_tabs_toolbar.xml
@@ -64,6 +64,7 @@
             android:layout_width="match_parent"
             android:layout_height="wrap_content"
             android:layout_gravity="center_vertical"
+            android:minHeight="@dimen/min_touch_target_size"
             android:importantForAccessibility="no"
             android:background="@null" >
             <TextView
@@ -88,6 +89,7 @@
                 android:inputType="none"
                 android:singleLine="true"
                 android:paddingEnd="@dimen/toolbar_edge_padding"
+                android:paddingBottom="@dimen/toolbar_edge_padding"
                 android:layout_gravity="bottom"
                 style="@style/TextAppearance.TextSmall.Primary" />
         </view>
diff --git a/chrome/android/java/res/layout/drag_drop_target_view.xml b/chrome/android/java/res/layout/drag_drop_target_view.xml
index 0342227..8f94246 100644
--- a/chrome/android/java/res/layout/drag_drop_target_view.xml
+++ b/chrome/android/java/res/layout/drag_drop_target_view.xml
@@ -9,6 +9,7 @@
      LayoutParams.  Making these 0 so that it's explicit that setting these does nothing. -->
 <FrameLayout
     xmlns:android="http://schemas.android.com/apk/res/android"
+    android:id="@+id/toolbar_drag_drop_target_view"
     android:layout_width="0dp"
     android:layout_height="0dp"
     android:textAlignment="center"
diff --git a/chrome/android/java/res/layout/fake_search_box_layout.xml b/chrome/android/java/res/layout/fake_search_box_layout.xml
index 63ab5c7..b0a5d5f 100644
--- a/chrome/android/java/res/layout/fake_search_box_layout.xml
+++ b/chrome/android/java/res/layout/fake_search_box_layout.xml
@@ -47,7 +47,7 @@
         android:id="@+id/voice_search_button"
         style="@style/LocationBarActionButtonPolish"
         android:contentDescription="@string/accessibility_toolbar_btn_mic"
-        android:src="@drawable/btn_mic" />
+        android:src="@drawable/ic_mic_white_24dp" />
     <org.chromium.ui.widget.ChromeImageView
         android:id="@+id/lens_camera_button"
         style="@style/LocationBarActionButtonPolish"
diff --git a/chrome/android/java/res/layout/search_widget_template.xml b/chrome/android/java/res/layout/search_widget_template.xml
index 8e5e01a..0ae8cce 100644
--- a/chrome/android/java/res/layout/search_widget_template.xml
+++ b/chrome/android/java/res/layout/search_widget_template.xml
@@ -40,7 +40,7 @@
             android:id="@+id/microphone_icon"
             android:layout_width="48dp"
             android:layout_height="48dp"
-            android:src="@drawable/btn_mic"
+            android:src="@drawable/ic_mic_white_24dp"
             android:tint="@color/default_icon_color_baseline"
             android:scaleType="centerInside"
             android:contentDescription="@string/accessibility_toolbar_btn_mic" />
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/app/flags/ChromeCachedFlags.java b/chrome/android/java/src/org/chromium/chrome/browser/app/flags/ChromeCachedFlags.java
index 4cfbf3f9..aef65169 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/app/flags/ChromeCachedFlags.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/app/flags/ChromeCachedFlags.java
@@ -116,7 +116,6 @@
                         StartSurfaceConfiguration.SURFACE_POLISH_MOVE_DOWN_LOGO,
                         StartSurfaceConfiguration.SURFACE_POLISH_LESS_BRAND_SPACE,
                         StartSurfaceConfiguration.SURFACE_POLISH_SCROLLABLE_MVT,
-                        StartSurfaceConfiguration.SURFACE_POLISH_USE_MAGIC_SPACE,
                         TabUiFeatureUtilities.ANIMATION_START_TIMEOUT_MS,
                         TabUiFeatureUtilities.ZOOMING_MIN_MEMORY,
                         TabUiFeatureUtilities.SKIP_SLOW_ZOOMING,
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/autofill/settings/AutofillLocalCardEditor.java b/chrome/android/java/src/org/chromium/chrome/browser/autofill/settings/AutofillLocalCardEditor.java
index 0498399..7b206c893 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/autofill/settings/AutofillLocalCardEditor.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/autofill/settings/AutofillLocalCardEditor.java
@@ -296,6 +296,38 @@
             card.setMonth(AutofillLocalCardEditor.getExpirationMonth(expirationDate));
             card.setYear(AutofillLocalCardEditor.getExpirationYear(expirationDate));
             card.setCvc(mCvc.getText().toString().trim());
+            // TODO(crbug.com/1511305): Move metric logging to a separate class.
+            if (mIsNewEntry) {
+                if (!card.getCvc().isEmpty()) {
+                    RecordUserAction.record("AutofillCreditCardsAddedWithCvc");
+                }
+            } else {
+                // Verify if the CVC value for the existing card is absent.
+                if (mCard.getCvc().isEmpty()) {
+                    // Verify if the CVC value is absent for the new card that is replacing the
+                    // existing card.
+                    if (card.getCvc().isEmpty()) {
+                        // Record when an existing card without CVC is edited and no CVC was
+                        // added.
+                        RecordUserAction.record("AutofillCreditCardsEditedAndCvcWasLeftBlank");
+                    } else {
+                        // Record when an existing card without CVC is edited and CVC was added.
+                        RecordUserAction.record("AutofillCreditCardsEditedAndCvcWasAdded");
+                    }
+                } else {
+                    if (card.getCvc().isEmpty()) {
+                        // Record when an existing card with CVC is edited and CVC was removed.
+                        RecordUserAction.record("AutofillCreditCardsEditedAndCvcWasRemoved");
+                    } else if (!card.getCvc().equals(mCard.getCvc())) {
+                        // Record when an existing card with CVC is edited and CVC was updated.
+                        RecordUserAction.record("AutofillCreditCardsEditedAndCvcWasUpdated");
+                    } else {
+                        // Record when an existing card with CVC is edited and CVC was
+                        // unchanged.
+                        RecordUserAction.record("AutofillCreditCardsEditedAndCvcWasUnchanged");
+                    }
+                }
+            }
         } else {
             card.setMonth(String.valueOf(mExpirationMonth.getSelectedItemPosition() + 1));
             card.setYear((String) mExpirationYear.getSelectedItem());
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/findinpage/FindToolbar.java b/chrome/android/java/src/org/chromium/chrome/browser/findinpage/FindToolbar.java
index 7d44971..8e9c20c 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/findinpage/FindToolbar.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/findinpage/FindToolbar.java
@@ -233,7 +233,7 @@
                 new TabModelObserver() {
                     @Override
                     public void didSelectTab(Tab tab, @TabSelectionType int type, int lastId) {
-                        deactivate();
+                        if (tab != mCurrentTab) deactivate();
                     }
 
                     @Override
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/ntp/NewTabPage.java b/chrome/android/java/src/org/chromium/chrome/browser/ntp/NewTabPage.java
index d84fb12..c0ee6b9bd 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/ntp/NewTabPage.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/ntp/NewTabPage.java
@@ -160,7 +160,7 @@
     // Whether destroy() has been called.
     private boolean mIsDestroyed;
 
-    private final int mTabStripAndToolbarHeight;
+    private final int mToolbarHeight;
 
     private final Supplier<Toolbar> mToolbarSupplier;
     private final TabModelSelector mTabModelSelector;
@@ -525,8 +525,8 @@
         DownloadManagerService.getDownloadManagerService()
                 .checkForExternallyRemovedDownloads(ProfileKey.getLastUsedRegularProfileKey());
 
-        mTabStripAndToolbarHeight =
-                activity.getResources().getDimensionPixelSize(R.dimen.tab_strip_and_toolbar_height);
+        mToolbarHeight =
+                activity.getResources().getDimensionPixelSize(R.dimen.toolbar_height_no_shadow);
 
         uma.recordContentSuggestionsDisplayStatus(profile);
 
@@ -692,7 +692,9 @@
      *         strip.
      */
     private int getToolbarExtraYOffset() {
-        return mBrowserControlsStateProvider.getTopControlsHeight() - mTabStripAndToolbarHeight;
+        return mBrowserControlsStateProvider.getTopControlsHeight()
+                - mToolbarHeight
+                - mTabStripHeightSupplier.get();
     }
 
     /** @return The view container for the new tab layout. */
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/ntp/search/SearchBoxMediator.java b/chrome/android/java/src/org/chromium/chrome/browser/ntp/search/SearchBoxMediator.java
index 3cfc007..8400c37c 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/ntp/search/SearchBoxMediator.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/ntp/search/SearchBoxMediator.java
@@ -80,7 +80,7 @@
 
     @Override
     public void onFinishNativeInitialization() {
-        Drawable drawable = AppCompatResources.getDrawable(mContext, R.drawable.btn_mic);
+        Drawable drawable = AppCompatResources.getDrawable(mContext, R.drawable.ic_mic_white_24dp);
         mModel.set(SearchBoxProperties.VOICE_SEARCH_DRAWABLE, drawable);
 
         ColorStateList colorStateList =
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/tab/TabImpl.java b/chrome/android/java/src/org/chromium/chrome/browser/tab/TabImpl.java
index 8270616..500274d 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/tab/TabImpl.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/tab/TabImpl.java
@@ -8,6 +8,7 @@
 import android.app.Activity;
 import android.content.Context;
 import android.graphics.Rect;
+import android.net.Uri;
 import android.text.TextUtils;
 import android.view.View;
 import android.view.View.OnAttachStateChangeListener;
@@ -221,6 +222,15 @@
     private @Nullable @TabLaunchType Integer mTabLaunchTypeAtCreation;
 
     /**
+     * Variables used to track native page creation prior to mNativePage assignment. Avoids the case
+     * where native pages can unintentionally re-create themselves by calling {@link
+     * NativePage#onStateChange} during the creation process.
+     */
+    private boolean mIsAlreadyCreatingNativePage;
+
+    private String mPendingNativePageHost;
+
+    /**
      * Creates an instance of a {@link TabImpl}. Package-private. Use {@link TabBuilder} to create
      * an instance.
      *
@@ -1225,8 +1235,22 @@
         WebContents webContents = getWebContents();
         assert webContents != null;
         if (webContents == null) return false;
+
+        // We might be in the middle of loading a native page, in that case we should bail to avoid
+        // recreating another instance.
+        String nativePageHost = Uri.parse(url).getHost();
+        if (mIsAlreadyCreatingNativePage
+                && TextUtils.equals(mPendingNativePageHost, nativePageHost)) {
+            return true;
+        }
+
+        mPendingNativePageHost = nativePageHost;
+        mIsAlreadyCreatingNativePage = true;
         NativePage candidateForReuse = forceReload ? null : getNativePage();
         NativePage nativePage = mDelegateFactory.createNativePage(url, candidateForReuse, this);
+        mIsAlreadyCreatingNativePage = false;
+        mPendingNativePageHost = null;
+
         if (nativePage != null) {
             showNativePage(nativePage);
             notifyPageTitleChanged();
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/ui/RootUiCoordinator.java b/chrome/android/java/src/org/chromium/chrome/browser/ui/RootUiCoordinator.java
index f3d88d69..57af0fae 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/ui/RootUiCoordinator.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/ui/RootUiCoordinator.java
@@ -1312,7 +1312,7 @@
             VoiceToolbarButtonController voiceToolbarButtonController =
                     new VoiceToolbarButtonController(
                             mActivity,
-                            AppCompatResources.getDrawable(mActivity, R.drawable.btn_mic),
+                            AppCompatResources.getDrawable(mActivity, R.drawable.ic_mic_white_24dp),
                             mActivityTabProvider,
                             trackerSupplier,
                             mModalDialogManagerSupplier.get(),
diff --git a/chrome/android/javatests/src/org/chromium/chrome/browser/app/bookmarks/BookmarkTabletTest.java b/chrome/android/javatests/src/org/chromium/chrome/browser/app/bookmarks/BookmarkTabletTest.java
index 790c1f1..ea8d56b 100644
--- a/chrome/android/javatests/src/org/chromium/chrome/browser/app/bookmarks/BookmarkTabletTest.java
+++ b/chrome/android/javatests/src/org/chromium/chrome/browser/app/bookmarks/BookmarkTabletTest.java
@@ -4,6 +4,13 @@
 
 package org.chromium.chrome.browser.app.bookmarks;
 
+import static androidx.test.espresso.Espresso.onView;
+import static androidx.test.espresso.assertion.ViewAssertions.matches;
+import static androidx.test.espresso.matcher.ViewMatchers.isDisplayed;
+import static androidx.test.espresso.matcher.ViewMatchers.withText;
+
+import static org.junit.Assert.assertEquals;
+
 import androidx.recyclerview.widget.RecyclerView;
 import androidx.test.filters.MediumTest;
 import androidx.test.filters.SmallTest;
@@ -16,17 +23,18 @@
 import org.junit.rules.TestRule;
 import org.junit.runner.RunWith;
 
+import org.chromium.base.test.util.CallbackHelper;
 import org.chromium.base.test.util.CommandLineFlags;
-import org.chromium.base.test.util.CriteriaHelper;
 import org.chromium.base.test.util.DoNotBatch;
 import org.chromium.base.test.util.Restriction;
 import org.chromium.chrome.browser.bookmarks.BookmarkDelegate;
 import org.chromium.chrome.browser.bookmarks.BookmarkManagerCoordinator;
 import org.chromium.chrome.browser.bookmarks.BookmarkModel;
 import org.chromium.chrome.browser.bookmarks.BookmarkPage;
-import org.chromium.chrome.browser.bookmarks.BookmarkUtils;
 import org.chromium.chrome.browser.flags.ChromeSwitches;
+import org.chromium.chrome.browser.tab.EmptyTabObserver;
 import org.chromium.chrome.browser.tab.Tab;
+import org.chromium.chrome.browser.ui.native_page.NativePage;
 import org.chromium.chrome.test.ChromeJUnit4ClassRunner;
 import org.chromium.chrome.test.ChromeTabbedActivityTestRule;
 import org.chromium.chrome.test.R;
@@ -133,18 +141,34 @@
         BookmarkTestUtil.loadEmptyPartnerBookmarksForTesting(mBookmarkModel);
         BookmarkTestUtil.waitForBookmarkModelLoaded();
 
+        CallbackHelper callbackHelper = new CallbackHelper();
         TestThreadUtils.runOnUiThreadBlocking(
                 () -> {
-                    BookmarkUtils.showBookmarkManager(
-                            mActivityTestRule.getActivity(),
-                            mBookmarkModel.getMobileFolderId(),
-                            /* isIncognito= */ false);
-                });
+                    Tab tab = mActivityTestRule.getActivity().getActivityTab();
+                    tab.addObserver(
+                            new EmptyTabObserver() {
+                                NativePage mBookmarksNativePage;
 
-        CriteriaHelper.pollUiThread(
-                () ->
-                        mActivityTestRule.getActivity().getActivityTab().getNativePage() != null
-                                && mActivityTestRule.getActivity().getActivityTab().getNativePage()
-                                        instanceof BookmarkPage);
+                                @Override
+                                public void onTitleUpdated(Tab tab) {
+                                    NativePage nativePage = tab.getNativePage();
+                                    // Track that there's only one instance of BookmarkPage created.
+                                    if (mBookmarksNativePage != null
+                                            && !mBookmarksNativePage.equals(nativePage)) {
+                                        callbackHelper.notifyCalled();
+                                        return;
+                                    }
+                                    if (nativePage != null
+                                            && nativePage
+                                                    .getHost()
+                                                    .equals(UrlConstants.BOOKMARKS_HOST)) {
+                                        mBookmarksNativePage = nativePage;
+                                    }
+                                }
+                            });
+                });
+        mActivityTestRule.loadUrl(UrlConstants.BOOKMARKS_URL);
+        onView(withText("Mobile bookmarks")).check(matches(isDisplayed()));
+        assertEquals(0, callbackHelper.getCallCount());
     }
 }
diff --git a/chrome/android/javatests/src/org/chromium/chrome/browser/autofill/settings/AutofillLocalCardEditorTest.java b/chrome/android/javatests/src/org/chromium/chrome/browser/autofill/settings/AutofillLocalCardEditorTest.java
index eeefe9b8..6efba1f 100644
--- a/chrome/android/javatests/src/org/chromium/chrome/browser/autofill/settings/AutofillLocalCardEditorTest.java
+++ b/chrome/android/javatests/src/org/chromium/chrome/browser/autofill/settings/AutofillLocalCardEditorTest.java
@@ -16,11 +16,13 @@
 import android.os.Bundle;
 import android.view.MenuItem;
 import android.view.View;
+import android.widget.Button;
 import android.widget.ImageView;
 
 import androidx.test.filters.MediumTest;
 import androidx.test.filters.SmallTest;
 
+import org.junit.After;
 import org.junit.Assert;
 import org.junit.Before;
 import org.junit.Rule;
@@ -32,6 +34,7 @@
 
 import org.chromium.base.ContextUtils;
 import org.chromium.base.supplier.ObservableSupplierImpl;
+import org.chromium.base.test.util.UserActionTester;
 import org.chromium.chrome.browser.autofill.AutofillEditorBase;
 import org.chromium.chrome.browser.autofill.AutofillTestHelper;
 import org.chromium.chrome.browser.autofill.PersonalDataManager;
@@ -134,11 +137,18 @@
     @Mock private ObservableSupplierImpl<ModalDialogManager> mModalDialogManagerSupplierMock;
     @Mock private PersonalDataManager mPersonalDataManagerMock;
     private AutofillTestHelper mAutofillTestHelper;
+    private UserActionTester mActionTester;
 
     @Before
     public void setUp() {
         MockitoAnnotations.initMocks(this);
         mAutofillTestHelper = new AutofillTestHelper();
+        mActionTester = new UserActionTester();
+    }
+
+    @After
+    public void tearDown() {
+        mActionTester.tearDown();
     }
 
     @Test
@@ -709,6 +719,134 @@
         verify(mPersonalDataManagerMock, times(1)).deleteCreditCard(guid);
     }
 
+    @Test
+    @MediumTest
+    @EnableFeatures({ChromeFeatureList.AUTOFILL_ENABLE_CVC_STORAGE})
+    public void testRecordUserAction_whenNewCreditCardIsAddedWithCvc() throws Exception {
+        String validExpirationYear = AutofillTestHelper.nextYear();
+        String validExpirationMonth = "12";
+
+        SettingsActivity activity = mSettingsActivityTestRule.startSettingsActivity();
+        AutofillLocalCardEditor autofillLocalCardEditorFragment =
+                (AutofillLocalCardEditor) activity.getMainFragment();
+        setCardNumberOnEditor(autofillLocalCardEditorFragment, NON_AMEX_CARD_NUMBER);
+        setExpirationDateOnEditor(
+                autofillLocalCardEditorFragment,
+                String.format("%s/%s", validExpirationMonth, validExpirationYear.substring(2)));
+        setSecurityCodeOnEditor(autofillLocalCardEditorFragment, /* code= */ "321");
+        performButtonClickOnEditor(autofillLocalCardEditorFragment.mDoneButton);
+
+        Assert.assertTrue(
+                "User action should be logged.",
+                mActionTester.getActions().contains("AutofillCreditCardsAddedWithCvc"));
+    }
+
+    @Test
+    @MediumTest
+    @EnableFeatures({ChromeFeatureList.AUTOFILL_ENABLE_CVC_STORAGE})
+    public void testRecordUserAction_whenExistingCreditCardWithoutCvcIsEditedAndCvcIsLeftBlank()
+            throws Exception {
+        String validExpirationYear = AutofillTestHelper.nextYear();
+        String validExpirationMonth = "12";
+        String guid = mAutofillTestHelper.setCreditCard(SAMPLE_LOCAL_CARD);
+
+        SettingsActivity activity =
+                mSettingsActivityTestRule.startSettingsActivity(fragmentArgs(guid));
+        AutofillLocalCardEditor autofillLocalCardEditorFragment =
+                (AutofillLocalCardEditor) activity.getMainFragment();
+        setExpirationDateOnEditor(
+                autofillLocalCardEditorFragment,
+                String.format("%s/%s", validExpirationMonth, validExpirationYear.substring(2)));
+        performButtonClickOnEditor(autofillLocalCardEditorFragment.mDoneButton);
+
+        Assert.assertTrue(
+                "User action should be logged.",
+                mActionTester.getActions().contains("AutofillCreditCardsEditedAndCvcWasLeftBlank"));
+    }
+
+    @Test
+    @MediumTest
+    @EnableFeatures({ChromeFeatureList.AUTOFILL_ENABLE_CVC_STORAGE})
+    public void testRecordUserAction_whenExistingCreditCardWithoutCvcIsEditedAndCvcIsAdded()
+            throws Exception {
+        String guid = mAutofillTestHelper.setCreditCard(SAMPLE_LOCAL_CARD);
+
+        SettingsActivity activity =
+                mSettingsActivityTestRule.startSettingsActivity(fragmentArgs(guid));
+        AutofillLocalCardEditor autofillLocalCardEditorFragment =
+                (AutofillLocalCardEditor) activity.getMainFragment();
+        setSecurityCodeOnEditor(autofillLocalCardEditorFragment, /* code= */ "321");
+        performButtonClickOnEditor(autofillLocalCardEditorFragment.mDoneButton);
+
+        Assert.assertTrue(
+                "User action should be logged.",
+                mActionTester.getActions().contains("AutofillCreditCardsEditedAndCvcWasAdded"));
+    }
+
+    @Test
+    @MediumTest
+    @EnableFeatures({ChromeFeatureList.AUTOFILL_ENABLE_CVC_STORAGE})
+    public void testRecordUserAction_whenExistingCreditCardWithCvcIsEditedAndCvcIsRemoved()
+            throws Exception {
+        SAMPLE_LOCAL_CARD_WITH_CVC.setNumber(NON_AMEX_CARD_NUMBER);
+        String guid = mAutofillTestHelper.setCreditCard(SAMPLE_LOCAL_CARD_WITH_CVC);
+
+        SettingsActivity activity =
+                mSettingsActivityTestRule.startSettingsActivity(fragmentArgs(guid));
+        AutofillLocalCardEditor autofillLocalCardEditorFragment =
+                (AutofillLocalCardEditor) activity.getMainFragment();
+        setSecurityCodeOnEditor(autofillLocalCardEditorFragment, /* code= */ "");
+        performButtonClickOnEditor(autofillLocalCardEditorFragment.mDoneButton);
+
+        Assert.assertTrue(
+                "User action should be logged.",
+                mActionTester.getActions().contains("AutofillCreditCardsEditedAndCvcWasRemoved"));
+    }
+
+    @Test
+    @MediumTest
+    @EnableFeatures({ChromeFeatureList.AUTOFILL_ENABLE_CVC_STORAGE})
+    public void testRecordUserAction_whenExistingCreditCardWithCvcIsEditedAndCvcIsUpdated()
+            throws Exception {
+        SAMPLE_LOCAL_CARD_WITH_CVC.setNumber(NON_AMEX_CARD_NUMBER);
+        String guid = mAutofillTestHelper.setCreditCard(SAMPLE_LOCAL_CARD_WITH_CVC);
+
+        SettingsActivity activity =
+                mSettingsActivityTestRule.startSettingsActivity(fragmentArgs(guid));
+        AutofillLocalCardEditor autofillLocalCardEditorFragment =
+                (AutofillLocalCardEditor) activity.getMainFragment();
+        setSecurityCodeOnEditor(autofillLocalCardEditorFragment, /* code= */ "321");
+        performButtonClickOnEditor(autofillLocalCardEditorFragment.mDoneButton);
+
+        Assert.assertTrue(
+                "User action should be logged.",
+                mActionTester.getActions().contains("AutofillCreditCardsEditedAndCvcWasUpdated"));
+    }
+
+    @Test
+    @MediumTest
+    @EnableFeatures({ChromeFeatureList.AUTOFILL_ENABLE_CVC_STORAGE})
+    public void testRecordUserAction_whenExistingCreditCardWithCvcIsEditedAndCvcIsUnchanged()
+            throws Exception {
+        String validExpirationYear = AutofillTestHelper.nextYear();
+        String validExpirationMonth = "12";
+        SAMPLE_LOCAL_CARD_WITH_CVC.setNumber(NON_AMEX_CARD_NUMBER);
+        String guid = mAutofillTestHelper.setCreditCard(SAMPLE_LOCAL_CARD_WITH_CVC);
+
+        SettingsActivity activity =
+                mSettingsActivityTestRule.startSettingsActivity(fragmentArgs(guid));
+        AutofillLocalCardEditor autofillLocalCardEditorFragment =
+                (AutofillLocalCardEditor) activity.getMainFragment();
+        setExpirationDateOnEditor(
+                autofillLocalCardEditorFragment,
+                String.format("%s/%s", validExpirationMonth, validExpirationYear.substring(2)));
+        performButtonClickOnEditor(autofillLocalCardEditorFragment.mDoneButton);
+
+        Assert.assertTrue(
+                "User action should be logged.",
+                mActionTester.getActions().contains("AutofillCreditCardsEditedAndCvcWasUnchanged"));
+    }
+
     private void openDeleteCreditCardConfirmationDialog(
             AutofillLocalCardEditor autofillLocalCardEditorFragment,
             ModalDialogManager modalDialogManager) {
@@ -807,6 +945,29 @@
             });
     }
 
+    private void setSecurityCodeOnEditor(
+            AutofillLocalCardEditor autofillLocalCardEditorFragment, String code) {
+        TestThreadUtils.runOnUiThreadBlocking(
+                () -> {
+                    try {
+                        autofillLocalCardEditorFragment.mCvc.setText(code);
+                    } catch (Exception e) {
+                        Assert.fail("Failed to set the security code");
+                    }
+                });
+    }
+
+    private void performButtonClickOnEditor(Button button) {
+        TestThreadUtils.runOnUiThreadBlocking(
+                () -> {
+                    try {
+                        button.performClick();
+                    } catch (Exception e) {
+                        Assert.fail("Failed to click the button");
+                    }
+                });
+    }
+
     private void verifyCvcHintImage(
             AutofillLocalCardEditor autofillLocalCardEditorFragment, int expectedImage) {
         ImageView expectedCvcHintImage = new ImageView(ContextUtils.getApplicationContext());
diff --git a/chrome/android/javatests/src/org/chromium/chrome/browser/browserservices/digitalgoods/DigitalGoodsTest.java b/chrome/android/javatests/src/org/chromium/chrome/browser/browserservices/digitalgoods/DigitalGoodsTest.java
index 2c366e9..a3bc3adcb 100644
--- a/chrome/android/javatests/src/org/chromium/chrome/browser/browserservices/digitalgoods/DigitalGoodsTest.java
+++ b/chrome/android/javatests/src/org/chromium/chrome/browser/browserservices/digitalgoods/DigitalGoodsTest.java
@@ -41,7 +41,6 @@
 import org.chromium.components.embedder_support.util.Origin;
 import org.chromium.net.test.EmbeddedTestServer;
 import org.chromium.net.test.ServerCertificate;
-import org.chromium.payments.mojom.DigitalGoods.GetDetails_Response;
 import org.chromium.payments.mojom.ItemDetails;
 import org.chromium.ui.test.util.UiDisableIf;
 import org.chromium.url.GURL;
@@ -131,17 +130,14 @@
         CallbackHelper helper = new CallbackHelper();
         impl.getDetails(
                 new String[] {"id1"},
-                new GetDetails_Response() {
-                    @Override
-                    public void call(Integer responseCode, ItemDetails[] details) {
-                        assertEquals(0, responseCode.intValue());
-                        assertEquals("id1", details[0].itemId);
-                        assertEquals("Item 1", details[0].title);
-                        assertEquals("Desc 1", details[0].description);
-                        assertEquals("GBP", details[0].price.currency);
-                        assertEquals("10", details[0].price.value);
-                        helper.notifyCalled();
-                    }
+                (int responseCode, ItemDetails[] details) -> {
+                    assertEquals(0, responseCode);
+                    assertEquals("id1", details[0].itemId);
+                    assertEquals("Item 1", details[0].title);
+                    assertEquals("Desc 1", details[0].description);
+                    assertEquals("GBP", details[0].price.currency);
+                    assertEquals("10", details[0].price.value);
+                    helper.notifyCalled();
                 });
         helper.waitForFirst();
     }
diff --git a/chrome/android/javatests/src/org/chromium/chrome/browser/customtabs/CustomTabActivityRenderTest.java b/chrome/android/javatests/src/org/chromium/chrome/browser/customtabs/CustomTabActivityRenderTest.java
index c5dbc76..e3b09be 100644
--- a/chrome/android/javatests/src/org/chromium/chrome/browser/customtabs/CustomTabActivityRenderTest.java
+++ b/chrome/android/javatests/src/org/chromium/chrome/browser/customtabs/CustomTabActivityRenderTest.java
@@ -100,7 +100,7 @@
     @Rule
     public final RenderTestRule mRenderTestRule =
             RenderTestRule.Builder.withPublicCorpus()
-                    .setRevision(2)
+                    .setRevision(3)
                     .setBugComponent(RenderTestRule.Component.UI_BROWSER_MOBILE_CUSTOM_TABS)
                     .build();
 
diff --git a/chrome/android/javatests/src/org/chromium/chrome/browser/customtabs/IncognitoCustomTabActivityRenderTest.java b/chrome/android/javatests/src/org/chromium/chrome/browser/customtabs/IncognitoCustomTabActivityRenderTest.java
index efe3f96..cf17483 100644
--- a/chrome/android/javatests/src/org/chromium/chrome/browser/customtabs/IncognitoCustomTabActivityRenderTest.java
+++ b/chrome/android/javatests/src/org/chromium/chrome/browser/customtabs/IncognitoCustomTabActivityRenderTest.java
@@ -61,7 +61,7 @@
     @Rule
     public final RenderTestRule mRenderTestRule =
             RenderTestRule.Builder.withPublicCorpus()
-                    .setRevision(1)
+                    .setRevision(2)
                     .setBugComponent(RenderTestRule.Component.UI_BROWSER_MOBILE_CUSTOM_TABS)
                     .build();
 
diff --git a/chrome/android/javatests/src/org/chromium/chrome/browser/customtabs/features/branding/CustomTabBrandingTest.java b/chrome/android/javatests/src/org/chromium/chrome/browser/customtabs/features/branding/CustomTabBrandingTest.java
index a3cde7c..d6c9ae6 100644
--- a/chrome/android/javatests/src/org/chromium/chrome/browser/customtabs/features/branding/CustomTabBrandingTest.java
+++ b/chrome/android/javatests/src/org/chromium/chrome/browser/customtabs/features/branding/CustomTabBrandingTest.java
@@ -53,7 +53,7 @@
     @Rule
     public final RenderTestRule mRenderTestRule =
             RenderTestRule.Builder.withPublicCorpus()
-                    .setRevision(1)
+                    .setRevision(2)
                     .setBugComponent(RenderTestRule.Component.UI_BROWSER_MOBILE_CUSTOM_TABS)
                     .build();
 
diff --git a/chrome/android/javatests/src/org/chromium/chrome/browser/firstrun/FirstRunIntegrationTest.java b/chrome/android/javatests/src/org/chromium/chrome/browser/firstrun/FirstRunIntegrationTest.java
index ba80751a..1d9e58c 100644
--- a/chrome/android/javatests/src/org/chromium/chrome/browser/firstrun/FirstRunIntegrationTest.java
+++ b/chrome/android/javatests/src/org/chromium/chrome/browser/firstrun/FirstRunIntegrationTest.java
@@ -758,6 +758,7 @@
 
     @Test
     @MediumTest
+    @DisabledTest(message = "https://crbug.com/1513445")
     public void testMultipleFresBackButton() throws Exception {
         launchViewIntent(TEST_URL);
         FirstRunActivity firstFreActivity = waitForFirstRunActivity();
diff --git a/chrome/browser/about_flags.cc b/chrome/browser/about_flags.cc
index a97053f5..98dd6b3 100644
--- a/chrome/browser/about_flags.cc
+++ b/chrome/browser/about_flags.cc
@@ -2363,11 +2363,6 @@
 const FeatureEntry::FeatureParam kSurfacePolish_logo_in_toolbar[] = {
     {"polish_omnibox_color", "true"}};
 
-const FeatureEntry::FeatureParam kSurfacePolish_use_magic_space[] = {
-    {"polish_omnibox_color", "true"},
-    {"move_down_logo", "true"},
-    {"use_magic_space", "true"}};
-
 const FeatureEntry::FeatureVariation kSurfacePolishVariations[] = {
     {"Arm 1: MVP", kSurfacePolish_mvp, std::size(kSurfacePolish_mvp), nullptr},
     {"Arm 2: White Omnibox", kSurfacePolish_white_omnibox,
@@ -2378,8 +2373,6 @@
      std::size(kSurfacePolish_mvp_2row_mvt), nullptr},
     {"Arm 5: Logo in toolbar", kSurfacePolish_logo_in_toolbar,
      std::size(kSurfacePolish_logo_in_toolbar), nullptr},
-    {"Use magic space", kSurfacePolish_use_magic_space,
-     std::size(kSurfacePolish_use_magic_space), nullptr},
 };
 
 const FeatureEntry::FeatureParam kFeedPositionAndroid_push_down_feed_small[] = {
@@ -6955,6 +6948,10 @@
                                     kSurfacePolishVariations,
                                     "SurfacePolish")},
 
+    {"enable-magic-stack-android", flag_descriptions::kMagicStackAndroidName,
+     flag_descriptions::kMagicStackAndroidDescription, kOsAndroid,
+     FEATURE_VALUE_TYPE(chrome::android::kMagicStackAndroid)},
+
     {"enable-show-ntp-at-startup",
      flag_descriptions::kShowNtpAtStartupAndroidName,
      flag_descriptions::kShowNtpAtStartupAndroidDescription, kOsAndroid,
@@ -10976,6 +10973,15 @@
      FEATURE_VALUE_TYPE(ash::features::kSysUiDownloadsIntegrationV2)},
 #endif
 
+#if BUILDFLAG(IS_ANDROID)
+    {"autofill-enable-iban-android-bottom-sheet",
+     flag_descriptions::kAutofillEnableIbanAndroidBottomSheetName,
+     flag_descriptions::kAutofillEnableIbanAndroidBottomSheetDescription,
+     kOsAndroid,
+     FEATURE_VALUE_TYPE(
+         autofill::features::kAutofillEnableIbanAndroidBottomSheet)},
+#endif
+
     // NOTE: Adding a new flag requires adding a corresponding entry to enum
     // "LoginCustomFlags" in tools/metrics/histograms/enums.xml. See "Flag
     // Histograms" in tools/metrics/histograms/README.md (run the
diff --git a/chrome/browser/ash/BUILD.gn b/chrome/browser/ash/BUILD.gn
index 213bcb12..3f87a693 100644
--- a/chrome/browser/ash/BUILD.gn
+++ b/chrome/browser/ash/BUILD.gn
@@ -1454,6 +1454,8 @@
     "hats/hats_finch_helper.h",
     "hats/hats_notification_controller.cc",
     "hats/hats_notification_controller.h",
+    "http_auth_dialog.cc",
+    "http_auth_dialog.h",
     "idle_detector.cc",
     "idle_detector.h",
     "input_method/accessibility.cc",
diff --git a/chrome/browser/ash/app_list/search/omnibox/omnibox_result_unittest.cc b/chrome/browser/ash/app_list/search/omnibox/omnibox_result_unittest.cc
index f65c047f..3247767 100644
--- a/chrome/browser/ash/app_list/search/omnibox/omnibox_result_unittest.cc
+++ b/chrome/browser/ash/app_list/search/omnibox/omnibox_result_unittest.cc
@@ -162,8 +162,7 @@
         BookmarkModelFactory::GetInstance(),
         BookmarkModelFactory::GetDefaultFactory());
     profile_builder.SetSharedURLLoaderFactory(
-        base::MakeRefCounted<network::WeakWrapperSharedURLLoaderFactory>(
-            &test_url_loader_factory_));
+        test_url_loader_factory_.GetSafeWeakWrapper());
     profile_ = profile_builder.Build();
 
     app_list_controller_delegate_ =
diff --git a/chrome/browser/ash/arc/input_overlay/actions/action.h b/chrome/browser/ash/arc/input_overlay/actions/action.h
index f5fa4b5..f6fa61c 100644
--- a/chrome/browser/ash/arc/input_overlay/actions/action.h
+++ b/chrome/browser/ash/arc/input_overlay/actions/action.h
@@ -171,7 +171,7 @@
   }
   int name_label_index() { return name_label_index_; }
 
-  bool is_new() { return is_new_; }
+  bool is_new() const { return is_new_; }
   void set_is_new(bool is_new) { is_new_ = is_new; }
 
  protected:
diff --git a/chrome/browser/ash/arc/input_overlay/test/overlay_view_test_base.cc b/chrome/browser/ash/arc/input_overlay/test/overlay_view_test_base.cc
index 8ba5659..6b61eac 100644
--- a/chrome/browser/ash/arc/input_overlay/test/overlay_view_test_base.cc
+++ b/chrome/browser/ash/arc/input_overlay/test/overlay_view_test_base.cc
@@ -4,17 +4,25 @@
 
 #include "chrome/browser/ash/arc/input_overlay/test/overlay_view_test_base.h"
 
+#include <algorithm>
+
 #include "ash/style/icon_button.h"
 #include "chrome/browser/ash/arc/input_overlay/actions/action.h"
 #include "chrome/browser/ash/arc/input_overlay/display_overlay_controller.h"
 #include "chrome/browser/ash/arc/input_overlay/touch_injector.h"
+#include "chrome/browser/ash/arc/input_overlay/ui/action_edit_view.h"
 #include "chrome/browser/ash/arc/input_overlay/ui/action_view.h"
 #include "chrome/browser/ash/arc/input_overlay/ui/action_view_list_item.h"
 #include "chrome/browser/ash/arc/input_overlay/ui/button_options_menu.h"
 #include "chrome/browser/ash/arc/input_overlay/ui/delete_edit_shortcut.h"
+#include "chrome/browser/ash/arc/input_overlay/ui/edit_label.h"
+#include "chrome/browser/ash/arc/input_overlay/ui/edit_labels.h"
 #include "chrome/browser/ash/arc/input_overlay/ui/editing_list.h"
 #include "chrome/browser/ash/arc/input_overlay/ui/input_mapping_view.h"
+#include "chrome/browser/ash/arc/input_overlay/ui/name_tag.h"
+#include "chrome/browser/ash/arc/input_overlay/ui/target_view.h"
 #include "chrome/browser/ash/arc/input_overlay/ui/touch_point.h"
+#include "ui/views/view_utils.h"
 
 namespace arc::input_overlay {
 
@@ -36,6 +44,15 @@
   LeftClickOn(editing_list_->add_button_);
 }
 
+void OverlayViewTestBase::AddNewActionInCenter() {
+  DCHECK(editing_list_);
+
+  PressAddButton();
+  const auto* target_view = GetTargetView();
+  DCHECK(target_view);
+  LeftClickOn(target_view);
+}
+
 ButtonOptionsMenu* OverlayViewTestBase::ShowButtonOptionsMenu(Action* action) {
   action->action_view()->ShowButtonOptionsMenu();
   DCHECK(controller_->button_options_widget_);
@@ -125,6 +142,32 @@
   return nullptr;
 }
 
+void OverlayViewTestBase::VerifyUIDisplay(
+    Action* action,
+    const std::vector<std::u16string>& expected_labels,
+    const std::u16string& expected_name) const {
+  DCHECK(action);
+  VerifyActionView(action->action_view(), expected_labels);
+
+  auto* const list_item = GetEditingListItem(action);
+  EXPECT_TRUE(list_item);
+  VerifyEditingListItem(list_item, expected_labels, expected_name);
+
+  if (auto* menu = GetButtonOptionsMenu(); menu->action() == action) {
+    VerifyButtonOptionsMenu(menu, expected_labels, expected_name);
+  }
+}
+
+void OverlayViewTestBase::VerifyActionKeyBinding(
+    Action* action,
+    const std::vector<ui::DomCode>& expected_code) const {
+  const auto& current_keys = action->current_input()->keys();
+  const size_t size = current_keys.size();
+  EXPECT_EQ(expected_code.size(), size);
+  EXPECT_TRUE(std::equal(expected_code.begin(), expected_code.end(),
+                         current_keys.begin()));
+}
+
 // Create a GIO enabled window with default actions including two action tap and
 // one action move, enable it into edit mode.
 void OverlayViewTestBase::SetUp() {
@@ -149,4 +192,68 @@
   DCHECK(move_action_list_item_);
 }
 
+ActionViewListItem* OverlayViewTestBase::GetEditingListItem(
+    Action* action) const {
+  if (auto* const editing_list = GetEditingList()) {
+    for (const auto& child : editing_list->scroll_content_->children()) {
+      auto* const list_item = views::AsViewClass<ActionViewListItem>(child);
+      DCHECK(list_item);
+      if (list_item->action() == action) {
+        return list_item;
+      }
+    }
+  }
+  return nullptr;
+}
+
+void OverlayViewTestBase::VerifyButtonOptionsMenu(
+    ButtonOptionsMenu* menu,
+    const std::vector<std::u16string>& expected_labels,
+    const std::u16string& expected_name) const {
+  DCHECK(menu);
+  const auto& labels = menu->action_edit_->labels_view_->labels_;
+  const size_t size = labels.size();
+  EXPECT_EQ(expected_labels.size(), size);
+  EXPECT_TRUE(std::equal(expected_labels.begin(), expected_labels.end(),
+                         labels.begin(),
+                         [](std::u16string a, EditLabel* label) {
+                           return a == label->GetText();
+                         }));
+  EXPECT_EQ(menu->action_name_label_->GetText(), expected_name);
+}
+
+void OverlayViewTestBase::VerifyEditingListItem(
+    ActionViewListItem* list_item,
+    const std::vector<std::u16string>& expected_labels,
+    const std::u16string& expected_name) const {
+  DCHECK(list_item);
+  const auto& labels = list_item->labels_view_->labels_;
+  const size_t size = labels.size();
+  EXPECT_EQ(expected_labels.size(), size);
+  EXPECT_TRUE(std::equal(expected_labels.begin(), expected_labels.end(),
+                         labels.begin(),
+                         [](std::u16string a, EditLabel* label) {
+                           return a == label->GetText();
+                         }));
+  EXPECT_EQ(list_item->name_tag_->title_label_->GetText(), expected_name);
+}
+
+void OverlayViewTestBase::VerifyActionView(
+    ActionView* action_view,
+    const std::vector<std::u16string>& expected_labels) const {
+  DCHECK(action_view);
+  const auto* action = action_view->action();
+  DCHECK(action);
+
+  const auto& labels = action_view->labels();
+  const size_t size = labels.size();
+  EXPECT_EQ(expected_labels.size(), size);
+  for (size_t i = 0; i < size; i++) {
+    EXPECT_EQ(action->is_new()
+                  ? (expected_labels[i].empty() ? u"?" : expected_labels[i])
+                  : expected_labels[i],
+              labels[i]->GetText());
+  }
+}
+
 }  // namespace arc::input_overlay
diff --git a/chrome/browser/ash/arc/input_overlay/test/overlay_view_test_base.h b/chrome/browser/ash/arc/input_overlay/test/overlay_view_test_base.h
index a7dc63ab..881ae77 100644
--- a/chrome/browser/ash/arc/input_overlay/test/overlay_view_test_base.h
+++ b/chrome/browser/ash/arc/input_overlay/test/overlay_view_test_base.h
@@ -5,12 +5,16 @@
 #ifndef CHROME_BROWSER_ASH_ARC_INPUT_OVERLAY_TEST_OVERLAY_VIEW_TEST_BASE_H_
 #define CHROME_BROWSER_ASH_ARC_INPUT_OVERLAY_TEST_OVERLAY_VIEW_TEST_BASE_H_
 
+#include <string>
+#include <vector>
+
 #include "base/memory/raw_ptr.h"
 #include "chrome/browser/ash/arc/input_overlay/test/game_controls_test_base.h"
 
 namespace arc::input_overlay {
 
 class Action;
+class ActionView;
 class ActionViewListItem;
 class ButtonOptionsMenu;
 class DeleteEditShortcut;
@@ -28,6 +32,9 @@
   void EnableEditMode();
   void PressAddButton();
 
+  // Adds a new action in the center of the main window.
+  void AddNewActionInCenter();
+
   ButtonOptionsMenu* ShowButtonOptionsMenu(Action* action);
   void PressDoneButtonOnButtonOptionsMenu();
   void PressDeleteButtonOnButtonOptionsMenu();
@@ -45,6 +52,13 @@
   Action* GetButtonOptionsMenuAction() const;
   Action* GetEditingListItemAction(size_t index) const;
 
+  void VerifyUIDisplay(Action* action,
+                       const std::vector<std::u16string>& expected_labels,
+                       const std::u16string& expected_name) const;
+  void VerifyActionKeyBinding(
+      Action* action,
+      const std::vector<ui::DomCode>& expected_code) const;
+
   // GameControlsTestBase:
   void SetUp() override;
 
@@ -59,6 +73,21 @@
   raw_ptr<ActionViewListItem, DanglingUntriaged> move_action_list_item_;
 
   gfx::Point local_location_;
+
+ private:
+  ActionViewListItem* GetEditingListItem(Action* action) const;
+
+  // Verifies UI display.
+  void VerifyButtonOptionsMenu(
+      ButtonOptionsMenu* menu,
+      const std::vector<std::u16string>& expected_labels,
+      const std::u16string& expected_name) const;
+  void VerifyEditingListItem(ActionViewListItem* list_item,
+                             const std::vector<std::u16string>& expected_labels,
+                             const std::u16string& expected_name) const;
+  void VerifyActionView(
+      ActionView* action_view,
+      const std::vector<std::u16string>& expected_labels) const;
 };
 }  // namespace arc::input_overlay
 
diff --git a/chrome/browser/ash/arc/input_overlay/touch_injector.cc b/chrome/browser/ash/arc/input_overlay/touch_injector.cc
index d031ef2..90e2a7f 100644
--- a/chrome/browser/ash/arc/input_overlay/touch_injector.cc
+++ b/chrome/browser/ash/arc/input_overlay/touch_injector.cc
@@ -19,6 +19,7 @@
 #include "chrome/browser/ash/arc/input_overlay/actions/action.h"
 #include "chrome/browser/ash/arc/input_overlay/actions/action_move.h"
 #include "chrome/browser/ash/arc/input_overlay/actions/action_tap.h"
+#include "chrome/browser/ash/arc/input_overlay/actions/input_element.h"
 #include "chrome/browser/ash/arc/input_overlay/arc_input_overlay_ukm.h"
 #include "chrome/browser/ash/arc/input_overlay/arc_input_overlay_uma.h"
 #include "chrome/browser/ash/arc/input_overlay/constants.h"
@@ -433,6 +434,25 @@
       menu_entry_location_point.y() / height);
 }
 
+void TouchInjector::MaybeBindDefaultInputElement(Action* action) {
+  // It only supports to assign default keys WASD for `ActionMove` if there is
+  // no overlapped input binding.
+  if (action->GetType() != ActionType::MOVE) {
+    return;
+  }
+
+  auto input_element = InputElement::CreateActionMoveKeyElement(
+      {ui::DomCode::US_W, ui::DomCode::US_A, ui::DomCode::US_S,
+       ui::DomCode::US_D});
+  if (auto* overlapped_action = FindActionWithOverlapInputElement(
+          actions_, /*target_action=*/action, *input_element);
+      !overlapped_action) {
+    action->PrepareToBindInput(std::move(input_element));
+    action->BindPending();
+    NotifyActionInputBindingUpdated(*action);
+  }
+}
+
 void TouchInjector::UpdatePositionsForRegister() {
   if (rotation_transform_) {
     rotation_transform_.reset();
@@ -937,8 +957,10 @@
     return;
   }
 
+  auto* new_action_ptr = action.get();
   // Apply the change right away for beta.
   NotifyActionAdded(*actions_.emplace_back(std::move(action)));
+  MaybeBindDefaultInputElement(new_action_ptr);
 
   // It may need to turn off the flag `kEmpty` after adding an action.
   UpdateFlagAndProperty(window_, ash::ArcGameControlsFlag::kEmpty,
@@ -975,10 +997,10 @@
 void TouchInjector::ChangeActionType(Action* action, ActionType action_type) {
   auto new_action = CreateRawAction(action_type, this);
   new_action->InitByChangingActionType(action);
-  auto* new_action_raw = new_action.get();
-
+  auto* new_action_ptr = new_action.get();
   ReplaceActionInternal(action, std::move(new_action));
-  NotifyActionTypeChanged(action, new_action_raw);
+  NotifyActionTypeChanged(action, new_action_ptr);
+  MaybeBindDefaultInputElement(new_action_ptr);
 }
 
 void TouchInjector::ChangeActionName(Action* action, int index) {
diff --git a/chrome/browser/ash/arc/input_overlay/touch_injector.h b/chrome/browser/ash/arc/input_overlay/touch_injector.h
index ea0915c..2b74c35 100644
--- a/chrome/browser/ash/arc/input_overlay/touch_injector.h
+++ b/chrome/browser/ash/arc/input_overlay/touch_injector.h
@@ -115,6 +115,8 @@
     return menu_entry_location_;
   }
 
+  void MaybeBindDefaultInputElement(Action* action);
+
   // Update `content_bounds_f_` and touch positions for each `actions_` for
   // different reasons.
   void UpdatePositionsForRegister();
diff --git a/chrome/browser/ash/arc/input_overlay/ui/action_edit_view.h b/chrome/browser/ash/arc/input_overlay/ui/action_edit_view.h
index 4c9074a4..64155e4 100644
--- a/chrome/browser/ash/arc/input_overlay/ui/action_edit_view.h
+++ b/chrome/browser/ash/arc/input_overlay/ui/action_edit_view.h
@@ -55,6 +55,7 @@
  private:
   friend class ButtonOptionsMenuTest;
   friend class EditLabelTest;
+  friend class OverlayViewTestBase;
 
   void OnClicked();
 
diff --git a/chrome/browser/ash/arc/input_overlay/ui/button_options_menu_unittest.cc b/chrome/browser/ash/arc/input_overlay/ui/button_options_menu_unittest.cc
index b3c4548453..604a358 100644
--- a/chrome/browser/ash/arc/input_overlay/ui/button_options_menu_unittest.cc
+++ b/chrome/browser/ash/arc/input_overlay/ui/button_options_menu_unittest.cc
@@ -209,6 +209,37 @@
   EXPECT_EQ(list_index, GetIndexInEditingList(menu->action()));
 }
 
+TEST_F(ButtonOptionsMenuTest, TestActionMoveDefaultInputBinding) {
+  // Originally there is an `ActionMove` with WASD as default bindings. Add
+  // another new `ActionMove` and the new `ActionMove` will not assign default
+  // WASD bindings.
+  AddNewActionInCenter();
+  auto* menu = GetButtonOptionsMenu();
+  ASSERT_TRUE(menu);
+  PressActionMoveButton(menu);
+  auto* new_action = GetButtonOptionsMenuAction();
+  ASSERT_TRUE(new_action);
+  EXPECT_TRUE(new_action->current_input()->IsUnbound());
+  VerifyActionKeyBinding(new_action, {ui::DomCode::NONE, ui::DomCode::NONE,
+                                      ui::DomCode::NONE, ui::DomCode::NONE});
+  VerifyUIDisplay(new_action, {u"", u"", u"", u""}, u"Unassigned joystick");
+
+  // Delete the original action move and add another `ActionMove`. The new
+  // `ActionMove` will assign default WASD bindings.
+  ShowButtonOptionsMenu(move_action_);
+  PressDeleteButtonOnButtonOptionsMenu();
+  AddNewActionInCenter();
+  menu = GetButtonOptionsMenu();
+  ASSERT_TRUE(menu);
+  PressActionMoveButton(menu);
+  new_action = GetButtonOptionsMenuAction();
+  ASSERT_TRUE(new_action);
+  EXPECT_FALSE(new_action->current_input()->IsUnbound());
+  VerifyActionKeyBinding(new_action, {ui::DomCode::US_W, ui::DomCode::US_A,
+                                      ui::DomCode::US_S, ui::DomCode::US_D});
+  VerifyUIDisplay(new_action, {u"w", u"a", u"s", u"d"}, u"Joystick wasd");
+}
+
 TEST_F(ButtonOptionsMenuTest, TestClickActionEdit) {
   auto* menu = ShowButtonOptionsMenu(tap_action_);
   PressActionEdit(menu);
diff --git a/chrome/browser/ash/arc/input_overlay/ui/edit_label_unittest.cc b/chrome/browser/ash/arc/input_overlay/ui/edit_label_unittest.cc
index a36ae8e..4fc52bbc 100644
--- a/chrome/browser/ash/arc/input_overlay/ui/edit_label_unittest.cc
+++ b/chrome/browser/ash/arc/input_overlay/ui/edit_label_unittest.cc
@@ -75,53 +75,17 @@
     return IsNameTagInErrorState(list_item->labels_view_);
   }
 
-  void CheckAction(ActionType action_type,
-                   ButtonOptionsMenu* menu,
+  void CheckAction(Action* action,
+                   ActionType expect_action_type,
                    const std::vector<ui::DomCode>& expected_code,
-                   const std::vector<std::u16string>& expected_text) {
-    auto* action = menu->action();
-    auto* list_item = GetActionViewListItem(action);
-    EXPECT_TRUE(list_item);
-    switch (action_type) {
-      case ActionType::TAP:
-        if (expected_code.empty()) {
-          EXPECT_TRUE(action->current_input()->keys().empty());
-        } else {
-          EXPECT_EQ(expected_code[0], action->current_input()->keys()[0]);
-        }
-        EXPECT_EQ(expected_text[0],
-                  GetEditLabel(list_item, /*index=*/0)->GetText());
-        EXPECT_EQ(expected_text[0], GetEditLabel(menu, /*index=*/0)->GetText());
-        EXPECT_EQ(action->is_new()
-                      ? (expected_text[0].empty() ? u"?" : expected_text[0])
-                      : expected_text[0],
-                  GetLabel(action->action_view(), /*index=*/0)->GetText());
-        break;
-      case ActionType::MOVE:
-        for (size_t i = 0; i < kActionMoveKeysSize; i++) {
-          EXPECT_EQ(expected_code[i], action->current_input()->keys()[i]);
-          EXPECT_EQ(expected_text[i],
-                    GetEditLabel(list_item, /*index=*/i)->GetText());
-          EXPECT_EQ(expected_text[i],
-                    GetEditLabel(menu, /*index=*/i)->GetText());
-          EXPECT_EQ(action->is_new()
-                        ? (expected_text[i].empty() ? u"?" : expected_text[i])
-                        : expected_text[i],
-                    GetLabel(action->action_view(), /*index=*/i)->GetText());
-        }
-        break;
-      default:
-        NOTREACHED();
-    }
-  }
+                   const std::vector<std::u16string>& expected_labels,
+                   const std::u16string expected_name) {
+    DCHECK(action);
+    ShowButtonOptionsMenu(action);
 
-  void CheckActionName(std::u16string expected_name,
-                       ButtonOptionsMenu* menu,
-                       ActionViewListItem* list_item) {
-    EXPECT_EQ(menu->action_name_label_->GetText(), expected_name);
-    if (list_item) {
-      EXPECT_EQ(list_item->name_tag_->title_label_->GetText(), expected_name);
-    }
+    EXPECT_EQ(expect_action_type, action->GetType());
+    VerifyActionKeyBinding(action, expected_code);
+    VerifyUIDisplay(action, expected_labels, expected_name);
   }
 
   void CheckErrorState(ButtonOptionsMenu* menu,
@@ -176,41 +140,41 @@
 TEST_F(EditLabelTest, TestEditingListLabelEditing) {
   // Modify the label for ActionTap and noting is conflicted.
   // ActionTap: ␣ -> m.
-  auto* menu = ShowButtonOptionsMenu(tap_action_);
-  CheckAction(ActionType::TAP, menu, {ui::DomCode::SPACE}, {u"␣"});
-  CheckActionName(u"Game button ␣", menu, tap_action_list_item_);
-  CheckErrorState(menu, tap_action_list_item_, /*menu_has_error=*/false,
+  CheckAction(tap_action_, ActionType::TAP, {ui::DomCode::SPACE}, {u"␣"},
+              u"Game button ␣");
+  CheckErrorState(GetButtonOptionsMenu(), tap_action_list_item_,
+                  /*menu_has_error=*/false,
                   /*list_item_has_error=*/false);
   TapKeyboardKeyOnEditLabel(GetEditLabel(tap_action_list_item_, /*index=*/0),
                             ui::VKEY_M);
-  CheckAction(ActionType::TAP, menu, {ui::DomCode::US_M}, {u"m"});
-  CheckActionName(u"Game button m", menu, tap_action_list_item_);
-  CheckErrorState(menu, tap_action_list_item_, /*menu_has_error=*/false,
+  CheckAction(tap_action_, ActionType::TAP, {ui::DomCode::US_M}, {u"m"},
+              u"Game button m");
+  CheckErrorState(GetButtonOptionsMenu(), tap_action_list_item_,
+                  /*menu_has_error=*/false,
                   /*list_item_has_error=*/false);
   EXPECT_FALSE(tap_action_->IsDeleted());
   EXPECT_FALSE(move_action_->IsDeleted());
 
   // Modify the label for ActionMove and nothing is conflicted.
   // ActionMove: wasd -> lasd.
-  menu = ShowButtonOptionsMenu(move_action_);
-  CheckAction(ActionType::MOVE, menu,
+  CheckAction(move_action_, ActionType::MOVE,
               {ui::DomCode::US_W, ui::DomCode::US_A, ui::DomCode::US_S,
                ui::DomCode::US_D},
-              {u"w", u"a", u"s", u"d"});
-  CheckActionName(u"Joystick wasd", menu, move_action_list_item_);
-  CheckErrorState(menu, move_action_list_item_, /*menu_has_error=*/false,
+              {u"w", u"a", u"s", u"d"}, u"Joystick wasd");
+  CheckErrorState(GetButtonOptionsMenu(), move_action_list_item_,
+                  /*menu_has_error=*/false,
                   /*list_item_has_error=*/false);
   EXPECT_FALSE(tap_action_->IsDeleted());
   EXPECT_FALSE(move_action_->IsDeleted());
 
   TapKeyboardKeyOnEditLabel(GetEditLabel(move_action_list_item_, /*index=*/0),
                             ui::VKEY_L);
-  CheckAction(ActionType::MOVE, menu,
+  CheckAction(move_action_, ActionType::MOVE,
               {ui::DomCode::US_L, ui::DomCode::US_A, ui::DomCode::US_S,
                ui::DomCode::US_D},
-              {u"l", u"a", u"s", u"d"});
-  CheckActionName(u"Joystick lasd", menu, move_action_list_item_);
-  CheckErrorState(menu, move_action_list_item_, /*menu_has_error=*/false,
+              {u"l", u"a", u"s", u"d"}, u"Joystick lasd");
+  CheckErrorState(GetButtonOptionsMenu(), move_action_list_item_,
+                  /*menu_has_error=*/false,
                   /*list_item_has_error=*/false);
   EXPECT_FALSE(tap_action_->IsDeleted());
   EXPECT_FALSE(move_action_->IsDeleted());
@@ -219,12 +183,12 @@
   // ActionMove: lasd -> ?ald.
   TapKeyboardKeyOnEditLabel(GetEditLabel(move_action_list_item_, /*index=*/2),
                             ui::VKEY_L);
-  CheckAction(ActionType::MOVE, menu,
+  CheckAction(move_action_, ActionType::MOVE,
               {ui::DomCode::NONE, ui::DomCode::US_A, ui::DomCode::US_L,
                ui::DomCode::US_D},
-              {u"?", u"a", u"l", u"d"});
-  CheckActionName(u"Joystick ald", menu, move_action_list_item_);
-  CheckErrorState(menu, move_action_list_item_, /*menu_has_error=*/true,
+              {u"?", u"a", u"l", u"d"}, u"Joystick ald");
+  CheckErrorState(GetButtonOptionsMenu(), move_action_list_item_,
+                  /*menu_has_error=*/true,
                   /*list_item_has_error=*/true);
   EXPECT_FALSE(tap_action_->IsDeleted());
   EXPECT_FALSE(move_action_->IsDeleted());
@@ -232,20 +196,19 @@
   // Modify the label for ActionMove and it is conflicted outside.
   // ActionTap: m -> ?
   // ActionMove: ?ald -> mald.
-  menu = ShowButtonOptionsMenu(tap_action_);
   TapKeyboardKeyOnEditLabel(GetEditLabel(move_action_list_item_, /*index=*/0),
                             ui::VKEY_M);
-  CheckAction(ActionType::TAP, menu, {ui::DomCode::NONE}, {u"?"});
-  CheckActionName(u"Unassigned button", menu, tap_action_list_item_);
-  CheckErrorState(menu, tap_action_list_item_, /*menu_has_error=*/true,
+  CheckAction(tap_action_, ActionType::TAP, {ui::DomCode::NONE}, {u"?"},
+              u"Unassigned button");
+  CheckErrorState(GetButtonOptionsMenu(), tap_action_list_item_,
+                  /*menu_has_error=*/true,
                   /*list_item_has_error=*/true);
-  menu = ShowButtonOptionsMenu(move_action_);
-  CheckAction(ActionType::MOVE, menu,
+  CheckAction(move_action_, ActionType::MOVE,
               {ui::DomCode::US_M, ui::DomCode::US_A, ui::DomCode::US_L,
                ui::DomCode::US_D},
-              {u"m", u"a", u"l", u"d"});
-  CheckActionName(u"Joystick mald", menu, move_action_list_item_);
-  CheckErrorState(menu, move_action_list_item_, /*menu_has_error=*/false,
+              {u"m", u"a", u"l", u"d"}, u"Joystick mald");
+  CheckErrorState(GetButtonOptionsMenu(), move_action_list_item_,
+                  /*menu_has_error=*/false,
                   /*list_item_has_error=*/false);
   EXPECT_FALSE(tap_action_->IsDeleted());
   EXPECT_FALSE(move_action_->IsDeleted());
@@ -253,20 +216,19 @@
   // Modify the label for ActionTap and it is conflicted outside.
   // ActionTap: ? -> d.
   // ActionMove: mald -> mal?.
-  menu = ShowButtonOptionsMenu(tap_action_);
   TapKeyboardKeyOnEditLabel(GetEditLabel(tap_action_list_item_, /*index=*/0),
                             ui::VKEY_D);
-  CheckAction(ActionType::TAP, menu, {ui::DomCode::US_D}, {u"d"});
-  CheckActionName(u"Game button d", menu, tap_action_list_item_);
-  CheckErrorState(menu, tap_action_list_item_, /*menu_has_error=*/false,
+  CheckAction(tap_action_, ActionType::TAP, {ui::DomCode::US_D}, {u"d"},
+              u"Game button d");
+  CheckErrorState(GetButtonOptionsMenu(), tap_action_list_item_,
+                  /*menu_has_error=*/false,
                   /*list_item_has_error=*/false);
-  menu = ShowButtonOptionsMenu(move_action_);
-  CheckAction(ActionType::MOVE, menu,
+  CheckAction(move_action_, ActionType::MOVE,
               {ui::DomCode::US_M, ui::DomCode::US_A, ui::DomCode::US_L,
                ui::DomCode::NONE},
-              {u"m", u"a", u"l", u"?"});
-  CheckActionName(u"Joystick mal", menu, move_action_list_item_);
-  CheckErrorState(menu, move_action_list_item_, /*menu_has_error=*/true,
+              {u"m", u"a", u"l", u"?"}, u"Joystick mal");
+  CheckErrorState(GetButtonOptionsMenu(), move_action_list_item_,
+                  /*menu_has_error=*/true,
                   /*list_item_has_error=*/true);
   EXPECT_FALSE(tap_action_->IsDeleted());
   EXPECT_FALSE(move_action_->IsDeleted());
@@ -275,44 +237,47 @@
 TEST_F(EditLabelTest, TestEditingListLabelReservedKey) {
   // Press a reserved key on Action tap with no error state and then it shows
   // error state.
-  auto* menu = ShowButtonOptionsMenu(tap_action_);
+  ShowButtonOptionsMenu(tap_action_);
   FocusOnLabel(GetEditLabel(tap_action_list_item_, /*index=*/0));
   TapKeyboardKeyOnEditLabel(GetEditLabel(tap_action_list_item_, /*index=*/0),
                             ui::VKEY_ESCAPE);
   // Label is not changed.
-  CheckAction(ActionType::TAP, menu, {ui::DomCode::SPACE}, {u"␣"});
-  CheckActionName(u"Game button ␣", menu, tap_action_list_item_);
+  CheckAction(tap_action_, ActionType::TAP, {ui::DomCode::SPACE}, {u"␣"},
+              u"Game button ␣");
   // Error state shows temporarily on list item view.
-  CheckErrorState(menu, tap_action_list_item_, /*menu_has_error=*/false,
+  CheckErrorState(GetButtonOptionsMenu(), tap_action_list_item_,
+                  /*menu_has_error=*/false,
                   /*list_item_has_error=*/true);
   // Error state shows up temporarily and disappears after leaving focus.
   BlurOnLabel(GetEditLabel(tap_action_list_item_, /*index=*/0));
-  CheckErrorState(menu, tap_action_list_item_, /*menu_has_error=*/false,
+  CheckErrorState(GetButtonOptionsMenu(), tap_action_list_item_,
+                  /*menu_has_error=*/false,
                   /*list_item_has_error=*/false);
 
   // Press a reserved key on Action move which is already in error state.
   // ActionMove: wasd -> wal?.
-  menu = ShowButtonOptionsMenu(move_action_);
   FocusOnLabel(GetEditLabel(tap_action_list_item_, /*index=*/0));
   TapKeyboardKeyOnEditLabel(GetEditLabel(tap_action_list_item_, /*index=*/0),
                             ui::VKEY_D);
-  CheckAction(ActionType::MOVE, menu,
+  CheckAction(move_action_, ActionType::MOVE,
               {ui::DomCode::US_W, ui::DomCode::US_A, ui::DomCode::US_S,
                ui::DomCode::NONE},
-              {u"w", u"a", u"s", u"?"});
-  CheckActionName(u"Joystick was", menu, move_action_list_item_);
-  CheckErrorState(menu, move_action_list_item_, /*menu_has_error=*/true,
+              {u"w", u"a", u"s", u"?"}, u"Joystick was");
+  CheckErrorState(GetButtonOptionsMenu(), move_action_list_item_,
+                  /*menu_has_error=*/true,
                   /*list_item_has_error=*/true);
   FocusOnLabel(GetEditLabel(move_action_list_item_, /*index=*/0));
   // Press a reserved key on Action move and error state still shows up.
   TapKeyboardKeyOnEditLabel(GetEditLabel(move_action_list_item_,
                                          /*index=*/0),
                             ui::VKEY_ESCAPE);
-  CheckErrorState(menu, move_action_list_item_, /*menu_has_error=*/true,
+  CheckErrorState(GetButtonOptionsMenu(), move_action_list_item_,
+                  /*menu_has_error=*/true,
                   /*list_item_has_error=*/true);
   BlurOnLabel(GetEditLabel(move_action_list_item_, /*index=*/0));
   // Error state still shows up after leaving focus.
-  CheckErrorState(menu, move_action_list_item_, /*menu_has_error=*/true,
+  CheckErrorState(GetButtonOptionsMenu(), move_action_list_item_,
+                  /*menu_has_error=*/true,
                   /*list_item_has_error=*/true);
 }
 
@@ -324,31 +289,28 @@
   EXPECT_TRUE(menu);
   auto* action = GetAction(menu);
   EXPECT_TRUE(action->is_new());
-  CheckAction(ActionType::MOVE, menu,
+  CheckAction(action, ActionType::MOVE,
               {ui::DomCode::NONE, ui::DomCode::NONE, ui::DomCode::NONE,
                ui::DomCode::NONE},
-              {u"", u"", u"", u""});
-  CheckActionName(u"Unassigned joystick", menu, nullptr);
+              {u"", u"", u"", u""}, u"Unassigned joystick");
 
   auto* label0 = GetEditLabel(menu, /*index=*/0);
   FocusOnLabel(label0);
   TapKeyboardKeyOnEditLabel(label0, ui::VKEY_A);
   EXPECT_TRUE(action->is_new());
-  CheckAction(ActionType::MOVE, menu,
+  CheckAction(action, ActionType::MOVE,
               {ui::DomCode::US_A, ui::DomCode::NONE, ui::DomCode::NONE,
                ui::DomCode::NONE},
-              {u"a", u"", u"", u""});
-  CheckActionName(u"Joystick a", menu, nullptr);
+              {u"a", u"", u"", u""}, u"Joystick a");
 
   auto* label1 = GetEditLabel(menu, /*index=*/1);
   FocusOnLabel(label1);
   TapKeyboardKeyOnEditLabel(label1, ui::VKEY_A);
   EXPECT_TRUE(action->is_new());
-  CheckAction(ActionType::MOVE, menu,
+  CheckAction(action, ActionType::MOVE,
               {ui::DomCode::NONE, ui::DomCode::US_A, ui::DomCode::NONE,
                ui::DomCode::NONE},
-              {u"", u"a", u"", u""});
-  CheckActionName(u"Joystick a", menu, nullptr);
+              {u"", u"a", u"", u""}, u"Joystick a");
 }
 
 }  // namespace arc::input_overlay
diff --git a/chrome/browser/ash/arc/input_overlay/ui/edit_labels.h b/chrome/browser/ash/arc/input_overlay/ui/edit_labels.h
index c32599a..eecb312e 100644
--- a/chrome/browser/ash/arc/input_overlay/ui/edit_labels.h
+++ b/chrome/browser/ash/arc/input_overlay/ui/edit_labels.h
@@ -71,6 +71,7 @@
  private:
   friend class ButtonOptionsMenuTest;
   friend class EditLabelTest;
+  friend class OverlayViewTestBase;
 
   void Init();
   void InitForActionTapKeyboard();
diff --git a/chrome/browser/ash/arc/input_overlay/ui/editing_list_unittest.cc b/chrome/browser/ash/arc/input_overlay/ui/editing_list_unittest.cc
index 8d0a3ef..f50cf4b 100644
--- a/chrome/browser/ash/arc/input_overlay/ui/editing_list_unittest.cc
+++ b/chrome/browser/ash/arc/input_overlay/ui/editing_list_unittest.cc
@@ -42,14 +42,6 @@
     return touch_injector_->actions().size();
   }
 
-  // Add a new action in the center of the main window.
-  void AddNewAction() {
-    PressAddButton();
-    auto* target_view = GetTargetView();
-    DCHECK(target_view);
-    LeftClickOn(target_view);
-  }
-
   void LeftClickAtActionViewListItem(int index) {
     if (!editing_list_ || index < 0) {
       return;
@@ -235,7 +227,7 @@
   CheckActions(touch_injector_, /*expect_size=*/3u, /*expect_types=*/
                {ActionType::TAP, ActionType::TAP, ActionType::MOVE},
                /*expect_ids=*/{0, 1, 2});
-  AddNewAction();
+  AddNewActionInCenter();
   EXPECT_TRUE(IsButtonOptionsMenuVisible());
   auto* action = GetButtonOptionsMenuAction();
   EXPECT_TRUE(action->is_new());
@@ -252,7 +244,7 @@
                {ActionType::TAP, ActionType::TAP, ActionType::MOVE},
                /*expect_ids=*/{0, 1, 2});
   // Test action view list press.
-  AddNewAction();
+  AddNewActionInCenter();
   EXPECT_TRUE(GetButtonOptionsMenu());
   auto* action_1 = GetButtonOptionsMenuAction();
   PressDoneButtonOnButtonOptionsMenu();
@@ -374,7 +366,7 @@
   }
 
   // Add the first action.
-  AddNewAction();
+  AddNewActionInCenter();
   PressDoneButtonOnButtonOptionsMenu();
   EXPECT_TRUE(IsKeyEditNudgeShown());
 
@@ -403,7 +395,7 @@
   EXPECT_FALSE(IsKeyEditNudgeShown());
 
   // No key edit nudge after adding another action.
-  AddNewAction();
+  AddNewActionInCenter();
   PressDoneButtonOnButtonOptionsMenu();
   EXPECT_FALSE(IsKeyEditNudgeShown());
 }
@@ -417,20 +409,20 @@
   EXPECT_LE(list_window->bounds().height(), window_content_height);
   EXPECT_FALSE(GetScrollBarVisible());
   // Add new actions until it shows scroll bar.
-  AddNewAction();
+  AddNewActionInCenter();
   PressDoneButtonOnButtonOptionsMenu();
   EXPECT_GT(list_window->bounds().height(), original_height);
-  AddNewAction();
+  AddNewActionInCenter();
   PressDoneButtonOnButtonOptionsMenu();
-  AddNewAction();
+  AddNewActionInCenter();
   PressDoneButtonOnButtonOptionsMenu();
   EXPECT_TRUE(GetScrollBarVisible());
   EXPECT_EQ(window_content_height, list_window->bounds().height());
-  AddNewAction();
+  AddNewActionInCenter();
   PressDoneButtonOnButtonOptionsMenu();
   EXPECT_TRUE(GetScrollBarVisible());
   EXPECT_EQ(window_content_height, list_window->bounds().height());
-  AddNewAction();
+  AddNewActionInCenter();
   PressDoneButtonOnButtonOptionsMenu();
   EXPECT_TRUE(GetScrollBarVisible());
   EXPECT_EQ(window_content_height, list_window->bounds().height());
diff --git a/chrome/browser/ash/arc/input_overlay/ui/name_tag.h b/chrome/browser/ash/arc/input_overlay/ui/name_tag.h
index 08e252c..9c68b7a9 100644
--- a/chrome/browser/ash/arc/input_overlay/ui/name_tag.h
+++ b/chrome/browser/ash/arc/input_overlay/ui/name_tag.h
@@ -55,6 +55,7 @@
 
  private:
   friend class EditLabelTest;
+  friend class OverlayViewTestBase;
 
   void Init();
   // Child labels are multi-lines. It needs to set fit width depending on
diff --git a/chrome/browser/ash/crosapi/crosapi_util.cc b/chrome/browser/ash/crosapi/crosapi_util.cc
index 161f4162..8f63ee5 100644
--- a/chrome/browser/ash/crosapi/crosapi_util.cc
+++ b/chrome/browser/ash/crosapi/crosapi_util.cc
@@ -698,6 +698,9 @@
 
   params->is_cros_shortstand_enabled =
       chromeos::features::IsCrosShortstandEnabled();
+
+  params->should_disable_chrome_compose_on_chromeos =
+      chromeos::features::ShouldDisableChromeComposeOnChromeOS();
 }
 
 template <typename BrowserParams>
diff --git a/chrome/browser/ash/crosapi/local_printer_ash.cc b/chrome/browser/ash/crosapi/local_printer_ash.cc
index eafd2ad..afbce9b 100644
--- a/chrome/browser/ash/crosapi/local_printer_ash.cc
+++ b/chrome/browser/ash/crosapi/local_printer_ash.cc
@@ -142,9 +142,7 @@
 
     // If the printer is autoconf compatible or has a valid PPD reference then
     // continue with normal setup.
-    if (printer.ppd_reference().autoconf ||
-        !printer.ppd_reference().effective_make_and_model.empty() ||
-        !printer.ppd_reference().user_supplied_ppd_url.empty()) {
+    if (printer.ppd_reference().IsFilled()) {
       SetUpPrinter(printers_manager, printer, std::move(callback));
       return;
     }
diff --git a/chrome/browser/ash/enhanced_network_tts/enhanced_network_tts_impl_unittest.cc b/chrome/browser/ash/enhanced_network_tts/enhanced_network_tts_impl_unittest.cc
index d049265..4f73438a 100644
--- a/chrome/browser/ash/enhanced_network_tts/enhanced_network_tts_impl_unittest.cc
+++ b/chrome/browser/ash/enhanced_network_tts/enhanced_network_tts_impl_unittest.cc
@@ -32,9 +32,7 @@
 class TestServerURLLoaderFactory {
  public:
   TestServerURLLoaderFactory()
-      : shared_loader_factory_(
-            base::MakeRefCounted<network::WeakWrapperSharedURLLoaderFactory>(
-                &loader_factory_)) {}
+      : shared_loader_factory_(loader_factory_.GetSafeWeakWrapper()) {}
   TestServerURLLoaderFactory(const TestServerURLLoaderFactory&) = delete;
   TestServerURLLoaderFactory& operator=(const TestServerURLLoaderFactory&) =
       delete;
diff --git a/chrome/browser/ash/fileapi/file_change_service.cc b/chrome/browser/ash/fileapi/file_change_service.cc
index 339a8fb6..79cd4905 100644
--- a/chrome/browser/ash/fileapi/file_change_service.cc
+++ b/chrome/browser/ash/fileapi/file_change_service.cc
@@ -3,10 +3,19 @@
 // found in the LICENSE file.
 
 #include "chrome/browser/ash/fileapi/file_change_service.h"
+#include "chrome/browser/file_system_access/chrome_file_system_access_permission_context.h"
+#include "chrome/browser/file_system_access/file_system_access_permission_context_factory.h"
+#include "chrome/browser/profiles/profile.h"
 
 namespace ash {
 
-FileChangeService::FileChangeService() = default;
+FileChangeService::FileChangeService(Profile* profile) {
+  file_created_from_show_save_file_picker_subscription_ =
+      FileSystemAccessPermissionContextFactory::GetForProfile(profile)
+          ->AddFileCreatedFromShowSaveFilePickerCallback(base::BindRepeating(
+              &FileChangeService::NotifyFileCreatedFromShowSaveFilePicker,
+              base::Unretained(this)));
+}
 
 FileChangeService::~FileChangeService() = default;
 
@@ -35,4 +44,13 @@
     observer.OnFileMoved(src, dst);
 }
 
+void FileChangeService::NotifyFileCreatedFromShowSaveFilePicker(
+    const GURL& file_picker_binding_context,
+    const storage::FileSystemURL& url) {
+  for (FileChangeServiceObserver& observer : observer_list_) {
+    observer.OnFileCreatedFromShowSaveFilePicker(file_picker_binding_context,
+                                                 url);
+  }
+}
+
 }  // namespace ash
diff --git a/chrome/browser/ash/fileapi/file_change_service.h b/chrome/browser/ash/fileapi/file_change_service.h
index c3a4bc5..de27771 100644
--- a/chrome/browser/ash/fileapi/file_change_service.h
+++ b/chrome/browser/ash/fileapi/file_change_service.h
@@ -5,10 +5,13 @@
 #ifndef CHROME_BROWSER_ASH_FILEAPI_FILE_CHANGE_SERVICE_H_
 #define CHROME_BROWSER_ASH_FILEAPI_FILE_CHANGE_SERVICE_H_
 
+#include "base/callback_list.h"
 #include "base/observer_list.h"
 #include "chrome/browser/ash/fileapi/file_change_service_observer.h"
 #include "components/keyed_service/core/keyed_service.h"
 
+class Profile;
+
 namespace ash {
 
 // A service which notifies observers of file change events from external file
@@ -16,7 +19,7 @@
 // changes across all file system contexts within a browser context.
 class FileChangeService : public KeyedService {
  public:
-  FileChangeService();
+  explicit FileChangeService(Profile* profile);
   FileChangeService(const FileChangeService& other) = delete;
   FileChangeService& operator=(const FileChangeService& other) = delete;
   ~FileChangeService() override;
@@ -36,7 +39,21 @@
   void NotifyFileMoved(const storage::FileSystemURL& src,
                        const storage::FileSystemURL& dst);
 
+  // Notifies the service that a file has been created at `url` in fulfillment
+  // of a `window.showSaveFilePicker()` request from the given
+  // `file_picker_binding_context`.
+  //
+  // See `content::FileSystemAccessEntryFactory::BindingContext`.
+  void NotifyFileCreatedFromShowSaveFilePicker(
+      const GURL& file_picker_binding_context,
+      const storage::FileSystemURL& url);
+
  private:
+  // Subscription to be notified of file creation events originating from
+  // `window.showSaveFilePicker()`.
+  base::CallbackListSubscription
+      file_created_from_show_save_file_picker_subscription_;
+
   base::ObserverList<FileChangeServiceObserver> observer_list_;
 };
 
diff --git a/chrome/browser/ash/fileapi/file_change_service_factory.cc b/chrome/browser/ash/fileapi/file_change_service_factory.cc
index 9565666..b61f8bd 100644
--- a/chrome/browser/ash/fileapi/file_change_service_factory.cc
+++ b/chrome/browser/ash/fileapi/file_change_service_factory.cc
@@ -6,6 +6,7 @@
 
 #include "base/no_destructor.h"
 #include "chrome/browser/ash/fileapi/file_change_service.h"
+#include "chrome/browser/file_system_access/file_system_access_permission_context_factory.h"
 #include "chrome/browser/profiles/profile.h"
 
 namespace ash {
@@ -30,7 +31,9 @@
           // sessions.
           ProfileSelections::Builder()
               .WithGuest(ProfileSelection::kOwnInstance)
-              .Build()) {}
+              .Build()) {
+  DependsOn(FileSystemAccessPermissionContextFactory::GetInstance());
+}
 
 FileChangeServiceFactory::~FileChangeServiceFactory() = default;
 
@@ -40,7 +43,7 @@
   Profile* const profile = Profile::FromBrowserContext(context);
   if (profile->IsOffTheRecord())
     CHECK(profile->IsGuestSession());
-  return std::make_unique<FileChangeService>();
+  return std::make_unique<FileChangeService>(profile);
 }
 
 }  // namespace ash
diff --git a/chrome/browser/ash/fileapi/file_change_service_observer.h b/chrome/browser/ash/fileapi/file_change_service_observer.h
index 6ec0a84..20fec04 100644
--- a/chrome/browser/ash/fileapi/file_change_service_observer.h
+++ b/chrome/browser/ash/fileapi/file_change_service_observer.h
@@ -7,6 +7,8 @@
 
 #include "base/observer_list_types.h"
 
+class GURL;
+
 namespace storage {
 class FileSystemURL;
 }  // namespace storage
@@ -27,6 +29,15 @@
   // Invoked when a file has been moved from `src` to `dst`.
   virtual void OnFileMoved(const storage::FileSystemURL& src,
                            const storage::FileSystemURL& dst) {}
+
+  // Invoked when a file has been created at `url` in fulfillment of a
+  // `window.showSaveFilePicker()` request from the given
+  // `file_picker_binding_context`.
+  //
+  // See `content::FileSystemAccessEntryFactory::BindingContext`.
+  virtual void OnFileCreatedFromShowSaveFilePicker(
+      const GURL& file_picker_binding_context,
+      const storage::FileSystemURL& url) {}
 };
 
 }  // namespace ash
diff --git a/chrome/browser/ash/fileapi/file_change_service_unittest.cc b/chrome/browser/ash/fileapi/file_change_service_unittest.cc
index b9573a7..83d3a25 100644
--- a/chrome/browser/ash/fileapi/file_change_service_unittest.cc
+++ b/chrome/browser/ash/fileapi/file_change_service_unittest.cc
@@ -16,6 +16,9 @@
 #include "chrome/browser/ash/fileapi/file_change_service_observer.h"
 #include "chrome/browser/ash/fileapi/file_system_backend.h"
 #include "chrome/browser/ash/login/users/fake_chrome_user_manager.h"
+#include "chrome/browser/file_system_access/chrome_file_system_access_permission_context.h"
+#include "chrome/browser/file_system_access/file_system_access_permission_context_factory.h"
+#include "chrome/browser/profiles/profile.h"
 #include "chrome/test/base/browser_with_test_window_test.h"
 #include "chrome/test/base/testing_profile_manager.h"
 #include "components/user_manager/scoped_user_manager.h"
@@ -26,10 +29,12 @@
 #include "storage/browser/file_system/external_mount_points.h"
 #include "storage/browser/file_system/file_system_context.h"
 #include "storage/browser/file_system/file_system_operation_runner.h"
+#include "storage/browser/file_system/file_system_url.h"
 #include "storage/browser/test/async_file_test_helper.h"
 #include "storage/browser/test/mock_blob_util.h"
 #include "testing/gmock/include/gmock/gmock.h"
 #include "third_party/blink/public/common/storage_key/storage_key.h"
+#include "url/gurl.h"
 #include "url/origin.h"
 
 namespace ash {
@@ -85,6 +90,11 @@
               (const storage::FileSystemURL& src,
                const storage::FileSystemURL& dst),
               (override));
+  MOCK_METHOD(void,
+              OnFileCreatedFromShowSaveFilePicker,
+              (const GURL& file_picker_binding_context,
+               const storage::FileSystemURL& url),
+              (override));
 };
 
 // TempFileSystem --------------------------------------------------------------
@@ -330,7 +340,7 @@
   ASSERT_NE(otr_guest_profile_service, guest_profile_service);
 }
 
-// Verifies `OnFileCopied` events are propagated to observers.
+// Verifies `OnFileCopied()` events are propagated to observers.
 TEST_F(FileChangeServiceTest, PropagatesOnFileCopiedEvents) {
   auto* profile = GetProfile();
   auto* service = FileChangeServiceFactory::GetInstance()->GetService(profile);
@@ -406,7 +416,7 @@
   }
 }
 
-// Verifies `OnFileMoved` events are propagated to observers.
+// Verifies `OnFileMoved()` events are propagated to observers.
 TEST_F(FileChangeServiceTest, PropagatesOnFileMovedEvents) {
   auto* profile = GetProfile();
   auto* service = FileChangeServiceFactory::GetInstance()->GetService(profile);
@@ -469,7 +479,7 @@
   }
 }
 
-// Verifies `OnFileModified` events are propagated to observers.
+// Verifies `OnFileModified()` events are propagated to observers.
 TEST_F(FileChangeServiceTest, PropagatesOnFileModifiedEvents) {
   auto* profile = GetProfile();
   auto* service = FileChangeServiceFactory::GetInstance()->GetService(profile);
@@ -536,4 +546,28 @@
   }
 }
 
+// Verifies `OnFileCreatedFromShowSaveFilePicker()` events are propagated to
+// observers.
+TEST_F(FileChangeServiceTest,
+       PropagatesOnFileCreatedFromShowSaveFilePickerEvents) {
+  auto* profile = GetProfile();
+  auto* service = FileChangeServiceFactory::GetInstance()->GetService(profile);
+  ASSERT_TRUE(service);
+
+  testing::NiceMock<MockFileChangeServiceObserver> mock_observer;
+  base::ScopedObservation<FileChangeService, FileChangeServiceObserver>
+      scoped_observation(&mock_observer);
+  scoped_observation.Observe(service);
+
+  const GURL file_picker_binding_context;
+  const storage::FileSystemURL url;
+
+  EXPECT_CALL(mock_observer, OnFileCreatedFromShowSaveFilePicker(
+                                 testing::Ref(file_picker_binding_context),
+                                 testing::Ref(url)));
+
+  FileSystemAccessPermissionContextFactory::GetForProfile(profile)
+      ->OnFileCreatedFromShowSaveFilePicker(file_picker_binding_context, url);
+}
+
 }  // namespace ash
diff --git a/chrome/browser/ash/http_auth_dialog.cc b/chrome/browser/ash/http_auth_dialog.cc
new file mode 100644
index 0000000..d393b547
--- /dev/null
+++ b/chrome/browser/ash/http_auth_dialog.cc
@@ -0,0 +1,354 @@
+// Copyright 2023 The Chromium Authors
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "chrome/browser/ash/http_auth_dialog.h"
+
+#include <vector>
+
+#include "base/no_destructor.h"
+#include "base/observer_list.h"
+#include "base/task/sequenced_task_runner.h"
+#include "components/constrained_window/constrained_window_views.h"
+#include "components/strings/grit/components_strings.h"
+#include "components/url_formatter/elide_url.h"
+#include "content/public/browser/browser_thread.h"
+#include "services/network/public/cpp/is_potentially_trustworthy.h"
+#include "ui/base/l10n/l10n_util.h"
+#include "ui/views/layout/box_layout_view.h"
+#include "ui/views/layout/layout_provider.h"
+#include "ui/views/layout/table_layout_view.h"
+
+namespace ash {
+
+namespace {
+
+// This dialog is used in place of the browser http auth dialog when
+// `g_enable_count` >= 1. Once Lacros ships, this feature can be enabled always.
+static int g_enable_count = 0;
+
+// The distance between vertical controls.
+constexpr int kDistanceControlListVertical = 12;
+
+// All HttpAuthDialogs should be tracked in this global singleton for testing.
+using HttpAuthDialogVector = std::vector<HttpAuthDialog*>;
+HttpAuthDialogVector& GetAllDialogs() {
+  static base::NoDestructor<HttpAuthDialogVector> instance;
+  return *instance;
+}
+
+// All observers should be tracked in this global singleton.
+using Observers = base::ObserverList<HttpAuthDialog::Observer>;
+Observers& GetObservers() {
+  static base::NoDestructor<Observers> instance;
+  return *instance;
+}
+
+// Computes `authority` and `explanation`.
+void GetDialogStrings(const GURL& request_url,
+                      const net::AuthChallengeInfo& auth_info,
+                      std::u16string* authority,
+                      std::u16string* explanation) {
+  GURL authority_url;
+
+  if (auth_info.is_proxy) {
+    *authority = l10n_util::GetStringFUTF16(
+        IDS_LOGIN_DIALOG_PROXY_AUTHORITY,
+        url_formatter::FormatUrlForSecurityDisplay(
+            auth_info.challenger.GetURL(), url_formatter::SchemeDisplay::SHOW));
+    authority_url = auth_info.challenger.GetURL();
+  } else {
+    *authority = url_formatter::FormatUrlForSecurityDisplay(request_url);
+    authority_url = request_url;
+  }
+
+  if (!network::IsUrlPotentiallyTrustworthy(authority_url)) {
+    *explanation = l10n_util::GetStringUTF16(IDS_LOGIN_DIALOG_NOT_PRIVATE);
+  } else {
+    explanation->clear();
+  }
+}
+
+}  // namespace
+
+HttpAuthDialog::~HttpAuthDialog() {
+  // Book-keeping for test-only data-structures.
+  auto& dialogs = GetAllDialogs();
+  auto it = std::find(dialogs.begin(), dialogs.end(), this);
+  DCHECK(it != dialogs.end());
+  dialogs.erase(it);
+
+  // The widget will be destroyed soon, so we must first clear raw_ptrs owned by
+  // the widget.
+  dialog_view_ = nullptr;
+}
+
+HttpAuthDialog::ScopedEnabler::ScopedEnabler() {
+  DCHECK_CURRENTLY_ON(content::BrowserThread::UI);
+  ++g_enable_count;
+}
+
+HttpAuthDialog::ScopedEnabler::~ScopedEnabler() {
+  DCHECK_CURRENTLY_ON(content::BrowserThread::UI);
+  --g_enable_count;
+}
+
+std::unique_ptr<HttpAuthDialog::ScopedEnabler> HttpAuthDialog::Enable() {
+  return std::make_unique<ScopedEnabler>();
+}
+
+// static
+bool HttpAuthDialog::IsEnabled() {
+  DCHECK_CURRENTLY_ON(content::BrowserThread::UI);
+  return g_enable_count >= 1;
+}
+
+// static
+std::unique_ptr<HttpAuthDialog> HttpAuthDialog::Create(
+    const net::AuthChallengeInfo& auth_info,
+    content::WebContents* web_contents,
+    const GURL& url,
+    LoginAuthRequiredCallback auth_required_callback) {
+  // This class cannot handle UI-less auth dialog requests. Once Lacros ships,
+  // this should no longer be possible and this can become a CHECK.
+  if (!web_contents) {
+    return nullptr;
+  }
+
+  // The constructor is private. There is no portable way to expose the
+  // constructor to std::make_unique.
+  return base::WrapUnique(new HttpAuthDialog(
+      auth_info, web_contents, url, std::move(auth_required_callback)));
+}
+
+// static
+void HttpAuthDialog::AddObserver(Observer* observer) {
+  GetObservers().AddObserver(observer);
+}
+
+// static
+void HttpAuthDialog::RemoveObserver(Observer* observer) {
+  GetObservers().RemoveObserver(observer);
+}
+
+// static
+std::vector<HttpAuthDialog*> HttpAuthDialog::GetAllDialogsForTest() {
+  return GetAllDialogs();
+}
+
+void HttpAuthDialog::SupplyCredentials(std::u16string_view username,
+                                       std::u16string_view password) {
+  std::u16string username_string(username);
+  std::u16string password_string(password);
+  net::AuthCredentials credentials(username_string, password_string);
+  CHECK(!callback_.is_null());
+  NotifySuppliedAsync(web_contents_);
+
+  // Running `callback_` can result in synchronous destruction of this object.
+  // We dispatch the call to avoid re-entrancy, as this method itself can be
+  // synchronously invoked as a callback.
+  auto run_callback = base::BindOnce(
+      [](base::WeakPtr<HttpAuthDialog> dialog,
+         LoginAuthRequiredCallback callback, net::AuthCredentials credentials) {
+        if (dialog) {
+          std::move(callback).Run(std::move(credentials));
+        }
+      },
+      weak_factory_.GetWeakPtr(), std::move(callback_), std::move(credentials));
+  base::SequencedTaskRunner::GetCurrentDefault()->PostTask(
+      FROM_HERE, std::move(run_callback));
+}
+
+void HttpAuthDialog::Cancel() {
+  NotifyCancelledAsync(web_contents_);
+
+  // Running `callback_` can result in synchronous destruction of this object.
+  // We dispatch the call to avoid re-entrancy, as this method itself can be
+  // synchronously invoked as a callback.
+  auto run_callback = base::BindOnce(
+      [](base::WeakPtr<HttpAuthDialog> dialog,
+         LoginAuthRequiredCallback callback) {
+        if (dialog) {
+          std::move(callback).Run(absl::nullopt);
+        }
+      },
+      weak_factory_.GetWeakPtr(), std::move(callback_));
+  base::SequencedTaskRunner::GetCurrentDefault()->PostTask(
+      FROM_HERE, std::move(run_callback));
+}
+
+HttpAuthDialog::DialogView::DialogView(std::u16string_view authority,
+                                       std::u16string_view explanation) {
+  std::u16string authority_string(authority);
+  std::u16string explanation_string(explanation);
+  views::LayoutProvider* provider = views::LayoutProvider::Get();
+  SetLayoutManager(std::make_unique<views::BoxLayout>(
+      views::BoxLayout::Orientation::kVertical,
+      provider->GetDialogInsetsForContentType(
+          views::DialogContentType::kText, views::DialogContentType::kControl),
+      provider->GetDistanceMetric(views::DISTANCE_UNRELATED_CONTROL_VERTICAL)));
+
+  auto* authority_container =
+      AddChildView(std::make_unique<views::BoxLayoutView>());
+  authority_container->SetOrientation(views::BoxLayout::Orientation::kVertical);
+  auto* authority_label =
+      authority_container->AddChildView(std::make_unique<views::Label>(
+          authority_string, views::style::CONTEXT_LABEL,
+          views::style::STYLE_PRIMARY));
+  authority_label->SetMultiLine(true);
+  constexpr int kMessageWidth = 320;
+  authority_label->SetMaximumWidth(kMessageWidth);
+  authority_label->SetHorizontalAlignment(gfx::ALIGN_LEFT);
+  authority_label->SetAllowCharacterBreak(true);
+  if (!explanation_string.empty()) {
+    auto* explanation_label =
+        authority_container->AddChildView(std::make_unique<views::Label>(
+            explanation_string, views::style::CONTEXT_LABEL,
+            views::style::STYLE_SECONDARY));
+    explanation_label->SetMultiLine(true);
+    explanation_label->SetMaximumWidth(kMessageWidth);
+    explanation_label->SetHorizontalAlignment(gfx::ALIGN_LEFT);
+  }
+
+  auto* fields_container =
+      AddChildView(std::make_unique<views::TableLayoutView>());
+  fields_container
+      ->AddColumn(views::LayoutAlignment::kStart,
+                  views::LayoutAlignment::kCenter,
+                  views::TableLayout::kFixedSize,
+                  views::TableLayout::ColumnSize::kUsePreferred, 0, 0)
+      .AddPaddingColumn(
+          views::TableLayout::kFixedSize,
+          provider->GetDistanceMetric(views::DISTANCE_RELATED_LABEL_HORIZONTAL))
+      .AddColumn(views::LayoutAlignment::kStretch,
+                 views::LayoutAlignment::kStretch, 1.0,
+                 views::TableLayout::ColumnSize::kFixed, 0, 0)
+      .AddRows(1, views::TableLayout::kFixedSize)
+      .AddPaddingRow(views::TableLayout::kFixedSize,
+                     kDistanceControlListVertical)
+      .AddRows(1, views::TableLayout::kFixedSize);
+  auto* username_label =
+      fields_container->AddChildView(std::make_unique<views::Label>(
+          l10n_util::GetStringUTF16(IDS_LOGIN_DIALOG_USERNAME_FIELD),
+          views::style::CONTEXT_LABEL, views::style::STYLE_PRIMARY));
+  username_field_ =
+      fields_container->AddChildView(std::make_unique<views::Textfield>());
+  username_field_->SetAccessibleName(username_label);
+  auto* password_label =
+      fields_container->AddChildView(std::make_unique<views::Label>(
+          l10n_util::GetStringUTF16(IDS_LOGIN_DIALOG_PASSWORD_FIELD),
+          views::style::CONTEXT_LABEL, views::style::STYLE_PRIMARY));
+  password_field_ =
+      fields_container->AddChildView(std::make_unique<views::Textfield>());
+  password_field_->SetAccessibleName(password_label);
+  password_field_->SetTextInputType(ui::TEXT_INPUT_TYPE_PASSWORD);
+}
+
+HttpAuthDialog::DialogView::~DialogView() = default;
+
+// Access the data in the username/password text fields.
+std::u16string HttpAuthDialog::DialogView::GetUsername() const {
+  return username_field_->GetText();
+}
+
+std::u16string HttpAuthDialog::DialogView::GetPassword() const {
+  return password_field_->GetText();
+}
+
+views::View* HttpAuthDialog::DialogView::GetInitiallyFocusedView() {
+  return username_field_;
+}
+
+HttpAuthDialog::HttpAuthDialog(const net::AuthChallengeInfo& auth_info,
+                               content::WebContents* web_contents,
+                               const GURL& url,
+                               LoginAuthRequiredCallback auth_required_callback)
+    : callback_(std::move(auth_required_callback)),
+      web_contents_(web_contents) {
+  CHECK(!callback_.is_null());
+  GetAllDialogs().push_back(this);
+
+  dialog_delegate_.SetButtonLabel(
+      ui::DIALOG_BUTTON_OK,
+      l10n_util::GetStringUTF16(IDS_LOGIN_DIALOG_OK_BUTTON_LABEL));
+
+  dialog_delegate_.SetAcceptCallback(base::BindOnce(
+      [](base::WeakPtr<HttpAuthDialog> dialog) {
+        if (!dialog) {
+          return;
+        }
+
+        dialog->SupplyCredentials(dialog->dialog_view_->GetUsername(),
+                                  dialog->dialog_view_->GetPassword());
+      },
+      weak_factory_.GetWeakPtr()));
+
+  auto close_callback =
+      base::BindOnce(&HttpAuthDialog::Cancel, weak_factory_.GetWeakPtr());
+
+  // WindowClosing callback is guaranteed to be called regardless of whether the
+  // dialog is closed by the user or the OS.
+  dialog_delegate_.RegisterWindowClosingCallback(std::move(close_callback));
+  dialog_delegate_.SetWidgetOwnsNativeWidget();
+
+  dialog_delegate_.SetModalType(ui::MODAL_TYPE_CHILD);
+  dialog_delegate_.SetShowCloseButton(false);
+  dialog_delegate_.SetTitle(l10n_util::GetStringUTF16(IDS_LOGIN_DIALOG_TITLE));
+
+  std::u16string authority;
+  std::u16string explanation;
+  GetDialogStrings(url, auth_info, &authority, &explanation);
+  dialog_view_ = dialog_delegate_.SetContentsView(
+      std::make_unique<DialogView>(authority, explanation));
+  dialog_delegate_.SetInitiallyFocusedView(
+      dialog_view_->GetInitiallyFocusedView());
+
+  dialog_widget_ = constrained_window::ShowWebModalDialogViewsOwned(
+      &dialog_delegate_, web_contents);
+
+  NotifyShownAsync(web_contents_);
+}
+
+// static
+void HttpAuthDialog::NotifyShownAsync(content::WebContents* web_contents) {
+  auto callback = base::BindOnce(
+      [](base::WeakPtr<content::WebContents> web_contents) {
+        for (auto& observer : GetObservers()) {
+          observer.HttpAuthDialogShown(web_contents ? web_contents.get()
+                                                    : nullptr);
+        }
+      },
+      web_contents->GetWeakPtr());
+  base::SequencedTaskRunner::GetCurrentDefault()->PostTask(FROM_HERE,
+                                                           std::move(callback));
+}
+
+//  static
+void HttpAuthDialog::NotifySuppliedAsync(content::WebContents* web_contents) {
+  auto callback = base::BindOnce(
+      [](base::WeakPtr<content::WebContents> web_contents) {
+        for (auto& observer : GetObservers()) {
+          observer.HttpAuthDialogSupplied(web_contents ? web_contents.get()
+                                                       : nullptr);
+        }
+      },
+      web_contents->GetWeakPtr());
+  base::SequencedTaskRunner::GetCurrentDefault()->PostTask(FROM_HERE,
+                                                           std::move(callback));
+}
+
+//  static
+void HttpAuthDialog::NotifyCancelledAsync(content::WebContents* web_contents) {
+  auto callback = base::BindOnce(
+      [](base::WeakPtr<content::WebContents> web_contents) {
+        for (auto& observer : GetObservers()) {
+          observer.HttpAuthDialogCancelled(web_contents ? web_contents.get()
+                                                        : nullptr);
+        }
+      },
+      web_contents->GetWeakPtr());
+  base::SequencedTaskRunner::GetCurrentDefault()->PostTask(FROM_HERE,
+                                                           std::move(callback));
+}
+
+}  // namespace ash
diff --git a/chrome/browser/ash/http_auth_dialog.h b/chrome/browser/ash/http_auth_dialog.h
new file mode 100644
index 0000000..afec36fa
--- /dev/null
+++ b/chrome/browser/ash/http_auth_dialog.h
@@ -0,0 +1,149 @@
+// Copyright 2023 The Chromium Authors
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef CHROME_BROWSER_ASH_HTTP_AUTH_DIALOG_H_
+#define CHROME_BROWSER_ASH_HTTP_AUTH_DIALOG_H_
+
+#include "base/memory/weak_ptr.h"
+#include "base/observer_list.h"
+#include "content/public/browser/login_delegate.h"
+#include "content/public/browser/web_contents.h"
+#include "ui/views/controls/textfield/textfield.h"
+#include "ui/views/widget/widget.h"
+#include "ui/views/window/dialog_delegate.h"
+
+namespace ash {
+
+// HTTP authentication is a feature that gates network resources behind a
+// plaintext username/password ACL. This is typically implemented by
+// web-browsers by showing a dialog to users part-way through a navigation with
+// username/password textfields.
+// https://developer.mozilla.org/en-US/docs/Web/HTTP/Authentication
+//
+// There are some pieces of UI in ash-chrome unrelated to web-browsing that
+// expect fine grained control over the dialog that is shown. This class
+// provides a mechanism to do so.
+
+class HttpAuthDialog : public content::LoginDelegate {
+ public:
+  // There are two ways for this class to be deleted.
+  // (1) The //content layer can decide the class is no longer necessary, in
+  // which case the destructor will be directly invoked. In this case, clear
+  // `callback_` and close the widget.
+  // (2) The widget can be closed by the user. In this case, invoke the
+  // `callback_`. This will cause (1) to trigger.
+  ~HttpAuthDialog() override;
+
+  class ScopedEnabler {
+   public:
+    ScopedEnabler();
+    ~ScopedEnabler();
+    ScopedEnabler(const ScopedEnabler&) = delete;
+    ScopedEnabler& operator=(const ScopedEnabler&) = delete;
+  };
+  // Prior to shipping Lacros, ash-chrome needs to handle both browser-based
+  // http-auth dialogs, and OS-based http-auth dialogs. Classes that need the
+  // latter should call this method and keep the returned ScopedEnabler alive.
+  // This forces the latter use-case.
+  // After shipping Lacros, this method will be unnecessary as the OS-based
+  // http-auth dialog will be the only remaining use case.
+  static std::unique_ptr<ScopedEnabler> Enable();
+  static bool IsEnabled();
+
+  static std::unique_ptr<HttpAuthDialog> Create(
+      const net::AuthChallengeInfo& auth_info,
+      content::WebContents* web_contents,
+      const GURL& url,
+      LoginAuthRequiredCallback auth_required_callback);
+
+  class Observer : public base::CheckedObserver {
+   public:
+    // Called when the dialog is shown.
+    virtual void HttpAuthDialogShown(content::WebContents* web_contents) = 0;
+
+    // Called when the dialog is cancelled. This can happen if the user presses
+    // the "cancel" button, or if the network request is cancelled.
+    virtual void HttpAuthDialogCancelled(
+        content::WebContents* web_contents) = 0;
+
+    // Called when the user presses the "continue" button. There is no guarantee
+    // that the username/password are valid.
+    virtual void HttpAuthDialogSupplied(content::WebContents* web_contents) = 0;
+  };
+
+  static void AddObserver(Observer* observer);
+  static void RemoveObserver(Observer* observer);
+
+  // Exposed for testing.
+  static std::vector<HttpAuthDialog*> GetAllDialogsForTest();
+
+  // Exposed for testing.
+  // In the production use-case, this method is called by views when the user
+  // clicks the OK button. The dialog is in the process of closing. This method
+  // merely needs to invoke `callback_`.
+  // When this method is called from tests, the dialog is not in the process of
+  // closing. Calling this method will invoke `callback_`, which will result in
+  // destruction of this object, which will close the dialog.
+  void SupplyCredentials(std::u16string_view username,
+                         std::u16string_view password);
+
+  // Exposed for testing.
+  // Similar to `SupplyCredentials` except this is the path for clicking the
+  // cancel button or otherwise dismissing the dialog.
+  void Cancel();
+
+ private:
+  // A basic view with username/password text fields.
+  class DialogView : public views::View {
+   public:
+    DialogView(std::u16string_view authority, std::u16string_view explanation);
+    ~DialogView() override;
+
+    // Intentionally return by copy so that the return value can be used even if
+    // DialogView is destroyed.
+    std::u16string GetUsername() const;
+    std::u16string GetPassword() const;
+
+    views::View* GetInitiallyFocusedView();
+
+   private:
+    // Non-owning refs to the input text fields.
+    raw_ptr<views::Textfield> username_field_;
+    raw_ptr<views::Textfield> password_field_;
+  };
+
+  // The constructor creates and shows a dialog.
+  HttpAuthDialog(const net::AuthChallengeInfo& auth_info,
+                 content::WebContents* web_contents,
+                 const GURL& url,
+                 LoginAuthRequiredCallback auth_required_callback);
+
+  static void NotifyShownAsync(content::WebContents* web_contents);
+  static void NotifySuppliedAsync(content::WebContents* web_contents);
+  static void NotifyCancelledAsync(content::WebContents* web_contents);
+
+  net::AuthChallengeInfo auth_info_;
+
+  // This class is owned by the //content layer. The only way to delete this
+  // class is to invoke this callback.
+  LoginAuthRequiredCallback callback_;
+
+  // Handles configuration and callbacks from the dialog.
+  views::DialogDelegate dialog_delegate_;
+
+  // `dialog_view_` is owned by the views framework. The dialog is showing if
+  // and only if these members are not `nullptr`. dialog_widget_ is created in
+  // the constructor and destroyed in the destructor, so this means that the
+  // lifetime of the dialog corresponds exactly to the lifetime of this class.
+  raw_ptr<DialogView> dialog_view_ = nullptr;
+  std::unique_ptr<views::Widget> dialog_widget_;
+
+  // Tracks the WebContents instance that is showing the dialog.
+  raw_ptr<content::WebContents> web_contents_ = nullptr;
+  base::WeakPtrFactory<HttpAuthDialog> weak_factory_{this};
+};
+
+}  // namespace ash
+
+#endif  // CHROME_BROWSER_ASH_HTTP_AUTH_DIALOG_H_
diff --git a/chrome/browser/ash/input_method/editor_switch.cc b/chrome/browser/ash/input_method/editor_switch.cc
index 886b9398..bec833d 100644
--- a/chrome/browser/ash/input_method/editor_switch.cc
+++ b/chrome/browser/ash/input_method/editor_switch.cc
@@ -153,7 +153,8 @@
   auto* profile_policy_connector = profile_->GetProfilePolicyConnector();
 
   return (base::FeatureList::IsEnabled(chromeos::features::kOrca) &&
-          base::FeatureList::IsEnabled(features::kFeatureManagementOrca) &&
+          base::FeatureList::IsEnabled(
+              chromeos::features::kFeatureManagementOrca) &&
           IsCountryAllowed(country_code_)) &&
          (profile_policy_connector == nullptr ||
           !profile_policy_connector->IsManaged());
diff --git a/chrome/browser/ash/input_method/editor_switch_unittest.cc b/chrome/browser/ash/input_method/editor_switch_unittest.cc
index d1e02af..c892960 100644
--- a/chrome/browser/ash/input_method/editor_switch_unittest.cc
+++ b/chrome/browser/ash/input_method/editor_switch_unittest.cc
@@ -104,21 +104,21 @@
          .expected_availability = false},
         {.test_name = "FeatureNotAvailableForManagedAccountOnNonDogfoodDevices",
          .enabled_flags = {chromeos::features::kOrca,
-                           features::kFeatureManagementOrca},
+                           chromeos::features::kFeatureManagementOrca},
          .disabled_flags = {},
          .country_code = kAllowedTestCountry,
          .is_managed = true,
          .expected_availability = false},
         {.test_name = "FeatureNotAvailableInACountryNotApprovedYet",
          .enabled_flags = {chromeos::features::kOrca,
-                           features::kFeatureManagementOrca},
+                           chromeos::features::kFeatureManagementOrca},
          .disabled_flags = {},
          .country_code = kDeniedTestCountry,
          .is_managed = false,
          .expected_availability = false},
         {.test_name = "FeatureNotAvailableWithoutFeatureManagementFlag",
          .enabled_flags = {chromeos::features::kOrca},
-         .disabled_flags = {features::kFeatureManagementOrca},
+         .disabled_flags = {chromeos::features::kFeatureManagementOrca},
          .country_code = kAllowedTestCountry,
          .is_managed = false,
          .expected_availability = false},
@@ -131,7 +131,7 @@
         {.test_name = "FeatureAvailableOnUnmanagedDeviceInApprovedCountryWithFe"
                       "atureManagementFlag",
          .enabled_flags = {chromeos::features::kOrca,
-                           features::kFeatureManagementOrca},
+                           chromeos::features::kFeatureManagementOrca},
          .disabled_flags = {},
          .country_code = kAllowedTestCountry,
          .is_managed = false,
@@ -397,7 +397,7 @@
   content::BrowserTaskEnvironment task_environment;
   base::test::ScopedFeatureList feature_list;
   std::vector<base::test::FeatureRef> base_enabled_features = {
-      chromeos::features::kOrca, features::kFeatureManagementOrca};
+      chromeos::features::kOrca, chromeos::features::kFeatureManagementOrca};
   base_enabled_features.insert(base_enabled_features.end(),
                                test_case.additional_enabled_flags.begin(),
                                test_case.additional_enabled_flags.end());
diff --git a/chrome/browser/ash/login/auth/chrome_login_performer.cc b/chrome/browser/ash/login/auth/chrome_login_performer.cc
index 24b51e6..db67b05 100644
--- a/chrome/browser/ash/login/auth/chrome_login_performer.cc
+++ b/chrome/browser/ash/login/auth/chrome_login_performer.cc
@@ -143,9 +143,11 @@
   CHECK(success);
   early_prefs_dir = early_prefs_dir.Append(context->GetUserIDHash());
 
+  // Use TaskPriority::HIGHEST as this operation blocks
+  // user login flow.
   early_prefs_reader_ = std::make_unique<EarlyPrefsReader>(
       early_prefs_dir, base::ThreadPool::CreateSequencedTaskRunner(
-                           {base::MayBlock(), base::TaskPriority::USER_VISIBLE,
+                           {base::MayBlock(), base::TaskPriority::HIGHEST,
                             base::TaskShutdownBehavior::BLOCK_SHUTDOWN}));
   early_prefs_reader_->ReadFile(base::BindOnce(
       &ChromeLoginPerformer::OnEarlyPrefsRead, weak_factory_.GetWeakPtr(),
diff --git a/chrome/browser/ash/login/auth_flows_login_ui_test.cc b/chrome/browser/ash/login/auth_flows_login_ui_test.cc
new file mode 100644
index 0000000..9dda1a1
--- /dev/null
+++ b/chrome/browser/ash/login/auth_flows_login_ui_test.cc
@@ -0,0 +1,122 @@
+// Copyright 2023 The Chromium Authors
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include <memory>
+#include <optional>
+#include <string>
+#include <utility>
+
+#include "ash/public/cpp/login_screen_test_api.h"
+#include "base/auto_reset.h"
+#include "chrome/browser/ash/login/login_manager_test.h"
+#include "chrome/browser/ash/login/test/auth_ui_utils.h"
+#include "chrome/browser/ash/login/test/cryptohome_mixin.h"
+#include "chrome/browser/ash/login/test/login_manager_mixin.h"
+#include "chrome/browser/ash/login/test/user_auth_config.h"
+#include "chrome/browser/ash/login/wizard_context.h"
+#include "chrome/test/base/fake_gaia_mixin.h"
+#include "chromeos/ash/components/osauth/public/common_types.h"
+#include "content/public/test/browser_test.h"
+
+namespace ash {
+
+using test::UserAuthConfig;
+
+// Base class for UI testing of various authentication that can
+// take place at the login screen.
+class AuthFlowsLoginTestBase : public LoginManagerTest {
+ public:
+  explicit AuthFlowsLoginTestBase(bool require_reauth)
+      : with_gaia_pw_{LoginManagerMixin::CreateConsumerAccountId(1),
+                      UserAuthConfig::Create({AshAuthFactor::kGaiaPassword})
+                          .RequireReauth(require_reauth)},
+        with_gaia_pw_recovery_{
+            LoginManagerMixin::CreateConsumerAccountId(2),
+            UserAuthConfig::Create(
+                {AshAuthFactor::kGaiaPassword, AshAuthFactor::kRecovery})
+                .RequireReauth(require_reauth)},
+        with_local_pw_{LoginManagerMixin::CreateConsumerAccountId(3),
+                       UserAuthConfig::Create({AshAuthFactor::kLocalPassword})
+                           .RequireReauth(require_reauth)},
+        with_local_pw_recovery_{
+            LoginManagerMixin::CreateConsumerAccountId(4),
+            UserAuthConfig::Create(
+                {AshAuthFactor::kLocalPassword, AshAuthFactor::kRecovery})
+                .RequireReauth(require_reauth)},
+        login_mixin_{&mixin_host_,
+                     {with_gaia_pw_, with_gaia_pw_recovery_, with_local_pw_,
+                      with_local_pw_recovery_},
+                     &fake_gaia_,
+                     &cryptohome_}
+
+  {}
+  ~AuthFlowsLoginTestBase() override = default;
+
+  void SetUpOnMainThread() override {
+    // Make `FakeUserDataAuthClient` perform actual password checks when
+    // handling authentication requests.
+    FakeUserDataAuthClient::TestApi::Get()->set_enable_auth_check(true);
+    LoginManagerTest::SetUpOnMainThread();
+  }
+
+  void ConfigureFakeGaiaFor(const LoginManagerMixin::TestUserInfo& user) {
+    fake_gaia_.SetupFakeGaiaForLogin(user.account_id.GetUserEmail(),
+                                     user.account_id.GetGaiaId(),
+                                     FakeGaiaMixin::kFakeRefreshToken);
+  }
+
+ protected:
+  const LoginManagerMixin::TestUserInfo with_gaia_pw_;
+  const LoginManagerMixin::TestUserInfo with_gaia_pw_recovery_;
+  const LoginManagerMixin::TestUserInfo with_local_pw_;
+  const LoginManagerMixin::TestUserInfo with_local_pw_recovery_;
+
+  CryptohomeMixin cryptohome_{&mixin_host_};
+  FakeGaiaMixin fake_gaia_{&mixin_host_};
+  base::AutoReset<bool> branded_build{&WizardContext::g_is_branded_build, true};
+  LoginManagerMixin login_mixin_;
+};
+
+class AuthFlowsLoginReauthTest : public AuthFlowsLoginTestBase {
+ public:
+  AuthFlowsLoginReauthTest()
+      : AuthFlowsLoginTestBase(/* require_reauth */ true) {}
+  ~AuthFlowsLoginReauthTest() override = default;
+};
+
+IN_PROC_BROWSER_TEST_F(AuthFlowsLoginReauthTest, GaiaPasswordNotChanged) {
+  ConfigureFakeGaiaFor(with_gaia_pw_);
+
+  test::OnLoginScreen()->SelectUserPod(with_gaia_pw_.account_id);
+  auto gaia = test::AwaitGaiaSigninUI();
+
+  gaia->ReauthConfirmEmail(with_gaia_pw_.account_id);
+  gaia->TypePassword(test::kGaiaPassword);
+  gaia->ContinueLogin();
+
+  login_mixin_.WaitForActiveSession();
+}
+
+IN_PROC_BROWSER_TEST_F(AuthFlowsLoginReauthTest, GaiaPasswordChangedManual) {
+  ConfigureFakeGaiaFor(with_gaia_pw_);
+
+  test::OnLoginScreen()->SelectUserPod(with_gaia_pw_.account_id);
+  auto gaia = test::AwaitGaiaSigninUI();
+
+  gaia->ReauthConfirmEmail(with_gaia_pw_.account_id);
+  gaia->TypePassword(test::kNewPassword);
+  gaia->ContinueLogin();
+
+  auto pw_changed = test::AwaitPasswordChangedUI();
+  pw_changed->TypePreviousPassword(test::kGaiaPassword);
+  pw_changed->SubmitPreviousPassword();
+
+  auto pw_updated = test::AwaitPasswordUpdatedUI();
+  pw_updated->ExpectPasswordUpdateState();
+  pw_updated->ConfirmPasswordUpdate();
+
+  login_mixin_.WaitForActiveSession();
+}
+
+}  // namespace ash
diff --git a/chrome/browser/ash/login/test/auth_ui_utils.cc b/chrome/browser/ash/login/test/auth_ui_utils.cc
index 7410806..e5ddf92 100644
--- a/chrome/browser/ash/login/test/auth_ui_utils.cc
+++ b/chrome/browser/ash/login/test/auth_ui_utils.cc
@@ -5,52 +5,70 @@
 #include "chrome/browser/ash/login/test/auth_ui_utils.h"
 
 #include <memory>
+#include <optional>
+#include <string>
 #include <utility>
 
 #include "ash/constants/ash_features.h"
+#include "ash/public/cpp/login_screen_test_api.h"
+#include "base/check.h"
 #include "chrome/browser/ash/login/test/composite_waiter.h"
 #include "chrome/browser/ash/login/test/js_checker.h"
 #include "chrome/browser/ash/login/test/oobe_screen_waiter.h"
 #include "chrome/browser/ash/login/test/oobe_window_visibility_waiter.h"
 #include "chrome/browser/ash/login/test/test_condition_waiter.h"
+#include "chrome/browser/ash/login/ui/login_display_host.h"
 #include "chrome/browser/ui/webui/ash/login/cryptohome_recovery_screen_handler.h"
 #include "chrome/browser/ui/webui/ash/login/enter_old_password_screen_handler.h"
 #include "chrome/browser/ui/webui/ash/login/gaia_password_changed_screen_handler.h"
+#include "chrome/browser/ui/webui/ash/login/gaia_screen_handler.h"
 #include "chrome/browser/ui/webui/ash/login/osauth/factor_setup_success_screen_handler.h"
 #include "chrome/browser/ui/webui/ash/login/osauth/local_data_loss_warning_screen_handler.h"
 #include "chrome/browser/ui/webui/ash/login/osauth/osauth_error_screen_handler.h"
+#include "chrome/browser/ui/webui/signin/signin_utils.h"
+#include "chrome/test/base/fake_gaia_mixin.h"
+#include "testing/gtest/include/gtest/gtest.h"
 
 namespace ash::test {
 
 namespace {
-const UIPath kPasswordStep = {"gaia-password-changed", "passwordStep"};
-const UIPath kOldPasswordInput = {"gaia-password-changed", "oldPasswordInput"};
-const UIPath kSendPasswordButton = {"gaia-password-changed", "next"};
-const UIPath kForgotPasswordButton = {"gaia-password-changed",
-                                      "forgotPasswordButton"};
 
-const UIPath kEnterOldPasswordInputStep = {"enter-old-password",
-                                           "passwordStep"};
-const UIPath kEnterOldPasswordInput = {"enter-old-password",
-                                       "oldPasswordInput"};
-const UIPath kEnterOldPasswordProceedButton = {"enter-old-password", "next"};
-const UIPath kEnterOldPasswordForgotButton = {"enter-old-password",
-                                              "forgotPasswordButton"};
+constexpr UIPath kGaiaSigninPrimaryButton = {
+    "gaia-signin", "signin-frame-dialog", "primary-action-button"};
 
-const UIPath kForgotPasswordStep = {"gaia-password-changed", "forgotPassword"};
-const UIPath kForgotCancel = {"gaia-password-changed", "cancelForgot"};
+constexpr UIPath kPasswordStep = {"gaia-password-changed", "passwordStep"};
+constexpr UIPath kOldPasswordInput = {"gaia-password-changed",
+                                      "oldPasswordInput"};
+constexpr UIPath kSendPasswordButton = {"gaia-password-changed", "next"};
+constexpr UIPath kForgotPasswordButton = {"gaia-password-changed",
+                                          "forgotPasswordButton"};
 
-const UIPath kTryAgainRecovery = {"gaia-password-changed", "backButton"};
-const UIPath kProceedAnyway = {"gaia-password-changed", "proceedAnyway"};
+constexpr UIPath kEnterOldPasswordInputStep = {"enter-old-password",
+                                               "passwordStep"};
+constexpr UIPath kEnterOldPasswordInput = {"enter-old-password",
+                                           "oldPasswordInput"};
+constexpr UIPath kEnterOldPasswordProceedButton = {"enter-old-password",
+                                                   "next"};
+constexpr UIPath kEnterOldPasswordForgotButton = {"enter-old-password",
+                                                  "forgotPasswordButton"};
 
-const UIPath kDataLossWarningElement = {"local-data-loss-warning"};
+constexpr UIPath kForgotPasswordStep = {"gaia-password-changed",
+                                        "forgotPassword"};
+constexpr UIPath kForgotCancel = {"gaia-password-changed", "cancelForgot"};
+
+constexpr UIPath kTryAgainRecovery = {"gaia-password-changed", "backButton"};
+constexpr UIPath kProceedAnyway = {"gaia-password-changed", "proceedAnyway"};
+
+constexpr UIPath kDataLossWarningElement = {"local-data-loss-warning"};
 // TODO: why don't we have it?
-const UIPath kDataLossWarningCancel = {"local-data-loss-warning", "cancel"};
+constexpr UIPath kDataLossWarningCancel = {"local-data-loss-warning", "cancel"};
 
-const UIPath kDataLossWarningBack = {"local-data-loss-warning", "backButton"};
-const UIPath kDataLossWarningRemove = {"local-data-loss-warning",
-                                       "proceedRemove"};
-const UIPath kDataLossWarningReset = {"local-data-loss-warning", "powerwash"};
+constexpr UIPath kDataLossWarningBack = {"local-data-loss-warning",
+                                         "backButton"};
+constexpr UIPath kDataLossWarningRemove = {"local-data-loss-warning",
+                                           "proceedRemove"};
+constexpr UIPath kDataLossWarningReset = {"local-data-loss-warning",
+                                          "powerwash"};
 
 const test::UIPath kRecoverySuccessStep = {"cryptohome-recovery",
                                            "successDialog"};
@@ -59,20 +77,155 @@
 const test::UIPath kRecoveryManualRecoveryButton = {"cryptohome-recovery",
                                                     "manualRecoveryButton"};
 
-const UIPath kFactorSetupSuccessElement = {"factor-setup-success"};
-const UIPath kFactorSetupSuccessDoneButton = {"factor-setup-success",
-                                              "doneButton"};
-const UIPath kFactorSetupSuccessNextButton = {"factor-setup-success",
-                                              "nextButton"};
+constexpr UIPath kFactorSetupSuccessElement = {"factor-setup-success"};
+constexpr UIPath kFactorSetupSuccessDoneButton = {"factor-setup-success",
+                                                  "doneButton"};
+constexpr UIPath kFactorSetupSuccessNextButton = {"factor-setup-success",
+                                                  "nextButton"};
 
 bool IsOldFlow() {
   return base::FeatureList::IsEnabled(
       ash::features::kCryptohomeRecoveryBeforeFlowSplit);
 }
 
+class LoginScreenAuthSurface : public FullScreenAuthSurface {
+ public:
+  LoginScreenAuthSurface() = default;
+  ~LoginScreenAuthSurface() override = default;
+
+  void SelectUserPod(const AccountId& account_id) override {
+    EXPECT_TRUE(LoginScreenTestApi::FocusUser(account_id));
+  }
+};
+
+class GaiaPageActorImpl : public GaiaPageActor {
+ public:
+  GaiaPageActorImpl() = default;
+  ~GaiaPageActorImpl() override = default;
+
+  void ReauthConfirmEmail(const AccountId& account_id) override {
+    gaia_js_.ExpectElementValue(account_id.GetUserEmail(),
+                                FakeGaiaMixin::kEmailPath);
+    OobeJS().ClickOnPath(kGaiaSigninPrimaryButton);
+  }
+  void TypePassword(const std::string& password) override {
+    gaia_js_.TypeIntoPath(password, FakeGaiaMixin::kPasswordPath);
+  }
+  void ContinueLogin() override {
+    OobeJS().ClickOnPath(kGaiaSigninPrimaryButton);
+  }
+
+  JSChecker gaia_js_;
+};
+
 }  // namespace
 
-// Password change scenario
+FullScreenAuthSurface::FullScreenAuthSurface() = default;
+FullScreenAuthSurface::~FullScreenAuthSurface() = default;
+
+std::unique_ptr<FullScreenAuthSurface> OnLoginScreen() {
+  return std::make_unique<LoginScreenAuthSurface>();
+}
+
+// ----------------------------------------------------------
+
+OobePageActor::OobePageActor(std::optional<OobeScreenId> screen,
+                             std::optional<ash::test::UIPath> path)
+    : screen_(screen), path_(path) {}
+
+OobePageActor::~OobePageActor() {}
+
+std::unique_ptr<test::TestConditionWaiter> OobePageActor::UntilShown() {
+  std::unique_ptr<test::TestConditionWaiter> result =
+      std::make_unique<OobeWindowVisibilityWaiter>(true);
+  if (screen_) {
+    result = std::make_unique<CompositeWaiter>(
+        std::move(result), std::make_unique<OobeScreenWaiter>(*screen_));
+  }
+  if (path_) {
+    result = std::make_unique<CompositeWaiter>(
+        std::move(result), OobeJS().CreateVisibilityWaiter(true, *path_));
+  }
+  return result;
+}
+
+// ----------------------------------------------------------
+
+GaiaPageActor::GaiaPageActor()
+    : OobePageActor(GaiaView::kScreenId, std::nullopt) {}
+GaiaPageActor::~GaiaPageActor() = default;
+
+std::unique_ptr<GaiaPageActor> AwaitGaiaSigninUI() {
+  std::unique_ptr<GaiaPageActorImpl> result =
+      std::make_unique<GaiaPageActorImpl>();
+  result->UntilShown()->Wait();
+
+  // Rely on primary button state to detect a moment when
+  // embedded GAIA is fully loaded.
+  OobeJS().CreateEnabledWaiter(true, kGaiaSigninPrimaryButton)->Wait();
+
+  content::RenderFrameHost* frame = signin::GetAuthFrame(
+      LoginDisplayHost::default_host()->GetOobeWebContents(), "signin-frame");
+  CHECK(frame);
+  result->gaia_js_ = test::JSChecker(frame);
+  return result;
+}
+
+// ----------------------------------------------------------
+
+PasswordChangedPageActor::PasswordChangedPageActor()
+    : OobePageActor(EnterOldPasswordScreenView::kScreenId,
+                    kEnterOldPasswordInputStep) {}
+PasswordChangedPageActor::~PasswordChangedPageActor() = default;
+
+void PasswordChangedPageActor::TypePreviousPassword(
+    const std::string& password) {
+  PasswordChangedTypeOldPassword(password);
+}
+
+void PasswordChangedPageActor::SubmitPreviousPassword() {
+  PasswordChangedSubmitOldPassword();
+}
+
+std::unique_ptr<test::TestConditionWaiter>
+PasswordChangedPageActor::InvalidPasswordFeedback() {
+  return PasswordChangedInvalidPasswordFeedback();
+}
+
+void PasswordChangedPageActor::ForgotPreviousPassword() {
+  PasswordChangedForgotPasswordAction();
+}
+
+std::unique_ptr<PasswordChangedPageActor> AwaitPasswordChangedUI() {
+  std::unique_ptr<PasswordChangedPageActor> result =
+      std::make_unique<PasswordChangedPageActor>();
+  result->UntilShown()->Wait();
+  return result;
+}
+
+// ----------------------------------------------------------
+
+PasswordUpdatedPageActor::PasswordUpdatedPageActor()
+    : OobePageActor(FactorSetupSuccessScreenView::kScreenId,
+                    kFactorSetupSuccessElement) {}
+PasswordUpdatedPageActor::~PasswordUpdatedPageActor() = default;
+
+void PasswordUpdatedPageActor::ExpectPasswordUpdateState() {
+  PasswordUpdateNoticeExpectDone();
+}
+
+void PasswordUpdatedPageActor::ConfirmPasswordUpdate() {
+  PasswordUpdateNoticeDoneAction();
+}
+
+std::unique_ptr<PasswordUpdatedPageActor> AwaitPasswordUpdatedUI() {
+  std::unique_ptr<PasswordUpdatedPageActor> result =
+      std::make_unique<PasswordUpdatedPageActor>();
+  result->UntilShown()->Wait();
+  return result;
+}
+
+// ----------------------------------------------------------
 
 std::unique_ptr<test::TestConditionWaiter> CreateOldPasswordEnterPageWaiter() {
   if (IsOldFlow()) {
diff --git a/chrome/browser/ash/login/test/auth_ui_utils.h b/chrome/browser/ash/login/test/auth_ui_utils.h
index a7acd6e..e57a804 100644
--- a/chrome/browser/ash/login/test/auth_ui_utils.h
+++ b/chrome/browser/ash/login/test/auth_ui_utils.h
@@ -6,12 +6,77 @@
 #define CHROME_BROWSER_ASH_LOGIN_TEST_AUTH_UI_UTILS_H_
 
 #include <memory>
+#include <optional>
+#include <string>
 
+#include "chrome/browser/ash/login/oobe_screen.h"
 #include "chrome/browser/ash/login/test/js_checker.h"
 #include "chrome/browser/ash/login/test/test_condition_waiter.h"
 
+class AccountId;
+
 namespace ash::test {
 
+class FullScreenAuthSurface {
+ public:
+  FullScreenAuthSurface();
+  virtual ~FullScreenAuthSurface();
+
+  virtual void SelectUserPod(const AccountId& account_id) = 0;
+};
+
+class OobePageActor {
+ public:
+  OobePageActor(std::optional<OobeScreenId> screen,
+                std::optional<ash::test::UIPath> path);
+  virtual ~OobePageActor();
+
+  std::unique_ptr<test::TestConditionWaiter> UntilShown();
+
+ protected:
+  std::optional<OobeScreenId> screen_;
+  std::optional<ash::test::UIPath> path_;
+};
+
+class GaiaPageActor : public OobePageActor {
+ public:
+  GaiaPageActor();
+  ~GaiaPageActor() override;
+
+  virtual void ReauthConfirmEmail(const AccountId& account_id) = 0;
+  virtual void TypePassword(const std::string& password) = 0;
+  virtual void ContinueLogin() = 0;
+};
+
+class PasswordChangedPageActor : public OobePageActor {
+ public:
+  PasswordChangedPageActor();
+  ~PasswordChangedPageActor() override;
+
+  void TypePreviousPassword(const std::string& password);
+  void SubmitPreviousPassword();
+  [[nodiscard]] std::unique_ptr<test::TestConditionWaiter>
+  InvalidPasswordFeedback();
+  void ForgotPreviousPassword();
+};
+
+class PasswordUpdatedPageActor : public OobePageActor {
+ public:
+  PasswordUpdatedPageActor();
+  ~PasswordUpdatedPageActor() override;
+
+  void ExpectPasswordUpdateState();
+  void ConfirmPasswordUpdate();
+};
+
+std::unique_ptr<FullScreenAuthSurface> OnLoginScreen();
+
+[[nodiscard]] std::unique_ptr<GaiaPageActor> AwaitGaiaSigninUI();
+[[nodiscard]] std::unique_ptr<PasswordChangedPageActor>
+AwaitPasswordChangedUI();
+[[nodiscard]] std::unique_ptr<PasswordUpdatedPageActor>
+AwaitPasswordUpdatedUI();
+
 // Password change scenario
 // page for entering old password
 std::unique_ptr<test::TestConditionWaiter> CreateOldPasswordEnterPageWaiter();
diff --git a/chrome/browser/ash/login/test/user_auth_config.cc b/chrome/browser/ash/login/test/user_auth_config.cc
index 6f0d410..524a721 100644
--- a/chrome/browser/ash/login/test/user_auth_config.cc
+++ b/chrome/browser/ash/login/test/user_auth_config.cc
@@ -77,9 +77,14 @@
   return *this;
 }
 
-UserAuthConfig& UserAuthConfig::RequireReauth() {
-  token_status =
-      user_manager::User::OAuthTokenStatus::OAUTH2_TOKEN_STATUS_INVALID;
+UserAuthConfig& UserAuthConfig::RequireReauth(bool require_reauth /*=true*/) {
+  if (require_reauth) {
+    token_status =
+        user_manager::User::OAuthTokenStatus::OAUTH2_TOKEN_STATUS_INVALID;
+  } else {
+    token_status =
+        user_manager::User::OAuthTokenStatus::OAUTH2_TOKEN_STATUS_VALID;
+  }
   return *this;
 }
 
diff --git a/chrome/browser/ash/login/test/user_auth_config.h b/chrome/browser/ash/login/test/user_auth_config.h
index f9cc2293..fb6cd7e 100644
--- a/chrome/browser/ash/login/test/user_auth_config.h
+++ b/chrome/browser/ash/login/test/user_auth_config.h
@@ -42,7 +42,7 @@
   UserAuthConfig& WithLegacyPin(const std::string& pin,
                                 const std::string& pin_salt);
   UserAuthConfig& WithRecoveryFactor();
-  UserAuthConfig& RequireReauth();
+  UserAuthConfig& RequireReauth(bool require_reauth = true);
 
   AuthFactorsSet factors;
   std::string online_password;
diff --git a/chrome/browser/ash/login/wizard_controller_browsertest.cc b/chrome/browser/ash/login/wizard_controller_browsertest.cc
index 4aabc63..2f73d9cc 100644
--- a/chrome/browser/ash/login/wizard_controller_browsertest.cc
+++ b/chrome/browser/ash/login/wizard_controller_browsertest.cc
@@ -619,12 +619,10 @@
     wizard_controller->SetCurrentScreen(nullptr);
     WaitForOobeUI();
     wizard_controller->SetSharedURLLoaderFactoryForTesting(
-        base::MakeRefCounted<network::WeakWrapperSharedURLLoaderFactory>(
-            &test_url_loader_factory_));
+        test_url_loader_factory_.GetSafeWeakWrapper());
     SimpleGeolocationProvider::GetInstance()
         ->SetSharedUrlLoaderFactoryForTesting(
-            base::MakeRefCounted<network::WeakWrapperSharedURLLoaderFactory>(
-                &test_url_loader_factory_));
+            test_url_loader_factory_.GetSafeWeakWrapper());
 
     // Set up the mocks for all screens.
     mock_welcome_screen_ =
diff --git a/chrome/browser/ash/printing/ppd_provider_factory.cc b/chrome/browser/ash/printing/ppd_provider_factory.cc
index af91861..12c83b3 100644
--- a/chrome/browser/ash/printing/ppd_provider_factory.cc
+++ b/chrome/browser/ash/printing/ppd_provider_factory.cc
@@ -17,6 +17,7 @@
 #include "chromeos/printing/ppd_metadata_manager.h"
 #include "chromeos/printing/ppd_provider.h"
 #include "chromeos/printing/printer_config_cache.h"
+#include "chromeos/printing/remote_ppd_fetcher.h"
 #include "components/version_info/version_info.h"
 #include "content/public/browser/browser_thread.h"
 #include "google_apis/google_api_keys.h"
@@ -67,9 +68,13 @@
       g_browser_process->GetApplicationLocale(), channel,
       base::DefaultClock::GetInstance(), std::move(manager_config_cache));
 
+  auto remote_ppd_fetcher = chromeos::RemotePpdFetcher::Create(
+      base::BindRepeating(&GetURLLoaderFactory));
+
   return chromeos::PpdProvider::Create(
       version_info::GetVersion(), chromeos::PpdCache::Create(ppd_cache_path),
-      std::move(metadata_manager), std::move(provider_config_cache));
+      std::move(metadata_manager), std::move(provider_config_cache),
+      std::move(remote_ppd_fetcher));
 }
 
 }  // namespace ash
diff --git a/chrome/browser/ash/system_web_apps/apps/personalization_app/personalization_app_sea_pen_provider_impl.cc b/chrome/browser/ash/system_web_apps/apps/personalization_app/personalization_app_sea_pen_provider_impl.cc
index ea998b7..5bfe910 100644
--- a/chrome/browser/ash/system_web_apps/apps/personalization_app/personalization_app_sea_pen_provider_impl.cc
+++ b/chrome/browser/ash/system_web_apps/apps/personalization_app/personalization_app_sea_pen_provider_impl.cc
@@ -97,11 +97,25 @@
 void PersonalizationAppSeaPenProviderImpl::SelectRecentSeaPenImage(
     const base::FilePath& path,
     SelectRecentSeaPenImageCallback callback) {
-  auto* wallpaper_controller = ash::WallpaperController::Get();
-  DCHECK(wallpaper_controller);
+  if (recent_sea_pen_images_.count(path) == 0) {
+    sea_pen_receiver_.ReportBadMessage("Unknown wallpaper image selected");
+    return;
+  }
 
-  wallpaper_controller->SetSeaPenWallpaperFromFile(GetAccountId(profile_), path,
-                                                   std::move(callback));
+  // Run any pending response callback.
+  if (pending_select_recent_sea_pen_image_callback_) {
+    std::move(pending_select_recent_sea_pen_image_callback_)
+        .Run(/*success=*/false);
+  }
+  pending_select_recent_sea_pen_image_callback_ = std::move(callback);
+
+  ash::WallpaperController* wallpaper_controller = WallpaperController::Get();
+  DCHECK(wallpaper_controller);
+  wallpaper_controller->SetSeaPenWallpaperFromFile(
+      GetAccountId(profile_), path,
+      base::BindOnce(
+          &PersonalizationAppSeaPenProviderImpl::OnRecentSeaPenImageSelected,
+          weak_ptr_factory_.GetWeakPtr()));
 }
 
 void PersonalizationAppSeaPenProviderImpl::GetRecentSeaPenImages(
@@ -188,6 +202,12 @@
                                            std::move(callback));
 }
 
+void PersonalizationAppSeaPenProviderImpl::OnRecentSeaPenImageSelected(
+    bool success) {
+  DCHECK(pending_select_recent_sea_pen_image_callback_);
+  std::move(pending_select_recent_sea_pen_image_callback_).Run(success);
+}
+
 void PersonalizationAppSeaPenProviderImpl::OnGetRecentSeaPenImages(
     GetRecentSeaPenImagesCallback callback,
     const std::vector<base::FilePath>& images) {
diff --git a/chrome/browser/ash/system_web_apps/apps/personalization_app/personalization_app_sea_pen_provider_impl.h b/chrome/browser/ash/system_web_apps/apps/personalization_app/personalization_app_sea_pen_provider_impl.h
index 96f7aa4..3fc4874 100644
--- a/chrome/browser/ash/system_web_apps/apps/personalization_app/personalization_app_sea_pen_provider_impl.h
+++ b/chrome/browser/ash/system_web_apps/apps/personalization_app/personalization_app_sea_pen_provider_impl.h
@@ -80,6 +80,8 @@
   void OnFetchWallpaperDone(SelectSeaPenThumbnailCallback callback,
                             std::optional<SeaPenImage> image);
 
+  void OnRecentSeaPenImageSelected(bool success);
+
   void OnGetRecentSeaPenImages(GetRecentSeaPenImagesCallback callback,
                                const std::vector<base::FilePath>& images);
 
@@ -87,6 +89,8 @@
       GetRecentSeaPenImageThumbnailCallback callback,
       const gfx::ImageSkia& image);
 
+  SelectRecentSeaPenImageCallback pending_select_recent_sea_pen_image_callback_;
+
   // Pointer to profile of user that opened personalization SWA. Not owned.
   const raw_ptr<Profile> profile_;
 
diff --git a/chrome/browser/autofill/autofill_save_card_infobar_delegate_mobile_unittest.cc b/chrome/browser/autofill/autofill_save_card_infobar_delegate_mobile_unittest.cc
index 43c9a40f..7d486d2 100644
--- a/chrome/browser/autofill/autofill_save_card_infobar_delegate_mobile_unittest.cc
+++ b/chrome/browser/autofill/autofill_save_card_infobar_delegate_mobile_unittest.cc
@@ -76,6 +76,10 @@
       std::string legal_message_string,
       CreditCard credit_card = CreditCard());
   std::unique_ptr<AutofillSaveCardInfoBarDelegateMobile>
+  CreateDelegateWithOptions(bool is_uploading,
+                            AutofillClient::SaveCreditCardOptions options,
+                            CreditCard credit_card = CreditCard());
+  std::unique_ptr<AutofillSaveCardInfoBarDelegateMobile>
   CreateDelegateWithLegalMessageAndOptions(
       bool is_uploading,
       std::string legal_message_string,
@@ -156,6 +160,15 @@
 }
 
 std::unique_ptr<AutofillSaveCardInfoBarDelegateMobile>
+AutofillSaveCardInfoBarDelegateMobileTest::CreateDelegateWithOptions(
+    bool is_uploading,
+    AutofillClient::SaveCreditCardOptions options,
+    CreditCard credit_card) {
+  return CreateDelegateWithLegalMessageAndOptions(
+      is_uploading, /* legal_message_string= */ "", options, credit_card);
+}
+
+std::unique_ptr<AutofillSaveCardInfoBarDelegateMobile>
 AutofillSaveCardInfoBarDelegateMobileTest::CreateDelegateWithLegalMessage(
     bool is_uploading,
     std::string legal_message_string,
@@ -223,6 +236,7 @@
 }
 
 // Test that local credit card save infobar metrics are logged correctly.
+// TODO(crbug.com/1496922) Split metrics tests into smaller test.
 TEST_F(AutofillSaveCardInfoBarDelegateMobileTest, Metrics_Local_Main) {
   ::testing::InSequence dummy;
 
@@ -283,6 +297,7 @@
 }
 
 // Test that server credit card save infobar metrics are logged correctly.
+// TODO(crbug.com/1496922) Split metrics tests into smaller test.
 TEST_F(AutofillSaveCardInfoBarDelegateMobileTest, Metrics_Server_Main) {
   ::testing::InSequence dummy;
 
@@ -504,6 +519,125 @@
   }
 }
 
+// Test that CVC-only local save infobar metrics are logged correctly.
+// TODO(crbug.com/1496922) Split metrics tests into smaller test.
+TEST_F(AutofillSaveCardInfoBarDelegateMobileTest, Metrics_Cvc_Local_Main) {
+  ::testing::InSequence dummy;
+
+  // Infobar is shown.
+  {
+    base::HistogramTester histogram_tester;
+    std::unique_ptr<ConfirmInfoBarDelegate> infobar(CreateDelegateWithOptions(
+        /* is_uploading= */ false,
+        AutofillClient::SaveCreditCardOptions().with_card_save_type(
+            AutofillClient::CardSaveType::kCvcSaveOnly)));
+
+    histogram_tester.ExpectUniqueSample("Autofill.CvcInfoBar.Local",
+                                        AutofillMetrics::INFOBAR_SHOWN, 1);
+  }
+
+  // Accept the infobar.
+  {
+    personal_data_->ClearCreditCards();
+    std::unique_ptr<ConfirmInfoBarDelegate> infobar(CreateDelegateWithOptions(
+        /* is_uploading= */ false,
+        AutofillClient::SaveCreditCardOptions().with_card_save_type(
+            AutofillClient::CardSaveType::kCvcSaveOnly)));
+
+    base::HistogramTester histogram_tester;
+
+    CheckInfobarAcceptReturnValue(infobar.get());
+    ASSERT_EQ(1U, personal_data_->GetCreditCards().size());
+    histogram_tester.ExpectUniqueSample("Autofill.CvcInfoBar.Local",
+                                        AutofillMetrics::INFOBAR_ACCEPTED, 1);
+  }
+
+  // Dismiss the infobar.
+  {
+    std::unique_ptr<ConfirmInfoBarDelegate> infobar(CreateDelegateWithOptions(
+        /* is_uploading= */ false,
+        AutofillClient::SaveCreditCardOptions().with_card_save_type(
+            AutofillClient::CardSaveType::kCvcSaveOnly)));
+
+    base::HistogramTester histogram_tester;
+    infobar->InfoBarDismissed();
+    histogram_tester.ExpectUniqueSample("Autofill.CvcInfoBar.Local",
+                                        AutofillMetrics::INFOBAR_DENIED, 1);
+  }
+
+  // Ignore the infobar.
+  {
+    std::unique_ptr<ConfirmInfoBarDelegate> infobar(CreateDelegateWithOptions(
+        /* is_uploading= */ false,
+        AutofillClient::SaveCreditCardOptions().with_card_save_type(
+            AutofillClient::CardSaveType::kCvcSaveOnly)));
+
+    base::HistogramTester histogram_tester;
+    infobar.reset();
+    histogram_tester.ExpectUniqueSample("Autofill.CvcInfoBar.Local",
+                                        AutofillMetrics::INFOBAR_IGNORED, 1);
+  }
+}
+
+// Test that CVC-only upload save infobar metrics are logged correctly.
+// TODO(crbug.com/1496922) Split metrics tests into smaller test.
+TEST_F(AutofillSaveCardInfoBarDelegateMobileTest, Metrics_Cvc_Server_Main) {
+  ::testing::InSequence dummy;
+
+  // Infobar is shown.
+  {
+    base::HistogramTester histogram_tester;
+    std::unique_ptr<ConfirmInfoBarDelegate> infobar(CreateDelegateWithOptions(
+        /* is_uploading= */ true,
+        AutofillClient::SaveCreditCardOptions().with_card_save_type(
+            AutofillClient::CardSaveType::kCvcSaveOnly)));
+
+    histogram_tester.ExpectUniqueSample("Autofill.CvcInfoBar.Upload",
+                                        AutofillMetrics::INFOBAR_SHOWN, 1);
+  }
+
+  // Accept the infobar.
+  {
+    personal_data_->ClearCreditCards();
+    std::unique_ptr<ConfirmInfoBarDelegate> infobar(CreateDelegateWithOptions(
+        /* is_uploading= */ true,
+        AutofillClient::SaveCreditCardOptions().with_card_save_type(
+            AutofillClient::CardSaveType::kCvcSaveOnly)));
+
+    base::HistogramTester histogram_tester;
+    CheckInfobarAcceptReturnValue(infobar.get());
+    ASSERT_EQ(1U, personal_data_->GetCreditCards().size());
+    histogram_tester.ExpectUniqueSample("Autofill.CvcInfoBar.Upload",
+                                        AutofillMetrics::INFOBAR_ACCEPTED, 1);
+  }
+
+  // Dismiss the infobar.
+  {
+    std::unique_ptr<ConfirmInfoBarDelegate> infobar(CreateDelegateWithOptions(
+        /* is_uploading= */ true,
+        AutofillClient::SaveCreditCardOptions().with_card_save_type(
+            AutofillClient::CardSaveType::kCvcSaveOnly)));
+
+    base::HistogramTester histogram_tester;
+    infobar->InfoBarDismissed();
+    histogram_tester.ExpectUniqueSample("Autofill.CvcInfoBar.Upload",
+                                        AutofillMetrics::INFOBAR_DENIED, 1);
+  }
+
+  // Ignore the infobar.
+  {
+    std::unique_ptr<ConfirmInfoBarDelegate> infobar(CreateDelegateWithOptions(
+        /* is_uploading= */ true,
+        AutofillClient::SaveCreditCardOptions().with_card_save_type(
+            AutofillClient::CardSaveType::kCvcSaveOnly)));
+
+    base::HistogramTester histogram_tester;
+    infobar.reset();
+    histogram_tester.ExpectUniqueSample("Autofill.CvcInfoBar.Upload",
+                                        AutofillMetrics::INFOBAR_IGNORED, 1);
+  }
+}
+
 TEST_F(AutofillSaveCardInfoBarDelegateMobileTest, LocalCardHasNickname) {
   CreditCard card = test::GetCreditCard();
   card.SetNickname(u"Nickname");
diff --git a/chrome/browser/browsing_data/counters/browsing_data_counter_utils.cc b/chrome/browser/browsing_data/counters/browsing_data_counter_utils.cc
index 9fcace9..4fe03cd4 100644
--- a/chrome/browser/browsing_data/counters/browsing_data_counter_utils.cc
+++ b/chrome/browser/browsing_data/counters/browsing_data_counter_utils.cc
@@ -154,9 +154,11 @@
     // Determines whether or not to show the count with exception message.
     auto* identity_manager = IdentityManagerFactory::GetForProfile(profile);
     int del_cookie_counter_msg_id =
-        (identity_manager->HasPrimaryAccount(signin::ConsentLevel::kSignin) &&
-         base::FeatureList::IsEnabled(switches::kUnoDesktop)) ||
-                ShouldShowCookieException(profile)
+        ShouldShowCookieException(profile) ||
+                (identity_manager &&
+                 identity_manager->HasPrimaryAccount(
+                     signin::ConsentLevel::kSignin) &&
+                 base::FeatureList::IsEnabled(switches::kUnoDesktop))
             ? IDS_DEL_COOKIES_COUNTER_ADVANCED_WITH_SIGNED_IN_EXCEPTION
             : IDS_DEL_COOKIES_COUNTER_ADVANCED;
 
diff --git a/chrome/browser/chrome_content_browser_client.cc b/chrome/browser/chrome_content_browser_client.cc
index 4d9d5994..a61fe83 100644
--- a/chrome/browser/chrome_content_browser_client.cc
+++ b/chrome/browser/chrome_content_browser_client.cc
@@ -430,6 +430,7 @@
 #include "chrome/browser/ash/fileapi/external_file_url_loader_factory.h"
 #include "chrome/browser/ash/fileapi/file_system_backend.h"
 #include "chrome/browser/ash/fileapi/mtp_file_system_backend_delegate.h"
+#include "chrome/browser/ash/http_auth_dialog.h"
 #include "chrome/browser/ash/login/signin/merge_session_navigation_throttle.h"
 #include "chrome/browser/ash/login/signin/merge_session_throttling_utils.h"
 #include "chrome/browser/ash/login/signin_partition_manager.h"
@@ -6682,8 +6683,16 @@
     return system_proxy_manager->CreateLoginDelegate(
         std::move(auth_required_callback));
   }
+
+  if (ash::HttpAuthDialog::IsEnabled()) {
+    return ash::HttpAuthDialog::Create(auth_info, web_contents, url,
+                                       std::move(auth_required_callback));
+  }
 #endif  // BUILDFLAG(IS_CHROMEOS_ASH)
 
+  // Once Lacros ships this logic will no longer need to be included in
+  // ash-chrome.
+  //
   // For subresources, create a LoginHandler directly, which may show a login
   // prompt to the user. Main frame resources go through LoginTabHelper, which
   // manages a more complicated flow to avoid confusion about which website is
diff --git a/chrome/browser/compose/chrome_compose_client_unittest.cc b/chrome/browser/compose/chrome_compose_client_unittest.cc
index 6bf920c5..3070e949 100644
--- a/chrome/browser/compose/chrome_compose_client_unittest.cc
+++ b/chrome/browser/compose/chrome_compose_client_unittest.cc
@@ -1185,6 +1185,60 @@
   histograms().ExpectTotalCount(compose::kComposeMSBBSessionCloseReason, 0);
 }
 
+TEST_F(ChromeComposeClientTest, CloseButtonMSBBHistogramTest) {
+  SetPrefsForComposeMSBBState(false);
+  ShowDialogAndBindMojo();
+
+  client().CloseUI(compose::mojom::CloseReason::kMSBBCloseButton);
+
+  histograms().ExpectBucketCount(
+      compose::kComposeMSBBSessionCloseReason,
+      compose::ComposeMSBBSessionCloseReason::kMSBBCloseButtonPressed, 1);
+
+  histograms().ExpectBucketCount(
+      compose::kComposeMSBBSessionDialogShownCount + std::string(".Ignored"),
+      1,  // Expect that one total MSBB dialog was shown.
+      1);
+  histograms().ExpectTotalCount(compose::kComposeMSBBSessionCloseReason, 1);
+
+  // No consent related close reasons should have been recorded.
+  histograms().ExpectTotalCount(compose::kComposeConsentSessionCloseReason, 0);
+}
+
+TEST_F(ChromeComposeClientTest,
+       CloseButtonMSBBEnabledDuringSessionHistogramTest) {
+  SetPrefsForComposeMSBBState(false);
+  ShowDialogAndBindMojo();
+
+  SetPrefsForComposeMSBBState(true);
+  // Show the dialog a second time.
+  ShowDialogAndBindMojo();
+
+  client().CloseUI(compose::mojom::CloseReason::kCloseButton);
+
+  histograms().ExpectBucketCount(
+      compose::kComposeSessionComposeCount + std::string(".Ignored"),
+      0,  // Expect that zero total Compose calls were recorded.
+      1);
+
+  histograms().ExpectBucketCount(
+      compose::kComposeSessionCloseReason,
+      compose::ComposeSessionCloseReason::kCloseButtonPressed, 1);
+
+  histograms().ExpectBucketCount(
+      compose::kComposeMSBBSessionCloseReason,
+      compose::ComposeMSBBSessionCloseReason::kMSBBAcceptedWithoutInsert, 1);
+
+  histograms().ExpectBucketCount(
+      compose::kComposeMSBBSessionDialogShownCount + std::string(".Accepted"),
+      1,  // Expect that the dialog was shown once.
+      1);
+  histograms().ExpectTotalCount(compose::kComposeMSBBSessionCloseReason, 1);
+
+  // No consent related close reasons should have been recorded.
+  histograms().ExpectTotalCount(compose::kComposeConsentSessionCloseReason, 0);
+}
+
 TEST_F(ChromeComposeClientTest, ConsentUICloseDialogHistogramTest) {
   // Set unset consent state and show the dialog
   SetPrefsForComposeConsentState(compose::mojom::ConsentState::kUnset);
diff --git a/chrome/browser/compose/compose_enabling.cc b/chrome/browser/compose/compose_enabling.cc
index 77dc3676..cda897be 100644
--- a/chrome/browser/compose/compose_enabling.cc
+++ b/chrome/browser/compose/compose_enabling.cc
@@ -19,7 +19,6 @@
 #include "components/compose/core/browser/config.h"
 #include "components/flags_ui/feature_entry.h"
 #include "components/flags_ui/flags_storage.h"
-#include "components/unified_consent/url_keyed_data_collection_consent_helper.h"
 #include "content/public/browser/context_menu_params.h"
 #include "content/public/browser/render_frame_host.h"
 
@@ -150,15 +149,6 @@
     return base::unexpected(compose::ComposeShowStatus::kGenericBlocked);
   }
 
-  // Check MSBB.
-  std::unique_ptr<unified_consent::UrlKeyedDataCollectionConsentHelper> helper =
-      unified_consent::UrlKeyedDataCollectionConsentHelper::
-          NewAnonymizedDataCollectionConsentHelper(profile->GetPrefs());
-  if (helper != nullptr && !helper->IsEnabled()) {
-    DVLOG(2) << "MSBB not enabled";
-    return base::unexpected(compose::ComposeShowStatus::kDisabledMsbb);
-  }
-
   // Check signin status.
   CoreAccountInfo core_account_info =
       identity_manager->GetPrimaryAccountInfo(signin::ConsentLevel::kSignin);
diff --git a/chrome/browser/compose/compose_enabling_unittest.cc b/chrome/browser/compose/compose_enabling_unittest.cc
index 678a03f..9c1bc37 100644
--- a/chrome/browser/compose/compose_enabling_unittest.cc
+++ b/chrome/browser/compose/compose_enabling_unittest.cc
@@ -174,13 +174,6 @@
     identity_test_env_.SetAutomaticIssueOfAccessTokens(true);
   }
 
-  void SetMsbbState(bool new_state) {
-    PrefService* prefs = GetProfile()->GetPrefs();
-    prefs->SetBoolean(
-        unified_consent::prefs::kUrlKeyedAnonymizedDataCollectionEnabled,
-        new_state);
-  }
-
   CustomMockOptimizationGuideKeyedService& opt_guide() { return *opt_guide_; }
 
  protected:
@@ -235,7 +228,6 @@
       {}, {compose::features::kEnableCompose,
            compose::features::kEnableComposeNudge});
   // We intentionally don't call sign in to make our state not signed in.
-  SetMsbbState(false);
   EXPECT_NE(compose_enabling_->IsEnabled(), base::ok());
 }
 
@@ -247,26 +239,13 @@
            compose::features::kEnableComposeNudge});
   // Sign in, with sync turned on.
   SignIn(signin::ConsentLevel::kSync);
-  // Turn on MSBB.
-  SetMsbbState(true);
 
   CheckIsEnabledError(compose_enabling_.get(),
                       compose::ComposeShowStatus::kGenericBlocked);
 }
 
-TEST_F(ComposeEnablingTest, MsbbDisabledTest) {
-  // Sign in, with sync turned on.
-  SignIn(signin::ConsentLevel::kSync);
-  // MSBB turned off.
-  SetMsbbState(false);
-  CheckIsEnabledError(compose_enabling_.get(),
-                      compose::ComposeShowStatus::kDisabledMsbb);
-}
-
 TEST_F(ComposeEnablingTest, NotSignedInTest) {
   // Intentionally skip the signin step.
-  // Turn on MSBB.
-  SetMsbbState(true);
   CheckIsEnabledError(compose_enabling_.get(),
                       compose::ComposeShowStatus::kSignedOut);
 }
@@ -280,8 +259,6 @@
       GoogleServiceAuthError(
           GoogleServiceAuthError::State::INVALID_GAIA_CREDENTIALS));
 
-  // Turn on MSBB.
-  SetMsbbState(true);
   CheckIsEnabledError(compose_enabling_.get(),
                       compose::ComposeShowStatus::kSignedOut);
 }
@@ -295,8 +272,6 @@
       {compose::features::kComposeEligible});
   // Sign in, with sync turned on.
   SignIn(signin::ConsentLevel::kSync);
-  // Turn on MSBB.
-  SetMsbbState(true);
 
   // The ComposeEligible switch should win, and disable the feature.
   CheckIsEnabledError(compose_enabling_.get(),
@@ -306,16 +281,12 @@
 TEST_F(ComposeEnablingTest, EverythingEnabledTest) {
   // Sign in, with sync turned on.
   SignIn(signin::ConsentLevel::kSync);
-  // Turn on MSBB.
-  SetMsbbState(true);
   EXPECT_EQ(compose_enabling_->IsEnabled(), base::ok());
 }
 
 TEST_F(ComposeEnablingTest, UserNotAllowedTest) {
   // Sign in, with sync turned on.
   SignIn(signin::ConsentLevel::kSync);
-  // Turn on MSBB.
-  SetMsbbState(true);
   // Cause per-user check to fail.
   ComposeEnabling::SkipUserEnabledCheckForTesting(false);
 
@@ -330,7 +301,6 @@
       {}, {compose::features::kEnableCompose,
            compose::features::kEnableComposeNudge});
   // We intentionally don't call sign in to make our state not signed in.
-  SetMsbbState(false);
   EXPECT_FALSE(ComposeEnabling::IsEnabledForProfile(GetProfile()));
 }
 
diff --git a/chrome/browser/compose/compose_session.cc b/chrome/browser/compose/compose_session.cc
index 2d6a242..2286ee5 100644
--- a/chrome/browser/compose/compose_session.cc
+++ b/chrome/browser/compose/compose_session.cc
@@ -177,9 +177,14 @@
   }
   if (!current_msbb_state_ || msbb_enabled_during_session_) {
     compose::LogComposeMSBBSessionDialogShownCount(msbb_close_reason_,
-                                                   dialog_shown_count_);
+                                                   msbb_dialog_shown_count_);
     compose::LogComposeMSBBSessionCloseReason(msbb_close_reason_);
     if (!current_msbb_state_) {
+      // Log whether or not the user inserted text after having
+      // accepted/acknowledged consent in the same session.
+      if (consent_given_in_session_) {
+        compose::LogComposeConsentSessionCloseReason(consent_close_reason_);
+      }
       return;
     }
   }
@@ -553,7 +558,13 @@
 
 void ComposeSession::InitializeWithText(const std::optional<std::string>& text,
                                         const bool text_selected) {
+  if (!current_msbb_state_) {
+    msbb_dialog_shown_count_ += 1;
+    return;
+  }
+
   dialog_shown_count_ += 1;
+
   text_selected_ = text_selected;
   RefreshInnerText();
 
diff --git a/chrome/browser/compose/compose_session.h b/chrome/browser/compose/compose_session.h
index 12edecd..c98244a 100644
--- a/chrome/browser/compose/compose_session.h
+++ b/chrome/browser/compose/compose_session.h
@@ -270,6 +270,7 @@
   // Logging counters.
   int compose_count_ = 0;
   int dialog_shown_count_ = 0;
+  int msbb_dialog_shown_count_ = 0;
   int undo_count_ = 0;
   int update_input_count_ = 0;
 
diff --git a/chrome/browser/devtools/protocol/target_handler.cc b/chrome/browser/devtools/protocol/target_handler.cc
index 80a0f59..0cc2cdc 100644
--- a/chrome/browser/devtools/protocol/target_handler.cc
+++ b/chrome/browser/devtools/protocol/target_handler.cc
@@ -12,6 +12,7 @@
 #include "chrome/browser/ui/browser_navigator.h"
 #include "chrome/common/webui_url_constants.h"
 #include "content/public/browser/devtools_agent_host.h"
+#include "content/public/browser/web_contents.h"
 #include "content/public/common/url_constants.h"
 #include "content/public/common/url_utils.h"
 
@@ -136,6 +137,10 @@
   if (!params.navigated_or_inserted_contents)
     return protocol::Response::ServerError("Failed to open a new tab");
 
+  if (!create_in_background) {
+    params.navigated_or_inserted_contents->Focus();
+  }
+
   if (for_tab.value_or(false)) {
     *out_target_id = content::DevToolsAgentHost::GetOrCreateForTab(
                          params.navigated_or_inserted_contents)
diff --git a/chrome/browser/extensions/api/debugger/debugger_apitest.cc b/chrome/browser/extensions/api/debugger/debugger_apitest.cc
index dae39da5..7ff71d36 100644
--- a/chrome/browser/extensions/api/debugger/debugger_apitest.cc
+++ b/chrome/browser/extensions/api/debugger/debugger_apitest.cc
@@ -760,6 +760,12 @@
   ASSERT_TRUE(RunExtensionTest("parent_target_permissions")) << message_;
 }
 
+IN_PROC_BROWSER_TEST_F(DebuggerExtensionApiTest, ReloadAndResetHistory) {
+  // Run test with file access disabled.
+  ASSERT_TRUE(RunExtensionTest("debugger_reload_and_reset_history"))
+      << message_;
+}
+
 // Tests that an extension is not allowed to inspect a worker through the
 // inspectWorker debugger command.
 // Regression test for https://crbug.com/1059577.
diff --git a/chrome/browser/extensions/blocklist_state_fetcher.h b/chrome/browser/extensions/blocklist_state_fetcher.h
index bc9644e..90f62ed7 100644
--- a/chrome/browser/extensions/blocklist_state_fetcher.h
+++ b/chrome/browser/extensions/blocklist_state_fetcher.h
@@ -25,7 +25,7 @@
 
 class BlocklistStateFetcher {
  public:
-  typedef base::OnceCallback<void(BlocklistState)> RequestCallback;
+  using RequestCallback = base::OnceCallback<void(BlocklistState)>;
 
   BlocklistStateFetcher();
 
@@ -50,7 +50,7 @@
 
  private:
   friend class TestBlocklistStateFetcher;
-  typedef std::multimap<std::string, RequestCallback> CallbackMultiMap;
+  using CallbackMultiMap = std::multimap<std::string, RequestCallback>;
 
   GURL RequestUrl() const;
 
diff --git a/chrome/browser/extensions/chrome_app_sorting.h b/chrome/browser/extensions/chrome_app_sorting.h
index 883ce42c..fde23fc 100644
--- a/chrome/browser/extensions/chrome_app_sorting.h
+++ b/chrome/browser/extensions/chrome_app_sorting.h
@@ -123,7 +123,7 @@
     syncer::StringOrdinal page_ordinal;
     syncer::StringOrdinal app_launch_ordinal;
   };
-  typedef std::map<std::string, AppOrdinals> AppOrdinalsMap;
+  using AppOrdinalsMap = std::map<std::string, AppOrdinals>;
 
   // This function returns the lowest ordinal on |page_ordinal| if
   // |return_value| == AppLaunchOrdinalReturn::MIN_ORDINAL, otherwise it returns
diff --git a/chrome/browser/extensions/event_metrics_browsertest.cc b/chrome/browser/extensions/event_metrics_browsertest.cc
index bdf89ff..13539b2 100644
--- a/chrome/browser/extensions/event_metrics_browsertest.cc
+++ b/chrome/browser/extensions/event_metrics_browsertest.cc
@@ -5,8 +5,12 @@
 #include "chrome/browser/extensions/extension_apitest.h"
 #include "chrome/browser/extensions/extension_browsertest.h"
 #include "chrome/test/base/ui_test_utils.h"
+#include "content/public/browser/service_worker_context.h"
 #include "content/public/test/browser_test.h"
+#include "content/public/test/service_worker_test_helpers.h"
 #include "extensions/browser/background_script_executor.h"
+#include "extensions/browser/service_worker/service_worker_test_utils.h"
+#include "extensions/test/extension_background_page_waiter.h"
 #include "extensions/test/extension_test_message_listener.h"
 #include "extensions/test/test_extension_dir.h"
 #include "net/dns/mock_host_resolver.h"
@@ -21,6 +25,67 @@
 using ContextType = ExtensionBrowserTest::ContextType;
 using EventMetricsBrowserTest = ExtensionBrowserTest;
 
+// TODO(crbug.com/1441221): combine this observer with
+// extensions/browser/service_worker/service_worker_test_utils.h and
+// chrome/browser/extensions/service_worker_event_dispatching_browsertest.cc
+// observers.
+class TestWorkerStatusObserver : public content::ServiceWorkerContextObserver {
+ public:
+  TestWorkerStatusObserver(content::BrowserContext* browser_context,
+                           const ExtensionId& extension_id)
+      : extension_url_(Extension::GetBaseURLFromExtensionId(extension_id)),
+        sw_context_(service_worker_test_utils::GetServiceWorkerContext(
+            browser_context)) {
+    scoped_observation_.Observe(sw_context_);
+  }
+
+  TestWorkerStatusObserver(const TestWorkerStatusObserver&) = delete;
+  TestWorkerStatusObserver& operator=(const TestWorkerStatusObserver&) = delete;
+
+  void WaitForWorkerStarted() { started_worker_run_loop_.Run(); }
+  void WaitForWorkerStopped() { stopped_worker_run_loop_.Run(); }
+
+  int64_t test_worker_version_id() const { return test_worker_version_id_; }
+
+ private:
+  // ServiceWorkerContextObserver:
+
+  // Called when a worker has entered the
+  // `blink::EmbeddedWorkerStatus::kRunning` status. Used to indicate when our
+  // test extension is now running.
+  void OnVersionStartedRunning(
+      int64_t version_id,
+      const content::ServiceWorkerRunningInfo& running_info) override {
+    if (running_info.scope != extension_url_) {
+      return;
+    }
+
+    test_worker_version_id_ = version_id;
+    started_worker_run_loop_.Quit();
+  }
+
+  // Called when a worker has entered the
+  // `blink::EmbeddedWorkerStatus::kStopping` status. Used to indicate when our
+  // test extension has stopped.
+  void OnVersionStoppedRunning(int64_t version_id) override {
+    // `test_worker_version_id_` is the previously running version's id.
+    if (test_worker_version_id_ != version_id) {
+      return;
+    }
+    stopped_worker_run_loop_.Quit();
+  }
+
+  int64_t test_worker_version_id_ =
+      blink::mojom::kInvalidServiceWorkerVersionId;
+  base::RunLoop started_worker_run_loop_;
+  base::RunLoop stopped_worker_run_loop_;
+  const GURL extension_url_;
+  const raw_ptr<content::ServiceWorkerContext> sw_context_;
+  base::ScopedObservation<content::ServiceWorkerContext,
+                          content::ServiceWorkerContextObserver>
+      scoped_observation_{this};
+};
+
 // Tests that the only the dispatch time histogram provided to the test is
 // emitted with a sane value, and that other provided metrics are not emitted.
 // TODO(crbug.com/1484659): Disabled on ASAN due to leak caused by renderer gin
@@ -136,6 +201,198 @@
       /*expected_count=*/1);
 }
 
+// Tests that an active event page will emit the proper dispatch time metric.
+IN_PROC_BROWSER_TEST_F(EventMetricsBrowserTest,
+                       EventPageDispatchToAckTimeActive) {
+  ASSERT_TRUE(embedded_test_server()->Start());
+  // Extend background page expiration time so that the event page will be
+  // active for the test.
+  ProcessManager::SetEventPageIdleTimeForTesting(60000);
+  ProcessManager::SetEventPageSuspendingTimeForTesting(60000);
+
+  ExtensionTestMessageListener extension_oninstall_listener_fired(
+      "installed listener fired");
+  scoped_refptr<const Extension> extension =
+      LoadExtension(test_data_dir_.AppendASCII("events/metrics/web_navigation"),
+                    {.context_type = ContextType::kEventPage});
+  ASSERT_TRUE(extension);
+  // This ensures that we wait until the the browser receives the ack from the
+  // renderer. This prevents unexpected histogram emits later.
+  ASSERT_TRUE(extension_oninstall_listener_fired.WaitUntilSatisfied());
+
+  ExtensionBackgroundPageWaiter(profile(), *extension).WaitForBackgroundOpen();
+  ProcessManager* process_manager = ProcessManager::Get(profile());
+  ASSERT_FALSE(process_manager->IsEventPageSuspended(extension->id()));
+
+  base::HistogramTester histogram_tester;
+  ExtensionTestMessageListener test_event_listener_fired("listener fired");
+  // Navigate somewhere to trigger the webNavigation.onBeforeRequest event to
+  // the extension listener.
+  ASSERT_TRUE(ui_test_utils::NavigateToURL(
+      browser(),
+      embedded_test_server()->GetURL("example.com", "/simple.html")));
+  ASSERT_TRUE(test_event_listener_fired.WaitUntilSatisfied());
+
+  // Call to webNavigation.onCompleted expected.
+  histogram_tester.ExpectTotalCount(
+      "Extensions.Events.DispatchToAckTime.ExtensionEventPage3.Active",
+      /*expected_count=*/1);
+  histogram_tester.ExpectTotalCount(
+      "Extensions.Events.DispatchToAckTime.ExtensionEventPage3.Inactive",
+      /*expected_count=*/0);
+  // Verify that the recorded values are sane -- that is, that they are less
+  // than the maximum bucket.
+  histogram_tester.ExpectBucketCount(
+      "Extensions.Events.DispatchToAckTime.ExtensionEventPage3.Active",
+      /*sample=*/base::Minutes(5).InMicroseconds(),
+      /*expected_count=*/0);
+}
+
+// Tests that an inactive event page will emit the proper dispatch time metric.
+IN_PROC_BROWSER_TEST_F(EventMetricsBrowserTest,
+                       EventPageDispatchToAckTimeInactive) {
+  ASSERT_TRUE(embedded_test_server()->Start());
+  // Minimize background page expiration time so that the event page will
+  // suspend/idle quickly for the test.
+  ProcessManager::SetEventPageIdleTimeForTesting(1);
+  ProcessManager::SetEventPageSuspendingTimeForTesting(1);
+
+  ExtensionTestMessageListener extension_oninstall_listener_fired(
+      "installed listener fired");
+  scoped_refptr<const Extension> extension =
+      LoadExtension(test_data_dir_.AppendASCII("events/metrics/web_navigation"),
+                    {.context_type = ContextType::kEventPage});
+  ASSERT_TRUE(extension);
+  // This ensures that we wait until the the browser receives the ack from the
+  // renderer. This prevents unexpected histogram emits later.
+  ASSERT_TRUE(extension_oninstall_listener_fired.WaitUntilSatisfied());
+
+  ExtensionBackgroundPageWaiter(profile(), *extension)
+      .WaitForBackgroundClosed();
+  ProcessManager* process_manager = ProcessManager::Get(profile());
+  ASSERT_TRUE(process_manager->IsEventPageSuspended(extension->id()));
+
+  base::HistogramTester histogram_tester;
+  ExtensionTestMessageListener test_event_listener_fired("listener fired");
+  // Navigate somewhere to trigger the webNavigation.onBeforeRequest event to
+  // the extension listener.
+  ASSERT_TRUE(ui_test_utils::NavigateToURL(
+      browser(),
+      embedded_test_server()->GetURL("example.com", "/simple.html")));
+  ASSERT_TRUE(test_event_listener_fired.WaitUntilSatisfied());
+
+  // Call to webNavigation.onCompleted expected.
+  histogram_tester.ExpectTotalCount(
+      "Extensions.Events.DispatchToAckTime.ExtensionEventPage3.Inactive",
+      /*expected_count=*/1);
+  histogram_tester.ExpectTotalCount(
+      "Extensions.Events.DispatchToAckTime.ExtensionEventPage3.Active",
+      /*expected_count=*/0);
+  // Verify that the recorded values are sane -- that is, that they are less
+  // than the maximum bucket.
+  histogram_tester.ExpectBucketCount(
+      "Extensions.Events.DispatchToAckTime.ExtensionEventPage3.Inactive",
+      /*sample=*/base::Minutes(5).InMicroseconds(),
+      /*expected_count=*/0);
+}
+
+// Tests that an active service worker will emit the proper dispatch time
+// metric.
+IN_PROC_BROWSER_TEST_F(EventMetricsBrowserTest,
+                       ServiceWorkerDispatchToAckTimeActive) {
+  ASSERT_TRUE(embedded_test_server()->Start());
+  ExtensionTestMessageListener extension_oninstall_listener_fired(
+      "installed listener fired");
+  // Load the extension for the particular context type. The manifest
+  // file is for a legacy event page-based extension. LoadExtension will
+  // modify the extension for the kServiceWorker case.
+  const Extension* extension =
+      LoadExtension(test_data_dir_.AppendASCII("events/metrics/web_navigation"),
+                    {.context_type = ContextType::kServiceWorker});
+  ASSERT_TRUE(extension);
+  // This ensures that we wait until the the browser receives the ack from the
+  // renderer. This prevents unexpected histogram emits later.
+  ASSERT_TRUE(extension_oninstall_listener_fired.WaitUntilSatisfied());
+  ASSERT_TRUE(content::CheckServiceWorkerIsRunning(
+      // The first SW version ID is always 0.
+      GetServiceWorkerContext(), /*service_worker_version_id=*/0));
+
+  base::HistogramTester histogram_tester;
+  ExtensionTestMessageListener test_event_listener_fired("listener fired");
+  // Navigate somewhere to trigger the webNavigation.onBeforeRequest event to
+  // the extension listener.
+  ASSERT_TRUE(ui_test_utils::NavigateToURL(
+      browser(),
+      embedded_test_server()->GetURL("example.com", "/simple.html")));
+  ASSERT_TRUE(test_event_listener_fired.WaitUntilSatisfied());
+
+  // Call to webNavigation.onCompleted expected.
+  histogram_tester.ExpectTotalCount(
+      "Extensions.Events.DispatchToAckTime.ExtensionServiceWorker2.Active",
+      /*expected_count=*/1);
+  // Verify that the recorded values are sane -- that is, that they are less
+  // than the maximum bucket.
+  histogram_tester.ExpectBucketCount(
+      "Extensions.Events.DispatchToAckTime.ExtensionServiceWorker2.Active",
+      /*sample=*/base::Minutes(5).InMicroseconds(), /*expected_count=*/0);
+  histogram_tester.ExpectTotalCount(
+      "Extensions.Events.DispatchToAckTime.ExtensionServiceWorker2.Inactive",
+      /*expected_count=*/0);
+}
+
+// Tests that an inactive service worker will emit the proper dispatch time
+// metric.
+IN_PROC_BROWSER_TEST_F(EventMetricsBrowserTest,
+                       ServiceWorkerDispatchToAckTimeInactive) {
+  ASSERT_TRUE(embedded_test_server()->Start());
+  constexpr char kTestExtensionId[] = "iegclhlplifhodhkoafiokenjoapiobj";
+  // Stop the service worker to make it inactive.
+  TestWorkerStatusObserver test_worker_start_stop_observer(profile(),
+                                                           kTestExtensionId);
+  ExtensionTestMessageListener extension_oninstall_listener_fired(
+      "installed listener fired");
+  // We need to load an extension where we know the extensions ID so that we
+  // can correctly observe when the worker starts and stops.
+  const Extension* extension = LoadExtension(
+      test_data_dir_.AppendASCII("events/reliability/service_worker"),
+      {.wait_for_registration_stored = true});
+  ASSERT_TRUE(extension);
+  // This ensures that we wait until the the browser receives the ack from the
+  // renderer. This prevents unexpected histogram emits later.
+  ASSERT_TRUE(extension_oninstall_listener_fired.WaitUntilSatisfied());
+  test_worker_start_stop_observer.WaitForWorkerStarted();
+
+  browsertest_util::StopServiceWorkerForExtensionGlobalScope(profile(),
+                                                             kTestExtensionId);
+  test_worker_start_stop_observer.WaitForWorkerStopped();
+  ASSERT_TRUE(content::CheckServiceWorkerIsStopped(
+      GetServiceWorkerContext(),
+      test_worker_start_stop_observer.test_worker_version_id()));
+
+  base::HistogramTester histogram_tester;
+  ExtensionTestMessageListener test_event_listener_fired("listener fired");
+  // Navigate somewhere to trigger the webNavigation.onBeforeRequest event to
+  // the extension listener.
+  ASSERT_TRUE(ui_test_utils::NavigateToURL(
+      browser(),
+      embedded_test_server()->GetURL("example.com", "/simple.html")));
+  ASSERT_TRUE(test_event_listener_fired.WaitUntilSatisfied());
+
+  // Call to webNavigation.onCompleted expected.
+  histogram_tester.ExpectTotalCount(
+      "Extensions.Events.DispatchToAckTime.ExtensionServiceWorker2.Inactive",
+      /*expected_count=*/1);
+  histogram_tester.ExpectTotalCount(
+      "Extensions.Events.DispatchToAckTime.ExtensionServiceWorker2.Active",
+      /*expected_count=*/0);
+  // Verify that the recorded values are sane -- that is, that they are less
+  // than the maximum bucket.
+  histogram_tester.ExpectBucketCount(
+      "Extensions.Events.DispatchToAckTime.ExtensionServiceWorker2.Inactive",
+      /*sample=*/base::Minutes(5).InMicroseconds(),
+      /*expected_count=*/0);
+}
+
 class EventMetricsDispatchToSenderBrowserTest
     : public ExtensionBrowserTest,
       public testing::WithParamInterface<ContextType> {
diff --git a/chrome/browser/extensions/extension_assets_manager_chromeos.cc b/chrome/browser/extensions/extension_assets_manager_chromeos.cc
index cac1e71..6436b24d 100644
--- a/chrome/browser/extensions/extension_assets_manager_chromeos.cc
+++ b/chrome/browser/extensions/extension_assets_manager_chromeos.cc
@@ -60,7 +60,7 @@
     raw_ptr<Profile, ExperimentalAsh> profile;
     ExtensionAssetsManager::InstallExtensionCallback callback;
   };
-  typedef std::vector<PendingInstallInfo> PendingInstallList;
+  using PendingInstallList = std::vector<PendingInstallInfo>;
 
   ExtensionAssetsManagerHelper(const ExtensionAssetsManagerHelper&) = delete;
   ExtensionAssetsManagerHelper& operator=(const ExtensionAssetsManagerHelper&) =
@@ -108,14 +108,14 @@
  private:
   friend struct base::DefaultSingletonTraits<ExtensionAssetsManagerHelper>;
 
-  ExtensionAssetsManagerHelper() {}
-  ~ExtensionAssetsManagerHelper() {}
+  ExtensionAssetsManagerHelper() = default;
+  ~ExtensionAssetsManagerHelper() = default;
 
   // Extension ID + version pair.
-  typedef std::pair<std::string, std::string> InstallItem;
+  using InstallItem = std::pair<std::string, std::string>;
 
   // Queue of pending installs in progress.
-  typedef std::map<InstallItem, std::vector<PendingInstallInfo> > InstallQueue;
+  using InstallQueue = std::map<InstallItem, std::vector<PendingInstallInfo>>;
 
   InstallQueue install_queue_;
 };
diff --git a/chrome/browser/extensions/extension_commands_global_registry_apitest.cc b/chrome/browser/extensions/extension_commands_global_registry_apitest.cc
index a46c36c..2ec4e1a3 100644
--- a/chrome/browser/extensions/extension_commands_global_registry_apitest.cc
+++ b/chrome/browser/extensions/extension_commands_global_registry_apitest.cc
@@ -18,7 +18,7 @@
 
 namespace extensions {
 
-typedef ExtensionApiTest GlobalCommandsApiTest;
+using GlobalCommandsApiTest = ExtensionApiTest;
 
 // Test the basics of global commands and make sure they work when Chrome
 // doesn't have focus. Also test that non-global commands are not treated as
diff --git a/chrome/browser/extensions/extension_garbage_collector.cc b/chrome/browser/extensions/extension_garbage_collector.cc
index b6cef176..a1fab5d6 100644
--- a/chrome/browser/extensions/extension_garbage_collector.cc
+++ b/chrome/browser/extensions/extension_garbage_collector.cc
@@ -49,7 +49,7 @@
 // garbage collected.
 constexpr base::TimeDelta kGarbageCollectStartupDelay = base::Seconds(30);
 
-typedef std::multimap<std::string, base::FilePath> ExtensionPathsMultimap;
+using ExtensionPathsMultimap = std::multimap<std::string, base::FilePath>;
 
 void CheckExtensionDirectory(const base::FilePath& path,
                              const ExtensionPathsMultimap& extension_paths) {
diff --git a/chrome/browser/extensions/extension_install_prompt_browsertest.cc b/chrome/browser/extensions/extension_install_prompt_browsertest.cc
index 83644c2..0a8bdd2 100644
--- a/chrome/browser/extensions/extension_install_prompt_browsertest.cc
+++ b/chrome/browser/extensions/extension_install_prompt_browsertest.cc
@@ -28,7 +28,7 @@
 
 }  // namespace
 
-typedef InProcessBrowserTest ExtensionInstallPromptBrowserTest;
+using ExtensionInstallPromptBrowserTest = InProcessBrowserTest;
 
 // Test that ExtensionInstallPrompt aborts the install if the web contents which
 // were passed to the ExtensionInstallPrompt constructor get destroyed.
diff --git a/chrome/browser/extensions/extension_special_storage_policy_unittest.cc b/chrome/browser/extensions/extension_special_storage_policy_unittest.cc
index e98ff74..2213fbc 100644
--- a/chrome/browser/extensions/extension_special_storage_policy_unittest.cc
+++ b/chrome/browser/extensions/extension_special_storage_policy_unittest.cc
@@ -32,7 +32,7 @@
 using extensions::mojom::ManifestLocation;
 using storage::SpecialStoragePolicy;
 
-typedef SpecialStoragePolicy::StoragePolicy StoragePolicy;
+using StoragePolicy = SpecialStoragePolicy::StoragePolicy;
 
 namespace keys = extensions::manifest_keys;
 
diff --git a/chrome/browser/extensions/extension_startup_browsertest.cc b/chrome/browser/extensions/extension_startup_browsertest.cc
index 41da850..681f875 100644
--- a/chrome/browser/extensions/extension_startup_browsertest.cc
+++ b/chrome/browser/extensions/extension_startup_browsertest.cc
@@ -268,7 +268,7 @@
 // ExtensionsStartupTest
 // Ensures that we can startup the browser with --enable-extensions and some
 // extensions installed and see them run and do basic things.
-typedef ExtensionStartupTestBase ExtensionStartupTest;
+using ExtensionStartupTest = ExtensionStartupTestBase;
 
 IN_PROC_BROWSER_TEST_F(ExtensionStartupTest, Test) {
   WaitForServicesToStart(num_expected_extensions_, true);
diff --git a/chrome/browser/extensions/extension_view_host_factory_browsertest.cc b/chrome/browser/extensions/extension_view_host_factory_browsertest.cc
index 4d2a34e1..49e5bdc 100644
--- a/chrome/browser/extensions/extension_view_host_factory_browsertest.cc
+++ b/chrome/browser/extensions/extension_view_host_factory_browsertest.cc
@@ -15,7 +15,7 @@
 
 namespace extensions {
 
-typedef ExtensionBrowserTest ExtensionViewHostFactoryTest;
+using ExtensionViewHostFactoryTest = ExtensionBrowserTest;
 
 // Tests that ExtensionHosts are created with the correct type and profiles.
 IN_PROC_BROWSER_TEST_F(ExtensionViewHostFactoryTest, CreateExtensionHosts) {
diff --git a/chrome/browser/extensions/omaha_attributes_handler.h b/chrome/browser/extensions/omaha_attributes_handler.h
index 234d59d..1274c10 100644
--- a/chrome/browser/extensions/omaha_attributes_handler.h
+++ b/chrome/browser/extensions/omaha_attributes_handler.h
@@ -21,7 +21,8 @@
 
 // These values are logged to UMA. Entries should not be renumbered and
 // numeric values should never be reused. Please keep in sync with
-// "ExtensionUpdateCheckDataKey" in src/tools/metrics/histograms/enums.xml.
+// "ExtensionUpdateCheckDataKey" in
+// src/tools/metrics/histograms/metadata/extensions/enums.xml.
 enum class ExtensionUpdateCheckDataKey {
   // No update check data keys were found so no action was taken.
   kNoKey = 0,
diff --git a/chrome/browser/file_system_access/chrome_file_system_access_permission_context.cc b/chrome/browser/file_system_access/chrome_file_system_access_permission_context.cc
index ab9331bd..92601a19 100644
--- a/chrome/browser/file_system_access/chrome_file_system_access_permission_context.cc
+++ b/chrome/browser/file_system_access/chrome_file_system_access_permission_context.cc
@@ -1850,6 +1850,20 @@
   }
 }
 
+void ChromeFileSystemAccessPermissionContext::
+    OnFileCreatedFromShowSaveFilePicker(const GURL& file_picker_binding_context,
+                                        const storage::FileSystemURL& url) {
+  file_created_from_show_save_file_picker_callback_list_.Notify(
+      file_picker_binding_context, url);
+}
+
+base::CallbackListSubscription ChromeFileSystemAccessPermissionContext::
+    AddFileCreatedFromShowSaveFilePickerCallback(
+        FileCreatedFromShowSaveFilePickerCallbackList::CallbackType callback) {
+  return file_created_from_show_save_file_picker_callback_list_.Add(
+      std::move(callback));
+}
+
 ChromeFileSystemAccessPermissionContext::Grants
 ChromeFileSystemAccessPermissionContext::ConvertObjectsToGrants(
     const std::vector<std::unique_ptr<Object>> objects) {
diff --git a/chrome/browser/file_system_access/chrome_file_system_access_permission_context.h b/chrome/browser/file_system_access/chrome_file_system_access_permission_context.h
index 201281c..f37583f1 100644
--- a/chrome/browser/file_system_access/chrome_file_system_access_permission_context.h
+++ b/chrome/browser/file_system_access/chrome_file_system_access_permission_context.h
@@ -8,6 +8,7 @@
 #include <map>
 #include <vector>
 
+#include "base/callback_list.h"
 #include "base/files/file_path.h"
 #include "base/memory/raw_ptr.h"
 #include "base/scoped_observation.h"
@@ -65,6 +66,10 @@
 #endif
 {
  public:
+  using FileCreatedFromShowSaveFilePickerCallbackList =
+      base::RepeatingCallbackList<void(const GURL&,
+                                       const storage::FileSystemURL&)>;
+
   // Represents the type of persisted grant. This value should not be stored
   // and should only be used to check the state of persisted grants,
   // using the `GetPersistedGrantType()` method.
@@ -173,7 +178,6 @@
       base::OnceCallback<void(AfterWriteCheckResult)> callback) override;
   bool CanObtainReadPermission(const url::Origin& origin) override;
   bool CanObtainWritePermission(const url::Origin& origin) override;
-
   void SetLastPickedDirectory(const url::Origin& origin,
                               const std::string& id,
                               const base::FilePath& path,
@@ -183,13 +187,21 @@
   base::FilePath GetWellKnownDirectoryPath(
       blink::mojom::WellKnownDirectory directory,
       const url::Origin& origin) override;
-
   std::u16string GetPickerTitle(
       const blink::mojom::FilePickerOptionsPtr& options) override;
-
   void NotifyEntryMoved(const url::Origin& origin,
                         const base::FilePath& old_path,
                         const base::FilePath& new_path) override;
+  void OnFileCreatedFromShowSaveFilePicker(
+      const GURL& file_picker_binding_context,
+      const storage::FileSystemURL& url) override;
+
+  // Registers a subscriber to be notified of file creation events originating
+  // from `window.showSaveFilePicker()` until the returned subscription is
+  // destroyed.
+  [[nodiscard]] base::CallbackListSubscription
+  AddFileCreatedFromShowSaveFilePickerCallback(
+      FileCreatedFromShowSaveFilePickerCallbackList::CallbackType callback);
 
   ContentSetting GetReadGuardContentSetting(const url::Origin& origin) const;
   ContentSetting GetWriteGuardContentSetting(const url::Origin& origin) const;
@@ -480,6 +492,11 @@
 
   const raw_ptr<const base::Clock> clock_;
 
+  // Subscribers to notify of file creation events originating from
+  // `window.showSaveFilePicker()`.
+  FileCreatedFromShowSaveFilePickerCallbackList
+      file_created_from_show_save_file_picker_callback_list_;
+
   base::WeakPtrFactory<ChromeFileSystemAccessPermissionContext> weak_factory_{
       this};
 };
diff --git a/chrome/browser/file_system_access/chrome_file_system_access_permission_context_browsertest.cc b/chrome/browser/file_system_access/chrome_file_system_access_permission_context_browsertest.cc
index 1791ce7..eba8eee 100644
--- a/chrome/browser/file_system_access/chrome_file_system_access_permission_context_browsertest.cc
+++ b/chrome/browser/file_system_access/chrome_file_system_access_permission_context_browsertest.cc
@@ -10,6 +10,7 @@
 #include "base/files/file_util.h"
 #include "base/files/scoped_temp_dir.h"
 #include "base/test/test_file_util.h"
+#include "base/test/test_future.h"
 #include "chrome/browser/apps/platform_apps/app_browsertest_util.h"
 #include "chrome/browser/file_system_access/file_system_access_permission_request_manager.h"
 #include "chrome/browser/profiles/profile.h"
@@ -131,6 +132,53 @@
   base::ScopedTempDir temp_dir_;
 };
 
+// Tests that subscribers are notified of file creation events originating from
+// `window.showSaveFilePicker()`.
+IN_PROC_BROWSER_TEST_F(
+    ChromeFileSystemAccessPermissionContextPrerenderingBrowserTest,
+    NotifyFileCreatedFromShowSaveFilePicker) {
+  // Install fake file picker factory.
+  const base::FilePath expected_file_path = CreateTestFile("");
+  ui::SelectFileDialog::SetFactory(
+      std::make_unique<content::FakeSelectFileDialogFactory>(
+          std::vector<base::FilePath>{expected_file_path}));
+
+  // Initialize permission context.
+  Profile* const profile = browser()->profile();
+  TestFileSystemAccessPermissionContext permission_context(profile);
+  content::SetFileSystemAccessPermissionContext(profile, &permission_context);
+  FileSystemAccessPermissionRequestManager::FromWebContents(GetWebContents())
+      ->set_auto_response_for_test(permissions::PermissionAction::GRANTED);
+
+  // Subscribe to be notified of file creation events.
+  base::test::TestFuture<const GURL&, const storage::FileSystemURL&>
+      file_created_from_show_save_file_picker_future;
+  base::CallbackListSubscription
+      file_created_from_show_save_file_picker_subscription_ =
+          permission_context.AddFileCreatedFromShowSaveFilePickerCallback(
+              file_created_from_show_save_file_picker_future
+                  .GetRepeatingCallback());
+
+  // Navigate web contents.
+  const GURL expected_url = embedded_test_server()->GetURL("/empty.html");
+  ASSERT_NE(ui_test_utils::NavigateToURL(browser(), expected_url), nullptr);
+
+  // Invoke `window.showSaveFilePicker()` from web contents. Note that because
+  // a fake file picker factory was installed, this should result in the
+  // `expected_file_path` being picked without the need for user interaction.
+  ASSERT_TRUE(content::ExecJs(GetWebContents(),
+                              "(() => { self.showSaveFilePicker({}); })()"));
+
+  // Wait for and verify details of the file creation event.
+  auto [file_picker_binding_context, url] =
+      file_created_from_show_save_file_picker_future.Take();
+  EXPECT_EQ(file_picker_binding_context, expected_url);
+  EXPECT_EQ(url.path(), expected_file_path);
+
+  // Uninstall fake file picker factory.
+  ui::SelectFileDialog::SetFactory(nullptr);
+}
+
 // Tests that PerformAfterWriteChecks() that is called by
 // 'FileSystemWritableFileStream.close()' works with the RenderFrameHost in an
 // active state, not the prerendered RenderFrameHost.
diff --git a/chrome/browser/flag-metadata.json b/chrome/browser/flag-metadata.json
index 878e9fb..21043fb 100644
--- a/chrome/browser/flag-metadata.json
+++ b/chrome/browser/flag-metadata.json
@@ -585,6 +585,11 @@
     "expiry_milestone": 130
   },
   {
+    "name": "autofill-enable-iban-android-bottom-sheet",
+    "owners": [ "jamessun@google.com", "qihuizhao@google.com", "payments-autofill-team@google.com" ],
+    "expiry_milestone": 130
+  },
+  {
     "name": "autofill-enable-landmark",
     "owners": [ "sebsg@chromium.org" ],
     "expiry_milestone": 126
@@ -3053,6 +3058,11 @@
     "expiry_milestone": 130
   },
   {
+    "name": "enable-magic-stack-android",
+    "owners": [ "hanxi@chromium.org", "xinyiji@chromium.org", "clank-start@chromium.org" ],
+    "expiry_milestone": 130
+  },
+  {
     "name": "enable-managed-configuration-web-api",
     "owners": [ "apotapchuk@chromium.org" ],
     "expiry_milestone": 92
diff --git a/chrome/browser/flag_descriptions.cc b/chrome/browser/flag_descriptions.cc
index 40924336..17adec3 100644
--- a/chrome/browser/flag_descriptions.cc
+++ b/chrome/browser/flag_descriptions.cc
@@ -508,6 +508,11 @@
     "for email OTP authentication, email OTP authentication will be offered as "
     "one of the challenge options.";
 
+const char kAutofillEnableIbanAndroidBottomSheetName[] =
+    "Enable Autofill save IBAN bottom sheet";
+const char kAutofillEnableIbanAndroidBottomSheetDescription[] =
+    "When enabled, the bottom sheet for IBAN save will be displayed.";
+
 const char kAutofillEnableNewCardArtAndNetworkImagesName[] =
     "Enable showing new card art and network images";
 const char kAutofillEnableNewCardArtAndNetworkImagesDescription[] =
@@ -4091,6 +4096,11 @@
 const char kInterestFeedV2HeartsName[] = "Interest Feed v2 Hearts";
 const char kInterestFeedV2HeartsDescription[] = "Enable hearts on Feedv2.";
 
+const char kMagicStackAndroidName[] = "Magic Stack Android";
+const char kMagicStackAndroidDescription[] =
+    "Show a magic stack which contains a list of modules on Start surface and "
+    "NTPs on Android.";
+
 const char kMediaPickerAdoptionStudyName[] = "Android Media Picker Adoption";
 const char kMediaPickerAdoptionStudyDescription[] =
     "Controls how to launch the Android Media Picker (note: This flag is "
diff --git a/chrome/browser/flag_descriptions.h b/chrome/browser/flag_descriptions.h
index 85b5b542..08d5ccd6f 100644
--- a/chrome/browser/flag_descriptions.h
+++ b/chrome/browser/flag_descriptions.h
@@ -306,6 +306,9 @@
 extern const char kAutofillEnableEmailOtpForVcnYellowPathName[];
 extern const char kAutofillEnableEmailOtpForVcnYellowPathDescription[];
 
+extern const char kAutofillEnableIbanAndroidBottomSheetName[];
+extern const char kAutofillEnableIbanAndroidBottomSheetDescription[];
+
 extern const char kAutofillEnableNewCardArtAndNetworkImagesName[];
 extern const char kAutofillEnableNewCardArtAndNetworkImagesDescription[];
 
@@ -807,9 +810,6 @@
 extern const char kDownloadsMigrateToJobsAPIName[];
 extern const char kDownloadsMigrateToJobsAPIDescription[];
 
-extern const char kEnablePenetratingImageSelectionName[];
-extern const char kEnablePenetratingImageSelectionDescription[];
-
 extern const char kEnablePerfettoSystemTracingName[];
 extern const char kEnablePerfettoSystemTracingDescription[];
 
@@ -2391,6 +2391,9 @@
 extern const char kInterestFeedV2HeartsName[];
 extern const char kInterestFeedV2HeartsDescription[];
 
+extern const char kMagicStackAndroidName[];
+extern const char kMagicStackAndroidDescription[];
+
 extern const char kMediaPickerAdoptionStudyName[];
 extern const char kMediaPickerAdoptionStudyDescription[];
 
diff --git a/chrome/browser/flags/android/chrome_feature_list.cc b/chrome/browser/flags/android/chrome_feature_list.cc
index 7700de5..0e8f548 100644
--- a/chrome/browser/flags/android/chrome_feature_list.cc
+++ b/chrome/browser/flags/android/chrome_feature_list.cc
@@ -219,6 +219,7 @@
     &kInstantStart,
     &kLensCameraAssistedSearch,
     &kLensOnQuickActionSearchWidget,
+    &kMagicStackAndroid,
     &kNewTabSearchEngineUrlAndroid,
     &kNotificationPermissionVariant,
     &kNotificationPermissionBottomSheet,
@@ -630,6 +631,10 @@
 
 BASE_FEATURE(kInstantStart, "InstantStart", base::FEATURE_DISABLED_BY_DEFAULT);
 
+BASE_FEATURE(kMagicStackAndroid,
+             "MagicStackAndroid",
+             base::FEATURE_DISABLED_BY_DEFAULT);
+
 BASE_FEATURE(kNewTabSearchEngineUrlAndroid,
              "NewTabSearchEngineUrlAndroid",
              base::FEATURE_DISABLED_BY_DEFAULT);
diff --git a/chrome/browser/flags/android/chrome_feature_list.h b/chrome/browser/flags/android/chrome_feature_list.h
index afa0fe4..be97038b 100644
--- a/chrome/browser/flags/android/chrome_feature_list.h
+++ b/chrome/browser/flags/android/chrome_feature_list.h
@@ -92,6 +92,7 @@
 BASE_DECLARE_FEATURE(kLensCameraAssistedSearch);
 BASE_DECLARE_FEATURE(kLensOnQuickActionSearchWidget);
 BASE_DECLARE_FEATURE(kLocationBarModelOptimizations);
+BASE_DECLARE_FEATURE(kMagicStackAndroid);
 BASE_DECLARE_FEATURE(kNewTabSearchEngineUrlAndroid);
 BASE_DECLARE_FEATURE(kNotificationPermissionVariant);
 BASE_DECLARE_FEATURE(kNotificationPermissionBottomSheet);
diff --git a/chrome/browser/flags/android/java/src/org/chromium/chrome/browser/flags/ChromeFeatureList.java b/chrome/browser/flags/android/java/src/org/chromium/chrome/browser/flags/ChromeFeatureList.java
index a418bf5..3d8722d 100644
--- a/chrome/browser/flags/android/java/src/org/chromium/chrome/browser/flags/ChromeFeatureList.java
+++ b/chrome/browser/flags/android/java/src/org/chromium/chrome/browser/flags/ChromeFeatureList.java
@@ -274,6 +274,7 @@
     public static final String LENS_ON_QUICK_ACTION_SEARCH_WIDGET = "LensOnQuickActionSearchWidget";
     public static final String LOOKALIKE_NAVIGATION_URL_SUGGESTIONS_UI =
             "LookalikeUrlNavigationSuggestionsUI";
+    public static final String MAGIC_STACK_ANDROID = "MagicStackAndroid";
     public static final String MESSAGES_FOR_ANDROID_ADS_BLOCKED = "MessagesForAndroidAdsBlocked";
     public static final String MESSAGES_FOR_ANDROID_INFRASTRUCTURE =
             "MessagesForAndroidInfrastructure";
@@ -508,6 +509,7 @@
     public static final CachedFlag sInstantStart = new CachedFlag(INSTANT_START, false);
     public static final CachedFlag sHideTabOnTabSwitcher =
             new CachedFlag(HIDE_TAB_ON_TAB_SWITCHER, true);
+    public static final CachedFlag sMagicStackAndroid = new CachedFlag(MAGIC_STACK_ANDROID, false);
     public static final CachedFlag sNewTabSearchEngineUrlAndroid =
             new CachedFlag(NEW_TAB_SEARCH_ENGINE_URL_ANDROID, false);
     public static final CachedFlag sPriceChangeModule = new CachedFlag(PRICE_CHANGE_MODULE, false);
@@ -606,6 +608,7 @@
                     sIncognitoReauthenticationForAndroid,
                     sInstantStart,
                     sHideTabOnTabSwitcher,
+                    sMagicStackAndroid,
                     sNewTabSearchEngineUrlAndroid,
                     sPaintPreviewNewColdStartHeuristic,
                     sPriceChangeModule,
diff --git a/chrome/browser/headless/headless_mode_protocol_browsertest.cc b/chrome/browser/headless/headless_mode_protocol_browsertest.cc
index 09472541..553d305 100644
--- a/chrome/browser/headless/headless_mode_protocol_browsertest.cc
+++ b/chrome/browser/headless/headless_mode_protocol_browsertest.cc
@@ -204,6 +204,7 @@
 }
 
 HEADLESS_MODE_PROTOCOL_TEST(DomFocus, "input/dom-focus.js")
+HEADLESS_MODE_PROTOCOL_TEST(FocusEvent, "input/focus-event.js")
 
 // Flaky crbug/1431857
 HEADLESS_MODE_PROTOCOL_TEST(DISABLED_FocusBlurNotifications,
diff --git a/chrome/browser/headless/test/data/protocol/input/focus-event-expected.txt b/chrome/browser/headless/test/data/protocol/input/focus-event-expected.txt
new file mode 100644
index 0000000..db202a1
--- /dev/null
+++ b/chrome/browser/headless/test/data/protocol/input/focus-event-expected.txt
@@ -0,0 +1,2 @@
+Tests focus event.
+Focus event fired
\ No newline at end of file
diff --git a/chrome/browser/headless/test/data/protocol/input/focus-event.js b/chrome/browser/headless/test/data/protocol/input/focus-event.js
new file mode 100644
index 0000000..7e51345
--- /dev/null
+++ b/chrome/browser/headless/test/data/protocol/input/focus-event.js
@@ -0,0 +1,27 @@
+// Copyright 2023 The Chromium Authors
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+(async function(testRunner) {
+  const {session} = await testRunner.startBlank('Tests focus event.');
+
+  testRunner.log(await session.evaluateAsync(tryFocusEvent));
+
+  testRunner.completeTest();
+
+  async function tryFocusEvent() {
+    const input = document.createElement('input');
+    document.body.appendChild(input);
+
+    let eventFired = false;
+    input.addEventListener('focus', () => {
+      eventFired = true;
+    });
+
+    input.focus();
+
+    await new Promise(requestAnimationFrame);
+
+    return eventFired ? 'Focus event fired' : 'Focus event NOT fired';
+  }
+})
diff --git a/chrome/browser/ip_protection/ip_protection_config_http.cc b/chrome/browser/ip_protection/ip_protection_config_http.cc
index 38f1da0..0024e6a 100644
--- a/chrome/browser/ip_protection/ip_protection_config_http.cc
+++ b/chrome/browser/ip_protection/ip_protection_config_http.cc
@@ -4,6 +4,7 @@
 
 #include "chrome/browser/ip_protection/ip_protection_config_http.h"
 
+#include <optional>
 #include <string>
 
 #include "base/strings/strcat.h"
@@ -181,8 +182,10 @@
   std::move(callback)(std::move(bsa_response));
 }
 
-void IpProtectionConfigHttp::GetProxyConfig(GetProxyConfigCallback callback,
-                                            bool for_testing) {
+void IpProtectionConfigHttp::GetProxyConfig(
+    std::optional<std::string> oauth_token,
+    GetProxyConfigCallback callback,
+    bool for_testing) {
 #if !BUILDFLAG(GOOGLE_CHROME_BRANDING)
   if (!for_testing) {
     std::move(callback).Run(absl::InternalError(
@@ -213,6 +216,11 @@
                                       google_apis::GetAPIKey());
   resource_request->headers.SetHeader(net::HttpRequestHeaders::kAccept,
                                       kProtobufContentType);
+  if (oauth_token.has_value()) {
+    resource_request->headers.SetHeader(
+        net::HttpRequestHeaders::kAuthorization,
+        base::StrCat({"Bearer ", oauth_token.value()}));
+  }
 
   std::unique_ptr<network::SimpleURLLoader> url_loader =
       network::SimpleURLLoader::Create(std::move(resource_request),
diff --git a/chrome/browser/ip_protection/ip_protection_config_http.h b/chrome/browser/ip_protection/ip_protection_config_http.h
index 5fee673..9f0fe45 100644
--- a/chrome/browser/ip_protection/ip_protection_config_http.h
+++ b/chrome/browser/ip_protection/ip_protection_config_http.h
@@ -5,6 +5,7 @@
 #ifndef CHROME_BROWSER_IP_PROTECTION_IP_PROTECTION_CONFIG_HTTP_H_
 #define CHROME_BROWSER_IP_PROTECTION_IP_PROTECTION_CONFIG_HTTP_H_
 
+#include <optional>
 #include <string>
 
 #include "base/memory/scoped_refptr.h"
@@ -38,7 +39,8 @@
 
   using GetProxyConfigCallback = base::OnceCallback<void(
       absl::StatusOr<ip_protection::GetProxyConfigResponse>)>;
-  virtual void GetProxyConfig(GetProxyConfigCallback callback,
+  virtual void GetProxyConfig(std::optional<std::string> oauth_token,
+                              GetProxyConfigCallback callback,
                               bool for_testing = false);
 
  private:
diff --git a/chrome/browser/ip_protection/ip_protection_config_http_unittest.cc b/chrome/browser/ip_protection/ip_protection_config_http_unittest.cc
index ef6aa08..5be8d7a 100644
--- a/chrome/browser/ip_protection/ip_protection_config_http_unittest.cc
+++ b/chrome/browser/ip_protection/ip_protection_config_http_unittest.cc
@@ -193,7 +193,40 @@
 
   base::test::TestFuture<absl::StatusOr<ip_protection::GetProxyConfigResponse>>
       result_future;
-  http_fetcher_->GetProxyConfig(result_future.GetCallback(),
+  http_fetcher_->GetProxyConfig(std::nullopt, result_future.GetCallback(),
+                                /*for_testing=*/true);
+
+  absl::StatusOr<ip_protection::GetProxyConfigResponse> result =
+      result_future.Get();
+
+  ASSERT_TRUE(result.ok());
+  EXPECT_EQ(2, result->first_hop_hostnames_size());
+  EXPECT_EQ("host1", result->first_hop_hostnames(0));
+  EXPECT_EQ("host2", result->first_hop_hostnames(1));
+  EXPECT_EQ("proxyA", result->proxy_chain().at(0).proxy_a());
+  EXPECT_EQ("proxyB", result->proxy_chain().at(0).proxy_b());
+}
+
+TEST_F(IpProtectionConfigHttpTest, GetProxyConfigSuccessWithOAuthToken) {
+  ip_protection::GetProxyConfigResponse response_proto;
+  response_proto.add_first_hop_hostnames("host1");
+  response_proto.add_first_hop_hostnames("host2");
+  std::string oauth_token = "token";
+
+  ip_protection::GetProxyConfigResponse_ProxyChain* proxyChain =
+      response_proto.add_proxy_chain();
+  proxyChain->set_proxy_a("proxyA");
+  proxyChain->set_proxy_b("proxyB");
+  std::string response_str = response_proto.SerializeAsString();
+
+  auto head = network::mojom::URLResponseHead::New();
+  test_url_loader_factory_.AddResponse(
+      token_server_get_proxy_config_url_, std::move(head), response_str,
+      network::URLLoaderCompletionStatus(net::OK));
+
+  base::test::TestFuture<absl::StatusOr<ip_protection::GetProxyConfigResponse>>
+      result_future;
+  http_fetcher_->GetProxyConfig(oauth_token, result_future.GetCallback(),
                                 /*for_testing=*/true);
 
   absl::StatusOr<ip_protection::GetProxyConfigResponse> result =
@@ -218,7 +251,7 @@
 
   base::test::TestFuture<absl::StatusOr<ip_protection::GetProxyConfigResponse>>
       result_future;
-  http_fetcher_->GetProxyConfig(result_future.GetCallback(),
+  http_fetcher_->GetProxyConfig(std::nullopt, result_future.GetCallback(),
                                 /*for_testing=*/true);
 
   absl::StatusOr<ip_protection::GetProxyConfigResponse> result =
@@ -231,13 +264,14 @@
 
 TEST_F(IpProtectionConfigHttpTest, GetProxyConfigFails) {
   auto head = network::mojom::URLResponseHead::New();
+
   test_url_loader_factory_.AddResponse(
       token_server_get_proxy_config_url_, std::move(head), "uhoh",
       network::URLLoaderCompletionStatus(net::HTTP_BAD_REQUEST));
 
   base::test::TestFuture<absl::StatusOr<ip_protection::GetProxyConfigResponse>>
       result_future;
-  http_fetcher_->GetProxyConfig(result_future.GetCallback(),
+  http_fetcher_->GetProxyConfig(std::nullopt, result_future.GetCallback(),
                                 /*for_testing=*/true);
 
   absl::StatusOr<ip_protection::GetProxyConfigResponse> result =
diff --git a/chrome/browser/ip_protection/ip_protection_config_provider.cc b/chrome/browser/ip_protection/ip_protection_config_provider.cc
index 6004efd..6e09a17 100644
--- a/chrome/browser/ip_protection/ip_protection_config_provider.cc
+++ b/chrome/browser/ip_protection/ip_protection_config_provider.cc
@@ -5,6 +5,7 @@
 #include "chrome/browser/ip_protection/ip_protection_config_provider.h"
 
 #include <memory>
+#include <optional>
 
 #include "base/base64.h"
 #include "base/metrics/histogram_functions.h"
@@ -97,7 +98,21 @@
     return;
   }
 
-  RequestOAuthToken(batch_size, proxy_layer, std::move(callback));
+  if (!CanRequestOAuthToken()) {
+    TryGetAuthTokensComplete(
+        absl::nullopt, std::move(callback),
+        IpProtectionTryGetAuthTokensResult::kFailedNoAccount);
+    return;
+  }
+
+  auto oauth_token_fetch_start_time = base::TimeTicks::Now();
+  auto request_token_callback =
+      base::BindOnce(&IpProtectionConfigProvider::
+                         OnRequestOAuthTokenCompletedForTryGetAuthTokens,
+                     weak_ptr_factory_.GetWeakPtr(), batch_size, proxy_layer,
+                     std::move(callback), oauth_token_fetch_start_time);
+
+  RequestOAuthToken(std::move(request_token_callback));
 }
 
 void IpProtectionConfigProvider::GetProxyList(GetProxyListCallback callback) {
@@ -105,61 +120,26 @@
   CHECK(!is_shutting_down_);
   SetUp();
 
-  ip_protection_config_http_->GetProxyConfig(base::BindOnce(
-      [](GetProxyListCallback callback,
-         absl::StatusOr<ip_protection::GetProxyConfigResponse> response) {
-        if (!response.ok()) {
-          VLOG(2) << "IPATP::GetProxyList failed: " << response.status();
-          std::move(callback).Run(absl::nullopt);
-          return;
-        }
-        std::vector<std::vector<std::string>> proxy_list;
-        if (net::features::kIpPrivacyUseProxyChains.Get()) {
-          for (const auto& proxy_chain : response->proxy_chain()) {
-            std::vector<std::string> proxies = {};
-            if (const std::string a_override =
-                    net::features::kIpPrivacyProxyAHostnameOverride.Get();
-                a_override != "") {
-              proxies.push_back(a_override);
-            } else {
-              proxies.push_back(proxy_chain.proxy_a());
-            }
-            if (const std::string b_override =
-                    net::features::kIpPrivacyProxyBHostnameOverride.Get();
-                b_override != "") {
-              proxies.push_back(b_override);
-            } else {
-              // TODO(crbug.com/1491092): Remove check once proxy_b is populated
-              // by Phosphor.
-              if (!proxy_chain.proxy_b().empty()) {
-                proxies.push_back(proxy_chain.proxy_b());
-              }
-            }
-            proxy_list.push_back(std::move(proxies));
-          }
-        } else {
-          for (const auto& hostname : response->first_hop_hostnames()) {
-            proxy_list.push_back({hostname});
-          }
-        }
-        VLOG(2) << "IPATP::GetProxyList got proxy list of length "
-                << proxy_list.size();
-        std::move(callback).Run(std::move(proxy_list));
-      },
-      std::move(callback)));
-}
-
-void IpProtectionConfigProvider::RequestOAuthToken(
-    uint32_t batch_size,
-    network::mojom::IpProtectionProxyLayer proxy_layer,
-    TryGetAuthTokensCallback callback) {
-  if (!identity_manager_->HasPrimaryAccount(signin::ConsentLevel::kSignin)) {
-    TryGetAuthTokensComplete(
-        absl::nullopt, std::move(callback),
-        IpProtectionTryGetAuthTokensResult::kFailedNoAccount);
+  // This feature flag is false by default.
+  if (!net::features::kIpPrivacyIncludeOAuthTokenInGetProxyConfig.Get()) {
+    CallGetProxyConfig(std::move(callback), std::nullopt);
     return;
   }
 
+  if (!CanRequestOAuthToken()) {
+    std::move(callback).Run(absl::nullopt);
+    return;
+  }
+  auto request_token_callback =
+      base::BindOnce(&IpProtectionConfigProvider::
+                         OnRequestOAuthTokenCompletedForGetProxyConfig,
+                     weak_ptr_factory_.GetWeakPtr(), std::move(callback));
+
+  RequestOAuthToken(std::move(request_token_callback));
+}
+
+void IpProtectionConfigProvider::RequestOAuthToken(
+    RequestOAuthTokenCallback callback) {
   // TODO(https://crbug.com/1444621): Add a client side account capabilities
   // check to compliment the server-side checks.
 
@@ -176,7 +156,6 @@
   // alive long enough for the callback to occur, and we will pass a weak
   // pointer to ensure that the callback won't be called if this object gets
   // destroyed.
-  auto oauth_token_fetch_start_time = base::TimeTicks::Now();
   auto oauth_token_fetcher =
       std::make_unique<signin::PrimaryAccountAccessTokenFetcher>(
           /*consumer_name=*/"IpProtectionService", identity_manager_, scopes,
@@ -185,17 +164,13 @@
   oauth_token_fetcher_ptr->Start(base::BindOnce(
       &IpProtectionConfigProvider::OnRequestOAuthTokenCompleted,
       weak_ptr_factory_.GetWeakPtr(), std::move(oauth_token_fetcher),
-      oauth_token_fetch_start_time, batch_size, proxy_layer,
       std::move(callback)));
 }
 
 void IpProtectionConfigProvider::OnRequestOAuthTokenCompleted(
     std::unique_ptr<signin::PrimaryAccountAccessTokenFetcher>
         oauth_token_fetcher,
-    base::TimeTicks oauth_token_fetch_start_time,
-    uint32_t batch_size,
-    network::mojom::IpProtectionProxyLayer proxy_layer,
-    TryGetAuthTokensCallback callback,
+    RequestOAuthTokenCallback callback,
     GoogleServiceAuthError error,
     signin::AccessTokenInfo access_token_info) {
   DCHECK_CURRENTLY_ON(content::BrowserThread::UI);
@@ -203,10 +178,22 @@
     return;
   }
 
+  std::move(callback).Run(error, access_token_info);
+}
+
+void IpProtectionConfigProvider::
+    OnRequestOAuthTokenCompletedForTryGetAuthTokens(
+        uint32_t batch_size,
+        network::mojom::IpProtectionProxyLayer proxy_layer,
+        TryGetAuthTokensCallback callback,
+        base::TimeTicks oauth_token_fetch_start_time,
+        GoogleServiceAuthError error,
+        signin::AccessTokenInfo access_token_info) {
   // If we fail to get an OAuth token don't attempt to fetch from Phosphor as
   // the request is guaranteed to fail.
   if (error.state() != GoogleServiceAuthError::NONE) {
-    VLOG(2) << "IPATP::OnRequestOAuthTokenCompleted got an error: "
+    VLOG(2) << "IPATP::OnRequestOAuthTokenCompletedForTryGetAuthTokens got an "
+               "error: "
             << static_cast<int>(error.state());
     TryGetAuthTokensComplete(
         absl::nullopt, std::move(callback),
@@ -223,6 +210,70 @@
                         std::move(callback));
 }
 
+void IpProtectionConfigProvider::OnRequestOAuthTokenCompletedForGetProxyConfig(
+    GetProxyListCallback callback,
+    GoogleServiceAuthError error,
+    signin::AccessTokenInfo access_token_info) {
+  if (error.state() != GoogleServiceAuthError::NONE) {
+    VLOG(2) << "IPATP::OnRequestOAuthTokenCompletedForGetProxyConfig failed: "
+            << static_cast<int>(error.state());
+    std::move(callback).Run(absl::nullopt);
+    return;
+  }
+
+  CallGetProxyConfig(std::move(callback), access_token_info.token);
+}
+
+void IpProtectionConfigProvider::CallGetProxyConfig(
+    GetProxyListCallback callback,
+    std::optional<std::string> oauth_token) {
+  ip_protection_config_http_->GetProxyConfig(
+      oauth_token,
+      base::BindOnce(
+          [](GetProxyListCallback callback,
+             absl::StatusOr<ip_protection::GetProxyConfigResponse> response) {
+            if (!response.ok()) {
+              VLOG(2) << "IPATP::GetProxyList failed: " << response.status();
+              std::move(callback).Run(absl::nullopt);
+              return;
+            }
+            std::vector<std::vector<std::string>> proxy_list;
+            if (net::features::kIpPrivacyUseProxyChains.Get()) {
+              for (const auto& proxy_chain : response->proxy_chain()) {
+                std::vector<std::string> proxies = {};
+                if (const std::string a_override =
+                        net::features::kIpPrivacyProxyAHostnameOverride.Get();
+                    a_override != "") {
+                  proxies.push_back(a_override);
+                } else {
+                  proxies.push_back(proxy_chain.proxy_a());
+                }
+                if (const std::string b_override =
+                        net::features::kIpPrivacyProxyBHostnameOverride.Get();
+                    b_override != "") {
+                  proxies.push_back(b_override);
+                } else {
+                  // TODO(crbug.com/1491092): Remove check once proxy_b is
+                  // populated by Phosphor.
+                  if (!proxy_chain.proxy_b().empty()) {
+                    proxies.push_back(proxy_chain.proxy_b());
+                  }
+                }
+                proxy_list.push_back(std::move(proxies));
+              }
+            } else {
+              for (const auto& hostname : response->first_hop_hostnames()) {
+                proxy_list.push_back({hostname});
+              }
+            }
+
+            VLOG(2) << "IPATP::GetProxyList got proxy list of length "
+                    << proxy_list.size();
+            std::move(callback).Run(std::move(proxy_list));
+          },
+          std::move(callback)));
+}
+
 void IpProtectionConfigProvider::FetchBlindSignedToken(
     signin::AccessTokenInfo access_token_info,
     uint32_t batch_size,
@@ -542,3 +593,11 @@
     return;
   }
 }
+
+bool IpProtectionConfigProvider::CanRequestOAuthToken() {
+  if (is_shutting_down_) {
+    return false;
+  }
+
+  return identity_manager_->HasPrimaryAccount(signin::ConsentLevel::kSignin);
+}
diff --git a/chrome/browser/ip_protection/ip_protection_config_provider.h b/chrome/browser/ip_protection/ip_protection_config_provider.h
index ba1a065c..22774497 100644
--- a/chrome/browser/ip_protection/ip_protection_config_provider.h
+++ b/chrome/browser/ip_protection/ip_protection_config_provider.h
@@ -6,6 +6,7 @@
 #define CHROME_BROWSER_IP_PROTECTION_IP_PROTECTION_CONFIG_PROVIDER_H_
 
 #include <memory>
+#include <optional>
 #include <string>
 
 #include "base/functional/callback.h"
@@ -127,21 +128,42 @@
   // loops in browser startup.
   void SetUp();
 
+  // Creating a generic callback in order for `RequestOAuthToken()` to work for
+  // `TryGetAuthTokens()` and `GetProxyList()`.
+  using RequestOAuthTokenCallback =
+      base::OnceCallback<void(GoogleServiceAuthError error,
+                              signin::AccessTokenInfo access_token_info)>;
   // Calls the IdentityManager asynchronously to request the OAuth token for the
-  // logged in user.
-  void RequestOAuthToken(uint32_t batch_size,
-                         network::mojom::IpProtectionProxyLayer proxy_layer,
-                         TryGetAuthTokensCallback callback);
+  // logged in user. This method must only be called when
+  // `CanRequestOAuthToken()` returns true.
+  void RequestOAuthToken(RequestOAuthTokenCallback callback);
+  bool CanRequestOAuthToken();
+
   void OnRequestOAuthTokenCompleted(
       std::unique_ptr<signin::PrimaryAccountAccessTokenFetcher>
           oauth_token_fetcher,
-      base::TimeTicks oauth_token_fetch_start_time,
+      RequestOAuthTokenCallback callback,
+      GoogleServiceAuthError error,
+      signin::AccessTokenInfo access_token_info);
+
+  void OnRequestOAuthTokenCompletedForTryGetAuthTokens(
       uint32_t batch_size,
       network::mojom::IpProtectionProxyLayer proxy_layer,
       TryGetAuthTokensCallback callback,
+      base::TimeTicks oauth_token_fetch_start_time,
       GoogleServiceAuthError error,
       signin::AccessTokenInfo access_token_info);
 
+  void OnRequestOAuthTokenCompletedForGetProxyConfig(
+      GetProxyListCallback callback,
+      GoogleServiceAuthError error,
+      signin::AccessTokenInfo access_token_info);
+
+  // Wrapping `ip_protection_config_http_->GetProxyConfig()` method
+  // to enable OAuth Token inclusion in the GetProxyConfig API call to Phosphor.
+  void CallGetProxyConfig(GetProxyListCallback callback,
+                          std::optional<std::string> oauth_token);
+
   // `FetchBlindSignedToken()` calls into the `quiche::BlindSignAuth` library to
   // request a blind-signed auth token for use at the IP Protection proxies.
   void FetchBlindSignedToken(signin::AccessTokenInfo access_token_info,
diff --git a/chrome/browser/ip_protection/ip_protection_config_provider_unittest.cc b/chrome/browser/ip_protection/ip_protection_config_provider_unittest.cc
index 67d4eadc..ae23337 100644
--- a/chrome/browser/ip_protection/ip_protection_config_provider_unittest.cc
+++ b/chrome/browser/ip_protection/ip_protection_config_provider_unittest.cc
@@ -4,6 +4,8 @@
 
 #include "chrome/browser/ip_protection/ip_protection_config_provider.h"
 
+#include <optional>
+
 #include "base/base64.h"
 #include "base/notreached.h"
 #include "base/test/metrics/histogram_tester.h"
@@ -135,7 +137,8 @@
     NOTREACHED();
   }
 
-  void GetProxyConfig(IpProtectionConfigHttp::GetProxyConfigCallback callback,
+  void GetProxyConfig(std::optional<std::string> oauth_token,
+                      IpProtectionConfigHttp::GetProxyConfigCallback callback,
                       bool for_testing = false) override {
     if (!proxy_list_.has_value()) {
       std::move(callback).Run(absl::InternalError("uhoh"));
@@ -205,9 +208,7 @@
     return identity_test_env_.identity_manager();
   }
 
-  // Call `TryGetAuthTokens()` and run until it completes.
-  void TryGetAuthTokens(int num_tokens,
-                        network::mojom::IpProtectionProxyLayer proxy_layer) {
+  void SetupAccount() {
     if (primary_account_behavior_ == PrimaryAccountBehavior::kNone) {
 #if !BUILDFLAG(IS_CHROMEOS_ASH)
       // Simulate a log out event on all platforms except ChromeOS Ash where
@@ -224,10 +225,9 @@
         SetCanUseChromeIpProtectionCapability(true);
       }
     }
+  }
 
-    getter_->TryGetAuthTokens(num_tokens, proxy_layer,
-                              tokens_future_.GetCallback());
-
+  void RespondToAccessTokenRequest() {
     switch (primary_account_behavior_) {
       case PrimaryAccountBehavior::kNone:
       case PrimaryAccountBehavior::kIneligible:
@@ -251,9 +251,28 @@
                 "access_token", base::Time::Now());
         break;
     }
+  }
+
+  // Call `TryGetAuthTokens()` and run until it completes.
+  void TryGetAuthTokens(int num_tokens,
+                        network::mojom::IpProtectionProxyLayer proxy_layer) {
+    SetupAccount();
+
+    getter_->TryGetAuthTokens(num_tokens, proxy_layer,
+                              tokens_future_.GetCallback());
+
+    RespondToAccessTokenRequest();
     ASSERT_TRUE(tokens_future_.Wait()) << "TryGetAuthTokens did not call back";
   }
 
+  void GetProxyListWithOAuthToken() {
+    SetupAccount();
+
+    getter_->GetProxyList(proxy_list_future_.GetCallback());
+
+    RespondToAccessTokenRequest();
+  }
+
   // Set the CanUseChromeIpProtection account capability. The capability tribool
   // defaults to `kUnknown`.
   void SetCanUseChromeIpProtectionCapability(bool enabled) {
@@ -305,6 +324,10 @@
       absl::optional<base::Time>>
       tokens_future_;
 
+  base::test::TestFuture<
+      const absl::optional<std::vector<std::vector<std::string>>>&>
+      proxy_list_future_;
+
   // Test environment for IdentityManager. This must come after the
   // TaskEnvironment.
   signin::IdentityTestEnvironment identity_test_env_;
@@ -707,6 +730,26 @@
               testing::Optional(testing::ElementsAreArray(proxy_list)));
 }
 
+TEST_F(IpProtectionConfigProviderTest,
+       GetProxyListFirstHopHostnamesWithOAuthTokenFlag) {
+  base::test::ScopedFeatureList scoped_feature_list;
+  scoped_feature_list.InitAndEnableFeatureWithParameters(
+      net::features::kEnableIpProtectionProxy,
+      {{net::features::kIpPrivacyUseProxyChains.name, "false"},
+       {net::features::kIpPrivacyIncludeOAuthTokenInGetProxyConfig.name,
+        "true"}});
+  std::vector<std::vector<std::string>> proxy_list = {{"proxy1"}, {"proxy2"}};
+  getter_->SetUpForTesting(
+      std::make_unique<MockIpProtectionConfigHttp>(proxy_list), bsa_.get());
+
+  primary_account_behavior_ = PrimaryAccountBehavior::kReturnsToken;
+  GetProxyListWithOAuthToken();
+
+  ASSERT_TRUE(proxy_list_future_.Wait()) << "GetProxyList did not call back";
+  EXPECT_THAT(proxy_list_future_.Get(),
+              testing::Optional(testing::ElementsAreArray(proxy_list)));
+}
+
 TEST_F(IpProtectionConfigProviderTest, GetProxyListProxyChains) {
   base::test::ScopedFeatureList scoped_feature_list;
   scoped_feature_list.InitAndEnableFeatureWithParameters(
diff --git a/chrome/browser/nearby_sharing/instantmessaging/receive_messages_express_unittest.cc b/chrome/browser/nearby_sharing/instantmessaging/receive_messages_express_unittest.cc
index 568dba8..87aa212 100644
--- a/chrome/browser/nearby_sharing/instantmessaging/receive_messages_express_unittest.cc
+++ b/chrome/browser/nearby_sharing/instantmessaging/receive_messages_express_unittest.cc
@@ -81,8 +81,7 @@
  public:
   ReceiveMessagesExpressTest()
       : test_shared_loader_factory_(
-            base::MakeRefCounted<network::WeakWrapperSharedURLLoaderFactory>(
-                &test_url_loader_factory_)) {
+            test_url_loader_factory_.GetSafeWeakWrapper()) {
     identity_test_environment_.MakePrimaryAccountAvailable(
         kTestAccount, signin::ConsentLevel::kSignin);
   }
diff --git a/chrome/browser/optimization_guide/optimization_guide_internals_ui.cc b/chrome/browser/optimization_guide/optimization_guide_internals_ui.cc
index c272237..ddcaa62 100644
--- a/chrome/browser/optimization_guide/optimization_guide_internals_ui.cc
+++ b/chrome/browser/optimization_guide/optimization_guide_internals_ui.cc
@@ -11,6 +11,7 @@
 #include "base/hash/hash.h"
 #include "base/i18n/time_formatting.h"
 #include "base/time/time.h"
+#include "chrome/browser/browser_process.h"
 #include "chrome/browser/optimization_guide/optimization_guide_keyed_service.h"
 #include "chrome/browser/optimization_guide/optimization_guide_keyed_service_factory.h"
 #include "chrome/browser/profiles/profile.h"
@@ -85,8 +86,7 @@
 
 void OptimizationGuideInternalsUI::RequestLoggedModelQualityClientIds(
     RequestLoggedModelQualityClientIdsCallback callback) {
-  Profile* profile = Profile::FromWebUI(web_ui());
-  PrefService* prefs = profile->GetPrefs();
+  PrefService* local_state = g_browser_process->local_state();
 
   // Get the client ids for the compose and tab organization feature for the
   // past 28 days to show on chrome://optimization-guide-internals.
@@ -94,8 +94,8 @@
   std::vector<optimization_guide_internals::mojom::LoggedClientIdsPtr>
       logged_client_ids;
 
-  int64_t client_id =
-      prefs->GetInt64(optimization_guide::prefs::kModelQualityLogggingClientId);
+  int64_t client_id = local_state->GetInt64(
+      optimization_guide::prefs::localstate::kModelQualityLogggingClientId);
 
   // If the client id is zero no client id is set, in that case do nothing.
   if (client_id == 0) {
diff --git a/chrome/browser/optimization_guide/optimization_guide_keyed_service.cc b/chrome/browser/optimization_guide/optimization_guide_keyed_service.cc
index f93a89c..41487a6 100644
--- a/chrome/browser/optimization_guide/optimization_guide_keyed_service.cc
+++ b/chrome/browser/optimization_guide/optimization_guide_keyed_service.cc
@@ -472,7 +472,7 @@
           optimization_guide::features::kModelQualityLogging)) {
     model_quality_logs_uploader_service_ =
         std::make_unique<optimization_guide::ModelQualityLogsUploaderService>(
-            url_loader_factory, profile->GetPrefs());
+            url_loader_factory, g_browser_process->local_state());
   }
 
   // Register for profile initialization event to initialize the model
diff --git a/chrome/browser/pdf/pdf_extension_accessibility_test.cc b/chrome/browser/pdf/pdf_extension_accessibility_test.cc
index 7af8f1b..7e62591 100644
--- a/chrome/browser/pdf/pdf_extension_accessibility_test.cc
+++ b/chrome/browser/pdf/pdf_extension_accessibility_test.cc
@@ -14,6 +14,7 @@
 #include "base/containers/flat_set.h"
 #include "base/files/file_util.h"
 #include "base/logging.h"
+#include "base/run_loop.h"
 #include "base/strings/strcat.h"
 #include "base/strings/string_piece.h"
 #include "base/strings/string_util.h"
@@ -64,6 +65,14 @@
 #include "chrome/browser/renderer_context_menu/pdf_ocr_menu_observer.h"
 #endif  // BUILDFLAG(ENABLE_SCREEN_AI_SERVICE)
 
+#if BUILDFLAG(IS_LINUX)
+#include "base/scoped_observation.h"
+#include "chrome/browser/screen_ai/screen_ai_install_state.h"
+#include "chrome/common/pref_names.h"
+#include "components/strings/grit/components_strings.h"
+#include "ui/base/l10n/l10n_util.h"
+#endif  // BUILDFLAG(IS_LINUX)
+
 namespace {
 
 using ::content::WebContents;
@@ -1164,3 +1173,110 @@
 #if BUILDFLAG(ENABLE_SCREEN_AI_SERVICE)
 INSTANTIATE_FEATURE_OVERRIDE_TEST_SUITE(PDFExtensionAccessibilityPdfOcrTest);
 #endif  // BUILDFLAG(ENABLE_SCREEN_AI_SERVICE)
+
+#if BUILDFLAG(IS_LINUX)
+
+class ScreenAIInstallStateObserver
+    : public screen_ai::ScreenAIInstallState::Observer {
+ public:
+  ScreenAIInstallStateObserver() {
+    component_ready_observer_.Observe(
+        screen_ai::ScreenAIInstallState::GetInstance());
+  }
+
+  ScreenAIInstallStateObserver(const ScreenAIInstallStateObserver&) = delete;
+  ScreenAIInstallStateObserver& operator=(const ScreenAIInstallStateObserver&) =
+      delete;
+
+  ~ScreenAIInstallStateObserver() override = default;
+
+  // screen_ai::ScreenAIInstallState::Observer:
+  void StateChanged(screen_ai::ScreenAIInstallState::State state) override {
+    if (state == screen_ai::ScreenAIInstallState::State::kReady) {
+      is_ready_ = true;
+      if (quit_closure_) {
+        std::move(quit_closure_).Run();
+      }
+    }
+  }
+
+  void WaitForReady() {
+    if (is_ready_) {
+      return;
+    }
+
+    base::RunLoop run_loop;
+    quit_closure_ = run_loop.QuitClosure();
+    run_loop.Run();
+  }
+
+ private:
+  bool is_ready_ = false;
+  base::OnceClosure quit_closure_;
+  base::ScopedObservation<screen_ai::ScreenAIInstallState,
+                          screen_ai::ScreenAIInstallState::Observer>
+      component_ready_observer_{this};
+};
+
+class PDFOCRIntegrationTest : public PDFExtensionAccessibilityTest {
+ public:
+  PDFOCRIntegrationTest() = default;
+  ~PDFOCRIntegrationTest() override = default;
+
+  // PDFExtensionAccessibilityTest:
+  void SetUpOnMainThread() override {
+    PDFExtensionAccessibilityTest::SetUpOnMainThread();
+
+    screen_ai::ScreenAIInstallState::GetInstance()
+        ->SetComponentFolderForTesting();
+
+    content::BrowserAccessibilityState::GetInstance()->EnableAccessibility();
+    EnableScreenReader(true);
+  }
+
+  void TearDownOnMainThread() override {
+    EnableScreenReader(false);
+    PDFExtensionAccessibilityTest::TearDownOnMainThread();
+  }
+
+ protected:
+  std::vector<base::test::FeatureRef> GetEnabledFeatures() const override {
+    auto enabled = PDFExtensionAccessibilityTest::GetEnabledFeatures();
+    enabled.push_back(::features::kPdfOcr);
+    enabled.push_back(::features::kScreenAITestMode);
+    return enabled;
+  }
+
+  std::vector<base::test::FeatureRef> GetDisabledFeatures() const override {
+    // `PDFExtensionAccessibilityTest` has `::features::kPdfOcr` in a list of
+    // disabled features. Now that `::features::kPdfOcr` is used in this test,
+    // just return an empty list to exclude the feature from the list.
+    return {};
+  }
+
+  void EnableScreenReader(bool enabled) {
+    // Spoof a screen reader.
+    if (enabled) {
+      content::BrowserAccessibilityState::GetInstance()
+          ->AddAccessibilityModeFlags(ui::AXMode::kScreenReader);
+    } else {
+      content::BrowserAccessibilityState::GetInstance()
+          ->RemoveAccessibilityModeFlags(ui::AXMode::kScreenReader);
+    }
+  }
+};
+
+IN_PROC_BROWSER_TEST_F(PDFOCRIntegrationTest, EnsureScreenAIInitializes) {
+  ScreenAIInstallStateObserver observer;
+
+  // Turn on PDF OCR by setting its pref to be true.
+  browser()->profile()->GetPrefs()->SetBoolean(
+      prefs::kAccessibilityPdfOcrAlwaysActive, true);
+  EXPECT_TRUE(browser()->profile()->GetPrefs()->GetBoolean(
+      prefs::kAccessibilityPdfOcrAlwaysActive));
+
+  observer.WaitForReady();
+  EXPECT_EQ(screen_ai::ScreenAIInstallState::State::kReady,
+            screen_ai::ScreenAIInstallState::GetInstance()->get_state());
+}
+#endif  // BUILDFLAG(IS_LINUX)
diff --git a/chrome/browser/prefs/browser_prefs.cc b/chrome/browser/prefs/browser_prefs.cc
index 458d9c1..e4e8235 100644
--- a/chrome/browser/prefs/browser_prefs.cc
+++ b/chrome/browser/prefs/browser_prefs.cc
@@ -959,9 +959,14 @@
 const char kPrivacyBudgetReportedReidBlocks[] =
     "privacy_budget.reported_reid_blocks";
 
+// Deprecated from profile prefs 12/2023.
+const char kModelQualityLoggingClientId[] =
+    "optimization_guide.model_quality_logging_client_id";
+
 // Deprecated 12/2023.
 const char kSync_ExplicitBrowserSignin[] = "sync.explicit_browser_signin";
 
+
 // Register local state used only for migration (clearing or moving to a new
 // key).
 void RegisterLocalStatePrefsForMigration(PrefRegistrySimple* registry) {
@@ -1358,6 +1363,7 @@
   registry->RegisterBooleanPref(kDownloadDuplicateFilePromptEnabled, true);
 
   // Deprecated 12/2023.
+  registry->RegisterInt64Pref(kModelQualityLoggingClientId, true);
   registry->RegisterBooleanPref(kSync_ExplicitBrowserSignin, false);
 }
 
@@ -2579,6 +2585,9 @@
   // Deprecated 12/2023.
   profile_prefs->ClearPref(kDownloadDuplicateFilePromptEnabled);
 
+  // Deprecated 12/2023.
+  profile_prefs->ClearPref(kModelQualityLoggingClientId);
+
   // Added 12/2023.
   // Moving the `kExplicitBrowserSignin` from sync/ to signin/.
   // If the sync (old) pref still exists, copy it to signin (new),
diff --git a/chrome/browser/readaloud/android/BUILD.gn b/chrome/browser/readaloud/android/BUILD.gn
index 9004980..3fa13e7 100644
--- a/chrome/browser/readaloud/android/BUILD.gn
+++ b/chrome/browser/readaloud/android/BUILD.gn
@@ -198,11 +198,13 @@
     "//components/search_engines/android:java",
     "//components/user_prefs/android:java",
     "//content/public/android:content_java",
+    "//third_party/android_deps:espresso_java",
     "//third_party/androidx:androidx_annotation_annotation_java",
     "//third_party/androidx:androidx_appcompat_appcompat_java",
     "//third_party/androidx:androidx_test_core_java",
     "//third_party/androidx:androidx_test_ext_junit_java",
     "//third_party/androidx:androidx_test_runner_java",
+    "//third_party/hamcrest:hamcrest_java",
     "//third_party/jni_zero:jni_zero_java",
     "//third_party/junit",
     "//third_party/mockito:mockito_java",
diff --git a/chrome/browser/readaloud/android/java/src/org/chromium/chrome/browser/readaloud/ReadAloudController.java b/chrome/browser/readaloud/android/java/src/org/chromium/chrome/browser/readaloud/ReadAloudController.java
index 35e288a..4a229dd 100644
--- a/chrome/browser/readaloud/android/java/src/org/chromium/chrome/browser/readaloud/ReadAloudController.java
+++ b/chrome/browser/readaloud/android/java/src/org/chromium/chrome/browser/readaloud/ReadAloudController.java
@@ -385,6 +385,7 @@
                         playback -> {
                             mPlayerCoordinator.playbackReady(playback, PLAYING);
                             playback.play();
+                            ReadAloudMetrics.recordPlaybackStarted();
                         },
                         exception -> {
                             Log.d(TAG, "playTab failed: %s", exception.getMessage());
diff --git a/chrome/browser/readaloud/android/java/src/org/chromium/chrome/browser/readaloud/ReadAloudControllerUnitTest.java b/chrome/browser/readaloud/android/java/src/org/chromium/chrome/browser/readaloud/ReadAloudControllerUnitTest.java
index 9b6efc17..f285a995 100644
--- a/chrome/browser/readaloud/android/java/src/org/chromium/chrome/browser/readaloud/ReadAloudControllerUnitTest.java
+++ b/chrome/browser/readaloud/android/java/src/org/chromium/chrome/browser/readaloud/ReadAloudControllerUnitTest.java
@@ -4,6 +4,9 @@
 
 package org.chromium.chrome.browser.readaloud;
 
+import static androidx.test.espresso.matcher.ViewMatchers.assertThat;
+
+import static org.hamcrest.Matchers.hasItems;
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertFalse;
 import static org.junit.Assert.assertNotNull;
@@ -23,6 +26,7 @@
 
 import androidx.appcompat.app.AppCompatActivity;
 
+import org.junit.After;
 import org.junit.Before;
 import org.junit.Rule;
 import org.junit.Test;
@@ -42,6 +46,7 @@
 import org.chromium.base.test.BaseRobolectricTestRunner;
 import org.chromium.base.test.util.HistogramWatcher;
 import org.chromium.base.test.util.JniMocker;
+import org.chromium.base.test.util.UserActionTester;
 import org.chromium.chrome.browser.browser_controls.BrowserControlsSizer;
 import org.chromium.chrome.browser.flags.ChromeFeatureList;
 import org.chromium.chrome.browser.language.AppLocaleUtils;
@@ -124,6 +129,7 @@
     @Mock private RenderFrameHost mRenderFrameHost;
     @Mock private TemplateUrl mSearchEngine;
     private GlobalRenderFrameHostId mGlobalRenderFrameHostId = new GlobalRenderFrameHostId(1, 1);
+    public UserActionTester mUserActionTester;
 
     @Before
     public void setUp() {
@@ -192,6 +198,12 @@
         doReturn(List.of(new PlaybackVoice("en", "voiceA", "")))
                 .when(mPlaybackHooks)
                 .getVoicesFor(anyString());
+        mUserActionTester = new UserActionTester();
+    }
+
+    @After
+    public void tearDown() {
+        mUserActionTester.tearDown();
     }
 
     @Test
@@ -1232,6 +1244,13 @@
         histogram.assertExpected();
     }
 
+    @Test
+    public void testMetricRecorded_playbackStarted() {
+        final String actionName = "ReadAloud.PlaybackStarted";
+        ReadAloudMetrics.recordPlaybackStarted();
+        assertThat(mUserActionTester.getActions(), hasItems(actionName));
+    }
+
     private void onPlaybackSuccess(Playback playback) {
         mPlaybackCallbackCaptor.getValue().onSuccess(playback);
         resolvePromises();
diff --git a/chrome/browser/readaloud/android/java/src/org/chromium/chrome/browser/readaloud/ReadAloudMetrics.java b/chrome/browser/readaloud/android/java/src/org/chromium/chrome/browser/readaloud/ReadAloudMetrics.java
index d09776b..d7143ad 100644
--- a/chrome/browser/readaloud/android/java/src/org/chromium/chrome/browser/readaloud/ReadAloudMetrics.java
+++ b/chrome/browser/readaloud/android/java/src/org/chromium/chrome/browser/readaloud/ReadAloudMetrics.java
@@ -8,6 +8,7 @@
 import androidx.annotation.VisibleForTesting;
 
 import org.chromium.base.metrics.RecordHistogram;
+import org.chromium.base.metrics.RecordUserAction;
 
 import java.lang.annotation.Retention;
 import java.lang.annotation.RetentionPolicy;
@@ -69,4 +70,8 @@
     public static void recordIsTabPlaybackCreationSuccessful(boolean successful) {
         RecordHistogram.recordBooleanHistogram(IS_TAB_PLAYBACK_CREATION_SUCCESSFUL, successful);
     }
+
+    public static void recordPlaybackStarted() {
+        RecordUserAction.record("ReadAloud.PlaybackStarted");
+    }
 }
diff --git a/chrome/browser/resources/ash/settings/device_page/display.html b/chrome/browser/resources/ash/settings/device_page/display.html
index 6b879454..7932649 100644
--- a/chrome/browser/resources/ash/settings/device_page/display.html
+++ b/chrome/browser/resources/ash/settings/device_page/display.html
@@ -76,8 +76,7 @@
     <template is="dom-if"
         if="[[showMirror(unifiedDesktopMode_, displays)]]" restamp>
       <!-- Mirror display toggle button -->
-      <template is="dom-if"
-          if="[[isRevampWayfindingEnabled_]]" restamp>
+      <template is="dom-if" if="[[isRevampWayfindingEnabled_]]">
         <div id="mirrorDisplayToggleButton" class="text-area">
           <div id="mirrorDisplayToggleLabel" class="start">
             [[getDisplayMirrorText_(displays)]]
@@ -92,8 +91,7 @@
       </template>
 
       <!-- Mirror display checkbox -->
-      <template is="dom-if"
-          if="[[!isRevampWayfindingEnabled_]]" restamp>
+      <template is="dom-if" if="[[!isRevampWayfindingEnabled_]]">
         <div class="secondary self-start">
           <cr-checkbox id="displayMirrorCheckbox"
               checked="[[isMirrored(displays)]]"
diff --git a/chrome/browser/resources/ash/settings/device_page/display.ts b/chrome/browser/resources/ash/settings/device_page/display.ts
index d5a95f2..7c774389 100644
--- a/chrome/browser/resources/ash/settings/device_page/display.ts
+++ b/chrome/browser/resources/ash/settings/device_page/display.ts
@@ -92,6 +92,7 @@
         value: () => {
           return isRevampWayfindingEnabled();
         },
+        readOnly: true,
       },
 
       selectedModePref_: {
@@ -262,7 +263,7 @@
   private displaySettingsProvider: DisplaySettingsProviderInterface;
   private displayTabNames_: string[];
   private invalidDisplayId_: string;
-  private isRevampWayfindingEnabled_: boolean;
+  private readonly isRevampWayfindingEnabled_: boolean;
   private isTabletMode_: boolean;
   private listAllDisplayModes_: boolean;
   private logicalResolutionText_: string;
diff --git a/chrome/browser/resources/ash/settings/nearby_share_page/nearby_share_data_usage_dialog.html b/chrome/browser/resources/ash/settings/nearby_share_page/nearby_share_data_usage_dialog.html
index da7a203..44feddf 100644
--- a/chrome/browser/resources/ash/settings/nearby_share_page/nearby_share_data_usage_dialog.html
+++ b/chrome/browser/resources/ash/settings/nearby_share_page/nearby_share_data_usage_dialog.html
@@ -72,7 +72,7 @@
           <paper-tooltip id="dataUsageDataTooltip"
               for="dataUsageDataIcon"
               offset="8"
-              position="right"
+              position="bottom"
               fit-to-visible-bounds>
             <span id="dataUsageDataTooltipText">
               $i18n{nearbyShareDataUsageDataTooltip}
diff --git a/chrome/browser/resources/chromeos/accessibility/.eslintrc.js b/chrome/browser/resources/chromeos/accessibility/.eslintrc.js
index 023e5f08..f494934 100644
--- a/chrome/browser/resources/chromeos/accessibility/.eslintrc.js
+++ b/chrome/browser/resources/chromeos/accessibility/.eslintrc.js
@@ -15,7 +15,6 @@
     'object-shorthand' : ['error', 'always'],
     'prefer-const' : ['error', {'destructuring' : 'all'}],
     '@typescript-eslint/explicit-function-return-type' : 'off',
-    '@typescript-eslint/naming-convention' : 'off',
   },
   // clang-format off
   'overrides':
diff --git a/chrome/browser/resources/chromeos/accessibility/switch_access/BUILD.gn b/chrome/browser/resources/chromeos/accessibility/switch_access/BUILD.gn
index d85eccb..5505e797 100644
--- a/chrome/browser/resources/chromeos/accessibility/switch_access/BUILD.gn
+++ b/chrome/browser/resources/chromeos/accessibility/switch_access/BUILD.gn
@@ -18,7 +18,11 @@
 tsc_out_dir = "$target_gen_dir/tsc"
 
 # TS files to compile.
-ts_modules = [ "commands.ts" ]
+ts_modules = [
+  "cache.ts",
+  "commands.ts",
+  "metrics.ts",
+]
 
 # JS files needed to compile TS.
 js_deps = []
@@ -67,7 +71,6 @@
     "action_manager.js",
     "auto_scan_manager.js",
     "background.html",
-    "cache.js",
     "focus_ring_manager.js",
     "history.js",
     "icons/back.svg",
@@ -98,7 +101,6 @@
     "icons/textSelectionStart.svg",
     "item_scan_manager.js",
     "menu_manager.js",
-    "metrics.js",
     "navigator.js",
     "navigator_interfaces.js",
     "nodes/back_button_node.js",
diff --git a/chrome/browser/resources/chromeos/accessibility/switch_access/cache.js b/chrome/browser/resources/chromeos/accessibility/switch_access/cache.js
deleted file mode 100644
index 2233677a1..0000000
--- a/chrome/browser/resources/chromeos/accessibility/switch_access/cache.js
+++ /dev/null
@@ -1,39 +0,0 @@
-// Copyright 2020 The Chromium Authors
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-const AutomationNode = chrome.automation.AutomationNode;
-
-/**
- * Saves computed values to avoid recalculating them repeatedly.
- *
- * Caches are single-use, and abandoned after the top-level question is answered
- * (e.g. what are all the interesting descendants of this node?)
- */
-export class SACache {
-  constructor() {
-    /** @private {!Map<!AutomationNode, boolean>} */
-    this.isActionableMap_ = new Map();
-
-    /** @private {!Map<!AutomationNode, boolean>} */
-    this.isGroupMap_ = new Map();
-
-    /** @private {!Map<!AutomationNode, boolean>} */
-    this.isInterestingSubtreeMap_ = new Map();
-  }
-
-  /** @return {!Map<!AutomationNode, boolean>} */
-  get isActionable() {
-    return this.isActionableMap_;
-  }
-
-  /** @return {!Map<!AutomationNode, boolean>} */
-  get isGroup() {
-    return this.isGroupMap_;
-  }
-
-  /** @return {!Map<!AutomationNode, boolean>} */
-  get isInterestingSubtree() {
-    return this.isInterestingSubtreeMap_;
-  }
-}
diff --git a/chrome/browser/resources/chromeos/accessibility/switch_access/cache.ts b/chrome/browser/resources/chromeos/accessibility/switch_access/cache.ts
new file mode 100644
index 0000000..36b042f5
--- /dev/null
+++ b/chrome/browser/resources/chromeos/accessibility/switch_access/cache.ts
@@ -0,0 +1,18 @@
+// Copyright 2020 The Chromium Authors
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+type AutomationNode = chrome.automation.AutomationNode;
+
+/**
+ * Saves computed values to avoid recalculating them repeatedly.
+ *
+ * Caches are single-use, and abandoned after the top-level question is answered
+ * (e.g. what are all the interesting descendants of this node?)
+ */
+// eslint-disable-next-line @typescript-eslint/naming-convention
+export class SACache {
+  readonly isActionable: Map<AutomationNode, boolean> = new Map();
+  readonly isGroup: Map<AutomationNode, boolean> = new Map();
+  readonly isInterestingSubtree: Map<AutomationNode, boolean> = new Map();
+}
diff --git a/chrome/browser/resources/chromeos/accessibility/switch_access/metrics.js b/chrome/browser/resources/chromeos/accessibility/switch_access/metrics.ts
similarity index 77%
rename from chrome/browser/resources/chromeos/accessibility/switch_access/metrics.js
rename to chrome/browser/resources/chromeos/accessibility/switch_access/metrics.ts
index 3637496..b6595ff 100644
--- a/chrome/browser/resources/chromeos/accessibility/switch_access/metrics.js
+++ b/chrome/browser/resources/chromeos/accessibility/switch_access/metrics.ts
@@ -7,13 +7,10 @@
 /**
  * Class to record metrics for Switch Access.
  */
-export const SwitchAccessMetrics = {
-  /**
-   * @param {string} menuAction
-   */
-  recordMenuAction: menuAction => {
+export namespace SwitchAccessMetrics {
+  export function recordMenuAction(menuAction: string): void {
     const metricName = 'Accessibility.CrosSwitchAccess.MenuAction.' +
         StringUtil.toUpperCamelCase(menuAction);
     chrome.metricsPrivate.recordUserAction(metricName);
-  },
-};
+  }
+}
diff --git a/chrome/browser/resources/chromeos/cloud_upload/connect_onedrive.ts b/chrome/browser/resources/chromeos/cloud_upload/connect_onedrive.ts
index 6ad610d..98464c1 100644
--- a/chrome/browser/resources/chromeos/cloud_upload/connect_onedrive.ts
+++ b/chrome/browser/resources/chromeos/cloud_upload/connect_onedrive.ts
@@ -2,7 +2,7 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-import 'chrome://resources/cr_elements/cr_button/cr_button.js';
+import 'chrome://resources/ash/common/cr_elements/cr_button/cr_button.js';
 import './strings.m.js';
 
 import {loadTimeData} from 'chrome://resources/ash/common/load_time_data.m.js';
diff --git a/chrome/browser/resources/chromeos/cloud_upload/file_handler_page.ts b/chrome/browser/resources/chromeos/cloud_upload/file_handler_page.ts
index 5c71825..a9c9e38 100644
--- a/chrome/browser/resources/chromeos/cloud_upload/file_handler_page.ts
+++ b/chrome/browser/resources/chromeos/cloud_upload/file_handler_page.ts
@@ -2,7 +2,7 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-import {CrButtonElement} from 'chrome://resources/cr_elements/cr_button/cr_button.js';
+import {CrButtonElement} from 'chrome://resources/ash/common/cr_elements/cr_button/cr_button.js';
 import {assert, assertNotReached} from 'chrome://resources/js/assert.js';
 import {loadTimeData} from 'chrome://resources/js/load_time_data.js';
 
diff --git a/chrome/browser/resources/chromeos/cloud_upload/move_confirmation_page.ts b/chrome/browser/resources/chromeos/cloud_upload/move_confirmation_page.ts
index 206073c7..055055a 100644
--- a/chrome/browser/resources/chromeos/cloud_upload/move_confirmation_page.ts
+++ b/chrome/browser/resources/chromeos/cloud_upload/move_confirmation_page.ts
@@ -2,7 +2,7 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-import 'chrome://resources/cr_elements/cr_button/cr_button.js';
+import 'chrome://resources/ash/common/cr_elements/cr_button/cr_button.js';
 import 'chrome://resources/ash/common/cr_elements/cr_checkbox/cr_checkbox.js';
 import 'chrome://resources/cros_components/lottie_renderer/lottie-renderer.js';
 
diff --git a/chrome/browser/resources/chromeos/cloud_upload/office_pwa_install_page.ts b/chrome/browser/resources/chromeos/cloud_upload/office_pwa_install_page.ts
index 6ac0e22..9b4b751 100644
--- a/chrome/browser/resources/chromeos/cloud_upload/office_pwa_install_page.ts
+++ b/chrome/browser/resources/chromeos/cloud_upload/office_pwa_install_page.ts
@@ -2,10 +2,10 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-import 'chrome://resources/cr_elements/cr_button/cr_button.js';
+import 'chrome://resources/ash/common/cr_elements/cr_button/cr_button.js';
 import 'chrome://resources/cr_elements/cr_icons.css.js';
 
-import {CrButtonElement} from 'chrome://resources/cr_elements/cr_button/cr_button.js';
+import {CrButtonElement} from 'chrome://resources/ash/common/cr_elements/cr_button/cr_button.js';
 import {assertInstanceof} from 'chrome://resources/js/assert.js';
 import {loadTimeData} from 'chrome://resources/js/load_time_data.js';
 
diff --git a/chrome/browser/resources/chromeos/cloud_upload/office_setup_complete_page.ts b/chrome/browser/resources/chromeos/cloud_upload/office_setup_complete_page.ts
index 8f67c84..d79120c5 100644
--- a/chrome/browser/resources/chromeos/cloud_upload/office_setup_complete_page.ts
+++ b/chrome/browser/resources/chromeos/cloud_upload/office_setup_complete_page.ts
@@ -2,7 +2,7 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-import 'chrome://resources/cr_elements/cr_button/cr_button.js';
+import 'chrome://resources/ash/common/cr_elements/cr_button/cr_button.js';
 
 import {BaseSetupPageElement} from './base_setup_page.js';
 import {UserAction} from './cloud_upload.mojom-webui.js';
diff --git a/chrome/browser/resources/chromeos/cloud_upload/setup_cancel_dialog.ts b/chrome/browser/resources/chromeos/cloud_upload/setup_cancel_dialog.ts
index 2566a5b..2df784a3 100644
--- a/chrome/browser/resources/chromeos/cloud_upload/setup_cancel_dialog.ts
+++ b/chrome/browser/resources/chromeos/cloud_upload/setup_cancel_dialog.ts
@@ -2,10 +2,10 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-import 'chrome://resources/cr_elements/cr_button/cr_button.js';
-import 'chrome://resources/cr_elements/cr_dialog/cr_dialog.js';
+import 'chrome://resources/ash/common/cr_elements/cr_button/cr_button.js';
+import 'chrome://resources/ash/common/cr_elements/cr_dialog/cr_dialog.js';
 
-import {CrDialogElement} from 'chrome://resources/cr_elements/cr_dialog/cr_dialog.js';
+import {CrDialogElement} from 'chrome://resources/ash/common/cr_elements/cr_dialog/cr_dialog.js';
 
 import {getTemplate} from './setup_cancel_dialog.html.js';
 
diff --git a/chrome/browser/resources/chromeos/cloud_upload/sign_in_page.ts b/chrome/browser/resources/chromeos/cloud_upload/sign_in_page.ts
index 54d8c98..bcfdff7 100644
--- a/chrome/browser/resources/chromeos/cloud_upload/sign_in_page.ts
+++ b/chrome/browser/resources/chromeos/cloud_upload/sign_in_page.ts
@@ -2,7 +2,7 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-import 'chrome://resources/cr_elements/cr_button/cr_button.js';
+import 'chrome://resources/ash/common/cr_elements/cr_button/cr_button.js';
 
 import {BaseSetupPageElement, CANCEL_SETUP_EVENT, NEXT_PAGE_EVENT} from './base_setup_page.js';
 import {CloudUploadBrowserProxy} from './cloud_upload_browser_proxy.js';
diff --git a/chrome/browser/resources/chromeos/cloud_upload/welcome_page.ts b/chrome/browser/resources/chromeos/cloud_upload/welcome_page.ts
index 5c919e6..e32747d 100644
--- a/chrome/browser/resources/chromeos/cloud_upload/welcome_page.ts
+++ b/chrome/browser/resources/chromeos/cloud_upload/welcome_page.ts
@@ -2,7 +2,7 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-import 'chrome://resources/cr_elements/cr_button/cr_button.js';
+import 'chrome://resources/ash/common/cr_elements/cr_button/cr_button.js';
 import './strings.m.js';
 
 import {loadTimeData} from 'chrome://resources/ash/common/load_time_data.m.js';
diff --git a/chrome/browser/resources/chromeos/login/components/behaviors/oobe_dialog_host_behavior.js b/chrome/browser/resources/chromeos/login/components/behaviors/oobe_dialog_host_behavior.js
index bca84e64..643f126 100644
--- a/chrome/browser/resources/chromeos/login/components/behaviors/oobe_dialog_host_behavior.js
+++ b/chrome/browser/resources/chromeos/login/components/behaviors/oobe_dialog_host_behavior.js
@@ -52,5 +52,6 @@
 
 /** @interface */
 export class OobeDialogHostBehaviorInterface {
-  onBeforeShow() {}
+  /** @param {...Object} data  */
+  onBeforeShow(...data) {}
 }
diff --git a/chrome/browser/resources/chromeos/login/login.gni b/chrome/browser/resources/chromeos/login/login.gni
index e95fdc4..fe3043a 100644
--- a/chrome/browser/resources/chromeos/login/login.gni
+++ b/chrome/browser/resources/chromeos/login/login.gni
@@ -75,18 +75,6 @@
   "components/quick_start_pin.js",
   "components/security_token_pin.js",
   "components/throbber_notice.js",
-  "screens/osauth/apply_online_password.js",
-  "screens/osauth/cryptohome_recovery.js",
-  "screens/osauth/cryptohome_recovery_setup.js",
-  "screens/osauth/factor_setup_success.js",
-  "screens/osauth/fingerprint_setup.js",
-  "screens/osauth/gaia_password_changed.js",
-  "screens/osauth/local_password_setup.js",
-  "screens/osauth/local_data_loss_warning.js",
-  "screens/osauth/enter_old_password.js",
-  "screens/osauth/osauth_error.js",
-  "screens/osauth/password_selection.js",
-  "screens/osauth/pin_setup.js",
 ]
 
 oobe_screens_js_files = [
@@ -149,7 +137,7 @@
   "screens/common/oobe_reset.js",
   "screens/common/os_install.js",
   "screens/common/os_trial.js",
-  "screens/common/parental_handoff.js",
+  "screens/common/parental_handoff.ts",
   "screens/common/quick_start.js",
   "screens/common/remote_activity_notification.js",
 
@@ -212,6 +200,32 @@
   login_screens_html_wrapped_files += [ string_replace(f, ".html", ".html.js") ]
 }
 
+osauth_screens_js_files = [
+  "screens/osauth/apply_online_password.js",
+  "screens/osauth/cryptohome_recovery.js",
+  "screens/osauth/cryptohome_recovery_setup.js",
+  "screens/osauth/factor_setup_success.js",
+  "screens/osauth/fingerprint_setup.js",
+  "screens/osauth/gaia_password_changed.js",
+  "screens/osauth/local_password_setup.js",
+  "screens/osauth/local_data_loss_warning.js",
+  "screens/osauth/enter_old_password.js",
+  "screens/osauth/osauth_error.js",
+  "screens/osauth/password_selection.js",
+  "screens/osauth/pin_setup.js",
+]
+
+osauth_screens_html_files = []
+foreach(f, osauth_screens_js_files) {
+  osauth_screens_html_files += [ string_replace(f, ".js", ".html") ]
+}
+
+osauth_screens_html_wrapped_files = []
+foreach(f, osauth_screens_html_files) {
+  osauth_screens_html_wrapped_files +=
+      [ string_replace(f, ".html", ".html.js") ]
+}
+
 buttons_ts_files = [
   "components/buttons/oobe_back_button.ts",
   "components/buttons/oobe_icon_button.ts",
@@ -235,4 +249,5 @@
     oobe_screens_js_files + oobe_screens_html_wrapped_files +
     common_screens_js_files + common_screens_html_wrapped_files +
     login_screens_js_files + login_screens_html_wrapped_files +
+    osauth_screens_js_files + osauth_screens_html_wrapped_files +
     buttons_ts_files + buttons_html_wrapped_files
diff --git a/chrome/browser/resources/chromeos/login/screens/common/BUILD.gn b/chrome/browser/resources/chromeos/login/screens/common/BUILD.gn
index 13a1cc48..a68416d 100644
--- a/chrome/browser/resources/chromeos/login/screens/common/BUILD.gn
+++ b/chrome/browser/resources/chromeos/login/screens/common/BUILD.gn
@@ -42,7 +42,6 @@
     ":oobe_reset",
     ":os_install",
     ":os_trial",
-    ":parental_handoff",
     ":placeholder",
     ":quick_start",
     ":recommend_apps",
@@ -279,18 +278,6 @@
   extra_deps = [ ":web_components" ]
 }
 
-js_library("parental_handoff") {
-  sources = [ "$root_gen_dir/chrome/browser/resources/chromeos/login/screens/common/parental_handoff.js" ]
-  deps = [
-    "../../components/behaviors:login_screen_behavior",
-    "../../components/behaviors:oobe_dialog_host_behavior",
-    "../../components/behaviors:oobe_i18n_behavior",
-    "../../components/dialogs:oobe_adaptive_dialog",
-    "//third_party/polymer/v3_0/components-chromium/polymer:polymer_bundled",
-  ]
-  extra_deps = [ ":web_components" ]
-}
-
 js_library("quick_start") {
   sources = [ "$root_gen_dir/chrome/browser/resources/chromeos/login/screens/common/quick_start.js" ]
   deps = [
diff --git a/chrome/browser/resources/chromeos/login/screens/common/parental_handoff.html b/chrome/browser/resources/chromeos/login/screens/common/parental_handoff.html
index e7544554..09a596a 100644
--- a/chrome/browser/resources/chromeos/login/screens/common/parental_handoff.html
+++ b/chrome/browser/resources/chromeos/login/screens/common/parental_handoff.html
@@ -8,13 +8,13 @@
 <style include="oobe-dialog-host-styles"></style>
 <oobe-adaptive-dialog id="parentalHandoffDialog" role="dialog"
   aria-label$="[[i18nDynamic(locale,
-    'parentalHandoffDialogTitle', username_)]]">
+    'parentalHandoffDialogTitle', username)]]">
 <iron-icon slot="icon" icon="oobe-32:googleg"></iron-icon>
 <h1 slot="title">
-  [[i18nDynamic(locale, 'parentalHandoffDialogTitle', username_)]]
+  [[i18nDynamic(locale, 'parentalHandoffDialogTitle', username)]]
 </h1>
 <p slot="subtitle">
-  [[i18nDynamic(locale, 'parentalHandoffDialogSubtitle', username_)]]
+  [[i18nDynamic(locale, 'parentalHandoffDialogSubtitle', username)]]
 </p>
 <div slot="content" class="flex layout vertical center center-justified">
   <iron-icon icon="oobe-illos:kids-turn-illo" class="illustration-jelly">
@@ -23,7 +23,7 @@
 <div slot="bottom-buttons">
   <oobe-next-button id="nextButton"
       text-key="parentalHandoffDialogNextButton" class="focus-on-show"
-      inverse on-click="onNextButtonPressed_"></oobe-next-button>
+      inverse on-click="onNextButtonPressed"></oobe-next-button>
 </div>
 </oobe-adaptive-dialog>
 
diff --git a/chrome/browser/resources/chromeos/login/screens/common/parental_handoff.js b/chrome/browser/resources/chromeos/login/screens/common/parental_handoff.js
deleted file mode 100644
index e1c6a5b..0000000
--- a/chrome/browser/resources/chromeos/login/screens/common/parental_handoff.js
+++ /dev/null
@@ -1,117 +0,0 @@
-// Copyright 2020 The Chromium Authors
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-/**
- * @fileoverview Polymer element for Parental Handoff screen.
- */
-
-import '//resources/cr_elements/cr_shared_vars.css.js';
-import '//resources/polymer/v3_0/iron-icon/iron-icon.js';
-import '../../components/oobe_icons.html.js';
-import '../../components/common_styles/oobe_common_styles.css.js';
-import '../../components/common_styles/oobe_dialog_host_styles.css.js';
-
-import {afterNextRender, dom, flush, html, mixinBehaviors, Polymer, PolymerElement} from '//resources/polymer/v3_0/polymer/polymer_bundled.min.js';
-
-import {LoginScreenBehavior, LoginScreenBehaviorInterface} from '../../components/behaviors/login_screen_behavior.js';
-import {OobeDialogHostBehavior} from '../../components/behaviors/oobe_dialog_host_behavior.js';
-import {OobeI18nBehavior, OobeI18nBehaviorInterface} from '../../components/behaviors/oobe_i18n_behavior.js';
-import {OobeNextButton} from '../../components/buttons/oobe_next_button.js';
-import {OobeAdaptiveDialog} from '../../components/dialogs/oobe_adaptive_dialog.js';
-
-import {getTemplate} from './parental_handoff.html.js';
-
-
-/**
- * @constructor
- * @extends {PolymerElement}
- * @implements {OobeI18nBehaviorInterface}
- * @implements {LoginScreenBehaviorInterface}
- */
-const ParentalHandoffElementBase = mixinBehaviors(
-    [OobeI18nBehavior, OobeDialogHostBehavior, LoginScreenBehavior],
-    PolymerElement);
-
-/**
- * @typedef {{
- *   parentalHandoffDialog:  OobeAdaptiveDialog,
- * }}
- */
-ParentalHandoffElementBase.$;
-
-/**
- * Data that is passed to the screen during onBeforeShow.
- * @typedef {{
- *   username: string,
- * }}
- */
-let ParentalHandoffScreenData;
-
-/**
- * @polymer
- */
-class ParentalHandoff extends ParentalHandoffElementBase {
-  static get is() {
-    return 'parental-handoff-element';
-  }
-
-  static get template() {
-    return getTemplate();
-  }
-
-  static get properties() {
-    return {
-      /**
-       * The username to be displayed
-       */
-      username_: {
-        type: String,
-      },
-    };
-  }
-
-  constructor() {
-    super();
-    this.username_ = '';
-  }
-
-  /** @override */
-  get EXTERNAL_API() {
-    return [];
-  }
-
-  /**
-   * Event handler that is invoked just before the frame is shown.
-   * @param {ParentalHandoffScreenData} data Screen init payload
-   */
-  onBeforeShow(data) {
-    if ('username' in data) {
-      this.username_ = data.username;
-    }
-    this.$.parentalHandoffDialog.focus();
-  }
-
-  ready() {
-    super.ready();
-    this.initializeLoginScreen('ParentalHandoffScreen');
-  }
-
-  /*
-   * Executed on language change.
-   */
-  updateLocalizedContent() {
-    this.i18nUpdateLocale();
-  }
-
-  /**
-   * On-tap event handler for Next button.
-   *
-   * @private
-   */
-  onNextButtonPressed_() {
-    this.userActed('next');
-  }
-}
-
-customElements.define(ParentalHandoff.is, ParentalHandoff);
diff --git a/chrome/browser/resources/chromeos/login/screens/common/parental_handoff.ts b/chrome/browser/resources/chromeos/login/screens/common/parental_handoff.ts
new file mode 100644
index 0000000..08a14a1
--- /dev/null
+++ b/chrome/browser/resources/chromeos/login/screens/common/parental_handoff.ts
@@ -0,0 +1,104 @@
+// Copyright 2020 The Chromium Authors
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+/**
+ * @fileoverview Polymer element for Parental Handoff screen.
+ */
+
+import '//resources/cr_elements/cr_shared_vars.css.js';
+import '//resources/polymer/v3_0/iron-icon/iron-icon.js';
+import '../../components/oobe_icons.html.js';
+import '../../components/common_styles/oobe_common_styles.css.js';
+import '../../components/common_styles/oobe_dialog_host_styles.css.js';
+
+import {PolymerElementProperties} from '//resources/polymer/v3_0/polymer/interfaces.js';
+import {mixinBehaviors, PolymerElement} from '//resources/polymer/v3_0/polymer/polymer_bundled.min.js';
+
+import {LoginScreenBehavior, LoginScreenBehaviorInterface} from '../../components/behaviors/login_screen_behavior.js';
+import {OobeDialogHostBehavior, OobeDialogHostBehaviorInterface} from '../../components/behaviors/oobe_dialog_host_behavior.js';
+import {OobeI18nBehavior, OobeI18nBehaviorInterface} from '../../components/behaviors/oobe_i18n_behavior.js';
+import {OobeAdaptiveDialog} from '../../components/dialogs/oobe_adaptive_dialog.js';
+
+import {getTemplate} from './parental_handoff.html.js';
+
+export const ParentalHandoffElementBase =
+    mixinBehaviors(
+        [OobeI18nBehavior, LoginScreenBehavior, OobeDialogHostBehavior],
+        PolymerElement) as {
+      new (): PolymerElement & OobeI18nBehaviorInterface &
+          LoginScreenBehaviorInterface & OobeDialogHostBehaviorInterface,
+    };
+
+interface ParentalHandoffScreenData {
+  username: string;
+}
+
+export class ParentalHandoff extends ParentalHandoffElementBase {
+  static get is() {
+    return 'parental-handoff-element' as const;
+  }
+
+  static get template(): HTMLTemplateElement {
+    return getTemplate();
+  }
+
+  static get properties(): PolymerElementProperties {
+    return {
+      /**
+       * The username to be displayed
+       */
+      username: {
+        type: String,
+        value: '',
+      },
+    };
+  }
+
+  private username: string;
+
+  constructor() {
+    super();
+  }
+
+  /**
+   * Event handler that is invoked just before the frame is shown.
+   */
+  override onBeforeShow(data: ParentalHandoffScreenData): void {
+    if ('username' in data) {
+      this.username = data.username;
+    }
+    const parentalHandoffDialog =
+        this.shadowRoot!.querySelector<OobeAdaptiveDialog>(
+            '#parentalHandoffDialog')!;
+    parentalHandoffDialog.focus();
+  }
+
+  override ready(): void {
+    super.ready();
+    this.initializeLoginScreen('ParentalHandoffScreen');
+  }
+
+  /*
+   * Executed on language change.
+   */
+  override updateLocalizedContent(): void {
+    this.i18nUpdateLocale();
+  }
+
+  /**
+   * On-tap event handler for Next button.
+   *
+   */
+  private onNextButtonPressed(): void {
+    this.userActed('next');
+  }
+}
+
+declare global {
+  interface HTMLElementTagNameMap {
+    [ParentalHandoff.is]: ParentalHandoff;
+  }
+}
+
+customElements.define(ParentalHandoff.is, ParentalHandoff);
diff --git a/chrome/browser/resources/chromeos/login/screens/osauth/BUILD.gn b/chrome/browser/resources/chromeos/login/screens/osauth/BUILD.gn
index 87bc30bd..890d139 100644
--- a/chrome/browser/resources/chromeos/login/screens/osauth/BUILD.gn
+++ b/chrome/browser/resources/chromeos/login/screens/osauth/BUILD.gn
@@ -4,7 +4,8 @@
 
 import("//chrome/common/features.gni")
 import("//third_party/closure_compiler/compile_js.gni")
-import("//tools/polymer/html_to_js.gni")
+import("//tools/polymer/html_to_wrapper.gni")
+import("../../login.gni")
 
 js_type_check("closure_compile") {
   is_polymer3 = true
@@ -189,19 +190,19 @@
   extra_sources = [ "$interfaces_path/quick_unlock_private_interface.js" ]
 }
 
-html_to_js("web_components") {
-  js_files = [
-    "apply_online_password.js",
-    "cryptohome_recovery.js",
-    "cryptohome_recovery_setup.js",
-    "factor_setup_success.js",
-    "fingerprint_setup.js",
-    "gaia_password_changed.js",
-    "local_data_loss_warning.js",
-    "enter_old_password.js",
-    "local_password_setup.js",
-    "osauth_error.js",
-    "password_selection.js",
-    "pin_setup.js",
+group("web_components") {
+  public_deps = [
+    ":copy_js",
+    ":generate_web_component_html_wrapper_files",
   ]
 }
+
+html_to_wrapper("generate_web_component_html_wrapper_files") {
+  in_files = rebase_path(osauth_screens_html_files, "./screens/osauth", ".")
+  use_js = true
+}
+
+copy("copy_js") {
+  sources = rebase_path(osauth_screens_js_files, "./screens/osauth", ".")
+  outputs = [ "$target_gen_dir/{{source_file_part}}" ]
+}
diff --git a/chrome/browser/resources/chromeos/login/screens/osauth/apply_online_password.js b/chrome/browser/resources/chromeos/login/screens/osauth/apply_online_password.js
index 5e081d3..6d6cee1 100644
--- a/chrome/browser/resources/chromeos/login/screens/osauth/apply_online_password.js
+++ b/chrome/browser/resources/chromeos/login/screens/osauth/apply_online_password.js
@@ -14,6 +14,8 @@
 import {OobeDialogHostBehavior} from '../../components/behaviors/oobe_dialog_host_behavior.js';
 import {OobeI18nBehavior, OobeI18nBehaviorInterface} from '../../components/behaviors/oobe_i18n_behavior.js';
 
+import {getTemplate} from './apply_online_password.html.js';
+
 /**
  * @constructor
  * @extends {PolymerElement}
@@ -37,7 +39,7 @@
   }
 
   static get template() {
-    return html`{__html_template__}`;
+    return getTemplate();
   }
 
   static get properties() {
diff --git a/chrome/browser/resources/chromeos/login/screens/osauth/cryptohome_recovery.js b/chrome/browser/resources/chromeos/login/screens/osauth/cryptohome_recovery.js
index 44b45414..064d80c 100644
--- a/chrome/browser/resources/chromeos/login/screens/osauth/cryptohome_recovery.js
+++ b/chrome/browser/resources/chromeos/login/screens/osauth/cryptohome_recovery.js
@@ -16,6 +16,8 @@
 import {MultiStepBehavior, MultiStepBehaviorInterface} from '../../components/behaviors/multi_step_behavior.js';
 import {OobeI18nBehavior, OobeI18nBehaviorInterface} from '../../components/behaviors/oobe_i18n_behavior.js';
 
+import {getTemplate} from './cryptohome_recovery.html.js';
+
 /**
  * UI mode for the dialog.
  * @enum {string}
@@ -46,7 +48,7 @@
   }
 
   static get template() {
-    return html`{__html_template__}`;
+    return getTemplate();
   }
 
   static get properties() {
diff --git a/chrome/browser/resources/chromeos/login/screens/osauth/cryptohome_recovery_setup.js b/chrome/browser/resources/chromeos/login/screens/osauth/cryptohome_recovery_setup.js
index 63152a7..451ef66 100644
--- a/chrome/browser/resources/chromeos/login/screens/osauth/cryptohome_recovery_setup.js
+++ b/chrome/browser/resources/chromeos/login/screens/osauth/cryptohome_recovery_setup.js
@@ -16,6 +16,8 @@
 import {MultiStepBehavior, MultiStepBehaviorInterface} from '../../components/behaviors/multi_step_behavior.js';
 import {OobeI18nBehavior, OobeI18nBehaviorInterface} from '../../components/behaviors/oobe_i18n_behavior.js';
 
+import {getTemplate} from './cryptohome_recovery_setup.html.js';
+
 /**
  * UI mode for the dialog.
  * @enum {string}
@@ -44,7 +46,7 @@
   }
 
   static get template() {
-    return html`{__html_template__}`;
+    return getTemplate();
   }
 
   static get properties() {
diff --git a/chrome/browser/resources/chromeos/login/screens/osauth/enter_old_password.js b/chrome/browser/resources/chromeos/login/screens/osauth/enter_old_password.js
index 98a219cb..d2ac60d 100644
--- a/chrome/browser/resources/chromeos/login/screens/osauth/enter_old_password.js
+++ b/chrome/browser/resources/chromeos/login/screens/osauth/enter_old_password.js
@@ -23,6 +23,8 @@
 import {OOBE_UI_STATE} from '../../components/display_manager_types.js';
 import {addSubmitListener} from '../../login_ui_tools.js';
 
+import {getTemplate} from './enter_old_password.html.js';
+
 
 /**
  * UI mode for the dialog.
@@ -59,7 +61,7 @@
   }
 
   static get template() {
-    return html`{__html_template__}`;
+    return getTemplate();
   }
 
   static get properties() {
diff --git a/chrome/browser/resources/chromeos/login/screens/osauth/factor_setup_success.js b/chrome/browser/resources/chromeos/login/screens/osauth/factor_setup_success.js
index fb5c9222..37c6fcc 100644
--- a/chrome/browser/resources/chromeos/login/screens/osauth/factor_setup_success.js
+++ b/chrome/browser/resources/chromeos/login/screens/osauth/factor_setup_success.js
@@ -21,6 +21,8 @@
 import {OobeI18nBehavior, OobeI18nBehaviorInterface} from '../../components/behaviors/oobe_i18n_behavior.js';
 import {OOBE_UI_STATE} from '../../components/display_manager_types.js';
 
+import {getTemplate} from './factor_setup_success.html.js';
+
 /**
  * @constructor
  * @extends {PolymerElement}
@@ -67,7 +69,7 @@
   }
 
   static get template() {
-    return html`{__html_template__}`;
+    return getTemplate();
   }
 
 
diff --git a/chrome/browser/resources/chromeos/login/screens/osauth/fingerprint_setup.js b/chrome/browser/resources/chromeos/login/screens/osauth/fingerprint_setup.js
index 7ce2f7b..b82be16 100644
--- a/chrome/browser/resources/chromeos/login/screens/osauth/fingerprint_setup.js
+++ b/chrome/browser/resources/chromeos/login/screens/osauth/fingerprint_setup.js
@@ -25,6 +25,8 @@
 import {OOBE_UI_STATE, SCREEN_GAIA_SIGNIN} from '../../components/display_manager_types.js';
 import {OobeCrLottie} from '../../components/oobe_cr_lottie.js';
 
+import {getTemplate} from './fingerprint_setup.html.js';
+
 
 /**
  * These values must be kept in sync with the values in
@@ -85,7 +87,7 @@
   }
 
   static get template() {
-    return html`{__html_template__}`;
+    return getTemplate();
   }
 
   static get properties() {
diff --git a/chrome/browser/resources/chromeos/login/screens/osauth/gaia_password_changed.js b/chrome/browser/resources/chromeos/login/screens/osauth/gaia_password_changed.js
index 1858420..4ce3eea1 100644
--- a/chrome/browser/resources/chromeos/login/screens/osauth/gaia_password_changed.js
+++ b/chrome/browser/resources/chromeos/login/screens/osauth/gaia_password_changed.js
@@ -27,6 +27,8 @@
 import {OOBE_UI_STATE} from '../../components/display_manager_types.js';
 import {addSubmitListener} from '../../login_ui_tools.js';
 
+import {getTemplate} from './gaia_password_changed.html.js';
+
 
 /**
  * UI mode for the dialog.
@@ -74,7 +76,7 @@
   }
 
   static get template() {
-    return html`{__html_template__}`;
+    return getTemplate();
   }
 
   static get properties() {
diff --git a/chrome/browser/resources/chromeos/login/screens/osauth/local_data_loss_warning.js b/chrome/browser/resources/chromeos/login/screens/osauth/local_data_loss_warning.js
index ca67371..2f5b4b9 100644
--- a/chrome/browser/resources/chromeos/login/screens/osauth/local_data_loss_warning.js
+++ b/chrome/browser/resources/chromeos/login/screens/osauth/local_data_loss_warning.js
@@ -22,6 +22,8 @@
 import {OOBE_UI_STATE} from '../../components/display_manager_types.js';
 import {addSubmitListener} from '../../login_ui_tools.js';
 
+import {getTemplate} from './local_data_loss_warning.html.js';
+
 /**
  * @constructor
  * @extends {PolymerElement}
@@ -41,7 +43,7 @@
   }
 
   static get template() {
-    return html`{__html_template__}`;
+    return getTemplate();
   }
 
   static get properties() {
diff --git a/chrome/browser/resources/chromeos/login/screens/osauth/local_password_setup.js b/chrome/browser/resources/chromeos/login/screens/osauth/local_password_setup.js
index e52b940d..5af21a5 100644
--- a/chrome/browser/resources/chromeos/login/screens/osauth/local_password_setup.js
+++ b/chrome/browser/resources/chromeos/login/screens/osauth/local_password_setup.js
@@ -26,6 +26,8 @@
 import {OobeTypes} from '../../components/oobe_types.js';
 import {addSubmitListener} from '../../login_ui_tools.js';
 
+import {getTemplate} from './local_password_setup.html.js';
+
 
 /**
  * UI mode for the dialog.
@@ -69,7 +71,7 @@
   }
 
   static get template() {
-    return html`{__html_template__}`;
+    return getTemplate();
   }
 
   static get properties() {
diff --git a/chrome/browser/resources/chromeos/login/screens/osauth/osauth_error.js b/chrome/browser/resources/chromeos/login/screens/osauth/osauth_error.js
index 84942bab..7078a63f 100644
--- a/chrome/browser/resources/chromeos/login/screens/osauth/osauth_error.js
+++ b/chrome/browser/resources/chromeos/login/screens/osauth/osauth_error.js
@@ -21,6 +21,8 @@
 import {OobeI18nBehavior, OobeI18nBehaviorInterface} from '../../components/behaviors/oobe_i18n_behavior.js';
 import {OOBE_UI_STATE} from '../../components/display_manager_types.js';
 
+import {getTemplate} from './osauth_error.html.js';
+
 /**
  * @constructor
  * @extends {PolymerElement}
@@ -40,7 +42,7 @@
   }
 
   static get template() {
-    return html`{__html_template__}`;
+    return getTemplate();
   }
 
 
diff --git a/chrome/browser/resources/chromeos/login/screens/osauth/password_selection.js b/chrome/browser/resources/chromeos/login/screens/osauth/password_selection.js
index 37c37c0..feef9870 100644
--- a/chrome/browser/resources/chromeos/login/screens/osauth/password_selection.js
+++ b/chrome/browser/resources/chromeos/login/screens/osauth/password_selection.js
@@ -18,6 +18,8 @@
 import {OobeDialogHostBehavior} from '../../components/behaviors/oobe_dialog_host_behavior.js';
 import {OobeI18nBehavior, OobeI18nBehaviorInterface} from '../../components/behaviors/oobe_i18n_behavior.js';
 
+import {getTemplate} from './password_selection.html.js';
+
 /**
  * Type of the password for setting up for the user.
  * @enum {string}
@@ -61,7 +63,7 @@
   }
 
   static get template() {
-    return html`{__html_template__}`;
+    return getTemplate();
   }
 
   static get properties() {
diff --git a/chrome/browser/resources/chromeos/login/screens/osauth/pin_setup.js b/chrome/browser/resources/chromeos/login/screens/osauth/pin_setup.js
index 0d4be9f..6fd7fb5 100644
--- a/chrome/browser/resources/chromeos/login/screens/osauth/pin_setup.js
+++ b/chrome/browser/resources/chromeos/login/screens/osauth/pin_setup.js
@@ -25,6 +25,8 @@
 import {OOBE_UI_STATE, SCREEN_GAIA_SIGNIN} from '../../components/display_manager_types.js';
 import {OobeTypes} from '../../components/oobe_types.js';
 
+import {getTemplate} from './pin_setup.html.js';
+
 
 const PinSetupState = {
   START: 'start',
@@ -51,7 +53,7 @@
   }
 
   static get template() {
-    return html`{__html_template__}`;
+    return getTemplate();
   }
 
   static get properties() {
diff --git a/chrome/browser/resources/compose/app.html b/chrome/browser/resources/compose/app.html
index d346ad6..de3733b8 100644
--- a/chrome/browser/resources/compose/app.html
+++ b/chrome/browser/resources/compose/app.html
@@ -35,6 +35,13 @@
     margin-block-start: -4px;
   }
 
+  #freMsbbHeading {
+    display: flex;
+    height: 48px;
+    align-items: start;
+    padding: 0 var(--padding_);
+  }
+
   #consentIconContainer {
     margin-inline-end: var(--gap-between-sections_);
     min-width: 48px;
@@ -80,6 +87,16 @@
     padding: 0 20px;
   }
 
+  #freMsbbContainer {
+    color: var(--cr-secondary-text-color);
+    font: inherit;
+    font-size: 13px;
+    line-height: 20px;
+    display: flex;
+    flex-direction: column;
+    padding: 0 20px;
+  }
+
   #heading {
     display: flex;
     height: 24px;
@@ -333,7 +350,7 @@
   }
 </style>
 
-<div id="consentDialog" class="dialog" hidden="[[showMainAppDialog_]]">
+<div id="consentDialog" class="dialog" hidden="[[!showConsentDialog_]]">
   <div id="consentHeading">
     <div id="consentIconContainer">
       <iron-icon icon="compose:compose"></iron-icon>
@@ -373,26 +390,25 @@
 </div>
 
 
-<div id="consentMSBBDialog" class="dialog" hidden>
-  <div id="consentMSBBHeading">
-    <h1>$i18n{consentMSBBTitle}</h1>
-    <cr-icon-button id="closeButtonConsent" iron-icon="cr:close"
+<div id="freMsbbDialog" class="dialog" hidden="[[!showMSBBDialog_]]">
+  <div id="freMsbbHeading">
+    <h1>$i18n{freMsbbTitle}</h1>
+    <cr-icon-button id="closeButtonMSBB" iron-icon="cr:close"
       on-click="onClose_">
     </cr-icon-button>
   </div>
 
-  <div id="consentMSBBContainer">
-    <div id="consentMSBBTopText">
-      $i18nRaw{consentMSBBMainTop}
-    </div>
-    <div id="consentMSBBBottomText">
-      $i18n{consentMSBBMainBottom}
+
+  <div id="freMsbbContainer">
+    <div id="freMsbbText">
+      $i18nRaw{freMsbbMain}
     </div>
   </div>
 
-  <div id="consentMSBBFooter" class="footer">
-    <cr-button id="ContinueButton" class="action-button">
-      $i18n{consentMSBBContinueButton}
+  <div id="freMsbbFooter" class="footer">
+    <cr-button id="SettingsButton" class="action-button"
+      on-click="onMsbbSettingsClick_">
+      $i18n{freMsbbSettingsButton}
     </cr-button>
   </div>
 </div>
diff --git a/chrome/browser/resources/compose/app.ts b/chrome/browser/resources/compose/app.ts
index f6b8aba..b1f28e8 100644
--- a/chrome/browser/resources/compose/app.ts
+++ b/chrome/browser/resources/compose/app.ts
@@ -41,6 +41,7 @@
 export interface ComposeAppElement {
   $: {
     consentDialog: HTMLElement,
+    freMsbbDialog: HTMLElement,
     consentFooter: HTMLElement,
     consentNoThanksButton: CrButtonElement,
     consentYesButton: CrButtonElement,
@@ -51,6 +52,7 @@
     cancelEditButton: CrButtonElement,
     closeButton: HTMLElement,
     closeButtonConsent: HTMLElement,
+    closeButtonMSBB: HTMLElement,
     editTextarea: ComposeTextareaElement,
     errorFooter: HTMLElement,
     acceptButton: CrButtonElement,
@@ -197,7 +199,10 @@
   enableAnimations: boolean;
   private eventTracker_: EventTracker = new EventTracker();
   private router_: ComposeDialogCallbackRouter = this.apiProxy_.getRouter();
+  private showConsentDialog_: boolean;
   private showMainAppDialog_: boolean;
+  private showMSBBDialog_: boolean;
+  private shouldShowMSBBDialog_: boolean;
   private showDisclaimerFooter_: boolean;
   private editedInput_: string;
   private feedbackState_: CrFeedbackOption;
@@ -251,17 +256,25 @@
   private getInitialState_() {
     this.apiProxy_.requestInitialState().then(initialState => {
       this.inputParams_ = initialState.configurableParams;
-      // The dialog can initially be in one of three view states. The consent
+      // The dialog can initially be in one of four view states. The consent
       // view is shown if consent is not currently granted. If consent was
       // granted but not through Compose use, the disclaimer view is shown.
-      // Otherwise, full consent causes the dialog to show at the main app
-      // state.
+      // Otherwise, full consent causes the dialog to show in either the
+      // main app state or the MSBB state if MSBB is not enabled.
+
       this.showMainAppDialog_ =
-          initialState.consentState === ConsentState.kConsented;
+          initialState.consentState === ConsentState.kConsented &&
+          initialState.msbbState;
       if (!this.showMainAppDialog_) {
         this.animator_.transitionToConsent();
       }
 
+      this.showMSBBDialog_ =
+          initialState.consentState === ConsentState.kConsented &&
+          !initialState.msbbState;
+      this.shouldShowMSBBDialog_ = !initialState.msbbState;
+      this.showConsentDialog_ =
+          initialState.consentState !== ConsentState.kConsented;
       this.showDisclaimerFooter_ =
           initialState.consentState === ConsentState.kExternalConsented;
 
@@ -308,14 +321,24 @@
 
   private onConsentYesButtonClick_() {
     this.apiProxy_.approveConsent();
-    this.showMainAppDialog_ = true;
     this.animator_.transitionToInput();
+    if (this.shouldShowMSBBDialog_) {
+      this.showMSBBDialog_ = true;
+    } else {
+      this.showMainAppDialog_ = true;
+    }
+    this.showConsentDialog_ = false;
   }
 
   private onDisclaimerLetsGoButtonClick_() {
     this.apiProxy_.acknowledgeConsentDisclaimer();
     this.showDisclaimerFooter_ = false;
-    this.showMainAppDialog_ = true;
+    this.showConsentDialog_ = false;
+    if (this.shouldShowMSBBDialog_) {
+      this.showMSBBDialog_ = true;
+    } else {
+      this.showMainAppDialog_ = true;
+    }
   }
 
   private onFirstRunBottomTextClick_(e: Event) {
@@ -332,10 +355,20 @@
   }
 
   private onClose_(e: Event) {
-    const closeReason = (e.target as HTMLElement).id === 'closeButtonConsent' ?
-        CloseReason.kConsentCloseButton :
-        CloseReason.kCloseButton;
-    this.apiProxy_.closeUi(closeReason);
+    switch ((e.target as HTMLElement).id) {
+      case 'closeButtonConsent': {
+        this.apiProxy_.closeUi(CloseReason.kConsentCloseButton);
+        break;
+      }
+      case 'closeButton': {
+        this.apiProxy_.closeUi(CloseReason.kCloseButton);
+        break;
+      }
+      case 'closeButtonMSBB': {
+        this.apiProxy_.closeUi(CloseReason.kMSBBCloseButton);
+        break;
+      }
+    }
   }
 
   private onEditedInputChanged_() {
@@ -439,6 +472,12 @@
     }
   }
 
+  private onMsbbSettingsClick_(e: Event) {
+    e.preventDefault();
+    // instruct the browser to open the corresponding settings page.
+    this.apiProxy_.openComposeSettings();
+  }
+
   private compose_(inputEdited: boolean = false) {
     assert(this.$.textarea.validate());
     assert(this.submitted_);
diff --git a/chrome/browser/resources/settings/performance_page/OWNERS b/chrome/browser/resources/settings/performance_page/OWNERS
new file mode 100644
index 0000000..7c22fc5
--- /dev/null
+++ b/chrome/browser/resources/settings/performance_page/OWNERS
@@ -0,0 +1 @@
+file://chrome/browser/ui/performance_controls/OWNERS
\ No newline at end of file
diff --git a/chrome/browser/safe_browsing/chrome_password_protection_service.cc b/chrome/browser/safe_browsing/chrome_password_protection_service.cc
index d451e8a..930ac53 100644
--- a/chrome/browser/safe_browsing/chrome_password_protection_service.cc
+++ b/chrome/browser/safe_browsing/chrome_password_protection_service.cc
@@ -1461,7 +1461,7 @@
 #if BUILDFLAG(IS_ANDROID)
     if (password_type.account_type() ==
             ReusedPasswordAccountType::SAVED_PASSWORD ||
-        IsSyncingGMAILPasswordWithSignedInProtectionEnabled(password_type)) {
+        password_type.account_type() == ReusedPasswordAccountType::GMAIL) {
       return true;
     }
 
diff --git a/chrome/browser/safe_browsing/download_protection/download_protection_service_unittest.cc b/chrome/browser/safe_browsing/download_protection/download_protection_service_unittest.cc
index 3d2f999f..ba9a308d 100644
--- a/chrome/browser/safe_browsing/download_protection/download_protection_service_unittest.cc
+++ b/chrome/browser/safe_browsing/download_protection/download_protection_service_unittest.cc
@@ -245,8 +245,7 @@
     test_url_loader_factory_map_[profile] =
         std::make_unique<network::TestURLLoaderFactory>();
     test_shared_loader_factory_map_[profile] =
-        base::MakeRefCounted<network::WeakWrapperSharedURLLoaderFactory>(
-            test_url_loader_factory_map_[profile].get());
+        test_url_loader_factory_map_[profile]->GetSafeWeakWrapper();
   }
 
   int download_report_count() { return download_report_count_; }
diff --git a/chrome/browser/safe_browsing/test_safe_browsing_service.cc b/chrome/browser/safe_browsing/test_safe_browsing_service.cc
index 8d6117c0..b325e8da 100644
--- a/chrome/browser/safe_browsing/test_safe_browsing_service.cc
+++ b/chrome/browser/safe_browsing/test_safe_browsing_service.cc
@@ -27,8 +27,7 @@
 // TestSafeBrowsingService functions:
 TestSafeBrowsingService::TestSafeBrowsingService()
     : test_shared_loader_factory_(
-          base::MakeRefCounted<network::WeakWrapperSharedURLLoaderFactory>(
-              &test_url_loader_factory_)) {
+          test_url_loader_factory_.GetSafeWeakWrapper()) {
 #if BUILDFLAG(FULL_SAFE_BROWSING)
   services_delegate_ = ServicesDelegate::CreateForTest(this, this);
 #endif  // BUILDFLAG(FULL_SAFE_BROWSING)
diff --git a/chrome/browser/screen_ai/screen_ai_install_state.cc b/chrome/browser/screen_ai/screen_ai_install_state.cc
index 45eaabea..eead748 100644
--- a/chrome/browser/screen_ai/screen_ai_install_state.cc
+++ b/chrome/browser/screen_ai/screen_ai_install_state.cc
@@ -24,6 +24,7 @@
 
 #if BUILDFLAG(IS_LINUX)
 #include "base/cpu.h"
+#include "base/files/file_util.h"
 #endif
 
 #if BUILDFLAG(IS_WIN)
@@ -248,6 +249,18 @@
   component_binary_path_.clear();
 }
 
+void ScreenAIInstallState::SetComponentFolderForTesting() {
+  CHECK_IS_TEST();
+#if BUILDFLAG(IS_LINUX)
+  // Set the path to the ScreenAI test files. For more details, see the
+  // `screen_ai_test_files` rule in the accessibility_common BUILD file.
+  base::FilePath screenai_library_path =
+      screen_ai::GetLatestComponentBinaryPath();
+  CHECK(base::PathExists(screenai_library_path));
+  SetComponentFolder(screenai_library_path.DirName());
+#endif  // BUILDFLAG(IS_LINUX)
+}
+
 void ScreenAIInstallState::SetStateForTesting(State state) {
   state_ = state;
   for (ScreenAIInstallState::Observer* observer : observers_) {
diff --git a/chrome/browser/screen_ai/screen_ai_install_state.h b/chrome/browser/screen_ai/screen_ai_install_state.h
index 933b296..2af8a31a 100644
--- a/chrome/browser/screen_ai/screen_ai_install_state.h
+++ b/chrome/browser/screen_ai/screen_ai_install_state.h
@@ -103,6 +103,7 @@
   State get_state() { return state_; }
 
   void ResetForTesting();
+  void SetComponentFolderForTesting();
   void SetStateForTesting(State state);
 
  private:
diff --git a/chrome/browser/search/background/ntp_custom_background_service_unittest.cc b/chrome/browser/search/background/ntp_custom_background_service_unittest.cc
index 41a5fe4..1938875 100644
--- a/chrome/browser/search/background/ntp_custom_background_service_unittest.cc
+++ b/chrome/browser/search/background/ntp_custom_background_service_unittest.cc
@@ -136,9 +136,8 @@
 class NtpCustomBackgroundServiceTest : public testing::Test {
  public:
   NtpCustomBackgroundServiceTest()
-      : profile_(MakeTestingProfile(
-            base::MakeRefCounted<network::WeakWrapperSharedURLLoaderFactory>(
-                &test_url_loader_factory_))),
+      : profile_(
+            MakeTestingProfile(test_url_loader_factory_.GetSafeWeakWrapper())),
         mock_theme_service_(static_cast<MockThemeService*>(
             ThemeServiceFactory::GetForProfile(profile_.get()))),
         mock_ntp_background_service_(static_cast<MockNtpBackgroundService*>(
@@ -176,12 +175,12 @@
  protected:
   // NOTE: The initialization order of these members matters.
   content::BrowserTaskEnvironment task_environment_;
+  network::TestURLLoaderFactory test_url_loader_factory_;
   std::unique_ptr<TestingProfile> profile_;
   base::SimpleTestClock clock_;
   MockNtpCustomBackgroundServiceObserver observer_;
   raw_ptr<MockThemeService> mock_theme_service_;
   raw_ptr<MockNtpBackgroundService> mock_ntp_background_service_;
-  network::TestURLLoaderFactory test_url_loader_factory_;
   base::HistogramTester histogram_tester_;
   std::unique_ptr<NtpCustomBackgroundService> custom_background_service_;
 };
diff --git a/chrome/browser/share/android/java/src/org/chromium/chrome/browser/share/link_to_text/LinkToTextHelper.java b/chrome/browser/share/android/java/src/org/chromium/chrome/browser/share/link_to_text/LinkToTextHelper.java
index 634c195c..e6cffc0 100644
--- a/chrome/browser/share/android/java/src/org/chromium/chrome/browser/share/link_to_text/LinkToTextHelper.java
+++ b/chrome/browser/share/android/java/src/org/chromium/chrome/browser/share/link_to_text/LinkToTextHelper.java
@@ -226,13 +226,10 @@
     public static void requestSelector(
             TextFragmentReceiver producer, RequestSelectorCallback callback) {
         producer.requestSelector(
-                new TextFragmentReceiver.RequestSelector_Response() {
-                    @Override
-                    public void call(String selector, Integer error, Integer readyStatus) {
-                        LinkToTextMetricsHelper.recordLinkToTextDiagnoseStatus(
-                                LinkToTextMetricsHelper.LinkToTextDiagnoseStatus.SELECTOR_RECEIVED);
-                        callback.apply(selector, error, readyStatus);
-                    }
+                (String selector, int error, int readyStatus) -> {
+                    LinkToTextMetricsHelper.recordLinkToTextDiagnoseStatus(
+                            LinkToTextMetricsHelper.LinkToTextDiagnoseStatus.SELECTOR_RECEIVED);
+                    callback.apply(selector, error, readyStatus);
                 });
     }
 
diff --git a/chrome/browser/ui/BUILD.gn b/chrome/browser/ui/BUILD.gn
index 53eeee4f..af83b6b 100644
--- a/chrome/browser/ui/BUILD.gn
+++ b/chrome/browser/ui/BUILD.gn
@@ -320,6 +320,10 @@
     "webui/predictors/predictors_ui.h",
     "webui/prefs_internals_source.cc",
     "webui/prefs_internals_source.h",
+    "webui/privacy_sandbox/privacy_sandbox_internals_handler.cc",
+    "webui/privacy_sandbox/privacy_sandbox_internals_handler.h",
+    "webui/privacy_sandbox/privacy_sandbox_internals_ui.cc",
+    "webui/privacy_sandbox/privacy_sandbox_internals_ui.h",
     "webui/segmentation_internals/segmentation_internals_page_handler_impl.cc",
     "webui/segmentation_internals/segmentation_internals_page_handler_impl.h",
     "webui/segmentation_internals/segmentation_internals_ui.cc",
@@ -1769,10 +1773,6 @@
       "webui/privacy_sandbox/privacy_sandbox_dialog_handler.h",
       "webui/privacy_sandbox/privacy_sandbox_dialog_ui.cc",
       "webui/privacy_sandbox/privacy_sandbox_dialog_ui.h",
-      "webui/privacy_sandbox/privacy_sandbox_internals_handler.cc",
-      "webui/privacy_sandbox/privacy_sandbox_internals_handler.h",
-      "webui/privacy_sandbox/privacy_sandbox_internals_ui.cc",
-      "webui/privacy_sandbox/privacy_sandbox_internals_ui.h",
       "webui/profile_info_watcher.cc",
       "webui/profile_info_watcher.h",
       "webui/profile_internals/profile_internals_handler.cc",
diff --git a/chrome/browser/ui/android/edge_to_edge/internal/java/src/org/chromium/chrome/browser/ui/edge_to_edge/EdgeToEdgeControllerImpl.java b/chrome/browser/ui/android/edge_to_edge/internal/java/src/org/chromium/chrome/browser/ui/edge_to_edge/EdgeToEdgeControllerImpl.java
index 57bb9a4..17adc63 100644
--- a/chrome/browser/ui/android/edge_to_edge/internal/java/src/org/chromium/chrome/browser/ui/edge_to_edge/EdgeToEdgeControllerImpl.java
+++ b/chrome/browser/ui/android/edge_to_edge/internal/java/src/org/chromium/chrome/browser/ui/edge_to_edge/EdgeToEdgeControllerImpl.java
@@ -59,7 +59,7 @@
     private Tab mCurrentTab;
     private WebContentsObserver mWebContentsObserver;
     private boolean mIsActivityToEdge;
-    private Insets mSystemInsets;
+    private @Nullable Insets mSystemInsets;
     private boolean mDidSetDecorAndListener;
 
     /**
@@ -151,7 +151,7 @@
     @Override
     public void registerAdjuster(EdgeToEdgePadAdjuster adjuster) {
         mPadAdjusters.addObserver(adjuster);
-        adjuster.adjustToEdge(mIsActivityToEdge, mSystemInsets.bottom);
+        if (mSystemInsets != null) adjuster.adjustToEdge(mIsActivityToEdge, mSystemInsets.bottom);
     }
 
     @Override
diff --git a/chrome/browser/ui/android/omnibox/BUILD.gn b/chrome/browser/ui/android/omnibox/BUILD.gn
index 942f14f..713476a4 100644
--- a/chrome/browser/ui/android/omnibox/BUILD.gn
+++ b/chrome/browser/ui/android/omnibox/BUILD.gn
@@ -266,7 +266,6 @@
 android_resources("java_resources") {
   sources = [
     "java/res/drawable-hdpi/bookmark_edit_active.png",
-    "java/res/drawable-hdpi/btn_mic.png",
     "java/res/drawable-hdpi/btn_star.png",
     "java/res/drawable-hdpi/btn_suggestion_refine.png",
     "java/res/drawable-hdpi/ic_history_googblue_24dp.png",
@@ -282,25 +281,21 @@
     "java/res/drawable-ldrtl-xxxhdpi/btn_suggestion_refine.png",
     "java/res/drawable-ldrtl-xxxhdpi/ic_suggestion_magnifier.png",
     "java/res/drawable-mdpi/bookmark_edit_active.png",
-    "java/res/drawable-mdpi/btn_mic.png",
     "java/res/drawable-mdpi/btn_star.png",
     "java/res/drawable-mdpi/btn_suggestion_refine.png",
     "java/res/drawable-mdpi/ic_history_googblue_24dp.png",
     "java/res/drawable-mdpi/ic_suggestion_magnifier.png",
     "java/res/drawable-xhdpi/bookmark_edit_active.png",
-    "java/res/drawable-xhdpi/btn_mic.png",
     "java/res/drawable-xhdpi/btn_star.png",
     "java/res/drawable-xhdpi/btn_suggestion_refine.png",
     "java/res/drawable-xhdpi/ic_history_googblue_24dp.png",
     "java/res/drawable-xhdpi/ic_suggestion_magnifier.png",
     "java/res/drawable-xxhdpi/bookmark_edit_active.png",
-    "java/res/drawable-xxhdpi/btn_mic.png",
     "java/res/drawable-xxhdpi/btn_star.png",
     "java/res/drawable-xxhdpi/btn_suggestion_refine.png",
     "java/res/drawable-xxhdpi/ic_history_googblue_24dp.png",
     "java/res/drawable-xxhdpi/ic_suggestion_magnifier.png",
     "java/res/drawable-xxxhdpi/bookmark_edit_active.png",
-    "java/res/drawable-xxxhdpi/btn_mic.png",
     "java/res/drawable-xxxhdpi/btn_star.png",
     "java/res/drawable-xxxhdpi/btn_suggestion_refine.png",
     "java/res/drawable-xxxhdpi/ic_history_googblue_24dp.png",
diff --git a/chrome/browser/ui/android/omnibox/java/res/drawable-hdpi/btn_mic.png b/chrome/browser/ui/android/omnibox/java/res/drawable-hdpi/btn_mic.png
deleted file mode 100644
index 65891b3..0000000
--- a/chrome/browser/ui/android/omnibox/java/res/drawable-hdpi/btn_mic.png
+++ /dev/null
Binary files differ
diff --git a/chrome/browser/ui/android/omnibox/java/res/drawable-mdpi/btn_mic.png b/chrome/browser/ui/android/omnibox/java/res/drawable-mdpi/btn_mic.png
deleted file mode 100644
index a5a36a7a..0000000
--- a/chrome/browser/ui/android/omnibox/java/res/drawable-mdpi/btn_mic.png
+++ /dev/null
Binary files differ
diff --git a/chrome/browser/ui/android/omnibox/java/res/drawable-xhdpi/btn_mic.png b/chrome/browser/ui/android/omnibox/java/res/drawable-xhdpi/btn_mic.png
deleted file mode 100644
index 4a03fd7..0000000
--- a/chrome/browser/ui/android/omnibox/java/res/drawable-xhdpi/btn_mic.png
+++ /dev/null
Binary files differ
diff --git a/chrome/browser/ui/android/omnibox/java/res/drawable-xxhdpi/btn_mic.png b/chrome/browser/ui/android/omnibox/java/res/drawable-xxhdpi/btn_mic.png
deleted file mode 100644
index 15408659..0000000
--- a/chrome/browser/ui/android/omnibox/java/res/drawable-xxhdpi/btn_mic.png
+++ /dev/null
Binary files differ
diff --git a/chrome/browser/ui/android/omnibox/java/res/drawable-xxxhdpi/btn_mic.png b/chrome/browser/ui/android/omnibox/java/res/drawable-xxxhdpi/btn_mic.png
deleted file mode 100644
index e258de6..0000000
--- a/chrome/browser/ui/android/omnibox/java/res/drawable-xxxhdpi/btn_mic.png
+++ /dev/null
Binary files differ
diff --git a/chrome/browser/ui/android/omnibox/java/res/layout/url_action_container.xml b/chrome/browser/ui/android/omnibox/java/res/layout/url_action_container.xml
index 9539b710..116e80a 100644
--- a/chrome/browser/ui/android/omnibox/java/res/layout/url_action_container.xml
+++ b/chrome/browser/ui/android/omnibox/java/res/layout/url_action_container.xml
@@ -25,7 +25,7 @@
         <org.chromium.ui.widget.ChromeImageButton
             android:id="@+id/mic_button"
             style="@style/LocationBarActionButton"
-            android:src="@drawable/btn_mic"
+            android:src="@drawable/ic_mic_white_24dp"
             android:visibility="invisible"
             android:contentDescription="@string/accessibility_toolbar_btn_mic" />
 
diff --git a/chrome/browser/ui/android/omnibox/java/src/org/chromium/chrome/browser/omnibox/LocationBarMediator.java b/chrome/browser/ui/android/omnibox/java/src/org/chromium/chrome/browser/omnibox/LocationBarMediator.java
index c08d823..dc9460d 100644
--- a/chrome/browser/ui/android/omnibox/java/src/org/chromium/chrome/browser/omnibox/LocationBarMediator.java
+++ b/chrome/browser/ui/android/omnibox/java/src/org/chromium/chrome/browser/omnibox/LocationBarMediator.java
@@ -343,7 +343,7 @@
         if (mProfileSupplier.hasValue()) setProfile(mProfileSupplier.get());
 
         mLocationBarLayout.setMicButtonDrawable(
-                AppCompatResources.getDrawable(mContext, R.drawable.btn_mic));
+                AppCompatResources.getDrawable(mContext, R.drawable.ic_mic_white_24dp));
         onPrimaryColorChanged();
 
         for (Runnable deferredRunnable : mDeferredNativeRunnables) {
diff --git a/chrome/browser/ui/android/omnibox/java/src/org/chromium/chrome/browser/omnibox/suggestions/basic/BasicSuggestionProcessor.java b/chrome/browser/ui/android/omnibox/java/src/org/chromium/chrome/browser/omnibox/suggestions/basic/BasicSuggestionProcessor.java
index 65735d0..d3ceabd6 100644
--- a/chrome/browser/ui/android/omnibox/java/src/org/chromium/chrome/browser/omnibox/suggestions/basic/BasicSuggestionProcessor.java
+++ b/chrome/browser/ui/android/omnibox/java/src/org/chromium/chrome/browser/omnibox/suggestions/basic/BasicSuggestionProcessor.java
@@ -83,7 +83,7 @@
         if (suggestion.isSearchSuggestion()) {
             switch (suggestion.getType()) {
                 case OmniboxSuggestionType.VOICE_SUGGEST:
-                    icon = R.drawable.btn_mic;
+                    icon = R.drawable.ic_mic_white_24dp;
                     break;
 
                 case OmniboxSuggestionType.SEARCH_SUGGEST_PERSONALIZED:
diff --git a/chrome/browser/ui/android/omnibox/java/src/org/chromium/chrome/browser/omnibox/suggestions/basic/BasicSuggestionProcessorUnitTest.java b/chrome/browser/ui/android/omnibox/java/src/org/chromium/chrome/browser/omnibox/suggestions/basic/BasicSuggestionProcessorUnitTest.java
index 86a24e8..eb693517 100644
--- a/chrome/browser/ui/android/omnibox/java/src/org/chromium/chrome/browser/omnibox/suggestions/basic/BasicSuggestionProcessorUnitTest.java
+++ b/chrome/browser/ui/android/omnibox/java/src/org/chromium/chrome/browser/omnibox/suggestions/basic/BasicSuggestionProcessorUnitTest.java
@@ -64,7 +64,7 @@
     private static final @DrawableRes int ICON_HISTORY = R.drawable.ic_history_googblue_24dp;
     private static final @DrawableRes int ICON_MAGNIFIER = R.drawable.ic_suggestion_magnifier;
     private static final @DrawableRes int ICON_TRENDS = R.drawable.trending_up_black_24dp;
-    private static final @DrawableRes int ICON_VOICE = R.drawable.btn_mic;
+    private static final @DrawableRes int ICON_VOICE = R.drawable.ic_mic_white_24dp;
     private static final @DrawableRes int ICON_FAVICON = 0; // Favicons do not come from resources.
 
     private static final Map<Integer, String> ICON_TYPE_NAMES;
diff --git a/chrome/browser/ui/android/plus_addresses/BUILD.gn b/chrome/browser/ui/android/plus_addresses/BUILD.gn
index 10ad557..9bd38bd 100644
--- a/chrome/browser/ui/android/plus_addresses/BUILD.gn
+++ b/chrome/browser/ui/android/plus_addresses/BUILD.gn
@@ -33,6 +33,7 @@
 android_resources("java_resources") {
   sources = [ "java/res/layout/plus_address_creation_prompt.xml" ]
   deps = [
+    "//chrome/android:chrome_app_java_resources",
     "//chrome/browser/ui/android/strings:ui_strings_grd",
     "//components/browser_ui/widget/android:java_resources",
   ]
@@ -65,6 +66,7 @@
     "//components/browser_ui/bottomsheet/android:java",
     "//components/browser_ui/bottomsheet/android:manager_java",
     "//content/public/android:content_java",
+    "//third_party/androidx:androidx_annotation_annotation_java",
     "//third_party/androidx:androidx_test_runner_java",
     "//third_party/jni_zero:jni_zero_java",
     "//third_party/junit",
diff --git a/chrome/browser/ui/android/plus_addresses/java/res/layout/plus_address_creation_prompt.xml b/chrome/browser/ui/android/plus_addresses/java/res/layout/plus_address_creation_prompt.xml
index 46b49b9cc..56c6f8b9 100644
--- a/chrome/browser/ui/android/plus_addresses/java/res/layout/plus_address_creation_prompt.xml
+++ b/chrome/browser/ui/android/plus_addresses/java/res/layout/plus_address_creation_prompt.xml
@@ -16,12 +16,14 @@
         android:paddingVertical="12dp">
 
   <ImageView
+      android:id="@+id/plus_address_logo"
       android:layout_width="wrap_content"
       android:layout_height="wrap_content"
       android:layout_gravity="center_horizontal"
       android:layout_marginBottom="@dimen/list_item_default_margin"
       android:importantForAccessibility="no"
-      app:srcCompat="@drawable/chrome_sync_logo" />
+      android:adjustViewBounds="true"
+      android:maxWidth="75dp" />
 
   <TextView
       android:id="@+id/plus_address_notice_title"
diff --git a/chrome/browser/ui/android/plus_addresses/java/src/org/chromium/chrome/browser/ui/plus_addresses/PlusAddressCreationBottomSheetContent.java b/chrome/browser/ui/android/plus_addresses/java/src/org/chromium/chrome/browser/ui/plus_addresses/PlusAddressCreationBottomSheetContent.java
index 8e542ed..0f9bc9e 100644
--- a/chrome/browser/ui/android/plus_addresses/java/src/org/chromium/chrome/browser/ui/plus_addresses/PlusAddressCreationBottomSheetContent.java
+++ b/chrome/browser/ui/android/plus_addresses/java/src/org/chromium/chrome/browser/ui/plus_addresses/PlusAddressCreationBottomSheetContent.java
@@ -12,6 +12,7 @@
 import android.view.View;
 import android.view.ViewGroup;
 import android.widget.Button;
+import android.widget.ImageView;
 import android.widget.TextView;
 
 import androidx.annotation.Nullable;
@@ -58,6 +59,9 @@
         TextView modalTitleView = mContentView.findViewById(R.id.plus_address_notice_title);
         modalTitleView.setText(modalTitle);
 
+        ImageView logoView = (ImageView) mContentView.findViewById(R.id.plus_address_logo);
+        logoView.setImageResource(R.drawable.plus_addresses_logo);
+
         NoUnderlineClickableSpan settingsLink =
                 new NoUnderlineClickableSpan(
                         activity,
diff --git a/chrome/browser/ui/android/quickactionsearchwidget/java/res/layout/quick_action_search_widget_medium_layout.xml b/chrome/browser/ui/android/quickactionsearchwidget/java/res/layout/quick_action_search_widget_medium_layout.xml
index 37aed6a..3d192d80a 100644
--- a/chrome/browser/ui/android/quickactionsearchwidget/java/res/layout/quick_action_search_widget_medium_layout.xml
+++ b/chrome/browser/ui/android/quickactionsearchwidget/java/res/layout/quick_action_search_widget_medium_layout.xml
@@ -58,7 +58,7 @@
 
         <ImageButton
             android:id="@+id/voice_search_quick_action_button"
-            android:src="@drawable/btn_mic"
+            android:src="@drawable/ic_mic_white_24dp"
             android:layout_marginHorizontal="@dimen/quick_action_search_widget_medium_button_horizontal_margin"
             style="@style/QuickActionSearchWidgetMediumButton"
             android:contentDescription="@string/accessibility_toolbar_btn_mic" />
diff --git a/chrome/browser/ui/android/quickactionsearchwidget/java/res/layout/quick_action_search_widget_small_layout.xml b/chrome/browser/ui/android/quickactionsearchwidget/java/res/layout/quick_action_search_widget_small_layout.xml
index 5bf0377..564da7c 100644
--- a/chrome/browser/ui/android/quickactionsearchwidget/java/res/layout/quick_action_search_widget_small_layout.xml
+++ b/chrome/browser/ui/android/quickactionsearchwidget/java/res/layout/quick_action_search_widget_small_layout.xml
@@ -65,7 +65,7 @@
             style="@style/QuickActionSearchWidgetSmallButton"
             android:layout_marginHorizontal="@dimen/quick_action_search_widget_small_button_horizontal_margin"
             android:contentDescription="@string/accessibility_toolbar_btn_mic"
-            android:src="@drawable/btn_mic" />
+            android:src="@drawable/ic_mic_white_24dp" />
 
         <ImageButton
             android:id="@+id/incognito_quick_action_button"
diff --git a/chrome/browser/ui/android/quickactionsearchwidget/java/res/layout/quick_action_search_widget_xsmall_layout.xml b/chrome/browser/ui/android/quickactionsearchwidget/java/res/layout/quick_action_search_widget_xsmall_layout.xml
index f3bc50f..a7922cd 100644
--- a/chrome/browser/ui/android/quickactionsearchwidget/java/res/layout/quick_action_search_widget_xsmall_layout.xml
+++ b/chrome/browser/ui/android/quickactionsearchwidget/java/res/layout/quick_action_search_widget_xsmall_layout.xml
@@ -65,7 +65,7 @@
             style="@style/QuickActionSearchWidgetXSmallButton"
             android:layout_marginHorizontal="@dimen/quick_action_search_widget_xsmall_button_horizontal_margin"
             android:contentDescription="@string/accessibility_toolbar_btn_mic"
-            android:src="@drawable/btn_mic" />
+            android:src="@drawable/ic_mic_white_24dp" />
 
         <ImageButton
             android:id="@+id/incognito_quick_action_button"
diff --git a/chrome/browser/ui/android/toolbar/java/res/layout/control_container.xml b/chrome/browser/ui/android/toolbar/java/res/layout/control_container.xml
index 4a760c9..2e60ad2 100644
--- a/chrome/browser/ui/android/toolbar/java/res/layout/control_container.xml
+++ b/chrome/browser/ui/android/toolbar/java/res/layout/control_container.xml
@@ -53,6 +53,7 @@
 
     <ViewStub
         android:id="@+id/target_view_stub"
+        android:inflatedId="@+id/toolbar_drag_drop_target_view"
         android:layout_width="match_parent"
         android:layout_marginTop="@dimen/tab_strip_height"
         android:layout_height="@dimen/toolbar_height_no_shadow"
diff --git a/chrome/browser/ui/android/toolbar/java/res/layout/radio_button_group_adaptive_toolbar_preference.xml b/chrome/browser/ui/android/toolbar/java/res/layout/radio_button_group_adaptive_toolbar_preference.xml
index dff7e791..37721a2c 100644
--- a/chrome/browser/ui/android/toolbar/java/res/layout/radio_button_group_adaptive_toolbar_preference.xml
+++ b/chrome/browser/ui/android/toolbar/java/res/layout/radio_button_group_adaptive_toolbar_preference.xml
@@ -51,7 +51,7 @@
           android:layout_height="wrap_content"
           android:minHeight="@dimen/min_touch_target_size"
           android:paddingTop="10dp"
-          app:iconSrc="@drawable/btn_mic"
+          app:iconSrc="@drawable/ic_mic_white_24dp"
           app:primaryText="@string/adaptive_toolbar_button_preference_voice_search" />
 
       <org.chromium.components.browser_ui.widget.RadioButtonWithDescription
diff --git a/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/browser/toolbar/optional_button/OptionalButtonViewTest.java b/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/browser/toolbar/optional_button/OptionalButtonViewTest.java
index 01d4af8..8629f512 100644
--- a/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/browser/toolbar/optional_button/OptionalButtonViewTest.java
+++ b/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/browser/toolbar/optional_button/OptionalButtonViewTest.java
@@ -160,7 +160,8 @@
     }
 
     private ButtonDataImpl getDataForReaderModeIconButton() {
-        Drawable iconDrawable = AppCompatResources.getDrawable(mActivity, R.drawable.btn_mic);
+        Drawable iconDrawable =
+                AppCompatResources.getDrawable(mActivity, R.drawable.ic_mic_white_24dp);
         OnClickListener clickListener = mock(OnClickListener.class);
         OnLongClickListener longClickListener = mock(OnLongClickListener.class);
         String contentDescription = mActivity.getString(R.string.reader_view_text_alt);
diff --git a/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/browser/toolbar/top/TabStripTransitionCoordinator.java b/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/browser/toolbar/top/TabStripTransitionCoordinator.java
index f610bad..3a8df771 100644
--- a/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/browser/toolbar/top/TabStripTransitionCoordinator.java
+++ b/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/browser/toolbar/top/TabStripTransitionCoordinator.java
@@ -11,7 +11,6 @@
 import android.view.View;
 import android.view.View.OnLayoutChangeListener;
 import android.view.ViewGroup;
-import android.view.ViewStub;
 
 import androidx.annotation.NonNull;
 import androidx.annotation.Nullable;
@@ -311,25 +310,26 @@
         updateTopMargin(toolbarHairline, topControlHeight);
 
         // Optionally, update the find toolbar and toolbar drop target views.
-        updateViewStubTopMargin(R.id.find_toolbar_stub, mTabStripHeight);
-        updateViewStubTopMargin(R.id.target_view_stub, mTabStripHeight);
-    }
-
-    private void updateViewStubTopMargin(int viewStubResourceId, int topMargin) {
-        View viewStub = mControlContainer.findViewById(viewStubResourceId);
-        if (viewStub.getParent() != null) {
-            // View is not yet inflated.
-            updateTopMargin(viewStub, topMargin);
-        } else {
-            View view = mControlContainer.findViewById(((ViewStub) viewStub).getInflatedId());
-            updateTopMargin(view, topMargin);
-        }
+        updateViewStubTopMargin(R.id.find_toolbar_stub, R.id.find_toolbar, mTabStripHeight);
+        updateViewStubTopMargin(
+                R.id.target_view_stub, R.id.toolbar_drag_drop_target_view, mTabStripHeight);
 
         for (var observer : mTabStripHeightObservers) {
             observer.onHeightChanged(mTabStripHeight);
         }
     }
 
+    private void updateViewStubTopMargin(int viewStubId, int inflatedViewId, int topMargin) {
+        View view = mControlContainer.findViewById(inflatedViewId);
+        if (view != null) {
+            // View is not yet inflated.
+            updateTopMargin(view, topMargin);
+        } else {
+            View viewStub = mControlContainer.findViewById(viewStubId);
+            updateTopMargin(viewStub, topMargin);
+        }
+    }
+
     private static void updateTopMargin(View view, int topMargin) {
         ViewGroup.MarginLayoutParams hairlineParams =
                 (ViewGroup.MarginLayoutParams) view.getLayoutParams();
diff --git a/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/browser/toolbar/top/TabStripTransitionCoordinatorUnitTest.java b/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/browser/toolbar/top/TabStripTransitionCoordinatorUnitTest.java
index 567c3ebc..d8eb865 100644
--- a/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/browser/toolbar/top/TabStripTransitionCoordinatorUnitTest.java
+++ b/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/browser/toolbar/top/TabStripTransitionCoordinatorUnitTest.java
@@ -18,7 +18,6 @@
 import android.view.View;
 import android.view.ViewGroup;
 import android.view.ViewGroup.MarginLayoutParams;
-import android.view.ViewParent;
 import android.widget.FrameLayout;
 
 import androidx.annotation.Nullable;
@@ -256,6 +255,20 @@
         assertTabStripHeightForMargins(TEST_TAB_STRIP_HEIGHT);
     }
 
+    @Test
+    public void viewStubInflated() {
+        doReturn(mSpyControlContainer.findToolbar)
+                .when(mSpyControlContainer)
+                .findViewById(R.id.find_toolbar);
+        doReturn(mSpyControlContainer.dropTargetView)
+                .when(mSpyControlContainer)
+                .findViewById(R.id.toolbar_drag_drop_target_view);
+
+        setDeviceWidthDp(480);
+        getBrowserControlsObserver().onControlsOffsetChanged(0, 0, 0, 0, false);
+        assertTabStripHeightForMargins(0);
+    }
+
     private void setDeviceWidthDp(int widthDp) {
         Configuration configuration = setConfigurationWithNewWidth(widthDp);
         simulateConfigurationChanged(configuration);
@@ -349,18 +362,12 @@
             doReturn(controlContainer.toolbarHairline)
                     .when(controlContainer)
                     .findViewById(R.id.toolbar_hairline);
-
-            // Initialize a non-null ViewParent for common use by the following control_container
-            // child views only for the purpose of testing.
-            var viewParent = Mockito.spy(ViewParent.class);
             doReturn(controlContainer.findToolbar)
                     .when(controlContainer)
                     .findViewById(R.id.find_toolbar_stub);
             doReturn(controlContainer.dropTargetView)
                     .when(controlContainer)
                     .findViewById(R.id.target_view_stub);
-            doReturn(viewParent).when(controlContainer.findToolbar).getParent();
-            doReturn(viewParent).when(controlContainer.dropTargetView).getParent();
 
             doAnswer(args -> context.getResources().getDisplayMetrics().widthPixels)
                     .when(controlContainer)
diff --git a/chrome/browser/ui/color/new_tab_page_color_mixer.cc b/chrome/browser/ui/color/new_tab_page_color_mixer.cc
index c5fd3ee..305f6e1 100644
--- a/chrome/browser/ui/color/new_tab_page_color_mixer.cc
+++ b/chrome/browser/ui/color/new_tab_page_color_mixer.cc
@@ -344,6 +344,8 @@
   mixer[kColorNewTabPageTextLight] =
       IncreaseLightness(kColorNewTabPageText, 0.40);
 
+  mixer[kColorRealboxAnswerIconBackground] = {SkColorSetRGB(0xD3, 0xE3, 0xFD)};
+  mixer[kColorRealboxAnswerIconForeground] = {SkColorSetRGB(0x04, 0x1E, 0x49)};
   mixer[kColorRealboxBackground] = {SK_ColorWHITE};
   mixer[kColorRealboxBackgroundHovered] = {SK_ColorWHITE};
   mixer[kColorRealboxBorder] = {
@@ -359,7 +361,12 @@
   mixer[kColorRealboxResultsControlBackgroundHovered] =
       ui::SetAlpha(gfx::kGoogleGrey900, /* 10% opacity */ 0.1 * SK_AlphaOPAQUE);
 
+  mixer[kColorRealboxResultsActionChip] = {SkColorSetRGB(0xA8, 0xC7, 0xFA)};
+  mixer[kColorRealboxResultsActionChipIcon] = {SkColorSetRGB(0x0B, 0x57, 0xD0)};
+  mixer[kColorRealboxResultsActionChipFocusOutline] = {
+      SkColorSetRGB(0x0B, 0x57, 0xD0)};
   mixer[kColorRealboxResultsDimSelected] = {gfx::kGoogleGrey700};
+  mixer[kColorRealboxResultsFocusIndicator] = {gfx::kGoogleBlue600};
   mixer[kColorRealboxResultsForeground] = {SK_ColorBLACK};
   mixer[kColorRealboxResultsForegroundDimmed] = {gfx::kGoogleGrey700};
   mixer[kColorRealboxResultsIconSelected] = {gfx::kGoogleGrey700};
diff --git a/chrome/browser/ui/extensions/extensions_overrides/simple_overrides_unittest.cc b/chrome/browser/ui/extensions/extensions_overrides/simple_overrides_unittest.cc
index 599e9c58..a969600 100644
--- a/chrome/browser/ui/extensions/extensions_overrides/simple_overrides_unittest.cc
+++ b/chrome/browser/ui/extensions/extensions_overrides/simple_overrides_unittest.cc
@@ -85,6 +85,7 @@
     extensions::manifest_keys::kSockets,
     extensions::manifest_keys::kSystemIndicator,
     extensions::manifest_keys::kTheme,
+    extensions::manifest_keys::kTrialTokens,
     extensions::manifest_keys::kTtsEngine,
     extensions::manifest_keys::kUrlHandlers,
     extensions::manifest_keys::kUsbPrinters,
diff --git a/chrome/browser/ui/performance_controls/test_support/battery_saver_browser_test_mixin.h b/chrome/browser/ui/performance_controls/test_support/battery_saver_browser_test_mixin.h
new file mode 100644
index 0000000..6fc878b
--- /dev/null
+++ b/chrome/browser/ui/performance_controls/test_support/battery_saver_browser_test_mixin.h
@@ -0,0 +1,71 @@
+// Copyright 2023 The Chromium Authors
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef CHROME_BROWSER_UI_PERFORMANCE_CONTROLS_TEST_SUPPORT_BATTERY_SAVER_BROWSER_TEST_MIXIN_H_
+#define CHROME_BROWSER_UI_PERFORMANCE_CONTROLS_TEST_SUPPORT_BATTERY_SAVER_BROWSER_TEST_MIXIN_H_
+
+#include "base/power_monitor/battery_level_provider.h"
+#include "base/power_monitor/battery_state_sampler.h"
+#include "base/test/power_monitor_test_utils.h"
+#include "chrome/browser/browser_process.h"
+#include "chrome/test/base/in_process_browser_test.h"
+#include "components/performance_manager/public/user_tuning/prefs.h"
+#include "components/prefs/pref_service.h"
+
+// Template to be used as a mixin class for battery saver tests extending
+// InteractiveBrowserTest.
+template <typename T,
+          typename =
+              std::enable_if_t<std::is_base_of_v<InProcessBrowserTest, T>>>
+class BatterySaverBrowserTestMixin : public T {
+ public:
+  template <class... Args>
+  explicit BatterySaverBrowserTestMixin(Args&&... args)
+      : T(std::forward<Args>(args)...) {}
+
+  BatterySaverBrowserTestMixin(const BatterySaverBrowserTestMixin&) = delete;
+  BatterySaverBrowserTestMixin& operator=(const BatterySaverBrowserTestMixin&) =
+      delete;
+
+  void SetUp() override {
+    SetUpFakeBatterySampler();
+
+    T::SetUp();
+  }
+
+  // Tests can configure battery state by overriding this method.
+  virtual base::BatteryLevelProvider::BatteryState GetFakeBatteryState() {
+    return base::test::TestBatteryLevelProvider::CreateBatteryState();
+  }
+
+  void SetBatterySaverModeEnabled(bool enabled) {
+    auto mode = enabled ? performance_manager::user_tuning::prefs::
+                              BatterySaverModeState::kEnabled
+                        : performance_manager::user_tuning::prefs::
+                              BatterySaverModeState::kDisabled;
+    g_browser_process->local_state()->SetInteger(
+        performance_manager::user_tuning::prefs::kBatterySaverModeState,
+        static_cast<int>(mode));
+  }
+
+ private:
+  void SetUpFakeBatterySampler() {
+    auto test_sampling_event_source =
+        std::make_unique<base::test::TestSamplingEventSource>();
+    auto test_battery_level_provider =
+        std::make_unique<base::test::TestBatteryLevelProvider>();
+
+    test_battery_level_provider->SetBatteryState(
+        BatterySaverBrowserTestMixin::GetFakeBatteryState());
+
+    battery_state_sampler_ =
+        base::BatteryStateSampler::CreateInstanceForTesting(
+            std::move(test_sampling_event_source),
+            std::move(test_battery_level_provider));
+  }
+
+  std::unique_ptr<base::BatteryStateSampler> battery_state_sampler_;
+};
+
+#endif  // CHROME_BROWSER_UI_PERFORMANCE_CONTROLS_TEST_SUPPORT_BATTERY_SAVER_BROWSER_TEST_MIXIN_H_
diff --git a/chrome/browser/ui/toolbar/app_menu_model.cc b/chrome/browser/ui/toolbar/app_menu_model.cc
index 3cca1f5f..5d058edd 100644
--- a/chrome/browser/ui/toolbar/app_menu_model.cc
+++ b/chrome/browser/ui/toolbar/app_menu_model.cc
@@ -83,6 +83,7 @@
 #include "components/dom_distiller/content/browser/uma_helper.h"
 #include "components/dom_distiller/core/dom_distiller_features.h"
 #include "components/dom_distiller/core/url_utils.h"
+#include "components/feature_engagement/public/event_constants.h"
 #include "components/password_manager/content/common/web_ui_constants.h"
 #include "components/password_manager/core/common/password_manager_features.h"
 #include "components/password_manager/core/common/password_manager_pref_names.h"
@@ -947,6 +948,9 @@
             "WrenchMenu.TimeToAction.ShowBookmarkSidePanel", delta);
       }
       LogMenuAction(MENU_ACTION_SHOW_BOOKMARK_SIDE_PANEL);
+      // Close IPH for side panel menu, if shown.
+      browser()->window()->NotifyFeatureEngagementEvent(
+          feature_engagement::events::kSidePanelFromMenuShown);
       break;
     case IDC_SHOW_BOOKMARK_MANAGER:
       if (!uma_action_recorded_) {
@@ -1219,6 +1223,9 @@
             "WrenchMenu.TimeToAction.ShowReadingModeSidePanel", delta);
       }
       LogMenuAction(MENU_ACTION_SHOW_READING_MODE_SIDE_PANEL);
+      // Close IPH for side panel menu, if shown.
+      browser()->window()->NotifyFeatureEngagementEvent(
+          feature_engagement::events::kSidePanelFromMenuShown);
       break;
 
     // Zoom menu
diff --git a/chrome/browser/ui/views/accessibility/caption_bubble_controller_views_browsertest.cc b/chrome/browser/ui/views/accessibility/caption_bubble_controller_views_browsertest.cc
index 7f0a833..925829f 100644
--- a/chrome/browser/ui/views/accessibility/caption_bubble_controller_views_browsertest.cc
+++ b/chrome/browser/ui/views/accessibility/caption_bubble_controller_views_browsertest.cc
@@ -1032,6 +1032,8 @@
   ASSERT_TRUE(GetBubble()->GetInactivityTimerForTesting()->IsRunning());
   test_task_runner->FastForwardBy(base::Seconds(15));
   EXPECT_TRUE(IsWidgetVisible());
+
+  SetTickClockForTesting(nullptr);
 }
 
 IN_PROC_BROWSER_TEST_F(CaptionBubbleControllerViewsTest, NonAsciiCharacter) {
@@ -1202,6 +1204,8 @@
   waiter.Wait();
   test_task_runner->FastForwardBy(base::Seconds(10));
   EXPECT_TRUE(IsWidgetVisible());
+
+  SetTickClockForTesting(nullptr);
 }
 
 // TODO(https://crbug.com/1207312): Flaky test.
@@ -1239,6 +1243,8 @@
   OnPartialTranscription("Killer whales");
   EXPECT_TRUE(IsWidgetVisible());
   EXPECT_EQ("Killer whales", GetLabelText());
+
+  SetTickClockForTesting(nullptr);
 }
 
 IN_PROC_BROWSER_TEST_F(CaptionBubbleControllerViewsTest,
@@ -1289,6 +1295,8 @@
   ASSERT_TRUE(GetBubble()->GetInactivityTimerForTesting()->IsRunning());
   EXPECT_TRUE(IsWidgetVisible());
   EXPECT_EQ("", GetLabelText());
+
+  SetTickClockForTesting(nullptr);
 }
 
 IN_PROC_BROWSER_TEST_F(CaptionBubbleControllerViewsTest, LiveTranslateLabel) {
diff --git a/chrome/browser/ui/views/autofill/popup/popup_view_utils.cc b/chrome/browser/ui/views/autofill/popup/popup_view_utils.cc
index 9b1007bc..16ead2f 100644
--- a/chrome/browser/ui/views/autofill/popup/popup_view_utils.cc
+++ b/chrome/browser/ui/views/autofill/popup/popup_view_utils.cc
@@ -559,7 +559,6 @@
     case PopupItemId::kFillExistingPlusAddress:
     case PopupItemId::kFillFullEmail:
     case PopupItemId::kFillFullPhoneNumber:
-    case PopupItemId::kAddressEntryNotSelectable:
     case PopupItemId::kGeneratePasswordEntry:
     case PopupItemId::kIbanEntry:
     case PopupItemId::kInsecureContextPaymentDisabledMessage:
@@ -610,7 +609,6 @@
     case PopupItemId::kDatalistEntry:
     case PopupItemId::kDevtoolsTestAddressEntry:
     case PopupItemId::kDevtoolsTestAddresses:
-    case PopupItemId::kAddressEntryNotSelectable:
     case PopupItemId::kFillExistingPlusAddress:
     case PopupItemId::kFillFullAddress:
     case PopupItemId::kFillFullName:
@@ -641,7 +639,6 @@
     case PopupItemId::kFillFullName:
     case PopupItemId::kFillFullEmail:
     case PopupItemId::kFillFullPhoneNumber:
-    case PopupItemId::kAddressEntryNotSelectable:
     case PopupItemId::kCreditCardEntry:
       return true;
     case PopupItemId::kAccountStoragePasswordEntry:
diff --git a/chrome/browser/ui/views/frame/browser_view.cc b/chrome/browser/ui/views/frame/browser_view.cc
index e576bb8..312f2e9 100644
--- a/chrome/browser/ui/views/frame/browser_view.cc
+++ b/chrome/browser/ui/views/frame/browser_view.cc
@@ -226,6 +226,7 @@
 #include "content/public/browser/web_contents.h"
 #include "content/public/common/content_switches.h"
 #include "extensions/common/command.h"
+#include "third_party/blink/public/common/features.h"
 #include "third_party/blink/public/common/permissions/permission_utils.h"
 #include "ui/accessibility/accessibility_features.h"
 #include "ui/accessibility/ax_enums.mojom.h"
@@ -2586,6 +2587,10 @@
 }
 
 void BrowserView::SynchronizeRenderWidgetHostVisualPropertiesForMainFrame() {
+  if (!base::FeatureList::IsEnabled(
+          blink::features::kDesktopPWAsAdditionalWindowingControls)) {
+    return;
+  }
   content::WebContents* web_contents = GetActiveWebContents();
   if (!web_contents || !web_contents->GetPrimaryMainFrame()) {
     return;
diff --git a/chrome/browser/ui/views/omnibox/omnibox_view_views_browsertest.cc b/chrome/browser/ui/views/omnibox/omnibox_view_views_browsertest.cc
index 159e7cd9..ba08f77 100644
--- a/chrome/browser/ui/views/omnibox/omnibox_view_views_browsertest.cc
+++ b/chrome/browser/ui/views/omnibox/omnibox_view_views_browsertest.cc
@@ -56,6 +56,7 @@
 #include "ui/base/ime/text_input_client.h"
 #include "ui/base/test/ui_controls.h"
 #include "ui/base/ui_base_switches.h"
+#include "ui/display/display_switches.h"
 #include "ui/events/event_processor.h"
 #include "ui/events/event_utils.h"
 #include "ui/events/test/event_generator.h"
@@ -156,6 +157,11 @@
 
  private:
   // InProcessBrowserTest:
+  void SetUpCommandLine(base::CommandLine* command_line) override {
+    // Some of these tests assume a 1.0 device scale factor.
+    command_line->AppendSwitchASCII(::switches::kForceDeviceScaleFactor, "1");
+  }
+
   void SetUpOnMainThread() override {
     ASSERT_TRUE(ui_test_utils::BringBrowserWindowToFront(browser()));
     chrome::FocusLocationBar(browser());
diff --git a/chrome/browser/ui/views/performance_controls/battery_saver_button_browsertest.cc b/chrome/browser/ui/views/performance_controls/battery_saver_button_browsertest.cc
index d2861f0..28b012b 100644
--- a/chrome/browser/ui/views/performance_controls/battery_saver_button_browsertest.cc
+++ b/chrome/browser/ui/views/performance_controls/battery_saver_button_browsertest.cc
@@ -8,6 +8,7 @@
 #include "chrome/browser/browser_process.h"
 #include "chrome/browser/performance_manager/public/user_tuning/battery_saver_mode_manager.h"
 #include "chrome/browser/ui/browser_element_identifiers.h"
+#include "chrome/browser/ui/performance_controls/test_support/battery_saver_browser_test_mixin.h"
 #include "chrome/browser/ui/performance_controls/test_support/user_education_browser_test_mixin.h"
 #include "chrome/browser/ui/views/frame/browser_view.h"
 #include "chrome/browser/ui/views/performance_controls/battery_saver_bubble_view.h"
@@ -32,22 +33,9 @@
 #include "ui/views/test/widget_test.h"
 #include "ui/views/widget/any_widget_observer.h"
 
-namespace {
-
-void SetBatterySaverModeEnabled(bool enabled) {
-  auto mode = enabled ? performance_manager::user_tuning::prefs::
-                            BatterySaverModeState::kEnabled
-                      : performance_manager::user_tuning::prefs::
-                            BatterySaverModeState::kDisabled;
-  g_browser_process->local_state()->SetInteger(
-      performance_manager::user_tuning::prefs::kBatterySaverModeState,
-      static_cast<int>(mode));
-}
-
-}  // namespace
-
 class BatterySaverHelpPromoTest
-    : public UserEducationBrowserTestMixin<InProcessBrowserTest> {
+    : public BatterySaverBrowserTestMixin<
+          UserEducationBrowserTestMixin<InProcessBrowserTest>> {
  public:
   BatterySaverHelpPromoTest() = default;
   ~BatterySaverHelpPromoTest() override = default;
@@ -56,9 +44,7 @@
     iph_features_.InitAndEnableFeatures(
         {feature_engagement::kIPHBatterySaverModeFeature});
 
-    SetUpFakeBatterySampler();
-
-    UserEducationBrowserTestMixin::SetUp();
+    BatterySaverBrowserTestMixin::SetUp();
   }
 
   void PressButton(views::Button* button) {
@@ -66,31 +52,7 @@
         button, ui::test::InteractionTestUtil::InputType::kMouse);
   }
 
-  void SetUpFakeBatterySampler() {
-    auto test_sampling_event_source =
-        std::make_unique<base::test::TestSamplingEventSource>();
-    auto test_battery_level_provider =
-        std::make_unique<base::test::TestBatteryLevelProvider>();
-
-    sampling_source_ = test_sampling_event_source.get();
-    battery_level_provider_ = test_battery_level_provider.get();
-    test_battery_level_provider->SetBatteryState(
-        base::test::TestBatteryLevelProvider::CreateBatteryState());
-
-    battery_state_sampler_ =
-        base::BatteryStateSampler::CreateInstanceForTesting(
-            std::move(test_sampling_event_source),
-            std::move(test_battery_level_provider));
-  }
-
  private:
-  raw_ptr<base::test::TestSamplingEventSource, AcrossTasksDanglingUntriaged>
-      sampling_source_;
-  raw_ptr<base::test::TestBatteryLevelProvider, AcrossTasksDanglingUntriaged>
-      battery_level_provider_;
-  // Only used on platforms without a battery level provider implementation.
-  std::unique_ptr<base::BatteryStateSampler> battery_state_sampler_;
-
   feature_engagement::test::ScopedIphFeatureList iph_features_;
 };
 
@@ -176,15 +138,12 @@
   EXPECT_EQ(expected_url, navigation_observer.last_navigation_url());
 }
 
-class BatterySaverBubbleViewTest : public InProcessBrowserTest {
+class BatterySaverBubbleViewTest
+    : public BatterySaverBrowserTestMixin<InProcessBrowserTest> {
  public:
   BatterySaverBubbleViewTest() = default;
   ~BatterySaverBubbleViewTest() override = default;
 
-  void SetUp() override { InProcessBrowserTest::SetUp(); }
-
-  void TearDown() override { InProcessBrowserTest::TearDown(); }
-
   BatterySaverButton* GetBatterySaverButton() {
     BatterySaverButton* battery_saver_button =
         BrowserView::GetBrowserViewForBrowser(browser())
diff --git a/chrome/browser/ui/views/side_panel/performance_controls/performance_side_panel_interactive_uitest.cc b/chrome/browser/ui/views/side_panel/performance_controls/performance_side_panel_interactive_uitest.cc
index 0617ee4..0999052c 100644
--- a/chrome/browser/ui/views/side_panel/performance_controls/performance_side_panel_interactive_uitest.cc
+++ b/chrome/browser/ui/views/side_panel/performance_controls/performance_side_panel_interactive_uitest.cc
@@ -8,6 +8,7 @@
 #include "base/test/scoped_feature_list.h"
 #include "chrome/browser/browser_process.h"
 #include "chrome/browser/ui/browser_element_identifiers.h"
+#include "chrome/browser/ui/performance_controls/test_support/battery_saver_browser_test_mixin.h"
 #include "chrome/browser/ui/performance_controls/test_support/memory_saver_browser_test_mixin.h"
 #include "chrome/browser/ui/toolbar/app_menu_model.h"
 #include "chrome/browser/ui/ui_features.h"
@@ -39,7 +40,8 @@
 }  // namespace
 
 class PerformanceSidePanelInteractiveTest
-    : public MemorySaverBrowserTestMixin<InteractiveBrowserTest> {
+    : public MemorySaverBrowserTestMixin<
+          BatterySaverBrowserTestMixin<InteractiveBrowserTest>> {
  public:
   void SetUp() override {
     scoped_feature_list_.InitWithFeatures(
@@ -48,9 +50,8 @@
         {});
     animation_mode_reset_ = gfx::AnimationTestApi::SetRichAnimationRenderMode(
         gfx::Animation::RichAnimationRenderMode::FORCE_DISABLED);
-    SetUpFakeBatterySampler();
     set_open_about_blank_on_browser_launch(true);
-    InteractiveBrowserTest::SetUp();
+    MemorySaverBrowserTestMixin::SetUp();
   }
 
   void SetUpOnMainThread() override {
@@ -58,20 +59,6 @@
     SetMemorySaverModeEnabled(true);
   }
 
-  void SetUpFakeBatterySampler() {
-    auto test_sampling_event_source =
-        std::make_unique<base::test::TestSamplingEventSource>();
-    auto test_battery_level_provider =
-        std::make_unique<base::test::TestBatteryLevelProvider>();
-    test_battery_level_provider->SetBatteryState(
-        base::test::TestBatteryLevelProvider::CreateBatteryState());
-
-    battery_state_sampler_ =
-        base::BatteryStateSampler::CreateInstanceForTesting(
-            std::move(test_sampling_event_source),
-            std::move(test_battery_level_provider));
-  }
-
   auto TryDiscardTab(int tab_index) {
     return Do(
         base::BindLambdaForTesting([=]() { TryDiscardTabAt(tab_index); }));
@@ -90,23 +77,14 @@
   }
 
   auto SetBatterySaverActive(bool active) {
-    return Do(base::BindLambdaForTesting([=] {
-      auto mode = active ? performance_manager::user_tuning::prefs::
-                               BatterySaverModeState::kEnabled
-                         : performance_manager::user_tuning::prefs::
-                               BatterySaverModeState::kDisabled;
-      g_browser_process->local_state()->SetInteger(
-          performance_manager::user_tuning::prefs::kBatterySaverModeState,
-          static_cast<int>(mode));
-    }));
+    return Do(base::BindLambdaForTesting(
+        [=] { SetBatterySaverModeEnabled(active); }));
   }
 
  private:
   base::test::ScopedFeatureList scoped_feature_list_;
   std::unique_ptr<base::AutoReset<gfx::Animation::RichAnimationRenderMode>>
       animation_mode_reset_;
-  // Only used on platforms without a battery level provider implementation.
-  std::unique_ptr<base::BatteryStateSampler> battery_state_sampler_;
 };
 
 IN_PROC_BROWSER_TEST_F(PerformanceSidePanelInteractiveTest,
diff --git a/chrome/browser/ui/views/side_panel/search_companion/companion_side_panel_controller.cc b/chrome/browser/ui/views/side_panel/search_companion/companion_side_panel_controller.cc
index 739e5b5..2aeff56 100644
--- a/chrome/browser/ui/views/side_panel/search_companion/companion_side_panel_controller.cc
+++ b/chrome/browser/ui/views/side_panel/search_companion/companion_side_panel_controller.cc
@@ -6,6 +6,7 @@
 
 #include "base/metrics/user_metrics.h"
 #include "base/metrics/user_metrics_action.h"
+#include "build/chromeos_buildflags.h"
 #include "chrome/browser/companion/core/features.h"
 #include "chrome/browser/companion/core/utils.h"
 #include "chrome/browser/profiles/profile.h"
@@ -80,6 +81,9 @@
   registry->Register(std::move(entry));
   AddObserver();
 
+// Only necessary on non-Ash builds. Granting 3P cookies on Ash causes
+// b/314326552.
+#if !BUILDFLAG(IS_CHROMEOS_ASH)
   // Give Search Companion Server 3P Cookie Permissions
   auto* webui_allowlist = WebUIAllowlist::GetOrCreate(browser->profile());
   const url::Origin companion_origin = url::Origin::Create(
@@ -89,6 +93,7 @@
       companion_origin,
       {ContentSettingsPattern::FromString("https://[*.]google.com"),
        ContentSettingsPattern::FromURL(GURL(GetHomepageURLForCompanion()))});
+#endif  // !BUILDFLAG(IS_CHROMEOS_ASH)
 }
 
 void CompanionSidePanelController::DeregisterEntry() {
diff --git a/chrome/browser/ui/views/side_panel/side_panel_coordinator.cc b/chrome/browser/ui/views/side_panel/side_panel_coordinator.cc
index 85f87c846..1e3e92b 100644
--- a/chrome/browser/ui/views/side_panel/side_panel_coordinator.cc
+++ b/chrome/browser/ui/views/side_panel/side_panel_coordinator.cc
@@ -41,6 +41,7 @@
 #include "chrome/browser/ui/views/toolbar/toolbar_view.h"
 #include "chrome/common/pref_names.h"
 #include "chrome/grit/generated_resources.h"
+#include "components/feature_engagement/public/event_constants.h"
 #include "components/feature_engagement/public/feature_constants.h"
 #include "components/strings/grit/components_strings.h"
 #include "ui/actions/action_id.h"
@@ -297,6 +298,11 @@
   if (features::IsChromeRefresh2023()) {
     browser_view_->unified_side_panel()->AddHeaderView(CreateHeader());
   }
+
+  if (base::FeatureList::IsEnabled(features::kSidePanelPinning)) {
+    browser_view_->MaybeShowStartupFeaturePromo(
+        feature_engagement::kIPHSidePanelGenericMenuFeature);
+  }
 }
 
 SidePanelCoordinator::~SidePanelCoordinator() {
@@ -513,6 +519,15 @@
     return;
   }
 
+  // Signal that the user has used the Pin feature.
+  browser_view_->NotifyFeatureEngagementEvent(
+      feature_engagement::events::kSidePanelPinned);
+
+  // Close IPH for side panel pinning, if shown.
+  browser_view_->CloseFeaturePromo(
+      feature_engagement::kIPHSidePanelGenericPinnableFeature,
+      user_education::EndFeaturePromoReason::kFeatureEngaged);
+
   std::optional<actions::ActionId> action_id =
       GetActionItem(current_entry_->key())->GetActionId();
   CHECK(action_id.has_value());
@@ -621,6 +636,12 @@
         feature_engagement::kIPHPowerBookmarksSidePanelFeature);
     browser_view_->browser()->window()->CloseFeaturePromo(
         feature_engagement::kIPHReadingModeSidePanelFeature);
+
+    if (base::FeatureList::IsEnabled(features::kSidePanelPinning)) {
+      // Close IPH for side panel menu, if shown.
+      browser_view_->browser()->window()->CloseFeaturePromo(
+          feature_engagement::kIPHSidePanelGenericMenuFeature);
+    }
   }
 
   SidePanelUtil::RecordSidePanelShowOrChangeEntryTrigger(open_trigger);
@@ -775,7 +796,11 @@
   current_entry_ = entry->GetWeakPtr();
   if (browser_view_->toolbar()->pinned_toolbar_actions_container()) {
     NotifyPinnedContainerOfActiveStateChange(entry->key(), true);
-    if (previous_entry) {
+    // Notify active state change only if the entry ids for the side panel are
+    // different. This is to ensure extensions container isn't notified if we
+    // switch between different extensions side panels or between global to
+    // contextual side panel of the same extension.
+    if (previous_entry && previous_entry->key().id() != entry->key().id()) {
       NotifyPinnedContainerOfActiveStateChange(previous_entry->key(), false);
     }
   } else if (auto* side_panel_container =
@@ -1292,6 +1317,12 @@
   header_pin_button_->SetVisible(
       !profile->IsIncognitoProfile() && !profile->IsGuestSession() &&
       action_item->GetProperty(actions::kActionItemPinnableKey));
+
+  if (!current_pinned_state) {
+    // Show IPH for side panel pinning icon.
+    browser_view_->browser()->window()->MaybeShowFeaturePromo(
+        feature_engagement::kIPHSidePanelGenericPinnableFeature);
+  }
 }
 
 void SidePanelCoordinator::UpdateToolbarButtonHighlight(
diff --git a/chrome/browser/ui/views/webid/fedcm_account_selection_view_desktop_browsertest.cc b/chrome/browser/ui/views/webid/fedcm_account_selection_view_desktop_browsertest.cc
index ec1a91e..5b699b5b 100644
--- a/chrome/browser/ui/views/webid/fedcm_account_selection_view_desktop_browsertest.cc
+++ b/chrome/browser/ui/views/webid/fedcm_account_selection_view_desktop_browsertest.cc
@@ -37,7 +37,8 @@
         std::make_optional<std::string>("iframe-example.com"),
         {{"idp-example.com", accounts, content::IdentityProviderMetadata(),
           content::ClientMetadata(GURL::EmptyGURL(), GURL::EmptyGURL()),
-          blink::mojom::RpContext::kSignIn, /*request_permission=*/true}},
+          blink::mojom::RpContext::kSignIn, /*request_permission=*/true,
+          /*has_login_status_mismatch=*/false}},
         Account::SignInMode::kExplicit, /*show_auto_reauthn_checkbox=*/false);
   }
 
diff --git a/chrome/browser/ui/views/webid/fedcm_account_selection_view_desktop_unittest.cc b/chrome/browser/ui/views/webid/fedcm_account_selection_view_desktop_unittest.cc
index 59e05a69..e3557c0 100644
--- a/chrome/browser/ui/views/webid/fedcm_account_selection_view_desktop_unittest.cc
+++ b/chrome/browser/ui/views/webid/fedcm_account_selection_view_desktop_unittest.cc
@@ -253,7 +253,8 @@
         std::make_optional<std::string>(kIframeEtldPlusOne),
         {{kIdpEtldPlusOne, accounts, content::IdentityProviderMetadata(),
           content::ClientMetadata(GURL(), GURL()),
-          blink::mojom::RpContext::kSignIn, /* request_permission */ true}},
+          blink::mojom::RpContext::kSignIn, /*request_permission=*/true,
+          /*has_login_status_mismatch=*/false}},
         mode, show_auto_reauthn_checkbox);
   }
 
diff --git a/chrome/browser/ui/webui/compose/compose_ui.cc b/chrome/browser/ui/webui/compose/compose_ui.cc
index e30fc96..abfe4c8 100644
--- a/chrome/browser/ui/webui/compose/compose_ui.cc
+++ b/chrome/browser/ui/webui/compose/compose_ui.cc
@@ -43,10 +43,9 @@
       {"consentMainBottom", IDS_COMPOSE_CONSENT_MAIN_BOTTOM},
       {"consentNoButton", IDS_COMPOSE_CONSENT_NO_BUTTON},
       {"consentYesButton", IDS_COMPOSE_CONSENT_YES_BUTTON},
-      {"consentMSBBTitle", IDS_COMPOSE_MSBB_CONSENT_TITLE},
-      {"consentMSBBMainTop", IDS_COMPOSE_MSBB_CONSENT_MAIN_TOP},
-      {"consentMSBBMainBottom", IDS_COMPOSE_MSBB_CONSENT_MAIN_BOTTOM},
-      {"consentMSBBContinueButton", IDS_COMPOSE_MSBB_CONSENT_CONTINUE_BUTTON},
+      {"freMsbbTitle", IDS_COMPOSE_FRE_MSBB_TITLE},
+      {"freMsbbMain", IDS_COMPOSE_FRE_MSBB_MAIN},
+      {"freMsbbSettingsButton", IDS_COMPOSE_FRE_MSBB_SETTINGS_BUTTON},
       {"dialogTitle", IDS_COMPOSE_DIALOG_TITLE},
       {"disclaimerLetsGoButton", IDS_COMPOSE_DISCLAIMER_BUTTON},
       {"inputPlaceholder", IDS_COMPOSE_INPUT_PLACEHOLDER},
@@ -73,8 +72,8 @@
       {"editUpdateButton", IDS_COMPOSE_EDIT_UPDATE_BUTTON},
       {"undo", IDS_COMPOSE_UNDO},
       {"resubmit", IDS_COMPOSE_RESUBMIT},
-      {"thumbsDown", IDS_THUMBS_DOWN},
-      {"thumbsUp", IDS_THUMBS_UP},
+      {"thumbsDown", IDS_COMPOSE_THUMBS_DOWN},
+      {"thumbsUp", IDS_COMPOSE_THUMBS_UP},
   };
   source->AddLocalizedStrings(kStrings);
   source->AddBoolean("enableAnimations",
diff --git a/chrome/browser/ui/webui/privacy_sandbox/privacy_sandbox_internals_handler_browsertest.cc b/chrome/browser/ui/webui/privacy_sandbox/privacy_sandbox_internals_handler_browsertest.cc
index da5ddfd8..50dcb595 100644
--- a/chrome/browser/ui/webui/privacy_sandbox/privacy_sandbox_internals_handler_browsertest.cc
+++ b/chrome/browser/ui/webui/privacy_sandbox/privacy_sandbox_internals_handler_browsertest.cc
@@ -76,8 +76,8 @@
     waiter_.Notify();
   }
 
-  void ContentSettingsPatternToStringCallback(const std::string& s) {
-    content_settings_pattern_to_string_cb_data_ = s;
+  void StringCallback(const std::string& s) {
+    string_cb_data_ = s;
     waiter_.Notify();
   }
 
@@ -89,7 +89,7 @@
   CallbackWaiter waiter_;
 
   std::vector<ContentSettingPatternSource> get_cookie_content_settings_cb_data_;
-  std::string content_settings_pattern_to_string_cb_data_;
+  std::string string_cb_data_;
 };
 
 IN_PROC_BROWSER_TEST_F(PrivacySandboxInternalsMojoTest,
@@ -115,13 +115,12 @@
        {"[*.]example.com", "http://example.net", "example.org"}) {
     ContentSettingsPattern pattern = ContentSettingsPattern::FromString(regex);
     remote_->ContentSettingsPatternToString(
-        pattern, base::BindOnce(&PrivacySandboxInternalsMojoTest::
-                                    ContentSettingsPatternToStringCallback,
-                                base::Unretained(this)));
+        pattern,
+        base::BindOnce(&PrivacySandboxInternalsMojoTest::StringCallback,
+                       base::Unretained(this)));
     waiter_.Wait();
     waiter_.Reset();
-    EXPECT_THAT(content_settings_pattern_to_string_cb_data_,
-                StrEq(pattern.ToString()));
+    EXPECT_THAT(string_cb_data_, StrEq(pattern.ToString()));
   }
 }
 }  // namespace
diff --git a/chrome/browser/ui/webui/privacy_sandbox/privacy_sandbox_internals_ui.cc b/chrome/browser/ui/webui/privacy_sandbox/privacy_sandbox_internals_ui.cc
index bb796d6b..47c0109 100644
--- a/chrome/browser/ui/webui/privacy_sandbox/privacy_sandbox_internals_ui.cc
+++ b/chrome/browser/ui/webui/privacy_sandbox/privacy_sandbox_internals_ui.cc
@@ -15,18 +15,13 @@
 #include "privacy_sandbox_internals_ui.h"
 
 namespace privacy_sandbox_internals {
-namespace {
 using ::privacy_sandbox_internals::mojom::Page;
 using ::privacy_sandbox_internals::mojom::PageHandler;
 
-// TODO(b/308167671): Relocate this to the constants file.
-const char kChromeUIPrivacySandboxInternalsHost[] = "privacy-sandbox-internals";
-}  // namespace
-
 PrivacySandboxInternalsUI::PrivacySandboxInternalsUI(content::WebUI* web_ui)
     : ui::MojoWebUIController(web_ui) {
   content::WebUIDataSource* source = content::WebUIDataSource::CreateAndAdd(
-      Profile::FromWebUI(web_ui), kChromeUIPrivacySandboxInternalsHost);
+      Profile::FromWebUI(web_ui), chrome::kChromeUIPrivacySandboxInternalsHost);
   webui::SetupWebUIDataSource(
       source,
       base::make_span(kPrivacySandboxInternalsResources,
diff --git a/chrome/browser/ui/webui/settings/OWNERS b/chrome/browser/ui/webui/settings/OWNERS
index 2516b51..c494850 100644
--- a/chrome/browser/ui/webui/settings/OWNERS
+++ b/chrome/browser/ui/webui/settings/OWNERS
@@ -18,3 +18,5 @@
 per-file settings_clear_browsing_data_handler*=sauski@google.com
 per-file settings_localized_strings_provider*=sauski@google.com
 per-file settings_security_key_handler*=file://device/fido/OWNERS
+
+per-file performance_*=file://chrome/browser/ui/performance_controls/OWNERS
\ No newline at end of file
diff --git a/chrome/browser/ui/webui/settings/performance_settings_interactive_uitest.cc b/chrome/browser/ui/webui/settings/performance_settings_interactive_uitest.cc
index 66b3b00..23dade74 100644
--- a/chrome/browser/ui/webui/settings/performance_settings_interactive_uitest.cc
+++ b/chrome/browser/ui/webui/settings/performance_settings_interactive_uitest.cc
@@ -12,6 +12,7 @@
 #include "chrome/browser/browser_process.h"
 #include "chrome/browser/performance_manager/public/user_tuning/battery_saver_mode_manager.h"
 #include "chrome/browser/ui/browser_finder.h"
+#include "chrome/browser/ui/performance_controls/test_support/battery_saver_browser_test_mixin.h"
 #include "chrome/browser/ui/webui/feedback/feedback_dialog.h"
 #include "chrome/common/url_constants.h"
 #include "chrome/test/base/ui_test_utils.h"
@@ -423,13 +424,9 @@
 }
 
 #if !BUILDFLAG(IS_CHROMEOS)
-class BatterySettingsInteractiveTest : public InteractiveBrowserTest {
+class BatterySettingsInteractiveTest
+    : public BatterySaverBrowserTestMixin<InteractiveBrowserTest> {
  public:
-  void SetUp() override {
-    SetUpFakeBatterySampler();
-    InteractiveBrowserTest::SetUp();
-  }
-
   void SetUpOnMainThread() override {
     InteractiveBrowserTest::SetUpOnMainThread();
     ASSERT_TRUE(embedded_test_server()->InitializeAndListen());
@@ -441,21 +438,9 @@
     InteractiveBrowserTest::TearDownOnMainThread();
   }
 
-  void SetUpFakeBatterySampler() {
-    auto test_sampling_event_source =
-        std::make_unique<base::test::TestSamplingEventSource>();
-    auto test_battery_level_provider =
-        std::make_unique<base::test::TestBatteryLevelProvider>();
-
-    sampling_source_ = test_sampling_event_source.get();
-    battery_level_provider_ = test_battery_level_provider.get();
-    test_battery_level_provider->SetBatteryState(
-        base::test::TestBatteryLevelProvider::CreateBatteryState(1, true, 100));
-
-    battery_state_sampler_ =
-        base::BatteryStateSampler::CreateInstanceForTesting(
-            std::move(test_sampling_event_source),
-            std::move(test_battery_level_provider));
+  base::BatteryLevelProvider::BatteryState GetFakeBatteryState() override {
+    return base::test::TestBatteryLevelProvider::CreateBatteryState(1, true,
+                                                                    100);
   }
 
   auto ClickElement(const ui::ElementIdentifier& contents_id,
@@ -519,11 +504,6 @@
   }
 
  private:
-  raw_ptr<base::test::TestSamplingEventSource, DanglingUntriaged>
-      sampling_source_;
-  raw_ptr<base::test::TestBatteryLevelProvider, DanglingUntriaged>
-      battery_level_provider_;
-  std::unique_ptr<base::BatteryStateSampler> battery_state_sampler_;
   base::test::ScopedFeatureList scoped_feature_list_;
 };
 
diff --git a/chrome/browser/ui/webui/settings/safety_check_handler.cc b/chrome/browser/ui/webui/settings/safety_check_handler.cc
index f4a0cab..7ba5b95 100644
--- a/chrome/browser/ui/webui/settings/safety_check_handler.cc
+++ b/chrome/browser/ui/webui/settings/safety_check_handler.cc
@@ -392,10 +392,6 @@
             GetStringForExtensions(status, Blocklisted(blocklisted),
                                    reenabled_user, reenabled_admin));
   FireWebUIListener(kExtensionsEvent, event);
-  if (status != ExtensionsStatus::kChecking) {
-    base::UmaHistogramEnumeration("Settings.SafetyCheck.ExtensionsResult",
-                                  status);
-  }
   extensions_status_ = status;
   CompleteParentIfChildrenCompleted();
 }
diff --git a/chrome/browser/ui/webui/settings/safety_check_handler_unittest.cc b/chrome/browser/ui/webui/settings/safety_check_handler_unittest.cc
index e79a8652..5a8a5d1 100644
--- a/chrome/browser/ui/webui/settings/safety_check_handler_unittest.cc
+++ b/chrome/browser/ui/webui/settings/safety_check_handler_unittest.cc
@@ -1401,9 +1401,6 @@
       kExtensions,
       static_cast<int>(
           SafetyCheckHandler::ExtensionsStatus::kNoneBlocklisted)));
-  histogram_tester_.ExpectBucketCount(
-      "Settings.SafetyCheck.ExtensionsResult",
-      SafetyCheckHandler::ExtensionsStatus::kNoneBlocklisted, 1);
 }
 
 TEST_F(SafetyCheckHandlerTest, CheckExtensions_NoneBlocklisted) {
@@ -1423,9 +1420,6 @@
   EXPECT_TRUE(event);
   VerifyDisplayString(event,
                       "You're protected from potentially harmful extensions");
-  histogram_tester_.ExpectBucketCount(
-      "Settings.SafetyCheck.ExtensionsResult",
-      SafetyCheckHandler::ExtensionsStatus::kNoneBlocklisted, 1);
 }
 
 TEST_F(SafetyCheckHandlerTest, CheckExtensions_BlocklistedAllDisabled) {
@@ -1448,9 +1442,6 @@
   EXPECT_TRUE(event);
   VerifyDisplayString(
       event, "1 potentially harmful extension is off. You can also remove it.");
-  histogram_tester_.ExpectBucketCount(
-      "Settings.SafetyCheck.ExtensionsResult",
-      SafetyCheckHandler::ExtensionsStatus::kBlocklistedAllDisabled, 1);
 }
 
 TEST_F(SafetyCheckHandlerTest, CheckExtensions_BlocklistedReenabledAllByUser) {
@@ -1473,9 +1464,6 @@
   EXPECT_TRUE(event);
   VerifyDisplayString(event,
                       "You turned 1 potentially harmful extension back on");
-  histogram_tester_.ExpectBucketCount(
-      "Settings.SafetyCheck.ExtensionsResult",
-      SafetyCheckHandler::ExtensionsStatus::kBlocklistedReenabledAllByUser, 1);
 }
 
 TEST_F(SafetyCheckHandlerTest, CheckExtensions_BlocklistedReenabledAllByAdmin) {
@@ -1498,9 +1486,6 @@
   VerifyDisplayString(event,
                       "Your administrator turned 1 potentially harmful "
                       "extension back on");
-  histogram_tester_.ExpectBucketCount(
-      "Settings.SafetyCheck.ExtensionsResult",
-      SafetyCheckHandler::ExtensionsStatus::kBlocklistedReenabledAllByAdmin, 1);
 }
 
 TEST_F(SafetyCheckHandlerTest, CheckExtensions_BlocklistedReenabledSomeByUser) {
@@ -1539,9 +1524,6 @@
                       "You turned 1 potentially harmful extension back "
                       "on. Your administrator "
                       "turned 1 potentially harmful extension back on.");
-  histogram_tester_.ExpectBucketCount(
-      "Settings.SafetyCheck.ExtensionsResult",
-      SafetyCheckHandler::ExtensionsStatus::kBlocklistedReenabledSomeByUser, 1);
 }
 
 TEST_F(SafetyCheckHandlerTest, CheckParentRanDisplayString) {
diff --git a/chrome/browser/ui/webui/side_panel/customize_chrome/customize_chrome_page_handler_unittest.cc b/chrome/browser/ui/webui/side_panel/customize_chrome/customize_chrome_page_handler_unittest.cc
index caf6ed00..d42c0378 100644
--- a/chrome/browser/ui/webui/side_panel/customize_chrome/customize_chrome_page_handler_unittest.cc
+++ b/chrome/browser/ui/webui/side_panel/customize_chrome/customize_chrome_page_handler_unittest.cc
@@ -248,9 +248,8 @@
 class CustomizeChromePageHandlerTest : public testing::Test {
  public:
   CustomizeChromePageHandlerTest()
-      : profile_(MakeTestingProfile(
-            base::MakeRefCounted<network::WeakWrapperSharedURLLoaderFactory>(
-                &test_url_loader_factory_))),
+      : profile_(
+            MakeTestingProfile(test_url_loader_factory_.GetSafeWeakWrapper())),
         mock_ntp_custom_background_service_(profile_.get()),
         mock_ntp_background_service_(static_cast<MockNtpBackgroundService*>(
             NtpBackgroundServiceFactory::GetForProfile(profile_.get()))),
@@ -313,6 +312,7 @@
  protected:
   // NOTE: The initialization order of these members matters.
   content::BrowserTaskEnvironment task_environment_;
+  network::TestURLLoaderFactory test_url_loader_factory_;
   std::unique_ptr<TestingProfile> profile_;
   testing::NiceMock<MockNtpCustomBackgroundService>
       mock_ntp_custom_background_service_;
@@ -320,7 +320,6 @@
   // #addr-of
   RAW_PTR_EXCLUSION NtpCustomBackgroundServiceObserver*
       ntp_custom_background_service_observer_;
-  network::TestURLLoaderFactory test_url_loader_factory_;
   raw_ptr<MockNtpBackgroundService> mock_ntp_background_service_;
   content::TestWebContentsFactory web_contents_factory_;
   raw_ptr<content::WebContents> web_contents_;
diff --git a/chrome/browser/ui/webui/side_panel/customize_chrome/wallpaper_search/wallpaper_search_handler_unittest.cc b/chrome/browser/ui/webui/side_panel/customize_chrome/wallpaper_search/wallpaper_search_handler_unittest.cc
index 1024706..e93b24f 100644
--- a/chrome/browser/ui/webui/side_panel/customize_chrome/wallpaper_search/wallpaper_search_handler_unittest.cc
+++ b/chrome/browser/ui/webui/side_panel/customize_chrome/wallpaper_search/wallpaper_search_handler_unittest.cc
@@ -129,10 +129,9 @@
 class WallpaperSearchHandlerTest : public testing::Test {
  public:
   WallpaperSearchHandlerTest()
-      : profile_(MakeTestingProfile(
-            base::MakeRefCounted<network::WeakWrapperSharedURLLoaderFactory>(
-                &test_url_loader_factory_),
-            &local_state_)),
+      : profile_(
+            MakeTestingProfile(test_url_loader_factory_.GetSafeWeakWrapper(),
+                               &local_state_)),
         mock_optimization_guide_keyed_service_(
             static_cast<MockOptimizationGuideKeyedService*>(
                 OptimizationGuideKeyedServiceFactory::GetForProfile(
@@ -198,10 +197,10 @@
   // NOTE: The initialization order of these members matters.
   content::BrowserTaskEnvironment task_environment_{
       base::test::TaskEnvironment::TimeSource::MOCK_TIME};
+  network::TestURLLoaderFactory test_url_loader_factory_;
   TestingPrefServiceSimple local_state_;
   std::unique_ptr<TestingProfile> profile_;
   base::test::ScopedFeatureList feature_list_;
-  network::TestURLLoaderFactory test_url_loader_factory_;
   raw_ptr<MockOptimizationGuideKeyedService>
       mock_optimization_guide_keyed_service_;
   image_fetcher::MockImageDecoder mock_image_decoder_;
diff --git a/chrome/browser/win/conflicts/module_info_util.cc b/chrome/browser/win/conflicts/module_info_util.cc
index 47600bea..a96f91c 100644
--- a/chrome/browser/win/conflicts/module_info_util.cc
+++ b/chrome/browser/win/conflicts/module_info_util.cc
@@ -18,6 +18,7 @@
 #include "base/files/file.h"
 #include "base/i18n/case_conversion.h"
 #include "base/logging.h"
+#include "base/numerics/safe_conversions.h"
 #include "base/scoped_generic.h"
 #include "base/strings/strcat_win.h"
 #include "base/strings/string_piece.h"
@@ -308,8 +309,10 @@
     return false;
 
   base::win::PeImageReader pe_image_reader;
-  if (!pe_image_reader.Initialize(buffer.get(), bytes_read))
+  if (!pe_image_reader.Initialize(base::make_span(
+          buffer.get(), base::checked_cast<size_t>(bytes_read)))) {
     return false;
+  }
 
   *size_of_image = pe_image_reader.GetSizeOfImage();
   *time_date_stamp = pe_image_reader.GetCoffFileHeader()->TimeDateStamp;
diff --git a/chrome/build/android-arm32.pgo.txt b/chrome/build/android-arm32.pgo.txt
index 8f1feb0e..6abcf4b6 100644
--- a/chrome/build/android-arm32.pgo.txt
+++ b/chrome/build/android-arm32.pgo.txt
@@ -1 +1 @@
-chrome-android32-main-1703159368-25964ceb7e004ea154f9de6653dc83c37d7a6dd1.profdata
+chrome-android32-main-1703181586-ca9f9c96b76239c43b83ada53f24526e82b7a62e.profdata
diff --git a/chrome/build/android-arm64.pgo.txt b/chrome/build/android-arm64.pgo.txt
index 900106b..c8f658a 100644
--- a/chrome/build/android-arm64.pgo.txt
+++ b/chrome/build/android-arm64.pgo.txt
@@ -1 +1 @@
-chrome-android64-main-1703159368-0730079983249f12905aab2725e823a590883f61.profdata
+chrome-android64-main-1703181586-c2fa499345b401ea1cf7ccab838f542dd1e344d3.profdata
diff --git a/chrome/build/linux.pgo.txt b/chrome/build/linux.pgo.txt
index 768a66d7..5670125 100644
--- a/chrome/build/linux.pgo.txt
+++ b/chrome/build/linux.pgo.txt
@@ -1 +1 @@
-chrome-linux-main-1703159368-c9ea6086b29fcd40b7dab1af20d7451d2fcde883.profdata
+chrome-linux-main-1703181586-9cb8088869cf55c70ba9af6e8b6da48a15628907.profdata
diff --git a/chrome/build/mac-arm.pgo.txt b/chrome/build/mac-arm.pgo.txt
index b2ac241..6f4dd7d 100644
--- a/chrome/build/mac-arm.pgo.txt
+++ b/chrome/build/mac-arm.pgo.txt
@@ -1 +1 @@
-chrome-mac-arm-main-1703167127-9e829dec7f1a7e4f2adff0b08d7d627c5e80c881.profdata
+chrome-mac-arm-main-1703195498-6900a84ceb563efda2b1018e4188e8e8053e26c5.profdata
diff --git a/chrome/build/mac.pgo.txt b/chrome/build/mac.pgo.txt
index b6c1c8e..949c44e8 100644
--- a/chrome/build/mac.pgo.txt
+++ b/chrome/build/mac.pgo.txt
@@ -1 +1 @@
-chrome-mac-main-1703159368-a57ab97cdfae2c2d86b36baab827fb4b88ba18ed.profdata
+chrome-mac-main-1703181586-8b1819909a4e4a18da0ebca3805d74605b41bc18.profdata
diff --git a/chrome/build/win-arm64.pgo.txt b/chrome/build/win-arm64.pgo.txt
index 9104d41e..f0caccc7 100644
--- a/chrome/build/win-arm64.pgo.txt
+++ b/chrome/build/win-arm64.pgo.txt
@@ -1 +1 @@
-chrome-win-arm64-main-1703159368-aa522a13b93a44153298f045d0f71a7f12bc1f98.profdata
+chrome-win-arm64-main-1703181586-699841e72f3e9af214a65f98b70530ebb3efa8ec.profdata
diff --git a/chrome/build/win64.pgo.txt b/chrome/build/win64.pgo.txt
index a29c58a..1e2eb52 100644
--- a/chrome/build/win64.pgo.txt
+++ b/chrome/build/win64.pgo.txt
@@ -1 +1 @@
-chrome-win64-main-1703149066-f83b32e1ed16a37dcc90e663b7665972b2e22e32.profdata
+chrome-win64-main-1703181586-7c5057f1d2f87786f171060b75f4cc52389b265f.profdata
diff --git a/chrome/common/extensions/manifest_tests/extension_manifests_chromepermission_unittest.cc b/chrome/common/extensions/manifest_tests/extension_manifests_chromepermission_unittest.cc
index dd0f157..f4f1b7f7 100644
--- a/chrome/common/extensions/manifest_tests/extension_manifests_chromepermission_unittest.cc
+++ b/chrome/common/extensions/manifest_tests/extension_manifests_chromepermission_unittest.cc
@@ -21,7 +21,7 @@
 
 namespace errors = manifest_errors;
 
-typedef ChromeManifestTest ChromePermissionManifestTest;
+using ChromePermissionManifestTest = ChromeManifestTest;
 
 TEST_F(ChromePermissionManifestTest, ChromeURLPermissionInvalid) {
   LoadAndExpectWarning(
diff --git a/chrome/common/extensions/manifest_tests/extension_manifests_validapp_unittest.cc b/chrome/common/extensions/manifest_tests/extension_manifests_validapp_unittest.cc
index 78e17dc..0c45b3b0 100644
--- a/chrome/common/extensions/manifest_tests/extension_manifests_validapp_unittest.cc
+++ b/chrome/common/extensions/manifest_tests/extension_manifests_validapp_unittest.cc
@@ -11,7 +11,7 @@
 #include "testing/gtest/include/gtest/gtest.h"
 #include "third_party/abseil-cpp/absl/types/optional.h"
 
-typedef ChromeManifestTest ValidAppManifestTest;
+using ValidAppManifestTest = ChromeManifestTest;
 
 TEST_F(ValidAppManifestTest, ValidApp) {
   scoped_refptr<extensions::Extension> extension(
diff --git a/chrome/common/safe_browsing/binary_feature_extractor_win.cc b/chrome/common/safe_browsing/binary_feature_extractor_win.cc
index 1752031..2b9e6dd 100644
--- a/chrome/common/safe_browsing/binary_feature_extractor_win.cc
+++ b/chrome/common/safe_browsing/binary_feature_extractor_win.cc
@@ -125,8 +125,9 @@
     ClientDownloadRequest_ImageHeaders* image_headers,
     google::protobuf::RepeatedPtrField<std::string>* signed_data) {
   base::win::PeImageReader pe_image;
-  if (!pe_image.Initialize(data, data_size))
+  if (!pe_image.Initialize(base::make_span(data, data_size))) {
     return false;
+  }
 
   // Copy the headers.
   ClientDownloadRequest_PEImageHeaders* pe_headers =
diff --git a/chrome/common/webui_url_constants.cc b/chrome/common/webui_url_constants.cc
index 80c7e798..73e1e79 100644
--- a/chrome/common/webui_url_constants.cc
+++ b/chrome/common/webui_url_constants.cc
@@ -179,6 +179,9 @@
 const char kChromeUIPrefsInternalsHost[] = "prefs-internals";
 const char kChromeUIPrefsInternalsURL[] = "chrome://prefs-internals";
 const char kChromeUIPrintURL[] = "chrome://print/";
+const char kChromeUIPrivacySandboxInternalsHost[] = "privacy-sandbox-internals";
+const char kChromeUIPrivacySandboxInternalsURL[] =
+    "chrome://privacy-sandbox-internals";
 const char kChromeUIPrivacySandboxDialogHost[] = "privacy-sandbox-dialog";
 const char kChromeUIPrivacySandboxDialogURL[] =
     "chrome://privacy-sandbox-dialog";
diff --git a/chrome/common/webui_url_constants.h b/chrome/common/webui_url_constants.h
index 58909f8..e71da8c 100644
--- a/chrome/common/webui_url_constants.h
+++ b/chrome/common/webui_url_constants.h
@@ -177,6 +177,8 @@
 extern const char kChromeUIPrintURL[];
 extern const char kChromeUIPrivacySandboxDialogHost[];
 extern const char kChromeUIPrivacySandboxDialogURL[];
+extern const char kChromeUIPrivacySandboxInternalsHost[];
+extern const char kChromeUIPrivacySandboxInternalsURL[];
 extern const char kChromeUIPrivacySandboxDialogCombinedPath[];
 extern const char kChromeUIPrivacySandboxDialogNoticePath[];
 extern const char kChromeUIPrivacySandboxDialogNoticeRestrictedPath[];
diff --git a/chrome/test/BUILD.gn b/chrome/test/BUILD.gn
index 9f719e6..650041da 100644
--- a/chrome/test/BUILD.gn
+++ b/chrome/test/BUILD.gn
@@ -652,6 +652,7 @@
       "../browser/signin/signin_browser_test_base.h",
       "../browser/themes/test/theme_service_changed_waiter.cc",
       "../browser/themes/test/theme_service_changed_waiter.h",
+      "../browser/ui/performance_controls/test_support/battery_saver_browser_test_mixin.h",
       "../browser/ui/performance_controls/test_support/memory_metrics_refresh_waiter.cc",
       "../browser/ui/performance_controls/test_support/memory_metrics_refresh_waiter.h",
       "../browser/ui/performance_controls/test_support/memory_saver_browser_test_mixin.h",
@@ -3095,6 +3096,13 @@
         "//pdf/loader",
       ]
 
+      if (is_linux) {
+        # Add a data dependency for pdf_extension_accessibility_test.cc to
+        # notify testing builders that this test needs this library, which will
+        # need to be downloaded from CIPD as defined in //DEPS.
+        data_deps += [ "//third_party/screen-ai:screen_ai_linux" ]
+      }
+
       if (enable_printing) {
         sources += [ "../browser/pdf/pdf_extension_printing_test.cc" ]
 
@@ -4463,6 +4471,7 @@
         "../browser/ash/login/app_mode/test/web_kiosk_lacros_browsertest.cc",
         "../browser/ash/login/ash_hud_login_browsertest.cc",
         "../browser/ash/login/auth_factor_config_browsertest.cc",
+        "../browser/ash/login/auth_flows_login_ui_test.cc",
         "../browser/ash/login/challenge_response_auth_keys_loader_browsertest.cc",
         "../browser/ash/login/configuration_based_oobe_browsertest.cc",
         "../browser/ash/login/crash_restore_browsertest.cc",
diff --git a/chrome/test/data/extensions/api_test/debugger_reload_and_reset_history/background.js b/chrome/test/data/extensions/api_test/debugger_reload_and_reset_history/background.js
new file mode 100644
index 0000000..ee86857
--- /dev/null
+++ b/chrome/test/data/extensions/api_test/debugger_reload_and_reset_history/background.js
@@ -0,0 +1,23 @@
+// Copyright 2023 The Chromium Authors
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+const protocolVersion = '1.3';
+
+chrome.test.getConfig(config => chrome.test.runTests([
+  async function reloadAndResetHistory() {
+    const {openTab} = await import('/_test_resources/test_util/tabs_util.js');
+    const pagePath =
+        'extensions/api_test/debugger_reload_and_reset_history/page.html';
+    const topURL = `http://a.com:${config.testServer.port}/${pagePath}`;
+    const tab = await openTab(topURL);
+    const debuggee = {tabId: tab.id};
+    chrome.debugger.attach(debuggee, protocolVersion, async function() {
+      chrome.debugger.sendCommand(debuggee, "Page.reload", {});
+      await chrome.debugger.sendCommand(
+          debuggee, "Page.resetNavigationHistory", {});
+      chrome.test.assertNoLastError();
+      chrome.debugger.detach(debuggee, chrome.test.succeed);
+    });
+  }
+]));
diff --git a/chrome/test/data/extensions/api_test/debugger_reload_and_reset_history/manifest.json b/chrome/test/data/extensions/api_test/debugger_reload_and_reset_history/manifest.json
new file mode 100644
index 0000000..b2d1bdc
--- /dev/null
+++ b/chrome/test/data/extensions/api_test/debugger_reload_and_reset_history/manifest.json
@@ -0,0 +1,9 @@
+{
+  "name": "Debugger Reload and Reset History",
+  "manifest_version": 2,
+  "version": "0.1",
+  "permissions": ["debugger", "tabs"],
+  "background": {
+    "scripts": ["background.js"]
+  }
+}
diff --git a/chrome/test/data/extensions/api_test/debugger_reload_and_reset_history/page.html b/chrome/test/data/extensions/api_test/debugger_reload_and_reset_history/page.html
new file mode 100644
index 0000000..24325ab
--- /dev/null
+++ b/chrome/test/data/extensions/api_test/debugger_reload_and_reset_history/page.html
@@ -0,0 +1,7 @@
+<html>
+<iframe></iframe>
+<iframe src=""></iframe>
+<iframe src="javascript:"></iframe>
+<iframe src="about:blank"></iframe>
+<iframe srcdoc=""></iframe>
+</html>
diff --git a/chrome/test/data/webui/BUILD.gn b/chrome/test/data/webui/BUILD.gn
index 1dc3db8..8852e8e 100644
--- a/chrome/test/data/webui/BUILD.gn
+++ b/chrome/test/data/webui/BUILD.gn
@@ -230,6 +230,11 @@
     "//components/password_manager/content/common:common",
     "//components/search:search",
   ]
+
+  if (enable_compose) {
+    sources += [ "compose/compose_focus_test.cc" ]
+    deps += [ "//components/compose/core/browser:features" ]
+  }
 }
 
 if (is_chromeos_ash) {
diff --git a/chrome/test/data/webui/chromeos/ash_common/cr_elements/BUILD.gn b/chrome/test/data/webui/chromeos/ash_common/cr_elements/BUILD.gn
index 49233c5..262f3a0 100644
--- a/chrome/test/data/webui/chromeos/ash_common/cr_elements/BUILD.gn
+++ b/chrome/test/data/webui/chromeos/ash_common/cr_elements/BUILD.gn
@@ -6,7 +6,12 @@
 
 build_webui_tests("build") {
   files = [
+    "cr_button_test.ts",
     "cr_checkbox_test.ts",
+    "cr_dialog_test.ts",
+    "cr_expand_button_test.ts",
+    "cr_icon_button_test.ts",
+    "cr_input_test.ts",
     "cr_toast_manager_test.ts",
     "cr_toast_test.ts",
   ]
diff --git a/chrome/test/data/webui/chromeos/ash_common/cr_elements/ash_common_cr_elements_browsertest.cc b/chrome/test/data/webui/chromeos/ash_common/cr_elements/ash_common_cr_elements_browsertest.cc
index 92033089..4069526 100644
--- a/chrome/test/data/webui/chromeos/ash_common/cr_elements/ash_common_cr_elements_browsertest.cc
+++ b/chrome/test/data/webui/chromeos/ash_common/cr_elements/ash_common_cr_elements_browsertest.cc
@@ -7,6 +7,24 @@
 
 typedef WebUIMochaBrowserTest AshCommonCrElementsTest;
 
+IN_PROC_BROWSER_TEST_F(AshCommonCrElementsTest, CrButton) {
+  RunTest("chromeos/ash_common/cr_elements/cr_button_test.js", "mocha.run()");
+}
+
+IN_PROC_BROWSER_TEST_F(AshCommonCrElementsTest, CrDialog) {
+  RunTest("chromeos/ash_common/cr_elements/cr_dialog_test.js", "mocha.run()");
+}
+
+IN_PROC_BROWSER_TEST_F(AshCommonCrElementsTest, CrExpandButton) {
+  RunTest("chromeos/ash_common/cr_elements/cr_expand_button_test.js",
+          "mocha.run()");
+}
+
+IN_PROC_BROWSER_TEST_F(AshCommonCrElementsTest, CrIconButton) {
+  RunTest("chromeos/ash_common/cr_elements/cr_icon_button_test.js",
+          "mocha.run()");
+}
+
 IN_PROC_BROWSER_TEST_F(AshCommonCrElementsTest, CrToast) {
   RunTest("chromeos/ash_common/cr_elements/cr_toast_test.js", "mocha.run()");
 }
diff --git a/chrome/test/data/webui/chromeos/ash_common/cr_elements/ash_common_cr_elements_focus_test.cc b/chrome/test/data/webui/chromeos/ash_common/cr_elements/ash_common_cr_elements_focus_test.cc
index 07b7f26d..76601e84 100644
--- a/chrome/test/data/webui/chromeos/ash_common/cr_elements/ash_common_cr_elements_focus_test.cc
+++ b/chrome/test/data/webui/chromeos/ash_common/cr_elements/ash_common_cr_elements_focus_test.cc
@@ -10,3 +10,7 @@
 IN_PROC_BROWSER_TEST_F(AshCommonCrElementsFocusTest, CrCheckbox) {
   RunTest("chromeos/ash_common/cr_elements/cr_checkbox_test.js", "mocha.run()");
 }
+
+IN_PROC_BROWSER_TEST_F(AshCommonCrElementsFocusTest, CrInput) {
+  RunTest("chromeos/ash_common/cr_elements/cr_input_test.js", "mocha.run()");
+}
diff --git a/chrome/test/data/webui/chromeos/ash_common/cr_elements/cr_button_test.ts b/chrome/test/data/webui/chromeos/ash_common/cr_elements/cr_button_test.ts
new file mode 100644
index 0000000..6913b3ae
--- /dev/null
+++ b/chrome/test/data/webui/chromeos/ash_common/cr_elements/cr_button_test.ts
@@ -0,0 +1,169 @@
+// Copyright 2019 The Chromium Authors
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// clang-format off
+import 'chrome://resources/ash/common/cr_elements/cr_button/cr_button.js';
+
+import {getTrustedHTML} from 'chrome://resources/js/static_types.js';
+import {CrButtonElement} from 'chrome://resources/ash/common/cr_elements/cr_button/cr_button.js';
+import {assertEquals, assertFalse, assertNotEquals, assertTrue} from 'chrome://webui-test/chai_assert.js';
+import {eventToPromise} from 'chrome://webui-test/test_util.js';
+
+// clang-format on
+
+suite('cr-button', function() {
+  let button: CrButtonElement;
+
+  setup(() => {
+    document.body.innerHTML = window.trustedTypes!.emptyHTML;
+    button =
+        /** @type {!CrButtonElement} */ (document.createElement('cr-button'));
+    document.body.appendChild(button);
+  });
+
+  function press(key: string) {
+    button.dispatchEvent(new KeyboardEvent('keydown', {key}));
+    button.dispatchEvent(new KeyboardEvent('keyup', {key}));
+  }
+
+  test('label is displayed', async () => {
+    const widthWithoutLabel = button.offsetWidth;
+    document.body.innerHTML = getTrustedHTML`<cr-button>Long Label</cr-button>`;
+    button = document.body.querySelector('cr-button')!;
+    assertTrue(widthWithoutLabel < button.offsetWidth);
+  });
+
+  test('tabindex and aria-disabled', () => {
+    assertFalse(button.disabled);
+    assertFalse(button.hasAttribute('disabled'));
+    assertEquals('0', button.getAttribute('tabindex'));
+    assertEquals('false', button.getAttribute('aria-disabled'));
+    button.disabled = true;
+    assertTrue(button.hasAttribute('disabled'));
+    assertEquals('-1', button.getAttribute('tabindex'));
+    assertEquals('true', button.getAttribute('aria-disabled'));
+  });
+
+  test('enter/space/click events and programmatic click() calls', async () => {
+    let clickCount = 0;
+    function clickHandler() {
+      clickCount++;
+    }
+    button.addEventListener('click', clickHandler);
+
+    function checkClicks(expectedCount: number) {
+      clickCount = 0;
+      press('Enter');
+      press(' ');
+      button.dispatchEvent(new MouseEvent('click'));
+      button.click();
+      assertEquals(expectedCount, clickCount);
+    }
+
+    checkClicks(4);
+    button.disabled = true;
+    checkClicks(0);
+    button.disabled = false;
+    checkClicks(4);
+
+    button.removeEventListener('click', clickHandler);
+  });
+
+  test('when tabindex is -1, it stays -1', async () => {
+    document.body.innerHTML =
+        getTrustedHTML`<cr-button custom-tab-index="-1"></cr-button>`;
+    button = document.body.querySelector('cr-button')!;
+    assertEquals('-1', button.getAttribute('tabindex'));
+    button.disabled = true;
+    assertEquals('-1', button.getAttribute('tabindex'));
+    button.disabled = false;
+    assertEquals('-1', button.getAttribute('tabindex'));
+  });
+
+  test('tabindex update', async () => {
+    document.body.innerHTML = window.trustedTypes!.emptyHTML;
+    button = document.createElement('cr-button');
+    document.body.appendChild(button);
+    assertEquals('0', button.getAttribute('tabindex'));
+    button.customTabIndex = 1;
+    assertEquals('1', button.getAttribute('tabindex'));
+  });
+
+  test('hidden', () => {
+    assertFalse(button.hidden);
+    assertFalse(button.hasAttribute('hidden'));
+    assertNotEquals('none', getComputedStyle(button).display);
+    button.hidden = true;
+    assertTrue(button.hasAttribute('hidden'));
+    assertEquals('none', getComputedStyle(button).display);
+    button.hidden = false;
+    assertFalse(button.hasAttribute('hidden'));
+    assertNotEquals('none', getComputedStyle(button).display);
+  });
+
+  test('space up does not click without space down', () => {
+    let clicked = false;
+    button.addEventListener('click', () => {
+      clicked = true;
+    }, {once: true});
+    button.dispatchEvent(new KeyboardEvent('keyup', {key: ' '}));
+    assertFalse(clicked);
+    press(' ');
+    assertTrue(clicked);
+  });
+
+  test('space up events will not result in one click if loses focus', () => {
+    let clicked = false;
+    button.addEventListener('click', () => {
+      clicked = true;
+    }, {once: true});
+    button.dispatchEvent(new KeyboardEvent('keydown', {key: ' '}));
+    button.dispatchEvent(new Event('blur'));
+    button.dispatchEvent(new KeyboardEvent('keyup', {key: ' '}));
+    assertFalse(clicked);
+    press(' ');
+    assertTrue(clicked);
+  });
+
+  test('UpdatesStyleWithIcons', async () => {
+    const buttonStyle = window.getComputedStyle(button);
+    const whenPrefixSlotchange =
+        eventToPromise('slotchange', button.$.prefixIcon);
+    const icon = document.createElement('div');
+    icon.slot = 'prefix-icon';
+    button.appendChild(icon);
+
+    const text = document.createTextNode('Hello world');
+    button.appendChild(text);
+    await whenPrefixSlotchange;
+
+    assertEquals('8px', buttonStyle.gap);
+    assertEquals('8px', buttonStyle.padding);
+
+    document.documentElement.toggleAttribute('chrome-refresh-2023', true);
+    assertEquals('8px 16px 8px 12px', buttonStyle.padding);
+    document.documentElement.removeAttribute('chrome-refresh-2023');
+
+    const whenPrefixSlotRemoved =
+        eventToPromise('slotchange', button.$.prefixIcon);
+    icon.remove();
+    await whenPrefixSlotRemoved;
+
+    assertEquals('normal', buttonStyle.gap);
+    assertEquals('8px 16px', buttonStyle.padding);
+
+    const whenSuffixSlotchange =
+        eventToPromise('slotchange', button.$.suffixIcon);
+    icon.slot = 'suffix-icon';
+    button.appendChild(icon);
+    await whenSuffixSlotchange;
+
+    assertEquals('8px', buttonStyle.gap);
+    assertEquals('8px', buttonStyle.padding);
+
+    document.documentElement.toggleAttribute('chrome-refresh-2023', true);
+    assertEquals('8px 12px 8px 16px', buttonStyle.padding);
+    document.documentElement.removeAttribute('chrome-refresh-2023');
+  });
+});
diff --git a/chrome/test/data/webui/chromeos/ash_common/cr_elements/cr_dialog_test.ts b/chrome/test/data/webui/chromeos/ash_common/cr_elements/cr_dialog_test.ts
new file mode 100644
index 0000000..1116d26
--- /dev/null
+++ b/chrome/test/data/webui/chromeos/ash_common/cr_elements/cr_dialog_test.ts
@@ -0,0 +1,545 @@
+// Copyright 2016 The Chromium Authors
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// clang-format off
+import 'chrome://resources/ash/common/cr_elements/cr_dialog/cr_dialog.js';
+import 'chrome://resources/ash/common/cr_elements/cr_input/cr_input.js';
+
+import {getTrustedHTML} from 'chrome://resources/js/static_types.js';
+import {CrDialogElement} from 'chrome://resources/ash/common/cr_elements/cr_dialog/cr_dialog.js';
+import {CrInputElement} from 'chrome://resources/ash/common/cr_elements/cr_input/cr_input.js';
+import {keyDownOn, keyEventOn} from 'chrome://resources/polymer/v3_0/iron-test-helpers/mock-interactions.js';
+import {assertEquals, assertFalse, assertNotEquals, assertNotReached, assertTrue} from 'chrome://webui-test/chai_assert.js';
+import {eventToPromise} from 'chrome://webui-test/test_util.js';
+import {flushTasks} from 'chrome://webui-test/polymer_test_util.js';
+
+// clang-format on
+
+suite('cr-dialog', function() {
+  function pressEnter(element: HTMLElement) {
+    keyEventOn(element, 'keypress', 13, undefined, 'Enter');
+  }
+
+  /**
+   * Creates and shows two nested cr-dialogs.
+   * @return An array of 2 dialogs. The first dialog
+   *     is the outer dialog, and the second is the inner dialog.
+   */
+  function createAndShowNestedDialogs(): [CrDialogElement, CrDialogElement] {
+    document.body.innerHTML = getTrustedHTML`
+      <cr-dialog id="outer">
+        <div slot="title">outer dialog title</div>
+        <div slot="body">
+          <cr-dialog id="inner">
+            <div slot="title">inner dialog title</div>
+            <div slot="body">body</div>
+          </cr-dialog>
+        </div>
+      </cr-dialog>`;
+
+    const outer = document.body.querySelector<CrDialogElement>('#outer');
+    assertTrue(!!outer);
+    const inner = document.body.querySelector<CrDialogElement>('#inner');
+    assertTrue(!!inner);
+
+    outer!.showModal();
+    inner!.showModal();
+    return [outer!, inner!];
+  }
+
+  setup(function() {
+    document.body.innerHTML = window.trustedTypes!.emptyHTML;
+    // Ensure svg, which is referred to by a relative URL, is loaded from
+    // chrome://resources and not chrome://test
+    const base = document.createElement('base');
+    base.href = 'chrome://resources/cr_elements/';
+    document.head.appendChild(base);
+  });
+
+  test('cr-dialog-open event fires when opened', function() {
+    document.body.innerHTML = getTrustedHTML`
+      <cr-dialog>
+        <div slot="title">title</div>
+        <div slot="body">body</div>
+      </cr-dialog>`;
+
+    const dialog = document.body.querySelector('cr-dialog')!;
+    const whenFired = eventToPromise('cr-dialog-open', dialog);
+    dialog.showModal();
+    return whenFired;
+  });
+
+  test('close event bubbles', function() {
+    document.body.innerHTML = getTrustedHTML`
+      <cr-dialog>
+        <div slot="title">title</div>
+        <div slot="body">body</div>
+      </cr-dialog>`;
+
+    const dialog = document.body.querySelector('cr-dialog')!;
+    dialog.showModal();
+    const whenFired = eventToPromise('close', dialog);
+    dialog.close();
+    return whenFired.then(() => {
+      assertEquals('success', dialog.getNative().returnValue);
+    });
+  });
+
+  // cr-dialog has to catch and re-fire 'close' events fired from it's native
+  // <dialog> child to force them to bubble in Shadow DOM V1. Ensure that this
+  // mechanism does not interfere with nested <cr-dialog> 'close' events.
+  test('close events not fired from <dialog> are not affected', function() {
+    const dialogs = createAndShowNestedDialogs();
+    const outer = dialogs[0];
+    const inner = dialogs[1];
+
+    let whenFired = eventToPromise('close', window);
+    inner.close();
+
+    return whenFired
+        .then(e => {
+          // Check that the event's target is the inner dialog.
+          assertEquals(inner, e.target);
+          whenFired = eventToPromise('close', window);
+          outer.close();
+          return whenFired;
+        })
+        .then(e => {
+          // Check that the event's target is the outer dialog.
+          assertEquals(outer, e.target);
+        });
+  });
+
+  test('cancel and close events bubbles when cancelled', function() {
+    document.body.innerHTML = getTrustedHTML`
+      <cr-dialog>
+        <div slot="title">title</div>
+        <div slot="body">body</div>
+      </cr-dialog>`;
+
+    const dialog = document.body.querySelector('cr-dialog')!;
+    dialog.showModal();
+    const whenCancelFired = eventToPromise('cancel', dialog);
+    const whenCloseFired = eventToPromise('close', dialog);
+    dialog.cancel();
+    return Promise.all([whenCancelFired, whenCloseFired]).then(() => {
+      assertEquals('', dialog.getNative().returnValue);
+    });
+  });
+
+  // cr-dialog has to catch and re-fire 'cancel' events fired from it's native
+  // <dialog> child to force them to bubble in Shadow DOM V1. Ensure that this
+  // mechanism does not interfere with nested <cr-dialog> 'cancel' events.
+  test('cancel events not fired from <dialog> are not affected', function() {
+    const dialogs = createAndShowNestedDialogs();
+    const outer = dialogs[0];
+    const inner = dialogs[1];
+
+    let whenFired = eventToPromise('cancel', window);
+    inner.cancel();
+
+    return whenFired
+        .then(e => {
+          // Check that the event's target is the inner dialog.
+          assertEquals(inner, e.target);
+          whenFired = eventToPromise('cancel', window);
+          outer.cancel();
+          return whenFired;
+        })
+        .then(e => {
+          // Check that the event's target is the outer dialog.
+          assertEquals(outer, e.target);
+        });
+  });
+
+  test('focuses title on show', function() {
+    document.body.innerHTML = getTrustedHTML`
+      <cr-dialog>
+        <div slot="title">title</div>
+        <div slot="body"><button>button</button></div>
+      </cr-dialog>`;
+
+    const dialog = document.body.querySelector('cr-dialog')!;
+    const button = document.body.querySelector('button');
+
+    assertNotEquals(dialog, document.activeElement);
+    assertNotEquals(button, document.activeElement);
+
+    dialog.showModal();
+
+    assertEquals(dialog, document.activeElement);
+    assertNotEquals(button, document.activeElement);
+  });
+
+  test('enter keys should trigger action buttons once', function() {
+    document.body.innerHTML = getTrustedHTML`
+      <cr-dialog>
+        <div slot="title">title</div>
+        <div slot="body">
+          <button class="action-button">button</button>
+          <button id="other-button">other button</button>
+        </div>
+      </cr-dialog>`;
+
+    const dialog = document.body.querySelector('cr-dialog')!;
+    const actionButton =
+        document.body.querySelector<HTMLElement>('.action-button')!;
+
+    dialog.showModal();
+
+    // MockInteractions triggers event listeners synchronously.
+    let clickedCounter = 0;
+    actionButton.addEventListener('click', function() {
+      clickedCounter++;
+    });
+
+    function simulateEnterOnButton(button: HTMLElement) {
+      pressEnter(button);
+      // Also call manually click() since normally this is done by the browser.
+      button.click();
+    }
+
+    // Enter key on the action button should only fire the click handler once.
+    simulateEnterOnButton(actionButton);
+    assertEquals(1, clickedCounter);
+
+    // Enter keys on other buttons should be ignored.
+    clickedCounter = 0;
+    const otherButton =
+        document.body.querySelector<HTMLElement>('#other-button');
+    assertTrue(!!otherButton);
+    simulateEnterOnButton(otherButton!);
+    assertEquals(0, clickedCounter);
+
+    // Enter keys on the close icon in the top-right corner should be ignored.
+    pressEnter(dialog.$.close);
+    assertEquals(0, clickedCounter);
+  });
+
+  test('enter keys find the first non-hidden non-disabled button', function() {
+    document.body.innerHTML = getTrustedHTML`
+      <cr-dialog>
+        <div slot="title">title</div>
+        <div slot="body">
+          <button id="hidden" class="action-button" hidden>hidden</button>
+          <button class="action-button" disabled>disabled</button>
+          <button class="action-button" disabled hidden>disabled hidden</button>
+          <button id="active" class="action-button">active</button>
+        </div>
+      </cr-dialog>`;
+
+    const dialog = document.body.querySelector('cr-dialog')!;
+    const hiddenButton = document.body.querySelector<HTMLElement>('#hidden')!;
+    const actionButton = document.body.querySelector<HTMLElement>('#active')!;
+    dialog.showModal();
+
+    // MockInteractions triggers event listeners synchronously.
+    hiddenButton.addEventListener('click', function() {
+      assertNotReached('Hidden button received a click.');
+    });
+    let clicked = false;
+    actionButton.addEventListener('click', function() {
+      clicked = true;
+    });
+
+    pressEnter(dialog);
+    assertTrue(clicked);
+  });
+
+  test('enter keys from certain inputs only are processed', function() {
+    document.body.innerHTML = getTrustedHTML`
+      <cr-dialog>
+        <div slot="title">title</div>
+        <div slot="body">
+          <foobar></foobar>
+          <input type="checkbox">
+          <input type="text">
+
+          <cr-input type="search"></cr-input>
+          <cr-input type="text"></cr-input>
+
+          <div id="withShadow"></div>
+          <button class="action-button">active</button>
+        </div>
+      </cr-dialog>`;
+
+    const otherElement = document.body.querySelector<HTMLElement>('foobar')!;
+    const inputCheckboxElement =
+        document.body.querySelector<HTMLElement>('input[type="checkbox"]')!;
+    const inputTextElement =
+        document.body.querySelector<HTMLElement>('input[type="text"]')!;
+
+    const crTextInputElement =
+        document.body.querySelector<CrInputElement>('cr-input[type="text"]')!;
+    const crSearchInputElement =
+        document.body.querySelector<CrInputElement>('cr-input[type="search"]')!;
+
+    // Attach a cr-input element nested within another element.
+    const containerElement = document.body.querySelector('#withShadow')!;
+    const shadow = containerElement.attachShadow({mode: 'open'});
+    const crInputNested = document.createElement('cr-input');
+    shadow.appendChild(crInputNested);
+
+    const actionButton = document.body.querySelector('.action-button')!;
+
+    // MockInteractions triggers event listeners synchronously.
+    let clickedCounter = 0;
+    actionButton.addEventListener('click', function() {
+      clickedCounter++;
+    });
+
+    // Enter on anything other than cr-input should not be accepted.
+    pressEnter(otherElement);
+    assertEquals(0, clickedCounter);
+    pressEnter(inputCheckboxElement);
+    assertEquals(0, clickedCounter);
+    pressEnter(inputTextElement);
+    assertEquals(0, clickedCounter);
+
+    // Enter on a cr-input with type "search" should not be accepted.
+    pressEnter(crSearchInputElement);
+    assertEquals(0, clickedCounter);
+
+    // Enter on a cr-input with type "text" should be accepted.
+    pressEnter(crTextInputElement);
+    assertEquals(1, clickedCounter);
+
+    // Enter on a nested <cr-input> should be accepted.
+    pressEnter(crInputNested);
+    assertEquals(2, clickedCounter);
+  });
+
+  test('focuses [autofocus] instead of title when present', function() {
+    document.body.innerHTML = getTrustedHTML`
+      <cr-dialog>
+        <div slot="title">title</div>
+        <div slot="body"><button autofocus>button</button></div>
+      </cr-dialog>`;
+
+    const dialog = document.body.querySelector('cr-dialog')!;
+    const button = document.body.querySelector('button');
+
+    assertNotEquals(dialog, document.activeElement);
+    assertNotEquals(button, document.activeElement);
+
+    dialog.showModal();
+
+    assertNotEquals(dialog, document.activeElement);
+    assertEquals(button, document.activeElement);
+  });
+
+  // Ensuring that intersectionObserver does not fire any callbacks before the
+  // dialog has been opened.
+  test('body scrollable border not added before modal shown', function() {
+    document.body.innerHTML = getTrustedHTML`
+      <cr-dialog>
+        <div slot="title">title</div>
+        <div slot="body">body</div>
+      </cr-dialog>`;
+
+    const dialog = document.body.querySelector('cr-dialog')!;
+    assertFalse(dialog.open);
+    const bodyContainer = dialog.shadowRoot!.querySelector('.body-container');
+    assertTrue(!!bodyContainer);
+    const topShadow =
+        dialog.shadowRoot!.querySelector('#cr-container-shadow-top');
+    assertTrue(!!topShadow);
+    const bottomShadow =
+        dialog.shadowRoot!.querySelector('#cr-container-shadow-bottom');
+    assertTrue(!!bottomShadow);
+
+    return flushTasks().then(() => {
+      assertFalse(topShadow!.classList.contains('has-shadow'));
+      assertFalse(bottomShadow!.classList.contains('has-shadow'));
+    });
+  });
+
+  test('dialog body scrollable border when appropriate', function(done) {
+    document.body.innerHTML = getTrustedHTML`
+      <cr-dialog>
+        <div slot="title">title</div>
+        <div slot="body">
+          <div style="height: 100px">tall content</div>
+        </div>
+      </cr-dialog>`;
+
+    const dialog = document.body.querySelector('cr-dialog')!;
+    const bodyContainer =
+        dialog.shadowRoot!.querySelector<HTMLElement>('.body-container');
+    assertTrue(!!bodyContainer);
+    const topShadow =
+        dialog.shadowRoot!.querySelector('#cr-container-shadow-top');
+    assertTrue(!!topShadow);
+    const bottomShadow =
+        dialog.shadowRoot!.querySelector('#cr-container-shadow-bottom');
+    assertTrue(!!bottomShadow);
+
+    dialog.showModal();  // Attach the dialog for the first time here.
+
+    let observerCount = 0;
+
+    // Needs to setup the observer before attaching, since InteractionObserver
+    // calls callback before MutationObserver does.
+    const observer = new MutationObserver(function(changes) {
+      // Only care about class mutations.
+      if (changes[0]!.attributeName !== 'class') {
+        return;
+      }
+
+      observerCount++;
+      switch (observerCount) {
+        case 1:  // Triggered when scrolled to bottom.
+          assertFalse(bottomShadow!.classList.contains('has-shadow'));
+          assertTrue(topShadow!.classList.contains('has-shadow'));
+          bodyContainer!.scrollTop = 0;
+          break;
+        case 2:  // Triggered when scrolled back to top.
+          assertTrue(bottomShadow!.classList.contains('has-shadow'));
+          assertFalse(topShadow!.classList.contains('has-shadow'));
+          bodyContainer!.scrollTop = 2;
+          break;
+        case 3:  // Triggered when finally scrolling to middle.
+          assertTrue(bottomShadow!.classList.contains('has-shadow'));
+          assertTrue(topShadow!.classList.contains('has-shadow'));
+          observer.disconnect();
+          done();
+          break;
+      }
+    });
+    observer.observe(topShadow!, {attributes: true});
+    observer.observe(bottomShadow!, {attributes: true});
+
+    // Height is normally set via CSS, but mixin doesn't work with innerHTML.
+    bodyContainer!.style.height = '60px';  // Element has "min-height: 60px".
+    bodyContainer!.scrollTop = 100;
+  });
+
+  test('dialog `open` attribute updated when Escape is pressed', function() {
+    document.body.innerHTML = getTrustedHTML`
+      <cr-dialog>
+        <div slot="title">title</div>
+      </cr-dialog>`;
+
+    const dialog = document.body.querySelector('cr-dialog')!;
+    dialog.showModal();
+
+    assertTrue(dialog.open);
+    assertTrue(dialog.hasAttribute('open'));
+
+    const e = new CustomEvent('cancel', {cancelable: true});
+    dialog.getNative().dispatchEvent(e);
+
+    assertFalse(dialog.open);
+    assertFalse(dialog.hasAttribute('open'));
+  });
+
+  test('dialog cannot be cancelled when `no-cancel` is set', function() {
+    document.body.innerHTML = getTrustedHTML`
+      <cr-dialog no-cancel>
+        <div slot="title">title</div>
+      </cr-dialog>`;
+
+    const dialog = document.body.querySelector('cr-dialog')!;
+    dialog.showModal();
+
+    assertTrue(dialog.$.close.hidden);
+
+    // Hitting escape fires a 'cancel' event. Cancelling that event prevents the
+    // dialog from closing.
+    let e = new CustomEvent('cancel', {cancelable: true});
+    dialog.getNative().dispatchEvent(e);
+    assertTrue(e.defaultPrevented);
+
+    dialog.noCancel = false;
+
+    e = new CustomEvent('cancel', {cancelable: true});
+    dialog.getNative().dispatchEvent(e);
+    assertFalse(e.defaultPrevented);
+  });
+
+  test('dialog close button shown when showCloseButton is true', function() {
+    document.body.innerHTML = getTrustedHTML`
+      <cr-dialog show-close-button>
+        <div slot="title">title</div>
+      </cr-dialog>`;
+
+    const dialog = document.body.querySelector('cr-dialog')!;
+    dialog.showModal();
+    assertTrue(dialog.open);
+
+    assertFalse(dialog.$.close.hidden);
+    assertEquals('flex', window.getComputedStyle(dialog.$.close).display);
+    dialog.$.close.click();
+    assertFalse(dialog.open);
+  });
+
+  test('dialog close button hidden when showCloseButton is false', function() {
+    document.body.innerHTML = getTrustedHTML`
+      <cr-dialog>
+        <div slot="title">title</div>
+      </cr-dialog>`;
+
+    const dialog = document.body.querySelector('cr-dialog')!;
+    dialog.showModal();
+
+    assertTrue(dialog.$.close.hidden);
+    assertEquals('none', window.getComputedStyle(dialog.$.close).display);
+  });
+
+  test('keydown should be consumed when the property is true', function() {
+    document.body.innerHTML = getTrustedHTML`
+      <cr-dialog consume-keydown-event>
+        <div slot="title">title</div>
+      </cr-dialog>`;
+
+    const dialog = document.body.querySelector('cr-dialog')!;
+    dialog.showModal();
+    assertTrue(dialog.open);
+    assertTrue(dialog.consumeKeydownEvent);
+
+    function assertKeydownNotReached() {
+      assertNotReached('keydown event was propagated');
+    }
+    document.addEventListener('keydown', assertKeydownNotReached);
+
+    return flushTasks().then(() => {
+      keyDownOn(dialog, 65, undefined, 'a');
+      keyDownOn(document.body, 65, undefined, 'a');
+      document.removeEventListener('keydown', assertKeydownNotReached);
+    });
+  });
+
+  test('keydown should be propagated when the property is false', function() {
+    document.body.innerHTML = getTrustedHTML`
+      <cr-dialog>
+        <div slot="title">title</div>
+      </cr-dialog>`;
+
+    const dialog = document.body.querySelector('cr-dialog')!;
+    dialog.showModal();
+    assertTrue(dialog.open);
+    assertFalse(dialog.consumeKeydownEvent);
+
+    let keydownCounter = 0;
+    function assertKeydownCount() {
+      keydownCounter++;
+    }
+    document.addEventListener('keydown', assertKeydownCount);
+
+    return flushTasks().then(() => {
+      keyDownOn(dialog, 65, undefined, 'a');
+      assertEquals(1, keydownCounter);
+      document.removeEventListener('keydown', assertKeydownCount);
+    });
+  });
+
+  test('show on attach', () => {
+    document.body.innerHTML = getTrustedHTML`
+      <cr-dialog show-on-attach>
+        <div slot="title">title</div>
+      </cr-dialog>`;
+    const dialog = document.body.querySelector('cr-dialog')!;
+    assertTrue(dialog.open);
+  });
+});
diff --git a/chrome/test/data/webui/chromeos/ash_common/cr_elements/cr_expand_button_test.ts b/chrome/test/data/webui/chromeos/ash_common/cr_elements/cr_expand_button_test.ts
new file mode 100644
index 0000000..c46a4bd
--- /dev/null
+++ b/chrome/test/data/webui/chromeos/ash_common/cr_elements/cr_expand_button_test.ts
@@ -0,0 +1,90 @@
+// Copyright 2019 The Chromium Authors
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// clang-format off
+import 'chrome://resources/ash/common/cr_elements/cr_expand_button/cr_expand_button.js';
+
+import {CrExpandButtonElement} from 'chrome://resources/ash/common/cr_elements/cr_expand_button/cr_expand_button.js';
+import {CrIconButtonElement} from 'chrome://resources/ash/common/cr_elements/cr_icon_button/cr_icon_button.js';
+import {assertEquals, assertFalse, assertTrue} from 'chrome://webui-test/chai_assert.js';
+// clang-format on
+
+suite('cr-expand-button', function() {
+  let button: CrExpandButtonElement;
+  let icon: CrIconButtonElement;
+  const expandTitle = 'expand title';
+  const collapseTitle = 'collapse title';
+
+  setup(() => {
+    document.body.innerHTML = window.trustedTypes!.emptyHTML;
+    button = document.createElement('cr-expand-button');
+    document.body.appendChild(button);
+    icon = button.shadowRoot!.querySelector<CrIconButtonElement>('#icon')!;
+  });
+
+  test('setting |aria-label| label', () => {
+    assertFalse(!!button.ariaLabel);
+    assertEquals('label', icon.getAttribute('aria-labelledby'));
+    assertEquals(null, icon.getAttribute('aria-label'));
+    const ariaLabel = 'aria-label label';
+    button.ariaLabel = ariaLabel;
+    assertEquals(null, icon.getAttribute('aria-labelledby'));
+    assertEquals(ariaLabel, icon.getAttribute('aria-label'));
+  });
+
+  test('changing |expanded|', () => {
+    button.expandTitle = expandTitle;
+    button.collapseTitle = collapseTitle;
+    assertFalse(button.expanded);
+    assertEquals(expandTitle, button.title);
+    assertEquals('false', icon.getAttribute('aria-expanded'));
+    assertEquals('cr:expand-more', icon.ironIcon);
+    button.expanded = true;
+    assertEquals(collapseTitle, button.title);
+    assertEquals('true', icon.getAttribute('aria-expanded'));
+    assertEquals('cr:expand-less', icon.ironIcon);
+  });
+
+  test('changing |disabled|', () => {
+    assertFalse(button.disabled);
+    assertEquals('false', icon.getAttribute('aria-expanded'));
+    assertFalse(icon.disabled);
+    button.disabled = true;
+    assertFalse(icon.hasAttribute('aria-expanded'));
+    assertTrue(icon.disabled);
+  });
+
+  // Ensure that the label is marked with aria-hidden="true", so that screen
+  // reader focus goes straight to the cr-icon-button.
+  test('label aria-hidden', () => {
+    const labelId = 'label';
+    assertEquals(
+        'true',
+        button.shadowRoot!.querySelector(`#${labelId}`)!.getAttribute(
+            'aria-hidden'));
+    assertEquals(labelId, icon.getAttribute('aria-labelledby'));
+  });
+
+  test('setting |expand-icon| and |collapse-icon|', () => {
+    const expandIconName = 'cr:arrow-drop-down';
+    button.setAttribute('expand-icon', expandIconName);
+    const collapseIconName = 'cr:arrow-drop-up';
+    button.setAttribute('collapse-icon', collapseIconName);
+
+    assertFalse(button.expanded);
+    assertEquals(expandIconName, icon.ironIcon);
+    button.expanded = true;
+    assertEquals(collapseIconName, icon.ironIcon);
+  });
+
+  test('setting |expand-title| and |collapse-title|', () => {
+    assertFalse(button.expanded);
+    button.expandTitle = expandTitle;
+    assertEquals(expandTitle, button.title);
+
+    button.click();
+    button.collapseTitle = collapseTitle;
+    assertEquals(collapseTitle, button.title);
+  });
+});
diff --git a/chrome/test/data/webui/chromeos/ash_common/cr_elements/cr_icon_button_test.ts b/chrome/test/data/webui/chromeos/ash_common/cr_elements/cr_icon_button_test.ts
new file mode 100644
index 0000000..968b600
--- /dev/null
+++ b/chrome/test/data/webui/chromeos/ash_common/cr_elements/cr_icon_button_test.ts
@@ -0,0 +1,155 @@
+// Copyright 2019 The Chromium Authors
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// clang-format off
+import 'chrome://resources/ash/common/cr_elements/cr_icon_button/cr_icon_button.js';
+import 'chrome://resources/cr_elements/icons.html.js';
+import 'chrome://resources/polymer/v3_0/iron-icon/iron-icon.js';
+
+import {getTrustedHTML} from 'chrome://resources/js/static_types.js';
+import {CrIconButtonElement} from 'chrome://resources/ash/common/cr_elements/cr_icon_button/cr_icon_button.js';
+import {downAndUp, pressAndReleaseKeyOn} from 'chrome://resources/polymer/v3_0/iron-test-helpers/mock-interactions.js';
+import {assertEquals, assertFalse, assertTrue} from 'chrome://webui-test/chai_assert.js';
+import {eventToPromise} from 'chrome://webui-test/test_util.js';
+import {flushTasks} from 'chrome://webui-test/polymer_test_util.js';
+
+// clang-format on
+
+suite('cr-icon-button', function() {
+  let button: CrIconButtonElement;
+
+  function press(key: string) {
+    button.dispatchEvent(new KeyboardEvent('keydown', {key}));
+    button.dispatchEvent(new KeyboardEvent('keyup', {key}));
+  }
+
+  setup(async () => {
+    document.body.innerHTML = window.trustedTypes!.emptyHTML;
+    button = document.createElement('cr-icon-button');
+    document.body.appendChild(button);
+    await flushTasks();
+  });
+
+  test('enabled/disabled', () => {
+    assertEquals('0', button.getAttribute('tabindex'));
+    assertEquals('false', button.getAttribute('aria-disabled'));
+    button.disabled = true;
+    assertEquals('-1', button.getAttribute('tabindex'));
+    assertEquals('true', button.getAttribute('aria-disabled'));
+  });
+
+  test('iron-icon is created, reused and removed based on |ironIcon|', () => {
+    assertFalse(!!button.shadowRoot!.querySelector('iron-icon'));
+    button.ironIcon = 'icon-key';
+    assertTrue(!!button.shadowRoot!.querySelector('iron-icon'));
+    button.shadowRoot!.querySelector('iron-icon')!.icon = 'icon-key';
+    button.ironIcon = 'another-icon-key';
+    assertEquals(1, button.shadowRoot!.querySelectorAll('iron-icon').length);
+    button.shadowRoot!.querySelector('iron-icon')!.icon = 'another-icon-key';
+    button.ironIcon = '';
+    assertFalse(!!button.shadowRoot!.querySelector('iron-icon'));
+  });
+
+  test('iron-icon children svg and img elements have role set to none', () => {
+    button.ironIcon = 'cr:clear';
+    assertTrue(!!button.shadowRoot);
+    const ironIcons = button.shadowRoot!.querySelectorAll('iron-icon');
+    assertEquals(1, ironIcons.length);
+    const iconChildren = ironIcons[0]!.shadowRoot!.querySelectorAll('svg, img');
+    assertEquals(1, iconChildren.length);
+    assertEquals(iconChildren[0]!.getAttribute('role'), 'none');
+  });
+
+  test('enter emits click event', async () => {
+    const wait = eventToPromise('click', button);
+    pressAndReleaseKeyOn(button, -1, [], 'Enter');
+    await wait;
+  });
+
+  test('space emits click event', async () => {
+    const wait = eventToPromise('click', button);
+    pressAndReleaseKeyOn(button, -1, [], ' ');
+    await wait;
+  });
+
+  test('space up does not click without space down', () => {
+    let clicked = false;
+    button.addEventListener('click', () => {
+      clicked = true;
+    }, {once: true});
+    button.dispatchEvent(new KeyboardEvent('keyup', {key: ' '}));
+    assertFalse(clicked);
+    press(' ');
+    assertTrue(clicked);
+  });
+
+  test('space up events will not result in one click if loses focus', () => {
+    let clicked = false;
+    button.addEventListener('click', () => {
+      clicked = true;
+    }, {once: true});
+    button.dispatchEvent(new KeyboardEvent('keydown', {key: ' '}));
+    button.dispatchEvent(new Event('blur'));
+    button.dispatchEvent(new KeyboardEvent('keyup', {key: ' '}));
+    assertFalse(clicked);
+    press(' ');
+    assertTrue(clicked);
+  });
+
+  test('disabled prevents UI and programmatic clicks', async () => {
+    let clickCount = 0;
+    const clickHandler = () => {
+      clickCount++;
+    };
+    button.addEventListener('click', clickHandler);
+
+    button.disabled = true;
+    await flushTasks();
+    pressAndReleaseKeyOn(button, -1, [], 'Enter');
+    pressAndReleaseKeyOn(button, -1, [], ' ');
+    downAndUp(button);
+    button.click();
+    await flushTasks();
+    assertEquals(0, clickCount);
+
+    button.disabled = false;
+    await flushTasks();
+    pressAndReleaseKeyOn(button, -1, [], 'Enter');
+    pressAndReleaseKeyOn(button, -1, [], ' ');
+    downAndUp(button);
+    button.click();
+    await flushTasks();
+    assertEquals(4, clickCount);
+    button.removeEventListener('click', clickHandler);
+  });
+
+  test('when tabindex is -1, it stays -1', async () => {
+    document.body.innerHTML =
+        getTrustedHTML`<cr-icon-button custom-tab-index="-1"></cr-icon-button>`;
+    await flushTasks();
+    button = document.body.querySelector('cr-icon-button')!;
+    assertEquals('-1', button.getAttribute('tabindex'));
+    button.disabled = true;
+    assertEquals('-1', button.getAttribute('tabindex'));
+    button.disabled = false;
+    assertEquals('-1', button.getAttribute('tabindex'));
+  });
+
+  test('tabindex update', () => {
+    button = document.createElement('cr-icon-button')!;
+    document.body.innerHTML = window.trustedTypes!.emptyHTML;
+    document.body.appendChild(button);
+    assertEquals('0', button.getAttribute('tabindex'));
+    button.customTabIndex = 1;
+    assertEquals('1', button.getAttribute('tabindex'));
+  });
+
+  test('multiple iron icons', () => {
+    button.ironIcon = 'icon1,icon2';
+    const elements = button.shadowRoot!.querySelectorAll('iron-icon');
+    assertEquals(2, elements.length);
+    assertEquals('icon1', elements[0]!.icon);
+    assertEquals('icon2', elements[1]!.icon);
+  });
+});
diff --git a/chrome/test/data/webui/chromeos/ash_common/cr_elements/cr_input_test.ts b/chrome/test/data/webui/chromeos/ash_common/cr_elements/cr_input_test.ts
new file mode 100644
index 0000000..8f26e646
--- /dev/null
+++ b/chrome/test/data/webui/chromeos/ash_common/cr_elements/cr_input_test.ts
@@ -0,0 +1,336 @@
+// Copyright 2018 The Chromium Authors
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// clang-format off
+import 'chrome://resources/ash/common/cr_elements/cr_input/cr_input.js';
+
+import {CrInputElement} from 'chrome://resources/ash/common/cr_elements/cr_input/cr_input.js';
+import {flush} from 'chrome://resources/polymer/v3_0/polymer/polymer_bundled.min.js';
+import {assertEquals, assertFalse, assertNotEquals, assertThrows, assertTrue} from 'chrome://webui-test/chai_assert.js';
+import {eventToPromise, isChildVisible} from 'chrome://webui-test/test_util.js';
+import {getTrustedHTML} from 'chrome://resources/js/static_types.js';
+// clang-format on
+
+suite('cr-input', function() {
+  let crInput: CrInputElement;
+  let input: HTMLInputElement;
+
+  setup(function() {
+    regenerateNewInput();
+  });
+
+  function regenerateNewInput() {
+    document.body.innerHTML = window.trustedTypes!.emptyHTML;
+    crInput = document.createElement('cr-input');
+    document.body.appendChild(crInput);
+    input = crInput.inputElement;
+    flush();
+  }
+
+  test('AttributesCorrectlySupported', function() {
+    // [externalName, internalName, defaultValue, testValue]
+    type AttributeData = [
+      keyof CrInputElement, keyof HTMLInputElement, boolean | number | string,
+      boolean | number | string
+    ];
+    const attributesToTest: AttributeData[] = [
+      ['autofocus', 'autofocus', false, true],
+      ['disabled', 'disabled', false, true],
+      ['max', 'max', '', '100'],
+      ['min', 'min', '', '1'],
+      ['maxlength', 'maxLength', -1, 5],
+      ['minlength', 'minLength', -1, 5],
+      ['pattern', 'pattern', '', '[a-z]+'],
+      ['readonly', 'readOnly', false, true],
+      ['required', 'required', false, true],
+      ['type', 'type', 'text', 'password'],
+      ['inputmode', 'inputMode', '', 'none'],
+    ];
+
+    attributesToTest.forEach(
+        ([externalName, internalName, defaultValue,
+          testValue]: AttributeData) => {
+          regenerateNewInput();
+          assertEquals(defaultValue, input[internalName]);
+          crInput.setAttribute(externalName, testValue.toString());
+          assertEquals(testValue, input[internalName]);
+        });
+  });
+
+  test('UnsupportedInputTabindex', () => {
+    assertThrows(() => {
+      crInput.inputTabindex = 2;
+    });
+  });
+
+  test('UnsupportedTypeThrows', function() {
+    assertThrows(function() {
+      crInput.type = 'checkbox';
+    });
+  });
+
+  test('inputTabindexCorrectlyBound', () => {
+    assertEquals(0, input['tabIndex']);
+    crInput.setAttribute('input-tabindex', '-1');
+    assertEquals(-1, input.tabIndex);
+  });
+
+  test('placeholderCorrectlyBound', function() {
+    assertFalse(input.hasAttribute('placeholder'));
+
+    crInput.placeholder = '';
+    assertTrue(input.hasAttribute('placeholder'));
+
+    crInput.placeholder = 'hello';
+    assertEquals('hello', input.getAttribute('placeholder'));
+
+    crInput.placeholder = null;
+    assertFalse(input.hasAttribute('placeholder'));
+  });
+
+  test('labelHiddenWhenEmpty', function() {
+    const label = crInput.$.label;
+    assertEquals('none', getComputedStyle(crInput.$.label).display);
+    crInput.label = 'foobar';
+    assertEquals('block', getComputedStyle(crInput.$.label).display);
+    assertEquals('foobar', label.textContent!.trim());
+  });
+
+  test('valueSetCorrectly', function() {
+    crInput.value = 'hello';
+    assertEquals(crInput.value, input.value);
+
+    // |value| is copied when typing triggers inputEvent.
+    input.value = 'hello sir';
+    input.dispatchEvent(new InputEvent('input'));
+    assertEquals(crInput.value, input.value);
+  });
+
+  test('focusState', function() {
+    assertFalse(crInput.hasAttribute('focused_'));
+
+    const underline = crInput.$.underline;
+    const label = crInput.$.label;
+    const originalLabelColor = getComputedStyle(label).color;
+
+    function waitForTransitions(): Promise<TransitionEvent[]> {
+      const events: TransitionEvent[] = [];
+      return eventToPromise('transitionend', underline)
+          .then(e => {
+            events.push(e);
+            return eventToPromise('transitionend', underline);
+          })
+          .then(e => {
+            events.push(e);
+            return events;
+          });
+    }
+
+    assertEquals('0', getComputedStyle(underline).opacity);
+    assertEquals(0, underline.offsetWidth);
+
+    let whenTransitionsEnd = waitForTransitions();
+
+    input.focus();
+    assertTrue(crInput.hasAttribute('focused_'));
+    assertNotEquals(originalLabelColor, getComputedStyle(label).color);
+    return whenTransitionsEnd
+        .then(events => {
+          // Ensure transitions finished in the expected order.
+          assertEquals(2, events.length);
+          assertEquals('opacity', events[0]!.propertyName);
+          assertEquals('width', events[1]!.propertyName);
+
+          assertEquals('1', getComputedStyle(underline).opacity);
+          assertNotEquals(0, underline.offsetWidth);
+
+          whenTransitionsEnd = waitForTransitions();
+          input.blur();
+          return whenTransitionsEnd;
+        })
+        .then(events => {
+          // Ensure transitions finished in the expected order.
+          assertEquals(2, events.length);
+          assertEquals('opacity', events[0]!.propertyName);
+          assertEquals('width', events[1]!.propertyName);
+
+          assertFalse(crInput.hasAttribute('focused_'));
+          assertEquals('0', getComputedStyle(underline).opacity);
+          assertEquals(0, underline.offsetWidth);
+        });
+  });
+
+  test('invalidState', function() {
+    crInput.errorMessage = 'error';
+    const errorLabel = crInput.$.error;
+    const underline = crInput.$.underline;
+    const label = crInput.$.label;
+    const originalLabelColor = getComputedStyle(label).color;
+    const originalLineColor = getComputedStyle(underline).borderBottomColor;
+
+    assertEquals('', errorLabel.textContent);
+    assertFalse(errorLabel.hasAttribute('role'));
+    assertEquals('0', getComputedStyle(underline).opacity);
+    assertEquals(0, underline.offsetWidth);
+    assertEquals('hidden', getComputedStyle(errorLabel).visibility);
+
+    const whenTransitionEnd = eventToPromise('transitionend', underline);
+
+    crInput.invalid = true;
+    flush();
+    assertTrue(crInput.hasAttribute('invalid'));
+    assertEquals('alert', errorLabel.getAttribute('role'));
+    assertEquals(crInput.errorMessage, errorLabel.textContent);
+    assertEquals('visible', getComputedStyle(errorLabel).visibility);
+    assertTrue(originalLabelColor !== getComputedStyle(label).color);
+    assertTrue(
+        originalLineColor !== getComputedStyle(underline).borderBottomColor);
+    return whenTransitionEnd.then(() => {
+      assertEquals('1', getComputedStyle(underline).opacity);
+      assertTrue(0 !== underline.offsetWidth);
+    });
+  });
+
+  test('validation', function() {
+    crInput.value = 'FOO';
+    crInput.autoValidate = true;
+    assertFalse(crInput.hasAttribute('required'));
+    assertFalse(crInput.invalid);
+
+    // Note that even with |autoValidate|, crInput.invalid only updates after
+    // |value| is changed.
+    crInput.setAttribute('required', '');
+    assertFalse(crInput.invalid);
+
+    crInput.value = '';
+    assertTrue(crInput.invalid);
+    crInput.value = 'BAR';
+    assertFalse(crInput.invalid);
+
+    const testPattern = '[a-z]+';
+    crInput.setAttribute('pattern', testPattern);
+    crInput.value = 'FOO';
+    assertTrue(crInput.invalid);
+    crInput.value = 'foo';
+    assertFalse(crInput.invalid);
+
+    // Without |autoValidate|, crInput.invalid should not change even if input
+    // value is not valid.
+    crInput.autoValidate = false;
+    crInput.value = 'ALL CAPS';
+    assertFalse(crInput.invalid);
+    assertFalse(input.checkValidity());
+    crInput.value = '';
+    assertFalse(crInput.invalid);
+    assertFalse(input.checkValidity());
+  });
+
+  test('numberValidation', function() {
+    crInput.type = 'number';
+    crInput.value = '50';
+    crInput.autoValidate = true;
+    assertFalse(crInput.invalid);
+
+    // Note that even with |autoValidate|, crInput.invalid only updates after
+    // |value| is changed.
+    const testMin = 1;
+    const testMax = 100;
+    crInput.setAttribute('min', testMin.toString());
+    crInput.setAttribute('max', testMax.toString());
+    crInput.value = '200';
+    assertTrue(crInput.invalid);
+    crInput.value = '20';
+    assertFalse(crInput.invalid);
+    crInput.value = '-2';
+    assertTrue(crInput.invalid);
+    crInput.value = '40';
+    assertFalse(crInput.invalid);
+
+    // Without |autoValidate|, crInput.invalid should not change even if input
+    // value is not valid.
+    crInput.autoValidate = false;
+    crInput.value = '200';
+    assertFalse(crInput.invalid);
+    assertFalse(input.checkValidity());
+    crInput.value = '-2';
+    assertFalse(crInput.invalid);
+    assertFalse(input.checkValidity());
+  });
+
+  test('ariaDescriptionsCorrect', function() {
+    assertEquals(crInput.inputElement.getAttribute('aria-description'), null);
+
+    const ariaDescription = 'description';
+    crInput.ariaDescription = ariaDescription;
+    flush();
+    assertEquals(
+        crInput.inputElement.getAttribute('aria-description'), ariaDescription);
+
+    crInput.ariaDescription = undefined;
+    flush();
+    assertEquals(crInput.inputElement.getAttribute('aria-description'), null);
+  });
+
+  test('ariaLabelsCorrect', function() {
+    assertFalse(!!crInput.inputElement.getAttribute('aria-label'));
+
+    /**
+     * This function assumes attributes are passed in priority order.
+     */
+    function testAriaLabel(attributes: string[]) {
+      document.body.innerHTML = window.trustedTypes!.emptyHTML;
+      crInput = document.createElement('cr-input');
+      attributes.forEach(attribute => {
+        // Using their name as the value out of convenience.
+        crInput.setAttribute(attribute, attribute);
+      });
+      document.body.appendChild(crInput);
+      flush();
+      // Assuming first attribute takes priority.
+      assertEquals(
+          attributes[0], crInput.inputElement.getAttribute('aria-label'));
+    }
+
+    testAriaLabel(['aria-label', 'label', 'placeholder']);
+    testAriaLabel(['label', 'placeholder']);
+    testAriaLabel(['placeholder']);
+  });
+
+  test('select', function() {
+    crInput.value = '0123456789';
+    assertFalse(input.matches(':focus'));
+    crInput.select();
+    assertTrue(input.matches(':focus'));
+    assertEquals('0123456789', window.getSelection()!.toString());
+
+    regenerateNewInput();
+    crInput.value = '0123456789';
+    assertFalse(input.matches(':focus'));
+    crInput.select(2, 6);
+    assertTrue(input.matches(':focus'));
+    assertEquals('2345', window.getSelection()!.toString());
+
+    regenerateNewInput();
+    crInput.value = '';
+    assertFalse(input.matches(':focus'));
+    crInput.select();
+    assertTrue(input.matches(':focus'));
+    assertEquals('', window.getSelection()!.toString());
+  });
+
+  test('slots', function() {
+    document.body.innerHTML = getTrustedHTML`
+      <cr-input>
+        <div slot="inline-prefix" id="inline-prefix">One</div>
+        <div slot="suffix" id="suffix">Two</div>
+        <div slot="inline-suffix" id="inline-suffix">Three</div>
+      </cr-input>
+    `;
+    flush();
+    crInput = document.querySelector('cr-input')!;
+    assertTrue(isChildVisible(crInput, '#inline-prefix', true));
+    assertTrue(isChildVisible(crInput, '#suffix', true));
+    assertTrue(isChildVisible(crInput, '#inline-suffix', true));
+  });
+});
diff --git a/chrome/test/data/webui/chromeos/cloud_upload/file_handler_page_test.ts b/chrome/test/data/webui/chromeos/cloud_upload/file_handler_page_test.ts
index 0c846825..c5da919 100644
--- a/chrome/test/data/webui/chromeos/cloud_upload/file_handler_page_test.ts
+++ b/chrome/test/data/webui/chromeos/cloud_upload/file_handler_page_test.ts
@@ -8,7 +8,7 @@
 import {CloudUploadBrowserProxy} from 'chrome://cloud-upload/cloud_upload_browser_proxy.js';
 import {AccordionTopCardElement} from 'chrome://cloud-upload/file_handler_card.js';
 import {FileHandlerPageElement} from 'chrome://cloud-upload/file_handler_page.js';
-import {CrButtonElement} from 'chrome://resources/cr_elements/cr_button/cr_button.js';
+import {CrButtonElement} from 'chrome://resources/ash/common/cr_elements/cr_button/cr_button.js';
 import {assert} from 'chrome://resources/js/assert.js';
 import {loadTimeData} from 'chrome://resources/js/load_time_data.js';
 import {assertDeepEquals, assertEquals, assertFalse, assertNotEquals, assertTrue} from 'chrome://webui-test/chai_assert.js';
diff --git a/chrome/test/data/webui/chromeos/os_feedback_ui/BUILD.gn b/chrome/test/data/webui/chromeos/os_feedback_ui/BUILD.gn
index 009b118d..a86a19d 100644
--- a/chrome/test/data/webui/chromeos/os_feedback_ui/BUILD.gn
+++ b/chrome/test/data/webui/chromeos/os_feedback_ui/BUILD.gn
@@ -16,13 +16,15 @@
 
   files = [
     "confirmation_page_test.ts",
-    "feedback_flow_test.js",
+    "feedback_flow_test.ts",
     "help_content_test.ts",
     "file_attachment_test.ts",
     "search_page_test.ts",
-    "share_data_page_test.js",
+    "share_data_page_test.ts",
   ]
 
+  ts_definitions = [ "//tools/typescript/definitions/chrome_send.d.ts" ]
+
   ts_deps = [
     "//ash/webui/common/resources:build_ts",
     "//ash/webui/os_feedback_ui/resources:build_ts",
diff --git a/chrome/test/data/webui/chromeos/os_feedback_ui/feedback_flow_test.js b/chrome/test/data/webui/chromeos/os_feedback_ui/feedback_flow_test.ts
similarity index 72%
rename from chrome/test/data/webui/chromeos/os_feedback_ui/feedback_flow_test.js
rename to chrome/test/data/webui/chromeos/os_feedback_ui/feedback_flow_test.ts
index 6492b6a..82903516 100644
--- a/chrome/test/data/webui/chromeos/os_feedback_ui/feedback_flow_test.js
+++ b/chrome/test/data/webui/chromeos/os_feedback_ui/feedback_flow_test.ts
@@ -2,36 +2,40 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
+import 'chrome://os-feedback/confirmation_page.js';
+import 'chrome://os-feedback/search_page.js';
+import 'chrome://os-feedback/share_data_page.js';
 import 'chrome://webui-test/chromeos/mojo_webui_test_support.js';
 
+import {ConfirmationPageElement} from 'chrome://os-feedback/confirmation_page.js';
 import {fakeFeedbackContext, fakeFeedbackContextWithoutLinkedCrossDevicePhone, fakeInternalUserFeedbackContext, fakePngData, fakeSearchResponse} from 'chrome://os-feedback/fake_data.js';
 import {FakeFeedbackServiceProvider} from 'chrome://os-feedback/fake_feedback_service_provider.js';
 import {FakeHelpContentProvider} from 'chrome://os-feedback/fake_help_content_provider.js';
-import {AdditionalContextQueryParam, FeedbackFlowElement, FeedbackFlowState} from 'chrome://os-feedback/feedback_flow.js';
+import {AdditionalContextQueryParam, FeedbackFlowButtonClickEvent, FeedbackFlowElement, FeedbackFlowState} from 'chrome://os-feedback/feedback_flow.js';
 import {OS_FEEDBACK_TRUSTED_ORIGIN} from 'chrome://os-feedback/help_content.js';
 import {setFeedbackServiceProviderForTesting, setHelpContentProviderForTesting} from 'chrome://os-feedback/mojo_interface_provider.js';
 import {FeedbackAppExitPath, FeedbackAppHelpContentOutcome, FeedbackAppPreSubmitAction, FeedbackContext, SendReportStatus} from 'chrome://os-feedback/os_feedback_ui.mojom-webui.js';
 import {SearchPageElement} from 'chrome://os-feedback/search_page.js';
+import {ShareDataPageElement} from 'chrome://os-feedback/share_data_page.js';
 import {loadTimeData} from 'chrome://resources/ash/common/load_time_data.m.js';
+import {strictQuery} from 'chrome://resources/ash/common/typescript_utils/strict_query.js';
 import {getDeepActiveElement} from 'chrome://resources/ash/common/util.js';
+import {CrButtonElement} from 'chrome://resources/cr_elements/cr_button/cr_button.js';
+import {CrCheckboxElement} from 'chrome://resources/cr_elements/cr_checkbox/cr_checkbox.js';
 import {PromiseResolver} from 'chrome://resources/js/promise_resolver.js';
-import {assertEquals, assertFalse, assertTrue} from 'chrome://webui-test/chromeos/chai_assert.js';
+import {assertEquals, assertFalse, assertTrue} from 'chrome://webui-test/chai_assert.js';
 import {flushTasks} from 'chrome://webui-test/polymer_test_util.js';
-
-import {eventToPromise, isVisible} from '../test_util.js';
+import {eventToPromise, isVisible} from 'chrome://webui-test/test_util.js';
 
 suite('FeedbackFlowTestSuite', () => {
-  /** @type {?FeedbackFlowElement} */
-  let page = null;
+  let page: FeedbackFlowElement;
 
-  /** @type {?FakeHelpContentProvider} */
-  let helpContentProvider = null;
+  let helpContentProvider: FakeHelpContentProvider;
 
-  /** @type {?FakeFeedbackServiceProvider} */
-  let feedbackServiceProvider = null;
+  let feedbackServiceProvider: FakeFeedbackServiceProvider;
 
   setup(() => {
-    document.body.innerHTML = trustedTypes.emptyHTML;
+    document.body.innerHTML = window.trustedTypes!.emptyHTML;
     // Create helpContentProvider.
     helpContentProvider = new FakeHelpContentProvider();
     // Setup search response.
@@ -44,67 +48,46 @@
     setFeedbackServiceProviderForTesting(feedbackServiceProvider);
   });
 
-  teardown(() => {
-    page.remove();
-    page = null;
-    helpContentProvider = null;
-    feedbackServiceProvider = null;
-  });
-
   function initializePage() {
-    assertFalse(!!page);
-    page =
-        /** @type {!FeedbackFlowElement} */ (
-            document.createElement('feedback-flow'));
+    page = document.createElement('feedback-flow');
     assertTrue(!!page);
     document.body.appendChild(page);
     return flushTasks();
   }
 
-  /**
-   * @param {!Element} element
-   * @param {string} selector
-   * @returns {Element|null}
-   */
-  function findChildElement(element, selector) {
-    return element.shadowRoot.querySelector(selector);
+  function findChildElement(element: Element, selector: string): Element|null {
+    return element.shadowRoot!.querySelector(selector);
   }
 
-  /**
-   * @suppress {visibility}
-   * @return {?FeedbackContext}
-   */
-  function getFeedbackContext_() {
-    assertTrue(!!page);
-
-    return page.feedbackContext;
+  function getFeedbackContext(): FeedbackContext {
+    return page!.getFeedbackContextForTesting() as FeedbackContext;
   }
 
-  /** @return {!SearchPageElement} */
-  function getSearchPage() {
-    assertTrue(!!page);
-
-    return /** @type {!SearchPageElement} */ (page.$['searchPage']);
+  function getSearchPage(): SearchPageElement {
+    return strictQuery('#searchPage', page!.shadowRoot, SearchPageElement);
   }
 
-  /**
-   * @param {boolean} isCalled
-   * @param {FeedbackAppExitPath} exitPath
-   * @private
-   */
-  function verifyRecordExitPathCalled(isCalled, exitPath) {
+  function getDescriptionElement(): HTMLTextAreaElement {
+    return strictQuery(
+        '#descriptionText', getSearchPage().shadowRoot, HTMLTextAreaElement);
+  }
+
+  type ActivePageElement =
+      SearchPageElement|ShareDataPageElement|ConfirmationPageElement;
+
+  function getActivePage<T extends ActivePageElement>(): T {
+    return page!.shadowRoot!.querySelector('.iron-selected') as T;
+  }
+
+  function verifyRecordExitPathCalled(
+      isCalled: boolean, exitPath: FeedbackAppExitPath) {
     isCalled ?
         assertTrue(feedbackServiceProvider.isRecordExitPathCalled(exitPath)) :
         assertFalse(feedbackServiceProvider.isRecordExitPathCalled(exitPath));
   }
 
-
-  /**
-   * @param {boolean} isCalled
-   * @param {FeedbackAppHelpContentOutcome} outcome
-   * @private
-   */
-  function verifyHelpContentOutcomeMetricCalled(isCalled, outcome) {
+  function verifyHelpContentOutcomeMetricCalled(
+      isCalled: boolean, outcome: FeedbackAppHelpContentOutcome) {
     isCalled ?
         assertTrue(feedbackServiceProvider.isHelpContentOutcomeMetricEmitted(
             outcome)) :
@@ -112,14 +95,9 @@
             feedbackServiceProvider.isHelpContentOutcomeMetricEmitted(outcome));
   }
 
-  /**
-   * @param {FeedbackFlowState} exitPage
-   * @param {FeedbackAppExitPath} exitPath
-   * @param {boolean} helpContentClicked
-   * @private
-   */
   function verifyExitPathMetricsEmitted(
-      exitPage, exitPath, helpContentClicked) {
+      exitPage: FeedbackFlowState, exitPath: FeedbackAppExitPath,
+      helpContentClicked: boolean) {
     page.setCurrentStateForTesting(exitPage);
     page.setHelpContentClickedForTesting(helpContentClicked);
 
@@ -128,9 +106,6 @@
     verifyRecordExitPathCalled(/*metric_emitted=*/ true, exitPath);
   }
 
-  /**
-   * @private
-   */
   function testWithInternalAccount() {
     feedbackServiceProvider = new FakeFeedbackServiceProvider();
     feedbackServiceProvider.setFakeFeedbackContext(
@@ -138,26 +113,19 @@
     setFeedbackServiceProviderForTesting(feedbackServiceProvider);
   }
 
-  /**
-   * @private
-   */
-  function SetupTestWithoutLinkedCrossDevicePhone() {
+  function setupTestWithoutLinkedCrossDevicePhone() {
     feedbackServiceProvider = new FakeFeedbackServiceProvider();
     feedbackServiceProvider.setFakeFeedbackContext(
         fakeFeedbackContextWithoutLinkedCrossDevicePhone);
     setFeedbackServiceProviderForTesting(feedbackServiceProvider);
   }
 
-  /**
-   * @param {boolean} from_assistant
-   * @private
-   */
-  function setFromAssistantFlag(from_assistant) {
-    if (from_assistant) {
+  function setFromAssistantFlag(fromAssistant: boolean) {
+    if (fromAssistant) {
       const queryParams = new URLSearchParams(window.location.search);
-      const from_assistant = 'true';
+      const fromAssistant = 'true';
       queryParams.set(
-          AdditionalContextQueryParam.FROM_ASSISTANT, from_assistant);
+          AdditionalContextQueryParam.FROM_ASSISTANT, fromAssistant);
 
       window.history.replaceState(null, '', '?' + queryParams.toString());
     } else {
@@ -168,11 +136,7 @@
     }
   }
 
-  /**
-   * @param {boolean} fromSettingsSearch
-   * @private
-   */
-  function setFromSettingsSearchFlag(fromSettingsSearch) {
+  function setFromSettingsSearchFlag(fromSettingsSearch: boolean) {
     if (fromSettingsSearch) {
       const queryParams = new URLSearchParams(window.location.search);
       const fromSettingsSearch = 'true';
@@ -193,20 +157,21 @@
     await initializePage();
 
     // Find the element whose class is iron-selected.
-    const activePage = page.shadowRoot.querySelector('.iron-selected');
+    const activePage = getActivePage();
     assertTrue(!!activePage);
     assertEquals('searchPage', activePage.id);
 
     // Verify the title is in the page.
-    const title = activePage.shadowRoot.querySelector('.page-title');
+    const title =
+        strictQuery('.page-title', activePage.shadowRoot, HTMLElement);
     assertTrue(!!title);
-    assertEquals('Send feedback', title.textContent.trim());
+    assertEquals('Send feedback', title.textContent!.trim());
 
     // Verify the continue button is in the page.
     const buttonContinue =
-        activePage.shadowRoot.querySelector('#buttonContinue');
+        strictQuery('#buttonContinue', activePage.shadowRoot, CrButtonElement);
     assertTrue(!!buttonContinue);
-    assertEquals('Continue', buttonContinue.textContent.trim());
+    assertEquals('Continue', buttonContinue.textContent!.trim());
   });
 
 
@@ -215,24 +180,27 @@
     await initializePage();
     page.setCurrentStateForTesting(FeedbackFlowState.SHARE_DATA);
 
-    const activePage = page.shadowRoot.querySelector('.iron-selected');
+    const activePage = getActivePage<ShareDataPageElement>();
     assertEquals('shareDataPage', activePage.id);
 
     assertTrue(!!activePage);
     // Verify the title is in the page.
-    const title = activePage.shadowRoot.querySelector('.page-title');
+    const title =
+        strictQuery('.page-title', activePage.shadowRoot, HTMLElement);
     assertTrue(!!title);
-    assertEquals('Send feedback', title.textContent.trim());
+    assertEquals('Send feedback', title.textContent!.trim());
 
     // Verify the back button is in the page.
-    const buttonBack = activePage.shadowRoot.querySelector('#buttonBack');
+    const buttonBack =
+        strictQuery('#buttonBack', activePage.shadowRoot, CrButtonElement);
     assertTrue(!!buttonBack);
-    assertEquals('Back', buttonBack.textContent.trim());
+    assertEquals('Back', buttonBack.textContent!.trim());
 
     // Verify the send button is in the page.
-    const buttonSend = activePage.shadowRoot.querySelector('#buttonSend');
+    const buttonSend =
+        strictQuery('#buttonSend', activePage.shadowRoot, CrButtonElement);
     assertTrue(!!buttonSend);
-    assertEquals('Send', buttonSend.textContent.trim());
+    assertEquals('Send', buttonSend.textContent!.trim());
   });
 
 
@@ -242,25 +210,27 @@
     page.setCurrentStateForTesting(FeedbackFlowState.CONFIRMATION);
     page.setSendReportStatusForTesting(SendReportStatus.kSuccess);
 
-    const activePage = page.shadowRoot.querySelector('.iron-selected');
+    const activePage = getActivePage<ConfirmationPageElement>();
     assertTrue(!!activePage);
     assertEquals('confirmationPage', activePage.id);
 
     // Verify the title is in the page.
-    const title = activePage.shadowRoot.querySelector('.page-title');
+    const title =
+        strictQuery('.page-title', activePage.shadowRoot, HTMLElement);
     assertTrue(!!title);
-    assertEquals('Thanks for your feedback', title.textContent.trim());
+    assertEquals('Thanks for your feedback', title.textContent!.trim());
 
     // Verify the done button is in the page.
-    const buttonDone = activePage.shadowRoot.querySelector('#buttonDone');
+    const buttonDone =
+        strictQuery('#buttonDone', activePage.shadowRoot, CrButtonElement);
     assertTrue(!!buttonDone);
-    assertEquals('Done', buttonDone.textContent.trim());
+    assertEquals('Done', buttonDone.textContent!.trim());
 
     // Verify the startNewReport button is in the page.
-    const buttonNewReport =
-        activePage.shadowRoot.querySelector('#buttonNewReport');
+    const buttonNewReport = strictQuery(
+        '#buttonNewReport', activePage.shadowRoot, CrButtonElement);
     assertTrue(!!buttonNewReport);
-    assertEquals('Send new report', buttonNewReport.textContent.trim());
+    assertEquals('Send new report', buttonNewReport.textContent!.trim());
   });
 
   // Test the navigation from search page to share data page.
@@ -274,47 +244,49 @@
 
     page.setHelpContentClickedForTesting(true);
 
-    let activePage = page.shadowRoot.querySelector('.iron-selected');
+    let activePage: ActivePageElement = getActivePage();
     assertTrue(!!activePage);
     assertEquals('searchPage', activePage.id);
 
-    const inputElement = activePage.shadowRoot.querySelector('textarea');
+    const inputElement =
+        strictQuery('textarea', activePage.shadowRoot, HTMLTextAreaElement);
     const continueButton =
-        activePage.shadowRoot.querySelector('#buttonContinue');
+        strictQuery('#buttonContinue', activePage.shadowRoot, CrButtonElement);
 
     // Clear the description.
     inputElement.value = '';
     continueButton.click();
     await flushTasks();
     // Should stay on search page when click the continue button.
-    activePage = page.shadowRoot.querySelector('.iron-selected');
+    activePage = getActivePage();
     assertEquals('searchPage', activePage.id);
     assertEquals(0, feedbackServiceProvider.getScreenshotPngCallCount());
     feedbackServiceProvider.setFakeScreenshotPng(fakePngData);
 
     const clickPromise = eventToPromise('continue-click', page);
 
-    let eventDetail;
-    page.addEventListener('continue-click', (event) => {
-      eventDetail = event.detail;
-    });
+    let eventDetail: FeedbackFlowButtonClickEvent;
+    page.addEventListener(
+        'continue-click', (event: FeedbackFlowButtonClickEvent) => {
+          eventDetail = event;
+        });
 
     // Enter some text.
     inputElement.value = 'abc';
     continueButton.click();
     await clickPromise;
 
-    assertEquals(FeedbackFlowState.SEARCH, eventDetail.currentState);
-    assertEquals('abc', eventDetail.description);
+    assertEquals(FeedbackFlowState.SEARCH, eventDetail!.detail!.currentState);
+    assertEquals('abc', eventDetail!.detail!.description);
 
     // Should move to share data page when click the continue button.
-    activePage = page.shadowRoot.querySelector('.iron-selected');
+    activePage = getActivePage<ShareDataPageElement>();
     assertEquals('shareDataPage', activePage.id);
 
     // Verify that the getScreenshotPng is called once.
     assertEquals(1, feedbackServiceProvider.getScreenshotPngCallCount());
-    const screenshotImg =
-        activePage.shadowRoot.querySelector('#screenshotImage');
+    const screenshotImg = strictQuery(
+        '#screenshotImage', activePage.shadowRoot, HTMLImageElement);
     assertTrue(!!screenshotImg);
     assertTrue(!!screenshotImg.src);
     // Verify that the src of the screenshot image is set.
@@ -333,18 +305,19 @@
     await initializePage();
     page.setCurrentStateForTesting(FeedbackFlowState.SHARE_DATA);
 
-    let activePage = page.shadowRoot.querySelector('.iron-selected');
+    let activePage = getActivePage();
     assertEquals('shareDataPage', activePage.id);
 
-    activePage.shadowRoot.querySelector('#buttonBack').click();
+    strictQuery('#buttonBack', activePage.shadowRoot, CrButtonElement).click();
     await flushTasks();
     // Should go back to share data page.
-    activePage = page.shadowRoot.querySelector('.iron-selected');
+    activePage = getActivePage();
     assertTrue(!!activePage);
     assertEquals('searchPage', activePage.id);
 
     // The description input element should have received focused.
-    const descriptionElement = activePage.shadowRoot.querySelector('textarea');
+    const descriptionElement =
+        strictQuery('textarea', activePage.shadowRoot, HTMLTextAreaElement);
     assertEquals(descriptionElement, getDeepActiveElement());
   });
 
@@ -357,27 +330,28 @@
     // share data page.
     page.setDescriptionForTesting('abc123');
 
-    let activePage = page.shadowRoot.querySelector('.iron-selected');
+    let activePage = getActivePage();
     assertEquals('shareDataPage', activePage.id);
 
     const clickPromise = eventToPromise('continue-click', page);
 
     let eventDetail;
     page.addEventListener('continue-click', (event) => {
-      eventDetail = event.detail;
+      eventDetail = event;
     });
 
     assertEquals(0, feedbackServiceProvider.getSendReportCallCount());
 
-    activePage.shadowRoot.querySelector('#buttonSend').click();
+    strictQuery('#buttonSend', activePage.shadowRoot, CrButtonElement).click();
     await clickPromise;
 
     // Verify the sendReport method was invoked.
     assertEquals(1, feedbackServiceProvider.getSendReportCallCount());
-    assertEquals(FeedbackFlowState.SHARE_DATA, eventDetail.currentState);
+    assertEquals(
+        FeedbackFlowState.SHARE_DATA, eventDetail!.detail!.currentState);
 
     // Should navigate to confirmation page.
-    activePage = page.shadowRoot.querySelector('.iron-selected');
+    activePage = getActivePage<ConfirmationPageElement>();
     assertTrue(!!activePage);
     assertEquals('confirmationPage', activePage.id);
     assertEquals(SendReportStatus.kSuccess, activePage.sendReportStatus);
@@ -391,36 +365,40 @@
 
     // Check the bluetooth checkbox component hidden when input is not related
     // to bluetooth.
-    let activePage = page.shadowRoot.querySelector('.iron-selected');
+    let activePage = getActivePage();
     assertTrue(!!activePage);
     assertEquals('searchPage', activePage.id);
 
-    activePage.shadowRoot.querySelector('textarea').value = 'abc';
-    activePage.shadowRoot.querySelector('#buttonContinue').click();
+    strictQuery('textarea', activePage.shadowRoot, HTMLTextAreaElement).value =
+        'abc';
+    strictQuery('#buttonContinue', activePage.shadowRoot, CrButtonElement)
+        .click();
     await flushTasks();
 
-    activePage = page.shadowRoot.querySelector('.iron-selected');
+    activePage = getActivePage();
     assertEquals('shareDataPage', activePage.id);
-    const bluetoothCheckbox =
-        activePage.shadowRoot.querySelector('#bluetoothCheckboxContainer');
+    const bluetoothCheckbox = strictQuery(
+        '#bluetoothCheckboxContainer', activePage.shadowRoot, HTMLElement);
     assertTrue(!!bluetoothCheckbox);
     assertFalse(isVisible(bluetoothCheckbox));
 
-    activePage.shadowRoot.querySelector('#buttonBack').click();
+    strictQuery('#buttonBack', activePage.shadowRoot, CrButtonElement).click();
     await flushTasks();
 
     // Go back to search page and set description input related to bluetooth.
-    activePage = page.shadowRoot.querySelector('.iron-selected');
+    activePage = getActivePage();
     assertTrue(!!activePage);
     assertEquals('searchPage', activePage.id);
 
-    const descriptionElement = activePage.shadowRoot.querySelector('textarea');
+    const descriptionElement =
+        strictQuery('textarea', activePage.shadowRoot, HTMLTextAreaElement);
     descriptionElement.value = 'bluetooth';
 
-    activePage.shadowRoot.querySelector('#buttonContinue').click();
+    strictQuery('#buttonContinue', activePage.shadowRoot, CrButtonElement)
+        .click();
     await flushTasks();
 
-    activePage = page.shadowRoot.querySelector('.iron-selected');
+    activePage = getActivePage();
     assertTrue(!!activePage);
     assertEquals('shareDataPage', activePage.id);
 
@@ -434,16 +412,18 @@
     await initializePage();
 
     // Set input description related to bluetooth.
-    let activePage = page.shadowRoot.querySelector('.iron-selected');
+    let activePage = getActivePage();
 
-    activePage.shadowRoot.querySelector('textarea').value = 'bluetooth';
-    activePage.shadowRoot.querySelector('#buttonContinue').click();
+    strictQuery('textarea', activePage.shadowRoot, HTMLTextAreaElement).value =
+        'bluetooth';
+    strictQuery('#buttonContinue', activePage.shadowRoot, CrButtonElement)
+        .click();
     await flushTasks();
 
-    activePage = page.shadowRoot.querySelector('.iron-selected');
+    activePage = getActivePage();
     assertEquals('shareDataPage', activePage.id);
-    const bluetoothCheckbox =
-        activePage.shadowRoot.querySelector('#bluetoothCheckboxContainer');
+    const bluetoothCheckbox = strictQuery(
+        '#bluetoothCheckboxContainer', activePage.shadowRoot, HTMLElement);
     assertTrue(!!bluetoothCheckbox);
     assertFalse(isVisible(bluetoothCheckbox));
   });
@@ -457,13 +437,17 @@
 
     const searchPage = findChildElement(page, '.iron-selected');
     assertTrue(!!searchPage);
-    assertEquals('searchPage', searchPage.id);
+    assertEquals('searchPage', searchPage!.id);
 
-    findChildElement(searchPage, 'textarea').value =
-        'wifi wi-fi internet network hotspot';
+    const inputElement = findChildElement(searchPage as Element, 'textarea') as
+        HTMLTextAreaElement;
+    inputElement.value = 'wifi wi-fi internet network hotspot';
     // The flag ShouldShowWifiDebugLogsCheckBox_ is only updated when continue
     // button is clicked.
-    findChildElement(searchPage, '#buttonContinue').click();
+    const continueButton =
+        findChildElement(searchPage as Element, '#buttonContinue') as
+        CrButtonElement;
+    continueButton.click();
     await flushTasks();
 
     assertFalse(page.getShouldShowWifiDebugLogsCheckboxForTesting());
@@ -476,17 +460,22 @@
   test('DoNotShowWifiDebugLogsCheckBox_NotAllowed', async () => {
     testWithInternalAccount();
     await initializePage();
-    assertFalse(getFeedbackContext_().wifiDebugLogsAllowed);
+    assertFalse(getFeedbackContext().wifiDebugLogsAllowed);
     assertFalse(page.getShouldShowWifiDebugLogsCheckboxForTesting());
 
     const searchPage = findChildElement(page, '.iron-selected');
     assertTrue(!!searchPage);
     assertEquals('searchPage', searchPage.id);
 
-    findChildElement(searchPage, 'textarea').value = 'wi-fi';
+    const inputElement = findChildElement(searchPage as Element, 'textarea') as
+        HTMLTextAreaElement;
+    inputElement.value = 'wi-fi';
     // The flag ShouldShowWifiDebugLogsCheckBox_ is only updated when continue
     // button is clicked.
-    findChildElement(searchPage, '#buttonContinue').click();
+    const continueButton =
+        findChildElement(searchPage as Element, '#buttonContinue') as
+        CrButtonElement;
+    continueButton.click();
     await flushTasks();
 
     assertFalse(page.getShouldShowWifiDebugLogsCheckboxForTesting());
@@ -499,17 +488,22 @@
   test('ShowWifiDebugLogsCheckBox', async () => {
     testWithInternalAccount();
     await initializePage();
-    getFeedbackContext_().wifiDebugLogsAllowed = true;
+    getFeedbackContext().wifiDebugLogsAllowed = true;
     assertFalse(page.getShouldShowWifiDebugLogsCheckboxForTesting());
 
     const searchPage = findChildElement(page, '.iron-selected');
     assertTrue(!!searchPage);
     assertEquals('searchPage', searchPage.id);
 
-    findChildElement(searchPage, 'textarea').value = 'wi-fi';
+    const inputElement = findChildElement(searchPage as Element, 'textarea') as
+        HTMLTextAreaElement;
+    inputElement.value = 'wi-fi';
     // The flag ShouldShowWifiDebugLogsCheckBox_ is only updated when continue
     // button is clicked.
-    findChildElement(searchPage, '#buttonContinue').click();
+    const continueButton =
+        findChildElement(searchPage as Element, '#buttonContinue') as
+        CrButtonElement;
+    continueButton.click();
     await flushTasks();
 
     assertTrue(page.getShouldShowWifiDebugLogsCheckboxForTesting());
@@ -525,26 +519,29 @@
 
         // Check the "Link Cross Device Dogfood Feedback" checkbox component is
         // hidden when input is not related to cross device.
-        let activePage = page.shadowRoot.querySelector('.iron-selected');
+        let activePage = getActivePage();
         assertTrue(!!activePage);
         assertEquals('searchPage', activePage.id);
 
-        activePage.shadowRoot.querySelector('textarea').value = 'abc';
-        activePage.shadowRoot.querySelector('#buttonContinue').click();
+        strictQuery('textarea', activePage.shadowRoot, HTMLTextAreaElement)
+            .value = 'abc';
+        strictQuery('#buttonContinue', activePage.shadowRoot, CrButtonElement)
+            .click();
         await flushTasks();
 
         loadTimeData.overrideValues(
             {'enableLinkCrossDeviceDogfoodFeedbackFlag': true});
 
-        activePage = page.shadowRoot.querySelector('.iron-selected');
+        activePage = getActivePage();
         assertEquals('shareDataPage', activePage.id);
         const linkCrossDeviceDogfoodFeedbackCheckbox =
-            activePage.shadowRoot.querySelector(
+            activePage.shadowRoot!.querySelector(
                 '#linkCrossDeviceDogfoodFeedbackCheckboxContainer');
         assertTrue(!!linkCrossDeviceDogfoodFeedbackCheckbox);
         assertFalse(isVisible(linkCrossDeviceDogfoodFeedbackCheckbox));
 
-        activePage.shadowRoot.querySelector('#buttonBack').click();
+        strictQuery('#buttonBack', activePage.shadowRoot, CrButtonElement)
+            .click();
         await flushTasks();
 
         loadTimeData.overrideValues(
@@ -552,26 +549,28 @@
 
         // Go back to search page and set description input related to cross
         // device.
-        activePage = page.shadowRoot.querySelector('.iron-selected');
+        activePage = getActivePage();
         assertTrue(!!activePage);
         assertEquals('searchPage', activePage.id);
 
         // Testing tetherRegEx
-        let descriptionElement =
-            activePage.shadowRoot.querySelector('textarea');
+        let descriptionElement = strictQuery(
+            'textarea', activePage.shadowRoot, HTMLTextAreaElement);
         descriptionElement.value = 'hotspot';
 
-        activePage.shadowRoot.querySelector('#buttonContinue').click();
+        strictQuery('#buttonContinue', activePage.shadowRoot, CrButtonElement)
+            .click();
         await flushTasks();
 
-        activePage = page.shadowRoot.querySelector('.iron-selected');
+        activePage = getActivePage();
         assertTrue(!!activePage);
         assertEquals('shareDataPage', activePage.id);
 
         assertTrue(!!linkCrossDeviceDogfoodFeedbackCheckbox);
         assertTrue(isVisible(linkCrossDeviceDogfoodFeedbackCheckbox));
 
-        activePage.shadowRoot.querySelector('#buttonBack').click();
+        strictQuery('#buttonBack', activePage.shadowRoot, CrButtonElement)
+            .click();
         await flushTasks();
 
         loadTimeData.overrideValues(
@@ -579,25 +578,28 @@
 
         // Go back to search page and set description input related to cross
         // device.
-        activePage = page.shadowRoot.querySelector('.iron-selected');
+        activePage = getActivePage();
         assertTrue(!!activePage);
         assertEquals('searchPage', activePage.id);
 
         // Testing phoneHubRegEx
-        descriptionElement = activePage.shadowRoot.querySelector('textarea');
+        descriptionElement = strictQuery(
+            'textarea', activePage.shadowRoot, HTMLTextAreaElement);
         descriptionElement.value = 'appstream';
 
-        activePage.shadowRoot.querySelector('#buttonContinue').click();
+        strictQuery('#buttonContinue', activePage.shadowRoot, CrButtonElement)
+            .click();
         await flushTasks();
 
-        activePage = page.shadowRoot.querySelector('.iron-selected');
+        activePage = getActivePage();
         assertTrue(!!activePage);
         assertEquals('shareDataPage', activePage.id);
 
         assertTrue(!!linkCrossDeviceDogfoodFeedbackCheckbox);
         assertTrue(isVisible(linkCrossDeviceDogfoodFeedbackCheckbox));
 
-        activePage.shadowRoot.querySelector('#buttonBack').click();
+        strictQuery('#buttonBack', activePage.shadowRoot, CrButtonElement)
+            .click();
         await flushTasks();
 
         loadTimeData.overrideValues(
@@ -605,18 +607,20 @@
 
         // Go back to search page and set description input related to cross
         // device.
-        activePage = page.shadowRoot.querySelector('.iron-selected');
+        activePage = getActivePage();
         assertTrue(!!activePage);
         assertEquals('searchPage', activePage.id);
 
         // Testing phoneHubRegEx variation.
-        descriptionElement = activePage.shadowRoot.querySelector('textarea');
+        descriptionElement = strictQuery(
+            'textarea', activePage.shadowRoot, HTMLTextAreaElement);
         descriptionElement.value = 'camera roll';
 
-        activePage.shadowRoot.querySelector('#buttonContinue').click();
+        strictQuery('#buttonContinue', activePage.shadowRoot, CrButtonElement)
+            .click();
         await flushTasks();
 
-        activePage = page.shadowRoot.querySelector('.iron-selected');
+        activePage = getActivePage();
         assertTrue(!!activePage);
         assertEquals('shareDataPage', activePage.id);
 
@@ -636,15 +640,17 @@
             {'enableLinkCrossDeviceDogfoodFeedbackFlag': true});
 
         // Set input description related to cross device.
-        let activePage = page.shadowRoot.querySelector('.iron-selected');
-        activePage.shadowRoot.querySelector('textarea').value = 'phone';
-        activePage.shadowRoot.querySelector('#buttonContinue').click();
+        let activePage = getActivePage();
+        strictQuery('textarea', activePage.shadowRoot, HTMLTextAreaElement)
+            .value = 'phone';
+        strictQuery('#buttonContinue', activePage.shadowRoot, CrButtonElement)
+            .click();
         await flushTasks();
 
-        activePage = page.shadowRoot.querySelector('.iron-selected');
+        activePage = getActivePage();
         assertEquals('shareDataPage', activePage.id);
         const linkCrossDeviceDogfoodFeedbackCheckbox =
-            activePage.shadowRoot.querySelector(
+            activePage.shadowRoot!.querySelector(
                 '#linkCrossDeviceDogfoodFeedbackCheckboxContainer');
         assertTrue(!!linkCrossDeviceDogfoodFeedbackCheckbox);
         assertFalse(isVisible(linkCrossDeviceDogfoodFeedbackCheckbox));
@@ -655,7 +661,7 @@
   test(
       'LinkCrossDeviceDogfoodFeedbackHiddenWithoutLinkedCrossDevicePhone',
       async () => {
-        SetupTestWithoutLinkedCrossDevicePhone();
+        setupTestWithoutLinkedCrossDevicePhone();
 
         await initializePage();
 
@@ -664,16 +670,18 @@
             {'enableLinkCrossDeviceDogfoodFeedbackFlag': true});
 
         // Set input description related to cross device.
-        let activePage = page.shadowRoot.querySelector('.iron-selected');
+        let activePage = getActivePage();
 
-        activePage.shadowRoot.querySelector('textarea').value = 'phone';
-        activePage.shadowRoot.querySelector('#buttonContinue').click();
+        strictQuery('textarea', activePage.shadowRoot, HTMLTextAreaElement)
+            .value = 'phone';
+        strictQuery('#buttonContinue', activePage.shadowRoot, CrButtonElement)
+            .click();
         await flushTasks();
 
-        activePage = page.shadowRoot.querySelector('.iron-selected');
+        activePage = getActivePage();
         assertEquals('shareDataPage', activePage.id);
         const linkCrossDeviceDogfoodFeedbackCheckbox =
-            activePage.shadowRoot.querySelector(
+            activePage.shadowRoot!.querySelector(
                 '#linkCrossDeviceDogfoodFeedbackCheckboxContainer');
         assertTrue(!!linkCrossDeviceDogfoodFeedbackCheckbox);
         assertFalse(isVisible(linkCrossDeviceDogfoodFeedbackCheckbox));
@@ -690,39 +698,43 @@
         {'enableLinkCrossDeviceDogfoodFeedbackFlag': true});
 
     // Set input description related to cross device.
-    let activePage = page.shadowRoot.querySelector('.iron-selected');
+    let activePage = getActivePage();
 
-    activePage.shadowRoot.querySelector('textarea').value = 'phone';
-    activePage.shadowRoot.querySelector('#buttonContinue').click();
+    strictQuery('textarea', activePage.shadowRoot, HTMLTextAreaElement).value =
+        'phone';
+    strictQuery('#buttonContinue', activePage.shadowRoot, CrButtonElement)
+        .click();
     await flushTasks();
 
-    activePage = page.shadowRoot.querySelector('.iron-selected');
+    activePage = getActivePage();
     assertEquals('shareDataPage', activePage.id);
     const linkCrossDeviceDogfoodFeedbackCheckbox =
-        activePage.shadowRoot.querySelector(
+        activePage.shadowRoot!.querySelector(
             '#linkCrossDeviceDogfoodFeedbackCheckboxContainer');
     assertTrue(!!linkCrossDeviceDogfoodFeedbackCheckbox);
     assertTrue(isVisible(linkCrossDeviceDogfoodFeedbackCheckbox));
 
-    activePage.shadowRoot.querySelector('#buttonBack').click();
+    strictQuery('#buttonBack', activePage.shadowRoot, CrButtonElement).click();
     await flushTasks();
 
     // Go back to search page and set description input related to cross device.
-    activePage = page.shadowRoot.querySelector('.iron-selected');
+    activePage = getActivePage();
     assertTrue(!!activePage);
     assertEquals('searchPage', activePage.id);
 
-    const descriptionElement = activePage.shadowRoot.querySelector('textarea');
+    const descriptionElement =
+        strictQuery('textarea', activePage.shadowRoot, HTMLTextAreaElement);
     descriptionElement.value = 'phone';
 
     // Disable flag and check that the checkbox doesn't appear.
     loadTimeData.overrideValues(
         {'enableLinkCrossDeviceDogfoodFeedbackFlag': false});
 
-    activePage.shadowRoot.querySelector('#buttonContinue').click();
+    strictQuery('#buttonContinue', activePage.shadowRoot, CrButtonElement)
+        .click();
     await flushTasks();
 
-    activePage = page.shadowRoot.querySelector('.iron-selected');
+    activePage = getActivePage();
     assertTrue(!!activePage);
     assertEquals('shareDataPage', activePage.id);
 
@@ -739,16 +751,16 @@
     await initializePage();
     page.setCurrentStateForTesting(FeedbackFlowState.SHARE_DATA);
 
-    const feedbackContext = getFeedbackContext_();
+    const feedbackContext = getFeedbackContext();
     assertTrue(feedbackContext.isInternalAccount);
     assertTrue(feedbackContext.fromAssistant);
     // Check the assistant checkbox component visible when input is not
     // related to bluetooth.
-    const activePage = page.shadowRoot.querySelector('.iron-selected');
+    const activePage = getActivePage();
     assertEquals('shareDataPage', activePage.id);
 
-    const assistantCheckbox =
-        activePage.shadowRoot.querySelector('#assistantLogsContainer');
+    const assistantCheckbox = strictQuery(
+        '#assistantLogsContainer', activePage.shadowRoot, HTMLElement);
 
     assertTrue(!!assistantCheckbox);
     assertTrue(isVisible(assistantCheckbox));
@@ -762,15 +774,15 @@
     await initializePage();
     page.setCurrentStateForTesting(FeedbackFlowState.SHARE_DATA);
 
-    const feedbackContext = getFeedbackContext_();
+    const feedbackContext = getFeedbackContext();
     assertFalse(feedbackContext.isInternalAccount);
     assertTrue(feedbackContext.fromAssistant);
-    let activePage = page.shadowRoot.querySelector('.iron-selected');
-    activePage = page.shadowRoot.querySelector('.iron-selected');
+    let activePage = getActivePage();
+    activePage = getActivePage();
 
     assertEquals('shareDataPage', activePage.id);
-    const assistantCheckbox =
-        activePage.shadowRoot.querySelector('#assistantLogsContainer');
+    const assistantCheckbox = strictQuery(
+        '#assistantLogsContainer', activePage.shadowRoot, HTMLElement);
     assertTrue(!!assistantCheckbox);
     assertFalse(isVisible(assistantCheckbox));
   });
@@ -785,16 +797,16 @@
     await initializePage();
     page.setCurrentStateForTesting(FeedbackFlowState.SHARE_DATA);
 
-    const feedbackContext = getFeedbackContext_();
+    const feedbackContext = getFeedbackContext();
     assertTrue(feedbackContext.isInternalAccount);
     assertFalse(feedbackContext.fromAssistant);
     // Set input description related to bluetooth.
-    let activePage = page.shadowRoot.querySelector('.iron-selected');
-    activePage = page.shadowRoot.querySelector('.iron-selected');
+    let activePage = getActivePage();
+    activePage = getActivePage();
 
     assertEquals('shareDataPage', activePage.id);
-    const assistantCheckbox =
-        activePage.shadowRoot.querySelector('#assistantLogsContainer');
+    const assistantCheckbox = strictQuery(
+        '#assistantLogsContainer', activePage.shadowRoot, HTMLElement);
     assertTrue(!!assistantCheckbox);
     assertFalse(isVisible(assistantCheckbox));
     // Set the flag back to true.
@@ -810,25 +822,27 @@
         // true.
         setFromSettingsSearchFlag(true);
         await initializePage();
-        const feedbackContext = getFeedbackContext_();
+        const feedbackContext = getFeedbackContext();
         assertTrue(feedbackContext.fromSettingsSearch);
 
-        let activePage = page.shadowRoot.querySelector('.iron-selected');
-        activePage.shadowRoot.querySelector('textarea').value = 'text';
-        activePage.shadowRoot.querySelector('#buttonContinue').click();
+        const activePage = getActivePage<SearchPageElement>();
+        strictQuery('textarea', activePage.shadowRoot, HTMLTextAreaElement)
+            .value = 'text';
+        strictQuery('#buttonContinue', activePage.shadowRoot, CrButtonElement)
+            .click();
         await flushTasks();
 
         // Check the sys info and metrics checkbox component is unchecked when
         // the feedback app has opened through settings search
-        activePage = page.shadowRoot.querySelector('.iron-selected');
-        assertEquals('shareDataPage', activePage.id);
+        const newActivePage = getActivePage<ShareDataPageElement>();
+        assertEquals('shareDataPage', newActivePage.id);
 
-        const sysInfoAndMetricsCheckboxContainer =
-            activePage.shadowRoot.querySelector('#sysInfoContainer');
+        const sysInfoAndMetricsCheckboxContainer = strictQuery(
+            '#sysInfoContainer', newActivePage.shadowRoot, HTMLElement);
         assertTrue(!!sysInfoAndMetricsCheckboxContainer);
 
-        const sysInfoAndMetricsCheckbox =
-            activePage.shadowRoot.querySelector('#sysInfoCheckbox');
+        const sysInfoAndMetricsCheckbox = strictQuery(
+            '#sysInfoCheckbox', newActivePage.shadowRoot, CrCheckboxElement);
         assertTrue(!!sysInfoAndMetricsCheckbox);
         assertFalse(sysInfoAndMetricsCheckbox.checked);
       });
@@ -842,23 +856,25 @@
         // false.
         setFromSettingsSearchFlag(false);
         await initializePage();
-        const feedbackContext = getFeedbackContext_();
+        const feedbackContext = getFeedbackContext();
         assertFalse(feedbackContext.fromSettingsSearch);
 
-        let activePage = page.shadowRoot.querySelector('.iron-selected');
-        activePage.shadowRoot.querySelector('textarea').value = 'text';
-        activePage.shadowRoot.querySelector('#buttonContinue').click();
+        const activePage = getActivePage<SearchPageElement>();
+        strictQuery('textarea', activePage.shadowRoot, HTMLTextAreaElement)
+            .value = 'text';
+        strictQuery('#buttonContinue', activePage.shadowRoot, CrButtonElement)
+            .click();
         await flushTasks();
 
-        activePage = page.shadowRoot.querySelector('.iron-selected');
-        assertEquals('shareDataPage', activePage.id);
+        const newActivePage = getActivePage<ShareDataPageElement>();
+        assertEquals('shareDataPage', newActivePage.id);
 
-        const sysInfoAndMetricsContainer =
-            activePage.shadowRoot.querySelector('#sysInfoContainer');
+        const sysInfoAndMetricsContainer = strictQuery(
+            '#sysInfoContainer', newActivePage.shadowRoot, HTMLElement);
         assertTrue(!!sysInfoAndMetricsContainer);
 
-        const sysInfoAndMetricsCheckbox =
-            activePage.shadowRoot.querySelector('#sysInfoCheckbox');
+        const sysInfoAndMetricsCheckbox = strictQuery(
+            '#sysInfoCheckbox', newActivePage.shadowRoot, CrCheckboxElement);
         assertTrue(!!sysInfoAndMetricsCheckbox);
         assertTrue(sysInfoAndMetricsCheckbox.checked);
       });
@@ -869,32 +885,33 @@
     await initializePage();
     page.setCurrentStateForTesting(FeedbackFlowState.CONFIRMATION);
     // Set text input in search page for testing.
-    const searchPage = page.shadowRoot.querySelector('#searchPage');
+    const searchPage = getSearchPage();
     searchPage.setDescription(/*text=*/ 'abc123');
 
-    let activePage = page.shadowRoot.querySelector('.iron-selected');
+    const activePage = getActivePage<ConfirmationPageElement>();
     assertEquals('confirmationPage', activePage.id);
 
     const clickPromise = eventToPromise('go-back-click', page);
 
-    let eventDetail;
-    page.addEventListener('go-back-click', (event) => {
-      eventDetail = event.detail;
-    });
+    let eventDetail: FeedbackFlowButtonClickEvent;
+    page.addEventListener(
+        'go-back-click', (event: FeedbackFlowButtonClickEvent) => {
+          eventDetail = event;
+        });
 
-    activePage.shadowRoot.querySelector('#buttonNewReport').click();
+    strictQuery('#buttonNewReport', activePage.shadowRoot, CrButtonElement)
+        .click();
     await clickPromise;
 
-    assertEquals(FeedbackFlowState.CONFIRMATION, eventDetail.currentState);
+    assertEquals(
+        FeedbackFlowState.CONFIRMATION, eventDetail!.detail!.currentState);
 
     // Should navigate to search page.
-    activePage = page.shadowRoot.querySelector('.iron-selected');
-    assertTrue(!!activePage);
-    assertEquals('searchPage', activePage.id);
+    const newActivePage = getActivePage<SearchPageElement>();
+    assertEquals('searchPage', newActivePage.id);
 
     // Search text should be empty.
-    const inputElement =
-        searchPage.shadowRoot.querySelector('#descriptionText');
+    const inputElement = getDescriptionElement();
     assertEquals(inputElement.value, '');
     // The description input element should have received focused.
     assertEquals(inputElement, getDeepActiveElement());
@@ -912,39 +929,40 @@
     const continueClickPromise = eventToPromise('continue-click', page);
     const goBackClickPromise = eventToPromise('go-back-click', page);
 
-    let activePage = page.shadowRoot.querySelector('.iron-selected');
+    const activePage = getActivePage<ShareDataPageElement>();
     const shareDataPageSendButton =
-        activePage.shadowRoot.querySelector('#buttonSend');
-    activePage.shadowRoot.querySelector('#buttonSend').click();
+        strictQuery('#buttonSend', activePage.shadowRoot, CrButtonElement);
+    strictQuery('#buttonSend', activePage.shadowRoot, CrButtonElement).click();
     await continueClickPromise;
 
     // Should navigate to confirmation page.
-    activePage = page.shadowRoot.querySelector('.iron-selected');
-    assertTrue(!!activePage);
-    assertEquals('confirmationPage', activePage.id);
+    const confirmationPage = getActivePage<ConfirmationPageElement>();
+    assertEquals('confirmationPage', confirmationPage.id);
 
     // The send button in the share data page should be disabled after
     // sending the report and before send new report button is clicked
     assertTrue(shareDataPageSendButton.disabled);
 
     // Click send new report button.
-    activePage.shadowRoot.querySelector('#buttonNewReport').click();
+    strictQuery(
+        '#buttonNewReport', confirmationPage!.shadowRoot, CrButtonElement)
+        .click();
     await goBackClickPromise;
 
     // Should navigate to search page.
-    activePage = page.shadowRoot.querySelector('.iron-selected');
-    assertTrue(!!activePage);
-    assertEquals('searchPage', activePage.id);
+    const searchPage = getActivePage<SearchPageElement>();
+    assertTrue(!!searchPage);
+    assertEquals('searchPage', searchPage.id);
 
     // Add some text and clicks continue button.
-    activePage.setDescription(/*text=*/ 'abc123');
-    activePage.shadowRoot.querySelector('#buttonContinue').click();
+    searchPage.setDescription(/*text=*/ 'abc123');
+    strictQuery('#buttonContinue', searchPage!.shadowRoot, CrButtonElement)
+        .click();
     await continueClickPromise;
 
     // Should navigate to share data page.
-    activePage = page.shadowRoot.querySelector('.iron-selected');
-    assertTrue(!!activePage);
-    assertEquals('shareDataPage', activePage.id);
+    const shareDataPage = getActivePage<ShareDataPageElement>();
+    assertEquals('shareDataPage', shareDataPage.id);
 
     // The send button in the share data page should be re-enabled.
     assertFalse(shareDataPageSendButton.disabled);
@@ -979,9 +997,9 @@
         queryParams.set(AdditionalContextQueryParam.CATEGORY_TAG, category_tag);
         const page_url = 'some%20page%20url';
         queryParams.set(AdditionalContextQueryParam.PAGE_URL, page_url);
-        const from_assistant = 'true';
+        const fromAssistant = 'true';
         queryParams.set(
-            AdditionalContextQueryParam.FROM_ASSISTANT, from_assistant);
+            AdditionalContextQueryParam.FROM_ASSISTANT, fromAssistant);
         const fromSettingsSearch = 'true';
         queryParams.set(
             AdditionalContextQueryParam.FROM_SETTINGS_SEARCH,
@@ -990,10 +1008,10 @@
         window.history.replaceState(null, '', '?' + queryParams.toString());
         await initializePage();
         page.setCurrentStateForTesting(FeedbackFlowState.SEARCH);
-        const descriptionElement = getSearchPage().$['descriptionText'];
+        const descriptionElement = getDescriptionElement();
 
-        const feedbackContext = getFeedbackContext_();
-        assertEquals(page_url, feedbackContext.pageUrl.url);
+        const feedbackContext = getFeedbackContext();
+        assertEquals(page_url, feedbackContext.pageUrl!.url);
         assertEquals(fakeFeedbackContext.email, feedbackContext.email);
         assertEquals(
             decodeURIComponent(extra_diagnostics),
@@ -1025,9 +1043,11 @@
                 '');
         await initializePage();
         page.setCurrentStateForTesting(FeedbackFlowState.SEARCH);
-        const descriptionElement = getSearchPage().$['descriptionText'];
+        const descriptionElement =
+            findChildElement(getSearchPage(), '#descriptionText') as
+            HTMLTextAreaElement;
 
-        const feedbackContext = getFeedbackContext_();
+        const feedbackContext = getFeedbackContext();
         // TODO(ashleydp): Update expectation when page_url passed.
         assertEquals(fakeFeedbackContext.pageUrl, feedbackContext.pageUrl);
         assertEquals(fakeFeedbackContext.email, feedbackContext.email);
@@ -1057,8 +1077,8 @@
 
     // Get Search Page.
     const SearchPage = getSearchPage();
-    const iframe = /** @type {!HTMLIFrameElement} */ (
-        SearchPage.shadowRoot.querySelector('iframe'));
+    const iframe =
+        strictQuery('iframe', SearchPage.shadowRoot, HTMLIFrameElement);
 
     assertTrue(!!iframe);
     // Wait for the iframe completes loading.
@@ -1068,7 +1088,7 @@
     // the help content.
     const expectedMessageEventCount = 2;
     let messageEventCount = 0;
-    const resolver = new PromiseResolver();
+    const resolver = new PromiseResolver<void>();
 
     window.addEventListener('message', event => {
       if ('help-content-clicked-for-testing' === event.data.id &&
@@ -1088,7 +1108,7 @@
     const data = {
       id: 'help-content-clicked-for-testing',
     };
-    iframe.contentWindow.parent.postMessage(data, OS_FEEDBACK_TRUSTED_ORIGIN);
+    iframe.contentWindow!.parent!.postMessage(data, OS_FEEDBACK_TRUSTED_ORIGIN);
 
     // Wait for the "help-content-clicked" message has been received.
     await resolver.promise;
@@ -1201,12 +1221,13 @@
         false, FeedbackAppHelpContentOutcome.kContinueNoHelpContentDisplayed);
 
     // Now on search page.
-    const activePage = page.shadowRoot.querySelector('.iron-selected');
+    const activePage = getActivePage();
     assertTrue(!!activePage);
     assertEquals('searchPage', activePage.id);
-    const inputElement = activePage.shadowRoot.querySelector('textarea');
+    const inputElement =
+        strictQuery('textarea', activePage.shadowRoot, HTMLTextAreaElement);
     const continueButton =
-        activePage.shadowRoot.querySelector('#buttonContinue');
+        strictQuery('#buttonContinue', activePage.shadowRoot, CrButtonElement);
 
     // Enter some text.
     inputElement.value = 'abc';
@@ -1233,9 +1254,7 @@
         assertTrue(link.href.includes(disabledUrl));
 
         // Reset app element.
-        document.body.innerHTML = trustedTypes.emptyHTML;
-        page.remove();
-        page = null;
+        document.body.innerHTML = window.trustedTypes!.emptyHTML;
 
         // Setup test for jelly enabled.
         loadTimeData.overrideValues({
@@ -1259,9 +1278,9 @@
         // configuration.
         assertTrue(loadTimeData.getBoolean('isJellyEnabledForOsFeedback'));
 
-        const resolver = new PromiseResolver();
+        const resolver = new PromiseResolver<void>();
         let colorChangeUpdaterCalled = false;
-        const testMessageListener = (event) => {
+        const testMessageListener = (event: {data: {id: string}}) => {
           if (event.data.id === 'color-change-updater-started-for-testing') {
             colorChangeUpdaterCalled = true;
             resolver.resolve();
@@ -1283,7 +1302,7 @@
     // Save the original chrome.getVariableValue function.
     const chromeGetVariableValue = chrome.getVariableValue;
     // Mock the chrome.getVariableValue to return dialogArguments.
-    const mockChromeGetVariableValue = (message) => {
+    const mockChromeGetVariableValue = (message: string) => {
       if (message === 'dialogArguments') {
         return '{' +
             '"autofillMetadata":{"fake key1": "fake value1"},' +
@@ -1310,10 +1329,10 @@
 
     await initializePage();
 
-    const feedbackContext = getFeedbackContext_();
+    const feedbackContext = getFeedbackContext();
     assertEquals('Login', feedbackContext.categoryTag);
     assertEquals('fake extra log data', feedbackContext.extraDiagnostics);
-    assertEquals('chrome://flags/', feedbackContext.pageUrl.url);
+    assertEquals('chrome://flags/', feedbackContext.pageUrl!.url);
     assertEquals(
         '{"fake key1":"fake value1"}', feedbackContext.autofillMetadata);
     assertTrue(feedbackContext.fromAssistant);
@@ -1342,17 +1361,17 @@
         // Save the original chrome.getVariableValue function.
         const chromeGetVariableValue = chrome.getVariableValue;
         // Mock the chrome.getVariableValue to return dialogArguments.
-        const mockChromeGetVariableValue = (message) => {
+        const mockChromeGetVariableValue = () => {
           return '{}';
         };
         chrome.getVariableValue = mockChromeGetVariableValue;
 
         await initializePage();
 
-        const feedbackContext = getFeedbackContext_();
+        const feedbackContext = getFeedbackContext();
         assertEquals('', feedbackContext.categoryTag);
         assertEquals('', feedbackContext.extraDiagnostics);
-        assertEquals('', feedbackContext.pageUrl.url);
+        assertEquals('', feedbackContext.pageUrl!.url);
         assertEquals('{}', feedbackContext.autofillMetadata);
         assertFalse(feedbackContext.fromAssistant);
         assertFalse(feedbackContext.fromAutofill);
diff --git a/chrome/test/data/webui/chromeos/os_feedback_ui/share_data_page_test.js b/chrome/test/data/webui/chromeos/os_feedback_ui/share_data_page_test.ts
similarity index 63%
rename from chrome/test/data/webui/chromeos/os_feedback_ui/share_data_page_test.js
rename to chrome/test/data/webui/chromeos/os_feedback_ui/share_data_page_test.ts
index d95925d..4485582 100644
--- a/chrome/test/data/webui/chromeos/os_feedback_ui/share_data_page_test.js
+++ b/chrome/test/data/webui/chromeos/os_feedback_ui/share_data_page_test.ts
@@ -2,83 +2,61 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
+import 'chrome://os-feedback/file_attachment.js';
+import 'chrome://os-feedback/share_data_page.js';
 import 'chrome://webui-test/chromeos/mojo_webui_test_support.js';
 
-import {fakeEmptyFeedbackContext, fakeFeedbackContext, fakeInternalUserFeedbackContext, fakeLoginFlowFeedbackContext} from 'chrome://os-feedback/fake_data.js';
+import {fakeEmptyFeedbackContext, fakeFeedbackContext, fakeFeedbackContextWithExtraDiagnostics, fakeInternalUserFeedbackContext, fakeLoginFlowFeedbackContext} from 'chrome://os-feedback/fake_data.js';
 import {FakeFeedbackServiceProvider} from 'chrome://os-feedback/fake_feedback_service_provider.js';
-import {FeedbackFlowState} from 'chrome://os-feedback/feedback_flow.js';
+import {FeedbackFlowButtonClickEvent, FeedbackFlowState} from 'chrome://os-feedback/feedback_flow.js';
+import {FileAttachmentElement} from 'chrome://os-feedback/file_attachment.js';
 import {setFeedbackServiceProviderForTesting} from 'chrome://os-feedback/mojo_interface_provider.js';
-import {FeedbackAppPreSubmitAction, FeedbackContext} from 'chrome://os-feedback/os_feedback_ui.mojom-webui.js';
+import {FeedbackAppPreSubmitAction} from 'chrome://os-feedback/os_feedback_ui.mojom-webui.js';
 import {ShareDataPageElement} from 'chrome://os-feedback/share_data_page.js';
+import {assert} from 'chrome://resources/ash/common/assert.js';
+import {strictQuery} from 'chrome://resources/ash/common/typescript_utils/strict_query.js';
 import {getDeepActiveElement} from 'chrome://resources/ash/common/util.js';
-import {mojoString16ToString, stringToMojoString16} from 'chrome://resources/js/mojo_type_util.js';
+import {CrButtonElement} from 'chrome://resources/cr_elements/cr_button/cr_button.js';
+import {CrCheckboxElement} from 'chrome://resources/cr_elements/cr_checkbox/cr_checkbox.js';
+import {BigBuffer} from 'chrome://resources/mojo/mojo/public/mojom/base/big_buffer.mojom-webui.js';
 import {flush} from 'chrome://resources/polymer/v3_0/polymer/polymer_bundled.min.js';
-import {assertArrayEquals, assertEquals, assertFalse, assertNotEquals, assertTrue} from 'chrome://webui-test/chromeos/chai_assert.js';
+import {assertArrayEquals, assertEquals, assertFalse, assertNotEquals, assertTrue} from 'chrome://webui-test/chai_assert.js';
 import {flushTasks} from 'chrome://webui-test/polymer_test_util.js';
+import {eventToPromise, isVisible} from 'chrome://webui-test/test_util.js';
 
-import {eventToPromise, isVisible} from '../test_util.js';
-
-/** @type {string} */
 const fakeImageUrl = 'chrome://os_feedback/app_icon_48.png';
 
-/**
- * @suppress {missingProperties} for test.skip is not defined in mocha-2.5.js
- */
 suite('shareDataPageTestSuite', () => {
-  /** @type {?ShareDataPageElement} */
-  let page = null;
+  let page: ShareDataPageElement;
 
-  /** @type {?FakeFeedbackServiceProvider} */
-  let feedbackServiceProvider;
+  let feedbackServiceProvider: FakeFeedbackServiceProvider;
 
   setup(() => {
-    document.body.innerHTML = trustedTypes.emptyHTML;
+    document.body.innerHTML = window.trustedTypes!.emptyHTML;
 
     feedbackServiceProvider = new FakeFeedbackServiceProvider();
     setFeedbackServiceProviderForTesting(feedbackServiceProvider);
   });
 
-  teardown(() => {
-    page.remove();
-    page = null;
-  });
-
   function initializePage() {
-    assertFalse(!!page);
-    page =
-        /** @type {!ShareDataPageElement} */ (
-            document.createElement('share-data-page'));
-    assertTrue(!!page);
+    page = document.createElement('share-data-page');
+    assert(page);
     page.feedbackContext = fakeEmptyFeedbackContext;
     document.body.appendChild(page);
     return flushTasks();
   }
 
-  /**
-   * @param {string} selector
-   * @returns {Element|null}
-   */
-  function getElement(selector) {
-    const element = page.shadowRoot.querySelector(selector);
-    return element;
+  function getElement(selector: string): Element|null {
+    return page.shadowRoot!.querySelector(selector);
   }
 
-  /**
-   * @param {string} selector
-   * @returns {string}
-   */
-  function getElementContent(selector) {
-    const element = getElement(selector);
-    assertTrue(!!element);
-    return element.textContent.trim();
+  function getElementContent(selector: string): string {
+    const element = page.shadowRoot!.querySelector(selector);
+    return element!.textContent!.trim();
   }
 
-  /**
-   * @param {number} callCounts
-   * @param {FeedbackAppPreSubmitAction} action
-   * @private
-   */
-  function verifyRecordPreSubmitActionCallCount(callCounts, action) {
+  function verifyRecordPreSubmitActionCallCount(
+      callCounts: number, action: FeedbackAppPreSubmitAction) {
     assertEquals(
         callCounts,
         feedbackServiceProvider.getRecordPreSubmitActionCallCount(action));
@@ -87,22 +65,25 @@
   /**
    * Helper function which will click the send button, wait for the event
    * 'continue-click', and return the detail data of the event.
-   * @param {!Element} element
    */
-  async function clickSendAndWait(element) {
+  async function clickSendAndWait(element: Element):
+      Promise<FeedbackFlowButtonClickEvent> {
     const clickPromise = eventToPromise('continue-click', element);
 
-    let eventDetail;
-    page.addEventListener('continue-click', (event) => {
-      eventDetail = event.detail;
-    });
+    let eventDetail: FeedbackFlowButtonClickEvent|null = null;
+    page.addEventListener(
+        'continue-click', (event: FeedbackFlowButtonClickEvent) => {
+          eventDetail = event;
+        });
 
-    getElement('#buttonSend').click();
+    strictQuery('#buttonSend', page.shadowRoot, CrButtonElement).click();
 
     await clickPromise;
 
     assertTrue(!!eventDetail);
-    assertEquals(FeedbackFlowState.SHARE_DATA, eventDetail.currentState);
+    assertEquals(
+        FeedbackFlowState.SHARE_DATA,
+        (eventDetail as FeedbackFlowButtonClickEvent).detail.currentState);
 
     return eventDetail;
   }
@@ -127,7 +108,8 @@
     assertEquals('Email', getElementContent('#userEmailLabel'));
 
     // Verify the aria label of the user email dropdown.
-    const userEmailDropDown = getElement('#userEmailDropDown');
+    const userEmailDropDown =
+        strictQuery('#userEmailDropDown', page.shadowRoot, HTMLSelectElement);
     assertTrue(page.i18nExists('userEmailAriaLabel'));
     assertEquals('Select email', userEmailDropDown.ariaLabel);
 
@@ -143,7 +125,8 @@
         getElementContent('#shareDiagnosticDataLabel'));
 
     // Screenshot elements.
-    const screenshotCheckbox = getElement('#screenshotCheckbox');
+    const screenshotCheckbox =
+        strictQuery('#screenshotCheckbox', page.shadowRoot, CrCheckboxElement);
     assertTrue(!!screenshotCheckbox);
     assertTrue(page.i18nExists('attachScreenshotCheckboxAriaLabel'));
     assertEquals('Attach screenshot', screenshotCheckbox.ariaDescription);
@@ -151,8 +134,12 @@
     assertTrue(page.i18nExists('attachScreenshotLabel'));
     assertEquals('Screenshot', getElementContent('#screenshotCheckLabel'));
 
-    assertTrue(!!getElement('#screenshotImage'));
-    assertEquals('Preview Screenshot', getElement('#imageButton').ariaLabel);
+    assertTrue(
+        !!strictQuery('#screenshotImage', page.shadowRoot, HTMLImageElement));
+    assertEquals(
+        'Preview Screenshot',
+        strictQuery('#imageButton', page.shadowRoot, HTMLButtonElement)
+            .ariaLabel);
     assertTrue(page.i18nExists('previewImageAriaLabel'));
 
     // Add file attachment element.
@@ -160,13 +147,16 @@
 
     // Email elements.
     assertEquals('Email', getElementContent('#userEmailLabel'));
-    assertTrue(!!getElement('#userEmailDropDown'));
+    assertTrue(!!strictQuery(
+        '#userEmailDropDown', page.shadowRoot, HTMLSelectElement));
 
     // URL elements.
     assertEquals('Share URL:', getElementContent('#pageUrlLabel'));
     assertTrue(page.i18nExists('sharePageUrlLabel'));
-    assertTrue(!!getElement('#pageUrlCheckbox'));
-    assertTrue(!!getElement('#pageUrlText'));
+    assertTrue(
+        !!strictQuery('#pageUrlCheckbox', page.shadowRoot, CrCheckboxElement));
+    assertTrue(
+        !!strictQuery('#pageUrlText', page.shadowRoot, HTMLAnchorElement));
 
     // System info label is a localized string in HTML format.
     assertTrue(getElementContent('#sysInfoCheckboxLabel').length > 0);
@@ -210,9 +200,11 @@
 
     assertTrue(page.i18nExists('attachFilesLabelLoggedIn'));
     // Add file section is visible.
-    assertTrue(isVisible(getElement('#addFileContainer')));
+    assertTrue(isVisible(
+        strictQuery('#addFileContainer', page.shadowRoot, HTMLElement)));
     // Attach files Icon should be visible.
-    assertTrue(isVisible(getElement('#attachFilesIcon')));
+    assertTrue(isVisible(
+        strictQuery('#attachFilesIcon', page.shadowRoot, HTMLElement)));
     // Attach files label should be "Attach files".
     assertEquals('Attach files', getElementContent('#attachFilesLabel'));
   });
@@ -225,9 +217,11 @@
 
     assertTrue(page.i18nExists('attachFilesLabelLoggedOut'));
     // Add file section is invisible.
-    assertFalse(isVisible(getElement('#addFileContainer')));
+    assertFalse(isVisible(
+        strictQuery('#addFileContainer', page.shadowRoot, HTMLElement)));
     // Attach files Icon should be invisible.
-    assertFalse(isVisible(getElement('#attachFilesIcon')));
+    assertFalse(isVisible(
+        strictQuery('#attachFilesIcon', page.shadowRoot, HTMLElement)));
     // Attach files label should be "Add screenshot".
     assertEquals('Add screenshot', getElementContent('#attachFilesLabel'));
   });
@@ -237,26 +231,29 @@
     await initializePage();
     page.feedbackContext = fakeFeedbackContext;
 
-    const emailDropdown = getElement('#userEmailDropDown');
+    const emailDropdown: HTMLSelectElement =
+        strictQuery('#userEmailDropDown', page.shadowRoot, HTMLSelectElement);
     assertTrue(!!emailDropdown);
     assertEquals(2, emailDropdown.options.length);
 
-    const firstOption = emailDropdown.options.item(0);
-    assertEquals('test.user2@test.com', firstOption.textContent.trim());
+    const firstOption = emailDropdown.options.item(0) as HTMLOptionElement;
+    assertEquals('test.user2@test.com', firstOption.textContent!.trim());
     assertEquals('test.user2@test.com', firstOption.value.trim());
 
     const secondOption = emailDropdown.options.item(1);
     assertEquals(
-        'Don\'t include email address', secondOption.textContent.trim());
-    assertEquals('', secondOption.value.trim());
+        'Don\'t include email address', secondOption!.textContent!.trim());
+    assertEquals('', secondOption!.value!.trim());
 
     // The user email section should be visible.
-    const userEmailElement = getElement('#userEmail');
+    const userEmailElement =
+        strictQuery('#userEmail', page.shadowRoot, HTMLElement);
     assertTrue(!!userEmailElement);
     assertTrue(isVisible(userEmailElement));
 
     // The user user consent checkbox should be visible.
-    const consentCheckbox = getElement('#userConsent');
+    const consentCheckbox =
+        strictQuery('#userConsent', page.shadowRoot, HTMLElement);
     assertTrue(!!consentCheckbox);
     assertTrue(isVisible(consentCheckbox));
   });
@@ -268,12 +265,14 @@
     page.feedbackContext = fakeEmptyFeedbackContext;
 
     // The user email section should be hidden.
-    const userEmailElement = getElement('#userEmail');
+    const userEmailElement =
+        strictQuery('#userEmail', page.shadowRoot, HTMLElement);
     assertTrue(!!userEmailElement);
     assertFalse(isVisible(userEmailElement));
 
     // The user consent checkbox should be hidden.
-    const consentCheckbox = getElement('#userConsent');
+    const consentCheckbox =
+        strictQuery('#userConsent', page.shadowRoot, HTMLElement);
     assertTrue(!!consentCheckbox);
     assertFalse(isVisible(consentCheckbox));
   });
@@ -288,16 +287,16 @@
   // Test that the pageUrl section is hidden when the url is empty string.
   test('pageUrlHidden', async () => {
     await initializePage();
-    fakeFeedbackContext.pageUrl.url = '';
+    fakeFeedbackContext!.pageUrl!.url = '';
     page.feedbackContext = fakeFeedbackContext;
 
     // The pageUrl section should be hidden
-    const pageUrl = getElement('#pageUrl');
+    const pageUrl = strictQuery('#pageUrl', page.shadowRoot, HTMLElement);
     assertTrue(!!pageUrl);
     assertFalse(isVisible(pageUrl));
 
     // Change it back otherwise it will effect other tests.
-    fakeFeedbackContext.pageUrl.url = 'chrome://tab/';
+    fakeFeedbackContext!.pageUrl!.url = 'chrome://tab/';
   });
 
   // Test that the performanceTraceContainer section is hidden when the trace id
@@ -308,7 +307,8 @@
     page.feedbackContext = fakeEmptyFeedbackContext;
 
     // The performanceTraceContainer section should be hidden
-    const performanceTraceContainer = getElement('#performanceTraceContainer');
+    const performanceTraceContainer =
+        strictQuery('#performanceTraceContainer', page.shadowRoot, HTMLElement);
     assertTrue(!!performanceTraceContainer);
     assertFalse(isVisible(performanceTraceContainer));
 
@@ -325,7 +325,8 @@
     // Set up performance trace id.
     page.feedbackContext = fakeFeedbackContext;
 
-    const link = getElement('#performanceTraceLink');
+    const link =
+        strictQuery('#performanceTraceLink', page.shadowRoot, HTMLElement);
 
     assertEquals('_blank', link.getAttribute('target'));
     // Performance trace id is the last number in the URL, which is 1.
@@ -341,14 +342,15 @@
     await initializePage();
     page.feedbackContext = fakeFeedbackContext;
 
-    getElement('#pageUrlCheckbox').checked = true;
-    getElement('#sysInfoCheckbox').checked = false;
+    strictQuery('#pageUrlCheckbox', page.shadowRoot, CrCheckboxElement)
+        .checked = true;
+    strictQuery('#sysInfoCheckbox', page.shadowRoot, CrCheckboxElement)
+        .checked = false;
 
-    const eventDetail = await clickSendAndWait(page);
+    const report = (await clickSendAndWait(page)).detail!.report;
 
-    assertEquals(
-        'chrome://tab/', eventDetail.report.feedbackContext.pageUrl.url);
-    assertFalse(eventDetail.report.includeSystemLogsAndHistograms);
+    assertEquals('chrome://tab/', report!.feedbackContext!.pageUrl!.url);
+    assertFalse(report!.includeSystemLogsAndHistograms);
   });
 
   /**
@@ -359,13 +361,15 @@
     await initializePage();
     page.feedbackContext = fakeFeedbackContext;
 
-    getElement('#pageUrlCheckbox').checked = false;
-    getElement('#sysInfoCheckbox').checked = true;
+    strictQuery('#pageUrlCheckbox', page.shadowRoot, CrCheckboxElement)
+        .checked = false;
+    strictQuery('#sysInfoCheckbox', page.shadowRoot, CrCheckboxElement)
+        .checked = true;
 
-    const request = (await clickSendAndWait(page)).report;
-
-    assertFalse(!!request.feedbackContext.pageUrl);
-    assertTrue(request.includeSystemLogsAndHistograms);
+    const request = (await clickSendAndWait(page)).detail.report;
+    const pageUrl = request?.feedbackContext?.pageUrl;
+    assertFalse(!!pageUrl);
+    assertTrue(request!.includeSystemLogsAndHistograms);
   });
 
   /**
@@ -376,17 +380,21 @@
     await initializePage();
     page.feedbackContext = fakeFeedbackContext;
     page.screenshotUrl = fakeImageUrl;
-    assertEquals(fakeImageUrl, getElement('#screenshotImage').src);
+    assertEquals(
+        fakeImageUrl,
+        strictQuery('#screenshotImage', page.shadowRoot, HTMLImageElement).src);
 
     // Select the email.
-    getElement('#userEmailDropDown').value = 'test.user2@test.com';
+    strictQuery('#userEmailDropDown', page.shadowRoot, HTMLSelectElement)
+        .value = 'test.user2@test.com';
     // Select the screenshot.
-    getElement('#screenshotCheckbox').checked = true;
+    strictQuery('#screenshotCheckbox', page.shadowRoot, CrCheckboxElement)
+        .checked = true;
 
-    const request = (await clickSendAndWait(page)).report;
+    const request = (await clickSendAndWait(page)).detail.report;
 
-    assertEquals('test.user2@test.com', request.feedbackContext.email);
-    assertTrue(request.includeScreenshot);
+    assertEquals('test.user2@test.com', request!.feedbackContext.email);
+    assertTrue(request!.includeScreenshot);
   });
 
   /**
@@ -399,15 +407,18 @@
     page.feedbackContext = fakeFeedbackContext;
     // When there is not a screenshot.
     page.screenshotUrl = '';
-    assertFalse(!!getElement('#screenshotImage').src);
+    assertFalse(
+        !!strictQuery('#screenshotImage', page.shadowRoot, HTMLImageElement)
+              .src);
 
     // Select the "Don't include email address" option.
-    getElement('#userEmailDropDown').value = '';
+    strictQuery('#userEmailDropDown', page.shadowRoot, HTMLSelectElement)
+        .value = '';
 
-    const request = (await clickSendAndWait(page)).report;
+    const request = (await clickSendAndWait(page)).detail.report;
 
-    assertFalse(!!request.feedbackContext.email);
-    assertFalse(request.includeScreenshot);
+    assertFalse(!!request!.feedbackContext.email);
+    assertFalse(request!.includeScreenshot);
   });
 
   /**
@@ -420,19 +431,25 @@
     page.feedbackContext = fakeFeedbackContext;
     // When there is not a screenshot.
     page.screenshotUrl = '';
-    assertFalse(!!getElement('#screenshotImage').src);
+    assertFalse(
+        !!strictQuery('#screenshotImage', page.shadowRoot, HTMLImageElement)
+              .src);
 
     // Select the "Don't include email address" option.
-    getElement('#userEmailDropDown').value = '';
+    strictQuery('#userEmailDropDown', page.shadowRoot, HTMLSelectElement)
+        .value = '';
 
     // When the checkbox is selected but there is not a screenshot.
-    getElement('#screenshotCheckbox').checked = true;
-    assertFalse(!!getElement('#screenshotImage').src);
+    strictQuery('#screenshotCheckbox', page.shadowRoot, CrCheckboxElement)
+        .checked = true;
+    assertFalse(
+        !!strictQuery('#screenshotImage', page.shadowRoot, HTMLImageElement)
+              .src);
 
-    const request = (await clickSendAndWait(page)).report;
+    const request = (await clickSendAndWait(page)).detail.report;
 
-    assertFalse(!!request.feedbackContext.email);
-    assertFalse(request.includeScreenshot);
+    assertFalse(!!request!.feedbackContext.email);
+    assertFalse(request!.includeScreenshot);
   });
 
   /**
@@ -445,17 +462,21 @@
     page.feedbackContext = fakeFeedbackContext;
 
     // Select the "Don't include email address" option.
-    getElement('#userEmailDropDown').value = '';
+    strictQuery('#userEmailDropDown', page.shadowRoot, HTMLSelectElement)
+        .value = '';
 
     // When there is a screenshot but it is not selected.
     page.screenshotUrl = fakeImageUrl;
-    assertEquals(fakeImageUrl, getElement('#screenshotImage').src);
-    getElement('#screenshotCheckbox').checked = false;
+    assertEquals(
+        fakeImageUrl,
+        strictQuery('#screenshotImage', page.shadowRoot, HTMLImageElement).src);
+    strictQuery('#screenshotCheckbox', page.shadowRoot, CrCheckboxElement)
+        .checked = false;
 
-    const request = (await clickSendAndWait(page)).report;
+    const request = (await clickSendAndWait(page)).detail.report;
 
-    assertFalse(!!request.feedbackContext.email);
-    assertFalse(request.includeScreenshot);
+    assertFalse(!!request!.feedbackContext.email);
+    assertFalse(request!.includeScreenshot);
   });
 
   /**
@@ -466,11 +487,12 @@
     await initializePage();
     page.feedbackContext = fakeFeedbackContext;
 
-    getElement('#performanceTraceCheckbox').checked = true;
+    strictQuery('#performanceTraceCheckbox', page.shadowRoot, CrCheckboxElement)
+        .checked = true;
 
-    const report = (await clickSendAndWait(page)).report;
+    const report = (await clickSendAndWait(page)).detail.report;
 
-    assertEquals(fakeFeedbackContext.traceId, report.feedbackContext.traceId);
+    assertEquals(fakeFeedbackContext.traceId, report!.feedbackContext!.traceId);
   });
 
   /**
@@ -481,11 +503,12 @@
     await initializePage();
     page.feedbackContext = fakeFeedbackContext;
 
-    getElement('#performanceTraceCheckbox').checked = false;
+    strictQuery('#performanceTraceCheckbox', page.shadowRoot, CrCheckboxElement)
+        .checked = false;
 
-    const report = (await clickSendAndWait(page)).report;
+    const report = (await clickSendAndWait(page)).detail.report;
 
-    assertEquals(0, report.feedbackContext.traceId);
+    assertEquals(0, report!.feedbackContext!.traceId);
   });
 
   /**
@@ -498,12 +521,15 @@
     page.feedbackContext = fakeFeedbackContext;
 
     // The report should not have assistant logs by default.
-    getElement('#assistantLogsContainer').hidden = true;
-    assertTrue(getElement('#assiatantLogsCheckbox').checked);
-    const report = (await clickSendAndWait(page)).report;
+    strictQuery('#assistantLogsContainer', page.shadowRoot, HTMLElement)
+        .hidden = true;
+    assertTrue(strictQuery(
+                   '#assiatantLogsCheckbox', page.shadowRoot, CrCheckboxElement)
+                   .checked);
+    const report = (await clickSendAndWait(page)).detail.report;
 
-    assertFalse(report.feedbackContext.assistantDebugInfoAllowed);
-    assertFalse(report.feedbackContext.fromAssistant);
+    assertFalse(report!.feedbackContext!.assistantDebugInfoAllowed);
+    assertFalse(report!.feedbackContext!.fromAssistant);
   });
 
   /**
@@ -515,13 +541,16 @@
     await initializePage();
     page.feedbackContext = fakeInternalUserFeedbackContext;
 
-    assertTrue(!!getElement('#assistantLogsContainer'));
-    getElement('#assistantLogsContainer').hidden = false;
-    getElement('#assiatantLogsCheckbox').checked = true;
+    assertTrue(
+        !!strictQuery('#assistantLogsContainer', page.shadowRoot, HTMLElement));
+    strictQuery('#assistantLogsContainer', page.shadowRoot, HTMLElement)
+        .hidden = false;
+    strictQuery('#assiatantLogsCheckbox', page.shadowRoot, CrCheckboxElement)
+        .checked = true;
 
-    const report = (await clickSendAndWait(page)).report;
-    assertTrue(report.feedbackContext.assistantDebugInfoAllowed);
-    assertTrue(report.feedbackContext.fromAssistant);
+    const report = (await clickSendAndWait(page)).detail.report;
+    assertTrue(report!.feedbackContext!.assistantDebugInfoAllowed);
+    assertTrue(report!.feedbackContext!.fromAssistant);
   });
 
   /**
@@ -533,16 +562,19 @@
     await initializePage();
     page.feedbackContext = fakeInternalUserFeedbackContext;
 
-    assertTrue(!!getElement('#assistantLogsContainer'));
-    getElement('#assistantLogsContainer').hidden = false;
+    assertTrue(
+        !!strictQuery('#assistantLogsContainer', page.shadowRoot, HTMLElement));
+    strictQuery('#assistantLogsContainer', page.shadowRoot, HTMLElement)
+        .hidden = false;
 
     // Uncheck the assistant logs checkbox.
-    getElement('#assiatantLogsCheckbox').checked = false;
+    strictQuery('#assiatantLogsCheckbox', page.shadowRoot, CrCheckboxElement)
+        .checked = false;
 
-    const report = (await clickSendAndWait(page)).report;
+    const report = (await clickSendAndWait(page)).detail.report;
 
-    assertFalse(report.feedbackContext.assistantDebugInfoAllowed);
-    assertTrue(report.feedbackContext.fromAssistant);
+    assertFalse(report!.feedbackContext!.assistantDebugInfoAllowed);
+    assertTrue(report!.feedbackContext!.fromAssistant);
   });
 
   /**
@@ -555,13 +587,16 @@
     page.feedbackContext = fakeInternalUserFeedbackContext;
     page.feedbackContext.fromAssistant = false;
 
-    assertTrue(isVisible(getElement('#assistantLogsContainer')));
-    assertTrue(getElement('#assiatantLogsCheckbox').checked);
+    assertTrue(isVisible(
+        strictQuery('#assistantLogsContainer', page.shadowRoot, HTMLElement)));
+    assertTrue(strictQuery(
+                   '#assiatantLogsCheckbox', page.shadowRoot, CrCheckboxElement)
+                   .checked);
 
-    const report = (await clickSendAndWait(page)).report;
+    const report = (await clickSendAndWait(page)).detail.report;
 
-    assertFalse(report.feedbackContext.assistantDebugInfoAllowed);
-    assertFalse(report.feedbackContext.fromAssistant);
+    assertFalse(report!.feedbackContext!.assistantDebugInfoAllowed);
+    assertFalse(report!.feedbackContext!.fromAssistant);
   });
 
   /**
@@ -574,13 +609,15 @@
     page.feedbackContext.fromAutofill = true;
     page.feedbackContext.autofillMetadata = 'Autofill Metadata';
 
-    assertTrue(isVisible(getElement('#autofillCheckboxContainer')));
-    getElement('#autofillCheckbox').checked = true;
+    assertTrue(isVisible(strictQuery(
+        '#autofillCheckboxContainer', page.shadowRoot, HTMLElement)));
+    strictQuery('#autofillCheckbox', page.shadowRoot, CrCheckboxElement)
+        .checked = true;
 
-    const request = (await clickSendAndWait(page)).report;
+    const request = (await clickSendAndWait(page)).detail.report;
 
-    assertTrue(!!request.feedbackContext.autofillMetadata);
-    assertTrue(request.includeAutofillMetadata);
+    assertTrue(!!request!.feedbackContext.autofillMetadata);
+    assertTrue(request!.includeAutofillMetadata);
   });
 
   /**
@@ -592,13 +629,15 @@
     page.feedbackContext = fakeInternalUserFeedbackContext;
     page.feedbackContext.fromAutofill = true;
 
-    assertTrue(isVisible(getElement('#autofillCheckboxContainer')));
-    getElement('#autofillCheckbox').checked = false;
+    assertTrue(isVisible(strictQuery(
+        '#autofillCheckboxContainer', page.shadowRoot, HTMLElement)));
+    strictQuery('#autofillCheckbox', page.shadowRoot, CrCheckboxElement)
+        .checked = false;
 
-    const request = (await clickSendAndWait(page)).report;
+    const request = (await clickSendAndWait(page)).detail.report;
 
-    assertFalse(!!request.feedbackContext.autofillMetadata);
-    assertFalse(request.includeAutofillMetadata);
+    assertFalse(!!request!.feedbackContext.autofillMetadata);
+    assertFalse(request!.includeAutofillMetadata);
   });
 
 
@@ -611,12 +650,14 @@
     await initializePage();
     page.feedbackContext = fakeInternalUserFeedbackContext;
     page.shouldShowWifiDebugLogsCheckbox = true;
-    assertTrue(isVisible(getElement('#wifiDebugLogsCheckboxContainer')));
-    getElement('#wifiDebugLogsCheckbox').checked = true;
+    assertTrue(isVisible(strictQuery(
+        '#wifiDebugLogsCheckboxContainer', page.shadowRoot, HTMLElement)));
+    strictQuery('#wifiDebugLogsCheckbox', page.shadowRoot, CrCheckboxElement)
+        .checked = true;
 
-    const report = (await clickSendAndWait(page)).report;
+    const report = (await clickSendAndWait(page)).detail.report;
 
-    assertTrue(report.sendWifiDebugLogs);
+    assertTrue(report!.sendWifiDebugLogs);
   });
 
 
@@ -629,12 +670,14 @@
     await initializePage();
     page.feedbackContext = fakeInternalUserFeedbackContext;
     page.shouldShowWifiDebugLogsCheckbox = true;
-    assertTrue(isVisible(getElement('#wifiDebugLogsCheckboxContainer')));
-    getElement('#wifiDebugLogsCheckbox').checked = false;
+    assertTrue(isVisible(strictQuery(
+        '#wifiDebugLogsCheckboxContainer', page.shadowRoot, HTMLElement)));
+    strictQuery('#wifiDebugLogsCheckbox', page.shadowRoot, CrCheckboxElement)
+        .checked = false;
 
-    const report = (await clickSendAndWait(page)).report;
+    const report = (await clickSendAndWait(page)).detail.report;
 
-    assertFalse(report.sendWifiDebugLogs);
+    assertFalse(report!.sendWifiDebugLogs);
   });
 
   // Test that the send button will be disabled once clicked.
@@ -642,7 +685,8 @@
     await initializePage();
     page.feedbackContext = fakeFeedbackContext;
 
-    const sendButton = getElement('#buttonSend');
+    const sendButton =
+        strictQuery('#buttonSend', page.shadowRoot, CrButtonElement);
 
     assertFalse(sendButton.disabled);
 
@@ -656,10 +700,12 @@
     await initializePage();
     page.screenshotUrl = '';
 
-    const screenshotCheckbox = getElement('#screenshotCheckbox');
+    const screenshotCheckbox =
+        strictQuery('#screenshotCheckbox', page.shadowRoot, CrCheckboxElement);
     assertTrue(screenshotCheckbox.disabled);
 
-    const screenshotImage = getElement('#screenshotImage');
+    const screenshotImage =
+        strictQuery('#screenshotImage', page.shadowRoot, HTMLImageElement);
     assertFalse(!!screenshotImage.src);
   });
 
@@ -670,10 +716,12 @@
     const imgUrl = 'chrome://os-feedback/image.png';
     page.screenshotUrl = imgUrl;
 
-    const screenshotCheckbox = getElement('#screenshotCheckbox');
+    const screenshotCheckbox =
+        strictQuery('#screenshotCheckbox', page.shadowRoot, CrCheckboxElement);
     assertFalse(screenshotCheckbox.disabled);
 
-    const screenshotImage = getElement('#screenshotImage');
+    const screenshotImage =
+        strictQuery('#screenshotImage', page.shadowRoot, HTMLImageElement);
     assertTrue(!!screenshotImage.src);
     assertEquals(imgUrl, screenshotImage.src);
   });
@@ -687,14 +735,18 @@
         0, FeedbackAppPreSubmitAction.kViewedScreenshot);
     page.feedbackContext = fakeFeedbackContext;
     page.screenshotUrl = fakeImageUrl;
-    assertEquals(fakeImageUrl, getElement('#screenshotImage').src);
+    assertEquals(
+        fakeImageUrl,
+        strictQuery('#screenshotImage', page.shadowRoot, HTMLImageElement).src);
 
-    const closeDialogButton = getElement('#closeDialogButton');
+    const closeDialogButton =
+        strictQuery('#closeDialogButton', page.shadowRoot, CrButtonElement);
     // The preview dialog's close icon button is not visible.
     assertFalse(isVisible(closeDialogButton));
 
     // The screenshot is displayed as an image button.
-    const imageButton = /** @type {!Element} */ (getElement('#imageButton'));
+    const imageButton =
+        strictQuery('#imageButton', page.shadowRoot, HTMLButtonElement);
     const imageClickPromise = eventToPromise('click', imageButton);
     imageButton.click();
     await imageClickPromise;
@@ -723,25 +775,23 @@
     await initializePage();
     page.feedbackContext = fakeFeedbackContext;
 
-    const fileAttachment = getElement('file-attachment');
+    const fileAttachment =
+        strictQuery('file-attachment', page.shadowRoot, FileAttachmentElement);
     const fakeFileData = [11, 22, 99];
     fileAttachment.getAttachedFile = async () => {
+      const data: BigBuffer = {bytes: fakeFileData} as any;
       return {
-        fileName: stringToMojoString16('fake.zip'),
-        fileData: {
-          bytes: fakeFileData,
-        },
+        fileName: {path: {path: 'fake.zip'}},
+        fileData: data,
       };
     };
 
-    const request = (await clickSendAndWait(page)).report;
+    const request = (await clickSendAndWait(page)).detail.report;
 
-    const attachedFile = request.attachedFile;
+    const attachedFile = request!.attachedFile;
     assertTrue(!!attachedFile);
-    assertEquals('fake.zip', mojoString16ToString(attachedFile.fileName));
-    assertArrayEquals(
-        fakeFileData,
-        /** @type {!Array<Number>} */ (attachedFile.fileData.bytes));
+    assertEquals('fake.zip', attachedFile.fileName.path.path);
+    assertArrayEquals(fakeFileData, attachedFile!.fileData!.bytes as number[]);
   });
 
   /**
@@ -756,7 +806,8 @@
     assertTrue(page.i18nExists('userConsentLabel'));
 
     const userConsentCheckboxChecked =
-        getElement('#userConsentCheckbox').checked;
+        strictQuery('#userConsentCheckbox', page.shadowRoot, CrCheckboxElement)
+            .checked;
     const userConsentText = getElementContent('#userConsentLabel');
 
     assertFalse(userConsentCheckboxChecked);
@@ -772,20 +823,23 @@
       async () => {
         await initializePage();
         page.feedbackContext = fakeFeedbackContext;
-        getElement('#userConsentCheckbox').checked = true;
+        strictQuery('#userConsentCheckbox', page.shadowRoot, CrCheckboxElement)
+            .checked = true;
         await flushTasks();
 
-        const reportWithConsent = (await clickSendAndWait(page)).report;
+        const reportWithConsent = (await clickSendAndWait(page)).detail.report;
 
-        assertTrue(reportWithConsent.contactUserConsentGranted);
+        assertTrue(reportWithConsent!.contactUserConsentGranted);
 
         page.reEnableSendReportButton();
         page.feedbackContext = fakeFeedbackContext;
-        getElement('#userConsentCheckbox').checked = false;
+        strictQuery('#userConsentCheckbox', page.shadowRoot, CrCheckboxElement)
+            .checked = false;
         await flushTasks();
 
-        const reportWithoutConsent = (await clickSendAndWait(page)).report;
-        assertFalse(reportWithoutConsent.contactUserConsentGranted);
+        const reportWithoutConsent =
+            (await clickSendAndWait(page)).detail.report;
+        assertFalse(reportWithoutConsent!.contactUserConsentGranted);
       });
 
   /**
@@ -799,9 +853,12 @@
         page.feedbackContext = fakeFeedbackContext;
         const disabledInputClass = 'disabled-input-text';
 
-        const consentLabel = getElement('#userConsentLabel');
-        const consentCheckbox = getElement('#userConsentCheckbox');
-        const emailDropdown = getElement('#userEmailDropDown');
+        const consentLabel =
+            strictQuery('#userConsentLabel', page.shadowRoot, HTMLElement);
+        const consentCheckbox = strictQuery(
+            '#userConsentCheckbox', page.shadowRoot, CrCheckboxElement);
+        const emailDropdown = strictQuery(
+            '#userEmailDropDown', page.shadowRoot, HTMLSelectElement);
 
         // Select the email.
         emailDropdown.value = 'test.user2@test.com';
@@ -840,25 +897,28 @@
     await initializePage();
     page.feedbackContext = fakeFeedbackContext;
 
-    const reportWithoutExtraDiagnostics = (await clickSendAndWait(page)).report;
+    const reportWithoutExtraDiagnostics =
+        (await clickSendAndWait(page)).detail.report;
     assertFalse(
-        !!reportWithoutExtraDiagnostics.feedbackContext.extraDiagnostics);
+        !!reportWithoutExtraDiagnostics!.feedbackContext!.extraDiagnostics);
 
     page.reEnableSendReportButton();
-    const fakeFeedbackContextWithExtraDiagnostics =
-        /** @type {!FeedbackContext} */ ({extraDiagnostics: 'some extra info'});
     page.feedbackContext = fakeFeedbackContextWithExtraDiagnostics;
+    strictQuery('#sysInfoCheckbox', page.shadowRoot, CrCheckboxElement)
+        .checked = true;
     await flushTasks();
 
-    const reportWithExtraDiagnostics = (await clickSendAndWait(page)).report;
+    const reportWithExtraDiagnostics =
+        (await clickSendAndWait(page)).detail.report;
     assertEquals(
         fakeFeedbackContextWithExtraDiagnostics.extraDiagnostics,
-        reportWithExtraDiagnostics.feedbackContext.extraDiagnostics);
+        reportWithExtraDiagnostics!.feedbackContext!.extraDiagnostics);
 
-    getElement('#sysInfoCheckbox').checked = false;
+    strictQuery('#sysInfoCheckbox', page.shadowRoot, CrCheckboxElement)
+        .checked = false;
     page.reEnableSendReportButton();
-    const reportNoSysInfo = (await clickSendAndWait(page)).report;
-    assertFalse(!!reportNoSysInfo.feedbackContext.extraDiagnostics);
+    const reportNoSysInfo = (await clickSendAndWait(page)).detail.report;
+    assertFalse(!!reportNoSysInfo!.feedbackContext!.extraDiagnostics);
   });
 
   test(
@@ -867,8 +927,12 @@
         await initializePage();
         page.shouldShowWifiDebugLogsCheckbox = true;
 
-        assertTrue(isVisible(getElement('#wifiDebugLogsCheckboxContainer')));
-        assertTrue(getElement('#wifiDebugLogsCheckbox').checked);
+        assertTrue(isVisible(strictQuery(
+            '#wifiDebugLogsCheckboxContainer', page.shadowRoot, HTMLElement)));
+        assertTrue(
+            strictQuery(
+                '#wifiDebugLogsCheckbox', page.shadowRoot, CrCheckboxElement)
+                .checked);
       });
 
   test(
@@ -877,7 +941,8 @@
         await initializePage();
         page.shouldShowWifiDebugLogsCheckbox = false;
 
-        assertFalse(isVisible(getElement('#wifiDebugLogsCheckboxContainer')));
+        assertFalse(isVisible(strictQuery(
+            '#wifiDebugLogsCheckboxContainer', page.shadowRoot, HTMLElement)));
       });
 
   /**
@@ -890,31 +955,32 @@
 
     // Uncheck the "Link Cross Device Dogfood Feedback" checkbox so that only
     // the Bluetooth-specific categoryTag is added to the report.
-    const linkCrossDeviceDogfoodFeedbackCheckbox =
-        getElement('#linkCrossDeviceDogfoodFeedbackCheckbox');
+    const linkCrossDeviceDogfoodFeedbackCheckbox = strictQuery(
+        '#linkCrossDeviceDogfoodFeedbackCheckbox', page.shadowRoot,
+        CrCheckboxElement);
     assertTrue(!!linkCrossDeviceDogfoodFeedbackCheckbox);
     linkCrossDeviceDogfoodFeedbackCheckbox.checked = false;
     assertFalse(linkCrossDeviceDogfoodFeedbackCheckbox.checked);
 
     // Uncheck the bluetooth logs checkbox.
-    const bluetoothLogsCheckbox = getElement('#bluetoothLogsCheckbox');
+    const bluetoothLogsCheckbox = strictQuery(
+        '#bluetoothLogsCheckbox', page.shadowRoot, CrCheckboxElement);
     assertTrue(!!bluetoothLogsCheckbox);
     bluetoothLogsCheckbox.checked = false;
     assertFalse(bluetoothLogsCheckbox.checked);
 
-    const reportWithoutCategoryTag = (await clickSendAndWait(page)).report;
-    assertFalse(!!reportWithoutCategoryTag.feedbackContext.categoryTag);
+    const reportWithoutCategoryTag =
+        (await clickSendAndWait(page)).detail.report;
+    assertFalse(!!reportWithoutCategoryTag!.feedbackContext.categoryTag);
 
     page.reEnableSendReportButton();
-    const fakeFeedbackContextWithCategoryTag =
-        /** @type {!FeedbackContext} */ ({categoryTag: 'some category tag'});
-    page.feedbackContext = fakeFeedbackContextWithCategoryTag;
+    page.feedbackContext = fakeFeedbackContext;
     await flushTasks();
 
-    const reportWithCategoryTag = (await clickSendAndWait(page)).report;
+    const reportWithCategoryTag = (await clickSendAndWait(page)).detail.report;
     assertEquals(
-        fakeFeedbackContextWithCategoryTag.categoryTag,
-        reportWithCategoryTag.feedbackContext.categoryTag);
+        fakeFeedbackContext.categoryTag,
+        reportWithCategoryTag!.feedbackContext!.categoryTag);
 
     // Check the bluetooth logs checkbox. The categoryTag
     // should be BluetoothReportWithLogs, not the tag from url.
@@ -925,10 +991,10 @@
     await flushTasks();
 
     const reportWithCategoryTagAndBluetoothFlag =
-        (await clickSendAndWait(page)).report;
+        (await clickSendAndWait(page)).detail.report;
     assertEquals(
         'BluetoothReportWithLogs',
-        reportWithCategoryTagAndBluetoothFlag.feedbackContext.categoryTag);
+        reportWithCategoryTagAndBluetoothFlag!.feedbackContext!.categoryTag);
   });
 
   /**
@@ -943,32 +1009,34 @@
 
         // Uncheck the bluetooth logs checkbox so that only the "Link Cross
         // Device Dogfood Feedback"-specific categoryTag is added to the report.
-        const bluetoothLogsCheckbox = getElement('#bluetoothLogsCheckbox');
+        const bluetoothLogsCheckbox = strictQuery(
+            '#bluetoothLogsCheckbox', page.shadowRoot, CrCheckboxElement);
         assertTrue(!!bluetoothLogsCheckbox);
         bluetoothLogsCheckbox.checked = false;
         assertFalse(bluetoothLogsCheckbox.checked);
 
         // Uncheck the "Link Cross Device Dogfood Feedback" checkbox.
-        const linkCrossDeviceDogfoodFeedbackCheckbox =
-            getElement('#linkCrossDeviceDogfoodFeedbackCheckbox');
+        const linkCrossDeviceDogfoodFeedbackCheckbox = strictQuery(
+            '#linkCrossDeviceDogfoodFeedbackCheckbox', page.shadowRoot,
+            CrCheckboxElement);
         assertTrue(!!linkCrossDeviceDogfoodFeedbackCheckbox);
         linkCrossDeviceDogfoodFeedbackCheckbox.checked = false;
         assertFalse(linkCrossDeviceDogfoodFeedbackCheckbox.checked);
 
-        const reportWithoutCategoryTag = (await clickSendAndWait(page)).report;
-        assertFalse(!!reportWithoutCategoryTag.feedbackContext.categoryTag);
+        const reportWithoutCategoryTag =
+            (await clickSendAndWait(page)).detail.report;
+        assertFalse(!!reportWithoutCategoryTag!.feedbackContext.categoryTag);
 
         page.reEnableSendReportButton();
-        const fakeFeedbackContextWithCategoryTag =
-            /** @type {!FeedbackContext} */ (
-                {categoryTag: 'some category tag'});
-        page.feedbackContext = fakeFeedbackContextWithCategoryTag;
+        page.feedbackContext = fakeFeedbackContext;
+        assertTrue(!!page.feedbackContext.categoryTag);
         await flushTasks();
 
-        const reportWithCategoryTag = (await clickSendAndWait(page)).report;
+        const reportWithCategoryTag =
+            (await clickSendAndWait(page)).detail.report;
         assertEquals(
-            fakeFeedbackContextWithCategoryTag.categoryTag,
-            reportWithCategoryTag.feedbackContext.categoryTag);
+            fakeFeedbackContext.categoryTag,
+            reportWithCategoryTag!.feedbackContext.categoryTag);
 
         // Check the Link Cross Device Dogfood Feedback checkbox. The
         // categoryTag should be
@@ -981,10 +1049,10 @@
         page.reEnableSendReportButton();
 
         const reportWithCrossDeviceWithoutBluetoothLogsTag =
-            (await clickSendAndWait(page)).report;
+            (await clickSendAndWait(page)).detail.report;
         assertEquals(
             'linkCrossDeviceDogfoodFeedbackWithoutBluetoothLogs',
-            reportWithCrossDeviceWithoutBluetoothLogsTag.feedbackContext
+            reportWithCrossDeviceWithoutBluetoothLogsTag!.feedbackContext
                 .categoryTag);
       });
 
@@ -1001,13 +1069,14 @@
         // Check both the "Link Cross Device Dogfood Feedback" and Bluetooth
         // logs checkboxes. The categoryTag should then be
         // 'linkCrossDeviceDogfoodFeedbackWithBluetoothLogs'.
-        const linkCrossDeviceDogfoodFeedbackCheckbox =
-            getElement('#linkCrossDeviceDogfoodFeedbackCheckbox');
-        assertTrue(!!linkCrossDeviceDogfoodFeedbackCheckbox);
+        const linkCrossDeviceDogfoodFeedbackCheckbox = strictQuery(
+            '#linkCrossDeviceDogfoodFeedbackCheckbox', page.shadowRoot,
+            CrCheckboxElement);
         linkCrossDeviceDogfoodFeedbackCheckbox.checked = true;
         assertTrue(linkCrossDeviceDogfoodFeedbackCheckbox.checked);
 
-        const bluetoothLogsCheckbox = getElement('#bluetoothLogsCheckbox');
+        const bluetoothLogsCheckbox = strictQuery(
+            '#bluetoothLogsCheckbox', page.shadowRoot, CrCheckboxElement);
         assertTrue(!!bluetoothLogsCheckbox);
         bluetoothLogsCheckbox.checked = true;
         assertTrue(bluetoothLogsCheckbox.checked);
@@ -1015,10 +1084,10 @@
         await flushTasks();
 
         const reportWithCrossDeviceWithBluetoothLogsTag =
-            (await clickSendAndWait(page)).report;
+            (await clickSendAndWait(page)).detail.report;
         assertEquals(
             'linkCrossDeviceDogfoodFeedbackWithBluetoothLogs',
-            reportWithCrossDeviceWithBluetoothLogsTag.feedbackContext
+            reportWithCrossDeviceWithBluetoothLogsTag!.feedbackContext
                 .categoryTag);
       });
 
@@ -1033,7 +1102,7 @@
     verifyRecordPreSubmitActionCallCount(
         0, FeedbackAppPreSubmitAction.kViewedMetrics);
 
-    getElement('#histogramsLink').click();
+    strictQuery('#histogramsLink', page.shadowRoot, HTMLAnchorElement).click();
 
     assertEquals(1, feedbackServiceProvider.getOpenMetricsDialogCallCount());
     verifyRecordPreSubmitActionCallCount(
@@ -1051,7 +1120,7 @@
     verifyRecordPreSubmitActionCallCount(
         0, FeedbackAppPreSubmitAction.kViewedSystemAndAppInfo);
 
-    getElement('#sysInfoLink').click();
+    strictQuery('#sysInfoLink', page.shadowRoot, HTMLAnchorElement).click();
 
     assertEquals(1, feedbackServiceProvider.getOpenSystemInfoDialogCallCount());
     verifyRecordPreSubmitActionCallCount(
@@ -1073,7 +1142,8 @@
     verifyRecordPreSubmitActionCallCount(
         0, FeedbackAppPreSubmitAction.kViewedAutofillMetadata);
 
-    getElement('#autofillMetadataUrl').click();
+    strictQuery('#autofillMetadataUrl', page.shadowRoot, HTMLAnchorElement)
+        .click();
 
     assertEquals(1, feedbackServiceProvider.getOpenAutofillDialogCallCount());
     verifyRecordPreSubmitActionCallCount(
@@ -1089,11 +1159,13 @@
     page.feedbackContext = fakeFeedbackContext;
 
     // The bluetooth dialog is not visible as default.
-    const closeDialogButton = getElement('#bluetoothDialogDoneButton');
+    const closeDialogButton = strictQuery(
+        '#bluetoothDialogDoneButton', page.shadowRoot, CrButtonElement);
     assertFalse(isVisible(closeDialogButton));
 
     // After clicking the #bluetoothLogsLink, the dialog pops up.
-    getElement('#bluetoothLogsInfoLink').click();
+    strictQuery('#bluetoothLogsInfoLink', page.shadowRoot, HTMLAnchorElement)
+        .click();
     assertTrue(isVisible(closeDialogButton));
 
     // The preview dialog's close icon button is focused.
@@ -1117,13 +1189,15 @@
     page.feedbackContext = fakeInternalUserFeedbackContext;
 
     // The dialog is not visible as default.
-    const closeDialogButton = getElement('#wifiDebugLogsDialogDoneButton');
+    const closeDialogButton = strictQuery(
+        '#wifiDebugLogsDialogDoneButton', page.shadowRoot, CrButtonElement);
     assertFalse(isVisible(closeDialogButton));
 
     // After clicking the #wifiDebugLogsInfoLink, the dialog pops up.
-    const dialog = /** @type {!Element} */ (getElement('#wifiDebugLogsDialog'));
+    const dialog =
+        strictQuery('#wifiDebugLogsDialog', page.shadowRoot, HTMLElement);
     const dialogOpenedEvent = eventToPromise('cr-dialog-open', dialog);
-    getElement('#wifiDebugLogsInfoLink').click();
+    strictQuery('#wifiDebugLogsInfoLink', page.shadowRoot, HTMLElement).click();
     await dialogOpenedEvent;
 
     assertTrue(isVisible(closeDialogButton));
@@ -1150,13 +1224,17 @@
 
     // The "Link Cross Device Dogfood Feedback" dialog is not visible as
     // default.
-    const closeDialogButton =
-        getElement('#linkCrossDeviceDogfoodFeedbackDialogDoneButton');
+    const closeDialogButton = strictQuery(
+        '#linkCrossDeviceDogfoodFeedbackDialogDoneButton', page.shadowRoot,
+        CrButtonElement);
     assertFalse(isVisible(closeDialogButton));
 
     // After clicking the #linkCrossDeviceDogfoodFeedbackLink, the dialog pops
     // up.
-    getElement('#linkCrossDeviceDogfoodFeedbackInfoLink').click();
+    strictQuery(
+        '#linkCrossDeviceDogfoodFeedbackInfoLink', page.shadowRoot,
+        HTMLAnchorElement)
+        .click();
     assertTrue(isVisible(closeDialogButton));
 
     // The preview dialog's close icon button is focused.
@@ -1180,11 +1258,13 @@
     page.feedbackContext = fakeFeedbackContext;
 
     // The assistant dialog is not visible as default.
-    const closeDialogButton = getElement('#assistantDialogDoneButton');
+    const closeDialogButton = strictQuery(
+        '#assistantDialogDoneButton', page.shadowRoot, CrButtonElement);
     assertFalse(isVisible(closeDialogButton));
 
     // After clicking the #bluetoothLogsLink, the dialog pops up.
-    getElement('#assistantLogsLink').click();
+    strictQuery('#assistantLogsLink', page.shadowRoot, HTMLAnchorElement)
+        .click();
     assertTrue(isVisible(closeDialogButton));
 
     // The preview dialog's close icon button is focused.
@@ -1211,12 +1291,17 @@
     // Fake internal google account is used for login. The bluetooth logs
     // checkbox container should be visible.
     assertEquals(
-        getElement('#userEmailDropDown').value, 'test.user@google.com');
-    getElement('#bluetoothCheckboxContainer').hidden = false;
+        strictQuery('#userEmailDropDown', page.shadowRoot, HTMLSelectElement)
+            .value,
+        'test.user@google.com');
+    strictQuery('#bluetoothCheckboxContainer', page.shadowRoot, HTMLElement)
+        .hidden = false;
 
-    const bluetoothLogsCheckbox = getElement('#bluetoothLogsCheckbox');
-    const linkCrossDeviceDogfoodFeedbackCheckbox =
-        getElement('#linkCrossDeviceDogfoodFeedbackCheckbox');
+    const bluetoothLogsCheckbox = strictQuery(
+        '#bluetoothLogsCheckbox', page.shadowRoot, CrCheckboxElement);
+    const linkCrossDeviceDogfoodFeedbackCheckbox = strictQuery(
+        '#linkCrossDeviceDogfoodFeedbackCheckbox', page.shadowRoot,
+        CrCheckboxElement);
 
     // Check the bluetoothLogs checkbox, it is default to be checked.
     assertTrue(!!bluetoothLogsCheckbox);
@@ -1230,13 +1315,14 @@
 
     // Report should have sendBluetoothLogs flag true, and category marked as
     // "BluetoothReportWithLogs".
-    const requestWithBluetoothFlag = (await clickSendAndWait(page)).report;
+    const requestWithBluetoothFlag =
+        (await clickSendAndWait(page)).detail.report;
 
-    assertTrue(requestWithBluetoothFlag.sendBluetoothLogs);
-    assertTrue(!!requestWithBluetoothFlag.feedbackContext.categoryTag);
+    assertTrue(requestWithBluetoothFlag!.sendBluetoothLogs);
+    assertTrue(!!requestWithBluetoothFlag!.feedbackContext.categoryTag);
     assertEquals(
         'BluetoothReportWithLogs',
-        requestWithBluetoothFlag.feedbackContext.categoryTag);
+        requestWithBluetoothFlag!.feedbackContext.categoryTag);
   });
 
   /**
@@ -1251,18 +1337,23 @@
     // Fake internal google account is used for login. The bluetooth logs
     // checkbox container should be visible.
     assertEquals(
-        getElement('#userEmailDropDown').value, 'test.user@google.com');
-    getElement('#bluetoothCheckboxContainer').hidden = false;
+        strictQuery('#userEmailDropDown', page.shadowRoot, HTMLSelectElement)
+            .value,
+        'test.user@google.com');
+    strictQuery('#bluetoothCheckboxContainer', page.shadowRoot, HTMLElement)
+        .hidden = false;
 
     // BluetoothLogs checkbox is default to be checked.
-    const bluetoothLogsCheckbox = getElement('#bluetoothLogsCheckbox');
+    const bluetoothLogsCheckbox = strictQuery(
+        '#bluetoothLogsCheckbox', page.shadowRoot, CrCheckboxElement);
     assertTrue(!!bluetoothLogsCheckbox);
     assertTrue(bluetoothLogsCheckbox.checked);
 
     // Uncheck the "Link Cross Device Dogfood Feedback" checkbox so that only
     // the Bluetooth-specific categoryTag is added to the report.
-    const linkCrossDeviceDogfoodFeedbackCheckbox =
-        getElement('#linkCrossDeviceDogfoodFeedbackCheckbox');
+    const linkCrossDeviceDogfoodFeedbackCheckbox = strictQuery(
+        '#linkCrossDeviceDogfoodFeedbackCheckbox', page.shadowRoot,
+        CrCheckboxElement);
     assertTrue(!!linkCrossDeviceDogfoodFeedbackCheckbox);
     linkCrossDeviceDogfoodFeedbackCheckbox.checked = false;
     assertFalse(linkCrossDeviceDogfoodFeedbackCheckbox.checked);
@@ -1274,9 +1365,10 @@
 
     // Report should not have sendBluetoothLogs flag,
     // and category should not be marked as "BluetoothReportWithLogs".
-    const requestWithoutBluetoothFlag = (await clickSendAndWait(page)).report;
+    const requestWithoutBluetoothFlag =
+        (await clickSendAndWait(page)).detail.report;
 
-    assertFalse(requestWithoutBluetoothFlag.sendBluetoothLogs);
-    assertFalse(!!requestWithoutBluetoothFlag.feedbackContext.categoryTag);
+    assertFalse(requestWithoutBluetoothFlag!.sendBluetoothLogs);
+    assertFalse(!!requestWithoutBluetoothFlag!.feedbackContext.categoryTag);
   });
 });
diff --git a/chrome/test/data/webui/chromeos/personalization_app/sea_pen_template_query_element_test.ts b/chrome/test/data/webui/chromeos/personalization_app/sea_pen_template_query_element_test.ts
index 808c1b4..2d4de1b 100644
--- a/chrome/test/data/webui/chromeos/personalization_app/sea_pen_template_query_element_test.ts
+++ b/chrome/test/data/webui/chromeos/personalization_app/sea_pen_template_query_element_test.ts
@@ -27,7 +27,7 @@
     await waitAfterNextRender(seaPenTemplateQueryElement);
 
     const chips =
-        seaPenTemplateQueryElement.shadowRoot!.querySelectorAll('.clickable');
+        seaPenTemplateQueryElement.shadowRoot!.querySelectorAll('.chip-text');
     const options = seaPenTemplateQueryElement.shadowRoot!.querySelectorAll(
         '#options cr-button');
     const searchButtons =
@@ -73,7 +73,7 @@
     await waitAfterNextRender(seaPenTemplateQueryElement);
 
     const chips =
-        seaPenTemplateQueryElement.shadowRoot!.querySelectorAll('.clickable');
+        seaPenTemplateQueryElement.shadowRoot!.querySelectorAll('.chip-text');
     const chipToSelect = chips[0] as HTMLElement;
 
     chipToSelect!.click();
@@ -91,7 +91,7 @@
         'the selected chip should have an equivalent selected option');
     const selectedTemplate =
         seaPenTemplateQueryElement.shadowRoot!.querySelectorAll(
-            '#template .selected');
+            '#template .selected .chip-text');
     assertEquals(
         1, selectedTemplate.length,
         'There should be exactly one template div that is selected.');
@@ -104,7 +104,7 @@
         {templateId: SeaPenTemplateId.kFlower.toString()});
     await waitAfterNextRender(seaPenTemplateQueryElement);
     const chips =
-        seaPenTemplateQueryElement.shadowRoot!.querySelectorAll('.clickable');
+        seaPenTemplateQueryElement.shadowRoot!.querySelectorAll('.chip-text');
     const chip = chips[0] as HTMLElement;
     chip!.click();
     await waitAfterNextRender(seaPenTemplateQueryElement);
@@ -146,7 +146,7 @@
 
     const chips =
         seaPenTemplateQueryElement.shadowRoot!.querySelectorAll<HTMLElement>(
-            '.clickable');
+            '.chip-text');
     assertTrue(chips.length >= 2, 'there should be chips to select');
     chips[0]!.click();
     await waitAfterNextRender(seaPenTemplateQueryElement);
diff --git a/chrome/test/data/webui/chromeos/scanning/BUILD.gn b/chrome/test/data/webui/chromeos/scanning/BUILD.gn
index 1da84467..2a0ffa4d 100644
--- a/chrome/test/data/webui/chromeos/scanning/BUILD.gn
+++ b/chrome/test/data/webui/chromeos/scanning/BUILD.gn
@@ -39,7 +39,6 @@
     "//ash/webui/scanning/resources:build_ts",
     "//chrome/test/data/webui/chromeos:build_ts",
     "//third_party/polymer/v3_0:library",
-    "//ui/webui/resources/cr_elements:build_ts",
     "//ui/webui/resources/js:build_ts",
     "//ui/webui/resources/mojo:build_ts",
   ]
diff --git a/chrome/test/data/webui/chromeos/scanning/multi_page_scan_test.ts b/chrome/test/data/webui/chromeos/scanning/multi_page_scan_test.ts
index fa23346..52f9c61 100644
--- a/chrome/test/data/webui/chromeos/scanning/multi_page_scan_test.ts
+++ b/chrome/test/data/webui/chromeos/scanning/multi_page_scan_test.ts
@@ -5,9 +5,9 @@
 import 'chrome://webui-test/chromeos/mojo_webui_test_support.js';
 import 'chrome://scanning/multi_page_scan.js';
 
+import {CrButtonElement} from 'chrome://resources/ash/common/cr_elements/cr_button/cr_button.js';
 import {loadTimeData} from 'chrome://resources/ash/common/load_time_data.m.js';
 import {strictQuery} from 'chrome://resources/ash/common/typescript_utils/strict_query.js';
-import {CrButtonElement} from 'chrome://resources/cr_elements/cr_button/cr_button.js';
 import {assert} from 'chrome://resources/js/assert.js';
 import {MultiPageScanElement} from 'chrome://scanning/multi_page_scan.js';
 import {AppState} from 'chrome://scanning/scanning_app_types.js';
diff --git a/chrome/test/data/webui/chromeos/scanning/scan_preview_test.ts b/chrome/test/data/webui/chromeos/scanning/scan_preview_test.ts
index 1a772963..3eaacd6 100644
--- a/chrome/test/data/webui/chromeos/scanning/scan_preview_test.ts
+++ b/chrome/test/data/webui/chromeos/scanning/scan_preview_test.ts
@@ -5,9 +5,9 @@
 import 'chrome://webui-test/chromeos/mojo_webui_test_support.js';
 import 'chrome://scanning/scan_preview.js';
 
+import {CrDialogElement} from 'chrome://resources/ash/common/cr_elements/cr_dialog/cr_dialog.js';
 import {loadTimeData} from 'chrome://resources/ash/common/load_time_data.m.js';
 import {strictQuery} from 'chrome://resources/ash/common/typescript_utils/strict_query.js';
-import {CrDialogElement} from 'chrome://resources/cr_elements/cr_dialog/cr_dialog.js';
 import {assert} from 'chrome://resources/js/assert.js';
 import {flush} from 'chrome://resources/polymer/v3_0/polymer/polymer_bundled.min.js';
 import {AccessibilityFeaturesInterface, ForceHiddenElementsVisibleObserverRemote} from 'chrome://scanning/accessibility_features.mojom-webui.js';
diff --git a/chrome/test/data/webui/chromeos/scanning/scanning_app_test.ts b/chrome/test/data/webui/chromeos/scanning/scanning_app_test.ts
index 4c32dd8..023cc25 100644
--- a/chrome/test/data/webui/chromeos/scanning/scanning_app_test.ts
+++ b/chrome/test/data/webui/chromeos/scanning/scanning_app_test.ts
@@ -4,15 +4,15 @@
 
 import 'chrome://webui-test/chromeos/mojo_webui_test_support.js';
 import 'chrome://scanning/scanning_app.js';
-import 'chrome://resources/cr_elements/cr_button/cr_button.js';
+import 'chrome://resources/ash/common/cr_elements/cr_button/cr_button.js';
 
+import {CrButtonElement} from 'chrome://resources/ash/common/cr_elements/cr_button/cr_button.js';
 import {CrCheckboxElement} from 'chrome://resources/ash/common/cr_elements/cr_checkbox/cr_checkbox.js';
+import {CrDialogElement} from 'chrome://resources/ash/common/cr_elements/cr_dialog/cr_dialog.js';
 import {CrToastElement} from 'chrome://resources/ash/common/cr_elements/cr_toast/cr_toast.js';
 import {loadTimeData} from 'chrome://resources/ash/common/load_time_data.m.js';
 import {PromiseResolver} from 'chrome://resources/ash/common/promise_resolver.js';
 import {strictQuery} from 'chrome://resources/ash/common/typescript_utils/strict_query.js';
-import {CrButtonElement} from 'chrome://resources/cr_elements/cr_button/cr_button.js';
-import {CrDialogElement} from 'chrome://resources/cr_elements/cr_dialog/cr_dialog.js';
 import {assert} from 'chrome://resources/js/assert.js';
 import {FilePath} from 'chrome://resources/mojo/mojo/public/mojom/base/file_path.mojom-webui.js';
 import {UnguessableToken} from 'chrome://resources/mojo/mojo/public/mojom/base/unguessable_token.mojom-webui.js';
diff --git a/chrome/test/data/webui/compose/BUILD.gn b/chrome/test/data/webui/compose/BUILD.gn
index 8375e22f..ca6a91c 100644
--- a/chrome/test/data/webui/compose/BUILD.gn
+++ b/chrome/test/data/webui/compose/BUILD.gn
@@ -9,6 +9,8 @@
     "compose_animator_test.ts",
     "compose_app_test.ts",
     "compose_textarea_test.ts",
+    "compose_app_focus_test.ts",
+    "test_compose_api_proxy.ts",
   ]
 
   ts_path_mappings =
diff --git a/chrome/test/data/webui/compose/compose_app_focus_test.ts b/chrome/test/data/webui/compose/compose_app_focus_test.ts
new file mode 100644
index 0000000..252c3b1
--- /dev/null
+++ b/chrome/test/data/webui/compose/compose_app_focus_test.ts
@@ -0,0 +1,52 @@
+// Copyright 2023 The Chromium Authors
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+import 'chrome://compose/app.js';
+
+import {ComposeAppElement} from 'chrome://compose/app.js';
+import {ComposeApiProxyImpl} from 'chrome://compose/compose_api_proxy.js';
+import {assertEquals} from 'chrome://webui-test/chai_assert.js';
+import {flushTasks} from 'chrome://webui-test/polymer_test_util.js';
+
+import {TestComposeApiProxy} from './test_compose_api_proxy.js';
+
+suite('ComposeApp', function() {
+  let testProxy: TestComposeApiProxy;
+
+  async function createApp(): Promise<ComposeAppElement> {
+    const app = document.createElement('compose-app');
+    document.body.appendChild(app);
+
+    await testProxy.whenCalled('requestInitialState');
+    await flushTasks();
+    return app;
+  }
+
+  setup(async () => {
+    testProxy = new TestComposeApiProxy();
+    ComposeApiProxyImpl.setInstance(testProxy);
+    document.body.innerHTML = window.trustedTypes!.emptyHTML;
+  });
+
+  test('RefocusesInputOnInvalidate', async () => {
+    const app = await createApp();
+    app.$.textarea.value = 'short';
+    app.$.textarea.dispatchEvent(new CustomEvent('value-changed'));
+    app.$.submitButton.focus();
+    app.$.submitButton.click();
+    await flushTasks();
+    assertEquals(app.$.textarea, app.shadowRoot!.activeElement);
+  });
+
+  test('FocusesEditInput', async () => {
+    testProxy.setOpenMetadata({}, {
+      webuiState: JSON.stringify({
+        input: 'some input',
+        isEditingSubmittedInput: true,
+      }),
+    });
+    const app = await createApp();
+    assertEquals(app.$.editTextarea, app.shadowRoot!.activeElement);
+  });
+});
diff --git a/chrome/test/data/webui/compose/compose_app_test.ts b/chrome/test/data/webui/compose/compose_app_test.ts
index aae7710a..48975dc 100644
--- a/chrome/test/data/webui/compose/compose_app_test.ts
+++ b/chrome/test/data/webui/compose/compose_app_test.ts
@@ -5,144 +5,22 @@
 import 'chrome://compose/app.js';
 
 import {ComposeAppElement, ComposeAppState} from 'chrome://compose/app.js';
-import {CloseReason, ComposeDialogCallbackRouter, ComposeState, ComposeStatus, ConsentState, Length, OpenMetadata, StyleModifiers, Tone, UserFeedback} from 'chrome://compose/compose.mojom-webui.js';
-import {ComposeApiProxy, ComposeApiProxyImpl} from 'chrome://compose/compose_api_proxy.js';
+import {CloseReason, ComposeState, ComposeStatus, ConsentState, Length, Tone, UserFeedback} from 'chrome://compose/compose.mojom-webui.js';
+import {ComposeApiProxyImpl} from 'chrome://compose/compose_api_proxy.js';
 import {CrFeedbackOption} from 'chrome://resources/cr_elements/cr_feedback_buttons/cr_feedback_buttons.js';
 import {loadTimeData} from 'chrome://resources/js/load_time_data.js';
 import {assertDeepEquals, assertEquals, assertFalse, assertTrue} from 'chrome://webui-test/chai_assert.js';
 import {flushTasks} from 'chrome://webui-test/polymer_test_util.js';
-import {TestBrowserProxy} from 'chrome://webui-test/test_browser_proxy.js';
 import {isVisible, whenCheck} from 'chrome://webui-test/test_util.js';
 
-class TestingApiProxy extends TestBrowserProxy implements ComposeApiProxy {
-  private initialConsentState_: ConsentState = ConsentState.kConsented;
-  private initialMSBBState_: boolean = true;
-  private initialInput_: string = '';
-  private textSelected_: boolean = false;
-  private initialState_: ComposeState = {
-    webuiState: '',
-    feedback: UserFeedback.kUserFeedbackUnspecified,
-    hasPendingRequest: false,
-  };
-  private router_: ComposeDialogCallbackRouter =
-      new ComposeDialogCallbackRouter();
-  remote = this.router_.$.bindNewPipeAndPassRemote();
-  private undoResponse_: ComposeState|null = null;
-
-  constructor() {
-    super([
-      'acceptComposeResult',
-      'closeUi',
-      'compose',
-      'rewrite',
-      'openBugReportingLink',
-      'openFeedbackSurveyLink',
-      'requestInitialState',
-      'saveWebuiState',
-      'setUserFeedback',
-      'undo',
-    ]);
-  }
-
-  acceptComposeResult(): Promise<boolean> {
-    this.methodCalled('acceptComposeResult');
-    return Promise.resolve(true);
-  }
-
-  acknowledgeConsentDisclaimer() {}
-
-  approveConsent() {}
-
-  closeUi(reason: CloseReason) {
-    this.methodCalled('closeUi', reason);
-  }
-
-  compose(input: string, edited: boolean): void {
-    this.methodCalled('compose', {input, edited});
-  }
-
-  rewrite(style: StyleModifiers): void {
-    this.methodCalled('rewrite', {style});
-  }
-
-  undo(): Promise<(ComposeState | null)> {
-    this.methodCalled('undo');
-    return Promise.resolve(this.undoResponse_);
-  }
-
-  getRouter() {
-    return this.router_;
-  }
-
-  openBugReportingLink() {
-    this.methodCalled('openBugReportingLink');
-  }
-
-  openComposeLearnMorePage() {}
-
-  openFeedbackSurveyLink() {
-    this.methodCalled('openFeedbackSurveyLink');
-  }
-
-  openComposeSettings() {}
-
-  requestInitialState(): Promise<OpenMetadata> {
-    this.methodCalled('requestInitialState');
-    return Promise.resolve({
-      consentState: this.initialConsentState_,
-      msbbState: this.initialMSBBState_,
-      composeState: this.initialState_,
-      initialInput: this.initialInput_,
-      textSelected: this.textSelected_,
-      configurableParams: {
-        minWordLimit: 2,
-        maxWordLimit: 50,
-        maxCharacterLimit: 100,
-      },
-    });
-  }
-
-  saveWebuiState(state: string) {
-    this.methodCalled('saveWebuiState', state);
-  }
-
-  setUserFeedback(feedback: UserFeedback) {
-    this.methodCalled('setUserFeedback', feedback);
-  }
-
-  setInitialConsentState(consent: ConsentState) {
-    this.initialConsentState_ = consent;
-  }
-
-  setInitialState(state: Partial<ComposeState>, input?: string) {
-    this.initialState_ = Object.assign(
-        {
-          webuiState: '',
-          style: {tone: Tone.kUnset, length: Length.kUnset},
-          feedback: UserFeedback.kUserFeedbackUnspecified,
-          hasPendingRequest: false,
-        },
-        state);
-    this.initialInput_ = input || '';
-  }
-
-  setTextSelected(selected: boolean) {
-    this.textSelected_ = selected;
-  }
-
-  setUndoResponse(state: ComposeState|null) {
-    this.undoResponse_ = state;
-  }
-
-  showUi() {}
-}
+import {TestComposeApiProxy} from './test_compose_api_proxy.js';
 
 suite('ComposeApp', () => {
   let app: ComposeAppElement;
-  let testProxy: TestingApiProxy;
+  let testProxy: TestComposeApiProxy;
 
   setup(async () => {
-    testProxy = new TestingApiProxy();
+    testProxy = new TestComposeApiProxy();
     ComposeApiProxyImpl.setInstance(testProxy);
 
     document.body.innerHTML = window.trustedTypes!.emptyHTML;
@@ -166,10 +44,10 @@
     return testProxy.remote.$.flushForTesting();
   }
 
-  async function initializeNewAppWithConsentState(consent: ConsentState):
-      Promise<ComposeAppElement> {
+  async function initializeNewAppWithConsentAndMsbbState(
+      consent: ConsentState, msbb: boolean): Promise<ComposeAppElement> {
     document.body.innerHTML = window.trustedTypes!.emptyHTML;
-    testProxy.setInitialConsentState(consent);
+    testProxy.setOpenMetadata({consentState: consent, msbbState: msbb});
     const newApp = document.createElement('compose-app');
     document.body.appendChild(newApp);
     await flushTasks();
@@ -228,7 +106,7 @@
     async function initializeNewAppWithTextSelectedState(textSelected: boolean):
         Promise<ComposeAppElement> {
       document.body.innerHTML = window.trustedTypes!.emptyHTML;
-      testProxy.setTextSelected(textSelected);
+      testProxy.setOpenMetadata({textSelected});
       const newApp = document.createElement('compose-app');
       document.body.appendChild(newApp);
       await flushTasks();
@@ -263,7 +141,7 @@
     const args = await testProxy.whenCalled('rewrite');
     await mockResponse('Refreshed output.');
 
-    assertEquals(null, args.style);
+    assertEquals(null, args);
 
     // Verify UI has updated with refreshed results.
     assertFalse(isVisible(app.$.loading));
@@ -293,33 +171,44 @@
     assertTrue(220 < app.$.body.scrollHeight);
   });
 
-  test('ConsentStateDeterminesViewState', async () => {
-    const appWithConsentDialog =
-        await initializeNewAppWithConsentState(ConsentState.kUnset);
+  test('ConsentandMsbbStateDeterminesViewState', async () => {
+    const appWithConsentDialog = await initializeNewAppWithConsentAndMsbbState(
+        ConsentState.kUnset, true);
     // Check correct visibility for consent view state
     assertFalse(isVisible(appWithConsentDialog.$.appDialog));
     assertTrue(isVisible(appWithConsentDialog.$.consentDialog));
     assertTrue(isVisible(appWithConsentDialog.$.consentFooter));
     assertFalse(isVisible(appWithConsentDialog.$.disclaimerFooter));
+    assertFalse(isVisible(appWithConsentDialog.$.freMsbbDialog));
 
     const appWithDisclaimerDialog =
-        await initializeNewAppWithConsentState(ConsentState.kExternalConsented);
+        await initializeNewAppWithConsentAndMsbbState(
+            ConsentState.kExternalConsented, true);
     // Check correct visibility for disclaimer view state
     assertFalse(isVisible(appWithDisclaimerDialog.$.appDialog));
     assertTrue(isVisible(appWithDisclaimerDialog.$.consentDialog));
     assertFalse(isVisible(appWithDisclaimerDialog.$.consentFooter));
     assertTrue(isVisible(appWithDisclaimerDialog.$.disclaimerFooter));
+    assertFalse(isVisible(appWithDisclaimerDialog.$.freMsbbDialog));
 
-    const appWithMainDialog =
-        await initializeNewAppWithConsentState(ConsentState.kConsented);
+    const appWithMSBBDialog = await initializeNewAppWithConsentAndMsbbState(
+        ConsentState.kConsented, false);
+    // Check correct visibility for main app view state
+    assertFalse(isVisible(appWithMSBBDialog.$.appDialog));
+    assertFalse(isVisible(appWithMSBBDialog.$.consentDialog));
+    assertTrue(isVisible(appWithMSBBDialog.$.freMsbbDialog));
+
+    const appWithMainDialog = await initializeNewAppWithConsentAndMsbbState(
+        ConsentState.kConsented, true);
     // Check correct visibility for main app view state
     assertTrue(isVisible(appWithMainDialog.$.appDialog));
     assertFalse(isVisible(appWithMainDialog.$.consentDialog));
+    assertFalse(isVisible(appWithMainDialog.$.freMsbbDialog));
   });
 
   test('ConsentCloseButton', async () => {
-    const appWithConsentDialog =
-        await initializeNewAppWithConsentState(ConsentState.kUnset);
+    const appWithConsentDialog = await initializeNewAppWithConsentAndMsbbState(
+        ConsentState.kUnset, true);
 
     appWithConsentDialog.$.closeButtonConsent.click();
     // Close reason should match that given to the consent close button.
@@ -327,9 +216,19 @@
     assertEquals(CloseReason.kConsentCloseButton, closeReason);
   });
 
+  test('MSBBCloseButton', async () => {
+    const appWithMsbbDialog = await initializeNewAppWithConsentAndMsbbState(
+        ConsentState.kConsented, false);
+
+    appWithMsbbDialog.$.closeButtonMSBB.click();
+    // Close reason should match that given to the consent close button.
+    const closeReason = await testProxy.whenCalled('closeUi');
+    assertEquals(CloseReason.kMSBBCloseButton, closeReason);
+  });
+
   test('ConsentNoThanksButton', async () => {
-    const appWithConsentDialog =
-        await initializeNewAppWithConsentState(ConsentState.kUnset);
+    const appWithConsentDialog = await initializeNewAppWithConsentAndMsbbState(
+        ConsentState.kUnset, true);
 
     appWithConsentDialog.$.consentNoThanksButton.click();
     // Close reason should match that given to the consent no thanks button.
@@ -338,23 +237,49 @@
   });
 
   test('ConsentYesButton', async () => {
-    const appWithConsentDialog =
-        await initializeNewAppWithConsentState(ConsentState.kUnset);
+    const appWithConsentDialog = await initializeNewAppWithConsentAndMsbbState(
+        ConsentState.kUnset, true);
 
     appWithConsentDialog.$.consentYesButton.click();
     // View state should change from consent UI to main app UI.
     assertFalse(isVisible(appWithConsentDialog.$.consentDialog));
     assertTrue(isVisible(appWithConsentDialog.$.appDialog));
+    assertFalse(isVisible(appWithConsentDialog.$.freMsbbDialog));
+  });
+
+  test('ConsentYesButtonWithoutMSBB', async () => {
+    const appWithConsentDialog = await initializeNewAppWithConsentAndMsbbState(
+        ConsentState.kUnset, false);
+
+    appWithConsentDialog.$.consentYesButton.click();
+    // View state should change from consent UI to MSBB UI.
+    assertFalse(isVisible(appWithConsentDialog.$.consentDialog));
+    assertFalse(isVisible(appWithConsentDialog.$.appDialog));
+    assertTrue(isVisible(appWithConsentDialog.$.freMsbbDialog));
   });
 
   test('DisclaimerLetsGoButton', async () => {
     const appWithDisclaimerDialog =
-        await initializeNewAppWithConsentState(ConsentState.kExternalConsented);
+        await initializeNewAppWithConsentAndMsbbState(
+            ConsentState.kExternalConsented, true);
+
+    appWithDisclaimerDialog.$.disclaimerLetsGoButton.click();
+    // View state should change from disclaimer UI to MSBB UI.
+    assertFalse(isVisible(appWithDisclaimerDialog.$.consentDialog));
+    assertTrue(isVisible(appWithDisclaimerDialog.$.appDialog));
+    assertFalse(isVisible(appWithDisclaimerDialog.$.freMsbbDialog));
+  });
+
+  test('DisclaimerLetsGoButtonWithoutMSBB', async () => {
+    const appWithDisclaimerDialog =
+        await initializeNewAppWithConsentAndMsbbState(
+            ConsentState.kExternalConsented, false);
 
     appWithDisclaimerDialog.$.disclaimerLetsGoButton.click();
     // View state should change from disclaimer UI to main app UI.
     assertFalse(isVisible(appWithDisclaimerDialog.$.consentDialog));
-    assertTrue(isVisible(appWithDisclaimerDialog.$.appDialog));
+    assertFalse(isVisible(appWithDisclaimerDialog.$.appDialog));
+    assertTrue(isVisible(appWithDisclaimerDialog.$.freMsbbDialog));
   });
 
   test('InitializesWithState', async () => {
@@ -362,7 +287,7 @@
         state: Partial<ComposeState>,
         input?: string): Promise<ComposeAppElement> {
       document.body.innerHTML = window.trustedTypes!.emptyHTML;
-      testProxy.setInitialState(state, input);
+      testProxy.setOpenMetadata({initialInput: input}, state);
       const newApp = document.createElement('compose-app');
       document.body.appendChild(newApp);
       await flushTasks();
@@ -631,7 +556,7 @@
     const args = await testProxy.whenCalled('rewrite');
     await mockResponse();
 
-    assertEquals(Length.kShorter, args.style.length);
+    assertEquals(Length.kShorter, args.length);
 
     testProxy.resetResolver('rewrite');
 
@@ -645,13 +570,13 @@
     const args2 = await testProxy.whenCalled('rewrite');
     await mockResponse();
 
-    assertEquals(Tone.kCasual, args2.style.tone);
+    assertEquals(Tone.kCasual, args2.tone);
   });
 
   test('Undo', async () => {
     // Set up initial state to show undo button and mock up a previous state.
     document.body.innerHTML = window.trustedTypes!.emptyHTML;
-    testProxy.setInitialState({
+    testProxy.setOpenMetadata({}, {
       hasPendingRequest: false,
       response: {
         status: ComposeStatus.kOk,
diff --git a/chrome/test/data/webui/compose/compose_focus_test.cc b/chrome/test/data/webui/compose/compose_focus_test.cc
new file mode 100644
index 0000000..5f118d41
--- /dev/null
+++ b/chrome/test/data/webui/compose/compose_focus_test.cc
@@ -0,0 +1,25 @@
+// Copyright 2023 The Chromium Authors
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "chrome/browser/compose/compose_enabling.h"
+#include "chrome/common/webui_url_constants.h"
+#include "chrome/test/base/web_ui_mocha_browser_test.h"
+#include "components/compose/core/browser/compose_features.h"
+#include "content/public/test/browser_test.h"
+
+class ComposeFocusTest : public WebUIMochaFocusTest {
+ protected:
+  ComposeFocusTest() {
+    set_test_loader_host(chrome::kChromeUIComposeHost);
+    ComposeEnabling::SetEnabledForTesting(true);
+  }
+
+ private:
+  base::test::ScopedFeatureList scoped_feature_list_{
+      compose::features::kEnableCompose};
+};
+
+IN_PROC_BROWSER_TEST_F(ComposeFocusTest, App) {
+  RunTest("compose/compose_app_focus_test.js", "mocha.run()");
+}
diff --git a/chrome/test/data/webui/compose/test_compose_api_proxy.ts b/chrome/test/data/webui/compose/test_compose_api_proxy.ts
new file mode 100644
index 0000000..3243595
--- /dev/null
+++ b/chrome/test/data/webui/compose/test_compose_api_proxy.ts
@@ -0,0 +1,127 @@
+// Copyright 2023 The Chromium Authors
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+import {CloseReason, ComposeDialogCallbackRouter, ComposeState, ConsentState, OpenMetadata, StyleModifiers, UserFeedback} from 'chrome://compose/compose.mojom-webui.js';
+import {ComposeApiProxy} from 'chrome://compose/compose_api_proxy.js';
+import {TestBrowserProxy} from 'chrome://webui-test/test_browser_proxy.js';
+
+function getDefaultComposeState(): ComposeState {
+  return {
+    webuiState: '',
+    feedback: UserFeedback.kUserFeedbackUnspecified,
+    hasPendingRequest: false,
+  };
+}
+
+function getDefaultOpenMetadata(): OpenMetadata {
+  return {
+    consentState: ConsentState.kConsented,
+    msbbState: true,
+    composeState: getDefaultComposeState(),
+    initialInput: '',
+    textSelected: false,
+    configurableParams: {
+      minWordLimit: 2,
+      maxWordLimit: 50,
+      maxCharacterLimit: 100,
+    },
+  };
+}
+
+export class TestComposeApiProxy extends TestBrowserProxy implements
+    ComposeApiProxy {
+  private openMetadata_: OpenMetadata = getDefaultOpenMetadata();
+  private router_: ComposeDialogCallbackRouter =
+      new ComposeDialogCallbackRouter();
+  remote = this.router_.$.bindNewPipeAndPassRemote();
+  private undoResponse_: ComposeState|null = null;
+
+  constructor() {
+    super([
+      'acceptComposeResult',
+      'closeUi',
+      'compose',
+      'rewrite',
+      'openBugReportingLink',
+      'openFeedbackSurveyLink',
+      'requestInitialState',
+      'saveWebuiState',
+      'setUserFeedback',
+      'showUi',
+      'undo',
+    ]);
+  }
+
+  acceptComposeResult(): Promise<boolean> {
+    this.methodCalled('acceptComposeResult');
+    return Promise.resolve(true);
+  }
+
+  acknowledgeConsentDisclaimer() {}
+
+  approveConsent() {}
+
+  closeUi(reason: CloseReason) {
+    this.methodCalled('closeUi', reason);
+  }
+
+  compose(input: string, edited: boolean): void {
+    this.methodCalled('compose', {input, edited});
+  }
+
+  rewrite(style: StyleModifiers): void {
+    this.methodCalled('rewrite', style);
+  }
+
+  undo(): Promise<(ComposeState | null)> {
+    this.methodCalled('undo');
+    return Promise.resolve(this.undoResponse_);
+  }
+
+  getRouter() {
+    return this.router_;
+  }
+
+  openBugReportingLink() {
+    this.methodCalled('openBugReportingLink');
+  }
+
+  openComposeLearnMorePage() {}
+
+  openFeedbackSurveyLink() {
+    this.methodCalled('openFeedbackSurveyLink');
+  }
+
+  openComposeSettings() {}
+
+  requestInitialState(): Promise<OpenMetadata> {
+    this.methodCalled('requestInitialState');
+    return Promise.resolve(this.openMetadata_);
+  }
+
+  saveWebuiState(state: string) {
+    this.methodCalled('saveWebuiState', state);
+  }
+
+  setUserFeedback(feedback: UserFeedback) {
+    this.methodCalled('setUserFeedback', feedback);
+  }
+
+  setOpenMetadata(
+      overrides: Partial<OpenMetadata>,
+      composeStateOverrides: Partial<ComposeState> = {}) {
+    this.openMetadata_ = Object.assign(getDefaultOpenMetadata(), overrides, {
+      composeState:
+          Object.assign(getDefaultComposeState(), composeStateOverrides),
+    });
+  }
+
+  setUndoResponse(state: ComposeState|null) {
+    this.undoResponse_ = state;
+  }
+
+  showUi() {
+    this.methodCalled('showUi');
+  }
+}
diff --git a/chrome/test/data/webui/cr_elements/BUILD.gn b/chrome/test/data/webui/cr_elements/BUILD.gn
index 8f206fc..aeb06379 100644
--- a/chrome/test/data/webui/cr_elements/BUILD.gn
+++ b/chrome/test/data/webui/cr_elements/BUILD.gn
@@ -3,7 +3,6 @@
 # found in the LICENSE file.
 
 import("//build/config/chromeos/ui_mode.gni")
-import("//ui/webui/webui_features.gni")
 import("../build_webui_tests.gni")
 
 assert(!is_android && !is_ios)
@@ -28,6 +27,7 @@
     "cr_input_test.ts",
     "cr_lazy_render_test.ts",
     "cr_link_row_test.ts",
+    "cr_lit_element_test.ts",
     "cr_loading_gradient_test.ts",
     "cr_lottie_test.ts",
     "cr_menu_selector_focus_test.ts",
@@ -73,13 +73,9 @@
     "//tools/typescript/definitions/settings_private.d.ts",
   ]
   ts_deps = [
+    "//third_party/lit/v3_0:build_ts",
     "//third_party/polymer/v3_0:library",
     "//ui/webui/resources/cr_elements:build_ts",
     "//ui/webui/resources/js:build_ts",
   ]
-
-  if (!optimize_webui) {
-    files += [ "cr_lit_element_test.ts" ]
-    ts_deps += [ "//third_party/lit/v3_0:build_ts" ]
-  }
 }
diff --git a/chrome/test/data/webui/cr_elements/cr_elements_browsertest.cc b/chrome/test/data/webui/cr_elements/cr_elements_browsertest.cc
index d473e81eb..045edc3 100644
--- a/chrome/test/data/webui/cr_elements/cr_elements_browsertest.cc
+++ b/chrome/test/data/webui/cr_elements/cr_elements_browsertest.cc
@@ -147,11 +147,9 @@
   RunTest("cr_elements/store_client_test.js", "mocha.run()");
 }
 
-#if !BUILDFLAG(OPTIMIZE_WEBUI)
 IN_PROC_BROWSER_TEST_F(CrElementsTest, CrLitElement) {
   RunTest("cr_elements/cr_lit_element_test.js", "mocha.run()");
 }
-#endif
 
 IN_PROC_BROWSER_TEST_F(CrElementsTest, CrLoadingGradient) {
   RunTest("cr_elements/cr_loading_gradient_test.js", "mocha.run()");
diff --git a/chrome/test/data/webui/downloads/item_test.ts b/chrome/test/data/webui/downloads/item_test.ts
index 4db0ad5..ddd75c8 100644
--- a/chrome/test/data/webui/downloads/item_test.ts
+++ b/chrome/test/data/webui/downloads/item_test.ts
@@ -115,6 +115,10 @@
   });
 
   test('icon overridden by danger type', async () => {
+    loadTimeData.overrideValues({improvedDownloadWarningsUX: false});
+    const item = document.createElement('downloads-item');
+    document.body.innerHTML = window.trustedTypes!.emptyHTML;
+    document.body.appendChild(item);
     testIconLoader.setShouldIconsLoad(true);
     item.set('data', createDownload({
                filePath: 'unique1',
diff --git a/chrome/test/data/webui/settings/chromeos/device_page/display_page_test.ts b/chrome/test/data/webui/settings/chromeos/device_page/display_page_test.ts
index fbbd2be397..a505e00 100644
--- a/chrome/test/data/webui/settings/chromeos/device_page/display_page_test.ts
+++ b/chrome/test/data/webui/settings/chromeos/device_page/display_page_test.ts
@@ -4,10 +4,10 @@
 
 import 'chrome://os-settings/lazy_load.js';
 
-import {CrCheckboxElement, CrLinkRowElement, DevicePageBrowserProxyImpl, displaySettingsProviderMojom, Router, routes, setDisplayApiForTesting, setDisplaySettingsProviderForTesting, SettingsDisplayElement, SettingsDropdownMenuElement, SettingsSliderElement, SettingsToggleButtonElement} from 'chrome://os-settings/os_settings.js';
+import {CrLinkRowElement, DevicePageBrowserProxyImpl, displaySettingsProviderMojom, Router, routes, setDisplayApiForTesting, setDisplaySettingsProviderForTesting, SettingsDisplayElement, SettingsDropdownMenuElement, SettingsSliderElement, SettingsToggleButtonElement} from 'chrome://os-settings/os_settings.js';
 import {strictQuery} from 'chrome://resources/ash/common/typescript_utils/strict_query.js';
-import {getDeepActiveElement} from 'chrome://resources/ash/common/util.js';
 import {assert} from 'chrome://resources/js/assert.js';
+import {loadTimeData} from 'chrome://resources/js/load_time_data.js';
 import {flush, microTask} from 'chrome://resources/polymer/v3_0/polymer/polymer_bundled.min.js';
 import {assertEquals, assertFalse, assertTrue} from 'chrome://webui-test/chai_assert.js';
 import {flushTasks, waitAfterNextRender} from 'chrome://webui-test/polymer_test_util.js';
@@ -23,6 +23,8 @@
 const kDisplayIdPrefix = '123456789';
 
 suite('<settings-display>', () => {
+  const isRevampWayfindingEnabled =
+      loadTimeData.getBoolean('isRevampWayfindingEnabled');
   let displayPage: SettingsDisplayElement;
   let fakeSystemDisplay: FakeSystemDisplay;
   let browserProxy: any;
@@ -311,11 +313,12 @@
                 .kNightLightSchedule));
 
     // Mock user toggling mirror mode setting.
-    const displayMirrorCheckbox =
-        displayPage.shadowRoot!.querySelector<CrCheckboxElement>(
-            '#displayMirrorCheckbox');
-    assertTrue(!!displayMirrorCheckbox);
-    displayMirrorCheckbox.click();
+    const mirrorDisplayControl =
+        displayPage.shadowRoot!.querySelector<HTMLElement>(
+            isRevampWayfindingEnabled ? '#mirrorDisplayToggle' :
+                                        '#displayMirrorCheckbox');
+    assertTrue(!!mirrorDisplayControl);
+    mirrorDisplayControl.click();
 
     // Verify histogram count for mirror mode setting.
     assertEquals(
@@ -496,10 +499,12 @@
           assertEquals(90, displayPage.displays[1]!.rotation);
 
           // Mirror the displays.
-          const displayMirrorCheckbox = strictQuery(
-              '#displayMirrorCheckbox', displayPage.shadowRoot, HTMLElement);
-          assertTrue(!!displayMirrorCheckbox);
-          displayMirrorCheckbox.click();
+          const mirrorDisplayControl = strictQuery(
+              isRevampWayfindingEnabled ? '#mirrorDisplayToggle' :
+                                          '#displayMirrorCheckbox',
+              displayPage.shadowRoot, HTMLElement);
+          assertTrue(!!mirrorDisplayControl);
+          mirrorDisplayControl.click();
           flush();
 
           fakeSystemDisplay.onDisplayChanged.callListeners();
@@ -579,12 +584,13 @@
     assertEquals(2, displayPage.displays.length);
     assertTrue(displayPage.shouldShowArrangementSection());
 
-    const deepLinkElement =
-        displayPage.shadowRoot!.querySelector('#displayMirrorCheckbox')!
-            .shadowRoot!.querySelector('#checkbox');
-    await waitAfterNextRender(deepLinkElement as HTMLElement);
+    const deepLinkElement = displayPage.shadowRoot!.querySelector<HTMLElement>(
+        isRevampWayfindingEnabled ? '#mirrorDisplayToggle' :
+                                    '#displayMirrorCheckbox');
+    assertTrue(!!deepLinkElement);
+    await waitAfterNextRender(deepLinkElement);
     assertEquals(
-        deepLinkElement, getDeepActiveElement(),
+        deepLinkElement, displayPage.shadowRoot!.activeElement,
         'Display mirroring checkbox should be focused for settingId=428.');
   });
 
diff --git a/chrome/test/data/webui/settings/chromeos/os_settings_browsertest.js b/chrome/test/data/webui/settings/chromeos/os_settings_browsertest.js
index 25b8b79..9ea7dd644 100644
--- a/chrome/test/data/webui/settings/chromeos/os_settings_browsertest.js
+++ b/chrome/test/data/webui/settings/chromeos/os_settings_browsertest.js
@@ -555,7 +555,24 @@
      ]
    }
  ],
- ['DevicePageDisplayPage', 'device_page/display_page_test.js'],
+ [
+   'DevicePageDisplayPage',
+   'device_page/display_page_test.js',
+   {
+     disabled: [
+       'ash::features::kOsSettingsRevampWayfinding',
+     ],
+   },
+ ],
+ [
+   'DevicePageDisplayPageRevamp',
+   'device_page/display_page_test.js',
+   {
+     enabled: [
+       'ash::features::kOsSettingsRevampWayfinding',
+     ],
+   },
+ ],
  [
    'DevicePageDisplaySettingsMojoInterfaceProvider',
    'device_page/display_settings_mojo_interface_provider_test.js'
diff --git a/chrome/test/enterprise/e2e/connector/realtime_reporting_bce/reporting_server.py b/chrome/test/enterprise/e2e/connector/realtime_reporting_bce/reporting_server.py
index 9c5d804..d6f7d8bf 100644
--- a/chrome/test/enterprise/e2e/connector/realtime_reporting_bce/reporting_server.py
+++ b/chrome/test/enterprise/e2e/connector/realtime_reporting_bce/reporting_server.py
@@ -46,7 +46,7 @@
         userKey='all',
         applicationName='chrome',
         customerId='C029rpj4z',
-        eventName='MALWARE_TRANSFER',
+        eventName='UNSAFE_SITE_VISIT',
         startTime=content.timestamp.strftime(
             '%Y-%m-%dT%H:%M:%S.%fZ')).execute()
     activities = results.get('items', [])
diff --git a/chrome/test/enterprise/e2e/connector/reporting_connector_splunk/splunk_server.py b/chrome/test/enterprise/e2e/connector/reporting_connector_splunk/splunk_server.py
index 7f3a486..ffc7ddf4 100644
--- a/chrome/test/enterprise/e2e/connector/reporting_connector_splunk/splunk_server.py
+++ b/chrome/test/enterprise/e2e/connector/reporting_connector_splunk/splunk_server.py
@@ -68,7 +68,7 @@
         (datetime.utcnow() - content.timestamp).total_seconds() / 60) + 2)
     searchQuery += ' earliest=-' + str(minutes) + 'm'
     searchQuery += ' device_id="' + content.device_id + '"'
-    searchQuery += ' event="dangerousDownloadEvent"'
+    searchQuery += ' event="badNavigationEvent"'
     # Remove leading and trailing whitespace from the search
     searchQuery = searchQuery.strip()
     print(searchQuery)
diff --git a/chromeos/chromeos_strings.grd b/chromeos/chromeos_strings.grd
index ec55ad9..d29fc58 100644
--- a/chromeos/chromeos_strings.grd
+++ b/chromeos/chromeos_strings.grd
@@ -4721,7 +4721,7 @@
       </message>
 
       <message name="IDS_RUN_ON_OS_LOGIN_ENABLED_LEARN_MORE" desc="This is the button-text of the notification when an application is automatically started on OS login.">
-        Learn more
+        Learn more about auto-launch
       </message>
 
       <message name="IDS_APP_CLOSE_BUTTON_DISABLED_BY_ADMIN" desc="Text for the close button when prevent close is enabled by the administrator">
diff --git a/chromeos/chromeos_strings_grd/IDS_RUN_ON_OS_LOGIN_ENABLED_LEARN_MORE.png.sha1 b/chromeos/chromeos_strings_grd/IDS_RUN_ON_OS_LOGIN_ENABLED_LEARN_MORE.png.sha1
index ed643d4..b0e5815 100644
--- a/chromeos/chromeos_strings_grd/IDS_RUN_ON_OS_LOGIN_ENABLED_LEARN_MORE.png.sha1
+++ b/chromeos/chromeos_strings_grd/IDS_RUN_ON_OS_LOGIN_ENABLED_LEARN_MORE.png.sha1
@@ -1 +1 @@
-00f5aad7b10e129bb8644694b84dca67b876f20d
\ No newline at end of file
+db7720857f6f1e38005b967054b0670d49d4ab86
\ No newline at end of file
diff --git a/chromeos/constants/chromeos_features.cc b/chromeos/constants/chromeos_features.cc
index 5287d2b..850173cd 100644
--- a/chromeos/constants/chromeos_features.cc
+++ b/chromeos/constants/chromeos_features.cc
@@ -155,6 +155,17 @@
 // Controls enabling / disabling the orca feature for dogfood population.
 BASE_FEATURE(kOrcaDogfood, "OrcaDogfood", base::FEATURE_DISABLED_BY_DEFAULT);
 
+// Controls enabling / disabling the orca feature from the feature management
+// module.
+BASE_FEATURE(kFeatureManagementOrca,
+             "FeatureManagementOrca",
+             base::FEATURE_DISABLED_BY_DEFAULT);
+
+// Whether to disable chrome compose.
+BASE_FEATURE(kFeatureManagementDisableChromeCompose,
+             "FeatureManagementDisableChromeCompose",
+             base::FEATURE_DISABLED_BY_DEFAULT);
+
 // Controls whether to enable quick answers V2 settings sub-toggles.
 BASE_FEATURE(kQuickAnswersV2SettingsSubToggle,
              "QuickAnswersV2SettingsSubToggle",
@@ -281,11 +292,20 @@
   return IsJellyEnabled() && base::FeatureList::IsEnabled(kJellyroll);
 }
 
-// TODO:b/312592767 - Remove this function in favor of the equivalent ash
-// function.
 bool IsOrcaEnabled() {
-  return base::FeatureList::IsEnabled(kOrca) ||
-         base::FeatureList::IsEnabled(kOrcaDogfood);
+  return base::FeatureList::IsEnabled(chromeos::features::kOrcaDogfood) ||
+         (base::FeatureList::IsEnabled(chromeos::features::kOrca) &&
+          base::FeatureList::IsEnabled(kFeatureManagementOrca));
+}
+
+bool ShouldDisableChromeComposeOnChromeOS() {
+#if BUILDFLAG(IS_CHROMEOS_LACROS)
+  return chromeos::BrowserParamsProxy::Get()
+      ->ShouldDisableChromeComposeOnChromeOS();
+#else
+  return base::FeatureList::IsEnabled(kFeatureManagementDisableChromeCompose) ||
+         IsOrcaEnabled();
+#endif
 }
 
 bool IsQuickAnswersV2TranslationDisabled() {
diff --git a/chromeos/constants/chromeos_features.h b/chromeos/constants/chromeos_features.h
index 0d33e0ed..a834197 100644
--- a/chromeos/constants/chromeos_features.h
+++ b/chromeos/constants/chromeos_features.h
@@ -69,6 +69,10 @@
 COMPONENT_EXPORT(CHROMEOS_CONSTANTS) BASE_DECLARE_FEATURE(kOrca);
 COMPONENT_EXPORT(CHROMEOS_CONSTANTS) BASE_DECLARE_FEATURE(kOrcaDogfood);
 COMPONENT_EXPORT(CHROMEOS_CONSTANTS)
+BASE_DECLARE_FEATURE(kFeatureManagementOrca);
+COMPONENT_EXPORT(CHROMEOS_CONSTANTS)
+BASE_DECLARE_FEATURE(kFeatureManagementDisableChromeCompose);
+COMPONENT_EXPORT(CHROMEOS_CONSTANTS)
 BASE_DECLARE_FEATURE(kQuickAnswersRichCard);
 COMPONENT_EXPORT(CHROMEOS_CONSTANTS)
 BASE_DECLARE_FEATURE(kQuickAnswersV2SettingsSubToggle);
@@ -94,6 +98,8 @@
 COMPONENT_EXPORT(CHROMEOS_CONSTANTS) bool IsCrosWebAppShortcutUiUpdateEnabled();
 COMPONENT_EXPORT(CHROMEOS_CONSTANTS) bool IsCrosShortstandEnabled();
 COMPONENT_EXPORT(CHROMEOS_CONSTANTS)
+bool ShouldDisableChromeComposeOnChromeOS();
+COMPONENT_EXPORT(CHROMEOS_CONSTANTS)
 bool IsDataControlsFileAccessDefaultDenyEnabled();
 COMPONENT_EXPORT(CHROMEOS_CONSTANTS)
 bool IsDeskProfilesEnabled();
diff --git a/chromeos/crosapi/mojom/crosapi.mojom b/chromeos/crosapi/mojom/crosapi.mojom
index 7a4ab63..7d1459fd 100644
--- a/chromeos/crosapi/mojom/crosapi.mojom
+++ b/chromeos/crosapi/mojom/crosapi.mojom
@@ -1534,6 +1534,10 @@
   // behaviour between web apps and browser created shortcuts to be displayed.
   [MinVersion=74]
   bool is_cros_shortstand_enabled@74;
+
+  // If true, "Compose" will be disabled. Only applies on chromeos devices.
+  [MinVersion=75]
+  bool should_disable_chrome_compose_on_chromeos@75;
 };
 
 // BrowserPostLoginParams is the subset of parameters in BrowserInitParams
diff --git a/chromeos/printing/BUILD.gn b/chromeos/printing/BUILD.gn
index ac77406a5..a4491db 100644
--- a/chromeos/printing/BUILD.gn
+++ b/chromeos/printing/BUILD.gn
@@ -49,6 +49,8 @@
     "printer_configuration.h",
     "printer_translator.cc",
     "printer_translator.h",
+    "remote_ppd_fetcher.cc",
+    "remote_ppd_fetcher.h",
     "uri.cc",
     "uri.h",
     "uri_impl.cc",
@@ -81,6 +83,7 @@
     "printer_config_cache_unittest.cc",
     "printer_configuration_unittest.cc",
     "printer_translator_unittest.cc",
+    "remote_ppd_fetcher_unittest.cc",
     "uri_unittest.cc",
     "uri_unittest.h",
     "uri_unittest_consistency.cc",
diff --git a/chromeos/printing/ppd_provider.cc b/chromeos/printing/ppd_provider.cc
index 7c106e1..6b98240 100644
--- a/chromeos/printing/ppd_provider.cc
+++ b/chromeos/printing/ppd_provider.cc
@@ -4,6 +4,7 @@
 
 #include "chromeos/printing/ppd_provider.h"
 
+#include <memory>
 #include <string>
 #include <utility>
 #include <vector>
@@ -27,6 +28,7 @@
 #include "chromeos/printing/printer_config_cache.h"
 #include "chromeos/printing/printer_configuration.h"
 #include "chromeos/printing/printing_constants.h"
+#include "chromeos/printing/remote_ppd_fetcher.h"
 #include "components/device_event_log/device_event_log.h"
 #include "net/base/filename_util.h"
 
@@ -52,10 +54,12 @@
   if (!reference.user_supplied_ppd_url.empty()) {
     ++filled_fields;
     GURL tmp_url(reference.user_supplied_ppd_url);
-    if (!tmp_url.is_valid() || !tmp_url.SchemeIs("file")) {
+    bool is_http = tmp_url.SchemeIsHTTPOrHTTPS();
+    bool is_file = tmp_url.SchemeIs("file");
+    bool has_supported_scheme = is_http || is_file;
+    if (!tmp_url.is_valid() || !has_supported_scheme) {
       LOG(ERROR) << "Invalid url for a user-supplied ppd: "
-                 << reference.user_supplied_ppd_url
-                 << " (must be a file:// URL)";
+                 << reference.user_supplied_ppd_url;
       return false;
     }
   }
@@ -157,12 +161,14 @@
   PpdProviderImpl(const base::Version& current_version,
                   scoped_refptr<PpdCache> cache,
                   std::unique_ptr<PpdMetadataManager> metadata_manager,
-                  std::unique_ptr<PrinterConfigCache> config_cache)
+                  std::unique_ptr<PrinterConfigCache> config_cache,
+                  std::unique_ptr<RemotePpdFetcher> remote_ppd_fetcher)
       : version_(current_version),
         ppd_cache_(cache),
         deferral_context_(std::make_unique<MethodDeferralContext>()),
         metadata_manager_(std::move(metadata_manager)),
         config_cache_(std::move(config_cache)),
+        remote_ppd_fetcher_(std::move(remote_ppd_fetcher)),
         file_task_runner_(base::ThreadPool::CreateSequencedTaskRunner(
             {base::TaskPriority::USER_VISIBLE, base::MayBlock(),
              base::TaskShutdownBehavior::SKIP_ON_SHUTDOWN})) {}
@@ -270,10 +276,12 @@
   // retrieved PPD appropriate for |reference|.
   //
   // As a side effect, this method may attempt
-  // *  to read a PPD from the user's files (if the PPD is
-  //    user-supplied) or
-  // *  to download a PPD from the serving root (if the PPD is not
-  //    user-supplied).
+  // *  to read a PPD from the user's files (if the PPD is a
+  //    user-supplied local file) or
+  // *  to download a PPD from an http(s) URL (if the PPD is specified by a
+  //    user-supplied remote URL
+  // *  to download a PPD from the serving root (if the PPD is specified by
+  //    effective-make-and-model).
   void ResolvePpd(const Printer::PpdReference& reference,
                   ResolvePpdCallback cb) override {
     // In v3 metadata, effective-make-and-model strings are only
@@ -867,13 +875,14 @@
   // PPD. This contrasts with the slightly more involved two-step
   // "dereference" process in searching the PpdCache for a PPD retrieved
   // from the serving root.
-  void OnUserSuppliedPpdSoughtInPpdCache(Printer::PpdReference reference,
-                                         ResolvePpdCallback cb,
-                                         const PpdCache::FindResult& result) {
+  void OnUserSuppliedPpdSoughtInPpdCache(
+      Printer::PpdReference reference,
+      CallbackResultCode result_if_unsuccessful,
+      ResolvePpdCallback cb,
+      const PpdCache::FindResult& result) {
     if (!result.success) {
       base::SequencedTaskRunner::GetCurrentDefault()->PostTask(
-          FROM_HERE,
-          base::BindOnce(std::move(cb), CallbackResultCode::NOT_FOUND, ""));
+          FROM_HERE, base::BindOnce(std::move(cb), result_if_unsuccessful, ""));
       return;
     }
 
@@ -886,18 +895,19 @@
   //
   // Called when we finish fetching a PPD file from device-local storage
   // (e.g. from the user's home directory, not from the PpdCache).
-  void OnUserSuppliedPpdFetched(Printer::PpdReference reference,
-                                ResolvePpdCallback cb,
-                                const std::string& result) {
+  void OnUserSuppliedPpdFetchedFromLocalFile(Printer::PpdReference reference,
+                                             ResolvePpdCallback cb,
+                                             const std::string& result) {
     if (result.empty()) {
       // We didn't find a nonempty PPD at the location specified by the
-      // user. The next step is to try searching the PpdCache.
+      // user. Try searching the PpdCache and fail with NOT_FOUND if not found
+      // in PpdCache.
       std::string cache_key = PpdReferenceToCacheKey(reference);
       ppd_cache_->Find(
           cache_key,
           base::BindOnce(&PpdProviderImpl::OnUserSuppliedPpdSoughtInPpdCache,
                          weak_factory_.GetWeakPtr(), std::move(reference),
-                         std::move(cb)));
+                         CallbackResultCode::NOT_FOUND, std::move(cb)));
       return;
     }
 
@@ -908,9 +918,35 @@
 
   // Continues a prior call to ResolvePpd().
   //
+  // Called when we finish fetching the contents of a PPD file from a remote
+  // URL.
+  void OnUserSuppliedPpdFetchedFromRemoteUrl(
+      Printer::PpdReference reference,
+      ResolvePpdCallback cb,
+      RemotePpdFetcher::FetchResultCode code,
+      std::string result) {
+    if (code != RemotePpdFetcher::FetchResultCode::kSuccess) {
+      // Fetching the PPD from remote URL was unsuccessful. Try searching the
+      // PpdCache and fail with SERVER_ERROR if not found in PpdCache.
+      std::string cache_key = PpdReferenceToCacheKey(reference);
+      ppd_cache_->Find(
+          cache_key,
+          base::BindOnce(&PpdProviderImpl::OnUserSuppliedPpdSoughtInPpdCache,
+                         weak_factory_.GetWeakPtr(), std::move(reference),
+                         CallbackResultCode::SERVER_ERROR, std::move(cb)));
+      return;
+    }
+
+    ResolvePpdWithContents(ResolvedPpdOrigin::kFromUserSuppliedUrl,
+                           /*ppd_basename=*/std::nullopt, std::move(result),
+                           std::move(reference), std::move(cb));
+  }
+
+  // Continues a prior call to ResolvePpd().
+  //
   // 1. Attempts to invoke |cb| with the file named by
   //    |reference|::user_suplied_ppd_url - i.e. a live fetch from
-  //    wherever the user saved the PPD.
+  //    local disk or an http:// url.
   // 2. Attempts to search the local PpdCache instance for the file
   //    whose cache key was built from
   //    |reference|::user_supplied_ppd_url.
@@ -918,10 +954,31 @@
                               ResolvePpdCallback cb) {
     DCHECK(!reference.user_supplied_ppd_url.empty());
     GURL url(reference.user_supplied_ppd_url);
+    if (url.SchemeIsHTTPOrHTTPS()) {
+      ResolveUserSuppliedPpdFromRemoteUrl(url, std::move(reference),
+                                          std::move(cb));
+    } else {
+      ResolveUserSuppliedPpdFromLocalFile(url, std::move(reference),
+                                          std::move(cb));
+    }
+  }
 
+  void ResolveUserSuppliedPpdFromLocalFile(GURL file_url,
+                                           Printer::PpdReference reference,
+                                           ResolvePpdCallback cb) {
     file_task_runner_->PostTaskAndReplyWithResult(
-        FROM_HERE, base::BindOnce(&FetchFile, url),
-        base::BindOnce(&PpdProviderImpl::OnUserSuppliedPpdFetched,
+        FROM_HERE, base::BindOnce(&FetchFile, file_url),
+        base::BindOnce(&PpdProviderImpl::OnUserSuppliedPpdFetchedFromLocalFile,
+                       weak_factory_.GetWeakPtr(), std::move(reference),
+                       std::move(cb)));
+  }
+
+  void ResolveUserSuppliedPpdFromRemoteUrl(GURL url,
+                                           Printer::PpdReference reference,
+                                           ResolvePpdCallback cb) {
+    remote_ppd_fetcher_->Fetch(
+        url,
+        base::BindOnce(&PpdProviderImpl::OnUserSuppliedPpdFetchedFromRemoteUrl,
                        weak_factory_.GetWeakPtr(), std::move(reference),
                        std::move(cb)));
   }
@@ -975,6 +1032,9 @@
   // Fetches PPDs from the Chrome OS Printing team's serving root.
   std::unique_ptr<PrinterConfigCache> config_cache_;
 
+  // Fetches PPDs from remote http:// or https:// URLs.
+  std::unique_ptr<RemotePpdFetcher> remote_ppd_fetcher_;
+
   // Where to run disk operations.
   const scoped_refptr<base::SequencedTaskRunner> file_task_runner_;
 
@@ -1017,10 +1077,11 @@
     const base::Version& current_version,
     scoped_refptr<PpdCache> cache,
     std::unique_ptr<PpdMetadataManager> metadata_manager,
-    std::unique_ptr<PrinterConfigCache> config_cache) {
-  return base::MakeRefCounted<PpdProviderImpl>(current_version, cache,
-                                               std::move(metadata_manager),
-                                               std::move(config_cache));
+    std::unique_ptr<PrinterConfigCache> config_cache,
+    std::unique_ptr<RemotePpdFetcher> remote_ppd_fetcher) {
+  return base::MakeRefCounted<PpdProviderImpl>(
+      current_version, cache, std::move(metadata_manager),
+      std::move(config_cache), std::move(remote_ppd_fetcher));
 }
 
 }  // namespace chromeos
diff --git a/chromeos/printing/ppd_provider.h b/chromeos/printing/ppd_provider.h
index 4614b6c..47d2bda 100644
--- a/chromeos/printing/ppd_provider.h
+++ b/chromeos/printing/ppd_provider.h
@@ -18,17 +18,16 @@
 #include "chromeos/printing/printer_configuration.h"
 #include "chromeos/printing/usb_printer_id.h"
 
-namespace network {
-namespace mojom {
+namespace network::mojom {
 class URLLoaderFactory;
 }
-}
 
 namespace chromeos {
 
 class PpdCache;
 class PrinterConfigCache;
 class PpdMetadataManager;
+class RemotePpdFetcher;
 
 // Everything we might know about a printer when looking for a
 // driver for it.  All of the default values for fields in this struct
@@ -105,7 +104,7 @@
     // Minimum milestone for ChromeOS build
     base::Version min_milestone = base::Version("0.0");
 
-    // Maximum milestone for ChomeOS build
+    // Maximum milestone for ChromeOS build
     base::Version max_milestone = base::Version("0.0");
   };
 
@@ -180,7 +179,8 @@
       const base::Version& current_version,
       scoped_refptr<PpdCache> cache,
       std::unique_ptr<PpdMetadataManager> metadata_manager,
-      std::unique_ptr<PrinterConfigCache> config_cache);
+      std::unique_ptr<PrinterConfigCache> config_cache,
+      std::unique_ptr<RemotePpdFetcher> remote_ppd_fetcher);
 
   // Get all manufacturers for which we have drivers.  Keys of the map will be
   // localized in the default browser locale or the closest available fallback.
diff --git a/chromeos/printing/ppd_provider_unittest.cc b/chromeos/printing/ppd_provider_unittest.cc
index 21b7070..fb6263c9 100644
--- a/chromeos/printing/ppd_provider_unittest.cc
+++ b/chromeos/printing/ppd_provider_unittest.cc
@@ -30,19 +30,25 @@
 #include "chromeos/printing/ppd_metadata_manager.h"
 #include "chromeos/printing/printer_config_cache.h"
 #include "chromeos/printing/printer_configuration.h"
+#include "chromeos/printing/remote_ppd_fetcher.h"
 #include "testing/gmock/include/gmock/gmock-matchers.h"
+#include "testing/gmock/include/gmock/gmock.h"
 #include "testing/gtest/include/gtest/gtest.h"
+#include "url/gurl.h"
 
 namespace chromeos {
 
 namespace {
 
 using PrinterDiscoveryType = PrinterSearchData::PrinterDiscoveryType;
+using ::testing::_;
 using ::testing::AllOf;
 using ::testing::Eq;
 using ::testing::Field;
+using ::testing::Invoke;
 using ::testing::StrEq;
 using ::testing::UnorderedElementsAre;
+using ::testing::WithArg;
 
 // A pseudo-ppd that should get cupsFilter lines extracted from it.
 const char kCupsFilterPpdContents[] = R"(
@@ -83,6 +89,13 @@
   }
 })";
 
+struct MockRemotePpdFetcher : RemotePpdFetcher {
+  MOCK_METHOD(void,
+              Fetch,
+              (const GURL& url, FetchCallback cb),
+              (const, override));
+};
+
 // Unowned raw pointers to helper classes composed into the
 // PpdProvider at construct time. Used throughout to activate testing
 // codepaths.
@@ -93,6 +106,8 @@
       manager_config_cache = nullptr;
   raw_ptr<PpdMetadataManager, DanglingUntriaged | ExperimentalAsh>
       metadata_manager = nullptr;
+  raw_ptr<MockRemotePpdFetcher, DanglingUntriaged | ExperimentalAsh>
+      remote_ppd_fetcher = nullptr;
 };
 
 class PpdProviderTest : public ::testing::Test {
@@ -176,8 +191,12 @@
     auto config_cache = std::make_unique<FakePrinterConfigCache>();
     provider_backdoor_.config_cache = config_cache.get();
 
+    auto remote_ppd_fetcher = std::make_unique<MockRemotePpdFetcher>();
+    provider_backdoor_.remote_ppd_fetcher = remote_ppd_fetcher.get();
+
     return PpdProvider::Create(base::Version("40.8.6753.09"), ppd_cache_,
-                               std::move(manager), std::move(config_cache));
+                               std::move(manager), std::move(config_cache),
+                               std::move(remote_ppd_fetcher));
   }
 
   // Fills the fake Chrome OS Printing serving root with content.
@@ -250,6 +269,26 @@
   void DiscardResolvePpd(PpdProvider::CallbackResultCode code,
                          const std::string& contents) {}
 
+  void MockRemotePpdFetchResult(const std::string& url, std::string content) {
+    auto invoke_callback_with_content =
+        [content](RemotePpdFetcher::FetchCallback cb) {
+          std::move(cb).Run(RemotePpdFetcher::FetchResultCode::kSuccess,
+                            std::move(content));
+        };
+    EXPECT_CALL(*provider_backdoor_.remote_ppd_fetcher, Fetch(GURL(url), _))
+        .WillOnce(Invoke(WithArg<1>(invoke_callback_with_content)));
+  }
+
+  void MockRemotePpdFetchResult(const std::string& url,
+                                RemotePpdFetcher::FetchResultCode code) {
+    auto invoke_callback_with_content =
+        [code](RemotePpdFetcher::FetchCallback cb) {
+          std::move(cb).Run(code, std::string());
+        };
+    EXPECT_CALL(*provider_backdoor_.remote_ppd_fetcher, Fetch(GURL(url), _))
+        .WillOnce(Invoke(WithArg<1>(invoke_callback_with_content)));
+  }
+
   // Calls the ResolveManufacturer() method of the |provider| and
   // waits for its completion. Ignores the returned string values and
   // returns whether the result code was
@@ -821,29 +860,6 @@
                 Field(&CapturedResolvePpdResults::ppd_contents, StrEq("c")))));
 }
 
-// Test that we *don't* resolve a ppd URL over non-file schemes.  It's not clear
-// whether we'll want to do this in the long term, but for now this is
-// disallowed because we're not sure we completely understand the security
-// implications.
-TEST_F(PpdProviderTest, ResolveUserSuppliedUrlPpdFromNetworkFails) {
-  auto provider =
-      CreateProvider({"en", PpdCacheRunLocation::kInBackgroundThreads,
-                      PropagateLocaleToMetadataManager::kDoPropagate});
-  StartFakePpdServer();
-
-  Printer::PpdReference ref;
-  // PpdProvider::ResolvePpd() shall fail if a user-supplied PPD URL
-  // does not begin with the "file://" scheme.
-  ref.user_supplied_ppd_url = "nonfilescheme://unused";
-  provider->ResolvePpd(ref, base::BindOnce(&PpdProviderTest::CaptureResolvePpd,
-                                           base::Unretained(this)));
-  task_environment_.RunUntilIdle();
-
-  ASSERT_EQ(1UL, captured_resolve_ppd_.size());
-  EXPECT_EQ(PpdProvider::INTERNAL_ERROR, captured_resolve_ppd_[0].code);
-  EXPECT_TRUE(captured_resolve_ppd_[0].ppd_contents.empty());
-}
-
 // Test a successful ppd resolution from a user_supplied_url field when
 // reading from a file.  Note we shouldn't need the server to be up
 // to do this successfully, as we should be able to do this offline.
@@ -1186,5 +1202,62 @@
   EXPECT_EQ(PpdProvider::NOT_FOUND, captured_resolve_ppd_references_[1].code);
 }
 
+TEST_F(PpdProviderTest, RemotePpdFetchedFromUrlIfAvailable) {
+  auto provider =
+      CreateProvider({"en", PpdCacheRunLocation::kOnTestThread,
+                      PropagateLocaleToMetadataManager::kDoPropagate});
+  Printer::PpdReference ref;
+  ref.user_supplied_ppd_url = "https://ppd-url";
+  ppd_cache_->StoreForTesting(PpdProvider::PpdReferenceToCacheKey(ref),
+                              "cached-content", base::TimeDelta());
+  MockRemotePpdFetchResult("https://ppd-url", "ppd-content");
+
+  provider->ResolvePpd(ref, base::BindOnce(&PpdProviderTest::CaptureResolvePpd,
+                                           base::Unretained(this)));
+  task_environment_.RunUntilIdle();
+
+  ASSERT_EQ(1UL, captured_resolve_ppd_.size());
+  EXPECT_EQ(PpdProvider::SUCCESS, captured_resolve_ppd_[0].code);
+  EXPECT_EQ(captured_resolve_ppd_[0].ppd_contents, "ppd-content");
+}
+
+TEST_F(PpdProviderTest, RemotePpdResolveUsesCacheIfFetchFails) {
+  auto provider =
+      CreateProvider({"en", PpdCacheRunLocation::kOnTestThread,
+                      PropagateLocaleToMetadataManager::kDoPropagate});
+  Printer::PpdReference ref;
+  ref.user_supplied_ppd_url = "https://ppd-url";
+  ppd_cache_->StoreForTesting(PpdProvider::PpdReferenceToCacheKey(ref),
+                              "cached-content", base::TimeDelta());
+  MockRemotePpdFetchResult("https://ppd-url",
+                           RemotePpdFetcher::FetchResultCode::kNetworkError);
+
+  provider->ResolvePpd(ref, base::BindOnce(&PpdProviderTest::CaptureResolvePpd,
+                                           base::Unretained(this)));
+  task_environment_.RunUntilIdle();
+
+  ASSERT_EQ(1UL, captured_resolve_ppd_.size());
+  EXPECT_EQ(PpdProvider::SUCCESS, captured_resolve_ppd_[0].code);
+  EXPECT_EQ(captured_resolve_ppd_[0].ppd_contents, "cached-content");
+}
+
+TEST_F(PpdProviderTest, RemotePpdResolveFailureResultsInServerError) {
+  auto provider =
+      CreateProvider({"en", PpdCacheRunLocation::kInBackgroundThreads,
+                      PropagateLocaleToMetadataManager::kDoPropagate});
+  Printer::PpdReference ref;
+  ref.user_supplied_ppd_url = "https://ppd-url";
+  MockRemotePpdFetchResult("https://ppd-url",
+                           RemotePpdFetcher::FetchResultCode::kNetworkError);
+
+  provider->ResolvePpd(ref, base::BindOnce(&PpdProviderTest::CaptureResolvePpd,
+                                           base::Unretained(this)));
+  task_environment_.RunUntilIdle();
+
+  ASSERT_EQ(1UL, captured_resolve_ppd_.size());
+  EXPECT_EQ(PpdProvider::SERVER_ERROR, captured_resolve_ppd_[0].code);
+  EXPECT_TRUE(captured_resolve_ppd_[0].ppd_contents.empty());
+}
+
 }  // namespace
 }  // namespace chromeos
diff --git a/chromeos/printing/printer_config_cache.cc b/chromeos/printing/printer_config_cache.cc
index 2fd60f5b..983dc2a 100644
--- a/chromeos/printing/printer_config_cache.cc
+++ b/chromeos/printing/printer_config_cache.cc
@@ -23,6 +23,7 @@
 #include "net/base/load_flags.h"
 #include "net/base/net_errors.h"
 #include "services/network/public/cpp/resource_request.h"
+#include "services/network/public/cpp/simple_url_loader.h"
 #include "url/gurl.h"
 
 namespace chromeos {
diff --git a/chromeos/printing/printer_config_cache.h b/chromeos/printing/printer_config_cache.h
index 427c0d2c3..1cee3b51 100644
--- a/chromeos/printing/printer_config_cache.h
+++ b/chromeos/printing/printer_config_cache.h
@@ -19,7 +19,10 @@
 #include "base/strings/string_piece.h"
 #include "base/time/clock.h"
 #include "base/time/time.h"
-#include "services/network/public/cpp/simple_url_loader.h"
+
+namespace network::mojom {
+class URLLoaderFactory;
+}
 
 namespace chromeos {
 
@@ -46,7 +49,8 @@
   // connecting to actual Chrome OS Printing serving root.
   static std::unique_ptr<PrinterConfigCache> Create(
       const base::Clock* clock,
-      base::RepeatingCallback<network::mojom::URLLoaderFactory*()>,
+      base::RepeatingCallback<network::mojom::URLLoaderFactory*()>
+          loader_factory_dispenser,
       bool use_localhost_as_root);
   virtual ~PrinterConfigCache() = default;
 
diff --git a/chromeos/printing/printer_configuration.h b/chromeos/printing/printer_configuration.h
index f297283..da7566e 100644
--- a/chromeos/printing/printer_configuration.h
+++ b/chromeos/printing/printer_configuration.h
@@ -69,8 +69,8 @@
     bool IsFilled() const;
 
     // If non-empty, this is the url of a specific PPD the user has specified
-    // for use with this printer.  The ppd can be gzipped or uncompressed.  This
-    // url must use a file:// scheme.
+    // for use with this printer.  The ppd can be gzipped or uncompressed.
+    // Supported schemes for this url are file://, http:// and https://.
     std::string user_supplied_ppd_url;
 
     // String that identifies which ppd to use from the ppd server.
diff --git a/chromeos/printing/remote_ppd_fetcher.cc b/chromeos/printing/remote_ppd_fetcher.cc
new file mode 100644
index 0000000..d0b0abb
--- /dev/null
+++ b/chromeos/printing/remote_ppd_fetcher.cc
@@ -0,0 +1,127 @@
+// Copyright 2023 The Chromium Authors
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "chromeos/printing/remote_ppd_fetcher.h"
+
+#include <memory>
+#include <optional>
+#include <string>
+#include <utility>
+
+#include "base/check.h"
+#include "base/functional/bind.h"
+#include "base/functional/callback.h"
+#include "base/task/sequenced_task_runner.h"
+#include "net/base/net_errors.h"
+#include "net/traffic_annotation/network_traffic_annotation.h"
+#include "services/network/public/cpp/resource_request.h"
+#include "services/network/public/cpp/simple_url_loader.h"
+#include "url/gurl.h"
+
+namespace {
+
+void InvokeCallbackWithContents(chromeos::RemotePpdFetcher::FetchCallback cb,
+                                std::string contents) {
+  base::SequencedTaskRunner::GetCurrentDefault()->PostTask(
+      FROM_HERE,
+      base::BindOnce(std::move(cb),
+                     chromeos::RemotePpdFetcher::FetchResultCode::kSuccess,
+                     std::move(contents)));
+}
+
+void InvokeCallbackWithError(chromeos::RemotePpdFetcher::FetchCallback cb,
+                             chromeos::RemotePpdFetcher::FetchResultCode code) {
+  base::SequencedTaskRunner::GetCurrentDefault()->PostTask(
+      FROM_HERE, base::BindOnce(std::move(cb), code, std::string()));
+}
+
+void OnRemoteUrlLoaded(chromeos::RemotePpdFetcher::FetchCallback cb,
+                       std::unique_ptr<network::SimpleURLLoader> loader,
+                       std::optional<std::string> contents) {
+  if (loader->NetError() != net::Error::OK) {
+    LOG(WARNING) << "Failed to fetch PPD from remote URL. Network error code: "
+                 << loader->NetError();
+    InvokeCallbackWithError(
+        std::move(cb),
+        chromeos::RemotePpdFetcher::FetchResultCode::kNetworkError);
+    return;
+  }
+  InvokeCallbackWithContents(std::move(cb), std::move(contents).value());
+}
+}  // namespace
+
+namespace chromeos {
+
+class RemotePpdFetcherImpl : public RemotePpdFetcher {
+ public:
+  explicit RemotePpdFetcherImpl(
+      base::RepeatingCallback<network::mojom::URLLoaderFactory*()>
+          loader_factory_dispenser)
+      : loader_factory_dispenser_(loader_factory_dispenser) {}
+
+  void Fetch(const GURL& url, FetchCallback cb) const override {
+    DCHECK(url.SchemeIsHTTPOrHTTPS());
+
+    auto request = std::make_unique<network::ResourceRequest>();
+    request->url = url;
+    net::NetworkTrafficAnnotationTag traffic_annotation =
+        net::DefineNetworkTrafficAnnotation("admin_specified_ppd_fetch", R"(
+          semantics {
+            sender: "Printer Configuration"
+            description:
+              "This component downloads PPD files required to setup/install "
+              "printers provided via enterprise policies when the URL of the "
+              "PPD file is specified by administrator in the policy."
+            trigger: "On printer setup in ChromeOS."
+            user_data: {
+              type: NONE
+            }
+            destination: OTHER
+            internal: {
+              contacts: {
+                email: "ust@google.com"
+              }
+            }
+          }
+          policy {
+            cookies_allowed: NO
+            setting:
+              "Admins must make sure that none of the printers in "
+              "'Devices > Chrome > Printers' is configured to use a custom "
+              "PPD file."
+            chrome_policy {
+              PrintersBulkConfiguration: {
+                PrintersBulkConfiguration: ""
+              }
+            }
+            chrome_device_policy {
+              # DevicePrinters
+              device_printers: {
+                external_policy: ""
+              }
+            }
+          })");
+
+    auto url_loader = network::SimpleURLLoader::Create(std::move(request),
+                                                       traffic_annotation);
+    network::SimpleURLLoader* url_loader_ptr = url_loader.get();
+    url_loader_ptr->DownloadToString(
+        loader_factory_dispenser_.Run(),
+        base::BindOnce(&OnRemoteUrlLoaded, std::move(cb),
+                       std::move(url_loader)),
+        network::SimpleURLLoader::kMaxBoundedStringDownloadSize);
+  }
+
+  base::RepeatingCallback<network::mojom::URLLoaderFactory*()>
+      loader_factory_dispenser_;
+};
+
+std::unique_ptr<RemotePpdFetcher> RemotePpdFetcher::Create(
+    base::RepeatingCallback<network::mojom::URLLoaderFactory*()>
+        loader_factory_dispenser) {
+  return std::make_unique<RemotePpdFetcherImpl>(
+      std::move(loader_factory_dispenser));
+}
+
+}  // namespace chromeos
diff --git a/chromeos/printing/remote_ppd_fetcher.h b/chromeos/printing/remote_ppd_fetcher.h
new file mode 100644
index 0000000..60512d77
--- /dev/null
+++ b/chromeos/printing/remote_ppd_fetcher.h
@@ -0,0 +1,58 @@
+// Copyright 2023 The Chromium Authors
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef CHROMEOS_PRINTING_REMOTE_PPD_FETCHER_H_
+#define CHROMEOS_PRINTING_REMOTE_PPD_FETCHER_H_
+
+#include <memory>
+#include <string>
+
+#include "base/component_export.h"
+#include "base/functional/callback_forward.h"
+#include "url/gurl.h"
+
+namespace network::mojom {
+class URLLoaderFactory;
+}
+
+namespace chromeos {
+
+// A RemotePpdFetcher is used to fetch the contents of a PPD file hosted at an
+// HTTP or HTTPS URL. The PPD file will then be used to configure a printer in
+// CUPS.
+class COMPONENT_EXPORT(CHROMEOS_PRINTING) RemotePpdFetcher {
+ public:
+  enum class FetchResultCode {
+    kSuccess,
+
+    // This is a catch-all status code for all network-related error, e.g. the
+    // given URL was unreachable.
+    kNetworkError,
+  };
+  using FetchCallback = base::OnceCallback<void(FetchResultCode, std::string)>;
+
+  virtual ~RemotePpdFetcher() = default;
+
+  // Fetch the contents of the given URL.
+  //
+  // `url` must be a valid URL with HTTP or HTTPS scheme.
+  // If successful, `cb` will be invoked with FetchResult::kSuccess and the
+  // contents of `url`. If unsuccessful, `cb` will be invoked with a FetchResult
+  // indicating the error.
+  virtual void Fetch(const GURL& url, FetchCallback cb) const = 0;
+
+  // Create a `RemotePpdFetcher` instance.
+  //
+  // `loader_factory_dispenser` is a functor that can create fresh
+  // URLLoaderFactory instances. We use this indirection to avoid
+  // caching a raw pointer to a URLLoaderFactory instance, which is
+  // invalidated by network service restarts.
+  static std::unique_ptr<RemotePpdFetcher> Create(
+      base::RepeatingCallback<network::mojom::URLLoaderFactory*()>
+          loader_factory_dispenser);
+};
+
+}  // namespace chromeos
+
+#endif  // CHROMEOS_PRINTING_REMOTE_PPD_FETCHER_H_
diff --git a/chromeos/printing/remote_ppd_fetcher_unittest.cc b/chromeos/printing/remote_ppd_fetcher_unittest.cc
new file mode 100644
index 0000000..6e46eb82
--- /dev/null
+++ b/chromeos/printing/remote_ppd_fetcher_unittest.cc
@@ -0,0 +1,76 @@
+// Copyright 2023 The Chromium Authors
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "chromeos/printing/remote_ppd_fetcher.h"
+
+#include <string>
+#include <utility>
+
+#include "base/functional/bind.h"
+#include "base/functional/callback_forward.h"
+#include "base/test/task_environment.h"
+#include "net/http/http_status_code.h"
+#include "services/network/public/mojom/url_loader_factory.mojom.h"
+#include "services/network/test/test_url_loader_factory.h"
+#include "testing/gtest/include/gtest/gtest.h"
+#include "url/gurl.h"
+
+namespace chromeos {
+
+namespace {
+
+void RecordContents(RemotePpdFetcher::FetchResultCode& out_code,
+                    std::string& out_contents,
+                    RemotePpdFetcher::FetchResultCode fetch_code,
+                    std::string fetch_contents) {
+  out_code = fetch_code;
+  out_contents = std::move(fetch_contents);
+}
+
+base::RepeatingCallback<network::mojom::URLLoaderFactory*()>
+GetLoaderFactoryDispenser(network::TestURLLoaderFactory* loader_factory) {
+  return base::BindRepeating(
+      [](network::TestURLLoaderFactory* ptr)
+          -> network::mojom::URLLoaderFactory* { return ptr; },
+      loader_factory);
+}
+
+}  // namespace
+
+TEST(RemotePpdFetcherTest, FetchSuccessful) {
+  base::test::TaskEnvironment task_environment;
+  network::TestURLLoaderFactory loader_factory;
+  loader_factory.AddResponse("https://good-url", "ppd-content");
+  auto ppd_fetcher =
+      RemotePpdFetcher::Create(GetLoaderFactoryDispenser(&loader_factory));
+
+  RemotePpdFetcher::FetchResultCode code;
+  std::string result;
+  ppd_fetcher->Fetch(
+      GURL("https://good-url"),
+      base::BindOnce(&RecordContents, std::ref(code), std::ref(result)));
+  task_environment.RunUntilIdle();
+
+  EXPECT_EQ(code, RemotePpdFetcher::FetchResultCode::kSuccess);
+  EXPECT_EQ(result, "ppd-content");
+}
+
+TEST(RemotePpdFetcherTest, NetworkError) {
+  base::test::TaskEnvironment task_environment;
+  network::TestURLLoaderFactory loader_factory;
+  loader_factory.AddResponse("https://bad-url", "", net::HTTP_NOT_FOUND);
+  auto ppd_fetcher =
+      RemotePpdFetcher::Create(GetLoaderFactoryDispenser(&loader_factory));
+
+  RemotePpdFetcher::FetchResultCode code;
+  std::string result;
+  ppd_fetcher->Fetch(
+      GURL("https://bad-url"),
+      base::BindOnce(&RecordContents, std::ref(code), std::ref(result)));
+  task_environment.RunUntilIdle();
+
+  EXPECT_EQ(code, RemotePpdFetcher::FetchResultCode::kNetworkError);
+}
+
+}  // namespace chromeos
diff --git a/chromeos/startup/browser_params_proxy.cc b/chromeos/startup/browser_params_proxy.cc
index 08d241cf..32f024662 100644
--- a/chromeos/startup/browser_params_proxy.cc
+++ b/chromeos/startup/browser_params_proxy.cc
@@ -339,4 +339,8 @@
   return BrowserInitParams::Get()->is_cros_shortstand_enabled;
 }
 
+bool BrowserParamsProxy::ShouldDisableChromeComposeOnChromeOS() const {
+  return BrowserInitParams::Get()->should_disable_chrome_compose_on_chromeos;
+}
+
 }  // namespace chromeos
diff --git a/chromeos/startup/browser_params_proxy.h b/chromeos/startup/browser_params_proxy.h
index d488763..e79cd62 100644
--- a/chromeos/startup/browser_params_proxy.h
+++ b/chromeos/startup/browser_params_proxy.h
@@ -155,6 +155,8 @@
 
   bool IsCrosShortstandEnabled() const;
 
+  bool ShouldDisableChromeComposeOnChromeOS() const;
+
  private:
   friend base::NoDestructor<BrowserParamsProxy>;
 
diff --git a/clank b/clank
index 5e2c2c0..e97c3ff 160000
--- a/clank
+++ b/clank
@@ -1 +1 @@
-Subproject commit 5e2c2c062fd5cd50be442ada3e3c368ea4f90ce4
+Subproject commit e97c3ffb033feba08afc129e3c2e8192e406e006
diff --git a/components/autofill/core/browser/autocomplete_history_manager.cc b/components/autofill/core/browser/autocomplete_history_manager.cc
index 5e1cc8f..b3080a1 100644
--- a/components/autofill/core/browser/autocomplete_history_manager.cc
+++ b/components/autofill/core/browser/autocomplete_history_manager.cc
@@ -191,11 +191,6 @@
   }
 }
 
-base::WeakPtr<AutocompleteHistoryManager>
-AutocompleteHistoryManager::GetWeakPtr() {
-  return weak_ptr_factory_.GetWeakPtr();
-}
-
 void AutocompleteHistoryManager::OnWebDataServiceRequestDone(
     WebDataServiceBase::Handle current_handle,
     std::unique_ptr<WDTypedResult> result) {
diff --git a/components/autofill/core/browser/autocomplete_history_manager.h b/components/autofill/core/browser/autocomplete_history_manager.h
index 5ccef697..2b26a01 100644
--- a/components/autofill/core/browser/autocomplete_history_manager.h
+++ b/components/autofill/core/browser/autocomplete_history_manager.h
@@ -11,7 +11,6 @@
 #include "base/functional/callback.h"
 #include "base/gtest_prod_util.h"
 #include "base/memory/raw_ptr.h"
-#include "base/memory/weak_ptr.h"
 #include "components/autofill/core/browser/single_field_form_filler.h"
 #include "components/autofill/core/browser/ui/suggestion.h"
 #include "components/autofill/core/browser/webdata/autocomplete_entry.h"
@@ -65,9 +64,6 @@
             PrefService* pref_service,
             bool is_off_the_record);
 
-  // Returns a weak pointer to the current AutocompleteHistoryManager instance.
-  base::WeakPtr<AutocompleteHistoryManager> GetWeakPtr();
-
   // WebDataServiceConsumer implementation.
   void OnWebDataServiceRequestDone(
       WebDataServiceBase::Handle h,
@@ -151,8 +147,6 @@
 
   // Whether the service is associated with an off-the-record browser context.
   bool is_off_the_record_ = false;
-
-  base::WeakPtrFactory<AutocompleteHistoryManager> weak_ptr_factory_{this};
 };
 
 }  // namespace autofill
diff --git a/components/autofill/core/browser/autofill_external_delegate.cc b/components/autofill/core/browser/autofill_external_delegate.cc
index c32b96b7..862f292 100644
--- a/components/autofill/core/browser/autofill_external_delegate.cc
+++ b/components/autofill/core/browser/autofill_external_delegate.cc
@@ -182,7 +182,6 @@
       // that a merchant has saved. This indicates there could be Autofill
       // suggestions related to standalone CVC fields.
     case PopupItemId::kVirtualCreditCardEntry:
-    case PopupItemId::kAddressEntryNotSelectable:
       return true;
     case PopupItemId::kAccountStoragePasswordEntry:
     case PopupItemId::kAccountStorageUsernameEntry:
@@ -394,7 +393,7 @@
 
 void AutofillExternalDelegate::DidSelectSuggestion(
     const Suggestion& suggestion) {
-  if (!suggestion.is_selectable) {
+  if (!suggestion.is_acceptable) {
     // TODO(crbug.com/1493361): Handle this in the popup controller.
     return;
   }
@@ -471,8 +470,6 @@
           {.trigger_source =
                TriggerSourceFromSuggestionTriggerSource(trigger_source_)});
       break;
-    case PopupItemId::kAddressEntryNotSelectable:
-      return;
     case PopupItemId::kEditAddressProfile:
     case PopupItemId::kDeleteAddressProfile:
     case PopupItemId::kAutofillOptions:
@@ -507,7 +504,7 @@
 void AutofillExternalDelegate::DidAcceptSuggestion(
     const Suggestion& suggestion,
     const SuggestionPosition& position) {
-  if (!suggestion.is_selectable) {
+  if (!suggestion.is_acceptable) {
     // TODO(crbug.com/1493361): Handle this in the popup controller.
     return;
   }
@@ -700,8 +697,6 @@
     case PopupItemId::kMixedFormMessage:
       // If the selected element is a warning we don't want to do anything.
       break;
-    case PopupItemId::kAddressEntryNotSelectable:
-      return;
     case PopupItemId::kAddressEntry:
       autofill_metrics::LogAutofillSuggestionAcceptedIndex(
           position.row, popup_type_, manager_->client().IsOffTheRecord());
@@ -799,7 +794,6 @@
     case PopupItemId::kAddressFieldByFieldFilling:
     case PopupItemId::kCreditCardFieldByFieldFilling:
     case PopupItemId::kCreditCardEntry:
-    case PopupItemId::kAddressEntryNotSelectable:
       return manager_->RemoveAutofillProfileOrCreditCard(backend_id);
     case PopupItemId::kAutocompleteEntry:
       manager_->RemoveCurrentSingleFieldSuggestion(query_field_.name, value,
diff --git a/components/autofill/core/browser/autofill_external_delegate_unittest.cc b/components/autofill/core/browser/autofill_external_delegate_unittest.cc
index efaf0ced..b95ac9bb 100644
--- a/components/autofill/core/browser/autofill_external_delegate_unittest.cc
+++ b/components/autofill/core/browser/autofill_external_delegate_unittest.cc
@@ -2205,7 +2205,6 @@
     PopupItemId::kAddressFieldByFieldFilling,
     PopupItemId::kCreditCardFieldByFieldFilling,
     PopupItemId::kCreditCardEntry,
-    PopupItemId::kAddressEntryNotSelectable,
     PopupItemId::kAutocompleteEntry,
     PopupItemId::kPasswordEntry,
 };
diff --git a/components/autofill/core/browser/autofill_suggestion_generator.cc b/components/autofill/core/browser/autofill_suggestion_generator.cc
index a181703..7422136 100644
--- a/components/autofill/core/browser/autofill_suggestion_generator.cc
+++ b/components/autofill/core/browser/autofill_suggestion_generator.cc
@@ -600,10 +600,8 @@
 
   // If a field is not classified as an address, then autofill was triggered
   // from the context menu.
-  if (!IsAddressType(trigger_field_type) &&
-      base::FeatureList::IsEnabled(
-          features::kAutofillForUnclassifiedFieldsAvailable)) {
-    return PopupItemId::kAddressEntryNotSelectable;
+  if (!IsAddressType(trigger_field_type)) {
+    return PopupItemId::kAddressEntry;
   }
 
   const FieldTypeGroup trigger_field_type_group =
@@ -1219,6 +1217,7 @@
         l10n_util::GetStringUTF16(IDS_AUTOFILL_A11Y_ANNOUNCE_FILLED_FORM);
     suggestions.back().popup_item_id = GetProfileSuggestionPopupItemId(
         last_targeted_fields, trigger_field_type);
+    suggestions.back().is_acceptable = IsAddressType(trigger_field_type);
     suggestions.back().hidden_prior_to_address_rewriter_usage =
         previously_hidden_profiles_guid.contains(profile->guid());
     if (suggestions.back().popup_item_id ==
@@ -1760,7 +1759,7 @@
   // First layer manual fallback entries can't fill forms and thus can't be
   // selected by the user.
   suggestion.popup_item_id = PopupItemId::kCreditCardEntry;
-  suggestion.is_selectable = !is_manual_fallback;
+  suggestion.is_acceptable = !is_manual_fallback;
   suggestion.payload = Suggestion::Guid(credit_card.guid());
 #if BUILDFLAG(IS_ANDROID)
   // The card art icon should always be shown at the start of the suggestion.
@@ -1812,7 +1811,7 @@
   }
 
   suggestion.acceptance_a11y_announcement =
-      suggestion.is_selectable
+      suggestion.is_acceptable
           ? l10n_util::GetStringUTF16(IDS_AUTOFILL_A11Y_ANNOUNCE_FILLED_FORM)
           : l10n_util::GetStringUTF16(
                 IDS_AUTOFILL_A11Y_ANNOUNCE_EXPANDABLE_ONLY_ENTRY);
diff --git a/components/autofill/core/browser/autofill_suggestion_generator_unittest.cc b/components/autofill/core/browser/autofill_suggestion_generator_unittest.cc
index f662619..fc33cf6 100644
--- a/components/autofill/core/browser/autofill_suggestion_generator_unittest.cc
+++ b/components/autofill/core/browser/autofill_suggestion_generator_unittest.cc
@@ -1332,45 +1332,46 @@
   ASSERT_EQ(5u, suggestions.size());
   EXPECT_THAT(
       suggestions,
-      ElementsAre(AllOf(Field(&Suggestion::main_text,
-                              Suggestion::Text(
-                                  u"test0", Suggestion::Text::IsPrimary(true))),
-                        Field(&Suggestion::labels,
-                              std::vector<std::vector<Suggestion::Text>>{
-                                  {Suggestion::Text(u"test0_label")}}),
-                        Field(&Suggestion::popup_item_id,
-                              PopupItemId::kAddressEntryNotSelectable)),
-                  AllOf(Field(&Suggestion::main_text,
-                              Suggestion::Text(
-                                  u"test1", Suggestion::Text::IsPrimary(true))),
-                        Field(&Suggestion::labels,
-                              std::vector<std::vector<Suggestion::Text>>{
-                                  {Suggestion::Text(u"test1_label")}}),
-                        Field(&Suggestion::popup_item_id,
-                              PopupItemId::kAddressEntryNotSelectable)),
-                  AllOf(Field(&Suggestion::main_text,
-                              Suggestion::Text(
-                                  u"test2", Suggestion::Text::IsPrimary(true))),
-                        Field(&Suggestion::labels,
-                              std::vector<std::vector<Suggestion::Text>>{
-                                  {Suggestion::Text(u"test2_label")}}),
-                        Field(&Suggestion::popup_item_id,
-                              PopupItemId::kAddressEntryNotSelectable)),
-                  AllOf(Field(&Suggestion::main_text,
-                              Suggestion::Text(
-                                  u"test3", Suggestion::Text::IsPrimary(true))),
-                        Field(&Suggestion::labels,
-                              std::vector<std::vector<Suggestion::Text>>{
-                                  {Suggestion::Text(u"test3_label")}}),
-                        Field(&Suggestion::popup_item_id,
-                              PopupItemId::kAddressEntryNotSelectable)),
-                  AllOf(Field(&Suggestion::main_text,
-                              Suggestion::Text(
-                                  u"test4", Suggestion::Text::IsPrimary(true))),
-                        Field(&Suggestion::labels,
-                              std::vector<std::vector<Suggestion::Text>>{{}}),
-                        Field(&Suggestion::popup_item_id,
-                              PopupItemId::kAddressEntryNotSelectable))));
+      ElementsAre(
+          AllOf(Field(&Suggestion::main_text,
+                      Suggestion::Text(u"test0",
+                                       Suggestion::Text::IsPrimary(true))),
+                Field(&Suggestion::labels,
+                      std::vector<std::vector<Suggestion::Text>>{
+                          {Suggestion::Text(u"test0_label")}}),
+                Field(&Suggestion::popup_item_id, PopupItemId::kAddressEntry),
+                Field(&Suggestion::is_acceptable, false)),
+          AllOf(Field(&Suggestion::main_text,
+                      Suggestion::Text(u"test1",
+                                       Suggestion::Text::IsPrimary(true))),
+                Field(&Suggestion::labels,
+                      std::vector<std::vector<Suggestion::Text>>{
+                          {Suggestion::Text(u"test1_label")}}),
+                Field(&Suggestion::popup_item_id, PopupItemId::kAddressEntry),
+                Field(&Suggestion::is_acceptable, false)),
+          AllOf(Field(&Suggestion::main_text,
+                      Suggestion::Text(u"test2",
+                                       Suggestion::Text::IsPrimary(true))),
+                Field(&Suggestion::labels,
+                      std::vector<std::vector<Suggestion::Text>>{
+                          {Suggestion::Text(u"test2_label")}}),
+                Field(&Suggestion::popup_item_id, PopupItemId::kAddressEntry),
+                Field(&Suggestion::is_acceptable, false)),
+          AllOf(Field(&Suggestion::main_text,
+                      Suggestion::Text(u"test3",
+                                       Suggestion::Text::IsPrimary(true))),
+                Field(&Suggestion::labels,
+                      std::vector<std::vector<Suggestion::Text>>{
+                          {Suggestion::Text(u"test3_label")}}),
+                Field(&Suggestion::popup_item_id, PopupItemId::kAddressEntry),
+                Field(&Suggestion::is_acceptable, false)),
+          AllOf(Field(&Suggestion::main_text,
+                      Suggestion::Text(u"test4",
+                                       Suggestion::Text::IsPrimary(true))),
+                Field(&Suggestion::labels,
+                      std::vector<std::vector<Suggestion::Text>>{{}}),
+                Field(&Suggestion::popup_item_id, PopupItemId::kAddressEntry),
+                Field(&Suggestion::is_acceptable, false))));
 }
 
 // Tests that a non-address field suggestion has all the profile fields as
@@ -2580,7 +2581,7 @@
   // Only the name is displayed on the first line.
   EXPECT_EQ(server_card_suggestion.popup_item_id,
             PopupItemId::kCreditCardEntry);
-  EXPECT_FALSE(server_card_suggestion.is_selectable);
+  EXPECT_FALSE(server_card_suggestion.is_acceptable);
   // For Desktop, split the first line and populate the card name and
   // the last 4 digits separately.
   EXPECT_EQ(server_card_suggestion.main_text.value, u"Visa");
diff --git a/components/autofill/core/browser/browser_autofill_manager.cc b/components/autofill/core/browser/browser_autofill_manager.cc
index e4c7c0c..a856ab3 100644
--- a/components/autofill/core/browser/browser_autofill_manager.cc
+++ b/components/autofill/core/browser/browser_autofill_manager.cc
@@ -295,7 +295,6 @@
     case PopupItemId::kEditAddressProfile:
     case PopupItemId::kAddressFieldByFieldFilling:
     case PopupItemId::kCreditCardFieldByFieldFilling:
-    case PopupItemId::kAddressEntryNotSelectable:
     case PopupItemId::kFillEverythingFromAddressProfile:
     case PopupItemId::kFillExistingPlusAddress:
     case PopupItemId::kFillFullAddress:
diff --git a/components/autofill/core/browser/browser_autofill_manager_unittest.cc b/components/autofill/core/browser/browser_autofill_manager_unittest.cc
index 859341ec..14306d24 100644
--- a/components/autofill/core/browser/browser_autofill_manager_unittest.cc
+++ b/components/autofill/core/browser/browser_autofill_manager_unittest.cc
@@ -1733,7 +1733,7 @@
     external_delegate()->CheckSuggestionCount(field.global_id(), 3);
     EXPECT_TRUE(base::ranges::all_of(external_delegate()->suggestions(),
                                      [](const Suggestion& suggestion) {
-                                       return !suggestion.is_selectable;
+                                       return !suggestion.is_acceptable;
                                      }));
   }
 }
@@ -6702,14 +6702,6 @@
   browser_autofill_manager_.reset();
 }
 
-// Make sure that we don't error out when AutocompleteHistoryManager was
-// destroyed before BrowserAutofillManager.
-TEST_F(BrowserAutofillManagerTest, Destructor_DeletedAutocomplete_Works) {
-  // The assertion here is that no exceptions will be thrown.
-  autocomplete_history_manager_.reset();
-  browser_autofill_manager_.reset();
-}
-
 // Test that OnLoadedServerPredictions can obtain the FormStructure with the
 // signature of the queried form from the API and apply type predictions.
 // What we test here:
diff --git a/components/autofill/core/browser/crowdsourcing/autofill_crowdsourcing_encoding.cc b/components/autofill/core/browser/crowdsourcing/autofill_crowdsourcing_encoding.cc
index 897cadd..ae3becc 100644
--- a/components/autofill/core/browser/crowdsourcing/autofill_crowdsourcing_encoding.cc
+++ b/components/autofill/core/browser/crowdsourcing/autofill_crowdsourcing_encoding.cc
@@ -203,8 +203,8 @@
       continue;
     }
 
-    // Add the same field elements as the query and a few more below.
-    if (form.ShouldSkipField(*field)) {
+    //  Add the same field elements as the query and a few more below.
+    if (IsCheckable(field->check_status)) {
       continue;
     }
 
diff --git a/components/autofill/core/browser/filling_product.cc b/components/autofill/core/browser/filling_product.cc
index a8869453..d61062f 100644
--- a/components/autofill/core/browser/filling_product.cc
+++ b/components/autofill/core/browser/filling_product.cc
@@ -21,7 +21,6 @@
     case PopupItemId::kDeleteAddressProfile:
     case PopupItemId::kDevtoolsTestAddresses:
     case PopupItemId::kDevtoolsTestAddressEntry:
-    case PopupItemId::kAddressEntryNotSelectable:
       return FillingProduct::kAddress;
     case PopupItemId::kCreditCardEntry:
     case PopupItemId::kScanCreditCard:
diff --git a/components/autofill/core/browser/form_structure.cc b/components/autofill/core/browser/form_structure.cc
index 92e66e4..e00e27b 100644
--- a/components/autofill/core/browser/form_structure.cc
+++ b/components/autofill/core/browser/form_structure.cc
@@ -239,8 +239,9 @@
       unique_renderer_id_(form.unique_renderer_id) {
   // Copy the form fields.
   for (const FormFieldData& field : form.fields) {
-    if (!ShouldSkipField(field))
+    if (!IsCheckable(field.check_status)) {
       ++active_field_count_;
+    }
 
     if (field.form_control_type == FormControlType::kInputPassword) {
       has_password_field_ = true;
@@ -1181,8 +1182,9 @@
     queried_form_signatures->push_back(form);
 
     for (const auto& field : fields_) {
-      if (ShouldSkipField(*field) || !necessary_condition(field))
+      if (IsCheckable(field->check_status) || !necessary_condition(field)) {
         continue;
+      }
 
       AutofillPageQueryRequest::Form::Field* added_field =
           query_form->add_fields();
@@ -1493,10 +1495,6 @@
   }
 }
 
-bool FormStructure::ShouldSkipField(const FormFieldData& field) const {
-  return IsCheckable(field.check_status);
-}
-
 void FormStructure::ProcessExtractedFields() {
   // Extracts the |parseable_name_| by removing common affixes from the
   // field names.
diff --git a/components/autofill/core/browser/form_structure.h b/components/autofill/core/browser/form_structure.h
index 717efaa..63a55856 100644
--- a/components/autofill/core/browser/form_structure.h
+++ b/components/autofill/core/browser/form_structure.h
@@ -388,9 +388,6 @@
   // Returns true if the form has no fields, or too many.
   bool IsMalformed() const;
 
-  // Returns true if field should be skipped when talking to Autofill server.
-  bool ShouldSkipField(const FormFieldData& field) const;
-
  private:
   friend class FormStructureTestApi;
 
diff --git a/components/autofill/core/browser/iban_manager.cc b/components/autofill/core/browser/iban_manager.cc
index bb3740e..c67cfd8f 100644
--- a/components/autofill/core/browser/iban_manager.cc
+++ b/components/autofill/core/browser/iban_manager.cc
@@ -83,10 +83,6 @@
   uma_recorder_.OnIbanSuggestionSelected();
 }
 
-base::WeakPtr<IbanManager> IbanManager::GetWeakPtr() {
-  return weak_ptr_factory_.GetWeakPtr();
-}
-
 void IbanManager::UmaRecorder::OnIbanSuggestionsShown(
     FieldGlobalId field_global_id) {
   // Log metrics related to the IBAN-related suggestions in the popup.
diff --git a/components/autofill/core/browser/iban_manager.h b/components/autofill/core/browser/iban_manager.h
index 414621c..7698def9 100644
--- a/components/autofill/core/browser/iban_manager.h
+++ b/components/autofill/core/browser/iban_manager.h
@@ -53,8 +53,6 @@
   void OnSingleFieldSuggestionSelected(const std::u16string& value,
                                        PopupItemId popup_item_id) override;
 
-  base::WeakPtr<IbanManager> GetWeakPtr();
-
  private:
   // Records metrics related to the IBAN suggestions popup.
   class UmaRecorder {
@@ -92,8 +90,6 @@
   const raw_ptr<PersonalDataManager> personal_data_manager_;
 
   UmaRecorder uma_recorder_;
-
-  base::WeakPtrFactory<IbanManager> weak_ptr_factory_{this};
 };
 
 }  // namespace autofill
diff --git a/components/autofill/core/browser/merchant_promo_code_manager.cc b/components/autofill/core/browser/merchant_promo_code_manager.cc
index 64fe47f9..91ed201 100644
--- a/components/autofill/core/browser/merchant_promo_code_manager.cc
+++ b/components/autofill/core/browser/merchant_promo_code_manager.cc
@@ -66,10 +66,6 @@
   is_off_the_record_ = is_off_the_record;
 }
 
-base::WeakPtr<MerchantPromoCodeManager> MerchantPromoCodeManager::GetWeakPtr() {
-  return weak_ptr_factory_.GetWeakPtr();
-}
-
 void MerchantPromoCodeManager::UMARecorder::OnOffersSuggestionsShown(
     const FieldGlobalId& field_global_id,
     const std::vector<const AutofillOfferData*>& offers) {
diff --git a/components/autofill/core/browser/merchant_promo_code_manager.h b/components/autofill/core/browser/merchant_promo_code_manager.h
index f367961..a13d3d3 100644
--- a/components/autofill/core/browser/merchant_promo_code_manager.h
+++ b/components/autofill/core/browser/merchant_promo_code_manager.h
@@ -55,10 +55,6 @@
   // currently operating in an off-the-record context (i.e. incognito).
   void Init(PersonalDataManager* personal_data_manager, bool is_off_the_record);
 
-  // Returns a weak pointer to the current MerchantPromoCodeManager
-  // instance.
-  base::WeakPtr<MerchantPromoCodeManager> GetWeakPtr();
-
  private:
   friend class MerchantPromoCodeManagerTest;
   FRIEND_TEST_ALL_PREFIXES(MerchantPromoCodeManagerTest,
@@ -106,8 +102,6 @@
   bool is_off_the_record_ = false;
 
   UMARecorder uma_recorder_;
-
-  base::WeakPtrFactory<MerchantPromoCodeManager> weak_ptr_factory_{this};
 };
 
 }  // namespace autofill
diff --git a/components/autofill/core/browser/metrics/payments/credit_card_save_metrics.cc b/components/autofill/core/browser/metrics/payments/credit_card_save_metrics.cc
index 2b4738aa..d83a7164 100644
--- a/components/autofill/core/browser/metrics/payments/credit_card_save_metrics.cc
+++ b/components/autofill/core/browser/metrics/payments/credit_card_save_metrics.cc
@@ -184,6 +184,15 @@
       base::StrCat({base_histogram_name, destination, show}), metric);
 }
 
+void LogCvcInfoBarMetric(AutofillMetrics::InfoBarMetric metric,
+                         bool is_uploading) {
+  CHECK_LT(metric, AutofillMetrics::InfoBarMetric::NUM_INFO_BAR_METRICS);
+  base::UmaHistogramEnumeration(
+      base::StrCat(
+          {"Autofill.CvcInfoBar", is_uploading ? ".Upload" : ".Local"}),
+      metric, AutofillMetrics::InfoBarMetric::NUM_INFO_BAR_METRICS);
+}
+
 void LogSaveCardRequestExpirationDateReasonMetric(
     SaveCardRequestExpirationDateReason reason) {
   DCHECK_LE(reason, SaveCardRequestExpirationDateReason::kMaxValue);
diff --git a/components/autofill/core/browser/metrics/payments/credit_card_save_metrics.h b/components/autofill/core/browser/metrics/payments/credit_card_save_metrics.h
index c9a31336..29e8729 100644
--- a/components/autofill/core/browser/metrics/payments/credit_card_save_metrics.h
+++ b/components/autofill/core/browser/metrics/payments/credit_card_save_metrics.h
@@ -225,6 +225,9 @@
                                   bool is_uploading,
                                   bool is_reshow);
 
+void LogCvcInfoBarMetric(AutofillMetrics::InfoBarMetric metric,
+                         bool is_uploading);
+
 void LogSaveCardRequestExpirationDateReasonMetric(
     SaveCardRequestExpirationDateReason metric);
 
diff --git a/components/autofill/core/browser/payments/autofill_save_card_delegate.cc b/components/autofill/core/browser/payments/autofill_save_card_delegate.cc
index 6cf66ba..a5d96c4 100644
--- a/components/autofill/core/browser/payments/autofill_save_card_delegate.cc
+++ b/components/autofill/core/browser/payments/autofill_save_card_delegate.cc
@@ -20,33 +20,29 @@
 AutofillSaveCardDelegate::~AutofillSaveCardDelegate() = default;
 
 void AutofillSaveCardDelegate::OnUiShown() {
-  AutofillMetrics::LogCreditCardInfoBarMetric(AutofillMetrics::INFOBAR_SHOWN,
-                                              is_for_upload(), options_);
+  LogInfoBarAction(AutofillMetrics::INFOBAR_SHOWN);
 }
 
 void AutofillSaveCardDelegate::OnUiAccepted(base::OnceClosure callback) {
   on_finished_gathering_consent_callback_ = std::move(callback);
-
-  // TODO (crbug.com/1485194): Add metrics for CVC save.
-  if (options_.card_save_type != AutofillClient::CardSaveType::kCvcSaveOnly) {
-    // Acceptance can be logged immediately if:
-    // 1. the user is accepting local save.
-    // 2. or when we don't need more info in order to upload.
-    if (!is_for_upload() ||
-        (!options_.should_request_name_from_user &&
-         !options_.should_request_expiration_date_from_user)) {
-      LogSaveCreditCardPromptResult(
-          autofill_metrics::SaveCreditCardPromptResult::kAccepted,
-          is_for_upload(), options_);
-    }
-    LogUserAction(AutofillMetrics::INFOBAR_ACCEPTED);
+  // Credit card save acceptance can be logged immediately if:
+  // 1. the user is accepting card local save.
+  // 2. or when we don't need more info in order to upload.
+  if (options_.card_save_type != AutofillClient::CardSaveType::kCvcSaveOnly &&
+      (!is_for_upload() ||
+       !(options_.should_request_name_from_user ||
+         options_.should_request_expiration_date_from_user))) {
+    LogSaveCreditCardPromptResult(
+        autofill_metrics::SaveCreditCardPromptResult::kAccepted,
+        is_for_upload(), options_);
   }
+  LogInfoBarAction(AutofillMetrics::INFOBAR_ACCEPTED);
   GatherAdditionalConsentIfApplicable(/*user_provided_details=*/{});
 }
 
 void AutofillSaveCardDelegate::OnUiUpdatedAndAccepted(
     AutofillClient::UserProvidedCardDetails user_provided_details) {
-  LogUserAction(AutofillMetrics::INFOBAR_ACCEPTED);
+  LogInfoBarAction(AutofillMetrics::INFOBAR_ACCEPTED);
   GatherAdditionalConsentIfApplicable(user_provided_details);
 }
 
@@ -54,9 +50,8 @@
   RunSaveCardPromptCallback(
       AutofillClient::SaveCardOfferUserDecision::kDeclined,
       /*user_provided_details=*/{});
-  // TODO (crbug.com/1485194): Add metrics for CVC save.
+  LogInfoBarAction(AutofillMetrics::INFOBAR_DENIED);
   if (options_.card_save_type != AutofillClient::CardSaveType::kCvcSaveOnly) {
-    LogUserAction(AutofillMetrics::INFOBAR_DENIED);
     LogSaveCreditCardPromptResult(
         autofill_metrics::SaveCreditCardPromptResult::kDenied, is_for_upload(),
         options_);
@@ -68,9 +63,8 @@
     RunSaveCardPromptCallback(
         AutofillClient::SaveCardOfferUserDecision::kIgnored,
         /*user_provided_details=*/{});
-    // TODO (crbug.com/1485194): Add metrics for CVC save.
+    LogInfoBarAction(AutofillMetrics::INFOBAR_IGNORED);
     if (options_.card_save_type != AutofillClient::CardSaveType::kCvcSaveOnly) {
-      LogUserAction(AutofillMetrics::INFOBAR_IGNORED);
       LogSaveCreditCardPromptResult(
           autofill_metrics::SaveCreditCardPromptResult::kIgnored,
           is_for_upload(), options_);
@@ -108,13 +102,18 @@
       user_provided_details);
 }
 
-void AutofillSaveCardDelegate::LogUserAction(
-    AutofillMetrics::InfoBarMetric user_action) {
-  DCHECK(!had_user_interaction_);
-
-  AutofillMetrics::LogCreditCardInfoBarMetric(user_action, is_for_upload(),
-                                              options_);
-  had_user_interaction_ = true;
+void AutofillSaveCardDelegate::LogInfoBarAction(
+    AutofillMetrics::InfoBarMetric action) {
+  CHECK(!had_user_interaction_);
+  if (options_.card_save_type == AutofillClient::CardSaveType::kCvcSaveOnly) {
+    autofill_metrics::LogCvcInfoBarMetric(action, is_for_upload());
+  } else {
+    AutofillMetrics::LogCreditCardInfoBarMetric(action, is_for_upload(),
+                                                options_);
+  }
+  if (action != AutofillMetrics::INFOBAR_SHOWN) {
+    had_user_interaction_ = true;
+  }
 }
 
 }  // namespace autofill
diff --git a/components/autofill/core/browser/payments/autofill_save_card_delegate.h b/components/autofill/core/browser/payments/autofill_save_card_delegate.h
index 8bf738d..03bf34d 100644
--- a/components/autofill/core/browser/payments/autofill_save_card_delegate.h
+++ b/components/autofill/core/browser/payments/autofill_save_card_delegate.h
@@ -67,7 +67,7 @@
   virtual void GatherAdditionalConsentIfApplicable(
       AutofillClient::UserProvidedCardDetails user_provided_details);
 
-  void LogUserAction(AutofillMetrics::InfoBarMetric user_action);
+  void LogInfoBarAction(AutofillMetrics::InfoBarMetric user_action);
 
   // If the cardholder name is missing, request the name from the user before
   // saving the card. If the expiration date is missing, request the missing
diff --git a/components/autofill/core/browser/payments/autofill_save_card_delegate_unittest.cc b/components/autofill/core/browser/payments/autofill_save_card_delegate_unittest.cc
index 5f72381..c7e5054 100644
--- a/components/autofill/core/browser/payments/autofill_save_card_delegate_unittest.cc
+++ b/components/autofill/core/browser/payments/autofill_save_card_delegate_unittest.cc
@@ -22,24 +22,33 @@
 using UploadCallbackArgs =
     std::pair<SaveCardOfferUserDecision, UserProvidedCardDetails>;
 
-const std::string userActionMetricNameLocal =
+const std::string kUserActionMetricNameLocal =
     "Autofill.CreditCardInfoBar.Local";
-const std::string userActionMetricNameServer =
+const std::string kUserActionMetricNameServer =
     "Autofill.CreditCardInfoBar.Server";
 
-const std::string promptResultMetricNameLocal =
+const std::string kPromptResultMetricNameLocal =
     "Autofill.CreditCardSaveFlowResult.Local";
-const std::string promptResultMetricNameServer =
+const std::string kPromptResultMetricNameServer =
     "Autofill.CreditCardSaveFlowResult.Server";
 
-// TODO (crbug.com/1485194): Add tests for CVC save.
-class AutofillSaveCardDelegateTest : public ::testing::Test {
+const std::string kUserActionCvcMetricNameLocal = "Autofill.CvcInfoBar.Local";
+const std::string kUserActionCvcMetricNameServer = "Autofill.CvcInfoBar.Upload";
+
+// Params of AutofillSaveCardDelegateTest:
+// -- bool is_upload: Indicates whether the card should be saved locally or
+//                    uploaded to server.
+class AutofillSaveCardDelegateTest : public ::testing::Test,
+                                     public testing::WithParamInterface<bool> {
  protected:
   void LocalCallback(SaveCardOfferUserDecision decision);
   AutofillClient::LocalSaveCardPromptCallback MakeLocalCallback();
   void UploadCallback(SaveCardOfferUserDecision decision,
                       const UserProvidedCardDetails& user_card_details);
   AutofillClient::UploadSaveCardPromptCallback MakeUploadCallback();
+  autofill::AutofillSaveCardDelegate CreateDelegate(
+      AutofillClient::SaveCreditCardOptions options = {});
+  bool IsUpload() const { return GetParam(); }
 
   std::vector<SaveCardOfferUserDecision> local_offer_decisions_;
   std::vector<UploadCallbackArgs> upload_offer_decisions_;
@@ -70,6 +79,14 @@
       base::Unretained(this));  // Test function does not outlive test fixture.
 }
 
+autofill::AutofillSaveCardDelegate AutofillSaveCardDelegateTest::CreateDelegate(
+    AutofillClient::SaveCreditCardOptions options) {
+  if (IsUpload()) {
+    return AutofillSaveCardDelegate(MakeUploadCallback(), options);
+  }
+  return AutofillSaveCardDelegate(MakeLocalCallback(), options);
+}
+
 // Matcher of UserProvidedCardDetails matching equal fields.
 MATCHER_P(EqualToUserProvidedCardDetails, details, "") {
   return details.cardholder_name == arg.cardholder_name &&
@@ -88,120 +105,93 @@
                      EqualToUserProvidedCardDetails(details)));
 }
 
-TEST_F(AutofillSaveCardDelegateTest,
-       OnUiAcceptedWithCallbackArgumentRunsCallback) {
-  auto delegate = AutofillSaveCardDelegate(MakeLocalCallback(),
-                                           /*options=*/{});
+INSTANTIATE_TEST_SUITE_P(All, AutofillSaveCardDelegateTest, testing::Bool());
 
+TEST_P(AutofillSaveCardDelegateTest,
+       OnUiAcceptedWithCallbackArgumentRunsCallback) {
   base::MockOnceClosure mock_finish_gathering_consent_callback;
   EXPECT_CALL(mock_finish_gathering_consent_callback, Run).Times(1);
-  delegate.OnUiAccepted(mock_finish_gathering_consent_callback.Get());
+  CreateDelegate().OnUiAccepted(mock_finish_gathering_consent_callback.Get());
 }
 
-TEST_F(AutofillSaveCardDelegateTest, OnUiAcceptedRunsLocalCallback) {
-  auto delegate = AutofillSaveCardDelegate(MakeLocalCallback(),
-                                           /*options=*/{});
+TEST_P(AutofillSaveCardDelegateTest, OnUiAcceptedRunsCallback) {
+  CreateDelegate().OnUiAccepted();
 
-  delegate.OnUiAccepted();
-
-  EXPECT_THAT(local_offer_decisions_,
-              testing::Contains(SaveCardOfferUserDecision::kAccepted));
+  if (IsUpload()) {
+    EXPECT_THAT(upload_offer_decisions_,
+                testing::Contains(EqualToUploadCallbackArgs(
+                    SaveCardOfferUserDecision::kAccepted, {})));
+  } else {
+    EXPECT_THAT(local_offer_decisions_,
+                testing::Contains(SaveCardOfferUserDecision::kAccepted));
+  }
 }
 
-TEST_F(AutofillSaveCardDelegateTest, OnUiAcceptedRunsUploadCallback) {
-  auto delegate = AutofillSaveCardDelegate(MakeUploadCallback(),
-                                           /*options=*/{});
-
-  delegate.OnUiAccepted();
-
-  EXPECT_THAT(upload_offer_decisions_,
-              testing::Contains(EqualToUploadCallbackArgs(
-                  SaveCardOfferUserDecision::kAccepted, {})));
-}
-
-TEST_F(AutofillSaveCardDelegateTest, OnUiAcceptedLogsPromptResult) {
-  auto delegate = AutofillSaveCardDelegate(MakeLocalCallback(),
-                                           /*options=*/{});
+TEST_P(AutofillSaveCardDelegateTest, OnUiAcceptedLogsPromptResult) {
   base::HistogramTester histogram_tester;
 
-  delegate.OnUiAccepted();
+  CreateDelegate().OnUiAccepted();
 
-  histogram_tester.ExpectUniqueSample(promptResultMetricNameLocal,
-                                      SaveCreditCardPromptResult::kAccepted, 1);
+  histogram_tester.ExpectUniqueSample(
+      IsUpload() ? kPromptResultMetricNameServer : kPromptResultMetricNameLocal,
+      SaveCreditCardPromptResult::kAccepted, 1);
 }
 
-TEST_F(AutofillSaveCardDelegateTest,
-       OnUiAcceptedLogsPromptResultWhenUploadSave) {
-  auto delegate = AutofillSaveCardDelegate(MakeUploadCallback(),
-                                           /*options=*/{});
-  base::HistogramTester histogram_tester;
-
-  delegate.OnUiAccepted();
-
-  histogram_tester.ExpectBucketCount(promptResultMetricNameServer,
-                                     SaveCreditCardPromptResult::kAccepted, 1);
-}
-
-TEST_F(
+TEST_P(
     AutofillSaveCardDelegateTest,
     OnUiAcceptedDoesNotLogPromptResultWhenUploadSaveRequestingExpirationDate) {
-  auto delegate = AutofillSaveCardDelegate(
-      MakeUploadCallback(),
-      /*options=*/{.should_request_expiration_date_from_user = true});
+  // Upload-only feature, return early for local save.
+  if (!IsUpload()) {
+    return;
+  }
+
   base::HistogramTester histogram_tester;
 
-  delegate.OnUiAccepted();
+  CreateDelegate(
+      /*options=*/{.should_request_expiration_date_from_user = true})
+      .OnUiAccepted();
 
-  histogram_tester.ExpectBucketCount(promptResultMetricNameServer,
+  histogram_tester.ExpectBucketCount(kPromptResultMetricNameServer,
                                      SaveCreditCardPromptResult::kAccepted, 0);
   histogram_tester.ExpectUniqueSample(
       "Autofill.CreditCardSaveFlowResult.Server.RequestingExpirationDate",
       SaveCreditCardPromptResult::kAccepted, 0);
 }
 
-TEST_F(AutofillSaveCardDelegateTest,
+TEST_P(AutofillSaveCardDelegateTest,
        OnUiAcceptedDoesNotLogPromptResultWhenUploadSaveRequestingName) {
-  auto delegate = AutofillSaveCardDelegate(
-      MakeUploadCallback(),
-      /*options=*/{.should_request_name_from_user = true});
+  // Upload-only feature, return early for local save.
+  if (!IsUpload()) {
+    return;
+  }
+
   base::HistogramTester histogram_tester;
 
-  delegate.OnUiAccepted();
+  CreateDelegate(/*options=*/{.should_request_name_from_user = true})
+      .OnUiAccepted();
 
-  histogram_tester.ExpectBucketCount(promptResultMetricNameServer,
+  histogram_tester.ExpectBucketCount(kPromptResultMetricNameServer,
                                      SaveCreditCardPromptResult::kAccepted, 0);
   histogram_tester.ExpectUniqueSample(
       "Autofill.CreditCardSaveFlowResult.Server.RequestingCardholderName",
       SaveCreditCardPromptResult::kAccepted, 0);
 }
 
-TEST_F(AutofillSaveCardDelegateTest, OnUiAcceptedLogsUserActionWhenLocalSave) {
-  auto delegate = AutofillSaveCardDelegate(MakeLocalCallback(),
-                                           /*options=*/{});
+TEST_P(AutofillSaveCardDelegateTest, OnUiAcceptedLogsUserAction) {
   base::HistogramTester histogram_tester;
-
-  delegate.OnUiAccepted();
-
-  histogram_tester.ExpectUniqueSample(userActionMetricNameLocal,
-                                      InfoBarMetric::INFOBAR_ACCEPTED, 1);
+  CreateDelegate().OnUiAccepted();
+  histogram_tester.ExpectUniqueSample(
+      IsUpload() ? kUserActionMetricNameServer : kUserActionMetricNameLocal,
+      InfoBarMetric::INFOBAR_ACCEPTED, 1);
 }
 
-TEST_F(AutofillSaveCardDelegateTest, OnUiAcceptedLogsUserActionWhenUploadSave) {
-  auto delegate = AutofillSaveCardDelegate(MakeUploadCallback(),
-                                           /*options=*/{});
-  base::HistogramTester histogram_tester;
+TEST_P(AutofillSaveCardDelegateTest, OnUiUpdatedAndAcceptedRunsUploadCallback) {
+  // Upload-only feature, return early for local save.
+  if (!IsUpload()) {
+    return;
+  }
 
-  delegate.OnUiAccepted();
-
-  histogram_tester.ExpectUniqueSample(userActionMetricNameServer,
-                                      InfoBarMetric::INFOBAR_ACCEPTED, 1);
-}
-
-TEST_F(AutofillSaveCardDelegateTest, OnUiUpdatedAndAcceptedRunsUploadCallback) {
-  auto delegate = AutofillSaveCardDelegate(MakeUploadCallback(),
-                                           /*options=*/{});
-
-  delegate.OnUiUpdatedAndAccepted(
+  CreateDelegate().OnUiUpdatedAndAccepted(
       /*user_provided_details=*/{.cardholder_name = u"Test"});
 
   EXPECT_THAT(
@@ -210,81 +200,128 @@
           SaveCardOfferUserDecision::kAccepted, {.cardholder_name = u"Test"})));
 }
 
-TEST_F(AutofillSaveCardDelegateTest, OnUiUpdatedAndAcceptedLogsUserAction) {
-  auto delegate = AutofillSaveCardDelegate(MakeUploadCallback(),
-                                           /*options=*/{});
+TEST_P(AutofillSaveCardDelegateTest, OnUiUpdatedAndAcceptedLogsUserAction) {
+  // Upload-only feature, return early for local save.
+  if (!IsUpload()) {
+    return;
+  }
+
   base::HistogramTester histogram_tester;
 
-  delegate.OnUiUpdatedAndAccepted(/*user_provided_details=*/{});
+  CreateDelegate().OnUiUpdatedAndAccepted(/*user_provided_details=*/{});
 
-  histogram_tester.ExpectUniqueSample(userActionMetricNameServer,
+  histogram_tester.ExpectUniqueSample(kUserActionMetricNameServer,
                                       InfoBarMetric::INFOBAR_ACCEPTED, 1);
 }
 
-TEST_F(AutofillSaveCardDelegateTest, OnUiCanceledRunsUploadCallback) {
-  auto delegate = AutofillSaveCardDelegate(MakeUploadCallback(),
-                                           /*options=*/{});
+TEST_P(AutofillSaveCardDelegateTest, OnUiCanceledRunsCallback) {
+  CreateDelegate().OnUiCanceled();
 
-  delegate.OnUiCanceled();
-
-  EXPECT_THAT(upload_offer_decisions_,
-              testing::Contains(EqualToUploadCallbackArgs(
-                  SaveCardOfferUserDecision::kDeclined, /*details=*/{})));
+  if (IsUpload()) {
+    EXPECT_THAT(upload_offer_decisions_,
+                testing::Contains(EqualToUploadCallbackArgs(
+                    SaveCardOfferUserDecision::kDeclined, {})));
+  } else {
+    EXPECT_THAT(local_offer_decisions_,
+                testing::Contains(SaveCardOfferUserDecision::kDeclined));
+  }
 }
 
-TEST_F(AutofillSaveCardDelegateTest, OnUiCanceledLogsUserAction) {
-  auto delegate = AutofillSaveCardDelegate(MakeUploadCallback(),
-                                           /*options=*/{});
+TEST_P(AutofillSaveCardDelegateTest, OnUiCanceledLogsUserAction) {
   base::HistogramTester histogram_tester;
 
-  delegate.OnUiCanceled();
+  CreateDelegate().OnUiCanceled();
 
-  histogram_tester.ExpectUniqueSample(userActionMetricNameServer,
-                                      InfoBarMetric::INFOBAR_DENIED, 1);
+  histogram_tester.ExpectUniqueSample(
+      IsUpload() ? kUserActionMetricNameServer : kUserActionMetricNameLocal,
+      InfoBarMetric::INFOBAR_DENIED, 1);
 }
 
-TEST_F(AutofillSaveCardDelegateTest, OnUiCanceledLogsPromptResult) {
-  auto delegate = AutofillSaveCardDelegate(MakeUploadCallback(),
-                                           /*options=*/{});
+TEST_P(AutofillSaveCardDelegateTest, OnUiCanceledLogsPromptResult) {
   base::HistogramTester histogram_tester;
 
-  delegate.OnUiCanceled();
+  CreateDelegate().OnUiCanceled();
 
-  histogram_tester.ExpectUniqueSample(promptResultMetricNameServer,
-                                      SaveCreditCardPromptResult::kDenied, 1);
+  histogram_tester.ExpectUniqueSample(
+      IsUpload() ? kPromptResultMetricNameServer : kPromptResultMetricNameLocal,
+      SaveCreditCardPromptResult::kDenied, 1);
 }
 
-TEST_F(AutofillSaveCardDelegateTest, OnUiIgnoredRunsUploadCallback) {
-  auto delegate = AutofillSaveCardDelegate(MakeUploadCallback(),
-                                           /*options=*/{});
+TEST_P(AutofillSaveCardDelegateTest, OnUiIgnoredRunsCallback) {
+  CreateDelegate().OnUiIgnored();
 
+  if (IsUpload()) {
+    EXPECT_THAT(upload_offer_decisions_,
+                testing::Contains(EqualToUploadCallbackArgs(
+                    SaveCardOfferUserDecision::kIgnored, {})));
+  } else {
+    EXPECT_THAT(local_offer_decisions_,
+                testing::Contains(SaveCardOfferUserDecision::kIgnored));
+  }
+}
+
+TEST_P(AutofillSaveCardDelegateTest, OnUiIgnoredLogsUserAction) {
+  base::HistogramTester histogram_tester;
+
+  CreateDelegate().OnUiIgnored();
+
+  histogram_tester.ExpectUniqueSample(
+      IsUpload() ? kUserActionMetricNameServer : kUserActionMetricNameLocal,
+      InfoBarMetric::INFOBAR_IGNORED, 1);
+}
+
+TEST_P(AutofillSaveCardDelegateTest, OnUiIgnoredLogsPromptResult) {
+  base::HistogramTester histogram_tester;
+
+  CreateDelegate().OnUiIgnored();
+
+  histogram_tester.ExpectUniqueSample(
+      IsUpload() ? kPromptResultMetricNameServer : kPromptResultMetricNameLocal,
+      SaveCreditCardPromptResult::kIgnored, 1);
+}
+
+TEST_P(AutofillSaveCardDelegateTest, MetricsOnUiShownWhenCvcSave) {
+  auto delegate = CreateDelegate(/*options=*/{
+      .card_save_type = AutofillClient::CardSaveType::kCvcSaveOnly});
+  base::HistogramTester histogram_tester;
+  delegate.OnUiShown();
+  histogram_tester.ExpectUniqueSample(IsUpload()
+                                          ? kUserActionCvcMetricNameServer
+                                          : kUserActionCvcMetricNameLocal,
+                                      AutofillMetrics::INFOBAR_SHOWN, 1);
+}
+
+TEST_P(AutofillSaveCardDelegateTest, MetricsOnUiAcceptedWhenCvcSave) {
+  auto delegate = CreateDelegate(/*options=*/{
+      .card_save_type = AutofillClient::CardSaveType::kCvcSaveOnly});
+  base::HistogramTester histogram_tester;
+  delegate.OnUiAccepted();
+  histogram_tester.ExpectUniqueSample(IsUpload()
+                                          ? kUserActionCvcMetricNameServer
+                                          : kUserActionCvcMetricNameLocal,
+                                      InfoBarMetric::INFOBAR_ACCEPTED, 1);
+}
+
+TEST_P(AutofillSaveCardDelegateTest, MetricsOnUiIgnoredWhenCvcSave) {
+  auto delegate = CreateDelegate(/*options=*/{
+      .card_save_type = AutofillClient::CardSaveType::kCvcSaveOnly});
+  base::HistogramTester histogram_tester;
   delegate.OnUiIgnored();
-
-  EXPECT_THAT(upload_offer_decisions_,
-              testing::Contains(EqualToUploadCallbackArgs(
-                  SaveCardOfferUserDecision::kIgnored, /*details=*/{})));
-}
-
-TEST_F(AutofillSaveCardDelegateTest, OnUiIgnoredLogsUserAction) {
-  auto delegate = AutofillSaveCardDelegate(MakeUploadCallback(),
-                                           /*options=*/{});
-  base::HistogramTester histogram_tester;
-
-  delegate.OnUiIgnored();
-
-  histogram_tester.ExpectUniqueSample(userActionMetricNameServer,
+  histogram_tester.ExpectUniqueSample(IsUpload()
+                                          ? kUserActionCvcMetricNameServer
+                                          : kUserActionCvcMetricNameLocal,
                                       InfoBarMetric::INFOBAR_IGNORED, 1);
 }
 
-TEST_F(AutofillSaveCardDelegateTest, OnUiIgnoredLogsPromptResult) {
-  auto delegate = AutofillSaveCardDelegate(MakeUploadCallback(),
-                                           /*options=*/{});
+TEST_P(AutofillSaveCardDelegateTest, MetricsOnUiCanceledCvcSave) {
+  auto delegate = CreateDelegate(/*options=*/{
+      .card_save_type = AutofillClient::CardSaveType::kCvcSaveOnly});
   base::HistogramTester histogram_tester;
-
-  delegate.OnUiIgnored();
-
-  histogram_tester.ExpectUniqueSample(promptResultMetricNameServer,
-                                      SaveCreditCardPromptResult::kIgnored, 1);
+  delegate.OnUiCanceled();
+  histogram_tester.ExpectUniqueSample(IsUpload()
+                                          ? kUserActionCvcMetricNameServer
+                                          : kUserActionCvcMetricNameLocal,
+                                      InfoBarMetric::INFOBAR_DENIED, 1);
 }
 
 }  // namespace autofill
diff --git a/components/autofill/core/browser/single_field_form_fill_router.cc b/components/autofill/core/browser/single_field_form_fill_router.cc
index f0f7bc3..9bab63fd 100644
--- a/components/autofill/core/browser/single_field_form_fill_router.cc
+++ b/components/autofill/core/browser/single_field_form_fill_router.cc
@@ -4,6 +4,7 @@
 
 #include "components/autofill/core/browser/single_field_form_fill_router.h"
 
+#include "base/check_deref.h"
 #include "components/autofill/core/browser/form_structure.h"
 #include "components/autofill/core/browser/suggestions_context.h"
 
@@ -13,12 +14,9 @@
     AutocompleteHistoryManager* autocomplete_history_manager,
     IbanManager* iban_manager,
     MerchantPromoCodeManager* merchant_promo_code_manager)
-    : autocomplete_history_manager_(autocomplete_history_manager->GetWeakPtr()),
-      iban_manager_(iban_manager ? iban_manager->GetWeakPtr() : nullptr),
-      merchant_promo_code_manager_(
-          merchant_promo_code_manager
-              ? merchant_promo_code_manager->GetWeakPtr()
-              : nullptr) {}
+    : autocomplete_history_manager_(CHECK_DEREF(autocomplete_history_manager)),
+      iban_manager_(iban_manager),
+      merchant_promo_code_manager_(merchant_promo_code_manager) {}
 
 SingleFieldFormFillRouter::~SingleFieldFormFillRouter() = default;
 
@@ -85,9 +83,7 @@
     bool is_autocomplete_enabled) {}
 
 void SingleFieldFormFillRouter::CancelPendingQueries() {
-  if (autocomplete_history_manager_) {
-    autocomplete_history_manager_->CancelPendingQueries();
-  }
+  autocomplete_history_manager_->CancelPendingQueries();
   if (merchant_promo_code_manager_) {
     merchant_promo_code_manager_->CancelPendingQueries();
   }
diff --git a/components/autofill/core/browser/single_field_form_fill_router.h b/components/autofill/core/browser/single_field_form_fill_router.h
index 3517a449..16a4c7c 100644
--- a/components/autofill/core/browser/single_field_form_fill_router.h
+++ b/components/autofill/core/browser/single_field_form_fill_router.h
@@ -5,7 +5,8 @@
 #ifndef COMPONENTS_AUTOFILL_CORE_BROWSER_SINGLE_FIELD_FORM_FILL_ROUTER_H_
 #define COMPONENTS_AUTOFILL_CORE_BROWSER_SINGLE_FIELD_FORM_FILL_ROUTER_H_
 
-#include "base/memory/weak_ptr.h"
+#include "base/memory/raw_ptr.h"
+#include "base/memory/raw_ref.h"
 #include "components/autofill/core/browser/autocomplete_history_manager.h"
 #include "components/autofill/core/browser/iban_manager.h"
 #include "components/autofill/core/browser/merchant_promo_code_manager.h"
@@ -60,15 +61,21 @@
                                        PopupItemId popup_item_id) override;
 
  private:
-  // Handles autocompleting single fields.
-  base::WeakPtr<AutocompleteHistoryManager> autocomplete_history_manager_;
+  // Handles autocompleting single fields. The `AutocompleteHistoryManager` is
+  // a KeyedService that outlives the `SingleFieldFormFillRouter`.
+  // TODO(crbug.com/1501199): Once WebView doesn't have an
+  // AutocompleteHistoryManager anymore, this should become a raw_ptr instead.
+  raw_ref<AutocompleteHistoryManager> autocomplete_history_manager_;
 
-  // Handles autofilling IBAN fields (can be null for unsupported platforms).
-  base::WeakPtr<IbanManager> iban_manager_;
+  // Handles autofilling IBAN fields. Can be null on unsupported platforms, but
+  // otherwise outlives the `SingleFieldFormFillRouter`, since it is a
+  // KeyedService.
+  raw_ptr<IbanManager> iban_manager_;
 
-  // Handles autofilling merchant promo code fields (can be null for unsupported
-  // platforms).
-  base::WeakPtr<MerchantPromoCodeManager> merchant_promo_code_manager_;
+  // Handles autofilling merchant promo code fields. Can be null on unsupported
+  // platforms, but otherwise outlives the `SingleFieldFormFillRouter`, since it
+  // is a KeyedService.
+  raw_ptr<MerchantPromoCodeManager> merchant_promo_code_manager_;
 };
 
 }  // namespace autofill
diff --git a/components/autofill/core/browser/single_field_form_fill_router_unittest.cc b/components/autofill/core/browser/single_field_form_fill_router_unittest.cc
index 8581140..59d4326 100644
--- a/components/autofill/core/browser/single_field_form_fill_router_unittest.cc
+++ b/components/autofill/core/browser/single_field_form_fill_router_unittest.cc
@@ -36,27 +36,20 @@
 
 class SingleFieldFormFillRouterTest : public testing::Test {
  protected:
-  SingleFieldFormFillRouterTest() {
+  SingleFieldFormFillRouterTest()
+      : iban_manager_(&personal_data_manager_),
+        single_field_form_fill_router_(&autocomplete_history_manager_,
+                                       &iban_manager_,
+                                       &merchant_promo_code_manager_) {
     prefs_ = test::PrefServiceForTesting();
 
     // Mock such that we don't trigger the cleanup.
     prefs_->SetInteger(prefs::kAutocompleteLastVersionRetentionPolicy,
                        CHROME_VERSION_MAJOR);
-    personal_data_manager_ = std::make_unique<TestPersonalDataManager>();
     web_data_service_ = base::MakeRefCounted<MockAutofillWebDataService>();
-    autocomplete_history_manager_ =
-        std::make_unique<MockAutocompleteHistoryManager>();
-    autocomplete_history_manager_->Init(web_data_service_, prefs_.get(), false);
-    iban_manager_ =
-        std::make_unique<MockIbanManager>(personal_data_manager_.get());
-    merchant_promo_code_manager_ =
-        std::make_unique<MockMerchantPromoCodeManager>();
-    merchant_promo_code_manager_->Init(personal_data_manager_.get(),
-                                       /*is_off_the_record=*/false);
-    single_field_form_fill_router_ =
-        std::make_unique<SingleFieldFormFillRouter>(
-            autocomplete_history_manager_.get(), iban_manager_.get(),
-            merchant_promo_code_manager_.get());
+    autocomplete_history_manager_.Init(web_data_service_, prefs_.get(), false);
+    merchant_promo_code_manager_.Init(&personal_data_manager_,
+                                      /*is_off_the_record=*/false);
     test_field_ =
         test::CreateTestFormField(/*label=*/"", "Some Field Name", "SomePrefix",
                                   FormControlType::kInputText);
@@ -65,13 +58,13 @@
   base::test::SingleThreadTaskEnvironment task_environment_;
   test::AutofillUnitTestEnvironment autofill_test_environment_;
   TestAutofillClient autofill_client_;
-  std::unique_ptr<SingleFieldFormFillRouter> single_field_form_fill_router_;
-  std::unique_ptr<TestPersonalDataManager> personal_data_manager_;
+  TestPersonalDataManager personal_data_manager_;
   scoped_refptr<MockAutofillWebDataService> web_data_service_;
   std::unique_ptr<PrefService> prefs_;
-  std::unique_ptr<MockAutocompleteHistoryManager> autocomplete_history_manager_;
-  std::unique_ptr<MockIbanManager> iban_manager_;
-  std::unique_ptr<MockMerchantPromoCodeManager> merchant_promo_code_manager_;
+  MockAutocompleteHistoryManager autocomplete_history_manager_;
+  MockIbanManager iban_manager_;
+  MockMerchantPromoCodeManager merchant_promo_code_manager_;
+  SingleFieldFormFillRouter single_field_form_fill_router_;
   FormFieldData test_field_;
 };
 
@@ -91,12 +84,11 @@
     // turned off for the given test field and
     // AutocompleteHistoryManager::OnGetSingleFieldSuggestions() should return
     // false.
-    EXPECT_CALL(*autocomplete_history_manager_, OnGetSingleFieldSuggestions)
-        .Times(1)
+    EXPECT_CALL(autocomplete_history_manager_, OnGetSingleFieldSuggestions)
         .WillOnce(testing::Return(test_field_.should_autocomplete));
 
     EXPECT_EQ(test_field_.should_autocomplete,
-              single_field_form_fill_router_->OnGetSingleFieldSuggestions(
+              single_field_form_fill_router_.OnGetSingleFieldSuggestions(
                   test_field_, autofill_client_, base::DoNothing(),
                   /*context=*/SuggestionsContext()));
   }
@@ -131,14 +123,14 @@
 
   std::vector<FormFieldData> submitted_autocomplete_fields;
   bool autocomplete_fields_is_autocomplete_enabled = false;
-  EXPECT_CALL(*autocomplete_history_manager_, OnWillSubmitFormWithFields(_, _))
+  EXPECT_CALL(autocomplete_history_manager_, OnWillSubmitFormWithFields(_, _))
       .WillOnce(
           (DoAll(SaveArg<0>(&submitted_autocomplete_fields),
                  SaveArg<1>(&autocomplete_fields_is_autocomplete_enabled))));
 
   std::vector<FormFieldData> submitted_merchant_promo_code_fields;
   bool merchant_promo_code_fields_is_autocomplete_enabled = false;
-  EXPECT_CALL(*merchant_promo_code_manager_, OnWillSubmitFormWithFields(_, _))
+  EXPECT_CALL(merchant_promo_code_manager_, OnWillSubmitFormWithFields(_, _))
       .WillOnce((DoAll(
           SaveArg<0>(&submitted_merchant_promo_code_fields),
           SaveArg<1>(&merchant_promo_code_fields_is_autocomplete_enabled))));
@@ -146,12 +138,12 @@
 #if !BUILDFLAG(IS_ANDROID) && !BUILDFLAG(IS_IOS)
   std::vector<FormFieldData> submitted_iban_fields;
   bool iban_fields_is_autocomplete_enabled = false;
-  EXPECT_CALL(*iban_manager_, OnWillSubmitFormWithFields(_, _))
+  EXPECT_CALL(iban_manager_, OnWillSubmitFormWithFields(_, _))
       .WillOnce((DoAll(SaveArg<0>(&submitted_iban_fields),
                        SaveArg<1>(&iban_fields_is_autocomplete_enabled))));
 #endif  // !BUILDFLAG(IS_ANDROID) && !BUILDFLAG(IS_IOS)
 
-  single_field_form_fill_router_->OnWillSubmitForm(
+  single_field_form_fill_router_.OnWillSubmitForm(
       form_data, &form_structure, /*is_autocomplete_enabled=*/true);
 
   EXPECT_TRUE(submitted_autocomplete_fields.size() ==
@@ -172,21 +164,21 @@
 // CancelPendingQueries call.
 TEST_F(SingleFieldFormFillRouterTest,
        RouteToAllSingleFieldFormFillers_CancelPendingQueries) {
-  EXPECT_CALL(*autocomplete_history_manager_, CancelPendingQueries);
-  EXPECT_CALL(*merchant_promo_code_manager_, CancelPendingQueries);
-  EXPECT_CALL(*iban_manager_, CancelPendingQueries);
+  EXPECT_CALL(autocomplete_history_manager_, CancelPendingQueries);
+  EXPECT_CALL(merchant_promo_code_manager_, CancelPendingQueries);
+  EXPECT_CALL(iban_manager_, CancelPendingQueries);
 
-  single_field_form_fill_router_->CancelPendingQueries();
+  single_field_form_fill_router_.CancelPendingQueries();
 }
 
 // Ensure that the router routes to AutocompleteHistoryManager for this
 // OnRemoveCurrentSingleFieldSuggestion call.
 TEST_F(SingleFieldFormFillRouterTest,
        RouteToAutocompleteHistoryManager_OnRemoveCurrentSingleFieldSuggestion) {
-  EXPECT_CALL(*autocomplete_history_manager_,
+  EXPECT_CALL(autocomplete_history_manager_,
               OnRemoveCurrentSingleFieldSuggestion);
 
-  single_field_form_fill_router_->OnRemoveCurrentSingleFieldSuggestion(
+  single_field_form_fill_router_.OnRemoveCurrentSingleFieldSuggestion(
       /*field_name=*/u"Field Name", /*value=*/u"Value",
       PopupItemId::kAutocompleteEntry);
 }
@@ -195,9 +187,9 @@
 // OnSingleFieldSuggestionSelected call.
 TEST_F(SingleFieldFormFillRouterTest,
        RouteToAutocompleteHistoryManager_OnSingleFieldSuggestionSelected) {
-  EXPECT_CALL(*autocomplete_history_manager_, OnSingleFieldSuggestionSelected);
+  EXPECT_CALL(autocomplete_history_manager_, OnSingleFieldSuggestionSelected);
 
-  single_field_form_fill_router_->OnSingleFieldSuggestionSelected(
+  single_field_form_fill_router_.OnSingleFieldSuggestionSelected(
       /*value=*/u"Value", PopupItemId::kAutocompleteEntry);
 }
 
@@ -214,11 +206,10 @@
     // autofill, so MerchantPromoCodeManager::OnGetSingleFieldSuggestions()
     // should always be called since the given test field is a merchant promo
     // code field.
-    EXPECT_CALL(*merchant_promo_code_manager_, OnGetSingleFieldSuggestions)
-        .Times(1)
+    EXPECT_CALL(merchant_promo_code_manager_, OnGetSingleFieldSuggestions)
         .WillOnce(testing::Return(true));
 
-    EXPECT_TRUE(single_field_form_fill_router_->OnGetSingleFieldSuggestions(
+    EXPECT_TRUE(single_field_form_fill_router_.OnGetSingleFieldSuggestions(
         test_field_, autofill_client_, base::DoNothing(),
         SuggestionsContext()));
   }
@@ -227,20 +218,19 @@
 // Ensure that the router routes to AutocompleteHistoryManager for this
 // OnGetSingleFieldSuggestions call if MerchantPromoCodeManager is not present.
 TEST_F(SingleFieldFormFillRouterTest, MerchantPromoCodeManagerNotPresent) {
-  // This also invalidates the WeakPtr that the `single_field_form_fill_router_`
-  // holds on the promo code manager.
-  merchant_promo_code_manager_.reset();
+  SingleFieldFormFillRouter router(&autocomplete_history_manager_,
+                                   &iban_manager_,
+                                   /*merchant_promo_code_manager=*/nullptr);
 
   // As the merchant promo code manager is gone, we should call
   // AutocompleteHistoryManager::OnGetSingleFieldSuggestions().
-  EXPECT_CALL(*autocomplete_history_manager_, OnGetSingleFieldSuggestions)
-      .Times(1)
+  EXPECT_CALL(autocomplete_history_manager_, OnGetSingleFieldSuggestions)
       .WillOnce(testing::Return(true));
 
   // As `test_field_.should_autocomplete` is true, this was a valid field for
   // autocomplete. SingleFieldFormFillRouter::OnGetSingleFieldSuggestions()
   // should return true.
-  EXPECT_TRUE(single_field_form_fill_router_->OnGetSingleFieldSuggestions(
+  EXPECT_TRUE(router.OnGetSingleFieldSuggestions(
       test_field_, autofill_client_, base::DoNothing(), SuggestionsContext()));
 }
 
@@ -250,21 +240,19 @@
 TEST_F(SingleFieldFormFillRouterTest, MerchantPromoCodeManagerReturnedFalse) {
   // Mock MerchantPromoCodeManager::OnGetSingleFieldSuggestions() returning
   // false.
-  EXPECT_CALL(*merchant_promo_code_manager_, OnGetSingleFieldSuggestions)
-      .Times(1)
+  EXPECT_CALL(merchant_promo_code_manager_, OnGetSingleFieldSuggestions)
       .WillOnce(testing::Return(false));
 
   // Since MerchantPromoCodeManager::OnGetSingleFieldSuggestions() returned
   // false, we should call
   // AutocompleteHistoryManager::OnGetSingleFieldSuggestions().
-  EXPECT_CALL(*autocomplete_history_manager_, OnGetSingleFieldSuggestions)
-      .Times(1)
+  EXPECT_CALL(autocomplete_history_manager_, OnGetSingleFieldSuggestions)
       .WillOnce(testing::Return(true));
 
   // As `test_field_.should_autocomplete` is true, this was a valid field for
   // autocomplete. SingleFieldFormFillRouter::OnGetSingleFieldSuggestions()
   // should return true.
-  EXPECT_TRUE(single_field_form_fill_router_->OnGetSingleFieldSuggestions(
+  EXPECT_TRUE(single_field_form_fill_router_.OnGetSingleFieldSuggestions(
       test_field_, autofill_client_, base::DoNothing(), SuggestionsContext()));
 }
 
@@ -272,10 +260,10 @@
 // OnRemoveCurrentSingleFieldSuggestion call.
 TEST_F(SingleFieldFormFillRouterTest,
        RouteToMerchantPromoCodeManager_OnRemoveCurrentSingleFieldSuggestion) {
-  EXPECT_CALL(*merchant_promo_code_manager_,
+  EXPECT_CALL(merchant_promo_code_manager_,
               OnRemoveCurrentSingleFieldSuggestion);
 
-  single_field_form_fill_router_->OnRemoveCurrentSingleFieldSuggestion(
+  single_field_form_fill_router_.OnRemoveCurrentSingleFieldSuggestion(
       /*field_name=*/u"Field Name", /*value=*/u"Value",
       PopupItemId::kMerchantPromoCodeEntry);
 }
@@ -284,9 +272,9 @@
 // OnSingleFieldSuggestionSelected call.
 TEST_F(SingleFieldFormFillRouterTest,
        RouteToMerchantPromoCodeManager_OnSingleFieldSuggestionSelected) {
-  EXPECT_CALL(*merchant_promo_code_manager_, OnSingleFieldSuggestionSelected);
+  EXPECT_CALL(merchant_promo_code_manager_, OnSingleFieldSuggestionSelected);
 
-  single_field_form_fill_router_->OnSingleFieldSuggestionSelected(
+  single_field_form_fill_router_.OnSingleFieldSuggestionSelected(
       /*value=*/u"Value", PopupItemId::kMerchantPromoCodeEntry);
 }
 
@@ -295,37 +283,34 @@
 TEST_F(
     SingleFieldFormFillRouterTest,
     FieldNotEligibleForAnySingleFieldFormFiller_OnGetSingleFieldSuggestions) {
-  EXPECT_CALL(*merchant_promo_code_manager_, OnGetSingleFieldSuggestions)
-      .Times(1)
+  EXPECT_CALL(merchant_promo_code_manager_, OnGetSingleFieldSuggestions)
       .WillOnce(testing::Return(false));
 
-  EXPECT_CALL(*autocomplete_history_manager_, OnGetSingleFieldSuggestions)
-      .Times(1)
+  EXPECT_CALL(autocomplete_history_manager_, OnGetSingleFieldSuggestions)
       .WillOnce(testing::Return(false));
 
   // All SingleFieldFormFillers returned false, so we should return false as we
   // did not attempt to display any single field form fill suggestions.
-  EXPECT_FALSE(single_field_form_fill_router_->OnGetSingleFieldSuggestions(
+  EXPECT_FALSE(single_field_form_fill_router_.OnGetSingleFieldSuggestions(
       test_field_, autofill_client_, base::DoNothing(), SuggestionsContext()));
 }
 
 // Ensure that the router routes to AutocompleteHistoryManager for this
 // OnGetSingleFieldSuggestions call if IbanManager is not present.
 TEST_F(SingleFieldFormFillRouterTest, IbanManagerNotPresent) {
-  // This also invalidates the WeakPtr that the |single_field_form_fill_router_|
-  // holds on the iban manager.
-  iban_manager_.reset();
+  SingleFieldFormFillRouter router(&autocomplete_history_manager_,
+                                   /*iban_manager=*/nullptr,
+                                   &merchant_promo_code_manager_);
 
   // As the IbanManager is gone, we should call
   // AutocompleteHistoryManager::OnGetSingleFieldSuggestions().
-  EXPECT_CALL(*autocomplete_history_manager_, OnGetSingleFieldSuggestions)
-      .Times(1)
+  EXPECT_CALL(autocomplete_history_manager_, OnGetSingleFieldSuggestions)
       .WillOnce(testing::Return(true));
 
   // As `test_field_.should_autocomplete` is true, this was a valid field for
   // autocomplete. SingleFieldFormFillRouter::OnGetSingleFieldSuggestions()
   // should return true.
-  EXPECT_TRUE(single_field_form_fill_router_->OnGetSingleFieldSuggestions(
+  EXPECT_TRUE(router.OnGetSingleFieldSuggestions(
       test_field_, autofill_client_, base::DoNothing(), SuggestionsContext()));
 }
 
@@ -335,21 +320,19 @@
 TEST_F(SingleFieldFormFillRouterTest, IbanManagerReturnedFalse) {
   // Mock IbanManager::OnGetSingleFieldSuggestions() returning
   // false.
-  EXPECT_CALL(*iban_manager_, OnGetSingleFieldSuggestions)
-      .Times(1)
+  EXPECT_CALL(iban_manager_, OnGetSingleFieldSuggestions)
       .WillOnce(testing::Return(false));
 
   // Since IbanManager::OnGetSingleFieldSuggestions() returned
   // false, we should call
   // AutocompleteHistoryManager::OnGetSingleFieldSuggestions().
-  EXPECT_CALL(*autocomplete_history_manager_, OnGetSingleFieldSuggestions)
-      .Times(1)
+  EXPECT_CALL(autocomplete_history_manager_, OnGetSingleFieldSuggestions)
       .WillOnce(testing::Return(true));
 
   // As `test_field_.should_autocomplete` is true, this was a valid field for
   // autocomplete. SingleFieldFormFillRouter::OnGetSingleFieldSuggestions()
   // should return true.
-  EXPECT_TRUE(single_field_form_fill_router_->OnGetSingleFieldSuggestions(
+  EXPECT_TRUE(single_field_form_fill_router_.OnGetSingleFieldSuggestions(
       test_field_, autofill_client_, base::DoNothing(), SuggestionsContext()));
 }
 
@@ -357,9 +340,9 @@
 // OnRemoveCurrentSingleFieldSuggestion call.
 TEST_F(SingleFieldFormFillRouterTest,
        RouteToIbanManager_OnRemoveCurrentSingleFieldSuggestion) {
-  EXPECT_CALL(*iban_manager_, OnRemoveCurrentSingleFieldSuggestion);
+  EXPECT_CALL(iban_manager_, OnRemoveCurrentSingleFieldSuggestion);
 
-  single_field_form_fill_router_->OnRemoveCurrentSingleFieldSuggestion(
+  single_field_form_fill_router_.OnRemoveCurrentSingleFieldSuggestion(
       /*field_name=*/u"Field Name", /*value=*/u"Value",
       PopupItemId::kIbanEntry);
 }
diff --git a/components/autofill/core/browser/ui/popup_item_ids.h b/components/autofill/core/browser/ui/popup_item_ids.h
index 298f5c2..30a2afe2 100644
--- a/components/autofill/core/browser/ui/popup_item_ids.h
+++ b/components/autofill/core/browser/ui/popup_item_ids.h
@@ -40,7 +40,6 @@
   kAddressFieldByFieldFilling,
   kEditAddressProfile,
   kDeleteAddressProfile,
-  kAddressEntryNotSelectable,
   kAutofillOptions,
 
   // Compose suggestions.
diff --git a/components/autofill/core/browser/ui/suggestion.h b/components/autofill/core/browser/ui/suggestion.h
index 151aa0ee..b6658c8 100644
--- a/components/autofill/core/browser/ui/suggestion.h
+++ b/components/autofill/core/browser/ui/suggestion.h
@@ -228,9 +228,9 @@
   // `FieldType` used to build the suggestion's `main_text`.
   std::optional<FieldType> field_by_field_filling_type_used;
 
-  // Whether the user is able to select the suggestion by hovering on it or
+  // Whether the user is able to preview the suggestion by hovering on it or
   // accept it by clicking on it.
-  bool is_selectable = true;
+  bool is_acceptable = true;
 
   // Denotes whether this suggestion was hidden prior to the effects caused by
   // kAutofillUseAddressRewriterInProfileSubsetComparison.
diff --git a/components/autofill/core/browser/webdata/addresses/address_autofill_table.h b/components/autofill/core/browser/webdata/addresses/address_autofill_table.h
index 32458ad..81ef2a8 100644
--- a/components/autofill/core/browser/webdata/addresses/address_autofill_table.h
+++ b/components/autofill/core/browser/webdata/addresses/address_autofill_table.h
@@ -23,9 +23,13 @@
 // database passed to the constructor. It expects the following schemas:
 //
 // Note: The database stores time in seconds, UTC.
-//
+// -----------------------------------------------------------------------------
 // contact_info         This table contains Autofill profile data synced from a
 //                      remote source.
+//
+//                      It has all the same fields as the local_addresses table,
+//                      below.
+// -----------------------------------------------------------------------------
 // local_addresses      This table contains kLocalOrSyncable Autofill profiles.
 //                      It has the same layout as the contact_info table.
 //
@@ -49,11 +53,15 @@
 //   last_modifier_id   The application that performed the last non-metadata
 //                      modification of the profile.
 //                      Represented as an integer. See AutofillProfile.
-//
+// -----------------------------------------------------------------------------
 // contact_info_type_tokens
 //                      Contains the values for all relevant FieldTyps of a
 //                      contact_info entry. At most one entry per (guid, type)
 //                      pair exists.
+//
+//                      It has all the same fields as the
+//                      local_addresses_type_tokens table, below.
+// -----------------------------------------------------------------------------
 // local_addresses_type_tokens
 //                      Like contact_info_type_tokens, but for local_addresses.
 //
@@ -70,6 +78,7 @@
 //  observations        An encoding of the observations stored for this `type`.
 //                      See `ProfileTokenConfidence::
 //                      SerializeObservationsForStoredType()`.
+// -----------------------------------------------------------------------------
 class AddressAutofillTable : public WebDatabaseTable {
  public:
   AddressAutofillTable();
diff --git a/components/autofill/core/browser/webdata/autocomplete_table.h b/components/autofill/core/browser/webdata/autocomplete_table.h
index 99768920..8c64e20 100644
--- a/components/autofill/core/browser/webdata/autocomplete_table.h
+++ b/components/autofill/core/browser/webdata/autocomplete_table.h
@@ -27,7 +27,7 @@
 // is for historical reasons unfortunately named "autofill".
 //
 // Note: The database stores time in seconds, UTC.
-//
+// -----------------------------------------------------------------------------
 // autofill             This table contains autocomplete history data (not
 //                      structured information).
 //
@@ -40,7 +40,7 @@
 //                      |value| into a field of name |name|.
 //   count              How many times the user has entered the string |value|
 //                      in a field of name |name|.
-//
+// -----------------------------------------------------------------------------
 class AutocompleteTable : public WebDatabaseTable {
  public:
   AutocompleteTable();
diff --git a/components/autofill/core/browser/webdata/autofill_sync_metadata_table.h b/components/autofill/core/browser/webdata/autofill_sync_metadata_table.h
index 740eba2..ae06684 100644
--- a/components/autofill/core/browser/webdata/autofill_sync_metadata_table.h
+++ b/components/autofill/core/browser/webdata/autofill_sync_metadata_table.h
@@ -20,7 +20,7 @@
 // This class acts as a SyncMetadataStore for components/autofill. It stores the
 // metadata in two tables inside the SQLite database passed to the constructor.
 // It expects the following schemas:
-//
+// -----------------------------------------------------------------------------
 // autofill_sync_metadata
 //                      Sync-specific metadata for autofill records.
 //
@@ -29,7 +29,7 @@
 //   storage_key        A string that uniquely identifies the metadata record
 //                      as well as the corresponding autofill record.
 //   value              The serialized EntityMetadata record.
-//
+// -----------------------------------------------------------------------------
 // autofill_model_type_state
 //                      Contains sync ModelTypeStates for autofill model types.
 //
@@ -38,7 +38,7 @@
 //                      for one model type, there was an id column with value 1
 //                      for the single entry.
 //   value              The serialized ModelTypeState record.
-//
+// -----------------------------------------------------------------------------
 class AutofillSyncMetadataTable : public WebDatabaseTable,
                                   public syncer::SyncMetadataStore {
  public:
diff --git a/components/autofill/core/browser/webdata/payments/payments_autofill_table.h b/components/autofill/core/browser/webdata/payments/payments_autofill_table.h
index 5f517a14..15bbd8f 100644
--- a/components/autofill/core/browser/webdata/payments/payments_autofill_table.h
+++ b/components/autofill/core/browser/webdata/payments/payments_autofill_table.h
@@ -78,16 +78,16 @@
 // database passed to the constructor. It expects the following schemas:
 //
 // Note: The database stores time in seconds, UTC.
-//
+// -----------------------------------------------------------------------------
 // credit_cards         This table contains credit card data added by the user
 //                      with the Autofill dialog.  Most of the columns are
 //                      standard entries in a credit card form.
 //
 //   guid               A guid string to uniquely identify the credit card.
 //                      Added in version 31.
-//   name_on_card
-//   expiration_month
-//   expiration_year
+//   name_on_card       The cardholder's name, if available.
+//   expiration_month   Expiration month: 1-12
+//   expiration_year    Four-digit year: 2017
 //   card_number_encrypted
 //                      Stores encrypted credit card number.
 //   use_count          The number of times this card has been used to fill
@@ -104,7 +104,7 @@
 //                      CreditCard. Added in version 66.
 //   nickname           A nickname for the card, entered by the user. Added in
 //                      version 87.
-//
+// -----------------------------------------------------------------------------
 // masked_credit_cards
 //                      This table contains "masked" credit card information
 //                      about credit cards stored on the server. It consists
@@ -119,7 +119,7 @@
 //                      to the client.
 //   status             Server's status of this card.
 //                      TODO(brettw) define constants for this.
-//   name_on_card
+//   name_on_card       The cardholder's name, if available.
 //   network            Issuer network of the card. For example, "VISA". Renamed
 //                      from "type" in version 72.
 //   last_four          Last four digits of the card number. For de-duping
@@ -152,7 +152,7 @@
 //                      kNetwork denotes that it is a network-level enrollment.
 //   product_terms_url  Issuer terms of service to be displayed on the settings
 //                      page.
-//
+// -----------------------------------------------------------------------------
 // unmasked_credit_cards
 //                      When a masked credit credit card is unmasked and the
 //                      full number is downloaded or when the full number is
@@ -165,7 +165,7 @@
 //                      Full card number, encrypted.
 //   unmask_date        The date this card was unmasked in units of
 //                      Time::ToInternalValue. Added in version 64.
-//
+// -----------------------------------------------------------------------------
 // server_card_cloud_token_data
 //                      Stores data related to Cloud Primary Account Number
 //                      (CPAN) of server credit cards. Each card can have
@@ -179,7 +179,7 @@
 //   card_art_url       URL of the card art to be displayed for CPAN.
 //   instrument_token   Opaque identifier for the cloud token associated with
 //                      the payment instrument.
-//
+// -----------------------------------------------------------------------------
 // server_card_metadata
 //                      Metadata (currently, usage data) about server credit
 //                      cards. This will be synced.
@@ -194,7 +194,7 @@
 //                      billing address for this card. Can be null in the
 //                      database, but always returned as an empty string in
 //                      CreditCard. Added in version 71.
-//
+// -----------------------------------------------------------------------------
 // local_ibans          This table contains International Bank Account
 //                      Numbers (IBANs) added by the user. The columns are
 //                      standard entries in an Iban form. Those are local IBANs
@@ -208,8 +208,7 @@
 //   value_encrypted    Actual value of the IBAN (the bank account number),
 //                      encrypted.
 //   nickname           A nickname for the IBAN, entered by the user.
-//
-//
+// -----------------------------------------------------------------------------
 // masked_ibans         This table contains "masked" International Bank Account
 //                      Numbers (IBANs) added by the user. Those are server
 //                      IBANs saved on GPay server and are available across all
@@ -223,7 +222,7 @@
 //                      shown when in a masked format.
 //   length             Length of the full IBAN value.
 //   nickname           A nickname for the IBAN, entered by the user.
-//
+// -----------------------------------------------------------------------------
 // masked_ibans_metadata
 //                      Metadata (currently, usage data) about server IBANS.
 //                      This will be synced from Chrome sync.
@@ -234,12 +233,12 @@
 //                      a form.
 //   use_date           The date this IBAN was last used to fill a form,
 //                      in time_t.
-//
+// -----------------------------------------------------------------------------
 // payments_customer_data
 //                      Contains Google Payments customer data.
 //
 //   customer_id        A string representing the Google Payments customer id.
-//
+// -----------------------------------------------------------------------------
 // offer_data           The data for Autofill offers which will be presented in
 //                      payments autofill flows.
 //
@@ -259,7 +258,7 @@
 //   usage_instructions_text
 //                      Server-driven UI string to instruct the user on how they
 //                      can redeem the offer.
-//
+// -----------------------------------------------------------------------------
 // offer_eligible_instrument
 //                      Contains the mapping of credit cards and card linked
 //                      offers.
@@ -268,7 +267,7 @@
 //                      offer_id in the offer_data table.
 //   instrument_id      The new form of instrument id of the card. Will not be
 //                      used for now.
-//
+// -----------------------------------------------------------------------------
 // offer_merchant_domain
 //                      Contains the mapping of merchant domains and card linked
 //                      offers.
@@ -277,42 +276,42 @@
 //                      offer_id in the offer_data table.
 //   merchant_domain    List of full origins for merchant websites on which
 //                      this offer would apply.
-//
+// -----------------------------------------------------------------------------
 // virtual_card_usage_data
 //                      Contains data related to retrieval attempts of a virtual
 //                      card on a particular merchant domain
 //
-//  id                  Unique identifier for retrieval data. Generated
+//   id                 Unique identifier for retrieval data. Generated
 //                      originally in chrome sync server.
-//  instrument_id       The instrument id of the actual card that the virtual
+//   instrument_id      The instrument id of the actual card that the virtual
 //                      card is related to.
-//  merchant_domain     The merchant domain the usage data is linked to.
-//  last_four           The last four digits of the virtual card number. This is
+//   merchant_domain    The merchant domain the usage data is linked to.
+//   last_four          The last four digits of the virtual card number. This is
 //                      tied to the usage data because the virtual card number
 //                      may vary depending on merchants.
-//
+// -----------------------------------------------------------------------------
 // local_stored_cvc     This table contains credit card CVC data stored locally
 //                      in Chrome.
 //
-//  guid                A guid string to identify the corresponding locally
+//   guid               A guid string to identify the corresponding locally
 //                      stored credit card in the credit_cards table.
-//  value_encrypted     Encrypted CVC value of the card. May be 3 digits or 4
+//   value_encrypted    Encrypted CVC value of the card. May be 3 digits or 4
 //                      digits depending on the card issuer.
-//  last_updated_timestamp
+//   last_updated_timestamp
 //                      The timestamp of the most recent update to the data
 //                      entry.
-//
+// -----------------------------------------------------------------------------
 // server_stored_cvc    This table contains credit card CVC data stored synced
 //                      to Chrome Sync's Kansas server.
 //
-//  instrument_id       A server generated id to identify the corresponding
+//   instrument_id      A server generated id to identify the corresponding
 //                      credit cards stored in the masked_credit_cards table.
-//  value_encrypted     Encrypted CVC value of the card. May be 3 digits or 4
+//   value_encrypted    Encrypted CVC value of the card. May be 3 digits or 4
 //                      digits depending on the card issuer.
-//  last_updated_timestamp
+//   last_updated_timestamp
 //                      The timestamp of the most recent update to the data
 //                      entry.
-//
+// -----------------------------------------------------------------------------
 // payment_instruments  This table contains basic details that apply to all
 //                      payment instruments synced from Payments backend via
 //                      Chrome Sync. This does not apply to credit cards or IBAN
@@ -320,15 +319,15 @@
 //                      The pair of (`instrument_id`, `instrument_type`) are the
 //                      composite primary key for this table
 //
-//  instrument_id       The server-generated id for the payment instrument.
-//  instrument_type     The type of payment instrument. This is an integer
+//   instrument_id      The server-generated id for the payment instrument.
+//   instrument_type    The type of payment instrument. This is an integer
 //                      mapping to one of the following types: {BankAccount}.
 //                      This determines which table to query for fetching the
 //                      instrument details.
-//  nickname            The nickname set by the user for the payment instrument.
-//  display_icon_url    The URL for the icon to be displayed when showing the
+//   nickname           The nickname set by the user for the payment instrument.
+//   display_icon_url   The URL for the icon to be displayed when showing the
 //                      payment instrument to the user.
-//
+// -----------------------------------------------------------------------------
 // payment_instruments_metadata
 //                      Metadata (currently, usage data) about payment
 //                      instruments. This will be synced.
@@ -336,13 +335,13 @@
 //                      composite primary key for this table and can be used as
 //                      the foreign key to the `payment_instruments` table.
 //
-//  instrument_id       The server-generated id for the payment instrument.
-//  instrument_type     The type of payment instrument. This is an integer
+//   instrument_id      The server-generated id for the payment instrument.
+//   instrument_type    The type of payment instrument. This is an integer
 //                      mapping to one of the following types: {BankAccount}.
-//  use_count           The number of times this payment instrument has been
+//   use_count          The number of times this payment instrument has been
 //                      used.
-//  use_date            The date this payment instrument was last used.
-//
+//   use_date           The date this payment instrument was last used.
+// -----------------------------------------------------------------------------
 // payment_instrument_supported_rails
 //                      This table stores the mapping of what payment instrument
 //                      is supported for which payment rails, where a rail can
@@ -356,51 +355,50 @@
 //                      `instrument_type`) can be used as foreign key to the
 //                      `payment_instruments` table.
 //
-//  instrument_id       The server-generated id for the payment instrument.
-//  instrument_type     The type of payment instrument. This is an integer
+//   instrument_id      The server-generated id for the payment instrument.
+//   instrument_type    The type of payment instrument. This is an integer
 //                      mapping to one of the following types: {BankAccount}.
-//  payment_rail        This is an integer mapping to one of the following
+//   payment_rail       This is an integer mapping to one of the following
 //                      types: {Pix}.
-//
+// -----------------------------------------------------------------------------
 // bank_accounts        This table contains the bank account data synced via
 //                      Chrome Sync.
 //
-//  instrument_id       The identifier assigned by the GPay server to this bank
+//   instrument_id      The identifier assigned by the GPay server to this bank
 //                      account. This is intended to be a unique field.
-//  bank_name           The name of the bank where the account is registered.
-//  account_number_suffix
+//   bank_name          The name of the bank where the account is registered.
+//   account_number_suffix
 //                      The last four digits of the bank account, with which the
 //                      user can identify the account.
-//  account_type        The type of bank account. This is an integer mapping to
+//   account_type       The type of bank account. This is an integer mapping to
 //                      one of the following types: {Checking, Savings, Current,
 //                      Salary, Transacting}
-//
+// -----------------------------------------------------------------------------
 // masked_credit_card_benefits
-//                       This table contains the multi-valued benefits fields
-//                       associated with a credit card, i.e., credit-card-linked
-//                       benefits that help users save money on online
-//                       purchases.
+//                      This table contains the multi-valued benefits fields
+//                      associated with a credit card, i.e., credit-card-linked
+//                      benefits that help users save money on online purchases.
 //
-//  benefit_id           The unique ID for this benefit data. Generated
-//                       originally in Chrome Sync server.
-//  instrument_id        The instrument id string that identifies the credit
-//                       card to which the benefit belongs to. Identical to
-//                       `instrument_id` field in `masked_credit_cards`.
-//  benefit_type         The type of benefit. Either category, merchant, or
-//                       flat rate.
-//  benefit_category     The category that the benefit applies to. Only set
-//                       when `benefit_type` == category.
-//  benefit_description  A description of what the credit card benefit offers
-//                       the user for purchases. Shown in the Autofill
-//                       suggestion UI.
-//  start_time           Timestamp when the benefit is active and should be
-//                       displayed. Empty if no time range is specific for
-//                       the benefit.
-//  end_time             Timestamp When the benefit is no longer active and
-//                       should no longer be displayed. This field is only
-//                       set for benefits with an expiration date. Empty if
-//                       the benefit will last indefinitely.
-//
+//   benefit_id         The unique ID for this benefit data. Generated
+//                      originally in Chrome Sync server.
+//   instrument_id      The instrument id string that identifies the credit card
+//                      to which the benefit belongs to. Identical to
+//                      `instrument_id` field in `masked_credit_cards`.
+//   benefit_type       The type of benefit. Either category, merchant, or flat
+//                      rate.
+//   benefit_category   The category that the benefit applies to. Only set when
+//                      `benefit_type` == category.
+//   benefit_description
+//                      A description of what the credit card benefit offers the
+//                      user for purchases. Shown in the Autofill suggestion UI.
+//   start_time         Timestamp when the benefit is active and should be
+//                      displayed. Empty if no time range is specific for the
+//                      benefit.
+//   end_time           Timestamp When the benefit is no longer active and
+//                      should no longer be displayed. This field is only set
+//                      for benefits with an expiration date. Empty if the
+//                      benefit will last indefinitely.
+// -----------------------------------------------------------------------------
 // benefit_merchant_domains
 //                      Contains the mapping of non-personalized credit card
 //                      merchant benefits to eligible merchant domains. A
@@ -411,7 +409,7 @@
 //                      `benefit_id` in the `masked_credit_card_benefits` table.
 //   merchant_domain    Origin for merchant websites on which this benefit
 //                      would apply.
-//
+// -----------------------------------------------------------------------------
 class PaymentsAutofillTable : public WebDatabaseTable {
  public:
   PaymentsAutofillTable();
diff --git a/components/autofill/core/common/autofill_payments_features.cc b/components/autofill/core/common/autofill_payments_features.cc
index 91cdb8a3..0ef034e 100644
--- a/components/autofill/core/common/autofill_payments_features.cc
+++ b/components/autofill/core/common/autofill_payments_features.cc
@@ -94,6 +94,13 @@
              "AutofillEnableFpanRiskBasedAuthentication",
              base::FEATURE_DISABLED_BY_DEFAULT);
 
+#if BUILDFLAG(IS_ANDROID)
+// When enabled, the bottom sheet for IBAN save will be displayed on Android.
+BASE_FEATURE(kAutofillEnableIbanAndroidBottomSheet,
+             "AutofillEnableIbanAndroidBottomSheet",
+             base::FEATURE_DISABLED_BY_DEFAULT);
+#endif
+
 // When enabled, enable manual falling component for virtual cards on Android.
 BASE_FEATURE(kAutofillEnableManualFallbackForVirtualCards,
              "AutofillEnableManualFallbackForVirtualCards",
diff --git a/components/autofill/core/common/autofill_payments_features.h b/components/autofill/core/common/autofill_payments_features.h
index 4704120..93547fc 100644
--- a/components/autofill/core/common/autofill_payments_features.h
+++ b/components/autofill/core/common/autofill_payments_features.h
@@ -22,6 +22,11 @@
 BASE_DECLARE_FEATURE(kAutofillEnableEmailOtpForVcnYellowPath);
 BASE_DECLARE_FEATURE(kAutofillEnableFIDOProgressDialog);
 BASE_DECLARE_FEATURE(kAutofillEnableFpanRiskBasedAuthentication);
+
+#if BUILDFLAG(IS_ANDROID)
+BASE_DECLARE_FEATURE(kAutofillEnableIbanAndroidBottomSheet);
+#endif
+
 BASE_DECLARE_FEATURE(kAutofillEnableManualFallbackForVirtualCards);
 BASE_DECLARE_FEATURE(kAutofillEnableMerchantDomainInUnmaskCardRequest);
 BASE_DECLARE_FEATURE(kAutofillEnableMerchantOptOutClientSideUrlFiltering);
diff --git a/components/component_updater/component_installer.cc b/components/component_updater/component_installer.cc
index f23bcd7..fbc62f5 100644
--- a/components/component_updater/component_installer.cc
+++ b/components/component_updater/component_installer.cc
@@ -128,25 +128,29 @@
   }
 
   const std::string* version_ascii = local_manifest->FindString("version");
-  if (!version_ascii || !base::IsStringASCII(*version_ascii))
+  if (!version_ascii || !base::IsStringASCII(*version_ascii)) {
     return Result(InstallError::INVALID_VERSION);
+  }
 
   const base::Version manifest_version(*version_ascii);
 
   VLOG(1) << "Install: version=" << manifest_version.GetString()
           << " current version=" << current_version_.GetString();
 
-  if (!manifest_version.IsValid())
+  if (!manifest_version.IsValid()) {
     return Result(InstallError::INVALID_VERSION);
+  }
   base::FilePath local_install_path;
-  if (!base::PathService::Get(DIR_COMPONENT_USER, &local_install_path))
+  if (!base::PathService::Get(DIR_COMPONENT_USER, &local_install_path)) {
     return Result(InstallError::NO_DIR_COMPONENT_USER);
+  }
   local_install_path =
       local_install_path.Append(installer_policy_->GetRelativeInstallDir())
           .AppendASCII(manifest_version.GetString());
   if (base::PathExists(local_install_path)) {
-    if (!base::DeletePathRecursively(local_install_path))
+    if (!base::DeletePathRecursively(local_install_path)) {
       return Result(InstallError::CLEAN_INSTALL_DIR_FAILED);
+    }
   }
 
   VLOG(1) << "unpack_path=" << unpack_path.AsUTF8Unsafe()
@@ -181,8 +185,9 @@
 
   const Result result =
       installer_policy_->OnCustomInstall(*local_manifest, local_install_path);
-  if (result.error)
+  if (result.error) {
     return result;
+  }
 
   if (!installer_policy_->VerifyInstallation(*local_manifest,
                                              local_install_path)) {
@@ -226,8 +231,9 @@
 
 bool ComponentInstaller::GetInstalledFile(const std::string& file,
                                           base::FilePath* installed_file) {
-  if (current_version_ == base::Version(kNullVersion))
+  if (current_version_ == base::Version(kNullVersion)) {
     return false;  // No component has been installed yet.
+  }
   *installed_file = current_install_dir_.AppendASCII(file);
   return true;
 }
@@ -399,8 +405,9 @@
 
 absl::optional<base::FilePath> ComponentInstaller::GetComponentDirectory() {
   base::FilePath base_component_dir;
-  if (!base::PathService::Get(DIR_COMPONENT_USER, &base_component_dir))
+  if (!base::PathService::Get(DIR_COMPONENT_USER, &base_component_dir)) {
     return absl::nullopt;
+  }
   base::FilePath base_dir =
       base_component_dir.Append(installer_policy_->GetRelativeInstallDir());
   if (!base::CreateDirectory(base_dir)) {
@@ -464,10 +471,12 @@
 
   // Only try to delete any files that are in our user-level install path.
   base::FilePath userInstallPath;
-  if (!base::PathService::Get(DIR_COMPONENT_USER, &userInstallPath))
+  if (!base::PathService::Get(DIR_COMPONENT_USER, &userInstallPath)) {
     return;
-  if (!userInstallPath.IsParent(current_install_dir_))
+  }
+  if (!userInstallPath.IsParent(current_install_dir_)) {
     return;
+  }
 
   const base::FilePath base_dir = current_install_dir_.DirName();
   base::FileEnumerator file_enumerator(base_dir, false,
@@ -478,17 +487,20 @@
 
     // Ignore folders that don't have valid version names. These folders are not
     // managed by the component installer, so do not try to remove them.
-    if (!version.IsValid())
+    if (!version.IsValid()) {
       continue;
+    }
 
-    if (!base::DeletePathRecursively(path))
+    if (!base::DeletePathRecursively(path)) {
       DVLOG(0) << "Couldn't delete " << path.value();
+    }
   }
 
   // Delete the base directory if it's empty now.
   if (base::IsDirectoryEmpty(base_dir)) {
-    if (!base::DeleteFile(base_dir))
+    if (!base::DeleteFile(base_dir)) {
       DVLOG(0) << "Couldn't delete " << base_dir.value();
+    }
   }
 
   // Customized operations for individual component.
@@ -520,8 +532,9 @@
                installer_policy_->AllowCachedCopies()))) {
     VLOG(0) << "Component registration failed for "
             << installer_policy_->GetName();
-    if (!callback.is_null())
+    if (!callback.is_null()) {
       std::move(callback).Run();
+    }
     return;
   }
 
@@ -531,8 +544,9 @@
     DVLOG(1) << "No component found for " << installer_policy_->GetName();
   }
 
-  if (!callback.is_null())
+  if (!callback.is_null()) {
     std::move(callback).Run();
+  }
 }
 
 void ComponentInstaller::ComponentReady(base::Value::Dict manifest) {
diff --git a/components/compose_strings.grdp b/components/compose_strings.grdp
index 555c979..1c1f550 100644
--- a/components/compose_strings.grdp
+++ b/components/compose_strings.grdp
@@ -52,17 +52,21 @@
   </message>
 
   <!-- MSBB consent dialog -->
-  <message name="IDS_COMPOSE_MSBB_CONSENT_TITLE" desc="The title of the MSBB consent dialog." translateable="false">
+  <message name="IDS_COMPOSE_FRE_MSBB_TITLE" desc="The title of the MSBB consent dialog." translateable="false">
    Turn on the make searches and browsing better setting to use this feature
   </message>
-  <message name="IDS_COMPOSE_MSBB_CONSENT_MAIN_TOP" desc="The top main text of the MSBB consent dialog." translateable="false">
-   You’ll need to turn on this option in <ph name="BEGIN_LINK">&lt;a href="#"&gt;</ph>settings<ph name="END_LINK">&lt;/a&gt;</ph>.
-  </message>
-  <message name="IDS_COMPOSE_MSBB_CONSENT_MAIN_BOTTOM" desc="The bottom main text of the MSBB consent dialog." translateable="false">
-    After you turn on the setting, come back to this tab to continue where you left off.
-  </message>
-  <message name="IDS_COMPOSE_MSBB_CONSENT_CONTINUE_BUTTON" desc="The continue option the MSBB consent dialog." translateable="false">
-    Continue
+  <if expr="is_macosx">
+    <message name="IDS_COMPOSE_FRE_MSBB_MAIN" desc="The main text of the MSBB consent dialog." translateable="false">
+        After you turn on the setting, come back to this tab to continue where you left off.
+    </message>
+  </if> <!-- is_macosx -->
+  <if expr="not is_macosx">
+    <message name="IDS_COMPOSE_FRE_MSBB_MAIN" desc="The main text of the MSBB consent dialog." translateable="false">
+        After you turn on the setting, come back to this tab to continue where you left off
+    </message>
+  </if> <!-- not is_macosx -->
+  <message name="IDS_COMPOSE_FRE_MSBB_SETTINGS_BUTTON" desc="Open the settings page from the MSBB consent dialog." translateable="false">
+    Go to Settings
   </message>
 
   <!-- Disclaimer dialog -->
@@ -82,7 +86,7 @@
   <ph name="BEGIN_LINK">&lt;a href=""&gt;</ph>Learn more<ph name="END_LINK">&lt;/a&gt;</ph>.
   </message>
   <message name="IDS_COMPOSE_SUBMIT_BUTTON" desc="The button to request Compose to generate text.">
-    Generate
+    Create
   </message>
   <message name="IDS_COMPOSE_EDIT_UPDATE_BUTTON" desc="The button that confirms the input should be updated.">
     Update
@@ -90,7 +94,7 @@
 
   <!-- Result dialog -->
   <message name="IDS_COMPOSE_EDIT" desc="Label shown on hover and read by screen-readers for button that allows user to edit their input.">
-  Edit
+  Edit input
   </message>
   <message name="IDS_COMPOSE_MENU_LENGTH_TITLE" desc="Title for options to select the length of returned text.">
     Length
@@ -114,7 +118,7 @@
     Undo
   </message>
   <message name="IDS_COMPOSE_RESUBMIT" desc="Label shown on hover and read by screen-readers for button that user clicks to regenerate input.">
-    Regenerate
+    Retry
   </message>
   <message name="IDS_COMPOSE_INSERT_BUTTON" desc="The button that inserts the result into the selected textfield.">
     Insert
@@ -122,6 +126,12 @@
   <message name="IDS_COMPOSE_REPLACE_BUTTON" desc="The button that replaces the highlighted text with the restult in the input textfield.">
   Replace
   </message>
+  <message name="IDS_COMPOSE_THUMBS_DOWN" desc="Accessibility label for thumbs down button that opens a feedback form when pressed.">
+    Thumbs down opens a form for submitting detailed feedback on why you dislike the generated text.
+  </message>
+  <message name="IDS_COMPOSE_THUMBS_UP" desc="Accessibility label for thumbs up button that submits positive feedback for the generated text.">
+    Thumbs up submits feedback that you like the generated text.
+  </message>
 
   <!-- Errors -->
   <message name="IDS_COMPOSE_CONFIGURATION_ERROR" desc="The error text shown when Compose is not available due to an internal configuration error." translateable="false">
diff --git a/components/compose_strings_grdp/IDS_COMPOSE_EDIT.png.sha1 b/components/compose_strings_grdp/IDS_COMPOSE_EDIT.png.sha1
index 73319d789..93bf56ca 100644
--- a/components/compose_strings_grdp/IDS_COMPOSE_EDIT.png.sha1
+++ b/components/compose_strings_grdp/IDS_COMPOSE_EDIT.png.sha1
@@ -1 +1 @@
-307988e01a0ab25e9640b0408bf5cd9ba1ecbf57
\ No newline at end of file
+414455d807ee1cb247af30aa8cb429af6c489d91
\ No newline at end of file
diff --git a/components/compose_strings_grdp/IDS_COMPOSE_SUBMIT_BUTTON.png.sha1 b/components/compose_strings_grdp/IDS_COMPOSE_SUBMIT_BUTTON.png.sha1
index 2d71ed7c..1c3997a 100644
--- a/components/compose_strings_grdp/IDS_COMPOSE_SUBMIT_BUTTON.png.sha1
+++ b/components/compose_strings_grdp/IDS_COMPOSE_SUBMIT_BUTTON.png.sha1
@@ -1 +1 @@
-86c192bc12e62a3a621079f70b9d44f1b02e95de
\ No newline at end of file
+59204c6841e167d676819f4d1baa8e01bdc71a13
\ No newline at end of file
diff --git a/components/compose_strings_grdp/IDS_COMPOSE_THUMBS_DOWN.png.sha1 b/components/compose_strings_grdp/IDS_COMPOSE_THUMBS_DOWN.png.sha1
new file mode 100644
index 0000000..93bf56ca
--- /dev/null
+++ b/components/compose_strings_grdp/IDS_COMPOSE_THUMBS_DOWN.png.sha1
@@ -0,0 +1 @@
+414455d807ee1cb247af30aa8cb429af6c489d91
\ No newline at end of file
diff --git a/components/compose_strings_grdp/IDS_COMPOSE_THUMBS_UP.png.sha1 b/components/compose_strings_grdp/IDS_COMPOSE_THUMBS_UP.png.sha1
new file mode 100644
index 0000000..93bf56ca
--- /dev/null
+++ b/components/compose_strings_grdp/IDS_COMPOSE_THUMBS_UP.png.sha1
@@ -0,0 +1 @@
+414455d807ee1cb247af30aa8cb429af6c489d91
\ No newline at end of file
diff --git a/components/constrained_window/constrained_window_views.cc b/components/constrained_window/constrained_window_views.cc
index 9e074123..3daf40d 100644
--- a/components/constrained_window/constrained_window_views.cc
+++ b/components/constrained_window/constrained_window_views.cc
@@ -207,6 +207,16 @@
   return widget;
 }
 
+std::unique_ptr<views::Widget> ShowWebModalDialogViewsOwned(
+    views::WidgetDelegate* dialog,
+    content::WebContents* initiator_web_contents) {
+  views::Widget* widget =
+      ShowWebModalDialogViews(dialog, initiator_web_contents);
+  CHECK_EQ(widget->ownership(),
+           views::Widget::InitParams::WIDGET_OWNS_NATIVE_WIDGET);
+  return base::WrapUnique<views::Widget>(widget);
+}
+
 views::Widget* CreateWebModalDialogViews(views::WidgetDelegate* dialog,
                                          content::WebContents* web_contents) {
   DCHECK_EQ(ui::MODAL_TYPE_CHILD, dialog->GetModalType());
diff --git a/components/constrained_window/constrained_window_views.h b/components/constrained_window/constrained_window_views.h
index a274a5e..6a0fa033 100644
--- a/components/constrained_window/constrained_window_views.h
+++ b/components/constrained_window/constrained_window_views.h
@@ -63,6 +63,11 @@
     views::WidgetDelegate* dialog,
     content::WebContents* initiator_web_contents);
 
+// As above, but with an owned widget.
+std::unique_ptr<views::Widget> ShowWebModalDialogViewsOwned(
+    views::WidgetDelegate* dialog,
+    content::WebContents* initiator_web_contents);
+
 // Create a widget for |dialog| that is modal to |web_contents|.
 // The modal type of |dialog->GetModalType()| must be ui::MODAL_TYPE_CHILD.
 views::Widget* CreateWebModalDialogViews(views::WidgetDelegate* dialog,
diff --git a/components/content_settings/core/browser/content_settings_pref.cc b/components/content_settings/core/browser/content_settings_pref.cc
index 9621a91..ef0e244 100644
--- a/components/content_settings/core/browser/content_settings_pref.cc
+++ b/components/content_settings/core/browser/content_settings_pref.cc
@@ -256,6 +256,11 @@
                        ContentSettingsPattern::Wildcard(), content_type_);
 }
 
+void ContentSettingsPref::OnShutdown() {
+  prefs_ = nullptr;
+  registrar_ = nullptr;
+}
+
 size_t ContentSettingsPref::GetNumExceptions() {
   base::AutoLock auto_lock(value_map_.GetLock());
   return value_map_.size();
diff --git a/components/content_settings/core/browser/content_settings_pref.h b/components/content_settings/core/browser/content_settings_pref.h
index 6127db3..8d003ca 100644
--- a/components/content_settings/core/browser/content_settings_pref.h
+++ b/components/content_settings/core/browser/content_settings_pref.h
@@ -61,6 +61,9 @@
 
   void ClearAllContentSettingsRules();
 
+  // Resets pointers that should be released in ShutdownOnUIThread().
+  void OnShutdown();
+
   size_t GetNumExceptions();
 
   // Tries to lock |lock_|. If successful, returns true and releases the lock.
@@ -92,10 +95,10 @@
   ContentSettingsType content_type_;
 
   // Weak; owned by the Profile and reset in ShutdownOnUIThread.
-  raw_ptr<PrefService, AcrossTasksDanglingUntriaged> prefs_;
+  raw_ptr<PrefService> prefs_;
 
   // Owned by the PrefProvider.
-  raw_ptr<PrefChangeRegistrar, DanglingUntriaged> registrar_;
+  raw_ptr<PrefChangeRegistrar> registrar_;
 
   // Name of the dictionary preference managed by this class.
   const std::string pref_name_;
diff --git a/components/content_settings/core/browser/content_settings_pref_provider.cc b/components/content_settings/core/browser/content_settings_pref_provider.cc
index 059aa312..d0c2534 100644
--- a/components/content_settings/core/browser/content_settings_pref_provider.cc
+++ b/components/content_settings/core/browser/content_settings_pref_provider.cc
@@ -365,6 +365,9 @@
   DCHECK(CalledOnValidThread());
   DCHECK(prefs_);
   RemoveAllObservers();
+  for (const auto& pref : content_settings_prefs_) {
+    pref.second->OnShutdown();
+  }
   pref_change_registrar_.RemoveAll();
   prefs_ = nullptr;
 }
diff --git a/components/feature_engagement/public/event_constants.cc b/components/feature_engagement/public/event_constants.cc
index c8754de8..b4031bad 100644
--- a/components/feature_engagement/public/event_constants.cc
+++ b/components/feature_engagement/public/event_constants.cc
@@ -24,6 +24,9 @@
 const char kMediaBackgrounded[] = "media_backgrounded";
 const char kGlobalMediaControlsOpened[] = "global_media_controls_opened";
 
+const char kSidePanelPinned[] = "side_panel_pinned";
+const char kSidePanelFromMenuShown[] = "side_panel_from_menu_shown";
+
 const char kSideSearchAutoTriggered[] = "side_search_auto_triggered";
 const char kSideSearchOpened[] = "side_search_opened";
 const char kSideSearchPageActionLabelShown[] =
diff --git a/components/feature_engagement/public/event_constants.h b/components/feature_engagement/public/event_constants.h
index ac877a37..87c2f08 100644
--- a/components/feature_engagement/public/event_constants.h
+++ b/components/feature_engagement/public/event_constants.h
@@ -39,6 +39,11 @@
 // The user opened the Global Media Controls dialog.
 extern const char kGlobalMediaControlsOpened[];
 
+// A side panel has been pinned.
+extern const char kSidePanelPinned[];
+// A side panel has been opened from the app menu.
+extern const char kSidePanelFromMenuShown[];
+
 // The side search panel was automatically triggered.
 extern const char kSideSearchAutoTriggered[];
 // The side search panel was opened by the user.
diff --git a/components/feature_engagement/public/feature_configurations.cc b/components/feature_engagement/public/feature_configurations.cc
index 97c29355..fed8b74 100644
--- a/components/feature_engagement/public/feature_configurations.cc
+++ b/components/feature_engagement/public/feature_configurations.cc
@@ -142,6 +142,34 @@
     return config;
   }
 
+  if (kIPHSidePanelGenericMenuFeature.name == feature->name) {
+    absl::optional<FeatureConfig> config = FeatureConfig();
+    config->valid = true;
+    config->availability = Comparator(ANY, 0);
+    config->session_rate = Comparator(ANY, 0);
+    config->session_rate_impact.type = SessionRateImpact::Type::NONE;
+    // Show the promo once a year if the side panel was not opened.
+    config->trigger = EventConfig("side_panel_from_menu_trigger",
+                                  Comparator(EQUAL, 0), 360, 360);
+    config->used = EventConfig("side_panel_from_menu_shown",
+                               Comparator(EQUAL, 0), 360, 360);
+    return config;
+  }
+
+  if (kIPHSidePanelGenericPinnableFeature.name == feature->name) {
+    absl::optional<FeatureConfig> config = FeatureConfig();
+    config->valid = true;
+    config->availability = Comparator(ANY, 0);
+    config->session_rate = Comparator(ANY, 0);
+    config->session_rate_impact.type = SessionRateImpact::Type::NONE;
+    // Show the promo once a year if the side panel was not opened.
+    config->trigger = EventConfig("side_panel_pinnable_trigger",
+                                  Comparator(EQUAL, 0), 360, 360);
+    config->used = EventConfig(feature_engagement::events::kSidePanelPinned,
+                               Comparator(EQUAL, 0), 360, 360);
+    return config;
+  }
+
   if (kIPHGMCCastStartStopFeature.name == feature->name) {
     absl::optional<FeatureConfig> config = FeatureConfig();
     config->valid = true;
diff --git a/components/live_caption/views/caption_bubble.h b/components/live_caption/views/caption_bubble.h
index 564ae302..75ba38a 100644
--- a/components/live_caption/views/caption_bubble.h
+++ b/components/live_caption/views/caption_bubble.h
@@ -312,7 +312,7 @@
   // A timer which causes the bubble to hide if there is no activity after a
   // specified interval.
   std::unique_ptr<base::RetainingOneShotTimer> inactivity_timer_;
-  raw_ptr<const base::TickClock, AcrossTasksDanglingUntriaged> tick_clock_;
+  raw_ptr<const base::TickClock> tick_clock_;
 
   gfx::SlideAnimation controls_animation_;
 
diff --git a/components/metrics/generate_expired_histograms_array.gni b/components/metrics/generate_expired_histograms_array.gni
index 2929ae0..1fb9090 100644
--- a/components/metrics/generate_expired_histograms_array.gni
+++ b/components/metrics/generate_expired_histograms_array.gni
@@ -102,6 +102,7 @@
       "//tools/metrics/histograms/metadata/enterprise/histograms.xml",
       "//tools/metrics/histograms/metadata/event/enums.xml",
       "//tools/metrics/histograms/metadata/event/histograms.xml",
+      "//tools/metrics/histograms/metadata/extensions/enums.xml",
       "//tools/metrics/histograms/metadata/extensions/histograms.xml",
       "//tools/metrics/histograms/metadata/families/enums.xml",
       "//tools/metrics/histograms/metadata/families/histograms.xml",
diff --git a/components/optimization_guide/core/model_quality/model_quality_logs_uploader_service.cc b/components/optimization_guide/core/model_quality/model_quality_logs_uploader_service.cc
index f0b99509..be5b014d 100644
--- a/components/optimization_guide/core/model_quality/model_quality_logs_uploader_service.cc
+++ b/components/optimization_guide/core/model_quality/model_quality_logs_uploader_service.cc
@@ -15,8 +15,10 @@
 #include "components/optimization_guide/core/optimization_guide_enums.h"
 #include "components/optimization_guide/core/optimization_guide_features.h"
 #include "components/optimization_guide/core/optimization_guide_logger.h"
+#include "components/optimization_guide/core/optimization_guide_prefs.h"
 #include "components/optimization_guide/core/optimization_guide_switches.h"
 #include "components/optimization_guide/core/optimization_guide_util.h"
+#include "components/prefs/pref_service.h"
 #include "components/variations/net/variations_http_headers.h"
 #include "net/base/url_util.h"
 #include "net/http/http_response_headers.h"
@@ -120,6 +122,32 @@
                               ModelQualityLogsUploadStatus::kUploadSuccessful);
 }
 
+proto::PerformanceClass GetPerformanceClass(PrefService* local_state) {
+  int value =
+      local_state->GetInteger(prefs::localstate::kOnDevicePerformanceClass);
+  OnDeviceModelPerformanceClass performance_class =
+      static_cast<OnDeviceModelPerformanceClass>(value);
+  switch (performance_class) {
+    case OnDeviceModelPerformanceClass::kVeryLow:
+      return proto::PERFORMANCE_CLASS_VERY_LOW;
+    case OnDeviceModelPerformanceClass::kLow:
+      return proto::PERFORMANCE_CLASS_LOW;
+    case OnDeviceModelPerformanceClass::kMedium:
+      return proto::PERFORMANCE_CLASS_MEDIUM;
+    case OnDeviceModelPerformanceClass::kHigh:
+      return proto::PERFORMANCE_CLASS_HIGH;
+    case OnDeviceModelPerformanceClass::kVeryHigh:
+      return proto::PERFORMANCE_CLASS_VERY_HIGH;
+    case OnDeviceModelPerformanceClass::kUnknown:
+    case OnDeviceModelPerformanceClass::kError:
+    case OnDeviceModelPerformanceClass::kServiceCrash:
+    case OnDeviceModelPerformanceClass::kGpuBlocked:
+    case OnDeviceModelPerformanceClass::kFailedToLoadLibrary:
+      return proto::PERFORMANCE_CLASS_UNSPECIFIED;
+  }
+  return proto::PERFORMANCE_CLASS_UNSPECIFIED;
+}
+
 }  // namespace
 
 ModelQualityLogsUploaderService::ModelQualityLogsUploaderService(
@@ -177,6 +205,12 @@
     logging_metadata.set_client_id(client_id);
   }
 
+  proto::PerformanceClass perf_class = GetPerformanceClass(pref_service_);
+  if (perf_class != proto::PERFORMANCE_CLASS_UNSPECIFIED) {
+    logging_metadata.mutable_on_device_system_profile()->set_performance_class(
+        perf_class);
+  }
+
   *(log_ai_data_request->mutable_logging_metadata()) = logging_metadata;
 
   std::string serialized_logs;
diff --git a/components/optimization_guide/core/model_quality/model_quality_logs_uploader_service_unittest.cc b/components/optimization_guide/core/model_quality/model_quality_logs_uploader_service_unittest.cc
index 9c5d97e..002e0681d 100644
--- a/components/optimization_guide/core/model_quality/model_quality_logs_uploader_service_unittest.cc
+++ b/components/optimization_guide/core/model_quality/model_quality_logs_uploader_service_unittest.cc
@@ -15,6 +15,7 @@
 #include "base/test/scoped_feature_list.h"
 #include "base/test/task_environment.h"
 #include "base/test/test.pb.h"
+#include "base/types/cxx23_to_underlying.h"
 #include "components/optimization_guide/core/model_quality/feature_type_map.h"
 #include "components/optimization_guide/core/model_quality/model_quality_log_entry.h"
 #include "components/optimization_guide/core/optimization_guide_constants.h"
@@ -100,7 +101,7 @@
         shared_url_loader_factory_(
             base::MakeRefCounted<network::WeakWrapperSharedURLLoaderFactory>(
                 &test_url_loader_factory_)) {
-    prefs::RegisterProfilePrefs(pref_service_.registry());
+    prefs::RegisterLocalStatePrefs(pref_service_.registry());
     model_quality_logs_uploader_service_ =
         std::make_unique<ModelQualityLogsUploaderService>(
             shared_url_loader_factory_, &pref_service_);
@@ -116,6 +117,12 @@
 
   ~ModelQualityLogsUploaderServiceTest() override = default;
 
+  void WritePerformanceClassToPref(OnDeviceModelPerformanceClass perf_class) {
+    pref_service_.SetInteger(
+        prefs::localstate::kOnDevicePerformanceClass,
+        base::to_underlying(OnDeviceModelPerformanceClass::kVeryHigh));
+  }
+
   void UploadModelQualityLogs(
       std::unique_ptr<proto::LogAiDataRequest> log_ai_data_request) {
     model_quality_logs_uploader_service_->UploadModelQualityLogs(
@@ -194,6 +201,8 @@
 };
 
 TEST_F(ModelQualityLogsUploaderServiceTest, TestSuccessfulResponse) {
+  WritePerformanceClassToPref(OnDeviceModelPerformanceClass::kVeryHigh);
+
   auto ai_data_request = BuildComposeLogAiDataReuqest();
   UploadModelQualityLogs(std::move(ai_data_request));
   VerifyHasPendingLogsUploadRequest();
@@ -201,8 +210,14 @@
   proto::LogAiDataResponse response;
   EXPECT_TRUE(SimulateSuccessfulResponse(response));
 
+  auto pending_request = GetPendingLogsUploadRequest();
   EXPECT_EQ(proto::LogAiDataRequest::FeatureCase::kCompose,
-            GetPendingLogsUploadRequest()->feature_case());
+            pending_request->feature_case());
+  // Performance class should be attached.
+  EXPECT_EQ(proto::PERFORMANCE_CLASS_VERY_HIGH,
+            pending_request->logging_metadata()
+                .on_device_system_profile()
+                .performance_class());
 
   histogram_tester_.ExpectUniqueSample(
       "OptimizationGuide.ModelQualityLogsUploaderService.NetErrorCode",
diff --git a/components/optimization_guide/core/optimization_guide_prefs.cc b/components/optimization_guide/core/optimization_guide_prefs.cc
index cc14aa27..5f5affe 100644
--- a/components/optimization_guide/core/optimization_guide_prefs.cc
+++ b/components/optimization_guide/core/optimization_guide_prefs.cc
@@ -60,10 +60,6 @@
 const char kModelExecutionMainToggleSettingState[] =
     "optimization_guide.model_execution_main_toggle_setting_state";
 
-// An integer pref that contains the user's client id.
-const char kModelQualityLogggingClientId[] =
-    "optimization_guide.model_quality_logging_client_id";
-
 // A dictionary pref that stores optimization types that had filter associated
 // with this type. The entry is the OptimizationType enum. The value of the
 // key-value pair will not be used.
@@ -152,6 +148,10 @@
 const char kLastTimeEligibleForOnDeviceModelDownload[] =
     "optimization_guide.on_device.last_time_eligible_for_download";
 
+// An integer pref that contains the user's client id.
+const char kModelQualityLogggingClientId[] =
+    "optimization_guide.model_quality_logging_client_id";
+
 }  // namespace localstate
 
 void RegisterProfilePrefs(PrefRegistrySimple* registry) {
@@ -174,8 +174,6 @@
                                    PrefRegistry::LOSSY_PREF);
   registry->RegisterDictionaryPref(kStoreFilePathsToDelete,
                                    PrefRegistry::LOSSY_PREF);
-  registry->RegisterInt64Pref(kModelQualityLogggingClientId, 0,
-                              PrefRegistry::LOSSY_PREF);
   registry->RegisterDictionaryPref(kPreviousOptimizationTypesWithFilter,
                                    PrefRegistry::LOSSY_PREF);
 
@@ -195,6 +193,8 @@
       localstate::kLastTimeOnDeviceEligibleFeatureWasUsed, base::Time::Min());
   registry->RegisterTimePref(
       localstate::kLastTimeEligibleForOnDeviceModelDownload, base::Time::Min());
+  registry->RegisterInt64Pref(localstate::kModelQualityLogggingClientId, 0,
+                              PrefRegistry::LOSSY_PREF);
 }
 
 }  // namespace prefs
diff --git a/components/optimization_guide/core/optimization_guide_prefs.h b/components/optimization_guide/core/optimization_guide_prefs.h
index 11b9503..824efb2 100644
--- a/components/optimization_guide/core/optimization_guide_prefs.h
+++ b/components/optimization_guide/core/optimization_guide_prefs.h
@@ -31,8 +31,6 @@
 COMPONENT_EXPORT(OPTIMIZATION_GUIDE_FEATURES)
 extern const char kModelExecutionMainToggleSettingState[];
 COMPONENT_EXPORT(OPTIMIZATION_GUIDE_FEATURES)
-extern const char kModelQualityLogggingClientId[];
-COMPONENT_EXPORT(OPTIMIZATION_GUIDE_FEATURES)
 extern const char kPreviousOptimizationTypesWithFilter[];
 
 // Value stored in the pref.
@@ -73,6 +71,8 @@
 extern const char kLastTimeOnDeviceEligibleFeatureWasUsed[];
 COMPONENT_EXPORT(OPTIMIZATION_GUIDE_FEATURES)
 extern const char kLastTimeEligibleForOnDeviceModelDownload[];
+COMPONENT_EXPORT(OPTIMIZATION_GUIDE_FEATURES)
+extern const char kModelQualityLogggingClientId[];
 
 }  // namespace localstate
 
diff --git a/components/optimization_guide/core/optimization_guide_util.cc b/components/optimization_guide/core/optimization_guide_util.cc
index b56df1c..316f087 100644
--- a/components/optimization_guide/core/optimization_guide_util.cc
+++ b/components/optimization_guide/core/optimization_guide_util.cc
@@ -62,7 +62,8 @@
   }
 
   pref_service->SetInt64(
-      optimization_guide::prefs::kModelQualityLogggingClientId, client_id);
+      optimization_guide::prefs::localstate::kModelQualityLogggingClientId,
+      client_id);
   return client_id;
 }
 
@@ -193,11 +194,12 @@
     return 0;
   }
   int64_t client_id = pref_service->GetInt64(
-      optimization_guide::prefs::kModelQualityLogggingClientId);
+      optimization_guide::prefs::localstate::kModelQualityLogggingClientId);
   if (!client_id) {
     client_id = GenerateAndStoreClientId(pref_service);
     pref_service->SetInt64(
-        optimization_guide::prefs::kModelQualityLogggingClientId, client_id);
+        optimization_guide::prefs::localstate::kModelQualityLogggingClientId,
+        client_id);
   }
 
   // Hash the client id with the date so that it changes everyday for every
diff --git a/components/optimization_guide/core/optimization_guide_util_unittest.cc b/components/optimization_guide/core/optimization_guide_util_unittest.cc
index 3bad6b075..ba3e83e 100644
--- a/components/optimization_guide/core/optimization_guide_util_unittest.cc
+++ b/components/optimization_guide/core/optimization_guide_util_unittest.cc
@@ -17,7 +17,7 @@
 class OptimizationGuideUtilTest : public testing::Test {
  public:
   void SetUp() override {
-    prefs::RegisterProfilePrefs(pref_service_.registry());
+    prefs::RegisterLocalStatePrefs(pref_service_.registry());
   }
 
  protected:
diff --git a/components/optimization_guide/internal b/components/optimization_guide/internal
index 8d999c9..ac6a9d3 160000
--- a/components/optimization_guide/internal
+++ b/components/optimization_guide/internal
@@ -1 +1 @@
-Subproject commit 8d999c927e8818fa858ab41c9e7dc1cc4a20c0ea
+Subproject commit ac6a9d373504b20eedd6631925fa4a23fa763ad7
diff --git a/components/plus_addresses/BUILD.gn b/components/plus_addresses/BUILD.gn
index 151dd02..70a844b 100644
--- a/components/plus_addresses/BUILD.gn
+++ b/components/plus_addresses/BUILD.gn
@@ -2,6 +2,9 @@
 # Use of this source code is governed by a BSD-style license that can be
 # found in the LICENSE file.
 
+import("//build/buildflag_header.gni")
+import("//components/plus_addresses/buildflags.gni")
+
 source_set("plus_addresses") {
   sources = [
     "plus_address_client.cc",
@@ -45,6 +48,11 @@
   public_deps = [ "//base" ]
 }
 
+buildflag_header("plus_addresses_buildflags") {
+  header = "plus_addresses_buildflags.h"
+  flags = [ "PLUS_ADDRESSES_USE_INTERNAL_ANDROID_RESOURCES=$plus_addresses_use_internal_android_resources" ]
+}
+
 source_set("unit_tests") {
   testonly = true
   sources = [
diff --git a/components/plus_addresses/android/BUILD.gn b/components/plus_addresses/android/BUILD.gn
new file mode 100644
index 0000000..f7224b5
--- /dev/null
+++ b/components/plus_addresses/android/BUILD.gn
@@ -0,0 +1,10 @@
+# Copyright 2023 The Chromium Authors
+# Use of this source code is governed by a BSD-style license that can be
+# found in the LICENSE file.
+
+import("//build/config/android/config.gni")
+import("//build/config/android/rules.gni")
+
+android_resources("java_resources") {
+  sources = [ "java/res/drawable/plus_addresses_logo.xml" ]
+}
diff --git a/components/plus_addresses/android/java/res/drawable/plus_addresses_logo.xml b/components/plus_addresses/android/java/res/drawable/plus_addresses_logo.xml
new file mode 100644
index 0000000..9dcd013
--- /dev/null
+++ b/components/plus_addresses/android/java/res/drawable/plus_addresses_logo.xml
@@ -0,0 +1,17 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+Copyright 2023 The Chromium Authors
+Use of this source code is governed by a BSD-style license that can be
+found in the LICENSE file.
+-->
+
+<!-- TODO: crbug.com/1467623 - Replace this with the real logo once it's finalized. -->
+<vector xmlns:android="http://schemas.android.com/apk/res/android" xmlns:aapt="http://schemas.android.com/aapt"
+    android:viewportWidth="24"
+    android:viewportHeight="24"
+    android:width="24dp"
+    android:height="24dp">
+    <path
+        android:pathData="M20 4H4c-1.1 0 -2 0.9 -2 2v12c0 1.1 0.9 2 2 2h16c1.1 0 2 -0.9 2 -2V6c0 -1.1 -0.9 -2 -2 -2zm-0.8 2L12 10.8 4.8 6h14.4zM4 18V7.87l8 5.33 8 -5.33V18H4z"
+        android:fillColor="@macro/default_icon_color_secondary" />
+</vector>
diff --git a/components/plus_addresses/buildflags.gni b/components/plus_addresses/buildflags.gni
new file mode 100644
index 0000000..c7dbf61
--- /dev/null
+++ b/components/plus_addresses/buildflags.gni
@@ -0,0 +1,12 @@
+# Copyright 2023 The Chromium Authors
+# Use of this source code is governed by a BSD-style license that can be
+# found in the LICENSE file.
+
+import("//build/config/android/config.gni")
+import("//build/config/chrome_build.gni")
+
+declare_args() {
+  # Use drawables from the downstream clank/ repository only for branded builds.
+  plus_addresses_use_internal_android_resources =
+      is_android && enable_chrome_android_internal && is_chrome_branded
+}
diff --git a/components/plus_addresses/plus_address_service.h b/components/plus_addresses/plus_address_service.h
index 653c4d2..89e78ca 100644
--- a/components/plus_addresses/plus_address_service.h
+++ b/components/plus_addresses/plus_address_service.h
@@ -49,7 +49,7 @@
   // Returns `true` when plus addresses are supported. This includes checks that
   // the `kPlusAddressesEnabled` base::Feature is enabled, that there's a
   // signed-in user, the ability to talk to the server, and that off-the-record
-  // sessions will not offer new shielded email creation.
+  // sessions will not offer new plus address creation.
   // Virtual to allow overriding the behavior in tests. This allows external
   // tests (e.g., those in autofill that depend on this class) to substitute
   // their own behavior.
diff --git a/components/safe_browsing/content/browser/BUILD.gn b/components/safe_browsing/content/browser/BUILD.gn
index b1fc89b..a636c73 100644
--- a/components/safe_browsing/content/browser/BUILD.gn
+++ b/components/safe_browsing/content/browser/BUILD.gn
@@ -158,6 +158,7 @@
 source_set("unit_tests") {
   testonly = true
   sources = [
+    "async_check_tracker_unittest.cc",
     "client_report_util_unittest.cc",
     "client_side_detection_feature_cache_unittest.cc",
     "client_side_phishing_model_unittest.cc",
@@ -176,6 +177,7 @@
     "//components/safe_browsing/content/browser:browser",
     "//components/safe_browsing/core/browser:browser",
     "//components/safe_browsing/core/browser/db:test_database_manager",
+    "//components/safe_browsing/core/browser/db:v4_protocol_manager_util",
     "//components/safe_browsing/core/common",
     "//components/safe_browsing/core/common:safe_browsing_prefs",
     "//components/safe_browsing/core/common/fbs:client_model",
diff --git a/components/safe_browsing/content/browser/async_check_tracker.cc b/components/safe_browsing/content/browser/async_check_tracker.cc
index 2b331f3..0b8132c 100644
--- a/components/safe_browsing/content/browser/async_check_tracker.cc
+++ b/components/safe_browsing/content/browser/async_check_tracker.cc
@@ -11,6 +11,12 @@
 
 namespace safe_browsing {
 
+namespace {
+
+using security_interstitials::UnsafeResource;
+
+}  // namespace
+
 WEB_CONTENTS_USER_DATA_KEY_IMPL(AsyncCheckTracker);
 
 // static
@@ -34,6 +40,7 @@
 AsyncCheckTracker::AsyncCheckTracker(content::WebContents* web_contents,
                                      scoped_refptr<BaseUIManager> ui_manager)
     : content::WebContentsUserData<AsyncCheckTracker>(*web_contents),
+      content::WebContentsObserver(web_contents),
       ui_manager_(std::move(ui_manager)) {}
 
 AsyncCheckTracker::~AsyncCheckTracker() {
@@ -45,8 +52,53 @@
 
 void AsyncCheckTracker::TransferUrlChecker(
     std::unique_ptr<UrlCheckerOnSB> checker) {
-  // TODO(crbug.com/1501194): Replace callbacks in checker.
   pending_checker_ = std::move(checker);
+  pending_checker_->SwapCompleteCallback(base::BindRepeating(
+      &AsyncCheckTracker::PendingCheckerCompleted, GetWeakPtr()));
+}
+
+void AsyncCheckTracker::PendingCheckerCompleted(
+    UrlCheckerOnSB::OnCompleteCheckResult result) {
+  // TODO(crbug.com/1501194): Add a field in result to check
+  // if load_post_commit_error_page is false.
+  if (!result.proceed) {
+    show_interstitial_after_finish_navigation_ = true;
+  }
+}
+
+void AsyncCheckTracker::DidFinishNavigation(content::NavigationHandle* handle) {
+  if (!handle->IsInPrimaryMainFrame() || handle->IsSameDocument() ||
+      !handle->HasCommitted()) {
+    return;
+  }
+
+  if (!show_interstitial_after_finish_navigation_) {
+    return;
+  }
+  // Reset immediately. If resource is not found, we don't retry. The resource
+  // may be removed for other reasons.
+  show_interstitial_after_finish_navigation_ = false;
+
+  // Fields in `resource` is filled in by the call to
+  // GetSeverestThreatForNavigation.
+  UnsafeResource resource;
+  ThreatSeverity severity =
+      ui_manager_->GetSeverestThreatForNavigation(handle, resource);
+  if (severity == std::numeric_limits<ThreatSeverity>::max() ||
+      resource.threat_type == SBThreatType::SB_THREAT_TYPE_SAFE) {
+    return;
+  }
+  auto* primary_main_frame = web_contents()->GetPrimaryMainFrame();
+  resource.render_process_id = primary_main_frame->GetGlobalId().child_id;
+  resource.render_frame_token = primary_main_frame->GetFrameToken().value();
+  // The callback has already been run when BaseUIManager attempts to
+  // trigger post commit error page, so there is no need to run again.
+  resource.callback = base::DoNothing();
+  // Calling DisplayBlockingPage instead of StartDisplayingBlockingPage,
+  // because when we decide that post commit error page should be
+  // displayed, we already go through the checks in
+  // StartDisplayingBlockingPage.
+  ui_manager_->DisplayBlockingPage(resource);
 }
 
 bool AsyncCheckTracker::HasPendingCheckerForTesting() {
diff --git a/components/safe_browsing/content/browser/async_check_tracker.h b/components/safe_browsing/content/browser/async_check_tracker.h
index 0d08e6c..1e84b49 100644
--- a/components/safe_browsing/content/browser/async_check_tracker.h
+++ b/components/safe_browsing/content/browser/async_check_tracker.h
@@ -11,6 +11,7 @@
 #include "components/safe_browsing/content/browser/url_checker_on_sb.h"
 #include "components/security_interstitials/core/unsafe_resource.h"
 #include "content/public/browser/web_contents.h"
+#include "content/public/browser/web_contents_observer.h"
 #include "content/public/browser/web_contents_user_data.h"
 
 namespace safe_browsing {
@@ -30,7 +31,8 @@
 // This class should only be called on the UI thread.
 // TODO(crbug.com/1501194): Implement this class.
 class AsyncCheckTracker
-    : public content::WebContentsUserData<AsyncCheckTracker> {
+    : public content::WebContentsUserData<AsyncCheckTracker>,
+      public content::WebContentsObserver {
  public:
   static AsyncCheckTracker* GetOrCreateForWebContents(
       content::WebContents* web_contents,
@@ -51,6 +53,9 @@
   // Takes ownership of `checker`.
   void TransferUrlChecker(std::unique_ptr<UrlCheckerOnSB> checker);
 
+  // content::WebContentsObserver methods:
+  void DidFinishNavigation(content::NavigationHandle* handle) override;
+
   bool HasPendingCheckerForTesting();
 
   base::WeakPtr<AsyncCheckTracker> GetWeakPtr();
@@ -58,10 +63,14 @@
  private:
   friend class content::WebContentsUserData<AsyncCheckTracker>;
   friend class SBBrowserUrlLoaderThrottleTestBase;
+  friend class AsyncCheckTrackerTest;
 
   AsyncCheckTracker(content::WebContents* web_contents,
                     scoped_refptr<BaseUIManager> ui_manager);
 
+  // Called by `UrlCheckerOnSB`, when the check completes.
+  void PendingCheckerCompleted(UrlCheckerOnSB::OnCompleteCheckResult result);
+
   // Used to display a warning.
   scoped_refptr<BaseUIManager> ui_manager_;
 
@@ -69,6 +78,10 @@
   // TODO(crbug.com/1501194): Support holding multiple checkers.
   std::unique_ptr<UrlCheckerOnSB> pending_checker_;
 
+  // Set to true if interstitial should be shown after DidFinishNavigation is
+  // called. Reset to false after interstitial is triggered.
+  bool show_interstitial_after_finish_navigation_ = false;
+
   base::WeakPtrFactory<AsyncCheckTracker> weak_factory_{this};
 
   WEB_CONTENTS_USER_DATA_KEY_DECL();
diff --git a/components/safe_browsing/content/browser/async_check_tracker_unittest.cc b/components/safe_browsing/content/browser/async_check_tracker_unittest.cc
new file mode 100644
index 0000000..75bf1f7
--- /dev/null
+++ b/components/safe_browsing/content/browser/async_check_tracker_unittest.cc
@@ -0,0 +1,122 @@
+// Copyright 2023 The Chromium Authors
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "components/safe_browsing/content/browser/async_check_tracker.h"
+
+#include "components/safe_browsing/content/browser/base_ui_manager.h"
+#include "components/safe_browsing/content/browser/url_checker_on_sb.h"
+#include "components/safe_browsing/core/browser/db/v4_protocol_manager_util.h"
+#include "components/safe_browsing/core/browser/safe_browsing_url_checker_impl.h"
+#include "components/security_interstitials/core/unsafe_resource.h"
+#include "content/public/test/mock_navigation_handle.h"
+#include "content/public/test/test_renderer_host.h"
+
+namespace safe_browsing {
+
+namespace {
+
+using security_interstitials::UnsafeResource;
+
+class MockUIManager : public BaseUIManager {
+ public:
+  MockUIManager() : BaseUIManager() {}
+
+  MockUIManager(const MockUIManager&) = delete;
+  MockUIManager& operator=(const MockUIManager&) = delete;
+
+  void DisplayBlockingPage(const UnsafeResource& resource) override {
+    display_blocking_page_called_times_++;
+    displayed_resource_ = resource;
+  }
+
+  int DisplayBlockingPageCalledTimes() {
+    return display_blocking_page_called_times_;
+  }
+
+  UnsafeResource GetDisplayedResource() { return displayed_resource_; }
+
+ protected:
+  ~MockUIManager() override {}
+
+ private:
+  int display_blocking_page_called_times_ = 0;
+  UnsafeResource displayed_resource_;
+};
+
+}  // namespace
+
+class AsyncCheckTrackerTest : public content::RenderViewHostTestHarness {
+ protected:
+  void SetUp() override {
+    content::RenderViewHostTestHarness::SetUp();
+
+    url_ = GURL("https://example.com/");
+    ui_manager_ = base::MakeRefCounted<MockUIManager>();
+    tracker_ = AsyncCheckTracker::GetOrCreateForWebContents(web_contents(),
+                                                            ui_manager_.get());
+  }
+
+  void TearDown() override {
+    tracker_ = nullptr;
+    content::RenderViewHostTestHarness::TearDown();
+  }
+
+  void CallDidFinishNavigation(bool has_committed) {
+    content::MockNavigationHandle handle(url_, main_rfh());
+    handle.set_has_committed(has_committed);
+    tracker_->DidFinishNavigation(&handle);
+  }
+
+  void CallPendingCheckerCompleted(bool proceed) {
+    if (!proceed) {
+      // This mocks how BaseUIManager caches unsafe resource if
+      // load_post_commit_error_page is false.
+      UnsafeResource resource;
+      resource.url = url_;
+      resource.threat_type = SB_THREAT_TYPE_URL_PHISHING;
+      ui_manager_->AddUnsafeResource(url_, resource);
+    }
+    UrlCheckerOnSB::OnCompleteCheckResult result(
+        proceed, /*showed_interstitial=*/true,
+        SafeBrowsingUrlCheckerImpl::PerformedCheck::kUrlRealTimeCheck);
+    tracker_->PendingCheckerCompleted(result);
+  }
+
+  GURL url_;
+  scoped_refptr<MockUIManager> ui_manager_;
+  raw_ptr<AsyncCheckTracker> tracker_;
+};
+
+TEST_F(AsyncCheckTrackerTest,
+       DisplayBlockingPageNotCalled_PendingCheckNotCompleted) {
+  CallDidFinishNavigation(/*has_committed=*/true);
+  EXPECT_EQ(ui_manager_->DisplayBlockingPageCalledTimes(), 0);
+}
+
+TEST_F(AsyncCheckTrackerTest,
+       DisplayBlockingPageNotCalled_PendingCheckProceed) {
+  CallPendingCheckerCompleted(/*proceed=*/true);
+  CallDidFinishNavigation(/*has_committed=*/true);
+  EXPECT_EQ(ui_manager_->DisplayBlockingPageCalledTimes(), 0);
+}
+
+TEST_F(AsyncCheckTrackerTest,
+       DisplayBlockingPageNotCalled_NavigationNotCommitted) {
+  CallPendingCheckerCompleted(/*proceed=*/false);
+  CallDidFinishNavigation(/*has_committed=*/false);
+  EXPECT_EQ(ui_manager_->DisplayBlockingPageCalledTimes(), 0);
+}
+
+TEST_F(AsyncCheckTrackerTest, DisplayBlockingPageCalled) {
+  CallPendingCheckerCompleted(/*proceed=*/false);
+  CallDidFinishNavigation(/*has_committed=*/true);
+  EXPECT_EQ(ui_manager_->DisplayBlockingPageCalledTimes(), 1);
+  UnsafeResource resource = ui_manager_->GetDisplayedResource();
+  EXPECT_EQ(resource.threat_type, SB_THREAT_TYPE_URL_PHISHING);
+  EXPECT_EQ(resource.url, url_);
+  EXPECT_EQ(resource.render_process_id, main_rfh()->GetGlobalId().child_id);
+  EXPECT_EQ(resource.render_frame_token, main_rfh()->GetFrameToken().value());
+}
+
+}  // namespace safe_browsing
diff --git a/components/safe_browsing/content/browser/base_ui_manager.cc b/components/safe_browsing/content/browser/base_ui_manager.cc
index 5e0e9ee..db03cff 100644
--- a/components/safe_browsing/content/browser/base_ui_manager.cc
+++ b/components/safe_browsing/content/browser/base_ui_manager.cc
@@ -349,6 +349,9 @@
 
     // In some cases the interstitial must be loaded here since there will be
     // no navigation to intercept in the throttle.
+    // TODO(crbug.com/1501194): With async Safe Browsing check, this code path
+    // may be triggered for top-document warning. Update the below function and
+    // consolidate it with SafeBrowsingNavigationThrottle::WillFailRequest.
     std::unique_ptr<BaseBlockingPage> blocking_page = base::WrapUnique(
         CreateBlockingPageForSubresource(web_contents, unsafe_url, resource));
     base::WeakPtr<content::NavigationHandle> error_page_navigation_handle =
diff --git a/components/safe_browsing/content/browser/password_protection/password_protection_service_unittest.cc b/components/safe_browsing/content/browser/password_protection/password_protection_service_unittest.cc
index 39cb4411..6be6a543 100644
--- a/components/safe_browsing/content/browser/password_protection/password_protection_service_unittest.cc
+++ b/components/safe_browsing/content/browser/password_protection/password_protection_service_unittest.cc
@@ -1372,13 +1372,7 @@
     reused_password_account_type.set_account_type(
         ReusedPasswordAccountType::GMAIL);
     reused_password_account_type.set_is_account_syncing(false);
-// Currently password reuse warnings are not supported for non-sync gaia
-// passwords on Android.
-#if BUILDFLAG(IS_ANDROID)
-    EXPECT_FALSE(password_protection_service_->ShouldShowModalWarning(
-#else
     EXPECT_TRUE(password_protection_service_->ShouldShowModalWarning(
-#endif
         LoginReputationClientRequest::PASSWORD_REUSE_EVENT,
         reused_password_account_type, LoginReputationClientResponse::PHISHING));
   }
diff --git a/components/safe_browsing/content/browser/url_checker_on_sb.cc b/components/safe_browsing/content/browser/url_checker_on_sb.cc
index dfe00dc..50b4c41 100644
--- a/components/safe_browsing/content/browser/url_checker_on_sb.cc
+++ b/components/safe_browsing/content/browser/url_checker_on_sb.cc
@@ -148,6 +148,10 @@
   }
 }
 
+void UrlCheckerOnSB::SwapCompleteCallback(OnCompleteCheckCallback callback) {
+  complete_callback_ = std::move(callback);
+}
+
 void UrlCheckerOnSB::SetUrlCheckerForTesting(
     std::unique_ptr<SafeBrowsingUrlCheckerImpl> checker) {
   url_checker_for_testing_ = std::move(checker);
diff --git a/components/safe_browsing/content/browser/url_checker_on_sb.h b/components/safe_browsing/content/browser/url_checker_on_sb.h
index 7a25baf..8da5c10 100644
--- a/components/safe_browsing/content/browser/url_checker_on_sb.h
+++ b/components/safe_browsing/content/browser/url_checker_on_sb.h
@@ -103,6 +103,9 @@
 
   void LogWillProcessResponseTime(base::TimeTicks reached_time);
 
+  // Replaces the current |complete_callback_| with the new |callback|.
+  void SwapCompleteCallback(OnCompleteCheckCallback callback);
+
   void SetUrlCheckerForTesting(
       std::unique_ptr<SafeBrowsingUrlCheckerImpl> checker);
 
diff --git a/components/safe_browsing/core/browser/db/v4_local_database_manager_unittest.cc b/components/safe_browsing/core/browser/db/v4_local_database_manager_unittest.cc
index 493fb0a..4fd1f89 100644
--- a/components/safe_browsing/core/browser/db/v4_local_database_manager_unittest.cc
+++ b/components/safe_browsing/core/browser/db/v4_local_database_manager_unittest.cc
@@ -119,9 +119,7 @@
  public:
   GetHashProtocolManagerFactoryWithTestUrlLoader(
       network::TestURLLoaderFactory* test_url_loader_factory) {
-    test_shared_loader_factory_ =
-        base::MakeRefCounted<network::WeakWrapperSharedURLLoaderFactory>(
-            test_url_loader_factory);
+    test_shared_loader_factory_ = test_url_loader_factory->GetSafeWeakWrapper();
   }
 
   std::unique_ptr<V4GetHashProtocolManager> CreateProtocolManager(
diff --git a/components/safe_browsing/core/browser/hashprefix_realtime/hash_realtime_service_unittest.cc b/components/safe_browsing/core/browser/hashprefix_realtime/hash_realtime_service_unittest.cc
index 121209b..dedbd006 100644
--- a/components/safe_browsing/core/browser/hashprefix_realtime/hash_realtime_service_unittest.cc
+++ b/components/safe_browsing/core/browser/hashprefix_realtime/hash_realtime_service_unittest.cc
@@ -202,8 +202,7 @@
     test_url_loader_factory_ =
         std::make_unique<network::TestURLLoaderFactory>();
     test_shared_loader_factory_ =
-        base::MakeRefCounted<network::WeakWrapperSharedURLLoaderFactory>(
-            test_url_loader_factory_.get());
+        test_url_loader_factory_->GetSafeWeakWrapper();
     auto network_context_callback = base::BindRepeating(
         [](HashRealTimeServiceTest* test) { return test->GetNetworkContext(); },
         base::Unretained(this));
diff --git a/components/safe_browsing/core/browser/hashprefix_realtime/ohttp_key_service_unittest.cc b/components/safe_browsing/core/browser/hashprefix_realtime/ohttp_key_service_unittest.cc
index e7ca4ec..113ebac7 100644
--- a/components/safe_browsing/core/browser/hashprefix_realtime/ohttp_key_service_unittest.cc
+++ b/components/safe_browsing/core/browser/hashprefix_realtime/ohttp_key_service_unittest.cc
@@ -63,8 +63,7 @@
     test_url_loader_factory_ =
         std::make_unique<network::TestURLLoaderFactory>();
     test_shared_loader_factory_ =
-        base::MakeRefCounted<network::WeakWrapperSharedURLLoaderFactory>(
-            test_url_loader_factory_.get());
+        test_url_loader_factory_->GetSafeWeakWrapper();
     ohttp_key_service_ = std::make_unique<OhttpKeyService>(
         test_shared_loader_factory_, &pref_service_);
     std::string key = google_apis::GetAPIKey();
diff --git a/components/safe_browsing/core/browser/password_protection/password_protection_service_base.cc b/components/safe_browsing/core/browser/password_protection/password_protection_service_base.cc
index e2b2f65..ff07536 100644
--- a/components/safe_browsing/core/browser/password_protection/password_protection_service_base.cc
+++ b/components/safe_browsing/core/browser/password_protection/password_protection_service_base.cc
@@ -156,13 +156,6 @@
           CanGetReputationOfURL(main_frame_url));
 }
 
-bool PasswordProtectionServiceBase::
-    IsSyncingGMAILPasswordWithSignedInProtectionEnabled(
-        ReusedPasswordAccountType password_type) const {
-  return password_type.account_type() == ReusedPasswordAccountType::GMAIL &&
-         password_type.is_account_syncing();
-}
-
 void PasswordProtectionServiceBase::RequestFinished(
     PasswordProtectionRequest* request,
     RequestOutcome outcome,
@@ -425,7 +418,7 @@
 // Currently password reuse warnings are only supported for saved passwords
 // and GAIA passwords on Android.
 #if BUILDFLAG(IS_ANDROID)
-  return IsSyncingGMAILPasswordWithSignedInProtectionEnabled(password_type);
+  return password_type.account_type() == ReusedPasswordAccountType::GMAIL;
 #else
   if (password_type.account_type() ==
       ReusedPasswordAccountType::NON_GAIA_ENTERPRISE)
diff --git a/components/safe_browsing/core/browser/password_protection/password_protection_service_base.h b/components/safe_browsing/core/browser/password_protection/password_protection_service_base.h
index 8eb99be..70b23fa8c 100644
--- a/components/safe_browsing/core/browser/password_protection/password_protection_service_base.h
+++ b/components/safe_browsing/core/browser/password_protection/password_protection_service_base.h
@@ -267,10 +267,6 @@
                    const GURL& main_frame_url,
                    ReusedPasswordAccountType password_type);
 
-  // If ReusedPasswordAccountType is GMAIL and syncing.
-  bool IsSyncingGMAILPasswordWithSignedInProtectionEnabled(
-      ReusedPasswordAccountType password_type) const;
-
   // Called by a PasswordProtectionRequest instance when it finishes to remove
   // itself from |requests_|.
   virtual void RequestFinished(
diff --git a/components/search_engines/android/BUILD.gn b/components/search_engines/android/BUILD.gn
index c75e22b..1440a84 100644
--- a/components/search_engines/android/BUILD.gn
+++ b/components/search_engines/android/BUILD.gn
@@ -5,8 +5,35 @@
 import("//build/config/android/rules.gni")
 import("//third_party/jni_zero/jni_zero.gni")
 
+android_library("delegate_java") {
+  deps = [
+    "//base:base_java",
+    "//third_party/androidx:androidx_annotation_annotation_java",
+  ]
+
+  sources = [
+    "java/src/org/chromium/components/search_engines/SearchEngineCountryDelegate.java",
+    "java/src/org/chromium/components/search_engines/SearchEngineCountryDelegateImpl.java",
+  ]
+
+  # Add the actual implementation where necessary so that downstream targets
+  # can provide their own implementations.
+  jar_excluded_patterns = [ "*/SearchEngineCountryDelegateImpl.class" ]
+}
+
+android_library("delegate_public_impl_java") {
+  deps = [
+    ":delegate_java",
+    "//base:base_java",
+    "//third_party/androidx:androidx_annotation_annotation_java",
+  ]
+
+  sources = [ "java/src/org/chromium/components/search_engines/SearchEngineCountryDelegateImpl.java" ]
+}
+
 android_library("java") {
   deps = [
+    ":delegate_java",
     "//base:base_java",
     "//build/android:build_java",
     "//content/public/android:content_java",
diff --git a/components/search_engines/android/java/src/org/chromium/components/search_engines/SearchEngineCountryDelegate.java b/components/search_engines/android/java/src/org/chromium/components/search_engines/SearchEngineCountryDelegate.java
new file mode 100644
index 0000000..092e3a8
--- /dev/null
+++ b/components/search_engines/android/java/src/org/chromium/components/search_engines/SearchEngineCountryDelegate.java
@@ -0,0 +1,18 @@
+// Copyright 2023 The Chromium Authors
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+package org.chromium.components.search_engines;
+
+import androidx.annotation.MainThread;
+
+import org.chromium.base.Promise;
+
+/** Delegate class to get device country. Implemented in the internal code. */
+public interface SearchEngineCountryDelegate {
+    /**
+     * Returns a {@link Promise} that will be fulfilled with the device country code. The promise
+     * may be rejected if unable to fetch device country code.
+     */
+    @MainThread
+    public Promise<String> getDeviceCountry();
+}
diff --git a/components/search_engines/android/java/src/org/chromium/components/search_engines/SearchEngineCountryDelegateImpl.java b/components/search_engines/android/java/src/org/chromium/components/search_engines/SearchEngineCountryDelegateImpl.java
new file mode 100644
index 0000000..4201711
--- /dev/null
+++ b/components/search_engines/android/java/src/org/chromium/components/search_engines/SearchEngineCountryDelegateImpl.java
@@ -0,0 +1,20 @@
+// Copyright 2023 The Chromium Authors
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+package org.chromium.components.search_engines;
+
+import androidx.annotation.MainThread;
+
+import org.chromium.base.LocaleUtils;
+import org.chromium.base.Promise;
+import org.chromium.base.ThreadUtils;
+
+/** Placeholder implementation for public code. */
+public class SearchEngineCountryDelegateImpl implements SearchEngineCountryDelegate {
+    @Override
+    @MainThread
+    public Promise<String> getDeviceCountry() {
+        ThreadUtils.assertOnUiThread();
+        return Promise.fulfilled(LocaleUtils.getDefaultCountryCode());
+    }
+}
diff --git a/components/segmentation_platform/internal/selection/segment_result_provider.cc b/components/segmentation_platform/internal/selection/segment_result_provider.cc
index 4819f05..5bf6e0d4 100644
--- a/components/segmentation_platform/internal/selection/segment_result_provider.cc
+++ b/components/segmentation_platform/internal/selection/segment_result_provider.cc
@@ -54,9 +54,7 @@
 
  private:
   struct RequestState {
-    std::unordered_map<ModelSource,
-                       raw_ptr<ModelProvider, AcrossTasksDanglingUntriaged>>
-        model_providers;
+    std::unordered_map<ModelSource, raw_ptr<ModelProvider>> model_providers;
     std::unique_ptr<GetResultOptions> options;
   };
 
diff --git a/components/segmentation_platform/internal/signals/signal_filter_processor.h b/components/segmentation_platform/internal/signals/signal_filter_processor.h
index ed1b8206..2da7c58 100644
--- a/components/segmentation_platform/internal/signals/signal_filter_processor.h
+++ b/components/segmentation_platform/internal/signals/signal_filter_processor.h
@@ -58,8 +58,7 @@
   const raw_ptr<StorageService, DanglingUntriaged> storage_service_;
   const raw_ptr<UserActionSignalHandler> user_action_signal_handler_;
   const raw_ptr<HistogramSignalHandler> histogram_signal_handler_;
-  const raw_ptr<HistoryServiceObserver, AcrossTasksDanglingUntriaged>
-      history_observer_;
+  const raw_ptr<HistoryServiceObserver> history_observer_;
   const base::flat_set<SegmentId> segment_ids_;
 
   base::WeakPtrFactory<SignalFilterProcessor> weak_ptr_factory_{this};
diff --git a/components/segmentation_platform/internal/signals/signal_filter_processor_unittest.cc b/components/segmentation_platform/internal/signals/signal_filter_processor_unittest.cc
index 09fb328..5f7d20be 100644
--- a/components/segmentation_platform/internal/signals/signal_filter_processor_unittest.cc
+++ b/components/segmentation_platform/internal/signals/signal_filter_processor_unittest.cc
@@ -91,8 +91,8 @@
   base::test::TaskEnvironment task_environment_;
   std::unique_ptr<MockUserActionSignalHandler> user_action_signal_handler_;
   std::unique_ptr<MockHistogramSignalHandler> histogram_signal_handler_;
-  std::unique_ptr<SignalFilterProcessor> signal_filter_processor_;
   std::unique_ptr<MockHistoryObserver> history_observer_;
+  std::unique_ptr<SignalFilterProcessor> signal_filter_processor_;
   std::unique_ptr<MockUkmDataManager> ukm_data_manager_;
   std::unique_ptr<StorageService> storage_service_;
   raw_ptr<test::TestSegmentInfoDatabase> segment_database_;
diff --git a/components/segmentation_platform/internal/signals/signal_handler.cc b/components/segmentation_platform/internal/signals/signal_handler.cc
index 7f6305c..51a5349b 100644
--- a/components/segmentation_platform/internal/signals/signal_handler.cc
+++ b/components/segmentation_platform/internal/signals/signal_handler.cc
@@ -50,6 +50,7 @@
 
 void SignalHandler::TearDown() {
   if (histogram_signal_handler_) {
+    signal_filter_processor_.reset();
     history_service_observer_.reset();
   }
 }
diff --git a/components/segmentation_platform/internal/signals/signal_handler.h b/components/segmentation_platform/internal/signals/signal_handler.h
index 90201f5..56281b7 100644
--- a/components/segmentation_platform/internal/signals/signal_handler.h
+++ b/components/segmentation_platform/internal/signals/signal_handler.h
@@ -66,9 +66,9 @@
  private:
   std::unique_ptr<UserActionSignalHandler> user_action_signal_handler_;
   std::unique_ptr<HistogramSignalHandler> histogram_signal_handler_;
-  std::unique_ptr<SignalFilterProcessor> signal_filter_processor_;
   // Can be null when UKM engine is disabled.
   std::unique_ptr<HistoryServiceObserver> history_service_observer_;
+  std::unique_ptr<SignalFilterProcessor> signal_filter_processor_;
 };
 
 }  // namespace segmentation_platform
diff --git a/components/services/screen_ai/public/cpp/BUILD.gn b/components/services/screen_ai/public/cpp/BUILD.gn
index 240357f0..21ace58b 100644
--- a/components/services/screen_ai/public/cpp/BUILD.gn
+++ b/components/services/screen_ai/public/cpp/BUILD.gn
@@ -11,6 +11,7 @@
   deps = [
     "//base",
     "//components/component_updater",
+    "//ui/accessibility:ax_base",
   ]
 
   configs += [ "//build/config/compiler:wexit_time_destructors" ]
diff --git a/components/services/screen_ai/public/cpp/DEPS b/components/services/screen_ai/public/cpp/DEPS
index 905953f..7669085 100644
--- a/components/services/screen_ai/public/cpp/DEPS
+++ b/components/services/screen_ai/public/cpp/DEPS
@@ -1,3 +1,9 @@
 include_rules = [
   "+components/component_updater",
 ]
+
+specific_include_rules = {
+  "utilities.cc": [
+    "+ui/accessibility/accessibility_features.h",
+  ],
+}
diff --git a/components/services/screen_ai/public/cpp/utilities.cc b/components/services/screen_ai/public/cpp/utilities.cc
index f67e9607..14bb69c 100644
--- a/components/services/screen_ai/public/cpp/utilities.cc
+++ b/components/services/screen_ai/public/cpp/utilities.cc
@@ -4,12 +4,14 @@
 
 #include "components/services/screen_ai/public/cpp/utilities.h"
 
+#include "base/check_is_test.h"
 #include "base/files/file_enumerator.h"
 #include "base/files/file_path.h"
 #include "base/files/file_util.h"
 #include "base/path_service.h"
 #include "build/build_config.h"
 #include "components/component_updater/component_updater_paths.h"
+#include "ui/accessibility/accessibility_features.h"
 
 namespace screen_ai {
 
@@ -30,6 +32,24 @@
     "/run/imageloader/screen-ai/package/root/";
 #endif
 
+#if BUILDFLAG(IS_LINUX)
+constexpr base::FilePath::CharType kScreenAIResourcePathForTests[] =
+    FILE_PATH_LITERAL("third_party/screen-ai/linux/resources");
+
+// Get the absolute path of the ScreenAI component for testing.
+base::FilePath GetTestComponentBinaryPath() {
+  base::FilePath test_data_dir;
+  CHECK(base::PathService::Get(base::DIR_SRC_TEST_DATA_ROOT, &test_data_dir));
+
+  base::FilePath screenai_library_path =
+      test_data_dir.Append(base::FilePath(kScreenAIResourcePathForTests))
+          .Append(kScreenAIComponentBinaryName);
+
+  CHECK(base::PathExists(screenai_library_path));
+  return screenai_library_path;
+}
+#endif  // BUILDFLAG(IS_LINUX)
+
 }  // namespace
 
 base::FilePath GetRelativeInstallDir() {
@@ -52,6 +72,13 @@
 }
 
 base::FilePath GetLatestComponentBinaryPath() {
+#if BUILDFLAG(IS_LINUX)
+  if (features::IsScreenAITestModeEnabled()) {
+    CHECK_IS_TEST();
+    return GetTestComponentBinaryPath();
+  }
+#endif  // BUILDFLAG(IS_LINUX)
+
   base::FilePath latest_version_dir;
 #if BUILDFLAG(IS_CHROMEOS)
   latest_version_dir = base::FilePath::FromASCII(kScreenAIDlcRootPath);
diff --git a/components/signin/internal/identity_manager/accounts_cookie_mutator_impl.h b/components/signin/internal/identity_manager/accounts_cookie_mutator_impl.h
index 1a08daf..36d7d2b 100644
--- a/components/signin/internal/identity_manager/accounts_cookie_mutator_impl.h
+++ b/components/signin/internal/identity_manager/accounts_cookie_mutator_impl.h
@@ -59,12 +59,9 @@
 
  private:
   raw_ptr<SigninClient> signin_client_;
-  raw_ptr<ProfileOAuth2TokenService, AcrossTasksDanglingUntriaged>
-      token_service_;
-  raw_ptr<GaiaCookieManagerService, AcrossTasksDanglingUntriaged>
-      gaia_cookie_manager_service_;
-  raw_ptr<AccountTrackerService, AcrossTasksDanglingUntriaged>
-      account_tracker_service_;
+  raw_ptr<ProfileOAuth2TokenService> token_service_;
+  raw_ptr<GaiaCookieManagerService> gaia_cookie_manager_service_;
+  raw_ptr<AccountTrackerService> account_tracker_service_;
 };
 
 }  // namespace signin
diff --git a/components/signin/internal/identity_manager/accounts_mutator_impl.h b/components/signin/internal/identity_manager/accounts_mutator_impl.h
index 692e8b4..f200975 100644
--- a/components/signin/internal/identity_manager/accounts_mutator_impl.h
+++ b/components/signin/internal/identity_manager/accounts_mutator_impl.h
@@ -73,12 +73,9 @@
 #endif
 
  private:
-  raw_ptr<ProfileOAuth2TokenService, AcrossTasksDanglingUntriaged>
-      token_service_;
-  raw_ptr<AccountTrackerService, AcrossTasksDanglingUntriaged>
-      account_tracker_service_;
-  raw_ptr<PrimaryAccountManager, AcrossTasksDanglingUntriaged>
-      primary_account_manager_;
+  raw_ptr<ProfileOAuth2TokenService> token_service_;
+  raw_ptr<AccountTrackerService> account_tracker_service_;
+  raw_ptr<PrimaryAccountManager> primary_account_manager_;
 #if BUILDFLAG(ENABLE_DICE_SUPPORT)
   raw_ptr<PrefService> pref_service_;
 #endif
diff --git a/components/signin/internal/identity_manager/diagnostics_provider_impl.h b/components/signin/internal/identity_manager/diagnostics_provider_impl.h
index 491612b..3ec4d814 100644
--- a/components/signin/internal/identity_manager/diagnostics_provider_impl.h
+++ b/components/signin/internal/identity_manager/diagnostics_provider_impl.h
@@ -38,10 +38,8 @@
   base::TimeDelta GetDelayBeforeMakingCookieRequests() const override;
 
  private:
-  raw_ptr<GaiaCookieManagerService, AcrossTasksDanglingUntriaged>
-      gaia_cookie_manager_service_;
-  raw_ptr<ProfileOAuth2TokenService, AcrossTasksDanglingUntriaged>
-      profile_oauth2_token_service_;
+  raw_ptr<GaiaCookieManagerService> gaia_cookie_manager_service_;
+  raw_ptr<ProfileOAuth2TokenService> profile_oauth2_token_service_;
 };
 
 }  // namespace signin
diff --git a/components/signin/internal/identity_manager/primary_account_mutator_impl.h b/components/signin/internal/identity_manager/primary_account_mutator_impl.h
index 26724cd..6e1b9cd 100644
--- a/components/signin/internal/identity_manager/primary_account_mutator_impl.h
+++ b/components/signin/internal/identity_manager/primary_account_mutator_impl.h
@@ -52,10 +52,8 @@
 
   // Pointers to the services used by the PrimaryAccountMutatorImpl. They
   // *must* outlive this instance.
-  raw_ptr<AccountTrackerService, AcrossTasksDanglingUntriaged>
-      account_tracker_ = nullptr;
-  raw_ptr<PrimaryAccountManager, AcrossTasksDanglingUntriaged>
-      primary_account_manager_ = nullptr;
+  raw_ptr<AccountTrackerService> account_tracker_ = nullptr;
+  raw_ptr<PrimaryAccountManager> primary_account_manager_ = nullptr;
   raw_ptr<PrefService> pref_service_ = nullptr;
   raw_ptr<SigninClient> signin_client_ = nullptr;
 };
diff --git a/components/signin/public/identity_manager/identity_manager.cc b/components/signin/public/identity_manager/identity_manager.cc
index 6e77cbb9..c420232 100644
--- a/components/signin/public/identity_manager/identity_manager.cc
+++ b/components/signin/public/identity_manager/identity_manager.cc
@@ -118,10 +118,11 @@
 #if BUILDFLAG(IS_CHROMEOS)
       account_manager_facade_(parameters.account_manager_facade),
 #endif
-      identity_mutator_(std::move(parameters.primary_account_mutator),
-                        std::move(parameters.accounts_mutator),
-                        std::move(parameters.accounts_cookie_mutator),
-                        std::move(parameters.device_accounts_synchronizer)),
+      identity_mutator_(std::make_unique<IdentityMutator>(
+          std::move(parameters.primary_account_mutator),
+          std::move(parameters.accounts_mutator),
+          std::move(parameters.accounts_cookie_mutator),
+          std::move(parameters.device_accounts_synchronizer))),
       diagnostics_provider_(std::move(parameters.diagnostics_provider)),
       account_consistency_(parameters.account_consistency),
       should_verify_scope_access_(parameters.should_verify_scope_access) {
@@ -198,6 +199,8 @@
   token_service_observation_.Reset();
   primary_account_manager_observation_.Reset();
 
+  diagnostics_provider_.reset();
+  identity_mutator_.reset();
   account_fetcher_service_.reset();
   gaia_cookie_manager_service_.reset();
   primary_account_manager_.reset();
@@ -363,19 +366,19 @@
 }
 
 PrimaryAccountMutator* IdentityManager::GetPrimaryAccountMutator() {
-  return identity_mutator_.GetPrimaryAccountMutator();
+  return identity_mutator_->GetPrimaryAccountMutator();
 }
 
 AccountsMutator* IdentityManager::GetAccountsMutator() {
-  return identity_mutator_.GetAccountsMutator();
+  return identity_mutator_->GetAccountsMutator();
 }
 
 AccountsCookieMutator* IdentityManager::GetAccountsCookieMutator() {
-  return identity_mutator_.GetAccountsCookieMutator();
+  return identity_mutator_->GetAccountsCookieMutator();
 }
 
 DeviceAccountsSynchronizer* IdentityManager::GetDeviceAccountsSynchronizer() {
-  return identity_mutator_.GetDeviceAccountsSynchronizer();
+  return identity_mutator_->GetDeviceAccountsSynchronizer();
 }
 
 void IdentityManager::AddDiagnosticsObserver(DiagnosticsObserver* observer) {
@@ -429,7 +432,7 @@
 base::android::ScopedJavaLocalRef<jobject>
 IdentityManager::GetIdentityMutatorJavaObject() {
   return base::android::ScopedJavaLocalRef<jobject>(
-      identity_mutator_.GetJavaObject());
+      identity_mutator_->GetJavaObject());
 }
 
 void IdentityManager::RefreshAccountInfoIfStale(
diff --git a/components/signin/public/identity_manager/identity_manager.h b/components/signin/public/identity_manager/identity_manager.h
index f972e5a0..6423e25 100644
--- a/components/signin/public/identity_manager/identity_manager.h
+++ b/components/signin/public/identity_manager/identity_manager.h
@@ -654,7 +654,7 @@
       account_manager_facade_;
 #endif
 
-  IdentityMutator identity_mutator_;
+  std::unique_ptr<IdentityMutator> identity_mutator_;
 
   // DiagnosticsProvider instance.
   std::unique_ptr<DiagnosticsProvider> diagnostics_provider_;
diff --git a/components/spellcheck/renderer/spellcheck.cc b/components/spellcheck/renderer/spellcheck.cc
index 967dbd59..547473e0 100644
--- a/components/spellcheck/renderer/spellcheck.cc
+++ b/components/spellcheck/renderer/spellcheck.cc
@@ -8,6 +8,7 @@
 #include <stdint.h>
 
 #include <memory>
+#include <string_view>
 #include <utility>
 
 #include "base/check_op.h"
@@ -43,7 +44,6 @@
 using blink::WebTextDecorationType;
 
 namespace {
-const int kNoOffset = 0;
 
 class UpdateSpellcheckEnabled : public content::RenderFrameVisitor {
  public:
@@ -223,36 +223,30 @@
   languages_.back()->Init(std::move(file), language);
 }
 
-bool SpellCheck::SpellCheckWord(const char16_t* text_begin,
-                                size_t position_in_text,
-                                size_t text_length,
+bool SpellCheck::SpellCheckWord(std::u16string_view text,
                                 spellcheck::mojom::SpellCheckHost& host,
                                 size_t* misspelling_start,
                                 size_t* misspelling_len,
                                 std::nullptr_t null_suggestions_ptr) {
   return SpellCheckWord(
-      text_begin, position_in_text, text_length, host, misspelling_start,
-      misspelling_len,
+      text, host, misspelling_start, misspelling_len,
       static_cast<spellcheck::PerLanguageSuggestions*>(nullptr));
 }
 
 bool SpellCheck::SpellCheckWord(
-    const char16_t* text_begin,
-    size_t position_in_text,
-    size_t text_length,
+    std::u16string_view text,
     spellcheck::mojom::SpellCheckHost& host,
     size_t* misspelling_start,
     size_t* misspelling_len,
     std::vector<std::u16string>* optional_suggestions) {
   if (!optional_suggestions) {
-    return SpellCheckWord(text_begin, position_in_text, text_length, host,
-                          misspelling_start, misspelling_len, nullptr);
+    return SpellCheckWord(text, host, misspelling_start, misspelling_len,
+                          nullptr);
   }
 
   bool result;
   spellcheck::PerLanguageSuggestions per_language_suggestions;
-  result = SpellCheckWord(text_begin, position_in_text, text_length, host,
-                          misspelling_start, misspelling_len,
+  result = SpellCheckWord(text, host, misspelling_start, misspelling_len,
                           &per_language_suggestions);
   spellcheck::FillSuggestions(per_language_suggestions, optional_suggestions);
 
@@ -260,14 +254,11 @@
 }
 
 bool SpellCheck::SpellCheckWord(
-    const char16_t* text_begin,
-    size_t position_in_text,
-    size_t text_length,
+    std::u16string_view text,
     spellcheck::mojom::SpellCheckHost& host,
     size_t* misspelling_start,
     size_t* misspelling_len,
     spellcheck::PerLanguageSuggestions* optional_per_language_suggestions) {
-  DCHECK(text_length >= position_in_text);
   DCHECK(misspelling_start && misspelling_len) << "Out vars must be given.";
 
   // Do nothing if we need to delay initialization. (Rather than blocking,
@@ -295,6 +286,9 @@
   // calls.
   std::vector<std::u16string> language_suggestions;
 
+  const size_t text_length = text.size();
+  size_t position_in_text = 0;
+
   // This loop only advances if all languages agree that a sequence of text is
   // skippable.
   for (; position_in_text <= text_length;
@@ -318,13 +312,23 @@
       }
 #endif  // BUILDFLAG(IS_WIN) && BUILDFLAG(USE_BROWSER_SPELLCHECKER)
 
+      size_t possible_misspelling_start_relative_to_substring = 0;
       language_suggestions.clear();
       SpellcheckLanguage::SpellcheckWordResult result =
           (*language)->SpellCheckWord(
-              text_begin, position_in_text, text_length, host,
-              &possible_misspelling_start, &possible_misspelling_len,
+              text.substr(position_in_text), host,
+              &possible_misspelling_start_relative_to_substring,
+              &possible_misspelling_len,
               optional_per_language_suggestions ? &language_suggestions
                                                 : nullptr);
+      // SpellCheckWord informs us of a misspelling index relative to the
+      // substring of text which was passed in, so add `position_in_text` to
+      // this value to get the offset relative to `text`.
+      possible_misspelling_start =
+          possible_misspelling_len > 0
+              ? position_in_text +
+                    possible_misspelling_start_relative_to_substring
+              : 0;
 
       switch (result) {
         case SpellcheckLanguage::SpellcheckWordResult::IS_CORRECT:
@@ -398,7 +402,7 @@
     WebVector<WebTextCheckingResult>* results) {
   DCHECK(results);
   std::vector<WebTextCheckingResult> textcheck_results;
-  size_t length = text.length();
+  const size_t text_length = text.length();
   size_t position_in_text = 0;
 
   // Spellcheck::SpellCheckWord() automatically breaks text into words and
@@ -408,9 +412,19 @@
   // function until it returns true to check the whole text.
   size_t misspelling_start = 0;
   size_t misspelling_length = 0;
-  while (position_in_text <= length) {
-    if (SpellCheckWord(text.c_str(), position_in_text, length, host,
-                       &misspelling_start, &misspelling_length, nullptr)) {
+  while (position_in_text <= text_length) {
+    size_t misspelling_start_relative_to_substring = 0;
+    bool spelled_correctly = SpellCheckWord(
+        text.substr(position_in_text), host,
+        &misspelling_start_relative_to_substring, &misspelling_length, nullptr);
+    // SpellCheckWord informs us of a misspelling index relative to the
+    // substring of text which was passed in, so add `position_in_text` to this
+    // value to get the offset relative to `text`.
+    misspelling_start =
+        misspelling_length > 0
+            ? position_in_text + misspelling_start_relative_to_substring
+            : 0;
+    if (spelled_correctly) {
       results->Assign(textcheck_results);
       return true;
     }
@@ -550,10 +564,8 @@
       size_t unused_misspelling_start = 0;
       size_t unused_misspelling_length = 0;
       if (decoration == SpellCheckResult::SPELLING &&
-          SpellCheckWord(misspelled_word.c_str(), kNoOffset,
-                         misspelled_word.length(), host,
-                         &unused_misspelling_start, &unused_misspelling_length,
-                         nullptr)) {
+          SpellCheckWord(misspelled_word, host, &unused_misspelling_start,
+                         &unused_misspelling_length, nullptr)) {
         decoration = SpellCheckResult::GRAMMAR;
       }
     }
@@ -573,10 +585,8 @@
       size_t unused_misspelling_start = 0;
       size_t unused_misspelling_length = 0;
 
-      if (SpellCheckWord(misspelled_word.c_str(), kNoOffset,
-                         misspelled_word.length(), host,
-                         &unused_misspelling_start, &unused_misspelling_length,
-                         nullptr)) {
+      if (SpellCheckWord(misspelled_word, host, &unused_misspelling_start,
+                         &unused_misspelling_length, nullptr)) {
         // Correctly spelled in a Hunspell locale. If enhanced spell check was
         // used, turn the spelling mistake into a grammar mistake (local and
         // remote checks disagree, so the word is probably only contextually
diff --git a/components/spellcheck/renderer/spellcheck.h b/components/spellcheck/renderer/spellcheck.h
index 9eb4eb2..2d77fa4 100644
--- a/components/spellcheck/renderer/spellcheck.h
+++ b/components/spellcheck/renderer/spellcheck.h
@@ -8,6 +8,7 @@
 #include <memory>
 #include <set>
 #include <string>
+#include <string_view>
 #include <vector>
 
 #include "base/files/file.h"
@@ -98,9 +99,7 @@
   // If the word is spelled correctly, the vector is empty.
   // If optional_suggestions is NULL, suggested words will not be looked up.
   // Note that doing suggest lookups can be slow.
-  bool SpellCheckWord(const char16_t* text_begin,
-                      size_t position_in_text,
-                      size_t text_length,
+  bool SpellCheckWord(std::u16string_view text,
                       spellcheck::mojom::SpellCheckHost& host,
                       size_t* misspelling_start,
                       size_t* misspelling_len,
@@ -111,9 +110,7 @@
   // useful if the suggestions must be merged with another list of suggestions,
   // for example in the case of the Windows hybrid spellchecker.
   bool SpellCheckWord(
-      const char16_t* text_begin,
-      size_t position_in_text,
-      size_t text_length,
+      std::u16string_view text,
       spellcheck::mojom::SpellCheckHost& host,
       size_t* misspelling_start,
       size_t* misspelling_len,
@@ -121,9 +118,7 @@
 
   // Overload of SpellCheckWord for skipping optional suggestions with a
   // nullptr, used to disambiguate between the other two overloads.
-  bool SpellCheckWord(const char16_t* text_begin,
-                      size_t position_in_text,
-                      size_t text_length,
+  bool SpellCheckWord(std::u16string_view text,
                       spellcheck::mojom::SpellCheckHost& host,
                       size_t* misspelling_start,
                       size_t* misspelling_len,
diff --git a/components/spellcheck/renderer/spellcheck_language.cc b/components/spellcheck/renderer/spellcheck_language.cc
index b29c7f9..6bec80d 100644
--- a/components/spellcheck/renderer/spellcheck_language.cc
+++ b/components/spellcheck/renderer/spellcheck_language.cc
@@ -33,17 +33,13 @@
 }
 
 SpellcheckLanguage::SpellcheckWordResult SpellcheckLanguage::SpellCheckWord(
-    const char16_t* text_begin,
-    size_t position_in_text,
-    size_t text_length,
+    std::u16string_view text,
     spellcheck::mojom::SpellCheckHost& host,
     size_t* skip_or_misspelling_start,
     size_t* skip_or_misspelling_len,
     std::vector<std::u16string>* optional_suggestions) {
-  DCHECK_GE(text_length, position_in_text);
   DCHECK(skip_or_misspelling_start && skip_or_misspelling_len)
       << "Out vars must be given.";
-  size_t remaining_text_len = text_length - position_in_text;
 
   // Do nothing if we need to delay initialization. (Rather than blocking,
   // report the word as correctly spelled.)
@@ -56,8 +52,9 @@
 
   *skip_or_misspelling_start = 0;
   *skip_or_misspelling_len = 0;
-  if (remaining_text_len == 0)
+  if (text.empty()) {
     return IS_CORRECT;  // No input means always spelled correctly.
+  }
 
   std::u16string word;
   size_t word_start;
@@ -69,8 +66,7 @@
       return IS_CORRECT;
   }
 
-  text_iterator_.SetText(
-      std::u16string_view(text_begin + position_in_text, remaining_text_len));
+  text_iterator_.SetText(text);
   DCHECK(platform_spelling_engine_);
   for (SpellcheckWordIterator::WordIteratorStatus status =
            text_iterator_.GetNextWord(&word, &word_start, &word_length);
@@ -79,7 +75,7 @@
     // Found a character that is not able to be spellchecked so determine how
     // long the sequence of uncheckable characters is and then return.
     if (status == SpellcheckWordIterator::IS_SKIPPABLE) {
-      *skip_or_misspelling_start = position_in_text + word_start;
+      *skip_or_misspelling_start = word_start;
       while (status == SpellcheckWordIterator::IS_SKIPPABLE) {
         *skip_or_misspelling_len += word_length;
         status = text_iterator_.GetNextWord(&word, &word_start, &word_length);
@@ -99,7 +95,7 @@
       continue;
     }
 
-    *skip_or_misspelling_start = position_in_text + word_start;
+    *skip_or_misspelling_start = word_start;
     *skip_or_misspelling_len = word_length;
 
     // Get the list of suggested words.
diff --git a/components/spellcheck/renderer/spellcheck_language.h b/components/spellcheck/renderer/spellcheck_language.h
index c5488d7..9d1eeed 100644
--- a/components/spellcheck/renderer/spellcheck_language.h
+++ b/components/spellcheck/renderer/spellcheck_language.h
@@ -8,6 +8,7 @@
 #include <memory>
 #include <queue>
 #include <string>
+#include <string_view>
 #include <vector>
 
 #include "base/files/file.h"
@@ -47,13 +48,13 @@
   void Init(base::File file, const std::string& language);
 
   // Spellcheck a sequence of text.
-  // |text_length| is the length of the text being spellchecked. The |tag|
+  // |text| is the segment of the text being spellchecked. The |tag|
   // parameter should either be a unique identifier for the document that the
   // word came from (if the current platform requires it), or 0.
   //
-  // - Returns IS_CORRECT if every word from |position_in_text| to the end of
-  //   the text is recognized and spelled correctly. Also, returns IS_CORRECT if
-  //   the spellchecker failed to initialize.
+  // - Returns IS_CORRECT if every word in |text| is recognized and spelled
+  //   correctly. Also, returns IS_CORRECT if the spellchecker failed to
+  //   initialize.
   //
   // - Returns IS_SKIPPABLE if a sequence of skippable characters, such as
   //   punctuation, spaces, or unrecognized characters, is found.
@@ -67,9 +68,7 @@
   //   |*optional_suggestions|. If optional_suggestions is nullptr, suggested
   //   words will not be looked up. Note that doing suggest lookups can be slow.
   SpellcheckWordResult SpellCheckWord(
-      const char16_t* text_begin,
-      size_t position_in_text,
-      size_t text_length,
+      std::u16string_view text,
       spellcheck::mojom::SpellCheckHost& host,
       size_t* skip_or_misspelling_start,
       size_t* skip_or_misspelling_len,
diff --git a/components/spellcheck/renderer/spellcheck_provider.cc b/components/spellcheck/renderer/spellcheck_provider.cc
index 9b14fcb..485b54463 100644
--- a/components/spellcheck/renderer/spellcheck_provider.cc
+++ b/components/spellcheck/renderer/spellcheck_provider.cc
@@ -265,7 +265,6 @@
     size_t& length,
     blink::WebVector<blink::WebString>* optional_suggestions) {
   std::u16string word = text.Utf16();
-  const int kWordStart = 0;
 
   if (optional_suggestions) {
 #if BUILDFLAG(IS_WIN) && BUILDFLAG(USE_BROWSER_SPELLCHECKER)
@@ -275,8 +274,7 @@
     // suggestions are retrieved in SpellingMenuObserver::InitMenu on the
     // browser process side to avoid a blocking IPC.
     spellcheck::PerLanguageSuggestions per_language_suggestions;
-    spellcheck_->SpellCheckWord(word.c_str(), kWordStart, word.size(),
-                                GetSpellCheckHost(), &offset, &length,
+    spellcheck_->SpellCheckWord(word, GetSpellCheckHost(), &offset, &length,
                                 &per_language_suggestions);
 
 #if BUILDFLAG(IS_WIN) && BUILDFLAG(USE_BROWSER_SPELLCHECKER)
@@ -295,8 +293,7 @@
     spellcheck_renderer_metrics::RecordCheckedTextLengthWithSuggestions(
         base::saturated_cast<int>(word.size()));
   } else {
-    spellcheck_->SpellCheckWord(word.c_str(), kWordStart, word.size(),
-                                GetSpellCheckHost(), &offset, &length,
+    spellcheck_->SpellCheckWord(word, GetSpellCheckHost(), &offset, &length,
                                 /* optional suggestions vector */ nullptr);
     spellcheck_renderer_metrics::RecordCheckedTextLengthNoSuggestions(
         base::saturated_cast<int>(word.size()));
diff --git a/components/spellcheck/renderer/spellcheck_unittest.cc b/components/spellcheck/renderer/spellcheck_unittest.cc
index 4c32b5f..175dc9d 100644
--- a/components/spellcheck/renderer/spellcheck_unittest.cc
+++ b/components/spellcheck/renderer/spellcheck_unittest.cc
@@ -32,8 +32,6 @@
 
 namespace {
 
-const int kNoOffset = 0;
-
 base::FilePath GetHunspellDirectory() {
   base::FilePath hunspell_directory;
   if (!base::PathService::Get(base::DIR_SRC_TEST_DATA_ROOT,
@@ -550,15 +548,11 @@
       {L"3.141592653", true},
   };
   for (size_t i = 0; i < std::size(kTestCases); ++i) {
-    size_t input_length = 0;
-    if (kTestCases[i].input)
-      input_length = wcslen(kTestCases[i].input);
     size_t misspelling_start;
     size_t misspelling_length;
     bool result = spell_check()->SpellCheckWord(
-        base::WideToUTF16(kTestCases[i].input).c_str(), kNoOffset, input_length,
-        provider_.GetSpellCheckHost(), &misspelling_start, &misspelling_length,
-        nullptr);
+        base::WideToUTF16(kTestCases[i].input), provider_.GetSpellCheckHost(),
+        &misspelling_start, &misspelling_length, nullptr);
 
     EXPECT_EQ(kTestCases[i].expected_result, result);
     EXPECT_EQ(kTestCases[i].misspelling_start, misspelling_start);
@@ -599,15 +593,11 @@
 
   for (const auto& test_case : kTestCases) {
     std::vector<std::u16string> suggestions;
-    size_t input_length = 0;
-    if (test_case.input)
-      input_length = wcslen(test_case.input);
     size_t misspelling_start;
     size_t misspelling_length;
     bool result = spell_check()->SpellCheckWord(
-        base::WideToUTF16(test_case.input).c_str(), kNoOffset, input_length,
-        provider_.GetSpellCheckHost(), &misspelling_start, &misspelling_length,
-        &suggestions);
+        base::WideToUTF16(test_case.input), provider_.GetSpellCheckHost(),
+        &misspelling_start, &misspelling_length, &suggestions);
 
     // Check for spelling.
     EXPECT_EQ(test_case.expected_result, result);
@@ -959,16 +949,11 @@
 
   for (size_t i = 0; i < std::size(kTestCases); ++i) {
     ReinitializeSpellCheck(kTestCases[i].language);
-    size_t input_length = 0;
-    if (kTestCases[i].input)
-      input_length = wcslen(kTestCases[i].input);
-
     size_t misspelling_start = 0;
     size_t misspelling_length = 0;
     bool result = spell_check()->SpellCheckWord(
-        base::WideToUTF16(kTestCases[i].input).c_str(), kNoOffset, input_length,
-        provider_.GetSpellCheckHost(), &misspelling_start, &misspelling_length,
-        nullptr);
+        base::WideToUTF16(kTestCases[i].input), provider_.GetSpellCheckHost(),
+        &misspelling_start, &misspelling_length, nullptr);
 
     EXPECT_TRUE(result)
         << "\""
@@ -1024,8 +1009,8 @@
     size_t misspelling_start = 0;
     size_t misspelling_length = 0;
     bool result = spell_check()->SpellCheckWord(
-        word.c_str(), kNoOffset, word_length, provider_.GetSpellCheckHost(),
-        &misspelling_start, &misspelling_length, nullptr);
+        word, provider_.GetSpellCheckHost(), &misspelling_start,
+        &misspelling_length, nullptr);
     EXPECT_FALSE(result);
     EXPECT_EQ(0u, misspelling_start);
     EXPECT_EQ(word_length, misspelling_length);
@@ -1416,15 +1401,11 @@
   for (size_t j = 0; j < std::size(kLocales); ++j) {
     ReinitializeSpellCheck(kLocales[j]);
     for (size_t i = 0; i < std::size(kTestCases); ++i) {
-      size_t input_length = 0;
-      if (kTestCases[i].input)
-        input_length = strlen(kTestCases[i].input);
-
       size_t misspelling_start = 0;
       size_t misspelling_length = 0;
       bool result = spell_check()->SpellCheckWord(
-          base::ASCIIToUTF16(kTestCases[i].input).c_str(), kNoOffset,
-          input_length, provider_.GetSpellCheckHost(), &misspelling_start,
+          base::ASCIIToUTF16(kTestCases[i].input),
+          provider_.GetSpellCheckHost(), &misspelling_start,
           &misspelling_length, nullptr);
 
       EXPECT_EQ(kTestCases[i].should_pass, result) << kTestCases[i].input <<
@@ -1445,30 +1426,21 @@
                     {"typograpy", "typographits", true}};
 
   for (const auto& test_case : kTestCases) {
-    size_t suggestion_length = 0;
-    if (test_case.suggestion)
-      suggestion_length = strlen(test_case.suggestion);
-
     // First check that the NOSUGGEST flag didn't mark this word as not being in
     // the dictionary.
     size_t misspelling_start = 0;
     size_t misspelling_length = 0;
     bool result = spell_check()->SpellCheckWord(
-        base::ASCIIToUTF16(test_case.suggestion).c_str(), kNoOffset,
-        suggestion_length, provider_.GetSpellCheckHost(), &misspelling_start,
-        &misspelling_length, nullptr);
+        base::ASCIIToUTF16(test_case.suggestion), provider_.GetSpellCheckHost(),
+        &misspelling_start, &misspelling_length, nullptr);
 
     EXPECT_EQ(test_case.should_pass, result) << test_case.suggestion;
 
     // Now verify that this test case does not show up as a suggestion.
     std::vector<std::u16string> suggestions;
-    size_t input_length = 0;
-    if (test_case.input)
-      input_length = strlen(test_case.input);
     result = spell_check()->SpellCheckWord(
-        base::ASCIIToUTF16(test_case.input).c_str(), kNoOffset, input_length,
-        provider_.GetSpellCheckHost(), &misspelling_start, &misspelling_length,
-        &suggestions);
+        base::ASCIIToUTF16(test_case.input), provider_.GetSpellCheckHost(),
+        &misspelling_start, &misspelling_length, &suggestions);
 
     // Input word should be a misspelling.
     EXPECT_FALSE(result) << test_case.input << " is not a misspelling";
@@ -1553,8 +1525,7 @@
     size_t misspelling_length = 0;
     std::vector<std::u16string> suggestions;
     EXPECT_FALSE(spell_check()->SpellCheckWord(
-        base::ASCIIToUTF16(test_case.misspelled).c_str(), kNoOffset,
-        strlen(test_case.misspelled), provider_.GetSpellCheckHost(),
+        base::ASCIIToUTF16(test_case.misspelled), provider_.GetSpellCheckHost(),
         &misspelling_start, &misspelling_length, &suggestions));
     ASSERT_GE(suggestions.size(), 1U);
     EXPECT_EQ(suggestions[0], base::ASCIIToUTF16(test_case.suggestion));
diff --git a/components/viz/service/gl/gpu_service_impl.cc b/components/viz/service/gl/gpu_service_impl.cc
index d6c3080..8993f0b 100644
--- a/components/viz/service/gl/gpu_service_impl.cc
+++ b/components/viz/service/gl/gpu_service_impl.cc
@@ -309,22 +309,6 @@
 #endif  // BUILDFLAG(IS_CHROMEOS_ASH)
 }
 
-// Returns a callback which does a PostTask to run |callback| on the |runner|
-// task runner.
-template <typename... Params>
-base::OnceCallback<void(Params&&...)> WrapCallback(
-    scoped_refptr<base::SingleThreadTaskRunner> runner,
-    base::OnceCallback<void(Params...)> callback) {
-  return base::BindOnce(
-      [](base::SingleThreadTaskRunner* runner,
-         base::OnceCallback<void(Params && ...)> callback, Params&&... params) {
-        runner->PostTask(FROM_HERE,
-                         base::BindOnce(std::move(callback),
-                                        std::forward<Params>(params)...));
-      },
-      base::RetainedRef(std::move(runner)), std::move(callback));
-}
-
 bool WillGetGmbConfigFromGpu() {
 #if BUILDFLAG(IS_OZONE)
   // Ozone/X11 requires gpu initialization to be done before it can determine
@@ -979,7 +963,7 @@
 void GpuServiceImpl::GetVideoMemoryUsageStats(
     GetVideoMemoryUsageStatsCallback callback) {
   if (io_runner_->BelongsToCurrentThread()) {
-    auto wrap_callback = WrapCallback(io_runner_, std::move(callback));
+    auto wrap_callback = base::BindPostTask(io_runner_, std::move(callback));
     main_runner_->PostTask(
         FROM_HERE, base::BindOnce(&GpuServiceImpl::GetVideoMemoryUsageStats,
                                   weak_ptr_, std::move(wrap_callback)));
@@ -1468,9 +1452,9 @@
 
 void GpuServiceImpl::CommitCATransaction(CommitCATransactionCallback callback) {
   DCHECK(io_runner_->BelongsToCurrentThread());
-  main_runner_->PostTaskAndReply(FROM_HERE,
-                                 base::BindOnce(&ui::CommitCATransaction),
-                                 WrapCallback(io_runner_, std::move(callback)));
+  main_runner_->PostTaskAndReply(
+      FROM_HERE, base::BindOnce(&ui::CommitCATransaction),
+      base::BindPostTask(io_runner_, std::move(callback)));
 }
 #endif
 
diff --git a/components/webauthn/android/java/src/org/chromium/components/webauthn/InternalAuthenticator.java b/components/webauthn/android/java/src/org/chromium/components/webauthn/InternalAuthenticator.java
index ee75ae80..f1081ab 100644
--- a/components/webauthn/android/java/src/org/chromium/components/webauthn/InternalAuthenticator.java
+++ b/components/webauthn/android/java/src/org/chromium/components/webauthn/InternalAuthenticator.java
@@ -107,7 +107,7 @@
                         InternalAuthenticatorJni.get()
                                 .invokeMakeCredentialResponse(
                                         mNativeInternalAuthenticatorAndroid,
-                                        status.intValue(),
+                                        status,
                                         response == null ? null : response.serialize());
                     }
                 });
@@ -130,7 +130,7 @@
                         InternalAuthenticatorJni.get()
                                 .invokeGetAssertionResponse(
                                         mNativeInternalAuthenticatorAndroid,
-                                        status.intValue(),
+                                        status,
                                         response == null ? null : response.serialize());
                     }
                 });
diff --git a/content/browser/BUILD.gn b/content/browser/BUILD.gn
index cc04a054..2669b82 100644
--- a/content/browser/BUILD.gn
+++ b/content/browser/BUILD.gn
@@ -1017,6 +1017,8 @@
     "first_party_sets/first_party_sets_handler_impl_instance.h",
     "first_party_sets/first_party_sets_loader.cc",
     "first_party_sets/first_party_sets_loader.h",
+    "first_party_sets/first_party_sets_overrides_policy.cc",
+    "first_party_sets/first_party_sets_overrides_policy.h",
     "first_party_sets/first_party_sets_site_data_remover.cc",
     "first_party_sets/first_party_sets_site_data_remover.h",
     "font_access/font_access_manager.cc",
diff --git a/content/browser/browsing_data/conditional_cache_deletion_helper.cc b/content/browser/browsing_data/conditional_cache_deletion_helper.cc
index 0652f7b6..4607fdf 100644
--- a/content/browser/browsing_data/conditional_cache_deletion_helper.cc
+++ b/content/browser/browsing_data/conditional_cache_deletion_helper.cc
@@ -84,7 +84,7 @@
     if (previous_entry_) {
       if (condition_.Run(previous_entry_.get()))
         previous_entry_->Doom();
-      previous_entry_->Close();
+      previous_entry_.ExtractAsDangling()->Close();
     }
 
     if (result.net_error() == net::ERR_FAILED) {
diff --git a/content/browser/browsing_data/conditional_cache_deletion_helper.h b/content/browser/browsing_data/conditional_cache_deletion_helper.h
index 99238dfd..8f132a2b 100644
--- a/content/browser/browsing_data/conditional_cache_deletion_helper.h
+++ b/content/browser/browsing_data/conditional_cache_deletion_helper.h
@@ -70,12 +70,7 @@
   SEQUENCE_CHECKER(sequence_checker_);
 
   std::unique_ptr<disk_cache::Backend::Iterator> iterator_;
-  // This dangling raw_ptr occurred in:
-  // content_unittests: StoragePartitionImplTest.ClearCodeCacheSpecificURL
-  // https://ci.chromium.org/ui/p/chromium/builders/try/linux-rel/1428096/test-results?q=ExactID%3Aninja%3A%2F%2Fcontent%2Ftest%3Acontent_unittests%2FStoragePartitionImplTest.ClearCodeCacheSpecificURL+VHash%3Ab3ba0803668e9981
-  raw_ptr<disk_cache::Entry,
-          FlakyDanglingUntriaged | AcrossTasksDanglingUntriaged>
-      previous_entry_;
+  raw_ptr<disk_cache::Entry> previous_entry_;
 };
 
 }  // namespace content
diff --git a/content/browser/devtools/protocol/page_handler.cc b/content/browser/devtools/protocol/page_handler.cc
index a1d569b..6356e43 100644
--- a/content/browser/devtools/protocol/page_handler.cc
+++ b/content/browser/devtools/protocol/page_handler.cc
@@ -772,8 +772,12 @@
     return response;
 
   NavigationController& controller = host_->frame_tree()->controller();
-  controller.DeleteNavigationEntries(base::BindRepeating(&ReturnTrue));
-  return Response::Success();
+  if (controller.CanPruneAllButLastCommitted()) {
+    controller.DeleteNavigationEntries(base::BindRepeating(&ReturnTrue));
+    return Response::Success();
+  } else {
+    return Response::ServerError("History cannot be pruned");
+  }
 }
 
 void PageHandler::CaptureSnapshot(
diff --git a/content/browser/file_system_access/file_system_access_manager_impl.cc b/content/browser/file_system_access/file_system_access_manager_impl.cc
index 11c18e8..afcad3e 100644
--- a/content/browser/file_system_access/file_system_access_manager_impl.cc
+++ b/content/browser/file_system_access/file_system_access_manager_impl.cc
@@ -1480,6 +1480,11 @@
     return;
   }
 
+  if (permission_context_) {
+    permission_context_->OnFileCreatedFromShowSaveFilePicker(
+        /*file_picker_binding_context=*/binding_context.url, url);
+  }
+
   SharedHandleState shared_handle_state =
       GetSharedHandleStateForPath(entry.path, binding_context.storage_key,
                                   HandleType::kFile, UserAction::kSave);
diff --git a/content/browser/file_system_access/file_system_access_manager_impl_unittest.cc b/content/browser/file_system_access/file_system_access_manager_impl_unittest.cc
index 773e769..629c2c3 100644
--- a/content/browser/file_system_access/file_system_access_manager_impl_unittest.cc
+++ b/content/browser/file_system_access/file_system_access_manager_impl_unittest.cc
@@ -1588,6 +1588,14 @@
                   FileSystemAccessPermissionContext::UserAction::kSave))
       .WillOnce(testing::Return(allow_grant_));
 
+  EXPECT_CALL(
+      permission_context_,
+      OnFileCreatedFromShowSaveFilePicker(
+          /*file_picker_binding_context=*/binding_context.url,
+          file_system_context_->CreateCrackedFileSystemURL(
+              blink::StorageKey(),
+              storage::FileSystemType::kFileSystemTypeLocal, test_file)));
+
   auto save_file_picker_options = blink::mojom::SaveFilePickerOptions::New(
       blink::mojom::AcceptsTypesInfo::New(
           std::vector<blink::mojom::ChooseFileSystemEntryAcceptsOptionPtr>(),
diff --git a/content/browser/file_system_access/mock_file_system_access_permission_context.h b/content/browser/file_system_access/mock_file_system_access_permission_context.h
index f1d11dfe..7177374 100644
--- a/content/browser/file_system_access/mock_file_system_access_permission_context.h
+++ b/content/browser/file_system_access/mock_file_system_access_permission_context.h
@@ -102,6 +102,12 @@
                const base::FilePath& old_path,
                const base::FilePath& new_path),
               (override));
+
+  MOCK_METHOD(void,
+              OnFileCreatedFromShowSaveFilePicker,
+              (const GURL& file_picker_binding_context,
+               const storage::FileSystemURL& url),
+              (override));
 };
 
 }  // namespace content
diff --git a/content/browser/first_party_sets/first_party_set_parser.cc b/content/browser/first_party_sets/first_party_set_parser.cc
index c1297b8..1130a251 100644
--- a/content/browser/first_party_sets/first_party_set_parser.cc
+++ b/content/browser/first_party_sets/first_party_set_parser.cc
@@ -22,6 +22,7 @@
 #include "base/types/expected.h"
 #include "base/types/expected_macros.h"
 #include "base/values.h"
+#include "content/browser/first_party_sets/first_party_sets_overrides_policy.h"
 #include "content/public/browser/first_party_sets_handler.h"
 #include "content/public/common/content_features.h"
 #include "net/base/registry_controlled_domains/registry_controlled_domain.h"
@@ -780,8 +781,8 @@
 
   return FirstPartySetParser::PolicyParseResult(
       std::move(set_lists).transform([](ParsedPolicySetLists lists) {
-        return net::SetsMutation(std::move(lists.replacements),
-                                 std::move(lists.additions));
+        return FirstPartySetsOverridesPolicy(net::SetsMutation(
+            std::move(lists.replacements), std::move(lists.additions)));
       }),
       context.warnings());
 }
diff --git a/content/browser/first_party_sets/first_party_set_parser.h b/content/browser/first_party_sets/first_party_set_parser.h
index a98b2ff..23dbb54 100644
--- a/content/browser/first_party_sets/first_party_set_parser.h
+++ b/content/browser/first_party_sets/first_party_set_parser.h
@@ -12,6 +12,7 @@
 #include "base/strings/string_piece.h"
 #include "base/types/expected.h"
 #include "base/values.h"
+#include "content/browser/first_party_sets/first_party_sets_overrides_policy.h"
 #include "content/common/content_export.h"
 #include "content/public/browser/first_party_sets_handler.h"
 #include "net/base/schemeful_site.h"
@@ -25,9 +26,10 @@
 
 class CONTENT_EXPORT FirstPartySetParser {
  public:
-  using PolicyParseResult = std::pair<
-      base::expected<net::SetsMutation, FirstPartySetsHandler::ParseError>,
-      std::vector<FirstPartySetsHandler::ParseWarning>>;
+  using PolicyParseResult =
+      std::pair<base::expected<FirstPartySetsOverridesPolicy,
+                               FirstPartySetsHandler::ParseError>,
+                std::vector<FirstPartySetsHandler::ParseWarning>>;
 
   FirstPartySetParser() = delete;
   ~FirstPartySetParser() = delete;
diff --git a/content/browser/first_party_sets/first_party_set_parser_unittest.cc b/content/browser/first_party_sets/first_party_set_parser_unittest.cc
index 0806f7f..755cbb0c 100644
--- a/content/browser/first_party_sets/first_party_set_parser_unittest.cc
+++ b/content/browser/first_party_sets/first_party_set_parser_unittest.cc
@@ -827,10 +827,10 @@
               }
             )")
                                  .value();
-  EXPECT_THAT(
+  EXPECT_EQ(
       FirstPartySetParser::ParseSetsFromEnterprisePolicy(policy_value.GetDict())
           .first.value(),
-      net::SetsMutation({}, {}));
+      FirstPartySetsOverridesPolicy(net::SetsMutation({}, {})));
 }
 
 TEST(FirstPartySetParser_ParseSetsFromEnterprisePolicyTest,
@@ -842,10 +842,10 @@
               }
             )")
                                  .value();
-  EXPECT_THAT(
+  EXPECT_EQ(
       FirstPartySetParser::ParseSetsFromEnterprisePolicy(policy_value.GetDict())
           .first.value(),
-      net::SetsMutation({}, {}));
+      FirstPartySetsOverridesPolicy(net::SetsMutation({}, {})));
 }
 
 TEST(FirstPartySetParser_ParseSetsFromEnterprisePolicyTest,
@@ -1044,10 +1044,10 @@
               }
             )")
                                  .value();
-  EXPECT_THAT(
+  EXPECT_EQ(
       FirstPartySetParser::ParseSetsFromEnterprisePolicy(policy_value.GetDict())
           .first.value(),
-      net::SetsMutation(
+      FirstPartySetsOverridesPolicy(net::SetsMutation(
           {
               {
                   {primary2,
@@ -1067,7 +1067,7 @@
                    net::FirstPartySetEntry(primary3, net::SiteType::kAssociated,
                                            absl::nullopt)},
               },
-          }));
+          })));
 }
 
 TEST(FirstPartySetParser_ParseSetsFromEnterprisePolicyTest,
@@ -1102,10 +1102,10 @@
   // The invalid associated site is ignored, but the rest of the set is still
   // processed. If the set becomes a singleton as a result of ignoring a member
   // site, the set is ignored entirely.
-  EXPECT_THAT(
+  EXPECT_EQ(
       FirstPartySetParser::ParseSetsFromEnterprisePolicy(policy_value.GetDict())
           .first.value(),
-      net::SetsMutation(
+      FirstPartySetsOverridesPolicy(net::SetsMutation(
           {
               {
                   {primary1,
@@ -1116,7 +1116,7 @@
                                            absl::nullopt)},
               },
           },
-          {}));
+          {})));
 }
 
 TEST(FirstPartySetParser_ParseSetsFromEnterprisePolicyTest,
@@ -1140,10 +1140,10 @@
               }
             )")
                                  .value();
-  EXPECT_THAT(
+  EXPECT_EQ(
       FirstPartySetParser::ParseSetsFromEnterprisePolicy(policy_value.GetDict())
           .first.value(),
-      net::SetsMutation(
+      FirstPartySetsOverridesPolicy(net::SetsMutation(
           {
               {
                   {primary2,
@@ -1154,7 +1154,7 @@
                                            absl::nullopt)},
               },
           },
-          {}));
+          {})));
 }
 
 TEST(FirstPartySetParser_ParseSetsFromEnterprisePolicyTest,
@@ -1320,10 +1320,10 @@
               }
             )")
                                  .value();
-  EXPECT_THAT(
+  EXPECT_EQ(
       FirstPartySetParser::ParseSetsFromEnterprisePolicy(policy_value.GetDict())
           .first.value(),
-      net::SetsMutation(
+      FirstPartySetsOverridesPolicy(net::SetsMutation(
           {{
                {primary1,
                 net::FirstPartySetEntry(primary1, net::SiteType::kPrimary,
@@ -1340,7 +1340,7 @@
                 net::FirstPartySetEntry(primary2, net::SiteType::kAssociated,
                                         absl::nullopt)},
            }},
-          {}));
+          {})));
   EXPECT_THAT(
       FirstPartySetParser::ParseSetsFromEnterprisePolicy(policy_value.GetDict())
           .second,
@@ -1377,10 +1377,10 @@
               }
             )")
                                  .value();
-  EXPECT_THAT(
+  EXPECT_EQ(
       FirstPartySetParser::ParseSetsFromEnterprisePolicy(policy_value.GetDict())
           .first.value(),
-      net::SetsMutation(
+      FirstPartySetsOverridesPolicy(net::SetsMutation(
           {{
                {primary1,
                 net::FirstPartySetEntry(primary1, net::SiteType::kPrimary,
@@ -1403,7 +1403,7 @@
               {associatedSite3,
                net::FirstPartySetEntry(primary3, net::SiteType::kAssociated,
                                        absl::nullopt)},
-          }}));
+          }})));
   EXPECT_THAT(
       FirstPartySetParser::ParseSetsFromEnterprisePolicy(policy_value.GetDict())
           .second,
@@ -1450,10 +1450,10 @@
               }
             )")
                                  .value();
-  EXPECT_THAT(
+  EXPECT_EQ(
       FirstPartySetParser::ParseSetsFromEnterprisePolicy(policy_value.GetDict())
           .first.value(),
-      net::SetsMutation(
+      FirstPartySetsOverridesPolicy(net::SetsMutation(
           {{
                {primary1,
                 net::FirstPartySetEntry(primary1, net::SiteType::kPrimary,
@@ -1476,7 +1476,7 @@
               {associated3,
                net::FirstPartySetEntry(primary3, net::SiteType::kAssociated,
                                        absl::nullopt)},
-          }}));
+          }})));
   EXPECT_THAT(
       FirstPartySetParser::ParseSetsFromEnterprisePolicy(policy_value.GetDict())
           .second,
@@ -1515,10 +1515,10 @@
               }
             )")
                                  .value();
-  EXPECT_THAT(
+  EXPECT_EQ(
       FirstPartySetParser::ParseSetsFromEnterprisePolicy(policy_value.GetDict())
           .first.value(),
-      net::SetsMutation(
+      FirstPartySetsOverridesPolicy(net::SetsMutation(
           {{
                {primary1,
                 net::FirstPartySetEntry(primary1, net::SiteType::kPrimary,
@@ -1541,7 +1541,7 @@
                 net::FirstPartySetEntry(primary2, net::SiteType::kAssociated,
                                         absl::nullopt)},
            }},
-          {}));
+          {})));
 
   EXPECT_THAT(
       FirstPartySetParser::ParseSetsFromEnterprisePolicy(policy_value.GetDict())
@@ -1698,10 +1698,10 @@
               }
             )")
                                  .value();
-  EXPECT_THAT(
+  EXPECT_EQ(
       FirstPartySetParser::ParseSetsFromEnterprisePolicy(policy_value.GetDict())
           .first.value(),
-      net::SetsMutation(
+      FirstPartySetsOverridesPolicy(net::SetsMutation(
           {{
               {primary1, net::FirstPartySetEntry(
                              primary1, net::SiteType::kPrimary, absl::nullopt)},
@@ -1724,7 +1724,7 @@
                net::FirstPartySetEntry(primary1, net::SiteType::kAssociated,
                                        absl::nullopt)},
           }},
-          {}));
+          {})));
 }
 
 TEST(FirstPartySetParser, ParseFromCommandLine_Invalid_MultipleSets) {
diff --git a/content/browser/first_party_sets/first_party_sets_handler_impl_instance.cc b/content/browser/first_party_sets/first_party_sets_handler_impl_instance.cc
index 39efc17..9751bc55 100644
--- a/content/browser/first_party_sets/first_party_sets_handler_impl_instance.cc
+++ b/content/browser/first_party_sets/first_party_sets_handler_impl_instance.cc
@@ -21,6 +21,7 @@
 #include "content/browser/first_party_sets/first_party_set_parser.h"
 #include "content/browser/first_party_sets/first_party_sets_handler_impl.h"
 #include "content/browser/first_party_sets/first_party_sets_loader.h"
+#include "content/browser/first_party_sets/first_party_sets_overrides_policy.h"
 #include "content/browser/first_party_sets/first_party_sets_site_data_remover.h"
 #include "content/public/browser/browser_context.h"
 #include "content/public/browser/content_browser_client.h"
@@ -529,7 +530,12 @@
   auto [parsed, warnings] =
       FirstPartySetParser::ParseSetsFromEnterprisePolicy(policy);
 
-  return global_sets_->ComputeConfig(parsed.value_or(net::SetsMutation()));
+  if (!parsed.has_value()) {
+    return global_sets_->ComputeConfig(net::SetsMutation());
+  }
+
+  FirstPartySetsOverridesPolicy& policy_result = parsed.value();
+  return global_sets_->ComputeConfig(std::move(policy_result.mutation()));
 }
 
 bool FirstPartySetsHandlerImplInstance::ForEachEffectiveSetEntry(
diff --git a/content/browser/first_party_sets/first_party_sets_overrides_policy.cc b/content/browser/first_party_sets/first_party_sets_overrides_policy.cc
new file mode 100644
index 0000000..1a95ff0
--- /dev/null
+++ b/content/browser/first_party_sets/first_party_sets_overrides_policy.cc
@@ -0,0 +1,25 @@
+// Copyright 2023 The Chromium Authors
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "content/browser/first_party_sets/first_party_sets_overrides_policy.h"
+
+#include "net/first_party_sets/sets_mutation.h"
+
+namespace content {
+
+FirstPartySetsOverridesPolicy::FirstPartySetsOverridesPolicy(
+    net::SetsMutation mutation)
+    : mutation_(std::move(mutation)) {}
+
+FirstPartySetsOverridesPolicy::FirstPartySetsOverridesPolicy(
+    FirstPartySetsOverridesPolicy&&) = default;
+FirstPartySetsOverridesPolicy& FirstPartySetsOverridesPolicy::operator=(
+    FirstPartySetsOverridesPolicy&&) = default;
+
+FirstPartySetsOverridesPolicy::~FirstPartySetsOverridesPolicy() = default;
+
+bool FirstPartySetsOverridesPolicy::operator==(
+    const FirstPartySetsOverridesPolicy& other) const = default;
+
+}  // namespace content
diff --git a/content/browser/first_party_sets/first_party_sets_overrides_policy.h b/content/browser/first_party_sets/first_party_sets_overrides_policy.h
new file mode 100644
index 0000000..43c85344
--- /dev/null
+++ b/content/browser/first_party_sets/first_party_sets_overrides_policy.h
@@ -0,0 +1,36 @@
+// Copyright 2023 The Chromium Authors
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef CONTENT_BROWSER_FIRST_PARTY_SETS_FIRST_PARTY_SETS_OVERRIDES_POLICY_H_
+#define CONTENT_BROWSER_FIRST_PARTY_SETS_FIRST_PARTY_SETS_OVERRIDES_POLICY_H_
+
+#include "content/common/content_export.h"
+#include "net/first_party_sets/sets_mutation.h"
+
+namespace content {
+
+// This class holds the inputs/configuration associated with the
+// RelatedWebsiteSetsOverrides/FirstPartySetsOverrides policy, after it has been
+// parsed.
+class CONTENT_EXPORT FirstPartySetsOverridesPolicy {
+ public:
+  explicit FirstPartySetsOverridesPolicy(net::SetsMutation mutation);
+
+  FirstPartySetsOverridesPolicy(FirstPartySetsOverridesPolicy&&);
+  FirstPartySetsOverridesPolicy& operator=(FirstPartySetsOverridesPolicy&&);
+
+  ~FirstPartySetsOverridesPolicy();
+
+  bool operator==(const FirstPartySetsOverridesPolicy& other) const;
+
+  const net::SetsMutation& mutation() const { return mutation_; }
+  net::SetsMutation& mutation() { return mutation_; }
+
+ private:
+  net::SetsMutation mutation_;
+};
+
+}  // namespace content
+
+#endif  // CONTENT_BROWSER_FIRST_PARTY_SETS_FIRST_PARTY_SETS_OVERRIDES_POLICY_H_
diff --git a/content/browser/indexed_db/indexed_db_backing_store_unittest.cc b/content/browser/indexed_db/indexed_db_backing_store_unittest.cc
index e127908..9f49000 100644
--- a/content/browser/indexed_db/indexed_db_backing_store_unittest.cc
+++ b/content/browser/indexed_db/indexed_db_backing_store_unittest.cc
@@ -40,6 +40,7 @@
 #include "components/services/storage/privileged/mojom/indexed_db_control.mojom-test-utils.h"
 #include "components/services/storage/public/cpp/buckets/bucket_locator.h"
 #include "content/browser/indexed_db/indexed_db_bucket_context.h"
+#include "content/browser/indexed_db/indexed_db_bucket_context_handle.h"
 #include "content/browser/indexed_db/indexed_db_class_factory.h"
 #include "content/browser/indexed_db/indexed_db_context_impl.h"
 #include "content/browser/indexed_db/indexed_db_factory.h"
diff --git a/content/browser/indexed_db/indexed_db_bucket_context.cc b/content/browser/indexed_db/indexed_db_bucket_context.cc
index 30ca7bf..3166ffa3 100644
--- a/content/browser/indexed_db/indexed_db_bucket_context.cc
+++ b/content/browser/indexed_db/indexed_db_bucket_context.cc
@@ -261,6 +261,7 @@
 
 IndexedDBBucketContext::Delegate::Delegate()
     : on_fatal_error(base::DoNothing()),
+      on_corruption(base::DoNothing()),
       on_ready_for_destruction(base::DoNothing()),
       on_content_changed(base::DoNothing()),
       on_writing_transaction_complete(base::DoNothing()),
@@ -529,7 +530,7 @@
         continue;
 
       case IndexedDBDatabase::RunTasksResult::kError:
-        delegate().on_fatal_error.Run(status);
+        delegate().on_fatal_error.Run(status, {});
         return;
 
       case IndexedDBDatabase::RunTasksResult::kCanBeDestroyed:
@@ -542,6 +543,67 @@
   }
 }
 
+void IndexedDBBucketContext::DeleteDatabase(
+    mojo::PendingAssociatedRemote<blink::mojom::IDBFactoryClient>
+        pending_factory_client,
+    std::u16string name,
+    bool force_close,
+    base::OnceClosure on_deletion_complete) {
+  // First, check the databases that are already represented by
+  // `IndexedDBDatabase` objects. If one exists, schedule it to be deleted and
+  // we're done.
+  auto it = databases_.find(name);
+  if (it != databases_.end()) {
+    base::WeakPtr<IndexedDBDatabase> database = it->second->AsWeakPtr();
+    it->second->ScheduleDeleteDatabase(std::make_unique<IndexedDBFactoryClient>(
+                                           std::move(pending_factory_client)),
+                                       std::move(on_deletion_complete));
+    if (force_close) {
+      leveldb::Status status = database->ForceCloseAndRunTasks();
+      if (!status.ok()) {
+        delegate().on_fatal_error.Run(status, "Error aborting transactions.");
+      }
+    }
+    return;
+  }
+
+  // Otherwise, verify that a database with the given name exists in the backing
+  // store. If not, report success.
+  std::vector<std::u16string> names;
+  leveldb::Status s = backing_store()->GetDatabaseNames(&names);
+  if (!s.ok()) {
+    IndexedDBDatabaseError error(blink::mojom::IDBException::kUnknownError,
+                                 "Internal error opening backing store for "
+                                 "indexedDB.deleteDatabase.");
+    IndexedDBFactoryClient(std::move(pending_factory_client)).OnError(error);
+    if (s.IsCorruption()) {
+      delegate().on_corruption.Run(error);
+    }
+    return;
+  }
+
+  if (!base::Contains(names, name)) {
+    IndexedDBFactoryClient(std::move(pending_factory_client))
+        .OnDeleteSuccess(/*version=*/0);
+    return;
+  }
+
+  // If it exists but does not already have an `IndexedDBDatabase` object,
+  // create it and initiate deletion.
+  auto database = std::make_unique<IndexedDBDatabase>(
+      name, *this, IndexedDBDatabase::Identifier(bucket_locator(), name));
+  IndexedDBDatabase* database_ptr = AddDatabase(name, std::move(database));
+  database_ptr->ScheduleDeleteDatabase(std::make_unique<IndexedDBFactoryClient>(
+                                           std::move(pending_factory_client)),
+                                       std::move(on_deletion_complete));
+  if (force_close) {
+    leveldb::Status status = database_ptr->ForceCloseAndRunTasks();
+    if (!status.ok()) {
+      delegate().on_fatal_error.Run(status, "Error aborting transactions.");
+    }
+  }
+}
+
 void IndexedDBBucketContext::FillInMetadata(
     storage::mojom::IdbBucketMetadataPtr info,
     base::OnceCallback<void(storage::mojom::IdbBucketMetadataPtr)> result) {
diff --git a/content/browser/indexed_db/indexed_db_bucket_context.h b/content/browser/indexed_db/indexed_db_bucket_context.h
index 4201f5a..74de72b 100644
--- a/content/browser/indexed_db/indexed_db_bucket_context.h
+++ b/content/browser/indexed_db/indexed_db_bucket_context.h
@@ -25,7 +25,7 @@
 #include "components/services/storage/public/cpp/quota_error_or.h"
 #include "components/services/storage/public/mojom/blob_storage_context.mojom.h"
 #include "components/services/storage/public/mojom/file_system_access_context.mojom.h"
-#include "content/browser/indexed_db/indexed_db_bucket_context_handle.h"
+#include "content/browser/indexed_db/indexed_db_database_error.h"
 #include "content/browser/indexed_db/indexed_db_external_object.h"
 #include "content/browser/indexed_db/indexed_db_task_helper.h"
 #include "content/common/content_export.h"
@@ -38,6 +38,7 @@
 
 namespace content {
 class IndexedDBBackingStore;
+class IndexedDBBucketContextHandle;
 class IndexedDBDatabase;
 class IndexedDBDataItemReader;
 class IndexedDBFactory;
@@ -130,8 +131,13 @@
 
     // Called when a fatal error has occurred that should result in tearing down
     // the backing store. `IndexedDBBucketContext` *may* be synchronously
-    // destroyed after this is invoked.
-    base::RepeatingCallback<void(leveldb::Status)> on_fatal_error;
+    // destroyed after this is invoked. The string, if non-empty, is used as an
+    // error message.
+    base::RepeatingCallback<void(leveldb::Status, const std::string&)>
+        on_fatal_error;
+
+    // Called when the backing store has been corrupted.
+    base::RepeatingCallback<void(const IndexedDBDatabaseError&)> on_corruption;
 
     // Called when the bucket context is ready to be destroyed.
     base::RepeatingCallback<void()> on_ready_for_destruction;
@@ -271,6 +277,15 @@
     return file_system_access_context_.get();
   }
 
+  // `pending_factory_client` must be bound on the thread that uses it, hence it
+  // is not safe to bind it before passing here.
+  void DeleteDatabase(
+      mojo::PendingAssociatedRemote<blink::mojom::IDBFactoryClient>
+          pending_factory_client,
+      std::u16string name,
+      bool force_close,
+      base::OnceClosure on_deletion_complete);
+
   // Finishes filling in `info` with data relevant to idb-internals and passes
   // the result back via `result`.
   void FillInMetadata(
@@ -369,6 +384,9 @@
   std::unique_ptr<IndexedDBBackingStore> backing_store_;
   scoped_refptr<storage::QuotaManagerProxy> quota_manager_proxy_;
 
+  // Databases in the backing store which are already loaded/represented by
+  // IndexedDBDatabase objects. The backing store may have other databases which
+  // have not yet been loaded.
   DBMap databases_;
   // This is the refcount for the number of IndexedDBBucketContextHandle's
   // given out for this factory using OpenReference. This is used as closing
@@ -411,6 +429,9 @@
   // True if there's already a task queued to call `RunTasks()`.
   bool task_run_queued_ = false;
 
+  // Base directory for blobs and backing store files.
+  base::FilePath data_path_;
+
   base::WeakPtrFactory<IndexedDBBucketContext> weak_factory_{this};
 };
 
diff --git a/content/browser/indexed_db/indexed_db_connection.cc b/content/browser/indexed_db/indexed_db_connection.cc
index e6ceba53c..78b8090c 100644
--- a/content/browser/indexed_db/indexed_db_connection.cc
+++ b/content/browser/indexed_db/indexed_db_connection.cc
@@ -89,7 +89,7 @@
   bucket_context_handle_->quota_manager()->NotifyBucketAccessed(
       bucket_context_handle_->bucket_locator(), base::Time::Now());
   if (!status.ok()) {
-    bucket_context_handle_->delegate().on_fatal_error.Run(status);
+    bucket_context_handle_->delegate().on_fatal_error.Run(status, {});
   }
   bucket_context_handle_.Release();
   return callbacks;
@@ -152,7 +152,7 @@
                transaction->id());
   leveldb::Status status = transaction->Abort(error);
   if (!status.ok())
-    bucket_context_handle_->delegate().on_fatal_error.Run(status);
+    bucket_context_handle_->delegate().on_fatal_error.Run(status, {});
 }
 
 leveldb::Status IndexedDBConnection::AbortAllTransactions(
diff --git a/content/browser/indexed_db/indexed_db_connection.h b/content/browser/indexed_db/indexed_db_connection.h
index a5059d2..c31ba9a 100644
--- a/content/browser/indexed_db/indexed_db_connection.h
+++ b/content/browser/indexed_db/indexed_db_connection.h
@@ -13,7 +13,7 @@
 #include "base/memory/raw_ptr.h"
 #include "base/memory/ref_counted.h"
 #include "base/memory/weak_ptr.h"
-#include "content/browser/indexed_db/indexed_db_bucket_context.h"
+#include "content/browser/indexed_db/indexed_db_bucket_context_handle.h"
 #include "content/browser/indexed_db/indexed_db_database.h"
 #include "content/common/content_export.h"
 #include "mojo/public/cpp/bindings/remote_set.h"
@@ -23,7 +23,7 @@
 class IndexedDBDatabaseCallbacks;
 class IndexedDBDatabaseError;
 class IndexedDBTransaction;
-class IndexedDBBucketContextHandle;
+class IndexedDBBucketContext;
 
 class CONTENT_EXPORT IndexedDBConnection {
  public:
diff --git a/content/browser/indexed_db/indexed_db_database_unittest.cc b/content/browser/indexed_db/indexed_db_database_unittest.cc
index 74dc86d..d698509 100644
--- a/content/browser/indexed_db/indexed_db_database_unittest.cc
+++ b/content/browser/indexed_db/indexed_db_database_unittest.cc
@@ -98,7 +98,9 @@
 
   void TearDown() override { db_ = nullptr; }
 
-  void OnFatalError(leveldb::Status s) { error_called_ = true; }
+  void OnFatalError(leveldb::Status s, const std::string& error_message) {
+    error_called_ = true;
+  }
 
   void OnBucketContextReadyForDestruction() { bucket_context_.reset(); }
 
diff --git a/content/browser/indexed_db/indexed_db_factory.cc b/content/browser/indexed_db/indexed_db_factory.cc
index fad29e7..1c8c512a 100644
--- a/content/browser/indexed_db/indexed_db_factory.cc
+++ b/content/browser/indexed_db/indexed_db_factory.cc
@@ -278,7 +278,6 @@
   const storage::BucketLocator bucket_locator = bucket->ToBucketLocator();
   const base::FilePath data_directory = context_->GetDataPath(bucket_locator);
 
-  IndexedDBDatabase::Identifier unique_identifier(bucket_locator, name);
   IndexedDBBucketContextHandle bucket_context_handle;
   leveldb::Status s;
   IndexedDBDatabaseError error;
@@ -313,7 +312,7 @@
   }
   auto database = std::make_unique<IndexedDBDatabase>(
       name, *bucket_context_handle.bucket_context(),
-      std::move(unique_identifier));
+      IndexedDBDatabase::Identifier(bucket_locator, name));
   // The database must be added before the schedule call, as the
   // CreateDatabaseDeleteClosure can be called synchronously.
   auto* database_ptr = database.get();
@@ -333,18 +332,15 @@
   const absl::optional<storage::BucketInfo>& bucket =
       receivers_.current_context().bucket;
 
-  auto factory_client = std::make_unique<IndexedDBFactoryClient>(
-      std::move(pending_factory_client));
-
   // Return error if failed to retrieve bucket from the QuotaManager.
   if (!bucket) {
-    factory_client->OnError(IndexedDBDatabaseError(
-        blink::mojom::IDBException::kUnknownError, u"Internal error."));
+    IndexedDBFactoryClient(std::move(pending_factory_client))
+        .OnError(IndexedDBDatabaseError(
+            blink::mojom::IDBException::kUnknownError, u"Internal error."));
     return;
   }
 
   const storage::BucketLocator bucket_locator = bucket->ToBucketLocator();
-  IndexedDBDatabase::Identifier unique_identifier(bucket_locator, name);
   IndexedDBBucketContextHandle bucket_context_handle;
   leveldb::Status s;
   IndexedDBDatabaseError error;
@@ -356,76 +352,23 @@
   if (!bucket_context_handle.IsHeld() ||
       !bucket_context_handle.bucket_context()) {
     if (s.IsNotFound()) {
-      factory_client->OnDeleteSuccess(/*version=*/0);
+      IndexedDBFactoryClient(std::move(pending_factory_client))
+          .OnDeleteSuccess(/*version=*/0);
       return;
     }
 
-    factory_client->OnError(error);
+    IndexedDBFactoryClient(std::move(pending_factory_client)).OnError(error);
     if (s.IsCorruption()) {
       HandleBackingStoreCorruption(bucket_locator, error);
     }
     return;
   }
 
-  // First, check the databases that are already represented by
-  // `IndexedDBDatabase` objects. If one exists, schedule it to be deleted and
-  // we're done.
-  auto it = bucket_context_handle->databases().find(name);
-  if (it != bucket_context_handle->databases().end()) {
-    base::WeakPtr<IndexedDBDatabase> database = it->second->AsWeakPtr();
-    database->ScheduleDeleteDatabase(
-        std::move(factory_client),
-        base::BindOnce(&IndexedDBFactory::OnDatabaseDeleted,
-                       idb_context_destruction_weak_factory_.GetWeakPtr(),
-                       bucket_locator));
-    if (force_close) {
-      leveldb::Status status = database->ForceCloseAndRunTasks();
-      if (!status.ok()) {
-        OnDatabaseError(bucket_locator, status, "Error aborting transactions.");
-      }
-    }
-    return;
-  }
-
-  // Otherwise, verify that a database with the given name exists in the backing
-  // store. If not, report success.
-  std::vector<std::u16string> names;
-  s = bucket_context_handle->backing_store()->GetDatabaseNames(&names);
-  if (!s.ok()) {
-    error = IndexedDBDatabaseError(blink::mojom::IDBException::kUnknownError,
-                                   "Internal error opening backing store for "
-                                   "indexedDB.deleteDatabase.");
-    factory_client->OnError(error);
-    if (s.IsCorruption()) {
-      HandleBackingStoreCorruption(bucket_locator, error);
-    }
-    return;
-  }
-
-  if (!base::Contains(names, name)) {
-    factory_client->OnDeleteSuccess(/*version=*/0);
-    return;
-  }
-
-  // If it exists but does not already have an `IndexedDBDatabase` object,
-  // create it and initiate deletion.
-  auto database = std::make_unique<IndexedDBDatabase>(
-      name, *bucket_context_handle.bucket_context(),
-      std::move(unique_identifier));
-  base::WeakPtr<IndexedDBDatabase> database_ptr =
-      bucket_context_handle->AddDatabase(name, std::move(database))
-          ->AsWeakPtr();
-  database_ptr->ScheduleDeleteDatabase(
-      std::move(factory_client),
+  bucket_context_handle->DeleteDatabase(
+      std::move(pending_factory_client), name, force_close,
       base::BindOnce(&IndexedDBFactory::OnDatabaseDeleted,
                      idb_context_destruction_weak_factory_.GetWeakPtr(),
                      bucket_locator));
-  if (force_close) {
-    leveldb::Status status = database_ptr->ForceCloseAndRunTasks();
-    if (!status.ok()) {
-      OnDatabaseError(bucket_locator, status, "Error aborting transactions.");
-    }
-  }
 }
 
 void IndexedDBFactory::HandleBackingStoreFailure(
@@ -728,9 +671,19 @@
   IndexedDBBucketContext::Delegate bucket_delegate;
   bucket_delegate.on_fatal_error = base::BindRepeating(
       [](const storage::BucketLocator& bucket_locator,
-         base::WeakPtr<IndexedDBFactory> factory, leveldb::Status s) {
+         base::WeakPtr<IndexedDBFactory> factory, leveldb::Status s,
+         const std::string& error_message) {
         if (factory) {
-          factory->OnDatabaseError(bucket_locator, s, nullptr);
+          factory->OnDatabaseError(bucket_locator, s, error_message);
+        }
+      },
+      bucket_locator, weak_factory_.GetWeakPtr());
+  bucket_delegate.on_corruption = base::BindRepeating(
+      [](const storage::BucketLocator& bucket_locator,
+         base::WeakPtr<IndexedDBFactory> factory,
+         const IndexedDBDatabaseError& error) {
+        if (factory) {
+          factory->HandleBackingStoreCorruption(bucket_locator, error);
         }
       },
       bucket_locator, weak_factory_.GetWeakPtr());
@@ -895,7 +848,7 @@
               if (!factory) {
                 return;
               }
-              factory->OnDatabaseError(bucket_locator, s, nullptr);
+              factory->OnDatabaseError(bucket_locator, s, {});
             },
             bucket_locator, weak_factory_.GetWeakPtr()));
     status = scopes->Initialize();
@@ -962,16 +915,13 @@
 void IndexedDBFactory::OnDatabaseError(
     const storage::BucketLocator& bucket_locator,
     leveldb::Status status,
-    const char* message) {
+    const std::string& message) {
   DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
   DCHECK(!status.ok());
   if (status.IsCorruption()) {
-    IndexedDBDatabaseError error =
-        message != nullptr
-            ? IndexedDBDatabaseError(blink::mojom::IDBException::kUnknownError,
-                                     message)
-            : IndexedDBDatabaseError(blink::mojom::IDBException::kUnknownError,
-                                     base::ASCIIToUTF16(status.ToString()));
+    IndexedDBDatabaseError error(
+        blink::mojom::IDBException::kUnknownError,
+        base::ASCIIToUTF16(message.empty() ? status.ToString() : message));
     HandleBackingStoreCorruption(bucket_locator, error);
     return;
   }
diff --git a/content/browser/indexed_db/indexed_db_factory.h b/content/browser/indexed_db/indexed_db_factory.h
index 7a510a1..714f9e2 100644
--- a/content/browser/indexed_db/indexed_db_factory.h
+++ b/content/browser/indexed_db/indexed_db_factory.h
@@ -192,7 +192,7 @@
   // Used to report fatal database errors.
   void OnDatabaseError(const storage::BucketLocator& bucket_locator,
                        leveldb::Status s,
-                       const char* message);
+                       const std::string& message);
 
   void OnDatabaseDeleted(const storage::BucketLocator& bucket_locator);
 
diff --git a/content/browser/indexed_db/indexed_db_transaction.cc b/content/browser/indexed_db/indexed_db_transaction.cc
index c5df4a5f..bb44b18 100644
--- a/content/browser/indexed_db/indexed_db_transaction.cc
+++ b/content/browser/indexed_db/indexed_db_transaction.cc
@@ -482,7 +482,7 @@
               "Failed to write blobs (%s)",
               WriteBlobToFileResultToString(error).c_str()))));
       if (!status.ok())
-        bucket_context_->delegate().on_fatal_error.Run(status);
+        bucket_context_->delegate().on_fatal_error.Run(status, {});
       // The result is ignored.
       return leveldb::Status::OK();
     }
@@ -741,7 +741,7 @@
       IndexedDBDatabaseError(blink::mojom::IDBException::kTimeoutError,
                              u"Transaction timed out due to inactivity."));
   if (!result.ok())
-    bucket_context_->delegate().on_fatal_error.Run(result);
+    bucket_context_->delegate().on_fatal_error.Run(result, {});
 }
 
 void IndexedDBTransaction::CloseOpenCursors() {
diff --git a/content/browser/indexed_db/indexed_db_transaction_unittest.cc b/content/browser/indexed_db/indexed_db_transaction_unittest.cc
index 54fdaec..13415982 100644
--- a/content/browser/indexed_db/indexed_db_transaction_unittest.cc
+++ b/content/browser/indexed_db/indexed_db_transaction_unittest.cc
@@ -97,7 +97,9 @@
 
   void TearDown() override { db_ = nullptr; }
 
-  void OnFatalError(leveldb::Status s) { error_called_ = true; }
+  void OnFatalError(leveldb::Status s, const std::string& /*error_message*/) {
+    error_called_ = true;
+  }
 
   void OnDbReadyForDestruction() { bucket_context_.reset(); }
 
diff --git a/content/browser/indexed_db/indexed_db_unittest.cc b/content/browser/indexed_db/indexed_db_unittest.cc
index 555de82..c947388 100644
--- a/content/browser/indexed_db/indexed_db_unittest.cc
+++ b/content/browser/indexed_db/indexed_db_unittest.cc
@@ -534,7 +534,8 @@
             factory->GetBucketContextForTesting(bucket_info->id)
                 ->delegate()
                 .on_fatal_error.Run(
-                    leveldb::Status::NotSupported("operation not supported"));
+                    leveldb::Status::NotSupported("operation not supported"),
+                    {});
           },
           context()->GetIDBFactory(), &bucket_info),
       &bucket_info);
diff --git a/content/browser/interest_group/interest_group_caching_storage.cc b/content/browser/interest_group/interest_group_caching_storage.cc
index 9529422..ddcf4a5 100644
--- a/content/browser/interest_group/interest_group_caching_storage.cc
+++ b/content/browser/interest_group/interest_group_caching_storage.cc
@@ -237,10 +237,10 @@
 }
 
 void InterestGroupCachingStorage::RecordDebugReportLockout(
-    base::Time last_report_sent_date) {
+    base::Time last_report_sent_time) {
   interest_group_storage_
       .AsyncCall(&InterestGroupStorage::RecordDebugReportLockout)
-      .WithArgs(last_report_sent_date);
+      .WithArgs(last_report_sent_time);
 }
 
 void InterestGroupCachingStorage::RecordDebugReportCooldown(
diff --git a/content/browser/interest_group/interest_group_caching_storage.h b/content/browser/interest_group/interest_group_caching_storage.h
index fd5b1819..8eb4930 100644
--- a/content/browser/interest_group/interest_group_caching_storage.h
+++ b/content/browser/interest_group/interest_group_caching_storage.h
@@ -156,9 +156,10 @@
   // piece of opaque data to identify the winning ad.
   void RecordInterestGroupWin(const blink::InterestGroupKey& group_key,
                               const std::string& ad_json);
-  // Adds an entry to the lockout of debugging only report.
-  void RecordDebugReportLockout(base::Time last_report_sent_date);
-  // Adds an entry to the cooldown of debugging only report for `origin` if it
+  // Adds an entry to forDebuggingOnly report lockout table if the table is
+  // empty. Otherwise replaces the existing entry.
+  void RecordDebugReportLockout(base::Time last_report_sent_time);
+  // Adds an entry to forDebuggingOnly report cooldown table for `origin` if it
   // does not exist, otherwise replaces the existing entry.
   void RecordDebugReportCooldown(const url::Origin& origin,
                                  base::Time cooldown_start,
diff --git a/content/browser/interest_group/interest_group_manager_impl.cc b/content/browser/interest_group/interest_group_manager_impl.cc
index 0a3e642..aeb816cf 100644
--- a/content/browser/interest_group/interest_group_manager_impl.cc
+++ b/content/browser/interest_group/interest_group_manager_impl.cc
@@ -354,8 +354,8 @@
 }
 
 void InterestGroupManagerImpl::RecordDebugReportLockout(
-    base::Time last_report_sent_date) {
-  caching_storage_.RecordDebugReportLockout(last_report_sent_date);
+    base::Time last_report_sent_time) {
+  caching_storage_.RecordDebugReportLockout(last_report_sent_time);
 }
 
 void InterestGroupManagerImpl::RecordDebugReportCooldown(
diff --git a/content/browser/interest_group/interest_group_manager_impl.h b/content/browser/interest_group/interest_group_manager_impl.h
index 6ab0b5e6..f90a4c6 100644
--- a/content/browser/interest_group/interest_group_manager_impl.h
+++ b/content/browser/interest_group/interest_group_manager_impl.h
@@ -237,9 +237,10 @@
   // piece of opaque data to identify the winning ad.
   void RecordInterestGroupWin(const blink::InterestGroupKey& group_key,
                               const std::string& ad_json);
-  // Adds an entry to the lockout of debugging only report.
-  void RecordDebugReportLockout(base::Time last_report_sent_date);
-  // Adds an entry to the cooldown of debugging only report for `origin` if it
+  // Adds an entry to forDebuggingOnly report lockout table if the table is
+  // empty. Otherwise replaces the existing entry.
+  void RecordDebugReportLockout(base::Time last_report_sent_time);
+  // Adds an entry to forDebuggingOnly report cooldown table for `origin` if it
   // does not exist, otherwise replaces the existing entry.
   void RecordDebugReportCooldown(const url::Origin& origin,
                                  base::Time cooldown_start,
diff --git a/content/browser/interest_group/interest_group_storage.cc b/content/browser/interest_group/interest_group_storage.cc
index 1b2cdeff2..0b9b131 100644
--- a/content/browser/interest_group/interest_group_storage.cc
+++ b/content/browser/interest_group/interest_group_storage.cc
@@ -2806,7 +2806,7 @@
 }
 
 bool DoRecordDebugReportLockout(sql::Database& db,
-                                base::Time last_debug_report_sent_date) {
+                                base::Time last_debug_report_sent_time) {
   sql::Statement debug_lockout(db.GetCachedStatement(
       SQL_FROM_HERE,
       "INSERT OR REPLACE "
@@ -2819,7 +2819,7 @@
   debug_lockout.Reset(true);
   // Ceil to nearest hour to be stored in DB.
   debug_lockout.BindInt64(0,
-                          last_debug_report_sent_date.ToDeltaSinceWindowsEpoch()
+                          last_debug_report_sent_time.ToDeltaSinceWindowsEpoch()
                               .CeilToMultiple(base::Hours(1))
                               .InMicroseconds());
   return debug_lockout.Run();
@@ -3181,18 +3181,18 @@
 void DoGetDebugReportLockout(
     sql::Database& db,
     DebugReportLockoutAndCooldowns& debug_report_lockout_and_cooldowns) {
-  sql::Statement sent_date(
+  sql::Statement sent_time(
       db.GetCachedStatement(SQL_FROM_HERE,
                             "SELECT last_report_sent_time "
                             "FROM lockout_debugging_only_report"));
-  if (!sent_date.is_valid()) {
+  if (!sent_time.is_valid()) {
     DLOG(ERROR) << "GetLastDebugReportSentDate SQL statement did not compile: "
                 << db.GetErrorMessage();
     return;
   }
-  if (sent_date.Step()) {
+  if (sent_time.Step()) {
     debug_report_lockout_and_cooldowns.last_report_sent_time =
-        sent_date.ColumnTime(0);
+        sent_time.ColumnTime(0);
   }
 }
 
@@ -4327,14 +4327,14 @@
 }
 
 void InterestGroupStorage::RecordDebugReportLockout(
-    base::Time last_report_sent_date) {
+    base::Time last_report_sent_time) {
   DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
   if (!EnsureDBInitialized()) {
     return;
   }
 
-  if (!DoRecordDebugReportLockout(*db_, last_report_sent_date)) {
-    DLOG(ERROR) << "Could not record last debugging only report sent date: "
+  if (!DoRecordDebugReportLockout(*db_, last_report_sent_time)) {
+    DLOG(ERROR) << "Could not record last debugging only report sent time: "
                 << db_->GetErrorMessage();
   }
 }
diff --git a/content/browser/interest_group/interest_group_storage.h b/content/browser/interest_group/interest_group_storage.h
index 798270f7..81765413b 100644
--- a/content/browser/interest_group/interest_group_storage.h
+++ b/content/browser/interest_group/interest_group_storage.h
@@ -103,10 +103,11 @@
   // piece of opaque data to identify the winning ad.
   void RecordInterestGroupWin(const blink::InterestGroupKey& group_key,
                               const std::string& ad_json);
-  // Adds an entry to debugging only report lockout if the table is empty.
-  void RecordDebugReportLockout(base::Time last_report_sent_date);
-  // Adds an entry to debugging only report cooldown for `origin` if it does
-  // not exist, otherwise replaces the existing entry.
+  // Adds an entry to forDebuggingOnly report lockout table if the table is
+  // empty. Otherwise replaces the existing entry.
+  void RecordDebugReportLockout(base::Time last_report_sent_time);
+  // Adds an entry to forDebuggingOnly report cooldown table for `origin` if it
+  // does not exist, otherwise replaces the existing entry.
   void RecordDebugReportCooldown(const url::Origin& origin,
                                  base::Time cooldown_start,
                                  DebugReportCooldownType cooldown_type);
diff --git a/content/browser/media/session/media_metadata_sanitizer.cc b/content/browser/media/session/media_metadata_sanitizer.cc
index 261fd99..9562106 100644
--- a/content/browser/media/session/media_metadata_sanitizer.cc
+++ b/content/browser/media/session/media_metadata_sanitizer.cc
@@ -7,6 +7,7 @@
 #include <algorithm>
 #include <string>
 
+#include "base/time/time.h"
 #include "services/media_session/public/cpp/media_image.h"
 #include "services/media_session/public/cpp/media_metadata.h"
 
@@ -27,6 +28,9 @@
 // Maximum number of MediaImages inside the MediaMetadata.
 const size_t kMaxNumberOfMediaImages = 10;
 
+// Maximum number of `ChapterInformation` inside the `MediaMetadata`.
+const size_t kMaxNumberOfChapters = 200;
+
 // Maximum of sizes in a MediaImage.
 const size_t kMaxNumberOfMediaImageSizes = 10;
 
@@ -54,6 +58,25 @@
   return true;
 }
 
+bool CheckChapterInformationSanity(
+    const media_session::mojom::ChapterInformationPtr& chapter) {
+  if (chapter->title.size() > kMaxIPCStringLength) {
+    return false;
+  }
+
+  if (chapter->startTime < base::Seconds(0)) {
+    return false;
+  }
+
+  for (const auto& image : chapter->artwork) {
+    if (!CheckMediaImageSanity(image)) {
+      return false;
+    }
+  }
+
+  return true;
+}
+
 }  // anonymous namespace
 
 bool MediaMetadataSanitizer::CheckSanity(
@@ -66,12 +89,21 @@
     return false;
   if (metadata->artwork.size() > kMaxNumberOfMediaImages)
     return false;
+  if (metadata->chapterInfo.size() > kMaxNumberOfChapters) {
+    return false;
+  }
 
   for (const auto& image : metadata->artwork) {
     if (!CheckMediaImageSanity(image))
       return false;
   }
 
+  for (const auto& chapter : metadata->chapterInfo) {
+    if (!CheckChapterInformationSanity(chapter)) {
+      return false;
+    }
+  }
+
   return true;
 }
 
diff --git a/content/browser/renderer_host/render_frame_host_impl_unittest.cc b/content/browser/renderer_host/render_frame_host_impl_unittest.cc
index 17877bf..eb8d245 100644
--- a/content/browser/renderer_host/render_frame_host_impl_unittest.cc
+++ b/content/browser/renderer_host/render_frame_host_impl_unittest.cc
@@ -164,6 +164,22 @@
   EXPECT_EQ(initial_rfh, main_rfh());
 }
 
+// Test that navigating to an invalid URL (which creates an empty GURL) causes
+// about:blank to commit.
+TEST_F(RenderFrameHostImplTest, InvalidURL) {
+  // Start from a valid commit.
+  NavigateAndCommit(GURL("https://test.example.com"));
+
+  // Attempt to navigate to a non-empty invalid URL, which GURL treats as an
+  // empty invalid URL. Blink treats navigations to an empty URL as navigations
+  // to about:blank.
+  GURL invalid_url("invalidurl");
+  EXPECT_TRUE(invalid_url.is_empty());
+  EXPECT_FALSE(invalid_url.is_valid());
+  NavigateAndCommit(invalid_url);
+  EXPECT_EQ(GURL(url::kAboutBlankURL), main_rfh()->GetLastCommittedURL());
+}
+
 // Ensures that IsolationInfo's SiteForCookies is empty and
 // that it correctly generates a StorageKey with a kCrossSite
 // AncestorChainBit when frames are nested in an A->B->A
diff --git a/content/browser/web_contents/web_contents_impl.cc b/content/browser/web_contents/web_contents_impl.cc
index 97f45e33..d425d19 100644
--- a/content/browser/web_contents/web_contents_impl.cc
+++ b/content/browser/web_contents/web_contents_impl.cc
@@ -3879,7 +3879,12 @@
   }
 
   if (delegate_) {
+    // This may spin the message loop and destroy this object crbug.com/1506535
+    base::WeakPtr<WebContentsImpl> weak_ptr = weak_factory_.GetWeakPtr();
     delegate_->ExitFullscreenModeForTab(this);
+    if (!weak_ptr) {
+      return;
+    }
 
     if (keyboard_lock_widget_) {
       delegate_->CancelKeyboardLockRequest(this);
diff --git a/content/browser/webid/federated_auth_request_impl.cc b/content/browser/webid/federated_auth_request_impl.cc
index 8051b303..469d982e 100644
--- a/content/browser/webid/federated_auth_request_impl.cc
+++ b/content/browser/webid/federated_auth_request_impl.cc
@@ -1355,7 +1355,8 @@
       idp_for_display, accounts, idp_info->metadata,
       ClientMetadata{client_metadata.terms_of_service_url,
                      client_metadata.privacy_policy_url},
-      idp_info->rp_context, /* request_permission */ request_permission);
+      idp_info->rp_context, /*request_permission=*/request_permission,
+      /*has_login_status_mismatch=*/false);
   idp_infos_[idp_config_url] = std::move(idp_info);
 
   fetch_data_.pending_idps.erase(idp_config_url);
@@ -1387,10 +1388,9 @@
 
   metrics_endpoints_.erase(idp_config_url);
 
-  idp_infos_.erase(idp_config_url);
-  // Do not use `idp_config_url` after this line because the reference is no
-  // longer valid.
-
+  // We do not call both OnFetchDataForIdpFailed() after OnFetchDataSucceeded()
+  // for the same IDP.
+  DCHECK(idp_infos_.find(idp_config_url) == idp_infos_.end());
   MaybeShowAccountsDialog();
 }
 
@@ -1648,26 +1648,56 @@
     return;
   }
 
-  // By this moment we know that the user has granted permission in the past
-  // for the RP/IdP. Because otherwise we have returned already in
-  // `ShouldFailBeforeFetchingAccounts`. It means that we can do the
-  // following without privacy cost:
-  // 1. Reject the promise immediately without delay
-  // 2. Not to show any UI to respect `mediation: silent`
-  // TODO(crbug.com/1441436): validate the statement above with stakeholders
   if (mediation_requirement_ == MediationRequirement::kSilent) {
-    CompleteRequestWithError(
+    // By this moment we know that the user has granted permission in the past
+    // for the RP/IdP. Because otherwise we have returned already in
+    // `ShouldFailBeforeFetchingAccounts`. It means that we can do the
+    // following without privacy cost:
+    // 1. Reject the promise immediately without delay
+    // 2. Not to show any UI to respect `mediation: silent`
+    // TODO(crbug.com/1441436): validate the statement above with stakeholders
+    OnFetchDataForIdpFailed(
+        std::move(idp_info),
         FederatedAuthRequestResult::kErrorSilentMediationFailure,
         TokenStatus::kSilentMediationFailure,
-        /*token_error=*/absl::nullopt,
         /*should_delay_callback=*/false);
     return;
   }
 
-  // TODO(crbug.com/1357790): we should figure out how to handle multiple IDP
-  // w.r.t. showing a static failure UI. e.g. one IDP is always successful and
-  // one always returns 404.
+  OnIdpMismatch(std::move(idp_info));
+}
 
+void FederatedAuthRequestImpl::OnIdpMismatch(
+    std::unique_ptr<IdentityProviderInfo> idp_info) {
+  const GURL& idp_config_url = idp_info->provider->config->config_url;
+  fetch_data_.pending_idps.erase(idp_config_url);
+
+  const std::string idp_for_display =
+      webid::FormatUrlWithDomain(idp_config_url, /*for_display=*/true);
+  idp_info->data = IdentityProviderData(
+      idp_for_display, std::vector<IdentityRequestAccount>(),
+      idp_info->metadata, ClientMetadata{GURL(), GURL()}, idp_info->rp_context,
+      /*request_permission=*/ShouldMediateAuthz(idp_info->provider->scope),
+      /*has_login_status_mismatch=*/true);
+  idp_infos_[idp_config_url] = std::move(idp_info);
+
+  if (!fetch_data_.pending_idps.empty()) {
+    return;
+  }
+
+  if (fetch_data_.did_succeed_for_at_least_one_idp) {
+    MaybeShowAccountsDialog();
+    return;
+  }
+
+  ShowIdpFailureDialog();
+}
+
+void FederatedAuthRequestImpl::ShowIdpFailureDialog() {
+  // TODO(crbug.com/1513495): handle multiple IDPs.
+  IdentityProviderInfo* idp_info = idp_infos_.begin()->second.get();
+  url::Origin idp_origin =
+      url::Origin::Create(idp_info->provider->config->config_url);
   // RenderFrameHost should be in the primary page (ex not in the BFCache).
   DCHECK(render_frame_host().GetPage().IsPrimary());
   // TODO(crbug.com/1382495): Handle failure UI in the multi IDP case.
diff --git a/content/browser/webid/federated_auth_request_impl.h b/content/browser/webid/federated_auth_request_impl.h
index 32585d7..34bf39a 100644
--- a/content/browser/webid/federated_auth_request_impl.h
+++ b/content/browser/webid/federated_auth_request_impl.h
@@ -233,13 +233,19 @@
       const IdpNetworkRequestManager::ClientMetadata& client_metadata);
 
   // Called when there is an error in fetching information to show the prompt
-  // for a given IDP - `idp_info`.
+  // for a given IDP - `idp_info`, but we do not need to show failure UI for the
+  // IDP.
   void OnFetchDataForIdpFailed(
       std::unique_ptr<IdentityProviderInfo> idp_info,
       blink::mojom::FederatedAuthRequestResult result,
       absl::optional<content::FedCmRequestIdTokenStatus> token_status,
       bool should_delay_callback);
 
+  // Called when there is an error fetching information to show the prompt for a
+  // given IDP, and because of the mismatch this IDP must be present in the
+  // dialog we show to the user.
+  void OnIdpMismatch(std::unique_ptr<IdentityProviderInfo> idp_info);
+
   std::vector<blink::mojom::IdentityProviderPtr> MaybeAddRegisteredProviders(
       std::vector<blink::mojom::IdentityProviderPtr>& providers);
 
@@ -248,6 +254,9 @@
   void ShowErrorDialog(const GURL& idp_config_url,
                        IdpNetworkRequestManager::FetchStatus status,
                        absl::optional<TokenError> error);
+  // Called when we should show a failure dialog since all IDP account fetches
+  // resulted in a mismatch with the accounts fetch.
+  void ShowIdpFailureDialog();
 
   // Updates the IdpSigninStatus in case of accounts fetch failure and shows a
   // failure UI if applicable.
@@ -392,8 +401,9 @@
   // Populated in OnAllConfigAndWellKnownFetched().
   base::flat_map<GURL, GURL> metrics_endpoints_;
 
-  // Populated by MaybeShowAccountsDialog().
+  // Populated by OnFetchDataForIdpSucceeded() and OnIdpMismatch().
   base::flat_map<GURL, std::unique_ptr<IdentityProviderInfo>> idp_infos_;
+  // Populated by MaybeShowAccountsDialog().
   std::vector<IdentityProviderData> idp_data_for_display_;
 
   // Maps the login URL to the info that may be added as query parameters to
diff --git a/content/browser/webid/federated_auth_request_impl_unittest.cc b/content/browser/webid/federated_auth_request_impl_unittest.cc
index 61774e38..a1e84306 100644
--- a/content/browser/webid/federated_auth_request_impl_unittest.cc
+++ b/content/browser/webid/federated_auth_request_impl_unittest.cc
@@ -1042,7 +1042,11 @@
     } else {
       int issue_count =
           main_test_rfh()->GetFederatedAuthRequestIssueCount(absl::nullopt);
-      EXPECT_EQ(0, issue_count);
+      if (!expectation.standalone_console_message) {
+        EXPECT_EQ(0, issue_count);
+      } else {
+        EXPECT_GE(1, issue_count);
+      }
     }
     CheckConsoleMessages(expectation.devtools_issue_status,
                          expectation.standalone_console_message);
@@ -4378,6 +4382,84 @@
   EXPECT_FALSE(did_show_idp_signin_status_mismatch_dialog());
 }
 
+// Test that when there are two IDPs with sharing permissions but the account
+// fetch fails for one of them, mediation silent can still succeed.
+TEST_F(FederatedAuthRequestImplTest,
+       MultiIdpWithSilentMediationAndOneIdpFetchFailure) {
+  base::test::ScopedFeatureList list;
+  list.InitAndEnableFeature(features::kFedCmMultipleIdentityProviders);
+  // Mark both IDPs as logged in.
+  test_permission_delegate_
+      ->idp_signin_statuses_[OriginFromString(kProviderUrlFull)] = true;
+  test_permission_delegate_
+      ->idp_signin_statuses_[OriginFromString(kProviderTwoUrlFull)] = true;
+
+  // Pretend the sharing permission has been granted for exactly one account for
+  // the first IdP.
+  EXPECT_CALL(*test_permission_delegate_,
+              HasSharingPermission(
+                  OriginFromString(kRpUrl), OriginFromString(kRpUrl),
+                  OriginFromString(kProviderUrlFull), Eq(absl::nullopt)))
+      .WillOnce(Return(true));
+
+  // Pretend the sharing permission has been granted for exactly one account for
+  // the second IdP.
+  EXPECT_CALL(*test_permission_delegate_,
+              HasSharingPermission(
+                  OriginFromString(kRpUrl), OriginFromString(kRpUrl),
+                  OriginFromString(kProviderTwoUrlFull), Eq(absl::nullopt)))
+      .WillOnce(Return(true));
+  EXPECT_CALL(
+      *test_permission_delegate_,
+      HasSharingPermission(OriginFromString(kRpUrl), OriginFromString(kRpUrl),
+                           OriginFromString(kProviderTwoUrlFull),
+                           Optional(std::string(kAccountIdPeter))))
+      .Times(2)
+      .WillRepeatedly(Return(true));
+
+  EXPECT_CALL(
+      *test_permission_delegate_,
+      HasSharingPermission(OriginFromString(kRpUrl), OriginFromString(kRpUrl),
+                           OriginFromString(kProviderTwoUrlFull),
+                           Optional(std::string(kAccountIdZach))))
+      .WillOnce(Return(false));
+  EXPECT_CALL(
+      *test_permission_delegate_,
+      HasSharingPermission(OriginFromString(kRpUrl), OriginFromString(kRpUrl),
+                           OriginFromString(kProviderTwoUrlFull),
+                           Optional(std::string(kAccountIdNicolas))))
+      .WillOnce(Return(false));
+
+  // Ensure auto reauthn is not considered as disabled.
+  EXPECT_CALL(*test_auto_reauthn_permission_delegate_,
+              IsAutoReauthnSettingEnabled())
+      .Times(3)
+      .WillRepeatedly(Return(true));
+  EXPECT_CALL(*test_auto_reauthn_permission_delegate_,
+              IsAutoReauthnEmbargoed(OriginFromString(kRpUrl)))
+      .Times(3)
+      .WillRepeatedly(Return(false));
+
+  RequestExpectations expectations = kExpectationSuccess;
+  expectations.selected_idp_config_url = kProviderTwoUrlFull;
+  expectations.is_auto_selected = true;
+  expectations.standalone_console_message =
+      "Silent mediation was requested, but the conditions to achieve it were "
+      "not met.";
+
+  MockConfiguration configuration = kConfigurationMultiIdpValid;
+  configuration.mediation_requirement = MediationRequirement::kSilent;
+  // Let the first IDP accounts fetch fail.
+  configuration.idp_info[kProviderUrlFull].accounts_response.parse_status =
+      IdpNetworkRequestManager::ParseStatus::kNoResponseError;
+
+  RunAuthTest(kDefaultMultiIdpRequestParameters, expectations, configuration);
+
+  // Accounts still need to be fetched since there could have been a single
+  // returning account.
+  EXPECT_TRUE(DidFetch(FetchedEndpoint::ACCOUNTS));
+}
+
 TEST_F(FederatedAuthRequestImplTest, TooManyRequests) {
   base::RunLoop ukm_loop;
   ukm_recorder()->SetOnAddEntryCallback(FedCmEntry::kEntryName,
diff --git a/content/browser/webid/webid_browsertest.cc b/content/browser/webid/webid_browsertest.cc
index 33eac1a..c5a70991 100644
--- a/content/browser/webid/webid_browsertest.cc
+++ b/content/browser/webid/webid_browsertest.cc
@@ -578,8 +578,8 @@
             identity: {
               providers: [{
                 nonce: "1234",
+                configURL: "any",
                 clientId: "https://rp.example",
-                registered: true,
               }]
             }
           });
diff --git a/content/browser/webui/web_ui_security_browsertest.cc b/content/browser/webui/web_ui_security_browsertest.cc
index e56224ca..582a36df 100644
--- a/content/browser/webui/web_ui_security_browsertest.cc
+++ b/content/browser/webui/web_ui_security_browsertest.cc
@@ -12,6 +12,7 @@
 #include "base/strings/stringprintf.h"
 #include "base/threading/thread_restrictions.h"
 #include "content/browser/child_process_security_policy_impl.h"
+#include "content/browser/process_lock.h"
 #include "content/browser/renderer_host/frame_tree_node.h"
 #include "content/browser/web_contents/web_contents_impl.h"
 #include "content/browser/webui/web_ui_controller_factory_registry.h"
@@ -1007,4 +1008,38 @@
             "Failed to load resource: net::ERR_UNKNOWN_URL_SCHEME");
 }
 
+// Test base class that disables site isolation to ensure security properties
+// of WebUIs hold true even in that mode.
+class WebUISecurityTestSiteIsolationDisabled : public WebUISecurityTest {
+ public:
+  WebUISecurityTestSiteIsolationDisabled() = default;
+  ~WebUISecurityTestSiteIsolationDisabled() override = default;
+
+  WebUISecurityTestSiteIsolationDisabled(
+      const WebUISecurityTestSiteIsolationDisabled&) = delete;
+  WebUISecurityTestSiteIsolationDisabled& operator=(
+      const WebUISecurityTestSiteIsolationDisabled&) = delete;
+
+  void SetUpCommandLine(base::CommandLine* command_line) override {
+    WebUISecurityTest::SetUpCommandLine(command_line);
+    command_line->AppendSwitch(switches::kDisableSiteIsolation);
+  }
+};
+
+// Verify that navigating to WebUI puts it in a locked process even when site
+// isolation is disabled.
+IN_PROC_BROWSER_TEST_F(WebUISecurityTestSiteIsolationDisabled,
+                       EnsureProcessLockWithoutSiteIsolation) {
+  // Verify that site isolation is indeed disabled.
+  EXPECT_FALSE(SiteIsolationPolicy::UseDedicatedProcessesForAllSites());
+
+  GURL test_url(GetWebUIURL("web-ui/title1.html"));
+  EXPECT_TRUE(NavigateToURL(shell(), test_url));
+
+  RenderProcessHost* rph =
+      shell()->web_contents()->GetPrimaryMainFrame()->GetProcess();
+  EXPECT_TRUE(rph->GetProcessLock().is_locked_to_site());
+  EXPECT_EQ(test_url.GetWithEmptyPath(), rph->GetProcessLock().lock_url());
+}
+
 }  // namespace content
diff --git a/content/public/android/javatests/src/org/chromium/content/browser/remoteobjects/RemoteObjectHostImplTest.java b/content/public/android/javatests/src/org/chromium/content/browser/remoteobjects/RemoteObjectHostImplTest.java
index a13c1c1..964a73dd 100644
--- a/content/public/android/javatests/src/org/chromium/content/browser/remoteobjects/RemoteObjectHostImplTest.java
+++ b/content/public/android/javatests/src/org/chromium/content/browser/remoteobjects/RemoteObjectHostImplTest.java
@@ -95,7 +95,7 @@
         public Boolean methodExists;
 
         @Override
-        public void call(Boolean result) {
+        public void call(boolean result) {
             methodExists = result;
         }
     }
diff --git a/content/public/browser/file_system_access_permission_context.h b/content/public/browser/file_system_access_permission_context.h
index 55b8e2bd..54191a5 100644
--- a/content/public/browser/file_system_access_permission_context.h
+++ b/content/public/browser/file_system_access_permission_context.h
@@ -15,6 +15,12 @@
 #include "third_party/blink/public/mojom/file_system_access/file_system_access_manager.mojom-shared.h"
 #include "url/origin.h"
 
+class GURL;
+
+namespace storage {
+class FileSystemURL;
+}  // namespace storage
+
 namespace content {
 
 // Entry point to an embedder implemented permission context for the File System
@@ -164,6 +170,14 @@
                                 const base::FilePath& old_path,
                                 const base::FilePath& new_path) = 0;
 
+  // Invoked on file creation events originating from
+  // `window.showSaveFilePicker()`.
+  //
+  // See `FileSystemAccessEntryFactory::BindingContext`.
+  virtual void OnFileCreatedFromShowSaveFilePicker(
+      const GURL& file_picker_binding_context,
+      const storage::FileSystemURL& url) = 0;
+
  protected:
   virtual ~FileSystemAccessPermissionContext() = default;
 };
diff --git a/content/public/browser/identity_request_dialog_controller.cc b/content/public/browser/identity_request_dialog_controller.cc
index 192e71c..6131f51 100644
--- a/content/public/browser/identity_request_dialog_controller.cc
+++ b/content/public/browser/identity_request_dialog_controller.cc
@@ -29,13 +29,15 @@
     const IdentityProviderMetadata& idp_metadata,
     const ClientMetadata& client_metadata,
     const blink::mojom::RpContext& rp_context,
-    bool request_permission)
+    bool request_permission,
+    bool has_login_status_mismatch)
     : idp_for_display{idp_for_display},
       accounts{accounts},
       idp_metadata{idp_metadata},
       client_metadata{client_metadata},
       rp_context(rp_context),
-      request_permission(request_permission) {}
+      request_permission(request_permission),
+      has_login_status_mismatch(has_login_status_mismatch) {}
 
 IdentityProviderData::IdentityProviderData(const IdentityProviderData& other) =
     default;
diff --git a/content/public/browser/identity_request_dialog_controller.h b/content/public/browser/identity_request_dialog_controller.h
index 4b3bdcc..929695f 100644
--- a/content/public/browser/identity_request_dialog_controller.h
+++ b/content/public/browser/identity_request_dialog_controller.h
@@ -57,7 +57,8 @@
                        const IdentityProviderMetadata& idp_metadata,
                        const ClientMetadata& client_metadata,
                        const blink::mojom::RpContext& rp_context,
-                       const bool request_permission);
+                       bool request_permission,
+                       bool has_login_status_mismatch);
   IdentityProviderData(const IdentityProviderData& other);
   ~IdentityProviderData();
 
@@ -69,6 +70,9 @@
   // Whether the dialog should ask for the user's permission to share
   // the id/email/name/picture permission or not.
   bool request_permission;
+  // Whether there was some login status API mismatch when fetching the IDP's
+  // accounts.
+  bool has_login_status_mismatch;
 };
 
 // IdentityRequestDialogController is in interface for control of the UI
diff --git a/content/public/browser/login_delegate.h b/content/public/browser/login_delegate.h
index 521dc375..961f3ad3 100644
--- a/content/public/browser/login_delegate.h
+++ b/content/public/browser/login_delegate.h
@@ -5,8 +5,10 @@
 #ifndef CONTENT_PUBLIC_BROWSER_LOGIN_DELEGATE_H_
 #define CONTENT_PUBLIC_BROWSER_LOGIN_DELEGATE_H_
 
+#include "base/functional/callback.h"
 #include "content/common/content_export.h"
 #include "net/base/auth.h"
+#include "third_party/abseil-cpp/absl/types/optional.h"
 
 namespace content {
 
diff --git a/content/public/test/fake_file_system_access_permission_context.cc b/content/public/test/fake_file_system_access_permission_context.cc
index 4ab80150..493aa91 100644
--- a/content/public/test/fake_file_system_access_permission_context.cc
+++ b/content/public/test/fake_file_system_access_permission_context.cc
@@ -106,4 +106,8 @@
     const base::FilePath& old_path,
     const base::FilePath& new_path) {}
 
+void FakeFileSystemAccessPermissionContext::OnFileCreatedFromShowSaveFilePicker(
+    const GURL& file_picker_binding_context,
+    const storage::FileSystemURL& url) {}
+
 }  // namespace content
diff --git a/content/public/test/fake_file_system_access_permission_context.h b/content/public/test/fake_file_system_access_permission_context.h
index d8c04f6..bd5e800 100644
--- a/content/public/test/fake_file_system_access_permission_context.h
+++ b/content/public/test/fake_file_system_access_permission_context.h
@@ -79,6 +79,10 @@
                         const base::FilePath& old_path,
                         const base::FilePath& new_path) override;
 
+  void OnFileCreatedFromShowSaveFilePicker(
+      const GURL& file_picker_binding_context,
+      const storage::FileSystemURL& url) override;
+
  private:
   std::map<std::string, PathInfo> id_pathinfo_map_;
   std::map<blink::mojom::WellKnownDirectory, base::FilePath>
diff --git a/content/public/test/test_launcher.cc b/content/public/test/test_launcher.cc
index 54bb04d..bf63f7b 100644
--- a/content/public/test/test_launcher.cc
+++ b/content/public/test/test_launcher.cc
@@ -461,9 +461,10 @@
   base::CommandLine* command_line = base::CommandLine::ForCurrentProcess();
   base::ScopedBlockTestsWritingToSpecialDirs scoped_blocker(
       {
-        base::DIR_SRC_TEST_DATA_ROOT,
+          base::DIR_SRC_TEST_DATA_ROOT,
 #if BUILDFLAG(IS_WIN)
-            base::DIR_USER_STARTUP,
+          base::DIR_USER_STARTUP,
+          base::DIR_START_MENU,
 #endif  // BUILDFLAG(IS_WIN)
       },
       ([](const base::FilePath& path) {
diff --git a/content/test/navigation_simulator_impl.cc b/content/test/navigation_simulator_impl.cc
index 472b8ae1..7ed6622 100644
--- a/content/test/navigation_simulator_impl.cc
+++ b/content/test/navigation_simulator_impl.cc
@@ -720,6 +720,11 @@
   // point. Overwrite it here with the desired value to correctly mock the
   // DidCommitProvisionalLoadParams.
   navigation_url_ = request_->GetURL();
+  if (navigation_url_.is_empty()) {
+    // Blink treats empty URLs as about:blank. Simulate that in the commit IPC
+    // so that the RenderFrameHost does not reject the commit.
+    navigation_url_ = GURL(url::kAboutBlankURL);
+  }
 
   auto params = BuildDidCommitProvisionalLoadParams(
       same_document_ /* same_document */, false /* failed_navigation */,
diff --git a/content/test/navigation_simulator_unittest.cc b/content/test/navigation_simulator_unittest.cc
index 544cc6c..eb525f9 100644
--- a/content/test/navigation_simulator_unittest.cc
+++ b/content/test/navigation_simulator_unittest.cc
@@ -147,6 +147,15 @@
   scoped_refptr<net::HttpResponseHeaders> response_headers_;
 };
 
+// Test that NavigationSimulator accurately commits about:blank if the browser
+// requests a navigation to an empty URL.
+TEST_F(NavigationSimulatorTest, EmptyURL) {
+  std::unique_ptr<NavigationSimulator> simulator =
+      NavigationSimulator::CreateBrowserInitiated(GURL(), contents());
+  simulator->Commit();
+  EXPECT_EQ(GURL(url::kAboutBlankURL), main_rfh()->GetLastCommittedURL());
+}
+
 TEST_F(NavigationSimulatorTest, AutoAdvanceOff) {
   std::unique_ptr<NavigationSimulator> simulator =
       NavigationSimulator::CreateRendererInitiated(
diff --git a/device/bluetooth/floss/bluetooth_adapter_floss.cc b/device/bluetooth/floss/bluetooth_adapter_floss.cc
index 809c3cbe..2311630 100644
--- a/device/bluetooth/floss/bluetooth_adapter_floss.cc
+++ b/device/bluetooth/floss/bluetooth_adapter_floss.cc
@@ -876,7 +876,8 @@
   DCHECK(FlossDBusManager::Get());
   DCHECK(IsPresent());
 
-  BLUETOOTH_LOG(EVENT) << __func__ << ": " << device;
+  BLUETOOTH_LOG(EVENT) << __func__ << ": " << device
+                       << ": prop_type = " << static_cast<uint32_t>(prop_type);
 
   BluetoothDeviceFloss* device_ptr =
       static_cast<BluetoothDeviceFloss*>(GetDevice(device.address));
@@ -887,7 +888,8 @@
 
   switch (prop_type) {
     case FlossAdapterClient::BtPropertyType::kBdName:
-      if (device.name.size() != 0) {
+      if (device.name.size() != 0 &&
+          device.name != device_ptr->GetName().value_or("")) {
         device_ptr->SetName(device.name);
         device_ptr->InitializeDeviceProperties(
             BluetoothDeviceFloss::PropertiesState::kTriggeredByScan,
@@ -895,11 +897,6 @@
                            weak_ptr_factory_.GetWeakPtr(), device_ptr));
       }
       break;
-    case FlossAdapterClient::BtPropertyType::kClassOfDevice:
-      device_ptr->FetchRemoteClass(
-          base::BindOnce(&BluetoothAdapterFloss::NotifyDeviceChanged,
-                         weak_ptr_factory_.GetWeakPtr(), device_ptr));
-      break;
     case FlossAdapterClient::BtPropertyType::kTypeOfDevice:
       device_ptr->FetchRemoteType(
           base::BindOnce(&BluetoothAdapterFloss::NotifyDeviceChanged,
diff --git a/docs/threading_and_tasks_testing.md b/docs/threading_and_tasks_testing.md
index f601f95..d8aac3dc 100644
--- a/docs/threading_and_tasks_testing.md
+++ b/docs/threading_and_tasks_testing.md
@@ -158,13 +158,12 @@
 This is the //ios equivalent of `content::BrowserTaskEnvironment` to simulate
 `web::WebThread`.
 
-### Blink ?
+### blink::test::TaskEnvironment
 
-We would like to have something like `blink::BlinkTaskEnvironment` to simulate
-Blink's task posting infrastructure. We don't have it yet because Blink can be
-initialized only once and some things have to be reused across multiple unit
-tests which makes creating per-test task environment quite tricky. Contributions
-welcome!
+This is the same thing as base::test::TaskEnvironment with the addition of
+blink::MainThreadScheduler and blink::MainThreadIsolate support. You need this
+if-and-only-if the code under test is using blink::Thread::Current() or needs
+v8::Isolate::GetCurrent() to be a blink Isolate.
 
 ## Task Environment Traits and Abilities
 
diff --git a/docs/updater/design_doc.md b/docs/updater/design_doc.md
index 20d927e..1ca76fd 100644
--- a/docs/updater/design_doc.md
+++ b/docs/updater/design_doc.md
@@ -1109,3 +1109,66 @@
 
 The `UpdateServiceInternal` process can be started by clients by running the
 launcher executable directly. It is not managed or activated by `systemd`.
+
+### Certificate Tagging Mechanism
+
+Tagging is a mechanism for adding arbitrary data to a Windows executable file at
+build time or at download time that does not disturb any digital Authenticode
+signature that has been attached, and allows for making the data tag readable by
+the executable itself.
+
+The updater uses certificate tagging to add extra data, known as a tag, to the
+EXE and MSI installers when they are downloaded or run with no explicit
+parameters on the command line. This is useful for passing user-selected options
+on the web page through to the EXE or MSI, such as the app id to install,
+opting-in to usagestats, or to specify a brand code.
+
+The certificate writer writes the SignedData at the end of the MSI file in
+contiguous bytes. Tag writers and readers can use this stipulation to simplify
+processing of the files, since they will not need to decode the PE structure or
+the MSI FAT or handle tag bytes that are not contiguous.
+
+The data tag marker is embedded with the mock certificate, and consists of the
+string `Gact2.0Omaha` along with the null terminator, followed by the length of
+the tag in bytes, followed by the tag string.
+
+For example, a tag string of `brand=QAQA` would be represented with the
+following bytes:
+
+```
+`'G', 'a', 'c', 't',  '2',  '.', '0', 'O', 'm', 'a', 'h', 'a', '\0', '\x0a', 'b', 'r', 'a', 'n', 'd', '=', 'Q', 'A',  'Q',  'A', '\0'`.
+```
+
+`'\x0a' `is the length in bytes of `brand=QAQA`.
+
+#### Design
+
+
+##### MSI File Format
+
+MSI binaries are in
+[Compound File Binary Format](https://learn.microsoft.com/en-us/openspecs/windows_protocols/ms-cfb/50708a61-81d9-49c8-ab9c-43c98a795242).
+
+![SignedData in a MSI compound file](https://lh3.googleusercontent.com/drive-viewer/AEYmBYQqxEYaCIuaOhdBog7DcQEm-Wi9FYeAPhr3t3MC-Jeq1hjttgnKo3OV1szCVmxffKx1KDT-0dxZ0nAhI4CHBGAG5paOeA=s2560)
+
+The format is like a filesystem within a file. There is a directory structure as
+well as "data streams" analogous to files. The data streams/files are allocated
+in fixed-size sectors and managed via a File Allocation Table (FAT). Files may
+span non-contiguous sectors.
+
+The Authenticode signature is in a file called `"\x05DigitalSignature"` and is
+formatted as a PKCS#7 container, as it is in PE32. The contents of
+`"\x05MsiDigitalSignature"` are excluded from the signed hash.
+
+##### Adding the mock certificate
+
+The mock certificate is added by
+[MSIBinary::SetTag](https://source.chromium.org/chromium/chromium/src/+/main:chrome/updater/certificate_tag.cc;l=933?q=MSIBinary::SetTag&sq=&ss=chromium%2Fchromium%2Fsrc).
+It extends the SignedData container by the size of the tag.
+
+* If the digital signature is at the end of the file, the existing data is
+overwritten and extended, with an appropriate update to the FAT.
+* If the digital signature is somewhere within the MSI file, the content there
+is erased by marking the sectors as free, and the SignedData data stream is
+moved to the end of the file, while also updating the FAT and updating the
+directory entry for the signature to point to the new location.
\ No newline at end of file
diff --git a/extensions/browser/BUILD.gn b/extensions/browser/BUILD.gn
index eb4565b..9006e85 100644
--- a/extensions/browser/BUILD.gn
+++ b/extensions/browser/BUILD.gn
@@ -1050,7 +1050,7 @@
   data = [
     "//extensions/browser/extension_event_histogram_value.h",
     "//extensions/browser/extension_function_histogram_value.h",
-    "//tools/metrics/histograms/enums.xml",
+    "//tools/metrics/histograms/metadata/extensions/enums.xml",
     "//extensions/browser/api/declarative_net_request/flat/extension_ruleset.fbs",
   ]
 }
diff --git a/extensions/browser/api/declarative/declarative_rule_unittest.cc b/extensions/browser/api/declarative/declarative_rule_unittest.cc
index e300830..2d62e1e 100644
--- a/extensions/browser/api/declarative/declarative_rule_unittest.cc
+++ b/extensions/browser/api/declarative/declarative_rule_unittest.cc
@@ -36,7 +36,7 @@
 }  // namespace
 
 struct RecordingCondition {
-  typedef int MatchData;
+  using MatchData = int;
 
   raw_ptr<URLMatcherConditionFactory> factory;
   std::unique_ptr<base::Value> value;
@@ -62,7 +62,7 @@
     return result;
   }
 };
-typedef DeclarativeConditionSet<RecordingCondition> RecordingConditionSet;
+using RecordingConditionSet = DeclarativeConditionSet<RecordingCondition>;
 
 TEST(DeclarativeConditionTest, ErrorConditionSet) {
   URLMatcher matcher;
@@ -156,7 +156,7 @@
 };
 
 TEST(DeclarativeConditionTest, FulfillConditionSet) {
-  typedef DeclarativeConditionSet<FulfillableCondition> FulfillableConditionSet;
+  using FulfillableConditionSet = DeclarativeConditionSet<FulfillableCondition>;
   base::Value::List conditions;
   conditions.Append(ParseJson("{\"url_id\": 1, \"max\": 3}"));
   conditions.Append(ParseJson("{\"url_id\": 2, \"max\": 5}"));
@@ -209,7 +209,7 @@
 
 class SummingAction : public base::RefCounted<SummingAction> {
  public:
-  typedef int ApplyInfo;
+  using ApplyInfo = int;
 
   SummingAction(int increment, int min_priority)
       : increment_(increment), min_priority_(min_priority) {}
@@ -255,7 +255,7 @@
   int increment_;
   int min_priority_;
 };
-typedef DeclarativeActionSet<SummingAction> SummingActionSet;
+using SummingActionSet = DeclarativeActionSet<SummingAction>;
 
 TEST(DeclarativeActionTest, ErrorActionSet) {
   base::Value::List actions;
@@ -301,7 +301,7 @@
 }
 
 TEST(DeclarativeRuleTest, Create) {
-  typedef DeclarativeRule<FulfillableCondition, SummingAction> Rule;
+  using Rule = DeclarativeRule<FulfillableCondition, SummingAction>;
   auto json_rule = Rule::JsonRule::FromValue(ParseJsonDict(R"(
       {
         "id": "rule1",
@@ -368,7 +368,7 @@
 }
 
 TEST(DeclarativeRuleTest, CheckConsistency) {
-  typedef DeclarativeRule<FulfillableCondition, SummingAction> Rule;
+  using Rule = DeclarativeRule<FulfillableCondition, SummingAction>;
   URLMatcher matcher;
   std::string error;
   const char kExtensionId[] = "ext1";
diff --git a/extensions/browser/api/declarative/deduping_factory.h b/extensions/browser/api/declarative/deduping_factory.h
index d8ebf85..6100f379 100644
--- a/extensions/browser/api/declarative/deduping_factory.h
+++ b/extensions/browser/api/declarative/deduping_factory.h
@@ -81,10 +81,10 @@
   typedef std::string InstanceType;
   // Cache of previous prototypes in most-recently-used order. Most recently
   // used objects are at the end.
-  typedef std::list<scoped_refptr<const BaseClassT> > PrototypeList;
-  typedef base::flat_map<InstanceType, PrototypeList> ExistingPrototypes;
-  typedef base::flat_map<InstanceType, FactoryMethod> FactoryMethods;
-  typedef base::flat_set<InstanceType> ParameterizedTypes;
+  using PrototypeList = std::list<scoped_refptr<const BaseClassT>>;
+  using ExistingPrototypes = base::flat_map<InstanceType, PrototypeList>;
+  using FactoryMethods = base::flat_map<InstanceType, FactoryMethod>;
+  using ParameterizedTypes = base::flat_set<InstanceType>;
 
   const size_t max_number_prototypes_;
   ExistingPrototypes prototypes_;
diff --git a/extensions/browser/api/declarative_webrequest/webrequest_action.h b/extensions/browser/api/declarative_webrequest/webrequest_action.h
index 6527863..63583aa 100644
--- a/extensions/browser/api/declarative_webrequest/webrequest_action.h
+++ b/extensions/browser/api/declarative_webrequest/webrequest_action.h
@@ -169,7 +169,7 @@
   const HostPermissionsStrategy host_permissions_strategy_;
 };
 
-typedef DeclarativeActionSet<WebRequestAction> WebRequestActionSet;
+using WebRequestActionSet = DeclarativeActionSet<WebRequestAction>;
 
 //
 // The following are concrete actions.
diff --git a/extensions/browser/api/declarative_webrequest/webrequest_condition.h b/extensions/browser/api/declarative_webrequest/webrequest_condition.h
index 08c3c61a..ec8f801ab 100644
--- a/extensions/browser/api/declarative_webrequest/webrequest_condition.h
+++ b/extensions/browser/api/declarative_webrequest/webrequest_condition.h
@@ -63,7 +63,7 @@
 // WebRequestConditionSet::GetURLMatcherConditionSets.
 class WebRequestCondition {
  public:
-  typedef WebRequestDataWithMatchIds MatchData;
+  using MatchData = WebRequestDataWithMatchIds;
 
   WebRequestCondition(
       scoped_refptr<url_matcher::URLMatcherConditionSet> url_matcher_conditions,
@@ -106,7 +106,7 @@
   int applicable_request_stages_;
 };
 
-typedef DeclarativeConditionSet<WebRequestCondition> WebRequestConditionSet;
+using WebRequestConditionSet = DeclarativeConditionSet<WebRequestCondition>;
 
 }  // namespace extensions
 
diff --git a/extensions/browser/api/networking_private/networking_private_service_client.h b/extensions/browser/api/networking_private/networking_private_service_client.h
index 570be29c..1a86126e 100644
--- a/extensions/browser/api/networking_private/networking_private_service_client.h
+++ b/extensions/browser/api/networking_private/networking_private_service_client.h
@@ -117,7 +117,7 @@
   // Callbacks to extension api function objects. Keep reference to API object
   // and are released in ShutdownOnUIThread. Run when WiFiService calls back
   // into NetworkingPrivateServiceClient's callback wrappers.
-  typedef int32_t ServiceCallbacksID;
+  using ServiceCallbacksID = int32_t;
   struct ServiceCallbacks {
     ServiceCallbacks();
     ~ServiceCallbacks();
diff --git a/extensions/browser/app_window/app_window_browsertest.cc b/extensions/browser/app_window/app_window_browsertest.cc
index 7569520..df1667d 100644
--- a/extensions/browser/app_window/app_window_browsertest.cc
+++ b/extensions/browser/app_window/app_window_browsertest.cc
@@ -12,7 +12,7 @@
 
 namespace {
 
-typedef PlatformAppBrowserTest AppWindowBrowserTest;
+using AppWindowBrowserTest = PlatformAppBrowserTest;
 
 // This test is disabled on Linux because of the unpredictable nature of native
 // windows. We cannot assume that the window manager will insert any title bar
diff --git a/extensions/browser/app_window/app_window_registry.h b/extensions/browser/app_window/app_window_registry.h
index 5bac2fa6..ce86acd 100644
--- a/extensions/browser/app_window/app_window_registry.h
+++ b/extensions/browser/app_window/app_window_registry.h
@@ -55,8 +55,8 @@
   };
 
   typedef std::list<AppWindow*> AppWindowList;
-  typedef AppWindowList::const_iterator const_iterator;
-  typedef std::set<std::string> InspectedWindowSet;
+  using const_iterator = AppWindowList::const_iterator;
+  using InspectedWindowSet = std::set<std::string>;
 
   explicit AppWindowRegistry(content::BrowserContext* context);
   ~AppWindowRegistry() override;
diff --git a/extensions/browser/event_listener_map.cc b/extensions/browser/event_listener_map.cc
index 7ade369b..9d3c7dd9 100644
--- a/extensions/browser/event_listener_map.cc
+++ b/extensions/browser/event_listener_map.cc
@@ -19,7 +19,7 @@
 
 namespace extensions {
 
-typedef EventFilter::MatcherID MatcherID;
+using MatcherID = EventFilter::MatcherID;
 
 // static
 std::unique_ptr<EventListener> EventListener::ForExtension(
diff --git a/extensions/browser/event_router.cc b/extensions/browser/event_router.cc
index e56a823..6b8fbbd4 100644
--- a/extensions/browser/event_router.cc
+++ b/extensions/browser/event_router.cc
@@ -257,7 +257,9 @@
         // Currently this arg is not used for metrics recording since we do not
         // include events from EventDispatchSource::kDispatchEventToSender.
         /*dispatch_start_time=*/base::TimeTicks::Now(),
-        service_worker_version_id, EventDispatchSource::kDispatchEventToSender);
+        service_worker_version_id, EventDispatchSource::kDispatchEventToSender,
+        // Background script is active/started at this point.
+        /*lazy_background_active_on_dispatch=*/true);
     ReportEvent(histogram_value, extension,
                 /*did_enqueue=*/false);
 #if BUILDFLAG(ENABLE_EXTENSIONS_LEGACY_IPC)
@@ -1220,7 +1222,8 @@
     IncrementInFlightEvents(listener_context, process, extension, event_id,
                             event.event_name, event.dispatch_start_time,
                             service_worker_version_id,
-                            EventDispatchSource::kDispatchEventToProcess);
+                            EventDispatchSource::kDispatchEventToProcess,
+                            event.lazy_background_active_on_dispatch);
   }
 }
 
@@ -1275,14 +1278,16 @@
   }
 }
 
-void EventRouter::IncrementInFlightEvents(BrowserContext* context,
-                                          RenderProcessHost* process,
-                                          const Extension* extension,
-                                          int event_id,
-                                          const std::string& event_name,
-                                          base::TimeTicks dispatch_start_time,
-                                          int64_t service_worker_version_id,
-                                          EventDispatchSource dispatch_source) {
+void EventRouter::IncrementInFlightEvents(
+    BrowserContext* context,
+    RenderProcessHost* process,
+    const Extension* extension,
+    int event_id,
+    const std::string& event_name,
+    base::TimeTicks dispatch_start_time,
+    int64_t service_worker_version_id,
+    EventDispatchSource dispatch_source,
+    bool lazy_background_active_on_dispatch) {
   DCHECK_CURRENTLY_ON(BrowserThread::UI);
 
   // Only increment in-flight events if the lazy background page is active,
@@ -1294,7 +1299,8 @@
     if (host && host->render_process_host() == process) {
       pm->IncrementLazyKeepaliveCount(extension, Activity::EVENT, event_name);
       host->OnBackgroundEventDispatched(event_name, dispatch_start_time,
-                                        event_id, dispatch_source);
+                                        event_id, dispatch_source,
+                                        lazy_background_active_on_dispatch);
     }
   } else if (service_worker_version_id !=
              blink::mojom::kInvalidServiceWorkerVersionId) {
@@ -1307,7 +1313,8 @@
           process->GetStoragePartition()->GetServiceWorkerContext();
       event_ack_data_.IncrementInflightEvent(
           service_worker_context, process->GetID(), service_worker_version_id,
-          event_id, dispatch_start_time, dispatch_source);
+          event_id, dispatch_start_time, dispatch_source,
+          lazy_background_active_on_dispatch);
     }
   }
 }
@@ -1581,6 +1588,7 @@
              const GURL& event_url,
              EventRouter::UserGestureState user_gesture,
              mojom::EventFilteringInfoPtr info,
+             bool lazy_background_active_on_dispatch,
              base::TimeTicks dispatch_start_time)
     : histogram_value(histogram_value),
       event_name(event_name),
@@ -1589,6 +1597,7 @@
       restrict_to_context_type(restrict_to_context_type),
       event_url(event_url),
       dispatch_start_time(dispatch_start_time),
+      lazy_background_active_on_dispatch(lazy_background_active_on_dispatch),
       user_gesture(user_gesture),
       filter_info(std::move(info)) {
   DCHECK_NE(events::UNKNOWN, histogram_value)
@@ -1605,7 +1614,8 @@
   auto copy = std::make_unique<Event>(
       histogram_value, event_name, event_args.Clone(),
       restrict_to_browser_context, restrict_to_context_type, event_url,
-      user_gesture, filter_info.Clone(), dispatch_start_time);
+      user_gesture, filter_info.Clone(), lazy_background_active_on_dispatch,
+      dispatch_start_time);
   copy->will_dispatch_callback = will_dispatch_callback;
   copy->did_dispatch_callback = did_dispatch_callback;
   copy->cannot_dispatch_callback = cannot_dispatch_callback;
diff --git a/extensions/browser/event_router.h b/extensions/browser/event_router.h
index 58bd18154..774e9f3 100644
--- a/extensions/browser/event_router.h
+++ b/extensions/browser/event_router.h
@@ -484,7 +484,8 @@
                                const std::string& event_name,
                                base::TimeTicks dispatch_start_time,
                                int64_t service_worker_version_id,
-                               EventDispatchSource dispatch_source);
+                               EventDispatchSource dispatch_source,
+                               bool lazy_background_active_on_dispatch);
   void DecrementInFlightEventsForServiceWorker(
       const WorkerId& worker_id,
       int event_id,
@@ -606,6 +607,10 @@
   // Used in UMA histograms.
   base::TimeTicks dispatch_start_time;
 
+  // `true` if the event was dispatched to a active/running lazy background.
+  // Used in UMA histograms.
+  bool lazy_background_active_on_dispatch;
+
   // Whether a user gesture triggered the event.
   EventRouter::UserGestureState user_gesture;
 
@@ -656,6 +661,7 @@
         const GURL& event_url,
         EventRouter::UserGestureState user_gesture,
         mojom::EventFilteringInfoPtr info,
+        bool lazy_background_active_on_dispatch = false,
         base::TimeTicks dispatch_start_time = base::TimeTicks{});
 
   ~Event();
diff --git a/extensions/browser/events/event_ack_data.cc b/extensions/browser/events/event_ack_data.cc
index 61bd7206..1412728 100644
--- a/extensions/browser/events/event_ack_data.cc
+++ b/extensions/browser/events/event_ack_data.cc
@@ -29,7 +29,8 @@
     int64_t version_id,
     int event_id,
     base::TimeTicks dispatch_start_time,
-    EventDispatchSource dispatch_source) {
+    EventDispatchSource dispatch_source,
+    bool lazy_background_active_on_dispatch) {
   DCHECK_CURRENTLY_ON(content::BrowserThread::UI);
 
   base::Uuid request_uuid = base::Uuid::GenerateRandomV4();
@@ -51,8 +52,9 @@
   // TODO(lazyboy): Clean up |unacked_events_| if RenderProcessHost died before
   // it got a chance to ack |event_id|. This shouldn't happen in common cases.
   auto insert_result = unacked_events_.try_emplace(
-      event_id, EventInfo{request_uuid, render_process_id, start_ok,
-                          dispatch_start_time, dispatch_source});
+      event_id,
+      EventInfo{request_uuid, render_process_id, start_ok, dispatch_start_time,
+                dispatch_source, lazy_background_active_on_dispatch});
   DCHECK(insert_result.second) << "EventAckData: Duplicate event_id.";
 
   if (dispatch_source == EventDispatchSource::kDispatchEventToProcess) {
@@ -86,6 +88,17 @@
         /*sample=*/base::TimeTicks::Now() - event_info.dispatch_start_time,
         /*min=*/base::Microseconds(1), /*max=*/base::Minutes(5),
         /*buckets=*/100);
+    const char* active_metric_name =
+        event_info.lazy_background_active_on_dispatch
+            ? "Extensions.Events.DispatchToAckTime.ExtensionServiceWorker2."
+              "Active"
+            : "Extensions.Events.DispatchToAckTime.ExtensionServiceWorker2."
+              "Inactive";
+    base::UmaHistogramCustomMicrosecondsTimes(
+        active_metric_name,
+        /*sample=*/base::TimeTicks::Now() - event_info.dispatch_start_time,
+        /*min=*/base::Microseconds(1), /*max=*/base::Minutes(5),
+        /*buckets=*/100);
 
     base::UmaHistogramCustomTimes(
         "Extensions.Events.DispatchToAckLongTime.ExtensionServiceWorker2",
diff --git a/extensions/browser/events/event_ack_data.h b/extensions/browser/events/event_ack_data.h
index 7ac4460..8d21716 100644
--- a/extensions/browser/events/event_ack_data.h
+++ b/extensions/browser/events/event_ack_data.h
@@ -38,7 +38,8 @@
                               int64_t version_id,
                               int event_id,
                               base::TimeTicks dispatch_start_time,
-                              EventDispatchSource dispatch_source);
+                              EventDispatchSource dispatch_source,
+                              bool lazy_background_active_on_dispatch);
   // Clears the record of our knowledge of an in-flight event with |event_id|.
   //
   // On failure, |failure_callback| is called synchronously.
@@ -56,12 +57,15 @@
               int render_process_id,
               bool start_ok,
               base::TimeTicks dispatch_start_time,
-              EventDispatchSource dispatch_source)
+              EventDispatchSource dispatch_source,
+              bool lazy_background_active_on_dispatch)
         : request_uuid(request_uuid),
           render_process_id(render_process_id),
           start_ok(start_ok),
           dispatch_start_time(dispatch_start_time),
-          dispatch_source(dispatch_source) {}
+          dispatch_source(dispatch_source),
+          lazy_background_active_on_dispatch(
+              lazy_background_active_on_dispatch) {}
     EventInfo(const EventInfo&) = delete;
     EventInfo(EventInfo&&) = default;
     EventInfo& operator=(const EventInfo&) = delete;
@@ -76,6 +80,8 @@
     base::TimeTicks dispatch_start_time;
     // The event dispatching processing flow that was followed for this event.
     EventDispatchSource dispatch_source;
+    // `true` if the event was dispatched to a active/running lazy background.
+    bool lazy_background_active_on_dispatch;
   };
 
   // Emits a stale event ack metric if an event with `event_id` is not present
diff --git a/extensions/browser/events/lazy_event_dispatcher.cc b/extensions/browser/events/lazy_event_dispatcher.cc
index b7f96cc5e..100b360db 100644
--- a/extensions/browser/events/lazy_event_dispatcher.cc
+++ b/extensions/browser/events/lazy_event_dispatcher.cc
@@ -26,7 +26,7 @@
 
 LazyEventDispatcher::~LazyEventDispatcher() = default;
 
-void LazyEventDispatcher::Dispatch(const Event& event,
+void LazyEventDispatcher::Dispatch(Event& event,
                                    const LazyContextId& dispatch_context,
                                    const base::Value::Dict* listener_filter) {
   const Extension* extension = ExtensionRegistry::Get(browser_context_)
@@ -48,7 +48,7 @@
 }
 
 bool LazyEventDispatcher::QueueEventDispatch(
-    const Event& event,
+    Event& event,
     const LazyContextId& dispatch_context,
     const Extension* extension,
     const base::Value::Dict* listener_filter) {
@@ -61,6 +61,8 @@
     return false;
 
   LazyContextTaskQueue* queue = dispatch_context.GetTaskQueue();
+  event.lazy_background_active_on_dispatch =
+      queue->IsReadyToRunTasks(dispatch_context.browser_context(), extension);
   if (!queue->ShouldEnqueueTask(dispatch_context.browser_context(),
                                 extension)) {
     return false;
diff --git a/extensions/browser/events/lazy_event_dispatcher.h b/extensions/browser/events/lazy_event_dispatcher.h
index fd31b13..4276c61 100644
--- a/extensions/browser/events/lazy_event_dispatcher.h
+++ b/extensions/browser/events/lazy_event_dispatcher.h
@@ -48,7 +48,7 @@
   //
   // If [dispatch_context| is for a service worker, it ensures the worker is
   // started before dispatching the  event.
-  void Dispatch(const Event& event,
+  void Dispatch(Event& event,
                 const LazyContextId& dispatch_context,
                 const base::Value::Dict* listener_filter);
 
@@ -60,7 +60,7 @@
   // Possibly loads given extension's background page or extension Service
   // Worker in preparation to dispatch an event.  Returns true if the event was
   // queued for subsequent dispatch, false otherwise.
-  bool QueueEventDispatch(const Event& event,
+  bool QueueEventDispatch(Event& event,
                           const LazyContextId& dispatch_context,
                           const Extension* extension,
                           const base::Value::Dict* listener_filter);
diff --git a/extensions/browser/extension_event_histogram_value_unittest.cc b/extensions/browser/extension_event_histogram_value_unittest.cc
index 8196ac6..26d0a07 100644
--- a/extensions/browser/extension_event_histogram_value_unittest.cc
+++ b/extensions/browser/extension_event_histogram_value_unittest.cc
@@ -22,8 +22,8 @@
 // Tests that the ExtensionEvents enum in enums.xml exactly matches the
 // C++ enum definition.
 TEST(ExtensionEventHistogramValueTest, CheckEnums) {
-  std::optional<base::HistogramEnumEntryMap> enums =
-      base::ReadEnumFromEnumsXml("ExtensionEvents");
+  std::optional<base::HistogramEnumEntryMap> enums = base::ReadEnumFromEnumsXml(
+      "ExtensionEvents", /*subdirectory=*/"extensions");
   ASSERT_TRUE(enums);
   // The number of enums in the histogram entry should be equal to the number of
   // enums in the C++ file.
diff --git a/extensions/browser/extension_function_histogram_value_unittest.cc b/extensions/browser/extension_function_histogram_value_unittest.cc
index 9f5e4e99..9b88d5ee 100644
--- a/extensions/browser/extension_function_histogram_value_unittest.cc
+++ b/extensions/browser/extension_function_histogram_value_unittest.cc
@@ -19,8 +19,8 @@
 namespace extensions {
 
 TEST(ExtensionFunctionHistogramValueTest, CheckEnums) {
-  std::optional<base::HistogramEnumEntryMap> enums =
-      base::ReadEnumFromEnumsXml("ExtensionFunctions");
+  std::optional<base::HistogramEnumEntryMap> enums = base::ReadEnumFromEnumsXml(
+      "ExtensionFunctions", /*subdirectory=*/"extensions");
   ASSERT_TRUE(enums);
   // The number of enums in the histogram entry should be equal to the number of
   // enums in the C++ file.
diff --git a/extensions/browser/extension_host.cc b/extensions/browser/extension_host.cc
index 55f83aa..d57d2f61 100644
--- a/extensions/browser/extension_host.cc
+++ b/extensions/browser/extension_host.cc
@@ -177,7 +177,8 @@
     const std::string& event_name,
     base::TimeTicks dispatch_start_time,
     int event_id,
-    EventDispatchSource dispatch_source) {
+    EventDispatchSource dispatch_source,
+    bool lazy_background_active_on_dispatch) {
   CHECK(IsBackgroundPage());
   // See ExtensionHost::OnEventAck() for an explanation on the restriction to
   // this event flow.
@@ -190,7 +191,8 @@
   }
 
   unacked_messages_[event_id] =
-      UnackedEventData{event_name, dispatch_start_time, dispatch_source};
+      UnackedEventData{event_name, dispatch_start_time, dispatch_source,
+                       lazy_background_active_on_dispatch};
   for (auto& observer : observer_list_)
     observer.OnBackgroundEventDispatched(this, event_name, event_id);
 }
@@ -389,7 +391,8 @@
     // Only emit events that use the EventRouter::DispatchEventToProcess() event
     // routing flow since EventRouter::DispatchEventToSender() uses a different
     // flow that doesn't include dispatch start and service worker start time.
-    if (unacked_messages_[event_id].dispatch_source ==
+    const UnackedEventData& unacked_event_data = unacked_messages_[event_id];
+    if (unacked_event_data.dispatch_source ==
         EventDispatchSource::kDispatchEventToProcess) {
       base::UmaHistogramCustomMicrosecondsTimes(
           "Extensions.Events.DispatchToAckTime.ExtensionEventPage3",
@@ -397,6 +400,18 @@
               unacked_message_data.dispatch_start_time,
           /*min=*/base::Microseconds(1), /*max=*/base::Minutes(5),
           /*buckets=*/100);
+      const char* active_metric_name =
+          unacked_event_data.lazy_background_active_on_dispatch
+              ? "Extensions.Events.DispatchToAckTime.ExtensionEventPage3."
+                "Active"
+              : "Extensions.Events.DispatchToAckTime.ExtensionEventPage3."
+                "Inactive";
+      base::UmaHistogramCustomMicrosecondsTimes(
+          active_metric_name,
+          /*sample=*/base::TimeTicks::Now() -
+              unacked_message_data.dispatch_start_time,
+          /*min=*/base::Microseconds(1), /*max=*/base::Minutes(5),
+          /*buckets=*/100);
     }
   }
 
diff --git a/extensions/browser/extension_host.h b/extensions/browser/extension_host.h
index c0398bd..11f38f6 100644
--- a/extensions/browser/extension_host.h
+++ b/extensions/browser/extension_host.h
@@ -116,7 +116,8 @@
   void OnBackgroundEventDispatched(const std::string& event_name,
                                    base::TimeTicks dispatch_start_time,
                                    int event_id,
-                                   EventDispatchSource dispatch_source);
+                                   EventDispatchSource dispatch_source,
+                                   bool lazy_background_active_on_dispatch);
 
   // Called by the ProcessManager when a network request is started by the
   // extension corresponding to this ExtensionHost.
@@ -205,6 +206,10 @@
 
     // The event dispatching processing flow that was followed for this event.
     EventDispatchSource dispatch_source;
+
+    // `true` if the event was dispatched to a active/running lazy background.
+    // Used in UMA histograms.
+    bool lazy_background_active_on_dispatch;
   };
 
   // Emits a stale event ack metric if an event with `event_id` is not present
diff --git a/extensions/browser/lazy_background_task_queue.cc b/extensions/browser/lazy_background_task_queue.cc
index 1e2d40b..b931513 100644
--- a/extensions/browser/lazy_background_task_queue.cc
+++ b/extensions/browser/lazy_background_task_queue.cc
@@ -77,6 +77,25 @@
   return false;
 }
 
+// TODO(crbug.com/1467015): Refactor into `ShouldEnqueueTask()` since they are
+// so similar.
+bool LazyBackgroundTaskQueue::IsReadyToRunTasks(
+    content::BrowserContext* browser_context,
+    const Extension* extension) {
+  // Note: browser_context may not be the same as browser_context_ for incognito
+  // extension tasks.
+  CHECK(extension);
+
+  if (!BackgroundInfo::HasBackgroundPage(extension)) {
+    return false;
+  }
+
+  ProcessManager* pm = ProcessManager::Get(browser_context);
+  ExtensionHost* background_host =
+      pm->GetBackgroundHostForExtension(extension->id());
+  return background_host && background_host->has_loaded_once();
+}
+
 void LazyBackgroundTaskQueue::AddPendingTask(const LazyContextId& context_id,
                                              PendingTask task) {
   if (ExtensionsBrowserClient::Get()->IsShuttingDown()) {
diff --git a/extensions/browser/lazy_background_task_queue.h b/extensions/browser/lazy_background_task_queue.h
index 342c7d5..aaa4fcb 100644
--- a/extensions/browser/lazy_background_task_queue.h
+++ b/extensions/browser/lazy_background_task_queue.h
@@ -60,6 +60,13 @@
   bool ShouldEnqueueTask(content::BrowserContext* context,
                          const Extension* extension) override;
 
+  // Returns true if the lazy background is ready to run tasks. This currently
+  // means this and `ShouldEnqueueTask()` will return true at the same time. But
+  // because of experiments on service workers needs to be separated out into
+  // its own function.
+  bool IsReadyToRunTasks(content::BrowserContext* context,
+                         const Extension* extension) override;
+
   // Adds a task to the queue for a given extension. If this is the first
   // task added for the extension, its lazy background page will be loaded.
   // The task will be called either when the page is loaded, or when the
diff --git a/extensions/browser/lazy_context_task_queue.h b/extensions/browser/lazy_context_task_queue.h
index 4df0462..ddde2313 100644
--- a/extensions/browser/lazy_context_task_queue.h
+++ b/extensions/browser/lazy_context_task_queue.h
@@ -66,6 +66,10 @@
   virtual bool ShouldEnqueueTask(content::BrowserContext* context,
                                  const Extension* extension) = 0;
 
+  // Returns true if the lazy context is ready to run tasks (a.k.a active).
+  virtual bool IsReadyToRunTasks(content::BrowserContext* context,
+                                 const Extension* extension) = 0;
+
   // Adds a task to the queue for a given extension. If this is the first
   // task added for the extension, its "lazy context" (i.e. lazy background
   // page for event pages, service worker for extension service workers) will
diff --git a/extensions/browser/management_policy_unittest.cc b/extensions/browser/management_policy_unittest.cc
index 5ff4832..5e2cd90b 100644
--- a/extensions/browser/management_policy_unittest.cc
+++ b/extensions/browser/management_policy_unittest.cc
@@ -7,7 +7,7 @@
 #include "extensions/browser/test_management_policy.h"
 #include "testing/gtest/include/gtest/gtest.h"
 
-typedef extensions::TestManagementPolicyProvider TestProvider;
+using TestProvider = extensions::TestManagementPolicyProvider;
 using extensions::Extension;
 
 class ManagementPolicyTest : public testing::Test {
diff --git a/extensions/browser/service_worker_task_queue.cc b/extensions/browser/service_worker_task_queue.cc
index 1e93c00..fa01462f2 100644
--- a/extensions/browser/service_worker_task_queue.cc
+++ b/extensions/browser/service_worker_task_queue.cc
@@ -360,6 +360,32 @@
   return true;
 }
 
+bool ServiceWorkerTaskQueue::IsReadyToRunTasks(content::BrowserContext* context,
+                                               const Extension* extension) {
+  CHECK(extension);
+  auto activation_token = GetCurrentActivationToken(extension->id());
+
+  if (!activation_token) {
+    // Extension is not active so the worker should not be running.
+    return false;
+  }
+
+  const SequencedContextId context_id(extension->id(), browser_context_,
+                                      *activation_token);
+  WorkerState* worker_state = GetWorkerState(context_id);
+
+  if (!worker_state || !worker_state->worker_id_) {
+    // Assume the worker has not been started (is kRunning). It is likely in
+    // blink::EmbeddedWorkerStatus::(kStarting|kStopped) status.
+    return false;
+  }
+
+  content::ServiceWorkerContext* sw_context =
+      util::GetServiceWorkerContextForExtensionId(extension->id(), context);
+  return sw_context->IsLiveRunningServiceWorker(
+      worker_state->worker_id_->version_id);
+}
+
 void ServiceWorkerTaskQueue::AddPendingTask(
     const LazyContextId& lazy_context_id,
     PendingTask task) {
diff --git a/extensions/browser/service_worker_task_queue.h b/extensions/browser/service_worker_task_queue.h
index 4bdf3fc..79182f7 100644
--- a/extensions/browser/service_worker_task_queue.h
+++ b/extensions/browser/service_worker_task_queue.h
@@ -90,8 +90,17 @@
   // |context|.
   static ServiceWorkerTaskQueue* Get(content::BrowserContext* context);
 
+  // Always returns true since we currently request a worker to start for every
+  // task sent to it.
   bool ShouldEnqueueTask(content::BrowserContext* context,
                          const Extension* extension) override;
+
+  // Returns true if the service worker is blink::EmbeddedWorkerStatus::Running.
+  // This could, once service worker start logic is refactored in
+  // crbug.com/1467015, be refactored into `ShouldEnqueueTask()`.
+  bool IsReadyToRunTasks(content::BrowserContext* context,
+                         const Extension* extension) override;
+
   void AddPendingTask(const LazyContextId& context_id,
                       PendingTask task) override;
 
diff --git a/extensions/browser/state_store.h b/extensions/browser/state_store.h
index a537551..42c2c9b 100644
--- a/extensions/browser/state_store.h
+++ b/extensions/browser/state_store.h
@@ -30,7 +30,7 @@
 // A storage area for per-extension state that needs to be persisted to disk.
 class StateStore : public ExtensionRegistryObserver {
  public:
-  typedef value_store::ValueStoreFrontend::ReadCallback ReadCallback;
+  using ReadCallback = value_store::ValueStoreFrontend::ReadCallback;
 
   // The kind of extensions data stored in a backend.
   enum class BackendType { RULES, STATE, SCRIPTS };
diff --git a/extensions/common/BUILD.gn b/extensions/common/BUILD.gn
index f0ce869d..9b22d68 100644
--- a/extensions/common/BUILD.gn
+++ b/extensions/common/BUILD.gn
@@ -391,6 +391,8 @@
     "manifest_handlers/sandboxed_page_info.h",
     "manifest_handlers/shared_module_info.cc",
     "manifest_handlers/shared_module_info.h",
+    "manifest_handlers/trial_tokens_handler.cc",
+    "manifest_handlers/trial_tokens_handler.h",
     "manifest_handlers/web_accessible_resources_info.cc",
     "manifest_handlers/web_accessible_resources_info.h",
     "manifest_handlers/web_file_handlers_info.cc",
@@ -620,6 +622,7 @@
     "manifest_handlers/oauth2_manifest_unittest.cc",
     "manifest_handlers/replacement_apps_unittest.cc",
     "manifest_handlers/shared_module_manifest_unittest.cc",
+    "manifest_handlers/trial_tokens_unittest.cc",
     "manifest_unittest.cc",
     "message_bundle_unittest.cc",
     "mojom/message_port_mojom_traits_unittest.cc",
@@ -677,7 +680,7 @@
 
   data = [
     "//extensions/common/mojom/api_permission_id.mojom",
-    "//tools/metrics/histograms/enums.xml",
+    "//tools/metrics/histograms/metadata/extensions/enums.xml",
   ]
 }
 
diff --git a/extensions/common/api/_manifest_features.json b/extensions/common/api/_manifest_features.json
index f9a5246a..e473636 100644
--- a/extensions/common/api/_manifest_features.json
+++ b/extensions/common/api/_manifest_features.json
@@ -396,6 +396,10 @@
       "session_types": ["kiosk"]
     }
   ],
+  "trial_tokens": {
+    "channel": "canary",
+    "extension_types": ["extension"]
+  },
   "usb_printers": {
     "channel": "stable",
     "extension_types": ["platform_app"]
diff --git a/extensions/common/common_manifest_handlers.cc b/extensions/common/common_manifest_handlers.cc
index 0a6eaa29..ec6b00b4 100644
--- a/extensions/common/common_manifest_handlers.cc
+++ b/extensions/common/common_manifest_handlers.cc
@@ -37,6 +37,7 @@
 #include "extensions/common/manifest_handlers/requirements_info.h"
 #include "extensions/common/manifest_handlers/sandboxed_page_info.h"
 #include "extensions/common/manifest_handlers/shared_module_info.h"
+#include "extensions/common/manifest_handlers/trial_tokens_handler.h"
 #include "extensions/common/manifest_handlers/web_accessible_resources_info.h"
 #include "extensions/common/manifest_handlers/webview_info.h"
 #include "extensions/common/manifest_url_handlers.h"
@@ -85,6 +86,7 @@
   registry->RegisterHandler(std::make_unique<SandboxedPageHandler>());
   registry->RegisterHandler(std::make_unique<SharedModuleHandler>());
   registry->RegisterHandler(std::make_unique<SocketsManifestHandler>());
+  registry->RegisterHandler(std::make_unique<TrialTokensHandler>());
   registry->RegisterHandler(std::make_unique<UpdateURLHandler>());
   registry->RegisterHandler(std::make_unique<UsbPrinterManifestHandler>());
   registry->RegisterHandler(std::make_unique<WebAccessibleResourcesHandler>());
diff --git a/extensions/common/manifest.h b/extensions/common/manifest.h
index 820653bf..b7e3fbd4 100644
--- a/extensions/common/manifest.h
+++ b/extensions/common/manifest.h
@@ -24,7 +24,8 @@
 class Manifest final {
  public:
   // Do not change the order of entries or remove entries in this list as this
-  // is used in ExtensionType enum in tools/metrics/histograms/enums.xml.
+  // is used in ExtensionType enum in
+  // tools/metrics/histograms/metadata/extensions/enums.xml.
   enum Type {
     TYPE_UNKNOWN = 0,
     TYPE_EXTENSION = 1,
diff --git a/extensions/common/manifest_constants.h b/extensions/common/manifest_constants.h
index fc0e4d22..f69a9ff 100644
--- a/extensions/common/manifest_constants.h
+++ b/extensions/common/manifest_constants.h
@@ -139,6 +139,7 @@
 inline constexpr char kThemeDisplayProperties[] = "properties";
 inline constexpr char kThemeImages[] = "images";
 inline constexpr char kThemeTints[] = "tints";
+inline constexpr char kTrialTokens[] = "trial_tokens";
 inline constexpr char kTtsEngine[] = "tts_engine";
 inline constexpr char kTtsEngineSampleRate[] = "sample_rate";
 inline constexpr char kTtsEngineBufferSize[] = "buffer_size";
@@ -583,6 +584,15 @@
     "An image specified in the theme is missing.";
 inline constexpr char16_t kInvalidThemeTints[] =
     u"Invalid value for theme images - tints must be decimal numbers.";
+inline constexpr char16_t kInvalidTrialTokensNonEmptyList[] =
+    u"Invalid value for 'trial_tokens'. Must be a non-empty list.";
+inline constexpr char16_t kInvalidTrialTokensValue[] =
+    u"Invalid element in 'trial_tokens'. Must be a non-empty string.";
+inline constexpr char kInvalidTrialTokensValueTooLong[] =
+    "Invalid element in 'trial_tokens'. Token must not be longer than %zu.";
+inline constexpr char kInvalidTrialTokensTooManyTokens[] =
+    "Invalid value for 'trial_tokens': too many tokens. Only the first %zu "
+    "will be processed.";
 inline constexpr char16_t kInvalidTts[] = u"Invalid value for 'tts_engine'.";
 inline constexpr char16_t kInvalidTtsSampleRateFormat[] =
     u"Invalid format for tts_engine.sample_rate: expected integer.";
diff --git a/extensions/common/manifest_handlers/trial_tokens_handler.cc b/extensions/common/manifest_handlers/trial_tokens_handler.cc
new file mode 100644
index 0000000..650a1a2
--- /dev/null
+++ b/extensions/common/manifest_handlers/trial_tokens_handler.cc
@@ -0,0 +1,104 @@
+// Copyright 2023 The Chromium Authors
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "extensions/common/manifest_handlers/trial_tokens_handler.h"
+
+#include <memory>
+#include <utility>
+
+#include "base/strings/stringprintf.h"
+#include "base/values.h"
+#include "extensions/common/manifest.h"
+#include "extensions/common/manifest_constants.h"
+
+namespace extensions {
+
+namespace {
+
+// The maximum number of tokens which will be processed
+// This value should be sufficiently large to avoid any issues in practice,
+// but small enough to bound resource consumption to something reasonable
+const size_t kMaxTokenCount = 100;
+// The maximum length of a single token
+// Keep this value in sync with the value of same name in
+// third_party/blink/public/common/origin_trials/trial_token.cc
+const size_t kMaxTokenSize = 6144;
+
+const TrialTokens* GetTokens(const Extension& extension) {
+  return static_cast<const TrialTokens*>(
+      extension.GetManifestData(manifest_keys::kTrialTokens));
+}
+
+}  // namespace
+
+TrialTokens::TrialTokens() = default;
+TrialTokens::TrialTokens(TrialTokens&& other) = default;
+TrialTokens::~TrialTokens() = default;
+
+// static
+const std::set<std::string>* TrialTokens::GetTrialTokens(
+    const Extension& extension) {
+  const auto* tokens = GetTokens(extension);
+  if (!tokens) {
+    return nullptr;
+  }
+  return &tokens->tokens;
+}
+
+// static
+bool TrialTokens::HasTrialTokens(const Extension& extension) {
+  return GetTokens(extension);
+}
+
+TrialTokensHandler::TrialTokensHandler() = default;
+TrialTokensHandler::~TrialTokensHandler() = default;
+
+bool TrialTokensHandler::Parse(Extension* extension, std::u16string* error) {
+  const base::Value* trial_tokens = nullptr;
+  if (!extension->manifest()->GetList(manifest_keys::kTrialTokens,
+                                      &trial_tokens) ||
+      trial_tokens->GetList().empty()) {
+    *error = manifest_errors::kInvalidTrialTokensNonEmptyList;
+    return false;
+  }
+
+  size_t processedTokenCount = 0;
+  auto tokens = std::make_unique<TrialTokens>();
+  for (const auto& token : trial_tokens->GetList()) {
+    // Avoid processing an arbitrarily large number of trial tokens.
+    if (++processedTokenCount > kMaxTokenCount) {
+      extension->AddInstallWarning(extensions::InstallWarning(
+          base::StringPrintf(manifest_errors::kInvalidTrialTokensTooManyTokens,
+                             kMaxTokenCount),
+          manifest_keys::kTrialTokens));
+      break;
+    }
+
+    // Error out on non-string token or empty string
+    if (!token.is_string() || token.GetString().empty()) {
+      *error = manifest_errors::kInvalidTrialTokensValue;
+      return false;
+    }
+    // Add a warning for a long token and skip it
+    if (token.GetString().length() > kMaxTokenSize) {
+      extension->AddInstallWarning(extensions::InstallWarning(
+          base::StringPrintf(manifest_errors::kInvalidTrialTokensValueTooLong,
+                             kMaxTokenSize),
+          manifest_keys::kTrialTokens));
+      continue;
+    }
+
+    tokens->tokens.insert(token.GetString());
+  }
+
+  extension->SetManifestData(manifest_keys::kTrialTokens, std::move(tokens));
+  return true;
+}
+
+base::span<const char* const> TrialTokensHandler::Keys() const {
+  static constexpr const char* kKeys[] = {manifest_keys::kTrialTokens};
+  return kKeys;
+}
+
+}  // namespace extensions
diff --git a/extensions/common/manifest_handlers/trial_tokens_handler.h b/extensions/common/manifest_handlers/trial_tokens_handler.h
new file mode 100644
index 0000000..a7951f1
--- /dev/null
+++ b/extensions/common/manifest_handlers/trial_tokens_handler.h
@@ -0,0 +1,55 @@
+// Copyright 2023 The Chromium Authors
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef EXTENSIONS_COMMON_MANIFEST_HANDLERS_TRIAL_TOKENS_HANDLER_H_
+#define EXTENSIONS_COMMON_MANIFEST_HANDLERS_TRIAL_TOKENS_HANDLER_H_
+
+#include <set>
+#include <string>
+
+#include "base/containers/span.h"
+#include "extensions/common/extension.h"
+#include "extensions/common/manifest_handler.h"
+
+namespace extensions {
+
+// A structure to hold the set of tokens provided by this extension.
+struct TrialTokens : public Extension::ManifestData {
+  TrialTokens();
+
+  TrialTokens(const TrialTokens&) = delete;
+  TrialTokens& operator=(const TrialTokens&) = delete;
+
+  TrialTokens(TrialTokens&& other);
+
+  ~TrialTokens() override;
+
+  static const std::set<std::string>* GetTrialTokens(
+      const Extension& extension);
+
+  static bool HasTrialTokens(const Extension& extension);
+
+  // A set of trial tokens used by this extension.
+  std::set<std::string> tokens;
+};
+
+// Parses the "trust_tokens" manifest key.
+class TrialTokensHandler : public ManifestHandler {
+ public:
+  TrialTokensHandler();
+
+  TrialTokensHandler(const TrialTokensHandler&) = delete;
+  TrialTokensHandler& operator=(const TrialTokensHandler&) = delete;
+
+  ~TrialTokensHandler() override;
+
+  bool Parse(Extension* extension, std::u16string* error) override;
+
+ private:
+  base::span<const char* const> Keys() const override;
+};
+
+}  // namespace extensions
+
+#endif  // EXTENSIONS_COMMON_MANIFEST_HANDLERS_TRIAL_TOKENS_HANDLER_H_
diff --git a/extensions/common/manifest_handlers/trial_tokens_unittest.cc b/extensions/common/manifest_handlers/trial_tokens_unittest.cc
new file mode 100644
index 0000000..6cad93b
--- /dev/null
+++ b/extensions/common/manifest_handlers/trial_tokens_unittest.cc
@@ -0,0 +1,113 @@
+// Copyright 2023 The Chromium Authors
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include <memory>
+#include <utility>
+
+#include "base/strings/stringprintf.h"
+#include "base/test/values_test_util.h"
+#include "components/version_info/version_info.h"
+#include "extensions/common/features/feature_channel.h"
+#include "extensions/common/manifest_constants.h"
+#include "extensions/common/manifest_handlers/trial_tokens_handler.h"
+#include "extensions/common/manifest_test.h"
+#include "testing/gtest/include/gtest/gtest.h"
+
+namespace extensions {
+
+namespace {
+
+class TrialTokensManifestTest : public ManifestTest {
+ public:
+  TrialTokensManifestTest() {}
+
+ protected:
+  ManifestData CreateManifest(const std::string& trial_tokens) {
+    static constexpr char kManifest[] =
+        R"({
+             "name": "test",
+             "version": "1",
+             "manifest_version": 3,
+             "trial_tokens": %s
+           })";
+    base::Value manifest = base::test::ParseJson(
+        base::StringPrintf(kManifest, trial_tokens.c_str()));
+    return ManifestData(std::move(manifest).TakeDict());
+  }
+
+  ManifestData CreateManifestNoTrialTokens() {
+    base::Value manifest = base::test::ParseJson(R"({
+             "name": "test",
+             "version": "1",
+             "manifest_version": 3
+           })");
+    return ManifestData(std::move(manifest).TakeDict());
+  }
+
+ private:
+  ScopedCurrentChannel channel_{version_info::Channel::CANARY};
+};
+
+}  // namespace
+
+TEST_F(TrialTokensManifestTest, InvalidTrialTokensList) {
+  // Must be a non-empty list
+  LoadAndExpectError(CreateManifest("32"),
+                     manifest_errors::kInvalidTrialTokensNonEmptyList);
+  LoadAndExpectError(CreateManifest("true"),
+                     manifest_errors::kInvalidTrialTokensNonEmptyList);
+  LoadAndExpectError(CreateManifest(R"("not_a_valid_token_list")"),
+                     manifest_errors::kInvalidTrialTokensNonEmptyList);
+  LoadAndExpectError(CreateManifest("{}"),
+                     manifest_errors::kInvalidTrialTokensNonEmptyList);
+  LoadAndExpectError(CreateManifest(R"({"foo": false})"),
+                     manifest_errors::kInvalidTrialTokensNonEmptyList);
+  LoadAndExpectError(CreateManifest(R"([])"),
+                     manifest_errors::kInvalidTrialTokensNonEmptyList);
+}
+
+TEST_F(TrialTokensManifestTest, InvalidTrialTokensValue) {
+  // Every token must be a non-empty string
+  LoadAndExpectError(CreateManifest(R"([""])"),
+                     manifest_errors::kInvalidTrialTokensValue);
+  LoadAndExpectError(CreateManifest(R"([32])"),
+                     manifest_errors::kInvalidTrialTokensValue);
+  LoadAndExpectError(CreateManifest(R"([true])"),
+                     manifest_errors::kInvalidTrialTokensValue);
+  LoadAndExpectError(CreateManifest(R"([["valid_token"]])"),
+                     manifest_errors::kInvalidTrialTokensValue);
+  LoadAndExpectError(CreateManifest(R"(["valid_token", ""])"),
+                     manifest_errors::kInvalidTrialTokensValue);
+  LoadAndExpectError(CreateManifest(R"(["valid_token", 32])"),
+                     manifest_errors::kInvalidTrialTokensValue);
+  LoadAndExpectError(CreateManifest(R"(["valid_token", true])"),
+                     manifest_errors::kInvalidTrialTokensValue);
+  LoadAndExpectError(CreateManifest(R"(["valid_token", ["valid_token"]])"),
+                     manifest_errors::kInvalidTrialTokensValue);
+}
+
+TEST_F(TrialTokensManifestTest, NoTrialTokens) {
+  auto good = LoadAndExpectSuccess(CreateManifestNoTrialTokens());
+  EXPECT_FALSE(TrialTokens::HasTrialTokens(*good.get()));
+  EXPECT_EQ(TrialTokens::GetTrialTokens(*good.get()), nullptr);
+}
+
+TEST_F(TrialTokensManifestTest, VerifyParse) {
+  auto good = LoadAndExpectSuccess(CreateManifest(R"(["valid_token"])"));
+  EXPECT_TRUE(TrialTokens::HasTrialTokens(*good.get()));
+
+  auto* tokens = TrialTokens::GetTrialTokens(*good.get());
+  EXPECT_EQ(1u, tokens->size());
+  EXPECT_TRUE(tokens->contains("valid_token"));
+}
+
+// TODO(crbug.com/1484767): remove this test before launch to stable
+TEST_F(TrialTokensManifestTest, NotAvailableInStable) {
+  ScopedCurrentChannel channel{version_info::Channel::STABLE};
+
+  auto good = LoadAndExpectSuccess(CreateManifest(R"(["valid_token"])"));
+  EXPECT_FALSE(TrialTokens::HasTrialTokens(*good.get()));
+}
+
+}  // namespace extensions
diff --git a/extensions/common/mojom/api_permission_id.mojom b/extensions/common/mojom/api_permission_id.mojom
index 57265c27..5b72acba 100644
--- a/extensions/common/mojom/api_permission_id.mojom
+++ b/extensions/common/mojom/api_permission_id.mojom
@@ -284,6 +284,7 @@
   kChromeOSManagementAudio = 257,
 
   // Add new entries at the end of the enum and be sure to update the
-  // "ExtensionPermission3" enum in tools/metrics/histograms/enums.xml
-  // (by running update_extension_permission.py).
+  // "ExtensionPermission3" enum in
+  // tools/metrics/histograms/metadata/extensions/enums.xml (by running
+  // update_extension_permission.py).
 };
diff --git a/extensions/common/permissions/api_permission_unittest.cc b/extensions/common/permissions/api_permission_unittest.cc
index a7a6d11..747afdf 100644
--- a/extensions/common/permissions/api_permission_unittest.cc
+++ b/extensions/common/permissions/api_permission_unittest.cc
@@ -23,8 +23,8 @@
 // Tests that the ExtensionPermission3 enum in enums.xml exactly matches the
 // mojom::APIPermissionID enum in Mojom.
 TEST(ExtensionAPIPermissionTest, CheckEnums) {
-  std::optional<base::HistogramEnumEntryMap> enums =
-      base::ReadEnumFromEnumsXml("ExtensionPermission3");
+  std::optional<base::HistogramEnumEntryMap> enums = base::ReadEnumFromEnumsXml(
+      "ExtensionPermission3", /*subdirectory=*/"extensions");
   ASSERT_TRUE(enums);
   // The number of enums in the histogram entry should be equal to the number of
   // enums in the C++ file.
diff --git a/fuchsia_web/runners/cast/cast_runner.cml b/fuchsia_web/runners/cast/cast_runner.cml
index 7995464..f29f9a5b 100644
--- a/fuchsia_web/runners/cast/cast_runner.cml
+++ b/fuchsia_web/runners/cast/cast_runner.cml
@@ -64,6 +64,11 @@
       availability: "optional",
     },
     {
+      directory: "tzdata-icu",
+      rights: [ "r*" ],
+      path: "/config/tzdata",
+    },
+    {
       // Capabilities used by the Runner itself.
       protocol: [
         "chromium.cast.ApplicationConfigManager",
diff --git a/fuchsia_web/runners/cast/cast_runner_integration_test.shard.test-cml b/fuchsia_web/runners/cast/cast_runner_integration_test.shard.test-cml
index e09fa301..0db1f458 100644
--- a/fuchsia_web/runners/cast/cast_runner_integration_test.shard.test-cml
+++ b/fuchsia_web/runners/cast/cast_runner_integration_test.shard.test-cml
@@ -4,7 +4,10 @@
 {
   offer: [
     {
-      directory: "config-data",
+      directory: [
+		"config-data",
+        "tzdata-icu",
+      ],
       from: "parent",
       to: "#realm_builder",
     },
diff --git a/fuchsia_web/runners/cast/test/cast_runner_launcher.cc b/fuchsia_web/runners/cast/test/cast_runner_launcher.cc
index d11e7df..7767505 100644
--- a/fuchsia_web/runners/cast/test/cast_runner_launcher.cc
+++ b/fuchsia_web/runners/cast/test/cast_runner_launcher.cc
@@ -126,6 +126,7 @@
                         .as = "config-data-for-web-instance",
                         .subdir = "web_engine"},
               Directory{.name = "root-ssl-certificates"},
+              Directory{.name = "tzdata-icu"},
 
               // fuchsia.web/Context required and recommended protocols.
               Protocol{fuchsia::buildinfo::Provider::Name_},
diff --git a/fuchsia_web/shell/cast_streaming_shell.cml b/fuchsia_web/shell/cast_streaming_shell.cml
index 8e88eb1..966fbbf 100644
--- a/fuchsia_web/shell/cast_streaming_shell.cml
+++ b/fuchsia_web/shell/cast_streaming_shell.cml
@@ -59,6 +59,14 @@
       availability: "optional",
     },
     {
+      // Holds ICU time zone data files.
+      // See:
+      // https://fuchsia.dev/fuchsia-src/concepts/process/namespaces?typical_directory_structure
+      directory: "tzdata-icu",
+      from: "parent",
+      to: "#realm_builder",
+    },
+    {
       // Required by `fuchsia.web/ContextFeatureFlags.NETWORK`.
       directory: "root-ssl-certificates",
       from: "parent",
diff --git a/fuchsia_web/shell/web_engine_shell.cml b/fuchsia_web/shell/web_engine_shell.cml
index 12edbde..f5bdeb7 100644
--- a/fuchsia_web/shell/web_engine_shell.cml
+++ b/fuchsia_web/shell/web_engine_shell.cml
@@ -191,6 +191,14 @@
       availability: "optional",
     },
     {
+      // Holds ICU time zone data files.
+      // See:
+      // https://fuchsia.dev/fuchsia-src/concepts/process/namespaces?typical_directory_structure
+      directory: "tzdata-icu",
+      from: "parent",
+      to: "#realm_builder",
+    },
+    {
       // Required by `fuchsia.web/ContextFeatureFlags.NETWORK`.
       directory: "root-ssl-certificates",
       from: "parent",
diff --git a/fuchsia_web/webengine/test/context_provider_for_test.cc b/fuchsia_web/webengine/test/context_provider_for_test.cc
index d75b597..20cbf23 100644
--- a/fuchsia_web/webengine/test/context_provider_for_test.cc
+++ b/fuchsia_web/webengine/test/context_provider_for_test.cc
@@ -41,6 +41,7 @@
           .capabilities =
               {// Capabilities used/routed by WebInstanceHost:
                ::component_testing::Directory{"config-data-for-web-instance"},
+               ::component_testing::Directory{"tzdata-icu"},
                // Required capabilities offered to web-instance.cm:
                ::component_testing::Directory{"root-ssl-certificates"},
                ::component_testing::Protocol{"fuchsia.buildinfo.Provider"},
diff --git a/fuchsia_web/webengine/web_instance-common.shard.cml b/fuchsia_web/webengine/web_instance-common.shard.cml
index 28231f3..da271b3 100644
--- a/fuchsia_web/webengine/web_instance-common.shard.cml
+++ b/fuchsia_web/webengine/web_instance-common.shard.cml
@@ -71,7 +71,6 @@
       directory: "tzdata-icu",
       rights: [ "r*" ],
       path: "/config/tzdata/icu",
-      availability: "optional",
     },
 
     // Temporary directory specified by WebInstanceHost.set_tmp_dir.
diff --git a/fuchsia_web/webinstance_host/web_instance_host.shard.cml b/fuchsia_web/webinstance_host/web_instance_host.shard.cml
index a9c2d16e..cbb1ef50 100644
--- a/fuchsia_web/webinstance_host/web_instance_host.shard.cml
+++ b/fuchsia_web/webinstance_host/web_instance_host.shard.cml
@@ -45,6 +45,11 @@
       availability: "optional",
     },
     {
+      directory: "tzdata-icu",
+      from: "parent",
+      to: "#web_instances",
+    },
+    {
       // Statically offered to all web_instances regardless of whether they were
       // created with `ContextFeatureFlags.NETWORK`.
       directory: "root-ssl-certificates",
diff --git a/fuchsia_web/webinstance_host/web_instance_host_with_svc_directory.shard.cml b/fuchsia_web/webinstance_host/web_instance_host_with_svc_directory.shard.cml
index 54b21e2..45605f96 100644
--- a/fuchsia_web/webinstance_host/web_instance_host_with_svc_directory.shard.cml
+++ b/fuchsia_web/webinstance_host/web_instance_host_with_svc_directory.shard.cml
@@ -41,6 +41,11 @@
       availability: "optional",
     },
     {
+      directory: "tzdata-icu",
+      from: "parent",
+      to: "#web_instances",
+    },
+    {
       // Statically offered to all web_instances regardless of whether they were
       // created with `ContextFeatureFlags::NETWORK`.
       directory: "root-ssl-certificates",
diff --git a/ios/chrome/app/strings/ios_chromium_strings.grd b/ios/chrome/app/strings/ios_chromium_strings.grd
index 83f95a3..52d416d 100644
--- a/ios/chrome/app/strings/ios_chromium_strings.grd
+++ b/ios/chrome/app/strings/ios_chromium_strings.grd
@@ -716,6 +716,13 @@
       <message name="IDS_IOS_PRICE_NOTIFICATIONS_PRICE_TRACK_PERMISSION_REDIRECT_ALERT_TITLE" desc="The title for the UIAlert that redirects the user to iOS' application settings for Chrome.">
           Allow Chromium notifications to get price drop alerts
       </message>
+      <message name="IDS_IOS_PRIVACY_ACCOUNT_SETTINGS_AND_GOOGLE_SERVICES_FOOTER" desc="Footer to invite the user to open the Account Settings and Google Services settings.">
+        You can <ph name="BEGIN_LINK">BEGIN_LINK</ph>manage what Chromium data is saved<ph name="END_LINK">END_LINK</ph> in your Google Account.
+For more settings that use data to improve your Chromium experience, go to <ph name="BEGIN_LINK">BEGIN_LINK</ph>Google Services<ph name="END_LINK">END_LINK</ph>.
+      </message>
+      <message name="IDS_IOS_PRIVACY_SIGNED_OUT_FOOTER" desc="Footer to invite the signed out user to open the Google Services settings.">
+        For more settings that use data to improve your Chromium experience, go to <ph name="BEGIN_LINK">BEGIN_LINK</ph>Google Services<ph name="END_LINK">END_LINK</ph>.
+      </message>
       <message name="IDS_IOS_PRODUCT_NAME" desc="The Chrome application name" translateable="false">
         Chromium
       </message>
diff --git a/ios/chrome/app/strings/ios_chromium_strings_grd/IDS_IOS_PRIVACY_ACCOUNT_SETTINGS_AND_GOOGLE_SERVICES_FOOTER.png.sha1 b/ios/chrome/app/strings/ios_chromium_strings_grd/IDS_IOS_PRIVACY_ACCOUNT_SETTINGS_AND_GOOGLE_SERVICES_FOOTER.png.sha1
new file mode 100644
index 0000000..85f8da08
--- /dev/null
+++ b/ios/chrome/app/strings/ios_chromium_strings_grd/IDS_IOS_PRIVACY_ACCOUNT_SETTINGS_AND_GOOGLE_SERVICES_FOOTER.png.sha1
@@ -0,0 +1 @@
+f6daee446d25e597a00cff9dc8013708388a60a7
\ No newline at end of file
diff --git a/ios/chrome/app/strings/ios_chromium_strings_grd/IDS_IOS_PRIVACY_SIGNED_OUT_FOOTER.png.sha1 b/ios/chrome/app/strings/ios_chromium_strings_grd/IDS_IOS_PRIVACY_SIGNED_OUT_FOOTER.png.sha1
new file mode 100644
index 0000000..2beeba18
--- /dev/null
+++ b/ios/chrome/app/strings/ios_chromium_strings_grd/IDS_IOS_PRIVACY_SIGNED_OUT_FOOTER.png.sha1
@@ -0,0 +1 @@
+7631e4e361a3485b8d19ee3706edd7f12810494a
\ No newline at end of file
diff --git a/ios/chrome/app/strings/ios_google_chrome_strings.grd b/ios/chrome/app/strings/ios_google_chrome_strings.grd
index 77ade94..1cf810a 100644
--- a/ios/chrome/app/strings/ios_google_chrome_strings.grd
+++ b/ios/chrome/app/strings/ios_google_chrome_strings.grd
@@ -716,9 +716,16 @@
       <message name="IDS_IOS_PRICE_NOTIFICATIONS_PRICE_TRACK_PERMISSION_REDIRECT_ALERT_TITLE" desc="The title for the UIAlert that redirects the user to iOS' application settings for Chrome.">
           Allow Chrome notifications to get price drop alerts
       </message>
+      <message name="IDS_IOS_PRIVACY_ACCOUNT_SETTINGS_AND_GOOGLE_SERVICES_FOOTER" desc="Footer to invite the user to open the Account Settings and Google Services settings.">
+        You can <ph name="BEGIN_LINK">BEGIN_LINK</ph>manage what Chrome data is saved<ph name="END_LINK">END_LINK</ph> in your Google Account.
+For more settings that use data to improve your Chrome experience, go to <ph name="BEGIN_LINK">BEGIN_LINK</ph>Google Services<ph name="END_LINK">END_LINK</ph>.
+      </message>
       <message name="IDS_IOS_PRIVACY_SAFE_BROWSING_STANDARD_PROTECTION_FRIENDLIER_SUMMARY_PROXY" desc="Friendlier summary for Privacy Safe Browsing standard protection mode.">
         Protects against sites, downloads, and extensions that are known to be dangerous. When you visit a site, Chrome sends an obfuscated portion of the URL to Google through a privacy server that hides your IP address. If a site does something suspicious, full URLs and bits of page content are also sent.
       </message>
+      <message name="IDS_IOS_PRIVACY_SIGNED_OUT_FOOTER" desc="Footer to invite the signed out user to open the Google Services settings.">
+        For more settings that use data to improve your Chrome experience, go to <ph name="BEGIN_LINK">BEGIN_LINK</ph>Google Services<ph name="END_LINK">END_LINK</ph>.
+      </message>
       <message name="IDS_IOS_PRODUCT_NAME" desc="The Chrome application name">
         Google Chrome
       </message>
diff --git a/ios/chrome/app/strings/ios_google_chrome_strings_grd/IDS_IOS_PRIVACY_ACCOUNT_SETTINGS_AND_GOOGLE_SERVICES_FOOTER.png.sha1 b/ios/chrome/app/strings/ios_google_chrome_strings_grd/IDS_IOS_PRIVACY_ACCOUNT_SETTINGS_AND_GOOGLE_SERVICES_FOOTER.png.sha1
new file mode 100644
index 0000000..85f8da08
--- /dev/null
+++ b/ios/chrome/app/strings/ios_google_chrome_strings_grd/IDS_IOS_PRIVACY_ACCOUNT_SETTINGS_AND_GOOGLE_SERVICES_FOOTER.png.sha1
@@ -0,0 +1 @@
+f6daee446d25e597a00cff9dc8013708388a60a7
\ No newline at end of file
diff --git a/ios/chrome/app/strings/ios_google_chrome_strings_grd/IDS_IOS_PRIVACY_SIGNED_OUT_FOOTER.png.sha1 b/ios/chrome/app/strings/ios_google_chrome_strings_grd/IDS_IOS_PRIVACY_SIGNED_OUT_FOOTER.png.sha1
new file mode 100644
index 0000000..2beeba18
--- /dev/null
+++ b/ios/chrome/app/strings/ios_google_chrome_strings_grd/IDS_IOS_PRIVACY_SIGNED_OUT_FOOTER.png.sha1
@@ -0,0 +1 @@
+7631e4e361a3485b8d19ee3706edd7f12810494a
\ No newline at end of file
diff --git a/ios/chrome/browser/download/model/download_manager_tab_helper.h b/ios/chrome/browser/download/model/download_manager_tab_helper.h
index ee240b0..f295b74 100644
--- a/ios/chrome/browser/download/model/download_manager_tab_helper.h
+++ b/ios/chrome/browser/download/model/download_manager_tab_helper.h
@@ -14,6 +14,8 @@
 #import "ios/web/public/web_state_user_data.h"
 
 @protocol DownloadManagerTabHelperDelegate;
+@protocol SystemIdentity;
+
 namespace web {
 class DownloadTask;
 class WebState;
@@ -37,9 +39,12 @@
   // cancelled.
   bool has_download_task() const { return task_.get(); }
 
-  // Set the delegate. The tab helper will no-op if the delegate is nil.
+  // Sets the delegate. The tab helper will no-op if the delegate is nil.
   void SetDelegate(id<DownloadManagerTabHelperDelegate> delegate);
 
+  // Starts the current download task and remember to save it to Drive.
+  void StartDownloadTaskAndSaveToDrive(id<SystemIdentity> selected_identity);
+
  protected:
   // Allow subclassing from DownloadManagerTabHelper for testing purposes.
   explicit DownloadManagerTabHelper(web::WebState* web_state);
@@ -55,9 +60,6 @@
   // web::DownloadTaskObserver overrides:
   void OnDownloadUpdated(web::DownloadTask* task) override;
 
-  // Returns key for using with NetworkActivityIndicatorManager.
-  NSString* GetNetworkActivityKey() const;
-
   // Assigns `task` to `task_`; replaces the current download if exists;
   // instructs the delegate that download has started.
   void DidCreateDownload(std::unique_ptr<web::DownloadTask> task);
diff --git a/ios/chrome/browser/download/model/download_manager_tab_helper.mm b/ios/chrome/browser/download/model/download_manager_tab_helper.mm
index 2d20b48..55c87e68 100644
--- a/ios/chrome/browser/download/model/download_manager_tab_helper.mm
+++ b/ios/chrome/browser/download/model/download_manager_tab_helper.mm
@@ -28,6 +28,8 @@
   }
 }
 
+#pragma mark - Public methods
+
 void DownloadManagerTabHelper::Download(
     std::unique_ptr<web::DownloadTask> task) {
   // If downloads are persistent, they cannot be lost once completed.
@@ -59,6 +61,13 @@
   delegate_ = delegate;
 }
 
+void DownloadManagerTabHelper::StartDownloadTaskAndSaveToDrive(
+    id<SystemIdentity> selected_identity) {
+  // TODO(crbug.com/1495353): Start the download task through `delegate_`.
+}
+
+#pragma mark - web::WebStateObserver
+
 void DownloadManagerTabHelper::WasShown(web::WebState* web_state) {
   if (task_ && delegate_) {
     delegate_started_ = true;
@@ -83,6 +92,8 @@
   }
 }
 
+#pragma mark - web::DownloadTaskObserver
+
 void DownloadManagerTabHelper::OnDownloadUpdated(web::DownloadTask* task) {
   DCHECK_EQ(task, task_.get());
   switch (task->GetState()) {
@@ -101,6 +112,8 @@
   }
 }
 
+#pragma mark - Private
+
 void DownloadManagerTabHelper::DidCreateDownload(
     std::unique_ptr<web::DownloadTask> task) {
   if (task_) {
diff --git a/ios/chrome/browser/passwords/model/password_controller_unittest.mm b/ios/chrome/browser/passwords/model/password_controller_unittest.mm
index d535b87..345d4d0 100644
--- a/ios/chrome/browser/passwords/model/password_controller_unittest.mm
+++ b/ios/chrome/browser/passwords/model/password_controller_unittest.mm
@@ -506,8 +506,10 @@
   web::ScopedTestingWebClient web_client_;
   web::WebTaskEnvironment task_environment_;
   std::unique_ptr<TestChromeBrowserState> browser_state_;
-  std::unique_ptr<web::WebState> web_state_;
+  // `autofill_client_` mocks KeyedServices, which need to outlive the
+  // `BrowserAutofillManager` owned by frame (`web_state`).
   autofill::TestAutofillClient autofill_client_;
+  std::unique_ptr<web::WebState> web_state_;
 
   // SuggestionController for testing.
   PasswordsTestSuggestionController* suggestionController_;
diff --git a/ios/chrome/browser/shared/public/commands/BUILD.gn b/ios/chrome/browser/shared/public/commands/BUILD.gn
index 6b7fc63..a79706810 100644
--- a/ios/chrome/browser/shared/public/commands/BUILD.gn
+++ b/ios/chrome/browser/shared/public/commands/BUILD.gn
@@ -55,8 +55,6 @@
     "share_download_overlay_commands.h",
     "share_highlight_command.h",
     "share_highlight_command.mm",
-    "show_save_to_drive_command.h",
-    "show_save_to_drive_command.mm",
     "show_signin_command.h",
     "show_signin_command.mm",
     "snackbar_commands.h",
diff --git a/ios/chrome/browser/shared/public/commands/save_to_drive_commands.h b/ios/chrome/browser/shared/public/commands/save_to_drive_commands.h
index 8db4e68..737b053 100644
--- a/ios/chrome/browser/shared/public/commands/save_to_drive_commands.h
+++ b/ios/chrome/browser/shared/public/commands/save_to_drive_commands.h
@@ -10,8 +10,8 @@
 // Commands related to Save to Drive.
 @protocol SaveToDriveCommands
 
-// Starts Save to Drive UI.
-- (void)showSaveToDrive:(ShowSaveToDriveCommand*)command;
+// Starts Save to Drive UI for the given download task.
+- (void)showSaveToDriveForDownload:(web::DownloadTask*)downloadTask;
 
 // Stops Save to Drive UI.
 - (void)hideSaveToDrive;
diff --git a/ios/chrome/browser/shared/public/commands/show_save_to_drive_command.h b/ios/chrome/browser/shared/public/commands/show_save_to_drive_command.h
deleted file mode 100644
index f1e9eb39..0000000
--- a/ios/chrome/browser/shared/public/commands/show_save_to_drive_command.h
+++ /dev/null
@@ -1,21 +0,0 @@
-// Copyright 2023 The Chromium Authors
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#ifndef IOS_CHROME_BROWSER_SHARED_PUBLIC_COMMANDS_SHOW_SAVE_TO_DRIVE_COMMAND_H_
-#define IOS_CHROME_BROWSER_SHARED_PUBLIC_COMMANDS_SHOW_SAVE_TO_DRIVE_COMMAND_H_
-
-#import <Foundation/Foundation.h>
-
-// Contains the data necessary to show the Save to Drive UI.
-@interface ShowSaveToDriveCommand : NSObject
-
-// The filename of the file to save to Drive.
-@property(nonatomic, copy) NSString* fileName;
-
-// The size of the file to save to Drive, in bytes. If unknown, set to -1.
-@property(nonatomic, assign) int64_t fileSize;
-
-@end
-
-#endif  // IOS_CHROME_BROWSER_SHARED_PUBLIC_COMMANDS_SHOW_SAVE_TO_DRIVE_COMMAND_H_
diff --git a/ios/chrome/browser/shared/public/commands/show_save_to_drive_command.mm b/ios/chrome/browser/shared/public/commands/show_save_to_drive_command.mm
deleted file mode 100644
index 578a0bf..0000000
--- a/ios/chrome/browser/shared/public/commands/show_save_to_drive_command.mm
+++ /dev/null
@@ -1,9 +0,0 @@
-// Copyright 2023 The Chromium Authors
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#import "ios/chrome/browser/shared/public/commands/show_save_to_drive_command.h"
-
-@implementation ShowSaveToDriveCommand
-
-@end
diff --git a/ios/chrome/browser/ui/autofill/bottom_sheet/payments_suggestion_bottom_sheet_exit_reason.h b/ios/chrome/browser/ui/autofill/bottom_sheet/payments_suggestion_bottom_sheet_exit_reason.h
index 18e9ee7..7d41926 100644
--- a/ios/chrome/browser/ui/autofill/bottom_sheet/payments_suggestion_bottom_sheet_exit_reason.h
+++ b/ios/chrome/browser/ui/autofill/bottom_sheet/payments_suggestion_bottom_sheet_exit_reason.h
@@ -8,14 +8,15 @@
 // These values are persisted to logs. Entries should not be renumbered and
 // numeric values should never be reused.
 // Must be in sync with PaymentsSuggestionBottomSheetExitReason enum in
-// tools/metrics/histograms/enums.xml.
+// tools/metrics/histograms/metadata/ios/enums.xml.
 // LINT.IfChange
 enum class PaymentsSuggestionBottomSheetExitReason {
   kDismissal = 0,
   kUsePaymentsSuggestion = 1,
   kShowPaymentMethods = 2,
   kShowPaymentDetails = 3,
-  kMaxValue = kShowPaymentDetails,
+  kBadProvider = 4,
+  kMaxValue = kBadProvider,
 };
 // LINT.ThenChange(tools/metrics/histograms/metadata/ios/enums.xml)
 
diff --git a/ios/chrome/browser/ui/autofill/bottom_sheet/payments_suggestion_bottom_sheet_mediator.mm b/ios/chrome/browser/ui/autofill/bottom_sheet/payments_suggestion_bottom_sheet_mediator.mm
index 03f3a90..77bc051 100644
--- a/ios/chrome/browser/ui/autofill/bottom_sheet/payments_suggestion_bottom_sheet_mediator.mm
+++ b/ios/chrome/browser/ui/autofill/bottom_sheet/payments_suggestion_bottom_sheet_mediator.mm
@@ -30,6 +30,8 @@
 #import "ui/base/l10n/l10n_util.h"
 #import "ui/base/resource/resource_bundle.h"
 
+using PaymentsSuggestionBottomSheetExitReason::kBadProvider;
+
 // Structure which contains all the required information to display about a
 // credit card.
 @interface PaymentsSuggestionBottomSheetCreditCardInfo
@@ -304,14 +306,25 @@
   }
 
   LogLikelyInterestedDefaultBrowserUserActivity(DefaultPromoTypeStaySafe);
-  _needsRefocus = false;
 
   FormSuggestionTabHelper* tabHelper =
       FormSuggestionTabHelper::FromWebState(activeWebState);
   DCHECK(tabHelper);
 
-  id<FormSuggestionClient> client = tabHelper->GetAccessoryViewProvider();
-  DCHECK(client);
+  id<FormInputSuggestionsProvider> provider =
+      tabHelper->GetAccessoryViewProvider();
+  DCHECK(provider);
+
+  if (provider.type != SuggestionProviderTypeAutofill) {
+    // Last resort safety exit: On the unlikely event that the provider was set
+    // incorrectly (for example if local predictions and server predictions are
+    // different), simply exit and open the keyboard.
+    _needsRefocus = true;
+    [self disableBottomSheet];
+    [self logExitReason:kBadProvider];
+    return;
+  }
+  _needsRefocus = false;
 
   // Create a form suggestion containing the selected credit card's backend id
   // so that the suggestion provider can properly fill the form.
@@ -327,7 +340,7 @@
           base::SysUTF16ToNSString(l10n_util::GetStringUTF16(
               IDS_AUTOFILL_A11Y_ANNOUNCE_FILLED_FORM))];
 
-  [client didSelectSuggestion:suggestion params:_params];
+  [provider didSelectSuggestion:suggestion params:_params];
 }
 
 - (void)disableBottomSheet {
diff --git a/ios/chrome/browser/ui/browser_view/browser_coordinator.mm b/ios/chrome/browser/ui/browser_view/browser_coordinator.mm
index 7ce9a985..e0480b9 100644
--- a/ios/chrome/browser/ui/browser_view/browser_coordinator.mm
+++ b/ios/chrome/browser/ui/browser_view/browser_coordinator.mm
@@ -10,6 +10,7 @@
 #import <memory>
 #import <optional>
 
+#import "base/apple/foundation_util.h"
 #import "base/metrics/histogram_functions.h"
 #import "base/scoped_observation.h"
 #import "base/strings/sys_string_conversions.h"
@@ -99,7 +100,6 @@
 #import "ios/chrome/browser/shared/public/commands/save_to_drive_commands.h"
 #import "ios/chrome/browser/shared/public/commands/save_to_photos_commands.h"
 #import "ios/chrome/browser/shared/public/commands/share_highlight_command.h"
-#import "ios/chrome/browser/shared/public/commands/show_save_to_drive_command.h"
 #import "ios/chrome/browser/shared/public/commands/show_signin_command.h"
 #import "ios/chrome/browser/shared/public/commands/text_zoom_commands.h"
 #import "ios/chrome/browser/shared/public/commands/toolbar_commands.h"
@@ -237,6 +237,7 @@
 #import "ios/public/provider/chrome/browser/text_zoom/text_zoom_api.h"
 #import "ios/public/provider/chrome/browser/voice_search/voice_search_api.h"
 #import "ios/public/provider/chrome/browser/voice_search/voice_search_controller.h"
+#import "ios/web/public/download/download_task.h"
 #import "ui/base/device_form_factor.h"
 #import "ui/base/l10n/l10n_util.h"
 
@@ -1414,6 +1415,9 @@
   [self.miniMapCoordinator stop];
   self.miniMapCoordinator = nil;
 
+  [self.saveToDriveCoordinator stop];
+  self.saveToDriveCoordinator = nil;
+
   [self.saveToPhotosCoordinator stop];
   self.saveToPhotosCoordinator = nil;
 
@@ -2630,15 +2634,17 @@
 
 #pragma mark - SaveToDriveCommands
 
-- (void)showSaveToDrive:(ShowSaveToDriveCommand*)command {
+- (void)showSaveToDriveForDownload:(web::DownloadTask*)downloadTask {
   // If the Save to Drive coordinator is not nil, stop it.
   [self hideSaveToDrive];
 
   _saveToDriveCoordinator = [[SaveToDriveCoordinator alloc]
       initWithBaseViewController:self.viewController
                          browser:self.browser
-                        fileName:command.fileName
-                        fileSize:command.fileSize];
+                        fileName:base::apple::FilePathToNSString(
+                                     downloadTask->GenerateFileName())
+                        fileSize:downloadTask->GetTotalBytes()
+                        webState:downloadTask->GetWebState()];
   [_saveToDriveCoordinator start];
 }
 
diff --git a/ios/chrome/browser/ui/download/download_manager_coordinator.mm b/ios/chrome/browser/ui/download/download_manager_coordinator.mm
index 5f5bd813..8d7fee22 100644
--- a/ios/chrome/browser/ui/download/download_manager_coordinator.mm
+++ b/ios/chrome/browser/ui/download/download_manager_coordinator.mm
@@ -41,7 +41,6 @@
 #import "ios/chrome/browser/shared/public/commands/browser_coordinator_commands.h"
 #import "ios/chrome/browser/shared/public/commands/command_dispatcher.h"
 #import "ios/chrome/browser/shared/public/commands/save_to_drive_commands.h"
-#import "ios/chrome/browser/shared/public/commands/show_save_to_drive_command.h"
 #import "ios/chrome/browser/shared/public/features/features.h"
 #import "ios/chrome/browser/signin/model/identity_manager_factory.h"
 #import "ios/chrome/browser/store_kit/model/store_kit_coordinator.h"
@@ -295,11 +294,7 @@
   CHECK(base::FeatureList::IsEnabled(kIOSSaveToDrive));
   id<SaveToDriveCommands> saveToDriveHandler = HandlerForProtocol(
       self.browser->GetCommandDispatcher(), SaveToDriveCommands);
-  ShowSaveToDriveCommand* command = [[ShowSaveToDriveCommand alloc] init];
-  command.fileName =
-      base::apple::FilePathToNSString(_downloadTask->GenerateFileName());
-  command.fileSize = _downloadTask->GetTotalBytes();
-  [saveToDriveHandler showSaveToDrive:command];
+  [saveToDriveHandler showSaveToDriveForDownload:_downloadTask];
 }
 
 - (void)presentOpenInForDownloadManagerViewController:
diff --git a/ios/chrome/browser/ui/ntp/new_tab_page_view_controller.mm b/ios/chrome/browser/ui/ntp/new_tab_page_view_controller.mm
index 4d2bacb..1c85800 100644
--- a/ios/chrome/browser/ui/ntp/new_tab_page_view_controller.mm
+++ b/ios/chrome/browser/ui/ntp/new_tab_page_view_controller.mm
@@ -1872,10 +1872,15 @@
 // Sets the y content offset of the NTP collection view.
 - (void)setContentOffset:(CGFloat)offset {
   UICollectionView* collectionView = self.collectionView;
-  CGFloat maxOffset = collectionView.contentSize.height +
-                      collectionView.contentInset.bottom -
-                      collectionView.bounds.size.height;
-  offset = MIN(maxOffset, offset);
+  if (!self.feedVisible) {
+    // When the feed is not visible, enforce a max scroll position so that it
+    // doesn't end up scrolled down when no content is there. When the feed is
+    // visible, its content might load after the content offset is restored.
+    CGFloat maxOffset = collectionView.contentSize.height +
+                        collectionView.contentInset.bottom -
+                        collectionView.bounds.size.height;
+    offset = MIN(maxOffset, offset);
+  }
   collectionView.contentOffset = CGPointMake(0, offset);
   self.scrolledIntoFeed = offset > [self offsetWhenScrolledIntoFeed];
   [self handleStickyElementsForScrollPosition:offset force:YES];
diff --git a/ios/chrome/browser/ui/passwords/bottom_sheet/password_suggestion_bottom_sheet_mediator.mm b/ios/chrome/browser/ui/passwords/bottom_sheet/password_suggestion_bottom_sheet_mediator.mm
index 05dc3fd9..fe0fba3 100644
--- a/ios/chrome/browser/ui/passwords/bottom_sheet/password_suggestion_bottom_sheet_mediator.mm
+++ b/ios/chrome/browser/ui/passwords/bottom_sheet/password_suggestion_bottom_sheet_mediator.mm
@@ -504,26 +504,26 @@
     return;
   }
 
-  bool sharingNotificationEnabled = base::FeatureList::IsEnabled(
-      password_manager::features::kSharedPasswordNotificationUI);
   for (const password_manager::PasswordForm* form : *passwordForms) {
-    if (sharingNotificationEnabled &&
-        form->type ==
+    if (form->type ==
             password_manager::PasswordForm::Type::kReceivedViaSharing &&
         !form->sharing_notification_displayed) {
-      _sharedUnnotifiedForms.push_back(form);
-      __weak __typeof__(self) weakSelf = self;
-      image_fetcher::ImageFetcherParams params(NO_TRAFFIC_ANNOTATION_YET,
-                                               kImageFetcherUmaClient);
-      _imageFetcher->FetchImage(
-          form->sender_profile_image_url,
-          base::BindOnce(^(const gfx::Image& image,
-                           const image_fetcher::RequestMetadata& metadata) {
-            if (!image.IsEmpty()) {
-              [weakSelf onSenderImageFetched:[image.ToUIImage() copy]];
-            }
-          }),
-          params);
+      if (base::FeatureList::IsEnabled(
+              password_manager::features::kSharedPasswordNotificationUI)) {
+        _sharedUnnotifiedForms.push_back(form);
+        __weak __typeof__(self) weakSelf = self;
+        image_fetcher::ImageFetcherParams params(NO_TRAFFIC_ANNOTATION_YET,
+                                                 kImageFetcherUmaClient);
+        _imageFetcher->FetchImage(
+            form->sender_profile_image_url,
+            base::BindOnce(^(const gfx::Image& image,
+                             const image_fetcher::RequestMetadata& metadata) {
+              if (!image.IsEmpty()) {
+                [weakSelf onSenderImageFetched:[image.ToUIImage() copy]];
+              }
+            }),
+            params);
+      }
     }
     _credentials.push_back(password_manager::CredentialUIEntry(*form));
   }
@@ -532,9 +532,9 @@
 // Returns whether the bottom sheet should contain a notification about shared
 // passwords.
 - (BOOL)shouldDisplaySharingNotification {
-  return base::FeatureList::IsEnabled(
-             password_manager::features::kSharedPasswordNotificationUI) &&
-         _sharedUnnotifiedForms.size() > 0;
+  return (_sharedUnnotifiedForms.size() > 0) &&
+         base::FeatureList::IsEnabled(
+             password_manager::features::kSharedPasswordNotificationUI);
 }
 
 // Marks sharing notification as displayed in password store for all credentials
diff --git a/ios/chrome/browser/ui/popup_menu/overflow_menu/overflow_menu_destination_list.swift b/ios/chrome/browser/ui/popup_menu/overflow_menu/overflow_menu_destination_list.swift
index cb2eea7..8a91a733 100644
--- a/ios/chrome/browser/ui/popup_menu/overflow_menu/overflow_menu_destination_list.swift
+++ b/ios/chrome/browser/ui/popup_menu/overflow_menu/overflow_menu_destination_list.swift
@@ -51,10 +51,6 @@
     /// Range of icon paddings; varies based on view width.
     static let iconPaddingRange: ClosedRange<CGFloat> = 0...3
 
-    /// When the dynamic text size is large, the width of each item is the
-    /// screen width minus a fixed space.
-    static let largeTextSizeSpace: CGFloat = 120
-
     /// The top margin between the destinations and the edge of the list.
     static let defaultTopMargin: CGFloat = 15
 
@@ -323,7 +319,7 @@
     let spacing = OverflowMenuDestinationList.destinationSpacing(forScreenWidth: width)
 
     return sizeCategory >= .accessibilityMedium
-      ? .horizontal(itemWidth: width - Constants.largeTextSizeSpace)
+      ? .horizontal
       : .vertical(
         iconSpacing: spacing.iconSpacing,
         iconPadding: spacing.iconPadding)
@@ -336,9 +332,20 @@
   {
     let layoutParameters = OverflowMenuDestinationList.layoutParameters(
       forScreenWidth: width, forSizeCategory: sizeCategory)
-    let destinationWidth = OverflowMenuDestinationView.destinationWidth(layoutParameters)
 
-    return (width / destinationWidth).rounded(.up)
+    switch layoutParameters {
+    case .vertical(let iconSpacing, let iconPadding):
+      let destinationWidth = OverflowMenuDestinationView.verticalLayoutDestinationWidth(
+        iconSpacing: iconSpacing, iconPadding: iconPadding)
+
+      return (width / destinationWidth).rounded(.up)
+    case .horizontal:
+      // In horizontal layout, the width of an individual item depends on the
+      // text length. However, it'll always be pretty long, so 2 is a good
+      // estimate.
+      return 2
+    }
+
   }
 
   /// Maps the given `number` from its relative position in `inRange` to its
diff --git a/ios/chrome/browser/ui/popup_menu/overflow_menu/overflow_menu_destination_view.swift b/ios/chrome/browser/ui/popup_menu/overflow_menu/overflow_menu_destination_view.swift
index 491c3d3..53f90ec4 100644
--- a/ios/chrome/browser/ui/popup_menu/overflow_menu/overflow_menu_destination_view.swift
+++ b/ios/chrome/browser/ui/popup_menu/overflow_menu/overflow_menu_destination_view.swift
@@ -37,9 +37,7 @@
     /// There is `iconSpacing` to either side of the icon, and `iconPadding`
     /// around the icon and inside the background.
     case vertical(iconSpacing: CGFloat, iconPadding: CGFloat)
-    /// The destination has an icon on the left and text on the right. Here
-    /// the view will have a fixed overall `itemWidth`.
-    case horizontal(itemWidth: CGFloat)
+    case horizontal
   }
 
   /// Shape consisting of a path around the icon and text.
@@ -74,7 +72,7 @@
 
     /// The padding on either side of the view in the horizontal layout,
     /// separating it from the next view.
-    static let horizontalLayoutViewPadding: CGFloat = 16
+    static let horizontalLayoutViewPadding: CGFloat = 13
 
     /// The padding around the icon and inside the background in horizontal
     /// layout.
@@ -174,22 +172,22 @@
   /// The content of the button view.
   @ViewBuilder
   var buttonContent: some View {
-    let destinationWidth = Self.destinationWidth(layoutParameters)
     Group {
       switch layoutParameters {
-      case .vertical:
+      case .vertical(let iconSpacing, let iconPadding):
         VStack {
           icon
           text
         }
-        .frame(width: destinationWidth)
+        .frame(
+          width: Self.verticalLayoutDestinationWidth(
+            iconSpacing: iconSpacing, iconPadding: iconPadding))
       case .horizontal:
         HStack {
           icon
           Spacer().frame(width: Dimensions.horizontalLayoutIconSpacing)
           text
         }
-        .frame(width: destinationWidth, alignment: .leading)
         // In horizontal layout, the item itself has leading and trailing
         // padding.
         .padding([.leading, .trailing], Dimensions.horizontalLayoutViewPadding)
@@ -336,12 +334,9 @@
     ].compactMap { $0 }.joined(separator: "-")
   }
 
-  static public func destinationWidth(_ layoutParameters: LayoutParameters) -> CGFloat {
-    switch layoutParameters {
-    case .vertical(let iconSpacing, let iconPadding):
-      return Dimensions.imageWidth + 2 * iconSpacing + 2 * iconPadding
-    case .horizontal(let itemWidth):
-      return itemWidth
-    }
+  static public func verticalLayoutDestinationWidth(iconSpacing: CGFloat, iconPadding: CGFloat)
+    -> CGFloat
+  {
+    return Dimensions.imageWidth + 2 * iconSpacing + 2 * iconPadding
   }
 }
diff --git a/ios/chrome/browser/ui/save_to_drive/BUILD.gn b/ios/chrome/browser/ui/save_to_drive/BUILD.gn
index 3a8194b..4cb79fc 100644
--- a/ios/chrome/browser/ui/save_to_drive/BUILD.gn
+++ b/ios/chrome/browser/ui/save_to_drive/BUILD.gn
@@ -10,9 +10,11 @@
   deps = [
     "//base",
     "//ios/chrome/app/strings:ios_strings_grit",
+    "//ios/chrome/browser/download/model",
     "//ios/chrome/browser/shared/coordinator/chrome_coordinator",
     "//ios/chrome/browser/shared/model/browser",
     "//ios/chrome/browser/shared/public/commands",
+    "//ios/chrome/browser/signin/model:system_identity",
     "//ios/chrome/browser/ui/account_picker",
     "//ios/chrome/browser/ui/account_picker:account_picker_configuration",
     "//ios/chrome/browser/ui/authentication/signin:signin_headers",
diff --git a/ios/chrome/browser/ui/save_to_drive/save_to_drive_coordinator.h b/ios/chrome/browser/ui/save_to_drive/save_to_drive_coordinator.h
index acc32b7..d35e0ba 100644
--- a/ios/chrome/browser/ui/save_to_drive/save_to_drive_coordinator.h
+++ b/ios/chrome/browser/ui/save_to_drive/save_to_drive_coordinator.h
@@ -7,12 +7,17 @@
 
 #import "ios/chrome/browser/shared/coordinator/chrome_coordinator/chrome_coordinator.h"
 
+namespace web {
+class WebState;
+}
+
 @interface SaveToDriveCoordinator : ChromeCoordinator
 
 - (instancetype)initWithBaseViewController:(UIViewController*)viewController
                                    browser:(Browser*)browser
                                   fileName:(NSString*)fileName
                                   fileSize:(int64_t)fileSize
+                                  webState:(web::WebState*)webState
     NS_DESIGNATED_INITIALIZER;
 
 - (instancetype)initWithBaseViewController:(UIViewController*)viewController
diff --git a/ios/chrome/browser/ui/save_to_drive/save_to_drive_coordinator.mm b/ios/chrome/browser/ui/save_to_drive/save_to_drive_coordinator.mm
index 328694f3..6ccc6163 100644
--- a/ios/chrome/browser/ui/save_to_drive/save_to_drive_coordinator.mm
+++ b/ios/chrome/browser/ui/save_to_drive/save_to_drive_coordinator.mm
@@ -5,16 +5,19 @@
 #import "ios/chrome/browser/ui/save_to_drive/save_to_drive_coordinator.h"
 
 #import "base/strings/sys_string_conversions.h"
+#import "ios/chrome/browser/download/model/download_manager_tab_helper.h"
 #import "ios/chrome/browser/shared/model/browser/browser.h"
 #import "ios/chrome/browser/shared/public/commands/application_commands.h"
 #import "ios/chrome/browser/shared/public/commands/command_dispatcher.h"
 #import "ios/chrome/browser/shared/public/commands/save_to_drive_commands.h"
 #import "ios/chrome/browser/shared/public/commands/show_signin_command.h"
+#import "ios/chrome/browser/signin/model/system_identity.h"
 #import "ios/chrome/browser/ui/account_picker/account_picker_configuration.h"
 #import "ios/chrome/browser/ui/account_picker/account_picker_coordinator.h"
 #import "ios/chrome/browser/ui/account_picker/account_picker_coordinator_delegate.h"
 #import "ios/chrome/browser/ui/authentication/signin/signin_completion_info.h"
 #import "ios/chrome/grit/ios_strings.h"
+#import "ios/web/public/web_state.h"
 #import "ui/base/l10n/l10n_util_mac.h"
 
 namespace {
@@ -57,17 +60,23 @@
 @implementation SaveToDriveCoordinator {
   NSString* _fileName;
   int64_t _fileSize;
+  base::WeakPtr<web::WebState> _webState;
+  id<SystemIdentity> _selectedIdentity;
   AccountPickerCoordinator* _accountPickerCoordinator;
 }
 
 - (instancetype)initWithBaseViewController:(UIViewController*)viewController
                                    browser:(Browser*)browser
                                   fileName:(NSString*)fileName
-                                  fileSize:(int64_t)fileSize {
+                                  fileSize:(int64_t)fileSize
+                                  webState:(web::WebState*)webState {
   self = [super initWithBaseViewController:viewController browser:browser];
   if (self) {
     _fileName = fileName;
     _fileSize = fileSize;
+    _webState = webState->GetWeakPtr();
+    _selectedIdentity = nil;
+    _accountPickerCoordinator = nil;
   }
   return self;
 }
@@ -126,7 +135,7 @@
             (AccountPickerCoordinator*)accountPickerCoordinator
                didSelectIdentity:(id<SystemIdentity>)identity
                     askEveryTime:(BOOL)askEveryTime {
-  // TODO(crbug.com/1495353): Start download and save file to Drive.
+  _selectedIdentity = identity;
   [_accountPickerCoordinator startValidationSpinner];
   [_accountPickerCoordinator stopAnimated:YES];
 }
@@ -144,9 +153,29 @@
 - (void)accountPickerCoordinatorDidStop:
     (AccountPickerCoordinator*)accountPickerCoordinator {
   _accountPickerCoordinator = nil;
+
+  // If an identity was selected, start the download and save to Drive.
+  if (_selectedIdentity) {
+    [self startDownloadAndSaveToDriveWithIdentity:_selectedIdentity];
+  }
+
   id<SaveToDriveCommands> saveToDriveCommandsHandler = HandlerForProtocol(
       self.browser->GetCommandDispatcher(), SaveToDriveCommands);
   [saveToDriveCommandsHandler hideSaveToDrive];
 }
 
+#pragma mark - Private
+
+// If the web state still exists with its associated DownloadManagerTabHelper
+// instance, asks the DownloadManagerTabHelper to start the current download
+// task and remember to save the downloaded file to Drive.
+- (void)startDownloadAndSaveToDriveWithIdentity:(id<SystemIdentity>)identity {
+  if (!_webState) {
+    return;
+  }
+  DownloadManagerTabHelper* downloadManagerTabHelper =
+      DownloadManagerTabHelper::FromWebState(_webState.get());
+  downloadManagerTabHelper->StartDownloadTaskAndSaveToDrive(identity);
+}
+
 @end
diff --git a/ios/chrome/browser/ui/search_engine_choice/BUILD.gn b/ios/chrome/browser/ui/search_engine_choice/BUILD.gn
index 24887b3a..a181b299 100644
--- a/ios/chrome/browser/ui/search_engine_choice/BUILD.gn
+++ b/ios/chrome/browser/ui/search_engine_choice/BUILD.gn
@@ -19,7 +19,6 @@
     "//components/search_engines",
     "//components/strings",
     "//ios/chrome/app/strings",
-    "//ios/chrome/browser/favicon",
     "//ios/chrome/browser/search_engines/model:template_url_service_factory",
     "//ios/chrome/browser/shared/coordinator/chrome_coordinator",
     "//ios/chrome/browser/shared/model/browser",
@@ -35,8 +34,6 @@
     "//ios/chrome/browser/ui/search_engine_choice/search_engine_choice_table/cells",
     "//ios/chrome/browser/ui/search_engine_choice/why_am_i_seeing_this",
     "//ios/chrome/common/ui/colors:colors",
-    "//ios/chrome/common/ui/favicon",
-    "//ios/chrome/common/ui/favicon:favicon_constants",
     "//ios/chrome/common/ui/util",
   ]
   frameworks = [ "UIKit.framework" ]
@@ -83,8 +80,6 @@
     "//components/search_engines",
     "//components/strings",
     "//components/sync_preferences:test_support",
-    "//ios/chrome/browser/favicon",
-    "//ios/chrome/browser/history/model",
     "//ios/chrome/browser/promos_manager:test_support",
     "//ios/chrome/browser/search_engines/model:template_url_service_factory",
     "//ios/chrome/browser/shared/model/browser/test:test_support",
diff --git a/ios/chrome/browser/ui/search_engine_choice/search_engine_choice_coordinator.mm b/ios/chrome/browser/ui/search_engine_choice/search_engine_choice_coordinator.mm
index 6d91e04..f051128 100644
--- a/ios/chrome/browser/ui/search_engine_choice/search_engine_choice_coordinator.mm
+++ b/ios/chrome/browser/ui/search_engine_choice/search_engine_choice_coordinator.mm
@@ -8,7 +8,6 @@
 #import "components/search_engines/search_engine_choice_utils.h"
 #import "components/search_engines/search_engines_switches.h"
 #import "components/strings/grit/components_strings.h"
-#import "ios/chrome/browser/favicon/ios_chrome_favicon_loader_factory.h"
 #import "ios/chrome/browser/search_engines/model/template_url_service_factory.h"
 #import "ios/chrome/browser/shared/model/browser/browser.h"
 #import "ios/chrome/browser/shared/model/browser_state/chrome_browser_state.h"
@@ -79,13 +78,10 @@
   _searchEnginesTableViewController =
       [[SearchEngineChoiceTableViewController alloc]
           initWithStyle:ChromeTableViewStyle()];
-  FaviconLoader* faviconLoader =
-      IOSChromeFaviconLoaderFactory::GetForBrowserState(browserState);
   _searchEnginesTableMediator = [[SearchEngineChoiceTableMediator alloc]
       initWithTemplateURLService:ios::TemplateURLServiceFactory::
                                      GetForBrowserState(browserState)
-                     prefService:browserState->GetPrefs()
-                   faviconLoader:faviconLoader];
+                     prefService:browserState->GetPrefs()];
   _searchEnginesTableMediator.consumer = _searchEnginesTableViewController;
   _searchEnginesTableViewController.delegate = self;
 
@@ -93,10 +89,8 @@
       initWithSearchEngineTableViewController:
           _searchEnginesTableViewController];
   _viewController.actionDelegate = self;
-  _searchEnginesTableMediator.faviconUpdateConsumer = _viewController;
 
-  _mediator =
-      [[SearchEngineChoiceMediator alloc] initWithFaviconLoader:faviconLoader];
+  _mediator = [[SearchEngineChoiceMediator alloc] init];
   _mediator.consumer = _viewController;
 
   _viewController.modalInPresentation = YES;
diff --git a/ios/chrome/browser/ui/search_engine_choice/search_engine_choice_coordinator_unittest.mm b/ios/chrome/browser/ui/search_engine_choice/search_engine_choice_coordinator_unittest.mm
index 6c2f4cf..f936b46 100644
--- a/ios/chrome/browser/ui/search_engine_choice/search_engine_choice_coordinator_unittest.mm
+++ b/ios/chrome/browser/ui/search_engine_choice/search_engine_choice_coordinator_unittest.mm
@@ -16,10 +16,6 @@
 #import "components/signin/public/base/signin_switches.h"
 #import "components/strings/grit/components_strings.h"
 #import "components/sync_preferences/testing_pref_service_syncable.h"
-#import "ios/chrome/browser/favicon/favicon_service_factory.h"
-#import "ios/chrome/browser/favicon/ios_chrome_favicon_loader_factory.h"
-#import "ios/chrome/browser/favicon/ios_chrome_large_icon_service_factory.h"
-#import "ios/chrome/browser/history/model/history_service_factory.h"
 #import "ios/chrome/browser/promos_manager/mock_promos_manager.h"
 #import "ios/chrome/browser/search_engines/model/template_url_service_factory.h"
 #import "ios/chrome/browser/shared/model/browser/test/test_browser.h"
@@ -87,18 +83,6 @@
     test_cbs_builder.AddTestingFactory(
         ios::TemplateURLServiceFactory::GetInstance(),
         ios::TemplateURLServiceFactory::GetDefaultFactory());
-    test_cbs_builder.AddTestingFactory(
-        ios::FaviconServiceFactory::GetInstance(),
-        ios::FaviconServiceFactory::GetDefaultFactory());
-    test_cbs_builder.AddTestingFactory(
-        IOSChromeLargeIconServiceFactory::GetInstance(),
-        IOSChromeLargeIconServiceFactory::GetDefaultFactory());
-    test_cbs_builder.AddTestingFactory(
-        IOSChromeFaviconLoaderFactory::GetInstance(),
-        IOSChromeFaviconLoaderFactory::GetDefaultFactory());
-    test_cbs_builder.AddTestingFactory(
-        ios::HistoryServiceFactory::GetInstance(),
-        ios::HistoryServiceFactory::GetDefaultFactory());
     browser_state_ = test_cbs_builder.Build();
     browser_ = std::make_unique<TestBrowser>(browser_state_.get());
   }
diff --git a/ios/chrome/browser/ui/search_engine_choice/search_engine_choice_mediator.h b/ios/chrome/browser/ui/search_engine_choice/search_engine_choice_mediator.h
index 3372b01..b17cfb3 100644
--- a/ios/chrome/browser/ui/search_engine_choice/search_engine_choice_mediator.h
+++ b/ios/chrome/browser/ui/search_engine_choice/search_engine_choice_mediator.h
@@ -7,7 +7,6 @@
 
 #import <UIKit/UIKit.h>
 
-class FaviconLoader;
 @protocol SearchEngineChoiceConsumer;
 @class SnippetSearchEngineItem;
 
@@ -20,11 +19,6 @@
 // engines choice table.
 @property(nonatomic, weak) SnippetSearchEngineItem* selectedItem;
 
-- (instancetype)initWithFaviconLoader:(FaviconLoader*)faviconLoader
-    NS_DESIGNATED_INITIALIZER;
-
-- (instancetype)init NS_UNAVAILABLE;
-
 // Disconnect the mediator.
 - (void)disconnect;
 
diff --git a/ios/chrome/browser/ui/search_engine_choice/search_engine_choice_mediator.mm b/ios/chrome/browser/ui/search_engine_choice/search_engine_choice_mediator.mm
index a396fb52..e9b1b7c 100644
--- a/ios/chrome/browser/ui/search_engine_choice/search_engine_choice_mediator.mm
+++ b/ios/chrome/browser/ui/search_engine_choice/search_engine_choice_mediator.mm
@@ -4,24 +4,11 @@
 
 #import "ios/chrome/browser/ui/search_engine_choice/search_engine_choice_mediator.h"
 
-#import "ios/chrome/browser/favicon/favicon_loader.h"
 #import "ios/chrome/browser/ui/search_engine_choice/search_engine_choice_consumer.h"
 #import "ios/chrome/browser/ui/search_engine_choice/search_engine_choice_table/cells/snippet_search_engine_item.h"
-#import "ios/chrome/common/ui/favicon/favicon_constants.h"
-#import "ios/chrome/common/ui/favicon/favicon_view.h"
 #import "url/gurl.h"
 
-@implementation SearchEngineChoiceMediator {
-  FaviconLoader* _faviconLoader;
-}
-
-- (instancetype)initWithFaviconLoader:(FaviconLoader*)faviconLoader {
-  self = [super init];
-  if (self) {
-    _faviconLoader = faviconLoader;
-  }
-  return self;
-}
+@implementation SearchEngineChoiceMediator
 
 #pragma mark - Properties
 
@@ -38,7 +25,6 @@
 - (void)disconnect {
   self.consumer = nil;
   _selectedItem = nullptr;
-  _faviconLoader = nullptr;
 }
 
 @end
diff --git a/ios/chrome/browser/ui/search_engine_choice/search_engine_choice_table/BUILD.gn b/ios/chrome/browser/ui/search_engine_choice/search_engine_choice_table/BUILD.gn
index 31e3961..16d43fb 100644
--- a/ios/chrome/browser/ui/search_engine_choice/search_engine_choice_table/BUILD.gn
+++ b/ios/chrome/browser/ui/search_engine_choice/search_engine_choice_table/BUILD.gn
@@ -14,7 +14,6 @@
     "//base",
     "//components/search_engines",
     "//ios/chrome/app/strings",
-    "//ios/chrome/browser/favicon",
     "//ios/chrome/browser/search_engines/model",
     "//ios/chrome/browser/shared/coordinator/chrome_coordinator",
     "//ios/chrome/browser/shared/model/browser",
@@ -27,8 +26,6 @@
     "//ios/chrome/browser/ui/search_engine_choice:constants",
     "//ios/chrome/browser/ui/search_engine_choice/search_engine_choice_table/cells",
     "//ios/chrome/common/ui/colors",
-    "//ios/chrome/common/ui/favicon",
-    "//ios/chrome/common/ui/favicon:favicon_constants",
     "//ios/chrome/common/ui/util",
   ]
   frameworks = [ "UIKit.framework" ]
@@ -44,8 +41,6 @@
     "//components/prefs:test_support",
     "//components/search_engines",
     "//components/sync_preferences/:test_support",
-    "//ios/chrome/browser/favicon",
-    "//ios/chrome/browser/history/model",
     "//ios/chrome/browser/search_engines/model",
     "//ios/chrome/browser/shared/model/browser_state:test_support",
     "//ios/chrome/browser/shared/ui/list_model",
diff --git a/ios/chrome/browser/ui/search_engine_choice/search_engine_choice_table/cells/BUILD.gn b/ios/chrome/browser/ui/search_engine_choice/search_engine_choice_table/cells/BUILD.gn
index 6e124739..c3c89f6 100644
--- a/ios/chrome/browser/ui/search_engine_choice/search_engine_choice_table/cells/BUILD.gn
+++ b/ios/chrome/browser/ui/search_engine_choice/search_engine_choice_table/cells/BUILD.gn
@@ -25,7 +25,6 @@
     "//ios/chrome/common/ui/util",
     "//ios/chrome/common/ui/util:image_util",
     "//ui/base",
-    "//url",
   ]
   frameworks = [ "UIKit.framework" ]
 }
diff --git a/ios/chrome/browser/ui/search_engine_choice/search_engine_choice_table/cells/snippet_search_engine_item.h b/ios/chrome/browser/ui/search_engine_choice/search_engine_choice_table/cells/snippet_search_engine_item.h
index 3f51115..d29084f1 100644
--- a/ios/chrome/browser/ui/search_engine_choice/search_engine_choice_table/cells/snippet_search_engine_item.h
+++ b/ios/chrome/browser/ui/search_engine_choice/search_engine_choice_table/cells/snippet_search_engine_item.h
@@ -9,7 +9,6 @@
 
 #import "ios/chrome/browser/shared/ui/table_view/cells/table_view_item.h"
 
-class GURL;
 enum class SnippetState;
 
 // SearchEngineItem contains the model data for a SnippetSearchEngineCell.
@@ -19,10 +18,6 @@
 @property(nonatomic, copy) NSString* name;
 // The text for the search engine snippet.
 @property(nonatomic, copy) NSString* snippetDescription;
-// The URL to fetch the favicon. This can be the favicon's URL, or a "fake" web
-// page URL created by filling empty query word into the search engine's
-// searchable URL template(e.g. "http://www.google.com/?q=").
-@property(nonatomic, assign) GURL URL;
 // Favicon attributes for the search engine.
 @property(nonatomic, strong) UIImage* faviconImage;
 // Set the snippet state (hidden or closed).
diff --git a/ios/chrome/browser/ui/search_engine_choice/search_engine_choice_table/cells/snippet_search_engine_item.mm b/ios/chrome/browser/ui/search_engine_choice/search_engine_choice_table/cells/snippet_search_engine_item.mm
index 96243e85..2b3b824 100644
--- a/ios/chrome/browser/ui/search_engine_choice/search_engine_choice_table/cells/snippet_search_engine_item.mm
+++ b/ios/chrome/browser/ui/search_engine_choice/search_engine_choice_table/cells/snippet_search_engine_item.mm
@@ -13,7 +13,6 @@
 #import "ios/chrome/browser/ui/settings/cells/settings_cells_constants.h"
 #import "ios/chrome/common/ui/colors/semantic_color_names.h"
 #import "ios/chrome/common/ui/table_view/table_view_cells_constants.h"
-#import "url/gurl.h"
 
 #pragma mark - SnippetSearchEngineItem
 
@@ -42,8 +41,4 @@
   }
 }
 
-- (BOOL)isEqual:(SnippetSearchEngineItem*)otherItem {
-  return (self.name == otherItem.name) && (self.URL == otherItem.URL);
-}
-
 @end
diff --git a/ios/chrome/browser/ui/search_engine_choice/search_engine_choice_table/search_engine_choice_table_consumer.h b/ios/chrome/browser/ui/search_engine_choice/search_engine_choice_table/search_engine_choice_table_consumer.h
index 3121297ea..6b83de0 100644
--- a/ios/chrome/browser/ui/search_engine_choice/search_engine_choice_table/search_engine_choice_table_consumer.h
+++ b/ios/chrome/browser/ui/search_engine_choice/search_engine_choice_table/search_engine_choice_table_consumer.h
@@ -15,17 +15,6 @@
 
 - (void)reloadData;
 
-// Called when the favicon of `item` has been updated.
-- (void)faviconAttributesUpdatedForItem:(SnippetSearchEngineItem*)item;
-
-@end
-
-// Handles updates to the search engine favicons from the FaviconLoader
-@protocol SearchEngineChoiceFaviconUpdateConsumer
-
-// Called when the favicon of `item` has been updated.
-- (void)updateFaviconImageForItem:(SnippetSearchEngineItem*)item;
-
 @end
 
 #endif  // IOS_CHROME_BROWSER_UI_SEARCH_ENGINE_CHOICE_SEARCH_ENGINE_CHOICE_TABLE_SEARCH_ENGINE_CHOICE_TABLE_CONSUMER_H_
diff --git a/ios/chrome/browser/ui/search_engine_choice/search_engine_choice_table/search_engine_choice_table_mediator.h b/ios/chrome/browser/ui/search_engine_choice/search_engine_choice_table/search_engine_choice_table_mediator.h
index 41201e9..756cebd 100644
--- a/ios/chrome/browser/ui/search_engine_choice/search_engine_choice_table/search_engine_choice_table_mediator.h
+++ b/ios/chrome/browser/ui/search_engine_choice/search_engine_choice_table/search_engine_choice_table_mediator.h
@@ -7,10 +7,8 @@
 
 #import <UIKit/UIKit.h>
 
-class FaviconLoader;
 class PrefService;
 class TemplateURLService;
-@protocol SearchEngineChoiceFaviconUpdateConsumer;
 @protocol SearchEngineChoiceTableConsumer;
 
 @interface SearchEngineChoiceTableMediator : NSObject
@@ -18,7 +16,6 @@
 - (instancetype)initWithTemplateURLService:
                     (TemplateURLService*)templateURLService
                                prefService:(PrefService*)prefService
-                             faviconLoader:(FaviconLoader*)faviconLoader
     NS_DESIGNATED_INITIALIZER;
 
 - (instancetype)init NS_UNAVAILABLE;
@@ -27,11 +24,6 @@
 // table view.
 @property(nonatomic, weak) id<SearchEngineChoiceTableConsumer> consumer;
 
-// The delegate object that manages interactions with the Search Engine Choice
-// view.
-@property(nonatomic, weak) id<SearchEngineChoiceFaviconUpdateConsumer>
-    faviconUpdateConsumer;
-
 // Index of the row tapped by the user.
 @property(nonatomic, assign) NSInteger selectedRow;
 
diff --git a/ios/chrome/browser/ui/search_engine_choice/search_engine_choice_table/search_engine_choice_table_mediator.mm b/ios/chrome/browser/ui/search_engine_choice/search_engine_choice_table/search_engine_choice_table_mediator.mm
index a5fb282..75d52576 100644
--- a/ios/chrome/browser/ui/search_engine_choice/search_engine_choice_table/search_engine_choice_table_mediator.mm
+++ b/ios/chrome/browser/ui/search_engine_choice/search_engine_choice_table/search_engine_choice_table_mediator.mm
@@ -7,44 +7,44 @@
 #import <memory>
 
 #import "base/strings/sys_string_conversions.h"
+#import "base/strings/utf_string_conversions.h"
 #import "components/prefs/pref_service.h"
+#import "components/search_engines/prepopulated_engines.h"
 #import "components/search_engines/search_engine_choice_utils.h"
 #import "components/search_engines/template_url.h"
 #import "components/search_engines/template_url_service.h"
 #import "components/search_engines/template_url_service_observer.h"
-#import "ios/chrome/browser/favicon/favicon_loader.h"
 #import "ios/chrome/browser/search_engines/model/search_engine_observer_bridge.h"
 #import "ios/chrome/browser/shared/ui/list_model/list_model.h"
 #import "ios/chrome/browser/ui/search_engine_choice/search_engine_choice_table/cells/snippet_search_engine_item.h"
 #import "ios/chrome/browser/ui/search_engine_choice/search_engine_choice_table/search_engine_choice_table_consumer.h"
-#import "ios/chrome/common/ui/favicon/favicon_attributes.h"
-#import "ios/chrome/common/ui/favicon/favicon_constants.h"
+#import "ui/base/resource/resource_bundle.h"
 
 namespace {
 
-// Creates a SnippetSearchEngineItem for `templateURL`.
+// Creates a SnippetSearchEngineItem for `template_url`. The template url can
+// only be for a prepopulated search engine. This function doesn't support
+// custom search engine.
 SnippetSearchEngineItem* CreateSnippetSearchEngineItemFromTemplateURL(
     TemplateURL* template_url,
     TemplateURLService* template_url_service) {
   SnippetSearchEngineItem* item = nil;
-  if (template_url->prepopulate_id() > 0) {
-    item = [[SnippetSearchEngineItem alloc] initWithType:kItemTypeEnumZero];
-    // Fake up a page URL for favicons of prepopulated search engines, since
-    // favicons may be fetched from Google server which doesn't suppoprt
-    // icon URL.
-    std::string empty_page_url = template_url->url_ref().ReplaceSearchTerms(
-        TemplateURLRef::SearchTermsArgs(std::u16string()),
-        template_url_service->search_terms_data());
-    item.URL = GURL(empty_page_url);
-  } else {
-    item = [[SnippetSearchEngineItem alloc] initWithType:kItemTypeEnumZero];
-    // Use icon URL for favicons of custom search engines.
-    item.URL = template_url->favicon_url();
-  }
+  // Only prepopulated search engines are shown.
+  CHECK_GT(template_url->prepopulate_id(), 0)
+      << base::UTF16ToUTF8(template_url->short_name());
+  item = [[SnippetSearchEngineItem alloc] initWithType:kItemTypeEnumZero];
+  // Add the name and snippet to the item.
   item.name = base::SysUTF16ToNSString(template_url->short_name());
   std::u16string string =
       search_engines::GetMarketingSnippetString(template_url->data());
   item.snippetDescription = base::SysUTF16ToNSString(string);
+  // Add the favicon to the item.
+  std::u16string engine_keyword = template_url->data().keyword();
+  int resource_id = search_engines::GetIconResourceId(engine_keyword);
+  CHECK_NE(resource_id, -1) << base::UTF16ToUTF8(engine_keyword);
+  ui::ResourceBundle& resource_bundle = ui::ResourceBundle::GetSharedInstance();
+  item.faviconImage =
+      resource_bundle.GetNativeImageNamed(resource_id).ToUIImage();
   return item;
 }
 
@@ -63,19 +63,14 @@
   // The corresponding list of search engines as items that can be inserted into
   // a tableView.
   NSArray<SnippetSearchEngineItem*>* _searchEngineList;
-  // FaviconLoader is a keyed service that uses LargeIconService to retrieve
-  // favicon images.
-  FaviconLoader* _faviconLoader;
 }
 
 - (instancetype)initWithTemplateURLService:
                     (TemplateURLService*)templateURLService
-                               prefService:(PrefService*)prefService
-                             faviconLoader:(FaviconLoader*)faviconLoader {
+                               prefService:(PrefService*)prefService {
   self = [super init];
   if (self) {
     _templateURLService = templateURLService;
-    _faviconLoader = faviconLoader;
     _prefService = prefService;
     _observer =
         std::make_unique<SearchEngineObserverBridge>(self, _templateURLService);
@@ -96,7 +91,6 @@
 - (void)disconnect {
   _observer.reset();
   _templateURLService = nullptr;
-  _faviconLoader = nullptr;
 }
 
 #pragma mark - Properties
@@ -132,16 +126,6 @@
         CreateSnippetSearchEngineItemFromTemplateURL(templateURL.get(),
                                                      _templateURLService);
     [searchEngineList addObject:item];
-    __weak __typeof(self) weakSelf = self;
-    _faviconLoader->FaviconForPageUrl(
-        item.URL, kDesiredMediumFaviconSizePt, kMinFaviconSizePt,
-        /*fallback_to_google_server=*/YES, ^(FaviconAttributes* attributes) {
-          item.faviconImage = attributes.faviconImage;
-          [weakSelf.consumer faviconAttributesUpdatedForItem:item];
-          if (item.checked) {
-            [weakSelf.faviconUpdateConsumer updateFaviconImageForItem:item];
-          }
-        });
   }
 
   _searchEngineList = [searchEngineList copy];
diff --git a/ios/chrome/browser/ui/search_engine_choice/search_engine_choice_table/search_engine_choice_table_mediator_unittest.mm b/ios/chrome/browser/ui/search_engine_choice/search_engine_choice_table/search_engine_choice_table_mediator_unittest.mm
index 037ab38..33522be 100644
--- a/ios/chrome/browser/ui/search_engine_choice/search_engine_choice_table/search_engine_choice_table_mediator_unittest.mm
+++ b/ios/chrome/browser/ui/search_engine_choice/search_engine_choice_table/search_engine_choice_table_mediator_unittest.mm
@@ -14,10 +14,6 @@
 #import "components/search_engines/template_url_service.h"
 #import "components/signin/public/base/signin_switches.h"
 #import "components/sync_preferences/testing_pref_service_syncable.h"
-#import "ios/chrome/browser/favicon/favicon_service_factory.h"
-#import "ios/chrome/browser/favicon/ios_chrome_favicon_loader_factory.h"
-#import "ios/chrome/browser/favicon/ios_chrome_large_icon_service_factory.h"
-#import "ios/chrome/browser/history/model/history_service_factory.h"
 #import "ios/chrome/browser/search_engines/model/template_url_service_factory.h"
 #import "ios/chrome/browser/shared/model/browser_state/test_chrome_browser_state.h"
 #import "ios/chrome/browser/shared/ui/list_model/list_model.h"
@@ -25,7 +21,6 @@
 #import "ios/chrome/browser/ui/search_engine_choice/search_engine_choice_table/search_engine_choice_table_consumer.h"
 #import "ios/web/public/test/web_task_environment.h"
 #import "testing/platform_test.h"
-#import "url/gurl.h"
 
 // Create an empty implementation of the consumer just to fetch the list of
 // search engines for testing.
@@ -40,9 +35,6 @@
 - (void)reloadData {
 }
 
-- (void)faviconAttributesUpdatedForItem:(SnippetSearchEngineItem*)item {
-}
-
 @end
 
 class SearchEngineChoiceTableMediatorTest : public PlatformTest {
@@ -53,18 +45,6 @@
     test_cbs_builder.AddTestingFactory(
         ios::TemplateURLServiceFactory::GetInstance(),
         ios::TemplateURLServiceFactory::GetDefaultFactory());
-    test_cbs_builder.AddTestingFactory(
-        IOSChromeFaviconLoaderFactory::GetInstance(),
-        IOSChromeFaviconLoaderFactory::GetDefaultFactory());
-    test_cbs_builder.AddTestingFactory(
-        ios::FaviconServiceFactory::GetInstance(),
-        ios::FaviconServiceFactory::GetDefaultFactory());
-    test_cbs_builder.AddTestingFactory(
-        IOSChromeLargeIconServiceFactory::GetInstance(),
-        IOSChromeLargeIconServiceFactory::GetDefaultFactory());
-    test_cbs_builder.AddTestingFactory(
-        ios::HistoryServiceFactory::GetInstance(),
-        ios::HistoryServiceFactory::GetDefaultFactory());
     browser_state_ = test_cbs_builder.Build();
     DefaultSearchManager::SetFallbackSearchEnginesDisabledForTesting(true);
     template_url_service_ = ios::TemplateURLServiceFactory::GetForBrowserState(
@@ -77,12 +57,9 @@
     // command-line flags.
     base::CommandLine::ForCurrentProcess()->AppendSwitchASCII(
         switches::kSearchEngineChoiceCountry, "BE");
-    FaviconLoader* faviconLoader =
-        IOSChromeFaviconLoaderFactory::GetForBrowserState(browser_state_.get());
     mediator_ = [[SearchEngineChoiceTableMediator alloc]
         initWithTemplateURLService:template_url_service_
-                       prefService:&pref_service_
-                     faviconLoader:faviconLoader];
+                       prefService:&pref_service_];
     // This is when the list of search engines is set
     mediator_.consumer = consumer_;
   }
@@ -94,11 +71,6 @@
     [mediator_ disconnect];
   }
 
-  TemplateURL* ConvertToTemplateUrl(SnippetSearchEngineItem* item) {
-    return template_url_service_->GetTemplateURLForKeyword(
-        TemplateURL::GenerateKeyword(item.URL));
-  }
-
   web::WebTaskEnvironment task_environment_;
   base::test::ScopedFeatureList feature_list_;
   std::unique_ptr<TestChromeBrowserState> browser_state_;
diff --git a/ios/chrome/browser/ui/search_engine_choice/search_engine_choice_table/search_engine_choice_table_view_controller.mm b/ios/chrome/browser/ui/search_engine_choice/search_engine_choice_table/search_engine_choice_table_view_controller.mm
index eb01f64..3c75f09 100644
--- a/ios/chrome/browser/ui/search_engine_choice/search_engine_choice_table/search_engine_choice_table_view_controller.mm
+++ b/ios/chrome/browser/ui/search_engine_choice/search_engine_choice_table/search_engine_choice_table_view_controller.mm
@@ -12,7 +12,6 @@
 #import "ios/chrome/browser/ui/search_engine_choice/search_engine_choice_table/cells/snippet_search_engine_cell.h"
 #import "ios/chrome/browser/ui/search_engine_choice/search_engine_choice_table/cells/snippet_search_engine_item.h"
 #import "ios/chrome/common/ui/colors/semantic_color_names.h"
-#import "ios/chrome/common/ui/favicon/favicon_constants.h"
 #import "url/gurl.h"
 
 namespace {
@@ -149,10 +148,6 @@
   [self.tableView reloadData];
 }
 
-- (void)faviconAttributesUpdatedForItem:(SnippetSearchEngineItem*)item {
-  [self reconfigureCellsForItems:@[ item ]];
-}
-
 #pragma mark - Private
 
 // Checks if the the bottom has been reached.
diff --git a/ios/chrome/browser/ui/search_engine_choice/search_engine_choice_view_controller.h b/ios/chrome/browser/ui/search_engine_choice/search_engine_choice_view_controller.h
index 0609c19..92e3a9b 100644
--- a/ios/chrome/browser/ui/search_engine_choice/search_engine_choice_view_controller.h
+++ b/ios/chrome/browser/ui/search_engine_choice/search_engine_choice_view_controller.h
@@ -8,7 +8,6 @@
 #import <UIKit/UIKit.h>
 
 #import "ios/chrome/browser/ui/search_engine_choice/search_engine_choice_consumer.h"
-#import "ios/chrome/browser/ui/search_engine_choice/search_engine_choice_table/search_engine_choice_table_consumer.h"
 
 @class SearchEngineChoiceTableViewController;
 
@@ -25,7 +24,6 @@
 // A base view controller for showing a choice screen.
 @interface SearchEngineChoiceViewController
     : UIViewController <SearchEngineChoiceConsumer,
-                        SearchEngineChoiceFaviconUpdateConsumer,
                         UITextViewDelegate>
 
 // Delegate for all the user actions.
diff --git a/ios/chrome/browser/ui/search_engine_choice/search_engine_choice_view_controller.mm b/ios/chrome/browser/ui/search_engine_choice/search_engine_choice_view_controller.mm
index a209ab8..12b3dc73 100644
--- a/ios/chrome/browser/ui/search_engine_choice/search_engine_choice_view_controller.mm
+++ b/ios/chrome/browser/ui/search_engine_choice/search_engine_choice_view_controller.mm
@@ -355,12 +355,6 @@
                    completion:nil];
 }
 
-#pragma mark - SearchEngineChoiceFaviconUpdateConsumer
-
-- (void)updateFaviconImageForItem:(SnippetSearchEngineItem*)item {
-  _fakeOmniboxView.faviconImage = item.faviconImage;
-}
-
 #pragma mark - Private
 
 - (void)primaryButtonAction {
diff --git a/ios/chrome/browser/ui/settings/password/password_details/password_details_table_view_controller.mm b/ios/chrome/browser/ui/settings/password/password_details/password_details_table_view_controller.mm
index d944dec..49d74d7 100644
--- a/ios/chrome/browser/ui/settings/password/password_details/password_details_table_view_controller.mm
+++ b/ios/chrome/browser/ui/settings/password/password_details/password_details_table_view_controller.mm
@@ -1513,6 +1513,7 @@
   [self.handler dismissPasswordDetailsTableViewController];
 }
 
+#if !defined(__IPHONE_16_0) || __IPHONE_OS_VERSION_MIN_REQUIRED < __IPHONE_16_0
 #pragma mark - UIResponder
 
 - (BOOL)canBecomeFirstResponder {
@@ -1525,6 +1526,7 @@
   }
   return NO;
 }
+#endif
 
 #pragma mark - Metrics
 
diff --git a/ios/chrome/browser/ui/settings/password/password_sharing/sharing_status_view_controller.mm b/ios/chrome/browser/ui/settings/password/password_sharing/sharing_status_view_controller.mm
index 5216274..c0098cb 100644
--- a/ios/chrome/browser/ui/settings/password/password_sharing/sharing_status_view_controller.mm
+++ b/ios/chrome/browser/ui/settings/password/password_sharing/sharing_status_view_controller.mm
@@ -256,11 +256,12 @@
   [self.imagesSlidingOutAnimation startAnimation];
 }
 
-- (void)viewWillDisappear:(BOOL)animated {
-  [super viewWillDisappear:animated];
+- (void)viewDidDisappear:(BOOL)animated {
+  // Stop the ongoing animations so that their completion is not called.
   [self.imagesSlidingOutAnimation stopAnimation:YES];
   [self.progressBarLoadingAnimation stopAnimation:YES];
   [self.imagesSlidingInAnimation stopAnimation:YES];
+  [super viewDidDisappear:animated];
 }
 
 #pragma mark - SharingStatusConsumer
diff --git a/ios/chrome/browser/ui/settings/privacy/privacy_table_view_controller.mm b/ios/chrome/browser/ui/settings/privacy/privacy_table_view_controller.mm
index d82f267..54a3d02 100644
--- a/ios/chrome/browser/ui/settings/privacy/privacy_table_view_controller.mm
+++ b/ios/chrome/browser/ui/settings/privacy/privacy_table_view_controller.mm
@@ -20,6 +20,7 @@
 #import "components/prefs/pref_change_registrar.h"
 #import "components/prefs/pref_service.h"
 #import "components/safe_browsing/core/common/safe_browsing_prefs.h"
+#import "components/signin/public/identity_manager/account_info.h"
 #import "components/strings/grit/components_strings.h"
 #import "components/supervised_user/core/browser/supervised_user_preferences.h"
 #import "components/sync/service/sync_service.h"
@@ -34,6 +35,7 @@
 #import "ios/chrome/browser/shared/model/prefs/pref_names.h"
 #import "ios/chrome/browser/shared/public/commands/open_new_tab_command.h"
 #import "ios/chrome/browser/shared/public/features/features.h"
+#import "ios/chrome/browser/shared/ui/list_model/list_model.h"
 #import "ios/chrome/browser/shared/ui/table_view/cells/table_view_detail_icon_item.h"
 #import "ios/chrome/browser/shared/ui/table_view/cells/table_view_info_button_cell.h"
 #import "ios/chrome/browser/shared/ui/table_view/cells/table_view_info_button_item.h"
@@ -42,6 +44,7 @@
 #import "ios/chrome/browser/shared/ui/table_view/cells/table_view_switch_item.h"
 #import "ios/chrome/browser/shared/ui/table_view/cells/table_view_text_header_footer_item.h"
 #import "ios/chrome/browser/shared/ui/table_view/table_view_utils.h"
+#import "ios/chrome/browser/sync/model/sync_observer_bridge.h"
 #import "ios/chrome/browser/sync/model/sync_service_factory.h"
 #import "ios/chrome/browser/ui/incognito_interstitial/incognito_interstitial_constants.h"
 #import "ios/chrome/browser/ui/settings/elements/enterprise_info_popover_view_controller.h"
@@ -100,13 +103,16 @@
 
 @interface PrivacyTableViewController () <BooleanObserver,
                                           PrefObserverDelegate,
-                                          PopoverLabelViewControllerDelegate> {
+                                          PopoverLabelViewControllerDelegate,
+                                          SyncObserverModelBridge> {
   ChromeBrowserState* _browserState;  // weak
 
   // Pref observer to track changes to prefs.
   std::unique_ptr<PrefObserverBridge> _prefObserverBridge;
   // Registrar for pref changes notifications.
   PrefChangeRegistrar _prefChangeRegistrar;
+  // Sync Observer.
+  std::unique_ptr<SyncObserverBridge> _syncObserver;
 
   // Updatable Items.
   TableViewDetailIconItem* _handoffDetailItem;
@@ -174,6 +180,8 @@
         prefs::kSafeBrowsingEnhanced, &_prefChangeRegistrar);
     _prefObserverBridge->ObserveChangesForPreference(
         prefs::kBrowserLockdownModeEnabled, &_prefChangeRegistrar);
+    _syncObserver.reset(new SyncObserverBridge(
+        self, SyncServiceFactory::GetForBrowserState(_browserState)));
 
     _incognitoReauthPref = [[PrefBackedBoolean alloc]
         initWithPrefService:GetApplicationContext()->GetLocalState()
@@ -361,7 +369,21 @@
     privacyFooterText =
         l10n_util::GetNSString(IDS_IOS_PRIVACY_SYNC_AND_GOOGLE_SERVICES_FOOTER);
     [urls addObject:[[CrURL alloc] initWithGURL:GURL(kSyncSettingsURL)]];
+  } else if (base::FeatureList::IsEnabled(
+                 kLinkAccountSettingsToPrivacyFooter)) {
+    if (!syncService->GetAccountInfo().IsEmpty()) {
+      // Footer for signed in users.
+      privacyFooterText = l10n_util::GetNSString(
+          IDS_IOS_PRIVACY_ACCOUNT_SETTINGS_AND_GOOGLE_SERVICES_FOOTER);
+      [urls addObject:[[CrURL alloc] initWithGURL:GURL(kSyncSettingsURL)]];
+    } else {
+      // Footer for signed out users.
+      privacyFooterText =
+          l10n_util::GetNSString(IDS_IOS_PRIVACY_SIGNED_OUT_FOOTER);
+    }
   } else {
+    // Footer for signed in or signed out users. Should be deprecated once
+    // kLinkAccountSettingsToPrivacyFooter is enabled by default.
     privacyFooterText =
         l10n_util::GetNSString(IDS_IOS_PRIVACY_GOOGLE_SERVICES_FOOTER);
   }
@@ -373,6 +395,19 @@
   return showPrivacyFooterItem;
 }
 
+- (void)updatePrivacyFooterItem {
+  // The user might sign out from account settings, and thus the footer should
+  // change.
+  DCHECK([self.tableViewModel
+      hasSectionForSectionIdentifier:SectionIdentifierLockdownMode]);
+  [self.tableViewModel setFooter:[self showPrivacyFooterItem]
+        forSectionWithIdentifier:SectionIdentifierLockdownMode];
+  NSUInteger sectionIndex = [self.tableViewModel
+      sectionForSectionIdentifier:SectionIdentifierLockdownMode];
+  [self.tableView reloadSections:[NSIndexSet indexSetWithIndex:sectionIndex]
+                withRowAnimation:UITableViewRowAnimationNone];
+}
+
 - (TableViewItem*)clearBrowsingDetailItem {
   return [self detailItemWithType:ItemTypeClearBrowsingDataClear
                           titleId:IDS_IOS_CLEAR_BROWSING_DATA_TITLE
@@ -483,6 +518,9 @@
   // Remove observer bridges.
   _prefObserverBridge.reset();
 
+  // Remove sync observer.
+  _syncObserver.reset();
+
   // Clear C++ ivars.
   _browserState = nullptr;
 
@@ -645,6 +683,12 @@
   [super view:nil didTapLinkURL:[[CrURL alloc] initWithNSURL:URL]];
 }
 
+#pragma mark - SyncObserverModelBridge
+
+- (void)onSyncStateChanged {
+  [self updatePrivacyFooterItem];
+}
+
 #pragma mark - Private
 
 // Called when the user taps on the information button of the disabled Incognito
diff --git a/ios/chrome/browser/ui/settings/privacy/privacy_table_view_controller_unittest.mm b/ios/chrome/browser/ui/settings/privacy/privacy_table_view_controller_unittest.mm
index 00bb921..cfb620b 100644
--- a/ios/chrome/browser/ui/settings/privacy/privacy_table_view_controller_unittest.mm
+++ b/ios/chrome/browser/ui/settings/privacy/privacy_table_view_controller_unittest.mm
@@ -22,6 +22,7 @@
 #import "components/prefs/pref_service.h"
 #import "components/safe_browsing/core/common/features.h"
 #import "components/safe_browsing/core/common/safe_browsing_prefs.h"
+#import "components/signin/public/identity_manager/account_info.h"
 #import "components/strings/grit/components_strings.h"
 #import "components/sync/test/mock_sync_service.h"
 #import "components/sync_preferences/pref_service_mock_factory.h"
@@ -256,14 +257,23 @@
       l10n_util::GetNSString(IDS_IOS_SETTING_OFF), currentSection, 0);
 
   // Testing section index and text of the privacy footer.
-  CheckSectionFooter(
-      l10n_util::GetNSString(IDS_IOS_PRIVACY_GOOGLE_SERVICES_FOOTER),
-      /* section= */ expectedNumberOfSections - 1);
+  if (base::FeatureList::IsEnabled(kLinkAccountSettingsToPrivacyFooter)) {
+    CheckSectionFooter(
+        l10n_util::GetNSString(IDS_IOS_PRIVACY_SIGNED_OUT_FOOTER),
+        /* section= */ expectedNumberOfSections - 1);
+  } else {
+    CheckSectionFooter(
+        l10n_util::GetNSString(IDS_IOS_PRIVACY_GOOGLE_SERVICES_FOOTER),
+        /* section= */ expectedNumberOfSections - 1);
+  }
 }
 
 // Tests PrivacyTableViewController sets the correct privacy footer for a
 // non-syncing user.
 TEST_P(PrivacyTableViewControllerTest, TestModelFooterWithSyncDisabled) {
+  base::test::ScopedFeatureList feature_list;
+  feature_list.InitAndDisableFeature(kLinkAccountSettingsToPrivacyFooter);
+
   ON_CALL(*mock_sync_service()->GetMockUserSettings(),
           IsInitialSyncFeatureSetupComplete())
       .WillByDefault(Return(false));
@@ -314,6 +324,38 @@
       /* section= */ expectedNumberOfSections - 1);
 }
 
+// Tests PrivacyTableViewController sets the correct privacy footer for a
+// signed-in non-syncing user.
+TEST_P(PrivacyTableViewControllerTest, TestModelFooterForSignedInNotSyncing) {
+  base::test::ScopedFeatureList feature_list;
+  feature_list.InitAndEnableFeature(kLinkAccountSettingsToPrivacyFooter);
+
+  ON_CALL(*mock_sync_service(), HasSyncConsent()).WillByDefault(Return(false));
+  CoreAccountInfo account_info;
+  account_info.email = base::SysNSStringToUTF8(@"foo1@gmail.com");
+  ON_CALL(*mock_sync_service(), GetAccountInfo())
+      .WillByDefault(Return(account_info));
+
+  CreateController();
+  CheckController();
+
+  int expectedNumberOfSections = 6;
+  if (base::FeatureList::IsEnabled(
+          security_interstitials::features::kHttpsOnlyMode)) {
+    expectedNumberOfSections++;
+  }
+
+  // IncognitoInterstitial section.
+  expectedNumberOfSections++;
+  EXPECT_EQ(expectedNumberOfSections, NumberOfSections());
+
+  // Testing section index and text of the privacy footer.
+  CheckSectionFooter(
+      l10n_util::GetNSString(
+          IDS_IOS_PRIVACY_ACCOUNT_SETTINGS_AND_GOOGLE_SERVICES_FOOTER),
+      /* section= */ expectedNumberOfSections - 1);
+}
+
 // Tests PrivacyTableViewController does not display the Blue-dot promotion
 // for a user who has not engaged in an event that triggers the Enhanced Safe
 // Browsing blue-dot promo.
diff --git a/ios/chrome/common/ui/promo_style/promo_style_view_controller.h b/ios/chrome/common/ui/promo_style/promo_style_view_controller.h
index 38048b39..6ed3e35 100644
--- a/ios/chrome/common/ui/promo_style/promo_style_view_controller.h
+++ b/ios/chrome/common/ui/promo_style/promo_style_view_controller.h
@@ -76,7 +76,7 @@
 // When set to YES, the header will be hidden when the content is taller than
 // the scroll view. This can make the content fully visible or require less
 // scrolling when using a smaller form factor device or a larger font size.
-// Default to NO.
+// Once hidden, the header will not reappear. Default to NO.
 @property(nonatomic, assign) BOOL hideHeaderOnTallContent;
 
 // When set to YES, forces UIUserInterfaceStyleLight for the header views. This
diff --git a/ios/chrome/common/ui/promo_style/promo_style_view_controller.mm b/ios/chrome/common/ui/promo_style/promo_style_view_controller.mm
index 5cf2d12..b8c2508 100644
--- a/ios/chrome/common/ui/promo_style/promo_style_view_controller.mm
+++ b/ios/chrome/common/ui/promo_style/promo_style_view_controller.mm
@@ -1333,23 +1333,31 @@
 }
 
 - (void)hideHeaderOnTallContentIfNeeded {
-  if (!self.hideHeaderOnTallContent || !_canUpdateViewsOnScroll) {
+  // Once hidden, the header will not reappear.
+  if (!self.hideHeaderOnTallContent || !_canUpdateViewsOnScroll ||
+      _fullHeaderImageView.hidden) {
     return;
   }
   CHECK(self.headerImageType != PromoStyleImageType::kNone);
 
-  BOOL contentFits = [self isScrolledToBottom];
+  const BOOL contentFits = [self isScrolledToBottom];
+  if (contentFits) {
+    return;
+  }
 
-  _fullHeaderImageView.hidden = !contentFits;
-  _headerBackgroundImageView.hidden = !contentFits;
-  _headerImageView.hidden = !contentFits;
+  _fullHeaderImageView.hidden = YES;
+  _headerBackgroundImageView.hidden = YES;
+  _headerImageView.hidden = YES;
   if (!_titleLabelNoHeaderTopMargin) {
     _titleLabelNoHeaderTopMargin = [_titleLabel.topAnchor
         constraintEqualToAnchor:_scrollContentView.topAnchor
                        constant:kDefaultMargin];
   }
-  _titleLabelNoHeaderTopMargin.active = !contentFits;
-  _headerBackgroundImageViewTopMargin.active = contentFits;
+  _titleLabelNoHeaderTopMargin.active = YES;
+  _headerBackgroundImageViewTopMargin.active = NO;
+
+  [_scrollView layoutIfNeeded];
+  [self updateViewsOnScrollViewUpdate];
 }
 
 #pragma mark - UIScrollViewDelegate
diff --git a/media/gpu/v4l2/stateless/queue.cc b/media/gpu/v4l2/stateless/queue.cc
index 98ef3d1b..71350138d 100644
--- a/media/gpu/v4l2/stateless/queue.cc
+++ b/media/gpu/v4l2/stateless/queue.cc
@@ -170,7 +170,7 @@
 bool InputQueue::SubmitCompressedFrameData(void* ctrls,
                                            const void* data,
                                            size_t length,
-                                           uint32_t frame_id) {
+                                           uint64_t frame_id) {
   // Failing to acquire a buffer is a normal part of the process. All of the
   // input buffers can be full if the output buffers are not being cleared.
   auto buffer_index = GetFreeBufferIndex();
diff --git a/media/gpu/v4l2/stateless/queue.h b/media/gpu/v4l2/stateless/queue.h
index c26b4c04..67ad006 100644
--- a/media/gpu/v4l2/stateless/queue.h
+++ b/media/gpu/v4l2/stateless/queue.h
@@ -69,7 +69,7 @@
   bool SubmitCompressedFrameData(void* ctrls,
                                  const void* data,
                                  size_t length,
-                                 uint32_t frame_id);
+                                 uint64_t frame_id);
   bool PrepareBuffers() override;
 
   // Add buffers that have been dequeued into the list of buffers available
diff --git a/media/gpu/v4l2/stateless/stateless_decode_surface.cc b/media/gpu/v4l2/stateless/stateless_decode_surface.cc
index fc377b0..2979c2cf 100644
--- a/media/gpu/v4l2/stateless/stateless_decode_surface.cc
+++ b/media/gpu/v4l2/stateless/stateless_decode_surface.cc
@@ -9,13 +9,15 @@
 
 namespace media {
 
-StatelessDecodeSurface::StatelessDecodeSurface(uint32_t frame_id)
-    : frame_id_(frame_id) {
-  DVLOGF(4) << "Creating surface with id : " << frame_id_;
+StatelessDecodeSurface::StatelessDecodeSurface(uint64_t frame_id,
+                                               base::OnceClosure enqueue_cb)
+    : frame_id_(frame_id), enqueue_cb_(std::move(enqueue_cb)) {
+  DVLOGF(3) << "Creating surface with id  : " << frame_id_;
 }
 
 StatelessDecodeSurface::~StatelessDecodeSurface() {
-  DVLOGF(4) << "Releasing surface with id : " << frame_id_;
+  DVLOGF(3) << "Releasing surface with id : " << frame_id_;
+  std::move(enqueue_cb_).Run();
 }
 
 void StatelessDecodeSurface::SetVisibleRect(const gfx::Rect& visible_rect) {
@@ -47,9 +49,4 @@
   reference_surfaces_.clear();
 }
 
-void StatelessDecodeSurface::SetVideoFrame(
-    scoped_refptr<VideoFrame> video_frame) {
-  video_frame_ = video_frame;
-}
-
 }  // namespace media
diff --git a/media/gpu/v4l2/stateless/stateless_decode_surface.h b/media/gpu/v4l2/stateless/stateless_decode_surface.h
index cc78d6d67d..f4b87eb 100644
--- a/media/gpu/v4l2/stateless/stateless_decode_surface.h
+++ b/media/gpu/v4l2/stateless/stateless_decode_surface.h
@@ -17,7 +17,7 @@
 
 class StatelessDecodeSurface : public base::RefCounted<StatelessDecodeSurface> {
  public:
-  StatelessDecodeSurface(uint32_t frame_id);
+  StatelessDecodeSurface(uint64_t frame_id, base::OnceClosure enqueue_cb);
 
   StatelessDecodeSurface(const StatelessDecodeSurface&) = delete;
   StatelessDecodeSurface& operator=(const StatelessDecodeSurface&) = delete;
@@ -26,15 +26,14 @@
   void SetColorSpace(const VideoColorSpace& color_space);
   void SetVideoFrameTimestamp(const base::TimeDelta timestamp);
 
-  int32_t FrameID() const { return frame_id_; }
+  uint64_t FrameID() const { return frame_id_; }
   VideoColorSpace ColorSpace() const { return color_space_; }
   base::TimeDelta VideoFrameTimestamp() const { return video_frame_timestamp_; }
-
   uint64_t GetReferenceTimestamp() const;
+
   void SetReferenceSurfaces(
       std::vector<scoped_refptr<StatelessDecodeSurface>> ref_surfaces);
   void ClearReferenceSurfaces();
-  void SetVideoFrame(scoped_refptr<VideoFrame> video_frame);
 
  protected:
   virtual ~StatelessDecodeSurface();
@@ -43,7 +42,7 @@
  private:
   // Identify this surface so that it can be matched up the the uncompressed
   // buffer when it is done being decompressed.
-  const uint32_t frame_id_;
+  const uint64_t frame_id_;
 
   // The visible size of the buffer.
   gfx::Rect visible_rect_;
@@ -54,8 +53,8 @@
   // Timestamp associated with when the frame should be displayed.
   base::TimeDelta video_frame_timestamp_;
 
-  // Reference to the video frame associated with this surface
-  scoped_refptr<VideoFrame> video_frame_;
+  // Callback to enqueue buffers once they are done being referenced.
+  base::OnceClosure enqueue_cb_;
 
   // Frames that this frames uses for references. These are held onto until the
   // decode is done so that they are not reused while they need to be
diff --git a/media/gpu/v4l2/stateless/stateless_decode_surface_handler.h b/media/gpu/v4l2/stateless/stateless_decode_surface_handler.h
index 680521e7..7a0eb49 100644
--- a/media/gpu/v4l2/stateless/stateless_decode_surface_handler.h
+++ b/media/gpu/v4l2/stateless/stateless_decode_surface_handler.h
@@ -24,12 +24,12 @@
   // The stateless api requires that the client parse the header information
   // and send that separately. |ctrls| is the parsed header while |data| is
   // the complete frame of compressed data with |size| being the length of
-  // the buffer. |frame_id| is an identifier for the driver to use for
-  // reference frame designation.
-  virtual bool SubmitFrame(void* ctrls,
-                           const uint8_t* data,
-                           size_t size,
-                           uint32_t frame_id) = 0;
+  // the buffer.
+  virtual bool SubmitFrame(
+      void* ctrls,
+      const uint8_t* data,
+      size_t size,
+      scoped_refptr<StatelessDecodeSurface> dec_surface) = 0;
 };
 
 }  // namespace media
diff --git a/media/gpu/v4l2/stateless/v4l2_stateless_video_decoder.cc b/media/gpu/v4l2/stateless/v4l2_stateless_video_decoder.cc
index e820466..548d325 100644
--- a/media/gpu/v4l2/stateless/v4l2_stateless_video_decoder.cc
+++ b/media/gpu/v4l2/stateless/v4l2_stateless_video_decoder.cc
@@ -63,6 +63,19 @@
       new StatelessDevice()));
 }
 
+V4L2StatelessVideoDecoder::DecodeRequest::DecodeRequest(
+    scoped_refptr<DecoderBuffer> buf,
+    VideoDecoder::DecodeCB cb,
+    int32_t id)
+    : buffer(std::move(buf)), decode_cb(std::move(cb)), bitstream_id(id) {}
+
+V4L2StatelessVideoDecoder::DecodeRequest::DecodeRequest(DecodeRequest&&) =
+    default;
+V4L2StatelessVideoDecoder::DecodeRequest&
+V4L2StatelessVideoDecoder::DecodeRequest::operator=(DecodeRequest&&) = default;
+
+V4L2StatelessVideoDecoder::DecodeRequest::~DecodeRequest() = default;
+
 V4L2StatelessVideoDecoder::V4L2StatelessVideoDecoder(
     std::unique_ptr<MediaLog> media_log,
     scoped_refptr<base::SequencedTaskRunner> decoder_task_runner,
@@ -80,6 +93,10 @@
 V4L2StatelessVideoDecoder::~V4L2StatelessVideoDecoder() {
   DCHECK_CALLED_ON_VALID_SEQUENCE(decoder_sequence_checker_);
   DVLOGF(4);
+  DCHECK(!current_decode_request_)
+      << "|current_decode_request_| should have been flushed.";
+  DCHECK(decode_request_queue_.empty())
+      << "|decode_request_queue_| is not empty, it should have been flushed.";
 }
 
 // static
@@ -151,7 +168,6 @@
 void V4L2StatelessVideoDecoder::Decode(scoped_refptr<DecoderBuffer> buffer,
                                        DecodeCB decode_cb) {
   DCHECK_CALLED_ON_VALID_SEQUENCE(decoder_sequence_checker_);
-  CHECK(!decode_done_) << "Overlapping decodes are not supported.";
   DVLOGF(4) << buffer->AsHumanReadableString(/*verbose=*/false);
 
   const int32_t bitstream_id =
@@ -169,19 +185,28 @@
     CHECK(output_queue_task_runner_);
   }
 
-  decode_done_ = std::move(decode_cb);
   if (!buffer->end_of_stream()) {
-    ProcessCompressedBuffer(std::move(buffer), std::move(decode_cb),
-                            bitstream_id);
+    decode_request_queue_.push(
+        DecodeRequest(std::move(buffer), std::move(decode_cb), bitstream_id));
+
+    ServiceDecodeRequestQueue();
   } else {
-    // TODO(frkoenig): This is not correct. The buffers in progress must be
-    // completed before this callback can execute.
     base::SequencedTaskRunner::GetCurrentDefault()->PostTask(
         FROM_HERE,
-        base::BindOnce(std::move(decode_done_), DecoderStatus::Codes::kOk));
+        base::BindOnce(&V4L2StatelessVideoDecoder::Flush,
+                       base::Unretained(this), std::move(decode_cb)));
   }
 }
 
+void V4L2StatelessVideoDecoder::Flush(DecodeCB decode_cb) {
+  DCHECK_CALLED_ON_VALID_SEQUENCE(decoder_sequence_checker_);
+  DVLOGF(2);
+
+  // TODO(frkoenig): This is not correct. The buffers in progress must be
+  // completed before this callback can execute.
+  std::move(decode_cb).Run(DecoderStatus::Codes::kOk);
+}
+
 void V4L2StatelessVideoDecoder::Reset(base::OnceClosure reset_cb) {
   DCHECK_CALLED_ON_VALID_SEQUENCE(decoder_sequence_checker_);
   NOTIMPLEMENTED();
@@ -239,17 +264,27 @@
       return nullptr;
     }
   }
-  const uint32_t frame_id =
+  const uint64_t frame_id =
       frame_id_generator_.GenerateNextId().GetUnsafeValue();
 
-  return base::MakeRefCounted<StatelessDecodeSurface>(frame_id);
+  // This callback is used to enqueue the buffer. It is called by the
+  // |StatelessDecodeSurface| when it is no longer referenced and therefore
+  // usable for other frames.
+  auto enqueue_cb = base::BindPostTaskToCurrentDefault(base::BindOnce(
+      &V4L2StatelessVideoDecoder::EnqueueDecodedOutputBufferByFrameID,
+      weak_ptr_factory_for_events_.GetWeakPtr(), frame_id));
+
+  return base::MakeRefCounted<StatelessDecodeSurface>(frame_id,
+                                                      std::move(enqueue_cb));
 }
 
-bool V4L2StatelessVideoDecoder::SubmitFrame(void* ctrls,
-                                            const uint8_t* data,
-                                            size_t size,
-                                            uint32_t frame_id) {
+bool V4L2StatelessVideoDecoder::SubmitFrame(
+    void* ctrls,
+    const uint8_t* data,
+    size_t size,
+    scoped_refptr<StatelessDecodeSurface> dec_surface) {
   DCHECK_CALLED_ON_VALID_SEQUENCE(decoder_sequence_checker_);
+  DCHECK(dec_surface);
   DVLOGF(4);
   if (!output_queue_) {
     if (!input_queue_->PrepareBuffers()) {
@@ -281,8 +316,15 @@
     ArmBufferMonitor();
   }
 
-  DVLOGF(2) << "Submitting compressed frame " << frame_id << " to be decoded.";
-  return input_queue_->SubmitCompressedFrameData(ctrls, data, size, frame_id);
+  DVLOGF(2) << "Submitting compressed frame " << dec_surface->FrameID()
+            << " to be decoded.";
+  if (input_queue_->SubmitCompressedFrameData(ctrls, data, size,
+                                              dec_surface->FrameID())) {
+    surfaces_queued_.push(std::move(dec_surface));
+
+    return true;
+  }
+  return false;
 }
 
 void V4L2StatelessVideoDecoder::SurfaceReady(
@@ -338,7 +380,7 @@
   while (!display_queue_.empty()) {
     // frame_id is the link between the display_queue_ and the frames that
     // have been dequeued.
-    const uint32_t frame_id = display_queue_.front()->FrameID();
+    const uint64_t frame_id = display_queue_.front()->FrameID();
     DVLOGF(2) << "frame id(" << frame_id << ") is ready to be displayed.";
 
     // Retrieve the index of the corresponding dequeued buffer. It is expected
@@ -363,24 +405,20 @@
     wrapped_frame->set_color_space(surface->ColorSpace().ToGfxColorSpace());
     wrapped_frame->set_timestamp(surface->VideoFrameTimestamp());
 
-    // References that this frame holds can be removed once the frame is done
-    // decoding.
-    surface->ClearReferenceSurfaces();
-
-    // Add a reference to the video frame so that underlying resource will not
-    // be queued until both the video frame has been displayed and all of the
-    // references have been dropped.
-    surface->SetVideoFrame(wrapped_frame);
-
-    // When the |wrapped_frame| is done being used the underlying buffer is
-    // queued again. A reference needs to be held by the |surface| in the
-    // situation where this frame is used as a reference frame. The other
-    // reference held will be released when the image is displayed or processed
-    // by the image converter.
+    // The |wrapped_frame| is shipped off to be displayed (or converted via the
+    // image processor). If the display buffer queue is deep this could take
+    // some time. The |surface| can be a reference frame used to decode future
+    // frames.
+    //
+    // The buffer can not be enqueued until both the |wrapped_frame| and
+    // the |surface| are done with it. This destructor observer adds a reference
+    // to the |surface| to be held onto until the |wrapped_frame| is destroyed.
+    // On destruction of the |wrapped_frame| the reference to the |surface| is
+    // released. The |surface| destructor will then enqueue the buffer.
     wrapped_frame->AddDestructionObserver(
         base::BindPostTaskToCurrentDefault(base::BindOnce(
-            &V4L2StatelessVideoDecoder::EnqueueDecodedOutputBufferByFrameID,
-            weak_ptr_factory_for_events_.GetWeakPtr(), frame_id)));
+            [](scoped_refptr<StatelessDecodeSurface> surface_reference) {},
+            std::move(surface))));
 
     DVLOGF(3) << wrapped_frame->AsHumanReadableString();
 
@@ -486,19 +524,25 @@
 
 void V4L2StatelessVideoDecoder::HandleDequeuedOutputBuffers(Buffer buffer) {
   DCHECK_CALLED_ON_VALID_SEQUENCE(decoder_sequence_checker_);
+  DCHECK(!surfaces_queued_.empty());
   DVLOGF(4);
 
+  auto surface = std::move(surfaces_queued_.front());
+  surfaces_queued_.pop();
+
+  DCHECK_EQ(surface->FrameID(), buffer.GetTimeAsFrameID())
+      << "The surfaces are queued as the buffer is submitted. They are "
+         "expected to be dequeued in order.";
+
+  // References that this frame holds can be removed once the frame is done
+  // decoding.
+  surface->ClearReferenceSurfaces();
+
   // |output_queue_| is responsible for tracking which buffers correspond to
   // which frames. The queue needs to know that the buffer is done, ready for
   // display, and should not be queued.
   output_queue_->RegisterDequeuedBuffer(buffer);
 
-  // Only one frame is in the queue at a time. The callback needs to be run
-  // after the frame is dequeued so the next frame can be processed.
-  base::SequencedTaskRunner::GetCurrentDefault()->PostTask(
-      FROM_HERE,
-      base::BindOnce(std::move(decode_done_), DecoderStatus::Codes::kOk));
-
   // Check the display queue to see if there are buffers that are ready to
   // be displayed.
   ServiceDisplayQueue();
@@ -517,46 +561,21 @@
   output_queue_->QueueBufferByFrameID(frame_id);
 }
 
-void V4L2StatelessVideoDecoder::ProcessCompressedBuffer(
-    scoped_refptr<DecoderBuffer> compressed_buffer,
-    VideoDecoder::DecodeCB decode_cb,
-    int32_t bitstream_id) {
+void V4L2StatelessVideoDecoder::ServiceDecodeRequestQueue() {
   DCHECK_CALLED_ON_VALID_SEQUENCE(decoder_sequence_checker_);
   DVLOGF(4);
   DCHECK(decoder_);
 
-  // The |decoder_| does not own the |compressed_buffer|. The
-  // |compressed_buffer| needs to be held onto until |Decode| returns
-  // AcceleratedVideoDecoder::kRanOutOfStreamData. Multiple calls to |Decode|
-  // can process the same |compressed_buffer|. This function can not return
-  // until the |decoder_| no longer needs to use that data.
-  AcceleratedVideoDecoder::DecodeResult decode_result = decoder_->Decode();
-
-  // This function expects that the decoder will be in a state ready to
-  // receive compressed data. Because the lifetime of the |compressed_buffer|
-  // is only for this function every time through the decoder should
-  // be requesting more data.
-  // TODO(frkoenig): There is the possibility of this function being called
-  // and |decode_result| being a decode error.  Should that be handled
-  // here?  or else where?
-  CHECK_EQ(decode_result, AcceleratedVideoDecoder::kRanOutOfStreamData);
-
-  // There are some exceptions to running with a single OUTPUT buffer
-  // VP9 has superframes, which means that a single call to this function
-  // will result in multiple ->Decode() calls.
-  // h.244 can has the SPS/PPS separate, in which case multiple calls to
-  // this function are required before a single frame can come out.
-  decoder_->SetStream(bitstream_id, *compressed_buffer);
-  bitstream_id_to_timestamp_.Put(bitstream_id, compressed_buffer->timestamp());
-
+  bool done = false;
+  AcceleratedVideoDecoder::DecodeResult decode_result;
   do {
     decode_result = decoder_->Decode();
     switch (decode_result) {
       case AcceleratedVideoDecoder::kConfigChange:
         VLOGF(2) << "AcceleratedVideoDecoder::kConfigChange";
         if (!CreateInputQueue(decoder_->GetProfile(), decoder_->GetPicSize())) {
-          std::move(decode_cb).Run(
-              DecoderStatus::Codes::kPlatformDecodeFailure);
+          std::move(current_decode_request_->decode_cb)
+              .Run(DecoderStatus::Codes::kPlatformDecodeFailure);
           VLOGF(1) << "Unable to create an input queue for "
                    << GetProfileName(decoder_->GetProfile())
                    << " of resolution " << decoder_->GetPicSize().ToString();
@@ -564,27 +583,53 @@
         break;
       case AcceleratedVideoDecoder::kRanOutOfStreamData:
         VLOGF(2) << "AcceleratedVideoDecoder::kRanOutOfStreamData";
-        // Handled on first entry to function.
+        if (decode_request_queue_.empty() && !current_decode_request_) {
+          return;
+        }
+
+        // In a normal decode cycle |current_decode_request_| will be empty at
+        // this point, so the next request should be popped off the queue and
+        // fed into the |decoder_|. However, some codecs pack multiple frames
+        // into a single request (i.e. VP9/AV1 superframes). In that situation
+        // |current_decode_request_| is still valid.
+        if (current_decode_request_) {
+          done = true;
+          break;
+        }
+
+        current_decode_request_ = std::move(decode_request_queue_.front());
+        decode_request_queue_.pop();
+
+        decoder_->SetStream(current_decode_request_->bitstream_id,
+                            *current_decode_request_->buffer);
+        bitstream_id_to_timestamp_.Put(
+            current_decode_request_->bitstream_id,
+            current_decode_request_->buffer->timestamp());
+
         break;
       case AcceleratedVideoDecoder::kRanOutOfSurfaces:
-        VLOGF(2) << "AcceleratedVideoDecoder::kRanOutOfSurfaces";
-        NOTREACHED();
+        NOTREACHED() << "AcceleratedVideoDecoder::kRanOutOfSurfaces";
         break;
       case AcceleratedVideoDecoder::kDecodeError:
-        VLOGF(2) << "AcceleratedVideoDecoder::kDecodeError";
+        VLOGF(1) << "AcceleratedVideoDecoder::kDecodeError.";
+        done = true;
         break;
       case AcceleratedVideoDecoder::kTryAgain:
         // Will be needed for h.264 CENCv1
-        VLOGF(2) << "AcceleratedVideoDecoder::kTryAgain";
-        NOTIMPLEMENTED();
+        NOTIMPLEMENTED() << "AcceleratedVideoDecoder::kTryAgain";
         break;
     }
-  } while (AcceleratedVideoDecoder::kRanOutOfStreamData != decode_result &&
-           AcceleratedVideoDecoder::kDecodeError != decode_result);
+  } while (!done);
 
-  DecoderStatus decoder_status = DecoderStatus::Codes::kOk;
-  if (AcceleratedVideoDecoder::kDecodeError == decode_result) {
-    decoder_status = DecoderStatus::Codes::kFailed;
+  if (current_decode_request_) {
+    const DecoderStatus::Codes decode_status =
+        (decode_result == AcceleratedVideoDecoder::kDecodeError)
+            ? DecoderStatus::Codes::kPlatformDecodeFailure
+            : DecoderStatus::Codes::kOk;
+    base::SequencedTaskRunner::GetCurrentDefault()->PostTask(
+        FROM_HERE, base::BindOnce(std::move(current_decode_request_->decode_cb),
+                                  decode_status));
+    current_decode_request_ = absl::nullopt;
   }
 }
 
diff --git a/media/gpu/v4l2/stateless/v4l2_stateless_video_decoder.h b/media/gpu/v4l2/stateless/v4l2_stateless_video_decoder.h
index 67fd05f..a1232ae 100644
--- a/media/gpu/v4l2/stateless/v4l2_stateless_video_decoder.h
+++ b/media/gpu/v4l2/stateless/v4l2_stateless_video_decoder.h
@@ -5,6 +5,7 @@
 #ifndef MEDIA_GPU_V4L2_STATELESS_V4L2_STATELESS_VIDEO_DECODER_H_
 #define MEDIA_GPU_V4L2_STATELESS_V4L2_STATELESS_VIDEO_DECODER_H_
 
+#include <queue>
 #include <vector>
 
 #include "base/containers/lru_cache.h"
@@ -69,7 +70,7 @@
   bool SubmitFrame(void* ctrls,
                    const uint8_t* data,
                    size_t size,
-                   uint32_t frame_id) override;
+                   scoped_refptr<StatelessDecodeSurface> dec_surface) override;
 
  private:
   V4L2StatelessVideoDecoder(
@@ -79,6 +80,30 @@
       scoped_refptr<StatelessDevice> device);
   ~V4L2StatelessVideoDecoder() override;
 
+  // Request for decoding buffer. Every EnqueueDecodeTask() call generates 1
+  // DecodeRequest.
+  struct DecodeRequest {
+    // The decode buffer passed to EnqueueDecodeTask().
+    scoped_refptr<DecoderBuffer> buffer;
+    // The callback function passed to EnqueueDecodeTask().
+    VideoDecoder::DecodeCB decode_cb;
+    // The identifier for the decoder buffer.
+    int32_t bitstream_id;
+
+    DecodeRequest(scoped_refptr<DecoderBuffer> buf,
+                  VideoDecoder::DecodeCB cb,
+                  int32_t id);
+
+    DecodeRequest(const DecodeRequest&) = delete;
+    DecodeRequest& operator=(const DecodeRequest&) = delete;
+
+    // Allow move, but not copy
+    DecodeRequest(DecodeRequest&&);
+    DecodeRequest& operator=(DecodeRequest&&);
+
+    ~DecodeRequest();
+  };
+
   // Create a codec specific decoder. When successful this decoder is stored in
   // the |decoder_| member variable.
   bool CreateDecoder(VideoCodecProfile profile, VideoColorSpace color_space);
@@ -104,16 +129,19 @@
   // buffer after it is done being used.
   void EnqueueDecodedOutputBufferByFrameID(uint64_t frame_id);
 
-  // Process the data in the |compressed_buffer| using the |decoder_|.
-  void ProcessCompressedBuffer(scoped_refptr<DecoderBuffer> compressed_buffer,
-                               VideoDecoder::DecodeCB decode_cb,
-                               int32_t bitstream_id);
-
   // Match up frames that have been decoded and are sitting in the
   // |output_queue_| with |display_queue_| which holds the frames in display
   // order.
   void ServiceDisplayQueue();
 
+  // Service the queue of outstanding decode request. The client can send
+  // multiple compressed frames without waiting for a callback. These frames
+  // need to be queued up as there may not be free input buffers available.
+  void ServiceDecodeRequestQueue();
+
+  // Clear all of the pending decode buffers.
+  void Flush(DecodeCB decode_cb);
+
   SEQUENCE_CHECKER(decoder_sequence_checker_);
 
   const scoped_refptr<StatelessDevice> device_;
@@ -122,8 +150,9 @@
   // has finished decoding and is ready for the client to display.
   OutputCB output_cb_ GUARDED_BY_CONTEXT(decoder_sequence_checker_);
 
-  // Callback to be used after a chunk is decoded.
-  DecodeCB decode_done_ GUARDED_BY_CONTEXT(decoder_sequence_checker_);
+  // Hold the callback that came in with the EOS signal until the rest of the
+  // frames have finished decoding._;
+  DecodeCB flush_cb_ GUARDED_BY_CONTEXT(decoder_sequence_checker_);
 
   // Video decoder used to parse stream headers by software.
   std::unique_ptr<AcceleratedVideoDecoder> decoder_;
@@ -134,6 +163,10 @@
   // Queue to hold uncompressed image buffers returned by the hardware
   std::unique_ptr<OutputQueue> output_queue_;
 
+  // Surfaces enqueued to V4L2 device. Since we are stateless, they are
+  // guaranteed to be proceeded in FIFO order.
+  base::queue<scoped_refptr<StatelessDecodeSurface>> surfaces_queued_;
+
   // Aspect ratio from config to use for output frames.
   VideoAspectRatio aspect_ratio_;
 
@@ -147,11 +180,17 @@
   // Unique enough identifier so that all outstanding reference frames have a
   // unique identifier
   struct FrameID {};
-  base::IdTypeU32<FrameID>::Generator frame_id_generator_
+  base::IdTypeU64<FrameID>::Generator frame_id_generator_
       GUARDED_BY_CONTEXT(decoder_sequence_checker_);
 
   base::LRUCache<int32_t, base::TimeDelta> bitstream_id_to_timestamp_;
 
+  // Queue of pending decode request.
+  std::queue<DecodeRequest> decode_request_queue_;
+
+  // The decode request decode loop needs to keep this alive.
+  absl::optional<DecodeRequest> current_decode_request_;
+
   base::CancelableTaskTracker cancelable_output_queue_tracker_;
   base::CancelableTaskTracker cancelable_input_queue_tracker_;
 
diff --git a/media/gpu/v4l2/stateless/vp8_delegate.cc b/media/gpu/v4l2/stateless/vp8_delegate.cc
index 40769f94..8c12b57 100644
--- a/media/gpu/v4l2/stateless/vp8_delegate.cc
+++ b/media/gpu/v4l2/stateless/vp8_delegate.cc
@@ -233,9 +233,9 @@
   if (!stateless_vp8_picture) {
     return false;
   }
-  if (!surface_handler_->SubmitFrame(
-          &ctrls, frame_hdr->data, frame_hdr->frame_size,
-          stateless_vp8_picture->dec_surface()->FrameID())) {
+  if (!surface_handler_->SubmitFrame(&ctrls, frame_hdr->data,
+                                     frame_hdr->frame_size,
+                                     stateless_vp8_picture->dec_surface())) {
     return false;
   }
 
diff --git a/media/gpu/v4l2/stateless/vp9_delegate.cc b/media/gpu/v4l2/stateless/vp9_delegate.cc
index 0509a0c5..7143c0dc 100644
--- a/media/gpu/v4l2/stateless/vp9_delegate.cc
+++ b/media/gpu/v4l2/stateless/vp9_delegate.cc
@@ -301,8 +301,7 @@
   dec_surface->SetReferenceSurfaces(std::move(ref_surfaces));
 
   if (!surface_handler_->SubmitFrame(&ctrls, frame_hdr->data,
-                                     frame_hdr->frame_size,
-                                     dec_surface->FrameID())) {
+                                     frame_hdr->frame_size, dec_surface)) {
     return DecodeStatus::kFail;
   }
 
diff --git a/media/gpu/v4l2/v4l2_framerate_control.cc b/media/gpu/v4l2/v4l2_framerate_control.cc
index 997e427..ece88c0b 100644
--- a/media/gpu/v4l2/v4l2_framerate_control.cc
+++ b/media/gpu/v4l2/v4l2_framerate_control.cc
@@ -4,6 +4,8 @@
 
 #include "media/gpu/v4l2/v4l2_framerate_control.h"
 
+#include <linux/videodev2.h>
+
 #include "base/command_line.h"
 #include "base/sequence_checker.h"
 #include "base/strings/string_number_conversions.h"
@@ -12,6 +14,9 @@
 #include "media/base/media_switches.h"
 
 namespace {
+// Numerical value of ioctl() OK return value;
+constexpr int kIoctlOk = 0;
+
 double GetUserFrameRate() {
   const base::CommandLine* cmd_line = base::CommandLine::ForCurrentProcess();
   if (!cmd_line->HasSwitch(switches::kHardwareVideoDecodeFrameRate))
@@ -31,9 +36,8 @@
   return 0.0;
 }
 
-bool FrameRateControlPresent(scoped_refptr<media::V4L2Device> device) {
-  DCHECK(device);
-
+bool FrameRateControlPresent(
+    const media::V4L2FrameRateControl::IoctlAsCallback& ioctl_cb) {
   struct v4l2_streamparm parms;
   memset(&parms, 0, sizeof(parms));
   parms.type = V4L2_BUF_TYPE_VIDEO_CAPTURE_MPLANE;
@@ -52,7 +56,7 @@
             << " fps.";
   }
 
-  if (device->Ioctl(VIDIOC_S_PARM, &parms) != 0) {
+  if (ioctl_cb.Run(VIDIOC_S_PARM, &parms) != kIoctlOk) {
     VLOG(1) << "Failed to issue VIDIOC_S_PARM command";
     return false;
   }
@@ -71,10 +75,10 @@
     base::Milliseconds(41);
 
 V4L2FrameRateControl::V4L2FrameRateControl(
-    scoped_refptr<V4L2Device> device,
+    const IoctlAsCallback& ioctl_cb,
     scoped_refptr<base::SequencedTaskRunner> task_runner)
-    : device_(device),
-      framerate_control_present_(FrameRateControlPresent(device)),
+    : ioctl_cb_(ioctl_cb),
+      framerate_control_present_(FrameRateControlPresent(ioctl_cb_)),
       current_frame_duration_avg_ms_(0),
       last_frame_display_time_(base::TimeTicks::Now()),
       frame_duration_moving_average_(kMovingAverageWindowSize),
@@ -110,7 +114,7 @@
     TRACE_COUNTER_ID1("media,gpu", "V4L2 estimated frame rate (Hz)", this,
                       std::round(frame_duration_avg.ToHz()));
 
-    if (device_->Ioctl(VIDIOC_S_PARM, &parms) != 0) {
+    if (ioctl_cb_.Run(VIDIOC_S_PARM, &parms) != kIoctlOk) {
       LOG(ERROR) << "Failed to issue VIDIOC_S_PARM command";
       TRACE_EVENT0("media,gpu", "V4L2 VIDIOC_S_PARM call failed");
     }
diff --git a/media/gpu/v4l2/v4l2_framerate_control.h b/media/gpu/v4l2/v4l2_framerate_control.h
index d003eb11..f2f4a2e7 100644
--- a/media/gpu/v4l2/v4l2_framerate_control.h
+++ b/media/gpu/v4l2/v4l2_framerate_control.h
@@ -11,7 +11,6 @@
 #include "base/task/sequenced_task_runner.h"
 #include "base/time/time.h"
 #include "media/base/video_frame.h"
-#include "media/gpu/v4l2/v4l2_device.h"
 
 namespace media {
 
@@ -23,7 +22,9 @@
 // can be decoded simultaneously.
 class V4L2FrameRateControl {
  public:
-  V4L2FrameRateControl(scoped_refptr<V4L2Device> device,
+  using IoctlAsCallback = base::RepeatingCallback<int(int, void*)>;
+
+  V4L2FrameRateControl(const IoctlAsCallback& ioctl_cb,
                        scoped_refptr<base::SequencedTaskRunner> task_runner);
   ~V4L2FrameRateControl();
 
@@ -43,7 +44,7 @@
  private:
   void UpdateFrameRate();
 
-  scoped_refptr<V4L2Device> device_;
+  const IoctlAsCallback ioctl_cb_;
   const bool framerate_control_present_;
   int64_t current_frame_duration_avg_ms_;
   base::TimeTicks last_frame_display_time_;
diff --git a/media/gpu/v4l2/v4l2_video_decoder_backend_stateful.cc b/media/gpu/v4l2/v4l2_video_decoder_backend_stateful.cc
index 41778ce..43c77d9 100644
--- a/media/gpu/v4l2/v4l2_video_decoder_backend_stateful.cc
+++ b/media/gpu/v4l2/v4l2_video_decoder_backend_stateful.cc
@@ -126,8 +126,8 @@
     return false;
   }
 
-  framerate_control_ =
-      std::make_unique<V4L2FrameRateControl>(device_, task_runner_);
+  framerate_control_ = std::make_unique<V4L2FrameRateControl>(
+      base::BindRepeating(&V4L2Device::Ioctl, device_), task_runner_);
 
   return true;
 }
diff --git a/media/mojo/mojom/media_metrics_provider.mojom b/media/mojo/mojom/media_metrics_provider.mojom
index b1109cd..fa2b5d2 100644
--- a/media/mojo/mojom/media_metrics_provider.mojom
+++ b/media/mojo/mojom/media_metrics_provider.mojom
@@ -68,6 +68,10 @@
   // be reported.
   SetKeySystem(string key_system);
 
+  // Called when the EME playback has been blocked waiting for the CDM to be set
+  // or waiting for decryption key.
+  SetHasWaitingForKey();
+
   // Called when the EME playback uses a hardware secure pipeline.
   SetIsHardwareSecure();
 
diff --git a/media/mojo/services/media_metrics_provider.cc b/media/mojo/services/media_metrics_provider.cc
index 235f7a2..11633ad8 100644
--- a/media/mojo/services/media_metrics_provider.cc
+++ b/media/mojo/services/media_metrics_provider.cc
@@ -82,6 +82,7 @@
   builder.SetIsMSE(media_info_->is_mse);
   builder.SetRendererType(static_cast<int>(renderer_type_));
   builder.SetKeySystem(GetKeySystemIntForUKM(key_system_));
+  builder.SetHasWaitingForKey(has_waiting_for_key_);
   builder.SetIsHardwareSecure(is_hardware_secure_);
   builder.SetAudioEncryptionType(
       static_cast<int>(uma_info_.audio_pipeline_info.encryption_type));
@@ -303,6 +304,10 @@
   key_system_ = key_system;
 }
 
+void MediaMetricsProvider::SetHasWaitingForKey() {
+  has_waiting_for_key_ = true;
+}
+
 void MediaMetricsProvider::SetIsHardwareSecure() {
   is_hardware_secure_ = true;
 }
diff --git a/media/mojo/services/media_metrics_provider.h b/media/mojo/services/media_metrics_provider.h
index 4ccd59c..500d170 100644
--- a/media/mojo/services/media_metrics_provider.h
+++ b/media/mojo/services/media_metrics_provider.h
@@ -112,6 +112,7 @@
       container_names::MediaContainerName container_name) override;
   void SetRendererType(RendererType renderer_type) override;
   void SetKeySystem(const std::string& key_system) override;
+  void SetHasWaitingForKey() override;
   void SetIsHardwareSecure() override;
   void SetHasAudio(AudioCodec audio_codec) override;
   void SetHasPlayed() override;
@@ -162,6 +163,7 @@
 
   RendererType renderer_type_ = RendererType::kRendererImpl;
   std::string key_system_;
+  bool has_waiting_for_key_ = false;
   bool is_hardware_secure_ = false;
 
   base::TimeDelta time_to_metadata_ = kNoTimestamp;
diff --git a/media/mojo/services/media_metrics_provider_unittest.cc b/media/mojo/services/media_metrics_provider_unittest.cc
index 25ac883..66540764 100644
--- a/media/mojo/services/media_metrics_provider_unittest.cc
+++ b/media/mojo/services/media_metrics_provider_unittest.cc
@@ -125,6 +125,7 @@
   Initialize(false, false, false, kTestOrigin2, mojom::MediaURLScheme::kHttps);
   provider_->SetIsEME();
   provider_->SetKeySystem(kClearKeyKeySystem);
+  provider_->SetHasWaitingForKey();
   provider_->SetIsHardwareSecure();
   provider_->SetAudioPipelineInfo(
       {false, false, AudioDecoderType::kMojo, EncryptionType::kClear});
@@ -149,6 +150,7 @@
       EXPECT_UKM(UkmEntry::kIsTopFrameName, false);
       EXPECT_UKM(UkmEntry::kIsEMEName, true);
       EXPECT_UKM(UkmEntry::kKeySystemName, 1);
+      EXPECT_UKM(UkmEntry::kHasWaitingForKeyName, true);
       EXPECT_UKM(UkmEntry::kIsHardwareSecureName, true);
       EXPECT_UKM(UkmEntry::kAudioEncryptionTypeName,
                  static_cast<int64_t>(EncryptionType::kClear));
diff --git a/media/video/vpx_video_encoder.cc b/media/video/vpx_video_encoder.cc
index 8df3bf3a..e2a5147 100644
--- a/media/video/vpx_video_encoder.cc
+++ b/media/video/vpx_video_encoder.cc
@@ -612,11 +612,11 @@
   }
 
   // Libvpx is very peculiar about encoded frame size changes,
-  // - VP8: As long as the frame area doesn't increase, internal codec
-  //        structures don't need to be reallocated and codec can be simply
-  //        reconfigured.
-  // - VP9: The codec cannot increase encoded width or height larger than their
-  //        initial values.
+  // - VP8: vpx_codec_enc_config_set() returns VPX_CODEC_INVALID_PARAM if we
+  //        try to increase encoded width or height larger than their initial
+  //        values.
+  // - VP9: The codec may crash if we try to increase encoded width or height
+  //        larger than their initial values.
   //
   // Mind the difference between old frame sizes:
   // - |originally_configured_size_| is set only once when the vpx_codec_ctx_t
@@ -625,19 +625,7 @@
   // More info can be found here:
   //   https://bugs.chromium.org/p/webm/issues/detail?id=1642
   //   https://bugs.chromium.org/p/webm/issues/detail?id=912
-  if (profile_ == VP8PROFILE_ANY) {
-    // VP8 resize restrictions
-    auto old_area = originally_configured_size_.GetCheckedArea();
-    auto new_area = options.frame_size.GetCheckedArea();
-    DCHECK(old_area.IsValid());
-    if (!new_area.IsValid() || new_area.ValueOrDie() > old_area.ValueOrDie()) {
-      auto status = EncoderStatus(
-          EncoderStatus::Codes::kEncoderUnsupportedConfig,
-          "libvpx/VP8 doesn't support dynamically increasing frame area");
-      std::move(done_cb).Run(std::move(status));
-      return;
-    }
-  } else {
+  if (profile_ != VP8PROFILE_ANY) {
     // VP9 resize restrictions
     if (options.frame_size.width() > originally_configured_size_.width() ||
         options.frame_size.height() > originally_configured_size_.height()) {
diff --git a/mojo/public/java/system/javatests/src/org/chromium/mojo/bindings/NullableValueTypesTest.java b/mojo/public/java/system/javatests/src/org/chromium/mojo/bindings/NullableValueTypesTest.java
index 6151477..6370622f 100644
--- a/mojo/public/java/system/javatests/src/org/chromium/mojo/bindings/NullableValueTypesTest.java
+++ b/mojo/public/java/system/javatests/src/org/chromium/mojo/bindings/NullableValueTypesTest.java
@@ -54,15 +54,11 @@
             remote.methodWithEnums(
                     inEnumValue,
                     inMappedEnumValue,
-                    new InterfaceV2.MethodWithEnums_Response() {
-                        @Override
-                        public void call(
-                                @Nullable @RegularEnum.EnumType Integer outEnumValue,
-                                @Nullable @TypemappedEnum.EnumType Integer outMappedEnumValue) {
-                            Assert.assertNull(outEnumValue);
-                            Assert.assertNull(outMappedEnumValue);
-                            mTestRule.quitLoop();
-                        }
+                    (@Nullable @RegularEnum.EnumType Integer outEnumValue,
+                            @Nullable @TypemappedEnum.EnumType Integer outMappedEnumValue) -> {
+                        Assert.assertNull(outEnumValue);
+                        Assert.assertNull(outMappedEnumValue);
+                        mTestRule.quitLoop();
                     });
             mTestRule.runLoopForever();
         }
@@ -74,13 +70,10 @@
 
             remote.methodWithStructWithEnums(
                     in,
-                    new InterfaceV2.MethodWithStructWithEnums_Response() {
-                        @Override
-                        public void call(StructWithEnums out) {
-                            Assert.assertNull(out.enumValue);
-                            Assert.assertNull(out.mappedEnumValue);
-                            mTestRule.quitLoop();
-                        }
+                    (StructWithEnums out) -> {
+                        Assert.assertNull(out.enumValue);
+                        Assert.assertNull(out.mappedEnumValue);
+                        mTestRule.quitLoop();
                     });
             mTestRule.runLoopForever();
         }
@@ -110,33 +103,29 @@
                     inI64Value,
                     inFloatValue,
                     inDoubleValue,
-                    new InterfaceV2.MethodWithNumerics_Response() {
-                        @Override
-                        public void call(
-                                @Nullable Boolean outBoolValue,
-                                @Nullable Byte outU8Value,
-                                @Nullable Short outU16Value,
-                                @Nullable Integer outU32Value,
-                                @Nullable Long outU64Value,
-                                @Nullable Byte outI8Value,
-                                @Nullable Short outI16Value,
-                                @Nullable Integer outI32Value,
-                                @Nullable Long outI64Value,
-                                @Nullable Float outFloatValue,
-                                @Nullable Double outDoubleValue) {
-                            Assert.assertNull(outBoolValue);
-                            Assert.assertNull(outU8Value);
-                            Assert.assertNull(outU16Value);
-                            Assert.assertNull(outU32Value);
-                            Assert.assertNull(outU64Value);
-                            Assert.assertNull(outI8Value);
-                            Assert.assertNull(outI16Value);
-                            Assert.assertNull(outI32Value);
-                            Assert.assertNull(outI64Value);
-                            Assert.assertNull(outFloatValue);
-                            Assert.assertNull(outDoubleValue);
-                            mTestRule.quitLoop();
-                        }
+                    (@Nullable Boolean outBoolValue,
+                            @Nullable Byte outU8Value,
+                            @Nullable Short outU16Value,
+                            @Nullable Integer outU32Value,
+                            @Nullable Long outU64Value,
+                            @Nullable Byte outI8Value,
+                            @Nullable Short outI16Value,
+                            @Nullable Integer outI32Value,
+                            @Nullable Long outI64Value,
+                            @Nullable Float outFloatValue,
+                            @Nullable Double outDoubleValue) -> {
+                        Assert.assertNull(outBoolValue);
+                        Assert.assertNull(outU8Value);
+                        Assert.assertNull(outU16Value);
+                        Assert.assertNull(outU32Value);
+                        Assert.assertNull(outU64Value);
+                        Assert.assertNull(outI8Value);
+                        Assert.assertNull(outI16Value);
+                        Assert.assertNull(outI32Value);
+                        Assert.assertNull(outI64Value);
+                        Assert.assertNull(outFloatValue);
+                        Assert.assertNull(outDoubleValue);
+                        mTestRule.quitLoop();
                     });
             mTestRule.runLoopForever();
         }
@@ -157,22 +146,19 @@
 
             remote.methodWithStructWithNumerics(
                     in,
-                    new InterfaceV2.MethodWithStructWithNumerics_Response() {
-                        @Override
-                        public void call(StructWithNumerics out) {
-                            Assert.assertNull(out.boolValue);
-                            Assert.assertNull(out.u8Value);
-                            Assert.assertNull(out.u16Value);
-                            Assert.assertNull(out.u32Value);
-                            Assert.assertNull(out.u64Value);
-                            Assert.assertNull(out.i8Value);
-                            Assert.assertNull(out.i16Value);
-                            Assert.assertNull(out.i32Value);
-                            Assert.assertNull(out.i64Value);
-                            Assert.assertNull(out.floatValue);
-                            Assert.assertNull(out.doubleValue);
-                            mTestRule.quitLoop();
-                        }
+                    (StructWithNumerics out) -> {
+                        Assert.assertNull(out.boolValue);
+                        Assert.assertNull(out.u8Value);
+                        Assert.assertNull(out.u16Value);
+                        Assert.assertNull(out.u32Value);
+                        Assert.assertNull(out.u64Value);
+                        Assert.assertNull(out.i8Value);
+                        Assert.assertNull(out.i16Value);
+                        Assert.assertNull(out.i32Value);
+                        Assert.assertNull(out.i64Value);
+                        Assert.assertNull(out.floatValue);
+                        Assert.assertNull(out.doubleValue);
+                        mTestRule.quitLoop();
                     });
             mTestRule.runLoopForever();
         }
@@ -194,15 +180,11 @@
             remote.methodWithEnums(
                     inEnumValue,
                     inMappedEnumValue,
-                    new InterfaceV2.MethodWithEnums_Response() {
-                        @Override
-                        public void call(
-                                @Nullable @RegularEnum.EnumType Integer outEnumValue,
-                                @Nullable @TypemappedEnum.EnumType Integer outMappedEnumValue) {
-                            Assert.assertEquals(inEnumValue, outEnumValue);
-                            Assert.assertEquals(inMappedEnumValue, outMappedEnumValue);
-                            mTestRule.quitLoop();
-                        }
+                    (@Nullable @RegularEnum.EnumType Integer outEnumValue,
+                            @Nullable @TypemappedEnum.EnumType Integer outMappedEnumValue) -> {
+                        Assert.assertEquals(inEnumValue, outEnumValue);
+                        Assert.assertEquals(inMappedEnumValue, outMappedEnumValue);
+                        mTestRule.quitLoop();
                     });
             mTestRule.runLoopForever();
         }
@@ -214,13 +196,10 @@
 
             remote.methodWithStructWithEnums(
                     in,
-                    new InterfaceV2.MethodWithStructWithEnums_Response() {
-                        @Override
-                        public void call(StructWithEnums out) {
-                            Assert.assertEquals(in.enumValue, out.enumValue);
-                            Assert.assertEquals(in.mappedEnumValue, out.mappedEnumValue);
-                            mTestRule.quitLoop();
-                        }
+                    (StructWithEnums out) -> {
+                        Assert.assertEquals(in.enumValue, out.enumValue);
+                        Assert.assertEquals(in.mappedEnumValue, out.mappedEnumValue);
+                        mTestRule.quitLoop();
                     });
             mTestRule.runLoopForever();
         }
@@ -250,33 +229,29 @@
                     inI64Value,
                     inFloatValue,
                     inDoubleValue,
-                    new InterfaceV2.MethodWithNumerics_Response() {
-                        @Override
-                        public void call(
-                                @Nullable Boolean outBoolValue,
-                                @Nullable Byte outU8Value,
-                                @Nullable Short outU16Value,
-                                @Nullable Integer outU32Value,
-                                @Nullable Long outU64Value,
-                                @Nullable Byte outI8Value,
-                                @Nullable Short outI16Value,
-                                @Nullable Integer outI32Value,
-                                @Nullable Long outI64Value,
-                                @Nullable Float outFloatValue,
-                                @Nullable Double outDoubleValue) {
-                            Assert.assertEquals(inBoolValue, outBoolValue);
-                            Assert.assertEquals(inU8Value, outU8Value);
-                            Assert.assertEquals(inU16Value, outU16Value);
-                            Assert.assertEquals(inU32Value, outU32Value);
-                            Assert.assertEquals(inU64Value, outU64Value);
-                            Assert.assertEquals(inI8Value, outI8Value);
-                            Assert.assertEquals(inI16Value, outI16Value);
-                            Assert.assertEquals(inI32Value, outI32Value);
-                            Assert.assertEquals(inI64Value, outI64Value);
-                            Assert.assertEquals(inFloatValue, outFloatValue);
-                            Assert.assertEquals(inDoubleValue, outDoubleValue);
-                            mTestRule.quitLoop();
-                        }
+                    (@Nullable Boolean outBoolValue,
+                            @Nullable Byte outU8Value,
+                            @Nullable Short outU16Value,
+                            @Nullable Integer outU32Value,
+                            @Nullable Long outU64Value,
+                            @Nullable Byte outI8Value,
+                            @Nullable Short outI16Value,
+                            @Nullable Integer outI32Value,
+                            @Nullable Long outI64Value,
+                            @Nullable Float outFloatValue,
+                            @Nullable Double outDoubleValue) -> {
+                        Assert.assertEquals(inBoolValue, outBoolValue);
+                        Assert.assertEquals(inU8Value, outU8Value);
+                        Assert.assertEquals(inU16Value, outU16Value);
+                        Assert.assertEquals(inU32Value, outU32Value);
+                        Assert.assertEquals(inU64Value, outU64Value);
+                        Assert.assertEquals(inI8Value, outI8Value);
+                        Assert.assertEquals(inI16Value, outI16Value);
+                        Assert.assertEquals(inI32Value, outI32Value);
+                        Assert.assertEquals(inI64Value, outI64Value);
+                        Assert.assertEquals(inFloatValue, outFloatValue);
+                        Assert.assertEquals(inDoubleValue, outDoubleValue);
+                        mTestRule.quitLoop();
                     });
             mTestRule.runLoopForever();
         }
@@ -297,22 +272,19 @@
 
             remote.methodWithStructWithNumerics(
                     in,
-                    new InterfaceV2.MethodWithStructWithNumerics_Response() {
-                        @Override
-                        public void call(StructWithNumerics out) {
-                            Assert.assertEquals(in.boolValue, out.boolValue);
-                            Assert.assertEquals(in.u8Value, out.u8Value);
-                            Assert.assertEquals(in.u16Value, out.u16Value);
-                            Assert.assertEquals(in.u32Value, out.u32Value);
-                            Assert.assertEquals(in.u64Value, out.u64Value);
-                            Assert.assertEquals(in.i8Value, out.i8Value);
-                            Assert.assertEquals(in.i16Value, out.i16Value);
-                            Assert.assertEquals(in.i32Value, out.i32Value);
-                            Assert.assertEquals(in.i64Value, out.i64Value);
-                            Assert.assertEquals(in.floatValue, out.floatValue);
-                            Assert.assertEquals(in.doubleValue, out.doubleValue);
-                            mTestRule.quitLoop();
-                        }
+                    (StructWithNumerics out) -> {
+                        Assert.assertEquals(in.boolValue, out.boolValue);
+                        Assert.assertEquals(in.u8Value, out.u8Value);
+                        Assert.assertEquals(in.u16Value, out.u16Value);
+                        Assert.assertEquals(in.u32Value, out.u32Value);
+                        Assert.assertEquals(in.u64Value, out.u64Value);
+                        Assert.assertEquals(in.i8Value, out.i8Value);
+                        Assert.assertEquals(in.i16Value, out.i16Value);
+                        Assert.assertEquals(in.i32Value, out.i32Value);
+                        Assert.assertEquals(in.i64Value, out.i64Value);
+                        Assert.assertEquals(in.floatValue, out.floatValue);
+                        Assert.assertEquals(in.doubleValue, out.doubleValue);
+                        mTestRule.quitLoop();
                     });
             mTestRule.runLoopForever();
         }
diff --git a/mojo/public/tools/bindings/generators/java_templates/interface_definition.tmpl b/mojo/public/tools/bindings/generators/java_templates/interface_definition.tmpl
index 72a57f5..8cdfc3d 100644
--- a/mojo/public/tools/bindings/generators/java_templates/interface_definition.tmpl
+++ b/mojo/public/tools/bindings/generators/java_templates/interface_definition.tmpl
@@ -21,7 +21,7 @@
 interface {{method|interface_response_name}} {
   public void call(
 {%- for param in method.response_parameters %}
-      {{param.kind|java_type(True)}} {{param|name}}
+      {{param.kind|java_type(false)}} {{param|name}}
 {%- if not loop.last %}, {% endif %}
 {%- endfor -%}
       );
@@ -277,7 +277,7 @@
         }
 
         @Override
-        public void call({{declare_params(method.response_parameters, true)}}) {
+        public void call({{declare_params(method.response_parameters)}}) {
             {{response_struct|name}} _response = new {{response_struct|name}}();
 {%   for param in method.response_parameters %}
             _response.{{param|name}} = {{param|name}};
diff --git a/net/base/features.cc b/net/base/features.cc
index cac95d61..895b534 100644
--- a/net/base/features.cc
+++ b/net/base/features.cc
@@ -404,6 +404,11 @@
     &kEnableIpProtectionProxy, /*name=*/"IpPrivacyUseProxyChains",
     /*default_value=*/false};
 
+const base::FeatureParam<bool> kIpPrivacyIncludeOAuthTokenInGetProxyConfig{
+    &kEnableIpProtectionProxy,
+    /*name=*/"IpPrivacyIncludeOAuthTokenInGetProxyConfig",
+    /*default_value=*/false};
+
 const base::FeatureParam<std::string> kIpPrivacyProxyAHostnameOverride{
     &kEnableIpProtectionProxy, /*name=*/"IpPrivacyProxyAHostnameOverride",
     /*default_value=*/""};
diff --git a/net/base/features.h b/net/base/features.h
index 32aef5e..d2072ff 100644
--- a/net/base/features.h
+++ b/net/base/features.h
@@ -427,6 +427,11 @@
 // `first_hop_hostnames` (and thus always single-proxy chains).
 NET_EXPORT extern const base::FeatureParam<bool> kIpPrivacyUseProxyChains;
 
+// If true, pass OAuth token to Phosphor in GetProxyConfig API for IP
+// Protection.
+NET_EXPORT extern const base::FeatureParam<bool>
+    kIpPrivacyIncludeOAuthTokenInGetProxyConfig;
+
 // Whether QuicParams::migrate_sessions_on_network_change_v2 defaults to true or
 // false. This is needed as a workaround to set this value to true on Android
 // but not on WebView (until crbug.com/1430082 has been fixed).
diff --git a/net/cert/cert_verify_proc.h b/net/cert/cert_verify_proc.h
index c94402d..ab10457 100644
--- a/net/cert/cert_verify_proc.h
+++ b/net/cert/cert_verify_proc.h
@@ -19,6 +19,7 @@
 #include "net/cert/ct_policy_enforcer.h"
 #include "net/cert/ct_verifier.h"
 #include "net/net_buildflags.h"
+#include "third_party/boringssl/src/pki/parsed_certificate.h"
 
 #if BUILDFLAG(CHROME_ROOT_STORE_SUPPORTED)
 #include "net/cert/internal/trust_store_chrome.h"
@@ -108,21 +109,17 @@
     InstanceParams(InstanceParams&&);
     InstanceParams& operator=(InstanceParams&& other);
 
-    // TODO(crbug.com/1477317): store these as ParsedCertificateList here so
-    // that it only needs to be done once since the same InstanceParams can be
-    // used to create a CertVerifyProc multiple times.
-
     // Additional trust anchors to consider during path validation. Ordinarily,
     // implementations of CertVerifier use trust anchors from the configured
     // system store. This is implementation-specific plumbing for passing
     // additional anchors through.
-    CertificateList additional_trust_anchors;
+    bssl::ParsedCertificateList additional_trust_anchors;
 
     // Additional temporary certs to consider as intermediates during path
     // validation. Ordinarily, implementations of CertVerifier use intermediate
     // certs from the configured system store. This is implementation-specific
     // plumbing for passing additional intermediates through.
-    CertificateList additional_untrusted_authorities;
+    bssl::ParsedCertificateList additional_untrusted_authorities;
 
     //  Additional SPKIs to consider as distrusted during path validation.
     std::vector<std::vector<uint8_t>> additional_distrusted_spkis;
diff --git a/net/cert/cert_verify_proc_builtin.cc b/net/cert/cert_verify_proc_builtin.cc
index 92b810a8..37673270 100644
--- a/net/cert/cert_verify_proc_builtin.cc
+++ b/net/cert/cert_verify_proc_builtin.cc
@@ -544,37 +544,29 @@
     });
   }
 
-  // Parse the additional certificates and setup trust store.
-  for (const auto& x509_cert : instance_params.additional_trust_anchors) {
+  for (const auto& cert : instance_params.additional_trust_anchors) {
     bssl::CertErrors parsing_errors;
-    std::shared_ptr<const bssl::ParsedCertificate> cert =
-        ParseCertificateFromBuffer(x509_cert->cert_buffer(), &parsing_errors);
-    if (cert) {
-      additional_trust_store_.AddTrustAnchor(std::move(cert));
-    }
+    additional_trust_store_.AddTrustAnchor(std::move(cert));
     net_log.AddEvent(NetLogEventType::CERT_VERIFY_PROC_ADDITIONAL_CERT, [&] {
-      return NetLogAdditionalCert(x509_cert->cert_buffer(),
+      return NetLogAdditionalCert(cert->cert_buffer(),
                                   bssl::CertificateTrust::ForTrustAnchor(),
                                   parsing_errors);
     });
   }
 
-  for (const auto& x509_cert :
-       instance_params.additional_untrusted_authorities) {
+  for (const auto& cert : instance_params.additional_untrusted_authorities) {
     bssl::CertErrors parsing_errors;
-    std::shared_ptr<const bssl::ParsedCertificate> cert =
-        ParseCertificateFromBuffer(x509_cert->cert_buffer(), &parsing_errors);
     // Only add the untrusted cert if it isn't already present in
     // `additional_trust_store_`. If the same cert was already added as a
     // trust anchor then adding it again as an untrusted cert can lead to it
     // not being treated as a trust anchor since TrustStoreInMemory doesn't
     // expect to contain duplicates.
-    if (cert && !additional_trust_store_.Contains(cert.get())) {
+    if (!additional_trust_store_.Contains(cert.get())) {
       additional_trust_store_.AddCertificateWithUnspecifiedTrust(
           std::move(cert));
     }
     net_log.AddEvent(NetLogEventType::CERT_VERIFY_PROC_ADDITIONAL_CERT, [&] {
-      return NetLogAdditionalCert(x509_cert->cert_buffer(),
+      return NetLogAdditionalCert(cert->cert_buffer(),
                                   bssl::CertificateTrust::ForUnspecified(),
                                   parsing_errors);
     });
diff --git a/net/cert/cert_verify_proc_builtin_unittest.cc b/net/cert/cert_verify_proc_builtin_unittest.cc
index 3b47753..6e5acfbf 100644
--- a/net/cert/cert_verify_proc_builtin_unittest.cc
+++ b/net/cert/cert_verify_proc_builtin_unittest.cc
@@ -211,7 +211,8 @@
     auto mock_system_trust_store = std::make_unique<MockSystemTrustStore>();
     mock_system_trust_store_ = mock_system_trust_store.get();
     CertVerifyProc::InstanceParams instance_params;
-    instance_params.additional_trust_anchors = additional_trust_anchors;
+    instance_params.additional_trust_anchors =
+        net::x509_util::ParseAllCerts(additional_trust_anchors);
     std::vector<std::vector<uint8_t>> distrusted_spkis;
     for (const auto& x509_cert : additional_distrusted_certificates) {
       std::shared_ptr<const bssl::ParsedCertificate> cert =
diff --git a/net/cert/cert_verify_proc_unittest.cc b/net/cert/cert_verify_proc_unittest.cc
index 6e365cfa..dc09347 100644
--- a/net/cert/cert_verify_proc_unittest.cc
+++ b/net/cert/cert_verify_proc_unittest.cc
@@ -203,9 +203,10 @@
     CertificateList additional_trust_anchors,
     CertificateList additional_untrusted_authorities) {
   CertVerifyProc::InstanceParams instance_params;
-  instance_params.additional_trust_anchors = additional_trust_anchors;
+  instance_params.additional_trust_anchors =
+      net::x509_util::ParseAllCerts(additional_trust_anchors);
   instance_params.additional_untrusted_authorities =
-      additional_untrusted_authorities;
+      net::x509_util::ParseAllCerts(additional_untrusted_authorities);
   switch (type) {
 #if BUILDFLAG(IS_ANDROID)
     case CERT_VERIFY_PROC_ANDROID:
diff --git a/net/cert/x509_util.cc b/net/cert/x509_util.cc
index 91d6362..44bec6d 100644
--- a/net/cert/x509_util.cc
+++ b/net/cert/x509_util.cc
@@ -167,6 +167,22 @@
   return true;
 }
 
+bssl::ParsedCertificateList ParseAllCerts(
+    const net::CertificateList x509_certs) {
+  bssl::ParsedCertificateList parsed_certs;
+  for (const auto& x509_cert : x509_certs) {
+    std::shared_ptr<const bssl::ParsedCertificate> cert =
+        bssl::ParsedCertificate::Create(
+            bssl::UpRef(x509_cert->cert_buffer()),
+            net::x509_util::DefaultParseCertificateOptions(), NULL);
+    if (cert) {
+      parsed_certs.push_back(std::move(cert));
+    }
+  }
+
+  return parsed_certs;
+}
+
 bool CBBAddTime(CBB* cbb, base::Time time) {
   bssl::der::GeneralizedTime generalized_time;
   if (!EncodeTimeAsGeneralizedTime(time, &generalized_time)) {
diff --git a/net/cert/x509_util.h b/net/cert/x509_util.h
index 214eea8e..59bd98b 100644
--- a/net/cert/x509_util.h
+++ b/net/cert/x509_util.h
@@ -18,6 +18,7 @@
 #include "crypto/signature_verifier.h"
 #include "net/base/hash_value.h"
 #include "net/base/net_export.h"
+#include "net/cert/x509_certificate.h"
 #include "third_party/boringssl/src/include/openssl/base.h"
 #include "third_party/boringssl/src/include/openssl/pool.h"
 #include "third_party/boringssl/src/pki/parsed_certificate.h"
@@ -28,10 +29,13 @@
 
 namespace net {
 
-class X509Certificate;
-
 namespace x509_util {
 
+// Parse all certificiates with default parsing options. Return those that
+// parse.
+NET_EXPORT bssl::ParsedCertificateList ParseAllCerts(
+    net::CertificateList x509_certs);
+
 // Supported digest algorithms for signing certificates.
 enum DigestAlgorithm { DIGEST_SHA256 };
 
diff --git a/net/first_party_sets/sets_mutation.cc b/net/first_party_sets/sets_mutation.cc
index 5c2f0e1..7b224a1 100644
--- a/net/first_party_sets/sets_mutation.cc
+++ b/net/first_party_sets/sets_mutation.cc
@@ -39,7 +39,9 @@
 
 SetsMutation::SetsMutation() = default;
 SetsMutation::SetsMutation(SetsMutation&&) = default;
+SetsMutation& SetsMutation::operator=(SetsMutation&&) = default;
 SetsMutation::SetsMutation(const SetsMutation&) = default;
+SetsMutation& SetsMutation::operator=(const SetsMutation&) = default;
 SetsMutation::~SetsMutation() = default;
 
 bool SetsMutation::operator==(const SetsMutation& other) const = default;
diff --git a/services/cert_verifier/cert_verifier_service.cc b/services/cert_verifier/cert_verifier_service.cc
index a98a7ee..17e1151 100644
--- a/services/cert_verifier/cert_verifier_service.cc
+++ b/services/cert_verifier/cert_verifier_service.cc
@@ -11,6 +11,7 @@
 #include "net/base/completion_once_callback.h"
 #include "net/cert/cert_verify_result.h"
 #include "net/cert/crl_set.h"
+#include "net/cert/x509_util.h"
 #include "services/cert_verifier/cert_net_url_loader/cert_net_fetcher_url_loader.h"
 #include "services/cert_verifier/cert_verifier_service_factory.h"
 #include "services/network/public/mojom/cert_verifier_service.mojom.h"
@@ -133,9 +134,9 @@
 void CertVerifierServiceImpl::UpdateAdditionalCertificates(
     mojom::AdditionalCertificatesPtr additional_certificates) {
   instance_params_.additional_trust_anchors =
-      additional_certificates->trust_anchors;
+      net::x509_util::ParseAllCerts(additional_certificates->trust_anchors);
   instance_params_.additional_untrusted_authorities =
-      additional_certificates->all_certificates;
+      net::x509_util::ParseAllCerts(additional_certificates->all_certificates);
   instance_params_.additional_distrusted_spkis =
       additional_certificates->distrusted_spkis;
 
diff --git a/services/cert_verifier/cert_verifier_service_factory.cc b/services/cert_verifier/cert_verifier_service_factory.cc
index bdb3cf9..d7bb99b 100644
--- a/services/cert_verifier/cert_verifier_service_factory.cc
+++ b/services/cert_verifier/cert_verifier_service_factory.cc
@@ -23,6 +23,7 @@
 #include "net/cert/cert_net_fetcher.h"
 #include "net/cert/cert_verifier.h"
 #include "net/cert/crl_set.h"
+#include "net/cert/x509_util.h"
 #include "net/net_buildflags.h"
 #include "services/cert_verifier/cert_net_url_loader/cert_net_fetcher_url_loader.h"
 #include "services/cert_verifier/cert_verifier_service.h"
@@ -68,10 +69,11 @@
   // Populate initial instance params from creation params.
   net::CertVerifyProc::InstanceParams instance_params;
   if (creation_params->initial_additional_certificates) {
-    instance_params.additional_trust_anchors =
-        creation_params->initial_additional_certificates->trust_anchors;
+    instance_params.additional_trust_anchors = net::x509_util::ParseAllCerts(
+        creation_params->initial_additional_certificates->trust_anchors);
     instance_params.additional_untrusted_authorities =
-        creation_params->initial_additional_certificates->all_certificates;
+        net::x509_util::ParseAllCerts(
+            creation_params->initial_additional_certificates->all_certificates);
     instance_params.additional_distrusted_spkis =
         creation_params->initial_additional_certificates->distrusted_spkis;
   }
diff --git a/services/media_session/public/mojom/media_session.mojom b/services/media_session/public/mojom/media_session.mojom
index deaae16..7bbf087 100644
--- a/services/media_session/public/mojom/media_session.mojom
+++ b/services/media_session/public/mojom/media_session.mojom
@@ -76,6 +76,15 @@
   array<gfx.mojom.Size> sizes;
 };
 
+// Chapter info in MediaMetadata
+// Spec: https://wicg.github.io/mediasession/
+[Stable]
+struct ChapterInformation {
+  mojo_base.mojom.String16 title;
+  mojo_base.mojom.TimeDelta startTime;
+  array<MediaImage> artwork;
+};
+
 // MediaMetadata
 [Stable]
 struct MediaMetadata {
diff --git a/services/network/conditional_cache_deletion_helper.h b/services/network/conditional_cache_deletion_helper.h
index e1fa74e..6e23125 100644
--- a/services/network/conditional_cache_deletion_helper.h
+++ b/services/network/conditional_cache_deletion_helper.h
@@ -58,10 +58,7 @@
   base::OnceClosure completion_callback_;
 
   std::unique_ptr<disk_cache::Backend::Iterator> iterator_;
-  // This dangling raw_ptr occurred in:
-  // content_unittests: StoragePartitionImplTest.ClearCodeCacheSpecificURL
-  // https://ci.chromium.org/ui/p/chromium/builders/try/linux-rel/1425174/test-results?q=ExactID%3Aninja%3A%2F%2Fcontent%2Ftest%3Acontent_unittests%2FStoragePartitionImplTest.ClearCodeCacheSpecificURL+VHash%3Ab3ba0803668e9981
-  raw_ptr<disk_cache::Entry, FlakyDanglingUntriaged> previous_entry_ = nullptr;
+  raw_ptr<disk_cache::Entry> previous_entry_ = nullptr;
 
   base::WeakPtrFactory<ConditionalCacheDeletionHelper> weak_factory_{this};
 };
diff --git a/services/service_manager/public/java/src/org/chromium/services/service_manager/Connector.java b/services/service_manager/public/java/src/org/chromium/services/service_manager/Connector.java
index 039c66e..f73f3af 100644
--- a/services/service_manager/public/java/src/org/chromium/services/service_manager/Connector.java
+++ b/services/service_manager/public/java/src/org/chromium/services/service_manager/Connector.java
@@ -19,7 +19,7 @@
     private static class ConnectorBindInterfaceResponseImpl
             implements org.chromium.service_manager.mojom.Connector.BindInterface_Response {
         @Override
-        public void call(Integer result, Identity identity) {}
+        public void call(int result, Identity identity) {}
     }
 
     public Connector(MessagePipeHandle handle) {
diff --git a/testing/buildbot/filters/android.emulator_12l.chrome_public_test_apk.filter b/testing/buildbot/filters/android.emulator_12l.chrome_public_test_apk.filter
index cdda1d2..761e86dd 100644
--- a/testing/buildbot/filters/android.emulator_12l.chrome_public_test_apk.filter
+++ b/testing/buildbot/filters/android.emulator_12l.chrome_public_test_apk.filter
@@ -76,6 +76,8 @@
 
 # crbug.com/1416433
 -org.chromium.chrome.browser.externalnav.UrlOverridingTest.testIntentURIWithFileSchemeDoesNothing
+-org.chromium.chrome.browser.externalnav.UrlOverridingTest.testNavigationWithFallbackURL
+
 
 # crbug.com/1432046
 -org.chromium.chrome.browser.DragAndDropLauncherActivityTest.testDragAndDropLauncherActivity_openInExistingTabbedActivity
@@ -100,6 +102,8 @@
 # crbug.com/1511804
 -org.chromium.chrome.browser.tasks.tab_management.SelectableTabListEditorTest.testToolbarMenuItem_GroupActionAndUndo
 -org.chromium.chrome.browser.tasks.tab_management.SelectableTabListEditorTest.testToolbarMenuItem_ShareActionGroupsOnly
+-org.chromium.chrome.browser.tasks.tab_management.SelectableTabListEditorTest.testToolbarMenuItem_ShareActionTabsOnly
+-org.chromium.chrome.browser.tasks.tab_management.SelectableTabListEditorTest.testToolbarMenuItem_ShareActionTabsWithGroups
 -org.chromium.chrome.browser.tasks.tab_management.SelectableTabListEditorTest.testToolbarMenuItem_ShareActionView
 -org.chromium.chrome.browser.tasks.tab_management.SelectableTabListEditorTest.testUndoToolbarGroup
 
@@ -114,6 +118,7 @@
 
 # crbug.com/1512251
 -org.chromium.chrome.browser.incognito.IncognitoStorageLeakageTest.testStorageDoesNotLeakFromActivityToActivity__REGULAR_CCT_INCOGNITO_CCT
+-org.chromium.chrome.browser.incognito.IncognitoStorageLeakageTest.testStorageDoesNotLeakFromActivityToActivity__REGULAR_CCT_INCOGNITO_TAB
 -org.chromium.chrome.browser.incognito.IncognitoStorageLeakageTest.testStorageDoesNotLeakFromActivityToActivity__REGULAR_CCT_REGULAR_CCT
 -org.chromium.chrome.browser.incognito.IncognitoStorageLeakageTest.testStorageDoesNotLeakFromActivityToActivity__REGULAR_CCT_REGULAR_TAB
 
@@ -141,3 +146,32 @@
 
 # crbug.com/1513303
 -org.chromium.chrome.browser.ui.system.StatusBarColorControllerTest.testStatusBarColorForTabStripRedesignFolioTablet
+
+# crbug.com/1513557
+-org.chromium.chrome.browser.NavigateTest.testTabObserverOnPageLoadStarted
+
+# crbug.com/1513561
+-org.chromium.chrome.browser.keyboard_accessory.ManualFillingIntegrationTest.testInfobarStaysHiddenWhileChangingFieldsWithOpenKeyboard
+
+# crbug.com/1513564
+-org.chromium.chrome.browser.page_info.PageInfoViewDarkModeTest.testChromePage
+
+# crbug.com/1513565
+-org.chromium.chrome.browser.permissions.GeolocationTest.testGeolocationWatchDialog
+-org.chromium.chrome.browser.permissions.MediaTest.testCombinedPermissionsPlumbingDialog
+-org.chromium.chrome.browser.permissions.RuntimePermissionTest.testDenyAndNeverAskCamera
+
+# crbug.com/1513566
+-org.chromium.chrome.browser.privacy_sandbox.TrackingProtectionNoticeTest.testNoticeShownOnlyOnSecurePage
+
+# crbug.com/1513568
+-org.chromium.chrome.browser.tab.InterceptNavigationDelegateTest.testExternalAppPrerenderingNavigation
+
+# crbug.com/1513570
+-org.chromium.chrome.browser.usage_stats.TabSuspensionTest.testSuspendNullCurrentTab
+
+# crbug.com/1513571
+-org.chromium.chrome.browser.webshare.WebShareTest.testWebShareSeparator
+
+# crbug.com/1513573
+-org.chromium.chrome.features.start_surface.ShowNtpAtStartupTest.testThumbnailRecaptureForSingleTabCardAfterMostRecentTabClosed
diff --git a/testing/variations/fieldtrial_testing_config.json b/testing/variations/fieldtrial_testing_config.json
index 855326d..59167f3 100644
--- a/testing/variations/fieldtrial_testing_config.json
+++ b/testing/variations/fieldtrial_testing_config.json
@@ -9502,6 +9502,25 @@
             ]
         }
     ],
+    "ImprovedDownloadPageWarnings": [
+        {
+            "platforms": [
+                "chromeos",
+                "chromeos_lacros",
+                "linux",
+                "mac",
+                "windows"
+            ],
+            "experiments": [
+                {
+                    "name": "Enabled",
+                    "enable_features": [
+                        "ImprovedDownloadPageWarnings"
+                    ]
+                }
+            ]
+        }
+    ],
     "ImprovedSemanticsActivityIndicators": [
         {
             "platforms": [
@@ -12503,6 +12522,22 @@
             ]
         }
     ],
+    "OsSettingsRevampWayfindingStudy": [
+        {
+            "platforms": [
+                "chromeos",
+                "chromeos_lacros"
+            ],
+            "experiments": [
+                {
+                    "name": "Enabled",
+                    "enable_features": [
+                        "OsSettingsRevampWayfinding"
+                    ]
+                }
+            ]
+        }
+    ],
     "OutOfProcessPrintDriversPrint": [
         {
             "platforms": [
diff --git a/third_party/.gitignore b/third_party/.gitignore
index b3a5540..563c82b8 100644
--- a/third_party/.gitignore
+++ b/third_party/.gitignore
@@ -137,6 +137,7 @@
 /rust-toolchain-intermediate
 /scan-build/src
 /scons-2.0.1
+/screen-ai/linux/
 /shaka-player/dist/
 /siso/siso
 /siso/siso.exe
diff --git a/third_party/abseil-cpp/absl/status/BUILD.gn b/third_party/abseil-cpp/absl/status/BUILD.gn
index 1568891..1f76514 100644
--- a/third_party/abseil-cpp/absl/status/BUILD.gn
+++ b/third_party/abseil-cpp/absl/status/BUILD.gn
@@ -77,6 +77,7 @@
     ":statusor",
     "//third_party/abseil-cpp/absl/base",
     "//third_party/abseil-cpp/absl/memory",
+    "//third_party/abseil-cpp/absl/strings",
     "//third_party/abseil-cpp/absl/strings:string_view",
     "//third_party/abseil-cpp/absl/types:any",
     "//third_party/abseil-cpp/absl/types:variant",
diff --git a/third_party/android_deps/additional_readme_paths.json b/third_party/android_deps/additional_readme_paths.json
index 4b24c1a..05a409d 100644
--- a/third_party/android_deps/additional_readme_paths.json
+++ b/third_party/android_deps/additional_readme_paths.json
@@ -51,8 +51,6 @@
     "libs/com_google_android_gms_play_services_places_placereport",
     "libs/com_google_android_gms_play_services_stats",
     "libs/com_google_android_gms_play_services_tasks",
-    "libs/com_google_android_gms_play_services_tflite_impl",
-    "libs/com_google_android_gms_play_services_tflite_java",
     "libs/com_google_android_gms_play_services_vision",
     "libs/com_google_android_gms_play_services_vision_common",
     "libs/com_google_android_material_material",
@@ -152,6 +150,5 @@
     "libs/org_robolectric_shadows_framework",
     "libs/org_robolectric_shadows_versioning",
     "libs/org_robolectric_utils",
-    "libs/org_robolectric_utils_reflector",
-    "libs/org_tensorflow_tensorflow_lite_api"
+    "libs/org_robolectric_utils_reflector"
 ]
diff --git a/third_party/android_deps/build.gradle b/third_party/android_deps/build.gradle
index 88385782..39fcef4 100644
--- a/third_party/android_deps/build.gradle
+++ b/third_party/android_deps/build.gradle
@@ -84,7 +84,6 @@
     compile 'com.google.android.gms:play-services-location:19.0.1'
     compile 'com.google.android.gms:play-services-vision-common:19.1.3'
     compile 'com.google.android.gms:play-services-vision:20.1.3'
-    compile 'com.google.android.gms:play-services-tflite-java:16.0.1'
 
     // TODO (bjoyce): Remove after androidx migration crbug.com/896775
     // Support v4 libraries
diff --git a/third_party/android_deps/buildSrc/src/main/groovy/ChromiumDepGraph.groovy b/third_party/android_deps/buildSrc/src/main/groovy/ChromiumDepGraph.groovy
index 24ad1d0..dbbe450 100644
--- a/third_party/android_deps/buildSrc/src/main/groovy/ChromiumDepGraph.groovy
+++ b/third_party/android_deps/buildSrc/src/main/groovy/ChromiumDepGraph.groovy
@@ -40,10 +40,6 @@
             exclude: true),  // We're not using datatransport functionality.
         com_google_android_gms_play_services_cloud_messaging: new PropertyOverride(
             description: 'Firebase Cloud Messaging library that interfaces with GmsCore.'),
-        com_google_android_gms_play_services_tflite_java: new PropertyOverride(
-            overrideLatest: true),
-        com_google_android_gms_play_services_tflite_impl: new PropertyOverride(
-            overrideLatest: true),
         com_google_auto_auto_common: new PropertyOverride(
             licenseUrl: 'https://www.apache.org/licenses/LICENSE-2.0.txt',
             licenseName: 'Apache 2.0'),
@@ -140,8 +136,6 @@
             licenseUrl: 'https://www.eclipse.org/org/documents/edl-v10.html',
             licensePath: 'licenses/Eclipse_EDL.txt',
             licenseName: 'BSD 3-Clause'),
-        org_tensorflow_tensorflow_lite_api: new PropertyOverride(
-            overrideLatest: true),
         com_google_protobuf_protobuf_java: new PropertyOverride(
             url: 'https://github.com/protocolbuffers/protobuf/blob/master/java/README.md',
             licenseUrl: 'https://raw.githubusercontent.com/protocolbuffers/protobuf/master/LICENSE',
diff --git a/third_party/android_deps/libs/com_google_android_gms_play_services_base/3pp/fetch.py b/third_party/android_deps/libs/com_google_android_gms_play_services_base/3pp/fetch.py
index 769c7a51..52fce67 100755
--- a/third_party/android_deps/libs/com_google_android_gms_play_services_base/3pp/fetch.py
+++ b/third_party/android_deps/libs/com_google_android_gms_play_services_base/3pp/fetch.py
@@ -19,7 +19,7 @@
                          module_name='play-services-base',
                          file_ext='aar',
                          patch_version='cr1',
-                         version_override='18.1.0',
+                         version_override=None,
                          version_filter=None)
 
 
diff --git a/third_party/android_deps/libs/com_google_android_gms_play_services_base/LICENSE b/third_party/android_deps/libs/com_google_android_gms_play_services_base/LICENSE
index e712e0b..75a5a97 100644
--- a/third_party/android_deps/libs/com_google_android_gms_play_services_base/LICENSE
+++ b/third_party/android_deps/libs/com_google_android_gms_play_services_base/LICENSE
@@ -147,584 +147,6 @@
 December 9, 2016
 
 
-AndroidX annotation experimental library:
-
-
- Copyright (c) 2005-2011, 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.
-
-   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.
-
-
-                                 Apache License
-                           Version 2.0, January 2004
-                        http://www.apache.org/licenses/
-
-   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
-
-   1. Definitions.
-
-      "License" shall mean the terms and conditions for use, reproduction,
-      and distribution as defined by Sections 1 through 9 of this document.
-
-      "Licensor" shall mean the copyright owner or entity authorized by
-      the copyright owner that is granting the License.
-
-      "Legal Entity" shall mean the union of the acting entity and all
-      other entities that control, are controlled by, or are under common
-      control with that entity. For the purposes of this definition,
-      "control" means (i) the power, direct or indirect, to cause the
-      direction or management of such entity, whether by contract or
-      otherwise, or (ii) ownership of fifty percent (50%) or more of the
-      outstanding shares, or (iii) beneficial ownership of such entity.
-
-      "You" (or "Your") shall mean an individual or Legal Entity
-      exercising permissions granted by this License.
-
-      "Source" form shall mean the preferred form for making modifications,
-      including but not limited to software source code, documentation
-      source, and configuration files.
-
-      "Object" form shall mean any form resulting from mechanical
-      transformation or translation of a Source form, including but
-      not limited to compiled object code, generated documentation,
-      and conversions to other media types.
-
-      "Work" shall mean the work of authorship, whether in Source or
-      Object form, made available under the License, as indicated by a
-      copyright notice that is included in or attached to the work
-      (an example is provided in the Appendix below).
-
-      "Derivative Works" shall mean any work, whether in Source or Object
-      form, that is based on (or derived from) the Work and for which the
-      editorial revisions, annotations, elaborations, or other modifications
-      represent, as a whole, an original work of authorship. For the purposes
-      of this License, Derivative Works shall not include works that remain
-      separable from, or merely link (or bind by name) to the interfaces of,
-      the Work and Derivative Works thereof.
-
-      "Contribution" shall mean any work of authorship, including
-      the original version of the Work and any modifications or additions
-      to that Work or Derivative Works thereof, that is intentionally
-      submitted to Licensor for inclusion in the Work by the copyright owner
-      or by an individual or Legal Entity authorized to submit on behalf of
-      the copyright owner. For the purposes of this definition, "submitted"
-      means any form of electronic, verbal, or written communication sent
-      to the Licensor or its representatives, including but not limited to
-      communication on electronic mailing lists, source code control systems,
-      and issue tracking systems that are managed by, or on behalf of, the
-      Licensor for the purpose of discussing and improving the Work, but
-      excluding communication that is conspicuously marked or otherwise
-      designated in writing by the copyright owner as "Not a Contribution."
-
-      "Contributor" shall mean Licensor and any individual or Legal Entity
-      on behalf of whom a Contribution has been received by Licensor and
-      subsequently incorporated within the Work.
-
-   2. Grant of Copyright License. Subject to the terms and conditions of
-      this License, each Contributor hereby grants to You a perpetual,
-      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
-      copyright license to reproduce, prepare Derivative Works of,
-      publicly display, publicly perform, sublicense, and distribute the
-      Work and such Derivative Works in Source or Object form.
-
-   3. Grant of Patent License. Subject to the terms and conditions of
-      this License, each Contributor hereby grants to You a perpetual,
-      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
-      (except as stated in this section) patent license to make, have made,
-      use, offer to sell, sell, import, and otherwise transfer the Work,
-      where such license applies only to those patent claims licensable
-      by such Contributor that are necessarily infringed by their
-      Contribution(s) alone or by combination of their Contribution(s)
-      with the Work to which such Contribution(s) was submitted. If You
-      institute patent litigation against any entity (including a
-      cross-claim or counterclaim in a lawsuit) alleging that the Work
-      or a Contribution incorporated within the Work constitutes direct
-      or contributory patent infringement, then any patent licenses
-      granted to You under this License for that Work shall terminate
-      as of the date such litigation is filed.
-
-   4. Redistribution. You may reproduce and distribute copies of the
-      Work or Derivative Works thereof in any medium, with or without
-      modifications, and in Source or Object form, provided that You
-      meet the following conditions:
-
-      (a) You must give any other recipients of the Work or
-          Derivative Works a copy of this License; and
-
-      (b) You must cause any modified files to carry prominent notices
-          stating that You changed the files; and
-
-      (c) You must retain, in the Source form of any Derivative Works
-          that You distribute, all copyright, patent, trademark, and
-          attribution notices from the Source form of the Work,
-          excluding those notices that do not pertain to any part of
-          the Derivative Works; and
-
-      (d) If the Work includes a "NOTICE" text file as part of its
-          distribution, then any Derivative Works that You distribute must
-          include a readable copy of the attribution notices contained
-          within such NOTICE file, excluding those notices that do not
-          pertain to any part of the Derivative Works, in at least one
-          of the following places: within a NOTICE text file distributed
-          as part of the Derivative Works; within the Source form or
-          documentation, if provided along with the Derivative Works; or,
-          within a display generated by the Derivative Works, if and
-          wherever such third-party notices normally appear. The contents
-          of the NOTICE file are for informational purposes only and
-          do not modify the License. You may add Your own attribution
-          notices within Derivative Works that You distribute, alongside
-          or as an addendum to the NOTICE text from the Work, provided
-          that such additional attribution notices cannot be construed
-          as modifying the License.
-
-      You may add Your own copyright statement to Your modifications and
-      may provide additional or different license terms and conditions
-      for use, reproduction, or distribution of Your modifications, or
-      for any such Derivative Works as a whole, provided Your use,
-      reproduction, and distribution of the Work otherwise complies with
-      the conditions stated in this License.
-
-   5. Submission of Contributions. Unless You explicitly state otherwise,
-      any Contribution intentionally submitted for inclusion in the Work
-      by You to the Licensor shall be under the terms and conditions of
-      this License, without any additional terms or conditions.
-      Notwithstanding the above, nothing herein shall supersede or modify
-      the terms of any separate license agreement you may have executed
-      with Licensor regarding such Contributions.
-
-   6. Trademarks. This License does not grant permission to use the trade
-      names, trademarks, service marks, or product names of the Licensor,
-      except as required for reasonable and customary use in describing the
-      origin of the Work and reproducing the content of the NOTICE file.
-
-   7. Disclaimer of Warranty. Unless required by applicable law or
-      agreed to in writing, Licensor provides the Work (and each
-      Contributor provides its Contributions) on an "AS IS" BASIS,
-      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
-      implied, including, without limitation, any warranties or conditions
-      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
-      PARTICULAR PURPOSE. You are solely responsible for determining the
-      appropriateness of using or redistributing the Work and assume any
-      risks associated with Your exercise of permissions under this License.
-
-   8. Limitation of Liability. In no event and under no legal theory,
-      whether in tort (including negligence), contract, or otherwise,
-      unless required by applicable law (such as deliberate and grossly
-      negligent acts) or agreed to in writing, shall any Contributor be
-      liable to You for damages, including any direct, indirect, special,
-      incidental, or consequential damages of any character arising as a
-      result of this License or out of the use or inability to use the
-      Work (including but not limited to damages for loss of goodwill,
-      work stoppage, computer failure or malfunction, or any and all
-      other commercial damages or losses), even if such Contributor
-      has been advised of the possibility of such damages.
-
-   9. Accepting Warranty or Additional Liability. While redistributing
-      the Work or Derivative Works thereof, You may choose to offer,
-      and charge a fee for, acceptance of support, warranty, indemnity,
-      or other liability obligations and/or rights consistent with this
-      License. However, in accepting such obligations, You may act only
-      on Your own behalf and on Your sole responsibility, not on behalf
-      of any other Contributor, and only if You agree to indemnify,
-      defend, and hold each Contributor harmless for any liability
-      incurred by, or claims asserted against, such Contributor by reason
-      of your accepting any such warranty or additional liability.
-
-   END OF TERMS AND CONDITIONS
-
-AndroidX architecture core common library:
-
-
-   Copyright (c) 2005-2011, 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.
-
-   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.
-
-
-                                 Apache License
-                           Version 2.0, January 2004
-                        http://www.apache.org/licenses/
-
-   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
-
-   1. Definitions.
-
-      "License" shall mean the terms and conditions for use, reproduction,
-      and distribution as defined by Sections 1 through 9 of this document.
-
-      "Licensor" shall mean the copyright owner or entity authorized by
-      the copyright owner that is granting the License.
-
-      "Legal Entity" shall mean the union of the acting entity and all
-      other entities that control, are controlled by, or are under common
-      control with that entity. For the purposes of this definition,
-      "control" means (i) the power, direct or indirect, to cause the
-      direction or management of such entity, whether by contract or
-      otherwise, or (ii) ownership of fifty percent (50%) or more of the
-      outstanding shares, or (iii) beneficial ownership of such entity.
-
-      "You" (or "Your") shall mean an individual or Legal Entity
-      exercising permissions granted by this License.
-
-      "Source" form shall mean the preferred form for making modifications,
-      including but not limited to software source code, documentation
-      source, and configuration files.
-
-      "Object" form shall mean any form resulting from mechanical
-      transformation or translation of a Source form, including but
-      not limited to compiled object code, generated documentation,
-      and conversions to other media types.
-
-      "Work" shall mean the work of authorship, whether in Source or
-      Object form, made available under the License, as indicated by a
-      copyright notice that is included in or attached to the work
-      (an example is provided in the Appendix below).
-
-      "Derivative Works" shall mean any work, whether in Source or Object
-      form, that is based on (or derived from) the Work and for which the
-      editorial revisions, annotations, elaborations, or other modifications
-      represent, as a whole, an original work of authorship. For the purposes
-      of this License, Derivative Works shall not include works that remain
-      separable from, or merely link (or bind by name) to the interfaces of,
-      the Work and Derivative Works thereof.
-
-      "Contribution" shall mean any work of authorship, including
-      the original version of the Work and any modifications or additions
-      to that Work or Derivative Works thereof, that is intentionally
-      submitted to Licensor for inclusion in the Work by the copyright owner
-      or by an individual or Legal Entity authorized to submit on behalf of
-      the copyright owner. For the purposes of this definition, "submitted"
-      means any form of electronic, verbal, or written communication sent
-      to the Licensor or its representatives, including but not limited to
-      communication on electronic mailing lists, source code control systems,
-      and issue tracking systems that are managed by, or on behalf of, the
-      Licensor for the purpose of discussing and improving the Work, but
-      excluding communication that is conspicuously marked or otherwise
-      designated in writing by the copyright owner as "Not a Contribution."
-
-      "Contributor" shall mean Licensor and any individual or Legal Entity
-      on behalf of whom a Contribution has been received by Licensor and
-      subsequently incorporated within the Work.
-
-   2. Grant of Copyright License. Subject to the terms and conditions of
-      this License, each Contributor hereby grants to You a perpetual,
-      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
-      copyright license to reproduce, prepare Derivative Works of,
-      publicly display, publicly perform, sublicense, and distribute the
-      Work and such Derivative Works in Source or Object form.
-
-   3. Grant of Patent License. Subject to the terms and conditions of
-      this License, each Contributor hereby grants to You a perpetual,
-      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
-      (except as stated in this section) patent license to make, have made,
-      use, offer to sell, sell, import, and otherwise transfer the Work,
-      where such license applies only to those patent claims licensable
-      by such Contributor that are necessarily infringed by their
-      Contribution(s) alone or by combination of their Contribution(s)
-      with the Work to which such Contribution(s) was submitted. If You
-      institute patent litigation against any entity (including a
-      cross-claim or counterclaim in a lawsuit) alleging that the Work
-      or a Contribution incorporated within the Work constitutes direct
-      or contributory patent infringement, then any patent licenses
-      granted to You under this License for that Work shall terminate
-      as of the date such litigation is filed.
-
-   4. Redistribution. You may reproduce and distribute copies of the
-      Work or Derivative Works thereof in any medium, with or without
-      modifications, and in Source or Object form, provided that You
-      meet the following conditions:
-
-      (a) You must give any other recipients of the Work or
-          Derivative Works a copy of this License; and
-
-      (b) You must cause any modified files to carry prominent notices
-          stating that You changed the files; and
-
-      (c) You must retain, in the Source form of any Derivative Works
-          that You distribute, all copyright, patent, trademark, and
-          attribution notices from the Source form of the Work,
-          excluding those notices that do not pertain to any part of
-          the Derivative Works; and
-
-      (d) If the Work includes a "NOTICE" text file as part of its
-          distribution, then any Derivative Works that You distribute must
-          include a readable copy of the attribution notices contained
-          within such NOTICE file, excluding those notices that do not
-          pertain to any part of the Derivative Works, in at least one
-          of the following places: within a NOTICE text file distributed
-          as part of the Derivative Works; within the Source form or
-          documentation, if provided along with the Derivative Works; or,
-          within a display generated by the Derivative Works, if and
-          wherever such third-party notices normally appear. The contents
-          of the NOTICE file are for informational purposes only and
-          do not modify the License. You may add Your own attribution
-          notices within Derivative Works that You distribute, alongside
-          or as an addendum to the NOTICE text from the Work, provided
-          that such additional attribution notices cannot be construed
-          as modifying the License.
-
-      You may add Your own copyright statement to Your modifications and
-      may provide additional or different license terms and conditions
-      for use, reproduction, or distribution of Your modifications, or
-      for any such Derivative Works as a whole, provided Your use,
-      reproduction, and distribution of the Work otherwise complies with
-      the conditions stated in this License.
-
-   5. Submission of Contributions. Unless You explicitly state otherwise,
-      any Contribution intentionally submitted for inclusion in the Work
-      by You to the Licensor shall be under the terms and conditions of
-      this License, without any additional terms or conditions.
-      Notwithstanding the above, nothing herein shall supersede or modify
-      the terms of any separate license agreement you may have executed
-      with Licensor regarding such Contributions.
-
-   6. Trademarks. This License does not grant permission to use the trade
-      names, trademarks, service marks, or product names of the Licensor,
-      except as required for reasonable and customary use in describing the
-      origin of the Work and reproducing the content of the NOTICE file.
-
-   7. Disclaimer of Warranty. Unless required by applicable law or
-      agreed to in writing, Licensor provides the Work (and each
-      Contributor provides its Contributions) on an "AS IS" BASIS,
-      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
-      implied, including, without limitation, any warranties or conditions
-      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
-      PARTICULAR PURPOSE. You are solely responsible for determining the
-      appropriateness of using or redistributing the Work and assume any
-      risks associated with Your exercise of permissions under this License.
-
-   8. Limitation of Liability. In no event and under no legal theory,
-      whether in tort (including negligence), contract, or otherwise,
-      unless required by applicable law (such as deliberate and grossly
-      negligent acts) or agreed to in writing, shall any Contributor be
-      liable to You for damages, including any direct, indirect, special,
-      incidental, or consequential damages of any character arising as a
-      result of this License or out of the use or inability to use the
-      Work (including but not limited to damages for loss of goodwill,
-      work stoppage, computer failure or malfunction, or any and all
-      other commercial damages or losses), even if such Contributor
-      has been advised of the possibility of such damages.
-
-   9. Accepting Warranty or Additional Liability. While redistributing
-      the Work or Derivative Works thereof, You may choose to offer,
-      and charge a fee for, acceptance of support, warranty, indemnity,
-      or other liability obligations and/or rights consistent with this
-      License. However, in accepting such obligations, You may act only
-      on Your own behalf and on Your sole responsibility, not on behalf
-      of any other Contributor, and only if You agree to indemnify,
-      defend, and hold each Contributor harmless for any liability
-      incurred by, or claims asserted against, such Contributor by reason
-      of your accepting any such warranty or additional liability.
-
-   END OF TERMS AND CONDITIONS
-
-
-AndroidX architecture core runtime library:
-
-
-   Copyright (c) 2005-2011, 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.
-
-   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.
-
-
-                                 Apache License
-                           Version 2.0, January 2004
-                        http://www.apache.org/licenses/
-
-   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
-
-   1. Definitions.
-
-      "License" shall mean the terms and conditions for use, reproduction,
-      and distribution as defined by Sections 1 through 9 of this document.
-
-      "Licensor" shall mean the copyright owner or entity authorized by
-      the copyright owner that is granting the License.
-
-      "Legal Entity" shall mean the union of the acting entity and all
-      other entities that control, are controlled by, or are under common
-      control with that entity. For the purposes of this definition,
-      "control" means (i) the power, direct or indirect, to cause the
-      direction or management of such entity, whether by contract or
-      otherwise, or (ii) ownership of fifty percent (50%) or more of the
-      outstanding shares, or (iii) beneficial ownership of such entity.
-
-      "You" (or "Your") shall mean an individual or Legal Entity
-      exercising permissions granted by this License.
-
-      "Source" form shall mean the preferred form for making modifications,
-      including but not limited to software source code, documentation
-      source, and configuration files.
-
-      "Object" form shall mean any form resulting from mechanical
-      transformation or translation of a Source form, including but
-      not limited to compiled object code, generated documentation,
-      and conversions to other media types.
-
-      "Work" shall mean the work of authorship, whether in Source or
-      Object form, made available under the License, as indicated by a
-      copyright notice that is included in or attached to the work
-      (an example is provided in the Appendix below).
-
-      "Derivative Works" shall mean any work, whether in Source or Object
-      form, that is based on (or derived from) the Work and for which the
-      editorial revisions, annotations, elaborations, or other modifications
-      represent, as a whole, an original work of authorship. For the purposes
-      of this License, Derivative Works shall not include works that remain
-      separable from, or merely link (or bind by name) to the interfaces of,
-      the Work and Derivative Works thereof.
-
-      "Contribution" shall mean any work of authorship, including
-      the original version of the Work and any modifications or additions
-      to that Work or Derivative Works thereof, that is intentionally
-      submitted to Licensor for inclusion in the Work by the copyright owner
-      or by an individual or Legal Entity authorized to submit on behalf of
-      the copyright owner. For the purposes of this definition, "submitted"
-      means any form of electronic, verbal, or written communication sent
-      to the Licensor or its representatives, including but not limited to
-      communication on electronic mailing lists, source code control systems,
-      and issue tracking systems that are managed by, or on behalf of, the
-      Licensor for the purpose of discussing and improving the Work, but
-      excluding communication that is conspicuously marked or otherwise
-      designated in writing by the copyright owner as "Not a Contribution."
-
-      "Contributor" shall mean Licensor and any individual or Legal Entity
-      on behalf of whom a Contribution has been received by Licensor and
-      subsequently incorporated within the Work.
-
-   2. Grant of Copyright License. Subject to the terms and conditions of
-      this License, each Contributor hereby grants to You a perpetual,
-      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
-      copyright license to reproduce, prepare Derivative Works of,
-      publicly display, publicly perform, sublicense, and distribute the
-      Work and such Derivative Works in Source or Object form.
-
-   3. Grant of Patent License. Subject to the terms and conditions of
-      this License, each Contributor hereby grants to You a perpetual,
-      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
-      (except as stated in this section) patent license to make, have made,
-      use, offer to sell, sell, import, and otherwise transfer the Work,
-      where such license applies only to those patent claims licensable
-      by such Contributor that are necessarily infringed by their
-      Contribution(s) alone or by combination of their Contribution(s)
-      with the Work to which such Contribution(s) was submitted. If You
-      institute patent litigation against any entity (including a
-      cross-claim or counterclaim in a lawsuit) alleging that the Work
-      or a Contribution incorporated within the Work constitutes direct
-      or contributory patent infringement, then any patent licenses
-      granted to You under this License for that Work shall terminate
-      as of the date such litigation is filed.
-
-   4. Redistribution. You may reproduce and distribute copies of the
-      Work or Derivative Works thereof in any medium, with or without
-      modifications, and in Source or Object form, provided that You
-      meet the following conditions:
-
-      (a) You must give any other recipients of the Work or
-          Derivative Works a copy of this License; and
-
-      (b) You must cause any modified files to carry prominent notices
-          stating that You changed the files; and
-
-      (c) You must retain, in the Source form of any Derivative Works
-          that You distribute, all copyright, patent, trademark, and
-          attribution notices from the Source form of the Work,
-          excluding those notices that do not pertain to any part of
-          the Derivative Works; and
-
-      (d) If the Work includes a "NOTICE" text file as part of its
-          distribution, then any Derivative Works that You distribute must
-          include a readable copy of the attribution notices contained
-          within such NOTICE file, excluding those notices that do not
-          pertain to any part of the Derivative Works, in at least one
-          of the following places: within a NOTICE text file distributed
-          as part of the Derivative Works; within the Source form or
-          documentation, if provided along with the Derivative Works; or,
-          within a display generated by the Derivative Works, if and
-          wherever such third-party notices normally appear. The contents
-          of the NOTICE file are for informational purposes only and
-          do not modify the License. You may add Your own attribution
-          notices within Derivative Works that You distribute, alongside
-          or as an addendum to the NOTICE text from the Work, provided
-          that such additional attribution notices cannot be construed
-          as modifying the License.
-
-      You may add Your own copyright statement to Your modifications and
-      may provide additional or different license terms and conditions
-      for use, reproduction, or distribution of Your modifications, or
-      for any such Derivative Works as a whole, provided Your use,
-      reproduction, and distribution of the Work otherwise complies with
-      the conditions stated in this License.
-
-   5. Submission of Contributions. Unless You explicitly state otherwise,
-      any Contribution intentionally submitted for inclusion in the Work
-      by You to the Licensor shall be under the terms and conditions of
-      this License, without any additional terms or conditions.
-      Notwithstanding the above, nothing herein shall supersede or modify
-      the terms of any separate license agreement you may have executed
-      with Licensor regarding such Contributions.
-
-   6. Trademarks. This License does not grant permission to use the trade
-      names, trademarks, service marks, or product names of the Licensor,
-      except as required for reasonable and customary use in describing the
-      origin of the Work and reproducing the content of the NOTICE file.
-
-   7. Disclaimer of Warranty. Unless required by applicable law or
-      agreed to in writing, Licensor provides the Work (and each
-      Contributor provides its Contributions) on an "AS IS" BASIS,
-      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
-      implied, including, without limitation, any warranties or conditions
-      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
-      PARTICULAR PURPOSE. You are solely responsible for determining the
-      appropriateness of using or redistributing the Work and assume any
-      risks associated with Your exercise of permissions under this License.
-
-   8. Limitation of Liability. In no event and under no legal theory,
-      whether in tort (including negligence), contract, or otherwise,
-      unless required by applicable law (such as deliberate and grossly
-      negligent acts) or agreed to in writing, shall any Contributor be
-      liable to You for damages, including any direct, indirect, special,
-      incidental, or consequential damages of any character arising as a
-      result of this License or out of the use or inability to use the
-      Work (including but not limited to damages for loss of goodwill,
-      work stoppage, computer failure or malfunction, or any and all
-      other commercial damages or losses), even if such Contributor
-      has been advised of the possibility of such damages.
-
-   9. Accepting Warranty or Additional Liability. While redistributing
-      the Work or Derivative Works thereof, You may choose to offer,
-      and charge a fee for, acceptance of support, warranty, indemnity,
-      or other liability obligations and/or rights consistent with this
-      License. However, in accepting such obligations, You may act only
-      on Your own behalf and on Your sole responsibility, not on behalf
-      of any other Contributor, and only if You agree to indemnify,
-      defend, and hold each Contributor harmless for any liability
-      incurred by, or claims asserted against, such Contributor by reason
-      of your accepting any such warranty or additional liability.
-
-   END OF TERMS AND CONDITIONS
-
-
 AndroidX lifecycle common library:
 
 
@@ -1304,199 +726,6 @@
    END OF TERMS AND CONDITIONS
 
 
-AndroidX tracing library:
-
-
-   Copyright (c) 2005-2011, 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.
-
-   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.
-
-
-                                 Apache License
-                           Version 2.0, January 2004
-                        http://www.apache.org/licenses/
-
-   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
-
-   1. Definitions.
-
-      "License" shall mean the terms and conditions for use, reproduction,
-      and distribution as defined by Sections 1 through 9 of this document.
-
-      "Licensor" shall mean the copyright owner or entity authorized by
-      the copyright owner that is granting the License.
-
-      "Legal Entity" shall mean the union of the acting entity and all
-      other entities that control, are controlled by, or are under common
-      control with that entity. For the purposes of this definition,
-      "control" means (i) the power, direct or indirect, to cause the
-      direction or management of such entity, whether by contract or
-      otherwise, or (ii) ownership of fifty percent (50%) or more of the
-      outstanding shares, or (iii) beneficial ownership of such entity.
-
-      "You" (or "Your") shall mean an individual or Legal Entity
-      exercising permissions granted by this License.
-
-      "Source" form shall mean the preferred form for making modifications,
-      including but not limited to software source code, documentation
-      source, and configuration files.
-
-      "Object" form shall mean any form resulting from mechanical
-      transformation or translation of a Source form, including but
-      not limited to compiled object code, generated documentation,
-      and conversions to other media types.
-
-      "Work" shall mean the work of authorship, whether in Source or
-      Object form, made available under the License, as indicated by a
-      copyright notice that is included in or attached to the work
-      (an example is provided in the Appendix below).
-
-      "Derivative Works" shall mean any work, whether in Source or Object
-      form, that is based on (or derived from) the Work and for which the
-      editorial revisions, annotations, elaborations, or other modifications
-      represent, as a whole, an original work of authorship. For the purposes
-      of this License, Derivative Works shall not include works that remain
-      separable from, or merely link (or bind by name) to the interfaces of,
-      the Work and Derivative Works thereof.
-
-      "Contribution" shall mean any work of authorship, including
-      the original version of the Work and any modifications or additions
-      to that Work or Derivative Works thereof, that is intentionally
-      submitted to Licensor for inclusion in the Work by the copyright owner
-      or by an individual or Legal Entity authorized to submit on behalf of
-      the copyright owner. For the purposes of this definition, "submitted"
-      means any form of electronic, verbal, or written communication sent
-      to the Licensor or its representatives, including but not limited to
-      communication on electronic mailing lists, source code control systems,
-      and issue tracking systems that are managed by, or on behalf of, the
-      Licensor for the purpose of discussing and improving the Work, but
-      excluding communication that is conspicuously marked or otherwise
-      designated in writing by the copyright owner as "Not a Contribution."
-
-      "Contributor" shall mean Licensor and any individual or Legal Entity
-      on behalf of whom a Contribution has been received by Licensor and
-      subsequently incorporated within the Work.
-
-   2. Grant of Copyright License. Subject to the terms and conditions of
-      this License, each Contributor hereby grants to You a perpetual,
-      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
-      copyright license to reproduce, prepare Derivative Works of,
-      publicly display, publicly perform, sublicense, and distribute the
-      Work and such Derivative Works in Source or Object form.
-
-   3. Grant of Patent License. Subject to the terms and conditions of
-      this License, each Contributor hereby grants to You a perpetual,
-      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
-      (except as stated in this section) patent license to make, have made,
-      use, offer to sell, sell, import, and otherwise transfer the Work,
-      where such license applies only to those patent claims licensable
-      by such Contributor that are necessarily infringed by their
-      Contribution(s) alone or by combination of their Contribution(s)
-      with the Work to which such Contribution(s) was submitted. If You
-      institute patent litigation against any entity (including a
-      cross-claim or counterclaim in a lawsuit) alleging that the Work
-      or a Contribution incorporated within the Work constitutes direct
-      or contributory patent infringement, then any patent licenses
-      granted to You under this License for that Work shall terminate
-      as of the date such litigation is filed.
-
-   4. Redistribution. You may reproduce and distribute copies of the
-      Work or Derivative Works thereof in any medium, with or without
-      modifications, and in Source or Object form, provided that You
-      meet the following conditions:
-
-      (a) You must give any other recipients of the Work or
-          Derivative Works a copy of this License; and
-
-      (b) You must cause any modified files to carry prominent notices
-          stating that You changed the files; and
-
-      (c) You must retain, in the Source form of any Derivative Works
-          that You distribute, all copyright, patent, trademark, and
-          attribution notices from the Source form of the Work,
-          excluding those notices that do not pertain to any part of
-          the Derivative Works; and
-
-      (d) If the Work includes a "NOTICE" text file as part of its
-          distribution, then any Derivative Works that You distribute must
-          include a readable copy of the attribution notices contained
-          within such NOTICE file, excluding those notices that do not
-          pertain to any part of the Derivative Works, in at least one
-          of the following places: within a NOTICE text file distributed
-          as part of the Derivative Works; within the Source form or
-          documentation, if provided along with the Derivative Works; or,
-          within a display generated by the Derivative Works, if and
-          wherever such third-party notices normally appear. The contents
-          of the NOTICE file are for informational purposes only and
-          do not modify the License. You may add Your own attribution
-          notices within Derivative Works that You distribute, alongside
-          or as an addendum to the NOTICE text from the Work, provided
-          that such additional attribution notices cannot be construed
-          as modifying the License.
-
-      You may add Your own copyright statement to Your modifications and
-      may provide additional or different license terms and conditions
-      for use, reproduction, or distribution of Your modifications, or
-      for any such Derivative Works as a whole, provided Your use,
-      reproduction, and distribution of the Work otherwise complies with
-      the conditions stated in this License.
-
-   5. Submission of Contributions. Unless You explicitly state otherwise,
-      any Contribution intentionally submitted for inclusion in the Work
-      by You to the Licensor shall be under the terms and conditions of
-      this License, without any additional terms or conditions.
-      Notwithstanding the above, nothing herein shall supersede or modify
-      the terms of any separate license agreement you may have executed
-      with Licensor regarding such Contributions.
-
-   6. Trademarks. This License does not grant permission to use the trade
-      names, trademarks, service marks, or product names of the Licensor,
-      except as required for reasonable and customary use in describing the
-      origin of the Work and reproducing the content of the NOTICE file.
-
-   7. Disclaimer of Warranty. Unless required by applicable law or
-      agreed to in writing, Licensor provides the Work (and each
-      Contributor provides its Contributions) on an "AS IS" BASIS,
-      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
-      implied, including, without limitation, any warranties or conditions
-      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
-      PARTICULAR PURPOSE. You are solely responsible for determining the
-      appropriateness of using or redistributing the Work and assume any
-      risks associated with Your exercise of permissions under this License.
-
-   8. Limitation of Liability. In no event and under no legal theory,
-      whether in tort (including negligence), contract, or otherwise,
-      unless required by applicable law (such as deliberate and grossly
-      negligent acts) or agreed to in writing, shall any Contributor be
-      liable to You for damages, including any direct, indirect, special,
-      incidental, or consequential damages of any character arising as a
-      result of this License or out of the use or inability to use the
-      Work (including but not limited to damages for loss of goodwill,
-      work stoppage, computer failure or malfunction, or any and all
-      other commercial damages or losses), even if such Contributor
-      has been advised of the possibility of such damages.
-
-   9. Accepting Warranty or Additional Liability. While redistributing
-      the Work or Derivative Works thereof, You may choose to offer,
-      and charge a fee for, acceptance of support, warranty, indemnity,
-      or other liability obligations and/or rights consistent with this
-      License. However, in accepting such obligations, You may act only
-      on Your own behalf and on Your sole responsibility, not on behalf
-      of any other Contributor, and only if You agree to indemnify,
-      defend, and hold each Contributor harmless for any liability
-      incurred by, or claims asserted against, such Contributor by reason
-      of your accepting any such warranty or additional liability.
-
-   END OF TERMS AND CONDITIONS
-
-
 Animal Sniffer:
 
 The MIT License
@@ -2447,7 +1676,211 @@
 POSSIBILITY OF SUCH DAMAGE.
 
 
-JSpecify:
+JsInterop Annotations:
+
+Apache License
+                           Version 2.0, January 2004
+                        http://www.apache.org/licenses/
+
+   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+   1. Definitions.
+
+      "License" shall mean the terms and conditions for use, reproduction,
+      and distribution as defined by Sections 1 through 9 of this document.
+
+      "Licensor" shall mean the copyright owner or entity authorized by
+      the copyright owner that is granting the License.
+
+      "Legal Entity" shall mean the union of the acting entity and all
+      other entities that control, are controlled by, or are under common
+      control with that entity. For the purposes of this definition,
+      "control" means (i) the power, direct or indirect, to cause the
+      direction or management of such entity, whether by contract or
+      otherwise, or (ii) ownership of fifty percent (50%) or more of the
+      outstanding shares, or (iii) beneficial ownership of such entity.
+
+      "You" (or "Your") shall mean an individual or Legal Entity
+      exercising permissions granted by this License.
+
+      "Source" form shall mean the preferred form for making modifications,
+      including but not limited to software source code, documentation
+      source, and configuration files.
+
+      "Object" form shall mean any form resulting from mechanical
+      transformation or translation of a Source form, including but
+      not limited to compiled object code, generated documentation,
+      and conversions to other media types.
+
+      "Work" shall mean the work of authorship, whether in Source or
+      Object form, made available under the License, as indicated by a
+      copyright notice that is included in or attached to the work
+      (an example is provided in the Appendix below).
+
+      "Derivative Works" shall mean any work, whether in Source or Object
+      form, that is based on (or derived from) the Work and for which the
+      editorial revisions, annotations, elaborations, or other modifications
+      represent, as a whole, an original work of authorship. For the purposes
+      of this License, Derivative Works shall not include works that remain
+      separable from, or merely link (or bind by name) to the interfaces of,
+      the Work and Derivative Works thereof.
+
+      "Contribution" shall mean any work of authorship, including
+      the original version of the Work and any modifications or additions
+      to that Work or Derivative Works thereof, that is intentionally
+      submitted to Licensor for inclusion in the Work by the copyright owner
+      or by an individual or Legal Entity authorized to submit on behalf of
+      the copyright owner. For the purposes of this definition, "submitted"
+      means any form of electronic, verbal, or written communication sent
+      to the Licensor or its representatives, including but not limited to
+      communication on electronic mailing lists, source code control systems,
+      and issue tracking systems that are managed by, or on behalf of, the
+      Licensor for the purpose of discussing and improving the Work, but
+      excluding communication that is conspicuously marked or otherwise
+      designated in writing by the copyright owner as "Not a Contribution."
+
+      "Contributor" shall mean Licensor and any individual or Legal Entity
+      on behalf of whom a Contribution has been received by Licensor and
+      subsequently incorporated within the Work.
+
+   2. Grant of Copyright License. Subject to the terms and conditions of
+      this License, each Contributor hereby grants to You a perpetual,
+      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+      copyright license to reproduce, prepare Derivative Works of,
+      publicly display, publicly perform, sublicense, and distribute the
+      Work and such Derivative Works in Source or Object form.
+
+   3. Grant of Patent License. Subject to the terms and conditions of
+      this License, each Contributor hereby grants to You a perpetual,
+      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+      (except as stated in this section) patent license to make, have made,
+      use, offer to sell, sell, import, and otherwise transfer the Work,
+      where such license applies only to those patent claims licensable
+      by such Contributor that are necessarily infringed by their
+      Contribution(s) alone or by combination of their Contribution(s)
+      with the Work to which such Contribution(s) was submitted. If You
+      institute patent litigation against any entity (including a
+      cross-claim or counterclaim in a lawsuit) alleging that the Work
+      or a Contribution incorporated within the Work constitutes direct
+      or contributory patent infringement, then any patent licenses
+      granted to You under this License for that Work shall terminate
+      as of the date such litigation is filed.
+
+   4. Redistribution. You may reproduce and distribute copies of the
+      Work or Derivative Works thereof in any medium, with or without
+      modifications, and in Source or Object form, provided that You
+      meet the following conditions:
+
+      (a) You must give any other recipients of the Work or
+          Derivative Works a copy of this License; and
+
+      (b) You must cause any modified files to carry prominent notices
+          stating that You changed the files; and
+
+      (c) You must retain, in the Source form of any Derivative Works
+          that You distribute, all copyright, patent, trademark, and
+          attribution notices from the Source form of the Work,
+          excluding those notices that do not pertain to any part of
+          the Derivative Works; and
+
+      (d) If the Work includes a "NOTICE" text file as part of its
+          distribution, then any Derivative Works that You distribute must
+          include a readable copy of the attribution notices contained
+          within such NOTICE file, excluding those notices that do not
+          pertain to any part of the Derivative Works, in at least one
+          of the following places: within a NOTICE text file distributed
+          as part of the Derivative Works; within the Source form or
+          documentation, if provided along with the Derivative Works; or,
+          within a display generated by the Derivative Works, if and
+          wherever such third-party notices normally appear. The contents
+          of the NOTICE file are for informational purposes only and
+          do not modify the License. You may add Your own attribution
+          notices within Derivative Works that You distribute, alongside
+          or as an addendum to the NOTICE text from the Work, provided
+          that such additional attribution notices cannot be construed
+          as modifying the License.
+
+      You may add Your own copyright statement to Your modifications and
+      may provide additional or different license terms and conditions
+      for use, reproduction, or distribution of Your modifications, or
+      for any such Derivative Works as a whole, provided Your use,
+      reproduction, and distribution of the Work otherwise complies with
+      the conditions stated in this License.
+
+   5. Submission of Contributions. Unless You explicitly state otherwise,
+      any Contribution intentionally submitted for inclusion in the Work
+      by You to the Licensor shall be under the terms and conditions of
+      this License, without any additional terms or conditions.
+      Notwithstanding the above, nothing herein shall supersede or modify
+      the terms of any separate license agreement you may have executed
+      with Licensor regarding such Contributions.
+
+   6. Trademarks. This License does not grant permission to use the trade
+      names, trademarks, service marks, or product names of the Licensor,
+      except as required for reasonable and customary use in describing the
+      origin of the Work and reproducing the content of the NOTICE file.
+
+   7. Disclaimer of Warranty. Unless required by applicable law or
+      agreed to in writing, Licensor provides the Work (and each
+      Contributor provides its Contributions) on an "AS IS" BASIS,
+      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+      implied, including, without limitation, any warranties or conditions
+      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
+      PARTICULAR PURPOSE. You are solely responsible for determining the
+      appropriateness of using or redistributing the Work and assume any
+      risks associated with Your exercise of permissions under this License.
+
+   8. Limitation of Liability. In no event and under no legal theory,
+      whether in tort (including negligence), contract, or otherwise,
+      unless required by applicable law (such as deliberate and grossly
+      negligent acts) or agreed to in writing, shall any Contributor be
+      liable to You for damages, including any direct, indirect, special,
+      incidental, or consequential damages of any character arising as a
+      result of this License or out of the use or inability to use the
+      Work (including but not limited to damages for loss of goodwill,
+      work stoppage, computer failure or malfunction, or any and all
+      other commercial damages or losses), even if such Contributor
+      has been advised of the possibility of such damages.
+
+   9. Accepting Warranty or Additional Liability. While redistributing
+      the Work or Derivative Works thereof, You may choose to offer,
+      and charge a fee for, acceptance of support, warranty, indemnity,
+      or other liability obligations and/or rights consistent with this
+      License. However, in accepting such obligations, You may act only
+      on Your own behalf and on Your sole responsibility, not on behalf
+      of any other Contributor, and only if You agree to indemnify,
+      defend, and hold each Contributor harmless for any liability
+      incurred by, or claims asserted against, such Contributor by reason
+      of your accepting any such warranty or additional liability.
+
+   END OF TERMS AND CONDITIONS
+
+   APPENDIX: How to apply the Apache License to your work.
+
+      To apply the Apache License to your work, attach the following
+      boilerplate notice, with the fields enclosed by brackets "[]"
+      replaced with your own identifying information. (Don't include
+      the brackets!)  The text should be enclosed in the appropriate
+      comment syntax for the file format. We also recommend that a
+      file or class name and description of purpose be included on the
+      same "printed page" as the copyright notice for easier
+      identification within third-party archives.
+
+   Copyright 2017 Google Inc.
+
+   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.
+
+SafeParcelable library:
 
 
                                  Apache License
@@ -2653,9 +2086,204 @@
    limitations under the License.
 
 
-JsInterop Annotations:
+apksig:
 
-Apache License
+
+   Copyright (c) 2005-2008, 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.
+
+   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.
+
+
+                                 Apache License
+                           Version 2.0, January 2004
+                        http://www.apache.org/licenses/
+
+   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+   1. Definitions.
+
+      "License" shall mean the terms and conditions for use, reproduction,
+      and distribution as defined by Sections 1 through 9 of this document.
+
+      "Licensor" shall mean the copyright owner or entity authorized by
+      the copyright owner that is granting the License.
+
+      "Legal Entity" shall mean the union of the acting entity and all
+      other entities that control, are controlled by, or are under common
+      control with that entity. For the purposes of this definition,
+      "control" means (i) the power, direct or indirect, to cause the
+      direction or management of such entity, whether by contract or
+      otherwise, or (ii) ownership of fifty percent (50%) or more of the
+      outstanding shares, or (iii) beneficial ownership of such entity.
+
+      "You" (or "Your") shall mean an individual or Legal Entity
+      exercising permissions granted by this License.
+
+      "Source" form shall mean the preferred form for making modifications,
+      including but not limited to software source code, documentation
+      source, and configuration files.
+
+      "Object" form shall mean any form resulting from mechanical
+      transformation or translation of a Source form, including but
+      not limited to compiled object code, generated documentation,
+      and conversions to other media types.
+
+      "Work" shall mean the work of authorship, whether in Source or
+      Object form, made available under the License, as indicated by a
+      copyright notice that is included in or attached to the work
+      (an example is provided in the Appendix below).
+
+      "Derivative Works" shall mean any work, whether in Source or Object
+      form, that is based on (or derived from) the Work and for which the
+      editorial revisions, annotations, elaborations, or other modifications
+      represent, as a whole, an original work of authorship. For the purposes
+      of this License, Derivative Works shall not include works that remain
+      separable from, or merely link (or bind by name) to the interfaces of,
+      the Work and Derivative Works thereof.
+
+      "Contribution" shall mean any work of authorship, including
+      the original version of the Work and any modifications or additions
+      to that Work or Derivative Works thereof, that is intentionally
+      submitted to Licensor for inclusion in the Work by the copyright owner
+      or by an individual or Legal Entity authorized to submit on behalf of
+      the copyright owner. For the purposes of this definition, "submitted"
+      means any form of electronic, verbal, or written communication sent
+      to the Licensor or its representatives, including but not limited to
+      communication on electronic mailing lists, source code control systems,
+      and issue tracking systems that are managed by, or on behalf of, the
+      Licensor for the purpose of discussing and improving the Work, but
+      excluding communication that is conspicuously marked or otherwise
+      designated in writing by the copyright owner as "Not a Contribution."
+
+      "Contributor" shall mean Licensor and any individual or Legal Entity
+      on behalf of whom a Contribution has been received by Licensor and
+      subsequently incorporated within the Work.
+
+   2. Grant of Copyright License. Subject to the terms and conditions of
+      this License, each Contributor hereby grants to You a perpetual,
+      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+      copyright license to reproduce, prepare Derivative Works of,
+      publicly display, publicly perform, sublicense, and distribute the
+      Work and such Derivative Works in Source or Object form.
+
+   3. Grant of Patent License. Subject to the terms and conditions of
+      this License, each Contributor hereby grants to You a perpetual,
+      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+      (except as stated in this section) patent license to make, have made,
+      use, offer to sell, sell, import, and otherwise transfer the Work,
+      where such license applies only to those patent claims licensable
+      by such Contributor that are necessarily infringed by their
+      Contribution(s) alone or by combination of their Contribution(s)
+      with the Work to which such Contribution(s) was submitted. If You
+      institute patent litigation against any entity (including a
+      cross-claim or counterclaim in a lawsuit) alleging that the Work
+      or a Contribution incorporated within the Work constitutes direct
+      or contributory patent infringement, then any patent licenses
+      granted to You under this License for that Work shall terminate
+      as of the date such litigation is filed.
+
+   4. Redistribution. You may reproduce and distribute copies of the
+      Work or Derivative Works thereof in any medium, with or without
+      modifications, and in Source or Object form, provided that You
+      meet the following conditions:
+
+      (a) You must give any other recipients of the Work or
+          Derivative Works a copy of this License; and
+
+      (b) You must cause any modified files to carry prominent notices
+          stating that You changed the files; and
+
+      (c) You must retain, in the Source form of any Derivative Works
+          that You distribute, all copyright, patent, trademark, and
+          attribution notices from the Source form of the Work,
+          excluding those notices that do not pertain to any part of
+          the Derivative Works; and
+
+      (d) If the Work includes a "NOTICE" text file as part of its
+          distribution, then any Derivative Works that You distribute must
+          include a readable copy of the attribution notices contained
+          within such NOTICE file, excluding those notices that do not
+          pertain to any part of the Derivative Works, in at least one
+          of the following places: within a NOTICE text file distributed
+          as part of the Derivative Works; within the Source form or
+          documentation, if provided along with the Derivative Works; or,
+          within a display generated by the Derivative Works, if and
+          wherever such third-party notices normally appear. The contents
+          of the NOTICE file are for informational purposes only and
+          do not modify the License. You may add Your own attribution
+          notices within Derivative Works that You distribute, alongside
+          or as an addendum to the NOTICE text from the Work, provided
+          that such additional attribution notices cannot be construed
+          as modifying the License.
+
+      You may add Your own copyright statement to Your modifications and
+      may provide additional or different license terms and conditions
+      for use, reproduction, or distribution of Your modifications, or
+      for any such Derivative Works as a whole, provided Your use,
+      reproduction, and distribution of the Work otherwise complies with
+      the conditions stated in this License.
+
+   5. Submission of Contributions. Unless You explicitly state otherwise,
+      any Contribution intentionally submitted for inclusion in the Work
+      by You to the Licensor shall be under the terms and conditions of
+      this License, without any additional terms or conditions.
+      Notwithstanding the above, nothing herein shall supersede or modify
+      the terms of any separate license agreement you may have executed
+      with Licensor regarding such Contributions.
+
+   6. Trademarks. This License does not grant permission to use the trade
+      names, trademarks, service marks, or product names of the Licensor,
+      except as required for reasonable and customary use in describing the
+      origin of the Work and reproducing the content of the NOTICE file.
+
+   7. Disclaimer of Warranty. Unless required by applicable law or
+      agreed to in writing, Licensor provides the Work (and each
+      Contributor provides its Contributions) on an "AS IS" BASIS,
+      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+      implied, including, without limitation, any warranties or conditions
+      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
+      PARTICULAR PURPOSE. You are solely responsible for determining the
+      appropriateness of using or redistributing the Work and assume any
+      risks associated with Your exercise of permissions under this License.
+
+   8. Limitation of Liability. In no event and under no legal theory,
+      whether in tort (including negligence), contract, or otherwise,
+      unless required by applicable law (such as deliberate and grossly
+      negligent acts) or agreed to in writing, shall any Contributor be
+      liable to You for damages, including any direct, indirect, special,
+      incidental, or consequential damages of any character arising as a
+      result of this License or out of the use or inability to use the
+      Work (including but not limited to damages for loss of goodwill,
+      work stoppage, computer failure or malfunction, or any and all
+      other commercial damages or losses), even if such Contributor
+      has been advised of the possibility of such damages.
+
+   9. Accepting Warranty or Additional Liability. While redistributing
+      the Work or Derivative Works thereof, You may choose to offer,
+      and charge a fee for, acceptance of support, warranty, indemnity,
+      or other liability obligations and/or rights consistent with this
+      License. However, in accepting such obligations, You may act only
+      on Your own behalf and on Your sole responsibility, not on behalf
+      of any other Contributor, and only if You agree to indemnify,
+      defend, and hold each Contributor harmless for any liability
+      incurred by, or claims asserted against, such Contributor by reason
+      of your accepting any such warranty or additional liability.
+
+   END OF TERMS AND CONDITIONS
+
+
+
+JSpecify:
+
+
+                                 Apache License
                            Version 2.0, January 2004
                         http://www.apache.org/licenses/
 
@@ -2843,7 +2471,7 @@
       same "printed page" as the copyright notice for easier
       identification within third-party archives.
 
-   Copyright 2017 Google Inc.
+   Copyright [yyyy] [name of copyright owner]
 
    Licensed under the Apache License, Version 2.0 (the "License");
    you may not use this file except in compliance with the License.
@@ -2857,6 +2485,7 @@
    See the License for the specific language governing permissions and
    limitations under the License.
 
+
 Kotlin:
 
 Files: kotlinc/*
@@ -4854,403 +4483,3 @@
 this Agreement will bring a legal action under this Agreement more than one
 year after the cause of action arose. Each party waives its rights to a
 jury trial in any resulting litigation.
-
-
-SafeParcelable library:
-
-
-                                 Apache License
-                           Version 2.0, January 2004
-                        http://www.apache.org/licenses/
-
-   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
-
-   1. Definitions.
-
-      "License" shall mean the terms and conditions for use, reproduction,
-      and distribution as defined by Sections 1 through 9 of this document.
-
-      "Licensor" shall mean the copyright owner or entity authorized by
-      the copyright owner that is granting the License.
-
-      "Legal Entity" shall mean the union of the acting entity and all
-      other entities that control, are controlled by, or are under common
-      control with that entity. For the purposes of this definition,
-      "control" means (i) the power, direct or indirect, to cause the
-      direction or management of such entity, whether by contract or
-      otherwise, or (ii) ownership of fifty percent (50%) or more of the
-      outstanding shares, or (iii) beneficial ownership of such entity.
-
-      "You" (or "Your") shall mean an individual or Legal Entity
-      exercising permissions granted by this License.
-
-      "Source" form shall mean the preferred form for making modifications,
-      including but not limited to software source code, documentation
-      source, and configuration files.
-
-      "Object" form shall mean any form resulting from mechanical
-      transformation or translation of a Source form, including but
-      not limited to compiled object code, generated documentation,
-      and conversions to other media types.
-
-      "Work" shall mean the work of authorship, whether in Source or
-      Object form, made available under the License, as indicated by a
-      copyright notice that is included in or attached to the work
-      (an example is provided in the Appendix below).
-
-      "Derivative Works" shall mean any work, whether in Source or Object
-      form, that is based on (or derived from) the Work and for which the
-      editorial revisions, annotations, elaborations, or other modifications
-      represent, as a whole, an original work of authorship. For the purposes
-      of this License, Derivative Works shall not include works that remain
-      separable from, or merely link (or bind by name) to the interfaces of,
-      the Work and Derivative Works thereof.
-
-      "Contribution" shall mean any work of authorship, including
-      the original version of the Work and any modifications or additions
-      to that Work or Derivative Works thereof, that is intentionally
-      submitted to Licensor for inclusion in the Work by the copyright owner
-      or by an individual or Legal Entity authorized to submit on behalf of
-      the copyright owner. For the purposes of this definition, "submitted"
-      means any form of electronic, verbal, or written communication sent
-      to the Licensor or its representatives, including but not limited to
-      communication on electronic mailing lists, source code control systems,
-      and issue tracking systems that are managed by, or on behalf of, the
-      Licensor for the purpose of discussing and improving the Work, but
-      excluding communication that is conspicuously marked or otherwise
-      designated in writing by the copyright owner as "Not a Contribution."
-
-      "Contributor" shall mean Licensor and any individual or Legal Entity
-      on behalf of whom a Contribution has been received by Licensor and
-      subsequently incorporated within the Work.
-
-   2. Grant of Copyright License. Subject to the terms and conditions of
-      this License, each Contributor hereby grants to You a perpetual,
-      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
-      copyright license to reproduce, prepare Derivative Works of,
-      publicly display, publicly perform, sublicense, and distribute the
-      Work and such Derivative Works in Source or Object form.
-
-   3. Grant of Patent License. Subject to the terms and conditions of
-      this License, each Contributor hereby grants to You a perpetual,
-      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
-      (except as stated in this section) patent license to make, have made,
-      use, offer to sell, sell, import, and otherwise transfer the Work,
-      where such license applies only to those patent claims licensable
-      by such Contributor that are necessarily infringed by their
-      Contribution(s) alone or by combination of their Contribution(s)
-      with the Work to which such Contribution(s) was submitted. If You
-      institute patent litigation against any entity (including a
-      cross-claim or counterclaim in a lawsuit) alleging that the Work
-      or a Contribution incorporated within the Work constitutes direct
-      or contributory patent infringement, then any patent licenses
-      granted to You under this License for that Work shall terminate
-      as of the date such litigation is filed.
-
-   4. Redistribution. You may reproduce and distribute copies of the
-      Work or Derivative Works thereof in any medium, with or without
-      modifications, and in Source or Object form, provided that You
-      meet the following conditions:
-
-      (a) You must give any other recipients of the Work or
-          Derivative Works a copy of this License; and
-
-      (b) You must cause any modified files to carry prominent notices
-          stating that You changed the files; and
-
-      (c) You must retain, in the Source form of any Derivative Works
-          that You distribute, all copyright, patent, trademark, and
-          attribution notices from the Source form of the Work,
-          excluding those notices that do not pertain to any part of
-          the Derivative Works; and
-
-      (d) If the Work includes a "NOTICE" text file as part of its
-          distribution, then any Derivative Works that You distribute must
-          include a readable copy of the attribution notices contained
-          within such NOTICE file, excluding those notices that do not
-          pertain to any part of the Derivative Works, in at least one
-          of the following places: within a NOTICE text file distributed
-          as part of the Derivative Works; within the Source form or
-          documentation, if provided along with the Derivative Works; or,
-          within a display generated by the Derivative Works, if and
-          wherever such third-party notices normally appear. The contents
-          of the NOTICE file are for informational purposes only and
-          do not modify the License. You may add Your own attribution
-          notices within Derivative Works that You distribute, alongside
-          or as an addendum to the NOTICE text from the Work, provided
-          that such additional attribution notices cannot be construed
-          as modifying the License.
-
-      You may add Your own copyright statement to Your modifications and
-      may provide additional or different license terms and conditions
-      for use, reproduction, or distribution of Your modifications, or
-      for any such Derivative Works as a whole, provided Your use,
-      reproduction, and distribution of the Work otherwise complies with
-      the conditions stated in this License.
-
-   5. Submission of Contributions. Unless You explicitly state otherwise,
-      any Contribution intentionally submitted for inclusion in the Work
-      by You to the Licensor shall be under the terms and conditions of
-      this License, without any additional terms or conditions.
-      Notwithstanding the above, nothing herein shall supersede or modify
-      the terms of any separate license agreement you may have executed
-      with Licensor regarding such Contributions.
-
-   6. Trademarks. This License does not grant permission to use the trade
-      names, trademarks, service marks, or product names of the Licensor,
-      except as required for reasonable and customary use in describing the
-      origin of the Work and reproducing the content of the NOTICE file.
-
-   7. Disclaimer of Warranty. Unless required by applicable law or
-      agreed to in writing, Licensor provides the Work (and each
-      Contributor provides its Contributions) on an "AS IS" BASIS,
-      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
-      implied, including, without limitation, any warranties or conditions
-      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
-      PARTICULAR PURPOSE. You are solely responsible for determining the
-      appropriateness of using or redistributing the Work and assume any
-      risks associated with Your exercise of permissions under this License.
-
-   8. Limitation of Liability. In no event and under no legal theory,
-      whether in tort (including negligence), contract, or otherwise,
-      unless required by applicable law (such as deliberate and grossly
-      negligent acts) or agreed to in writing, shall any Contributor be
-      liable to You for damages, including any direct, indirect, special,
-      incidental, or consequential damages of any character arising as a
-      result of this License or out of the use or inability to use the
-      Work (including but not limited to damages for loss of goodwill,
-      work stoppage, computer failure or malfunction, or any and all
-      other commercial damages or losses), even if such Contributor
-      has been advised of the possibility of such damages.
-
-   9. Accepting Warranty or Additional Liability. While redistributing
-      the Work or Derivative Works thereof, You may choose to offer,
-      and charge a fee for, acceptance of support, warranty, indemnity,
-      or other liability obligations and/or rights consistent with this
-      License. However, in accepting such obligations, You may act only
-      on Your own behalf and on Your sole responsibility, not on behalf
-      of any other Contributor, and only if You agree to indemnify,
-      defend, and hold each Contributor harmless for any liability
-      incurred by, or claims asserted against, such Contributor by reason
-      of your accepting any such warranty or additional liability.
-
-   END OF TERMS AND CONDITIONS
-
-   APPENDIX: How to apply the Apache License to your work.
-
-      To apply the Apache License to your work, attach the following
-      boilerplate notice, with the fields enclosed by brackets "[]"
-      replaced with your own identifying information. (Don't include
-      the brackets!)  The text should be enclosed in the appropriate
-      comment syntax for the file format. We also recommend that a
-      file or class name and description of purpose be included on the
-      same "printed page" as the copyright notice for easier
-      identification within third-party archives.
-
-   Copyright [yyyy] [name of copyright owner]
-
-   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.
-
-
-apksig:
-
-
-   Copyright (c) 2005-2008, 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.
-
-   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.
-
-
-                                 Apache License
-                           Version 2.0, January 2004
-                        http://www.apache.org/licenses/
-
-   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
-
-   1. Definitions.
-
-      "License" shall mean the terms and conditions for use, reproduction,
-      and distribution as defined by Sections 1 through 9 of this document.
-
-      "Licensor" shall mean the copyright owner or entity authorized by
-      the copyright owner that is granting the License.
-
-      "Legal Entity" shall mean the union of the acting entity and all
-      other entities that control, are controlled by, or are under common
-      control with that entity. For the purposes of this definition,
-      "control" means (i) the power, direct or indirect, to cause the
-      direction or management of such entity, whether by contract or
-      otherwise, or (ii) ownership of fifty percent (50%) or more of the
-      outstanding shares, or (iii) beneficial ownership of such entity.
-
-      "You" (or "Your") shall mean an individual or Legal Entity
-      exercising permissions granted by this License.
-
-      "Source" form shall mean the preferred form for making modifications,
-      including but not limited to software source code, documentation
-      source, and configuration files.
-
-      "Object" form shall mean any form resulting from mechanical
-      transformation or translation of a Source form, including but
-      not limited to compiled object code, generated documentation,
-      and conversions to other media types.
-
-      "Work" shall mean the work of authorship, whether in Source or
-      Object form, made available under the License, as indicated by a
-      copyright notice that is included in or attached to the work
-      (an example is provided in the Appendix below).
-
-      "Derivative Works" shall mean any work, whether in Source or Object
-      form, that is based on (or derived from) the Work and for which the
-      editorial revisions, annotations, elaborations, or other modifications
-      represent, as a whole, an original work of authorship. For the purposes
-      of this License, Derivative Works shall not include works that remain
-      separable from, or merely link (or bind by name) to the interfaces of,
-      the Work and Derivative Works thereof.
-
-      "Contribution" shall mean any work of authorship, including
-      the original version of the Work and any modifications or additions
-      to that Work or Derivative Works thereof, that is intentionally
-      submitted to Licensor for inclusion in the Work by the copyright owner
-      or by an individual or Legal Entity authorized to submit on behalf of
-      the copyright owner. For the purposes of this definition, "submitted"
-      means any form of electronic, verbal, or written communication sent
-      to the Licensor or its representatives, including but not limited to
-      communication on electronic mailing lists, source code control systems,
-      and issue tracking systems that are managed by, or on behalf of, the
-      Licensor for the purpose of discussing and improving the Work, but
-      excluding communication that is conspicuously marked or otherwise
-      designated in writing by the copyright owner as "Not a Contribution."
-
-      "Contributor" shall mean Licensor and any individual or Legal Entity
-      on behalf of whom a Contribution has been received by Licensor and
-      subsequently incorporated within the Work.
-
-   2. Grant of Copyright License. Subject to the terms and conditions of
-      this License, each Contributor hereby grants to You a perpetual,
-      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
-      copyright license to reproduce, prepare Derivative Works of,
-      publicly display, publicly perform, sublicense, and distribute the
-      Work and such Derivative Works in Source or Object form.
-
-   3. Grant of Patent License. Subject to the terms and conditions of
-      this License, each Contributor hereby grants to You a perpetual,
-      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
-      (except as stated in this section) patent license to make, have made,
-      use, offer to sell, sell, import, and otherwise transfer the Work,
-      where such license applies only to those patent claims licensable
-      by such Contributor that are necessarily infringed by their
-      Contribution(s) alone or by combination of their Contribution(s)
-      with the Work to which such Contribution(s) was submitted. If You
-      institute patent litigation against any entity (including a
-      cross-claim or counterclaim in a lawsuit) alleging that the Work
-      or a Contribution incorporated within the Work constitutes direct
-      or contributory patent infringement, then any patent licenses
-      granted to You under this License for that Work shall terminate
-      as of the date such litigation is filed.
-
-   4. Redistribution. You may reproduce and distribute copies of the
-      Work or Derivative Works thereof in any medium, with or without
-      modifications, and in Source or Object form, provided that You
-      meet the following conditions:
-
-      (a) You must give any other recipients of the Work or
-          Derivative Works a copy of this License; and
-
-      (b) You must cause any modified files to carry prominent notices
-          stating that You changed the files; and
-
-      (c) You must retain, in the Source form of any Derivative Works
-          that You distribute, all copyright, patent, trademark, and
-          attribution notices from the Source form of the Work,
-          excluding those notices that do not pertain to any part of
-          the Derivative Works; and
-
-      (d) If the Work includes a "NOTICE" text file as part of its
-          distribution, then any Derivative Works that You distribute must
-          include a readable copy of the attribution notices contained
-          within such NOTICE file, excluding those notices that do not
-          pertain to any part of the Derivative Works, in at least one
-          of the following places: within a NOTICE text file distributed
-          as part of the Derivative Works; within the Source form or
-          documentation, if provided along with the Derivative Works; or,
-          within a display generated by the Derivative Works, if and
-          wherever such third-party notices normally appear. The contents
-          of the NOTICE file are for informational purposes only and
-          do not modify the License. You may add Your own attribution
-          notices within Derivative Works that You distribute, alongside
-          or as an addendum to the NOTICE text from the Work, provided
-          that such additional attribution notices cannot be construed
-          as modifying the License.
-
-      You may add Your own copyright statement to Your modifications and
-      may provide additional or different license terms and conditions
-      for use, reproduction, or distribution of Your modifications, or
-      for any such Derivative Works as a whole, provided Your use,
-      reproduction, and distribution of the Work otherwise complies with
-      the conditions stated in this License.
-
-   5. Submission of Contributions. Unless You explicitly state otherwise,
-      any Contribution intentionally submitted for inclusion in the Work
-      by You to the Licensor shall be under the terms and conditions of
-      this License, without any additional terms or conditions.
-      Notwithstanding the above, nothing herein shall supersede or modify
-      the terms of any separate license agreement you may have executed
-      with Licensor regarding such Contributions.
-
-   6. Trademarks. This License does not grant permission to use the trade
-      names, trademarks, service marks, or product names of the Licensor,
-      except as required for reasonable and customary use in describing the
-      origin of the Work and reproducing the content of the NOTICE file.
-
-   7. Disclaimer of Warranty. Unless required by applicable law or
-      agreed to in writing, Licensor provides the Work (and each
-      Contributor provides its Contributions) on an "AS IS" BASIS,
-      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
-      implied, including, without limitation, any warranties or conditions
-      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
-      PARTICULAR PURPOSE. You are solely responsible for determining the
-      appropriateness of using or redistributing the Work and assume any
-      risks associated with Your exercise of permissions under this License.
-
-   8. Limitation of Liability. In no event and under no legal theory,
-      whether in tort (including negligence), contract, or otherwise,
-      unless required by applicable law (such as deliberate and grossly
-      negligent acts) or agreed to in writing, shall any Contributor be
-      liable to You for damages, including any direct, indirect, special,
-      incidental, or consequential damages of any character arising as a
-      result of this License or out of the use or inability to use the
-      Work (including but not limited to damages for loss of goodwill,
-      work stoppage, computer failure or malfunction, or any and all
-      other commercial damages or losses), even if such Contributor
-      has been advised of the possibility of such damages.
-
-   9. Accepting Warranty or Additional Liability. While redistributing
-      the Work or Derivative Works thereof, You may choose to offer,
-      and charge a fee for, acceptance of support, warranty, indemnity,
-      or other liability obligations and/or rights consistent with this
-      License. However, in accepting such obligations, You may act only
-      on Your own behalf and on Your sole responsibility, not on behalf
-      of any other Contributor, and only if You agree to indemnify,
-      defend, and hold each Contributor harmless for any liability
-      incurred by, or claims asserted against, such Contributor by reason
-      of your accepting any such warranty or additional liability.
-
-   END OF TERMS AND CONDITIONS
-
diff --git a/third_party/android_deps/libs/com_google_android_gms_play_services_base/README.chromium b/third_party/android_deps/libs/com_google_android_gms_play_services_base/README.chromium
index 348b4a3..8f4a4ddc 100644
--- a/third_party/android_deps/libs/com_google_android_gms_play_services_base/README.chromium
+++ b/third_party/android_deps/libs/com_google_android_gms_play_services_base/README.chromium
@@ -1,7 +1,7 @@
 Name: play-services-base
 Short Name: play-services-base
 URL: https://developers.google.com/android/guides/setup
-Version: 18.1.0
+Version: 18.0.1
 License: Android Software Development Kit License
 License File: LICENSE
 CPEPrefix: unknown
diff --git a/third_party/android_deps/libs/com_google_android_gms_play_services_basement/3pp/fetch.py b/third_party/android_deps/libs/com_google_android_gms_play_services_basement/3pp/fetch.py
index 4ff8005c..e87e6906 100755
--- a/third_party/android_deps/libs/com_google_android_gms_play_services_basement/3pp/fetch.py
+++ b/third_party/android_deps/libs/com_google_android_gms_play_services_basement/3pp/fetch.py
@@ -19,7 +19,7 @@
                          module_name='play-services-basement',
                          file_ext='aar',
                          patch_version='cr1',
-                         version_override='18.1.0',
+                         version_override=None,
                          version_filter=None)
 
 
diff --git a/third_party/android_deps/libs/com_google_android_gms_play_services_tasks/3pp/fetch.py b/third_party/android_deps/libs/com_google_android_gms_play_services_tasks/3pp/fetch.py
index 0a6c624..a40325f 100755
--- a/third_party/android_deps/libs/com_google_android_gms_play_services_tasks/3pp/fetch.py
+++ b/third_party/android_deps/libs/com_google_android_gms_play_services_tasks/3pp/fetch.py
@@ -19,7 +19,7 @@
                          module_name='play-services-tasks',
                          file_ext='aar',
                          patch_version='cr1',
-                         version_override='18.0.2',
+                         version_override=None,
                          version_filter=None)
 
 
diff --git a/third_party/android_deps/libs/com_google_android_gms_play_services_tflite_impl/3pp/3pp.pb b/third_party/android_deps/libs/com_google_android_gms_play_services_tflite_impl/3pp/3pp.pb
deleted file mode 100644
index d743b51b..0000000
--- a/third_party/android_deps/libs/com_google_android_gms_play_services_tflite_impl/3pp/3pp.pb
+++ /dev/null
@@ -1,16 +0,0 @@
-# Copyright 2021 The Chromium Authors
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-# This is generated, do not edit. Update BuildConfigGenerator.groovy instead.
-
-create {
-  source {
-    script { name: "fetch.py" }
-  }
-}
-
-upload {
-  pkg_prefix: "chromium/third_party/android_deps/libs"
-  universal: true
-}
diff --git a/third_party/android_deps/libs/com_google_android_gms_play_services_tflite_impl/3pp/fetch.py b/third_party/android_deps/libs/com_google_android_gms_play_services_tflite_impl/3pp/fetch.py
deleted file mode 100755
index 5f27822..0000000
--- a/third_party/android_deps/libs/com_google_android_gms_play_services_tflite_impl/3pp/fetch.py
+++ /dev/null
@@ -1,27 +0,0 @@
-#!/usr/bin/env python3
-# Copyright 2021 The Chromium Authors
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-# This is generated, do not edit. Update BuildConfigGenerator.groovy and
-# 3ppFetch.template instead.
-
-import pathlib
-import sys
-
-_3PP_DIR = pathlib.Path(__file__).resolve().parent
-sys.path.insert(0, str(_3PP_DIR.parents[2]))
-import fetch_common
-
-_REPO_URL = 'https://dl.google.com/dl/android/maven2'
-SPEC = fetch_common.Spec(repo_url=_REPO_URL,
-                         group_name='com/google/android/gms',
-                         module_name='play-services-tflite-impl',
-                         file_ext='aar',
-                         patch_version='cr1',
-                         version_override='16.0.1',
-                         version_filter=None)
-
-
-if __name__ == '__main__':
-    fetch_common.main(SPEC)
diff --git a/third_party/android_deps/libs/com_google_android_gms_play_services_tflite_impl/LICENSE b/third_party/android_deps/libs/com_google_android_gms_play_services_tflite_impl/LICENSE
deleted file mode 100644
index e3c46176..0000000
--- a/third_party/android_deps/libs/com_google_android_gms_play_services_tflite_impl/LICENSE
+++ /dev/null
@@ -1,5123 +0,0 @@
-Terms and conditions
-
-This is the Android Software Development Kit License Agreement
-
-1. Introduction
-
-1.1 The Android Software Development Kit (referred to in the License Agreement as the "SDK" and specifically including the Android system files, packaged APIs, and Google APIs add-ons) is licensed to you subject to the terms of the License Agreement. The License Agreement forms a legally binding contract between you and Google in relation to your use of the SDK.
-
-1.2 "Android" means the Android software stack for devices, as made available under the Android Open Source Project, which is located at the following URL: http://source.android.com/, as updated from time to time.
-
-1.3 A "compatible implementation" means any Android device that (i) complies with the Android Compatibility Definition document, which can be found at the Android compatibility website (http://source.android.com/compatibility) and which may be updated from time to time; and (ii) successfully passes the Android Compatibility Test Suite (CTS).
-
-1.4 "Google" means Google LLC, a Delaware corporation with principal place of business at 1600 Amphitheatre Parkway, Mountain View, CA 94043, United States.
-
-
-2. Accepting this License Agreement
-
-2.1 In order to use the SDK, you must first agree to the License Agreement. You may not use the SDK if you do not accept the License Agreement.
-
-2.2 By clicking to accept, you hereby agree to the terms of the License Agreement.
-
-2.3 You may not use the SDK and may not accept the License Agreement if you are a person barred from receiving the SDK under the laws of the United States or other countries, including the country in which you are resident or from which you use the SDK.
-
-2.4 If you are agreeing to be bound by the License Agreement on behalf of your employer or other entity, you represent and warrant that you have full legal authority to bind your employer or such entity to the License Agreement. If you do not have the requisite authority, you may not accept the License Agreement or use the SDK on behalf of your employer or other entity.
-
-
-3. SDK License from Google
-
-3.1 Subject to the terms of the License Agreement, Google grants you a limited, worldwide, royalty-free, non-assignable, non-exclusive, and non-sublicensable license to use the SDK solely to develop applications for compatible implementations of Android.
-
-3.2 You may not use this SDK to develop applications for other platforms (including non-compatible implementations of Android) or to develop another SDK. You are of course free to develop applications for other platforms, including non-compatible implementations of Android, provided that this SDK is not used for that purpose.
-
-3.3 You agree that Google or third parties own all legal right, title and interest in and to the SDK, including any Intellectual Property Rights that subsist in the SDK. "Intellectual Property Rights" means any and all rights under patent law, copyright law, trade secret law, trademark law, and any and all other proprietary rights. Google reserves all rights not expressly granted to you.
-
-3.4 You may not use the SDK for any purpose not expressly permitted by the License Agreement.  Except to the extent required by applicable third party licenses, you may not copy (except for backup purposes), modify, adapt, redistribute, decompile, reverse engineer, disassemble, or create derivative works of the SDK or any part of the SDK.
-
-3.5 Use, reproduction and distribution of components of the SDK licensed under an open source software license are governed solely by the terms of that open source software license and not the License Agreement.
-
-3.6 You agree that the form and nature of the SDK that Google provides may change without prior notice to you and that future versions of the SDK may be incompatible with applications developed on previous versions of the SDK. You agree that Google may stop (permanently or temporarily) providing the SDK (or any features within the SDK) to you or to users generally at Google's sole discretion, without prior notice to you.
-
-3.7 Nothing in the License Agreement gives you a right to use any of Google's trade names, trademarks, service marks, logos, domain names, or other distinctive brand features.
-
-3.8 You agree that you will not remove, obscure, or alter any proprietary rights notices (including copyright and trademark notices) that may be affixed to or contained within the SDK.
-
-
-4. Use of the SDK by You
-
-4.1 Google agrees that it obtains no right, title or interest from you (or your licensors) under the License Agreement in or to any software applications that you develop using the SDK, including any intellectual property rights that subsist in those applications.
-
-4.2 You agree to use the SDK and write applications only for purposes that are permitted by (a) the License Agreement and (b) any applicable law, regulation or generally accepted practices or guidelines in the relevant jurisdictions (including any laws regarding the export of data or software to and from the United States or other relevant countries).
-
-4.3 You agree that if you use the SDK to develop applications for general public users, you will protect the privacy and legal rights of those users. If the users provide you with user names, passwords, or other login information or personal information, you must make the users aware that the information will be available to your application, and you must provide legally adequate privacy notice and protection for those users. If your application stores personal or sensitive information provided by users, it must do so securely. If the user provides your application with Google Account information, your application may only use that information to access the user's Google Account when, and for the limited purposes for which, the user has given you permission to do so.
-
-4.4 You agree that you will not engage in any activity with the SDK, including the development or distribution of an application, that interferes with, disrupts, damages, or accesses in an unauthorized manner the servers, networks, or other properties or services of any third party including, but not limited to, Google or any mobile communications carrier.
-
-4.5 You agree that you are solely responsible for (and that Google has no responsibility to you or to any third party for) any data, content, or resources that you create, transmit or display through Android and/or applications for Android, and for the consequences of your actions (including any loss or damage which Google may suffer) by doing so.
-
-4.6 You agree that you are solely responsible for (and that Google has no responsibility to you or to any third party for) any breach of your obligations under the License Agreement, any applicable third party contract or Terms of Service, or any applicable law or regulation, and for the consequences (including any loss or damage which Google or any third party may suffer) of any such breach.
-
-
-5. Your Developer Credentials
-
-5.1 You agree that you are responsible for maintaining the confidentiality of any developer credentials that may be issued to you by Google or which you may choose yourself and that you will be solely responsible for all applications that are developed under your developer credentials.
-
-
-6. Privacy and Information
-
-6.1 In order to continually innovate and improve the SDK, Google may collect certain usage statistics from the software including but not limited to a unique identifier, associated IP address, version number of the software, and information on which tools and/or services in the SDK are being used and how they are being used. Before any of this information is collected, the SDK will notify you and seek your consent. If you withhold consent, the information will not be collected.
-
-6.2 The data collected is examined in the aggregate to improve the SDK and is maintained in accordance with Google's Privacy Policy.
-
-
-7. Third Party Applications
-
-7.1 If you use the SDK to run applications developed by a third party or that access data, content or resources provided by a third party, you agree that Google is not responsible for those applications, data, content, or resources. You understand that all data, content or resources which you may access through such third party applications are the sole responsibility of the person from which they originated and that Google is not liable for any loss or damage that you may experience as a result of the use or access of any of those third party applications, data, content, or resources.
-
-7.2 You should be aware the data, content, and resources presented to you through such a third party application may be protected by intellectual property rights which are owned by the providers (or by other persons or companies on their behalf). You may not modify, rent, lease, loan, sell, distribute or create derivative works based on these data, content, or resources (either in whole or in part) unless you have been specifically given permission to do so by the relevant owners.
-
-7.3 You acknowledge that your use of such third party applications, data, content, or resources may be subject to separate terms between you and the relevant third party. In that case, the License Agreement does not affect your legal relationship with these third parties.
-
-
-8. Using Android APIs
-
-8.1 Google Data APIs
-
-8.1.1 If you use any API to retrieve data from Google, you acknowledge that the data may be protected by intellectual property rights which are owned by Google or those parties that provide the data (or by other persons or companies on their behalf). Your use of any such API may be subject to additional Terms of Service. You may not modify, rent, lease, loan, sell, distribute or create derivative works based on this data (either in whole or in part) unless allowed by the relevant Terms of Service.
-
-8.1.2 If you use any API to retrieve a user's data from Google, you acknowledge and agree that you shall retrieve data only with the user's explicit consent and only when, and for the limited purposes for which, the user has given you permission to do so.
-
-
-9. Terminating this License Agreement
-
-9.1 The License Agreement will continue to apply until terminated by either you or Google as set out below.
-
-9.2 If you want to terminate the License Agreement, you may do so by ceasing your use of the SDK and any relevant developer credentials.
-
-9.3 Google may at any time, terminate the License Agreement with you if:
-(A) you have breached any provision of the License Agreement; or
-(B) Google is required to do so by law; or
-(C) the partner with whom Google offered certain parts of SDK (such as APIs) to you has terminated its relationship with Google or ceased to offer certain parts of the SDK to you; or
-(D) Google decides to no longer provide the SDK or certain parts of the SDK to users in the country in which you are resident or from which you use the service, or the provision of the SDK or certain SDK services to you by Google is, in Google's sole discretion, no longer commercially viable.
-
-9.4 When the License Agreement comes to an end, all of the legal rights, obligations and liabilities that you and Google have benefited from, been subject to (or which have accrued over time whilst the License Agreement has been in force) or which are expressed to continue indefinitely, shall be unaffected by this cessation, and the provisions of paragraph 14.7 shall continue to apply to such rights, obligations and liabilities indefinitely.
-
-
-10. DISCLAIMER OF WARRANTIES
-
-10.1 YOU EXPRESSLY UNDERSTAND AND AGREE THAT YOUR USE OF THE SDK IS AT YOUR SOLE RISK AND THAT THE SDK IS PROVIDED "AS IS" AND "AS AVAILABLE" WITHOUT WARRANTY OF ANY KIND FROM GOOGLE.
-
-10.2 YOUR USE OF THE SDK AND ANY MATERIAL DOWNLOADED OR OTHERWISE OBTAINED THROUGH THE USE OF THE SDK IS AT YOUR OWN DISCRETION AND RISK AND YOU ARE SOLELY RESPONSIBLE FOR ANY DAMAGE TO YOUR COMPUTER SYSTEM OR OTHER DEVICE OR LOSS OF DATA THAT RESULTS FROM SUCH USE.
-
-10.3 GOOGLE FURTHER EXPRESSLY DISCLAIMS ALL WARRANTIES AND CONDITIONS OF ANY KIND, WHETHER EXPRESS OR IMPLIED, INCLUDING, BUT NOT LIMITED TO THE IMPLIED WARRANTIES AND CONDITIONS OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT.
-
-
-11. LIMITATION OF LIABILITY
-
-11.1 YOU EXPRESSLY UNDERSTAND AND AGREE THAT GOOGLE, ITS SUBSIDIARIES AND AFFILIATES, AND ITS LICENSORS SHALL NOT BE LIABLE TO YOU UNDER ANY THEORY OF LIABILITY FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, CONSEQUENTIAL OR EXEMPLARY DAMAGES THAT MAY BE INCURRED BY YOU, INCLUDING ANY LOSS OF DATA, WHETHER OR NOT GOOGLE OR ITS REPRESENTATIVES HAVE BEEN ADVISED OF OR SHOULD HAVE BEEN AWARE OF THE POSSIBILITY OF ANY SUCH LOSSES ARISING.
-
-
-12. Indemnification
-
-12.1 To the maximum extent permitted by law, you agree to defend, indemnify and hold harmless Google, its affiliates and their respective directors, officers, employees and agents from and against any and all claims, actions, suits or proceedings, as well as any and all losses, liabilities, damages, costs and expenses (including reasonable attorneys fees) arising out of or accruing from (a) your use of the SDK, (b) any application you develop on the SDK that infringes any copyright, trademark, trade secret, trade dress, patent or other intellectual property right of any person or defames any person or violates their rights of publicity or privacy, and (c) any non-compliance by you with the License Agreement.
-
-
-13. Changes to the License Agreement
-
-13.1 Google may make changes to the License Agreement as it distributes new versions of the SDK. When these changes are made, Google will make a new version of the License Agreement available on the website where the SDK is made available.
-
-
-14. General Legal Terms
-
-14.1 The License Agreement constitutes the whole legal agreement between you and Google and governs your use of the SDK (excluding any services which Google may provide to you under a separate written agreement), and completely replaces any prior agreements between you and Google in relation to the SDK.
-
-14.2 You agree that if Google does not exercise or enforce any legal right or remedy which is contained in the License Agreement (or which Google has the benefit of under any applicable law), this will not be taken to be a formal waiver of Google's rights and that those rights or remedies will still be available to Google.
-
-14.3 If any court of law, having the jurisdiction to decide on this matter, rules that any provision of the License Agreement is invalid, then that provision will be removed from the License Agreement without affecting the rest of the License Agreement. The remaining provisions of the License Agreement will continue to be valid and enforceable.
-
-14.4 You acknowledge and agree that each member of the group of companies of which Google is the parent shall be third party beneficiaries to the License Agreement and that such other companies shall be entitled to directly enforce, and rely upon, any provision of the License Agreement that confers a benefit on (or rights in favor of) them. Other than this, no other person or company shall be third party beneficiaries to the License Agreement.
-
-14.5 EXPORT RESTRICTIONS. THE SDK IS SUBJECT TO UNITED STATES EXPORT LAWS AND REGULATIONS. YOU MUST COMPLY WITH ALL DOMESTIC AND INTERNATIONAL EXPORT LAWS AND REGULATIONS THAT APPLY TO THE SDK. THESE LAWS INCLUDE RESTRICTIONS ON DESTINATIONS, END USERS AND END USE.
-
-14.6 The rights granted in the License Agreement may not be assigned or transferred by either you or Google without the prior written approval of the other party. Neither you nor Google shall be permitted to delegate their responsibilities or obligations under the License Agreement without the prior written approval of the other party.
-
-14.7 The License Agreement, and your relationship with Google under the License Agreement, shall be governed by the laws of the State of California without regard to its conflict of laws provisions. You and Google agree to submit to the exclusive jurisdiction of the courts located within the county of Santa Clara, California to resolve any legal matter arising from the License Agreement. Notwithstanding this, you agree that Google shall still be allowed to apply for injunctive remedies (or an equivalent type of urgent legal relief) in any jurisdiction.
-
-
-December 9, 2016
-
-
-AndroidX annotation experimental library:
-
-
- Copyright (c) 2005-2011, 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.
-
-   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.
-
-
-                                 Apache License
-                           Version 2.0, January 2004
-                        http://www.apache.org/licenses/
-
-   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
-
-   1. Definitions.
-
-      "License" shall mean the terms and conditions for use, reproduction,
-      and distribution as defined by Sections 1 through 9 of this document.
-
-      "Licensor" shall mean the copyright owner or entity authorized by
-      the copyright owner that is granting the License.
-
-      "Legal Entity" shall mean the union of the acting entity and all
-      other entities that control, are controlled by, or are under common
-      control with that entity. For the purposes of this definition,
-      "control" means (i) the power, direct or indirect, to cause the
-      direction or management of such entity, whether by contract or
-      otherwise, or (ii) ownership of fifty percent (50%) or more of the
-      outstanding shares, or (iii) beneficial ownership of such entity.
-
-      "You" (or "Your") shall mean an individual or Legal Entity
-      exercising permissions granted by this License.
-
-      "Source" form shall mean the preferred form for making modifications,
-      including but not limited to software source code, documentation
-      source, and configuration files.
-
-      "Object" form shall mean any form resulting from mechanical
-      transformation or translation of a Source form, including but
-      not limited to compiled object code, generated documentation,
-      and conversions to other media types.
-
-      "Work" shall mean the work of authorship, whether in Source or
-      Object form, made available under the License, as indicated by a
-      copyright notice that is included in or attached to the work
-      (an example is provided in the Appendix below).
-
-      "Derivative Works" shall mean any work, whether in Source or Object
-      form, that is based on (or derived from) the Work and for which the
-      editorial revisions, annotations, elaborations, or other modifications
-      represent, as a whole, an original work of authorship. For the purposes
-      of this License, Derivative Works shall not include works that remain
-      separable from, or merely link (or bind by name) to the interfaces of,
-      the Work and Derivative Works thereof.
-
-      "Contribution" shall mean any work of authorship, including
-      the original version of the Work and any modifications or additions
-      to that Work or Derivative Works thereof, that is intentionally
-      submitted to Licensor for inclusion in the Work by the copyright owner
-      or by an individual or Legal Entity authorized to submit on behalf of
-      the copyright owner. For the purposes of this definition, "submitted"
-      means any form of electronic, verbal, or written communication sent
-      to the Licensor or its representatives, including but not limited to
-      communication on electronic mailing lists, source code control systems,
-      and issue tracking systems that are managed by, or on behalf of, the
-      Licensor for the purpose of discussing and improving the Work, but
-      excluding communication that is conspicuously marked or otherwise
-      designated in writing by the copyright owner as "Not a Contribution."
-
-      "Contributor" shall mean Licensor and any individual or Legal Entity
-      on behalf of whom a Contribution has been received by Licensor and
-      subsequently incorporated within the Work.
-
-   2. Grant of Copyright License. Subject to the terms and conditions of
-      this License, each Contributor hereby grants to You a perpetual,
-      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
-      copyright license to reproduce, prepare Derivative Works of,
-      publicly display, publicly perform, sublicense, and distribute the
-      Work and such Derivative Works in Source or Object form.
-
-   3. Grant of Patent License. Subject to the terms and conditions of
-      this License, each Contributor hereby grants to You a perpetual,
-      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
-      (except as stated in this section) patent license to make, have made,
-      use, offer to sell, sell, import, and otherwise transfer the Work,
-      where such license applies only to those patent claims licensable
-      by such Contributor that are necessarily infringed by their
-      Contribution(s) alone or by combination of their Contribution(s)
-      with the Work to which such Contribution(s) was submitted. If You
-      institute patent litigation against any entity (including a
-      cross-claim or counterclaim in a lawsuit) alleging that the Work
-      or a Contribution incorporated within the Work constitutes direct
-      or contributory patent infringement, then any patent licenses
-      granted to You under this License for that Work shall terminate
-      as of the date such litigation is filed.
-
-   4. Redistribution. You may reproduce and distribute copies of the
-      Work or Derivative Works thereof in any medium, with or without
-      modifications, and in Source or Object form, provided that You
-      meet the following conditions:
-
-      (a) You must give any other recipients of the Work or
-          Derivative Works a copy of this License; and
-
-      (b) You must cause any modified files to carry prominent notices
-          stating that You changed the files; and
-
-      (c) You must retain, in the Source form of any Derivative Works
-          that You distribute, all copyright, patent, trademark, and
-          attribution notices from the Source form of the Work,
-          excluding those notices that do not pertain to any part of
-          the Derivative Works; and
-
-      (d) If the Work includes a "NOTICE" text file as part of its
-          distribution, then any Derivative Works that You distribute must
-          include a readable copy of the attribution notices contained
-          within such NOTICE file, excluding those notices that do not
-          pertain to any part of the Derivative Works, in at least one
-          of the following places: within a NOTICE text file distributed
-          as part of the Derivative Works; within the Source form or
-          documentation, if provided along with the Derivative Works; or,
-          within a display generated by the Derivative Works, if and
-          wherever such third-party notices normally appear. The contents
-          of the NOTICE file are for informational purposes only and
-          do not modify the License. You may add Your own attribution
-          notices within Derivative Works that You distribute, alongside
-          or as an addendum to the NOTICE text from the Work, provided
-          that such additional attribution notices cannot be construed
-          as modifying the License.
-
-      You may add Your own copyright statement to Your modifications and
-      may provide additional or different license terms and conditions
-      for use, reproduction, or distribution of Your modifications, or
-      for any such Derivative Works as a whole, provided Your use,
-      reproduction, and distribution of the Work otherwise complies with
-      the conditions stated in this License.
-
-   5. Submission of Contributions. Unless You explicitly state otherwise,
-      any Contribution intentionally submitted for inclusion in the Work
-      by You to the Licensor shall be under the terms and conditions of
-      this License, without any additional terms or conditions.
-      Notwithstanding the above, nothing herein shall supersede or modify
-      the terms of any separate license agreement you may have executed
-      with Licensor regarding such Contributions.
-
-   6. Trademarks. This License does not grant permission to use the trade
-      names, trademarks, service marks, or product names of the Licensor,
-      except as required for reasonable and customary use in describing the
-      origin of the Work and reproducing the content of the NOTICE file.
-
-   7. Disclaimer of Warranty. Unless required by applicable law or
-      agreed to in writing, Licensor provides the Work (and each
-      Contributor provides its Contributions) on an "AS IS" BASIS,
-      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
-      implied, including, without limitation, any warranties or conditions
-      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
-      PARTICULAR PURPOSE. You are solely responsible for determining the
-      appropriateness of using or redistributing the Work and assume any
-      risks associated with Your exercise of permissions under this License.
-
-   8. Limitation of Liability. In no event and under no legal theory,
-      whether in tort (including negligence), contract, or otherwise,
-      unless required by applicable law (such as deliberate and grossly
-      negligent acts) or agreed to in writing, shall any Contributor be
-      liable to You for damages, including any direct, indirect, special,
-      incidental, or consequential damages of any character arising as a
-      result of this License or out of the use or inability to use the
-      Work (including but not limited to damages for loss of goodwill,
-      work stoppage, computer failure or malfunction, or any and all
-      other commercial damages or losses), even if such Contributor
-      has been advised of the possibility of such damages.
-
-   9. Accepting Warranty or Additional Liability. While redistributing
-      the Work or Derivative Works thereof, You may choose to offer,
-      and charge a fee for, acceptance of support, warranty, indemnity,
-      or other liability obligations and/or rights consistent with this
-      License. However, in accepting such obligations, You may act only
-      on Your own behalf and on Your sole responsibility, not on behalf
-      of any other Contributor, and only if You agree to indemnify,
-      defend, and hold each Contributor harmless for any liability
-      incurred by, or claims asserted against, such Contributor by reason
-      of your accepting any such warranty or additional liability.
-
-   END OF TERMS AND CONDITIONS
-
-AndroidX tracing library:
-
-
-   Copyright (c) 2005-2011, 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.
-
-   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.
-
-
-                                 Apache License
-                           Version 2.0, January 2004
-                        http://www.apache.org/licenses/
-
-   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
-
-   1. Definitions.
-
-      "License" shall mean the terms and conditions for use, reproduction,
-      and distribution as defined by Sections 1 through 9 of this document.
-
-      "Licensor" shall mean the copyright owner or entity authorized by
-      the copyright owner that is granting the License.
-
-      "Legal Entity" shall mean the union of the acting entity and all
-      other entities that control, are controlled by, or are under common
-      control with that entity. For the purposes of this definition,
-      "control" means (i) the power, direct or indirect, to cause the
-      direction or management of such entity, whether by contract or
-      otherwise, or (ii) ownership of fifty percent (50%) or more of the
-      outstanding shares, or (iii) beneficial ownership of such entity.
-
-      "You" (or "Your") shall mean an individual or Legal Entity
-      exercising permissions granted by this License.
-
-      "Source" form shall mean the preferred form for making modifications,
-      including but not limited to software source code, documentation
-      source, and configuration files.
-
-      "Object" form shall mean any form resulting from mechanical
-      transformation or translation of a Source form, including but
-      not limited to compiled object code, generated documentation,
-      and conversions to other media types.
-
-      "Work" shall mean the work of authorship, whether in Source or
-      Object form, made available under the License, as indicated by a
-      copyright notice that is included in or attached to the work
-      (an example is provided in the Appendix below).
-
-      "Derivative Works" shall mean any work, whether in Source or Object
-      form, that is based on (or derived from) the Work and for which the
-      editorial revisions, annotations, elaborations, or other modifications
-      represent, as a whole, an original work of authorship. For the purposes
-      of this License, Derivative Works shall not include works that remain
-      separable from, or merely link (or bind by name) to the interfaces of,
-      the Work and Derivative Works thereof.
-
-      "Contribution" shall mean any work of authorship, including
-      the original version of the Work and any modifications or additions
-      to that Work or Derivative Works thereof, that is intentionally
-      submitted to Licensor for inclusion in the Work by the copyright owner
-      or by an individual or Legal Entity authorized to submit on behalf of
-      the copyright owner. For the purposes of this definition, "submitted"
-      means any form of electronic, verbal, or written communication sent
-      to the Licensor or its representatives, including but not limited to
-      communication on electronic mailing lists, source code control systems,
-      and issue tracking systems that are managed by, or on behalf of, the
-      Licensor for the purpose of discussing and improving the Work, but
-      excluding communication that is conspicuously marked or otherwise
-      designated in writing by the copyright owner as "Not a Contribution."
-
-      "Contributor" shall mean Licensor and any individual or Legal Entity
-      on behalf of whom a Contribution has been received by Licensor and
-      subsequently incorporated within the Work.
-
-   2. Grant of Copyright License. Subject to the terms and conditions of
-      this License, each Contributor hereby grants to You a perpetual,
-      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
-      copyright license to reproduce, prepare Derivative Works of,
-      publicly display, publicly perform, sublicense, and distribute the
-      Work and such Derivative Works in Source or Object form.
-
-   3. Grant of Patent License. Subject to the terms and conditions of
-      this License, each Contributor hereby grants to You a perpetual,
-      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
-      (except as stated in this section) patent license to make, have made,
-      use, offer to sell, sell, import, and otherwise transfer the Work,
-      where such license applies only to those patent claims licensable
-      by such Contributor that are necessarily infringed by their
-      Contribution(s) alone or by combination of their Contribution(s)
-      with the Work to which such Contribution(s) was submitted. If You
-      institute patent litigation against any entity (including a
-      cross-claim or counterclaim in a lawsuit) alleging that the Work
-      or a Contribution incorporated within the Work constitutes direct
-      or contributory patent infringement, then any patent licenses
-      granted to You under this License for that Work shall terminate
-      as of the date such litigation is filed.
-
-   4. Redistribution. You may reproduce and distribute copies of the
-      Work or Derivative Works thereof in any medium, with or without
-      modifications, and in Source or Object form, provided that You
-      meet the following conditions:
-
-      (a) You must give any other recipients of the Work or
-          Derivative Works a copy of this License; and
-
-      (b) You must cause any modified files to carry prominent notices
-          stating that You changed the files; and
-
-      (c) You must retain, in the Source form of any Derivative Works
-          that You distribute, all copyright, patent, trademark, and
-          attribution notices from the Source form of the Work,
-          excluding those notices that do not pertain to any part of
-          the Derivative Works; and
-
-      (d) If the Work includes a "NOTICE" text file as part of its
-          distribution, then any Derivative Works that You distribute must
-          include a readable copy of the attribution notices contained
-          within such NOTICE file, excluding those notices that do not
-          pertain to any part of the Derivative Works, in at least one
-          of the following places: within a NOTICE text file distributed
-          as part of the Derivative Works; within the Source form or
-          documentation, if provided along with the Derivative Works; or,
-          within a display generated by the Derivative Works, if and
-          wherever such third-party notices normally appear. The contents
-          of the NOTICE file are for informational purposes only and
-          do not modify the License. You may add Your own attribution
-          notices within Derivative Works that You distribute, alongside
-          or as an addendum to the NOTICE text from the Work, provided
-          that such additional attribution notices cannot be construed
-          as modifying the License.
-
-      You may add Your own copyright statement to Your modifications and
-      may provide additional or different license terms and conditions
-      for use, reproduction, or distribution of Your modifications, or
-      for any such Derivative Works as a whole, provided Your use,
-      reproduction, and distribution of the Work otherwise complies with
-      the conditions stated in this License.
-
-   5. Submission of Contributions. Unless You explicitly state otherwise,
-      any Contribution intentionally submitted for inclusion in the Work
-      by You to the Licensor shall be under the terms and conditions of
-      this License, without any additional terms or conditions.
-      Notwithstanding the above, nothing herein shall supersede or modify
-      the terms of any separate license agreement you may have executed
-      with Licensor regarding such Contributions.
-
-   6. Trademarks. This License does not grant permission to use the trade
-      names, trademarks, service marks, or product names of the Licensor,
-      except as required for reasonable and customary use in describing the
-      origin of the Work and reproducing the content of the NOTICE file.
-
-   7. Disclaimer of Warranty. Unless required by applicable law or
-      agreed to in writing, Licensor provides the Work (and each
-      Contributor provides its Contributions) on an "AS IS" BASIS,
-      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
-      implied, including, without limitation, any warranties or conditions
-      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
-      PARTICULAR PURPOSE. You are solely responsible for determining the
-      appropriateness of using or redistributing the Work and assume any
-      risks associated with Your exercise of permissions under this License.
-
-   8. Limitation of Liability. In no event and under no legal theory,
-      whether in tort (including negligence), contract, or otherwise,
-      unless required by applicable law (such as deliberate and grossly
-      negligent acts) or agreed to in writing, shall any Contributor be
-      liable to You for damages, including any direct, indirect, special,
-      incidental, or consequential damages of any character arising as a
-      result of this License or out of the use or inability to use the
-      Work (including but not limited to damages for loss of goodwill,
-      work stoppage, computer failure or malfunction, or any and all
-      other commercial damages or losses), even if such Contributor
-      has been advised of the possibility of such damages.
-
-   9. Accepting Warranty or Additional Liability. While redistributing
-      the Work or Derivative Works thereof, You may choose to offer,
-      and charge a fee for, acceptance of support, warranty, indemnity,
-      or other liability obligations and/or rights consistent with this
-      License. However, in accepting such obligations, You may act only
-      on Your own behalf and on Your sole responsibility, not on behalf
-      of any other Contributor, and only if You agree to indemnify,
-      defend, and hold each Contributor harmless for any liability
-      incurred by, or claims asserted against, such Contributor by reason
-      of your accepting any such warranty or additional liability.
-
-   END OF TERMS AND CONDITIONS
-
-
-Animal Sniffer:
-
-The MIT License
-
-Copyright (c) 2008 Kohsuke Kawaguchi and codehaus.org.
-
-Permission is hereby granted, free of charge, to any person obtaining a copy
-of this software and associated documentation files (the "Software"), to deal
-in the Software without restriction, including without limitation the rights
-to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-copies of the Software, and to permit persons to whom the Software is
-furnished to do so, subject to the following conditions:
-
-The above copyright notice and this permission notice shall be included in
-all copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
-THE SOFTWARE.
-
-
-Checker Framework Annotations:
-
-A few parts of the Checker Framework have more permissive licenses.
-
- * The annotations are licensed under the MIT License.  (The text of this
-   license appears below.)  More specifically, all the parts of the Checker
-   Framework that you might want to include with your own program use the
-   MIT License.  This is the checker-qual.jar file and all the files that
-   appear in it:  every file in a qual/ directory, plus utility files such
-   as NullnessUtil.java, RegexUtil.java, SignednessUtil.java, etc.
-   In addition, the cleanroom implementations of third-party annotations,
-   which the Checker Framework recognizes as aliases for its own
-   annotations, are licensed under the MIT License.
-
-===========================================================================
-
-MIT License:
-
-Permission is hereby granted, free of charge, to any person obtaining a copy
-of this software and associated documentation files (the "Software"), to deal
-in the Software without restriction, including without limitation the rights
-to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-copies of the Software, and to permit persons to whom the Software is
-furnished to do so, subject to the following conditions:
-
-The above copyright notice and this permission notice shall be included in
-all copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
-THE SOFTWARE.
-
-===========================================================================
-
-
-Error Prone:
-
-                                 Apache License
-                           Version 2.0, January 2004
-                        http://www.apache.org/licenses/
-
-   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
-
-   1. Definitions.
-
-      "License" shall mean the terms and conditions for use, reproduction,
-      and distribution as defined by Sections 1 through 9 of this document.
-
-      "Licensor" shall mean the copyright owner or entity authorized by
-      the copyright owner that is granting the License.
-
-      "Legal Entity" shall mean the union of the acting entity and all
-      other entities that control, are controlled by, or are under common
-      control with that entity. For the purposes of this definition,
-      "control" means (i) the power, direct or indirect, to cause the
-      direction or management of such entity, whether by contract or
-      otherwise, or (ii) ownership of fifty percent (50%) or more of the
-      outstanding shares, or (iii) beneficial ownership of such entity.
-
-      "You" (or "Your") shall mean an individual or Legal Entity
-      exercising permissions granted by this License.
-
-      "Source" form shall mean the preferred form for making modifications,
-      including but not limited to software source code, documentation
-      source, and configuration files.
-
-      "Object" form shall mean any form resulting from mechanical
-      transformation or translation of a Source form, including but
-      not limited to compiled object code, generated documentation,
-      and conversions to other media types.
-
-      "Work" shall mean the work of authorship, whether in Source or
-      Object form, made available under the License, as indicated by a
-      copyright notice that is included in or attached to the work
-      (an example is provided in the Appendix below).
-
-      "Derivative Works" shall mean any work, whether in Source or Object
-      form, that is based on (or derived from) the Work and for which the
-      editorial revisions, annotations, elaborations, or other modifications
-      represent, as a whole, an original work of authorship. For the purposes
-      of this License, Derivative Works shall not include works that remain
-      separable from, or merely link (or bind by name) to the interfaces of,
-      the Work and Derivative Works thereof.
-
-      "Contribution" shall mean any work of authorship, including
-      the original version of the Work and any modifications or additions
-      to that Work or Derivative Works thereof, that is intentionally
-      submitted to Licensor for inclusion in the Work by the copyright owner
-      or by an individual or Legal Entity authorized to submit on behalf of
-      the copyright owner. For the purposes of this definition, "submitted"
-      means any form of electronic, verbal, or written communication sent
-      to the Licensor or its representatives, including but not limited to
-      communication on electronic mailing lists, source code control systems,
-      and issue tracking systems that are managed by, or on behalf of, the
-      Licensor for the purpose of discussing and improving the Work, but
-      excluding communication that is conspicuously marked or otherwise
-      designated in writing by the copyright owner as "Not a Contribution."
-
-      "Contributor" shall mean Licensor and any individual or Legal Entity
-      on behalf of whom a Contribution has been received by Licensor and
-      subsequently incorporated within the Work.
-
-   2. Grant of Copyright License. Subject to the terms and conditions of
-      this License, each Contributor hereby grants to You a perpetual,
-      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
-      copyright license to reproduce, prepare Derivative Works of,
-      publicly display, publicly perform, sublicense, and distribute the
-      Work and such Derivative Works in Source or Object form.
-
-   3. Grant of Patent License. Subject to the terms and conditions of
-      this License, each Contributor hereby grants to You a perpetual,
-      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
-      (except as stated in this section) patent license to make, have made,
-      use, offer to sell, sell, import, and otherwise transfer the Work,
-      where such license applies only to those patent claims licensable
-      by such Contributor that are necessarily infringed by their
-      Contribution(s) alone or by combination of their Contribution(s)
-      with the Work to which such Contribution(s) was submitted. If You
-      institute patent litigation against any entity (including a
-      cross-claim or counterclaim in a lawsuit) alleging that the Work
-      or a Contribution incorporated within the Work constitutes direct
-      or contributory patent infringement, then any patent licenses
-      granted to You under this License for that Work shall terminate
-      as of the date such litigation is filed.
-
-   4. Redistribution. You may reproduce and distribute copies of the
-      Work or Derivative Works thereof in any medium, with or without
-      modifications, and in Source or Object form, provided that You
-      meet the following conditions:
-
-      (a) You must give any other recipients of the Work or
-          Derivative Works a copy of this License; and
-
-      (b) You must cause any modified files to carry prominent notices
-          stating that You changed the files; and
-
-      (c) You must retain, in the Source form of any Derivative Works
-          that You distribute, all copyright, patent, trademark, and
-          attribution notices from the Source form of the Work,
-          excluding those notices that do not pertain to any part of
-          the Derivative Works; and
-
-      (d) If the Work includes a "NOTICE" text file as part of its
-          distribution, then any Derivative Works that You distribute must
-          include a readable copy of the attribution notices contained
-          within such NOTICE file, excluding those notices that do not
-          pertain to any part of the Derivative Works, in at least one
-          of the following places: within a NOTICE text file distributed
-          as part of the Derivative Works; within the Source form or
-          documentation, if provided along with the Derivative Works; or,
-          within a display generated by the Derivative Works, if and
-          wherever such third-party notices normally appear. The contents
-          of the NOTICE file are for informational purposes only and
-          do not modify the License. You may add Your own attribution
-          notices within Derivative Works that You distribute, alongside
-          or as an addendum to the NOTICE text from the Work, provided
-          that such additional attribution notices cannot be construed
-          as modifying the License.
-
-      You may add Your own copyright statement to Your modifications and
-      may provide additional or different license terms and conditions
-      for use, reproduction, or distribution of Your modifications, or
-      for any such Derivative Works as a whole, provided Your use,
-      reproduction, and distribution of the Work otherwise complies with
-      the conditions stated in this License.
-
-   5. Submission of Contributions. Unless You explicitly state otherwise,
-      any Contribution intentionally submitted for inclusion in the Work
-      by You to the Licensor shall be under the terms and conditions of
-      this License, without any additional terms or conditions.
-      Notwithstanding the above, nothing herein shall supersede or modify
-      the terms of any separate license agreement you may have executed
-      with Licensor regarding such Contributions.
-
-   6. Trademarks. This License does not grant permission to use the trade
-      names, trademarks, service marks, or product names of the Licensor,
-      except as required for reasonable and customary use in describing the
-      origin of the Work and reproducing the content of the NOTICE file.
-
-   7. Disclaimer of Warranty. Unless required by applicable law or
-      agreed to in writing, Licensor provides the Work (and each
-      Contributor provides its Contributions) on an "AS IS" BASIS,
-      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
-      implied, including, without limitation, any warranties or conditions
-      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
-      PARTICULAR PURPOSE. You are solely responsible for determining the
-      appropriateness of using or redistributing the Work and assume any
-      risks associated with Your exercise of permissions under this License.
-
-   8. Limitation of Liability. In no event and under no legal theory,
-      whether in tort (including negligence), contract, or otherwise,
-      unless required by applicable law (such as deliberate and grossly
-      negligent acts) or agreed to in writing, shall any Contributor be
-      liable to You for damages, including any direct, indirect, special,
-      incidental, or consequential damages of any character arising as a
-      result of this License or out of the use or inability to use the
-      Work (including but not limited to damages for loss of goodwill,
-      work stoppage, computer failure or malfunction, or any and all
-      other commercial damages or losses), even if such Contributor
-      has been advised of the possibility of such damages.
-
-   9. Accepting Warranty or Additional Liability. While redistributing
-      the Work or Derivative Works thereof, You may choose to offer,
-      and charge a fee for, acceptance of support, warranty, indemnity,
-      or other liability obligations and/or rights consistent with this
-      License. However, in accepting such obligations, You may act only
-      on Your own behalf and on Your sole responsibility, not on behalf
-      of any other Contributor, and only if You agree to indemnify,
-      defend, and hold each Contributor harmless for any liability
-      incurred by, or claims asserted against, such Contributor by reason
-      of your accepting any such warranty or additional liability.
-
-   END OF TERMS AND CONDITIONS
-
-   APPENDIX: How to apply the Apache License to your work.
-
-      To apply the Apache License to your work, attach the following
-      boilerplate notice, with the fields enclosed by brackets "[]"
-      replaced with your own identifying information. (Don't include
-      the brackets!)  The text should be enclosed in the appropriate
-      comment syntax for the file format. We also recommend that a
-      file or class name and description of purpose be included on the
-      same "printed page" as the copyright notice for easier
-      identification within third-party archives.
-
-   Copyright [yyyy] [name of copyright owner]
-
-   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.
-
-
-Google Auto:
-
-
-                                 Apache License
-                           Version 2.0, January 2004
-                        http://www.apache.org/licenses/
-
-   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
-
-   1. Definitions.
-
-      "License" shall mean the terms and conditions for use, reproduction,
-      and distribution as defined by Sections 1 through 9 of this document.
-
-      "Licensor" shall mean the copyright owner or entity authorized by
-      the copyright owner that is granting the License.
-
-      "Legal Entity" shall mean the union of the acting entity and all
-      other entities that control, are controlled by, or are under common
-      control with that entity. For the purposes of this definition,
-      "control" means (i) the power, direct or indirect, to cause the
-      direction or management of such entity, whether by contract or
-      otherwise, or (ii) ownership of fifty percent (50%) or more of the
-      outstanding shares, or (iii) beneficial ownership of such entity.
-
-      "You" (or "Your") shall mean an individual or Legal Entity
-      exercising permissions granted by this License.
-
-      "Source" form shall mean the preferred form for making modifications,
-      including but not limited to software source code, documentation
-      source, and configuration files.
-
-      "Object" form shall mean any form resulting from mechanical
-      transformation or translation of a Source form, including but
-      not limited to compiled object code, generated documentation,
-      and conversions to other media types.
-
-      "Work" shall mean the work of authorship, whether in Source or
-      Object form, made available under the License, as indicated by a
-      copyright notice that is included in or attached to the work
-      (an example is provided in the Appendix below).
-
-      "Derivative Works" shall mean any work, whether in Source or Object
-      form, that is based on (or derived from) the Work and for which the
-      editorial revisions, annotations, elaborations, or other modifications
-      represent, as a whole, an original work of authorship. For the purposes
-      of this License, Derivative Works shall not include works that remain
-      separable from, or merely link (or bind by name) to the interfaces of,
-      the Work and Derivative Works thereof.
-
-      "Contribution" shall mean any work of authorship, including
-      the original version of the Work and any modifications or additions
-      to that Work or Derivative Works thereof, that is intentionally
-      submitted to Licensor for inclusion in the Work by the copyright owner
-      or by an individual or Legal Entity authorized to submit on behalf of
-      the copyright owner. For the purposes of this definition, "submitted"
-      means any form of electronic, verbal, or written communication sent
-      to the Licensor or its representatives, including but not limited to
-      communication on electronic mailing lists, source code control systems,
-      and issue tracking systems that are managed by, or on behalf of, the
-      Licensor for the purpose of discussing and improving the Work, but
-      excluding communication that is conspicuously marked or otherwise
-      designated in writing by the copyright owner as "Not a Contribution."
-
-      "Contributor" shall mean Licensor and any individual or Legal Entity
-      on behalf of whom a Contribution has been received by Licensor and
-      subsequently incorporated within the Work.
-
-   2. Grant of Copyright License. Subject to the terms and conditions of
-      this License, each Contributor hereby grants to You a perpetual,
-      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
-      copyright license to reproduce, prepare Derivative Works of,
-      publicly display, publicly perform, sublicense, and distribute the
-      Work and such Derivative Works in Source or Object form.
-
-   3. Grant of Patent License. Subject to the terms and conditions of
-      this License, each Contributor hereby grants to You a perpetual,
-      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
-      (except as stated in this section) patent license to make, have made,
-      use, offer to sell, sell, import, and otherwise transfer the Work,
-      where such license applies only to those patent claims licensable
-      by such Contributor that are necessarily infringed by their
-      Contribution(s) alone or by combination of their Contribution(s)
-      with the Work to which such Contribution(s) was submitted. If You
-      institute patent litigation against any entity (including a
-      cross-claim or counterclaim in a lawsuit) alleging that the Work
-      or a Contribution incorporated within the Work constitutes direct
-      or contributory patent infringement, then any patent licenses
-      granted to You under this License for that Work shall terminate
-      as of the date such litigation is filed.
-
-   4. Redistribution. You may reproduce and distribute copies of the
-      Work or Derivative Works thereof in any medium, with or without
-      modifications, and in Source or Object form, provided that You
-      meet the following conditions:
-
-      (a) You must give any other recipients of the Work or
-          Derivative Works a copy of this License; and
-
-      (b) You must cause any modified files to carry prominent notices
-          stating that You changed the files; and
-
-      (c) You must retain, in the Source form of any Derivative Works
-          that You distribute, all copyright, patent, trademark, and
-          attribution notices from the Source form of the Work,
-          excluding those notices that do not pertain to any part of
-          the Derivative Works; and
-
-      (d) If the Work includes a "NOTICE" text file as part of its
-          distribution, then any Derivative Works that You distribute must
-          include a readable copy of the attribution notices contained
-          within such NOTICE file, excluding those notices that do not
-          pertain to any part of the Derivative Works, in at least one
-          of the following places: within a NOTICE text file distributed
-          as part of the Derivative Works; within the Source form or
-          documentation, if provided along with the Derivative Works; or,
-          within a display generated by the Derivative Works, if and
-          wherever such third-party notices normally appear. The contents
-          of the NOTICE file are for informational purposes only and
-          do not modify the License. You may add Your own attribution
-          notices within Derivative Works that You distribute, alongside
-          or as an addendum to the NOTICE text from the Work, provided
-          that such additional attribution notices cannot be construed
-          as modifying the License.
-
-      You may add Your own copyright statement to Your modifications and
-      may provide additional or different license terms and conditions
-      for use, reproduction, or distribution of Your modifications, or
-      for any such Derivative Works as a whole, provided Your use,
-      reproduction, and distribution of the Work otherwise complies with
-      the conditions stated in this License.
-
-   5. Submission of Contributions. Unless You explicitly state otherwise,
-      any Contribution intentionally submitted for inclusion in the Work
-      by You to the Licensor shall be under the terms and conditions of
-      this License, without any additional terms or conditions.
-      Notwithstanding the above, nothing herein shall supersede or modify
-      the terms of any separate license agreement you may have executed
-      with Licensor regarding such Contributions.
-
-   6. Trademarks. This License does not grant permission to use the trade
-      names, trademarks, service marks, or product names of the Licensor,
-      except as required for reasonable and customary use in describing the
-      origin of the Work and reproducing the content of the NOTICE file.
-
-   7. Disclaimer of Warranty. Unless required by applicable law or
-      agreed to in writing, Licensor provides the Work (and each
-      Contributor provides its Contributions) on an "AS IS" BASIS,
-      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
-      implied, including, without limitation, any warranties or conditions
-      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
-      PARTICULAR PURPOSE. You are solely responsible for determining the
-      appropriateness of using or redistributing the Work and assume any
-      risks associated with Your exercise of permissions under this License.
-
-   8. Limitation of Liability. In no event and under no legal theory,
-      whether in tort (including negligence), contract, or otherwise,
-      unless required by applicable law (such as deliberate and grossly
-      negligent acts) or agreed to in writing, shall any Contributor be
-      liable to You for damages, including any direct, indirect, special,
-      incidental, or consequential damages of any character arising as a
-      result of this License or out of the use or inability to use the
-      Work (including but not limited to damages for loss of goodwill,
-      work stoppage, computer failure or malfunction, or any and all
-      other commercial damages or losses), even if such Contributor
-      has been advised of the possibility of such damages.
-
-   9. Accepting Warranty or Additional Liability. While redistributing
-      the Work or Derivative Works thereof, You may choose to offer,
-      and charge a fee for, acceptance of support, warranty, indemnity,
-      or other liability obligations and/or rights consistent with this
-      License. However, in accepting such obligations, You may act only
-      on Your own behalf and on Your sole responsibility, not on behalf
-      of any other Contributor, and only if You agree to indemnify,
-      defend, and hold each Contributor harmless for any liability
-      incurred by, or claims asserted against, such Contributor by reason
-      of your accepting any such warranty or additional liability.
-
-   END OF TERMS AND CONDITIONS
-
-   APPENDIX: How to apply the Apache License to your work.
-
-      To apply the Apache License to your work, attach the following
-      boilerplate notice, with the fields enclosed by brackets "[]"
-      replaced with your own identifying information. (Don't include
-      the brackets!)  The text should be enclosed in the appropriate
-      comment syntax for the file format. We also recommend that a
-      file or class name and description of purpose be included on the
-      same "printed page" as the copyright notice for easier
-      identification within third-party archives.
-
-   Copyright [yyyy] [name of copyright owner]
-
-   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.
-
-
-Guava JDK5:
-
-
-                                 Apache License
-                           Version 2.0, January 2004
-                        http://www.apache.org/licenses/
-
-   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
-
-   1. Definitions.
-
-      "License" shall mean the terms and conditions for use, reproduction,
-      and distribution as defined by Sections 1 through 9 of this document.
-
-      "Licensor" shall mean the copyright owner or entity authorized by
-      the copyright owner that is granting the License.
-
-      "Legal Entity" shall mean the union of the acting entity and all
-      other entities that control, are controlled by, or are under common
-      control with that entity. For the purposes of this definition,
-      "control" means (i) the power, direct or indirect, to cause the
-      direction or management of such entity, whether by contract or
-      otherwise, or (ii) ownership of fifty percent (50%) or more of the
-      outstanding shares, or (iii) beneficial ownership of such entity.
-
-      "You" (or "Your") shall mean an individual or Legal Entity
-      exercising permissions granted by this License.
-
-      "Source" form shall mean the preferred form for making modifications,
-      including but not limited to software source code, documentation
-      source, and configuration files.
-
-      "Object" form shall mean any form resulting from mechanical
-      transformation or translation of a Source form, including but
-      not limited to compiled object code, generated documentation,
-      and conversions to other media types.
-
-      "Work" shall mean the work of authorship, whether in Source or
-      Object form, made available under the License, as indicated by a
-      copyright notice that is included in or attached to the work
-      (an example is provided in the Appendix below).
-
-      "Derivative Works" shall mean any work, whether in Source or Object
-      form, that is based on (or derived from) the Work and for which the
-      editorial revisions, annotations, elaborations, or other modifications
-      represent, as a whole, an original work of authorship. For the purposes
-      of this License, Derivative Works shall not include works that remain
-      separable from, or merely link (or bind by name) to the interfaces of,
-      the Work and Derivative Works thereof.
-
-      "Contribution" shall mean any work of authorship, including
-      the original version of the Work and any modifications or additions
-      to that Work or Derivative Works thereof, that is intentionally
-      submitted to Licensor for inclusion in the Work by the copyright owner
-      or by an individual or Legal Entity authorized to submit on behalf of
-      the copyright owner. For the purposes of this definition, "submitted"
-      means any form of electronic, verbal, or written communication sent
-      to the Licensor or its representatives, including but not limited to
-      communication on electronic mailing lists, source code control systems,
-      and issue tracking systems that are managed by, or on behalf of, the
-      Licensor for the purpose of discussing and improving the Work, but
-      excluding communication that is conspicuously marked or otherwise
-      designated in writing by the copyright owner as "Not a Contribution."
-
-      "Contributor" shall mean Licensor and any individual or Legal Entity
-      on behalf of whom a Contribution has been received by Licensor and
-      subsequently incorporated within the Work.
-
-   2. Grant of Copyright License. Subject to the terms and conditions of
-      this License, each Contributor hereby grants to You a perpetual,
-      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
-      copyright license to reproduce, prepare Derivative Works of,
-      publicly display, publicly perform, sublicense, and distribute the
-      Work and such Derivative Works in Source or Object form.
-
-   3. Grant of Patent License. Subject to the terms and conditions of
-      this License, each Contributor hereby grants to You a perpetual,
-      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
-      (except as stated in this section) patent license to make, have made,
-      use, offer to sell, sell, import, and otherwise transfer the Work,
-      where such license applies only to those patent claims licensable
-      by such Contributor that are necessarily infringed by their
-      Contribution(s) alone or by combination of their Contribution(s)
-      with the Work to which such Contribution(s) was submitted. If You
-      institute patent litigation against any entity (including a
-      cross-claim or counterclaim in a lawsuit) alleging that the Work
-      or a Contribution incorporated within the Work constitutes direct
-      or contributory patent infringement, then any patent licenses
-      granted to You under this License for that Work shall terminate
-      as of the date such litigation is filed.
-
-   4. Redistribution. You may reproduce and distribute copies of the
-      Work or Derivative Works thereof in any medium, with or without
-      modifications, and in Source or Object form, provided that You
-      meet the following conditions:
-
-      (a) You must give any other recipients of the Work or
-          Derivative Works a copy of this License; and
-
-      (b) You must cause any modified files to carry prominent notices
-          stating that You changed the files; and
-
-      (c) You must retain, in the Source form of any Derivative Works
-          that You distribute, all copyright, patent, trademark, and
-          attribution notices from the Source form of the Work,
-          excluding those notices that do not pertain to any part of
-          the Derivative Works; and
-
-      (d) If the Work includes a "NOTICE" text file as part of its
-          distribution, then any Derivative Works that You distribute must
-          include a readable copy of the attribution notices contained
-          within such NOTICE file, excluding those notices that do not
-          pertain to any part of the Derivative Works, in at least one
-          of the following places: within a NOTICE text file distributed
-          as part of the Derivative Works; within the Source form or
-          documentation, if provided along with the Derivative Works; or,
-          within a display generated by the Derivative Works, if and
-          wherever such third-party notices normally appear. The contents
-          of the NOTICE file are for informational purposes only and
-          do not modify the License. You may add Your own attribution
-          notices within Derivative Works that You distribute, alongside
-          or as an addendum to the NOTICE text from the Work, provided
-          that such additional attribution notices cannot be construed
-          as modifying the License.
-
-      You may add Your own copyright statement to Your modifications and
-      may provide additional or different license terms and conditions
-      for use, reproduction, or distribution of Your modifications, or
-      for any such Derivative Works as a whole, provided Your use,
-      reproduction, and distribution of the Work otherwise complies with
-      the conditions stated in this License.
-
-   5. Submission of Contributions. Unless You explicitly state otherwise,
-      any Contribution intentionally submitted for inclusion in the Work
-      by You to the Licensor shall be under the terms and conditions of
-      this License, without any additional terms or conditions.
-      Notwithstanding the above, nothing herein shall supersede or modify
-      the terms of any separate license agreement you may have executed
-      with Licensor regarding such Contributions.
-
-   6. Trademarks. This License does not grant permission to use the trade
-      names, trademarks, service marks, or product names of the Licensor,
-      except as required for reasonable and customary use in describing the
-      origin of the Work and reproducing the content of the NOTICE file.
-
-   7. Disclaimer of Warranty. Unless required by applicable law or
-      agreed to in writing, Licensor provides the Work (and each
-      Contributor provides its Contributions) on an "AS IS" BASIS,
-      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
-      implied, including, without limitation, any warranties or conditions
-      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
-      PARTICULAR PURPOSE. You are solely responsible for determining the
-      appropriateness of using or redistributing the Work and assume any
-      risks associated with Your exercise of permissions under this License.
-
-   8. Limitation of Liability. In no event and under no legal theory,
-      whether in tort (including negligence), contract, or otherwise,
-      unless required by applicable law (such as deliberate and grossly
-      negligent acts) or agreed to in writing, shall any Contributor be
-      liable to You for damages, including any direct, indirect, special,
-      incidental, or consequential damages of any character arising as a
-      result of this License or out of the use or inability to use the
-      Work (including but not limited to damages for loss of goodwill,
-      work stoppage, computer failure or malfunction, or any and all
-      other commercial damages or losses), even if such Contributor
-      has been advised of the possibility of such damages.
-
-   9. Accepting Warranty or Additional Liability. While redistributing
-      the Work or Derivative Works thereof, You may choose to offer,
-      and charge a fee for, acceptance of support, warranty, indemnity,
-      or other liability obligations and/or rights consistent with this
-      License. However, in accepting such obligations, You may act only
-      on Your own behalf and on Your sole responsibility, not on behalf
-      of any other Contributor, and only if You agree to indemnify,
-      defend, and hold each Contributor harmless for any liability
-      incurred by, or claims asserted against, such Contributor by reason
-      of your accepting any such warranty or additional liability.
-
-   END OF TERMS AND CONDITIONS
-
-   APPENDIX: How to apply the Apache License to your work.
-
-      To apply the Apache License to your work, attach the following
-      boilerplate notice, with the fields enclosed by brackets "[]"
-      replaced with your own identifying information. (Don't include
-      the brackets!)  The text should be enclosed in the appropriate
-      comment syntax for the file format. We also recommend that a
-      file or class name and description of purpose be included on the
-      same "printed page" as the copyright notice for easier
-      identification within third-party archives.
-
-   Copyright [yyyy] [name of copyright owner]
-
-   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.
-
-
-Guava JDK7:
-
-
-                                 Apache License
-                           Version 2.0, January 2004
-                        http://www.apache.org/licenses/
-
-   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
-
-   1. Definitions.
-
-      "License" shall mean the terms and conditions for use, reproduction,
-      and distribution as defined by Sections 1 through 9 of this document.
-
-      "Licensor" shall mean the copyright owner or entity authorized by
-      the copyright owner that is granting the License.
-
-      "Legal Entity" shall mean the union of the acting entity and all
-      other entities that control, are controlled by, or are under common
-      control with that entity. For the purposes of this definition,
-      "control" means (i) the power, direct or indirect, to cause the
-      direction or management of such entity, whether by contract or
-      otherwise, or (ii) ownership of fifty percent (50%) or more of the
-      outstanding shares, or (iii) beneficial ownership of such entity.
-
-      "You" (or "Your") shall mean an individual or Legal Entity
-      exercising permissions granted by this License.
-
-      "Source" form shall mean the preferred form for making modifications,
-      including but not limited to software source code, documentation
-      source, and configuration files.
-
-      "Object" form shall mean any form resulting from mechanical
-      transformation or translation of a Source form, including but
-      not limited to compiled object code, generated documentation,
-      and conversions to other media types.
-
-      "Work" shall mean the work of authorship, whether in Source or
-      Object form, made available under the License, as indicated by a
-      copyright notice that is included in or attached to the work
-      (an example is provided in the Appendix below).
-
-      "Derivative Works" shall mean any work, whether in Source or Object
-      form, that is based on (or derived from) the Work and for which the
-      editorial revisions, annotations, elaborations, or other modifications
-      represent, as a whole, an original work of authorship. For the purposes
-      of this License, Derivative Works shall not include works that remain
-      separable from, or merely link (or bind by name) to the interfaces of,
-      the Work and Derivative Works thereof.
-
-      "Contribution" shall mean any work of authorship, including
-      the original version of the Work and any modifications or additions
-      to that Work or Derivative Works thereof, that is intentionally
-      submitted to Licensor for inclusion in the Work by the copyright owner
-      or by an individual or Legal Entity authorized to submit on behalf of
-      the copyright owner. For the purposes of this definition, "submitted"
-      means any form of electronic, verbal, or written communication sent
-      to the Licensor or its representatives, including but not limited to
-      communication on electronic mailing lists, source code control systems,
-      and issue tracking systems that are managed by, or on behalf of, the
-      Licensor for the purpose of discussing and improving the Work, but
-      excluding communication that is conspicuously marked or otherwise
-      designated in writing by the copyright owner as "Not a Contribution."
-
-      "Contributor" shall mean Licensor and any individual or Legal Entity
-      on behalf of whom a Contribution has been received by Licensor and
-      subsequently incorporated within the Work.
-
-   2. Grant of Copyright License. Subject to the terms and conditions of
-      this License, each Contributor hereby grants to You a perpetual,
-      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
-      copyright license to reproduce, prepare Derivative Works of,
-      publicly display, publicly perform, sublicense, and distribute the
-      Work and such Derivative Works in Source or Object form.
-
-   3. Grant of Patent License. Subject to the terms and conditions of
-      this License, each Contributor hereby grants to You a perpetual,
-      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
-      (except as stated in this section) patent license to make, have made,
-      use, offer to sell, sell, import, and otherwise transfer the Work,
-      where such license applies only to those patent claims licensable
-      by such Contributor that are necessarily infringed by their
-      Contribution(s) alone or by combination of their Contribution(s)
-      with the Work to which such Contribution(s) was submitted. If You
-      institute patent litigation against any entity (including a
-      cross-claim or counterclaim in a lawsuit) alleging that the Work
-      or a Contribution incorporated within the Work constitutes direct
-      or contributory patent infringement, then any patent licenses
-      granted to You under this License for that Work shall terminate
-      as of the date such litigation is filed.
-
-   4. Redistribution. You may reproduce and distribute copies of the
-      Work or Derivative Works thereof in any medium, with or without
-      modifications, and in Source or Object form, provided that You
-      meet the following conditions:
-
-      (a) You must give any other recipients of the Work or
-          Derivative Works a copy of this License; and
-
-      (b) You must cause any modified files to carry prominent notices
-          stating that You changed the files; and
-
-      (c) You must retain, in the Source form of any Derivative Works
-          that You distribute, all copyright, patent, trademark, and
-          attribution notices from the Source form of the Work,
-          excluding those notices that do not pertain to any part of
-          the Derivative Works; and
-
-      (d) If the Work includes a "NOTICE" text file as part of its
-          distribution, then any Derivative Works that You distribute must
-          include a readable copy of the attribution notices contained
-          within such NOTICE file, excluding those notices that do not
-          pertain to any part of the Derivative Works, in at least one
-          of the following places: within a NOTICE text file distributed
-          as part of the Derivative Works; within the Source form or
-          documentation, if provided along with the Derivative Works; or,
-          within a display generated by the Derivative Works, if and
-          wherever such third-party notices normally appear. The contents
-          of the NOTICE file are for informational purposes only and
-          do not modify the License. You may add Your own attribution
-          notices within Derivative Works that You distribute, alongside
-          or as an addendum to the NOTICE text from the Work, provided
-          that such additional attribution notices cannot be construed
-          as modifying the License.
-
-      You may add Your own copyright statement to Your modifications and
-      may provide additional or different license terms and conditions
-      for use, reproduction, or distribution of Your modifications, or
-      for any such Derivative Works as a whole, provided Your use,
-      reproduction, and distribution of the Work otherwise complies with
-      the conditions stated in this License.
-
-   5. Submission of Contributions. Unless You explicitly state otherwise,
-      any Contribution intentionally submitted for inclusion in the Work
-      by You to the Licensor shall be under the terms and conditions of
-      this License, without any additional terms or conditions.
-      Notwithstanding the above, nothing herein shall supersede or modify
-      the terms of any separate license agreement you may have executed
-      with Licensor regarding such Contributions.
-
-   6. Trademarks. This License does not grant permission to use the trade
-      names, trademarks, service marks, or product names of the Licensor,
-      except as required for reasonable and customary use in describing the
-      origin of the Work and reproducing the content of the NOTICE file.
-
-   7. Disclaimer of Warranty. Unless required by applicable law or
-      agreed to in writing, Licensor provides the Work (and each
-      Contributor provides its Contributions) on an "AS IS" BASIS,
-      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
-      implied, including, without limitation, any warranties or conditions
-      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
-      PARTICULAR PURPOSE. You are solely responsible for determining the
-      appropriateness of using or redistributing the Work and assume any
-      risks associated with Your exercise of permissions under this License.
-
-   8. Limitation of Liability. In no event and under no legal theory,
-      whether in tort (including negligence), contract, or otherwise,
-      unless required by applicable law (such as deliberate and grossly
-      negligent acts) or agreed to in writing, shall any Contributor be
-      liable to You for damages, including any direct, indirect, special,
-      incidental, or consequential damages of any character arising as a
-      result of this License or out of the use or inability to use the
-      Work (including but not limited to damages for loss of goodwill,
-      work stoppage, computer failure or malfunction, or any and all
-      other commercial damages or losses), even if such Contributor
-      has been advised of the possibility of such damages.
-
-   9. Accepting Warranty or Additional Liability. While redistributing
-      the Work or Derivative Works thereof, You may choose to offer,
-      and charge a fee for, acceptance of support, warranty, indemnity,
-      or other liability obligations and/or rights consistent with this
-      License. However, in accepting such obligations, You may act only
-      on Your own behalf and on Your sole responsibility, not on behalf
-      of any other Contributor, and only if You agree to indemnify,
-      defend, and hold each Contributor harmless for any liability
-      incurred by, or claims asserted against, such Contributor by reason
-      of your accepting any such warranty or additional liability.
-
-   END OF TERMS AND CONDITIONS
-
-   APPENDIX: How to apply the Apache License to your work.
-
-      To apply the Apache License to your work, attach the following
-      boilerplate notice, with the fields enclosed by brackets "[]"
-      replaced with your own identifying information. (Don't include
-      the brackets!)  The text should be enclosed in the appropriate
-      comment syntax for the file format. We also recommend that a
-      file or class name and description of purpose be included on the
-      same "printed page" as the copyright notice for easier
-      identification within third-party archives.
-
-   Copyright [yyyy] [name of copyright owner]
-
-   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.
-   
-
-
-J2ObjC:
-
-
-                                 Apache License
-                           Version 2.0, January 2004
-                        http://www.apache.org/licenses/
-
-   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
-
-   1. Definitions.
-
-      "License" shall mean the terms and conditions for use, reproduction,
-      and distribution as defined by Sections 1 through 9 of this document.
-
-      "Licensor" shall mean the copyright owner or entity authorized by
-      the copyright owner that is granting the License.
-
-      "Legal Entity" shall mean the union of the acting entity and all
-      other entities that control, are controlled by, or are under common
-      control with that entity. For the purposes of this definition,
-      "control" means (i) the power, direct or indirect, to cause the
-      direction or management of such entity, whether by contract or
-      otherwise, or (ii) ownership of fifty percent (50%) or more of the
-      outstanding shares, or (iii) beneficial ownership of such entity.
-
-      "You" (or "Your") shall mean an individual or Legal Entity
-      exercising permissions granted by this License.
-
-      "Source" form shall mean the preferred form for making modifications,
-      including but not limited to software source code, documentation
-      source, and configuration files.
-
-      "Object" form shall mean any form resulting from mechanical
-      transformation or translation of a Source form, including but
-      not limited to compiled object code, generated documentation,
-      and conversions to other media types.
-
-      "Work" shall mean the work of authorship, whether in Source or
-      Object form, made available under the License, as indicated by a
-      copyright notice that is included in or attached to the work
-      (an example is provided in the Appendix below).
-
-      "Derivative Works" shall mean any work, whether in Source or Object
-      form, that is based on (or derived from) the Work and for which the
-      editorial revisions, annotations, elaborations, or other modifications
-      represent, as a whole, an original work of authorship. For the purposes
-      of this License, Derivative Works shall not include works that remain
-      separable from, or merely link (or bind by name) to the interfaces of,
-      the Work and Derivative Works thereof.
-
-      "Contribution" shall mean any work of authorship, including
-      the original version of the Work and any modifications or additions
-      to that Work or Derivative Works thereof, that is intentionally
-      submitted to Licensor for inclusion in the Work by the copyright owner
-      or by an individual or Legal Entity authorized to submit on behalf of
-      the copyright owner. For the purposes of this definition, "submitted"
-      means any form of electronic, verbal, or written communication sent
-      to the Licensor or its representatives, including but not limited to
-      communication on electronic mailing lists, source code control systems,
-      and issue tracking systems that are managed by, or on behalf of, the
-      Licensor for the purpose of discussing and improving the Work, but
-      excluding communication that is conspicuously marked or otherwise
-      designated in writing by the copyright owner as "Not a Contribution."
-
-      "Contributor" shall mean Licensor and any individual or Legal Entity
-      on behalf of whom a Contribution has been received by Licensor and
-      subsequently incorporated within the Work.
-
-   2. Grant of Copyright License. Subject to the terms and conditions of
-      this License, each Contributor hereby grants to You a perpetual,
-      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
-      copyright license to reproduce, prepare Derivative Works of,
-      publicly display, publicly perform, sublicense, and distribute the
-      Work and such Derivative Works in Source or Object form.
-
-   3. Grant of Patent License. Subject to the terms and conditions of
-      this License, each Contributor hereby grants to You a perpetual,
-      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
-      (except as stated in this section) patent license to make, have made,
-      use, offer to sell, sell, import, and otherwise transfer the Work,
-      where such license applies only to those patent claims licensable
-      by such Contributor that are necessarily infringed by their
-      Contribution(s) alone or by combination of their Contribution(s)
-      with the Work to which such Contribution(s) was submitted. If You
-      institute patent litigation against any entity (including a
-      cross-claim or counterclaim in a lawsuit) alleging that the Work
-      or a Contribution incorporated within the Work constitutes direct
-      or contributory patent infringement, then any patent licenses
-      granted to You under this License for that Work shall terminate
-      as of the date such litigation is filed.
-
-   4. Redistribution. You may reproduce and distribute copies of the
-      Work or Derivative Works thereof in any medium, with or without
-      modifications, and in Source or Object form, provided that You
-      meet the following conditions:
-
-      (a) You must give any other recipients of the Work or
-          Derivative Works a copy of this License; and
-
-      (b) You must cause any modified files to carry prominent notices
-          stating that You changed the files; and
-
-      (c) You must retain, in the Source form of any Derivative Works
-          that You distribute, all copyright, patent, trademark, and
-          attribution notices from the Source form of the Work,
-          excluding those notices that do not pertain to any part of
-          the Derivative Works; and
-
-      (d) If the Work includes a "NOTICE" text file as part of its
-          distribution, then any Derivative Works that You distribute must
-          include a readable copy of the attribution notices contained
-          within such NOTICE file, excluding those notices that do not
-          pertain to any part of the Derivative Works, in at least one
-          of the following places: within a NOTICE text file distributed
-          as part of the Derivative Works; within the Source form or
-          documentation, if provided along with the Derivative Works; or,
-          within a display generated by the Derivative Works, if and
-          wherever such third-party notices normally appear. The contents
-          of the NOTICE file are for informational purposes only and
-          do not modify the License. You may add Your own attribution
-          notices within Derivative Works that You distribute, alongside
-          or as an addendum to the NOTICE text from the Work, provided
-          that such additional attribution notices cannot be construed
-          as modifying the License.
-
-      You may add Your own copyright statement to Your modifications and
-      may provide additional or different license terms and conditions
-      for use, reproduction, or distribution of Your modifications, or
-      for any such Derivative Works as a whole, provided Your use,
-      reproduction, and distribution of the Work otherwise complies with
-      the conditions stated in this License.
-
-   5. Submission of Contributions. Unless You explicitly state otherwise,
-      any Contribution intentionally submitted for inclusion in the Work
-      by You to the Licensor shall be under the terms and conditions of
-      this License, without any additional terms or conditions.
-      Notwithstanding the above, nothing herein shall supersede or modify
-      the terms of any separate license agreement you may have executed
-      with Licensor regarding such Contributions.
-
-   6. Trademarks. This License does not grant permission to use the trade
-      names, trademarks, service marks, or product names of the Licensor,
-      except as required for reasonable and customary use in describing the
-      origin of the Work and reproducing the content of the NOTICE file.
-
-   7. Disclaimer of Warranty. Unless required by applicable law or
-      agreed to in writing, Licensor provides the Work (and each
-      Contributor provides its Contributions) on an "AS IS" BASIS,
-      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
-      implied, including, without limitation, any warranties or conditions
-      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
-      PARTICULAR PURPOSE. You are solely responsible for determining the
-      appropriateness of using or redistributing the Work and assume any
-      risks associated with Your exercise of permissions under this License.
-
-   8. Limitation of Liability. In no event and under no legal theory,
-      whether in tort (including negligence), contract, or otherwise,
-      unless required by applicable law (such as deliberate and grossly
-      negligent acts) or agreed to in writing, shall any Contributor be
-      liable to You for damages, including any direct, indirect, special,
-      incidental, or consequential damages of any character arising as a
-      result of this License or out of the use or inability to use the
-      Work (including but not limited to damages for loss of goodwill,
-      work stoppage, computer failure or malfunction, or any and all
-      other commercial damages or losses), even if such Contributor
-      has been advised of the possibility of such damages.
-
-   9. Accepting Warranty or Additional Liability. While redistributing
-      the Work or Derivative Works thereof, You may choose to offer,
-      and charge a fee for, acceptance of support, warranty, indemnity,
-      or other liability obligations and/or rights consistent with this
-      License. However, in accepting such obligations, You may act only
-      on Your own behalf and on Your sole responsibility, not on behalf
-      of any other Contributor, and only if You agree to indemnify,
-      defend, and hold each Contributor harmless for any liability
-      incurred by, or claims asserted against, such Contributor by reason
-      of your accepting any such warranty or additional liability.
-
-   END OF TERMS AND CONDITIONS
-
-   APPENDIX: How to apply the Apache License to your work.
-
-      To apply the Apache License to your work, attach the following
-      boilerplate notice, with the fields enclosed by brackets "[]"
-      replaced with your own identifying information. (Don't include
-      the brackets!)  The text should be enclosed in the appropriate
-      comment syntax for the file format. We also recommend that a
-      file or class name and description of purpose be included on the
-      same "printed page" as the copyright notice for easier
-      identification within third-party archives.
-
-   Copyright [yyyy] [name of copyright owner]
-
-   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.
-
---------------------------------------------------------------------------------
-The next section, BSD-3-Clause, applies to the files in:
-jre_emul/android/platform/libcore/ojluni/src/main/java/java/time
---------------------------------------------------------------------------------
-Redistribution and use in source and binary forms, with or without
-modification, are permitted provided that the following conditions are met:
-
-* Redistributions of source code must retain the above copyright notice,
-  this list of conditions and the following disclaimer.
-
-* Redistributions in binary form must reproduce the above copyright notice,
-  this list of conditions and the following disclaimer in the documentation
-  and/or other materials provided with the distribution.
-
-* Neither the name of JSR-310 nor the names of its contributors
-  may be used to endorse or promote products derived from this software
-  without specific prior written permission.
-
-THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
-CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
-EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
-PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
-PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
-LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
-NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
-SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
-
-JSR 250:
-
-
-                                 Apache License
-                           Version 2.0, January 2004
-                        http://www.apache.org/licenses/
-
-   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
-
-   1. Definitions.
-
-      "License" shall mean the terms and conditions for use, reproduction,
-      and distribution as defined by Sections 1 through 9 of this document.
-
-      "Licensor" shall mean the copyright owner or entity authorized by
-      the copyright owner that is granting the License.
-
-      "Legal Entity" shall mean the union of the acting entity and all
-      other entities that control, are controlled by, or are under common
-      control with that entity. For the purposes of this definition,
-      "control" means (i) the power, direct or indirect, to cause the
-      direction or management of such entity, whether by contract or
-      otherwise, or (ii) ownership of fifty percent (50%) or more of the
-      outstanding shares, or (iii) beneficial ownership of such entity.
-
-      "You" (or "Your") shall mean an individual or Legal Entity
-      exercising permissions granted by this License.
-
-      "Source" form shall mean the preferred form for making modifications,
-      including but not limited to software source code, documentation
-      source, and configuration files.
-
-      "Object" form shall mean any form resulting from mechanical
-      transformation or translation of a Source form, including but
-      not limited to compiled object code, generated documentation,
-      and conversions to other media types.
-
-      "Work" shall mean the work of authorship, whether in Source or
-      Object form, made available under the License, as indicated by a
-      copyright notice that is included in or attached to the work
-      (an example is provided in the Appendix below).
-
-      "Derivative Works" shall mean any work, whether in Source or Object
-      form, that is based on (or derived from) the Work and for which the
-      editorial revisions, annotations, elaborations, or other modifications
-      represent, as a whole, an original work of authorship. For the purposes
-      of this License, Derivative Works shall not include works that remain
-      separable from, or merely link (or bind by name) to the interfaces of,
-      the Work and Derivative Works thereof.
-
-      "Contribution" shall mean any work of authorship, including
-      the original version of the Work and any modifications or additions
-      to that Work or Derivative Works thereof, that is intentionally
-      submitted to Licensor for inclusion in the Work by the copyright owner
-      or by an individual or Legal Entity authorized to submit on behalf of
-      the copyright owner. For the purposes of this definition, "submitted"
-      means any form of electronic, verbal, or written communication sent
-      to the Licensor or its representatives, including but not limited to
-      communication on electronic mailing lists, source code control systems,
-      and issue tracking systems that are managed by, or on behalf of, the
-      Licensor for the purpose of discussing and improving the Work, but
-      excluding communication that is conspicuously marked or otherwise
-      designated in writing by the copyright owner as "Not a Contribution."
-
-      "Contributor" shall mean Licensor and any individual or Legal Entity
-      on behalf of whom a Contribution has been received by Licensor and
-      subsequently incorporated within the Work.
-
-   2. Grant of Copyright License. Subject to the terms and conditions of
-      this License, each Contributor hereby grants to You a perpetual,
-      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
-      copyright license to reproduce, prepare Derivative Works of,
-      publicly display, publicly perform, sublicense, and distribute the
-      Work and such Derivative Works in Source or Object form.
-
-   3. Grant of Patent License. Subject to the terms and conditions of
-      this License, each Contributor hereby grants to You a perpetual,
-      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
-      (except as stated in this section) patent license to make, have made,
-      use, offer to sell, sell, import, and otherwise transfer the Work,
-      where such license applies only to those patent claims licensable
-      by such Contributor that are necessarily infringed by their
-      Contribution(s) alone or by combination of their Contribution(s)
-      with the Work to which such Contribution(s) was submitted. If You
-      institute patent litigation against any entity (including a
-      cross-claim or counterclaim in a lawsuit) alleging that the Work
-      or a Contribution incorporated within the Work constitutes direct
-      or contributory patent infringement, then any patent licenses
-      granted to You under this License for that Work shall terminate
-      as of the date such litigation is filed.
-
-   4. Redistribution. You may reproduce and distribute copies of the
-      Work or Derivative Works thereof in any medium, with or without
-      modifications, and in Source or Object form, provided that You
-      meet the following conditions:
-
-      (a) You must give any other recipients of the Work or
-          Derivative Works a copy of this License; and
-
-      (b) You must cause any modified files to carry prominent notices
-          stating that You changed the files; and
-
-      (c) You must retain, in the Source form of any Derivative Works
-          that You distribute, all copyright, patent, trademark, and
-          attribution notices from the Source form of the Work,
-          excluding those notices that do not pertain to any part of
-          the Derivative Works; and
-
-      (d) If the Work includes a "NOTICE" text file as part of its
-          distribution, then any Derivative Works that You distribute must
-          include a readable copy of the attribution notices contained
-          within such NOTICE file, excluding those notices that do not
-          pertain to any part of the Derivative Works, in at least one
-          of the following places: within a NOTICE text file distributed
-          as part of the Derivative Works; within the Source form or
-          documentation, if provided along with the Derivative Works; or,
-          within a display generated by the Derivative Works, if and
-          wherever such third-party notices normally appear. The contents
-          of the NOTICE file are for informational purposes only and
-          do not modify the License. You may add Your own attribution
-          notices within Derivative Works that You distribute, alongside
-          or as an addendum to the NOTICE text from the Work, provided
-          that such additional attribution notices cannot be construed
-          as modifying the License.
-
-      You may add Your own copyright statement to Your modifications and
-      may provide additional or different license terms and conditions
-      for use, reproduction, or distribution of Your modifications, or
-      for any such Derivative Works as a whole, provided Your use,
-      reproduction, and distribution of the Work otherwise complies with
-      the conditions stated in this License.
-
-   5. Submission of Contributions. Unless You explicitly state otherwise,
-      any Contribution intentionally submitted for inclusion in the Work
-      by You to the Licensor shall be under the terms and conditions of
-      this License, without any additional terms or conditions.
-      Notwithstanding the above, nothing herein shall supersede or modify
-      the terms of any separate license agreement you may have executed
-      with Licensor regarding such Contributions.
-
-   6. Trademarks. This License does not grant permission to use the trade
-      names, trademarks, service marks, or product names of the Licensor,
-      except as required for reasonable and customary use in describing the
-      origin of the Work and reproducing the content of the NOTICE file.
-
-   7. Disclaimer of Warranty. Unless required by applicable law or
-      agreed to in writing, Licensor provides the Work (and each
-      Contributor provides its Contributions) on an "AS IS" BASIS,
-      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
-      implied, including, without limitation, any warranties or conditions
-      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
-      PARTICULAR PURPOSE. You are solely responsible for determining the
-      appropriateness of using or redistributing the Work and assume any
-      risks associated with Your exercise of permissions under this License.
-
-   8. Limitation of Liability. In no event and under no legal theory,
-      whether in tort (including negligence), contract, or otherwise,
-      unless required by applicable law (such as deliberate and grossly
-      negligent acts) or agreed to in writing, shall any Contributor be
-      liable to You for damages, including any direct, indirect, special,
-      incidental, or consequential damages of any character arising as a
-      result of this License or out of the use or inability to use the
-      Work (including but not limited to damages for loss of goodwill,
-      work stoppage, computer failure or malfunction, or any and all
-      other commercial damages or losses), even if such Contributor
-      has been advised of the possibility of such damages.
-
-   9. Accepting Warranty or Additional Liability. While redistributing
-      the Work or Derivative Works thereof, You may choose to offer,
-      and charge a fee for, acceptance of support, warranty, indemnity,
-      or other liability obligations and/or rights consistent with this
-      License. However, in accepting such obligations, You may act only
-      on Your own behalf and on Your sole responsibility, not on behalf
-      of any other Contributor, and only if You agree to indemnify,
-      defend, and hold each Contributor harmless for any liability
-      incurred by, or claims asserted against, such Contributor by reason
-      of your accepting any such warranty or additional liability.
-
-   END OF TERMS AND CONDITIONS
-
-   APPENDIX: How to apply the Apache License to your work.
-
-      To apply the Apache License to your work, attach the following
-      boilerplate notice, with the fields enclosed by brackets "[]"
-      replaced with your own identifying information. (Don't include
-      the brackets!)  The text should be enclosed in the appropriate
-      comment syntax for the file format. We also recommend that a
-      file or class name and description of purpose be included on the
-      same "printed page" as the copyright notice for easier
-      identification within third-party archives.
-
-   Copyright [yyyy] [name of copyright owner]
-
-   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.
-
-
-JSR 305:
-
-Copyright (c) 2007-2009, JSR305 expert group
-All rights reserved.
-
-http://www.opensource.org/licenses/bsd-license.php
-
-Redistribution and use in source and binary forms, with or without 
-modification, are permitted provided that the following conditions are met:
-
-    * Redistributions of source code must retain the above copyright notice, 
-      this list of conditions and the following disclaimer.
-    * Redistributions in binary form must reproduce the above copyright notice, 
-      this list of conditions and the following disclaimer in the documentation 
-      and/or other materials provided with the distribution.
-    * Neither the name of the JSR305 expert group nor the names of its 
-      contributors may be used to endorse or promote products derived from 
-      this software without specific prior written permission.
-
-THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" 
-AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, 
-THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 
-ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE 
-LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 
-CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 
-SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 
-INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 
-CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 
-ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 
-POSSIBILITY OF SUCH DAMAGE.
-
-
-JSpecify:
-
-
-                                 Apache License
-                           Version 2.0, January 2004
-                        http://www.apache.org/licenses/
-
-   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
-
-   1. Definitions.
-
-      "License" shall mean the terms and conditions for use, reproduction,
-      and distribution as defined by Sections 1 through 9 of this document.
-
-      "Licensor" shall mean the copyright owner or entity authorized by
-      the copyright owner that is granting the License.
-
-      "Legal Entity" shall mean the union of the acting entity and all
-      other entities that control, are controlled by, or are under common
-      control with that entity. For the purposes of this definition,
-      "control" means (i) the power, direct or indirect, to cause the
-      direction or management of such entity, whether by contract or
-      otherwise, or (ii) ownership of fifty percent (50%) or more of the
-      outstanding shares, or (iii) beneficial ownership of such entity.
-
-      "You" (or "Your") shall mean an individual or Legal Entity
-      exercising permissions granted by this License.
-
-      "Source" form shall mean the preferred form for making modifications,
-      including but not limited to software source code, documentation
-      source, and configuration files.
-
-      "Object" form shall mean any form resulting from mechanical
-      transformation or translation of a Source form, including but
-      not limited to compiled object code, generated documentation,
-      and conversions to other media types.
-
-      "Work" shall mean the work of authorship, whether in Source or
-      Object form, made available under the License, as indicated by a
-      copyright notice that is included in or attached to the work
-      (an example is provided in the Appendix below).
-
-      "Derivative Works" shall mean any work, whether in Source or Object
-      form, that is based on (or derived from) the Work and for which the
-      editorial revisions, annotations, elaborations, or other modifications
-      represent, as a whole, an original work of authorship. For the purposes
-      of this License, Derivative Works shall not include works that remain
-      separable from, or merely link (or bind by name) to the interfaces of,
-      the Work and Derivative Works thereof.
-
-      "Contribution" shall mean any work of authorship, including
-      the original version of the Work and any modifications or additions
-      to that Work or Derivative Works thereof, that is intentionally
-      submitted to Licensor for inclusion in the Work by the copyright owner
-      or by an individual or Legal Entity authorized to submit on behalf of
-      the copyright owner. For the purposes of this definition, "submitted"
-      means any form of electronic, verbal, or written communication sent
-      to the Licensor or its representatives, including but not limited to
-      communication on electronic mailing lists, source code control systems,
-      and issue tracking systems that are managed by, or on behalf of, the
-      Licensor for the purpose of discussing and improving the Work, but
-      excluding communication that is conspicuously marked or otherwise
-      designated in writing by the copyright owner as "Not a Contribution."
-
-      "Contributor" shall mean Licensor and any individual or Legal Entity
-      on behalf of whom a Contribution has been received by Licensor and
-      subsequently incorporated within the Work.
-
-   2. Grant of Copyright License. Subject to the terms and conditions of
-      this License, each Contributor hereby grants to You a perpetual,
-      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
-      copyright license to reproduce, prepare Derivative Works of,
-      publicly display, publicly perform, sublicense, and distribute the
-      Work and such Derivative Works in Source or Object form.
-
-   3. Grant of Patent License. Subject to the terms and conditions of
-      this License, each Contributor hereby grants to You a perpetual,
-      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
-      (except as stated in this section) patent license to make, have made,
-      use, offer to sell, sell, import, and otherwise transfer the Work,
-      where such license applies only to those patent claims licensable
-      by such Contributor that are necessarily infringed by their
-      Contribution(s) alone or by combination of their Contribution(s)
-      with the Work to which such Contribution(s) was submitted. If You
-      institute patent litigation against any entity (including a
-      cross-claim or counterclaim in a lawsuit) alleging that the Work
-      or a Contribution incorporated within the Work constitutes direct
-      or contributory patent infringement, then any patent licenses
-      granted to You under this License for that Work shall terminate
-      as of the date such litigation is filed.
-
-   4. Redistribution. You may reproduce and distribute copies of the
-      Work or Derivative Works thereof in any medium, with or without
-      modifications, and in Source or Object form, provided that You
-      meet the following conditions:
-
-      (a) You must give any other recipients of the Work or
-          Derivative Works a copy of this License; and
-
-      (b) You must cause any modified files to carry prominent notices
-          stating that You changed the files; and
-
-      (c) You must retain, in the Source form of any Derivative Works
-          that You distribute, all copyright, patent, trademark, and
-          attribution notices from the Source form of the Work,
-          excluding those notices that do not pertain to any part of
-          the Derivative Works; and
-
-      (d) If the Work includes a "NOTICE" text file as part of its
-          distribution, then any Derivative Works that You distribute must
-          include a readable copy of the attribution notices contained
-          within such NOTICE file, excluding those notices that do not
-          pertain to any part of the Derivative Works, in at least one
-          of the following places: within a NOTICE text file distributed
-          as part of the Derivative Works; within the Source form or
-          documentation, if provided along with the Derivative Works; or,
-          within a display generated by the Derivative Works, if and
-          wherever such third-party notices normally appear. The contents
-          of the NOTICE file are for informational purposes only and
-          do not modify the License. You may add Your own attribution
-          notices within Derivative Works that You distribute, alongside
-          or as an addendum to the NOTICE text from the Work, provided
-          that such additional attribution notices cannot be construed
-          as modifying the License.
-
-      You may add Your own copyright statement to Your modifications and
-      may provide additional or different license terms and conditions
-      for use, reproduction, or distribution of Your modifications, or
-      for any such Derivative Works as a whole, provided Your use,
-      reproduction, and distribution of the Work otherwise complies with
-      the conditions stated in this License.
-
-   5. Submission of Contributions. Unless You explicitly state otherwise,
-      any Contribution intentionally submitted for inclusion in the Work
-      by You to the Licensor shall be under the terms and conditions of
-      this License, without any additional terms or conditions.
-      Notwithstanding the above, nothing herein shall supersede or modify
-      the terms of any separate license agreement you may have executed
-      with Licensor regarding such Contributions.
-
-   6. Trademarks. This License does not grant permission to use the trade
-      names, trademarks, service marks, or product names of the Licensor,
-      except as required for reasonable and customary use in describing the
-      origin of the Work and reproducing the content of the NOTICE file.
-
-   7. Disclaimer of Warranty. Unless required by applicable law or
-      agreed to in writing, Licensor provides the Work (and each
-      Contributor provides its Contributions) on an "AS IS" BASIS,
-      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
-      implied, including, without limitation, any warranties or conditions
-      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
-      PARTICULAR PURPOSE. You are solely responsible for determining the
-      appropriateness of using or redistributing the Work and assume any
-      risks associated with Your exercise of permissions under this License.
-
-   8. Limitation of Liability. In no event and under no legal theory,
-      whether in tort (including negligence), contract, or otherwise,
-      unless required by applicable law (such as deliberate and grossly
-      negligent acts) or agreed to in writing, shall any Contributor be
-      liable to You for damages, including any direct, indirect, special,
-      incidental, or consequential damages of any character arising as a
-      result of this License or out of the use or inability to use the
-      Work (including but not limited to damages for loss of goodwill,
-      work stoppage, computer failure or malfunction, or any and all
-      other commercial damages or losses), even if such Contributor
-      has been advised of the possibility of such damages.
-
-   9. Accepting Warranty or Additional Liability. While redistributing
-      the Work or Derivative Works thereof, You may choose to offer,
-      and charge a fee for, acceptance of support, warranty, indemnity,
-      or other liability obligations and/or rights consistent with this
-      License. However, in accepting such obligations, You may act only
-      on Your own behalf and on Your sole responsibility, not on behalf
-      of any other Contributor, and only if You agree to indemnify,
-      defend, and hold each Contributor harmless for any liability
-      incurred by, or claims asserted against, such Contributor by reason
-      of your accepting any such warranty or additional liability.
-
-   END OF TERMS AND CONDITIONS
-
-   APPENDIX: How to apply the Apache License to your work.
-
-      To apply the Apache License to your work, attach the following
-      boilerplate notice, with the fields enclosed by brackets "[]"
-      replaced with your own identifying information. (Don't include
-      the brackets!)  The text should be enclosed in the appropriate
-      comment syntax for the file format. We also recommend that a
-      file or class name and description of purpose be included on the
-      same "printed page" as the copyright notice for easier
-      identification within third-party archives.
-
-   Copyright [yyyy] [name of copyright owner]
-
-   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.
-
-
-JsInterop Annotations:
-
-Apache License
-                           Version 2.0, January 2004
-                        http://www.apache.org/licenses/
-
-   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
-
-   1. Definitions.
-
-      "License" shall mean the terms and conditions for use, reproduction,
-      and distribution as defined by Sections 1 through 9 of this document.
-
-      "Licensor" shall mean the copyright owner or entity authorized by
-      the copyright owner that is granting the License.
-
-      "Legal Entity" shall mean the union of the acting entity and all
-      other entities that control, are controlled by, or are under common
-      control with that entity. For the purposes of this definition,
-      "control" means (i) the power, direct or indirect, to cause the
-      direction or management of such entity, whether by contract or
-      otherwise, or (ii) ownership of fifty percent (50%) or more of the
-      outstanding shares, or (iii) beneficial ownership of such entity.
-
-      "You" (or "Your") shall mean an individual or Legal Entity
-      exercising permissions granted by this License.
-
-      "Source" form shall mean the preferred form for making modifications,
-      including but not limited to software source code, documentation
-      source, and configuration files.
-
-      "Object" form shall mean any form resulting from mechanical
-      transformation or translation of a Source form, including but
-      not limited to compiled object code, generated documentation,
-      and conversions to other media types.
-
-      "Work" shall mean the work of authorship, whether in Source or
-      Object form, made available under the License, as indicated by a
-      copyright notice that is included in or attached to the work
-      (an example is provided in the Appendix below).
-
-      "Derivative Works" shall mean any work, whether in Source or Object
-      form, that is based on (or derived from) the Work and for which the
-      editorial revisions, annotations, elaborations, or other modifications
-      represent, as a whole, an original work of authorship. For the purposes
-      of this License, Derivative Works shall not include works that remain
-      separable from, or merely link (or bind by name) to the interfaces of,
-      the Work and Derivative Works thereof.
-
-      "Contribution" shall mean any work of authorship, including
-      the original version of the Work and any modifications or additions
-      to that Work or Derivative Works thereof, that is intentionally
-      submitted to Licensor for inclusion in the Work by the copyright owner
-      or by an individual or Legal Entity authorized to submit on behalf of
-      the copyright owner. For the purposes of this definition, "submitted"
-      means any form of electronic, verbal, or written communication sent
-      to the Licensor or its representatives, including but not limited to
-      communication on electronic mailing lists, source code control systems,
-      and issue tracking systems that are managed by, or on behalf of, the
-      Licensor for the purpose of discussing and improving the Work, but
-      excluding communication that is conspicuously marked or otherwise
-      designated in writing by the copyright owner as "Not a Contribution."
-
-      "Contributor" shall mean Licensor and any individual or Legal Entity
-      on behalf of whom a Contribution has been received by Licensor and
-      subsequently incorporated within the Work.
-
-   2. Grant of Copyright License. Subject to the terms and conditions of
-      this License, each Contributor hereby grants to You a perpetual,
-      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
-      copyright license to reproduce, prepare Derivative Works of,
-      publicly display, publicly perform, sublicense, and distribute the
-      Work and such Derivative Works in Source or Object form.
-
-   3. Grant of Patent License. Subject to the terms and conditions of
-      this License, each Contributor hereby grants to You a perpetual,
-      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
-      (except as stated in this section) patent license to make, have made,
-      use, offer to sell, sell, import, and otherwise transfer the Work,
-      where such license applies only to those patent claims licensable
-      by such Contributor that are necessarily infringed by their
-      Contribution(s) alone or by combination of their Contribution(s)
-      with the Work to which such Contribution(s) was submitted. If You
-      institute patent litigation against any entity (including a
-      cross-claim or counterclaim in a lawsuit) alleging that the Work
-      or a Contribution incorporated within the Work constitutes direct
-      or contributory patent infringement, then any patent licenses
-      granted to You under this License for that Work shall terminate
-      as of the date such litigation is filed.
-
-   4. Redistribution. You may reproduce and distribute copies of the
-      Work or Derivative Works thereof in any medium, with or without
-      modifications, and in Source or Object form, provided that You
-      meet the following conditions:
-
-      (a) You must give any other recipients of the Work or
-          Derivative Works a copy of this License; and
-
-      (b) You must cause any modified files to carry prominent notices
-          stating that You changed the files; and
-
-      (c) You must retain, in the Source form of any Derivative Works
-          that You distribute, all copyright, patent, trademark, and
-          attribution notices from the Source form of the Work,
-          excluding those notices that do not pertain to any part of
-          the Derivative Works; and
-
-      (d) If the Work includes a "NOTICE" text file as part of its
-          distribution, then any Derivative Works that You distribute must
-          include a readable copy of the attribution notices contained
-          within such NOTICE file, excluding those notices that do not
-          pertain to any part of the Derivative Works, in at least one
-          of the following places: within a NOTICE text file distributed
-          as part of the Derivative Works; within the Source form or
-          documentation, if provided along with the Derivative Works; or,
-          within a display generated by the Derivative Works, if and
-          wherever such third-party notices normally appear. The contents
-          of the NOTICE file are for informational purposes only and
-          do not modify the License. You may add Your own attribution
-          notices within Derivative Works that You distribute, alongside
-          or as an addendum to the NOTICE text from the Work, provided
-          that such additional attribution notices cannot be construed
-          as modifying the License.
-
-      You may add Your own copyright statement to Your modifications and
-      may provide additional or different license terms and conditions
-      for use, reproduction, or distribution of Your modifications, or
-      for any such Derivative Works as a whole, provided Your use,
-      reproduction, and distribution of the Work otherwise complies with
-      the conditions stated in this License.
-
-   5. Submission of Contributions. Unless You explicitly state otherwise,
-      any Contribution intentionally submitted for inclusion in the Work
-      by You to the Licensor shall be under the terms and conditions of
-      this License, without any additional terms or conditions.
-      Notwithstanding the above, nothing herein shall supersede or modify
-      the terms of any separate license agreement you may have executed
-      with Licensor regarding such Contributions.
-
-   6. Trademarks. This License does not grant permission to use the trade
-      names, trademarks, service marks, or product names of the Licensor,
-      except as required for reasonable and customary use in describing the
-      origin of the Work and reproducing the content of the NOTICE file.
-
-   7. Disclaimer of Warranty. Unless required by applicable law or
-      agreed to in writing, Licensor provides the Work (and each
-      Contributor provides its Contributions) on an "AS IS" BASIS,
-      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
-      implied, including, without limitation, any warranties or conditions
-      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
-      PARTICULAR PURPOSE. You are solely responsible for determining the
-      appropriateness of using or redistributing the Work and assume any
-      risks associated with Your exercise of permissions under this License.
-
-   8. Limitation of Liability. In no event and under no legal theory,
-      whether in tort (including negligence), contract, or otherwise,
-      unless required by applicable law (such as deliberate and grossly
-      negligent acts) or agreed to in writing, shall any Contributor be
-      liable to You for damages, including any direct, indirect, special,
-      incidental, or consequential damages of any character arising as a
-      result of this License or out of the use or inability to use the
-      Work (including but not limited to damages for loss of goodwill,
-      work stoppage, computer failure or malfunction, or any and all
-      other commercial damages or losses), even if such Contributor
-      has been advised of the possibility of such damages.
-
-   9. Accepting Warranty or Additional Liability. While redistributing
-      the Work or Derivative Works thereof, You may choose to offer,
-      and charge a fee for, acceptance of support, warranty, indemnity,
-      or other liability obligations and/or rights consistent with this
-      License. However, in accepting such obligations, You may act only
-      on Your own behalf and on Your sole responsibility, not on behalf
-      of any other Contributor, and only if You agree to indemnify,
-      defend, and hold each Contributor harmless for any liability
-      incurred by, or claims asserted against, such Contributor by reason
-      of your accepting any such warranty or additional liability.
-
-   END OF TERMS AND CONDITIONS
-
-   APPENDIX: How to apply the Apache License to your work.
-
-      To apply the Apache License to your work, attach the following
-      boilerplate notice, with the fields enclosed by brackets "[]"
-      replaced with your own identifying information. (Don't include
-      the brackets!)  The text should be enclosed in the appropriate
-      comment syntax for the file format. We also recommend that a
-      file or class name and description of purpose be included on the
-      same "printed page" as the copyright notice for easier
-      identification within third-party archives.
-
-   Copyright 2017 Google Inc.
-
-   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.
-
-Kotlin:
-
-Files: kotlinc/*
-
-                                 Apache License
-                           Version 2.0, January 2004
-                        http://www.apache.org/licenses/
-
-   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
-
-   1. Definitions.
-
-      "License" shall mean the terms and conditions for use, reproduction,
-      and distribution as defined by Sections 1 through 9 of this document.
-
-      "Licensor" shall mean the copyright owner or entity authorized by
-      the copyright owner that is granting the License.
-
-      "Legal Entity" shall mean the union of the acting entity and all
-      other entities that control, are controlled by, or are under common
-      control with that entity. For the purposes of this definition,
-      "control" means (i) the power, direct or indirect, to cause the
-      direction or management of such entity, whether by contract or
-      otherwise, or (ii) ownership of fifty percent (50%) or more of the
-      outstanding shares, or (iii) beneficial ownership of such entity.
-
-      "You" (or "Your") shall mean an individual or Legal Entity
-      exercising permissions granted by this License.
-
-      "Source" form shall mean the preferred form for making modifications,
-      including but not limited to software source code, documentation
-      source, and configuration files.
-
-      "Object" form shall mean any form resulting from mechanical
-      transformation or translation of a Source form, including but
-      not limited to compiled object code, generated documentation,
-      and conversions to other media types.
-
-      "Work" shall mean the work of authorship, whether in Source or
-      Object form, made available under the License, as indicated by a
-      copyright notice that is included in or attached to the work
-      (an example is provided in the Appendix below).
-
-      "Derivative Works" shall mean any work, whether in Source or Object
-      form, that is based on (or derived from) the Work and for which the
-      editorial revisions, annotations, elaborations, or other modifications
-      represent, as a whole, an original work of authorship. For the purposes
-      of this License, Derivative Works shall not include works that remain
-      separable from, or merely link (or bind by name) to the interfaces of,
-      the Work and Derivative Works thereof.
-
-      "Contribution" shall mean any work of authorship, including
-      the original version of the Work and any modifications or additions
-      to that Work or Derivative Works thereof, that is intentionally
-      submitted to Licensor for inclusion in the Work by the copyright owner
-      or by an individual or Legal Entity authorized to submit on behalf of
-      the copyright owner. For the purposes of this definition, "submitted"
-      means any form of electronic, verbal, or written communication sent
-      to the Licensor or its representatives, including but not limited to
-      communication on electronic mailing lists, source code control systems,
-      and issue tracking systems that are managed by, or on behalf of, the
-      Licensor for the purpose of discussing and improving the Work, but
-      excluding communication that is conspicuously marked or otherwise
-      designated in writing by the copyright owner as "Not a Contribution."
-
-      "Contributor" shall mean Licensor and any individual or Legal Entity
-      on behalf of whom a Contribution has been received by Licensor and
-      subsequently incorporated within the Work.
-
-   2. Grant of Copyright License. Subject to the terms and conditions of
-      this License, each Contributor hereby grants to You a perpetual,
-      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
-      copyright license to reproduce, prepare Derivative Works of,
-      publicly display, publicly perform, sublicense, and distribute the
-      Work and such Derivative Works in Source or Object form.
-
-   3. Grant of Patent License. Subject to the terms and conditions of
-      this License, each Contributor hereby grants to You a perpetual,
-      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
-      (except as stated in this section) patent license to make, have made,
-      use, offer to sell, sell, import, and otherwise transfer the Work,
-      where such license applies only to those patent claims licensable
-      by such Contributor that are necessarily infringed by their
-      Contribution(s) alone or by combination of their Contribution(s)
-      with the Work to which such Contribution(s) was submitted. If You
-      institute patent litigation against any entity (including a
-      cross-claim or counterclaim in a lawsuit) alleging that the Work
-      or a Contribution incorporated within the Work constitutes direct
-      or contributory patent infringement, then any patent licenses
-      granted to You under this License for that Work shall terminate
-      as of the date such litigation is filed.
-
-   4. Redistribution. You may reproduce and distribute copies of the
-      Work or Derivative Works thereof in any medium, with or without
-      modifications, and in Source or Object form, provided that You
-      meet the following conditions:
-
-      (a) You must give any other recipients of the Work or
-          Derivative Works a copy of this License; and
-
-      (b) You must cause any modified files to carry prominent notices
-          stating that You changed the files; and
-
-      (c) You must retain, in the Source form of any Derivative Works
-          that You distribute, all copyright, patent, trademark, and
-          attribution notices from the Source form of the Work,
-          excluding those notices that do not pertain to any part of
-          the Derivative Works; and
-
-      (d) If the Work includes a "NOTICE" text file as part of its
-          distribution, then any Derivative Works that You distribute must
-          include a readable copy of the attribution notices contained
-          within such NOTICE file, excluding those notices that do not
-          pertain to any part of the Derivative Works, in at least one
-          of the following places: within a NOTICE text file distributed
-          as part of the Derivative Works; within the Source form or
-          documentation, if provided along with the Derivative Works; or,
-          within a display generated by the Derivative Works, if and
-          wherever such third-party notices normally appear. The contents
-          of the NOTICE file are for informational purposes only and
-          do not modify the License. You may add Your own attribution
-          notices within Derivative Works that You distribute, alongside
-          or as an addendum to the NOTICE text from the Work, provided
-          that such additional attribution notices cannot be construed
-          as modifying the License.
-
-      You may add Your own copyright statement to Your modifications and
-      may provide additional or different license terms and conditions
-      for use, reproduction, or distribution of Your modifications, or
-      for any such Derivative Works as a whole, provided Your use,
-      reproduction, and distribution of the Work otherwise complies with
-      the conditions stated in this License.
-
-   5. Submission of Contributions. Unless You explicitly state otherwise,
-      any Contribution intentionally submitted for inclusion in the Work
-      by You to the Licensor shall be under the terms and conditions of
-      this License, without any additional terms or conditions.
-      Notwithstanding the above, nothing herein shall supersede or modify
-      the terms of any separate license agreement you may have executed
-      with Licensor regarding such Contributions.
-
-   6. Trademarks. This License does not grant permission to use the trade
-      names, trademarks, service marks, or product names of the Licensor,
-      except as required for reasonable and customary use in describing the
-      origin of the Work and reproducing the content of the NOTICE file.
-
-   7. Disclaimer of Warranty. Unless required by applicable law or
-      agreed to in writing, Licensor provides the Work (and each
-      Contributor provides its Contributions) on an "AS IS" BASIS,
-      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
-      implied, including, without limitation, any warranties or conditions
-      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
-      PARTICULAR PURPOSE. You are solely responsible for determining the
-      appropriateness of using or redistributing the Work and assume any
-      risks associated with Your exercise of permissions under this License.
-
-   8. Limitation of Liability. In no event and under no legal theory,
-      whether in tort (including negligence), contract, or otherwise,
-      unless required by applicable law (such as deliberate and grossly
-      negligent acts) or agreed to in writing, shall any Contributor be
-      liable to You for damages, including any direct, indirect, special,
-      incidental, or consequential damages of any character arising as a
-      result of this License or out of the use or inability to use the
-      Work (including but not limited to damages for loss of goodwill,
-      work stoppage, computer failure or malfunction, or any and all
-      other commercial damages or losses), even if such Contributor
-      has been advised of the possibility of such damages.
-
-   9. Accepting Warranty or Additional Liability. While redistributing
-      the Work or Derivative Works thereof, You may choose to offer,
-      and charge a fee for, acceptance of support, warranty, indemnity,
-      or other liability obligations and/or rights consistent with this
-      License. However, in accepting such obligations, You may act only
-      on Your own behalf and on Your sole responsibility, not on behalf
-      of any other Contributor, and only if You agree to indemnify,
-      defend, and hold each Contributor harmless for any liability
-      incurred by, or claims asserted against, such Contributor by reason
-      of your accepting any such warranty or additional liability.
-
-   END OF TERMS AND CONDITIONS
-
-   APPENDIX: How to apply the Apache License to your work.
-
-      To apply the Apache License to your work, attach the following
-      boilerplate notice, with the fields enclosed by brackets "[]"
-      replaced with your own identifying information. (Don't include
-      the brackets!)  The text should be enclosed in the appropriate
-      comment syntax for the file format. We also recommend that a
-      file or class name and description of purpose be included on the
-      same "printed page" as the copyright notice for easier
-      identification within third-party archives.
-
-   Copyright 2000-2020 JetBrains s.r.o. and Kotlin Programming Language contributors.
-
-   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.
-
-------------------
-
-Files: kotlinc/lib/trove4j.jar
-
-
-          GNU LESSER GENERAL PUBLIC LICENSE
-               Version 2.1, February 1999
-
- Copyright (C) 1991, 1999 Free Software Foundation, Inc.
-     59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
- Everyone is permitted to copy and distribute verbatim copies
- of this license document, but changing it is not allowed.
-
-[This is the first released version of the Lesser GPL.  It also counts
- as the successor of the GNU Library Public License, version 2, hence
- the version number 2.1.]
-
-                Preamble
-
-  The licenses for most software are designed to take away your
-freedom to share and change it.  By contrast, the GNU General Public
-Licenses are intended to guarantee your freedom to share and change
-free software--to make sure the software is free for all its users.
-
-  This license, the Lesser General Public License, applies to some
-specially designated software packages--typically libraries--of the
-Free Software Foundation and other authors who decide to use it.  You
-can use it too, but we suggest you first think carefully about whether
-this license or the ordinary General Public License is the better
-strategy to use in any particular case, based on the explanations below.
-
-  When we speak of free software, we are referring to freedom of use,
-not price.  Our General Public Licenses are designed to make sure that
-you have the freedom to distribute copies of free software (and charge
-for this service if you wish); that you receive source code or can get
-it if you want it; that you can change the software and use pieces of
-it in new free programs; and that you are informed that you can do
-these things.
-
-  To protect your rights, we need to make restrictions that forbid
-distributors to deny you these rights or to ask you to surrender these
-rights.  These restrictions translate to certain responsibilities for
-you if you distribute copies of the library or if you modify it.
-
-  For example, if you distribute copies of the library, whether gratis
-or for a fee, you must give the recipients all the rights that we gave
-you.  You must make sure that they, too, receive or can get the source
-code.  If you link other code with the library, you must provide
-complete object files to the recipients, so that they can relink them
-with the library after making changes to the library and recompiling
-it.  And you must show them these terms so they know their rights.
-
-  We protect your rights with a two-step method: (1) we copyright the
-library, and (2) we offer you this license, which gives you legal
-permission to copy, distribute and/or modify the library.
-
-  To protect each distributor, we want to make it very clear that
-there is no warranty for the free library.  Also, if the library is
-modified by someone else and passed on, the recipients should know
-that what they have is not the original version, so that the original
-author's reputation will not be affected by problems that might be
-introduced by others.
-
-  Finally, software patents pose a constant threat to the existence of
-any free program.  We wish to make sure that a company cannot
-effectively restrict the users of a free program by obtaining a
-restrictive license from a patent holder.  Therefore, we insist that
-any patent license obtained for a version of the library must be
-consistent with the full freedom of use specified in this license.
-
-  Most GNU software, including some libraries, is covered by the
-ordinary GNU General Public License.  This license, the GNU Lesser
-General Public License, applies to certain designated libraries, and
-is quite different from the ordinary General Public License.  We use
-this license for certain libraries in order to permit linking those
-libraries into non-free programs.
-
-  When a program is linked with a library, whether statically or using
-a shared library, the combination of the two is legally speaking a
-combined work, a derivative of the original library.  The ordinary
-General Public License therefore permits such linking only if the
-entire combination fits its criteria of freedom.  The Lesser General
-Public License permits more lax criteria for linking other code with
-the library.
-
-  We call this license the "Lesser" General Public License because it
-does Less to protect the user's freedom than the ordinary General
-Public License.  It also provides other free software developers Less
-of an advantage over competing non-free programs.  These disadvantages
-are the reason we use the ordinary General Public License for many
-libraries.  However, the Lesser license provides advantages in certain
-special circumstances.
-
-  For example, on rare occasions, there may be a special need to
-encourage the widest possible use of a certain library, so that it becomes
-a de-facto standard.  To achieve this, non-free programs must be
-allowed to use the library.  A more frequent case is that a free
-library does the same job as widely used non-free libraries.  In this
-case, there is little to gain by limiting the free library to free
-software only, so we use the Lesser General Public License.
-
-  In other cases, permission to use a particular library in non-free
-programs enables a greater number of people to use a large body of
-free software.  For example, permission to use the GNU C Library in
-non-free programs enables many more people to use the whole GNU
-operating system, as well as its variant, the GNU/Linux operating
-system.
-
-  Although the Lesser General Public License is Less protective of the
-users' freedom, it does ensure that the user of a program that is
-linked with the Library has the freedom and the wherewithal to run
-that program using a modified version of the Library.
-
-  The precise terms and conditions for copying, distribution and
-modification follow.  Pay close attention to the difference between a
-"work based on the library" and a "work that uses the library".  The
-former contains code derived from the library, whereas the latter must
-be combined with the library in order to run.
-
-          GNU LESSER GENERAL PUBLIC LICENSE
-   TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
-
-  0. This License Agreement applies to any software library or other
-program which contains a notice placed by the copyright holder or
-other authorized party saying it may be distributed under the terms of
-this Lesser General Public License (also called "this License").
-Each licensee is addressed as "you".
-
-  A "library" means a collection of software functions and/or data
-prepared so as to be conveniently linked with application programs
-(which use some of those functions and data) to form executables.
-
-  The "Library", below, refers to any such software library or work
-which has been distributed under these terms.  A "work based on the
-Library" means either the Library or any derivative work under
-copyright law: that is to say, a work containing the Library or a
-portion of it, either verbatim or with modifications and/or translated
-straightforwardly into another language.  (Hereinafter, translation is
-included without limitation in the term "modification".)
-
-  "Source code" for a work means the preferred form of the work for
-making modifications to it.  For a library, complete source code means
-all the source code for all modules it contains, plus any associated
-interface definition files, plus the scripts used to control compilation
-and installation of the library.
-
-  Activities other than copying, distribution and modification are not
-covered by this License; they are outside its scope.  The act of
-running a program using the Library is not restricted, and output from
-such a program is covered only if its contents constitute a work based
-on the Library (independent of the use of the Library in a tool for
-writing it).  Whether that is true depends on what the Library does
-and what the program that uses the Library does.
-
-  1. You may copy and distribute verbatim copies of the Library's
-complete source code as you receive it, in any medium, provided that
-you conspicuously and appropriately publish on each copy an
-appropriate copyright notice and disclaimer of warranty; keep intact
-all the notices that refer to this License and to the absence of any
-warranty; and distribute a copy of this License along with the
-Library.
-
-  You may charge a fee for the physical act of transferring a copy,
-and you may at your option offer warranty protection in exchange for a
-fee.
-
-  2. You may modify your copy or copies of the Library or any portion
-of it, thus forming a work based on the Library, and copy and
-distribute such modifications or work under the terms of Section 1
-above, provided that you also meet all of these conditions:
-
-    a) The modified work must itself be a software library.
-
-    b) You must cause the files modified to carry prominent notices
-    stating that you changed the files and the date of any change.
-
-    c) You must cause the whole of the work to be licensed at no
-    charge to all third parties under the terms of this License.
-
-    d) If a facility in the modified Library refers to a function or a
-    table of data to be supplied by an application program that uses
-    the facility, other than as an argument passed when the facility
-    is invoked, then you must make a good faith effort to ensure that,
-    in the event an application does not supply such function or
-    table, the facility still operates, and performs whatever part of
-    its purpose remains meaningful.
-
-    (For example, a function in a library to compute square roots has
-    a purpose that is entirely well-defined independent of the
-    application.  Therefore, Subsection 2d requires that any
-    application-supplied function or table used by this function must
-    be optional: if the application does not supply it, the square
-    root function must still compute square roots.)
-
-These requirements apply to the modified work as a whole.  If
-identifiable sections of that work are not derived from the Library,
-and can be reasonably considered independent and separate works in
-themselves, then this License, and its terms, do not apply to those
-sections when you distribute them as separate works.  But when you
-distribute the same sections as part of a whole which is a work based
-on the Library, the distribution of the whole must be on the terms of
-this License, whose permissions for other licensees extend to the
-entire whole, and thus to each and every part regardless of who wrote
-it.
-
-Thus, it is not the intent of this section to claim rights or contest
-your rights to work written entirely by you; rather, the intent is to
-exercise the right to control the distribution of derivative or
-collective works based on the Library.
-
-In addition, mere aggregation of another work not based on the Library
-with the Library (or with a work based on the Library) on a volume of
-a storage or distribution medium does not bring the other work under
-the scope of this License.
-
-  3. You may opt to apply the terms of the ordinary GNU General Public
-License instead of this License to a given copy of the Library.  To do
-this, you must alter all the notices that refer to this License, so
-that they refer to the ordinary GNU General Public License, version 2,
-instead of to this License.  (If a newer version than version 2 of the
-ordinary GNU General Public License has appeared, then you can specify
-that version instead if you wish.)  Do not make any other change in
-these notices.
-
-  Once this change is made in a given copy, it is irreversible for
-that copy, so the ordinary GNU General Public License applies to all
-subsequent copies and derivative works made from that copy.
-
-  This option is useful when you wish to copy part of the code of
-the Library into a program that is not a library.
-
-  4. You may copy and distribute the Library (or a portion or
-derivative of it, under Section 2) in object code or executable form
-under the terms of Sections 1 and 2 above provided that you accompany
-it with the complete corresponding machine-readable source code, which
-must be distributed under the terms of Sections 1 and 2 above on a
-medium customarily used for software interchange.
-
-  If distribution of object code is made by offering access to copy
-from a designated place, then offering equivalent access to copy the
-source code from the same place satisfies the requirement to
-distribute the source code, even though third parties are not
-compelled to copy the source along with the object code.
-
-  5. A program that contains no derivative of any portion of the
-Library, but is designed to work with the Library by being compiled or
-linked with it, is called a "work that uses the Library".  Such a
-work, in isolation, is not a derivative work of the Library, and
-therefore falls outside the scope of this License.
-
-  However, linking a "work that uses the Library" with the Library
-creates an executable that is a derivative of the Library (because it
-contains portions of the Library), rather than a "work that uses the
-library".  The executable is therefore covered by this License.
-Section 6 states terms for distribution of such executables.
-
-  When a "work that uses the Library" uses material from a header file
-that is part of the Library, the object code for the work may be a
-derivative work of the Library even though the source code is not.
-Whether this is true is especially significant if the work can be
-linked without the Library, or if the work is itself a library.  The
-threshold for this to be true is not precisely defined by law.
-
-  If such an object file uses only numerical parameters, data
-structure layouts and accessors, and small macros and small inline
-functions (ten lines or less in length), then the use of the object
-file is unrestricted, regardless of whether it is legally a derivative
-work.  (Executables containing this object code plus portions of the
-Library will still fall under Section 6.)
-
-  Otherwise, if the work is a derivative of the Library, you may
-distribute the object code for the work under the terms of Section 6.
-Any executables containing that work also fall under Section 6,
-whether or not they are linked directly with the Library itself.
-
-  6. As an exception to the Sections above, you may also combine or
-link a "work that uses the Library" with the Library to produce a
-work containing portions of the Library, and distribute that work
-under terms of your choice, provided that the terms permit
-modification of the work for the customer's own use and reverse
-engineering for debugging such modifications.
-
-  You must give prominent notice with each copy of the work that the
-Library is used in it and that the Library and its use are covered by
-this License.  You must supply a copy of this License.  If the work
-during execution displays copyright notices, you must include the
-copyright notice for the Library among them, as well as a reference
-directing the user to the copy of this License.  Also, you must do one
-of these things:
-
-    a) Accompany the work with the complete corresponding
-    machine-readable source code for the Library including whatever
-    changes were used in the work (which must be distributed under
-    Sections 1 and 2 above); and, if the work is an executable linked
-    with the Library, with the complete machine-readable "work that
-    uses the Library", as object code and/or source code, so that the
-    user can modify the Library and then relink to produce a modified
-    executable containing the modified Library.  (It is understood
-    that the user who changes the contents of definitions files in the
-    Library will not necessarily be able to recompile the application
-    to use the modified definitions.)
-
-    b) Use a suitable shared library mechanism for linking with the
-    Library.  A suitable mechanism is one that (1) uses at run time a
-    copy of the library already present on the user's computer system,
-    rather than copying library functions into the executable, and (2)
-    will operate properly with a modified version of the library, if
-    the user installs one, as long as the modified version is
-    interface-compatible with the version that the work was made with.
-
-    c) Accompany the work with a written offer, valid for at
-    least three years, to give the same user the materials
-    specified in Subsection 6a, above, for a charge no more
-    than the cost of performing this distribution.
-
-    d) If distribution of the work is made by offering access to copy
-    from a designated place, offer equivalent access to copy the above
-    specified materials from the same place.
-
-    e) Verify that the user has already received a copy of these
-    materials or that you have already sent this user a copy.
-
-  For an executable, the required form of the "work that uses the
-Library" must include any data and utility programs needed for
-reproducing the executable from it.  However, as a special exception,
-the materials to be distributed need not include anything that is
-normally distributed (in either source or binary form) with the major
-components (compiler, kernel, and so on) of the operating system on
-which the executable runs, unless that component itself accompanies
-the executable.
-
-  It may happen that this requirement contradicts the license
-restrictions of other proprietary libraries that do not normally
-accompany the operating system.  Such a contradiction means you cannot
-use both them and the Library together in an executable that you
-distribute.
-
-  7. You may place library facilities that are a work based on the
-Library side-by-side in a single library together with other library
-facilities not covered by this License, and distribute such a combined
-library, provided that the separate distribution of the work based on
-the Library and of the other library facilities is otherwise
-permitted, and provided that you do these two things:
-
-    a) Accompany the combined library with a copy of the same work
-    based on the Library, uncombined with any other library
-    facilities.  This must be distributed under the terms of the
-    Sections above.
-
-    b) Give prominent notice with the combined library of the fact
-    that part of it is a work based on the Library, and explaining
-    where to find the accompanying uncombined form of the same work.
-
-  8. You may not copy, modify, sublicense, link with, or distribute
-the Library except as expressly provided under this License.  Any
-attempt otherwise to copy, modify, sublicense, link with, or
-distribute the Library is void, and will automatically terminate your
-rights under this License.  However, parties who have received copies,
-or rights, from you under this License will not have their licenses
-terminated so long as such parties remain in full compliance.
-
-  9. You are not required to accept this License, since you have not
-signed it.  However, nothing else grants you permission to modify or
-distribute the Library or its derivative works.  These actions are
-prohibited by law if you do not accept this License.  Therefore, by
-modifying or distributing the Library (or any work based on the
-Library), you indicate your acceptance of this License to do so, and
-all its terms and conditions for copying, distributing or modifying
-the Library or works based on it.
-
-  10. Each time you redistribute the Library (or any work based on the
-Library), the recipient automatically receives a license from the
-original licensor to copy, distribute, link with or modify the Library
-subject to these terms and conditions.  You may not impose any further
-restrictions on the recipients' exercise of the rights granted herein.
-You are not responsible for enforcing compliance by third parties with
-this License.
-
-  11. If, as a consequence of a court judgment or allegation of patent
-infringement or for any other reason (not limited to patent issues),
-conditions are imposed on you (whether by court order, agreement or
-otherwise) that contradict the conditions of this License, they do not
-excuse you from the conditions of this License.  If you cannot
-distribute so as to satisfy simultaneously your obligations under this
-License and any other pertinent obligations, then as a consequence you
-may not distribute the Library at all.  For example, if a patent
-license would not permit royalty-free redistribution of the Library by
-all those who receive copies directly or indirectly through you, then
-the only way you could satisfy both it and this License would be to
-refrain entirely from distribution of the Library.
-
-If any portion of this section is held invalid or unenforceable under any
-particular circumstance, the balance of the section is intended to apply,
-and the section as a whole is intended to apply in other circumstances.
-
-It is not the purpose of this section to induce you to infringe any
-patents or other property right claims or to contest validity of any
-such claims; this section has the sole purpose of protecting the
-integrity of the free software distribution system which is
-implemented by public license practices.  Many people have made
-generous contributions to the wide range of software distributed
-through that system in reliance on consistent application of that
-system; it is up to the author/donor to decide if he or she is willing
-to distribute software through any other system and a licensee cannot
-impose that choice.
-
-This section is intended to make thoroughly clear what is believed to
-be a consequence of the rest of this License.
-
-  12. If the distribution and/or use of the Library is restricted in
-certain countries either by patents or by copyrighted interfaces, the
-original copyright holder who places the Library under this License may add
-an explicit geographical distribution limitation excluding those countries,
-so that distribution is permitted only in or among countries not thus
-excluded.  In such case, this License incorporates the limitation as if
-written in the body of this License.
-
-  13. The Free Software Foundation may publish revised and/or new
-versions of the Lesser General Public License from time to time.
-Such new versions will be similar in spirit to the present version,
-but may differ in detail to address new problems or concerns.
-
-Each version is given a distinguishing version number.  If the Library
-specifies a version number of this License which applies to it and
-"any later version", you have the option of following the terms and
-conditions either of that version or of any later version published by
-the Free Software Foundation.  If the Library does not specify a
-license version number, you may choose any version ever published by
-the Free Software Foundation.
-
-  14. If you wish to incorporate parts of the Library into other free
-programs whose distribution conditions are incompatible with these,
-write to the author to ask for permission.  For software which is
-copyrighted by the Free Software Foundation, write to the Free
-Software Foundation; we sometimes make exceptions for this.  Our
-decision will be guided by the two goals of preserving the free status
-of all derivatives of our free software and of promoting the sharing
-and reuse of software generally.
-
-                NO WARRANTY
-
-  15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO
-WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW.
-EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR
-OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY
-KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE
-IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
-PURPOSE.  THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE
-LIBRARY IS WITH YOU.  SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME
-THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
-
-  16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN
-WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY
-AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU
-FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR
-CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE
-LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING
-RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A
-FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF
-SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
-DAMAGES.
-
-             END OF TERMS AND CONDITIONS
-
-           How to Apply These Terms to Your New Libraries
-
-  If you develop a new library, and you want it to be of the greatest
-possible use to the public, we recommend making it free software that
-everyone can redistribute and change.  You can do so by permitting
-redistribution under these terms (or, alternatively, under the terms of the
-ordinary General Public License).
-
-  To apply these terms, attach the following notices to the library.  It is
-safest to attach them to the start of each source file to most effectively
-convey the exclusion of warranty; and each file should have at least the
-"copyright" line and a pointer to where the full notice is found.
-
-    <one line to give the library's name and a brief idea of what it does.>
-    Copyright (C) <year>  <name of author>
-
-    This library is free software; you can redistribute it and/or
-    modify it under the terms of the GNU Lesser General Public
-    License as published by the Free Software Foundation; either
-    version 2.1 of the License, or (at your option) any later version.
-
-    This library is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-    Lesser General Public License for more details.
-
-    You should have received a copy of the GNU Lesser General Public
-    License along with this library; if not, write to the Free Software
-    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
-
-Also add information on how to contact you by electronic and paper mail.
-
-You should also get your employer (if you work as a programmer) or your
-school, if any, to sign a "copyright disclaimer" for the library, if
-necessary.  Here is a sample; alter the names:
-
-  Yoyodyne, Inc., hereby disclaims all copyright interest in the
-  library `Frob' (a library for tweaking knobs) written by James Random Hacker.
-
-  <signature of Ty Coon>, 1 April 1990
-  Ty Coon, President of Vice
-
-That's all there is to it!
-
-
-------------------
-
-Files:
-
-The version of Rhino used in GWT is licensed under a dual license,
-Netscape Public License 1.1 / GNU General Public License.
-The text of the Netscape Public License
-is provided below (http://website-archive.mozilla.org/www.mozilla.org/mpl/MPL/NPL/1.1/):
-
-AMENDMENTS
-
-The Netscape Public License Version 1.1 ("NPL") consists of the
-Mozilla Public License Version 1.1 with the following Amendments,
-including Exhibit A-Netscape Public License.  Files identified with
-"Exhibit A-Netscape Public License" are governed by the Netscape
-Public License Version 1.1.
-
-Additional Terms applicable to the Netscape Public License.
-
-    I. Effect.
-
-       These additional terms described in this Netscape Public
-       License -- Amendments shall apply to the Mozilla Communicator
-       client code and to all Covered Code under this License.
-
-   II. ''Netscape's Branded Code'' means Covered Code that Netscape
-       distributes and/or permits others to distribute under one or
-       more trademark(s) which are controlled by Netscape but which
-       are not licensed for use under this License.
-
-  III. Netscape and logo.
-
-       This License does not grant any rights to use the trademarks
-       "Netscape'', the "Netscape N and horizon'' logo or the
-       "Netscape lighthouse" logo, "Netcenter", "Gecko", "Java" or
-       "JavaScript", "Smart Browsing" even if such marks are included
-       in the Original Code or Modifications.
-
-   IV. Inability to Comply Due to Contractual Obligation.
-
-       Prior to licensing the Original Code under this License,
-       Netscape has licensed third party code for use in Netscape's
-       Branded Code. To the extent that Netscape is limited
-       contractually from making such third party code available under
-       this License, Netscape may choose to reintegrate such code into
-       Covered Code without being required to distribute such code in
-       Source Code form, even if such code would otherwise be
-       considered ''Modifications'' under this License.
-
-    V. Use of Modifications and Covered Code by Initial Developer.
-
-        V.1. In General.
-
-             The obligations of Section 3 apply to Netscape, except to
-             the extent specified in this Amendment, Section V.2 and
-             V.3.
-
-        V.2. Other Products.
-
-             Netscape may include Covered Code in products other than
-             the Netscape's Branded Code which are released by
-             Netscape during the two (2) years following the release
-             date of the Original Code, without such additional
-             products becoming subject to the terms of this License,
-             and may license such additional products on different
-             terms from those contained in this License.
-
-        V.3. Alternative Licensing.
-
-             Netscape may license the Source Code of Netscape's
-             Branded Code, including Modifications incorporated
-             therein, without such Netscape Branded Code becoming
-             subject to the terms of this License, and may license
-             such Netscape Branded Code on different terms from those
-             contained in this License.
-
-    VI. Litigation.
-
-        Notwithstanding the limitations of Section 11 above, the
-        provisions regarding litigation in Section 11(a), (b) and (c)
-        of the License shall apply to all disputes relating to this
-        License.
-
-
-EXHIBIT A-Netscape Public License.
-
-
-    ''The contents of this file are subject to the Netscape Public
-    License Version 1.1 (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.mozilla.org/NPL/
-
-    Software distributed under the License is distributed on an "AS
-    IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
-    implied. See the License for the specific language governing
-    rights and limitations under the License.
-
-    The Original Code is Mozilla Communicator client code, released
-    March 31, 1998.
-
-    The Initial Developer of the Original Code is Netscape
-    Communications Corporation. Portions created by Netscape are
-    Copyright (C) 1998-1999 Netscape Communications Corporation. All
-    Rights Reserved.
-
-    Contributor(s): ______________________________________.
-
-
-    Alternatively, the contents of this file may be used under the
-    terms of the _____ license (the �[___] License�), in which case
-    the provisions of [______] License are applicable instead of those
-    above.  If you wish to allow use of your version of this file only
-    under the terms of the [____] License and not to allow others to
-    use your version of this file under the NPL, indicate your
-    decision by deleting the provisions above and replace them with
-    the notice and other provisions required by the [___] License.  If
-    you do not delete the provisions above, a recipient may use your
-    version of this file under either the NPL or the [___] License."
-
-
-----------------------
-
-MOZILLA PUBLIC LICENSE
-Version 1.1
-
-1. Definitions.
-
-    1.0.1. "Commercial Use" means distribution or otherwise making the
-    Covered Code available to a third party.
-
-    1.1. ''Contributor'' means each entity that creates or contributes
-    to the creation of Modifications.
-
-    1.2. ''Contributor Version'' means the combination of the Original
-    Code, prior Modifications used by a Contributor, and the
-    Modifications made by that particular Contributor.
-
-    1.3. ''Covered Code'' means the Original Code or Modifications or
-    the combination of the Original Code and Modifications, in each
-    case including portions thereof.
-
-    1.4. ''Electronic Distribution Mechanism'' means a mechanism
-    generally accepted in the software development community for the
-    electronic transfer of data.
-
-    1.5. ''Executable'' means Covered Code in any form other than Source Code.
-
-    1.6. ''Initial Developer'' means the individual or entity
-    identified as the Initial Developer in the Source Code notice
-    required by Exhibit A.
-
-    1.7. ''Larger Work'' means a work which combines Covered Code or
-    portions thereof with code not governed by the terms of this
-    License.
-
-    1.8. ''License'' means this document.
-
-    1.8.1. "Licensable" means having the right to grant, to the
-    maximum extent possible, whether at the time of the initial grant
-    or subsequently acquired, any and all of the rights conveyed
-    herein.
-
-    1.9. ''Modifications'' means any addition to or deletion from the
-    substance or structure of either the Original Code or any previous
-    Modifications. When Covered Code is released as a series of files,
-    a Modification is:
-
-        A. Any addition to or deletion from the contents of a file
-        containing Original Code or previous Modifications.
-
-        B. Any new file that contains any part of the Original Code or
-        previous Modifications.
-
-    1.10. ''Original Code'' means Source Code of computer software
-    code which is described in the Source Code notice required by
-    Exhibit A as Original Code, and which, at the time of its release
-    under this License is not already Covered Code governed by this
-    License.
-
-    1.10.1. "Patent Claims" means any patent claim(s), now owned or
-    hereafter acquired, including without limitation, method, process,
-    and apparatus claims, in any patent Licensable by grantor.
-
-    1.11. ''Source Code'' means the preferred form of the Covered Code
-    for making modifications to it, including all modules it contains,
-    plus any associated interface definition files, scripts used to
-    control compilation and installation of an Executable, or source
-    code differential comparisons against either the Original Code or
-    another well known, available Covered Code of the Contributor's
-    choice. The Source Code can be in a compressed or archival form,
-    provided the appropriate decompression or de-archiving software is
-    widely available for no charge.
-
-    1.12. "You'' (or "Your") means an individual or a legal entity
-    exercising rights under, and complying with all of the terms of,
-    this License or a future version of this License issued under
-    Section 6.1. For legal entities, "You'' includes any entity which
-    controls, is controlled by, or is under common control with
-    You. For purposes of this definition, "control'' means (a) the
-    power, direct or indirect, to cause the direction or management of
-    such entity, whether by contract or otherwise, or (b) ownership of
-    more than fifty percent (50%) of the outstanding shares or
-    beneficial ownership of such entity.
-
-2. Source Code License.
-
-    2.1. The Initial Developer Grant.
-
-    The Initial Developer hereby grants You a world-wide,
-    royalty-free, non-exclusive license, subject to third party
-    intellectual property claims:
-
-        (a) under intellectual property rights (other than patent or
-        trademark) Licensable by Initial Developer to use, reproduce,
-        modify, display, perform, sublicense and distribute the
-        Original Code (or portions thereof) with or without
-        Modifications, and/or as part of a Larger Work; and
-
-        (b) under Patents Claims infringed by the making, using or
-        selling of Original Code, to make, have made, use, practice,
-        sell, and offer for sale, and/or otherwise dispose of the
-        Original Code (or portions thereof).
-
-        (c) the licenses granted in this Section 2.1(a) and (b) are
-        effective on the date Initial Developer first distributes
-        Original Code under the terms of this License.
-
-        (d) Notwithstanding Section 2.1(b) above, no patent license is
-        granted: 1) for code that You delete from the Original Code;
-        2) separate from the Original Code; or 3) for infringements
-        caused by: i) the modification of the Original Code or ii) the
-        combination of the Original Code with other software or
-        devices.
-
-    2.2. Contributor Grant.
-
-    Subject to third party intellectual property claims, each
-    Contributor hereby grants You a world-wide, royalty-free,
-    non-exclusive license
-
-        (a) under intellectual property rights (other than patent or
-        trademark) Licensable by Contributor, to use, reproduce,
-        modify, display, perform, sublicense and distribute the
-        Modifications created by such Contributor (or portions
-        thereof) either on an unmodified basis, with other
-        Modifications, as Covered Code and/or as part of a Larger
-        Work; and
-
-        (b) under Patent Claims infringed by the making, using, or
-        selling of Modifications made by that Contributor either alone
-        and/or in combination with its Contributor Version (or
-        portions of such combination), to make, use, sell, offer for
-        sale, have made, and/or otherwise dispose of: 1) Modifications
-        made by that Contributor (or portions thereof); and 2) the
-        combination of Modifications made by that Contributor with its
-        Contributor Version (or portions of such combination).
-
-        (c) the licenses granted in Sections 2.2(a) and 2.2(b) are
-        effective on the date Contributor first makes Commercial Use
-        of the Covered Code.
-
-        (d) Notwithstanding Section 2.2(b) above, no patent license is
-        granted: 1) for any code that Contributor has deleted from the
-        Contributor Version; 2) separate from the Contributor Version;
-        3) for infringements caused by: i) third party modifications
-        of Contributor Version or ii) the combination of Modifications
-        made by that Contributor with other software (except as part
-        of the Contributor Version) or other devices; or 4) under
-        Patent Claims infringed by Covered Code in the absence of
-        Modifications made by that Contributor.
-
-
-3. Distribution Obligations.
-
-    3.1. Application of License.
-
-    The Modifications which You create or to which You contribute are
-    governed by the terms of this License, including without
-    limitation Section 2.2. The Source Code version of Covered Code
-    may be distributed only under the terms of this License or a
-    future version of this License released under Section 6.1, and You
-    must include a copy of this License with every copy of the Source
-    Code You distribute. You may not offer or impose any terms on any
-    Source Code version that alters or restricts the applicable
-    version of this License or the recipients' rights
-    hereunder. However, You may include an additional document
-    offering the additional rights described in Section 3.5.
-
-    3.2. Availability of Source Code.
-
-    Any Modification which You create or to which You contribute must
-    be made available in Source Code form under the terms of this
-    License either on the same media as an Executable version or via
-    an accepted Electronic Distribution Mechanism to anyone to whom
-    you made an Executable version available; and if made available
-    via Electronic Distribution Mechanism, must remain available for
-    at least twelve (12) months after the date it initially became
-    available, or at least six (6) months after a subsequent version
-    of that particular Modification has been made available to such
-    recipients. You are responsible for ensuring that the Source Code
-    version remains available even if the Electronic Distribution
-    Mechanism is maintained by a third party.
-
-    3.3. Description of Modifications.
-
-    You must cause all Covered Code to which You contribute to contain
-    a file documenting the changes You made to create that Covered
-    Code and the date of any change. You must include a prominent
-    statement that the Modification is derived, directly or
-    indirectly, from Original Code provided by the Initial Developer
-    and including the name of the Initial Developer in (a) the Source
-    Code, and (b) in any notice in an Executable version or related
-    documentation in which You describe the origin or ownership of the
-    Covered Code.
-
-    3.4. Intellectual Property Matters
-
-        (a) Third Party Claims.
-
-        If Contributor has knowledge that a license under a third
-        party's intellectual property rights is required to exercise
-        the rights granted by such Contributor under Sections 2.1 or
-        2.2, Contributor must include a text file with the Source Code
-        distribution titled "LEGAL'' which describes the claim and the
-        party making the claim in sufficient detail that a recipient
-        will know whom to contact. If Contributor obtains such
-        knowledge after the Modification is made available as
-        described in Section 3.2, Contributor shall promptly modify
-        the LEGAL file in all copies Contributor makes available
-        thereafter and shall take other steps (such as notifying
-        appropriate mailing lists or newsgroups) reasonably calculated
-        to inform those who received the Covered Code that new
-        knowledge has been obtained.
-
-        (b) Contributor APIs.
-
-        If Contributor's Modifications include an application
-        programming interface and Contributor has knowledge of patent
-        licenses which are reasonably necessary to implement that API,
-        Contributor must also include this information in the LEGAL
-        file.
-
-        (c)    Representations.
-
-        Contributor represents that, except as disclosed pursuant to
-        Section 3.4(a) above, Contributor believes that Contributor's
-        Modifications are Contributor's original creation(s) and/or
-        Contributor has sufficient rights to grant the rights conveyed
-        by this License.
-
-
-    3.5. Required Notices.
-
-    You must duplicate the notice in Exhibit A in each file of the
-    Source Code.  If it is not possible to put such notice in a
-    particular Source Code file due to its structure, then You must
-    include such notice in a location (such as a relevant directory)
-    where a user would be likely to look for such a notice.  If You
-    created one or more Modification(s) You may add your name as a
-    Contributor to the notice described in Exhibit A.  You must also
-    duplicate this License in any documentation for the Source Code
-    where You describe recipients' rights or ownership rights relating
-    to Covered Code.  You may choose to offer, and to charge a fee
-    for, warranty, support, indemnity or liability obligations to one
-    or more recipients of Covered Code. However, You may do so only on
-    Your own behalf, and not on behalf of the Initial Developer or any
-    Contributor. You must make it absolutely clear than any such
-    warranty, support, indemnity or liability obligation is offered by
-    You alone, and You hereby agree to indemnify the Initial Developer
-    and every Contributor for any liability incurred by the Initial
-    Developer or such Contributor as a result of warranty, support,
-    indemnity or liability terms You offer.
-
-    3.6. Distribution of Executable Versions.
-
-    You may distribute Covered Code in Executable form only if the
-    requirements of Section 3.1-3.5 have been met for that Covered
-    Code, and if You include a notice stating that the Source Code
-    version of the Covered Code is available under the terms of this
-    License, including a description of how and where You have
-    fulfilled the obligations of Section 3.2. The notice must be
-    conspicuously included in any notice in an Executable version,
-    related documentation or collateral in which You describe
-    recipients' rights relating to the Covered Code. You may
-    distribute the Executable version of Covered Code or ownership
-    rights under a license of Your choice, which may contain terms
-    different from this License, provided that You are in compliance
-    with the terms of this License and that the license for the
-    Executable version does not attempt to limit or alter the
-    recipient's rights in the Source Code version from the rights set
-    forth in this License. If You distribute the Executable version
-    under a different license You must make it absolutely clear that
-    any terms which differ from this License are offered by You alone,
-    not by the Initial Developer or any Contributor. You hereby agree
-    to indemnify the Initial Developer and every Contributor for any
-    liability incurred by the Initial Developer or such Contributor as
-    a result of any such terms You offer.
-
-    3.7. Larger Works.
-
-    You may create a Larger Work by combining Covered Code with other
-    code not governed by the terms of this License and distribute the
-    Larger Work as a single product. In such a case, You must make
-    sure the requirements of this License are fulfilled for the
-    Covered Code.
-
-4. Inability to Comply Due to Statute or Regulation.
-
-    If it is impossible for You to comply with any of the terms of
-    this License with respect to some or all of the Covered Code due
-    to statute, judicial order, or regulation then You must: (a)
-    comply with the terms of this License to the maximum extent
-    possible; and (b) describe the limitations and the code they
-    affect. Such description must be included in the LEGAL file
-    described in Section 3.4 and must be included with all
-    distributions of the Source Code. Except to the extent prohibited
-    by statute or regulation, such description must be sufficiently
-    detailed for a recipient of ordinary skill to be able to
-    understand it.
-
-5. Application of this License.
-
-    This License applies to code to which the Initial Developer has
-    attached the notice in Exhibit A and to related Covered Code.
-
-6. Versions of the License.
-
-    6.1. New Versions.
-
-    Netscape Communications Corporation (''Netscape'') may publish
-    revised and/or new versions of the License from time to time. Each
-    version will be given a distinguishing version number.
-
-    6.2. Effect of New Versions.
-
-    Once Covered Code has been published under a particular version of
-    the License, You may always continue to use it under the terms of
-    that version. You may also choose to use such Covered Code under
-    the terms of any subsequent version of the License published by
-    Netscape. No one other than Netscape has the right to modify the
-    terms applicable to Covered Code created under this License.
-
-    6.3. Derivative Works.
-
-    If You create or use a modified version of this License (which you
-    may only do in order to apply it to code which is not already
-    Covered Code governed by this License), You must (a) rename Your
-    license so that the phrases ''Mozilla'', ''MOZILLAPL'', ''MOZPL'',
-    ''Netscape'', "MPL", ''NPL'' or any confusingly similar phrase do
-    not appear in your license (except to note that your license
-    differs from this License) and (b) otherwise make it clear that
-    Your version of the license contains terms which differ from the
-    Mozilla Public License and Netscape Public License. (Filling in
-    the name of the Initial Developer, Original Code or Contributor in
-    the notice described in Exhibit A shall not of themselves be
-    deemed to be modifications of this License.)
-
-7. DISCLAIMER OF WARRANTY.
-
-    COVERED CODE IS PROVIDED UNDER THIS LICENSE ON AN "AS IS'' BASIS,
-    WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED,
-    INCLUDING, WITHOUT LIMITATION, WARRANTIES THAT THE COVERED CODE IS
-    FREE OF DEFECTS, MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE OR
-    NON-INFRINGING. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE
-    OF THE COVERED CODE IS WITH YOU. SHOULD ANY COVERED CODE PROVE
-    DEFECTIVE IN ANY RESPECT, YOU (NOT THE INITIAL DEVELOPER OR ANY
-    OTHER CONTRIBUTOR) ASSUME THE COST OF ANY NECESSARY SERVICING,
-    REPAIR OR CORRECTION. THIS DISCLAIMER OF WARRANTY CONSTITUTES AN
-    ESSENTIAL PART OF THIS LICENSE. NO USE OF ANY COVERED CODE IS
-    AUTHORIZED HEREUNDER EXCEPT UNDER THIS DISCLAIMER.
-
-8. TERMINATION.
-
-    8.1.  This License and the rights granted hereunder will terminate
-    automatically if You fail to comply with terms herein and fail to
-    cure such breach within 30 days of becoming aware of the
-    breach. All sublicenses to the Covered Code which are properly
-    granted shall survive any termination of this License. Provisions
-    which, by their nature, must remain in effect beyond the
-    termination of this License shall survive.
-
-    8.2.  If You initiate litigation by asserting a patent
-    infringement claim (excluding declatory judgment actions) against
-    Initial Developer or a Contributor (the Initial Developer or
-    Contributor against whom You file such action is referred to as
-    "Participant") alleging that:
-
-    (a) such Participant's Contributor Version directly or indirectly
-    infringes any patent, then any and all rights granted by such
-    Participant to You under Sections 2.1 and/or 2.2 of this License
-    shall, upon 60 days notice from Participant terminate
-    prospectively, unless if within 60 days after receipt of notice
-    You either: (i) agree in writing to pay Participant a mutually
-    agreeable reasonable royalty for Your past and future use of
-    Modifications made by such Participant, or (ii) withdraw Your
-    litigation claim with respect to the Contributor Version against
-    such Participant.  If within 60 days of notice, a reasonable
-    royalty and payment arrangement are not mutually agreed upon in
-    writing by the parties or the litigation claim is not withdrawn,
-    the rights granted by Participant to You under Sections 2.1 and/or
-    2.2 automatically terminate at the expiration of the 60 day notice
-    period specified above.
-
-    (b) any software, hardware, or device, other than such
-    Participant's Contributor Version, directly or indirectly
-    infringes any patent, then any rights granted to You by such
-    Participant under Sections 2.1(b) and 2.2(b) are revoked effective
-    as of the date You first made, used, sold, distributed, or had
-    made, Modifications made by that Participant.
-
-    8.3.  If You assert a patent infringement claim against
-    Participant alleging that such Participant's Contributor Version
-    directly or indirectly infringes any patent where such claim is
-    resolved (such as by license or settlement) prior to the
-    initiation of patent infringement litigation, then the reasonable
-    value of the licenses granted by such Participant under Sections
-    2.1 or 2.2 shall be taken into account in determining the amount
-    or value of any payment or license.
-
-    8.4.  In the event of termination under Sections 8.1 or 8.2 above,
-    all end user license agreements (excluding distributors and
-    resellers) which have been validly granted by You or any
-    distributor hereunder prior to termination shall survive
-    termination.
-
-9. LIMITATION OF LIABILITY.
-
-    UNDER NO CIRCUMSTANCES AND UNDER NO LEGAL THEORY, WHETHER TORT
-    (INCLUDING NEGLIGENCE), CONTRACT, OR OTHERWISE, SHALL YOU, THE
-    INITIAL DEVELOPER, ANY OTHER CONTRIBUTOR, OR ANY DISTRIBUTOR OF
-    COVERED CODE, OR ANY SUPPLIER OF ANY OF SUCH PARTIES, BE LIABLE TO
-    ANY PERSON FOR ANY INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL
-    DAMAGES OF ANY CHARACTER INCLUDING, WITHOUT LIMITATION, DAMAGES
-    FOR LOSS OF GOODWILL, WORK STOPPAGE, COMPUTER FAILURE OR
-    MALFUNCTION, OR ANY AND ALL OTHER COMMERCIAL DAMAGES OR LOSSES,
-    EVEN IF SUCH PARTY SHALL HAVE BEEN INFORMED OF THE POSSIBILITY OF
-    SUCH DAMAGES. THIS LIMITATION OF LIABILITY SHALL NOT APPLY TO
-    LIABILITY FOR DEATH OR PERSONAL INJURY RESULTING FROM SUCH PARTY'S
-    NEGLIGENCE TO THE EXTENT APPLICABLE LAW PROHIBITS SUCH
-    LIMITATION. SOME JURISDICTIONS DO NOT ALLOW THE EXCLUSION OR
-    LIMITATION OF INCIDENTAL OR CONSEQUENTIAL DAMAGES, SO THIS
-    EXCLUSION AND LIMITATION MAY NOT APPLY TO YOU.
-
-10. U.S. GOVERNMENT END USERS.
-
-    The Covered Code is a ''commercial item,'' as that term is defined
-    in 48 C.F.R. 2.101 (Oct. 1995), consisting of ''commercial
-    computer software'' and ''commercial computer software
-    documentation,'' as such terms are used in 48 C.F.R. 12.212
-    (Sept. 1995). Consistent with 48 C.F.R. 12.212 and 48
-    C.F.R. 227.7202-1 through 227.7202-4 (June 1995), all
-    U.S. Government End Users acquire Covered Code with only those
-    rights set forth herein.
-
-11. MISCELLANEOUS.
-
-    This License represents the complete agreement concerning subject
-    matter hereof. If any provision of this License is held to be
-    unenforceable, such provision shall be reformed only to the extent
-    necessary to make it enforceable. This License shall be governed
-    by California law provisions (except to the extent applicable law,
-    if any, provides otherwise), excluding its conflict-of-law
-    provisions. With respect to disputes in which at least one party
-    is a citizen of, or an entity chartered or registered to do
-    business in the United States of America, any litigation relating
-    to this License shall be subject to the jurisdiction of the
-    Federal Courts of the Northern District of California, with venue
-    lying in Santa Clara County, California, with the losing party
-    responsible for costs, including without limitation, court costs
-    and reasonable attorneys' fees and expenses. The application of
-    the United Nations Convention on Contracts for the International
-    Sale of Goods is expressly excluded. Any law or regulation which
-    provides that the language of a contract shall be construed
-    against the drafter shall not apply to this License.
-
-12. RESPONSIBILITY FOR CLAIMS.
-
-    As between Initial Developer and the Contributors, each party is
-    responsible for claims and damages arising, directly or
-    indirectly, out of its utilization of rights under this License
-    and You agree to work with Initial Developer and Contributors to
-    distribute such responsibility on an equitable basis. Nothing
-    herein is intended or shall be deemed to constitute any admission
-    of liability.
-
-13. MULTIPLE-LICENSED CODE.
-
-    Initial Developer may designate portions of the Covered Code as
-    �Multiple-Licensed�.  �Multiple-Licensed� means that the Initial
-    Developer permits you to utilize portions of the Covered Code
-    under Your choice of the NPL or the alternative licenses, if any,
-    specified by the Initial Developer in the file described in
-    Exhibit A.
-
-
-EXHIBIT A -Mozilla Public License.
-
-    ``The contents of this file are subject to the Mozilla Public
-    License Version 1.1 (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.mozilla.org/MPL/
-
-    Software distributed under the License is distributed on an "AS
-    IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
-    implied. See the License for the specific language governing
-    rights and limitations under the License.
-
-    The Original Code is ______________________________________.
-
-    The Initial Developer of the Original Code is
-     ________________________. Portions created by
-     ______________________ are Copyright (C) ______
-     _______________________. All Rights Reserved.
-
-    Contributor(s): ______________________________________.
-
-    Alternatively, the contents of this file may be used under the
-    terms of the _____ license (the �[___] License�), in which case
-    the provisions of [______] License are applicable instead of those
-    above.  If you wish to allow use of your version of this file only
-    under the terms of the [____] License and not to allow others to
-    use your version of this file under the MPL, indicate your
-    decision by deleting the provisions above and replace them with
-    the notice and other provisions required by the [___] License.  If
-    you do not delete the provisions above, a recipient may use your
-    version of this file under either the MPL or the [___] License."
-
-    [NOTE: The text of this Exhibit A may differ slightly from the
-    text of the notices in the Source Code files of the Original
-    Code. You should use the text of this Exhibit A rather than the
-    text found in the Original Code Source Code for Your
-    Modifications.]
-============================================================================
-
-	  GNU GENERAL PUBLIC LICENSE
-	     Version 2, June 1991
-
-   Copyright (C) 1989, 1991 Free Software Foundation, Inc.,
-   51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
-   Everyone is permitted to copy and distribute verbatim copies
-   of this license document, but changing it is not allowed.
-
-	    Preamble
-
-    The licenses for most software are designed to take away your
-  freedom to share and change it.  By contrast, the GNU General Public
-  License is intended to guarantee your freedom to share and change free
-  software--to make sure the software is free for all its users.  This
-  General Public License applies to most of the Free Software
-  Foundation's software and to any other program whose authors commit to
-  using it.  (Some other Free Software Foundation software is covered by
-  the GNU Lesser General Public License instead.)  You can apply it to
-  your programs, too.
-
-    When we speak of free software, we are referring to freedom, not
-  price.  Our General Public Licenses are designed to make sure that you
-  have the freedom to distribute copies of free software (and charge for
-  this service if you wish), that you receive source code or can get it
-  if you want it, that you can change the software or use pieces of it
-  in new free programs; and that you know you can do these things.
-
-    To protect your rights, we need to make restrictions that forbid
-  anyone to deny you these rights or to ask you to surrender the rights.
-  These restrictions translate to certain responsibilities for you if you
-  distribute copies of the software, or if you modify it.
-
-    For example, if you distribute copies of such a program, whether
-  gratis or for a fee, you must give the recipients all the rights that
-  you have.  You must make sure that they, too, receive or can get the
-  source code.  And you must show them these terms so they know their
-  rights.
-
-    We protect your rights with two steps: (1) copyright the software, and
-  (2) offer you this license which gives you legal permission to copy,
-  distribute and/or modify the software.
-
-    Also, for each author's protection and ours, we want to make certain
-  that everyone understands that there is no warranty for this free
-  software.  If the software is modified by someone else and passed on, we
-  want its recipients to know that what they have is not the original, so
-  that any problems introduced by others will not reflect on the original
-  authors' reputations.
-
-    Finally, any free program is threatened constantly by software
-  patents.  We wish to avoid the danger that redistributors of a free
-  program will individually obtain patent licenses, in effect making the
-  program proprietary.  To prevent this, we have made it clear that any
-  patent must be licensed for everyone's free use or not licensed at all.
-
-    The precise terms and conditions for copying, distribution and
-  modification follow.
-
-	  GNU GENERAL PUBLIC LICENSE
-     TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
-
-    0. This License applies to any program or other work which contains
-  a notice placed by the copyright holder saying it may be distributed
-  under the terms of this General Public License.  The "Program", below,
-  refers to any such program or work, and a "work based on the Program"
-  means either the Program or any derivative work under copyright law:
-  that is to say, a work containing the Program or a portion of it,
-  either verbatim or with modifications and/or translated into another
-  language.  (Hereinafter, translation is included without limitation in
-  the term "modification".)  Each licensee is addressed as "you".
-
-  Activities other than copying, distribution and modification are not
-  covered by this License; they are outside its scope.  The act of
-  running the Program is not restricted, and the output from the Program
-  is covered only if its contents constitute a work based on the
-  Program (independent of having been made by running the Program).
-  Whether that is true depends on what the Program does.
-
-    1. You may copy and distribute verbatim copies of the Program's
-  source code as you receive it, in any medium, provided that you
-  conspicuously and appropriately publish on each copy an appropriate
-  copyright notice and disclaimer of warranty; keep intact all the
-  notices that refer to this License and to the absence of any warranty;
-  and give any other recipients of the Program a copy of this License
-  along with the Program.
-
-  You may charge a fee for the physical act of transferring a copy, and
-  you may at your option offer warranty protection in exchange for a fee.
-
-    2. You may modify your copy or copies of the Program or any portion
-  of it, thus forming a work based on the Program, and copy and
-  distribute such modifications or work under the terms of Section 1
-  above, provided that you also meet all of these conditions:
-
-      a) You must cause the modified files to carry prominent notices
-      stating that you changed the files and the date of any change.
-
-      b) You must cause any work that you distribute or publish, that in
-      whole or in part contains or is derived from the Program or any
-      part thereof, to be licensed as a whole at no charge to all third
-      parties under the terms of this License.
-
-      c) If the modified program normally reads commands interactively
-      when run, you must cause it, when started running for such
-      interactive use in the most ordinary way, to print or display an
-      announcement including an appropriate copyright notice and a
-      notice that there is no warranty (or else, saying that you provide
-      a warranty) and that users may redistribute the program under
-      these conditions, and telling the user how to view a copy of this
-      License.  (Exception: if the Program itself is interactive but
-      does not normally print such an announcement, your work based on
-      the Program is not required to print an announcement.)
-
-  These requirements apply to the modified work as a whole.  If
-  identifiable sections of that work are not derived from the Program,
-  and can be reasonably considered independent and separate works in
-  themselves, then this License, and its terms, do not apply to those
-  sections when you distribute them as separate works.  But when you
-  distribute the same sections as part of a whole which is a work based
-  on the Program, the distribution of the whole must be on the terms of
-  this License, whose permissions for other licensees extend to the
-  entire whole, and thus to each and every part regardless of who wrote it.
-
-  Thus, it is not the intent of this section to claim rights or contest
-  your rights to work written entirely by you; rather, the intent is to
-  exercise the right to control the distribution of derivative or
-  collective works based on the Program.
-
-  In addition, mere aggregation of another work not based on the Program
-  with the Program (or with a work based on the Program) on a volume of
-  a storage or distribution medium does not bring the other work under
-  the scope of this License.
-
-    3. You may copy and distribute the Program (or a work based on it,
-  under Section 2) in object code or executable form under the terms of
-  Sections 1 and 2 above provided that you also do one of the following:
-
-      a) Accompany it with the complete corresponding machine-readable
-      source code, which must be distributed under the terms of Sections
-      1 and 2 above on a medium customarily used for software interchange; or,
-
-      b) Accompany it with a written offer, valid for at least three
-      years, to give any third party, for a charge no more than your
-      cost of physically performing source distribution, a complete
-      machine-readable copy of the corresponding source code, to be
-      distributed under the terms of Sections 1 and 2 above on a medium
-      customarily used for software interchange; or,
-
-      c) Accompany it with the information you received as to the offer
-      to distribute corresponding source code.  (This alternative is
-      allowed only for noncommercial distribution and only if you
-      received the program in object code or executable form with such
-      an offer, in accord with Subsection b above.)
-
-  The source code for a work means the preferred form of the work for
-  making modifications to it.  For an executable work, complete source
-  code means all the source code for all modules it contains, plus any
-  associated interface definition files, plus the scripts used to
-  control compilation and installation of the executable.  However, as a
-  special exception, the source code distributed need not include
-  anything that is normally distributed (in either source or binary
-  form) with the major components (compiler, kernel, and so on) of the
-  operating system on which the executable runs, unless that component
-  itself accompanies the executable.
-
-  If distribution of executable or object code is made by offering
-  access to copy from a designated place, then offering equivalent
-  access to copy the source code from the same place counts as
-  distribution of the source code, even though third parties are not
-  compelled to copy the source along with the object code.
-
-    4. You may not copy, modify, sublicense, or distribute the Program
-  except as expressly provided under this License.  Any attempt
-  otherwise to copy, modify, sublicense or distribute the Program is
-  void, and will automatically terminate your rights under this License.
-  However, parties who have received copies, or rights, from you under
-  this License will not have their licenses terminated so long as such
-  parties remain in full compliance.
-
-    5. You are not required to accept this License, since you have not
-  signed it.  However, nothing else grants you permission to modify or
-  distribute the Program or its derivative works.  These actions are
-  prohibited by law if you do not accept this License.  Therefore, by
-  modifying or distributing the Program (or any work based on the
-  Program), you indicate your acceptance of this License to do so, and
-  all its terms and conditions for copying, distributing or modifying
-  the Program or works based on it.
-
-    6. Each time you redistribute the Program (or any work based on the
-  Program), the recipient automatically receives a license from the
-  original licensor to copy, distribute or modify the Program subject to
-  these terms and conditions.  You may not impose any further
-  restrictions on the recipients' exercise of the rights granted herein.
-  You are not responsible for enforcing compliance by third parties to
-  this License.
-
-    7. If, as a consequence of a court judgment or allegation of patent
-  infringement or for any other reason (not limited to patent issues),
-  conditions are imposed on you (whether by court order, agreement or
-  otherwise) that contradict the conditions of this License, they do not
-  excuse you from the conditions of this License.  If you cannot
-  distribute so as to satisfy simultaneously your obligations under this
-  License and any other pertinent obligations, then as a consequence you
-  may not distribute the Program at all.  For example, if a patent
-  license would not permit royalty-free redistribution of the Program by
-  all those who receive copies directly or indirectly through you, then
-  the only way you could satisfy both it and this License would be to
-  refrain entirely from distribution of the Program.
-
-  If any portion of this section is held invalid or unenforceable under
-  any particular circumstance, the balance of the section is intended to
-  apply and the section as a whole is intended to apply in other
-  circumstances.
-
-  It is not the purpose of this section to induce you to infringe any
-  patents or other property right claims or to contest validity of any
-  such claims; this section has the sole purpose of protecting the
-  integrity of the free software distribution system, which is
-  implemented by public license practices.  Many people have made
-  generous contributions to the wide range of software distributed
-  through that system in reliance on consistent application of that
-  system; it is up to the author/donor to decide if he or she is willing
-  to distribute software through any other system and a licensee cannot
-  impose that choice.
-
-  This section is intended to make thoroughly clear what is believed to
-  be a consequence of the rest of this License.
-
-    8. If the distribution and/or use of the Program is restricted in
-  certain countries either by patents or by copyrighted interfaces, the
-  original copyright holder who places the Program under this License
-  may add an explicit geographical distribution limitation excluding
-  those countries, so that distribution is permitted only in or among
-  countries not thus excluded.  In such case, this License incorporates
-  the limitation as if written in the body of this License.
-
-    9. The Free Software Foundation may publish revised and/or new versions
-  of the General Public License from time to time.  Such new versions will
-  be similar in spirit to the present version, but may differ in detail to
-  address new problems or concerns.
-
-  Each version is given a distinguishing version number.  If the Program
-  specifies a version number of this License which applies to it and "any
-  later version", you have the option of following the terms and conditions
-  either of that version or of any later version published by the Free
-  Software Foundation.  If the Program does not specify a version number of
-  this License, you may choose any version ever published by the Free Software
-  Foundation.
-
-    10. If you wish to incorporate parts of the Program into other free
-  programs whose distribution conditions are different, write to the author
-  to ask for permission.  For software which is copyrighted by the Free
-  Software Foundation, write to the Free Software Foundation; we sometimes
-  make exceptions for this.  Our decision will be guided by the two goals
-  of preserving the free status of all derivatives of our free software and
-  of promoting the sharing and reuse of software generally.
-
-	    NO WARRANTY
-
-    11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
-  FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW.  EXCEPT WHEN
-  OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
-  PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
-  OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
-  MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.  THE ENTIRE RISK AS
-  TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU.  SHOULD THE
-  PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
-  REPAIR OR CORRECTION.
-
-    12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
-  WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
-  REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
-  INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
-  OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
-  TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
-  YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
-  PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
-  POSSIBILITY OF SUCH DAMAGES.
-
-	   END OF TERMS AND CONDITIONS
-
-	How to Apply These Terms to Your New Programs
-
-    If you develop a new program, and you want it to be of the greatest
-  possible use to the public, the best way to achieve this is to make it
-  free software which everyone can redistribute and change under these terms.
-
-    To do so, attach the following notices to the program.  It is safest
-  to attach them to the start of each source file to most effectively
-  convey the exclusion of warranty; and each file should have at least
-  the "copyright" line and a pointer to where the full notice is found.
-
-      <one line to give the program's name and a brief idea of what it does.>
-      Copyright (C) <year>  <name of author>
-
-      This program is free software; you can redistribute it and/or modify
-      it under the terms of the GNU General Public License as published by
-      the Free Software Foundation; either version 2 of the License, or
-      (at your option) any later version.
-
-      This program is distributed in the hope that it will be useful,
-      but WITHOUT ANY WARRANTY; without even the implied warranty of
-      MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-      GNU General Public License for more details.
-
-      You should have received a copy of the GNU General Public License along
-      with this program; if not, write to the Free Software Foundation, Inc.,
-      51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
-
-  Also add information on how to contact you by electronic and paper mail.
-
-  If the program is interactive, make it output a short notice like this
-  when it starts in an interactive mode:
-
-      Gnomovision version 69, Copyright (C) year name of author
-      Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
-      This is free software, and you are welcome to redistribute it
-      under certain conditions; type `show c' for details.
-
-  The hypothetical commands `show w' and `show c' should show the appropriate
-  parts of the General Public License.  Of course, the commands you use may
-  be called something other than `show w' and `show c'; they could even be
-  mouse-clicks or menu items--whatever suits your program.
-
-  You should also get your employer (if you work as a programmer) or your
-  school, if any, to sign a "copyright disclaimer" for the program, if
-  necessary.  Here is a sample; alter the names:
-
-    Yoyodyne, Inc., hereby disclaims all copyright interest in the program
-    `Gnomovision' (which makes passes at compilers) written by James Hacker.
-
-    <signature of Ty Coon>, 1 April 1989
-    Ty Coon, President of Vice
-
-  This General Public License does not permit incorporating your program into
-  proprietary programs.  If your program is a subroutine library, you may
-  consider it more useful to permit linking proprietary applications with the
-  library.  If this is what you want to do, use the GNU Lesser General
-  Public License instead of this License.
-============================================================================
-
-------------------
-
-Files: kotlinc/lib/kotlin-compiler.jar
-
-The MIT License
-
-Copyright (c) 2003, Kohsuke Kawaguchi
-
-Permission is hereby granted, free of charge, to any person obtaining a copy
-of this software and associated documentation files (the "Software"), to deal
-in the Software without restriction, including without limitation the rights
-to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-copies of the Software, and to permit persons to whom the Software is
-furnished to do so, subject to the following conditions:
-
-The above copyright notice and this permission notice shall be included in
-all copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
-THE SOFTWARE.
-
-------------------
-
-Files: 
-
-
- ASM: a very small and fast Java bytecode manipulation framework
- Copyright (c) 2000-2005 INRIA, France Telecom
- All rights reserved.
-
- Redistribution and use in source and binary forms, with or without
- modification, are permitted provided that the following conditions
- are met:
- 1. Redistributions of source code must retain the above copyright
-    notice, this list of conditions and the following disclaimer.
- 2. Redistributions in binary form must reproduce the above copyright
-    notice, this list of conditions and the following disclaimer in the
-    documentation and/or other materials provided with the distribution.
- 3. Neither the name of the copyright holders nor the names of its
-    contributors may be used to endorse or promote products derived from
-    this software without specific prior written permission.
-
- THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
- AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
- LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
- THE POSSIBILITY OF SUCH DAMAGE.
-
-------------------
-
-Files:
-
-Boost Software License - Version 1.0 - August 17th, 2003
-
-Permission is hereby granted, free of charge, to any person or organization
-obtaining a copy of the software and accompanying documentation covered by
-this license (the "Software") to use, reproduce, display, distribute,
-execute, and transmit the Software, and to prepare derivative works of the
-Software, and to permit third-parties to whom the Software is furnished to
-do so, all subject to the following:
-
-The copyright notices in the Software and this entire statement, including
-the above license grant, this restriction and the following disclaimer,
-must be included in all copies of the Software, in whole or in part, and
-all derivative works of the Software, unless such copies or derivative
-works are solely in the form of machine-executable object code generated by
-a source language processor.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT
-SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE
-FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE,
-ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
-DEALINGS IN THE SOFTWARE.
-
-------------------
-
-Files:
-
-Eclipse Public License, Version 1.0 (EPL-1.0)
-
-THE ACCOMPANYING PROGRAM IS PROVIDED UNDER THE TERMS OF THIS ECLIPSE PUBLIC
-LICENSE ("AGREEMENT"). ANY USE, REPRODUCTION OR DISTRIBUTION OF THE PROGRAM
-CONSTITUTES RECIPIENT'S ACCEPTANCE OF THIS AGREEMENT.
-
-1. DEFINITIONS
-
-"Contribution" means:
-
-    a) in the case of the initial Contributor, the initial code and
-       documentation distributed under this Agreement, and
-
-    b) in the case of each subsequent Contributor:
-        i) changes to the Program, and
-        ii) additions to the Program;
-
-where such changes and/or additions to the Program originate from and are
-distributed by that particular Contributor. A Contribution 'originates'
-from a Contributor if it was added to the Program by such Contributor itself
-or anyone acting on such Contributor's behalf. Contributions do not include
-additions to the Program which: (i) are separate modules of software
-distributed in conjunction with the Program under their own license agreement,
-and (ii) are not derivative works of the Program.
-
-"Contributor" means any person or entity that distributes the Program.
-
-"Licensed Patents " mean patent claims licensable by a Contributor which are
-necessarily infringed by the use or sale of its Contribution alone or
-when combined with the Program.
-
-"Program" means the Contributions distributed in accordance with
-this Agreement.
-
-"Recipient" means anyone who receives the Program under this Agreement,
-including all Contributors.
-
-2. GRANT OF RIGHTS
-
-    a) Subject to the terms of this Agreement, each Contributor hereby grants
-       Recipient a non-exclusive, worldwide, royalty-free copyright license to
-       reproduce, prepare derivative works of, publicly display, publicly
-       perform, distribute and sublicense the Contribution of such
-       Contributor, if any, and such derivative works,
-       in source code and object code form.
-
-    b) Subject to the terms of this Agreement, each Contributor hereby grants
-       Recipient a non-exclusive, worldwide, royalty-free patent license under
-       Licensed Patents to make, use, sell, offer to sell, import and
-       otherwise transfer the Contribution of such Contributor, if any,
-       in source code and object code form. This patent license shall apply
-       to the combination of the Contribution and the Program if, at the time
-       the Contribution is added by the Contributor, such addition of the
-       Contribution causes such combination to be covered by the
-       Licensed Patents. The patent license shall not apply to any other
-       combinations which include the Contribution.
-       No hardware per se is licensed hereunder.
-
-    c) Recipient understands that although each Contributor grants the
-       licenses to its Contributions set forth herein, no assurances are
-       provided by any Contributor that the Program does not infringe the
-       patent or other intellectual property rights of any other entity.
-       Each Contributor disclaims any liability to Recipient for claims
-       brought by any other entity based on infringement of intellectual
-       property rights or otherwise. As a condition to exercising the
-       rights and licenses granted hereunder, each Recipient hereby assumes
-       sole responsibility to secure any other intellectual property rights
-       needed, if any. For example, if a third party patent license is
-       required to allow Recipient to distribute the Program, it is
-       Recipient's responsibility to acquire that license
-       before distributing the Program.
-
-    d) Each Contributor represents that to its knowledge it has sufficient
-       copyright rights in its Contribution, if any, to grant the copyright
-       license set forth in this Agreement.
-
-3. REQUIREMENTS
-
-A Contributor may choose to distribute the Program in object code form under
-its own license agreement, provided that:
-
-    a) it complies with the terms and conditions of this Agreement; and
-
-    b) its license agreement:
-
-        i) effectively disclaims on behalf of all Contributors all warranties
-        and conditions, express and implied, including warranties or
-        conditions of title and non-infringement, and implied warranties or
-        conditions of merchantability and fitness for a particular purpose;
-
-        ii) effectively excludes on behalf of all Contributors all liability
-        for damages, including direct, indirect, special, incidental and
-        consequential damages, such as lost profits;
-
-        iii) states that any provisions which differ from this Agreement are
-        offered by that Contributor alone and not by any other party; and
-
-        iv) states that source code for the Program is available from such
-        Contributor, and informs licensees how to obtain it in a reasonable
-        manner on or through a medium customarily used for software exchange.
-
-When the Program is made available in source code form:
-
-    a) it must be made available under this Agreement; and
-    b) a copy of this Agreement must be included with each copy of the Program.
-
-Contributors may not remove or alter any copyright notices contained
-within the Program.
-
-Each Contributor must identify itself as the originator of its Contribution,
-if any, in a manner that reasonably allows subsequent Recipients to
-identify the originator of the Contribution.
-
-4. COMMERCIAL DISTRIBUTION
-
-Commercial distributors of software may accept certain responsibilities with
-respect to end users, business partners and the like. While this license is
-intended to facilitate the commercial use of the Program, the Contributor who
-includes the Program in a commercial product offering should do so in a manner
-which does not create potential liability for other Contributors. Therefore,
-if a Contributor includes the Program in a commercial product offering,
-such Contributor ("Commercial Contributor") hereby agrees to defend and
-indemnify every other Contributor ("Indemnified Contributor") against any
-losses, damages and costs (collectively "Losses") arising from claims,
-lawsuits and other legal actions brought by a third party against the
-Indemnified Contributor to the extent caused by the acts or omissions of
-such Commercial Contributor in connection with its distribution of the Program
-in a commercial product offering. The obligations in this section do not apply
-to any claims or Losses relating to any actual or alleged intellectual
-property infringement. In order to qualify, an Indemnified Contributor must:
-a) promptly notify the Commercial Contributor in writing of such claim,
-and b) allow the Commercial Contributor to control, and cooperate with the
-Commercial Contributor in, the defense and any related settlement
-negotiations. The Indemnified Contributor may participate in any such
-claim at its own expense.
-
-For example, a Contributor might include the Program in a commercial product
-offering, Product X. That Contributor is then a Commercial Contributor.
-If that Commercial Contributor then makes performance claims, or offers
-warranties related to Product X, those performance claims and warranties
-are such Commercial Contributor's responsibility alone. Under this section,
-the Commercial Contributor would have to defend claims against the other
-Contributors related to those performance claims and warranties, and if a
-court requires any other Contributor to pay any damages as a result,
-the Commercial Contributor must pay those damages.
-
-5. NO WARRANTY
-
-EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, THE PROGRAM IS PROVIDED ON AN
-"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, EITHER EXPRESS OR
-IMPLIED INCLUDING, WITHOUT LIMITATION, ANY WARRANTIES OR CONDITIONS OF TITLE,
-NON-INFRINGEMENT, MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE.
-Each Recipient is solely responsible for determining the appropriateness of
-using and distributing the Program and assumes all risks associated with its
-exercise of rights under this Agreement , including but not limited to the
-risks and costs of program errors, compliance with applicable laws, damage to
-or loss of data, programs or equipment, and unavailability
-or interruption of operations.
-
-6. DISCLAIMER OF LIABILITY
-
-EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, NEITHER RECIPIENT NOR ANY
-CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING WITHOUT LIMITATION
-LOST PROFITS), HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
-CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
-ARISING IN ANY WAY OUT OF THE USE OR DISTRIBUTION OF THE PROGRAM OR THE
-EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF THE
-POSSIBILITY OF SUCH DAMAGES.
-
-7. GENERAL
-
-If any provision of this Agreement is invalid or unenforceable under
-applicable law, it shall not affect the validity or enforceability of the
-remainder of the terms of this Agreement, and without further action by
-the parties hereto, such provision shall be reformed to the minimum extent
-necessary to make such provision valid and enforceable.
-
-If Recipient institutes patent litigation against any entity (including a
-cross-claim or counterclaim in a lawsuit) alleging that the Program itself
-(excluding combinations of the Program with other software or hardware)
-infringes such Recipient's patent(s), then such Recipient's rights granted
-under Section 2(b) shall terminate as of the date such litigation is filed.
-
-All Recipient's rights under this Agreement shall terminate if it fails to
-comply with any of the material terms or conditions of this Agreement and
-does not cure such failure in a reasonable period of time after becoming
-aware of such noncompliance. If all Recipient's rights under this
-Agreement terminate, Recipient agrees to cease use and distribution of the
-Program as soon as reasonably practicable. However, Recipient's obligations
-under this Agreement and any licenses granted by Recipient relating to the
-Program shall continue and survive.
-
-Everyone is permitted to copy and distribute copies of this Agreement,
-but in order to avoid inconsistency the Agreement is copyrighted and may
-only be modified in the following manner. The Agreement Steward reserves
-the right to publish new versions (including revisions) of this Agreement
-from time to time. No one other than the Agreement Steward has the right to
-modify this Agreement. The Eclipse Foundation is the initial
-Agreement Steward. The Eclipse Foundation may assign the responsibility to
-serve as the Agreement Steward to a suitable separate entity. Each new version
-of the Agreement will be given a distinguishing version number. The Program
-(including Contributions) may always be distributed subject to the version
-of the Agreement under which it was received. In addition, after a new version
-of the Agreement is published, Contributor may elect to distribute the Program
-(including its Contributions) under the new version. Except as expressly
-stated in Sections 2(a) and 2(b) above, Recipient receives no rights or
-licenses to the intellectual property of any Contributor under this Agreement,
-whether expressly, by implication, estoppel or otherwise. All rights in the
-Program not expressly granted under this Agreement are reserved.
-
-This Agreement is governed by the laws of the State of New York and the
-intellectual property laws of the United States of America. No party to
-this Agreement will bring a legal action under this Agreement more than one
-year after the cause of action arose. Each party waives its rights to a
-jury trial in any resulting litigation.
-
-------------------
-
-Files:
-
-Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved.
-
-Developed at SunSoft, a Sun Microsystems, Inc. business.
-Permission to use, copy, modify, and distribute this
-software is freely granted, provided that this notice 
-is preserved.
-
-SafeParcelable library:
-
-
-                                 Apache License
-                           Version 2.0, January 2004
-                        http://www.apache.org/licenses/
-
-   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
-
-   1. Definitions.
-
-      "License" shall mean the terms and conditions for use, reproduction,
-      and distribution as defined by Sections 1 through 9 of this document.
-
-      "Licensor" shall mean the copyright owner or entity authorized by
-      the copyright owner that is granting the License.
-
-      "Legal Entity" shall mean the union of the acting entity and all
-      other entities that control, are controlled by, or are under common
-      control with that entity. For the purposes of this definition,
-      "control" means (i) the power, direct or indirect, to cause the
-      direction or management of such entity, whether by contract or
-      otherwise, or (ii) ownership of fifty percent (50%) or more of the
-      outstanding shares, or (iii) beneficial ownership of such entity.
-
-      "You" (or "Your") shall mean an individual or Legal Entity
-      exercising permissions granted by this License.
-
-      "Source" form shall mean the preferred form for making modifications,
-      including but not limited to software source code, documentation
-      source, and configuration files.
-
-      "Object" form shall mean any form resulting from mechanical
-      transformation or translation of a Source form, including but
-      not limited to compiled object code, generated documentation,
-      and conversions to other media types.
-
-      "Work" shall mean the work of authorship, whether in Source or
-      Object form, made available under the License, as indicated by a
-      copyright notice that is included in or attached to the work
-      (an example is provided in the Appendix below).
-
-      "Derivative Works" shall mean any work, whether in Source or Object
-      form, that is based on (or derived from) the Work and for which the
-      editorial revisions, annotations, elaborations, or other modifications
-      represent, as a whole, an original work of authorship. For the purposes
-      of this License, Derivative Works shall not include works that remain
-      separable from, or merely link (or bind by name) to the interfaces of,
-      the Work and Derivative Works thereof.
-
-      "Contribution" shall mean any work of authorship, including
-      the original version of the Work and any modifications or additions
-      to that Work or Derivative Works thereof, that is intentionally
-      submitted to Licensor for inclusion in the Work by the copyright owner
-      or by an individual or Legal Entity authorized to submit on behalf of
-      the copyright owner. For the purposes of this definition, "submitted"
-      means any form of electronic, verbal, or written communication sent
-      to the Licensor or its representatives, including but not limited to
-      communication on electronic mailing lists, source code control systems,
-      and issue tracking systems that are managed by, or on behalf of, the
-      Licensor for the purpose of discussing and improving the Work, but
-      excluding communication that is conspicuously marked or otherwise
-      designated in writing by the copyright owner as "Not a Contribution."
-
-      "Contributor" shall mean Licensor and any individual or Legal Entity
-      on behalf of whom a Contribution has been received by Licensor and
-      subsequently incorporated within the Work.
-
-   2. Grant of Copyright License. Subject to the terms and conditions of
-      this License, each Contributor hereby grants to You a perpetual,
-      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
-      copyright license to reproduce, prepare Derivative Works of,
-      publicly display, publicly perform, sublicense, and distribute the
-      Work and such Derivative Works in Source or Object form.
-
-   3. Grant of Patent License. Subject to the terms and conditions of
-      this License, each Contributor hereby grants to You a perpetual,
-      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
-      (except as stated in this section) patent license to make, have made,
-      use, offer to sell, sell, import, and otherwise transfer the Work,
-      where such license applies only to those patent claims licensable
-      by such Contributor that are necessarily infringed by their
-      Contribution(s) alone or by combination of their Contribution(s)
-      with the Work to which such Contribution(s) was submitted. If You
-      institute patent litigation against any entity (including a
-      cross-claim or counterclaim in a lawsuit) alleging that the Work
-      or a Contribution incorporated within the Work constitutes direct
-      or contributory patent infringement, then any patent licenses
-      granted to You under this License for that Work shall terminate
-      as of the date such litigation is filed.
-
-   4. Redistribution. You may reproduce and distribute copies of the
-      Work or Derivative Works thereof in any medium, with or without
-      modifications, and in Source or Object form, provided that You
-      meet the following conditions:
-
-      (a) You must give any other recipients of the Work or
-          Derivative Works a copy of this License; and
-
-      (b) You must cause any modified files to carry prominent notices
-          stating that You changed the files; and
-
-      (c) You must retain, in the Source form of any Derivative Works
-          that You distribute, all copyright, patent, trademark, and
-          attribution notices from the Source form of the Work,
-          excluding those notices that do not pertain to any part of
-          the Derivative Works; and
-
-      (d) If the Work includes a "NOTICE" text file as part of its
-          distribution, then any Derivative Works that You distribute must
-          include a readable copy of the attribution notices contained
-          within such NOTICE file, excluding those notices that do not
-          pertain to any part of the Derivative Works, in at least one
-          of the following places: within a NOTICE text file distributed
-          as part of the Derivative Works; within the Source form or
-          documentation, if provided along with the Derivative Works; or,
-          within a display generated by the Derivative Works, if and
-          wherever such third-party notices normally appear. The contents
-          of the NOTICE file are for informational purposes only and
-          do not modify the License. You may add Your own attribution
-          notices within Derivative Works that You distribute, alongside
-          or as an addendum to the NOTICE text from the Work, provided
-          that such additional attribution notices cannot be construed
-          as modifying the License.
-
-      You may add Your own copyright statement to Your modifications and
-      may provide additional or different license terms and conditions
-      for use, reproduction, or distribution of Your modifications, or
-      for any such Derivative Works as a whole, provided Your use,
-      reproduction, and distribution of the Work otherwise complies with
-      the conditions stated in this License.
-
-   5. Submission of Contributions. Unless You explicitly state otherwise,
-      any Contribution intentionally submitted for inclusion in the Work
-      by You to the Licensor shall be under the terms and conditions of
-      this License, without any additional terms or conditions.
-      Notwithstanding the above, nothing herein shall supersede or modify
-      the terms of any separate license agreement you may have executed
-      with Licensor regarding such Contributions.
-
-   6. Trademarks. This License does not grant permission to use the trade
-      names, trademarks, service marks, or product names of the Licensor,
-      except as required for reasonable and customary use in describing the
-      origin of the Work and reproducing the content of the NOTICE file.
-
-   7. Disclaimer of Warranty. Unless required by applicable law or
-      agreed to in writing, Licensor provides the Work (and each
-      Contributor provides its Contributions) on an "AS IS" BASIS,
-      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
-      implied, including, without limitation, any warranties or conditions
-      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
-      PARTICULAR PURPOSE. You are solely responsible for determining the
-      appropriateness of using or redistributing the Work and assume any
-      risks associated with Your exercise of permissions under this License.
-
-   8. Limitation of Liability. In no event and under no legal theory,
-      whether in tort (including negligence), contract, or otherwise,
-      unless required by applicable law (such as deliberate and grossly
-      negligent acts) or agreed to in writing, shall any Contributor be
-      liable to You for damages, including any direct, indirect, special,
-      incidental, or consequential damages of any character arising as a
-      result of this License or out of the use or inability to use the
-      Work (including but not limited to damages for loss of goodwill,
-      work stoppage, computer failure or malfunction, or any and all
-      other commercial damages or losses), even if such Contributor
-      has been advised of the possibility of such damages.
-
-   9. Accepting Warranty or Additional Liability. While redistributing
-      the Work or Derivative Works thereof, You may choose to offer,
-      and charge a fee for, acceptance of support, warranty, indemnity,
-      or other liability obligations and/or rights consistent with this
-      License. However, in accepting such obligations, You may act only
-      on Your own behalf and on Your sole responsibility, not on behalf
-      of any other Contributor, and only if You agree to indemnify,
-      defend, and hold each Contributor harmless for any liability
-      incurred by, or claims asserted against, such Contributor by reason
-      of your accepting any such warranty or additional liability.
-
-   END OF TERMS AND CONDITIONS
-
-   APPENDIX: How to apply the Apache License to your work.
-
-      To apply the Apache License to your work, attach the following
-      boilerplate notice, with the fields enclosed by brackets "[]"
-      replaced with your own identifying information. (Don't include
-      the brackets!)  The text should be enclosed in the appropriate
-      comment syntax for the file format. We also recommend that a
-      file or class name and description of purpose be included on the
-      same "printed page" as the copyright notice for easier
-      identification within third-party archives.
-
-   Copyright [yyyy] [name of copyright owner]
-
-   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.
-
-
-apksig:
-
-
-   Copyright (c) 2005-2008, 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.
-
-   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.
-
-
-                                 Apache License
-                           Version 2.0, January 2004
-                        http://www.apache.org/licenses/
-
-   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
-
-   1. Definitions.
-
-      "License" shall mean the terms and conditions for use, reproduction,
-      and distribution as defined by Sections 1 through 9 of this document.
-
-      "Licensor" shall mean the copyright owner or entity authorized by
-      the copyright owner that is granting the License.
-
-      "Legal Entity" shall mean the union of the acting entity and all
-      other entities that control, are controlled by, or are under common
-      control with that entity. For the purposes of this definition,
-      "control" means (i) the power, direct or indirect, to cause the
-      direction or management of such entity, whether by contract or
-      otherwise, or (ii) ownership of fifty percent (50%) or more of the
-      outstanding shares, or (iii) beneficial ownership of such entity.
-
-      "You" (or "Your") shall mean an individual or Legal Entity
-      exercising permissions granted by this License.
-
-      "Source" form shall mean the preferred form for making modifications,
-      including but not limited to software source code, documentation
-      source, and configuration files.
-
-      "Object" form shall mean any form resulting from mechanical
-      transformation or translation of a Source form, including but
-      not limited to compiled object code, generated documentation,
-      and conversions to other media types.
-
-      "Work" shall mean the work of authorship, whether in Source or
-      Object form, made available under the License, as indicated by a
-      copyright notice that is included in or attached to the work
-      (an example is provided in the Appendix below).
-
-      "Derivative Works" shall mean any work, whether in Source or Object
-      form, that is based on (or derived from) the Work and for which the
-      editorial revisions, annotations, elaborations, or other modifications
-      represent, as a whole, an original work of authorship. For the purposes
-      of this License, Derivative Works shall not include works that remain
-      separable from, or merely link (or bind by name) to the interfaces of,
-      the Work and Derivative Works thereof.
-
-      "Contribution" shall mean any work of authorship, including
-      the original version of the Work and any modifications or additions
-      to that Work or Derivative Works thereof, that is intentionally
-      submitted to Licensor for inclusion in the Work by the copyright owner
-      or by an individual or Legal Entity authorized to submit on behalf of
-      the copyright owner. For the purposes of this definition, "submitted"
-      means any form of electronic, verbal, or written communication sent
-      to the Licensor or its representatives, including but not limited to
-      communication on electronic mailing lists, source code control systems,
-      and issue tracking systems that are managed by, or on behalf of, the
-      Licensor for the purpose of discussing and improving the Work, but
-      excluding communication that is conspicuously marked or otherwise
-      designated in writing by the copyright owner as "Not a Contribution."
-
-      "Contributor" shall mean Licensor and any individual or Legal Entity
-      on behalf of whom a Contribution has been received by Licensor and
-      subsequently incorporated within the Work.
-
-   2. Grant of Copyright License. Subject to the terms and conditions of
-      this License, each Contributor hereby grants to You a perpetual,
-      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
-      copyright license to reproduce, prepare Derivative Works of,
-      publicly display, publicly perform, sublicense, and distribute the
-      Work and such Derivative Works in Source or Object form.
-
-   3. Grant of Patent License. Subject to the terms and conditions of
-      this License, each Contributor hereby grants to You a perpetual,
-      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
-      (except as stated in this section) patent license to make, have made,
-      use, offer to sell, sell, import, and otherwise transfer the Work,
-      where such license applies only to those patent claims licensable
-      by such Contributor that are necessarily infringed by their
-      Contribution(s) alone or by combination of their Contribution(s)
-      with the Work to which such Contribution(s) was submitted. If You
-      institute patent litigation against any entity (including a
-      cross-claim or counterclaim in a lawsuit) alleging that the Work
-      or a Contribution incorporated within the Work constitutes direct
-      or contributory patent infringement, then any patent licenses
-      granted to You under this License for that Work shall terminate
-      as of the date such litigation is filed.
-
-   4. Redistribution. You may reproduce and distribute copies of the
-      Work or Derivative Works thereof in any medium, with or without
-      modifications, and in Source or Object form, provided that You
-      meet the following conditions:
-
-      (a) You must give any other recipients of the Work or
-          Derivative Works a copy of this License; and
-
-      (b) You must cause any modified files to carry prominent notices
-          stating that You changed the files; and
-
-      (c) You must retain, in the Source form of any Derivative Works
-          that You distribute, all copyright, patent, trademark, and
-          attribution notices from the Source form of the Work,
-          excluding those notices that do not pertain to any part of
-          the Derivative Works; and
-
-      (d) If the Work includes a "NOTICE" text file as part of its
-          distribution, then any Derivative Works that You distribute must
-          include a readable copy of the attribution notices contained
-          within such NOTICE file, excluding those notices that do not
-          pertain to any part of the Derivative Works, in at least one
-          of the following places: within a NOTICE text file distributed
-          as part of the Derivative Works; within the Source form or
-          documentation, if provided along with the Derivative Works; or,
-          within a display generated by the Derivative Works, if and
-          wherever such third-party notices normally appear. The contents
-          of the NOTICE file are for informational purposes only and
-          do not modify the License. You may add Your own attribution
-          notices within Derivative Works that You distribute, alongside
-          or as an addendum to the NOTICE text from the Work, provided
-          that such additional attribution notices cannot be construed
-          as modifying the License.
-
-      You may add Your own copyright statement to Your modifications and
-      may provide additional or different license terms and conditions
-      for use, reproduction, or distribution of Your modifications, or
-      for any such Derivative Works as a whole, provided Your use,
-      reproduction, and distribution of the Work otherwise complies with
-      the conditions stated in this License.
-
-   5. Submission of Contributions. Unless You explicitly state otherwise,
-      any Contribution intentionally submitted for inclusion in the Work
-      by You to the Licensor shall be under the terms and conditions of
-      this License, without any additional terms or conditions.
-      Notwithstanding the above, nothing herein shall supersede or modify
-      the terms of any separate license agreement you may have executed
-      with Licensor regarding such Contributions.
-
-   6. Trademarks. This License does not grant permission to use the trade
-      names, trademarks, service marks, or product names of the Licensor,
-      except as required for reasonable and customary use in describing the
-      origin of the Work and reproducing the content of the NOTICE file.
-
-   7. Disclaimer of Warranty. Unless required by applicable law or
-      agreed to in writing, Licensor provides the Work (and each
-      Contributor provides its Contributions) on an "AS IS" BASIS,
-      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
-      implied, including, without limitation, any warranties or conditions
-      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
-      PARTICULAR PURPOSE. You are solely responsible for determining the
-      appropriateness of using or redistributing the Work and assume any
-      risks associated with Your exercise of permissions under this License.
-
-   8. Limitation of Liability. In no event and under no legal theory,
-      whether in tort (including negligence), contract, or otherwise,
-      unless required by applicable law (such as deliberate and grossly
-      negligent acts) or agreed to in writing, shall any Contributor be
-      liable to You for damages, including any direct, indirect, special,
-      incidental, or consequential damages of any character arising as a
-      result of this License or out of the use or inability to use the
-      Work (including but not limited to damages for loss of goodwill,
-      work stoppage, computer failure or malfunction, or any and all
-      other commercial damages or losses), even if such Contributor
-      has been advised of the possibility of such damages.
-
-   9. Accepting Warranty or Additional Liability. While redistributing
-      the Work or Derivative Works thereof, You may choose to offer,
-      and charge a fee for, acceptance of support, warranty, indemnity,
-      or other liability obligations and/or rights consistent with this
-      License. However, in accepting such obligations, You may act only
-      on Your own behalf and on Your sole responsibility, not on behalf
-      of any other Contributor, and only if You agree to indemnify,
-      defend, and hold each Contributor harmless for any liability
-      incurred by, or claims asserted against, such Contributor by reason
-      of your accepting any such warranty or additional liability.
-
-   END OF TERMS AND CONDITIONS
-
-
-
-Kotlin coroutines:
-
-                                 Apache License
-                           Version 2.0, January 2004
-                        http://www.apache.org/licenses/
-
-   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
-
-   1. Definitions.
-
-      "License" shall mean the terms and conditions for use, reproduction,
-      and distribution as defined by Sections 1 through 9 of this document.
-
-      "Licensor" shall mean the copyright owner or entity authorized by
-      the copyright owner that is granting the License.
-
-      "Legal Entity" shall mean the union of the acting entity and all
-      other entities that control, are controlled by, or are under common
-      control with that entity. For the purposes of this definition,
-      "control" means (i) the power, direct or indirect, to cause the
-      direction or management of such entity, whether by contract or
-      otherwise, or (ii) ownership of fifty percent (50%) or more of the
-      outstanding shares, or (iii) beneficial ownership of such entity.
-
-      "You" (or "Your") shall mean an individual or Legal Entity
-      exercising permissions granted by this License.
-
-      "Source" form shall mean the preferred form for making modifications,
-      including but not limited to software source code, documentation
-      source, and configuration files.
-
-      "Object" form shall mean any form resulting from mechanical
-      transformation or translation of a Source form, including but
-      not limited to compiled object code, generated documentation,
-      and conversions to other media types.
-
-      "Work" shall mean the work of authorship, whether in Source or
-      Object form, made available under the License, as indicated by a
-      copyright notice that is included in or attached to the work
-      (an example is provided in the Appendix below).
-
-      "Derivative Works" shall mean any work, whether in Source or Object
-      form, that is based on (or derived from) the Work and for which the
-      editorial revisions, annotations, elaborations, or other modifications
-      represent, as a whole, an original work of authorship. For the purposes
-      of this License, Derivative Works shall not include works that remain
-      separable from, or merely link (or bind by name) to the interfaces of,
-      the Work and Derivative Works thereof.
-
-      "Contribution" shall mean any work of authorship, including
-      the original version of the Work and any modifications or additions
-      to that Work or Derivative Works thereof, that is intentionally
-      submitted to Licensor for inclusion in the Work by the copyright owner
-      or by an individual or Legal Entity authorized to submit on behalf of
-      the copyright owner. For the purposes of this definition, "submitted"
-      means any form of electronic, verbal, or written communication sent
-      to the Licensor or its representatives, including but not limited to
-      communication on electronic mailing lists, source code control systems,
-      and issue tracking systems that are managed by, or on behalf of, the
-      Licensor for the purpose of discussing and improving the Work, but
-      excluding communication that is conspicuously marked or otherwise
-      designated in writing by the copyright owner as "Not a Contribution."
-
-      "Contributor" shall mean Licensor and any individual or Legal Entity
-      on behalf of whom a Contribution has been received by Licensor and
-      subsequently incorporated within the Work.
-
-   2. Grant of Copyright License. Subject to the terms and conditions of
-      this License, each Contributor hereby grants to You a perpetual,
-      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
-      copyright license to reproduce, prepare Derivative Works of,
-      publicly display, publicly perform, sublicense, and distribute the
-      Work and such Derivative Works in Source or Object form.
-
-   3. Grant of Patent License. Subject to the terms and conditions of
-      this License, each Contributor hereby grants to You a perpetual,
-      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
-      (except as stated in this section) patent license to make, have made,
-      use, offer to sell, sell, import, and otherwise transfer the Work,
-      where such license applies only to those patent claims licensable
-      by such Contributor that are necessarily infringed by their
-      Contribution(s) alone or by combination of their Contribution(s)
-      with the Work to which such Contribution(s) was submitted. If You
-      institute patent litigation against any entity (including a
-      cross-claim or counterclaim in a lawsuit) alleging that the Work
-      or a Contribution incorporated within the Work constitutes direct
-      or contributory patent infringement, then any patent licenses
-      granted to You under this License for that Work shall terminate
-      as of the date such litigation is filed.
-
-   4. Redistribution. You may reproduce and distribute copies of the
-      Work or Derivative Works thereof in any medium, with or without
-      modifications, and in Source or Object form, provided that You
-      meet the following conditions:
-
-      (a) You must give any other recipients of the Work or
-          Derivative Works a copy of this License; and
-
-      (b) You must cause any modified files to carry prominent notices
-          stating that You changed the files; and
-
-      (c) You must retain, in the Source form of any Derivative Works
-          that You distribute, all copyright, patent, trademark, and
-          attribution notices from the Source form of the Work,
-          excluding those notices that do not pertain to any part of
-          the Derivative Works; and
-
-      (d) If the Work includes a "NOTICE" text file as part of its
-          distribution, then any Derivative Works that You distribute must
-          include a readable copy of the attribution notices contained
-          within such NOTICE file, excluding those notices that do not
-          pertain to any part of the Derivative Works, in at least one
-          of the following places: within a NOTICE text file distributed
-          as part of the Derivative Works; within the Source form or
-          documentation, if provided along with the Derivative Works; or,
-          within a display generated by the Derivative Works, if and
-          wherever such third-party notices normally appear. The contents
-          of the NOTICE file are for informational purposes only and
-          do not modify the License. You may add Your own attribution
-          notices within Derivative Works that You distribute, alongside
-          or as an addendum to the NOTICE text from the Work, provided
-          that such additional attribution notices cannot be construed
-          as modifying the License.
-
-      You may add Your own copyright statement to Your modifications and
-      may provide additional or different license terms and conditions
-      for use, reproduction, or distribution of Your modifications, or
-      for any such Derivative Works as a whole, provided Your use,
-      reproduction, and distribution of the Work otherwise complies with
-      the conditions stated in this License.
-
-   5. Submission of Contributions. Unless You explicitly state otherwise,
-      any Contribution intentionally submitted for inclusion in the Work
-      by You to the Licensor shall be under the terms and conditions of
-      this License, without any additional terms or conditions.
-      Notwithstanding the above, nothing herein shall supersede or modify
-      the terms of any separate license agreement you may have executed
-      with Licensor regarding such Contributions.
-
-   6. Trademarks. This License does not grant permission to use the trade
-      names, trademarks, service marks, or product names of the Licensor,
-      except as required for reasonable and customary use in describing the
-      origin of the Work and reproducing the content of the NOTICE file.
-
-   7. Disclaimer of Warranty. Unless required by applicable law or
-      agreed to in writing, Licensor provides the Work (and each
-      Contributor provides its Contributions) on an "AS IS" BASIS,
-      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
-      implied, including, without limitation, any warranties or conditions
-      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
-      PARTICULAR PURPOSE. You are solely responsible for determining the
-      appropriateness of using or redistributing the Work and assume any
-      risks associated with Your exercise of permissions under this License.
-
-   8. Limitation of Liability. In no event and under no legal theory,
-      whether in tort (including negligence), contract, or otherwise,
-      unless required by applicable law (such as deliberate and grossly
-      negligent acts) or agreed to in writing, shall any Contributor be
-      liable to You for damages, including any direct, indirect, special,
-      incidental, or consequential damages of any character arising as a
-      result of this License or out of the use or inability to use the
-      Work (including but not limited to damages for loss of goodwill,
-      work stoppage, computer failure or malfunction, or any and all
-      other commercial damages or losses), even if such Contributor
-      has been advised of the possibility of such damages.
-
-   9. Accepting Warranty or Additional Liability. While redistributing
-      the Work or Derivative Works thereof, You may choose to offer,
-      and charge a fee for, acceptance of support, warranty, indemnity,
-      or other liability obligations and/or rights consistent with this
-      License. However, in accepting such obligations, You may act only
-      on Your own behalf and on Your sole responsibility, not on behalf
-      of any other Contributor, and only if You agree to indemnify,
-      defend, and hold each Contributor harmless for any liability
-      incurred by, or claims asserted against, such Contributor by reason
-      of your accepting any such warranty or additional liability.
-
-   END OF TERMS AND CONDITIONS
-
-   APPENDIX: How to apply the Apache License to your work.
-
-      To apply the Apache License to your work, attach the following
-      boilerplate notice, with the fields enclosed by brackets "[]"
-      replaced with your own identifying information. (Don't include
-      the brackets!)  The text should be enclosed in the appropriate
-      comment syntax for the file format. We also recommend that a
-      file or class name and description of purpose be included on the
-      same "printed page" as the copyright notice for easier
-      identification within third-party archives.
-
-   Copyright [yyyy] [name of copyright owner]
-
-   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.
-
-
-kotlinx_atomicfu:
-
-                                 Apache License
-                           Version 2.0, January 2004
-                        http://www.apache.org/licenses/
-
-   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
-
-   1. Definitions.
-
-      "License" shall mean the terms and conditions for use, reproduction,
-      and distribution as defined by Sections 1 through 9 of this document.
-
-      "Licensor" shall mean the copyright owner or entity authorized by
-      the copyright owner that is granting the License.
-
-      "Legal Entity" shall mean the union of the acting entity and all
-      other entities that control, are controlled by, or are under common
-      control with that entity. For the purposes of this definition,
-      "control" means (i) the power, direct or indirect, to cause the
-      direction or management of such entity, whether by contract or
-      otherwise, or (ii) ownership of fifty percent (50%) or more of the
-      outstanding shares, or (iii) beneficial ownership of such entity.
-
-      "You" (or "Your") shall mean an individual or Legal Entity
-      exercising permissions granted by this License.
-
-      "Source" form shall mean the preferred form for making modifications,
-      including but not limited to software source code, documentation
-      source, and configuration files.
-
-      "Object" form shall mean any form resulting from mechanical
-      transformation or translation of a Source form, including but
-      not limited to compiled object code, generated documentation,
-      and conversions to other media types.
-
-      "Work" shall mean the work of authorship, whether in Source or
-      Object form, made available under the License, as indicated by a
-      copyright notice that is included in or attached to the work
-      (an example is provided in the Appendix below).
-
-      "Derivative Works" shall mean any work, whether in Source or Object
-      form, that is based on (or derived from) the Work and for which the
-      editorial revisions, annotations, elaborations, or other modifications
-      represent, as a whole, an original work of authorship. For the purposes
-      of this License, Derivative Works shall not include works that remain
-      separable from, or merely link (or bind by name) to the interfaces of,
-      the Work and Derivative Works thereof.
-
-      "Contribution" shall mean any work of authorship, including
-      the original version of the Work and any modifications or additions
-      to that Work or Derivative Works thereof, that is intentionally
-      submitted to Licensor for inclusion in the Work by the copyright owner
-      or by an individual or Legal Entity authorized to submit on behalf of
-      the copyright owner. For the purposes of this definition, "submitted"
-      means any form of electronic, verbal, or written communication sent
-      to the Licensor or its representatives, including but not limited to
-      communication on electronic mailing lists, source code control systems,
-      and issue tracking systems that are managed by, or on behalf of, the
-      Licensor for the purpose of discussing and improving the Work, but
-      excluding communication that is conspicuously marked or otherwise
-      designated in writing by the copyright owner as "Not a Contribution."
-
-      "Contributor" shall mean Licensor and any individual or Legal Entity
-      on behalf of whom a Contribution has been received by Licensor and
-      subsequently incorporated within the Work.
-
-   2. Grant of Copyright License. Subject to the terms and conditions of
-      this License, each Contributor hereby grants to You a perpetual,
-      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
-      copyright license to reproduce, prepare Derivative Works of,
-      publicly display, publicly perform, sublicense, and distribute the
-      Work and such Derivative Works in Source or Object form.
-
-   3. Grant of Patent License. Subject to the terms and conditions of
-      this License, each Contributor hereby grants to You a perpetual,
-      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
-      (except as stated in this section) patent license to make, have made,
-      use, offer to sell, sell, import, and otherwise transfer the Work,
-      where such license applies only to those patent claims licensable
-      by such Contributor that are necessarily infringed by their
-      Contribution(s) alone or by combination of their Contribution(s)
-      with the Work to which such Contribution(s) was submitted. If You
-      institute patent litigation against any entity (including a
-      cross-claim or counterclaim in a lawsuit) alleging that the Work
-      or a Contribution incorporated within the Work constitutes direct
-      or contributory patent infringement, then any patent licenses
-      granted to You under this License for that Work shall terminate
-      as of the date such litigation is filed.
-
-   4. Redistribution. You may reproduce and distribute copies of the
-      Work or Derivative Works thereof in any medium, with or without
-      modifications, and in Source or Object form, provided that You
-      meet the following conditions:
-
-      (a) You must give any other recipients of the Work or
-          Derivative Works a copy of this License; and
-
-      (b) You must cause any modified files to carry prominent notices
-          stating that You changed the files; and
-
-      (c) You must retain, in the Source form of any Derivative Works
-          that You distribute, all copyright, patent, trademark, and
-          attribution notices from the Source form of the Work,
-          excluding those notices that do not pertain to any part of
-          the Derivative Works; and
-
-      (d) If the Work includes a "NOTICE" text file as part of its
-          distribution, then any Derivative Works that You distribute must
-          include a readable copy of the attribution notices contained
-          within such NOTICE file, excluding those notices that do not
-          pertain to any part of the Derivative Works, in at least one
-          of the following places: within a NOTICE text file distributed
-          as part of the Derivative Works; within the Source form or
-          documentation, if provided along with the Derivative Works; or,
-          within a display generated by the Derivative Works, if and
-          wherever such third-party notices normally appear. The contents
-          of the NOTICE file are for informational purposes only and
-          do not modify the License. You may add Your own attribution
-          notices within Derivative Works that You distribute, alongside
-          or as an addendum to the NOTICE text from the Work, provided
-          that such additional attribution notices cannot be construed
-          as modifying the License.
-
-      You may add Your own copyright statement to Your modifications and
-      may provide additional or different license terms and conditions
-      for use, reproduction, or distribution of Your modifications, or
-      for any such Derivative Works as a whole, provided Your use,
-      reproduction, and distribution of the Work otherwise complies with
-      the conditions stated in this License.
-
-   5. Submission of Contributions. Unless You explicitly state otherwise,
-      any Contribution intentionally submitted for inclusion in the Work
-      by You to the Licensor shall be under the terms and conditions of
-      this License, without any additional terms or conditions.
-      Notwithstanding the above, nothing herein shall supersede or modify
-      the terms of any separate license agreement you may have executed
-      with Licensor regarding such Contributions.
-
-   6. Trademarks. This License does not grant permission to use the trade
-      names, trademarks, service marks, or product names of the Licensor,
-      except as required for reasonable and customary use in describing the
-      origin of the Work and reproducing the content of the NOTICE file.
-
-   7. Disclaimer of Warranty. Unless required by applicable law or
-      agreed to in writing, Licensor provides the Work (and each
-      Contributor provides its Contributions) on an "AS IS" BASIS,
-      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
-      implied, including, without limitation, any warranties or conditions
-      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
-      PARTICULAR PURPOSE. You are solely responsible for determining the
-      appropriateness of using or redistributing the Work and assume any
-      risks associated with Your exercise of permissions under this License.
-
-   8. Limitation of Liability. In no event and under no legal theory,
-      whether in tort (including negligence), contract, or otherwise,
-      unless required by applicable law (such as deliberate and grossly
-      negligent acts) or agreed to in writing, shall any Contributor be
-      liable to You for damages, including any direct, indirect, special,
-      incidental, or consequential damages of any character arising as a
-      result of this License or out of the use or inability to use the
-      Work (including but not limited to damages for loss of goodwill,
-      work stoppage, computer failure or malfunction, or any and all
-      other commercial damages or losses), even if such Contributor
-      has been advised of the possibility of such damages.
-
-   9. Accepting Warranty or Additional Liability. While redistributing
-      the Work or Derivative Works thereof, You may choose to offer,
-      and charge a fee for, acceptance of support, warranty, indemnity,
-      or other liability obligations and/or rights consistent with this
-      License. However, in accepting such obligations, You may act only
-      on Your own behalf and on Your sole responsibility, not on behalf
-      of any other Contributor, and only if You agree to indemnify,
-      defend, and hold each Contributor harmless for any liability
-      incurred by, or claims asserted against, such Contributor by reason
-      of your accepting any such warranty or additional liability.
-
-   END OF TERMS AND CONDITIONS
-
-   APPENDIX: How to apply the Apache License to your work.
-
-      To apply the Apache License to your work, attach the following
-      boilerplate notice, with the fields enclosed by brackets "[]"
-      replaced with your own identifying information. (Don't include
-      the brackets!)  The text should be enclosed in the appropriate
-      comment syntax for the file format. We also recommend that a
-      file or class name and description of purpose be included on the
-      same "printed page" as the copyright notice for easier
-      identification within third-party archives.
-
-   Copyright [yyyy] [name of copyright owner]
-
-   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.
\ No newline at end of file
diff --git a/third_party/android_deps/libs/com_google_android_gms_play_services_tflite_impl/OWNERS b/third_party/android_deps/libs/com_google_android_gms_play_services_tflite_impl/OWNERS
deleted file mode 100644
index aea47a05..0000000
--- a/third_party/android_deps/libs/com_google_android_gms_play_services_tflite_impl/OWNERS
+++ /dev/null
@@ -1 +0,0 @@
-file://third_party/android_deps/OWNERS
diff --git a/third_party/android_deps/libs/com_google_android_gms_play_services_tflite_impl/README.chromium b/third_party/android_deps/libs/com_google_android_gms_play_services_tflite_impl/README.chromium
deleted file mode 100644
index dcc14a1..0000000
--- a/third_party/android_deps/libs/com_google_android_gms_play_services_tflite_impl/README.chromium
+++ /dev/null
@@ -1,15 +0,0 @@
-Name: play-services-tflite-impl
-Short Name: play-services-tflite-impl
-URL: https://developers.google.com/android/guides/setup
-Version: 16.0.1
-License: Android Software Development Kit License
-License File: LICENSE
-CPEPrefix: unknown
-Security Critical: yes
-Shipped: yes
-
-Description:
-
-
-Local Modifications:
-No modifications.
diff --git a/third_party/android_deps/libs/com_google_android_gms_play_services_tflite_java/3pp/3pp.pb b/third_party/android_deps/libs/com_google_android_gms_play_services_tflite_java/3pp/3pp.pb
deleted file mode 100644
index d743b51b..0000000
--- a/third_party/android_deps/libs/com_google_android_gms_play_services_tflite_java/3pp/3pp.pb
+++ /dev/null
@@ -1,16 +0,0 @@
-# Copyright 2021 The Chromium Authors
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-# This is generated, do not edit. Update BuildConfigGenerator.groovy instead.
-
-create {
-  source {
-    script { name: "fetch.py" }
-  }
-}
-
-upload {
-  pkg_prefix: "chromium/third_party/android_deps/libs"
-  universal: true
-}
diff --git a/third_party/android_deps/libs/com_google_android_gms_play_services_tflite_java/3pp/fetch.py b/third_party/android_deps/libs/com_google_android_gms_play_services_tflite_java/3pp/fetch.py
deleted file mode 100755
index dac202dd..0000000
--- a/third_party/android_deps/libs/com_google_android_gms_play_services_tflite_java/3pp/fetch.py
+++ /dev/null
@@ -1,27 +0,0 @@
-#!/usr/bin/env python3
-# Copyright 2021 The Chromium Authors
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-# This is generated, do not edit. Update BuildConfigGenerator.groovy and
-# 3ppFetch.template instead.
-
-import pathlib
-import sys
-
-_3PP_DIR = pathlib.Path(__file__).resolve().parent
-sys.path.insert(0, str(_3PP_DIR.parents[2]))
-import fetch_common
-
-_REPO_URL = 'https://dl.google.com/dl/android/maven2'
-SPEC = fetch_common.Spec(repo_url=_REPO_URL,
-                         group_name='com/google/android/gms',
-                         module_name='play-services-tflite-java',
-                         file_ext='aar',
-                         patch_version='cr1',
-                         version_override='16.0.1',
-                         version_filter=None)
-
-
-if __name__ == '__main__':
-    fetch_common.main(SPEC)
diff --git a/third_party/android_deps/libs/com_google_android_gms_play_services_tflite_java/LICENSE b/third_party/android_deps/libs/com_google_android_gms_play_services_tflite_java/LICENSE
deleted file mode 100644
index 37ad9da..0000000
--- a/third_party/android_deps/libs/com_google_android_gms_play_services_tflite_java/LICENSE
+++ /dev/null
@@ -1,11840 +0,0 @@
-Terms and conditions
-
-This is the Android Software Development Kit License Agreement
-
-1. Introduction
-
-1.1 The Android Software Development Kit (referred to in the License Agreement as the "SDK" and specifically including the Android system files, packaged APIs, and Google APIs add-ons) is licensed to you subject to the terms of the License Agreement. The License Agreement forms a legally binding contract between you and Google in relation to your use of the SDK.
-
-1.2 "Android" means the Android software stack for devices, as made available under the Android Open Source Project, which is located at the following URL: http://source.android.com/, as updated from time to time.
-
-1.3 A "compatible implementation" means any Android device that (i) complies with the Android Compatibility Definition document, which can be found at the Android compatibility website (http://source.android.com/compatibility) and which may be updated from time to time; and (ii) successfully passes the Android Compatibility Test Suite (CTS).
-
-1.4 "Google" means Google LLC, a Delaware corporation with principal place of business at 1600 Amphitheatre Parkway, Mountain View, CA 94043, United States.
-
-
-2. Accepting this License Agreement
-
-2.1 In order to use the SDK, you must first agree to the License Agreement. You may not use the SDK if you do not accept the License Agreement.
-
-2.2 By clicking to accept, you hereby agree to the terms of the License Agreement.
-
-2.3 You may not use the SDK and may not accept the License Agreement if you are a person barred from receiving the SDK under the laws of the United States or other countries, including the country in which you are resident or from which you use the SDK.
-
-2.4 If you are agreeing to be bound by the License Agreement on behalf of your employer or other entity, you represent and warrant that you have full legal authority to bind your employer or such entity to the License Agreement. If you do not have the requisite authority, you may not accept the License Agreement or use the SDK on behalf of your employer or other entity.
-
-
-3. SDK License from Google
-
-3.1 Subject to the terms of the License Agreement, Google grants you a limited, worldwide, royalty-free, non-assignable, non-exclusive, and non-sublicensable license to use the SDK solely to develop applications for compatible implementations of Android.
-
-3.2 You may not use this SDK to develop applications for other platforms (including non-compatible implementations of Android) or to develop another SDK. You are of course free to develop applications for other platforms, including non-compatible implementations of Android, provided that this SDK is not used for that purpose.
-
-3.3 You agree that Google or third parties own all legal right, title and interest in and to the SDK, including any Intellectual Property Rights that subsist in the SDK. "Intellectual Property Rights" means any and all rights under patent law, copyright law, trade secret law, trademark law, and any and all other proprietary rights. Google reserves all rights not expressly granted to you.
-
-3.4 You may not use the SDK for any purpose not expressly permitted by the License Agreement.  Except to the extent required by applicable third party licenses, you may not copy (except for backup purposes), modify, adapt, redistribute, decompile, reverse engineer, disassemble, or create derivative works of the SDK or any part of the SDK.
-
-3.5 Use, reproduction and distribution of components of the SDK licensed under an open source software license are governed solely by the terms of that open source software license and not the License Agreement.
-
-3.6 You agree that the form and nature of the SDK that Google provides may change without prior notice to you and that future versions of the SDK may be incompatible with applications developed on previous versions of the SDK. You agree that Google may stop (permanently or temporarily) providing the SDK (or any features within the SDK) to you or to users generally at Google's sole discretion, without prior notice to you.
-
-3.7 Nothing in the License Agreement gives you a right to use any of Google's trade names, trademarks, service marks, logos, domain names, or other distinctive brand features.
-
-3.8 You agree that you will not remove, obscure, or alter any proprietary rights notices (including copyright and trademark notices) that may be affixed to or contained within the SDK.
-
-
-4. Use of the SDK by You
-
-4.1 Google agrees that it obtains no right, title or interest from you (or your licensors) under the License Agreement in or to any software applications that you develop using the SDK, including any intellectual property rights that subsist in those applications.
-
-4.2 You agree to use the SDK and write applications only for purposes that are permitted by (a) the License Agreement and (b) any applicable law, regulation or generally accepted practices or guidelines in the relevant jurisdictions (including any laws regarding the export of data or software to and from the United States or other relevant countries).
-
-4.3 You agree that if you use the SDK to develop applications for general public users, you will protect the privacy and legal rights of those users. If the users provide you with user names, passwords, or other login information or personal information, you must make the users aware that the information will be available to your application, and you must provide legally adequate privacy notice and protection for those users. If your application stores personal or sensitive information provided by users, it must do so securely. If the user provides your application with Google Account information, your application may only use that information to access the user's Google Account when, and for the limited purposes for which, the user has given you permission to do so.
-
-4.4 You agree that you will not engage in any activity with the SDK, including the development or distribution of an application, that interferes with, disrupts, damages, or accesses in an unauthorized manner the servers, networks, or other properties or services of any third party including, but not limited to, Google or any mobile communications carrier.
-
-4.5 You agree that you are solely responsible for (and that Google has no responsibility to you or to any third party for) any data, content, or resources that you create, transmit or display through Android and/or applications for Android, and for the consequences of your actions (including any loss or damage which Google may suffer) by doing so.
-
-4.6 You agree that you are solely responsible for (and that Google has no responsibility to you or to any third party for) any breach of your obligations under the License Agreement, any applicable third party contract or Terms of Service, or any applicable law or regulation, and for the consequences (including any loss or damage which Google or any third party may suffer) of any such breach.
-
-
-5. Your Developer Credentials
-
-5.1 You agree that you are responsible for maintaining the confidentiality of any developer credentials that may be issued to you by Google or which you may choose yourself and that you will be solely responsible for all applications that are developed under your developer credentials.
-
-
-6. Privacy and Information
-
-6.1 In order to continually innovate and improve the SDK, Google may collect certain usage statistics from the software including but not limited to a unique identifier, associated IP address, version number of the software, and information on which tools and/or services in the SDK are being used and how they are being used. Before any of this information is collected, the SDK will notify you and seek your consent. If you withhold consent, the information will not be collected.
-
-6.2 The data collected is examined in the aggregate to improve the SDK and is maintained in accordance with Google's Privacy Policy.
-
-
-7. Third Party Applications
-
-7.1 If you use the SDK to run applications developed by a third party or that access data, content or resources provided by a third party, you agree that Google is not responsible for those applications, data, content, or resources. You understand that all data, content or resources which you may access through such third party applications are the sole responsibility of the person from which they originated and that Google is not liable for any loss or damage that you may experience as a result of the use or access of any of those third party applications, data, content, or resources.
-
-7.2 You should be aware the data, content, and resources presented to you through such a third party application may be protected by intellectual property rights which are owned by the providers (or by other persons or companies on their behalf). You may not modify, rent, lease, loan, sell, distribute or create derivative works based on these data, content, or resources (either in whole or in part) unless you have been specifically given permission to do so by the relevant owners.
-
-7.3 You acknowledge that your use of such third party applications, data, content, or resources may be subject to separate terms between you and the relevant third party. In that case, the License Agreement does not affect your legal relationship with these third parties.
-
-
-8. Using Android APIs
-
-8.1 Google Data APIs
-
-8.1.1 If you use any API to retrieve data from Google, you acknowledge that the data may be protected by intellectual property rights which are owned by Google or those parties that provide the data (or by other persons or companies on their behalf). Your use of any such API may be subject to additional Terms of Service. You may not modify, rent, lease, loan, sell, distribute or create derivative works based on this data (either in whole or in part) unless allowed by the relevant Terms of Service.
-
-8.1.2 If you use any API to retrieve a user's data from Google, you acknowledge and agree that you shall retrieve data only with the user's explicit consent and only when, and for the limited purposes for which, the user has given you permission to do so.
-
-
-9. Terminating this License Agreement
-
-9.1 The License Agreement will continue to apply until terminated by either you or Google as set out below.
-
-9.2 If you want to terminate the License Agreement, you may do so by ceasing your use of the SDK and any relevant developer credentials.
-
-9.3 Google may at any time, terminate the License Agreement with you if:
-(A) you have breached any provision of the License Agreement; or
-(B) Google is required to do so by law; or
-(C) the partner with whom Google offered certain parts of SDK (such as APIs) to you has terminated its relationship with Google or ceased to offer certain parts of the SDK to you; or
-(D) Google decides to no longer provide the SDK or certain parts of the SDK to users in the country in which you are resident or from which you use the service, or the provision of the SDK or certain SDK services to you by Google is, in Google's sole discretion, no longer commercially viable.
-
-9.4 When the License Agreement comes to an end, all of the legal rights, obligations and liabilities that you and Google have benefited from, been subject to (or which have accrued over time whilst the License Agreement has been in force) or which are expressed to continue indefinitely, shall be unaffected by this cessation, and the provisions of paragraph 14.7 shall continue to apply to such rights, obligations and liabilities indefinitely.
-
-
-10. DISCLAIMER OF WARRANTIES
-
-10.1 YOU EXPRESSLY UNDERSTAND AND AGREE THAT YOUR USE OF THE SDK IS AT YOUR SOLE RISK AND THAT THE SDK IS PROVIDED "AS IS" AND "AS AVAILABLE" WITHOUT WARRANTY OF ANY KIND FROM GOOGLE.
-
-10.2 YOUR USE OF THE SDK AND ANY MATERIAL DOWNLOADED OR OTHERWISE OBTAINED THROUGH THE USE OF THE SDK IS AT YOUR OWN DISCRETION AND RISK AND YOU ARE SOLELY RESPONSIBLE FOR ANY DAMAGE TO YOUR COMPUTER SYSTEM OR OTHER DEVICE OR LOSS OF DATA THAT RESULTS FROM SUCH USE.
-
-10.3 GOOGLE FURTHER EXPRESSLY DISCLAIMS ALL WARRANTIES AND CONDITIONS OF ANY KIND, WHETHER EXPRESS OR IMPLIED, INCLUDING, BUT NOT LIMITED TO THE IMPLIED WARRANTIES AND CONDITIONS OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT.
-
-
-11. LIMITATION OF LIABILITY
-
-11.1 YOU EXPRESSLY UNDERSTAND AND AGREE THAT GOOGLE, ITS SUBSIDIARIES AND AFFILIATES, AND ITS LICENSORS SHALL NOT BE LIABLE TO YOU UNDER ANY THEORY OF LIABILITY FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, CONSEQUENTIAL OR EXEMPLARY DAMAGES THAT MAY BE INCURRED BY YOU, INCLUDING ANY LOSS OF DATA, WHETHER OR NOT GOOGLE OR ITS REPRESENTATIVES HAVE BEEN ADVISED OF OR SHOULD HAVE BEEN AWARE OF THE POSSIBILITY OF ANY SUCH LOSSES ARISING.
-
-
-12. Indemnification
-
-12.1 To the maximum extent permitted by law, you agree to defend, indemnify and hold harmless Google, its affiliates and their respective directors, officers, employees and agents from and against any and all claims, actions, suits or proceedings, as well as any and all losses, liabilities, damages, costs and expenses (including reasonable attorneys fees) arising out of or accruing from (a) your use of the SDK, (b) any application you develop on the SDK that infringes any copyright, trademark, trade secret, trade dress, patent or other intellectual property right of any person or defames any person or violates their rights of publicity or privacy, and (c) any non-compliance by you with the License Agreement.
-
-
-13. Changes to the License Agreement
-
-13.1 Google may make changes to the License Agreement as it distributes new versions of the SDK. When these changes are made, Google will make a new version of the License Agreement available on the website where the SDK is made available.
-
-
-14. General Legal Terms
-
-14.1 The License Agreement constitutes the whole legal agreement between you and Google and governs your use of the SDK (excluding any services which Google may provide to you under a separate written agreement), and completely replaces any prior agreements between you and Google in relation to the SDK.
-
-14.2 You agree that if Google does not exercise or enforce any legal right or remedy which is contained in the License Agreement (or which Google has the benefit of under any applicable law), this will not be taken to be a formal waiver of Google's rights and that those rights or remedies will still be available to Google.
-
-14.3 If any court of law, having the jurisdiction to decide on this matter, rules that any provision of the License Agreement is invalid, then that provision will be removed from the License Agreement without affecting the rest of the License Agreement. The remaining provisions of the License Agreement will continue to be valid and enforceable.
-
-14.4 You acknowledge and agree that each member of the group of companies of which Google is the parent shall be third party beneficiaries to the License Agreement and that such other companies shall be entitled to directly enforce, and rely upon, any provision of the License Agreement that confers a benefit on (or rights in favor of) them. Other than this, no other person or company shall be third party beneficiaries to the License Agreement.
-
-14.5 EXPORT RESTRICTIONS. THE SDK IS SUBJECT TO UNITED STATES EXPORT LAWS AND REGULATIONS. YOU MUST COMPLY WITH ALL DOMESTIC AND INTERNATIONAL EXPORT LAWS AND REGULATIONS THAT APPLY TO THE SDK. THESE LAWS INCLUDE RESTRICTIONS ON DESTINATIONS, END USERS AND END USE.
-
-14.6 The rights granted in the License Agreement may not be assigned or transferred by either you or Google without the prior written approval of the other party. Neither you nor Google shall be permitted to delegate their responsibilities or obligations under the License Agreement without the prior written approval of the other party.
-
-14.7 The License Agreement, and your relationship with Google under the License Agreement, shall be governed by the laws of the State of California without regard to its conflict of laws provisions. You and Google agree to submit to the exclusive jurisdiction of the courts located within the county of Santa Clara, California to resolve any legal matter arising from the License Agreement. Notwithstanding this, you agree that Google shall still be allowed to apply for injunctive remedies (or an equivalent type of urgent legal relief) in any jurisdiction.
-
-
-December 9, 2016
-
-
-Android SDK:
-
-ANDROID SOFTWARE DEVELOPMENT KIT
-
-Terms and Conditions
-
-This is the Android Software Development Kit License Agreement.
-
-1. Introduction
-
-1.1 The Android Software Development Kit (referred to in this License Agreement as the "SDK" and
-specifically including the Android system files, packaged APIs, and Google APIs add-ons) is
-licensed to you subject to the terms of this License Agreement. This License Agreement forms a
-legally binding contract between you and Google in relation to your use of the SDK.
-
-1.2 "Google" means Google LLC, a Delaware company with principal place of business at 1600
-Amphitheatre Parkway, Mountain View, CA 94043, United States.
-
-2. Accepting this License Agreement
-
-2.1 In order to use the SDK, you must first agree to this License Agreement. You may not use the
-SDK if you do not accept this License Agreement.
-
-2.2 You can accept this License Agreement by:
-
-(A) clicking to accept or agree to this License Agreement, where this option is made available to
-you; or
-
-(B) by actually using the SDK. In this case, you agree that use of the SDK constitutes acceptance of
-the Licensing Agreement from that point onwards.
-
-2.3 You may not use the SDK and may not accept the Licensing Agreement if you are a person barred
-from receiving the SDK under the laws of the United States or other countries including the country
-in which you are resident or from which you use the SDK.
-
-2.4 If you are agreeing to be bound by this License Agreement on behalf of your employer or other
-entity, you represent and warrant that you have full legal authority to bind your employer or such
-entity to this License Agreement. If you do not have the requisite authority, you may not accept
-the Licensing Agreement or use the SDK on behalf of your employer or other entity.
-
-3. SDK License from Google
-
-3.1 Subject to the terms of this License Agreement, Google grants you a limited, worldwide,
-royalty-free, non- assignable and non-exclusive license to use the SDK solely to develop
-applications to run on the Android platform.
-
-3.2 You agree that Google or third parties own all legal right, title and interest in and to the
-SDK, including any Intellectual Property Rights that subsist in the SDK. "Intellectual Property
-Rights" means any and all rights under patent law, copyright law, trade secret law, trademark law,
-and any and all other proprietary rights. Google reserves all rights not expressly granted to you.
-
-3.3 Except to the extent required by applicable third party licenses, you may not copy (except for
-backup purposes), modify, adapt, redistribute, decompile, reverse engineer, disassemble, or create
-derivative works of the SDK or any part of the SDK. Except to the extent required by applicable
-third party licenses, you may not load any part of the SDK onto a mobile handset or any other
-hardware device except a personal computer, combine any part of the SDK with other software, or
-distribute any software or device incorporating a part of the SDK.
-
-3.4 Use, reproduction and distribution of components of the SDK licensed under an open source
-software license are governed solely by the terms of that open source software license and not
-this License Agreement.
-
-3.5 You agree that the form and nature of the SDK that Google provides may change without prior
-notice to you and that future versions of the SDK may be incompatible with applications developed
-on previous versions of the SDK. You agree that Google may stop (permanently or temporarily)
-providing the SDK (or any features within the SDK) to you or to users generally at Google's sole
-discretion, without prior notice to you.
-
-3.6 Nothing in this License Agreement gives you a right to use any of Google's trade names,
-trademarks, service marks, logos, domain names, or other distinctive brand features.
-
-3.7 You agree that you will not remove, obscure, or alter any proprietary rights notices (including
-copyright and trademark notices) that may be affixed to or contained within the SDK.
-
-4. Use of the SDK by You
-
-4.1 Google agrees that it obtains no right, title or interest from you (or your licensors) under
-this License Agreement in or to any software applications that you develop using the SDK, including
-any intellectual property rights that subsist in those applications.
-
-4.2 You agree to use the SDK and write applications only for purposes that are permitted by (a) this
-License Agreement and (b) any applicable law, regulation or generally accepted practices or
-guidelines in the relevant jurisdictions (including any laws regarding the export of data or
-software to and from the United States or other relevant countries).
-
-4.3 You agree that if you use the SDK to develop applications for general public users, you will
-protect the privacy and legal rights of those users. If the users provide you with user names,
-passwords, or other login information or personal information, your must make the users aware that
-the information will be available to your application, and you must provide legally adequate privacy
-notice and protection for those users. If your application stores personal or sensitive information
-provided by users, it must do so securely. If the user provides your application with Google Account
-information, your application may only use that information to access the user's Google Account
-when, and for the limited purposes for which, the user has given you permission to do so.
-
-4.4 You agree that you will not engage in any activity with the SDK, including the development or
-distribution of an application, that interferes with, disrupts, damages, or accesses in an
-unauthorized manner the servers, networks, or other properties or services of any third party
-including, but not limited to, Google or any mobile communications carrier.
-
-4.5 You agree that you are solely responsible for (and that Google has no responsibility to you or
-to any third party for) any data, content, or resources that you create, transmit or display through
-the Android platform and/or applications for the Android platform, and for the consequences of your
-actions (including any loss or damage which Google may suffer) by doing so.
-
-4.6 You agree that you are solely responsible for (and that Google has no responsibility to you or
-to any third party for) any breach of your obligations under this License Agreement, any applicable
-third party contract or Terms of Service, or any applicable law or regulation, and for the
-consequences (including any loss or damage which Google or any third party may suffer) of any such
-breach.
-
-5. Your Developer Credentials
-
-5.1 You agree that you are responsible for maintaining the confidentiality of any developer
-credentials that may be issued to you by Google or which you may choose yourself and that you will
-be solely responsible for all applications that are developed under your developer credentials.
-
-6. Privacy and Information
-
-6.1 In order to continually innovate and improve the SDK, Google may collect certain usage
-statistics from the software including but not limited to a unique identifier, associated IP
-address, version number of the software, and information on which tools and/or services in the SDK
-are being used and how they are being used. Before any of this information is collected, the SDK
-will notify you and seek your consent. If you withhold consent, the information will not be
-collected.
-
-6.2 The data collected is examined in the aggregate to improve the SDK and is maintained in
-accordance with Google's Privacy Policy.
-
-7. Third Party Applications for the Android Platform
-
-7.1 If you use the SDK to run applications developed by a third party or that access data, content
-or resources provided by a third party, you agree that Google is not responsible for those
-applications, data, content, or resources. You understand that all data, content or resources which
-you may access through such third party applications are the sole responsibility of the person from
-which they originated and that Google is not liable for any loss or damage that you may experience
-as a result of the use or access of any of those third party applications, data, content, or
-resources.
-
-7.2 You should be aware the data, content, and resources presented to you through such a third party
-application may be protected by intellectual property rights which are owned by the providers (or by
-other persons or companies on their behalf). You may not modify, rent, lease, loan, sell, distribute
-or create derivative works based on these data, content, or resources (either in whole or in part)
-unless you have been specifically given permission to do so by the relevant owners.
-
-7.3 You acknowledge that your use of such third party applications, data, content, or resources may
-be subject to separate terms between you and the relevant third party. In that case, this License
-Agreement does not affect your legal relationship with these third parties.
-
-8. Using Android APIs
-
-8.1 Google Data APIs
-
-8.1.1 If you use any API to retrieve data from Google, you acknowledge that the data may be
-protected by intellectual property rights which are owned by Google or those parties that provide
-the data (or by other persons or companies on their behalf). Your use of any such API may be subject
-to additional Terms of Service. You may not modify, rent, lease, loan, sell, distribute or create
-derivative works based on this data (either in whole or in part) unless allowed by the relevant
-Terms of Service.
-
-8.1.2 If you use any API to retrieve a user's data from Google, you acknowledge and agree that you
-shall retrieve data only with the user's explicit consent and only when, and for the limited
-purposes for which, the user has given you permission to do so.
-
-9. Terminating this License Agreement
-
-9.1 This License Agreement will continue to apply until terminated by either you or Google as set
-out below.
-
-9.2 If you want to terminate this License Agreement, you may do so by ceasing your use of the SDK
-and any relevant developer credentials.
-
-9.3 Google may at any time, terminate this License Agreement with you if:
-
-(A) you have breached any provision of this License Agreement; or
-
-(B) Google is required to do so by law; or
-
-(C) the partner with whom Google offered certain parts of SDK (such as APIs) to you has terminated
-its relationship with Google or ceased to offer certain parts of the SDK to you; or
-
-(D) Google decides to no longer providing the SDK or certain parts of the SDK to users in the
-country in which you are resident or from which you use the service, or the provision of the SDK or
-certain SDK services to you by Google is, in Google's sole discretion, no longer commercially
-viable.
-
-9.4 When this License Agreement comes to an end, all of the legal rights, obligations and
-liabilities that you and Google have benefited from, been subject to (or which have accrued over
-time whilst this License Agreement has been in force) or which are expressed to continue
-indefinitely, shall be unaffected by this cessation, and the provisions of paragraph 14.7 shall
-continue to apply to such rights, obligations and liabilities indefinitely.
-
-10. DISCLAIMER OF WARRANTIES
-
-10.1 YOU EXPRESSLY UNDERSTAND AND AGREE THAT YOUR USE OF THE SDK IS AT YOUR SOLE RISK AND THAT THE
-SDK IS PROVIDED "AS IS" AND "AS AVAILABLE" WITHOUT WARRANTY OF ANY KIND FROM GOOGLE.
-
-10.2 YOUR USE OF THE SDK AND ANY MATERIAL DOWNLOADED OR OTHERWISE OBTAINED THROUGH THE USE OF THE
-SDK IS AT YOUR OWN DISCRETION AND RISK AND YOU ARE SOLELY RESPONSIBLE FOR ANY DAMAGE TO YOUR
-COMPUTER SYSTEM OR OTHER DEVICE OR LOSS OF DATA THAT RESULTS FROM SUCH USE.
-
-10.3 GOOGLE FURTHER EXPRESSLY DISCLAIMS ALL WARRANTIES AND CONDITIONS OF ANY KIND, WHETHER EXPRESS
-OR IMPLIED, INCLUDING, BUT NOT LIMITED TO THE IMPLIED WARRANTIES AND CONDITIONS OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT.
-
-11. LIMITATION OF LIABILITY
-
-11.1 YOU EXPRESSLY UNDERSTAND AND AGREE THAT GOOGLE, ITS SUBSIDIARIES AND AFFILIATES, AND ITS
-LICENSORS SHALL NOT BE LIABLE TO YOU UNDER ANY THEORY OF LIABILITY FOR ANY DIRECT, INDIRECT,
-INCIDENTAL, SPECIAL CONSEQUENTIAL OR EXEMPLARY DAMAGES THAT MAY BE INCURRED BY YOU, INCLUDING ANY
-LOSS OF DATA, WHETHER OR NOT GOOGLE OR ITS REPRESENTATIVES HAVE BEEN ADVISED OF OR SHOULD HAVE BEEN
-AWARE OF THE POSSIBILITY OF ANY SUCH LOSSES ARISING.
-
-12. Indemnification
-
-12.1 To the maximum extent permitted by law, you agree to defend, indemnify and hold harmless
-Google, its affiliates and their respective directors, officers, employees and agents from and
-against any and all claims, actions, suits or proceedings, as well as any and all losses,
-liabilities, damages, costs and expenses (including reasonable attorneys fees) arising out of or
-accruing from (a) your use of the SDK, (b) any application you develop on the SDK that infringes any
-copyright, trademark, trade secret, trade dress, patent or other intellectual property right of any
-person or defames any person or violates their rights of publicity or privacy, and (c) any
-non-compliance by you with this License Agreement.
-
-13. Changes to the License Agreement
-
-13.1 Google may make changes to the License Agreement as it distributes new versions of the SDK.
-When these changes are made, Google will make a new version of the License Agreement available on
-the website where the SDK is made available.
-
-14. General Legal Terms
-
-14.1 This License Agreement constitute the whole legal agreement between you and Google and govern
-your use of the SDK (excluding any services which Google may provide to you under a separate written
-agreement), and completely replace any prior agreements between you and Google in relation to the
-SDK.
-
-14.2 You agree that if Google does not exercise or enforce any legal right or remedy which is
-contained in this License Agreement (or which Google has the benefit of under any applicable law),
-this will not be taken to be a formal waiver of Google's rights and that those rights or remedies
-will still be available to Google.
-
-14.3 If any court of law, having the jurisdiction to decide on this matter, rules that any provision
-of this License Agreement is invalid, then that provision will be removed from this License
-Agreement without affecting the rest of this License Agreement. The remaining provisions of this
-License Agreement will continue to be valid and enforceable.
-
-14.4 You acknowledge and agree that each member of the group of companies of which Google is the
-parent shall be third party beneficiaries to this License Agreement and that such other companies
-shall be entitled to directly enforce, and rely upon, any provision of this License Agreement that
-confers a benefit on (or rights in favor of) them. Other than this, no other person or company shall
-be third party beneficiaries to this License Agreement.
-
-14.5 EXPORT RESTRICTIONS. THE SDK IS SUBJECT TO UNITED STATES EXPORT LAWS AND REGULATIONS. YOU MUST
-COMPLY WITH ALL DOMESTIC AND INTERNATIONAL EXPORT LAWS AND REGULATIONS THAT APPLY TO THE SDK. THESE
-LAWS INCLUDE RESTRICTIONS ON DESTINATIONS, END USERS AND END USE.
-
-14.6 The rights granted in this License Agreement may not be assigned or transferred by either you
-or Google without the prior written approval of the other party. Neither you nor Google shall be
-permitted to delegate their responsibilities or obligations under this License Agreement without the
-prior written approval of the other party.
-
-14.7 This License Agreement, and your relationship with Google under this License Agreement, shall
-be governed by the laws of the State of California without regard to its conflict of laws
-provisions. You and Google agree to submit to the exclusive jurisdiction of the courts located
-within the county of Santa Clara, California to resolve any legal matter arising from this License
-Agreement. Notwithstanding this, you agree that Google shall still be allowed to apply for
-injunctive remedies (or an equivalent type of urgent legal relief) in any jurisdiction.
-
-April 10, 2009
-
-
-AndroidX activity library:
-
-
-   Copyright (c) 2005-2011, 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.
-
-   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.
-
-
-                                 Apache License
-                           Version 2.0, January 2004
-                        http://www.apache.org/licenses/
-
-   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
-
-   1. Definitions.
-
-      "License" shall mean the terms and conditions for use, reproduction,
-      and distribution as defined by Sections 1 through 9 of this document.
-
-      "Licensor" shall mean the copyright owner or entity authorized by
-      the copyright owner that is granting the License.
-
-      "Legal Entity" shall mean the union of the acting entity and all
-      other entities that control, are controlled by, or are under common
-      control with that entity. For the purposes of this definition,
-      "control" means (i) the power, direct or indirect, to cause the
-      direction or management of such entity, whether by contract or
-      otherwise, or (ii) ownership of fifty percent (50%) or more of the
-      outstanding shares, or (iii) beneficial ownership of such entity.
-
-      "You" (or "Your") shall mean an individual or Legal Entity
-      exercising permissions granted by this License.
-
-      "Source" form shall mean the preferred form for making modifications,
-      including but not limited to software source code, documentation
-      source, and configuration files.
-
-      "Object" form shall mean any form resulting from mechanical
-      transformation or translation of a Source form, including but
-      not limited to compiled object code, generated documentation,
-      and conversions to other media types.
-
-      "Work" shall mean the work of authorship, whether in Source or
-      Object form, made available under the License, as indicated by a
-      copyright notice that is included in or attached to the work
-      (an example is provided in the Appendix below).
-
-      "Derivative Works" shall mean any work, whether in Source or Object
-      form, that is based on (or derived from) the Work and for which the
-      editorial revisions, annotations, elaborations, or other modifications
-      represent, as a whole, an original work of authorship. For the purposes
-      of this License, Derivative Works shall not include works that remain
-      separable from, or merely link (or bind by name) to the interfaces of,
-      the Work and Derivative Works thereof.
-
-      "Contribution" shall mean any work of authorship, including
-      the original version of the Work and any modifications or additions
-      to that Work or Derivative Works thereof, that is intentionally
-      submitted to Licensor for inclusion in the Work by the copyright owner
-      or by an individual or Legal Entity authorized to submit on behalf of
-      the copyright owner. For the purposes of this definition, "submitted"
-      means any form of electronic, verbal, or written communication sent
-      to the Licensor or its representatives, including but not limited to
-      communication on electronic mailing lists, source code control systems,
-      and issue tracking systems that are managed by, or on behalf of, the
-      Licensor for the purpose of discussing and improving the Work, but
-      excluding communication that is conspicuously marked or otherwise
-      designated in writing by the copyright owner as "Not a Contribution."
-
-      "Contributor" shall mean Licensor and any individual or Legal Entity
-      on behalf of whom a Contribution has been received by Licensor and
-      subsequently incorporated within the Work.
-
-   2. Grant of Copyright License. Subject to the terms and conditions of
-      this License, each Contributor hereby grants to You a perpetual,
-      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
-      copyright license to reproduce, prepare Derivative Works of,
-      publicly display, publicly perform, sublicense, and distribute the
-      Work and such Derivative Works in Source or Object form.
-
-   3. Grant of Patent License. Subject to the terms and conditions of
-      this License, each Contributor hereby grants to You a perpetual,
-      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
-      (except as stated in this section) patent license to make, have made,
-      use, offer to sell, sell, import, and otherwise transfer the Work,
-      where such license applies only to those patent claims licensable
-      by such Contributor that are necessarily infringed by their
-      Contribution(s) alone or by combination of their Contribution(s)
-      with the Work to which such Contribution(s) was submitted. If You
-      institute patent litigation against any entity (including a
-      cross-claim or counterclaim in a lawsuit) alleging that the Work
-      or a Contribution incorporated within the Work constitutes direct
-      or contributory patent infringement, then any patent licenses
-      granted to You under this License for that Work shall terminate
-      as of the date such litigation is filed.
-
-   4. Redistribution. You may reproduce and distribute copies of the
-      Work or Derivative Works thereof in any medium, with or without
-      modifications, and in Source or Object form, provided that You
-      meet the following conditions:
-
-      (a) You must give any other recipients of the Work or
-          Derivative Works a copy of this License; and
-
-      (b) You must cause any modified files to carry prominent notices
-          stating that You changed the files; and
-
-      (c) You must retain, in the Source form of any Derivative Works
-          that You distribute, all copyright, patent, trademark, and
-          attribution notices from the Source form of the Work,
-          excluding those notices that do not pertain to any part of
-          the Derivative Works; and
-
-      (d) If the Work includes a "NOTICE" text file as part of its
-          distribution, then any Derivative Works that You distribute must
-          include a readable copy of the attribution notices contained
-          within such NOTICE file, excluding those notices that do not
-          pertain to any part of the Derivative Works, in at least one
-          of the following places: within a NOTICE text file distributed
-          as part of the Derivative Works; within the Source form or
-          documentation, if provided along with the Derivative Works; or,
-          within a display generated by the Derivative Works, if and
-          wherever such third-party notices normally appear. The contents
-          of the NOTICE file are for informational purposes only and
-          do not modify the License. You may add Your own attribution
-          notices within Derivative Works that You distribute, alongside
-          or as an addendum to the NOTICE text from the Work, provided
-          that such additional attribution notices cannot be construed
-          as modifying the License.
-
-      You may add Your own copyright statement to Your modifications and
-      may provide additional or different license terms and conditions
-      for use, reproduction, or distribution of Your modifications, or
-      for any such Derivative Works as a whole, provided Your use,
-      reproduction, and distribution of the Work otherwise complies with
-      the conditions stated in this License.
-
-   5. Submission of Contributions. Unless You explicitly state otherwise,
-      any Contribution intentionally submitted for inclusion in the Work
-      by You to the Licensor shall be under the terms and conditions of
-      this License, without any additional terms or conditions.
-      Notwithstanding the above, nothing herein shall supersede or modify
-      the terms of any separate license agreement you may have executed
-      with Licensor regarding such Contributions.
-
-   6. Trademarks. This License does not grant permission to use the trade
-      names, trademarks, service marks, or product names of the Licensor,
-      except as required for reasonable and customary use in describing the
-      origin of the Work and reproducing the content of the NOTICE file.
-
-   7. Disclaimer of Warranty. Unless required by applicable law or
-      agreed to in writing, Licensor provides the Work (and each
-      Contributor provides its Contributions) on an "AS IS" BASIS,
-      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
-      implied, including, without limitation, any warranties or conditions
-      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
-      PARTICULAR PURPOSE. You are solely responsible for determining the
-      appropriateness of using or redistributing the Work and assume any
-      risks associated with Your exercise of permissions under this License.
-
-   8. Limitation of Liability. In no event and under no legal theory,
-      whether in tort (including negligence), contract, or otherwise,
-      unless required by applicable law (such as deliberate and grossly
-      negligent acts) or agreed to in writing, shall any Contributor be
-      liable to You for damages, including any direct, indirect, special,
-      incidental, or consequential damages of any character arising as a
-      result of this License or out of the use or inability to use the
-      Work (including but not limited to damages for loss of goodwill,
-      work stoppage, computer failure or malfunction, or any and all
-      other commercial damages or losses), even if such Contributor
-      has been advised of the possibility of such damages.
-
-   9. Accepting Warranty or Additional Liability. While redistributing
-      the Work or Derivative Works thereof, You may choose to offer,
-      and charge a fee for, acceptance of support, warranty, indemnity,
-      or other liability obligations and/or rights consistent with this
-      License. However, in accepting such obligations, You may act only
-      on Your own behalf and on Your sole responsibility, not on behalf
-      of any other Contributor, and only if You agree to indemnify,
-      defend, and hold each Contributor harmless for any liability
-      incurred by, or claims asserted against, such Contributor by reason
-      of your accepting any such warranty or additional liability.
-
-   END OF TERMS AND CONDITIONS
-
-
-
-AndroidX annotation experimental library:
-
-
- Copyright (c) 2005-2011, 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.
-
-   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.
-
-
-                                 Apache License
-                           Version 2.0, January 2004
-                        http://www.apache.org/licenses/
-
-   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
-
-   1. Definitions.
-
-      "License" shall mean the terms and conditions for use, reproduction,
-      and distribution as defined by Sections 1 through 9 of this document.
-
-      "Licensor" shall mean the copyright owner or entity authorized by
-      the copyright owner that is granting the License.
-
-      "Legal Entity" shall mean the union of the acting entity and all
-      other entities that control, are controlled by, or are under common
-      control with that entity. For the purposes of this definition,
-      "control" means (i) the power, direct or indirect, to cause the
-      direction or management of such entity, whether by contract or
-      otherwise, or (ii) ownership of fifty percent (50%) or more of the
-      outstanding shares, or (iii) beneficial ownership of such entity.
-
-      "You" (or "Your") shall mean an individual or Legal Entity
-      exercising permissions granted by this License.
-
-      "Source" form shall mean the preferred form for making modifications,
-      including but not limited to software source code, documentation
-      source, and configuration files.
-
-      "Object" form shall mean any form resulting from mechanical
-      transformation or translation of a Source form, including but
-      not limited to compiled object code, generated documentation,
-      and conversions to other media types.
-
-      "Work" shall mean the work of authorship, whether in Source or
-      Object form, made available under the License, as indicated by a
-      copyright notice that is included in or attached to the work
-      (an example is provided in the Appendix below).
-
-      "Derivative Works" shall mean any work, whether in Source or Object
-      form, that is based on (or derived from) the Work and for which the
-      editorial revisions, annotations, elaborations, or other modifications
-      represent, as a whole, an original work of authorship. For the purposes
-      of this License, Derivative Works shall not include works that remain
-      separable from, or merely link (or bind by name) to the interfaces of,
-      the Work and Derivative Works thereof.
-
-      "Contribution" shall mean any work of authorship, including
-      the original version of the Work and any modifications or additions
-      to that Work or Derivative Works thereof, that is intentionally
-      submitted to Licensor for inclusion in the Work by the copyright owner
-      or by an individual or Legal Entity authorized to submit on behalf of
-      the copyright owner. For the purposes of this definition, "submitted"
-      means any form of electronic, verbal, or written communication sent
-      to the Licensor or its representatives, including but not limited to
-      communication on electronic mailing lists, source code control systems,
-      and issue tracking systems that are managed by, or on behalf of, the
-      Licensor for the purpose of discussing and improving the Work, but
-      excluding communication that is conspicuously marked or otherwise
-      designated in writing by the copyright owner as "Not a Contribution."
-
-      "Contributor" shall mean Licensor and any individual or Legal Entity
-      on behalf of whom a Contribution has been received by Licensor and
-      subsequently incorporated within the Work.
-
-   2. Grant of Copyright License. Subject to the terms and conditions of
-      this License, each Contributor hereby grants to You a perpetual,
-      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
-      copyright license to reproduce, prepare Derivative Works of,
-      publicly display, publicly perform, sublicense, and distribute the
-      Work and such Derivative Works in Source or Object form.
-
-   3. Grant of Patent License. Subject to the terms and conditions of
-      this License, each Contributor hereby grants to You a perpetual,
-      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
-      (except as stated in this section) patent license to make, have made,
-      use, offer to sell, sell, import, and otherwise transfer the Work,
-      where such license applies only to those patent claims licensable
-      by such Contributor that are necessarily infringed by their
-      Contribution(s) alone or by combination of their Contribution(s)
-      with the Work to which such Contribution(s) was submitted. If You
-      institute patent litigation against any entity (including a
-      cross-claim or counterclaim in a lawsuit) alleging that the Work
-      or a Contribution incorporated within the Work constitutes direct
-      or contributory patent infringement, then any patent licenses
-      granted to You under this License for that Work shall terminate
-      as of the date such litigation is filed.
-
-   4. Redistribution. You may reproduce and distribute copies of the
-      Work or Derivative Works thereof in any medium, with or without
-      modifications, and in Source or Object form, provided that You
-      meet the following conditions:
-
-      (a) You must give any other recipients of the Work or
-          Derivative Works a copy of this License; and
-
-      (b) You must cause any modified files to carry prominent notices
-          stating that You changed the files; and
-
-      (c) You must retain, in the Source form of any Derivative Works
-          that You distribute, all copyright, patent, trademark, and
-          attribution notices from the Source form of the Work,
-          excluding those notices that do not pertain to any part of
-          the Derivative Works; and
-
-      (d) If the Work includes a "NOTICE" text file as part of its
-          distribution, then any Derivative Works that You distribute must
-          include a readable copy of the attribution notices contained
-          within such NOTICE file, excluding those notices that do not
-          pertain to any part of the Derivative Works, in at least one
-          of the following places: within a NOTICE text file distributed
-          as part of the Derivative Works; within the Source form or
-          documentation, if provided along with the Derivative Works; or,
-          within a display generated by the Derivative Works, if and
-          wherever such third-party notices normally appear. The contents
-          of the NOTICE file are for informational purposes only and
-          do not modify the License. You may add Your own attribution
-          notices within Derivative Works that You distribute, alongside
-          or as an addendum to the NOTICE text from the Work, provided
-          that such additional attribution notices cannot be construed
-          as modifying the License.
-
-      You may add Your own copyright statement to Your modifications and
-      may provide additional or different license terms and conditions
-      for use, reproduction, or distribution of Your modifications, or
-      for any such Derivative Works as a whole, provided Your use,
-      reproduction, and distribution of the Work otherwise complies with
-      the conditions stated in this License.
-
-   5. Submission of Contributions. Unless You explicitly state otherwise,
-      any Contribution intentionally submitted for inclusion in the Work
-      by You to the Licensor shall be under the terms and conditions of
-      this License, without any additional terms or conditions.
-      Notwithstanding the above, nothing herein shall supersede or modify
-      the terms of any separate license agreement you may have executed
-      with Licensor regarding such Contributions.
-
-   6. Trademarks. This License does not grant permission to use the trade
-      names, trademarks, service marks, or product names of the Licensor,
-      except as required for reasonable and customary use in describing the
-      origin of the Work and reproducing the content of the NOTICE file.
-
-   7. Disclaimer of Warranty. Unless required by applicable law or
-      agreed to in writing, Licensor provides the Work (and each
-      Contributor provides its Contributions) on an "AS IS" BASIS,
-      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
-      implied, including, without limitation, any warranties or conditions
-      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
-      PARTICULAR PURPOSE. You are solely responsible for determining the
-      appropriateness of using or redistributing the Work and assume any
-      risks associated with Your exercise of permissions under this License.
-
-   8. Limitation of Liability. In no event and under no legal theory,
-      whether in tort (including negligence), contract, or otherwise,
-      unless required by applicable law (such as deliberate and grossly
-      negligent acts) or agreed to in writing, shall any Contributor be
-      liable to You for damages, including any direct, indirect, special,
-      incidental, or consequential damages of any character arising as a
-      result of this License or out of the use or inability to use the
-      Work (including but not limited to damages for loss of goodwill,
-      work stoppage, computer failure or malfunction, or any and all
-      other commercial damages or losses), even if such Contributor
-      has been advised of the possibility of such damages.
-
-   9. Accepting Warranty or Additional Liability. While redistributing
-      the Work or Derivative Works thereof, You may choose to offer,
-      and charge a fee for, acceptance of support, warranty, indemnity,
-      or other liability obligations and/or rights consistent with this
-      License. However, in accepting such obligations, You may act only
-      on Your own behalf and on Your sole responsibility, not on behalf
-      of any other Contributor, and only if You agree to indemnify,
-      defend, and hold each Contributor harmless for any liability
-      incurred by, or claims asserted against, such Contributor by reason
-      of your accepting any such warranty or additional liability.
-
-   END OF TERMS AND CONDITIONS
-
-AndroidX annotation library:
-
-
-   Copyright (c) 2005-2011, 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.
-
-   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.
-
-
-                                 Apache License
-                           Version 2.0, January 2004
-                        http://www.apache.org/licenses/
-
-   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
-
-   1. Definitions.
-
-      "License" shall mean the terms and conditions for use, reproduction,
-      and distribution as defined by Sections 1 through 9 of this document.
-
-      "Licensor" shall mean the copyright owner or entity authorized by
-      the copyright owner that is granting the License.
-
-      "Legal Entity" shall mean the union of the acting entity and all
-      other entities that control, are controlled by, or are under common
-      control with that entity. For the purposes of this definition,
-      "control" means (i) the power, direct or indirect, to cause the
-      direction or management of such entity, whether by contract or
-      otherwise, or (ii) ownership of fifty percent (50%) or more of the
-      outstanding shares, or (iii) beneficial ownership of such entity.
-
-      "You" (or "Your") shall mean an individual or Legal Entity
-      exercising permissions granted by this License.
-
-      "Source" form shall mean the preferred form for making modifications,
-      including but not limited to software source code, documentation
-      source, and configuration files.
-
-      "Object" form shall mean any form resulting from mechanical
-      transformation or translation of a Source form, including but
-      not limited to compiled object code, generated documentation,
-      and conversions to other media types.
-
-      "Work" shall mean the work of authorship, whether in Source or
-      Object form, made available under the License, as indicated by a
-      copyright notice that is included in or attached to the work
-      (an example is provided in the Appendix below).
-
-      "Derivative Works" shall mean any work, whether in Source or Object
-      form, that is based on (or derived from) the Work and for which the
-      editorial revisions, annotations, elaborations, or other modifications
-      represent, as a whole, an original work of authorship. For the purposes
-      of this License, Derivative Works shall not include works that remain
-      separable from, or merely link (or bind by name) to the interfaces of,
-      the Work and Derivative Works thereof.
-
-      "Contribution" shall mean any work of authorship, including
-      the original version of the Work and any modifications or additions
-      to that Work or Derivative Works thereof, that is intentionally
-      submitted to Licensor for inclusion in the Work by the copyright owner
-      or by an individual or Legal Entity authorized to submit on behalf of
-      the copyright owner. For the purposes of this definition, "submitted"
-      means any form of electronic, verbal, or written communication sent
-      to the Licensor or its representatives, including but not limited to
-      communication on electronic mailing lists, source code control systems,
-      and issue tracking systems that are managed by, or on behalf of, the
-      Licensor for the purpose of discussing and improving the Work, but
-      excluding communication that is conspicuously marked or otherwise
-      designated in writing by the copyright owner as "Not a Contribution."
-
-      "Contributor" shall mean Licensor and any individual or Legal Entity
-      on behalf of whom a Contribution has been received by Licensor and
-      subsequently incorporated within the Work.
-
-   2. Grant of Copyright License. Subject to the terms and conditions of
-      this License, each Contributor hereby grants to You a perpetual,
-      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
-      copyright license to reproduce, prepare Derivative Works of,
-      publicly display, publicly perform, sublicense, and distribute the
-      Work and such Derivative Works in Source or Object form.
-
-   3. Grant of Patent License. Subject to the terms and conditions of
-      this License, each Contributor hereby grants to You a perpetual,
-      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
-      (except as stated in this section) patent license to make, have made,
-      use, offer to sell, sell, import, and otherwise transfer the Work,
-      where such license applies only to those patent claims licensable
-      by such Contributor that are necessarily infringed by their
-      Contribution(s) alone or by combination of their Contribution(s)
-      with the Work to which such Contribution(s) was submitted. If You
-      institute patent litigation against any entity (including a
-      cross-claim or counterclaim in a lawsuit) alleging that the Work
-      or a Contribution incorporated within the Work constitutes direct
-      or contributory patent infringement, then any patent licenses
-      granted to You under this License for that Work shall terminate
-      as of the date such litigation is filed.
-
-   4. Redistribution. You may reproduce and distribute copies of the
-      Work or Derivative Works thereof in any medium, with or without
-      modifications, and in Source or Object form, provided that You
-      meet the following conditions:
-
-      (a) You must give any other recipients of the Work or
-          Derivative Works a copy of this License; and
-
-      (b) You must cause any modified files to carry prominent notices
-          stating that You changed the files; and
-
-      (c) You must retain, in the Source form of any Derivative Works
-          that You distribute, all copyright, patent, trademark, and
-          attribution notices from the Source form of the Work,
-          excluding those notices that do not pertain to any part of
-          the Derivative Works; and
-
-      (d) If the Work includes a "NOTICE" text file as part of its
-          distribution, then any Derivative Works that You distribute must
-          include a readable copy of the attribution notices contained
-          within such NOTICE file, excluding those notices that do not
-          pertain to any part of the Derivative Works, in at least one
-          of the following places: within a NOTICE text file distributed
-          as part of the Derivative Works; within the Source form or
-          documentation, if provided along with the Derivative Works; or,
-          within a display generated by the Derivative Works, if and
-          wherever such third-party notices normally appear. The contents
-          of the NOTICE file are for informational purposes only and
-          do not modify the License. You may add Your own attribution
-          notices within Derivative Works that You distribute, alongside
-          or as an addendum to the NOTICE text from the Work, provided
-          that such additional attribution notices cannot be construed
-          as modifying the License.
-
-      You may add Your own copyright statement to Your modifications and
-      may provide additional or different license terms and conditions
-      for use, reproduction, or distribution of Your modifications, or
-      for any such Derivative Works as a whole, provided Your use,
-      reproduction, and distribution of the Work otherwise complies with
-      the conditions stated in this License.
-
-   5. Submission of Contributions. Unless You explicitly state otherwise,
-      any Contribution intentionally submitted for inclusion in the Work
-      by You to the Licensor shall be under the terms and conditions of
-      this License, without any additional terms or conditions.
-      Notwithstanding the above, nothing herein shall supersede or modify
-      the terms of any separate license agreement you may have executed
-      with Licensor regarding such Contributions.
-
-   6. Trademarks. This License does not grant permission to use the trade
-      names, trademarks, service marks, or product names of the Licensor,
-      except as required for reasonable and customary use in describing the
-      origin of the Work and reproducing the content of the NOTICE file.
-
-   7. Disclaimer of Warranty. Unless required by applicable law or
-      agreed to in writing, Licensor provides the Work (and each
-      Contributor provides its Contributions) on an "AS IS" BASIS,
-      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
-      implied, including, without limitation, any warranties or conditions
-      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
-      PARTICULAR PURPOSE. You are solely responsible for determining the
-      appropriateness of using or redistributing the Work and assume any
-      risks associated with Your exercise of permissions under this License.
-
-   8. Limitation of Liability. In no event and under no legal theory,
-      whether in tort (including negligence), contract, or otherwise,
-      unless required by applicable law (such as deliberate and grossly
-      negligent acts) or agreed to in writing, shall any Contributor be
-      liable to You for damages, including any direct, indirect, special,
-      incidental, or consequential damages of any character arising as a
-      result of this License or out of the use or inability to use the
-      Work (including but not limited to damages for loss of goodwill,
-      work stoppage, computer failure or malfunction, or any and all
-      other commercial damages or losses), even if such Contributor
-      has been advised of the possibility of such damages.
-
-   9. Accepting Warranty or Additional Liability. While redistributing
-      the Work or Derivative Works thereof, You may choose to offer,
-      and charge a fee for, acceptance of support, warranty, indemnity,
-      or other liability obligations and/or rights consistent with this
-      License. However, in accepting such obligations, You may act only
-      on Your own behalf and on Your sole responsibility, not on behalf
-      of any other Contributor, and only if You agree to indemnify,
-      defend, and hold each Contributor harmless for any liability
-      incurred by, or claims asserted against, such Contributor by reason
-      of your accepting any such warranty or additional liability.
-
-   END OF TERMS AND CONDITIONS
-
-
-
-AndroidX architecture core common library:
-
-
-   Copyright (c) 2005-2011, 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.
-
-   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.
-
-
-                                 Apache License
-                           Version 2.0, January 2004
-                        http://www.apache.org/licenses/
-
-   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
-
-   1. Definitions.
-
-      "License" shall mean the terms and conditions for use, reproduction,
-      and distribution as defined by Sections 1 through 9 of this document.
-
-      "Licensor" shall mean the copyright owner or entity authorized by
-      the copyright owner that is granting the License.
-
-      "Legal Entity" shall mean the union of the acting entity and all
-      other entities that control, are controlled by, or are under common
-      control with that entity. For the purposes of this definition,
-      "control" means (i) the power, direct or indirect, to cause the
-      direction or management of such entity, whether by contract or
-      otherwise, or (ii) ownership of fifty percent (50%) or more of the
-      outstanding shares, or (iii) beneficial ownership of such entity.
-
-      "You" (or "Your") shall mean an individual or Legal Entity
-      exercising permissions granted by this License.
-
-      "Source" form shall mean the preferred form for making modifications,
-      including but not limited to software source code, documentation
-      source, and configuration files.
-
-      "Object" form shall mean any form resulting from mechanical
-      transformation or translation of a Source form, including but
-      not limited to compiled object code, generated documentation,
-      and conversions to other media types.
-
-      "Work" shall mean the work of authorship, whether in Source or
-      Object form, made available under the License, as indicated by a
-      copyright notice that is included in or attached to the work
-      (an example is provided in the Appendix below).
-
-      "Derivative Works" shall mean any work, whether in Source or Object
-      form, that is based on (or derived from) the Work and for which the
-      editorial revisions, annotations, elaborations, or other modifications
-      represent, as a whole, an original work of authorship. For the purposes
-      of this License, Derivative Works shall not include works that remain
-      separable from, or merely link (or bind by name) to the interfaces of,
-      the Work and Derivative Works thereof.
-
-      "Contribution" shall mean any work of authorship, including
-      the original version of the Work and any modifications or additions
-      to that Work or Derivative Works thereof, that is intentionally
-      submitted to Licensor for inclusion in the Work by the copyright owner
-      or by an individual or Legal Entity authorized to submit on behalf of
-      the copyright owner. For the purposes of this definition, "submitted"
-      means any form of electronic, verbal, or written communication sent
-      to the Licensor or its representatives, including but not limited to
-      communication on electronic mailing lists, source code control systems,
-      and issue tracking systems that are managed by, or on behalf of, the
-      Licensor for the purpose of discussing and improving the Work, but
-      excluding communication that is conspicuously marked or otherwise
-      designated in writing by the copyright owner as "Not a Contribution."
-
-      "Contributor" shall mean Licensor and any individual or Legal Entity
-      on behalf of whom a Contribution has been received by Licensor and
-      subsequently incorporated within the Work.
-
-   2. Grant of Copyright License. Subject to the terms and conditions of
-      this License, each Contributor hereby grants to You a perpetual,
-      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
-      copyright license to reproduce, prepare Derivative Works of,
-      publicly display, publicly perform, sublicense, and distribute the
-      Work and such Derivative Works in Source or Object form.
-
-   3. Grant of Patent License. Subject to the terms and conditions of
-      this License, each Contributor hereby grants to You a perpetual,
-      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
-      (except as stated in this section) patent license to make, have made,
-      use, offer to sell, sell, import, and otherwise transfer the Work,
-      where such license applies only to those patent claims licensable
-      by such Contributor that are necessarily infringed by their
-      Contribution(s) alone or by combination of their Contribution(s)
-      with the Work to which such Contribution(s) was submitted. If You
-      institute patent litigation against any entity (including a
-      cross-claim or counterclaim in a lawsuit) alleging that the Work
-      or a Contribution incorporated within the Work constitutes direct
-      or contributory patent infringement, then any patent licenses
-      granted to You under this License for that Work shall terminate
-      as of the date such litigation is filed.
-
-   4. Redistribution. You may reproduce and distribute copies of the
-      Work or Derivative Works thereof in any medium, with or without
-      modifications, and in Source or Object form, provided that You
-      meet the following conditions:
-
-      (a) You must give any other recipients of the Work or
-          Derivative Works a copy of this License; and
-
-      (b) You must cause any modified files to carry prominent notices
-          stating that You changed the files; and
-
-      (c) You must retain, in the Source form of any Derivative Works
-          that You distribute, all copyright, patent, trademark, and
-          attribution notices from the Source form of the Work,
-          excluding those notices that do not pertain to any part of
-          the Derivative Works; and
-
-      (d) If the Work includes a "NOTICE" text file as part of its
-          distribution, then any Derivative Works that You distribute must
-          include a readable copy of the attribution notices contained
-          within such NOTICE file, excluding those notices that do not
-          pertain to any part of the Derivative Works, in at least one
-          of the following places: within a NOTICE text file distributed
-          as part of the Derivative Works; within the Source form or
-          documentation, if provided along with the Derivative Works; or,
-          within a display generated by the Derivative Works, if and
-          wherever such third-party notices normally appear. The contents
-          of the NOTICE file are for informational purposes only and
-          do not modify the License. You may add Your own attribution
-          notices within Derivative Works that You distribute, alongside
-          or as an addendum to the NOTICE text from the Work, provided
-          that such additional attribution notices cannot be construed
-          as modifying the License.
-
-      You may add Your own copyright statement to Your modifications and
-      may provide additional or different license terms and conditions
-      for use, reproduction, or distribution of Your modifications, or
-      for any such Derivative Works as a whole, provided Your use,
-      reproduction, and distribution of the Work otherwise complies with
-      the conditions stated in this License.
-
-   5. Submission of Contributions. Unless You explicitly state otherwise,
-      any Contribution intentionally submitted for inclusion in the Work
-      by You to the Licensor shall be under the terms and conditions of
-      this License, without any additional terms or conditions.
-      Notwithstanding the above, nothing herein shall supersede or modify
-      the terms of any separate license agreement you may have executed
-      with Licensor regarding such Contributions.
-
-   6. Trademarks. This License does not grant permission to use the trade
-      names, trademarks, service marks, or product names of the Licensor,
-      except as required for reasonable and customary use in describing the
-      origin of the Work and reproducing the content of the NOTICE file.
-
-   7. Disclaimer of Warranty. Unless required by applicable law or
-      agreed to in writing, Licensor provides the Work (and each
-      Contributor provides its Contributions) on an "AS IS" BASIS,
-      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
-      implied, including, without limitation, any warranties or conditions
-      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
-      PARTICULAR PURPOSE. You are solely responsible for determining the
-      appropriateness of using or redistributing the Work and assume any
-      risks associated with Your exercise of permissions under this License.
-
-   8. Limitation of Liability. In no event and under no legal theory,
-      whether in tort (including negligence), contract, or otherwise,
-      unless required by applicable law (such as deliberate and grossly
-      negligent acts) or agreed to in writing, shall any Contributor be
-      liable to You for damages, including any direct, indirect, special,
-      incidental, or consequential damages of any character arising as a
-      result of this License or out of the use or inability to use the
-      Work (including but not limited to damages for loss of goodwill,
-      work stoppage, computer failure or malfunction, or any and all
-      other commercial damages or losses), even if such Contributor
-      has been advised of the possibility of such damages.
-
-   9. Accepting Warranty or Additional Liability. While redistributing
-      the Work or Derivative Works thereof, You may choose to offer,
-      and charge a fee for, acceptance of support, warranty, indemnity,
-      or other liability obligations and/or rights consistent with this
-      License. However, in accepting such obligations, You may act only
-      on Your own behalf and on Your sole responsibility, not on behalf
-      of any other Contributor, and only if You agree to indemnify,
-      defend, and hold each Contributor harmless for any liability
-      incurred by, or claims asserted against, such Contributor by reason
-      of your accepting any such warranty or additional liability.
-
-   END OF TERMS AND CONDITIONS
-
-
-AndroidX architecture core runtime library:
-
-
-   Copyright (c) 2005-2011, 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.
-
-   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.
-
-
-                                 Apache License
-                           Version 2.0, January 2004
-                        http://www.apache.org/licenses/
-
-   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
-
-   1. Definitions.
-
-      "License" shall mean the terms and conditions for use, reproduction,
-      and distribution as defined by Sections 1 through 9 of this document.
-
-      "Licensor" shall mean the copyright owner or entity authorized by
-      the copyright owner that is granting the License.
-
-      "Legal Entity" shall mean the union of the acting entity and all
-      other entities that control, are controlled by, or are under common
-      control with that entity. For the purposes of this definition,
-      "control" means (i) the power, direct or indirect, to cause the
-      direction or management of such entity, whether by contract or
-      otherwise, or (ii) ownership of fifty percent (50%) or more of the
-      outstanding shares, or (iii) beneficial ownership of such entity.
-
-      "You" (or "Your") shall mean an individual or Legal Entity
-      exercising permissions granted by this License.
-
-      "Source" form shall mean the preferred form for making modifications,
-      including but not limited to software source code, documentation
-      source, and configuration files.
-
-      "Object" form shall mean any form resulting from mechanical
-      transformation or translation of a Source form, including but
-      not limited to compiled object code, generated documentation,
-      and conversions to other media types.
-
-      "Work" shall mean the work of authorship, whether in Source or
-      Object form, made available under the License, as indicated by a
-      copyright notice that is included in or attached to the work
-      (an example is provided in the Appendix below).
-
-      "Derivative Works" shall mean any work, whether in Source or Object
-      form, that is based on (or derived from) the Work and for which the
-      editorial revisions, annotations, elaborations, or other modifications
-      represent, as a whole, an original work of authorship. For the purposes
-      of this License, Derivative Works shall not include works that remain
-      separable from, or merely link (or bind by name) to the interfaces of,
-      the Work and Derivative Works thereof.
-
-      "Contribution" shall mean any work of authorship, including
-      the original version of the Work and any modifications or additions
-      to that Work or Derivative Works thereof, that is intentionally
-      submitted to Licensor for inclusion in the Work by the copyright owner
-      or by an individual or Legal Entity authorized to submit on behalf of
-      the copyright owner. For the purposes of this definition, "submitted"
-      means any form of electronic, verbal, or written communication sent
-      to the Licensor or its representatives, including but not limited to
-      communication on electronic mailing lists, source code control systems,
-      and issue tracking systems that are managed by, or on behalf of, the
-      Licensor for the purpose of discussing and improving the Work, but
-      excluding communication that is conspicuously marked or otherwise
-      designated in writing by the copyright owner as "Not a Contribution."
-
-      "Contributor" shall mean Licensor and any individual or Legal Entity
-      on behalf of whom a Contribution has been received by Licensor and
-      subsequently incorporated within the Work.
-
-   2. Grant of Copyright License. Subject to the terms and conditions of
-      this License, each Contributor hereby grants to You a perpetual,
-      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
-      copyright license to reproduce, prepare Derivative Works of,
-      publicly display, publicly perform, sublicense, and distribute the
-      Work and such Derivative Works in Source or Object form.
-
-   3. Grant of Patent License. Subject to the terms and conditions of
-      this License, each Contributor hereby grants to You a perpetual,
-      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
-      (except as stated in this section) patent license to make, have made,
-      use, offer to sell, sell, import, and otherwise transfer the Work,
-      where such license applies only to those patent claims licensable
-      by such Contributor that are necessarily infringed by their
-      Contribution(s) alone or by combination of their Contribution(s)
-      with the Work to which such Contribution(s) was submitted. If You
-      institute patent litigation against any entity (including a
-      cross-claim or counterclaim in a lawsuit) alleging that the Work
-      or a Contribution incorporated within the Work constitutes direct
-      or contributory patent infringement, then any patent licenses
-      granted to You under this License for that Work shall terminate
-      as of the date such litigation is filed.
-
-   4. Redistribution. You may reproduce and distribute copies of the
-      Work or Derivative Works thereof in any medium, with or without
-      modifications, and in Source or Object form, provided that You
-      meet the following conditions:
-
-      (a) You must give any other recipients of the Work or
-          Derivative Works a copy of this License; and
-
-      (b) You must cause any modified files to carry prominent notices
-          stating that You changed the files; and
-
-      (c) You must retain, in the Source form of any Derivative Works
-          that You distribute, all copyright, patent, trademark, and
-          attribution notices from the Source form of the Work,
-          excluding those notices that do not pertain to any part of
-          the Derivative Works; and
-
-      (d) If the Work includes a "NOTICE" text file as part of its
-          distribution, then any Derivative Works that You distribute must
-          include a readable copy of the attribution notices contained
-          within such NOTICE file, excluding those notices that do not
-          pertain to any part of the Derivative Works, in at least one
-          of the following places: within a NOTICE text file distributed
-          as part of the Derivative Works; within the Source form or
-          documentation, if provided along with the Derivative Works; or,
-          within a display generated by the Derivative Works, if and
-          wherever such third-party notices normally appear. The contents
-          of the NOTICE file are for informational purposes only and
-          do not modify the License. You may add Your own attribution
-          notices within Derivative Works that You distribute, alongside
-          or as an addendum to the NOTICE text from the Work, provided
-          that such additional attribution notices cannot be construed
-          as modifying the License.
-
-      You may add Your own copyright statement to Your modifications and
-      may provide additional or different license terms and conditions
-      for use, reproduction, or distribution of Your modifications, or
-      for any such Derivative Works as a whole, provided Your use,
-      reproduction, and distribution of the Work otherwise complies with
-      the conditions stated in this License.
-
-   5. Submission of Contributions. Unless You explicitly state otherwise,
-      any Contribution intentionally submitted for inclusion in the Work
-      by You to the Licensor shall be under the terms and conditions of
-      this License, without any additional terms or conditions.
-      Notwithstanding the above, nothing herein shall supersede or modify
-      the terms of any separate license agreement you may have executed
-      with Licensor regarding such Contributions.
-
-   6. Trademarks. This License does not grant permission to use the trade
-      names, trademarks, service marks, or product names of the Licensor,
-      except as required for reasonable and customary use in describing the
-      origin of the Work and reproducing the content of the NOTICE file.
-
-   7. Disclaimer of Warranty. Unless required by applicable law or
-      agreed to in writing, Licensor provides the Work (and each
-      Contributor provides its Contributions) on an "AS IS" BASIS,
-      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
-      implied, including, without limitation, any warranties or conditions
-      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
-      PARTICULAR PURPOSE. You are solely responsible for determining the
-      appropriateness of using or redistributing the Work and assume any
-      risks associated with Your exercise of permissions under this License.
-
-   8. Limitation of Liability. In no event and under no legal theory,
-      whether in tort (including negligence), contract, or otherwise,
-      unless required by applicable law (such as deliberate and grossly
-      negligent acts) or agreed to in writing, shall any Contributor be
-      liable to You for damages, including any direct, indirect, special,
-      incidental, or consequential damages of any character arising as a
-      result of this License or out of the use or inability to use the
-      Work (including but not limited to damages for loss of goodwill,
-      work stoppage, computer failure or malfunction, or any and all
-      other commercial damages or losses), even if such Contributor
-      has been advised of the possibility of such damages.
-
-   9. Accepting Warranty or Additional Liability. While redistributing
-      the Work or Derivative Works thereof, You may choose to offer,
-      and charge a fee for, acceptance of support, warranty, indemnity,
-      or other liability obligations and/or rights consistent with this
-      License. However, in accepting such obligations, You may act only
-      on Your own behalf and on Your sole responsibility, not on behalf
-      of any other Contributor, and only if You agree to indemnify,
-      defend, and hold each Contributor harmless for any liability
-      incurred by, or claims asserted against, such Contributor by reason
-      of your accepting any such warranty or additional liability.
-
-   END OF TERMS AND CONDITIONS
-
-
-AndroidX asynclayoutinflater library:
-
-   Copyright (c) 2005-2011, 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.
-
-   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.
-
-
-                                 Apache License
-                           Version 2.0, January 2004
-                        http://www.apache.org/licenses/
-
-   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
-
-   1. Definitions.
-
-      "License" shall mean the terms and conditions for use, reproduction,
-      and distribution as defined by Sections 1 through 9 of this document.
-
-      "Licensor" shall mean the copyright owner or entity authorized by
-      the copyright owner that is granting the License.
-
-      "Legal Entity" shall mean the union of the acting entity and all
-      other entities that control, are controlled by, or are under common
-      control with that entity. For the purposes of this definition,
-      "control" means (i) the power, direct or indirect, to cause the
-      direction or management of such entity, whether by contract or
-      otherwise, or (ii) ownership of fifty percent (50%) or more of the
-      outstanding shares, or (iii) beneficial ownership of such entity.
-
-      "You" (or "Your") shall mean an individual or Legal Entity
-      exercising permissions granted by this License.
-
-      "Source" form shall mean the preferred form for making modifications,
-      including but not limited to software source code, documentation
-      source, and configuration files.
-
-      "Object" form shall mean any form resulting from mechanical
-      transformation or translation of a Source form, including but
-      not limited to compiled object code, generated documentation,
-      and conversions to other media types.
-
-      "Work" shall mean the work of authorship, whether in Source or
-      Object form, made available under the License, as indicated by a
-      copyright notice that is included in or attached to the work
-      (an example is provided in the Appendix below).
-
-      "Derivative Works" shall mean any work, whether in Source or Object
-      form, that is based on (or derived from) the Work and for which the
-      editorial revisions, annotations, elaborations, or other modifications
-      represent, as a whole, an original work of authorship. For the purposes
-      of this License, Derivative Works shall not include works that remain
-      separable from, or merely link (or bind by name) to the interfaces of,
-      the Work and Derivative Works thereof.
-
-      "Contribution" shall mean any work of authorship, including
-      the original version of the Work and any modifications or additions
-      to that Work or Derivative Works thereof, that is intentionally
-      submitted to Licensor for inclusion in the Work by the copyright owner
-      or by an individual or Legal Entity authorized to submit on behalf of
-      the copyright owner. For the purposes of this definition, "submitted"
-      means any form of electronic, verbal, or written communication sent
-      to the Licensor or its representatives, including but not limited to
-      communication on electronic mailing lists, source code control systems,
-      and issue tracking systems that are managed by, or on behalf of, the
-      Licensor for the purpose of discussing and improving the Work, but
-      excluding communication that is conspicuously marked or otherwise
-      designated in writing by the copyright owner as "Not a Contribution."
-
-      "Contributor" shall mean Licensor and any individual or Legal Entity
-      on behalf of whom a Contribution has been received by Licensor and
-      subsequently incorporated within the Work.
-
-   2. Grant of Copyright License. Subject to the terms and conditions of
-      this License, each Contributor hereby grants to You a perpetual,
-      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
-      copyright license to reproduce, prepare Derivative Works of,
-      publicly display, publicly perform, sublicense, and distribute the
-      Work and such Derivative Works in Source or Object form.
-
-   3. Grant of Patent License. Subject to the terms and conditions of
-      this License, each Contributor hereby grants to You a perpetual,
-      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
-      (except as stated in this section) patent license to make, have made,
-      use, offer to sell, sell, import, and otherwise transfer the Work,
-      where such license applies only to those patent claims licensable
-      by such Contributor that are necessarily infringed by their
-      Contribution(s) alone or by combination of their Contribution(s)
-      with the Work to which such Contribution(s) was submitted. If You
-      institute patent litigation against any entity (including a
-      cross-claim or counterclaim in a lawsuit) alleging that the Work
-      or a Contribution incorporated within the Work constitutes direct
-      or contributory patent infringement, then any patent licenses
-      granted to You under this License for that Work shall terminate
-      as of the date such litigation is filed.
-
-   4. Redistribution. You may reproduce and distribute copies of the
-      Work or Derivative Works thereof in any medium, with or without
-      modifications, and in Source or Object form, provided that You
-      meet the following conditions:
-
-      (a) You must give any other recipients of the Work or
-          Derivative Works a copy of this License; and
-
-      (b) You must cause any modified files to carry prominent notices
-          stating that You changed the files; and
-
-      (c) You must retain, in the Source form of any Derivative Works
-          that You distribute, all copyright, patent, trademark, and
-          attribution notices from the Source form of the Work,
-          excluding those notices that do not pertain to any part of
-          the Derivative Works; and
-
-      (d) If the Work includes a "NOTICE" text file as part of its
-          distribution, then any Derivative Works that You distribute must
-          include a readable copy of the attribution notices contained
-          within such NOTICE file, excluding those notices that do not
-          pertain to any part of the Derivative Works, in at least one
-          of the following places: within a NOTICE text file distributed
-          as part of the Derivative Works; within the Source form or
-          documentation, if provided along with the Derivative Works; or,
-          within a display generated by the Derivative Works, if and
-          wherever such third-party notices normally appear. The contents
-          of the NOTICE file are for informational purposes only and
-          do not modify the License. You may add Your own attribution
-          notices within Derivative Works that You distribute, alongside
-          or as an addendum to the NOTICE text from the Work, provided
-          that such additional attribution notices cannot be construed
-          as modifying the License.
-
-      You may add Your own copyright statement to Your modifications and
-      may provide additional or different license terms and conditions
-      for use, reproduction, or distribution of Your modifications, or
-      for any such Derivative Works as a whole, provided Your use,
-      reproduction, and distribution of the Work otherwise complies with
-      the conditions stated in this License.
-
-   5. Submission of Contributions. Unless You explicitly state otherwise,
-      any Contribution intentionally submitted for inclusion in the Work
-      by You to the Licensor shall be under the terms and conditions of
-      this License, without any additional terms or conditions.
-      Notwithstanding the above, nothing herein shall supersede or modify
-      the terms of any separate license agreement you may have executed
-      with Licensor regarding such Contributions.
-
-   6. Trademarks. This License does not grant permission to use the trade
-      names, trademarks, service marks, or product names of the Licensor,
-      except as required for reasonable and customary use in describing the
-      origin of the Work and reproducing the content of the NOTICE file.
-
-   7. Disclaimer of Warranty. Unless required by applicable law or
-      agreed to in writing, Licensor provides the Work (and each
-      Contributor provides its Contributions) on an "AS IS" BASIS,
-      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
-      implied, including, without limitation, any warranties or conditions
-      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
-      PARTICULAR PURPOSE. You are solely responsible for determining the
-      appropriateness of using or redistributing the Work and assume any
-      risks associated with Your exercise of permissions under this License.
-
-   8. Limitation of Liability. In no event and under no legal theory,
-      whether in tort (including negligence), contract, or otherwise,
-      unless required by applicable law (such as deliberate and grossly
-      negligent acts) or agreed to in writing, shall any Contributor be
-      liable to You for damages, including any direct, indirect, special,
-      incidental, or consequential damages of any character arising as a
-      result of this License or out of the use or inability to use the
-      Work (including but not limited to damages for loss of goodwill,
-      work stoppage, computer failure or malfunction, or any and all
-      other commercial damages or losses), even if such Contributor
-      has been advised of the possibility of such damages.
-
-   9. Accepting Warranty or Additional Liability. While redistributing
-      the Work or Derivative Works thereof, You may choose to offer,
-      and charge a fee for, acceptance of support, warranty, indemnity,
-      or other liability obligations and/or rights consistent with this
-      License. However, in accepting such obligations, You may act only
-      on Your own behalf and on Your sole responsibility, not on behalf
-      of any other Contributor, and only if You agree to indemnify,
-      defend, and hold each Contributor harmless for any liability
-      incurred by, or claims asserted against, such Contributor by reason
-      of your accepting any such warranty or additional liability.
-
-   END OF TERMS AND CONDITIONS
-
-
-
-AndroidX collection jvm library:
-
-
-   Copyright (c) 2005-2011, 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.
-
-   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.
-
-
-                                 Apache License
-                           Version 2.0, January 2004
-                        http://www.apache.org/licenses/
-
-   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
-
-   1. Definitions.
-
-      "License" shall mean the terms and conditions for use, reproduction,
-      and distribution as defined by Sections 1 through 9 of this document.
-
-      "Licensor" shall mean the copyright owner or entity authorized by
-      the copyright owner that is granting the License.
-
-      "Legal Entity" shall mean the union of the acting entity and all
-      other entities that control, are controlled by, or are under common
-      control with that entity. For the purposes of this definition,
-      "control" means (i) the power, direct or indirect, to cause the
-      direction or management of such entity, whether by contract or
-      otherwise, or (ii) ownership of fifty percent (50%) or more of the
-      outstanding shares, or (iii) beneficial ownership of such entity.
-
-      "You" (or "Your") shall mean an individual or Legal Entity
-      exercising permissions granted by this License.
-
-      "Source" form shall mean the preferred form for making modifications,
-      including but not limited to software source code, documentation
-      source, and configuration files.
-
-      "Object" form shall mean any form resulting from mechanical
-      transformation or translation of a Source form, including but
-      not limited to compiled object code, generated documentation,
-      and conversions to other media types.
-
-      "Work" shall mean the work of authorship, whether in Source or
-      Object form, made available under the License, as indicated by a
-      copyright notice that is included in or attached to the work
-      (an example is provided in the Appendix below).
-
-      "Derivative Works" shall mean any work, whether in Source or Object
-      form, that is based on (or derived from) the Work and for which the
-      editorial revisions, annotations, elaborations, or other modifications
-      represent, as a whole, an original work of authorship. For the purposes
-      of this License, Derivative Works shall not include works that remain
-      separable from, or merely link (or bind by name) to the interfaces of,
-      the Work and Derivative Works thereof.
-
-      "Contribution" shall mean any work of authorship, including
-      the original version of the Work and any modifications or additions
-      to that Work or Derivative Works thereof, that is intentionally
-      submitted to Licensor for inclusion in the Work by the copyright owner
-      or by an individual or Legal Entity authorized to submit on behalf of
-      the copyright owner. For the purposes of this definition, "submitted"
-      means any form of electronic, verbal, or written communication sent
-      to the Licensor or its representatives, including but not limited to
-      communication on electronic mailing lists, source code control systems,
-      and issue tracking systems that are managed by, or on behalf of, the
-      Licensor for the purpose of discussing and improving the Work, but
-      excluding communication that is conspicuously marked or otherwise
-      designated in writing by the copyright owner as "Not a Contribution."
-
-      "Contributor" shall mean Licensor and any individual or Legal Entity
-      on behalf of whom a Contribution has been received by Licensor and
-      subsequently incorporated within the Work.
-
-   2. Grant of Copyright License. Subject to the terms and conditions of
-      this License, each Contributor hereby grants to You a perpetual,
-      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
-      copyright license to reproduce, prepare Derivative Works of,
-      publicly display, publicly perform, sublicense, and distribute the
-      Work and such Derivative Works in Source or Object form.
-
-   3. Grant of Patent License. Subject to the terms and conditions of
-      this License, each Contributor hereby grants to You a perpetual,
-      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
-      (except as stated in this section) patent license to make, have made,
-      use, offer to sell, sell, import, and otherwise transfer the Work,
-      where such license applies only to those patent claims licensable
-      by such Contributor that are necessarily infringed by their
-      Contribution(s) alone or by combination of their Contribution(s)
-      with the Work to which such Contribution(s) was submitted. If You
-      institute patent litigation against any entity (including a
-      cross-claim or counterclaim in a lawsuit) alleging that the Work
-      or a Contribution incorporated within the Work constitutes direct
-      or contributory patent infringement, then any patent licenses
-      granted to You under this License for that Work shall terminate
-      as of the date such litigation is filed.
-
-   4. Redistribution. You may reproduce and distribute copies of the
-      Work or Derivative Works thereof in any medium, with or without
-      modifications, and in Source or Object form, provided that You
-      meet the following conditions:
-
-      (a) You must give any other recipients of the Work or
-          Derivative Works a copy of this License; and
-
-      (b) You must cause any modified files to carry prominent notices
-          stating that You changed the files; and
-
-      (c) You must retain, in the Source form of any Derivative Works
-          that You distribute, all copyright, patent, trademark, and
-          attribution notices from the Source form of the Work,
-          excluding those notices that do not pertain to any part of
-          the Derivative Works; and
-
-      (d) If the Work includes a "NOTICE" text file as part of its
-          distribution, then any Derivative Works that You distribute must
-          include a readable copy of the attribution notices contained
-          within such NOTICE file, excluding those notices that do not
-          pertain to any part of the Derivative Works, in at least one
-          of the following places: within a NOTICE text file distributed
-          as part of the Derivative Works; within the Source form or
-          documentation, if provided along with the Derivative Works; or,
-          within a display generated by the Derivative Works, if and
-          wherever such third-party notices normally appear. The contents
-          of the NOTICE file are for informational purposes only and
-          do not modify the License. You may add Your own attribution
-          notices within Derivative Works that You distribute, alongside
-          or as an addendum to the NOTICE text from the Work, provided
-          that such additional attribution notices cannot be construed
-          as modifying the License.
-
-      You may add Your own copyright statement to Your modifications and
-      may provide additional or different license terms and conditions
-      for use, reproduction, or distribution of Your modifications, or
-      for any such Derivative Works as a whole, provided Your use,
-      reproduction, and distribution of the Work otherwise complies with
-      the conditions stated in this License.
-
-   5. Submission of Contributions. Unless You explicitly state otherwise,
-      any Contribution intentionally submitted for inclusion in the Work
-      by You to the Licensor shall be under the terms and conditions of
-      this License, without any additional terms or conditions.
-      Notwithstanding the above, nothing herein shall supersede or modify
-      the terms of any separate license agreement you may have executed
-      with Licensor regarding such Contributions.
-
-   6. Trademarks. This License does not grant permission to use the trade
-      names, trademarks, service marks, or product names of the Licensor,
-      except as required for reasonable and customary use in describing the
-      origin of the Work and reproducing the content of the NOTICE file.
-
-   7. Disclaimer of Warranty. Unless required by applicable law or
-      agreed to in writing, Licensor provides the Work (and each
-      Contributor provides its Contributions) on an "AS IS" BASIS,
-      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
-      implied, including, without limitation, any warranties or conditions
-      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
-      PARTICULAR PURPOSE. You are solely responsible for determining the
-      appropriateness of using or redistributing the Work and assume any
-      risks associated with Your exercise of permissions under this License.
-
-   8. Limitation of Liability. In no event and under no legal theory,
-      whether in tort (including negligence), contract, or otherwise,
-      unless required by applicable law (such as deliberate and grossly
-      negligent acts) or agreed to in writing, shall any Contributor be
-      liable to You for damages, including any direct, indirect, special,
-      incidental, or consequential damages of any character arising as a
-      result of this License or out of the use or inability to use the
-      Work (including but not limited to damages for loss of goodwill,
-      work stoppage, computer failure or malfunction, or any and all
-      other commercial damages or losses), even if such Contributor
-      has been advised of the possibility of such damages.
-
-   9. Accepting Warranty or Additional Liability. While redistributing
-      the Work or Derivative Works thereof, You may choose to offer,
-      and charge a fee for, acceptance of support, warranty, indemnity,
-      or other liability obligations and/or rights consistent with this
-      License. However, in accepting such obligations, You may act only
-      on Your own behalf and on Your sole responsibility, not on behalf
-      of any other Contributor, and only if You agree to indemnify,
-      defend, and hold each Contributor harmless for any liability
-      incurred by, or claims asserted against, such Contributor by reason
-      of your accepting any such warranty or additional liability.
-
-   END OF TERMS AND CONDITIONS
-
-
-
-AndroidX concurrent futures library:
-
-
-   Copyright (c) 2005-2011, 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.
-
-   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.
-
-
-                                 Apache License
-                           Version 2.0, January 2004
-                        http://www.apache.org/licenses/
-
-   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
-
-   1. Definitions.
-
-      "License" shall mean the terms and conditions for use, reproduction,
-      and distribution as defined by Sections 1 through 9 of this document.
-
-      "Licensor" shall mean the copyright owner or entity authorized by
-      the copyright owner that is granting the License.
-
-      "Legal Entity" shall mean the union of the acting entity and all
-      other entities that control, are controlled by, or are under common
-      control with that entity. For the purposes of this definition,
-      "control" means (i) the power, direct or indirect, to cause the
-      direction or management of such entity, whether by contract or
-      otherwise, or (ii) ownership of fifty percent (50%) or more of the
-      outstanding shares, or (iii) beneficial ownership of such entity.
-
-      "You" (or "Your") shall mean an individual or Legal Entity
-      exercising permissions granted by this License.
-
-      "Source" form shall mean the preferred form for making modifications,
-      including but not limited to software source code, documentation
-      source, and configuration files.
-
-      "Object" form shall mean any form resulting from mechanical
-      transformation or translation of a Source form, including but
-      not limited to compiled object code, generated documentation,
-      and conversions to other media types.
-
-      "Work" shall mean the work of authorship, whether in Source or
-      Object form, made available under the License, as indicated by a
-      copyright notice that is included in or attached to the work
-      (an example is provided in the Appendix below).
-
-      "Derivative Works" shall mean any work, whether in Source or Object
-      form, that is based on (or derived from) the Work and for which the
-      editorial revisions, annotations, elaborations, or other modifications
-      represent, as a whole, an original work of authorship. For the purposes
-      of this License, Derivative Works shall not include works that remain
-      separable from, or merely link (or bind by name) to the interfaces of,
-      the Work and Derivative Works thereof.
-
-      "Contribution" shall mean any work of authorship, including
-      the original version of the Work and any modifications or additions
-      to that Work or Derivative Works thereof, that is intentionally
-      submitted to Licensor for inclusion in the Work by the copyright owner
-      or by an individual or Legal Entity authorized to submit on behalf of
-      the copyright owner. For the purposes of this definition, "submitted"
-      means any form of electronic, verbal, or written communication sent
-      to the Licensor or its representatives, including but not limited to
-      communication on electronic mailing lists, source code control systems,
-      and issue tracking systems that are managed by, or on behalf of, the
-      Licensor for the purpose of discussing and improving the Work, but
-      excluding communication that is conspicuously marked or otherwise
-      designated in writing by the copyright owner as "Not a Contribution."
-
-      "Contributor" shall mean Licensor and any individual or Legal Entity
-      on behalf of whom a Contribution has been received by Licensor and
-      subsequently incorporated within the Work.
-
-   2. Grant of Copyright License. Subject to the terms and conditions of
-      this License, each Contributor hereby grants to You a perpetual,
-      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
-      copyright license to reproduce, prepare Derivative Works of,
-      publicly display, publicly perform, sublicense, and distribute the
-      Work and such Derivative Works in Source or Object form.
-
-   3. Grant of Patent License. Subject to the terms and conditions of
-      this License, each Contributor hereby grants to You a perpetual,
-      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
-      (except as stated in this section) patent license to make, have made,
-      use, offer to sell, sell, import, and otherwise transfer the Work,
-      where such license applies only to those patent claims licensable
-      by such Contributor that are necessarily infringed by their
-      Contribution(s) alone or by combination of their Contribution(s)
-      with the Work to which such Contribution(s) was submitted. If You
-      institute patent litigation against any entity (including a
-      cross-claim or counterclaim in a lawsuit) alleging that the Work
-      or a Contribution incorporated within the Work constitutes direct
-      or contributory patent infringement, then any patent licenses
-      granted to You under this License for that Work shall terminate
-      as of the date such litigation is filed.
-
-   4. Redistribution. You may reproduce and distribute copies of the
-      Work or Derivative Works thereof in any medium, with or without
-      modifications, and in Source or Object form, provided that You
-      meet the following conditions:
-
-      (a) You must give any other recipients of the Work or
-          Derivative Works a copy of this License; and
-
-      (b) You must cause any modified files to carry prominent notices
-          stating that You changed the files; and
-
-      (c) You must retain, in the Source form of any Derivative Works
-          that You distribute, all copyright, patent, trademark, and
-          attribution notices from the Source form of the Work,
-          excluding those notices that do not pertain to any part of
-          the Derivative Works; and
-
-      (d) If the Work includes a "NOTICE" text file as part of its
-          distribution, then any Derivative Works that You distribute must
-          include a readable copy of the attribution notices contained
-          within such NOTICE file, excluding those notices that do not
-          pertain to any part of the Derivative Works, in at least one
-          of the following places: within a NOTICE text file distributed
-          as part of the Derivative Works; within the Source form or
-          documentation, if provided along with the Derivative Works; or,
-          within a display generated by the Derivative Works, if and
-          wherever such third-party notices normally appear. The contents
-          of the NOTICE file are for informational purposes only and
-          do not modify the License. You may add Your own attribution
-          notices within Derivative Works that You distribute, alongside
-          or as an addendum to the NOTICE text from the Work, provided
-          that such additional attribution notices cannot be construed
-          as modifying the License.
-
-      You may add Your own copyright statement to Your modifications and
-      may provide additional or different license terms and conditions
-      for use, reproduction, or distribution of Your modifications, or
-      for any such Derivative Works as a whole, provided Your use,
-      reproduction, and distribution of the Work otherwise complies with
-      the conditions stated in this License.
-
-   5. Submission of Contributions. Unless You explicitly state otherwise,
-      any Contribution intentionally submitted for inclusion in the Work
-      by You to the Licensor shall be under the terms and conditions of
-      this License, without any additional terms or conditions.
-      Notwithstanding the above, nothing herein shall supersede or modify
-      the terms of any separate license agreement you may have executed
-      with Licensor regarding such Contributions.
-
-   6. Trademarks. This License does not grant permission to use the trade
-      names, trademarks, service marks, or product names of the Licensor,
-      except as required for reasonable and customary use in describing the
-      origin of the Work and reproducing the content of the NOTICE file.
-
-   7. Disclaimer of Warranty. Unless required by applicable law or
-      agreed to in writing, Licensor provides the Work (and each
-      Contributor provides its Contributions) on an "AS IS" BASIS,
-      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
-      implied, including, without limitation, any warranties or conditions
-      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
-      PARTICULAR PURPOSE. You are solely responsible for determining the
-      appropriateness of using or redistributing the Work and assume any
-      risks associated with Your exercise of permissions under this License.
-
-   8. Limitation of Liability. In no event and under no legal theory,
-      whether in tort (including negligence), contract, or otherwise,
-      unless required by applicable law (such as deliberate and grossly
-      negligent acts) or agreed to in writing, shall any Contributor be
-      liable to You for damages, including any direct, indirect, special,
-      incidental, or consequential damages of any character arising as a
-      result of this License or out of the use or inability to use the
-      Work (including but not limited to damages for loss of goodwill,
-      work stoppage, computer failure or malfunction, or any and all
-      other commercial damages or losses), even if such Contributor
-      has been advised of the possibility of such damages.
-
-   9. Accepting Warranty or Additional Liability. While redistributing
-      the Work or Derivative Works thereof, You may choose to offer,
-      and charge a fee for, acceptance of support, warranty, indemnity,
-      or other liability obligations and/or rights consistent with this
-      License. However, in accepting such obligations, You may act only
-      on Your own behalf and on Your sole responsibility, not on behalf
-      of any other Contributor, and only if You agree to indemnify,
-      defend, and hold each Contributor harmless for any liability
-      incurred by, or claims asserted against, such Contributor by reason
-      of your accepting any such warranty or additional liability.
-
-   END OF TERMS AND CONDITIONS
-
-
-
-AndroidX coordinatorlayout library:
-
-
-   Copyright (c) 2005-2011, 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.
-
-   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.
-
-
-                                 Apache License
-                           Version 2.0, January 2004
-                        http://www.apache.org/licenses/
-
-   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
-
-   1. Definitions.
-
-      "License" shall mean the terms and conditions for use, reproduction,
-      and distribution as defined by Sections 1 through 9 of this document.
-
-      "Licensor" shall mean the copyright owner or entity authorized by
-      the copyright owner that is granting the License.
-
-      "Legal Entity" shall mean the union of the acting entity and all
-      other entities that control, are controlled by, or are under common
-      control with that entity. For the purposes of this definition,
-      "control" means (i) the power, direct or indirect, to cause the
-      direction or management of such entity, whether by contract or
-      otherwise, or (ii) ownership of fifty percent (50%) or more of the
-      outstanding shares, or (iii) beneficial ownership of such entity.
-
-      "You" (or "Your") shall mean an individual or Legal Entity
-      exercising permissions granted by this License.
-
-      "Source" form shall mean the preferred form for making modifications,
-      including but not limited to software source code, documentation
-      source, and configuration files.
-
-      "Object" form shall mean any form resulting from mechanical
-      transformation or translation of a Source form, including but
-      not limited to compiled object code, generated documentation,
-      and conversions to other media types.
-
-      "Work" shall mean the work of authorship, whether in Source or
-      Object form, made available under the License, as indicated by a
-      copyright notice that is included in or attached to the work
-      (an example is provided in the Appendix below).
-
-      "Derivative Works" shall mean any work, whether in Source or Object
-      form, that is based on (or derived from) the Work and for which the
-      editorial revisions, annotations, elaborations, or other modifications
-      represent, as a whole, an original work of authorship. For the purposes
-      of this License, Derivative Works shall not include works that remain
-      separable from, or merely link (or bind by name) to the interfaces of,
-      the Work and Derivative Works thereof.
-
-      "Contribution" shall mean any work of authorship, including
-      the original version of the Work and any modifications or additions
-      to that Work or Derivative Works thereof, that is intentionally
-      submitted to Licensor for inclusion in the Work by the copyright owner
-      or by an individual or Legal Entity authorized to submit on behalf of
-      the copyright owner. For the purposes of this definition, "submitted"
-      means any form of electronic, verbal, or written communication sent
-      to the Licensor or its representatives, including but not limited to
-      communication on electronic mailing lists, source code control systems,
-      and issue tracking systems that are managed by, or on behalf of, the
-      Licensor for the purpose of discussing and improving the Work, but
-      excluding communication that is conspicuously marked or otherwise
-      designated in writing by the copyright owner as "Not a Contribution."
-
-      "Contributor" shall mean Licensor and any individual or Legal Entity
-      on behalf of whom a Contribution has been received by Licensor and
-      subsequently incorporated within the Work.
-
-   2. Grant of Copyright License. Subject to the terms and conditions of
-      this License, each Contributor hereby grants to You a perpetual,
-      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
-      copyright license to reproduce, prepare Derivative Works of,
-      publicly display, publicly perform, sublicense, and distribute the
-      Work and such Derivative Works in Source or Object form.
-
-   3. Grant of Patent License. Subject to the terms and conditions of
-      this License, each Contributor hereby grants to You a perpetual,
-      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
-      (except as stated in this section) patent license to make, have made,
-      use, offer to sell, sell, import, and otherwise transfer the Work,
-      where such license applies only to those patent claims licensable
-      by such Contributor that are necessarily infringed by their
-      Contribution(s) alone or by combination of their Contribution(s)
-      with the Work to which such Contribution(s) was submitted. If You
-      institute patent litigation against any entity (including a
-      cross-claim or counterclaim in a lawsuit) alleging that the Work
-      or a Contribution incorporated within the Work constitutes direct
-      or contributory patent infringement, then any patent licenses
-      granted to You under this License for that Work shall terminate
-      as of the date such litigation is filed.
-
-   4. Redistribution. You may reproduce and distribute copies of the
-      Work or Derivative Works thereof in any medium, with or without
-      modifications, and in Source or Object form, provided that You
-      meet the following conditions:
-
-      (a) You must give any other recipients of the Work or
-          Derivative Works a copy of this License; and
-
-      (b) You must cause any modified files to carry prominent notices
-          stating that You changed the files; and
-
-      (c) You must retain, in the Source form of any Derivative Works
-          that You distribute, all copyright, patent, trademark, and
-          attribution notices from the Source form of the Work,
-          excluding those notices that do not pertain to any part of
-          the Derivative Works; and
-
-      (d) If the Work includes a "NOTICE" text file as part of its
-          distribution, then any Derivative Works that You distribute must
-          include a readable copy of the attribution notices contained
-          within such NOTICE file, excluding those notices that do not
-          pertain to any part of the Derivative Works, in at least one
-          of the following places: within a NOTICE text file distributed
-          as part of the Derivative Works; within the Source form or
-          documentation, if provided along with the Derivative Works; or,
-          within a display generated by the Derivative Works, if and
-          wherever such third-party notices normally appear. The contents
-          of the NOTICE file are for informational purposes only and
-          do not modify the License. You may add Your own attribution
-          notices within Derivative Works that You distribute, alongside
-          or as an addendum to the NOTICE text from the Work, provided
-          that such additional attribution notices cannot be construed
-          as modifying the License.
-
-      You may add Your own copyright statement to Your modifications and
-      may provide additional or different license terms and conditions
-      for use, reproduction, or distribution of Your modifications, or
-      for any such Derivative Works as a whole, provided Your use,
-      reproduction, and distribution of the Work otherwise complies with
-      the conditions stated in this License.
-
-   5. Submission of Contributions. Unless You explicitly state otherwise,
-      any Contribution intentionally submitted for inclusion in the Work
-      by You to the Licensor shall be under the terms and conditions of
-      this License, without any additional terms or conditions.
-      Notwithstanding the above, nothing herein shall supersede or modify
-      the terms of any separate license agreement you may have executed
-      with Licensor regarding such Contributions.
-
-   6. Trademarks. This License does not grant permission to use the trade
-      names, trademarks, service marks, or product names of the Licensor,
-      except as required for reasonable and customary use in describing the
-      origin of the Work and reproducing the content of the NOTICE file.
-
-   7. Disclaimer of Warranty. Unless required by applicable law or
-      agreed to in writing, Licensor provides the Work (and each
-      Contributor provides its Contributions) on an "AS IS" BASIS,
-      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
-      implied, including, without limitation, any warranties or conditions
-      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
-      PARTICULAR PURPOSE. You are solely responsible for determining the
-      appropriateness of using or redistributing the Work and assume any
-      risks associated with Your exercise of permissions under this License.
-
-   8. Limitation of Liability. In no event and under no legal theory,
-      whether in tort (including negligence), contract, or otherwise,
-      unless required by applicable law (such as deliberate and grossly
-      negligent acts) or agreed to in writing, shall any Contributor be
-      liable to You for damages, including any direct, indirect, special,
-      incidental, or consequential damages of any character arising as a
-      result of this License or out of the use or inability to use the
-      Work (including but not limited to damages for loss of goodwill,
-      work stoppage, computer failure or malfunction, or any and all
-      other commercial damages or losses), even if such Contributor
-      has been advised of the possibility of such damages.
-
-   9. Accepting Warranty or Additional Liability. While redistributing
-      the Work or Derivative Works thereof, You may choose to offer,
-      and charge a fee for, acceptance of support, warranty, indemnity,
-      or other liability obligations and/or rights consistent with this
-      License. However, in accepting such obligations, You may act only
-      on Your own behalf and on Your sole responsibility, not on behalf
-      of any other Contributor, and only if You agree to indemnify,
-      defend, and hold each Contributor harmless for any liability
-      incurred by, or claims asserted against, such Contributor by reason
-      of your accepting any such warranty or additional liability.
-
-   END OF TERMS AND CONDITIONS
-
-
-
-AndroidX core ktx library:
-
-
-   Copyright (c) 2005-2011, 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.
-
-   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.
-
-
-                                 Apache License
-                           Version 2.0, January 2004
-                        http://www.apache.org/licenses/
-
-   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
-
-   1. Definitions.
-
-      "License" shall mean the terms and conditions for use, reproduction,
-      and distribution as defined by Sections 1 through 9 of this document.
-
-      "Licensor" shall mean the copyright owner or entity authorized by
-      the copyright owner that is granting the License.
-
-      "Legal Entity" shall mean the union of the acting entity and all
-      other entities that control, are controlled by, or are under common
-      control with that entity. For the purposes of this definition,
-      "control" means (i) the power, direct or indirect, to cause the
-      direction or management of such entity, whether by contract or
-      otherwise, or (ii) ownership of fifty percent (50%) or more of the
-      outstanding shares, or (iii) beneficial ownership of such entity.
-
-      "You" (or "Your") shall mean an individual or Legal Entity
-      exercising permissions granted by this License.
-
-      "Source" form shall mean the preferred form for making modifications,
-      including but not limited to software source code, documentation
-      source, and configuration files.
-
-      "Object" form shall mean any form resulting from mechanical
-      transformation or translation of a Source form, including but
-      not limited to compiled object code, generated documentation,
-      and conversions to other media types.
-
-      "Work" shall mean the work of authorship, whether in Source or
-      Object form, made available under the License, as indicated by a
-      copyright notice that is included in or attached to the work
-      (an example is provided in the Appendix below).
-
-      "Derivative Works" shall mean any work, whether in Source or Object
-      form, that is based on (or derived from) the Work and for which the
-      editorial revisions, annotations, elaborations, or other modifications
-      represent, as a whole, an original work of authorship. For the purposes
-      of this License, Derivative Works shall not include works that remain
-      separable from, or merely link (or bind by name) to the interfaces of,
-      the Work and Derivative Works thereof.
-
-      "Contribution" shall mean any work of authorship, including
-      the original version of the Work and any modifications or additions
-      to that Work or Derivative Works thereof, that is intentionally
-      submitted to Licensor for inclusion in the Work by the copyright owner
-      or by an individual or Legal Entity authorized to submit on behalf of
-      the copyright owner. For the purposes of this definition, "submitted"
-      means any form of electronic, verbal, or written communication sent
-      to the Licensor or its representatives, including but not limited to
-      communication on electronic mailing lists, source code control systems,
-      and issue tracking systems that are managed by, or on behalf of, the
-      Licensor for the purpose of discussing and improving the Work, but
-      excluding communication that is conspicuously marked or otherwise
-      designated in writing by the copyright owner as "Not a Contribution."
-
-      "Contributor" shall mean Licensor and any individual or Legal Entity
-      on behalf of whom a Contribution has been received by Licensor and
-      subsequently incorporated within the Work.
-
-   2. Grant of Copyright License. Subject to the terms and conditions of
-      this License, each Contributor hereby grants to You a perpetual,
-      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
-      copyright license to reproduce, prepare Derivative Works of,
-      publicly display, publicly perform, sublicense, and distribute the
-      Work and such Derivative Works in Source or Object form.
-
-   3. Grant of Patent License. Subject to the terms and conditions of
-      this License, each Contributor hereby grants to You a perpetual,
-      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
-      (except as stated in this section) patent license to make, have made,
-      use, offer to sell, sell, import, and otherwise transfer the Work,
-      where such license applies only to those patent claims licensable
-      by such Contributor that are necessarily infringed by their
-      Contribution(s) alone or by combination of their Contribution(s)
-      with the Work to which such Contribution(s) was submitted. If You
-      institute patent litigation against any entity (including a
-      cross-claim or counterclaim in a lawsuit) alleging that the Work
-      or a Contribution incorporated within the Work constitutes direct
-      or contributory patent infringement, then any patent licenses
-      granted to You under this License for that Work shall terminate
-      as of the date such litigation is filed.
-
-   4. Redistribution. You may reproduce and distribute copies of the
-      Work or Derivative Works thereof in any medium, with or without
-      modifications, and in Source or Object form, provided that You
-      meet the following conditions:
-
-      (a) You must give any other recipients of the Work or
-          Derivative Works a copy of this License; and
-
-      (b) You must cause any modified files to carry prominent notices
-          stating that You changed the files; and
-
-      (c) You must retain, in the Source form of any Derivative Works
-          that You distribute, all copyright, patent, trademark, and
-          attribution notices from the Source form of the Work,
-          excluding those notices that do not pertain to any part of
-          the Derivative Works; and
-
-      (d) If the Work includes a "NOTICE" text file as part of its
-          distribution, then any Derivative Works that You distribute must
-          include a readable copy of the attribution notices contained
-          within such NOTICE file, excluding those notices that do not
-          pertain to any part of the Derivative Works, in at least one
-          of the following places: within a NOTICE text file distributed
-          as part of the Derivative Works; within the Source form or
-          documentation, if provided along with the Derivative Works; or,
-          within a display generated by the Derivative Works, if and
-          wherever such third-party notices normally appear. The contents
-          of the NOTICE file are for informational purposes only and
-          do not modify the License. You may add Your own attribution
-          notices within Derivative Works that You distribute, alongside
-          or as an addendum to the NOTICE text from the Work, provided
-          that such additional attribution notices cannot be construed
-          as modifying the License.
-
-      You may add Your own copyright statement to Your modifications and
-      may provide additional or different license terms and conditions
-      for use, reproduction, or distribution of Your modifications, or
-      for any such Derivative Works as a whole, provided Your use,
-      reproduction, and distribution of the Work otherwise complies with
-      the conditions stated in this License.
-
-   5. Submission of Contributions. Unless You explicitly state otherwise,
-      any Contribution intentionally submitted for inclusion in the Work
-      by You to the Licensor shall be under the terms and conditions of
-      this License, without any additional terms or conditions.
-      Notwithstanding the above, nothing herein shall supersede or modify
-      the terms of any separate license agreement you may have executed
-      with Licensor regarding such Contributions.
-
-   6. Trademarks. This License does not grant permission to use the trade
-      names, trademarks, service marks, or product names of the Licensor,
-      except as required for reasonable and customary use in describing the
-      origin of the Work and reproducing the content of the NOTICE file.
-
-   7. Disclaimer of Warranty. Unless required by applicable law or
-      agreed to in writing, Licensor provides the Work (and each
-      Contributor provides its Contributions) on an "AS IS" BASIS,
-      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
-      implied, including, without limitation, any warranties or conditions
-      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
-      PARTICULAR PURPOSE. You are solely responsible for determining the
-      appropriateness of using or redistributing the Work and assume any
-      risks associated with Your exercise of permissions under this License.
-
-   8. Limitation of Liability. In no event and under no legal theory,
-      whether in tort (including negligence), contract, or otherwise,
-      unless required by applicable law (such as deliberate and grossly
-      negligent acts) or agreed to in writing, shall any Contributor be
-      liable to You for damages, including any direct, indirect, special,
-      incidental, or consequential damages of any character arising as a
-      result of this License or out of the use or inability to use the
-      Work (including but not limited to damages for loss of goodwill,
-      work stoppage, computer failure or malfunction, or any and all
-      other commercial damages or losses), even if such Contributor
-      has been advised of the possibility of such damages.
-
-   9. Accepting Warranty or Additional Liability. While redistributing
-      the Work or Derivative Works thereof, You may choose to offer,
-      and charge a fee for, acceptance of support, warranty, indemnity,
-      or other liability obligations and/or rights consistent with this
-      License. However, in accepting such obligations, You may act only
-      on Your own behalf and on Your sole responsibility, not on behalf
-      of any other Contributor, and only if You agree to indemnify,
-      defend, and hold each Contributor harmless for any liability
-      incurred by, or claims asserted against, such Contributor by reason
-      of your accepting any such warranty or additional liability.
-
-   END OF TERMS AND CONDITIONS
-
-
-
-AndroidX core library:
-
-
-   Copyright (c) 2005-2011, 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.
-
-   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.
-
-
-                                 Apache License
-                           Version 2.0, January 2004
-                        http://www.apache.org/licenses/
-
-   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
-
-   1. Definitions.
-
-      "License" shall mean the terms and conditions for use, reproduction,
-      and distribution as defined by Sections 1 through 9 of this document.
-
-      "Licensor" shall mean the copyright owner or entity authorized by
-      the copyright owner that is granting the License.
-
-      "Legal Entity" shall mean the union of the acting entity and all
-      other entities that control, are controlled by, or are under common
-      control with that entity. For the purposes of this definition,
-      "control" means (i) the power, direct or indirect, to cause the
-      direction or management of such entity, whether by contract or
-      otherwise, or (ii) ownership of fifty percent (50%) or more of the
-      outstanding shares, or (iii) beneficial ownership of such entity.
-
-      "You" (or "Your") shall mean an individual or Legal Entity
-      exercising permissions granted by this License.
-
-      "Source" form shall mean the preferred form for making modifications,
-      including but not limited to software source code, documentation
-      source, and configuration files.
-
-      "Object" form shall mean any form resulting from mechanical
-      transformation or translation of a Source form, including but
-      not limited to compiled object code, generated documentation,
-      and conversions to other media types.
-
-      "Work" shall mean the work of authorship, whether in Source or
-      Object form, made available under the License, as indicated by a
-      copyright notice that is included in or attached to the work
-      (an example is provided in the Appendix below).
-
-      "Derivative Works" shall mean any work, whether in Source or Object
-      form, that is based on (or derived from) the Work and for which the
-      editorial revisions, annotations, elaborations, or other modifications
-      represent, as a whole, an original work of authorship. For the purposes
-      of this License, Derivative Works shall not include works that remain
-      separable from, or merely link (or bind by name) to the interfaces of,
-      the Work and Derivative Works thereof.
-
-      "Contribution" shall mean any work of authorship, including
-      the original version of the Work and any modifications or additions
-      to that Work or Derivative Works thereof, that is intentionally
-      submitted to Licensor for inclusion in the Work by the copyright owner
-      or by an individual or Legal Entity authorized to submit on behalf of
-      the copyright owner. For the purposes of this definition, "submitted"
-      means any form of electronic, verbal, or written communication sent
-      to the Licensor or its representatives, including but not limited to
-      communication on electronic mailing lists, source code control systems,
-      and issue tracking systems that are managed by, or on behalf of, the
-      Licensor for the purpose of discussing and improving the Work, but
-      excluding communication that is conspicuously marked or otherwise
-      designated in writing by the copyright owner as "Not a Contribution."
-
-      "Contributor" shall mean Licensor and any individual or Legal Entity
-      on behalf of whom a Contribution has been received by Licensor and
-      subsequently incorporated within the Work.
-
-   2. Grant of Copyright License. Subject to the terms and conditions of
-      this License, each Contributor hereby grants to You a perpetual,
-      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
-      copyright license to reproduce, prepare Derivative Works of,
-      publicly display, publicly perform, sublicense, and distribute the
-      Work and such Derivative Works in Source or Object form.
-
-   3. Grant of Patent License. Subject to the terms and conditions of
-      this License, each Contributor hereby grants to You a perpetual,
-      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
-      (except as stated in this section) patent license to make, have made,
-      use, offer to sell, sell, import, and otherwise transfer the Work,
-      where such license applies only to those patent claims licensable
-      by such Contributor that are necessarily infringed by their
-      Contribution(s) alone or by combination of their Contribution(s)
-      with the Work to which such Contribution(s) was submitted. If You
-      institute patent litigation against any entity (including a
-      cross-claim or counterclaim in a lawsuit) alleging that the Work
-      or a Contribution incorporated within the Work constitutes direct
-      or contributory patent infringement, then any patent licenses
-      granted to You under this License for that Work shall terminate
-      as of the date such litigation is filed.
-
-   4. Redistribution. You may reproduce and distribute copies of the
-      Work or Derivative Works thereof in any medium, with or without
-      modifications, and in Source or Object form, provided that You
-      meet the following conditions:
-
-      (a) You must give any other recipients of the Work or
-          Derivative Works a copy of this License; and
-
-      (b) You must cause any modified files to carry prominent notices
-          stating that You changed the files; and
-
-      (c) You must retain, in the Source form of any Derivative Works
-          that You distribute, all copyright, patent, trademark, and
-          attribution notices from the Source form of the Work,
-          excluding those notices that do not pertain to any part of
-          the Derivative Works; and
-
-      (d) If the Work includes a "NOTICE" text file as part of its
-          distribution, then any Derivative Works that You distribute must
-          include a readable copy of the attribution notices contained
-          within such NOTICE file, excluding those notices that do not
-          pertain to any part of the Derivative Works, in at least one
-          of the following places: within a NOTICE text file distributed
-          as part of the Derivative Works; within the Source form or
-          documentation, if provided along with the Derivative Works; or,
-          within a display generated by the Derivative Works, if and
-          wherever such third-party notices normally appear. The contents
-          of the NOTICE file are for informational purposes only and
-          do not modify the License. You may add Your own attribution
-          notices within Derivative Works that You distribute, alongside
-          or as an addendum to the NOTICE text from the Work, provided
-          that such additional attribution notices cannot be construed
-          as modifying the License.
-
-      You may add Your own copyright statement to Your modifications and
-      may provide additional or different license terms and conditions
-      for use, reproduction, or distribution of Your modifications, or
-      for any such Derivative Works as a whole, provided Your use,
-      reproduction, and distribution of the Work otherwise complies with
-      the conditions stated in this License.
-
-   5. Submission of Contributions. Unless You explicitly state otherwise,
-      any Contribution intentionally submitted for inclusion in the Work
-      by You to the Licensor shall be under the terms and conditions of
-      this License, without any additional terms or conditions.
-      Notwithstanding the above, nothing herein shall supersede or modify
-      the terms of any separate license agreement you may have executed
-      with Licensor regarding such Contributions.
-
-   6. Trademarks. This License does not grant permission to use the trade
-      names, trademarks, service marks, or product names of the Licensor,
-      except as required for reasonable and customary use in describing the
-      origin of the Work and reproducing the content of the NOTICE file.
-
-   7. Disclaimer of Warranty. Unless required by applicable law or
-      agreed to in writing, Licensor provides the Work (and each
-      Contributor provides its Contributions) on an "AS IS" BASIS,
-      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
-      implied, including, without limitation, any warranties or conditions
-      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
-      PARTICULAR PURPOSE. You are solely responsible for determining the
-      appropriateness of using or redistributing the Work and assume any
-      risks associated with Your exercise of permissions under this License.
-
-   8. Limitation of Liability. In no event and under no legal theory,
-      whether in tort (including negligence), contract, or otherwise,
-      unless required by applicable law (such as deliberate and grossly
-      negligent acts) or agreed to in writing, shall any Contributor be
-      liable to You for damages, including any direct, indirect, special,
-      incidental, or consequential damages of any character arising as a
-      result of this License or out of the use or inability to use the
-      Work (including but not limited to damages for loss of goodwill,
-      work stoppage, computer failure or malfunction, or any and all
-      other commercial damages or losses), even if such Contributor
-      has been advised of the possibility of such damages.
-
-   9. Accepting Warranty or Additional Liability. While redistributing
-      the Work or Derivative Works thereof, You may choose to offer,
-      and charge a fee for, acceptance of support, warranty, indemnity,
-      or other liability obligations and/or rights consistent with this
-      License. However, in accepting such obligations, You may act only
-      on Your own behalf and on Your sole responsibility, not on behalf
-      of any other Contributor, and only if You agree to indemnify,
-      defend, and hold each Contributor harmless for any liability
-      incurred by, or claims asserted against, such Contributor by reason
-      of your accepting any such warranty or additional liability.
-
-   END OF TERMS AND CONDITIONS
-
-
-
-AndroidX cursoradapter library:
-
-
-   Copyright (c) 2005-2011, 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.
-
-   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.
-
-
-                                 Apache License
-                           Version 2.0, January 2004
-                        http://www.apache.org/licenses/
-
-   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
-
-   1. Definitions.
-
-      "License" shall mean the terms and conditions for use, reproduction,
-      and distribution as defined by Sections 1 through 9 of this document.
-
-      "Licensor" shall mean the copyright owner or entity authorized by
-      the copyright owner that is granting the License.
-
-      "Legal Entity" shall mean the union of the acting entity and all
-      other entities that control, are controlled by, or are under common
-      control with that entity. For the purposes of this definition,
-      "control" means (i) the power, direct or indirect, to cause the
-      direction or management of such entity, whether by contract or
-      otherwise, or (ii) ownership of fifty percent (50%) or more of the
-      outstanding shares, or (iii) beneficial ownership of such entity.
-
-      "You" (or "Your") shall mean an individual or Legal Entity
-      exercising permissions granted by this License.
-
-      "Source" form shall mean the preferred form for making modifications,
-      including but not limited to software source code, documentation
-      source, and configuration files.
-
-      "Object" form shall mean any form resulting from mechanical
-      transformation or translation of a Source form, including but
-      not limited to compiled object code, generated documentation,
-      and conversions to other media types.
-
-      "Work" shall mean the work of authorship, whether in Source or
-      Object form, made available under the License, as indicated by a
-      copyright notice that is included in or attached to the work
-      (an example is provided in the Appendix below).
-
-      "Derivative Works" shall mean any work, whether in Source or Object
-      form, that is based on (or derived from) the Work and for which the
-      editorial revisions, annotations, elaborations, or other modifications
-      represent, as a whole, an original work of authorship. For the purposes
-      of this License, Derivative Works shall not include works that remain
-      separable from, or merely link (or bind by name) to the interfaces of,
-      the Work and Derivative Works thereof.
-
-      "Contribution" shall mean any work of authorship, including
-      the original version of the Work and any modifications or additions
-      to that Work or Derivative Works thereof, that is intentionally
-      submitted to Licensor for inclusion in the Work by the copyright owner
-      or by an individual or Legal Entity authorized to submit on behalf of
-      the copyright owner. For the purposes of this definition, "submitted"
-      means any form of electronic, verbal, or written communication sent
-      to the Licensor or its representatives, including but not limited to
-      communication on electronic mailing lists, source code control systems,
-      and issue tracking systems that are managed by, or on behalf of, the
-      Licensor for the purpose of discussing and improving the Work, but
-      excluding communication that is conspicuously marked or otherwise
-      designated in writing by the copyright owner as "Not a Contribution."
-
-      "Contributor" shall mean Licensor and any individual or Legal Entity
-      on behalf of whom a Contribution has been received by Licensor and
-      subsequently incorporated within the Work.
-
-   2. Grant of Copyright License. Subject to the terms and conditions of
-      this License, each Contributor hereby grants to You a perpetual,
-      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
-      copyright license to reproduce, prepare Derivative Works of,
-      publicly display, publicly perform, sublicense, and distribute the
-      Work and such Derivative Works in Source or Object form.
-
-   3. Grant of Patent License. Subject to the terms and conditions of
-      this License, each Contributor hereby grants to You a perpetual,
-      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
-      (except as stated in this section) patent license to make, have made,
-      use, offer to sell, sell, import, and otherwise transfer the Work,
-      where such license applies only to those patent claims licensable
-      by such Contributor that are necessarily infringed by their
-      Contribution(s) alone or by combination of their Contribution(s)
-      with the Work to which such Contribution(s) was submitted. If You
-      institute patent litigation against any entity (including a
-      cross-claim or counterclaim in a lawsuit) alleging that the Work
-      or a Contribution incorporated within the Work constitutes direct
-      or contributory patent infringement, then any patent licenses
-      granted to You under this License for that Work shall terminate
-      as of the date such litigation is filed.
-
-   4. Redistribution. You may reproduce and distribute copies of the
-      Work or Derivative Works thereof in any medium, with or without
-      modifications, and in Source or Object form, provided that You
-      meet the following conditions:
-
-      (a) You must give any other recipients of the Work or
-          Derivative Works a copy of this License; and
-
-      (b) You must cause any modified files to carry prominent notices
-          stating that You changed the files; and
-
-      (c) You must retain, in the Source form of any Derivative Works
-          that You distribute, all copyright, patent, trademark, and
-          attribution notices from the Source form of the Work,
-          excluding those notices that do not pertain to any part of
-          the Derivative Works; and
-
-      (d) If the Work includes a "NOTICE" text file as part of its
-          distribution, then any Derivative Works that You distribute must
-          include a readable copy of the attribution notices contained
-          within such NOTICE file, excluding those notices that do not
-          pertain to any part of the Derivative Works, in at least one
-          of the following places: within a NOTICE text file distributed
-          as part of the Derivative Works; within the Source form or
-          documentation, if provided along with the Derivative Works; or,
-          within a display generated by the Derivative Works, if and
-          wherever such third-party notices normally appear. The contents
-          of the NOTICE file are for informational purposes only and
-          do not modify the License. You may add Your own attribution
-          notices within Derivative Works that You distribute, alongside
-          or as an addendum to the NOTICE text from the Work, provided
-          that such additional attribution notices cannot be construed
-          as modifying the License.
-
-      You may add Your own copyright statement to Your modifications and
-      may provide additional or different license terms and conditions
-      for use, reproduction, or distribution of Your modifications, or
-      for any such Derivative Works as a whole, provided Your use,
-      reproduction, and distribution of the Work otherwise complies with
-      the conditions stated in this License.
-
-   5. Submission of Contributions. Unless You explicitly state otherwise,
-      any Contribution intentionally submitted for inclusion in the Work
-      by You to the Licensor shall be under the terms and conditions of
-      this License, without any additional terms or conditions.
-      Notwithstanding the above, nothing herein shall supersede or modify
-      the terms of any separate license agreement you may have executed
-      with Licensor regarding such Contributions.
-
-   6. Trademarks. This License does not grant permission to use the trade
-      names, trademarks, service marks, or product names of the Licensor,
-      except as required for reasonable and customary use in describing the
-      origin of the Work and reproducing the content of the NOTICE file.
-
-   7. Disclaimer of Warranty. Unless required by applicable law or
-      agreed to in writing, Licensor provides the Work (and each
-      Contributor provides its Contributions) on an "AS IS" BASIS,
-      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
-      implied, including, without limitation, any warranties or conditions
-      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
-      PARTICULAR PURPOSE. You are solely responsible for determining the
-      appropriateness of using or redistributing the Work and assume any
-      risks associated with Your exercise of permissions under this License.
-
-   8. Limitation of Liability. In no event and under no legal theory,
-      whether in tort (including negligence), contract, or otherwise,
-      unless required by applicable law (such as deliberate and grossly
-      negligent acts) or agreed to in writing, shall any Contributor be
-      liable to You for damages, including any direct, indirect, special,
-      incidental, or consequential damages of any character arising as a
-      result of this License or out of the use or inability to use the
-      Work (including but not limited to damages for loss of goodwill,
-      work stoppage, computer failure or malfunction, or any and all
-      other commercial damages or losses), even if such Contributor
-      has been advised of the possibility of such damages.
-
-   9. Accepting Warranty or Additional Liability. While redistributing
-      the Work or Derivative Works thereof, You may choose to offer,
-      and charge a fee for, acceptance of support, warranty, indemnity,
-      or other liability obligations and/or rights consistent with this
-      License. However, in accepting such obligations, You may act only
-      on Your own behalf and on Your sole responsibility, not on behalf
-      of any other Contributor, and only if You agree to indemnify,
-      defend, and hold each Contributor harmless for any liability
-      incurred by, or claims asserted against, such Contributor by reason
-      of your accepting any such warranty or additional liability.
-
-   END OF TERMS AND CONDITIONS
-
-
-
-AndroidX customview library:
-
-
-   Copyright (c) 2005-2011, 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.
-
-   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.
-
-
-                                 Apache License
-                           Version 2.0, January 2004
-                        http://www.apache.org/licenses/
-
-   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
-
-   1. Definitions.
-
-      "License" shall mean the terms and conditions for use, reproduction,
-      and distribution as defined by Sections 1 through 9 of this document.
-
-      "Licensor" shall mean the copyright owner or entity authorized by
-      the copyright owner that is granting the License.
-
-      "Legal Entity" shall mean the union of the acting entity and all
-      other entities that control, are controlled by, or are under common
-      control with that entity. For the purposes of this definition,
-      "control" means (i) the power, direct or indirect, to cause the
-      direction or management of such entity, whether by contract or
-      otherwise, or (ii) ownership of fifty percent (50%) or more of the
-      outstanding shares, or (iii) beneficial ownership of such entity.
-
-      "You" (or "Your") shall mean an individual or Legal Entity
-      exercising permissions granted by this License.
-
-      "Source" form shall mean the preferred form for making modifications,
-      including but not limited to software source code, documentation
-      source, and configuration files.
-
-      "Object" form shall mean any form resulting from mechanical
-      transformation or translation of a Source form, including but
-      not limited to compiled object code, generated documentation,
-      and conversions to other media types.
-
-      "Work" shall mean the work of authorship, whether in Source or
-      Object form, made available under the License, as indicated by a
-      copyright notice that is included in or attached to the work
-      (an example is provided in the Appendix below).
-
-      "Derivative Works" shall mean any work, whether in Source or Object
-      form, that is based on (or derived from) the Work and for which the
-      editorial revisions, annotations, elaborations, or other modifications
-      represent, as a whole, an original work of authorship. For the purposes
-      of this License, Derivative Works shall not include works that remain
-      separable from, or merely link (or bind by name) to the interfaces of,
-      the Work and Derivative Works thereof.
-
-      "Contribution" shall mean any work of authorship, including
-      the original version of the Work and any modifications or additions
-      to that Work or Derivative Works thereof, that is intentionally
-      submitted to Licensor for inclusion in the Work by the copyright owner
-      or by an individual or Legal Entity authorized to submit on behalf of
-      the copyright owner. For the purposes of this definition, "submitted"
-      means any form of electronic, verbal, or written communication sent
-      to the Licensor or its representatives, including but not limited to
-      communication on electronic mailing lists, source code control systems,
-      and issue tracking systems that are managed by, or on behalf of, the
-      Licensor for the purpose of discussing and improving the Work, but
-      excluding communication that is conspicuously marked or otherwise
-      designated in writing by the copyright owner as "Not a Contribution."
-
-      "Contributor" shall mean Licensor and any individual or Legal Entity
-      on behalf of whom a Contribution has been received by Licensor and
-      subsequently incorporated within the Work.
-
-   2. Grant of Copyright License. Subject to the terms and conditions of
-      this License, each Contributor hereby grants to You a perpetual,
-      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
-      copyright license to reproduce, prepare Derivative Works of,
-      publicly display, publicly perform, sublicense, and distribute the
-      Work and such Derivative Works in Source or Object form.
-
-   3. Grant of Patent License. Subject to the terms and conditions of
-      this License, each Contributor hereby grants to You a perpetual,
-      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
-      (except as stated in this section) patent license to make, have made,
-      use, offer to sell, sell, import, and otherwise transfer the Work,
-      where such license applies only to those patent claims licensable
-      by such Contributor that are necessarily infringed by their
-      Contribution(s) alone or by combination of their Contribution(s)
-      with the Work to which such Contribution(s) was submitted. If You
-      institute patent litigation against any entity (including a
-      cross-claim or counterclaim in a lawsuit) alleging that the Work
-      or a Contribution incorporated within the Work constitutes direct
-      or contributory patent infringement, then any patent licenses
-      granted to You under this License for that Work shall terminate
-      as of the date such litigation is filed.
-
-   4. Redistribution. You may reproduce and distribute copies of the
-      Work or Derivative Works thereof in any medium, with or without
-      modifications, and in Source or Object form, provided that You
-      meet the following conditions:
-
-      (a) You must give any other recipients of the Work or
-          Derivative Works a copy of this License; and
-
-      (b) You must cause any modified files to carry prominent notices
-          stating that You changed the files; and
-
-      (c) You must retain, in the Source form of any Derivative Works
-          that You distribute, all copyright, patent, trademark, and
-          attribution notices from the Source form of the Work,
-          excluding those notices that do not pertain to any part of
-          the Derivative Works; and
-
-      (d) If the Work includes a "NOTICE" text file as part of its
-          distribution, then any Derivative Works that You distribute must
-          include a readable copy of the attribution notices contained
-          within such NOTICE file, excluding those notices that do not
-          pertain to any part of the Derivative Works, in at least one
-          of the following places: within a NOTICE text file distributed
-          as part of the Derivative Works; within the Source form or
-          documentation, if provided along with the Derivative Works; or,
-          within a display generated by the Derivative Works, if and
-          wherever such third-party notices normally appear. The contents
-          of the NOTICE file are for informational purposes only and
-          do not modify the License. You may add Your own attribution
-          notices within Derivative Works that You distribute, alongside
-          or as an addendum to the NOTICE text from the Work, provided
-          that such additional attribution notices cannot be construed
-          as modifying the License.
-
-      You may add Your own copyright statement to Your modifications and
-      may provide additional or different license terms and conditions
-      for use, reproduction, or distribution of Your modifications, or
-      for any such Derivative Works as a whole, provided Your use,
-      reproduction, and distribution of the Work otherwise complies with
-      the conditions stated in this License.
-
-   5. Submission of Contributions. Unless You explicitly state otherwise,
-      any Contribution intentionally submitted for inclusion in the Work
-      by You to the Licensor shall be under the terms and conditions of
-      this License, without any additional terms or conditions.
-      Notwithstanding the above, nothing herein shall supersede or modify
-      the terms of any separate license agreement you may have executed
-      with Licensor regarding such Contributions.
-
-   6. Trademarks. This License does not grant permission to use the trade
-      names, trademarks, service marks, or product names of the Licensor,
-      except as required for reasonable and customary use in describing the
-      origin of the Work and reproducing the content of the NOTICE file.
-
-   7. Disclaimer of Warranty. Unless required by applicable law or
-      agreed to in writing, Licensor provides the Work (and each
-      Contributor provides its Contributions) on an "AS IS" BASIS,
-      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
-      implied, including, without limitation, any warranties or conditions
-      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
-      PARTICULAR PURPOSE. You are solely responsible for determining the
-      appropriateness of using or redistributing the Work and assume any
-      risks associated with Your exercise of permissions under this License.
-
-   8. Limitation of Liability. In no event and under no legal theory,
-      whether in tort (including negligence), contract, or otherwise,
-      unless required by applicable law (such as deliberate and grossly
-      negligent acts) or agreed to in writing, shall any Contributor be
-      liable to You for damages, including any direct, indirect, special,
-      incidental, or consequential damages of any character arising as a
-      result of this License or out of the use or inability to use the
-      Work (including but not limited to damages for loss of goodwill,
-      work stoppage, computer failure or malfunction, or any and all
-      other commercial damages or losses), even if such Contributor
-      has been advised of the possibility of such damages.
-
-   9. Accepting Warranty or Additional Liability. While redistributing
-      the Work or Derivative Works thereof, You may choose to offer,
-      and charge a fee for, acceptance of support, warranty, indemnity,
-      or other liability obligations and/or rights consistent with this
-      License. However, in accepting such obligations, You may act only
-      on Your own behalf and on Your sole responsibility, not on behalf
-      of any other Contributor, and only if You agree to indemnify,
-      defend, and hold each Contributor harmless for any liability
-      incurred by, or claims asserted against, such Contributor by reason
-      of your accepting any such warranty or additional liability.
-
-   END OF TERMS AND CONDITIONS
-
-
-
-AndroidX documentfile library:
-
-
-   Copyright (c) 2005-2011, 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.
-
-   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.
-
-
-                                 Apache License
-                           Version 2.0, January 2004
-                        http://www.apache.org/licenses/
-
-   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
-
-   1. Definitions.
-
-      "License" shall mean the terms and conditions for use, reproduction,
-      and distribution as defined by Sections 1 through 9 of this document.
-
-      "Licensor" shall mean the copyright owner or entity authorized by
-      the copyright owner that is granting the License.
-
-      "Legal Entity" shall mean the union of the acting entity and all
-      other entities that control, are controlled by, or are under common
-      control with that entity. For the purposes of this definition,
-      "control" means (i) the power, direct or indirect, to cause the
-      direction or management of such entity, whether by contract or
-      otherwise, or (ii) ownership of fifty percent (50%) or more of the
-      outstanding shares, or (iii) beneficial ownership of such entity.
-
-      "You" (or "Your") shall mean an individual or Legal Entity
-      exercising permissions granted by this License.
-
-      "Source" form shall mean the preferred form for making modifications,
-      including but not limited to software source code, documentation
-      source, and configuration files.
-
-      "Object" form shall mean any form resulting from mechanical
-      transformation or translation of a Source form, including but
-      not limited to compiled object code, generated documentation,
-      and conversions to other media types.
-
-      "Work" shall mean the work of authorship, whether in Source or
-      Object form, made available under the License, as indicated by a
-      copyright notice that is included in or attached to the work
-      (an example is provided in the Appendix below).
-
-      "Derivative Works" shall mean any work, whether in Source or Object
-      form, that is based on (or derived from) the Work and for which the
-      editorial revisions, annotations, elaborations, or other modifications
-      represent, as a whole, an original work of authorship. For the purposes
-      of this License, Derivative Works shall not include works that remain
-      separable from, or merely link (or bind by name) to the interfaces of,
-      the Work and Derivative Works thereof.
-
-      "Contribution" shall mean any work of authorship, including
-      the original version of the Work and any modifications or additions
-      to that Work or Derivative Works thereof, that is intentionally
-      submitted to Licensor for inclusion in the Work by the copyright owner
-      or by an individual or Legal Entity authorized to submit on behalf of
-      the copyright owner. For the purposes of this definition, "submitted"
-      means any form of electronic, verbal, or written communication sent
-      to the Licensor or its representatives, including but not limited to
-      communication on electronic mailing lists, source code control systems,
-      and issue tracking systems that are managed by, or on behalf of, the
-      Licensor for the purpose of discussing and improving the Work, but
-      excluding communication that is conspicuously marked or otherwise
-      designated in writing by the copyright owner as "Not a Contribution."
-
-      "Contributor" shall mean Licensor and any individual or Legal Entity
-      on behalf of whom a Contribution has been received by Licensor and
-      subsequently incorporated within the Work.
-
-   2. Grant of Copyright License. Subject to the terms and conditions of
-      this License, each Contributor hereby grants to You a perpetual,
-      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
-      copyright license to reproduce, prepare Derivative Works of,
-      publicly display, publicly perform, sublicense, and distribute the
-      Work and such Derivative Works in Source or Object form.
-
-   3. Grant of Patent License. Subject to the terms and conditions of
-      this License, each Contributor hereby grants to You a perpetual,
-      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
-      (except as stated in this section) patent license to make, have made,
-      use, offer to sell, sell, import, and otherwise transfer the Work,
-      where such license applies only to those patent claims licensable
-      by such Contributor that are necessarily infringed by their
-      Contribution(s) alone or by combination of their Contribution(s)
-      with the Work to which such Contribution(s) was submitted. If You
-      institute patent litigation against any entity (including a
-      cross-claim or counterclaim in a lawsuit) alleging that the Work
-      or a Contribution incorporated within the Work constitutes direct
-      or contributory patent infringement, then any patent licenses
-      granted to You under this License for that Work shall terminate
-      as of the date such litigation is filed.
-
-   4. Redistribution. You may reproduce and distribute copies of the
-      Work or Derivative Works thereof in any medium, with or without
-      modifications, and in Source or Object form, provided that You
-      meet the following conditions:
-
-      (a) You must give any other recipients of the Work or
-          Derivative Works a copy of this License; and
-
-      (b) You must cause any modified files to carry prominent notices
-          stating that You changed the files; and
-
-      (c) You must retain, in the Source form of any Derivative Works
-          that You distribute, all copyright, patent, trademark, and
-          attribution notices from the Source form of the Work,
-          excluding those notices that do not pertain to any part of
-          the Derivative Works; and
-
-      (d) If the Work includes a "NOTICE" text file as part of its
-          distribution, then any Derivative Works that You distribute must
-          include a readable copy of the attribution notices contained
-          within such NOTICE file, excluding those notices that do not
-          pertain to any part of the Derivative Works, in at least one
-          of the following places: within a NOTICE text file distributed
-          as part of the Derivative Works; within the Source form or
-          documentation, if provided along with the Derivative Works; or,
-          within a display generated by the Derivative Works, if and
-          wherever such third-party notices normally appear. The contents
-          of the NOTICE file are for informational purposes only and
-          do not modify the License. You may add Your own attribution
-          notices within Derivative Works that You distribute, alongside
-          or as an addendum to the NOTICE text from the Work, provided
-          that such additional attribution notices cannot be construed
-          as modifying the License.
-
-      You may add Your own copyright statement to Your modifications and
-      may provide additional or different license terms and conditions
-      for use, reproduction, or distribution of Your modifications, or
-      for any such Derivative Works as a whole, provided Your use,
-      reproduction, and distribution of the Work otherwise complies with
-      the conditions stated in this License.
-
-   5. Submission of Contributions. Unless You explicitly state otherwise,
-      any Contribution intentionally submitted for inclusion in the Work
-      by You to the Licensor shall be under the terms and conditions of
-      this License, without any additional terms or conditions.
-      Notwithstanding the above, nothing herein shall supersede or modify
-      the terms of any separate license agreement you may have executed
-      with Licensor regarding such Contributions.
-
-   6. Trademarks. This License does not grant permission to use the trade
-      names, trademarks, service marks, or product names of the Licensor,
-      except as required for reasonable and customary use in describing the
-      origin of the Work and reproducing the content of the NOTICE file.
-
-   7. Disclaimer of Warranty. Unless required by applicable law or
-      agreed to in writing, Licensor provides the Work (and each
-      Contributor provides its Contributions) on an "AS IS" BASIS,
-      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
-      implied, including, without limitation, any warranties or conditions
-      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
-      PARTICULAR PURPOSE. You are solely responsible for determining the
-      appropriateness of using or redistributing the Work and assume any
-      risks associated with Your exercise of permissions under this License.
-
-   8. Limitation of Liability. In no event and under no legal theory,
-      whether in tort (including negligence), contract, or otherwise,
-      unless required by applicable law (such as deliberate and grossly
-      negligent acts) or agreed to in writing, shall any Contributor be
-      liable to You for damages, including any direct, indirect, special,
-      incidental, or consequential damages of any character arising as a
-      result of this License or out of the use or inability to use the
-      Work (including but not limited to damages for loss of goodwill,
-      work stoppage, computer failure or malfunction, or any and all
-      other commercial damages or losses), even if such Contributor
-      has been advised of the possibility of such damages.
-
-   9. Accepting Warranty or Additional Liability. While redistributing
-      the Work or Derivative Works thereof, You may choose to offer,
-      and charge a fee for, acceptance of support, warranty, indemnity,
-      or other liability obligations and/or rights consistent with this
-      License. However, in accepting such obligations, You may act only
-      on Your own behalf and on Your sole responsibility, not on behalf
-      of any other Contributor, and only if You agree to indemnify,
-      defend, and hold each Contributor harmless for any liability
-      incurred by, or claims asserted against, such Contributor by reason
-      of your accepting any such warranty or additional liability.
-
-   END OF TERMS AND CONDITIONS
-
-
-
-AndroidX drawerlayout library:
-
-
-   Copyright (c) 2005-2011, 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.
-
-   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.
-
-
-                                 Apache License
-                           Version 2.0, January 2004
-                        http://www.apache.org/licenses/
-
-   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
-
-   1. Definitions.
-
-      "License" shall mean the terms and conditions for use, reproduction,
-      and distribution as defined by Sections 1 through 9 of this document.
-
-      "Licensor" shall mean the copyright owner or entity authorized by
-      the copyright owner that is granting the License.
-
-      "Legal Entity" shall mean the union of the acting entity and all
-      other entities that control, are controlled by, or are under common
-      control with that entity. For the purposes of this definition,
-      "control" means (i) the power, direct or indirect, to cause the
-      direction or management of such entity, whether by contract or
-      otherwise, or (ii) ownership of fifty percent (50%) or more of the
-      outstanding shares, or (iii) beneficial ownership of such entity.
-
-      "You" (or "Your") shall mean an individual or Legal Entity
-      exercising permissions granted by this License.
-
-      "Source" form shall mean the preferred form for making modifications,
-      including but not limited to software source code, documentation
-      source, and configuration files.
-
-      "Object" form shall mean any form resulting from mechanical
-      transformation or translation of a Source form, including but
-      not limited to compiled object code, generated documentation,
-      and conversions to other media types.
-
-      "Work" shall mean the work of authorship, whether in Source or
-      Object form, made available under the License, as indicated by a
-      copyright notice that is included in or attached to the work
-      (an example is provided in the Appendix below).
-
-      "Derivative Works" shall mean any work, whether in Source or Object
-      form, that is based on (or derived from) the Work and for which the
-      editorial revisions, annotations, elaborations, or other modifications
-      represent, as a whole, an original work of authorship. For the purposes
-      of this License, Derivative Works shall not include works that remain
-      separable from, or merely link (or bind by name) to the interfaces of,
-      the Work and Derivative Works thereof.
-
-      "Contribution" shall mean any work of authorship, including
-      the original version of the Work and any modifications or additions
-      to that Work or Derivative Works thereof, that is intentionally
-      submitted to Licensor for inclusion in the Work by the copyright owner
-      or by an individual or Legal Entity authorized to submit on behalf of
-      the copyright owner. For the purposes of this definition, "submitted"
-      means any form of electronic, verbal, or written communication sent
-      to the Licensor or its representatives, including but not limited to
-      communication on electronic mailing lists, source code control systems,
-      and issue tracking systems that are managed by, or on behalf of, the
-      Licensor for the purpose of discussing and improving the Work, but
-      excluding communication that is conspicuously marked or otherwise
-      designated in writing by the copyright owner as "Not a Contribution."
-
-      "Contributor" shall mean Licensor and any individual or Legal Entity
-      on behalf of whom a Contribution has been received by Licensor and
-      subsequently incorporated within the Work.
-
-   2. Grant of Copyright License. Subject to the terms and conditions of
-      this License, each Contributor hereby grants to You a perpetual,
-      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
-      copyright license to reproduce, prepare Derivative Works of,
-      publicly display, publicly perform, sublicense, and distribute the
-      Work and such Derivative Works in Source or Object form.
-
-   3. Grant of Patent License. Subject to the terms and conditions of
-      this License, each Contributor hereby grants to You a perpetual,
-      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
-      (except as stated in this section) patent license to make, have made,
-      use, offer to sell, sell, import, and otherwise transfer the Work,
-      where such license applies only to those patent claims licensable
-      by such Contributor that are necessarily infringed by their
-      Contribution(s) alone or by combination of their Contribution(s)
-      with the Work to which such Contribution(s) was submitted. If You
-      institute patent litigation against any entity (including a
-      cross-claim or counterclaim in a lawsuit) alleging that the Work
-      or a Contribution incorporated within the Work constitutes direct
-      or contributory patent infringement, then any patent licenses
-      granted to You under this License for that Work shall terminate
-      as of the date such litigation is filed.
-
-   4. Redistribution. You may reproduce and distribute copies of the
-      Work or Derivative Works thereof in any medium, with or without
-      modifications, and in Source or Object form, provided that You
-      meet the following conditions:
-
-      (a) You must give any other recipients of the Work or
-          Derivative Works a copy of this License; and
-
-      (b) You must cause any modified files to carry prominent notices
-          stating that You changed the files; and
-
-      (c) You must retain, in the Source form of any Derivative Works
-          that You distribute, all copyright, patent, trademark, and
-          attribution notices from the Source form of the Work,
-          excluding those notices that do not pertain to any part of
-          the Derivative Works; and
-
-      (d) If the Work includes a "NOTICE" text file as part of its
-          distribution, then any Derivative Works that You distribute must
-          include a readable copy of the attribution notices contained
-          within such NOTICE file, excluding those notices that do not
-          pertain to any part of the Derivative Works, in at least one
-          of the following places: within a NOTICE text file distributed
-          as part of the Derivative Works; within the Source form or
-          documentation, if provided along with the Derivative Works; or,
-          within a display generated by the Derivative Works, if and
-          wherever such third-party notices normally appear. The contents
-          of the NOTICE file are for informational purposes only and
-          do not modify the License. You may add Your own attribution
-          notices within Derivative Works that You distribute, alongside
-          or as an addendum to the NOTICE text from the Work, provided
-          that such additional attribution notices cannot be construed
-          as modifying the License.
-
-      You may add Your own copyright statement to Your modifications and
-      may provide additional or different license terms and conditions
-      for use, reproduction, or distribution of Your modifications, or
-      for any such Derivative Works as a whole, provided Your use,
-      reproduction, and distribution of the Work otherwise complies with
-      the conditions stated in this License.
-
-   5. Submission of Contributions. Unless You explicitly state otherwise,
-      any Contribution intentionally submitted for inclusion in the Work
-      by You to the Licensor shall be under the terms and conditions of
-      this License, without any additional terms or conditions.
-      Notwithstanding the above, nothing herein shall supersede or modify
-      the terms of any separate license agreement you may have executed
-      with Licensor regarding such Contributions.
-
-   6. Trademarks. This License does not grant permission to use the trade
-      names, trademarks, service marks, or product names of the Licensor,
-      except as required for reasonable and customary use in describing the
-      origin of the Work and reproducing the content of the NOTICE file.
-
-   7. Disclaimer of Warranty. Unless required by applicable law or
-      agreed to in writing, Licensor provides the Work (and each
-      Contributor provides its Contributions) on an "AS IS" BASIS,
-      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
-      implied, including, without limitation, any warranties or conditions
-      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
-      PARTICULAR PURPOSE. You are solely responsible for determining the
-      appropriateness of using or redistributing the Work and assume any
-      risks associated with Your exercise of permissions under this License.
-
-   8. Limitation of Liability. In no event and under no legal theory,
-      whether in tort (including negligence), contract, or otherwise,
-      unless required by applicable law (such as deliberate and grossly
-      negligent acts) or agreed to in writing, shall any Contributor be
-      liable to You for damages, including any direct, indirect, special,
-      incidental, or consequential damages of any character arising as a
-      result of this License or out of the use or inability to use the
-      Work (including but not limited to damages for loss of goodwill,
-      work stoppage, computer failure or malfunction, or any and all
-      other commercial damages or losses), even if such Contributor
-      has been advised of the possibility of such damages.
-
-   9. Accepting Warranty or Additional Liability. While redistributing
-      the Work or Derivative Works thereof, You may choose to offer,
-      and charge a fee for, acceptance of support, warranty, indemnity,
-      or other liability obligations and/or rights consistent with this
-      License. However, in accepting such obligations, You may act only
-      on Your own behalf and on Your sole responsibility, not on behalf
-      of any other Contributor, and only if You agree to indemnify,
-      defend, and hold each Contributor harmless for any liability
-      incurred by, or claims asserted against, such Contributor by reason
-      of your accepting any such warranty or additional liability.
-
-   END OF TERMS AND CONDITIONS
-
-
-
-AndroidX fragment library:
-
-
-   Copyright (c) 2005-2011, 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.
-
-   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.
-
-
-                                 Apache License
-                           Version 2.0, January 2004
-                        http://www.apache.org/licenses/
-
-   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
-
-   1. Definitions.
-
-      "License" shall mean the terms and conditions for use, reproduction,
-      and distribution as defined by Sections 1 through 9 of this document.
-
-      "Licensor" shall mean the copyright owner or entity authorized by
-      the copyright owner that is granting the License.
-
-      "Legal Entity" shall mean the union of the acting entity and all
-      other entities that control, are controlled by, or are under common
-      control with that entity. For the purposes of this definition,
-      "control" means (i) the power, direct or indirect, to cause the
-      direction or management of such entity, whether by contract or
-      otherwise, or (ii) ownership of fifty percent (50%) or more of the
-      outstanding shares, or (iii) beneficial ownership of such entity.
-
-      "You" (or "Your") shall mean an individual or Legal Entity
-      exercising permissions granted by this License.
-
-      "Source" form shall mean the preferred form for making modifications,
-      including but not limited to software source code, documentation
-      source, and configuration files.
-
-      "Object" form shall mean any form resulting from mechanical
-      transformation or translation of a Source form, including but
-      not limited to compiled object code, generated documentation,
-      and conversions to other media types.
-
-      "Work" shall mean the work of authorship, whether in Source or
-      Object form, made available under the License, as indicated by a
-      copyright notice that is included in or attached to the work
-      (an example is provided in the Appendix below).
-
-      "Derivative Works" shall mean any work, whether in Source or Object
-      form, that is based on (or derived from) the Work and for which the
-      editorial revisions, annotations, elaborations, or other modifications
-      represent, as a whole, an original work of authorship. For the purposes
-      of this License, Derivative Works shall not include works that remain
-      separable from, or merely link (or bind by name) to the interfaces of,
-      the Work and Derivative Works thereof.
-
-      "Contribution" shall mean any work of authorship, including
-      the original version of the Work and any modifications or additions
-      to that Work or Derivative Works thereof, that is intentionally
-      submitted to Licensor for inclusion in the Work by the copyright owner
-      or by an individual or Legal Entity authorized to submit on behalf of
-      the copyright owner. For the purposes of this definition, "submitted"
-      means any form of electronic, verbal, or written communication sent
-      to the Licensor or its representatives, including but not limited to
-      communication on electronic mailing lists, source code control systems,
-      and issue tracking systems that are managed by, or on behalf of, the
-      Licensor for the purpose of discussing and improving the Work, but
-      excluding communication that is conspicuously marked or otherwise
-      designated in writing by the copyright owner as "Not a Contribution."
-
-      "Contributor" shall mean Licensor and any individual or Legal Entity
-      on behalf of whom a Contribution has been received by Licensor and
-      subsequently incorporated within the Work.
-
-   2. Grant of Copyright License. Subject to the terms and conditions of
-      this License, each Contributor hereby grants to You a perpetual,
-      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
-      copyright license to reproduce, prepare Derivative Works of,
-      publicly display, publicly perform, sublicense, and distribute the
-      Work and such Derivative Works in Source or Object form.
-
-   3. Grant of Patent License. Subject to the terms and conditions of
-      this License, each Contributor hereby grants to You a perpetual,
-      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
-      (except as stated in this section) patent license to make, have made,
-      use, offer to sell, sell, import, and otherwise transfer the Work,
-      where such license applies only to those patent claims licensable
-      by such Contributor that are necessarily infringed by their
-      Contribution(s) alone or by combination of their Contribution(s)
-      with the Work to which such Contribution(s) was submitted. If You
-      institute patent litigation against any entity (including a
-      cross-claim or counterclaim in a lawsuit) alleging that the Work
-      or a Contribution incorporated within the Work constitutes direct
-      or contributory patent infringement, then any patent licenses
-      granted to You under this License for that Work shall terminate
-      as of the date such litigation is filed.
-
-   4. Redistribution. You may reproduce and distribute copies of the
-      Work or Derivative Works thereof in any medium, with or without
-      modifications, and in Source or Object form, provided that You
-      meet the following conditions:
-
-      (a) You must give any other recipients of the Work or
-          Derivative Works a copy of this License; and
-
-      (b) You must cause any modified files to carry prominent notices
-          stating that You changed the files; and
-
-      (c) You must retain, in the Source form of any Derivative Works
-          that You distribute, all copyright, patent, trademark, and
-          attribution notices from the Source form of the Work,
-          excluding those notices that do not pertain to any part of
-          the Derivative Works; and
-
-      (d) If the Work includes a "NOTICE" text file as part of its
-          distribution, then any Derivative Works that You distribute must
-          include a readable copy of the attribution notices contained
-          within such NOTICE file, excluding those notices that do not
-          pertain to any part of the Derivative Works, in at least one
-          of the following places: within a NOTICE text file distributed
-          as part of the Derivative Works; within the Source form or
-          documentation, if provided along with the Derivative Works; or,
-          within a display generated by the Derivative Works, if and
-          wherever such third-party notices normally appear. The contents
-          of the NOTICE file are for informational purposes only and
-          do not modify the License. You may add Your own attribution
-          notices within Derivative Works that You distribute, alongside
-          or as an addendum to the NOTICE text from the Work, provided
-          that such additional attribution notices cannot be construed
-          as modifying the License.
-
-      You may add Your own copyright statement to Your modifications and
-      may provide additional or different license terms and conditions
-      for use, reproduction, or distribution of Your modifications, or
-      for any such Derivative Works as a whole, provided Your use,
-      reproduction, and distribution of the Work otherwise complies with
-      the conditions stated in this License.
-
-   5. Submission of Contributions. Unless You explicitly state otherwise,
-      any Contribution intentionally submitted for inclusion in the Work
-      by You to the Licensor shall be under the terms and conditions of
-      this License, without any additional terms or conditions.
-      Notwithstanding the above, nothing herein shall supersede or modify
-      the terms of any separate license agreement you may have executed
-      with Licensor regarding such Contributions.
-
-   6. Trademarks. This License does not grant permission to use the trade
-      names, trademarks, service marks, or product names of the Licensor,
-      except as required for reasonable and customary use in describing the
-      origin of the Work and reproducing the content of the NOTICE file.
-
-   7. Disclaimer of Warranty. Unless required by applicable law or
-      agreed to in writing, Licensor provides the Work (and each
-      Contributor provides its Contributions) on an "AS IS" BASIS,
-      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
-      implied, including, without limitation, any warranties or conditions
-      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
-      PARTICULAR PURPOSE. You are solely responsible for determining the
-      appropriateness of using or redistributing the Work and assume any
-      risks associated with Your exercise of permissions under this License.
-
-   8. Limitation of Liability. In no event and under no legal theory,
-      whether in tort (including negligence), contract, or otherwise,
-      unless required by applicable law (such as deliberate and grossly
-      negligent acts) or agreed to in writing, shall any Contributor be
-      liable to You for damages, including any direct, indirect, special,
-      incidental, or consequential damages of any character arising as a
-      result of this License or out of the use or inability to use the
-      Work (including but not limited to damages for loss of goodwill,
-      work stoppage, computer failure or malfunction, or any and all
-      other commercial damages or losses), even if such Contributor
-      has been advised of the possibility of such damages.
-
-   9. Accepting Warranty or Additional Liability. While redistributing
-      the Work or Derivative Works thereof, You may choose to offer,
-      and charge a fee for, acceptance of support, warranty, indemnity,
-      or other liability obligations and/or rights consistent with this
-      License. However, in accepting such obligations, You may act only
-      on Your own behalf and on Your sole responsibility, not on behalf
-      of any other Contributor, and only if You agree to indemnify,
-      defend, and hold each Contributor harmless for any liability
-      incurred by, or claims asserted against, such Contributor by reason
-      of your accepting any such warranty or additional liability.
-
-   END OF TERMS AND CONDITIONS
-
-
-
-AndroidX interpolator library:
-
-
-   Copyright (c) 2005-2011, 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.
-
-   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.
-
-
-                                 Apache License
-                           Version 2.0, January 2004
-                        http://www.apache.org/licenses/
-
-   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
-
-   1. Definitions.
-
-      "License" shall mean the terms and conditions for use, reproduction,
-      and distribution as defined by Sections 1 through 9 of this document.
-
-      "Licensor" shall mean the copyright owner or entity authorized by
-      the copyright owner that is granting the License.
-
-      "Legal Entity" shall mean the union of the acting entity and all
-      other entities that control, are controlled by, or are under common
-      control with that entity. For the purposes of this definition,
-      "control" means (i) the power, direct or indirect, to cause the
-      direction or management of such entity, whether by contract or
-      otherwise, or (ii) ownership of fifty percent (50%) or more of the
-      outstanding shares, or (iii) beneficial ownership of such entity.
-
-      "You" (or "Your") shall mean an individual or Legal Entity
-      exercising permissions granted by this License.
-
-      "Source" form shall mean the preferred form for making modifications,
-      including but not limited to software source code, documentation
-      source, and configuration files.
-
-      "Object" form shall mean any form resulting from mechanical
-      transformation or translation of a Source form, including but
-      not limited to compiled object code, generated documentation,
-      and conversions to other media types.
-
-      "Work" shall mean the work of authorship, whether in Source or
-      Object form, made available under the License, as indicated by a
-      copyright notice that is included in or attached to the work
-      (an example is provided in the Appendix below).
-
-      "Derivative Works" shall mean any work, whether in Source or Object
-      form, that is based on (or derived from) the Work and for which the
-      editorial revisions, annotations, elaborations, or other modifications
-      represent, as a whole, an original work of authorship. For the purposes
-      of this License, Derivative Works shall not include works that remain
-      separable from, or merely link (or bind by name) to the interfaces of,
-      the Work and Derivative Works thereof.
-
-      "Contribution" shall mean any work of authorship, including
-      the original version of the Work and any modifications or additions
-      to that Work or Derivative Works thereof, that is intentionally
-      submitted to Licensor for inclusion in the Work by the copyright owner
-      or by an individual or Legal Entity authorized to submit on behalf of
-      the copyright owner. For the purposes of this definition, "submitted"
-      means any form of electronic, verbal, or written communication sent
-      to the Licensor or its representatives, including but not limited to
-      communication on electronic mailing lists, source code control systems,
-      and issue tracking systems that are managed by, or on behalf of, the
-      Licensor for the purpose of discussing and improving the Work, but
-      excluding communication that is conspicuously marked or otherwise
-      designated in writing by the copyright owner as "Not a Contribution."
-
-      "Contributor" shall mean Licensor and any individual or Legal Entity
-      on behalf of whom a Contribution has been received by Licensor and
-      subsequently incorporated within the Work.
-
-   2. Grant of Copyright License. Subject to the terms and conditions of
-      this License, each Contributor hereby grants to You a perpetual,
-      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
-      copyright license to reproduce, prepare Derivative Works of,
-      publicly display, publicly perform, sublicense, and distribute the
-      Work and such Derivative Works in Source or Object form.
-
-   3. Grant of Patent License. Subject to the terms and conditions of
-      this License, each Contributor hereby grants to You a perpetual,
-      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
-      (except as stated in this section) patent license to make, have made,
-      use, offer to sell, sell, import, and otherwise transfer the Work,
-      where such license applies only to those patent claims licensable
-      by such Contributor that are necessarily infringed by their
-      Contribution(s) alone or by combination of their Contribution(s)
-      with the Work to which such Contribution(s) was submitted. If You
-      institute patent litigation against any entity (including a
-      cross-claim or counterclaim in a lawsuit) alleging that the Work
-      or a Contribution incorporated within the Work constitutes direct
-      or contributory patent infringement, then any patent licenses
-      granted to You under this License for that Work shall terminate
-      as of the date such litigation is filed.
-
-   4. Redistribution. You may reproduce and distribute copies of the
-      Work or Derivative Works thereof in any medium, with or without
-      modifications, and in Source or Object form, provided that You
-      meet the following conditions:
-
-      (a) You must give any other recipients of the Work or
-          Derivative Works a copy of this License; and
-
-      (b) You must cause any modified files to carry prominent notices
-          stating that You changed the files; and
-
-      (c) You must retain, in the Source form of any Derivative Works
-          that You distribute, all copyright, patent, trademark, and
-          attribution notices from the Source form of the Work,
-          excluding those notices that do not pertain to any part of
-          the Derivative Works; and
-
-      (d) If the Work includes a "NOTICE" text file as part of its
-          distribution, then any Derivative Works that You distribute must
-          include a readable copy of the attribution notices contained
-          within such NOTICE file, excluding those notices that do not
-          pertain to any part of the Derivative Works, in at least one
-          of the following places: within a NOTICE text file distributed
-          as part of the Derivative Works; within the Source form or
-          documentation, if provided along with the Derivative Works; or,
-          within a display generated by the Derivative Works, if and
-          wherever such third-party notices normally appear. The contents
-          of the NOTICE file are for informational purposes only and
-          do not modify the License. You may add Your own attribution
-          notices within Derivative Works that You distribute, alongside
-          or as an addendum to the NOTICE text from the Work, provided
-          that such additional attribution notices cannot be construed
-          as modifying the License.
-
-      You may add Your own copyright statement to Your modifications and
-      may provide additional or different license terms and conditions
-      for use, reproduction, or distribution of Your modifications, or
-      for any such Derivative Works as a whole, provided Your use,
-      reproduction, and distribution of the Work otherwise complies with
-      the conditions stated in this License.
-
-   5. Submission of Contributions. Unless You explicitly state otherwise,
-      any Contribution intentionally submitted for inclusion in the Work
-      by You to the Licensor shall be under the terms and conditions of
-      this License, without any additional terms or conditions.
-      Notwithstanding the above, nothing herein shall supersede or modify
-      the terms of any separate license agreement you may have executed
-      with Licensor regarding such Contributions.
-
-   6. Trademarks. This License does not grant permission to use the trade
-      names, trademarks, service marks, or product names of the Licensor,
-      except as required for reasonable and customary use in describing the
-      origin of the Work and reproducing the content of the NOTICE file.
-
-   7. Disclaimer of Warranty. Unless required by applicable law or
-      agreed to in writing, Licensor provides the Work (and each
-      Contributor provides its Contributions) on an "AS IS" BASIS,
-      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
-      implied, including, without limitation, any warranties or conditions
-      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
-      PARTICULAR PURPOSE. You are solely responsible for determining the
-      appropriateness of using or redistributing the Work and assume any
-      risks associated with Your exercise of permissions under this License.
-
-   8. Limitation of Liability. In no event and under no legal theory,
-      whether in tort (including negligence), contract, or otherwise,
-      unless required by applicable law (such as deliberate and grossly
-      negligent acts) or agreed to in writing, shall any Contributor be
-      liable to You for damages, including any direct, indirect, special,
-      incidental, or consequential damages of any character arising as a
-      result of this License or out of the use or inability to use the
-      Work (including but not limited to damages for loss of goodwill,
-      work stoppage, computer failure or malfunction, or any and all
-      other commercial damages or losses), even if such Contributor
-      has been advised of the possibility of such damages.
-
-   9. Accepting Warranty or Additional Liability. While redistributing
-      the Work or Derivative Works thereof, You may choose to offer,
-      and charge a fee for, acceptance of support, warranty, indemnity,
-      or other liability obligations and/or rights consistent with this
-      License. However, in accepting such obligations, You may act only
-      on Your own behalf and on Your sole responsibility, not on behalf
-      of any other Contributor, and only if You agree to indemnify,
-      defend, and hold each Contributor harmless for any liability
-      incurred by, or claims asserted against, such Contributor by reason
-      of your accepting any such warranty or additional liability.
-
-   END OF TERMS AND CONDITIONS
-
-AndroidX legacy coreui library:
-
-
-   Copyright (c) 2005-2011, 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.
-
-   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.
-
-
-                                 Apache License
-                           Version 2.0, January 2004
-                        http://www.apache.org/licenses/
-
-   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
-
-   1. Definitions.
-
-      "License" shall mean the terms and conditions for use, reproduction,
-      and distribution as defined by Sections 1 through 9 of this document.
-
-      "Licensor" shall mean the copyright owner or entity authorized by
-      the copyright owner that is granting the License.
-
-      "Legal Entity" shall mean the union of the acting entity and all
-      other entities that control, are controlled by, or are under common
-      control with that entity. For the purposes of this definition,
-      "control" means (i) the power, direct or indirect, to cause the
-      direction or management of such entity, whether by contract or
-      otherwise, or (ii) ownership of fifty percent (50%) or more of the
-      outstanding shares, or (iii) beneficial ownership of such entity.
-
-      "You" (or "Your") shall mean an individual or Legal Entity
-      exercising permissions granted by this License.
-
-      "Source" form shall mean the preferred form for making modifications,
-      including but not limited to software source code, documentation
-      source, and configuration files.
-
-      "Object" form shall mean any form resulting from mechanical
-      transformation or translation of a Source form, including but
-      not limited to compiled object code, generated documentation,
-      and conversions to other media types.
-
-      "Work" shall mean the work of authorship, whether in Source or
-      Object form, made available under the License, as indicated by a
-      copyright notice that is included in or attached to the work
-      (an example is provided in the Appendix below).
-
-      "Derivative Works" shall mean any work, whether in Source or Object
-      form, that is based on (or derived from) the Work and for which the
-      editorial revisions, annotations, elaborations, or other modifications
-      represent, as a whole, an original work of authorship. For the purposes
-      of this License, Derivative Works shall not include works that remain
-      separable from, or merely link (or bind by name) to the interfaces of,
-      the Work and Derivative Works thereof.
-
-      "Contribution" shall mean any work of authorship, including
-      the original version of the Work and any modifications or additions
-      to that Work or Derivative Works thereof, that is intentionally
-      submitted to Licensor for inclusion in the Work by the copyright owner
-      or by an individual or Legal Entity authorized to submit on behalf of
-      the copyright owner. For the purposes of this definition, "submitted"
-      means any form of electronic, verbal, or written communication sent
-      to the Licensor or its representatives, including but not limited to
-      communication on electronic mailing lists, source code control systems,
-      and issue tracking systems that are managed by, or on behalf of, the
-      Licensor for the purpose of discussing and improving the Work, but
-      excluding communication that is conspicuously marked or otherwise
-      designated in writing by the copyright owner as "Not a Contribution."
-
-      "Contributor" shall mean Licensor and any individual or Legal Entity
-      on behalf of whom a Contribution has been received by Licensor and
-      subsequently incorporated within the Work.
-
-   2. Grant of Copyright License. Subject to the terms and conditions of
-      this License, each Contributor hereby grants to You a perpetual,
-      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
-      copyright license to reproduce, prepare Derivative Works of,
-      publicly display, publicly perform, sublicense, and distribute the
-      Work and such Derivative Works in Source or Object form.
-
-   3. Grant of Patent License. Subject to the terms and conditions of
-      this License, each Contributor hereby grants to You a perpetual,
-      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
-      (except as stated in this section) patent license to make, have made,
-      use, offer to sell, sell, import, and otherwise transfer the Work,
-      where such license applies only to those patent claims licensable
-      by such Contributor that are necessarily infringed by their
-      Contribution(s) alone or by combination of their Contribution(s)
-      with the Work to which such Contribution(s) was submitted. If You
-      institute patent litigation against any entity (including a
-      cross-claim or counterclaim in a lawsuit) alleging that the Work
-      or a Contribution incorporated within the Work constitutes direct
-      or contributory patent infringement, then any patent licenses
-      granted to You under this License for that Work shall terminate
-      as of the date such litigation is filed.
-
-   4. Redistribution. You may reproduce and distribute copies of the
-      Work or Derivative Works thereof in any medium, with or without
-      modifications, and in Source or Object form, provided that You
-      meet the following conditions:
-
-      (a) You must give any other recipients of the Work or
-          Derivative Works a copy of this License; and
-
-      (b) You must cause any modified files to carry prominent notices
-          stating that You changed the files; and
-
-      (c) You must retain, in the Source form of any Derivative Works
-          that You distribute, all copyright, patent, trademark, and
-          attribution notices from the Source form of the Work,
-          excluding those notices that do not pertain to any part of
-          the Derivative Works; and
-
-      (d) If the Work includes a "NOTICE" text file as part of its
-          distribution, then any Derivative Works that You distribute must
-          include a readable copy of the attribution notices contained
-          within such NOTICE file, excluding those notices that do not
-          pertain to any part of the Derivative Works, in at least one
-          of the following places: within a NOTICE text file distributed
-          as part of the Derivative Works; within the Source form or
-          documentation, if provided along with the Derivative Works; or,
-          within a display generated by the Derivative Works, if and
-          wherever such third-party notices normally appear. The contents
-          of the NOTICE file are for informational purposes only and
-          do not modify the License. You may add Your own attribution
-          notices within Derivative Works that You distribute, alongside
-          or as an addendum to the NOTICE text from the Work, provided
-          that such additional attribution notices cannot be construed
-          as modifying the License.
-
-      You may add Your own copyright statement to Your modifications and
-      may provide additional or different license terms and conditions
-      for use, reproduction, or distribution of Your modifications, or
-      for any such Derivative Works as a whole, provided Your use,
-      reproduction, and distribution of the Work otherwise complies with
-      the conditions stated in this License.
-
-   5. Submission of Contributions. Unless You explicitly state otherwise,
-      any Contribution intentionally submitted for inclusion in the Work
-      by You to the Licensor shall be under the terms and conditions of
-      this License, without any additional terms or conditions.
-      Notwithstanding the above, nothing herein shall supersede or modify
-      the terms of any separate license agreement you may have executed
-      with Licensor regarding such Contributions.
-
-   6. Trademarks. This License does not grant permission to use the trade
-      names, trademarks, service marks, or product names of the Licensor,
-      except as required for reasonable and customary use in describing the
-      origin of the Work and reproducing the content of the NOTICE file.
-
-   7. Disclaimer of Warranty. Unless required by applicable law or
-      agreed to in writing, Licensor provides the Work (and each
-      Contributor provides its Contributions) on an "AS IS" BASIS,
-      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
-      implied, including, without limitation, any warranties or conditions
-      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
-      PARTICULAR PURPOSE. You are solely responsible for determining the
-      appropriateness of using or redistributing the Work and assume any
-      risks associated with Your exercise of permissions under this License.
-
-   8. Limitation of Liability. In no event and under no legal theory,
-      whether in tort (including negligence), contract, or otherwise,
-      unless required by applicable law (such as deliberate and grossly
-      negligent acts) or agreed to in writing, shall any Contributor be
-      liable to You for damages, including any direct, indirect, special,
-      incidental, or consequential damages of any character arising as a
-      result of this License or out of the use or inability to use the
-      Work (including but not limited to damages for loss of goodwill,
-      work stoppage, computer failure or malfunction, or any and all
-      other commercial damages or losses), even if such Contributor
-      has been advised of the possibility of such damages.
-
-   9. Accepting Warranty or Additional Liability. While redistributing
-      the Work or Derivative Works thereof, You may choose to offer,
-      and charge a fee for, acceptance of support, warranty, indemnity,
-      or other liability obligations and/or rights consistent with this
-      License. However, in accepting such obligations, You may act only
-      on Your own behalf and on Your sole responsibility, not on behalf
-      of any other Contributor, and only if You agree to indemnify,
-      defend, and hold each Contributor harmless for any liability
-      incurred by, or claims asserted against, such Contributor by reason
-      of your accepting any such warranty or additional liability.
-
-   END OF TERMS AND CONDITIONS
-
-
-
-AndroidX legacy coreutils library:
-
-
-   Copyright (c) 2005-2011, 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.
-
-   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.
-
-
-                                 Apache License
-                           Version 2.0, January 2004
-                        http://www.apache.org/licenses/
-
-   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
-
-   1. Definitions.
-
-      "License" shall mean the terms and conditions for use, reproduction,
-      and distribution as defined by Sections 1 through 9 of this document.
-
-      "Licensor" shall mean the copyright owner or entity authorized by
-      the copyright owner that is granting the License.
-
-      "Legal Entity" shall mean the union of the acting entity and all
-      other entities that control, are controlled by, or are under common
-      control with that entity. For the purposes of this definition,
-      "control" means (i) the power, direct or indirect, to cause the
-      direction or management of such entity, whether by contract or
-      otherwise, or (ii) ownership of fifty percent (50%) or more of the
-      outstanding shares, or (iii) beneficial ownership of such entity.
-
-      "You" (or "Your") shall mean an individual or Legal Entity
-      exercising permissions granted by this License.
-
-      "Source" form shall mean the preferred form for making modifications,
-      including but not limited to software source code, documentation
-      source, and configuration files.
-
-      "Object" form shall mean any form resulting from mechanical
-      transformation or translation of a Source form, including but
-      not limited to compiled object code, generated documentation,
-      and conversions to other media types.
-
-      "Work" shall mean the work of authorship, whether in Source or
-      Object form, made available under the License, as indicated by a
-      copyright notice that is included in or attached to the work
-      (an example is provided in the Appendix below).
-
-      "Derivative Works" shall mean any work, whether in Source or Object
-      form, that is based on (or derived from) the Work and for which the
-      editorial revisions, annotations, elaborations, or other modifications
-      represent, as a whole, an original work of authorship. For the purposes
-      of this License, Derivative Works shall not include works that remain
-      separable from, or merely link (or bind by name) to the interfaces of,
-      the Work and Derivative Works thereof.
-
-      "Contribution" shall mean any work of authorship, including
-      the original version of the Work and any modifications or additions
-      to that Work or Derivative Works thereof, that is intentionally
-      submitted to Licensor for inclusion in the Work by the copyright owner
-      or by an individual or Legal Entity authorized to submit on behalf of
-      the copyright owner. For the purposes of this definition, "submitted"
-      means any form of electronic, verbal, or written communication sent
-      to the Licensor or its representatives, including but not limited to
-      communication on electronic mailing lists, source code control systems,
-      and issue tracking systems that are managed by, or on behalf of, the
-      Licensor for the purpose of discussing and improving the Work, but
-      excluding communication that is conspicuously marked or otherwise
-      designated in writing by the copyright owner as "Not a Contribution."
-
-      "Contributor" shall mean Licensor and any individual or Legal Entity
-      on behalf of whom a Contribution has been received by Licensor and
-      subsequently incorporated within the Work.
-
-   2. Grant of Copyright License. Subject to the terms and conditions of
-      this License, each Contributor hereby grants to You a perpetual,
-      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
-      copyright license to reproduce, prepare Derivative Works of,
-      publicly display, publicly perform, sublicense, and distribute the
-      Work and such Derivative Works in Source or Object form.
-
-   3. Grant of Patent License. Subject to the terms and conditions of
-      this License, each Contributor hereby grants to You a perpetual,
-      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
-      (except as stated in this section) patent license to make, have made,
-      use, offer to sell, sell, import, and otherwise transfer the Work,
-      where such license applies only to those patent claims licensable
-      by such Contributor that are necessarily infringed by their
-      Contribution(s) alone or by combination of their Contribution(s)
-      with the Work to which such Contribution(s) was submitted. If You
-      institute patent litigation against any entity (including a
-      cross-claim or counterclaim in a lawsuit) alleging that the Work
-      or a Contribution incorporated within the Work constitutes direct
-      or contributory patent infringement, then any patent licenses
-      granted to You under this License for that Work shall terminate
-      as of the date such litigation is filed.
-
-   4. Redistribution. You may reproduce and distribute copies of the
-      Work or Derivative Works thereof in any medium, with or without
-      modifications, and in Source or Object form, provided that You
-      meet the following conditions:
-
-      (a) You must give any other recipients of the Work or
-          Derivative Works a copy of this License; and
-
-      (b) You must cause any modified files to carry prominent notices
-          stating that You changed the files; and
-
-      (c) You must retain, in the Source form of any Derivative Works
-          that You distribute, all copyright, patent, trademark, and
-          attribution notices from the Source form of the Work,
-          excluding those notices that do not pertain to any part of
-          the Derivative Works; and
-
-      (d) If the Work includes a "NOTICE" text file as part of its
-          distribution, then any Derivative Works that You distribute must
-          include a readable copy of the attribution notices contained
-          within such NOTICE file, excluding those notices that do not
-          pertain to any part of the Derivative Works, in at least one
-          of the following places: within a NOTICE text file distributed
-          as part of the Derivative Works; within the Source form or
-          documentation, if provided along with the Derivative Works; or,
-          within a display generated by the Derivative Works, if and
-          wherever such third-party notices normally appear. The contents
-          of the NOTICE file are for informational purposes only and
-          do not modify the License. You may add Your own attribution
-          notices within Derivative Works that You distribute, alongside
-          or as an addendum to the NOTICE text from the Work, provided
-          that such additional attribution notices cannot be construed
-          as modifying the License.
-
-      You may add Your own copyright statement to Your modifications and
-      may provide additional or different license terms and conditions
-      for use, reproduction, or distribution of Your modifications, or
-      for any such Derivative Works as a whole, provided Your use,
-      reproduction, and distribution of the Work otherwise complies with
-      the conditions stated in this License.
-
-   5. Submission of Contributions. Unless You explicitly state otherwise,
-      any Contribution intentionally submitted for inclusion in the Work
-      by You to the Licensor shall be under the terms and conditions of
-      this License, without any additional terms or conditions.
-      Notwithstanding the above, nothing herein shall supersede or modify
-      the terms of any separate license agreement you may have executed
-      with Licensor regarding such Contributions.
-
-   6. Trademarks. This License does not grant permission to use the trade
-      names, trademarks, service marks, or product names of the Licensor,
-      except as required for reasonable and customary use in describing the
-      origin of the Work and reproducing the content of the NOTICE file.
-
-   7. Disclaimer of Warranty. Unless required by applicable law or
-      agreed to in writing, Licensor provides the Work (and each
-      Contributor provides its Contributions) on an "AS IS" BASIS,
-      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
-      implied, including, without limitation, any warranties or conditions
-      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
-      PARTICULAR PURPOSE. You are solely responsible for determining the
-      appropriateness of using or redistributing the Work and assume any
-      risks associated with Your exercise of permissions under this License.
-
-   8. Limitation of Liability. In no event and under no legal theory,
-      whether in tort (including negligence), contract, or otherwise,
-      unless required by applicable law (such as deliberate and grossly
-      negligent acts) or agreed to in writing, shall any Contributor be
-      liable to You for damages, including any direct, indirect, special,
-      incidental, or consequential damages of any character arising as a
-      result of this License or out of the use or inability to use the
-      Work (including but not limited to damages for loss of goodwill,
-      work stoppage, computer failure or malfunction, or any and all
-      other commercial damages or losses), even if such Contributor
-      has been advised of the possibility of such damages.
-
-   9. Accepting Warranty or Additional Liability. While redistributing
-      the Work or Derivative Works thereof, You may choose to offer,
-      and charge a fee for, acceptance of support, warranty, indemnity,
-      or other liability obligations and/or rights consistent with this
-      License. However, in accepting such obligations, You may act only
-      on Your own behalf and on Your sole responsibility, not on behalf
-      of any other Contributor, and only if You agree to indemnify,
-      defend, and hold each Contributor harmless for any liability
-      incurred by, or claims asserted against, such Contributor by reason
-      of your accepting any such warranty or additional liability.
-
-   END OF TERMS AND CONDITIONS
-
-
-
-AndroidX legacy v4 library:
-
-
-   Copyright (c) 2005-2011, 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.
-
-   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.
-
-
-                                 Apache License
-                           Version 2.0, January 2004
-                        http://www.apache.org/licenses/
-
-   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
-
-   1. Definitions.
-
-      "License" shall mean the terms and conditions for use, reproduction,
-      and distribution as defined by Sections 1 through 9 of this document.
-
-      "Licensor" shall mean the copyright owner or entity authorized by
-      the copyright owner that is granting the License.
-
-      "Legal Entity" shall mean the union of the acting entity and all
-      other entities that control, are controlled by, or are under common
-      control with that entity. For the purposes of this definition,
-      "control" means (i) the power, direct or indirect, to cause the
-      direction or management of such entity, whether by contract or
-      otherwise, or (ii) ownership of fifty percent (50%) or more of the
-      outstanding shares, or (iii) beneficial ownership of such entity.
-
-      "You" (or "Your") shall mean an individual or Legal Entity
-      exercising permissions granted by this License.
-
-      "Source" form shall mean the preferred form for making modifications,
-      including but not limited to software source code, documentation
-      source, and configuration files.
-
-      "Object" form shall mean any form resulting from mechanical
-      transformation or translation of a Source form, including but
-      not limited to compiled object code, generated documentation,
-      and conversions to other media types.
-
-      "Work" shall mean the work of authorship, whether in Source or
-      Object form, made available under the License, as indicated by a
-      copyright notice that is included in or attached to the work
-      (an example is provided in the Appendix below).
-
-      "Derivative Works" shall mean any work, whether in Source or Object
-      form, that is based on (or derived from) the Work and for which the
-      editorial revisions, annotations, elaborations, or other modifications
-      represent, as a whole, an original work of authorship. For the purposes
-      of this License, Derivative Works shall not include works that remain
-      separable from, or merely link (or bind by name) to the interfaces of,
-      the Work and Derivative Works thereof.
-
-      "Contribution" shall mean any work of authorship, including
-      the original version of the Work and any modifications or additions
-      to that Work or Derivative Works thereof, that is intentionally
-      submitted to Licensor for inclusion in the Work by the copyright owner
-      or by an individual or Legal Entity authorized to submit on behalf of
-      the copyright owner. For the purposes of this definition, "submitted"
-      means any form of electronic, verbal, or written communication sent
-      to the Licensor or its representatives, including but not limited to
-      communication on electronic mailing lists, source code control systems,
-      and issue tracking systems that are managed by, or on behalf of, the
-      Licensor for the purpose of discussing and improving the Work, but
-      excluding communication that is conspicuously marked or otherwise
-      designated in writing by the copyright owner as "Not a Contribution."
-
-      "Contributor" shall mean Licensor and any individual or Legal Entity
-      on behalf of whom a Contribution has been received by Licensor and
-      subsequently incorporated within the Work.
-
-   2. Grant of Copyright License. Subject to the terms and conditions of
-      this License, each Contributor hereby grants to You a perpetual,
-      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
-      copyright license to reproduce, prepare Derivative Works of,
-      publicly display, publicly perform, sublicense, and distribute the
-      Work and such Derivative Works in Source or Object form.
-
-   3. Grant of Patent License. Subject to the terms and conditions of
-      this License, each Contributor hereby grants to You a perpetual,
-      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
-      (except as stated in this section) patent license to make, have made,
-      use, offer to sell, sell, import, and otherwise transfer the Work,
-      where such license applies only to those patent claims licensable
-      by such Contributor that are necessarily infringed by their
-      Contribution(s) alone or by combination of their Contribution(s)
-      with the Work to which such Contribution(s) was submitted. If You
-      institute patent litigation against any entity (including a
-      cross-claim or counterclaim in a lawsuit) alleging that the Work
-      or a Contribution incorporated within the Work constitutes direct
-      or contributory patent infringement, then any patent licenses
-      granted to You under this License for that Work shall terminate
-      as of the date such litigation is filed.
-
-   4. Redistribution. You may reproduce and distribute copies of the
-      Work or Derivative Works thereof in any medium, with or without
-      modifications, and in Source or Object form, provided that You
-      meet the following conditions:
-
-      (a) You must give any other recipients of the Work or
-          Derivative Works a copy of this License; and
-
-      (b) You must cause any modified files to carry prominent notices
-          stating that You changed the files; and
-
-      (c) You must retain, in the Source form of any Derivative Works
-          that You distribute, all copyright, patent, trademark, and
-          attribution notices from the Source form of the Work,
-          excluding those notices that do not pertain to any part of
-          the Derivative Works; and
-
-      (d) If the Work includes a "NOTICE" text file as part of its
-          distribution, then any Derivative Works that You distribute must
-          include a readable copy of the attribution notices contained
-          within such NOTICE file, excluding those notices that do not
-          pertain to any part of the Derivative Works, in at least one
-          of the following places: within a NOTICE text file distributed
-          as part of the Derivative Works; within the Source form or
-          documentation, if provided along with the Derivative Works; or,
-          within a display generated by the Derivative Works, if and
-          wherever such third-party notices normally appear. The contents
-          of the NOTICE file are for informational purposes only and
-          do not modify the License. You may add Your own attribution
-          notices within Derivative Works that You distribute, alongside
-          or as an addendum to the NOTICE text from the Work, provided
-          that such additional attribution notices cannot be construed
-          as modifying the License.
-
-      You may add Your own copyright statement to Your modifications and
-      may provide additional or different license terms and conditions
-      for use, reproduction, or distribution of Your modifications, or
-      for any such Derivative Works as a whole, provided Your use,
-      reproduction, and distribution of the Work otherwise complies with
-      the conditions stated in this License.
-
-   5. Submission of Contributions. Unless You explicitly state otherwise,
-      any Contribution intentionally submitted for inclusion in the Work
-      by You to the Licensor shall be under the terms and conditions of
-      this License, without any additional terms or conditions.
-      Notwithstanding the above, nothing herein shall supersede or modify
-      the terms of any separate license agreement you may have executed
-      with Licensor regarding such Contributions.
-
-   6. Trademarks. This License does not grant permission to use the trade
-      names, trademarks, service marks, or product names of the Licensor,
-      except as required for reasonable and customary use in describing the
-      origin of the Work and reproducing the content of the NOTICE file.
-
-   7. Disclaimer of Warranty. Unless required by applicable law or
-      agreed to in writing, Licensor provides the Work (and each
-      Contributor provides its Contributions) on an "AS IS" BASIS,
-      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
-      implied, including, without limitation, any warranties or conditions
-      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
-      PARTICULAR PURPOSE. You are solely responsible for determining the
-      appropriateness of using or redistributing the Work and assume any
-      risks associated with Your exercise of permissions under this License.
-
-   8. Limitation of Liability. In no event and under no legal theory,
-      whether in tort (including negligence), contract, or otherwise,
-      unless required by applicable law (such as deliberate and grossly
-      negligent acts) or agreed to in writing, shall any Contributor be
-      liable to You for damages, including any direct, indirect, special,
-      incidental, or consequential damages of any character arising as a
-      result of this License or out of the use or inability to use the
-      Work (including but not limited to damages for loss of goodwill,
-      work stoppage, computer failure or malfunction, or any and all
-      other commercial damages or losses), even if such Contributor
-      has been advised of the possibility of such damages.
-
-   9. Accepting Warranty or Additional Liability. While redistributing
-      the Work or Derivative Works thereof, You may choose to offer,
-      and charge a fee for, acceptance of support, warranty, indemnity,
-      or other liability obligations and/or rights consistent with this
-      License. However, in accepting such obligations, You may act only
-      on Your own behalf and on Your sole responsibility, not on behalf
-      of any other Contributor, and only if You agree to indemnify,
-      defend, and hold each Contributor harmless for any liability
-      incurred by, or claims asserted against, such Contributor by reason
-      of your accepting any such warranty or additional liability.
-
-   END OF TERMS AND CONDITIONS
-
-
-
-AndroidX lifecycle common library:
-
-
-   Copyright (c) 2005-2011, 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.
-
-   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.
-
-
-                                 Apache License
-                           Version 2.0, January 2004
-                        http://www.apache.org/licenses/
-
-   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
-
-   1. Definitions.
-
-      "License" shall mean the terms and conditions for use, reproduction,
-      and distribution as defined by Sections 1 through 9 of this document.
-
-      "Licensor" shall mean the copyright owner or entity authorized by
-      the copyright owner that is granting the License.
-
-      "Legal Entity" shall mean the union of the acting entity and all
-      other entities that control, are controlled by, or are under common
-      control with that entity. For the purposes of this definition,
-      "control" means (i) the power, direct or indirect, to cause the
-      direction or management of such entity, whether by contract or
-      otherwise, or (ii) ownership of fifty percent (50%) or more of the
-      outstanding shares, or (iii) beneficial ownership of such entity.
-
-      "You" (or "Your") shall mean an individual or Legal Entity
-      exercising permissions granted by this License.
-
-      "Source" form shall mean the preferred form for making modifications,
-      including but not limited to software source code, documentation
-      source, and configuration files.
-
-      "Object" form shall mean any form resulting from mechanical
-      transformation or translation of a Source form, including but
-      not limited to compiled object code, generated documentation,
-      and conversions to other media types.
-
-      "Work" shall mean the work of authorship, whether in Source or
-      Object form, made available under the License, as indicated by a
-      copyright notice that is included in or attached to the work
-      (an example is provided in the Appendix below).
-
-      "Derivative Works" shall mean any work, whether in Source or Object
-      form, that is based on (or derived from) the Work and for which the
-      editorial revisions, annotations, elaborations, or other modifications
-      represent, as a whole, an original work of authorship. For the purposes
-      of this License, Derivative Works shall not include works that remain
-      separable from, or merely link (or bind by name) to the interfaces of,
-      the Work and Derivative Works thereof.
-
-      "Contribution" shall mean any work of authorship, including
-      the original version of the Work and any modifications or additions
-      to that Work or Derivative Works thereof, that is intentionally
-      submitted to Licensor for inclusion in the Work by the copyright owner
-      or by an individual or Legal Entity authorized to submit on behalf of
-      the copyright owner. For the purposes of this definition, "submitted"
-      means any form of electronic, verbal, or written communication sent
-      to the Licensor or its representatives, including but not limited to
-      communication on electronic mailing lists, source code control systems,
-      and issue tracking systems that are managed by, or on behalf of, the
-      Licensor for the purpose of discussing and improving the Work, but
-      excluding communication that is conspicuously marked or otherwise
-      designated in writing by the copyright owner as "Not a Contribution."
-
-      "Contributor" shall mean Licensor and any individual or Legal Entity
-      on behalf of whom a Contribution has been received by Licensor and
-      subsequently incorporated within the Work.
-
-   2. Grant of Copyright License. Subject to the terms and conditions of
-      this License, each Contributor hereby grants to You a perpetual,
-      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
-      copyright license to reproduce, prepare Derivative Works of,
-      publicly display, publicly perform, sublicense, and distribute the
-      Work and such Derivative Works in Source or Object form.
-
-   3. Grant of Patent License. Subject to the terms and conditions of
-      this License, each Contributor hereby grants to You a perpetual,
-      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
-      (except as stated in this section) patent license to make, have made,
-      use, offer to sell, sell, import, and otherwise transfer the Work,
-      where such license applies only to those patent claims licensable
-      by such Contributor that are necessarily infringed by their
-      Contribution(s) alone or by combination of their Contribution(s)
-      with the Work to which such Contribution(s) was submitted. If You
-      institute patent litigation against any entity (including a
-      cross-claim or counterclaim in a lawsuit) alleging that the Work
-      or a Contribution incorporated within the Work constitutes direct
-      or contributory patent infringement, then any patent licenses
-      granted to You under this License for that Work shall terminate
-      as of the date such litigation is filed.
-
-   4. Redistribution. You may reproduce and distribute copies of the
-      Work or Derivative Works thereof in any medium, with or without
-      modifications, and in Source or Object form, provided that You
-      meet the following conditions:
-
-      (a) You must give any other recipients of the Work or
-          Derivative Works a copy of this License; and
-
-      (b) You must cause any modified files to carry prominent notices
-          stating that You changed the files; and
-
-      (c) You must retain, in the Source form of any Derivative Works
-          that You distribute, all copyright, patent, trademark, and
-          attribution notices from the Source form of the Work,
-          excluding those notices that do not pertain to any part of
-          the Derivative Works; and
-
-      (d) If the Work includes a "NOTICE" text file as part of its
-          distribution, then any Derivative Works that You distribute must
-          include a readable copy of the attribution notices contained
-          within such NOTICE file, excluding those notices that do not
-          pertain to any part of the Derivative Works, in at least one
-          of the following places: within a NOTICE text file distributed
-          as part of the Derivative Works; within the Source form or
-          documentation, if provided along with the Derivative Works; or,
-          within a display generated by the Derivative Works, if and
-          wherever such third-party notices normally appear. The contents
-          of the NOTICE file are for informational purposes only and
-          do not modify the License. You may add Your own attribution
-          notices within Derivative Works that You distribute, alongside
-          or as an addendum to the NOTICE text from the Work, provided
-          that such additional attribution notices cannot be construed
-          as modifying the License.
-
-      You may add Your own copyright statement to Your modifications and
-      may provide additional or different license terms and conditions
-      for use, reproduction, or distribution of Your modifications, or
-      for any such Derivative Works as a whole, provided Your use,
-      reproduction, and distribution of the Work otherwise complies with
-      the conditions stated in this License.
-
-   5. Submission of Contributions. Unless You explicitly state otherwise,
-      any Contribution intentionally submitted for inclusion in the Work
-      by You to the Licensor shall be under the terms and conditions of
-      this License, without any additional terms or conditions.
-      Notwithstanding the above, nothing herein shall supersede or modify
-      the terms of any separate license agreement you may have executed
-      with Licensor regarding such Contributions.
-
-   6. Trademarks. This License does not grant permission to use the trade
-      names, trademarks, service marks, or product names of the Licensor,
-      except as required for reasonable and customary use in describing the
-      origin of the Work and reproducing the content of the NOTICE file.
-
-   7. Disclaimer of Warranty. Unless required by applicable law or
-      agreed to in writing, Licensor provides the Work (and each
-      Contributor provides its Contributions) on an "AS IS" BASIS,
-      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
-      implied, including, without limitation, any warranties or conditions
-      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
-      PARTICULAR PURPOSE. You are solely responsible for determining the
-      appropriateness of using or redistributing the Work and assume any
-      risks associated with Your exercise of permissions under this License.
-
-   8. Limitation of Liability. In no event and under no legal theory,
-      whether in tort (including negligence), contract, or otherwise,
-      unless required by applicable law (such as deliberate and grossly
-      negligent acts) or agreed to in writing, shall any Contributor be
-      liable to You for damages, including any direct, indirect, special,
-      incidental, or consequential damages of any character arising as a
-      result of this License or out of the use or inability to use the
-      Work (including but not limited to damages for loss of goodwill,
-      work stoppage, computer failure or malfunction, or any and all
-      other commercial damages or losses), even if such Contributor
-      has been advised of the possibility of such damages.
-
-   9. Accepting Warranty or Additional Liability. While redistributing
-      the Work or Derivative Works thereof, You may choose to offer,
-      and charge a fee for, acceptance of support, warranty, indemnity,
-      or other liability obligations and/or rights consistent with this
-      License. However, in accepting such obligations, You may act only
-      on Your own behalf and on Your sole responsibility, not on behalf
-      of any other Contributor, and only if You agree to indemnify,
-      defend, and hold each Contributor harmless for any liability
-      incurred by, or claims asserted against, such Contributor by reason
-      of your accepting any such warranty or additional liability.
-
-   END OF TERMS AND CONDITIONS
-
-
-AndroidX lifecycle livedatacore library:
-
-
-   Copyright (c) 2005-2011, 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.
-
-   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.
-
-
-                                 Apache License
-                           Version 2.0, January 2004
-                        http://www.apache.org/licenses/
-
-   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
-
-   1. Definitions.
-
-      "License" shall mean the terms and conditions for use, reproduction,
-      and distribution as defined by Sections 1 through 9 of this document.
-
-      "Licensor" shall mean the copyright owner or entity authorized by
-      the copyright owner that is granting the License.
-
-      "Legal Entity" shall mean the union of the acting entity and all
-      other entities that control, are controlled by, or are under common
-      control with that entity. For the purposes of this definition,
-      "control" means (i) the power, direct or indirect, to cause the
-      direction or management of such entity, whether by contract or
-      otherwise, or (ii) ownership of fifty percent (50%) or more of the
-      outstanding shares, or (iii) beneficial ownership of such entity.
-
-      "You" (or "Your") shall mean an individual or Legal Entity
-      exercising permissions granted by this License.
-
-      "Source" form shall mean the preferred form for making modifications,
-      including but not limited to software source code, documentation
-      source, and configuration files.
-
-      "Object" form shall mean any form resulting from mechanical
-      transformation or translation of a Source form, including but
-      not limited to compiled object code, generated documentation,
-      and conversions to other media types.
-
-      "Work" shall mean the work of authorship, whether in Source or
-      Object form, made available under the License, as indicated by a
-      copyright notice that is included in or attached to the work
-      (an example is provided in the Appendix below).
-
-      "Derivative Works" shall mean any work, whether in Source or Object
-      form, that is based on (or derived from) the Work and for which the
-      editorial revisions, annotations, elaborations, or other modifications
-      represent, as a whole, an original work of authorship. For the purposes
-      of this License, Derivative Works shall not include works that remain
-      separable from, or merely link (or bind by name) to the interfaces of,
-      the Work and Derivative Works thereof.
-
-      "Contribution" shall mean any work of authorship, including
-      the original version of the Work and any modifications or additions
-      to that Work or Derivative Works thereof, that is intentionally
-      submitted to Licensor for inclusion in the Work by the copyright owner
-      or by an individual or Legal Entity authorized to submit on behalf of
-      the copyright owner. For the purposes of this definition, "submitted"
-      means any form of electronic, verbal, or written communication sent
-      to the Licensor or its representatives, including but not limited to
-      communication on electronic mailing lists, source code control systems,
-      and issue tracking systems that are managed by, or on behalf of, the
-      Licensor for the purpose of discussing and improving the Work, but
-      excluding communication that is conspicuously marked or otherwise
-      designated in writing by the copyright owner as "Not a Contribution."
-
-      "Contributor" shall mean Licensor and any individual or Legal Entity
-      on behalf of whom a Contribution has been received by Licensor and
-      subsequently incorporated within the Work.
-
-   2. Grant of Copyright License. Subject to the terms and conditions of
-      this License, each Contributor hereby grants to You a perpetual,
-      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
-      copyright license to reproduce, prepare Derivative Works of,
-      publicly display, publicly perform, sublicense, and distribute the
-      Work and such Derivative Works in Source or Object form.
-
-   3. Grant of Patent License. Subject to the terms and conditions of
-      this License, each Contributor hereby grants to You a perpetual,
-      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
-      (except as stated in this section) patent license to make, have made,
-      use, offer to sell, sell, import, and otherwise transfer the Work,
-      where such license applies only to those patent claims licensable
-      by such Contributor that are necessarily infringed by their
-      Contribution(s) alone or by combination of their Contribution(s)
-      with the Work to which such Contribution(s) was submitted. If You
-      institute patent litigation against any entity (including a
-      cross-claim or counterclaim in a lawsuit) alleging that the Work
-      or a Contribution incorporated within the Work constitutes direct
-      or contributory patent infringement, then any patent licenses
-      granted to You under this License for that Work shall terminate
-      as of the date such litigation is filed.
-
-   4. Redistribution. You may reproduce and distribute copies of the
-      Work or Derivative Works thereof in any medium, with or without
-      modifications, and in Source or Object form, provided that You
-      meet the following conditions:
-
-      (a) You must give any other recipients of the Work or
-          Derivative Works a copy of this License; and
-
-      (b) You must cause any modified files to carry prominent notices
-          stating that You changed the files; and
-
-      (c) You must retain, in the Source form of any Derivative Works
-          that You distribute, all copyright, patent, trademark, and
-          attribution notices from the Source form of the Work,
-          excluding those notices that do not pertain to any part of
-          the Derivative Works; and
-
-      (d) If the Work includes a "NOTICE" text file as part of its
-          distribution, then any Derivative Works that You distribute must
-          include a readable copy of the attribution notices contained
-          within such NOTICE file, excluding those notices that do not
-          pertain to any part of the Derivative Works, in at least one
-          of the following places: within a NOTICE text file distributed
-          as part of the Derivative Works; within the Source form or
-          documentation, if provided along with the Derivative Works; or,
-          within a display generated by the Derivative Works, if and
-          wherever such third-party notices normally appear. The contents
-          of the NOTICE file are for informational purposes only and
-          do not modify the License. You may add Your own attribution
-          notices within Derivative Works that You distribute, alongside
-          or as an addendum to the NOTICE text from the Work, provided
-          that such additional attribution notices cannot be construed
-          as modifying the License.
-
-      You may add Your own copyright statement to Your modifications and
-      may provide additional or different license terms and conditions
-      for use, reproduction, or distribution of Your modifications, or
-      for any such Derivative Works as a whole, provided Your use,
-      reproduction, and distribution of the Work otherwise complies with
-      the conditions stated in this License.
-
-   5. Submission of Contributions. Unless You explicitly state otherwise,
-      any Contribution intentionally submitted for inclusion in the Work
-      by You to the Licensor shall be under the terms and conditions of
-      this License, without any additional terms or conditions.
-      Notwithstanding the above, nothing herein shall supersede or modify
-      the terms of any separate license agreement you may have executed
-      with Licensor regarding such Contributions.
-
-   6. Trademarks. This License does not grant permission to use the trade
-      names, trademarks, service marks, or product names of the Licensor,
-      except as required for reasonable and customary use in describing the
-      origin of the Work and reproducing the content of the NOTICE file.
-
-   7. Disclaimer of Warranty. Unless required by applicable law or
-      agreed to in writing, Licensor provides the Work (and each
-      Contributor provides its Contributions) on an "AS IS" BASIS,
-      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
-      implied, including, without limitation, any warranties or conditions
-      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
-      PARTICULAR PURPOSE. You are solely responsible for determining the
-      appropriateness of using or redistributing the Work and assume any
-      risks associated with Your exercise of permissions under this License.
-
-   8. Limitation of Liability. In no event and under no legal theory,
-      whether in tort (including negligence), contract, or otherwise,
-      unless required by applicable law (such as deliberate and grossly
-      negligent acts) or agreed to in writing, shall any Contributor be
-      liable to You for damages, including any direct, indirect, special,
-      incidental, or consequential damages of any character arising as a
-      result of this License or out of the use or inability to use the
-      Work (including but not limited to damages for loss of goodwill,
-      work stoppage, computer failure or malfunction, or any and all
-      other commercial damages or losses), even if such Contributor
-      has been advised of the possibility of such damages.
-
-   9. Accepting Warranty or Additional Liability. While redistributing
-      the Work or Derivative Works thereof, You may choose to offer,
-      and charge a fee for, acceptance of support, warranty, indemnity,
-      or other liability obligations and/or rights consistent with this
-      License. However, in accepting such obligations, You may act only
-      on Your own behalf and on Your sole responsibility, not on behalf
-      of any other Contributor, and only if You agree to indemnify,
-      defend, and hold each Contributor harmless for any liability
-      incurred by, or claims asserted against, such Contributor by reason
-      of your accepting any such warranty or additional liability.
-
-   END OF TERMS AND CONDITIONS
-
-
-AndroidX lifecycle runtime library:
-
-
-   Copyright (c) 2005-2011, 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.
-
-   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.
-
-
-                                 Apache License
-                           Version 2.0, January 2004
-                        http://www.apache.org/licenses/
-
-   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
-
-   1. Definitions.
-
-      "License" shall mean the terms and conditions for use, reproduction,
-      and distribution as defined by Sections 1 through 9 of this document.
-
-      "Licensor" shall mean the copyright owner or entity authorized by
-      the copyright owner that is granting the License.
-
-      "Legal Entity" shall mean the union of the acting entity and all
-      other entities that control, are controlled by, or are under common
-      control with that entity. For the purposes of this definition,
-      "control" means (i) the power, direct or indirect, to cause the
-      direction or management of such entity, whether by contract or
-      otherwise, or (ii) ownership of fifty percent (50%) or more of the
-      outstanding shares, or (iii) beneficial ownership of such entity.
-
-      "You" (or "Your") shall mean an individual or Legal Entity
-      exercising permissions granted by this License.
-
-      "Source" form shall mean the preferred form for making modifications,
-      including but not limited to software source code, documentation
-      source, and configuration files.
-
-      "Object" form shall mean any form resulting from mechanical
-      transformation or translation of a Source form, including but
-      not limited to compiled object code, generated documentation,
-      and conversions to other media types.
-
-      "Work" shall mean the work of authorship, whether in Source or
-      Object form, made available under the License, as indicated by a
-      copyright notice that is included in or attached to the work
-      (an example is provided in the Appendix below).
-
-      "Derivative Works" shall mean any work, whether in Source or Object
-      form, that is based on (or derived from) the Work and for which the
-      editorial revisions, annotations, elaborations, or other modifications
-      represent, as a whole, an original work of authorship. For the purposes
-      of this License, Derivative Works shall not include works that remain
-      separable from, or merely link (or bind by name) to the interfaces of,
-      the Work and Derivative Works thereof.
-
-      "Contribution" shall mean any work of authorship, including
-      the original version of the Work and any modifications or additions
-      to that Work or Derivative Works thereof, that is intentionally
-      submitted to Licensor for inclusion in the Work by the copyright owner
-      or by an individual or Legal Entity authorized to submit on behalf of
-      the copyright owner. For the purposes of this definition, "submitted"
-      means any form of electronic, verbal, or written communication sent
-      to the Licensor or its representatives, including but not limited to
-      communication on electronic mailing lists, source code control systems,
-      and issue tracking systems that are managed by, or on behalf of, the
-      Licensor for the purpose of discussing and improving the Work, but
-      excluding communication that is conspicuously marked or otherwise
-      designated in writing by the copyright owner as "Not a Contribution."
-
-      "Contributor" shall mean Licensor and any individual or Legal Entity
-      on behalf of whom a Contribution has been received by Licensor and
-      subsequently incorporated within the Work.
-
-   2. Grant of Copyright License. Subject to the terms and conditions of
-      this License, each Contributor hereby grants to You a perpetual,
-      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
-      copyright license to reproduce, prepare Derivative Works of,
-      publicly display, publicly perform, sublicense, and distribute the
-      Work and such Derivative Works in Source or Object form.
-
-   3. Grant of Patent License. Subject to the terms and conditions of
-      this License, each Contributor hereby grants to You a perpetual,
-      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
-      (except as stated in this section) patent license to make, have made,
-      use, offer to sell, sell, import, and otherwise transfer the Work,
-      where such license applies only to those patent claims licensable
-      by such Contributor that are necessarily infringed by their
-      Contribution(s) alone or by combination of their Contribution(s)
-      with the Work to which such Contribution(s) was submitted. If You
-      institute patent litigation against any entity (including a
-      cross-claim or counterclaim in a lawsuit) alleging that the Work
-      or a Contribution incorporated within the Work constitutes direct
-      or contributory patent infringement, then any patent licenses
-      granted to You under this License for that Work shall terminate
-      as of the date such litigation is filed.
-
-   4. Redistribution. You may reproduce and distribute copies of the
-      Work or Derivative Works thereof in any medium, with or without
-      modifications, and in Source or Object form, provided that You
-      meet the following conditions:
-
-      (a) You must give any other recipients of the Work or
-          Derivative Works a copy of this License; and
-
-      (b) You must cause any modified files to carry prominent notices
-          stating that You changed the files; and
-
-      (c) You must retain, in the Source form of any Derivative Works
-          that You distribute, all copyright, patent, trademark, and
-          attribution notices from the Source form of the Work,
-          excluding those notices that do not pertain to any part of
-          the Derivative Works; and
-
-      (d) If the Work includes a "NOTICE" text file as part of its
-          distribution, then any Derivative Works that You distribute must
-          include a readable copy of the attribution notices contained
-          within such NOTICE file, excluding those notices that do not
-          pertain to any part of the Derivative Works, in at least one
-          of the following places: within a NOTICE text file distributed
-          as part of the Derivative Works; within the Source form or
-          documentation, if provided along with the Derivative Works; or,
-          within a display generated by the Derivative Works, if and
-          wherever such third-party notices normally appear. The contents
-          of the NOTICE file are for informational purposes only and
-          do not modify the License. You may add Your own attribution
-          notices within Derivative Works that You distribute, alongside
-          or as an addendum to the NOTICE text from the Work, provided
-          that such additional attribution notices cannot be construed
-          as modifying the License.
-
-      You may add Your own copyright statement to Your modifications and
-      may provide additional or different license terms and conditions
-      for use, reproduction, or distribution of Your modifications, or
-      for any such Derivative Works as a whole, provided Your use,
-      reproduction, and distribution of the Work otherwise complies with
-      the conditions stated in this License.
-
-   5. Submission of Contributions. Unless You explicitly state otherwise,
-      any Contribution intentionally submitted for inclusion in the Work
-      by You to the Licensor shall be under the terms and conditions of
-      this License, without any additional terms or conditions.
-      Notwithstanding the above, nothing herein shall supersede or modify
-      the terms of any separate license agreement you may have executed
-      with Licensor regarding such Contributions.
-
-   6. Trademarks. This License does not grant permission to use the trade
-      names, trademarks, service marks, or product names of the Licensor,
-      except as required for reasonable and customary use in describing the
-      origin of the Work and reproducing the content of the NOTICE file.
-
-   7. Disclaimer of Warranty. Unless required by applicable law or
-      agreed to in writing, Licensor provides the Work (and each
-      Contributor provides its Contributions) on an "AS IS" BASIS,
-      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
-      implied, including, without limitation, any warranties or conditions
-      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
-      PARTICULAR PURPOSE. You are solely responsible for determining the
-      appropriateness of using or redistributing the Work and assume any
-      risks associated with Your exercise of permissions under this License.
-
-   8. Limitation of Liability. In no event and under no legal theory,
-      whether in tort (including negligence), contract, or otherwise,
-      unless required by applicable law (such as deliberate and grossly
-      negligent acts) or agreed to in writing, shall any Contributor be
-      liable to You for damages, including any direct, indirect, special,
-      incidental, or consequential damages of any character arising as a
-      result of this License or out of the use or inability to use the
-      Work (including but not limited to damages for loss of goodwill,
-      work stoppage, computer failure or malfunction, or any and all
-      other commercial damages or losses), even if such Contributor
-      has been advised of the possibility of such damages.
-
-   9. Accepting Warranty or Additional Liability. While redistributing
-      the Work or Derivative Works thereof, You may choose to offer,
-      and charge a fee for, acceptance of support, warranty, indemnity,
-      or other liability obligations and/or rights consistent with this
-      License. However, in accepting such obligations, You may act only
-      on Your own behalf and on Your sole responsibility, not on behalf
-      of any other Contributor, and only if You agree to indemnify,
-      defend, and hold each Contributor harmless for any liability
-      incurred by, or claims asserted against, such Contributor by reason
-      of your accepting any such warranty or additional liability.
-
-   END OF TERMS AND CONDITIONS
-
-
-AndroidX lifecycle viewmodel library:
-
-
-   Copyright (c) 2005-2011, 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.
-
-   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.
-
-
-                                 Apache License
-                           Version 2.0, January 2004
-                        http://www.apache.org/licenses/
-
-   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
-
-   1. Definitions.
-
-      "License" shall mean the terms and conditions for use, reproduction,
-      and distribution as defined by Sections 1 through 9 of this document.
-
-      "Licensor" shall mean the copyright owner or entity authorized by
-      the copyright owner that is granting the License.
-
-      "Legal Entity" shall mean the union of the acting entity and all
-      other entities that control, are controlled by, or are under common
-      control with that entity. For the purposes of this definition,
-      "control" means (i) the power, direct or indirect, to cause the
-      direction or management of such entity, whether by contract or
-      otherwise, or (ii) ownership of fifty percent (50%) or more of the
-      outstanding shares, or (iii) beneficial ownership of such entity.
-
-      "You" (or "Your") shall mean an individual or Legal Entity
-      exercising permissions granted by this License.
-
-      "Source" form shall mean the preferred form for making modifications,
-      including but not limited to software source code, documentation
-      source, and configuration files.
-
-      "Object" form shall mean any form resulting from mechanical
-      transformation or translation of a Source form, including but
-      not limited to compiled object code, generated documentation,
-      and conversions to other media types.
-
-      "Work" shall mean the work of authorship, whether in Source or
-      Object form, made available under the License, as indicated by a
-      copyright notice that is included in or attached to the work
-      (an example is provided in the Appendix below).
-
-      "Derivative Works" shall mean any work, whether in Source or Object
-      form, that is based on (or derived from) the Work and for which the
-      editorial revisions, annotations, elaborations, or other modifications
-      represent, as a whole, an original work of authorship. For the purposes
-      of this License, Derivative Works shall not include works that remain
-      separable from, or merely link (or bind by name) to the interfaces of,
-      the Work and Derivative Works thereof.
-
-      "Contribution" shall mean any work of authorship, including
-      the original version of the Work and any modifications or additions
-      to that Work or Derivative Works thereof, that is intentionally
-      submitted to Licensor for inclusion in the Work by the copyright owner
-      or by an individual or Legal Entity authorized to submit on behalf of
-      the copyright owner. For the purposes of this definition, "submitted"
-      means any form of electronic, verbal, or written communication sent
-      to the Licensor or its representatives, including but not limited to
-      communication on electronic mailing lists, source code control systems,
-      and issue tracking systems that are managed by, or on behalf of, the
-      Licensor for the purpose of discussing and improving the Work, but
-      excluding communication that is conspicuously marked or otherwise
-      designated in writing by the copyright owner as "Not a Contribution."
-
-      "Contributor" shall mean Licensor and any individual or Legal Entity
-      on behalf of whom a Contribution has been received by Licensor and
-      subsequently incorporated within the Work.
-
-   2. Grant of Copyright License. Subject to the terms and conditions of
-      this License, each Contributor hereby grants to You a perpetual,
-      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
-      copyright license to reproduce, prepare Derivative Works of,
-      publicly display, publicly perform, sublicense, and distribute the
-      Work and such Derivative Works in Source or Object form.
-
-   3. Grant of Patent License. Subject to the terms and conditions of
-      this License, each Contributor hereby grants to You a perpetual,
-      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
-      (except as stated in this section) patent license to make, have made,
-      use, offer to sell, sell, import, and otherwise transfer the Work,
-      where such license applies only to those patent claims licensable
-      by such Contributor that are necessarily infringed by their
-      Contribution(s) alone or by combination of their Contribution(s)
-      with the Work to which such Contribution(s) was submitted. If You
-      institute patent litigation against any entity (including a
-      cross-claim or counterclaim in a lawsuit) alleging that the Work
-      or a Contribution incorporated within the Work constitutes direct
-      or contributory patent infringement, then any patent licenses
-      granted to You under this License for that Work shall terminate
-      as of the date such litigation is filed.
-
-   4. Redistribution. You may reproduce and distribute copies of the
-      Work or Derivative Works thereof in any medium, with or without
-      modifications, and in Source or Object form, provided that You
-      meet the following conditions:
-
-      (a) You must give any other recipients of the Work or
-          Derivative Works a copy of this License; and
-
-      (b) You must cause any modified files to carry prominent notices
-          stating that You changed the files; and
-
-      (c) You must retain, in the Source form of any Derivative Works
-          that You distribute, all copyright, patent, trademark, and
-          attribution notices from the Source form of the Work,
-          excluding those notices that do not pertain to any part of
-          the Derivative Works; and
-
-      (d) If the Work includes a "NOTICE" text file as part of its
-          distribution, then any Derivative Works that You distribute must
-          include a readable copy of the attribution notices contained
-          within such NOTICE file, excluding those notices that do not
-          pertain to any part of the Derivative Works, in at least one
-          of the following places: within a NOTICE text file distributed
-          as part of the Derivative Works; within the Source form or
-          documentation, if provided along with the Derivative Works; or,
-          within a display generated by the Derivative Works, if and
-          wherever such third-party notices normally appear. The contents
-          of the NOTICE file are for informational purposes only and
-          do not modify the License. You may add Your own attribution
-          notices within Derivative Works that You distribute, alongside
-          or as an addendum to the NOTICE text from the Work, provided
-          that such additional attribution notices cannot be construed
-          as modifying the License.
-
-      You may add Your own copyright statement to Your modifications and
-      may provide additional or different license terms and conditions
-      for use, reproduction, or distribution of Your modifications, or
-      for any such Derivative Works as a whole, provided Your use,
-      reproduction, and distribution of the Work otherwise complies with
-      the conditions stated in this License.
-
-   5. Submission of Contributions. Unless You explicitly state otherwise,
-      any Contribution intentionally submitted for inclusion in the Work
-      by You to the Licensor shall be under the terms and conditions of
-      this License, without any additional terms or conditions.
-      Notwithstanding the above, nothing herein shall supersede or modify
-      the terms of any separate license agreement you may have executed
-      with Licensor regarding such Contributions.
-
-   6. Trademarks. This License does not grant permission to use the trade
-      names, trademarks, service marks, or product names of the Licensor,
-      except as required for reasonable and customary use in describing the
-      origin of the Work and reproducing the content of the NOTICE file.
-
-   7. Disclaimer of Warranty. Unless required by applicable law or
-      agreed to in writing, Licensor provides the Work (and each
-      Contributor provides its Contributions) on an "AS IS" BASIS,
-      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
-      implied, including, without limitation, any warranties or conditions
-      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
-      PARTICULAR PURPOSE. You are solely responsible for determining the
-      appropriateness of using or redistributing the Work and assume any
-      risks associated with Your exercise of permissions under this License.
-
-   8. Limitation of Liability. In no event and under no legal theory,
-      whether in tort (including negligence), contract, or otherwise,
-      unless required by applicable law (such as deliberate and grossly
-      negligent acts) or agreed to in writing, shall any Contributor be
-      liable to You for damages, including any direct, indirect, special,
-      incidental, or consequential damages of any character arising as a
-      result of this License or out of the use or inability to use the
-      Work (including but not limited to damages for loss of goodwill,
-      work stoppage, computer failure or malfunction, or any and all
-      other commercial damages or losses), even if such Contributor
-      has been advised of the possibility of such damages.
-
-   9. Accepting Warranty or Additional Liability. While redistributing
-      the Work or Derivative Works thereof, You may choose to offer,
-      and charge a fee for, acceptance of support, warranty, indemnity,
-      or other liability obligations and/or rights consistent with this
-      License. However, in accepting such obligations, You may act only
-      on Your own behalf and on Your sole responsibility, not on behalf
-      of any other Contributor, and only if You agree to indemnify,
-      defend, and hold each Contributor harmless for any liability
-      incurred by, or claims asserted against, such Contributor by reason
-      of your accepting any such warranty or additional liability.
-
-   END OF TERMS AND CONDITIONS
-
-
-AndroidX lifecycle viewmodel savedstate library:
-
-
-   Copyright (c) 2005-2011, 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.
-
-   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.
-
-
-                                 Apache License
-                           Version 2.0, January 2004
-                        http://www.apache.org/licenses/
-
-   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
-
-   1. Definitions.
-
-      "License" shall mean the terms and conditions for use, reproduction,
-      and distribution as defined by Sections 1 through 9 of this document.
-
-      "Licensor" shall mean the copyright owner or entity authorized by
-      the copyright owner that is granting the License.
-
-      "Legal Entity" shall mean the union of the acting entity and all
-      other entities that control, are controlled by, or are under common
-      control with that entity. For the purposes of this definition,
-      "control" means (i) the power, direct or indirect, to cause the
-      direction or management of such entity, whether by contract or
-      otherwise, or (ii) ownership of fifty percent (50%) or more of the
-      outstanding shares, or (iii) beneficial ownership of such entity.
-
-      "You" (or "Your") shall mean an individual or Legal Entity
-      exercising permissions granted by this License.
-
-      "Source" form shall mean the preferred form for making modifications,
-      including but not limited to software source code, documentation
-      source, and configuration files.
-
-      "Object" form shall mean any form resulting from mechanical
-      transformation or translation of a Source form, including but
-      not limited to compiled object code, generated documentation,
-      and conversions to other media types.
-
-      "Work" shall mean the work of authorship, whether in Source or
-      Object form, made available under the License, as indicated by a
-      copyright notice that is included in or attached to the work
-      (an example is provided in the Appendix below).
-
-      "Derivative Works" shall mean any work, whether in Source or Object
-      form, that is based on (or derived from) the Work and for which the
-      editorial revisions, annotations, elaborations, or other modifications
-      represent, as a whole, an original work of authorship. For the purposes
-      of this License, Derivative Works shall not include works that remain
-      separable from, or merely link (or bind by name) to the interfaces of,
-      the Work and Derivative Works thereof.
-
-      "Contribution" shall mean any work of authorship, including
-      the original version of the Work and any modifications or additions
-      to that Work or Derivative Works thereof, that is intentionally
-      submitted to Licensor for inclusion in the Work by the copyright owner
-      or by an individual or Legal Entity authorized to submit on behalf of
-      the copyright owner. For the purposes of this definition, "submitted"
-      means any form of electronic, verbal, or written communication sent
-      to the Licensor or its representatives, including but not limited to
-      communication on electronic mailing lists, source code control systems,
-      and issue tracking systems that are managed by, or on behalf of, the
-      Licensor for the purpose of discussing and improving the Work, but
-      excluding communication that is conspicuously marked or otherwise
-      designated in writing by the copyright owner as "Not a Contribution."
-
-      "Contributor" shall mean Licensor and any individual or Legal Entity
-      on behalf of whom a Contribution has been received by Licensor and
-      subsequently incorporated within the Work.
-
-   2. Grant of Copyright License. Subject to the terms and conditions of
-      this License, each Contributor hereby grants to You a perpetual,
-      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
-      copyright license to reproduce, prepare Derivative Works of,
-      publicly display, publicly perform, sublicense, and distribute the
-      Work and such Derivative Works in Source or Object form.
-
-   3. Grant of Patent License. Subject to the terms and conditions of
-      this License, each Contributor hereby grants to You a perpetual,
-      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
-      (except as stated in this section) patent license to make, have made,
-      use, offer to sell, sell, import, and otherwise transfer the Work,
-      where such license applies only to those patent claims licensable
-      by such Contributor that are necessarily infringed by their
-      Contribution(s) alone or by combination of their Contribution(s)
-      with the Work to which such Contribution(s) was submitted. If You
-      institute patent litigation against any entity (including a
-      cross-claim or counterclaim in a lawsuit) alleging that the Work
-      or a Contribution incorporated within the Work constitutes direct
-      or contributory patent infringement, then any patent licenses
-      granted to You under this License for that Work shall terminate
-      as of the date such litigation is filed.
-
-   4. Redistribution. You may reproduce and distribute copies of the
-      Work or Derivative Works thereof in any medium, with or without
-      modifications, and in Source or Object form, provided that You
-      meet the following conditions:
-
-      (a) You must give any other recipients of the Work or
-          Derivative Works a copy of this License; and
-
-      (b) You must cause any modified files to carry prominent notices
-          stating that You changed the files; and
-
-      (c) You must retain, in the Source form of any Derivative Works
-          that You distribute, all copyright, patent, trademark, and
-          attribution notices from the Source form of the Work,
-          excluding those notices that do not pertain to any part of
-          the Derivative Works; and
-
-      (d) If the Work includes a "NOTICE" text file as part of its
-          distribution, then any Derivative Works that You distribute must
-          include a readable copy of the attribution notices contained
-          within such NOTICE file, excluding those notices that do not
-          pertain to any part of the Derivative Works, in at least one
-          of the following places: within a NOTICE text file distributed
-          as part of the Derivative Works; within the Source form or
-          documentation, if provided along with the Derivative Works; or,
-          within a display generated by the Derivative Works, if and
-          wherever such third-party notices normally appear. The contents
-          of the NOTICE file are for informational purposes only and
-          do not modify the License. You may add Your own attribution
-          notices within Derivative Works that You distribute, alongside
-          or as an addendum to the NOTICE text from the Work, provided
-          that such additional attribution notices cannot be construed
-          as modifying the License.
-
-      You may add Your own copyright statement to Your modifications and
-      may provide additional or different license terms and conditions
-      for use, reproduction, or distribution of Your modifications, or
-      for any such Derivative Works as a whole, provided Your use,
-      reproduction, and distribution of the Work otherwise complies with
-      the conditions stated in this License.
-
-   5. Submission of Contributions. Unless You explicitly state otherwise,
-      any Contribution intentionally submitted for inclusion in the Work
-      by You to the Licensor shall be under the terms and conditions of
-      this License, without any additional terms or conditions.
-      Notwithstanding the above, nothing herein shall supersede or modify
-      the terms of any separate license agreement you may have executed
-      with Licensor regarding such Contributions.
-
-   6. Trademarks. This License does not grant permission to use the trade
-      names, trademarks, service marks, or product names of the Licensor,
-      except as required for reasonable and customary use in describing the
-      origin of the Work and reproducing the content of the NOTICE file.
-
-   7. Disclaimer of Warranty. Unless required by applicable law or
-      agreed to in writing, Licensor provides the Work (and each
-      Contributor provides its Contributions) on an "AS IS" BASIS,
-      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
-      implied, including, without limitation, any warranties or conditions
-      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
-      PARTICULAR PURPOSE. You are solely responsible for determining the
-      appropriateness of using or redistributing the Work and assume any
-      risks associated with Your exercise of permissions under this License.
-
-   8. Limitation of Liability. In no event and under no legal theory,
-      whether in tort (including negligence), contract, or otherwise,
-      unless required by applicable law (such as deliberate and grossly
-      negligent acts) or agreed to in writing, shall any Contributor be
-      liable to You for damages, including any direct, indirect, special,
-      incidental, or consequential damages of any character arising as a
-      result of this License or out of the use or inability to use the
-      Work (including but not limited to damages for loss of goodwill,
-      work stoppage, computer failure or malfunction, or any and all
-      other commercial damages or losses), even if such Contributor
-      has been advised of the possibility of such damages.
-
-   9. Accepting Warranty or Additional Liability. While redistributing
-      the Work or Derivative Works thereof, You may choose to offer,
-      and charge a fee for, acceptance of support, warranty, indemnity,
-      or other liability obligations and/or rights consistent with this
-      License. However, in accepting such obligations, You may act only
-      on Your own behalf and on Your sole responsibility, not on behalf
-      of any other Contributor, and only if You agree to indemnify,
-      defend, and hold each Contributor harmless for any liability
-      incurred by, or claims asserted against, such Contributor by reason
-      of your accepting any such warranty or additional liability.
-
-   END OF TERMS AND CONDITIONS
-
-AndroidX loader library:
-
-
-   Copyright (c) 2005-2011, 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.
-
-   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.
-
-
-                                 Apache License
-                           Version 2.0, January 2004
-                        http://www.apache.org/licenses/
-
-   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
-
-   1. Definitions.
-
-      "License" shall mean the terms and conditions for use, reproduction,
-      and distribution as defined by Sections 1 through 9 of this document.
-
-      "Licensor" shall mean the copyright owner or entity authorized by
-      the copyright owner that is granting the License.
-
-      "Legal Entity" shall mean the union of the acting entity and all
-      other entities that control, are controlled by, or are under common
-      control with that entity. For the purposes of this definition,
-      "control" means (i) the power, direct or indirect, to cause the
-      direction or management of such entity, whether by contract or
-      otherwise, or (ii) ownership of fifty percent (50%) or more of the
-      outstanding shares, or (iii) beneficial ownership of such entity.
-
-      "You" (or "Your") shall mean an individual or Legal Entity
-      exercising permissions granted by this License.
-
-      "Source" form shall mean the preferred form for making modifications,
-      including but not limited to software source code, documentation
-      source, and configuration files.
-
-      "Object" form shall mean any form resulting from mechanical
-      transformation or translation of a Source form, including but
-      not limited to compiled object code, generated documentation,
-      and conversions to other media types.
-
-      "Work" shall mean the work of authorship, whether in Source or
-      Object form, made available under the License, as indicated by a
-      copyright notice that is included in or attached to the work
-      (an example is provided in the Appendix below).
-
-      "Derivative Works" shall mean any work, whether in Source or Object
-      form, that is based on (or derived from) the Work and for which the
-      editorial revisions, annotations, elaborations, or other modifications
-      represent, as a whole, an original work of authorship. For the purposes
-      of this License, Derivative Works shall not include works that remain
-      separable from, or merely link (or bind by name) to the interfaces of,
-      the Work and Derivative Works thereof.
-
-      "Contribution" shall mean any work of authorship, including
-      the original version of the Work and any modifications or additions
-      to that Work or Derivative Works thereof, that is intentionally
-      submitted to Licensor for inclusion in the Work by the copyright owner
-      or by an individual or Legal Entity authorized to submit on behalf of
-      the copyright owner. For the purposes of this definition, "submitted"
-      means any form of electronic, verbal, or written communication sent
-      to the Licensor or its representatives, including but not limited to
-      communication on electronic mailing lists, source code control systems,
-      and issue tracking systems that are managed by, or on behalf of, the
-      Licensor for the purpose of discussing and improving the Work, but
-      excluding communication that is conspicuously marked or otherwise
-      designated in writing by the copyright owner as "Not a Contribution."
-
-      "Contributor" shall mean Licensor and any individual or Legal Entity
-      on behalf of whom a Contribution has been received by Licensor and
-      subsequently incorporated within the Work.
-
-   2. Grant of Copyright License. Subject to the terms and conditions of
-      this License, each Contributor hereby grants to You a perpetual,
-      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
-      copyright license to reproduce, prepare Derivative Works of,
-      publicly display, publicly perform, sublicense, and distribute the
-      Work and such Derivative Works in Source or Object form.
-
-   3. Grant of Patent License. Subject to the terms and conditions of
-      this License, each Contributor hereby grants to You a perpetual,
-      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
-      (except as stated in this section) patent license to make, have made,
-      use, offer to sell, sell, import, and otherwise transfer the Work,
-      where such license applies only to those patent claims licensable
-      by such Contributor that are necessarily infringed by their
-      Contribution(s) alone or by combination of their Contribution(s)
-      with the Work to which such Contribution(s) was submitted. If You
-      institute patent litigation against any entity (including a
-      cross-claim or counterclaim in a lawsuit) alleging that the Work
-      or a Contribution incorporated within the Work constitutes direct
-      or contributory patent infringement, then any patent licenses
-      granted to You under this License for that Work shall terminate
-      as of the date such litigation is filed.
-
-   4. Redistribution. You may reproduce and distribute copies of the
-      Work or Derivative Works thereof in any medium, with or without
-      modifications, and in Source or Object form, provided that You
-      meet the following conditions:
-
-      (a) You must give any other recipients of the Work or
-          Derivative Works a copy of this License; and
-
-      (b) You must cause any modified files to carry prominent notices
-          stating that You changed the files; and
-
-      (c) You must retain, in the Source form of any Derivative Works
-          that You distribute, all copyright, patent, trademark, and
-          attribution notices from the Source form of the Work,
-          excluding those notices that do not pertain to any part of
-          the Derivative Works; and
-
-      (d) If the Work includes a "NOTICE" text file as part of its
-          distribution, then any Derivative Works that You distribute must
-          include a readable copy of the attribution notices contained
-          within such NOTICE file, excluding those notices that do not
-          pertain to any part of the Derivative Works, in at least one
-          of the following places: within a NOTICE text file distributed
-          as part of the Derivative Works; within the Source form or
-          documentation, if provided along with the Derivative Works; or,
-          within a display generated by the Derivative Works, if and
-          wherever such third-party notices normally appear. The contents
-          of the NOTICE file are for informational purposes only and
-          do not modify the License. You may add Your own attribution
-          notices within Derivative Works that You distribute, alongside
-          or as an addendum to the NOTICE text from the Work, provided
-          that such additional attribution notices cannot be construed
-          as modifying the License.
-
-      You may add Your own copyright statement to Your modifications and
-      may provide additional or different license terms and conditions
-      for use, reproduction, or distribution of Your modifications, or
-      for any such Derivative Works as a whole, provided Your use,
-      reproduction, and distribution of the Work otherwise complies with
-      the conditions stated in this License.
-
-   5. Submission of Contributions. Unless You explicitly state otherwise,
-      any Contribution intentionally submitted for inclusion in the Work
-      by You to the Licensor shall be under the terms and conditions of
-      this License, without any additional terms or conditions.
-      Notwithstanding the above, nothing herein shall supersede or modify
-      the terms of any separate license agreement you may have executed
-      with Licensor regarding such Contributions.
-
-   6. Trademarks. This License does not grant permission to use the trade
-      names, trademarks, service marks, or product names of the Licensor,
-      except as required for reasonable and customary use in describing the
-      origin of the Work and reproducing the content of the NOTICE file.
-
-   7. Disclaimer of Warranty. Unless required by applicable law or
-      agreed to in writing, Licensor provides the Work (and each
-      Contributor provides its Contributions) on an "AS IS" BASIS,
-      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
-      implied, including, without limitation, any warranties or conditions
-      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
-      PARTICULAR PURPOSE. You are solely responsible for determining the
-      appropriateness of using or redistributing the Work and assume any
-      risks associated with Your exercise of permissions under this License.
-
-   8. Limitation of Liability. In no event and under no legal theory,
-      whether in tort (including negligence), contract, or otherwise,
-      unless required by applicable law (such as deliberate and grossly
-      negligent acts) or agreed to in writing, shall any Contributor be
-      liable to You for damages, including any direct, indirect, special,
-      incidental, or consequential damages of any character arising as a
-      result of this License or out of the use or inability to use the
-      Work (including but not limited to damages for loss of goodwill,
-      work stoppage, computer failure or malfunction, or any and all
-      other commercial damages or losses), even if such Contributor
-      has been advised of the possibility of such damages.
-
-   9. Accepting Warranty or Additional Liability. While redistributing
-      the Work or Derivative Works thereof, You may choose to offer,
-      and charge a fee for, acceptance of support, warranty, indemnity,
-      or other liability obligations and/or rights consistent with this
-      License. However, in accepting such obligations, You may act only
-      on Your own behalf and on Your sole responsibility, not on behalf
-      of any other Contributor, and only if You agree to indemnify,
-      defend, and hold each Contributor harmless for any liability
-      incurred by, or claims asserted against, such Contributor by reason
-      of your accepting any such warranty or additional liability.
-
-   END OF TERMS AND CONDITIONS
-
-
-
-AndroidX localbroadcastmanager library:
-
-
-   Copyright (c) 2005-2011, 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.
-
-   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.
-
-
-                                 Apache License
-                           Version 2.0, January 2004
-                        http://www.apache.org/licenses/
-
-   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
-
-   1. Definitions.
-
-      "License" shall mean the terms and conditions for use, reproduction,
-      and distribution as defined by Sections 1 through 9 of this document.
-
-      "Licensor" shall mean the copyright owner or entity authorized by
-      the copyright owner that is granting the License.
-
-      "Legal Entity" shall mean the union of the acting entity and all
-      other entities that control, are controlled by, or are under common
-      control with that entity. For the purposes of this definition,
-      "control" means (i) the power, direct or indirect, to cause the
-      direction or management of such entity, whether by contract or
-      otherwise, or (ii) ownership of fifty percent (50%) or more of the
-      outstanding shares, or (iii) beneficial ownership of such entity.
-
-      "You" (or "Your") shall mean an individual or Legal Entity
-      exercising permissions granted by this License.
-
-      "Source" form shall mean the preferred form for making modifications,
-      including but not limited to software source code, documentation
-      source, and configuration files.
-
-      "Object" form shall mean any form resulting from mechanical
-      transformation or translation of a Source form, including but
-      not limited to compiled object code, generated documentation,
-      and conversions to other media types.
-
-      "Work" shall mean the work of authorship, whether in Source or
-      Object form, made available under the License, as indicated by a
-      copyright notice that is included in or attached to the work
-      (an example is provided in the Appendix below).
-
-      "Derivative Works" shall mean any work, whether in Source or Object
-      form, that is based on (or derived from) the Work and for which the
-      editorial revisions, annotations, elaborations, or other modifications
-      represent, as a whole, an original work of authorship. For the purposes
-      of this License, Derivative Works shall not include works that remain
-      separable from, or merely link (or bind by name) to the interfaces of,
-      the Work and Derivative Works thereof.
-
-      "Contribution" shall mean any work of authorship, including
-      the original version of the Work and any modifications or additions
-      to that Work or Derivative Works thereof, that is intentionally
-      submitted to Licensor for inclusion in the Work by the copyright owner
-      or by an individual or Legal Entity authorized to submit on behalf of
-      the copyright owner. For the purposes of this definition, "submitted"
-      means any form of electronic, verbal, or written communication sent
-      to the Licensor or its representatives, including but not limited to
-      communication on electronic mailing lists, source code control systems,
-      and issue tracking systems that are managed by, or on behalf of, the
-      Licensor for the purpose of discussing and improving the Work, but
-      excluding communication that is conspicuously marked or otherwise
-      designated in writing by the copyright owner as "Not a Contribution."
-
-      "Contributor" shall mean Licensor and any individual or Legal Entity
-      on behalf of whom a Contribution has been received by Licensor and
-      subsequently incorporated within the Work.
-
-   2. Grant of Copyright License. Subject to the terms and conditions of
-      this License, each Contributor hereby grants to You a perpetual,
-      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
-      copyright license to reproduce, prepare Derivative Works of,
-      publicly display, publicly perform, sublicense, and distribute the
-      Work and such Derivative Works in Source or Object form.
-
-   3. Grant of Patent License. Subject to the terms and conditions of
-      this License, each Contributor hereby grants to You a perpetual,
-      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
-      (except as stated in this section) patent license to make, have made,
-      use, offer to sell, sell, import, and otherwise transfer the Work,
-      where such license applies only to those patent claims licensable
-      by such Contributor that are necessarily infringed by their
-      Contribution(s) alone or by combination of their Contribution(s)
-      with the Work to which such Contribution(s) was submitted. If You
-      institute patent litigation against any entity (including a
-      cross-claim or counterclaim in a lawsuit) alleging that the Work
-      or a Contribution incorporated within the Work constitutes direct
-      or contributory patent infringement, then any patent licenses
-      granted to You under this License for that Work shall terminate
-      as of the date such litigation is filed.
-
-   4. Redistribution. You may reproduce and distribute copies of the
-      Work or Derivative Works thereof in any medium, with or without
-      modifications, and in Source or Object form, provided that You
-      meet the following conditions:
-
-      (a) You must give any other recipients of the Work or
-          Derivative Works a copy of this License; and
-
-      (b) You must cause any modified files to carry prominent notices
-          stating that You changed the files; and
-
-      (c) You must retain, in the Source form of any Derivative Works
-          that You distribute, all copyright, patent, trademark, and
-          attribution notices from the Source form of the Work,
-          excluding those notices that do not pertain to any part of
-          the Derivative Works; and
-
-      (d) If the Work includes a "NOTICE" text file as part of its
-          distribution, then any Derivative Works that You distribute must
-          include a readable copy of the attribution notices contained
-          within such NOTICE file, excluding those notices that do not
-          pertain to any part of the Derivative Works, in at least one
-          of the following places: within a NOTICE text file distributed
-          as part of the Derivative Works; within the Source form or
-          documentation, if provided along with the Derivative Works; or,
-          within a display generated by the Derivative Works, if and
-          wherever such third-party notices normally appear. The contents
-          of the NOTICE file are for informational purposes only and
-          do not modify the License. You may add Your own attribution
-          notices within Derivative Works that You distribute, alongside
-          or as an addendum to the NOTICE text from the Work, provided
-          that such additional attribution notices cannot be construed
-          as modifying the License.
-
-      You may add Your own copyright statement to Your modifications and
-      may provide additional or different license terms and conditions
-      for use, reproduction, or distribution of Your modifications, or
-      for any such Derivative Works as a whole, provided Your use,
-      reproduction, and distribution of the Work otherwise complies with
-      the conditions stated in this License.
-
-   5. Submission of Contributions. Unless You explicitly state otherwise,
-      any Contribution intentionally submitted for inclusion in the Work
-      by You to the Licensor shall be under the terms and conditions of
-      this License, without any additional terms or conditions.
-      Notwithstanding the above, nothing herein shall supersede or modify
-      the terms of any separate license agreement you may have executed
-      with Licensor regarding such Contributions.
-
-   6. Trademarks. This License does not grant permission to use the trade
-      names, trademarks, service marks, or product names of the Licensor,
-      except as required for reasonable and customary use in describing the
-      origin of the Work and reproducing the content of the NOTICE file.
-
-   7. Disclaimer of Warranty. Unless required by applicable law or
-      agreed to in writing, Licensor provides the Work (and each
-      Contributor provides its Contributions) on an "AS IS" BASIS,
-      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
-      implied, including, without limitation, any warranties or conditions
-      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
-      PARTICULAR PURPOSE. You are solely responsible for determining the
-      appropriateness of using or redistributing the Work and assume any
-      risks associated with Your exercise of permissions under this License.
-
-   8. Limitation of Liability. In no event and under no legal theory,
-      whether in tort (including negligence), contract, or otherwise,
-      unless required by applicable law (such as deliberate and grossly
-      negligent acts) or agreed to in writing, shall any Contributor be
-      liable to You for damages, including any direct, indirect, special,
-      incidental, or consequential damages of any character arising as a
-      result of this License or out of the use or inability to use the
-      Work (including but not limited to damages for loss of goodwill,
-      work stoppage, computer failure or malfunction, or any and all
-      other commercial damages or losses), even if such Contributor
-      has been advised of the possibility of such damages.
-
-   9. Accepting Warranty or Additional Liability. While redistributing
-      the Work or Derivative Works thereof, You may choose to offer,
-      and charge a fee for, acceptance of support, warranty, indemnity,
-      or other liability obligations and/or rights consistent with this
-      License. However, in accepting such obligations, You may act only
-      on Your own behalf and on Your sole responsibility, not on behalf
-      of any other Contributor, and only if You agree to indemnify,
-      defend, and hold each Contributor harmless for any liability
-      incurred by, or claims asserted against, such Contributor by reason
-      of your accepting any such warranty or additional liability.
-
-   END OF TERMS AND CONDITIONS
-
-AndroidX media base library:
-
-
-   Copyright (c) 2005-2011, 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.
-
-   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.
-
-
-                                 Apache License
-                           Version 2.0, January 2004
-                        http://www.apache.org/licenses/
-
-   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
-
-   1. Definitions.
-
-      "License" shall mean the terms and conditions for use, reproduction,
-      and distribution as defined by Sections 1 through 9 of this document.
-
-      "Licensor" shall mean the copyright owner or entity authorized by
-      the copyright owner that is granting the License.
-
-      "Legal Entity" shall mean the union of the acting entity and all
-      other entities that control, are controlled by, or are under common
-      control with that entity. For the purposes of this definition,
-      "control" means (i) the power, direct or indirect, to cause the
-      direction or management of such entity, whether by contract or
-      otherwise, or (ii) ownership of fifty percent (50%) or more of the
-      outstanding shares, or (iii) beneficial ownership of such entity.
-
-      "You" (or "Your") shall mean an individual or Legal Entity
-      exercising permissions granted by this License.
-
-      "Source" form shall mean the preferred form for making modifications,
-      including but not limited to software source code, documentation
-      source, and configuration files.
-
-      "Object" form shall mean any form resulting from mechanical
-      transformation or translation of a Source form, including but
-      not limited to compiled object code, generated documentation,
-      and conversions to other media types.
-
-      "Work" shall mean the work of authorship, whether in Source or
-      Object form, made available under the License, as indicated by a
-      copyright notice that is included in or attached to the work
-      (an example is provided in the Appendix below).
-
-      "Derivative Works" shall mean any work, whether in Source or Object
-      form, that is based on (or derived from) the Work and for which the
-      editorial revisions, annotations, elaborations, or other modifications
-      represent, as a whole, an original work of authorship. For the purposes
-      of this License, Derivative Works shall not include works that remain
-      separable from, or merely link (or bind by name) to the interfaces of,
-      the Work and Derivative Works thereof.
-
-      "Contribution" shall mean any work of authorship, including
-      the original version of the Work and any modifications or additions
-      to that Work or Derivative Works thereof, that is intentionally
-      submitted to Licensor for inclusion in the Work by the copyright owner
-      or by an individual or Legal Entity authorized to submit on behalf of
-      the copyright owner. For the purposes of this definition, "submitted"
-      means any form of electronic, verbal, or written communication sent
-      to the Licensor or its representatives, including but not limited to
-      communication on electronic mailing lists, source code control systems,
-      and issue tracking systems that are managed by, or on behalf of, the
-      Licensor for the purpose of discussing and improving the Work, but
-      excluding communication that is conspicuously marked or otherwise
-      designated in writing by the copyright owner as "Not a Contribution."
-
-      "Contributor" shall mean Licensor and any individual or Legal Entity
-      on behalf of whom a Contribution has been received by Licensor and
-      subsequently incorporated within the Work.
-
-   2. Grant of Copyright License. Subject to the terms and conditions of
-      this License, each Contributor hereby grants to You a perpetual,
-      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
-      copyright license to reproduce, prepare Derivative Works of,
-      publicly display, publicly perform, sublicense, and distribute the
-      Work and such Derivative Works in Source or Object form.
-
-   3. Grant of Patent License. Subject to the terms and conditions of
-      this License, each Contributor hereby grants to You a perpetual,
-      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
-      (except as stated in this section) patent license to make, have made,
-      use, offer to sell, sell, import, and otherwise transfer the Work,
-      where such license applies only to those patent claims licensable
-      by such Contributor that are necessarily infringed by their
-      Contribution(s) alone or by combination of their Contribution(s)
-      with the Work to which such Contribution(s) was submitted. If You
-      institute patent litigation against any entity (including a
-      cross-claim or counterclaim in a lawsuit) alleging that the Work
-      or a Contribution incorporated within the Work constitutes direct
-      or contributory patent infringement, then any patent licenses
-      granted to You under this License for that Work shall terminate
-      as of the date such litigation is filed.
-
-   4. Redistribution. You may reproduce and distribute copies of the
-      Work or Derivative Works thereof in any medium, with or without
-      modifications, and in Source or Object form, provided that You
-      meet the following conditions:
-
-      (a) You must give any other recipients of the Work or
-          Derivative Works a copy of this License; and
-
-      (b) You must cause any modified files to carry prominent notices
-          stating that You changed the files; and
-
-      (c) You must retain, in the Source form of any Derivative Works
-          that You distribute, all copyright, patent, trademark, and
-          attribution notices from the Source form of the Work,
-          excluding those notices that do not pertain to any part of
-          the Derivative Works; and
-
-      (d) If the Work includes a "NOTICE" text file as part of its
-          distribution, then any Derivative Works that You distribute must
-          include a readable copy of the attribution notices contained
-          within such NOTICE file, excluding those notices that do not
-          pertain to any part of the Derivative Works, in at least one
-          of the following places: within a NOTICE text file distributed
-          as part of the Derivative Works; within the Source form or
-          documentation, if provided along with the Derivative Works; or,
-          within a display generated by the Derivative Works, if and
-          wherever such third-party notices normally appear. The contents
-          of the NOTICE file are for informational purposes only and
-          do not modify the License. You may add Your own attribution
-          notices within Derivative Works that You distribute, alongside
-          or as an addendum to the NOTICE text from the Work, provided
-          that such additional attribution notices cannot be construed
-          as modifying the License.
-
-      You may add Your own copyright statement to Your modifications and
-      may provide additional or different license terms and conditions
-      for use, reproduction, or distribution of Your modifications, or
-      for any such Derivative Works as a whole, provided Your use,
-      reproduction, and distribution of the Work otherwise complies with
-      the conditions stated in this License.
-
-   5. Submission of Contributions. Unless You explicitly state otherwise,
-      any Contribution intentionally submitted for inclusion in the Work
-      by You to the Licensor shall be under the terms and conditions of
-      this License, without any additional terms or conditions.
-      Notwithstanding the above, nothing herein shall supersede or modify
-      the terms of any separate license agreement you may have executed
-      with Licensor regarding such Contributions.
-
-   6. Trademarks. This License does not grant permission to use the trade
-      names, trademarks, service marks, or product names of the Licensor,
-      except as required for reasonable and customary use in describing the
-      origin of the Work and reproducing the content of the NOTICE file.
-
-   7. Disclaimer of Warranty. Unless required by applicable law or
-      agreed to in writing, Licensor provides the Work (and each
-      Contributor provides its Contributions) on an "AS IS" BASIS,
-      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
-      implied, including, without limitation, any warranties or conditions
-      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
-      PARTICULAR PURPOSE. You are solely responsible for determining the
-      appropriateness of using or redistributing the Work and assume any
-      risks associated with Your exercise of permissions under this License.
-
-   8. Limitation of Liability. In no event and under no legal theory,
-      whether in tort (including negligence), contract, or otherwise,
-      unless required by applicable law (such as deliberate and grossly
-      negligent acts) or agreed to in writing, shall any Contributor be
-      liable to You for damages, including any direct, indirect, special,
-      incidental, or consequential damages of any character arising as a
-      result of this License or out of the use or inability to use the
-      Work (including but not limited to damages for loss of goodwill,
-      work stoppage, computer failure or malfunction, or any and all
-      other commercial damages or losses), even if such Contributor
-      has been advised of the possibility of such damages.
-
-   9. Accepting Warranty or Additional Liability. While redistributing
-      the Work or Derivative Works thereof, You may choose to offer,
-      and charge a fee for, acceptance of support, warranty, indemnity,
-      or other liability obligations and/or rights consistent with this
-      License. However, in accepting such obligations, You may act only
-      on Your own behalf and on Your sole responsibility, not on behalf
-      of any other Contributor, and only if You agree to indemnify,
-      defend, and hold each Contributor harmless for any liability
-      incurred by, or claims asserted against, such Contributor by reason
-      of your accepting any such warranty or additional liability.
-
-   END OF TERMS AND CONDITIONS
-
-
-
-AndroidX print library:
-
-
-   Copyright (c) 2005-2011, 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.
-
-   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.
-
-
-                                 Apache License
-                           Version 2.0, January 2004
-                        http://www.apache.org/licenses/
-
-   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
-
-   1. Definitions.
-
-      "License" shall mean the terms and conditions for use, reproduction,
-      and distribution as defined by Sections 1 through 9 of this document.
-
-      "Licensor" shall mean the copyright owner or entity authorized by
-      the copyright owner that is granting the License.
-
-      "Legal Entity" shall mean the union of the acting entity and all
-      other entities that control, are controlled by, or are under common
-      control with that entity. For the purposes of this definition,
-      "control" means (i) the power, direct or indirect, to cause the
-      direction or management of such entity, whether by contract or
-      otherwise, or (ii) ownership of fifty percent (50%) or more of the
-      outstanding shares, or (iii) beneficial ownership of such entity.
-
-      "You" (or "Your") shall mean an individual or Legal Entity
-      exercising permissions granted by this License.
-
-      "Source" form shall mean the preferred form for making modifications,
-      including but not limited to software source code, documentation
-      source, and configuration files.
-
-      "Object" form shall mean any form resulting from mechanical
-      transformation or translation of a Source form, including but
-      not limited to compiled object code, generated documentation,
-      and conversions to other media types.
-
-      "Work" shall mean the work of authorship, whether in Source or
-      Object form, made available under the License, as indicated by a
-      copyright notice that is included in or attached to the work
-      (an example is provided in the Appendix below).
-
-      "Derivative Works" shall mean any work, whether in Source or Object
-      form, that is based on (or derived from) the Work and for which the
-      editorial revisions, annotations, elaborations, or other modifications
-      represent, as a whole, an original work of authorship. For the purposes
-      of this License, Derivative Works shall not include works that remain
-      separable from, or merely link (or bind by name) to the interfaces of,
-      the Work and Derivative Works thereof.
-
-      "Contribution" shall mean any work of authorship, including
-      the original version of the Work and any modifications or additions
-      to that Work or Derivative Works thereof, that is intentionally
-      submitted to Licensor for inclusion in the Work by the copyright owner
-      or by an individual or Legal Entity authorized to submit on behalf of
-      the copyright owner. For the purposes of this definition, "submitted"
-      means any form of electronic, verbal, or written communication sent
-      to the Licensor or its representatives, including but not limited to
-      communication on electronic mailing lists, source code control systems,
-      and issue tracking systems that are managed by, or on behalf of, the
-      Licensor for the purpose of discussing and improving the Work, but
-      excluding communication that is conspicuously marked or otherwise
-      designated in writing by the copyright owner as "Not a Contribution."
-
-      "Contributor" shall mean Licensor and any individual or Legal Entity
-      on behalf of whom a Contribution has been received by Licensor and
-      subsequently incorporated within the Work.
-
-   2. Grant of Copyright License. Subject to the terms and conditions of
-      this License, each Contributor hereby grants to You a perpetual,
-      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
-      copyright license to reproduce, prepare Derivative Works of,
-      publicly display, publicly perform, sublicense, and distribute the
-      Work and such Derivative Works in Source or Object form.
-
-   3. Grant of Patent License. Subject to the terms and conditions of
-      this License, each Contributor hereby grants to You a perpetual,
-      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
-      (except as stated in this section) patent license to make, have made,
-      use, offer to sell, sell, import, and otherwise transfer the Work,
-      where such license applies only to those patent claims licensable
-      by such Contributor that are necessarily infringed by their
-      Contribution(s) alone or by combination of their Contribution(s)
-      with the Work to which such Contribution(s) was submitted. If You
-      institute patent litigation against any entity (including a
-      cross-claim or counterclaim in a lawsuit) alleging that the Work
-      or a Contribution incorporated within the Work constitutes direct
-      or contributory patent infringement, then any patent licenses
-      granted to You under this License for that Work shall terminate
-      as of the date such litigation is filed.
-
-   4. Redistribution. You may reproduce and distribute copies of the
-      Work or Derivative Works thereof in any medium, with or without
-      modifications, and in Source or Object form, provided that You
-      meet the following conditions:
-
-      (a) You must give any other recipients of the Work or
-          Derivative Works a copy of this License; and
-
-      (b) You must cause any modified files to carry prominent notices
-          stating that You changed the files; and
-
-      (c) You must retain, in the Source form of any Derivative Works
-          that You distribute, all copyright, patent, trademark, and
-          attribution notices from the Source form of the Work,
-          excluding those notices that do not pertain to any part of
-          the Derivative Works; and
-
-      (d) If the Work includes a "NOTICE" text file as part of its
-          distribution, then any Derivative Works that You distribute must
-          include a readable copy of the attribution notices contained
-          within such NOTICE file, excluding those notices that do not
-          pertain to any part of the Derivative Works, in at least one
-          of the following places: within a NOTICE text file distributed
-          as part of the Derivative Works; within the Source form or
-          documentation, if provided along with the Derivative Works; or,
-          within a display generated by the Derivative Works, if and
-          wherever such third-party notices normally appear. The contents
-          of the NOTICE file are for informational purposes only and
-          do not modify the License. You may add Your own attribution
-          notices within Derivative Works that You distribute, alongside
-          or as an addendum to the NOTICE text from the Work, provided
-          that such additional attribution notices cannot be construed
-          as modifying the License.
-
-      You may add Your own copyright statement to Your modifications and
-      may provide additional or different license terms and conditions
-      for use, reproduction, or distribution of Your modifications, or
-      for any such Derivative Works as a whole, provided Your use,
-      reproduction, and distribution of the Work otherwise complies with
-      the conditions stated in this License.
-
-   5. Submission of Contributions. Unless You explicitly state otherwise,
-      any Contribution intentionally submitted for inclusion in the Work
-      by You to the Licensor shall be under the terms and conditions of
-      this License, without any additional terms or conditions.
-      Notwithstanding the above, nothing herein shall supersede or modify
-      the terms of any separate license agreement you may have executed
-      with Licensor regarding such Contributions.
-
-   6. Trademarks. This License does not grant permission to use the trade
-      names, trademarks, service marks, or product names of the Licensor,
-      except as required for reasonable and customary use in describing the
-      origin of the Work and reproducing the content of the NOTICE file.
-
-   7. Disclaimer of Warranty. Unless required by applicable law or
-      agreed to in writing, Licensor provides the Work (and each
-      Contributor provides its Contributions) on an "AS IS" BASIS,
-      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
-      implied, including, without limitation, any warranties or conditions
-      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
-      PARTICULAR PURPOSE. You are solely responsible for determining the
-      appropriateness of using or redistributing the Work and assume any
-      risks associated with Your exercise of permissions under this License.
-
-   8. Limitation of Liability. In no event and under no legal theory,
-      whether in tort (including negligence), contract, or otherwise,
-      unless required by applicable law (such as deliberate and grossly
-      negligent acts) or agreed to in writing, shall any Contributor be
-      liable to You for damages, including any direct, indirect, special,
-      incidental, or consequential damages of any character arising as a
-      result of this License or out of the use or inability to use the
-      Work (including but not limited to damages for loss of goodwill,
-      work stoppage, computer failure or malfunction, or any and all
-      other commercial damages or losses), even if such Contributor
-      has been advised of the possibility of such damages.
-
-   9. Accepting Warranty or Additional Liability. While redistributing
-      the Work or Derivative Works thereof, You may choose to offer,
-      and charge a fee for, acceptance of support, warranty, indemnity,
-      or other liability obligations and/or rights consistent with this
-      License. However, in accepting such obligations, You may act only
-      on Your own behalf and on Your sole responsibility, not on behalf
-      of any other Contributor, and only if You agree to indemnify,
-      defend, and hold each Contributor harmless for any liability
-      incurred by, or claims asserted against, such Contributor by reason
-      of your accepting any such warranty or additional liability.
-
-   END OF TERMS AND CONDITIONS
-
-
-
-AndroidX savedstate library:
-
-Copyright (c) 2005-2011, 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.
-
-   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.
-
-
-                                 Apache License
-                           Version 2.0, January 2004
-                        http://www.apache.org/licenses/
-
-   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
-
-   1. Definitions.
-
-      "License" shall mean the terms and conditions for use, reproduction,
-      and distribution as defined by Sections 1 through 9 of this document.
-
-      "Licensor" shall mean the copyright owner or entity authorized by
-      the copyright owner that is granting the License.
-
-      "Legal Entity" shall mean the union of the acting entity and all
-      other entities that control, are controlled by, or are under common
-      control with that entity. For the purposes of this definition,
-      "control" means (i) the power, direct or indirect, to cause the
-      direction or management of such entity, whether by contract or
-      otherwise, or (ii) ownership of fifty percent (50%) or more of the
-      outstanding shares, or (iii) beneficial ownership of such entity.
-
-      "You" (or "Your") shall mean an individual or Legal Entity
-      exercising permissions granted by this License.
-
-      "Source" form shall mean the preferred form for making modifications,
-      including but not limited to software source code, documentation
-      source, and configuration files.
-
-      "Object" form shall mean any form resulting from mechanical
-      transformation or translation of a Source form, including but
-      not limited to compiled object code, generated documentation,
-      and conversions to other media types.
-
-      "Work" shall mean the work of authorship, whether in Source or
-      Object form, made available under the License, as indicated by a
-      copyright notice that is included in or attached to the work
-      (an example is provided in the Appendix below).
-
-      "Derivative Works" shall mean any work, whether in Source or Object
-      form, that is based on (or derived from) the Work and for which the
-      editorial revisions, annotations, elaborations, or other modifications
-      represent, as a whole, an original work of authorship. For the purposes
-      of this License, Derivative Works shall not include works that remain
-      separable from, or merely link (or bind by name) to the interfaces of,
-      the Work and Derivative Works thereof.
-
-      "Contribution" shall mean any work of authorship, including
-      the original version of the Work and any modifications or additions
-      to that Work or Derivative Works thereof, that is intentionally
-      submitted to Licensor for inclusion in the Work by the copyright owner
-      or by an individual or Legal Entity authorized to submit on behalf of
-      the copyright owner. For the purposes of this definition, "submitted"
-      means any form of electronic, verbal, or written communication sent
-      to the Licensor or its representatives, including but not limited to
-      communication on electronic mailing lists, source code control systems,
-      and issue tracking systems that are managed by, or on behalf of, the
-      Licensor for the purpose of discussing and improving the Work, but
-      excluding communication that is conspicuously marked or otherwise
-      designated in writing by the copyright owner as "Not a Contribution."
-
-      "Contributor" shall mean Licensor and any individual or Legal Entity
-      on behalf of whom a Contribution has been received by Licensor and
-      subsequently incorporated within the Work.
-
-   2. Grant of Copyright License. Subject to the terms and conditions of
-      this License, each Contributor hereby grants to You a perpetual,
-      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
-      copyright license to reproduce, prepare Derivative Works of,
-      publicly display, publicly perform, sublicense, and distribute the
-      Work and such Derivative Works in Source or Object form.
-
-   3. Grant of Patent License. Subject to the terms and conditions of
-      this License, each Contributor hereby grants to You a perpetual,
-      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
-      (except as stated in this section) patent license to make, have made,
-      use, offer to sell, sell, import, and otherwise transfer the Work,
-      where such license applies only to those patent claims licensable
-      by such Contributor that are necessarily infringed by their
-      Contribution(s) alone or by combination of their Contribution(s)
-      with the Work to which such Contribution(s) was submitted. If You
-      institute patent litigation against any entity (including a
-      cross-claim or counterclaim in a lawsuit) alleging that the Work
-      or a Contribution incorporated within the Work constitutes direct
-      or contributory patent infringement, then any patent licenses
-      granted to You under this License for that Work shall terminate
-      as of the date such litigation is filed.
-
-   4. Redistribution. You may reproduce and distribute copies of the
-      Work or Derivative Works thereof in any medium, with or without
-      modifications, and in Source or Object form, provided that You
-      meet the following conditions:
-
-      (a) You must give any other recipients of the Work or
-          Derivative Works a copy of this License; and
-
-      (b) You must cause any modified files to carry prominent notices
-          stating that You changed the files; and
-
-      (c) You must retain, in the Source form of any Derivative Works
-          that You distribute, all copyright, patent, trademark, and
-          attribution notices from the Source form of the Work,
-          excluding those notices that do not pertain to any part of
-          the Derivative Works; and
-
-      (d) If the Work includes a "NOTICE" text file as part of its
-          distribution, then any Derivative Works that You distribute must
-          include a readable copy of the attribution notices contained
-          within such NOTICE file, excluding those notices that do not
-          pertain to any part of the Derivative Works, in at least one
-          of the following places: within a NOTICE text file distributed
-          as part of the Derivative Works; within the Source form or
-          documentation, if provided along with the Derivative Works; or,
-          within a display generated by the Derivative Works, if and
-          wherever such third-party notices normally appear. The contents
-          of the NOTICE file are for informational purposes only and
-          do not modify the License. You may add Your own attribution
-          notices within Derivative Works that You distribute, alongside
-          or as an addendum to the NOTICE text from the Work, provided
-          that such additional attribution notices cannot be construed
-          as modifying the License.
-
-      You may add Your own copyright statement to Your modifications and
-      may provide additional or different license terms and conditions
-      for use, reproduction, or distribution of Your modifications, or
-      for any such Derivative Works as a whole, provided Your use,
-      reproduction, and distribution of the Work otherwise complies with
-      the conditions stated in this License.
-
-   5. Submission of Contributions. Unless You explicitly state otherwise,
-      any Contribution intentionally submitted for inclusion in the Work
-      by You to the Licensor shall be under the terms and conditions of
-      this License, without any additional terms or conditions.
-      Notwithstanding the above, nothing herein shall supersede or modify
-      the terms of any separate license agreement you may have executed
-      with Licensor regarding such Contributions.
-
-   6. Trademarks. This License does not grant permission to use the trade
-      names, trademarks, service marks, or product names of the Licensor,
-      except as required for reasonable and customary use in describing the
-      origin of the Work and reproducing the content of the NOTICE file.
-
-   7. Disclaimer of Warranty. Unless required by applicable law or
-      agreed to in writing, Licensor provides the Work (and each
-      Contributor provides its Contributions) on an "AS IS" BASIS,
-      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
-      implied, including, without limitation, any warranties or conditions
-      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
-      PARTICULAR PURPOSE. You are solely responsible for determining the
-      appropriateness of using or redistributing the Work and assume any
-      risks associated with Your exercise of permissions under this License.
-
-   8. Limitation of Liability. In no event and under no legal theory,
-      whether in tort (including negligence), contract, or otherwise,
-      unless required by applicable law (such as deliberate and grossly
-      negligent acts) or agreed to in writing, shall any Contributor be
-      liable to You for damages, including any direct, indirect, special,
-      incidental, or consequential damages of any character arising as a
-      result of this License or out of the use or inability to use the
-      Work (including but not limited to damages for loss of goodwill,
-      work stoppage, computer failure or malfunction, or any and all
-      other commercial damages or losses), even if such Contributor
-      has been advised of the possibility of such damages.
-
-   9. Accepting Warranty or Additional Liability. While redistributing
-      the Work or Derivative Works thereof, You may choose to offer,
-      and charge a fee for, acceptance of support, warranty, indemnity,
-      or other liability obligations and/or rights consistent with this
-      License. However, in accepting such obligations, You may act only
-      on Your own behalf and on Your sole responsibility, not on behalf
-      of any other Contributor, and only if You agree to indemnify,
-      defend, and hold each Contributor harmless for any liability
-      incurred by, or claims asserted against, such Contributor by reason
-      of your accepting any such warranty or additional liability.
-
-   END OF TERMS AND CONDITIONS
-
-AndroidX swiperefreshlayout library:
-
-
-   Copyright (c) 2005-2011, 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.
-
-   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.
-
-
-                                 Apache License
-                           Version 2.0, January 2004
-                        http://www.apache.org/licenses/
-
-   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
-
-   1. Definitions.
-
-      "License" shall mean the terms and conditions for use, reproduction,
-      and distribution as defined by Sections 1 through 9 of this document.
-
-      "Licensor" shall mean the copyright owner or entity authorized by
-      the copyright owner that is granting the License.
-
-      "Legal Entity" shall mean the union of the acting entity and all
-      other entities that control, are controlled by, or are under common
-      control with that entity. For the purposes of this definition,
-      "control" means (i) the power, direct or indirect, to cause the
-      direction or management of such entity, whether by contract or
-      otherwise, or (ii) ownership of fifty percent (50%) or more of the
-      outstanding shares, or (iii) beneficial ownership of such entity.
-
-      "You" (or "Your") shall mean an individual or Legal Entity
-      exercising permissions granted by this License.
-
-      "Source" form shall mean the preferred form for making modifications,
-      including but not limited to software source code, documentation
-      source, and configuration files.
-
-      "Object" form shall mean any form resulting from mechanical
-      transformation or translation of a Source form, including but
-      not limited to compiled object code, generated documentation,
-      and conversions to other media types.
-
-      "Work" shall mean the work of authorship, whether in Source or
-      Object form, made available under the License, as indicated by a
-      copyright notice that is included in or attached to the work
-      (an example is provided in the Appendix below).
-
-      "Derivative Works" shall mean any work, whether in Source or Object
-      form, that is based on (or derived from) the Work and for which the
-      editorial revisions, annotations, elaborations, or other modifications
-      represent, as a whole, an original work of authorship. For the purposes
-      of this License, Derivative Works shall not include works that remain
-      separable from, or merely link (or bind by name) to the interfaces of,
-      the Work and Derivative Works thereof.
-
-      "Contribution" shall mean any work of authorship, including
-      the original version of the Work and any modifications or additions
-      to that Work or Derivative Works thereof, that is intentionally
-      submitted to Licensor for inclusion in the Work by the copyright owner
-      or by an individual or Legal Entity authorized to submit on behalf of
-      the copyright owner. For the purposes of this definition, "submitted"
-      means any form of electronic, verbal, or written communication sent
-      to the Licensor or its representatives, including but not limited to
-      communication on electronic mailing lists, source code control systems,
-      and issue tracking systems that are managed by, or on behalf of, the
-      Licensor for the purpose of discussing and improving the Work, but
-      excluding communication that is conspicuously marked or otherwise
-      designated in writing by the copyright owner as "Not a Contribution."
-
-      "Contributor" shall mean Licensor and any individual or Legal Entity
-      on behalf of whom a Contribution has been received by Licensor and
-      subsequently incorporated within the Work.
-
-   2. Grant of Copyright License. Subject to the terms and conditions of
-      this License, each Contributor hereby grants to You a perpetual,
-      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
-      copyright license to reproduce, prepare Derivative Works of,
-      publicly display, publicly perform, sublicense, and distribute the
-      Work and such Derivative Works in Source or Object form.
-
-   3. Grant of Patent License. Subject to the terms and conditions of
-      this License, each Contributor hereby grants to You a perpetual,
-      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
-      (except as stated in this section) patent license to make, have made,
-      use, offer to sell, sell, import, and otherwise transfer the Work,
-      where such license applies only to those patent claims licensable
-      by such Contributor that are necessarily infringed by their
-      Contribution(s) alone or by combination of their Contribution(s)
-      with the Work to which such Contribution(s) was submitted. If You
-      institute patent litigation against any entity (including a
-      cross-claim or counterclaim in a lawsuit) alleging that the Work
-      or a Contribution incorporated within the Work constitutes direct
-      or contributory patent infringement, then any patent licenses
-      granted to You under this License for that Work shall terminate
-      as of the date such litigation is filed.
-
-   4. Redistribution. You may reproduce and distribute copies of the
-      Work or Derivative Works thereof in any medium, with or without
-      modifications, and in Source or Object form, provided that You
-      meet the following conditions:
-
-      (a) You must give any other recipients of the Work or
-          Derivative Works a copy of this License; and
-
-      (b) You must cause any modified files to carry prominent notices
-          stating that You changed the files; and
-
-      (c) You must retain, in the Source form of any Derivative Works
-          that You distribute, all copyright, patent, trademark, and
-          attribution notices from the Source form of the Work,
-          excluding those notices that do not pertain to any part of
-          the Derivative Works; and
-
-      (d) If the Work includes a "NOTICE" text file as part of its
-          distribution, then any Derivative Works that You distribute must
-          include a readable copy of the attribution notices contained
-          within such NOTICE file, excluding those notices that do not
-          pertain to any part of the Derivative Works, in at least one
-          of the following places: within a NOTICE text file distributed
-          as part of the Derivative Works; within the Source form or
-          documentation, if provided along with the Derivative Works; or,
-          within a display generated by the Derivative Works, if and
-          wherever such third-party notices normally appear. The contents
-          of the NOTICE file are for informational purposes only and
-          do not modify the License. You may add Your own attribution
-          notices within Derivative Works that You distribute, alongside
-          or as an addendum to the NOTICE text from the Work, provided
-          that such additional attribution notices cannot be construed
-          as modifying the License.
-
-      You may add Your own copyright statement to Your modifications and
-      may provide additional or different license terms and conditions
-      for use, reproduction, or distribution of Your modifications, or
-      for any such Derivative Works as a whole, provided Your use,
-      reproduction, and distribution of the Work otherwise complies with
-      the conditions stated in this License.
-
-   5. Submission of Contributions. Unless You explicitly state otherwise,
-      any Contribution intentionally submitted for inclusion in the Work
-      by You to the Licensor shall be under the terms and conditions of
-      this License, without any additional terms or conditions.
-      Notwithstanding the above, nothing herein shall supersede or modify
-      the terms of any separate license agreement you may have executed
-      with Licensor regarding such Contributions.
-
-   6. Trademarks. This License does not grant permission to use the trade
-      names, trademarks, service marks, or product names of the Licensor,
-      except as required for reasonable and customary use in describing the
-      origin of the Work and reproducing the content of the NOTICE file.
-
-   7. Disclaimer of Warranty. Unless required by applicable law or
-      agreed to in writing, Licensor provides the Work (and each
-      Contributor provides its Contributions) on an "AS IS" BASIS,
-      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
-      implied, including, without limitation, any warranties or conditions
-      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
-      PARTICULAR PURPOSE. You are solely responsible for determining the
-      appropriateness of using or redistributing the Work and assume any
-      risks associated with Your exercise of permissions under this License.
-
-   8. Limitation of Liability. In no event and under no legal theory,
-      whether in tort (including negligence), contract, or otherwise,
-      unless required by applicable law (such as deliberate and grossly
-      negligent acts) or agreed to in writing, shall any Contributor be
-      liable to You for damages, including any direct, indirect, special,
-      incidental, or consequential damages of any character arising as a
-      result of this License or out of the use or inability to use the
-      Work (including but not limited to damages for loss of goodwill,
-      work stoppage, computer failure or malfunction, or any and all
-      other commercial damages or losses), even if such Contributor
-      has been advised of the possibility of such damages.
-
-   9. Accepting Warranty or Additional Liability. While redistributing
-      the Work or Derivative Works thereof, You may choose to offer,
-      and charge a fee for, acceptance of support, warranty, indemnity,
-      or other liability obligations and/or rights consistent with this
-      License. However, in accepting such obligations, You may act only
-      on Your own behalf and on Your sole responsibility, not on behalf
-      of any other Contributor, and only if You agree to indemnify,
-      defend, and hold each Contributor harmless for any liability
-      incurred by, or claims asserted against, such Contributor by reason
-      of your accepting any such warranty or additional liability.
-
-   END OF TERMS AND CONDITIONS
-
-
-
-AndroidX tracing library:
-
-
-   Copyright (c) 2005-2011, 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.
-
-   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.
-
-
-                                 Apache License
-                           Version 2.0, January 2004
-                        http://www.apache.org/licenses/
-
-   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
-
-   1. Definitions.
-
-      "License" shall mean the terms and conditions for use, reproduction,
-      and distribution as defined by Sections 1 through 9 of this document.
-
-      "Licensor" shall mean the copyright owner or entity authorized by
-      the copyright owner that is granting the License.
-
-      "Legal Entity" shall mean the union of the acting entity and all
-      other entities that control, are controlled by, or are under common
-      control with that entity. For the purposes of this definition,
-      "control" means (i) the power, direct or indirect, to cause the
-      direction or management of such entity, whether by contract or
-      otherwise, or (ii) ownership of fifty percent (50%) or more of the
-      outstanding shares, or (iii) beneficial ownership of such entity.
-
-      "You" (or "Your") shall mean an individual or Legal Entity
-      exercising permissions granted by this License.
-
-      "Source" form shall mean the preferred form for making modifications,
-      including but not limited to software source code, documentation
-      source, and configuration files.
-
-      "Object" form shall mean any form resulting from mechanical
-      transformation or translation of a Source form, including but
-      not limited to compiled object code, generated documentation,
-      and conversions to other media types.
-
-      "Work" shall mean the work of authorship, whether in Source or
-      Object form, made available under the License, as indicated by a
-      copyright notice that is included in or attached to the work
-      (an example is provided in the Appendix below).
-
-      "Derivative Works" shall mean any work, whether in Source or Object
-      form, that is based on (or derived from) the Work and for which the
-      editorial revisions, annotations, elaborations, or other modifications
-      represent, as a whole, an original work of authorship. For the purposes
-      of this License, Derivative Works shall not include works that remain
-      separable from, or merely link (or bind by name) to the interfaces of,
-      the Work and Derivative Works thereof.
-
-      "Contribution" shall mean any work of authorship, including
-      the original version of the Work and any modifications or additions
-      to that Work or Derivative Works thereof, that is intentionally
-      submitted to Licensor for inclusion in the Work by the copyright owner
-      or by an individual or Legal Entity authorized to submit on behalf of
-      the copyright owner. For the purposes of this definition, "submitted"
-      means any form of electronic, verbal, or written communication sent
-      to the Licensor or its representatives, including but not limited to
-      communication on electronic mailing lists, source code control systems,
-      and issue tracking systems that are managed by, or on behalf of, the
-      Licensor for the purpose of discussing and improving the Work, but
-      excluding communication that is conspicuously marked or otherwise
-      designated in writing by the copyright owner as "Not a Contribution."
-
-      "Contributor" shall mean Licensor and any individual or Legal Entity
-      on behalf of whom a Contribution has been received by Licensor and
-      subsequently incorporated within the Work.
-
-   2. Grant of Copyright License. Subject to the terms and conditions of
-      this License, each Contributor hereby grants to You a perpetual,
-      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
-      copyright license to reproduce, prepare Derivative Works of,
-      publicly display, publicly perform, sublicense, and distribute the
-      Work and such Derivative Works in Source or Object form.
-
-   3. Grant of Patent License. Subject to the terms and conditions of
-      this License, each Contributor hereby grants to You a perpetual,
-      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
-      (except as stated in this section) patent license to make, have made,
-      use, offer to sell, sell, import, and otherwise transfer the Work,
-      where such license applies only to those patent claims licensable
-      by such Contributor that are necessarily infringed by their
-      Contribution(s) alone or by combination of their Contribution(s)
-      with the Work to which such Contribution(s) was submitted. If You
-      institute patent litigation against any entity (including a
-      cross-claim or counterclaim in a lawsuit) alleging that the Work
-      or a Contribution incorporated within the Work constitutes direct
-      or contributory patent infringement, then any patent licenses
-      granted to You under this License for that Work shall terminate
-      as of the date such litigation is filed.
-
-   4. Redistribution. You may reproduce and distribute copies of the
-      Work or Derivative Works thereof in any medium, with or without
-      modifications, and in Source or Object form, provided that You
-      meet the following conditions:
-
-      (a) You must give any other recipients of the Work or
-          Derivative Works a copy of this License; and
-
-      (b) You must cause any modified files to carry prominent notices
-          stating that You changed the files; and
-
-      (c) You must retain, in the Source form of any Derivative Works
-          that You distribute, all copyright, patent, trademark, and
-          attribution notices from the Source form of the Work,
-          excluding those notices that do not pertain to any part of
-          the Derivative Works; and
-
-      (d) If the Work includes a "NOTICE" text file as part of its
-          distribution, then any Derivative Works that You distribute must
-          include a readable copy of the attribution notices contained
-          within such NOTICE file, excluding those notices that do not
-          pertain to any part of the Derivative Works, in at least one
-          of the following places: within a NOTICE text file distributed
-          as part of the Derivative Works; within the Source form or
-          documentation, if provided along with the Derivative Works; or,
-          within a display generated by the Derivative Works, if and
-          wherever such third-party notices normally appear. The contents
-          of the NOTICE file are for informational purposes only and
-          do not modify the License. You may add Your own attribution
-          notices within Derivative Works that You distribute, alongside
-          or as an addendum to the NOTICE text from the Work, provided
-          that such additional attribution notices cannot be construed
-          as modifying the License.
-
-      You may add Your own copyright statement to Your modifications and
-      may provide additional or different license terms and conditions
-      for use, reproduction, or distribution of Your modifications, or
-      for any such Derivative Works as a whole, provided Your use,
-      reproduction, and distribution of the Work otherwise complies with
-      the conditions stated in this License.
-
-   5. Submission of Contributions. Unless You explicitly state otherwise,
-      any Contribution intentionally submitted for inclusion in the Work
-      by You to the Licensor shall be under the terms and conditions of
-      this License, without any additional terms or conditions.
-      Notwithstanding the above, nothing herein shall supersede or modify
-      the terms of any separate license agreement you may have executed
-      with Licensor regarding such Contributions.
-
-   6. Trademarks. This License does not grant permission to use the trade
-      names, trademarks, service marks, or product names of the Licensor,
-      except as required for reasonable and customary use in describing the
-      origin of the Work and reproducing the content of the NOTICE file.
-
-   7. Disclaimer of Warranty. Unless required by applicable law or
-      agreed to in writing, Licensor provides the Work (and each
-      Contributor provides its Contributions) on an "AS IS" BASIS,
-      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
-      implied, including, without limitation, any warranties or conditions
-      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
-      PARTICULAR PURPOSE. You are solely responsible for determining the
-      appropriateness of using or redistributing the Work and assume any
-      risks associated with Your exercise of permissions under this License.
-
-   8. Limitation of Liability. In no event and under no legal theory,
-      whether in tort (including negligence), contract, or otherwise,
-      unless required by applicable law (such as deliberate and grossly
-      negligent acts) or agreed to in writing, shall any Contributor be
-      liable to You for damages, including any direct, indirect, special,
-      incidental, or consequential damages of any character arising as a
-      result of this License or out of the use or inability to use the
-      Work (including but not limited to damages for loss of goodwill,
-      work stoppage, computer failure or malfunction, or any and all
-      other commercial damages or losses), even if such Contributor
-      has been advised of the possibility of such damages.
-
-   9. Accepting Warranty or Additional Liability. While redistributing
-      the Work or Derivative Works thereof, You may choose to offer,
-      and charge a fee for, acceptance of support, warranty, indemnity,
-      or other liability obligations and/or rights consistent with this
-      License. However, in accepting such obligations, You may act only
-      on Your own behalf and on Your sole responsibility, not on behalf
-      of any other Contributor, and only if You agree to indemnify,
-      defend, and hold each Contributor harmless for any liability
-      incurred by, or claims asserted against, such Contributor by reason
-      of your accepting any such warranty or additional liability.
-
-   END OF TERMS AND CONDITIONS
-
-
-AndroidX versionedparcelable library:
-
-
-   Copyright (c) 2005-2018, 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.
-
-   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.
-
-
-                                 Apache License
-                           Version 2.0, January 2004
-                        http://www.apache.org/licenses/
-
-   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
-
-   1. Definitions.
-
-      "License" shall mean the terms and conditions for use, reproduction,
-      and distribution as defined by Sections 1 through 9 of this document.
-
-      "Licensor" shall mean the copyright owner or entity authorized by
-      the copyright owner that is granting the License.
-
-      "Legal Entity" shall mean the union of the acting entity and all
-      other entities that control, are controlled by, or are under common
-      control with that entity. For the purposes of this definition,
-      "control" means (i) the power, direct or indirect, to cause the
-      direction or management of such entity, whether by contract or
-      otherwise, or (ii) ownership of fifty percent (50%) or more of the
-      outstanding shares, or (iii) beneficial ownership of such entity.
-
-      "You" (or "Your") shall mean an individual or Legal Entity
-      exercising permissions granted by this License.
-
-      "Source" form shall mean the preferred form for making modifications,
-      including but not limited to software source code, documentation
-      source, and configuration files.
-
-      "Object" form shall mean any form resulting from mechanical
-      transformation or translation of a Source form, including but
-      not limited to compiled object code, generated documentation,
-      and conversions to other media types.
-
-      "Work" shall mean the work of authorship, whether in Source or
-      Object form, made available under the License, as indicated by a
-      copyright notice that is included in or attached to the work
-      (an example is provided in the Appendix below).
-
-      "Derivative Works" shall mean any work, whether in Source or Object
-      form, that is based on (or derived from) the Work and for which the
-      editorial revisions, annotations, elaborations, or other modifications
-      represent, as a whole, an original work of authorship. For the purposes
-      of this License, Derivative Works shall not include works that remain
-      separable from, or merely link (or bind by name) to the interfaces of,
-      the Work and Derivative Works thereof.
-
-      "Contribution" shall mean any work of authorship, including
-      the original version of the Work and any modifications or additions
-      to that Work or Derivative Works thereof, that is intentionally
-      submitted to Licensor for inclusion in the Work by the copyright owner
-      or by an individual or Legal Entity authorized to submit on behalf of
-      the copyright owner. For the purposes of this definition, "submitted"
-      means any form of electronic, verbal, or written communication sent
-      to the Licensor or its representatives, including but not limited to
-      communication on electronic mailing lists, source code control systems,
-      and issue tracking systems that are managed by, or on behalf of, the
-      Licensor for the purpose of discussing and improving the Work, but
-      excluding communication that is conspicuously marked or otherwise
-      designated in writing by the copyright owner as "Not a Contribution."
-
-      "Contributor" shall mean Licensor and any individual or Legal Entity
-      on behalf of whom a Contribution has been received by Licensor and
-      subsequently incorporated within the Work.
-
-   2. Grant of Copyright License. Subject to the terms and conditions of
-      this License, each Contributor hereby grants to You a perpetual,
-      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
-      copyright license to reproduce, prepare Derivative Works of,
-      publicly display, publicly perform, sublicense, and distribute the
-      Work and such Derivative Works in Source or Object form.
-
-   3. Grant of Patent License. Subject to the terms and conditions of
-      this License, each Contributor hereby grants to You a perpetual,
-      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
-      (except as stated in this section) patent license to make, have made,
-      use, offer to sell, sell, import, and otherwise transfer the Work,
-      where such license applies only to those patent claims licensable
-      by such Contributor that are necessarily infringed by their
-      Contribution(s) alone or by combination of their Contribution(s)
-      with the Work to which such Contribution(s) was submitted. If You
-      institute patent litigation against any entity (including a
-      cross-claim or counterclaim in a lawsuit) alleging that the Work
-      or a Contribution incorporated within the Work constitutes direct
-      or contributory patent infringement, then any patent licenses
-      granted to You under this License for that Work shall terminate
-      as of the date such litigation is filed.
-
-   4. Redistribution. You may reproduce and distribute copies of the
-      Work or Derivative Works thereof in any medium, with or without
-      modifications, and in Source or Object form, provided that You
-      meet the following conditions:
-
-      (a) You must give any other recipients of the Work or
-          Derivative Works a copy of this License; and
-
-      (b) You must cause any modified files to carry prominent notices
-          stating that You changed the files; and
-
-      (c) You must retain, in the Source form of any Derivative Works
-          that You distribute, all copyright, patent, trademark, and
-          attribution notices from the Source form of the Work,
-          excluding those notices that do not pertain to any part of
-          the Derivative Works; and
-
-      (d) If the Work includes a "NOTICE" text file as part of its
-          distribution, then any Derivative Works that You distribute must
-          include a readable copy of the attribution notices contained
-          within such NOTICE file, excluding those notices that do not
-          pertain to any part of the Derivative Works, in at least one
-          of the following places: within a NOTICE text file distributed
-          as part of the Derivative Works; within the Source form or
-          documentation, if provided along with the Derivative Works; or,
-          within a display generated by the Derivative Works, if and
-          wherever such third-party notices normally appear. The contents
-          of the NOTICE file are for informational purposes only and
-          do not modify the License. You may add Your own attribution
-          notices within Derivative Works that You distribute, alongside
-          or as an addendum to the NOTICE text from the Work, provided
-          that such additional attribution notices cannot be construed
-          as modifying the License.
-
-      You may add Your own copyright statement to Your modifications and
-      may provide additional or different license terms and conditions
-      for use, reproduction, or distribution of Your modifications, or
-      for any such Derivative Works as a whole, provided Your use,
-      reproduction, and distribution of the Work otherwise complies with
-      the conditions stated in this License.
-
-   5. Submission of Contributions. Unless You explicitly state otherwise,
-      any Contribution intentionally submitted for inclusion in the Work
-      by You to the Licensor shall be under the terms and conditions of
-      this License, without any additional terms or conditions.
-      Notwithstanding the above, nothing herein shall supersede or modify
-      the terms of any separate license agreement you may have executed
-      with Licensor regarding such Contributions.
-
-   6. Trademarks. This License does not grant permission to use the trade
-      names, trademarks, service marks, or product names of the Licensor,
-      except as required for reasonable and customary use in describing the
-      origin of the Work and reproducing the content of the NOTICE file.
-
-   7. Disclaimer of Warranty. Unless required by applicable law or
-      agreed to in writing, Licensor provides the Work (and each
-      Contributor provides its Contributions) on an "AS IS" BASIS,
-      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
-      implied, including, without limitation, any warranties or conditions
-      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
-      PARTICULAR PURPOSE. You are solely responsible for determining the
-      appropriateness of using or redistributing the Work and assume any
-      risks associated with Your exercise of permissions under this License.
-
-   8. Limitation of Liability. In no event and under no legal theory,
-      whether in tort (including negligence), contract, or otherwise,
-      unless required by applicable law (such as deliberate and grossly
-      negligent acts) or agreed to in writing, shall any Contributor be
-      liable to You for damages, including any direct, indirect, special,
-      incidental, or consequential damages of any character arising as a
-      result of this License or out of the use or inability to use the
-      Work (including but not limited to damages for loss of goodwill,
-      work stoppage, computer failure or malfunction, or any and all
-      other commercial damages or losses), even if such Contributor
-      has been advised of the possibility of such damages.
-
-   9. Accepting Warranty or Additional Liability. While redistributing
-      the Work or Derivative Works thereof, You may choose to offer,
-      and charge a fee for, acceptance of support, warranty, indemnity,
-      or other liability obligations and/or rights consistent with this
-      License. However, in accepting such obligations, You may act only
-      on Your own behalf and on Your sole responsibility, not on behalf
-      of any other Contributor, and only if You agree to indemnify,
-      defend, and hold each Contributor harmless for any liability
-      incurred by, or claims asserted against, such Contributor by reason
-      of your accepting any such warranty or additional liability.
-
-   END OF TERMS AND CONDITIONS
-
-
-
-AndroidX viewpager library:
-
-
-   Copyright (c) 2005-2011, 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.
-
-   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.
-
-
-                                 Apache License
-                           Version 2.0, January 2004
-                        http://www.apache.org/licenses/
-
-   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
-
-   1. Definitions.
-
-      "License" shall mean the terms and conditions for use, reproduction,
-      and distribution as defined by Sections 1 through 9 of this document.
-
-      "Licensor" shall mean the copyright owner or entity authorized by
-      the copyright owner that is granting the License.
-
-      "Legal Entity" shall mean the union of the acting entity and all
-      other entities that control, are controlled by, or are under common
-      control with that entity. For the purposes of this definition,
-      "control" means (i) the power, direct or indirect, to cause the
-      direction or management of such entity, whether by contract or
-      otherwise, or (ii) ownership of fifty percent (50%) or more of the
-      outstanding shares, or (iii) beneficial ownership of such entity.
-
-      "You" (or "Your") shall mean an individual or Legal Entity
-      exercising permissions granted by this License.
-
-      "Source" form shall mean the preferred form for making modifications,
-      including but not limited to software source code, documentation
-      source, and configuration files.
-
-      "Object" form shall mean any form resulting from mechanical
-      transformation or translation of a Source form, including but
-      not limited to compiled object code, generated documentation,
-      and conversions to other media types.
-
-      "Work" shall mean the work of authorship, whether in Source or
-      Object form, made available under the License, as indicated by a
-      copyright notice that is included in or attached to the work
-      (an example is provided in the Appendix below).
-
-      "Derivative Works" shall mean any work, whether in Source or Object
-      form, that is based on (or derived from) the Work and for which the
-      editorial revisions, annotations, elaborations, or other modifications
-      represent, as a whole, an original work of authorship. For the purposes
-      of this License, Derivative Works shall not include works that remain
-      separable from, or merely link (or bind by name) to the interfaces of,
-      the Work and Derivative Works thereof.
-
-      "Contribution" shall mean any work of authorship, including
-      the original version of the Work and any modifications or additions
-      to that Work or Derivative Works thereof, that is intentionally
-      submitted to Licensor for inclusion in the Work by the copyright owner
-      or by an individual or Legal Entity authorized to submit on behalf of
-      the copyright owner. For the purposes of this definition, "submitted"
-      means any form of electronic, verbal, or written communication sent
-      to the Licensor or its representatives, including but not limited to
-      communication on electronic mailing lists, source code control systems,
-      and issue tracking systems that are managed by, or on behalf of, the
-      Licensor for the purpose of discussing and improving the Work, but
-      excluding communication that is conspicuously marked or otherwise
-      designated in writing by the copyright owner as "Not a Contribution."
-
-      "Contributor" shall mean Licensor and any individual or Legal Entity
-      on behalf of whom a Contribution has been received by Licensor and
-      subsequently incorporated within the Work.
-
-   2. Grant of Copyright License. Subject to the terms and conditions of
-      this License, each Contributor hereby grants to You a perpetual,
-      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
-      copyright license to reproduce, prepare Derivative Works of,
-      publicly display, publicly perform, sublicense, and distribute the
-      Work and such Derivative Works in Source or Object form.
-
-   3. Grant of Patent License. Subject to the terms and conditions of
-      this License, each Contributor hereby grants to You a perpetual,
-      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
-      (except as stated in this section) patent license to make, have made,
-      use, offer to sell, sell, import, and otherwise transfer the Work,
-      where such license applies only to those patent claims licensable
-      by such Contributor that are necessarily infringed by their
-      Contribution(s) alone or by combination of their Contribution(s)
-      with the Work to which such Contribution(s) was submitted. If You
-      institute patent litigation against any entity (including a
-      cross-claim or counterclaim in a lawsuit) alleging that the Work
-      or a Contribution incorporated within the Work constitutes direct
-      or contributory patent infringement, then any patent licenses
-      granted to You under this License for that Work shall terminate
-      as of the date such litigation is filed.
-
-   4. Redistribution. You may reproduce and distribute copies of the
-      Work or Derivative Works thereof in any medium, with or without
-      modifications, and in Source or Object form, provided that You
-      meet the following conditions:
-
-      (a) You must give any other recipients of the Work or
-          Derivative Works a copy of this License; and
-
-      (b) You must cause any modified files to carry prominent notices
-          stating that You changed the files; and
-
-      (c) You must retain, in the Source form of any Derivative Works
-          that You distribute, all copyright, patent, trademark, and
-          attribution notices from the Source form of the Work,
-          excluding those notices that do not pertain to any part of
-          the Derivative Works; and
-
-      (d) If the Work includes a "NOTICE" text file as part of its
-          distribution, then any Derivative Works that You distribute must
-          include a readable copy of the attribution notices contained
-          within such NOTICE file, excluding those notices that do not
-          pertain to any part of the Derivative Works, in at least one
-          of the following places: within a NOTICE text file distributed
-          as part of the Derivative Works; within the Source form or
-          documentation, if provided along with the Derivative Works; or,
-          within a display generated by the Derivative Works, if and
-          wherever such third-party notices normally appear. The contents
-          of the NOTICE file are for informational purposes only and
-          do not modify the License. You may add Your own attribution
-          notices within Derivative Works that You distribute, alongside
-          or as an addendum to the NOTICE text from the Work, provided
-          that such additional attribution notices cannot be construed
-          as modifying the License.
-
-      You may add Your own copyright statement to Your modifications and
-      may provide additional or different license terms and conditions
-      for use, reproduction, or distribution of Your modifications, or
-      for any such Derivative Works as a whole, provided Your use,
-      reproduction, and distribution of the Work otherwise complies with
-      the conditions stated in this License.
-
-   5. Submission of Contributions. Unless You explicitly state otherwise,
-      any Contribution intentionally submitted for inclusion in the Work
-      by You to the Licensor shall be under the terms and conditions of
-      this License, without any additional terms or conditions.
-      Notwithstanding the above, nothing herein shall supersede or modify
-      the terms of any separate license agreement you may have executed
-      with Licensor regarding such Contributions.
-
-   6. Trademarks. This License does not grant permission to use the trade
-      names, trademarks, service marks, or product names of the Licensor,
-      except as required for reasonable and customary use in describing the
-      origin of the Work and reproducing the content of the NOTICE file.
-
-   7. Disclaimer of Warranty. Unless required by applicable law or
-      agreed to in writing, Licensor provides the Work (and each
-      Contributor provides its Contributions) on an "AS IS" BASIS,
-      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
-      implied, including, without limitation, any warranties or conditions
-      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
-      PARTICULAR PURPOSE. You are solely responsible for determining the
-      appropriateness of using or redistributing the Work and assume any
-      risks associated with Your exercise of permissions under this License.
-
-   8. Limitation of Liability. In no event and under no legal theory,
-      whether in tort (including negligence), contract, or otherwise,
-      unless required by applicable law (such as deliberate and grossly
-      negligent acts) or agreed to in writing, shall any Contributor be
-      liable to You for damages, including any direct, indirect, special,
-      incidental, or consequential damages of any character arising as a
-      result of this License or out of the use or inability to use the
-      Work (including but not limited to damages for loss of goodwill,
-      work stoppage, computer failure or malfunction, or any and all
-      other commercial damages or losses), even if such Contributor
-      has been advised of the possibility of such damages.
-
-   9. Accepting Warranty or Additional Liability. While redistributing
-      the Work or Derivative Works thereof, You may choose to offer,
-      and charge a fee for, acceptance of support, warranty, indemnity,
-      or other liability obligations and/or rights consistent with this
-      License. However, in accepting such obligations, You may act only
-      on Your own behalf and on Your sole responsibility, not on behalf
-      of any other Contributor, and only if You agree to indemnify,
-      defend, and hold each Contributor harmless for any liability
-      incurred by, or claims asserted against, such Contributor by reason
-      of your accepting any such warranty or additional liability.
-
-   END OF TERMS AND CONDITIONS
-
-
-
-Animal Sniffer:
-
-The MIT License
-
-Copyright (c) 2008 Kohsuke Kawaguchi and codehaus.org.
-
-Permission is hereby granted, free of charge, to any person obtaining a copy
-of this software and associated documentation files (the "Software"), to deal
-in the Software without restriction, including without limitation the rights
-to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-copies of the Software, and to permit persons to whom the Software is
-furnished to do so, subject to the following conditions:
-
-The above copyright notice and this permission notice shall be included in
-all copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
-THE SOFTWARE.
-
-
-Checker Framework Annotations:
-
-A few parts of the Checker Framework have more permissive licenses.
-
- * The annotations are licensed under the MIT License.  (The text of this
-   license appears below.)  More specifically, all the parts of the Checker
-   Framework that you might want to include with your own program use the
-   MIT License.  This is the checker-qual.jar file and all the files that
-   appear in it:  every file in a qual/ directory, plus utility files such
-   as NullnessUtil.java, RegexUtil.java, SignednessUtil.java, etc.
-   In addition, the cleanroom implementations of third-party annotations,
-   which the Checker Framework recognizes as aliases for its own
-   annotations, are licensed under the MIT License.
-
-===========================================================================
-
-MIT License:
-
-Permission is hereby granted, free of charge, to any person obtaining a copy
-of this software and associated documentation files (the "Software"), to deal
-in the Software without restriction, including without limitation the rights
-to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-copies of the Software, and to permit persons to whom the Software is
-furnished to do so, subject to the following conditions:
-
-The above copyright notice and this permission notice shall be included in
-all copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
-THE SOFTWARE.
-
-===========================================================================
-
-
-Error Prone:
-
-                                 Apache License
-                           Version 2.0, January 2004
-                        http://www.apache.org/licenses/
-
-   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
-
-   1. Definitions.
-
-      "License" shall mean the terms and conditions for use, reproduction,
-      and distribution as defined by Sections 1 through 9 of this document.
-
-      "Licensor" shall mean the copyright owner or entity authorized by
-      the copyright owner that is granting the License.
-
-      "Legal Entity" shall mean the union of the acting entity and all
-      other entities that control, are controlled by, or are under common
-      control with that entity. For the purposes of this definition,
-      "control" means (i) the power, direct or indirect, to cause the
-      direction or management of such entity, whether by contract or
-      otherwise, or (ii) ownership of fifty percent (50%) or more of the
-      outstanding shares, or (iii) beneficial ownership of such entity.
-
-      "You" (or "Your") shall mean an individual or Legal Entity
-      exercising permissions granted by this License.
-
-      "Source" form shall mean the preferred form for making modifications,
-      including but not limited to software source code, documentation
-      source, and configuration files.
-
-      "Object" form shall mean any form resulting from mechanical
-      transformation or translation of a Source form, including but
-      not limited to compiled object code, generated documentation,
-      and conversions to other media types.
-
-      "Work" shall mean the work of authorship, whether in Source or
-      Object form, made available under the License, as indicated by a
-      copyright notice that is included in or attached to the work
-      (an example is provided in the Appendix below).
-
-      "Derivative Works" shall mean any work, whether in Source or Object
-      form, that is based on (or derived from) the Work and for which the
-      editorial revisions, annotations, elaborations, or other modifications
-      represent, as a whole, an original work of authorship. For the purposes
-      of this License, Derivative Works shall not include works that remain
-      separable from, or merely link (or bind by name) to the interfaces of,
-      the Work and Derivative Works thereof.
-
-      "Contribution" shall mean any work of authorship, including
-      the original version of the Work and any modifications or additions
-      to that Work or Derivative Works thereof, that is intentionally
-      submitted to Licensor for inclusion in the Work by the copyright owner
-      or by an individual or Legal Entity authorized to submit on behalf of
-      the copyright owner. For the purposes of this definition, "submitted"
-      means any form of electronic, verbal, or written communication sent
-      to the Licensor or its representatives, including but not limited to
-      communication on electronic mailing lists, source code control systems,
-      and issue tracking systems that are managed by, or on behalf of, the
-      Licensor for the purpose of discussing and improving the Work, but
-      excluding communication that is conspicuously marked or otherwise
-      designated in writing by the copyright owner as "Not a Contribution."
-
-      "Contributor" shall mean Licensor and any individual or Legal Entity
-      on behalf of whom a Contribution has been received by Licensor and
-      subsequently incorporated within the Work.
-
-   2. Grant of Copyright License. Subject to the terms and conditions of
-      this License, each Contributor hereby grants to You a perpetual,
-      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
-      copyright license to reproduce, prepare Derivative Works of,
-      publicly display, publicly perform, sublicense, and distribute the
-      Work and such Derivative Works in Source or Object form.
-
-   3. Grant of Patent License. Subject to the terms and conditions of
-      this License, each Contributor hereby grants to You a perpetual,
-      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
-      (except as stated in this section) patent license to make, have made,
-      use, offer to sell, sell, import, and otherwise transfer the Work,
-      where such license applies only to those patent claims licensable
-      by such Contributor that are necessarily infringed by their
-      Contribution(s) alone or by combination of their Contribution(s)
-      with the Work to which such Contribution(s) was submitted. If You
-      institute patent litigation against any entity (including a
-      cross-claim or counterclaim in a lawsuit) alleging that the Work
-      or a Contribution incorporated within the Work constitutes direct
-      or contributory patent infringement, then any patent licenses
-      granted to You under this License for that Work shall terminate
-      as of the date such litigation is filed.
-
-   4. Redistribution. You may reproduce and distribute copies of the
-      Work or Derivative Works thereof in any medium, with or without
-      modifications, and in Source or Object form, provided that You
-      meet the following conditions:
-
-      (a) You must give any other recipients of the Work or
-          Derivative Works a copy of this License; and
-
-      (b) You must cause any modified files to carry prominent notices
-          stating that You changed the files; and
-
-      (c) You must retain, in the Source form of any Derivative Works
-          that You distribute, all copyright, patent, trademark, and
-          attribution notices from the Source form of the Work,
-          excluding those notices that do not pertain to any part of
-          the Derivative Works; and
-
-      (d) If the Work includes a "NOTICE" text file as part of its
-          distribution, then any Derivative Works that You distribute must
-          include a readable copy of the attribution notices contained
-          within such NOTICE file, excluding those notices that do not
-          pertain to any part of the Derivative Works, in at least one
-          of the following places: within a NOTICE text file distributed
-          as part of the Derivative Works; within the Source form or
-          documentation, if provided along with the Derivative Works; or,
-          within a display generated by the Derivative Works, if and
-          wherever such third-party notices normally appear. The contents
-          of the NOTICE file are for informational purposes only and
-          do not modify the License. You may add Your own attribution
-          notices within Derivative Works that You distribute, alongside
-          or as an addendum to the NOTICE text from the Work, provided
-          that such additional attribution notices cannot be construed
-          as modifying the License.
-
-      You may add Your own copyright statement to Your modifications and
-      may provide additional or different license terms and conditions
-      for use, reproduction, or distribution of Your modifications, or
-      for any such Derivative Works as a whole, provided Your use,
-      reproduction, and distribution of the Work otherwise complies with
-      the conditions stated in this License.
-
-   5. Submission of Contributions. Unless You explicitly state otherwise,
-      any Contribution intentionally submitted for inclusion in the Work
-      by You to the Licensor shall be under the terms and conditions of
-      this License, without any additional terms or conditions.
-      Notwithstanding the above, nothing herein shall supersede or modify
-      the terms of any separate license agreement you may have executed
-      with Licensor regarding such Contributions.
-
-   6. Trademarks. This License does not grant permission to use the trade
-      names, trademarks, service marks, or product names of the Licensor,
-      except as required for reasonable and customary use in describing the
-      origin of the Work and reproducing the content of the NOTICE file.
-
-   7. Disclaimer of Warranty. Unless required by applicable law or
-      agreed to in writing, Licensor provides the Work (and each
-      Contributor provides its Contributions) on an "AS IS" BASIS,
-      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
-      implied, including, without limitation, any warranties or conditions
-      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
-      PARTICULAR PURPOSE. You are solely responsible for determining the
-      appropriateness of using or redistributing the Work and assume any
-      risks associated with Your exercise of permissions under this License.
-
-   8. Limitation of Liability. In no event and under no legal theory,
-      whether in tort (including negligence), contract, or otherwise,
-      unless required by applicable law (such as deliberate and grossly
-      negligent acts) or agreed to in writing, shall any Contributor be
-      liable to You for damages, including any direct, indirect, special,
-      incidental, or consequential damages of any character arising as a
-      result of this License or out of the use or inability to use the
-      Work (including but not limited to damages for loss of goodwill,
-      work stoppage, computer failure or malfunction, or any and all
-      other commercial damages or losses), even if such Contributor
-      has been advised of the possibility of such damages.
-
-   9. Accepting Warranty or Additional Liability. While redistributing
-      the Work or Derivative Works thereof, You may choose to offer,
-      and charge a fee for, acceptance of support, warranty, indemnity,
-      or other liability obligations and/or rights consistent with this
-      License. However, in accepting such obligations, You may act only
-      on Your own behalf and on Your sole responsibility, not on behalf
-      of any other Contributor, and only if You agree to indemnify,
-      defend, and hold each Contributor harmless for any liability
-      incurred by, or claims asserted against, such Contributor by reason
-      of your accepting any such warranty or additional liability.
-
-   END OF TERMS AND CONDITIONS
-
-   APPENDIX: How to apply the Apache License to your work.
-
-      To apply the Apache License to your work, attach the following
-      boilerplate notice, with the fields enclosed by brackets "[]"
-      replaced with your own identifying information. (Don't include
-      the brackets!)  The text should be enclosed in the appropriate
-      comment syntax for the file format. We also recommend that a
-      file or class name and description of purpose be included on the
-      same "printed page" as the copyright notice for easier
-      identification within third-party archives.
-
-   Copyright [yyyy] [name of copyright owner]
-
-   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.
-
-
-Google Auto:
-
-
-                                 Apache License
-                           Version 2.0, January 2004
-                        http://www.apache.org/licenses/
-
-   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
-
-   1. Definitions.
-
-      "License" shall mean the terms and conditions for use, reproduction,
-      and distribution as defined by Sections 1 through 9 of this document.
-
-      "Licensor" shall mean the copyright owner or entity authorized by
-      the copyright owner that is granting the License.
-
-      "Legal Entity" shall mean the union of the acting entity and all
-      other entities that control, are controlled by, or are under common
-      control with that entity. For the purposes of this definition,
-      "control" means (i) the power, direct or indirect, to cause the
-      direction or management of such entity, whether by contract or
-      otherwise, or (ii) ownership of fifty percent (50%) or more of the
-      outstanding shares, or (iii) beneficial ownership of such entity.
-
-      "You" (or "Your") shall mean an individual or Legal Entity
-      exercising permissions granted by this License.
-
-      "Source" form shall mean the preferred form for making modifications,
-      including but not limited to software source code, documentation
-      source, and configuration files.
-
-      "Object" form shall mean any form resulting from mechanical
-      transformation or translation of a Source form, including but
-      not limited to compiled object code, generated documentation,
-      and conversions to other media types.
-
-      "Work" shall mean the work of authorship, whether in Source or
-      Object form, made available under the License, as indicated by a
-      copyright notice that is included in or attached to the work
-      (an example is provided in the Appendix below).
-
-      "Derivative Works" shall mean any work, whether in Source or Object
-      form, that is based on (or derived from) the Work and for which the
-      editorial revisions, annotations, elaborations, or other modifications
-      represent, as a whole, an original work of authorship. For the purposes
-      of this License, Derivative Works shall not include works that remain
-      separable from, or merely link (or bind by name) to the interfaces of,
-      the Work and Derivative Works thereof.
-
-      "Contribution" shall mean any work of authorship, including
-      the original version of the Work and any modifications or additions
-      to that Work or Derivative Works thereof, that is intentionally
-      submitted to Licensor for inclusion in the Work by the copyright owner
-      or by an individual or Legal Entity authorized to submit on behalf of
-      the copyright owner. For the purposes of this definition, "submitted"
-      means any form of electronic, verbal, or written communication sent
-      to the Licensor or its representatives, including but not limited to
-      communication on electronic mailing lists, source code control systems,
-      and issue tracking systems that are managed by, or on behalf of, the
-      Licensor for the purpose of discussing and improving the Work, but
-      excluding communication that is conspicuously marked or otherwise
-      designated in writing by the copyright owner as "Not a Contribution."
-
-      "Contributor" shall mean Licensor and any individual or Legal Entity
-      on behalf of whom a Contribution has been received by Licensor and
-      subsequently incorporated within the Work.
-
-   2. Grant of Copyright License. Subject to the terms and conditions of
-      this License, each Contributor hereby grants to You a perpetual,
-      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
-      copyright license to reproduce, prepare Derivative Works of,
-      publicly display, publicly perform, sublicense, and distribute the
-      Work and such Derivative Works in Source or Object form.
-
-   3. Grant of Patent License. Subject to the terms and conditions of
-      this License, each Contributor hereby grants to You a perpetual,
-      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
-      (except as stated in this section) patent license to make, have made,
-      use, offer to sell, sell, import, and otherwise transfer the Work,
-      where such license applies only to those patent claims licensable
-      by such Contributor that are necessarily infringed by their
-      Contribution(s) alone or by combination of their Contribution(s)
-      with the Work to which such Contribution(s) was submitted. If You
-      institute patent litigation against any entity (including a
-      cross-claim or counterclaim in a lawsuit) alleging that the Work
-      or a Contribution incorporated within the Work constitutes direct
-      or contributory patent infringement, then any patent licenses
-      granted to You under this License for that Work shall terminate
-      as of the date such litigation is filed.
-
-   4. Redistribution. You may reproduce and distribute copies of the
-      Work or Derivative Works thereof in any medium, with or without
-      modifications, and in Source or Object form, provided that You
-      meet the following conditions:
-
-      (a) You must give any other recipients of the Work or
-          Derivative Works a copy of this License; and
-
-      (b) You must cause any modified files to carry prominent notices
-          stating that You changed the files; and
-
-      (c) You must retain, in the Source form of any Derivative Works
-          that You distribute, all copyright, patent, trademark, and
-          attribution notices from the Source form of the Work,
-          excluding those notices that do not pertain to any part of
-          the Derivative Works; and
-
-      (d) If the Work includes a "NOTICE" text file as part of its
-          distribution, then any Derivative Works that You distribute must
-          include a readable copy of the attribution notices contained
-          within such NOTICE file, excluding those notices that do not
-          pertain to any part of the Derivative Works, in at least one
-          of the following places: within a NOTICE text file distributed
-          as part of the Derivative Works; within the Source form or
-          documentation, if provided along with the Derivative Works; or,
-          within a display generated by the Derivative Works, if and
-          wherever such third-party notices normally appear. The contents
-          of the NOTICE file are for informational purposes only and
-          do not modify the License. You may add Your own attribution
-          notices within Derivative Works that You distribute, alongside
-          or as an addendum to the NOTICE text from the Work, provided
-          that such additional attribution notices cannot be construed
-          as modifying the License.
-
-      You may add Your own copyright statement to Your modifications and
-      may provide additional or different license terms and conditions
-      for use, reproduction, or distribution of Your modifications, or
-      for any such Derivative Works as a whole, provided Your use,
-      reproduction, and distribution of the Work otherwise complies with
-      the conditions stated in this License.
-
-   5. Submission of Contributions. Unless You explicitly state otherwise,
-      any Contribution intentionally submitted for inclusion in the Work
-      by You to the Licensor shall be under the terms and conditions of
-      this License, without any additional terms or conditions.
-      Notwithstanding the above, nothing herein shall supersede or modify
-      the terms of any separate license agreement you may have executed
-      with Licensor regarding such Contributions.
-
-   6. Trademarks. This License does not grant permission to use the trade
-      names, trademarks, service marks, or product names of the Licensor,
-      except as required for reasonable and customary use in describing the
-      origin of the Work and reproducing the content of the NOTICE file.
-
-   7. Disclaimer of Warranty. Unless required by applicable law or
-      agreed to in writing, Licensor provides the Work (and each
-      Contributor provides its Contributions) on an "AS IS" BASIS,
-      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
-      implied, including, without limitation, any warranties or conditions
-      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
-      PARTICULAR PURPOSE. You are solely responsible for determining the
-      appropriateness of using or redistributing the Work and assume any
-      risks associated with Your exercise of permissions under this License.
-
-   8. Limitation of Liability. In no event and under no legal theory,
-      whether in tort (including negligence), contract, or otherwise,
-      unless required by applicable law (such as deliberate and grossly
-      negligent acts) or agreed to in writing, shall any Contributor be
-      liable to You for damages, including any direct, indirect, special,
-      incidental, or consequential damages of any character arising as a
-      result of this License or out of the use or inability to use the
-      Work (including but not limited to damages for loss of goodwill,
-      work stoppage, computer failure or malfunction, or any and all
-      other commercial damages or losses), even if such Contributor
-      has been advised of the possibility of such damages.
-
-   9. Accepting Warranty or Additional Liability. While redistributing
-      the Work or Derivative Works thereof, You may choose to offer,
-      and charge a fee for, acceptance of support, warranty, indemnity,
-      or other liability obligations and/or rights consistent with this
-      License. However, in accepting such obligations, You may act only
-      on Your own behalf and on Your sole responsibility, not on behalf
-      of any other Contributor, and only if You agree to indemnify,
-      defend, and hold each Contributor harmless for any liability
-      incurred by, or claims asserted against, such Contributor by reason
-      of your accepting any such warranty or additional liability.
-
-   END OF TERMS AND CONDITIONS
-
-   APPENDIX: How to apply the Apache License to your work.
-
-      To apply the Apache License to your work, attach the following
-      boilerplate notice, with the fields enclosed by brackets "[]"
-      replaced with your own identifying information. (Don't include
-      the brackets!)  The text should be enclosed in the appropriate
-      comment syntax for the file format. We also recommend that a
-      file or class name and description of purpose be included on the
-      same "printed page" as the copyright notice for easier
-      identification within third-party archives.
-
-   Copyright [yyyy] [name of copyright owner]
-
-   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.
-
-
-Guava JDK5:
-
-
-                                 Apache License
-                           Version 2.0, January 2004
-                        http://www.apache.org/licenses/
-
-   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
-
-   1. Definitions.
-
-      "License" shall mean the terms and conditions for use, reproduction,
-      and distribution as defined by Sections 1 through 9 of this document.
-
-      "Licensor" shall mean the copyright owner or entity authorized by
-      the copyright owner that is granting the License.
-
-      "Legal Entity" shall mean the union of the acting entity and all
-      other entities that control, are controlled by, or are under common
-      control with that entity. For the purposes of this definition,
-      "control" means (i) the power, direct or indirect, to cause the
-      direction or management of such entity, whether by contract or
-      otherwise, or (ii) ownership of fifty percent (50%) or more of the
-      outstanding shares, or (iii) beneficial ownership of such entity.
-
-      "You" (or "Your") shall mean an individual or Legal Entity
-      exercising permissions granted by this License.
-
-      "Source" form shall mean the preferred form for making modifications,
-      including but not limited to software source code, documentation
-      source, and configuration files.
-
-      "Object" form shall mean any form resulting from mechanical
-      transformation or translation of a Source form, including but
-      not limited to compiled object code, generated documentation,
-      and conversions to other media types.
-
-      "Work" shall mean the work of authorship, whether in Source or
-      Object form, made available under the License, as indicated by a
-      copyright notice that is included in or attached to the work
-      (an example is provided in the Appendix below).
-
-      "Derivative Works" shall mean any work, whether in Source or Object
-      form, that is based on (or derived from) the Work and for which the
-      editorial revisions, annotations, elaborations, or other modifications
-      represent, as a whole, an original work of authorship. For the purposes
-      of this License, Derivative Works shall not include works that remain
-      separable from, or merely link (or bind by name) to the interfaces of,
-      the Work and Derivative Works thereof.
-
-      "Contribution" shall mean any work of authorship, including
-      the original version of the Work and any modifications or additions
-      to that Work or Derivative Works thereof, that is intentionally
-      submitted to Licensor for inclusion in the Work by the copyright owner
-      or by an individual or Legal Entity authorized to submit on behalf of
-      the copyright owner. For the purposes of this definition, "submitted"
-      means any form of electronic, verbal, or written communication sent
-      to the Licensor or its representatives, including but not limited to
-      communication on electronic mailing lists, source code control systems,
-      and issue tracking systems that are managed by, or on behalf of, the
-      Licensor for the purpose of discussing and improving the Work, but
-      excluding communication that is conspicuously marked or otherwise
-      designated in writing by the copyright owner as "Not a Contribution."
-
-      "Contributor" shall mean Licensor and any individual or Legal Entity
-      on behalf of whom a Contribution has been received by Licensor and
-      subsequently incorporated within the Work.
-
-   2. Grant of Copyright License. Subject to the terms and conditions of
-      this License, each Contributor hereby grants to You a perpetual,
-      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
-      copyright license to reproduce, prepare Derivative Works of,
-      publicly display, publicly perform, sublicense, and distribute the
-      Work and such Derivative Works in Source or Object form.
-
-   3. Grant of Patent License. Subject to the terms and conditions of
-      this License, each Contributor hereby grants to You a perpetual,
-      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
-      (except as stated in this section) patent license to make, have made,
-      use, offer to sell, sell, import, and otherwise transfer the Work,
-      where such license applies only to those patent claims licensable
-      by such Contributor that are necessarily infringed by their
-      Contribution(s) alone or by combination of their Contribution(s)
-      with the Work to which such Contribution(s) was submitted. If You
-      institute patent litigation against any entity (including a
-      cross-claim or counterclaim in a lawsuit) alleging that the Work
-      or a Contribution incorporated within the Work constitutes direct
-      or contributory patent infringement, then any patent licenses
-      granted to You under this License for that Work shall terminate
-      as of the date such litigation is filed.
-
-   4. Redistribution. You may reproduce and distribute copies of the
-      Work or Derivative Works thereof in any medium, with or without
-      modifications, and in Source or Object form, provided that You
-      meet the following conditions:
-
-      (a) You must give any other recipients of the Work or
-          Derivative Works a copy of this License; and
-
-      (b) You must cause any modified files to carry prominent notices
-          stating that You changed the files; and
-
-      (c) You must retain, in the Source form of any Derivative Works
-          that You distribute, all copyright, patent, trademark, and
-          attribution notices from the Source form of the Work,
-          excluding those notices that do not pertain to any part of
-          the Derivative Works; and
-
-      (d) If the Work includes a "NOTICE" text file as part of its
-          distribution, then any Derivative Works that You distribute must
-          include a readable copy of the attribution notices contained
-          within such NOTICE file, excluding those notices that do not
-          pertain to any part of the Derivative Works, in at least one
-          of the following places: within a NOTICE text file distributed
-          as part of the Derivative Works; within the Source form or
-          documentation, if provided along with the Derivative Works; or,
-          within a display generated by the Derivative Works, if and
-          wherever such third-party notices normally appear. The contents
-          of the NOTICE file are for informational purposes only and
-          do not modify the License. You may add Your own attribution
-          notices within Derivative Works that You distribute, alongside
-          or as an addendum to the NOTICE text from the Work, provided
-          that such additional attribution notices cannot be construed
-          as modifying the License.
-
-      You may add Your own copyright statement to Your modifications and
-      may provide additional or different license terms and conditions
-      for use, reproduction, or distribution of Your modifications, or
-      for any such Derivative Works as a whole, provided Your use,
-      reproduction, and distribution of the Work otherwise complies with
-      the conditions stated in this License.
-
-   5. Submission of Contributions. Unless You explicitly state otherwise,
-      any Contribution intentionally submitted for inclusion in the Work
-      by You to the Licensor shall be under the terms and conditions of
-      this License, without any additional terms or conditions.
-      Notwithstanding the above, nothing herein shall supersede or modify
-      the terms of any separate license agreement you may have executed
-      with Licensor regarding such Contributions.
-
-   6. Trademarks. This License does not grant permission to use the trade
-      names, trademarks, service marks, or product names of the Licensor,
-      except as required for reasonable and customary use in describing the
-      origin of the Work and reproducing the content of the NOTICE file.
-
-   7. Disclaimer of Warranty. Unless required by applicable law or
-      agreed to in writing, Licensor provides the Work (and each
-      Contributor provides its Contributions) on an "AS IS" BASIS,
-      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
-      implied, including, without limitation, any warranties or conditions
-      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
-      PARTICULAR PURPOSE. You are solely responsible for determining the
-      appropriateness of using or redistributing the Work and assume any
-      risks associated with Your exercise of permissions under this License.
-
-   8. Limitation of Liability. In no event and under no legal theory,
-      whether in tort (including negligence), contract, or otherwise,
-      unless required by applicable law (such as deliberate and grossly
-      negligent acts) or agreed to in writing, shall any Contributor be
-      liable to You for damages, including any direct, indirect, special,
-      incidental, or consequential damages of any character arising as a
-      result of this License or out of the use or inability to use the
-      Work (including but not limited to damages for loss of goodwill,
-      work stoppage, computer failure or malfunction, or any and all
-      other commercial damages or losses), even if such Contributor
-      has been advised of the possibility of such damages.
-
-   9. Accepting Warranty or Additional Liability. While redistributing
-      the Work or Derivative Works thereof, You may choose to offer,
-      and charge a fee for, acceptance of support, warranty, indemnity,
-      or other liability obligations and/or rights consistent with this
-      License. However, in accepting such obligations, You may act only
-      on Your own behalf and on Your sole responsibility, not on behalf
-      of any other Contributor, and only if You agree to indemnify,
-      defend, and hold each Contributor harmless for any liability
-      incurred by, or claims asserted against, such Contributor by reason
-      of your accepting any such warranty or additional liability.
-
-   END OF TERMS AND CONDITIONS
-
-   APPENDIX: How to apply the Apache License to your work.
-
-      To apply the Apache License to your work, attach the following
-      boilerplate notice, with the fields enclosed by brackets "[]"
-      replaced with your own identifying information. (Don't include
-      the brackets!)  The text should be enclosed in the appropriate
-      comment syntax for the file format. We also recommend that a
-      file or class name and description of purpose be included on the
-      same "printed page" as the copyright notice for easier
-      identification within third-party archives.
-
-   Copyright [yyyy] [name of copyright owner]
-
-   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.
-
-
-Guava JDK7:
-
-
-                                 Apache License
-                           Version 2.0, January 2004
-                        http://www.apache.org/licenses/
-
-   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
-
-   1. Definitions.
-
-      "License" shall mean the terms and conditions for use, reproduction,
-      and distribution as defined by Sections 1 through 9 of this document.
-
-      "Licensor" shall mean the copyright owner or entity authorized by
-      the copyright owner that is granting the License.
-
-      "Legal Entity" shall mean the union of the acting entity and all
-      other entities that control, are controlled by, or are under common
-      control with that entity. For the purposes of this definition,
-      "control" means (i) the power, direct or indirect, to cause the
-      direction or management of such entity, whether by contract or
-      otherwise, or (ii) ownership of fifty percent (50%) or more of the
-      outstanding shares, or (iii) beneficial ownership of such entity.
-
-      "You" (or "Your") shall mean an individual or Legal Entity
-      exercising permissions granted by this License.
-
-      "Source" form shall mean the preferred form for making modifications,
-      including but not limited to software source code, documentation
-      source, and configuration files.
-
-      "Object" form shall mean any form resulting from mechanical
-      transformation or translation of a Source form, including but
-      not limited to compiled object code, generated documentation,
-      and conversions to other media types.
-
-      "Work" shall mean the work of authorship, whether in Source or
-      Object form, made available under the License, as indicated by a
-      copyright notice that is included in or attached to the work
-      (an example is provided in the Appendix below).
-
-      "Derivative Works" shall mean any work, whether in Source or Object
-      form, that is based on (or derived from) the Work and for which the
-      editorial revisions, annotations, elaborations, or other modifications
-      represent, as a whole, an original work of authorship. For the purposes
-      of this License, Derivative Works shall not include works that remain
-      separable from, or merely link (or bind by name) to the interfaces of,
-      the Work and Derivative Works thereof.
-
-      "Contribution" shall mean any work of authorship, including
-      the original version of the Work and any modifications or additions
-      to that Work or Derivative Works thereof, that is intentionally
-      submitted to Licensor for inclusion in the Work by the copyright owner
-      or by an individual or Legal Entity authorized to submit on behalf of
-      the copyright owner. For the purposes of this definition, "submitted"
-      means any form of electronic, verbal, or written communication sent
-      to the Licensor or its representatives, including but not limited to
-      communication on electronic mailing lists, source code control systems,
-      and issue tracking systems that are managed by, or on behalf of, the
-      Licensor for the purpose of discussing and improving the Work, but
-      excluding communication that is conspicuously marked or otherwise
-      designated in writing by the copyright owner as "Not a Contribution."
-
-      "Contributor" shall mean Licensor and any individual or Legal Entity
-      on behalf of whom a Contribution has been received by Licensor and
-      subsequently incorporated within the Work.
-
-   2. Grant of Copyright License. Subject to the terms and conditions of
-      this License, each Contributor hereby grants to You a perpetual,
-      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
-      copyright license to reproduce, prepare Derivative Works of,
-      publicly display, publicly perform, sublicense, and distribute the
-      Work and such Derivative Works in Source or Object form.
-
-   3. Grant of Patent License. Subject to the terms and conditions of
-      this License, each Contributor hereby grants to You a perpetual,
-      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
-      (except as stated in this section) patent license to make, have made,
-      use, offer to sell, sell, import, and otherwise transfer the Work,
-      where such license applies only to those patent claims licensable
-      by such Contributor that are necessarily infringed by their
-      Contribution(s) alone or by combination of their Contribution(s)
-      with the Work to which such Contribution(s) was submitted. If You
-      institute patent litigation against any entity (including a
-      cross-claim or counterclaim in a lawsuit) alleging that the Work
-      or a Contribution incorporated within the Work constitutes direct
-      or contributory patent infringement, then any patent licenses
-      granted to You under this License for that Work shall terminate
-      as of the date such litigation is filed.
-
-   4. Redistribution. You may reproduce and distribute copies of the
-      Work or Derivative Works thereof in any medium, with or without
-      modifications, and in Source or Object form, provided that You
-      meet the following conditions:
-
-      (a) You must give any other recipients of the Work or
-          Derivative Works a copy of this License; and
-
-      (b) You must cause any modified files to carry prominent notices
-          stating that You changed the files; and
-
-      (c) You must retain, in the Source form of any Derivative Works
-          that You distribute, all copyright, patent, trademark, and
-          attribution notices from the Source form of the Work,
-          excluding those notices that do not pertain to any part of
-          the Derivative Works; and
-
-      (d) If the Work includes a "NOTICE" text file as part of its
-          distribution, then any Derivative Works that You distribute must
-          include a readable copy of the attribution notices contained
-          within such NOTICE file, excluding those notices that do not
-          pertain to any part of the Derivative Works, in at least one
-          of the following places: within a NOTICE text file distributed
-          as part of the Derivative Works; within the Source form or
-          documentation, if provided along with the Derivative Works; or,
-          within a display generated by the Derivative Works, if and
-          wherever such third-party notices normally appear. The contents
-          of the NOTICE file are for informational purposes only and
-          do not modify the License. You may add Your own attribution
-          notices within Derivative Works that You distribute, alongside
-          or as an addendum to the NOTICE text from the Work, provided
-          that such additional attribution notices cannot be construed
-          as modifying the License.
-
-      You may add Your own copyright statement to Your modifications and
-      may provide additional or different license terms and conditions
-      for use, reproduction, or distribution of Your modifications, or
-      for any such Derivative Works as a whole, provided Your use,
-      reproduction, and distribution of the Work otherwise complies with
-      the conditions stated in this License.
-
-   5. Submission of Contributions. Unless You explicitly state otherwise,
-      any Contribution intentionally submitted for inclusion in the Work
-      by You to the Licensor shall be under the terms and conditions of
-      this License, without any additional terms or conditions.
-      Notwithstanding the above, nothing herein shall supersede or modify
-      the terms of any separate license agreement you may have executed
-      with Licensor regarding such Contributions.
-
-   6. Trademarks. This License does not grant permission to use the trade
-      names, trademarks, service marks, or product names of the Licensor,
-      except as required for reasonable and customary use in describing the
-      origin of the Work and reproducing the content of the NOTICE file.
-
-   7. Disclaimer of Warranty. Unless required by applicable law or
-      agreed to in writing, Licensor provides the Work (and each
-      Contributor provides its Contributions) on an "AS IS" BASIS,
-      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
-      implied, including, without limitation, any warranties or conditions
-      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
-      PARTICULAR PURPOSE. You are solely responsible for determining the
-      appropriateness of using or redistributing the Work and assume any
-      risks associated with Your exercise of permissions under this License.
-
-   8. Limitation of Liability. In no event and under no legal theory,
-      whether in tort (including negligence), contract, or otherwise,
-      unless required by applicable law (such as deliberate and grossly
-      negligent acts) or agreed to in writing, shall any Contributor be
-      liable to You for damages, including any direct, indirect, special,
-      incidental, or consequential damages of any character arising as a
-      result of this License or out of the use or inability to use the
-      Work (including but not limited to damages for loss of goodwill,
-      work stoppage, computer failure or malfunction, or any and all
-      other commercial damages or losses), even if such Contributor
-      has been advised of the possibility of such damages.
-
-   9. Accepting Warranty or Additional Liability. While redistributing
-      the Work or Derivative Works thereof, You may choose to offer,
-      and charge a fee for, acceptance of support, warranty, indemnity,
-      or other liability obligations and/or rights consistent with this
-      License. However, in accepting such obligations, You may act only
-      on Your own behalf and on Your sole responsibility, not on behalf
-      of any other Contributor, and only if You agree to indemnify,
-      defend, and hold each Contributor harmless for any liability
-      incurred by, or claims asserted against, such Contributor by reason
-      of your accepting any such warranty or additional liability.
-
-   END OF TERMS AND CONDITIONS
-
-   APPENDIX: How to apply the Apache License to your work.
-
-      To apply the Apache License to your work, attach the following
-      boilerplate notice, with the fields enclosed by brackets "[]"
-      replaced with your own identifying information. (Don't include
-      the brackets!)  The text should be enclosed in the appropriate
-      comment syntax for the file format. We also recommend that a
-      file or class name and description of purpose be included on the
-      same "printed page" as the copyright notice for easier
-      identification within third-party archives.
-
-   Copyright [yyyy] [name of copyright owner]
-
-   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.
-   
-
-
-J2ObjC:
-
-
-                                 Apache License
-                           Version 2.0, January 2004
-                        http://www.apache.org/licenses/
-
-   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
-
-   1. Definitions.
-
-      "License" shall mean the terms and conditions for use, reproduction,
-      and distribution as defined by Sections 1 through 9 of this document.
-
-      "Licensor" shall mean the copyright owner or entity authorized by
-      the copyright owner that is granting the License.
-
-      "Legal Entity" shall mean the union of the acting entity and all
-      other entities that control, are controlled by, or are under common
-      control with that entity. For the purposes of this definition,
-      "control" means (i) the power, direct or indirect, to cause the
-      direction or management of such entity, whether by contract or
-      otherwise, or (ii) ownership of fifty percent (50%) or more of the
-      outstanding shares, or (iii) beneficial ownership of such entity.
-
-      "You" (or "Your") shall mean an individual or Legal Entity
-      exercising permissions granted by this License.
-
-      "Source" form shall mean the preferred form for making modifications,
-      including but not limited to software source code, documentation
-      source, and configuration files.
-
-      "Object" form shall mean any form resulting from mechanical
-      transformation or translation of a Source form, including but
-      not limited to compiled object code, generated documentation,
-      and conversions to other media types.
-
-      "Work" shall mean the work of authorship, whether in Source or
-      Object form, made available under the License, as indicated by a
-      copyright notice that is included in or attached to the work
-      (an example is provided in the Appendix below).
-
-      "Derivative Works" shall mean any work, whether in Source or Object
-      form, that is based on (or derived from) the Work and for which the
-      editorial revisions, annotations, elaborations, or other modifications
-      represent, as a whole, an original work of authorship. For the purposes
-      of this License, Derivative Works shall not include works that remain
-      separable from, or merely link (or bind by name) to the interfaces of,
-      the Work and Derivative Works thereof.
-
-      "Contribution" shall mean any work of authorship, including
-      the original version of the Work and any modifications or additions
-      to that Work or Derivative Works thereof, that is intentionally
-      submitted to Licensor for inclusion in the Work by the copyright owner
-      or by an individual or Legal Entity authorized to submit on behalf of
-      the copyright owner. For the purposes of this definition, "submitted"
-      means any form of electronic, verbal, or written communication sent
-      to the Licensor or its representatives, including but not limited to
-      communication on electronic mailing lists, source code control systems,
-      and issue tracking systems that are managed by, or on behalf of, the
-      Licensor for the purpose of discussing and improving the Work, but
-      excluding communication that is conspicuously marked or otherwise
-      designated in writing by the copyright owner as "Not a Contribution."
-
-      "Contributor" shall mean Licensor and any individual or Legal Entity
-      on behalf of whom a Contribution has been received by Licensor and
-      subsequently incorporated within the Work.
-
-   2. Grant of Copyright License. Subject to the terms and conditions of
-      this License, each Contributor hereby grants to You a perpetual,
-      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
-      copyright license to reproduce, prepare Derivative Works of,
-      publicly display, publicly perform, sublicense, and distribute the
-      Work and such Derivative Works in Source or Object form.
-
-   3. Grant of Patent License. Subject to the terms and conditions of
-      this License, each Contributor hereby grants to You a perpetual,
-      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
-      (except as stated in this section) patent license to make, have made,
-      use, offer to sell, sell, import, and otherwise transfer the Work,
-      where such license applies only to those patent claims licensable
-      by such Contributor that are necessarily infringed by their
-      Contribution(s) alone or by combination of their Contribution(s)
-      with the Work to which such Contribution(s) was submitted. If You
-      institute patent litigation against any entity (including a
-      cross-claim or counterclaim in a lawsuit) alleging that the Work
-      or a Contribution incorporated within the Work constitutes direct
-      or contributory patent infringement, then any patent licenses
-      granted to You under this License for that Work shall terminate
-      as of the date such litigation is filed.
-
-   4. Redistribution. You may reproduce and distribute copies of the
-      Work or Derivative Works thereof in any medium, with or without
-      modifications, and in Source or Object form, provided that You
-      meet the following conditions:
-
-      (a) You must give any other recipients of the Work or
-          Derivative Works a copy of this License; and
-
-      (b) You must cause any modified files to carry prominent notices
-          stating that You changed the files; and
-
-      (c) You must retain, in the Source form of any Derivative Works
-          that You distribute, all copyright, patent, trademark, and
-          attribution notices from the Source form of the Work,
-          excluding those notices that do not pertain to any part of
-          the Derivative Works; and
-
-      (d) If the Work includes a "NOTICE" text file as part of its
-          distribution, then any Derivative Works that You distribute must
-          include a readable copy of the attribution notices contained
-          within such NOTICE file, excluding those notices that do not
-          pertain to any part of the Derivative Works, in at least one
-          of the following places: within a NOTICE text file distributed
-          as part of the Derivative Works; within the Source form or
-          documentation, if provided along with the Derivative Works; or,
-          within a display generated by the Derivative Works, if and
-          wherever such third-party notices normally appear. The contents
-          of the NOTICE file are for informational purposes only and
-          do not modify the License. You may add Your own attribution
-          notices within Derivative Works that You distribute, alongside
-          or as an addendum to the NOTICE text from the Work, provided
-          that such additional attribution notices cannot be construed
-          as modifying the License.
-
-      You may add Your own copyright statement to Your modifications and
-      may provide additional or different license terms and conditions
-      for use, reproduction, or distribution of Your modifications, or
-      for any such Derivative Works as a whole, provided Your use,
-      reproduction, and distribution of the Work otherwise complies with
-      the conditions stated in this License.
-
-   5. Submission of Contributions. Unless You explicitly state otherwise,
-      any Contribution intentionally submitted for inclusion in the Work
-      by You to the Licensor shall be under the terms and conditions of
-      this License, without any additional terms or conditions.
-      Notwithstanding the above, nothing herein shall supersede or modify
-      the terms of any separate license agreement you may have executed
-      with Licensor regarding such Contributions.
-
-   6. Trademarks. This License does not grant permission to use the trade
-      names, trademarks, service marks, or product names of the Licensor,
-      except as required for reasonable and customary use in describing the
-      origin of the Work and reproducing the content of the NOTICE file.
-
-   7. Disclaimer of Warranty. Unless required by applicable law or
-      agreed to in writing, Licensor provides the Work (and each
-      Contributor provides its Contributions) on an "AS IS" BASIS,
-      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
-      implied, including, without limitation, any warranties or conditions
-      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
-      PARTICULAR PURPOSE. You are solely responsible for determining the
-      appropriateness of using or redistributing the Work and assume any
-      risks associated with Your exercise of permissions under this License.
-
-   8. Limitation of Liability. In no event and under no legal theory,
-      whether in tort (including negligence), contract, or otherwise,
-      unless required by applicable law (such as deliberate and grossly
-      negligent acts) or agreed to in writing, shall any Contributor be
-      liable to You for damages, including any direct, indirect, special,
-      incidental, or consequential damages of any character arising as a
-      result of this License or out of the use or inability to use the
-      Work (including but not limited to damages for loss of goodwill,
-      work stoppage, computer failure or malfunction, or any and all
-      other commercial damages or losses), even if such Contributor
-      has been advised of the possibility of such damages.
-
-   9. Accepting Warranty or Additional Liability. While redistributing
-      the Work or Derivative Works thereof, You may choose to offer,
-      and charge a fee for, acceptance of support, warranty, indemnity,
-      or other liability obligations and/or rights consistent with this
-      License. However, in accepting such obligations, You may act only
-      on Your own behalf and on Your sole responsibility, not on behalf
-      of any other Contributor, and only if You agree to indemnify,
-      defend, and hold each Contributor harmless for any liability
-      incurred by, or claims asserted against, such Contributor by reason
-      of your accepting any such warranty or additional liability.
-
-   END OF TERMS AND CONDITIONS
-
-   APPENDIX: How to apply the Apache License to your work.
-
-      To apply the Apache License to your work, attach the following
-      boilerplate notice, with the fields enclosed by brackets "[]"
-      replaced with your own identifying information. (Don't include
-      the brackets!)  The text should be enclosed in the appropriate
-      comment syntax for the file format. We also recommend that a
-      file or class name and description of purpose be included on the
-      same "printed page" as the copyright notice for easier
-      identification within third-party archives.
-
-   Copyright [yyyy] [name of copyright owner]
-
-   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.
-
---------------------------------------------------------------------------------
-The next section, BSD-3-Clause, applies to the files in:
-jre_emul/android/platform/libcore/ojluni/src/main/java/java/time
---------------------------------------------------------------------------------
-Redistribution and use in source and binary forms, with or without
-modification, are permitted provided that the following conditions are met:
-
-* Redistributions of source code must retain the above copyright notice,
-  this list of conditions and the following disclaimer.
-
-* Redistributions in binary form must reproduce the above copyright notice,
-  this list of conditions and the following disclaimer in the documentation
-  and/or other materials provided with the distribution.
-
-* Neither the name of JSR-310 nor the names of its contributors
-  may be used to endorse or promote products derived from this software
-  without specific prior written permission.
-
-THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
-CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
-EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
-PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
-PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
-LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
-NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
-SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
-
-JSR 250:
-
-
-                                 Apache License
-                           Version 2.0, January 2004
-                        http://www.apache.org/licenses/
-
-   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
-
-   1. Definitions.
-
-      "License" shall mean the terms and conditions for use, reproduction,
-      and distribution as defined by Sections 1 through 9 of this document.
-
-      "Licensor" shall mean the copyright owner or entity authorized by
-      the copyright owner that is granting the License.
-
-      "Legal Entity" shall mean the union of the acting entity and all
-      other entities that control, are controlled by, or are under common
-      control with that entity. For the purposes of this definition,
-      "control" means (i) the power, direct or indirect, to cause the
-      direction or management of such entity, whether by contract or
-      otherwise, or (ii) ownership of fifty percent (50%) or more of the
-      outstanding shares, or (iii) beneficial ownership of such entity.
-
-      "You" (or "Your") shall mean an individual or Legal Entity
-      exercising permissions granted by this License.
-
-      "Source" form shall mean the preferred form for making modifications,
-      including but not limited to software source code, documentation
-      source, and configuration files.
-
-      "Object" form shall mean any form resulting from mechanical
-      transformation or translation of a Source form, including but
-      not limited to compiled object code, generated documentation,
-      and conversions to other media types.
-
-      "Work" shall mean the work of authorship, whether in Source or
-      Object form, made available under the License, as indicated by a
-      copyright notice that is included in or attached to the work
-      (an example is provided in the Appendix below).
-
-      "Derivative Works" shall mean any work, whether in Source or Object
-      form, that is based on (or derived from) the Work and for which the
-      editorial revisions, annotations, elaborations, or other modifications
-      represent, as a whole, an original work of authorship. For the purposes
-      of this License, Derivative Works shall not include works that remain
-      separable from, or merely link (or bind by name) to the interfaces of,
-      the Work and Derivative Works thereof.
-
-      "Contribution" shall mean any work of authorship, including
-      the original version of the Work and any modifications or additions
-      to that Work or Derivative Works thereof, that is intentionally
-      submitted to Licensor for inclusion in the Work by the copyright owner
-      or by an individual or Legal Entity authorized to submit on behalf of
-      the copyright owner. For the purposes of this definition, "submitted"
-      means any form of electronic, verbal, or written communication sent
-      to the Licensor or its representatives, including but not limited to
-      communication on electronic mailing lists, source code control systems,
-      and issue tracking systems that are managed by, or on behalf of, the
-      Licensor for the purpose of discussing and improving the Work, but
-      excluding communication that is conspicuously marked or otherwise
-      designated in writing by the copyright owner as "Not a Contribution."
-
-      "Contributor" shall mean Licensor and any individual or Legal Entity
-      on behalf of whom a Contribution has been received by Licensor and
-      subsequently incorporated within the Work.
-
-   2. Grant of Copyright License. Subject to the terms and conditions of
-      this License, each Contributor hereby grants to You a perpetual,
-      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
-      copyright license to reproduce, prepare Derivative Works of,
-      publicly display, publicly perform, sublicense, and distribute the
-      Work and such Derivative Works in Source or Object form.
-
-   3. Grant of Patent License. Subject to the terms and conditions of
-      this License, each Contributor hereby grants to You a perpetual,
-      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
-      (except as stated in this section) patent license to make, have made,
-      use, offer to sell, sell, import, and otherwise transfer the Work,
-      where such license applies only to those patent claims licensable
-      by such Contributor that are necessarily infringed by their
-      Contribution(s) alone or by combination of their Contribution(s)
-      with the Work to which such Contribution(s) was submitted. If You
-      institute patent litigation against any entity (including a
-      cross-claim or counterclaim in a lawsuit) alleging that the Work
-      or a Contribution incorporated within the Work constitutes direct
-      or contributory patent infringement, then any patent licenses
-      granted to You under this License for that Work shall terminate
-      as of the date such litigation is filed.
-
-   4. Redistribution. You may reproduce and distribute copies of the
-      Work or Derivative Works thereof in any medium, with or without
-      modifications, and in Source or Object form, provided that You
-      meet the following conditions:
-
-      (a) You must give any other recipients of the Work or
-          Derivative Works a copy of this License; and
-
-      (b) You must cause any modified files to carry prominent notices
-          stating that You changed the files; and
-
-      (c) You must retain, in the Source form of any Derivative Works
-          that You distribute, all copyright, patent, trademark, and
-          attribution notices from the Source form of the Work,
-          excluding those notices that do not pertain to any part of
-          the Derivative Works; and
-
-      (d) If the Work includes a "NOTICE" text file as part of its
-          distribution, then any Derivative Works that You distribute must
-          include a readable copy of the attribution notices contained
-          within such NOTICE file, excluding those notices that do not
-          pertain to any part of the Derivative Works, in at least one
-          of the following places: within a NOTICE text file distributed
-          as part of the Derivative Works; within the Source form or
-          documentation, if provided along with the Derivative Works; or,
-          within a display generated by the Derivative Works, if and
-          wherever such third-party notices normally appear. The contents
-          of the NOTICE file are for informational purposes only and
-          do not modify the License. You may add Your own attribution
-          notices within Derivative Works that You distribute, alongside
-          or as an addendum to the NOTICE text from the Work, provided
-          that such additional attribution notices cannot be construed
-          as modifying the License.
-
-      You may add Your own copyright statement to Your modifications and
-      may provide additional or different license terms and conditions
-      for use, reproduction, or distribution of Your modifications, or
-      for any such Derivative Works as a whole, provided Your use,
-      reproduction, and distribution of the Work otherwise complies with
-      the conditions stated in this License.
-
-   5. Submission of Contributions. Unless You explicitly state otherwise,
-      any Contribution intentionally submitted for inclusion in the Work
-      by You to the Licensor shall be under the terms and conditions of
-      this License, without any additional terms or conditions.
-      Notwithstanding the above, nothing herein shall supersede or modify
-      the terms of any separate license agreement you may have executed
-      with Licensor regarding such Contributions.
-
-   6. Trademarks. This License does not grant permission to use the trade
-      names, trademarks, service marks, or product names of the Licensor,
-      except as required for reasonable and customary use in describing the
-      origin of the Work and reproducing the content of the NOTICE file.
-
-   7. Disclaimer of Warranty. Unless required by applicable law or
-      agreed to in writing, Licensor provides the Work (and each
-      Contributor provides its Contributions) on an "AS IS" BASIS,
-      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
-      implied, including, without limitation, any warranties or conditions
-      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
-      PARTICULAR PURPOSE. You are solely responsible for determining the
-      appropriateness of using or redistributing the Work and assume any
-      risks associated with Your exercise of permissions under this License.
-
-   8. Limitation of Liability. In no event and under no legal theory,
-      whether in tort (including negligence), contract, or otherwise,
-      unless required by applicable law (such as deliberate and grossly
-      negligent acts) or agreed to in writing, shall any Contributor be
-      liable to You for damages, including any direct, indirect, special,
-      incidental, or consequential damages of any character arising as a
-      result of this License or out of the use or inability to use the
-      Work (including but not limited to damages for loss of goodwill,
-      work stoppage, computer failure or malfunction, or any and all
-      other commercial damages or losses), even if such Contributor
-      has been advised of the possibility of such damages.
-
-   9. Accepting Warranty or Additional Liability. While redistributing
-      the Work or Derivative Works thereof, You may choose to offer,
-      and charge a fee for, acceptance of support, warranty, indemnity,
-      or other liability obligations and/or rights consistent with this
-      License. However, in accepting such obligations, You may act only
-      on Your own behalf and on Your sole responsibility, not on behalf
-      of any other Contributor, and only if You agree to indemnify,
-      defend, and hold each Contributor harmless for any liability
-      incurred by, or claims asserted against, such Contributor by reason
-      of your accepting any such warranty or additional liability.
-
-   END OF TERMS AND CONDITIONS
-
-   APPENDIX: How to apply the Apache License to your work.
-
-      To apply the Apache License to your work, attach the following
-      boilerplate notice, with the fields enclosed by brackets "[]"
-      replaced with your own identifying information. (Don't include
-      the brackets!)  The text should be enclosed in the appropriate
-      comment syntax for the file format. We also recommend that a
-      file or class name and description of purpose be included on the
-      same "printed page" as the copyright notice for easier
-      identification within third-party archives.
-
-   Copyright [yyyy] [name of copyright owner]
-
-   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.
-
-
-JSR 305:
-
-Copyright (c) 2007-2009, JSR305 expert group
-All rights reserved.
-
-http://www.opensource.org/licenses/bsd-license.php
-
-Redistribution and use in source and binary forms, with or without 
-modification, are permitted provided that the following conditions are met:
-
-    * Redistributions of source code must retain the above copyright notice, 
-      this list of conditions and the following disclaimer.
-    * Redistributions in binary form must reproduce the above copyright notice, 
-      this list of conditions and the following disclaimer in the documentation 
-      and/or other materials provided with the distribution.
-    * Neither the name of the JSR305 expert group nor the names of its 
-      contributors may be used to endorse or promote products derived from 
-      this software without specific prior written permission.
-
-THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" 
-AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, 
-THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 
-ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE 
-LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 
-CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 
-SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 
-INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 
-CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 
-ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 
-POSSIBILITY OF SUCH DAMAGE.
-
-
-JSpecify:
-
-
-                                 Apache License
-                           Version 2.0, January 2004
-                        http://www.apache.org/licenses/
-
-   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
-
-   1. Definitions.
-
-      "License" shall mean the terms and conditions for use, reproduction,
-      and distribution as defined by Sections 1 through 9 of this document.
-
-      "Licensor" shall mean the copyright owner or entity authorized by
-      the copyright owner that is granting the License.
-
-      "Legal Entity" shall mean the union of the acting entity and all
-      other entities that control, are controlled by, or are under common
-      control with that entity. For the purposes of this definition,
-      "control" means (i) the power, direct or indirect, to cause the
-      direction or management of such entity, whether by contract or
-      otherwise, or (ii) ownership of fifty percent (50%) or more of the
-      outstanding shares, or (iii) beneficial ownership of such entity.
-
-      "You" (or "Your") shall mean an individual or Legal Entity
-      exercising permissions granted by this License.
-
-      "Source" form shall mean the preferred form for making modifications,
-      including but not limited to software source code, documentation
-      source, and configuration files.
-
-      "Object" form shall mean any form resulting from mechanical
-      transformation or translation of a Source form, including but
-      not limited to compiled object code, generated documentation,
-      and conversions to other media types.
-
-      "Work" shall mean the work of authorship, whether in Source or
-      Object form, made available under the License, as indicated by a
-      copyright notice that is included in or attached to the work
-      (an example is provided in the Appendix below).
-
-      "Derivative Works" shall mean any work, whether in Source or Object
-      form, that is based on (or derived from) the Work and for which the
-      editorial revisions, annotations, elaborations, or other modifications
-      represent, as a whole, an original work of authorship. For the purposes
-      of this License, Derivative Works shall not include works that remain
-      separable from, or merely link (or bind by name) to the interfaces of,
-      the Work and Derivative Works thereof.
-
-      "Contribution" shall mean any work of authorship, including
-      the original version of the Work and any modifications or additions
-      to that Work or Derivative Works thereof, that is intentionally
-      submitted to Licensor for inclusion in the Work by the copyright owner
-      or by an individual or Legal Entity authorized to submit on behalf of
-      the copyright owner. For the purposes of this definition, "submitted"
-      means any form of electronic, verbal, or written communication sent
-      to the Licensor or its representatives, including but not limited to
-      communication on electronic mailing lists, source code control systems,
-      and issue tracking systems that are managed by, or on behalf of, the
-      Licensor for the purpose of discussing and improving the Work, but
-      excluding communication that is conspicuously marked or otherwise
-      designated in writing by the copyright owner as "Not a Contribution."
-
-      "Contributor" shall mean Licensor and any individual or Legal Entity
-      on behalf of whom a Contribution has been received by Licensor and
-      subsequently incorporated within the Work.
-
-   2. Grant of Copyright License. Subject to the terms and conditions of
-      this License, each Contributor hereby grants to You a perpetual,
-      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
-      copyright license to reproduce, prepare Derivative Works of,
-      publicly display, publicly perform, sublicense, and distribute the
-      Work and such Derivative Works in Source or Object form.
-
-   3. Grant of Patent License. Subject to the terms and conditions of
-      this License, each Contributor hereby grants to You a perpetual,
-      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
-      (except as stated in this section) patent license to make, have made,
-      use, offer to sell, sell, import, and otherwise transfer the Work,
-      where such license applies only to those patent claims licensable
-      by such Contributor that are necessarily infringed by their
-      Contribution(s) alone or by combination of their Contribution(s)
-      with the Work to which such Contribution(s) was submitted. If You
-      institute patent litigation against any entity (including a
-      cross-claim or counterclaim in a lawsuit) alleging that the Work
-      or a Contribution incorporated within the Work constitutes direct
-      or contributory patent infringement, then any patent licenses
-      granted to You under this License for that Work shall terminate
-      as of the date such litigation is filed.
-
-   4. Redistribution. You may reproduce and distribute copies of the
-      Work or Derivative Works thereof in any medium, with or without
-      modifications, and in Source or Object form, provided that You
-      meet the following conditions:
-
-      (a) You must give any other recipients of the Work or
-          Derivative Works a copy of this License; and
-
-      (b) You must cause any modified files to carry prominent notices
-          stating that You changed the files; and
-
-      (c) You must retain, in the Source form of any Derivative Works
-          that You distribute, all copyright, patent, trademark, and
-          attribution notices from the Source form of the Work,
-          excluding those notices that do not pertain to any part of
-          the Derivative Works; and
-
-      (d) If the Work includes a "NOTICE" text file as part of its
-          distribution, then any Derivative Works that You distribute must
-          include a readable copy of the attribution notices contained
-          within such NOTICE file, excluding those notices that do not
-          pertain to any part of the Derivative Works, in at least one
-          of the following places: within a NOTICE text file distributed
-          as part of the Derivative Works; within the Source form or
-          documentation, if provided along with the Derivative Works; or,
-          within a display generated by the Derivative Works, if and
-          wherever such third-party notices normally appear. The contents
-          of the NOTICE file are for informational purposes only and
-          do not modify the License. You may add Your own attribution
-          notices within Derivative Works that You distribute, alongside
-          or as an addendum to the NOTICE text from the Work, provided
-          that such additional attribution notices cannot be construed
-          as modifying the License.
-
-      You may add Your own copyright statement to Your modifications and
-      may provide additional or different license terms and conditions
-      for use, reproduction, or distribution of Your modifications, or
-      for any such Derivative Works as a whole, provided Your use,
-      reproduction, and distribution of the Work otherwise complies with
-      the conditions stated in this License.
-
-   5. Submission of Contributions. Unless You explicitly state otherwise,
-      any Contribution intentionally submitted for inclusion in the Work
-      by You to the Licensor shall be under the terms and conditions of
-      this License, without any additional terms or conditions.
-      Notwithstanding the above, nothing herein shall supersede or modify
-      the terms of any separate license agreement you may have executed
-      with Licensor regarding such Contributions.
-
-   6. Trademarks. This License does not grant permission to use the trade
-      names, trademarks, service marks, or product names of the Licensor,
-      except as required for reasonable and customary use in describing the
-      origin of the Work and reproducing the content of the NOTICE file.
-
-   7. Disclaimer of Warranty. Unless required by applicable law or
-      agreed to in writing, Licensor provides the Work (and each
-      Contributor provides its Contributions) on an "AS IS" BASIS,
-      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
-      implied, including, without limitation, any warranties or conditions
-      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
-      PARTICULAR PURPOSE. You are solely responsible for determining the
-      appropriateness of using or redistributing the Work and assume any
-      risks associated with Your exercise of permissions under this License.
-
-   8. Limitation of Liability. In no event and under no legal theory,
-      whether in tort (including negligence), contract, or otherwise,
-      unless required by applicable law (such as deliberate and grossly
-      negligent acts) or agreed to in writing, shall any Contributor be
-      liable to You for damages, including any direct, indirect, special,
-      incidental, or consequential damages of any character arising as a
-      result of this License or out of the use or inability to use the
-      Work (including but not limited to damages for loss of goodwill,
-      work stoppage, computer failure or malfunction, or any and all
-      other commercial damages or losses), even if such Contributor
-      has been advised of the possibility of such damages.
-
-   9. Accepting Warranty or Additional Liability. While redistributing
-      the Work or Derivative Works thereof, You may choose to offer,
-      and charge a fee for, acceptance of support, warranty, indemnity,
-      or other liability obligations and/or rights consistent with this
-      License. However, in accepting such obligations, You may act only
-      on Your own behalf and on Your sole responsibility, not on behalf
-      of any other Contributor, and only if You agree to indemnify,
-      defend, and hold each Contributor harmless for any liability
-      incurred by, or claims asserted against, such Contributor by reason
-      of your accepting any such warranty or additional liability.
-
-   END OF TERMS AND CONDITIONS
-
-   APPENDIX: How to apply the Apache License to your work.
-
-      To apply the Apache License to your work, attach the following
-      boilerplate notice, with the fields enclosed by brackets "[]"
-      replaced with your own identifying information. (Don't include
-      the brackets!)  The text should be enclosed in the appropriate
-      comment syntax for the file format. We also recommend that a
-      file or class name and description of purpose be included on the
-      same "printed page" as the copyright notice for easier
-      identification within third-party archives.
-
-   Copyright [yyyy] [name of copyright owner]
-
-   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.
-
-
-JsInterop Annotations:
-
-Apache License
-                           Version 2.0, January 2004
-                        http://www.apache.org/licenses/
-
-   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
-
-   1. Definitions.
-
-      "License" shall mean the terms and conditions for use, reproduction,
-      and distribution as defined by Sections 1 through 9 of this document.
-
-      "Licensor" shall mean the copyright owner or entity authorized by
-      the copyright owner that is granting the License.
-
-      "Legal Entity" shall mean the union of the acting entity and all
-      other entities that control, are controlled by, or are under common
-      control with that entity. For the purposes of this definition,
-      "control" means (i) the power, direct or indirect, to cause the
-      direction or management of such entity, whether by contract or
-      otherwise, or (ii) ownership of fifty percent (50%) or more of the
-      outstanding shares, or (iii) beneficial ownership of such entity.
-
-      "You" (or "Your") shall mean an individual or Legal Entity
-      exercising permissions granted by this License.
-
-      "Source" form shall mean the preferred form for making modifications,
-      including but not limited to software source code, documentation
-      source, and configuration files.
-
-      "Object" form shall mean any form resulting from mechanical
-      transformation or translation of a Source form, including but
-      not limited to compiled object code, generated documentation,
-      and conversions to other media types.
-
-      "Work" shall mean the work of authorship, whether in Source or
-      Object form, made available under the License, as indicated by a
-      copyright notice that is included in or attached to the work
-      (an example is provided in the Appendix below).
-
-      "Derivative Works" shall mean any work, whether in Source or Object
-      form, that is based on (or derived from) the Work and for which the
-      editorial revisions, annotations, elaborations, or other modifications
-      represent, as a whole, an original work of authorship. For the purposes
-      of this License, Derivative Works shall not include works that remain
-      separable from, or merely link (or bind by name) to the interfaces of,
-      the Work and Derivative Works thereof.
-
-      "Contribution" shall mean any work of authorship, including
-      the original version of the Work and any modifications or additions
-      to that Work or Derivative Works thereof, that is intentionally
-      submitted to Licensor for inclusion in the Work by the copyright owner
-      or by an individual or Legal Entity authorized to submit on behalf of
-      the copyright owner. For the purposes of this definition, "submitted"
-      means any form of electronic, verbal, or written communication sent
-      to the Licensor or its representatives, including but not limited to
-      communication on electronic mailing lists, source code control systems,
-      and issue tracking systems that are managed by, or on behalf of, the
-      Licensor for the purpose of discussing and improving the Work, but
-      excluding communication that is conspicuously marked or otherwise
-      designated in writing by the copyright owner as "Not a Contribution."
-
-      "Contributor" shall mean Licensor and any individual or Legal Entity
-      on behalf of whom a Contribution has been received by Licensor and
-      subsequently incorporated within the Work.
-
-   2. Grant of Copyright License. Subject to the terms and conditions of
-      this License, each Contributor hereby grants to You a perpetual,
-      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
-      copyright license to reproduce, prepare Derivative Works of,
-      publicly display, publicly perform, sublicense, and distribute the
-      Work and such Derivative Works in Source or Object form.
-
-   3. Grant of Patent License. Subject to the terms and conditions of
-      this License, each Contributor hereby grants to You a perpetual,
-      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
-      (except as stated in this section) patent license to make, have made,
-      use, offer to sell, sell, import, and otherwise transfer the Work,
-      where such license applies only to those patent claims licensable
-      by such Contributor that are necessarily infringed by their
-      Contribution(s) alone or by combination of their Contribution(s)
-      with the Work to which such Contribution(s) was submitted. If You
-      institute patent litigation against any entity (including a
-      cross-claim or counterclaim in a lawsuit) alleging that the Work
-      or a Contribution incorporated within the Work constitutes direct
-      or contributory patent infringement, then any patent licenses
-      granted to You under this License for that Work shall terminate
-      as of the date such litigation is filed.
-
-   4. Redistribution. You may reproduce and distribute copies of the
-      Work or Derivative Works thereof in any medium, with or without
-      modifications, and in Source or Object form, provided that You
-      meet the following conditions:
-
-      (a) You must give any other recipients of the Work or
-          Derivative Works a copy of this License; and
-
-      (b) You must cause any modified files to carry prominent notices
-          stating that You changed the files; and
-
-      (c) You must retain, in the Source form of any Derivative Works
-          that You distribute, all copyright, patent, trademark, and
-          attribution notices from the Source form of the Work,
-          excluding those notices that do not pertain to any part of
-          the Derivative Works; and
-
-      (d) If the Work includes a "NOTICE" text file as part of its
-          distribution, then any Derivative Works that You distribute must
-          include a readable copy of the attribution notices contained
-          within such NOTICE file, excluding those notices that do not
-          pertain to any part of the Derivative Works, in at least one
-          of the following places: within a NOTICE text file distributed
-          as part of the Derivative Works; within the Source form or
-          documentation, if provided along with the Derivative Works; or,
-          within a display generated by the Derivative Works, if and
-          wherever such third-party notices normally appear. The contents
-          of the NOTICE file are for informational purposes only and
-          do not modify the License. You may add Your own attribution
-          notices within Derivative Works that You distribute, alongside
-          or as an addendum to the NOTICE text from the Work, provided
-          that such additional attribution notices cannot be construed
-          as modifying the License.
-
-      You may add Your own copyright statement to Your modifications and
-      may provide additional or different license terms and conditions
-      for use, reproduction, or distribution of Your modifications, or
-      for any such Derivative Works as a whole, provided Your use,
-      reproduction, and distribution of the Work otherwise complies with
-      the conditions stated in this License.
-
-   5. Submission of Contributions. Unless You explicitly state otherwise,
-      any Contribution intentionally submitted for inclusion in the Work
-      by You to the Licensor shall be under the terms and conditions of
-      this License, without any additional terms or conditions.
-      Notwithstanding the above, nothing herein shall supersede or modify
-      the terms of any separate license agreement you may have executed
-      with Licensor regarding such Contributions.
-
-   6. Trademarks. This License does not grant permission to use the trade
-      names, trademarks, service marks, or product names of the Licensor,
-      except as required for reasonable and customary use in describing the
-      origin of the Work and reproducing the content of the NOTICE file.
-
-   7. Disclaimer of Warranty. Unless required by applicable law or
-      agreed to in writing, Licensor provides the Work (and each
-      Contributor provides its Contributions) on an "AS IS" BASIS,
-      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
-      implied, including, without limitation, any warranties or conditions
-      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
-      PARTICULAR PURPOSE. You are solely responsible for determining the
-      appropriateness of using or redistributing the Work and assume any
-      risks associated with Your exercise of permissions under this License.
-
-   8. Limitation of Liability. In no event and under no legal theory,
-      whether in tort (including negligence), contract, or otherwise,
-      unless required by applicable law (such as deliberate and grossly
-      negligent acts) or agreed to in writing, shall any Contributor be
-      liable to You for damages, including any direct, indirect, special,
-      incidental, or consequential damages of any character arising as a
-      result of this License or out of the use or inability to use the
-      Work (including but not limited to damages for loss of goodwill,
-      work stoppage, computer failure or malfunction, or any and all
-      other commercial damages or losses), even if such Contributor
-      has been advised of the possibility of such damages.
-
-   9. Accepting Warranty or Additional Liability. While redistributing
-      the Work or Derivative Works thereof, You may choose to offer,
-      and charge a fee for, acceptance of support, warranty, indemnity,
-      or other liability obligations and/or rights consistent with this
-      License. However, in accepting such obligations, You may act only
-      on Your own behalf and on Your sole responsibility, not on behalf
-      of any other Contributor, and only if You agree to indemnify,
-      defend, and hold each Contributor harmless for any liability
-      incurred by, or claims asserted against, such Contributor by reason
-      of your accepting any such warranty or additional liability.
-
-   END OF TERMS AND CONDITIONS
-
-   APPENDIX: How to apply the Apache License to your work.
-
-      To apply the Apache License to your work, attach the following
-      boilerplate notice, with the fields enclosed by brackets "[]"
-      replaced with your own identifying information. (Don't include
-      the brackets!)  The text should be enclosed in the appropriate
-      comment syntax for the file format. We also recommend that a
-      file or class name and description of purpose be included on the
-      same "printed page" as the copyright notice for easier
-      identification within third-party archives.
-
-   Copyright 2017 Google Inc.
-
-   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.
-
-Kotlin:
-
-Files: kotlinc/*
-
-                                 Apache License
-                           Version 2.0, January 2004
-                        http://www.apache.org/licenses/
-
-   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
-
-   1. Definitions.
-
-      "License" shall mean the terms and conditions for use, reproduction,
-      and distribution as defined by Sections 1 through 9 of this document.
-
-      "Licensor" shall mean the copyright owner or entity authorized by
-      the copyright owner that is granting the License.
-
-      "Legal Entity" shall mean the union of the acting entity and all
-      other entities that control, are controlled by, or are under common
-      control with that entity. For the purposes of this definition,
-      "control" means (i) the power, direct or indirect, to cause the
-      direction or management of such entity, whether by contract or
-      otherwise, or (ii) ownership of fifty percent (50%) or more of the
-      outstanding shares, or (iii) beneficial ownership of such entity.
-
-      "You" (or "Your") shall mean an individual or Legal Entity
-      exercising permissions granted by this License.
-
-      "Source" form shall mean the preferred form for making modifications,
-      including but not limited to software source code, documentation
-      source, and configuration files.
-
-      "Object" form shall mean any form resulting from mechanical
-      transformation or translation of a Source form, including but
-      not limited to compiled object code, generated documentation,
-      and conversions to other media types.
-
-      "Work" shall mean the work of authorship, whether in Source or
-      Object form, made available under the License, as indicated by a
-      copyright notice that is included in or attached to the work
-      (an example is provided in the Appendix below).
-
-      "Derivative Works" shall mean any work, whether in Source or Object
-      form, that is based on (or derived from) the Work and for which the
-      editorial revisions, annotations, elaborations, or other modifications
-      represent, as a whole, an original work of authorship. For the purposes
-      of this License, Derivative Works shall not include works that remain
-      separable from, or merely link (or bind by name) to the interfaces of,
-      the Work and Derivative Works thereof.
-
-      "Contribution" shall mean any work of authorship, including
-      the original version of the Work and any modifications or additions
-      to that Work or Derivative Works thereof, that is intentionally
-      submitted to Licensor for inclusion in the Work by the copyright owner
-      or by an individual or Legal Entity authorized to submit on behalf of
-      the copyright owner. For the purposes of this definition, "submitted"
-      means any form of electronic, verbal, or written communication sent
-      to the Licensor or its representatives, including but not limited to
-      communication on electronic mailing lists, source code control systems,
-      and issue tracking systems that are managed by, or on behalf of, the
-      Licensor for the purpose of discussing and improving the Work, but
-      excluding communication that is conspicuously marked or otherwise
-      designated in writing by the copyright owner as "Not a Contribution."
-
-      "Contributor" shall mean Licensor and any individual or Legal Entity
-      on behalf of whom a Contribution has been received by Licensor and
-      subsequently incorporated within the Work.
-
-   2. Grant of Copyright License. Subject to the terms and conditions of
-      this License, each Contributor hereby grants to You a perpetual,
-      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
-      copyright license to reproduce, prepare Derivative Works of,
-      publicly display, publicly perform, sublicense, and distribute the
-      Work and such Derivative Works in Source or Object form.
-
-   3. Grant of Patent License. Subject to the terms and conditions of
-      this License, each Contributor hereby grants to You a perpetual,
-      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
-      (except as stated in this section) patent license to make, have made,
-      use, offer to sell, sell, import, and otherwise transfer the Work,
-      where such license applies only to those patent claims licensable
-      by such Contributor that are necessarily infringed by their
-      Contribution(s) alone or by combination of their Contribution(s)
-      with the Work to which such Contribution(s) was submitted. If You
-      institute patent litigation against any entity (including a
-      cross-claim or counterclaim in a lawsuit) alleging that the Work
-      or a Contribution incorporated within the Work constitutes direct
-      or contributory patent infringement, then any patent licenses
-      granted to You under this License for that Work shall terminate
-      as of the date such litigation is filed.
-
-   4. Redistribution. You may reproduce and distribute copies of the
-      Work or Derivative Works thereof in any medium, with or without
-      modifications, and in Source or Object form, provided that You
-      meet the following conditions:
-
-      (a) You must give any other recipients of the Work or
-          Derivative Works a copy of this License; and
-
-      (b) You must cause any modified files to carry prominent notices
-          stating that You changed the files; and
-
-      (c) You must retain, in the Source form of any Derivative Works
-          that You distribute, all copyright, patent, trademark, and
-          attribution notices from the Source form of the Work,
-          excluding those notices that do not pertain to any part of
-          the Derivative Works; and
-
-      (d) If the Work includes a "NOTICE" text file as part of its
-          distribution, then any Derivative Works that You distribute must
-          include a readable copy of the attribution notices contained
-          within such NOTICE file, excluding those notices that do not
-          pertain to any part of the Derivative Works, in at least one
-          of the following places: within a NOTICE text file distributed
-          as part of the Derivative Works; within the Source form or
-          documentation, if provided along with the Derivative Works; or,
-          within a display generated by the Derivative Works, if and
-          wherever such third-party notices normally appear. The contents
-          of the NOTICE file are for informational purposes only and
-          do not modify the License. You may add Your own attribution
-          notices within Derivative Works that You distribute, alongside
-          or as an addendum to the NOTICE text from the Work, provided
-          that such additional attribution notices cannot be construed
-          as modifying the License.
-
-      You may add Your own copyright statement to Your modifications and
-      may provide additional or different license terms and conditions
-      for use, reproduction, or distribution of Your modifications, or
-      for any such Derivative Works as a whole, provided Your use,
-      reproduction, and distribution of the Work otherwise complies with
-      the conditions stated in this License.
-
-   5. Submission of Contributions. Unless You explicitly state otherwise,
-      any Contribution intentionally submitted for inclusion in the Work
-      by You to the Licensor shall be under the terms and conditions of
-      this License, without any additional terms or conditions.
-      Notwithstanding the above, nothing herein shall supersede or modify
-      the terms of any separate license agreement you may have executed
-      with Licensor regarding such Contributions.
-
-   6. Trademarks. This License does not grant permission to use the trade
-      names, trademarks, service marks, or product names of the Licensor,
-      except as required for reasonable and customary use in describing the
-      origin of the Work and reproducing the content of the NOTICE file.
-
-   7. Disclaimer of Warranty. Unless required by applicable law or
-      agreed to in writing, Licensor provides the Work (and each
-      Contributor provides its Contributions) on an "AS IS" BASIS,
-      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
-      implied, including, without limitation, any warranties or conditions
-      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
-      PARTICULAR PURPOSE. You are solely responsible for determining the
-      appropriateness of using or redistributing the Work and assume any
-      risks associated with Your exercise of permissions under this License.
-
-   8. Limitation of Liability. In no event and under no legal theory,
-      whether in tort (including negligence), contract, or otherwise,
-      unless required by applicable law (such as deliberate and grossly
-      negligent acts) or agreed to in writing, shall any Contributor be
-      liable to You for damages, including any direct, indirect, special,
-      incidental, or consequential damages of any character arising as a
-      result of this License or out of the use or inability to use the
-      Work (including but not limited to damages for loss of goodwill,
-      work stoppage, computer failure or malfunction, or any and all
-      other commercial damages or losses), even if such Contributor
-      has been advised of the possibility of such damages.
-
-   9. Accepting Warranty or Additional Liability. While redistributing
-      the Work or Derivative Works thereof, You may choose to offer,
-      and charge a fee for, acceptance of support, warranty, indemnity,
-      or other liability obligations and/or rights consistent with this
-      License. However, in accepting such obligations, You may act only
-      on Your own behalf and on Your sole responsibility, not on behalf
-      of any other Contributor, and only if You agree to indemnify,
-      defend, and hold each Contributor harmless for any liability
-      incurred by, or claims asserted against, such Contributor by reason
-      of your accepting any such warranty or additional liability.
-
-   END OF TERMS AND CONDITIONS
-
-   APPENDIX: How to apply the Apache License to your work.
-
-      To apply the Apache License to your work, attach the following
-      boilerplate notice, with the fields enclosed by brackets "[]"
-      replaced with your own identifying information. (Don't include
-      the brackets!)  The text should be enclosed in the appropriate
-      comment syntax for the file format. We also recommend that a
-      file or class name and description of purpose be included on the
-      same "printed page" as the copyright notice for easier
-      identification within third-party archives.
-
-   Copyright 2000-2020 JetBrains s.r.o. and Kotlin Programming Language contributors.
-
-   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.
-
-------------------
-
-Files: kotlinc/lib/trove4j.jar
-
-
-          GNU LESSER GENERAL PUBLIC LICENSE
-               Version 2.1, February 1999
-
- Copyright (C) 1991, 1999 Free Software Foundation, Inc.
-     59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
- Everyone is permitted to copy and distribute verbatim copies
- of this license document, but changing it is not allowed.
-
-[This is the first released version of the Lesser GPL.  It also counts
- as the successor of the GNU Library Public License, version 2, hence
- the version number 2.1.]
-
-                Preamble
-
-  The licenses for most software are designed to take away your
-freedom to share and change it.  By contrast, the GNU General Public
-Licenses are intended to guarantee your freedom to share and change
-free software--to make sure the software is free for all its users.
-
-  This license, the Lesser General Public License, applies to some
-specially designated software packages--typically libraries--of the
-Free Software Foundation and other authors who decide to use it.  You
-can use it too, but we suggest you first think carefully about whether
-this license or the ordinary General Public License is the better
-strategy to use in any particular case, based on the explanations below.
-
-  When we speak of free software, we are referring to freedom of use,
-not price.  Our General Public Licenses are designed to make sure that
-you have the freedom to distribute copies of free software (and charge
-for this service if you wish); that you receive source code or can get
-it if you want it; that you can change the software and use pieces of
-it in new free programs; and that you are informed that you can do
-these things.
-
-  To protect your rights, we need to make restrictions that forbid
-distributors to deny you these rights or to ask you to surrender these
-rights.  These restrictions translate to certain responsibilities for
-you if you distribute copies of the library or if you modify it.
-
-  For example, if you distribute copies of the library, whether gratis
-or for a fee, you must give the recipients all the rights that we gave
-you.  You must make sure that they, too, receive or can get the source
-code.  If you link other code with the library, you must provide
-complete object files to the recipients, so that they can relink them
-with the library after making changes to the library and recompiling
-it.  And you must show them these terms so they know their rights.
-
-  We protect your rights with a two-step method: (1) we copyright the
-library, and (2) we offer you this license, which gives you legal
-permission to copy, distribute and/or modify the library.
-
-  To protect each distributor, we want to make it very clear that
-there is no warranty for the free library.  Also, if the library is
-modified by someone else and passed on, the recipients should know
-that what they have is not the original version, so that the original
-author's reputation will not be affected by problems that might be
-introduced by others.
-
-  Finally, software patents pose a constant threat to the existence of
-any free program.  We wish to make sure that a company cannot
-effectively restrict the users of a free program by obtaining a
-restrictive license from a patent holder.  Therefore, we insist that
-any patent license obtained for a version of the library must be
-consistent with the full freedom of use specified in this license.
-
-  Most GNU software, including some libraries, is covered by the
-ordinary GNU General Public License.  This license, the GNU Lesser
-General Public License, applies to certain designated libraries, and
-is quite different from the ordinary General Public License.  We use
-this license for certain libraries in order to permit linking those
-libraries into non-free programs.
-
-  When a program is linked with a library, whether statically or using
-a shared library, the combination of the two is legally speaking a
-combined work, a derivative of the original library.  The ordinary
-General Public License therefore permits such linking only if the
-entire combination fits its criteria of freedom.  The Lesser General
-Public License permits more lax criteria for linking other code with
-the library.
-
-  We call this license the "Lesser" General Public License because it
-does Less to protect the user's freedom than the ordinary General
-Public License.  It also provides other free software developers Less
-of an advantage over competing non-free programs.  These disadvantages
-are the reason we use the ordinary General Public License for many
-libraries.  However, the Lesser license provides advantages in certain
-special circumstances.
-
-  For example, on rare occasions, there may be a special need to
-encourage the widest possible use of a certain library, so that it becomes
-a de-facto standard.  To achieve this, non-free programs must be
-allowed to use the library.  A more frequent case is that a free
-library does the same job as widely used non-free libraries.  In this
-case, there is little to gain by limiting the free library to free
-software only, so we use the Lesser General Public License.
-
-  In other cases, permission to use a particular library in non-free
-programs enables a greater number of people to use a large body of
-free software.  For example, permission to use the GNU C Library in
-non-free programs enables many more people to use the whole GNU
-operating system, as well as its variant, the GNU/Linux operating
-system.
-
-  Although the Lesser General Public License is Less protective of the
-users' freedom, it does ensure that the user of a program that is
-linked with the Library has the freedom and the wherewithal to run
-that program using a modified version of the Library.
-
-  The precise terms and conditions for copying, distribution and
-modification follow.  Pay close attention to the difference between a
-"work based on the library" and a "work that uses the library".  The
-former contains code derived from the library, whereas the latter must
-be combined with the library in order to run.
-
-          GNU LESSER GENERAL PUBLIC LICENSE
-   TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
-
-  0. This License Agreement applies to any software library or other
-program which contains a notice placed by the copyright holder or
-other authorized party saying it may be distributed under the terms of
-this Lesser General Public License (also called "this License").
-Each licensee is addressed as "you".
-
-  A "library" means a collection of software functions and/or data
-prepared so as to be conveniently linked with application programs
-(which use some of those functions and data) to form executables.
-
-  The "Library", below, refers to any such software library or work
-which has been distributed under these terms.  A "work based on the
-Library" means either the Library or any derivative work under
-copyright law: that is to say, a work containing the Library or a
-portion of it, either verbatim or with modifications and/or translated
-straightforwardly into another language.  (Hereinafter, translation is
-included without limitation in the term "modification".)
-
-  "Source code" for a work means the preferred form of the work for
-making modifications to it.  For a library, complete source code means
-all the source code for all modules it contains, plus any associated
-interface definition files, plus the scripts used to control compilation
-and installation of the library.
-
-  Activities other than copying, distribution and modification are not
-covered by this License; they are outside its scope.  The act of
-running a program using the Library is not restricted, and output from
-such a program is covered only if its contents constitute a work based
-on the Library (independent of the use of the Library in a tool for
-writing it).  Whether that is true depends on what the Library does
-and what the program that uses the Library does.
-
-  1. You may copy and distribute verbatim copies of the Library's
-complete source code as you receive it, in any medium, provided that
-you conspicuously and appropriately publish on each copy an
-appropriate copyright notice and disclaimer of warranty; keep intact
-all the notices that refer to this License and to the absence of any
-warranty; and distribute a copy of this License along with the
-Library.
-
-  You may charge a fee for the physical act of transferring a copy,
-and you may at your option offer warranty protection in exchange for a
-fee.
-
-  2. You may modify your copy or copies of the Library or any portion
-of it, thus forming a work based on the Library, and copy and
-distribute such modifications or work under the terms of Section 1
-above, provided that you also meet all of these conditions:
-
-    a) The modified work must itself be a software library.
-
-    b) You must cause the files modified to carry prominent notices
-    stating that you changed the files and the date of any change.
-
-    c) You must cause the whole of the work to be licensed at no
-    charge to all third parties under the terms of this License.
-
-    d) If a facility in the modified Library refers to a function or a
-    table of data to be supplied by an application program that uses
-    the facility, other than as an argument passed when the facility
-    is invoked, then you must make a good faith effort to ensure that,
-    in the event an application does not supply such function or
-    table, the facility still operates, and performs whatever part of
-    its purpose remains meaningful.
-
-    (For example, a function in a library to compute square roots has
-    a purpose that is entirely well-defined independent of the
-    application.  Therefore, Subsection 2d requires that any
-    application-supplied function or table used by this function must
-    be optional: if the application does not supply it, the square
-    root function must still compute square roots.)
-
-These requirements apply to the modified work as a whole.  If
-identifiable sections of that work are not derived from the Library,
-and can be reasonably considered independent and separate works in
-themselves, then this License, and its terms, do not apply to those
-sections when you distribute them as separate works.  But when you
-distribute the same sections as part of a whole which is a work based
-on the Library, the distribution of the whole must be on the terms of
-this License, whose permissions for other licensees extend to the
-entire whole, and thus to each and every part regardless of who wrote
-it.
-
-Thus, it is not the intent of this section to claim rights or contest
-your rights to work written entirely by you; rather, the intent is to
-exercise the right to control the distribution of derivative or
-collective works based on the Library.
-
-In addition, mere aggregation of another work not based on the Library
-with the Library (or with a work based on the Library) on a volume of
-a storage or distribution medium does not bring the other work under
-the scope of this License.
-
-  3. You may opt to apply the terms of the ordinary GNU General Public
-License instead of this License to a given copy of the Library.  To do
-this, you must alter all the notices that refer to this License, so
-that they refer to the ordinary GNU General Public License, version 2,
-instead of to this License.  (If a newer version than version 2 of the
-ordinary GNU General Public License has appeared, then you can specify
-that version instead if you wish.)  Do not make any other change in
-these notices.
-
-  Once this change is made in a given copy, it is irreversible for
-that copy, so the ordinary GNU General Public License applies to all
-subsequent copies and derivative works made from that copy.
-
-  This option is useful when you wish to copy part of the code of
-the Library into a program that is not a library.
-
-  4. You may copy and distribute the Library (or a portion or
-derivative of it, under Section 2) in object code or executable form
-under the terms of Sections 1 and 2 above provided that you accompany
-it with the complete corresponding machine-readable source code, which
-must be distributed under the terms of Sections 1 and 2 above on a
-medium customarily used for software interchange.
-
-  If distribution of object code is made by offering access to copy
-from a designated place, then offering equivalent access to copy the
-source code from the same place satisfies the requirement to
-distribute the source code, even though third parties are not
-compelled to copy the source along with the object code.
-
-  5. A program that contains no derivative of any portion of the
-Library, but is designed to work with the Library by being compiled or
-linked with it, is called a "work that uses the Library".  Such a
-work, in isolation, is not a derivative work of the Library, and
-therefore falls outside the scope of this License.
-
-  However, linking a "work that uses the Library" with the Library
-creates an executable that is a derivative of the Library (because it
-contains portions of the Library), rather than a "work that uses the
-library".  The executable is therefore covered by this License.
-Section 6 states terms for distribution of such executables.
-
-  When a "work that uses the Library" uses material from a header file
-that is part of the Library, the object code for the work may be a
-derivative work of the Library even though the source code is not.
-Whether this is true is especially significant if the work can be
-linked without the Library, or if the work is itself a library.  The
-threshold for this to be true is not precisely defined by law.
-
-  If such an object file uses only numerical parameters, data
-structure layouts and accessors, and small macros and small inline
-functions (ten lines or less in length), then the use of the object
-file is unrestricted, regardless of whether it is legally a derivative
-work.  (Executables containing this object code plus portions of the
-Library will still fall under Section 6.)
-
-  Otherwise, if the work is a derivative of the Library, you may
-distribute the object code for the work under the terms of Section 6.
-Any executables containing that work also fall under Section 6,
-whether or not they are linked directly with the Library itself.
-
-  6. As an exception to the Sections above, you may also combine or
-link a "work that uses the Library" with the Library to produce a
-work containing portions of the Library, and distribute that work
-under terms of your choice, provided that the terms permit
-modification of the work for the customer's own use and reverse
-engineering for debugging such modifications.
-
-  You must give prominent notice with each copy of the work that the
-Library is used in it and that the Library and its use are covered by
-this License.  You must supply a copy of this License.  If the work
-during execution displays copyright notices, you must include the
-copyright notice for the Library among them, as well as a reference
-directing the user to the copy of this License.  Also, you must do one
-of these things:
-
-    a) Accompany the work with the complete corresponding
-    machine-readable source code for the Library including whatever
-    changes were used in the work (which must be distributed under
-    Sections 1 and 2 above); and, if the work is an executable linked
-    with the Library, with the complete machine-readable "work that
-    uses the Library", as object code and/or source code, so that the
-    user can modify the Library and then relink to produce a modified
-    executable containing the modified Library.  (It is understood
-    that the user who changes the contents of definitions files in the
-    Library will not necessarily be able to recompile the application
-    to use the modified definitions.)
-
-    b) Use a suitable shared library mechanism for linking with the
-    Library.  A suitable mechanism is one that (1) uses at run time a
-    copy of the library already present on the user's computer system,
-    rather than copying library functions into the executable, and (2)
-    will operate properly with a modified version of the library, if
-    the user installs one, as long as the modified version is
-    interface-compatible with the version that the work was made with.
-
-    c) Accompany the work with a written offer, valid for at
-    least three years, to give the same user the materials
-    specified in Subsection 6a, above, for a charge no more
-    than the cost of performing this distribution.
-
-    d) If distribution of the work is made by offering access to copy
-    from a designated place, offer equivalent access to copy the above
-    specified materials from the same place.
-
-    e) Verify that the user has already received a copy of these
-    materials or that you have already sent this user a copy.
-
-  For an executable, the required form of the "work that uses the
-Library" must include any data and utility programs needed for
-reproducing the executable from it.  However, as a special exception,
-the materials to be distributed need not include anything that is
-normally distributed (in either source or binary form) with the major
-components (compiler, kernel, and so on) of the operating system on
-which the executable runs, unless that component itself accompanies
-the executable.
-
-  It may happen that this requirement contradicts the license
-restrictions of other proprietary libraries that do not normally
-accompany the operating system.  Such a contradiction means you cannot
-use both them and the Library together in an executable that you
-distribute.
-
-  7. You may place library facilities that are a work based on the
-Library side-by-side in a single library together with other library
-facilities not covered by this License, and distribute such a combined
-library, provided that the separate distribution of the work based on
-the Library and of the other library facilities is otherwise
-permitted, and provided that you do these two things:
-
-    a) Accompany the combined library with a copy of the same work
-    based on the Library, uncombined with any other library
-    facilities.  This must be distributed under the terms of the
-    Sections above.
-
-    b) Give prominent notice with the combined library of the fact
-    that part of it is a work based on the Library, and explaining
-    where to find the accompanying uncombined form of the same work.
-
-  8. You may not copy, modify, sublicense, link with, or distribute
-the Library except as expressly provided under this License.  Any
-attempt otherwise to copy, modify, sublicense, link with, or
-distribute the Library is void, and will automatically terminate your
-rights under this License.  However, parties who have received copies,
-or rights, from you under this License will not have their licenses
-terminated so long as such parties remain in full compliance.
-
-  9. You are not required to accept this License, since you have not
-signed it.  However, nothing else grants you permission to modify or
-distribute the Library or its derivative works.  These actions are
-prohibited by law if you do not accept this License.  Therefore, by
-modifying or distributing the Library (or any work based on the
-Library), you indicate your acceptance of this License to do so, and
-all its terms and conditions for copying, distributing or modifying
-the Library or works based on it.
-
-  10. Each time you redistribute the Library (or any work based on the
-Library), the recipient automatically receives a license from the
-original licensor to copy, distribute, link with or modify the Library
-subject to these terms and conditions.  You may not impose any further
-restrictions on the recipients' exercise of the rights granted herein.
-You are not responsible for enforcing compliance by third parties with
-this License.
-
-  11. If, as a consequence of a court judgment or allegation of patent
-infringement or for any other reason (not limited to patent issues),
-conditions are imposed on you (whether by court order, agreement or
-otherwise) that contradict the conditions of this License, they do not
-excuse you from the conditions of this License.  If you cannot
-distribute so as to satisfy simultaneously your obligations under this
-License and any other pertinent obligations, then as a consequence you
-may not distribute the Library at all.  For example, if a patent
-license would not permit royalty-free redistribution of the Library by
-all those who receive copies directly or indirectly through you, then
-the only way you could satisfy both it and this License would be to
-refrain entirely from distribution of the Library.
-
-If any portion of this section is held invalid or unenforceable under any
-particular circumstance, the balance of the section is intended to apply,
-and the section as a whole is intended to apply in other circumstances.
-
-It is not the purpose of this section to induce you to infringe any
-patents or other property right claims or to contest validity of any
-such claims; this section has the sole purpose of protecting the
-integrity of the free software distribution system which is
-implemented by public license practices.  Many people have made
-generous contributions to the wide range of software distributed
-through that system in reliance on consistent application of that
-system; it is up to the author/donor to decide if he or she is willing
-to distribute software through any other system and a licensee cannot
-impose that choice.
-
-This section is intended to make thoroughly clear what is believed to
-be a consequence of the rest of this License.
-
-  12. If the distribution and/or use of the Library is restricted in
-certain countries either by patents or by copyrighted interfaces, the
-original copyright holder who places the Library under this License may add
-an explicit geographical distribution limitation excluding those countries,
-so that distribution is permitted only in or among countries not thus
-excluded.  In such case, this License incorporates the limitation as if
-written in the body of this License.
-
-  13. The Free Software Foundation may publish revised and/or new
-versions of the Lesser General Public License from time to time.
-Such new versions will be similar in spirit to the present version,
-but may differ in detail to address new problems or concerns.
-
-Each version is given a distinguishing version number.  If the Library
-specifies a version number of this License which applies to it and
-"any later version", you have the option of following the terms and
-conditions either of that version or of any later version published by
-the Free Software Foundation.  If the Library does not specify a
-license version number, you may choose any version ever published by
-the Free Software Foundation.
-
-  14. If you wish to incorporate parts of the Library into other free
-programs whose distribution conditions are incompatible with these,
-write to the author to ask for permission.  For software which is
-copyrighted by the Free Software Foundation, write to the Free
-Software Foundation; we sometimes make exceptions for this.  Our
-decision will be guided by the two goals of preserving the free status
-of all derivatives of our free software and of promoting the sharing
-and reuse of software generally.
-
-                NO WARRANTY
-
-  15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO
-WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW.
-EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR
-OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY
-KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE
-IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
-PURPOSE.  THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE
-LIBRARY IS WITH YOU.  SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME
-THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
-
-  16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN
-WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY
-AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU
-FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR
-CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE
-LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING
-RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A
-FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF
-SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
-DAMAGES.
-
-             END OF TERMS AND CONDITIONS
-
-           How to Apply These Terms to Your New Libraries
-
-  If you develop a new library, and you want it to be of the greatest
-possible use to the public, we recommend making it free software that
-everyone can redistribute and change.  You can do so by permitting
-redistribution under these terms (or, alternatively, under the terms of the
-ordinary General Public License).
-
-  To apply these terms, attach the following notices to the library.  It is
-safest to attach them to the start of each source file to most effectively
-convey the exclusion of warranty; and each file should have at least the
-"copyright" line and a pointer to where the full notice is found.
-
-    <one line to give the library's name and a brief idea of what it does.>
-    Copyright (C) <year>  <name of author>
-
-    This library is free software; you can redistribute it and/or
-    modify it under the terms of the GNU Lesser General Public
-    License as published by the Free Software Foundation; either
-    version 2.1 of the License, or (at your option) any later version.
-
-    This library is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-    Lesser General Public License for more details.
-
-    You should have received a copy of the GNU Lesser General Public
-    License along with this library; if not, write to the Free Software
-    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
-
-Also add information on how to contact you by electronic and paper mail.
-
-You should also get your employer (if you work as a programmer) or your
-school, if any, to sign a "copyright disclaimer" for the library, if
-necessary.  Here is a sample; alter the names:
-
-  Yoyodyne, Inc., hereby disclaims all copyright interest in the
-  library `Frob' (a library for tweaking knobs) written by James Random Hacker.
-
-  <signature of Ty Coon>, 1 April 1990
-  Ty Coon, President of Vice
-
-That's all there is to it!
-
-
-------------------
-
-Files:
-
-The version of Rhino used in GWT is licensed under a dual license,
-Netscape Public License 1.1 / GNU General Public License.
-The text of the Netscape Public License
-is provided below (http://website-archive.mozilla.org/www.mozilla.org/mpl/MPL/NPL/1.1/):
-
-AMENDMENTS
-
-The Netscape Public License Version 1.1 ("NPL") consists of the
-Mozilla Public License Version 1.1 with the following Amendments,
-including Exhibit A-Netscape Public License.  Files identified with
-"Exhibit A-Netscape Public License" are governed by the Netscape
-Public License Version 1.1.
-
-Additional Terms applicable to the Netscape Public License.
-
-    I. Effect.
-
-       These additional terms described in this Netscape Public
-       License -- Amendments shall apply to the Mozilla Communicator
-       client code and to all Covered Code under this License.
-
-   II. ''Netscape's Branded Code'' means Covered Code that Netscape
-       distributes and/or permits others to distribute under one or
-       more trademark(s) which are controlled by Netscape but which
-       are not licensed for use under this License.
-
-  III. Netscape and logo.
-
-       This License does not grant any rights to use the trademarks
-       "Netscape'', the "Netscape N and horizon'' logo or the
-       "Netscape lighthouse" logo, "Netcenter", "Gecko", "Java" or
-       "JavaScript", "Smart Browsing" even if such marks are included
-       in the Original Code or Modifications.
-
-   IV. Inability to Comply Due to Contractual Obligation.
-
-       Prior to licensing the Original Code under this License,
-       Netscape has licensed third party code for use in Netscape's
-       Branded Code. To the extent that Netscape is limited
-       contractually from making such third party code available under
-       this License, Netscape may choose to reintegrate such code into
-       Covered Code without being required to distribute such code in
-       Source Code form, even if such code would otherwise be
-       considered ''Modifications'' under this License.
-
-    V. Use of Modifications and Covered Code by Initial Developer.
-
-        V.1. In General.
-
-             The obligations of Section 3 apply to Netscape, except to
-             the extent specified in this Amendment, Section V.2 and
-             V.3.
-
-        V.2. Other Products.
-
-             Netscape may include Covered Code in products other than
-             the Netscape's Branded Code which are released by
-             Netscape during the two (2) years following the release
-             date of the Original Code, without such additional
-             products becoming subject to the terms of this License,
-             and may license such additional products on different
-             terms from those contained in this License.
-
-        V.3. Alternative Licensing.
-
-             Netscape may license the Source Code of Netscape's
-             Branded Code, including Modifications incorporated
-             therein, without such Netscape Branded Code becoming
-             subject to the terms of this License, and may license
-             such Netscape Branded Code on different terms from those
-             contained in this License.
-
-    VI. Litigation.
-
-        Notwithstanding the limitations of Section 11 above, the
-        provisions regarding litigation in Section 11(a), (b) and (c)
-        of the License shall apply to all disputes relating to this
-        License.
-
-
-EXHIBIT A-Netscape Public License.
-
-
-    ''The contents of this file are subject to the Netscape Public
-    License Version 1.1 (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.mozilla.org/NPL/
-
-    Software distributed under the License is distributed on an "AS
-    IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
-    implied. See the License for the specific language governing
-    rights and limitations under the License.
-
-    The Original Code is Mozilla Communicator client code, released
-    March 31, 1998.
-
-    The Initial Developer of the Original Code is Netscape
-    Communications Corporation. Portions created by Netscape are
-    Copyright (C) 1998-1999 Netscape Communications Corporation. All
-    Rights Reserved.
-
-    Contributor(s): ______________________________________.
-
-
-    Alternatively, the contents of this file may be used under the
-    terms of the _____ license (the �[___] License�), in which case
-    the provisions of [______] License are applicable instead of those
-    above.  If you wish to allow use of your version of this file only
-    under the terms of the [____] License and not to allow others to
-    use your version of this file under the NPL, indicate your
-    decision by deleting the provisions above and replace them with
-    the notice and other provisions required by the [___] License.  If
-    you do not delete the provisions above, a recipient may use your
-    version of this file under either the NPL or the [___] License."
-
-
-----------------------
-
-MOZILLA PUBLIC LICENSE
-Version 1.1
-
-1. Definitions.
-
-    1.0.1. "Commercial Use" means distribution or otherwise making the
-    Covered Code available to a third party.
-
-    1.1. ''Contributor'' means each entity that creates or contributes
-    to the creation of Modifications.
-
-    1.2. ''Contributor Version'' means the combination of the Original
-    Code, prior Modifications used by a Contributor, and the
-    Modifications made by that particular Contributor.
-
-    1.3. ''Covered Code'' means the Original Code or Modifications or
-    the combination of the Original Code and Modifications, in each
-    case including portions thereof.
-
-    1.4. ''Electronic Distribution Mechanism'' means a mechanism
-    generally accepted in the software development community for the
-    electronic transfer of data.
-
-    1.5. ''Executable'' means Covered Code in any form other than Source Code.
-
-    1.6. ''Initial Developer'' means the individual or entity
-    identified as the Initial Developer in the Source Code notice
-    required by Exhibit A.
-
-    1.7. ''Larger Work'' means a work which combines Covered Code or
-    portions thereof with code not governed by the terms of this
-    License.
-
-    1.8. ''License'' means this document.
-
-    1.8.1. "Licensable" means having the right to grant, to the
-    maximum extent possible, whether at the time of the initial grant
-    or subsequently acquired, any and all of the rights conveyed
-    herein.
-
-    1.9. ''Modifications'' means any addition to or deletion from the
-    substance or structure of either the Original Code or any previous
-    Modifications. When Covered Code is released as a series of files,
-    a Modification is:
-
-        A. Any addition to or deletion from the contents of a file
-        containing Original Code or previous Modifications.
-
-        B. Any new file that contains any part of the Original Code or
-        previous Modifications.
-
-    1.10. ''Original Code'' means Source Code of computer software
-    code which is described in the Source Code notice required by
-    Exhibit A as Original Code, and which, at the time of its release
-    under this License is not already Covered Code governed by this
-    License.
-
-    1.10.1. "Patent Claims" means any patent claim(s), now owned or
-    hereafter acquired, including without limitation, method, process,
-    and apparatus claims, in any patent Licensable by grantor.
-
-    1.11. ''Source Code'' means the preferred form of the Covered Code
-    for making modifications to it, including all modules it contains,
-    plus any associated interface definition files, scripts used to
-    control compilation and installation of an Executable, or source
-    code differential comparisons against either the Original Code or
-    another well known, available Covered Code of the Contributor's
-    choice. The Source Code can be in a compressed or archival form,
-    provided the appropriate decompression or de-archiving software is
-    widely available for no charge.
-
-    1.12. "You'' (or "Your") means an individual or a legal entity
-    exercising rights under, and complying with all of the terms of,
-    this License or a future version of this License issued under
-    Section 6.1. For legal entities, "You'' includes any entity which
-    controls, is controlled by, or is under common control with
-    You. For purposes of this definition, "control'' means (a) the
-    power, direct or indirect, to cause the direction or management of
-    such entity, whether by contract or otherwise, or (b) ownership of
-    more than fifty percent (50%) of the outstanding shares or
-    beneficial ownership of such entity.
-
-2. Source Code License.
-
-    2.1. The Initial Developer Grant.
-
-    The Initial Developer hereby grants You a world-wide,
-    royalty-free, non-exclusive license, subject to third party
-    intellectual property claims:
-
-        (a) under intellectual property rights (other than patent or
-        trademark) Licensable by Initial Developer to use, reproduce,
-        modify, display, perform, sublicense and distribute the
-        Original Code (or portions thereof) with or without
-        Modifications, and/or as part of a Larger Work; and
-
-        (b) under Patents Claims infringed by the making, using or
-        selling of Original Code, to make, have made, use, practice,
-        sell, and offer for sale, and/or otherwise dispose of the
-        Original Code (or portions thereof).
-
-        (c) the licenses granted in this Section 2.1(a) and (b) are
-        effective on the date Initial Developer first distributes
-        Original Code under the terms of this License.
-
-        (d) Notwithstanding Section 2.1(b) above, no patent license is
-        granted: 1) for code that You delete from the Original Code;
-        2) separate from the Original Code; or 3) for infringements
-        caused by: i) the modification of the Original Code or ii) the
-        combination of the Original Code with other software or
-        devices.
-
-    2.2. Contributor Grant.
-
-    Subject to third party intellectual property claims, each
-    Contributor hereby grants You a world-wide, royalty-free,
-    non-exclusive license
-
-        (a) under intellectual property rights (other than patent or
-        trademark) Licensable by Contributor, to use, reproduce,
-        modify, display, perform, sublicense and distribute the
-        Modifications created by such Contributor (or portions
-        thereof) either on an unmodified basis, with other
-        Modifications, as Covered Code and/or as part of a Larger
-        Work; and
-
-        (b) under Patent Claims infringed by the making, using, or
-        selling of Modifications made by that Contributor either alone
-        and/or in combination with its Contributor Version (or
-        portions of such combination), to make, use, sell, offer for
-        sale, have made, and/or otherwise dispose of: 1) Modifications
-        made by that Contributor (or portions thereof); and 2) the
-        combination of Modifications made by that Contributor with its
-        Contributor Version (or portions of such combination).
-
-        (c) the licenses granted in Sections 2.2(a) and 2.2(b) are
-        effective on the date Contributor first makes Commercial Use
-        of the Covered Code.
-
-        (d) Notwithstanding Section 2.2(b) above, no patent license is
-        granted: 1) for any code that Contributor has deleted from the
-        Contributor Version; 2) separate from the Contributor Version;
-        3) for infringements caused by: i) third party modifications
-        of Contributor Version or ii) the combination of Modifications
-        made by that Contributor with other software (except as part
-        of the Contributor Version) or other devices; or 4) under
-        Patent Claims infringed by Covered Code in the absence of
-        Modifications made by that Contributor.
-
-
-3. Distribution Obligations.
-
-    3.1. Application of License.
-
-    The Modifications which You create or to which You contribute are
-    governed by the terms of this License, including without
-    limitation Section 2.2. The Source Code version of Covered Code
-    may be distributed only under the terms of this License or a
-    future version of this License released under Section 6.1, and You
-    must include a copy of this License with every copy of the Source
-    Code You distribute. You may not offer or impose any terms on any
-    Source Code version that alters or restricts the applicable
-    version of this License or the recipients' rights
-    hereunder. However, You may include an additional document
-    offering the additional rights described in Section 3.5.
-
-    3.2. Availability of Source Code.
-
-    Any Modification which You create or to which You contribute must
-    be made available in Source Code form under the terms of this
-    License either on the same media as an Executable version or via
-    an accepted Electronic Distribution Mechanism to anyone to whom
-    you made an Executable version available; and if made available
-    via Electronic Distribution Mechanism, must remain available for
-    at least twelve (12) months after the date it initially became
-    available, or at least six (6) months after a subsequent version
-    of that particular Modification has been made available to such
-    recipients. You are responsible for ensuring that the Source Code
-    version remains available even if the Electronic Distribution
-    Mechanism is maintained by a third party.
-
-    3.3. Description of Modifications.
-
-    You must cause all Covered Code to which You contribute to contain
-    a file documenting the changes You made to create that Covered
-    Code and the date of any change. You must include a prominent
-    statement that the Modification is derived, directly or
-    indirectly, from Original Code provided by the Initial Developer
-    and including the name of the Initial Developer in (a) the Source
-    Code, and (b) in any notice in an Executable version or related
-    documentation in which You describe the origin or ownership of the
-    Covered Code.
-
-    3.4. Intellectual Property Matters
-
-        (a) Third Party Claims.
-
-        If Contributor has knowledge that a license under a third
-        party's intellectual property rights is required to exercise
-        the rights granted by such Contributor under Sections 2.1 or
-        2.2, Contributor must include a text file with the Source Code
-        distribution titled "LEGAL'' which describes the claim and the
-        party making the claim in sufficient detail that a recipient
-        will know whom to contact. If Contributor obtains such
-        knowledge after the Modification is made available as
-        described in Section 3.2, Contributor shall promptly modify
-        the LEGAL file in all copies Contributor makes available
-        thereafter and shall take other steps (such as notifying
-        appropriate mailing lists or newsgroups) reasonably calculated
-        to inform those who received the Covered Code that new
-        knowledge has been obtained.
-
-        (b) Contributor APIs.
-
-        If Contributor's Modifications include an application
-        programming interface and Contributor has knowledge of patent
-        licenses which are reasonably necessary to implement that API,
-        Contributor must also include this information in the LEGAL
-        file.
-
-        (c)    Representations.
-
-        Contributor represents that, except as disclosed pursuant to
-        Section 3.4(a) above, Contributor believes that Contributor's
-        Modifications are Contributor's original creation(s) and/or
-        Contributor has sufficient rights to grant the rights conveyed
-        by this License.
-
-
-    3.5. Required Notices.
-
-    You must duplicate the notice in Exhibit A in each file of the
-    Source Code.  If it is not possible to put such notice in a
-    particular Source Code file due to its structure, then You must
-    include such notice in a location (such as a relevant directory)
-    where a user would be likely to look for such a notice.  If You
-    created one or more Modification(s) You may add your name as a
-    Contributor to the notice described in Exhibit A.  You must also
-    duplicate this License in any documentation for the Source Code
-    where You describe recipients' rights or ownership rights relating
-    to Covered Code.  You may choose to offer, and to charge a fee
-    for, warranty, support, indemnity or liability obligations to one
-    or more recipients of Covered Code. However, You may do so only on
-    Your own behalf, and not on behalf of the Initial Developer or any
-    Contributor. You must make it absolutely clear than any such
-    warranty, support, indemnity or liability obligation is offered by
-    You alone, and You hereby agree to indemnify the Initial Developer
-    and every Contributor for any liability incurred by the Initial
-    Developer or such Contributor as a result of warranty, support,
-    indemnity or liability terms You offer.
-
-    3.6. Distribution of Executable Versions.
-
-    You may distribute Covered Code in Executable form only if the
-    requirements of Section 3.1-3.5 have been met for that Covered
-    Code, and if You include a notice stating that the Source Code
-    version of the Covered Code is available under the terms of this
-    License, including a description of how and where You have
-    fulfilled the obligations of Section 3.2. The notice must be
-    conspicuously included in any notice in an Executable version,
-    related documentation or collateral in which You describe
-    recipients' rights relating to the Covered Code. You may
-    distribute the Executable version of Covered Code or ownership
-    rights under a license of Your choice, which may contain terms
-    different from this License, provided that You are in compliance
-    with the terms of this License and that the license for the
-    Executable version does not attempt to limit or alter the
-    recipient's rights in the Source Code version from the rights set
-    forth in this License. If You distribute the Executable version
-    under a different license You must make it absolutely clear that
-    any terms which differ from this License are offered by You alone,
-    not by the Initial Developer or any Contributor. You hereby agree
-    to indemnify the Initial Developer and every Contributor for any
-    liability incurred by the Initial Developer or such Contributor as
-    a result of any such terms You offer.
-
-    3.7. Larger Works.
-
-    You may create a Larger Work by combining Covered Code with other
-    code not governed by the terms of this License and distribute the
-    Larger Work as a single product. In such a case, You must make
-    sure the requirements of this License are fulfilled for the
-    Covered Code.
-
-4. Inability to Comply Due to Statute or Regulation.
-
-    If it is impossible for You to comply with any of the terms of
-    this License with respect to some or all of the Covered Code due
-    to statute, judicial order, or regulation then You must: (a)
-    comply with the terms of this License to the maximum extent
-    possible; and (b) describe the limitations and the code they
-    affect. Such description must be included in the LEGAL file
-    described in Section 3.4 and must be included with all
-    distributions of the Source Code. Except to the extent prohibited
-    by statute or regulation, such description must be sufficiently
-    detailed for a recipient of ordinary skill to be able to
-    understand it.
-
-5. Application of this License.
-
-    This License applies to code to which the Initial Developer has
-    attached the notice in Exhibit A and to related Covered Code.
-
-6. Versions of the License.
-
-    6.1. New Versions.
-
-    Netscape Communications Corporation (''Netscape'') may publish
-    revised and/or new versions of the License from time to time. Each
-    version will be given a distinguishing version number.
-
-    6.2. Effect of New Versions.
-
-    Once Covered Code has been published under a particular version of
-    the License, You may always continue to use it under the terms of
-    that version. You may also choose to use such Covered Code under
-    the terms of any subsequent version of the License published by
-    Netscape. No one other than Netscape has the right to modify the
-    terms applicable to Covered Code created under this License.
-
-    6.3. Derivative Works.
-
-    If You create or use a modified version of this License (which you
-    may only do in order to apply it to code which is not already
-    Covered Code governed by this License), You must (a) rename Your
-    license so that the phrases ''Mozilla'', ''MOZILLAPL'', ''MOZPL'',
-    ''Netscape'', "MPL", ''NPL'' or any confusingly similar phrase do
-    not appear in your license (except to note that your license
-    differs from this License) and (b) otherwise make it clear that
-    Your version of the license contains terms which differ from the
-    Mozilla Public License and Netscape Public License. (Filling in
-    the name of the Initial Developer, Original Code or Contributor in
-    the notice described in Exhibit A shall not of themselves be
-    deemed to be modifications of this License.)
-
-7. DISCLAIMER OF WARRANTY.
-
-    COVERED CODE IS PROVIDED UNDER THIS LICENSE ON AN "AS IS'' BASIS,
-    WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED,
-    INCLUDING, WITHOUT LIMITATION, WARRANTIES THAT THE COVERED CODE IS
-    FREE OF DEFECTS, MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE OR
-    NON-INFRINGING. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE
-    OF THE COVERED CODE IS WITH YOU. SHOULD ANY COVERED CODE PROVE
-    DEFECTIVE IN ANY RESPECT, YOU (NOT THE INITIAL DEVELOPER OR ANY
-    OTHER CONTRIBUTOR) ASSUME THE COST OF ANY NECESSARY SERVICING,
-    REPAIR OR CORRECTION. THIS DISCLAIMER OF WARRANTY CONSTITUTES AN
-    ESSENTIAL PART OF THIS LICENSE. NO USE OF ANY COVERED CODE IS
-    AUTHORIZED HEREUNDER EXCEPT UNDER THIS DISCLAIMER.
-
-8. TERMINATION.
-
-    8.1.  This License and the rights granted hereunder will terminate
-    automatically if You fail to comply with terms herein and fail to
-    cure such breach within 30 days of becoming aware of the
-    breach. All sublicenses to the Covered Code which are properly
-    granted shall survive any termination of this License. Provisions
-    which, by their nature, must remain in effect beyond the
-    termination of this License shall survive.
-
-    8.2.  If You initiate litigation by asserting a patent
-    infringement claim (excluding declatory judgment actions) against
-    Initial Developer or a Contributor (the Initial Developer or
-    Contributor against whom You file such action is referred to as
-    "Participant") alleging that:
-
-    (a) such Participant's Contributor Version directly or indirectly
-    infringes any patent, then any and all rights granted by such
-    Participant to You under Sections 2.1 and/or 2.2 of this License
-    shall, upon 60 days notice from Participant terminate
-    prospectively, unless if within 60 days after receipt of notice
-    You either: (i) agree in writing to pay Participant a mutually
-    agreeable reasonable royalty for Your past and future use of
-    Modifications made by such Participant, or (ii) withdraw Your
-    litigation claim with respect to the Contributor Version against
-    such Participant.  If within 60 days of notice, a reasonable
-    royalty and payment arrangement are not mutually agreed upon in
-    writing by the parties or the litigation claim is not withdrawn,
-    the rights granted by Participant to You under Sections 2.1 and/or
-    2.2 automatically terminate at the expiration of the 60 day notice
-    period specified above.
-
-    (b) any software, hardware, or device, other than such
-    Participant's Contributor Version, directly or indirectly
-    infringes any patent, then any rights granted to You by such
-    Participant under Sections 2.1(b) and 2.2(b) are revoked effective
-    as of the date You first made, used, sold, distributed, or had
-    made, Modifications made by that Participant.
-
-    8.3.  If You assert a patent infringement claim against
-    Participant alleging that such Participant's Contributor Version
-    directly or indirectly infringes any patent where such claim is
-    resolved (such as by license or settlement) prior to the
-    initiation of patent infringement litigation, then the reasonable
-    value of the licenses granted by such Participant under Sections
-    2.1 or 2.2 shall be taken into account in determining the amount
-    or value of any payment or license.
-
-    8.4.  In the event of termination under Sections 8.1 or 8.2 above,
-    all end user license agreements (excluding distributors and
-    resellers) which have been validly granted by You or any
-    distributor hereunder prior to termination shall survive
-    termination.
-
-9. LIMITATION OF LIABILITY.
-
-    UNDER NO CIRCUMSTANCES AND UNDER NO LEGAL THEORY, WHETHER TORT
-    (INCLUDING NEGLIGENCE), CONTRACT, OR OTHERWISE, SHALL YOU, THE
-    INITIAL DEVELOPER, ANY OTHER CONTRIBUTOR, OR ANY DISTRIBUTOR OF
-    COVERED CODE, OR ANY SUPPLIER OF ANY OF SUCH PARTIES, BE LIABLE TO
-    ANY PERSON FOR ANY INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL
-    DAMAGES OF ANY CHARACTER INCLUDING, WITHOUT LIMITATION, DAMAGES
-    FOR LOSS OF GOODWILL, WORK STOPPAGE, COMPUTER FAILURE OR
-    MALFUNCTION, OR ANY AND ALL OTHER COMMERCIAL DAMAGES OR LOSSES,
-    EVEN IF SUCH PARTY SHALL HAVE BEEN INFORMED OF THE POSSIBILITY OF
-    SUCH DAMAGES. THIS LIMITATION OF LIABILITY SHALL NOT APPLY TO
-    LIABILITY FOR DEATH OR PERSONAL INJURY RESULTING FROM SUCH PARTY'S
-    NEGLIGENCE TO THE EXTENT APPLICABLE LAW PROHIBITS SUCH
-    LIMITATION. SOME JURISDICTIONS DO NOT ALLOW THE EXCLUSION OR
-    LIMITATION OF INCIDENTAL OR CONSEQUENTIAL DAMAGES, SO THIS
-    EXCLUSION AND LIMITATION MAY NOT APPLY TO YOU.
-
-10. U.S. GOVERNMENT END USERS.
-
-    The Covered Code is a ''commercial item,'' as that term is defined
-    in 48 C.F.R. 2.101 (Oct. 1995), consisting of ''commercial
-    computer software'' and ''commercial computer software
-    documentation,'' as such terms are used in 48 C.F.R. 12.212
-    (Sept. 1995). Consistent with 48 C.F.R. 12.212 and 48
-    C.F.R. 227.7202-1 through 227.7202-4 (June 1995), all
-    U.S. Government End Users acquire Covered Code with only those
-    rights set forth herein.
-
-11. MISCELLANEOUS.
-
-    This License represents the complete agreement concerning subject
-    matter hereof. If any provision of this License is held to be
-    unenforceable, such provision shall be reformed only to the extent
-    necessary to make it enforceable. This License shall be governed
-    by California law provisions (except to the extent applicable law,
-    if any, provides otherwise), excluding its conflict-of-law
-    provisions. With respect to disputes in which at least one party
-    is a citizen of, or an entity chartered or registered to do
-    business in the United States of America, any litigation relating
-    to this License shall be subject to the jurisdiction of the
-    Federal Courts of the Northern District of California, with venue
-    lying in Santa Clara County, California, with the losing party
-    responsible for costs, including without limitation, court costs
-    and reasonable attorneys' fees and expenses. The application of
-    the United Nations Convention on Contracts for the International
-    Sale of Goods is expressly excluded. Any law or regulation which
-    provides that the language of a contract shall be construed
-    against the drafter shall not apply to this License.
-
-12. RESPONSIBILITY FOR CLAIMS.
-
-    As between Initial Developer and the Contributors, each party is
-    responsible for claims and damages arising, directly or
-    indirectly, out of its utilization of rights under this License
-    and You agree to work with Initial Developer and Contributors to
-    distribute such responsibility on an equitable basis. Nothing
-    herein is intended or shall be deemed to constitute any admission
-    of liability.
-
-13. MULTIPLE-LICENSED CODE.
-
-    Initial Developer may designate portions of the Covered Code as
-    �Multiple-Licensed�.  �Multiple-Licensed� means that the Initial
-    Developer permits you to utilize portions of the Covered Code
-    under Your choice of the NPL or the alternative licenses, if any,
-    specified by the Initial Developer in the file described in
-    Exhibit A.
-
-
-EXHIBIT A -Mozilla Public License.
-
-    ``The contents of this file are subject to the Mozilla Public
-    License Version 1.1 (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.mozilla.org/MPL/
-
-    Software distributed under the License is distributed on an "AS
-    IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
-    implied. See the License for the specific language governing
-    rights and limitations under the License.
-
-    The Original Code is ______________________________________.
-
-    The Initial Developer of the Original Code is
-     ________________________. Portions created by
-     ______________________ are Copyright (C) ______
-     _______________________. All Rights Reserved.
-
-    Contributor(s): ______________________________________.
-
-    Alternatively, the contents of this file may be used under the
-    terms of the _____ license (the �[___] License�), in which case
-    the provisions of [______] License are applicable instead of those
-    above.  If you wish to allow use of your version of this file only
-    under the terms of the [____] License and not to allow others to
-    use your version of this file under the MPL, indicate your
-    decision by deleting the provisions above and replace them with
-    the notice and other provisions required by the [___] License.  If
-    you do not delete the provisions above, a recipient may use your
-    version of this file under either the MPL or the [___] License."
-
-    [NOTE: The text of this Exhibit A may differ slightly from the
-    text of the notices in the Source Code files of the Original
-    Code. You should use the text of this Exhibit A rather than the
-    text found in the Original Code Source Code for Your
-    Modifications.]
-============================================================================
-
-	  GNU GENERAL PUBLIC LICENSE
-	     Version 2, June 1991
-
-   Copyright (C) 1989, 1991 Free Software Foundation, Inc.,
-   51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
-   Everyone is permitted to copy and distribute verbatim copies
-   of this license document, but changing it is not allowed.
-
-	    Preamble
-
-    The licenses for most software are designed to take away your
-  freedom to share and change it.  By contrast, the GNU General Public
-  License is intended to guarantee your freedom to share and change free
-  software--to make sure the software is free for all its users.  This
-  General Public License applies to most of the Free Software
-  Foundation's software and to any other program whose authors commit to
-  using it.  (Some other Free Software Foundation software is covered by
-  the GNU Lesser General Public License instead.)  You can apply it to
-  your programs, too.
-
-    When we speak of free software, we are referring to freedom, not
-  price.  Our General Public Licenses are designed to make sure that you
-  have the freedom to distribute copies of free software (and charge for
-  this service if you wish), that you receive source code or can get it
-  if you want it, that you can change the software or use pieces of it
-  in new free programs; and that you know you can do these things.
-
-    To protect your rights, we need to make restrictions that forbid
-  anyone to deny you these rights or to ask you to surrender the rights.
-  These restrictions translate to certain responsibilities for you if you
-  distribute copies of the software, or if you modify it.
-
-    For example, if you distribute copies of such a program, whether
-  gratis or for a fee, you must give the recipients all the rights that
-  you have.  You must make sure that they, too, receive or can get the
-  source code.  And you must show them these terms so they know their
-  rights.
-
-    We protect your rights with two steps: (1) copyright the software, and
-  (2) offer you this license which gives you legal permission to copy,
-  distribute and/or modify the software.
-
-    Also, for each author's protection and ours, we want to make certain
-  that everyone understands that there is no warranty for this free
-  software.  If the software is modified by someone else and passed on, we
-  want its recipients to know that what they have is not the original, so
-  that any problems introduced by others will not reflect on the original
-  authors' reputations.
-
-    Finally, any free program is threatened constantly by software
-  patents.  We wish to avoid the danger that redistributors of a free
-  program will individually obtain patent licenses, in effect making the
-  program proprietary.  To prevent this, we have made it clear that any
-  patent must be licensed for everyone's free use or not licensed at all.
-
-    The precise terms and conditions for copying, distribution and
-  modification follow.
-
-	  GNU GENERAL PUBLIC LICENSE
-     TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
-
-    0. This License applies to any program or other work which contains
-  a notice placed by the copyright holder saying it may be distributed
-  under the terms of this General Public License.  The "Program", below,
-  refers to any such program or work, and a "work based on the Program"
-  means either the Program or any derivative work under copyright law:
-  that is to say, a work containing the Program or a portion of it,
-  either verbatim or with modifications and/or translated into another
-  language.  (Hereinafter, translation is included without limitation in
-  the term "modification".)  Each licensee is addressed as "you".
-
-  Activities other than copying, distribution and modification are not
-  covered by this License; they are outside its scope.  The act of
-  running the Program is not restricted, and the output from the Program
-  is covered only if its contents constitute a work based on the
-  Program (independent of having been made by running the Program).
-  Whether that is true depends on what the Program does.
-
-    1. You may copy and distribute verbatim copies of the Program's
-  source code as you receive it, in any medium, provided that you
-  conspicuously and appropriately publish on each copy an appropriate
-  copyright notice and disclaimer of warranty; keep intact all the
-  notices that refer to this License and to the absence of any warranty;
-  and give any other recipients of the Program a copy of this License
-  along with the Program.
-
-  You may charge a fee for the physical act of transferring a copy, and
-  you may at your option offer warranty protection in exchange for a fee.
-
-    2. You may modify your copy or copies of the Program or any portion
-  of it, thus forming a work based on the Program, and copy and
-  distribute such modifications or work under the terms of Section 1
-  above, provided that you also meet all of these conditions:
-
-      a) You must cause the modified files to carry prominent notices
-      stating that you changed the files and the date of any change.
-
-      b) You must cause any work that you distribute or publish, that in
-      whole or in part contains or is derived from the Program or any
-      part thereof, to be licensed as a whole at no charge to all third
-      parties under the terms of this License.
-
-      c) If the modified program normally reads commands interactively
-      when run, you must cause it, when started running for such
-      interactive use in the most ordinary way, to print or display an
-      announcement including an appropriate copyright notice and a
-      notice that there is no warranty (or else, saying that you provide
-      a warranty) and that users may redistribute the program under
-      these conditions, and telling the user how to view a copy of this
-      License.  (Exception: if the Program itself is interactive but
-      does not normally print such an announcement, your work based on
-      the Program is not required to print an announcement.)
-
-  These requirements apply to the modified work as a whole.  If
-  identifiable sections of that work are not derived from the Program,
-  and can be reasonably considered independent and separate works in
-  themselves, then this License, and its terms, do not apply to those
-  sections when you distribute them as separate works.  But when you
-  distribute the same sections as part of a whole which is a work based
-  on the Program, the distribution of the whole must be on the terms of
-  this License, whose permissions for other licensees extend to the
-  entire whole, and thus to each and every part regardless of who wrote it.
-
-  Thus, it is not the intent of this section to claim rights or contest
-  your rights to work written entirely by you; rather, the intent is to
-  exercise the right to control the distribution of derivative or
-  collective works based on the Program.
-
-  In addition, mere aggregation of another work not based on the Program
-  with the Program (or with a work based on the Program) on a volume of
-  a storage or distribution medium does not bring the other work under
-  the scope of this License.
-
-    3. You may copy and distribute the Program (or a work based on it,
-  under Section 2) in object code or executable form under the terms of
-  Sections 1 and 2 above provided that you also do one of the following:
-
-      a) Accompany it with the complete corresponding machine-readable
-      source code, which must be distributed under the terms of Sections
-      1 and 2 above on a medium customarily used for software interchange; or,
-
-      b) Accompany it with a written offer, valid for at least three
-      years, to give any third party, for a charge no more than your
-      cost of physically performing source distribution, a complete
-      machine-readable copy of the corresponding source code, to be
-      distributed under the terms of Sections 1 and 2 above on a medium
-      customarily used for software interchange; or,
-
-      c) Accompany it with the information you received as to the offer
-      to distribute corresponding source code.  (This alternative is
-      allowed only for noncommercial distribution and only if you
-      received the program in object code or executable form with such
-      an offer, in accord with Subsection b above.)
-
-  The source code for a work means the preferred form of the work for
-  making modifications to it.  For an executable work, complete source
-  code means all the source code for all modules it contains, plus any
-  associated interface definition files, plus the scripts used to
-  control compilation and installation of the executable.  However, as a
-  special exception, the source code distributed need not include
-  anything that is normally distributed (in either source or binary
-  form) with the major components (compiler, kernel, and so on) of the
-  operating system on which the executable runs, unless that component
-  itself accompanies the executable.
-
-  If distribution of executable or object code is made by offering
-  access to copy from a designated place, then offering equivalent
-  access to copy the source code from the same place counts as
-  distribution of the source code, even though third parties are not
-  compelled to copy the source along with the object code.
-
-    4. You may not copy, modify, sublicense, or distribute the Program
-  except as expressly provided under this License.  Any attempt
-  otherwise to copy, modify, sublicense or distribute the Program is
-  void, and will automatically terminate your rights under this License.
-  However, parties who have received copies, or rights, from you under
-  this License will not have their licenses terminated so long as such
-  parties remain in full compliance.
-
-    5. You are not required to accept this License, since you have not
-  signed it.  However, nothing else grants you permission to modify or
-  distribute the Program or its derivative works.  These actions are
-  prohibited by law if you do not accept this License.  Therefore, by
-  modifying or distributing the Program (or any work based on the
-  Program), you indicate your acceptance of this License to do so, and
-  all its terms and conditions for copying, distributing or modifying
-  the Program or works based on it.
-
-    6. Each time you redistribute the Program (or any work based on the
-  Program), the recipient automatically receives a license from the
-  original licensor to copy, distribute or modify the Program subject to
-  these terms and conditions.  You may not impose any further
-  restrictions on the recipients' exercise of the rights granted herein.
-  You are not responsible for enforcing compliance by third parties to
-  this License.
-
-    7. If, as a consequence of a court judgment or allegation of patent
-  infringement or for any other reason (not limited to patent issues),
-  conditions are imposed on you (whether by court order, agreement or
-  otherwise) that contradict the conditions of this License, they do not
-  excuse you from the conditions of this License.  If you cannot
-  distribute so as to satisfy simultaneously your obligations under this
-  License and any other pertinent obligations, then as a consequence you
-  may not distribute the Program at all.  For example, if a patent
-  license would not permit royalty-free redistribution of the Program by
-  all those who receive copies directly or indirectly through you, then
-  the only way you could satisfy both it and this License would be to
-  refrain entirely from distribution of the Program.
-
-  If any portion of this section is held invalid or unenforceable under
-  any particular circumstance, the balance of the section is intended to
-  apply and the section as a whole is intended to apply in other
-  circumstances.
-
-  It is not the purpose of this section to induce you to infringe any
-  patents or other property right claims or to contest validity of any
-  such claims; this section has the sole purpose of protecting the
-  integrity of the free software distribution system, which is
-  implemented by public license practices.  Many people have made
-  generous contributions to the wide range of software distributed
-  through that system in reliance on consistent application of that
-  system; it is up to the author/donor to decide if he or she is willing
-  to distribute software through any other system and a licensee cannot
-  impose that choice.
-
-  This section is intended to make thoroughly clear what is believed to
-  be a consequence of the rest of this License.
-
-    8. If the distribution and/or use of the Program is restricted in
-  certain countries either by patents or by copyrighted interfaces, the
-  original copyright holder who places the Program under this License
-  may add an explicit geographical distribution limitation excluding
-  those countries, so that distribution is permitted only in or among
-  countries not thus excluded.  In such case, this License incorporates
-  the limitation as if written in the body of this License.
-
-    9. The Free Software Foundation may publish revised and/or new versions
-  of the General Public License from time to time.  Such new versions will
-  be similar in spirit to the present version, but may differ in detail to
-  address new problems or concerns.
-
-  Each version is given a distinguishing version number.  If the Program
-  specifies a version number of this License which applies to it and "any
-  later version", you have the option of following the terms and conditions
-  either of that version or of any later version published by the Free
-  Software Foundation.  If the Program does not specify a version number of
-  this License, you may choose any version ever published by the Free Software
-  Foundation.
-
-    10. If you wish to incorporate parts of the Program into other free
-  programs whose distribution conditions are different, write to the author
-  to ask for permission.  For software which is copyrighted by the Free
-  Software Foundation, write to the Free Software Foundation; we sometimes
-  make exceptions for this.  Our decision will be guided by the two goals
-  of preserving the free status of all derivatives of our free software and
-  of promoting the sharing and reuse of software generally.
-
-	    NO WARRANTY
-
-    11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
-  FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW.  EXCEPT WHEN
-  OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
-  PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
-  OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
-  MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.  THE ENTIRE RISK AS
-  TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU.  SHOULD THE
-  PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
-  REPAIR OR CORRECTION.
-
-    12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
-  WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
-  REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
-  INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
-  OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
-  TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
-  YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
-  PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
-  POSSIBILITY OF SUCH DAMAGES.
-
-	   END OF TERMS AND CONDITIONS
-
-	How to Apply These Terms to Your New Programs
-
-    If you develop a new program, and you want it to be of the greatest
-  possible use to the public, the best way to achieve this is to make it
-  free software which everyone can redistribute and change under these terms.
-
-    To do so, attach the following notices to the program.  It is safest
-  to attach them to the start of each source file to most effectively
-  convey the exclusion of warranty; and each file should have at least
-  the "copyright" line and a pointer to where the full notice is found.
-
-      <one line to give the program's name and a brief idea of what it does.>
-      Copyright (C) <year>  <name of author>
-
-      This program is free software; you can redistribute it and/or modify
-      it under the terms of the GNU General Public License as published by
-      the Free Software Foundation; either version 2 of the License, or
-      (at your option) any later version.
-
-      This program is distributed in the hope that it will be useful,
-      but WITHOUT ANY WARRANTY; without even the implied warranty of
-      MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-      GNU General Public License for more details.
-
-      You should have received a copy of the GNU General Public License along
-      with this program; if not, write to the Free Software Foundation, Inc.,
-      51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
-
-  Also add information on how to contact you by electronic and paper mail.
-
-  If the program is interactive, make it output a short notice like this
-  when it starts in an interactive mode:
-
-      Gnomovision version 69, Copyright (C) year name of author
-      Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
-      This is free software, and you are welcome to redistribute it
-      under certain conditions; type `show c' for details.
-
-  The hypothetical commands `show w' and `show c' should show the appropriate
-  parts of the General Public License.  Of course, the commands you use may
-  be called something other than `show w' and `show c'; they could even be
-  mouse-clicks or menu items--whatever suits your program.
-
-  You should also get your employer (if you work as a programmer) or your
-  school, if any, to sign a "copyright disclaimer" for the program, if
-  necessary.  Here is a sample; alter the names:
-
-    Yoyodyne, Inc., hereby disclaims all copyright interest in the program
-    `Gnomovision' (which makes passes at compilers) written by James Hacker.
-
-    <signature of Ty Coon>, 1 April 1989
-    Ty Coon, President of Vice
-
-  This General Public License does not permit incorporating your program into
-  proprietary programs.  If your program is a subroutine library, you may
-  consider it more useful to permit linking proprietary applications with the
-  library.  If this is what you want to do, use the GNU Lesser General
-  Public License instead of this License.
-============================================================================
-
-------------------
-
-Files: kotlinc/lib/kotlin-compiler.jar
-
-The MIT License
-
-Copyright (c) 2003, Kohsuke Kawaguchi
-
-Permission is hereby granted, free of charge, to any person obtaining a copy
-of this software and associated documentation files (the "Software"), to deal
-in the Software without restriction, including without limitation the rights
-to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-copies of the Software, and to permit persons to whom the Software is
-furnished to do so, subject to the following conditions:
-
-The above copyright notice and this permission notice shall be included in
-all copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
-THE SOFTWARE.
-
-------------------
-
-Files: 
-
-
- ASM: a very small and fast Java bytecode manipulation framework
- Copyright (c) 2000-2005 INRIA, France Telecom
- All rights reserved.
-
- Redistribution and use in source and binary forms, with or without
- modification, are permitted provided that the following conditions
- are met:
- 1. Redistributions of source code must retain the above copyright
-    notice, this list of conditions and the following disclaimer.
- 2. Redistributions in binary form must reproduce the above copyright
-    notice, this list of conditions and the following disclaimer in the
-    documentation and/or other materials provided with the distribution.
- 3. Neither the name of the copyright holders nor the names of its
-    contributors may be used to endorse or promote products derived from
-    this software without specific prior written permission.
-
- THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
- AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
- LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
- THE POSSIBILITY OF SUCH DAMAGE.
-
-------------------
-
-Files:
-
-Boost Software License - Version 1.0 - August 17th, 2003
-
-Permission is hereby granted, free of charge, to any person or organization
-obtaining a copy of the software and accompanying documentation covered by
-this license (the "Software") to use, reproduce, display, distribute,
-execute, and transmit the Software, and to prepare derivative works of the
-Software, and to permit third-parties to whom the Software is furnished to
-do so, all subject to the following:
-
-The copyright notices in the Software and this entire statement, including
-the above license grant, this restriction and the following disclaimer,
-must be included in all copies of the Software, in whole or in part, and
-all derivative works of the Software, unless such copies or derivative
-works are solely in the form of machine-executable object code generated by
-a source language processor.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT
-SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE
-FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE,
-ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
-DEALINGS IN THE SOFTWARE.
-
-------------------
-
-Files:
-
-Eclipse Public License, Version 1.0 (EPL-1.0)
-
-THE ACCOMPANYING PROGRAM IS PROVIDED UNDER THE TERMS OF THIS ECLIPSE PUBLIC
-LICENSE ("AGREEMENT"). ANY USE, REPRODUCTION OR DISTRIBUTION OF THE PROGRAM
-CONSTITUTES RECIPIENT'S ACCEPTANCE OF THIS AGREEMENT.
-
-1. DEFINITIONS
-
-"Contribution" means:
-
-    a) in the case of the initial Contributor, the initial code and
-       documentation distributed under this Agreement, and
-
-    b) in the case of each subsequent Contributor:
-        i) changes to the Program, and
-        ii) additions to the Program;
-
-where such changes and/or additions to the Program originate from and are
-distributed by that particular Contributor. A Contribution 'originates'
-from a Contributor if it was added to the Program by such Contributor itself
-or anyone acting on such Contributor's behalf. Contributions do not include
-additions to the Program which: (i) are separate modules of software
-distributed in conjunction with the Program under their own license agreement,
-and (ii) are not derivative works of the Program.
-
-"Contributor" means any person or entity that distributes the Program.
-
-"Licensed Patents " mean patent claims licensable by a Contributor which are
-necessarily infringed by the use or sale of its Contribution alone or
-when combined with the Program.
-
-"Program" means the Contributions distributed in accordance with
-this Agreement.
-
-"Recipient" means anyone who receives the Program under this Agreement,
-including all Contributors.
-
-2. GRANT OF RIGHTS
-
-    a) Subject to the terms of this Agreement, each Contributor hereby grants
-       Recipient a non-exclusive, worldwide, royalty-free copyright license to
-       reproduce, prepare derivative works of, publicly display, publicly
-       perform, distribute and sublicense the Contribution of such
-       Contributor, if any, and such derivative works,
-       in source code and object code form.
-
-    b) Subject to the terms of this Agreement, each Contributor hereby grants
-       Recipient a non-exclusive, worldwide, royalty-free patent license under
-       Licensed Patents to make, use, sell, offer to sell, import and
-       otherwise transfer the Contribution of such Contributor, if any,
-       in source code and object code form. This patent license shall apply
-       to the combination of the Contribution and the Program if, at the time
-       the Contribution is added by the Contributor, such addition of the
-       Contribution causes such combination to be covered by the
-       Licensed Patents. The patent license shall not apply to any other
-       combinations which include the Contribution.
-       No hardware per se is licensed hereunder.
-
-    c) Recipient understands that although each Contributor grants the
-       licenses to its Contributions set forth herein, no assurances are
-       provided by any Contributor that the Program does not infringe the
-       patent or other intellectual property rights of any other entity.
-       Each Contributor disclaims any liability to Recipient for claims
-       brought by any other entity based on infringement of intellectual
-       property rights or otherwise. As a condition to exercising the
-       rights and licenses granted hereunder, each Recipient hereby assumes
-       sole responsibility to secure any other intellectual property rights
-       needed, if any. For example, if a third party patent license is
-       required to allow Recipient to distribute the Program, it is
-       Recipient's responsibility to acquire that license
-       before distributing the Program.
-
-    d) Each Contributor represents that to its knowledge it has sufficient
-       copyright rights in its Contribution, if any, to grant the copyright
-       license set forth in this Agreement.
-
-3. REQUIREMENTS
-
-A Contributor may choose to distribute the Program in object code form under
-its own license agreement, provided that:
-
-    a) it complies with the terms and conditions of this Agreement; and
-
-    b) its license agreement:
-
-        i) effectively disclaims on behalf of all Contributors all warranties
-        and conditions, express and implied, including warranties or
-        conditions of title and non-infringement, and implied warranties or
-        conditions of merchantability and fitness for a particular purpose;
-
-        ii) effectively excludes on behalf of all Contributors all liability
-        for damages, including direct, indirect, special, incidental and
-        consequential damages, such as lost profits;
-
-        iii) states that any provisions which differ from this Agreement are
-        offered by that Contributor alone and not by any other party; and
-
-        iv) states that source code for the Program is available from such
-        Contributor, and informs licensees how to obtain it in a reasonable
-        manner on or through a medium customarily used for software exchange.
-
-When the Program is made available in source code form:
-
-    a) it must be made available under this Agreement; and
-    b) a copy of this Agreement must be included with each copy of the Program.
-
-Contributors may not remove or alter any copyright notices contained
-within the Program.
-
-Each Contributor must identify itself as the originator of its Contribution,
-if any, in a manner that reasonably allows subsequent Recipients to
-identify the originator of the Contribution.
-
-4. COMMERCIAL DISTRIBUTION
-
-Commercial distributors of software may accept certain responsibilities with
-respect to end users, business partners and the like. While this license is
-intended to facilitate the commercial use of the Program, the Contributor who
-includes the Program in a commercial product offering should do so in a manner
-which does not create potential liability for other Contributors. Therefore,
-if a Contributor includes the Program in a commercial product offering,
-such Contributor ("Commercial Contributor") hereby agrees to defend and
-indemnify every other Contributor ("Indemnified Contributor") against any
-losses, damages and costs (collectively "Losses") arising from claims,
-lawsuits and other legal actions brought by a third party against the
-Indemnified Contributor to the extent caused by the acts or omissions of
-such Commercial Contributor in connection with its distribution of the Program
-in a commercial product offering. The obligations in this section do not apply
-to any claims or Losses relating to any actual or alleged intellectual
-property infringement. In order to qualify, an Indemnified Contributor must:
-a) promptly notify the Commercial Contributor in writing of such claim,
-and b) allow the Commercial Contributor to control, and cooperate with the
-Commercial Contributor in, the defense and any related settlement
-negotiations. The Indemnified Contributor may participate in any such
-claim at its own expense.
-
-For example, a Contributor might include the Program in a commercial product
-offering, Product X. That Contributor is then a Commercial Contributor.
-If that Commercial Contributor then makes performance claims, or offers
-warranties related to Product X, those performance claims and warranties
-are such Commercial Contributor's responsibility alone. Under this section,
-the Commercial Contributor would have to defend claims against the other
-Contributors related to those performance claims and warranties, and if a
-court requires any other Contributor to pay any damages as a result,
-the Commercial Contributor must pay those damages.
-
-5. NO WARRANTY
-
-EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, THE PROGRAM IS PROVIDED ON AN
-"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, EITHER EXPRESS OR
-IMPLIED INCLUDING, WITHOUT LIMITATION, ANY WARRANTIES OR CONDITIONS OF TITLE,
-NON-INFRINGEMENT, MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE.
-Each Recipient is solely responsible for determining the appropriateness of
-using and distributing the Program and assumes all risks associated with its
-exercise of rights under this Agreement , including but not limited to the
-risks and costs of program errors, compliance with applicable laws, damage to
-or loss of data, programs or equipment, and unavailability
-or interruption of operations.
-
-6. DISCLAIMER OF LIABILITY
-
-EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, NEITHER RECIPIENT NOR ANY
-CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING WITHOUT LIMITATION
-LOST PROFITS), HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
-CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
-ARISING IN ANY WAY OUT OF THE USE OR DISTRIBUTION OF THE PROGRAM OR THE
-EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF THE
-POSSIBILITY OF SUCH DAMAGES.
-
-7. GENERAL
-
-If any provision of this Agreement is invalid or unenforceable under
-applicable law, it shall not affect the validity or enforceability of the
-remainder of the terms of this Agreement, and without further action by
-the parties hereto, such provision shall be reformed to the minimum extent
-necessary to make such provision valid and enforceable.
-
-If Recipient institutes patent litigation against any entity (including a
-cross-claim or counterclaim in a lawsuit) alleging that the Program itself
-(excluding combinations of the Program with other software or hardware)
-infringes such Recipient's patent(s), then such Recipient's rights granted
-under Section 2(b) shall terminate as of the date such litigation is filed.
-
-All Recipient's rights under this Agreement shall terminate if it fails to
-comply with any of the material terms or conditions of this Agreement and
-does not cure such failure in a reasonable period of time after becoming
-aware of such noncompliance. If all Recipient's rights under this
-Agreement terminate, Recipient agrees to cease use and distribution of the
-Program as soon as reasonably practicable. However, Recipient's obligations
-under this Agreement and any licenses granted by Recipient relating to the
-Program shall continue and survive.
-
-Everyone is permitted to copy and distribute copies of this Agreement,
-but in order to avoid inconsistency the Agreement is copyrighted and may
-only be modified in the following manner. The Agreement Steward reserves
-the right to publish new versions (including revisions) of this Agreement
-from time to time. No one other than the Agreement Steward has the right to
-modify this Agreement. The Eclipse Foundation is the initial
-Agreement Steward. The Eclipse Foundation may assign the responsibility to
-serve as the Agreement Steward to a suitable separate entity. Each new version
-of the Agreement will be given a distinguishing version number. The Program
-(including Contributions) may always be distributed subject to the version
-of the Agreement under which it was received. In addition, after a new version
-of the Agreement is published, Contributor may elect to distribute the Program
-(including its Contributions) under the new version. Except as expressly
-stated in Sections 2(a) and 2(b) above, Recipient receives no rights or
-licenses to the intellectual property of any Contributor under this Agreement,
-whether expressly, by implication, estoppel or otherwise. All rights in the
-Program not expressly granted under this Agreement are reserved.
-
-This Agreement is governed by the laws of the State of New York and the
-intellectual property laws of the United States of America. No party to
-this Agreement will bring a legal action under this Agreement more than one
-year after the cause of action arose. Each party waives its rights to a
-jury trial in any resulting litigation.
-
-------------------
-
-Files:
-
-Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved.
-
-Developed at SunSoft, a Sun Microsystems, Inc. business.
-Permission to use, copy, modify, and distribute this
-software is freely granted, provided that this notice 
-is preserved.
-
-Kotlin coroutines:
-
-                                 Apache License
-                           Version 2.0, January 2004
-                        http://www.apache.org/licenses/
-
-   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
-
-   1. Definitions.
-
-      "License" shall mean the terms and conditions for use, reproduction,
-      and distribution as defined by Sections 1 through 9 of this document.
-
-      "Licensor" shall mean the copyright owner or entity authorized by
-      the copyright owner that is granting the License.
-
-      "Legal Entity" shall mean the union of the acting entity and all
-      other entities that control, are controlled by, or are under common
-      control with that entity. For the purposes of this definition,
-      "control" means (i) the power, direct or indirect, to cause the
-      direction or management of such entity, whether by contract or
-      otherwise, or (ii) ownership of fifty percent (50%) or more of the
-      outstanding shares, or (iii) beneficial ownership of such entity.
-
-      "You" (or "Your") shall mean an individual or Legal Entity
-      exercising permissions granted by this License.
-
-      "Source" form shall mean the preferred form for making modifications,
-      including but not limited to software source code, documentation
-      source, and configuration files.
-
-      "Object" form shall mean any form resulting from mechanical
-      transformation or translation of a Source form, including but
-      not limited to compiled object code, generated documentation,
-      and conversions to other media types.
-
-      "Work" shall mean the work of authorship, whether in Source or
-      Object form, made available under the License, as indicated by a
-      copyright notice that is included in or attached to the work
-      (an example is provided in the Appendix below).
-
-      "Derivative Works" shall mean any work, whether in Source or Object
-      form, that is based on (or derived from) the Work and for which the
-      editorial revisions, annotations, elaborations, or other modifications
-      represent, as a whole, an original work of authorship. For the purposes
-      of this License, Derivative Works shall not include works that remain
-      separable from, or merely link (or bind by name) to the interfaces of,
-      the Work and Derivative Works thereof.
-
-      "Contribution" shall mean any work of authorship, including
-      the original version of the Work and any modifications or additions
-      to that Work or Derivative Works thereof, that is intentionally
-      submitted to Licensor for inclusion in the Work by the copyright owner
-      or by an individual or Legal Entity authorized to submit on behalf of
-      the copyright owner. For the purposes of this definition, "submitted"
-      means any form of electronic, verbal, or written communication sent
-      to the Licensor or its representatives, including but not limited to
-      communication on electronic mailing lists, source code control systems,
-      and issue tracking systems that are managed by, or on behalf of, the
-      Licensor for the purpose of discussing and improving the Work, but
-      excluding communication that is conspicuously marked or otherwise
-      designated in writing by the copyright owner as "Not a Contribution."
-
-      "Contributor" shall mean Licensor and any individual or Legal Entity
-      on behalf of whom a Contribution has been received by Licensor and
-      subsequently incorporated within the Work.
-
-   2. Grant of Copyright License. Subject to the terms and conditions of
-      this License, each Contributor hereby grants to You a perpetual,
-      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
-      copyright license to reproduce, prepare Derivative Works of,
-      publicly display, publicly perform, sublicense, and distribute the
-      Work and such Derivative Works in Source or Object form.
-
-   3. Grant of Patent License. Subject to the terms and conditions of
-      this License, each Contributor hereby grants to You a perpetual,
-      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
-      (except as stated in this section) patent license to make, have made,
-      use, offer to sell, sell, import, and otherwise transfer the Work,
-      where such license applies only to those patent claims licensable
-      by such Contributor that are necessarily infringed by their
-      Contribution(s) alone or by combination of their Contribution(s)
-      with the Work to which such Contribution(s) was submitted. If You
-      institute patent litigation against any entity (including a
-      cross-claim or counterclaim in a lawsuit) alleging that the Work
-      or a Contribution incorporated within the Work constitutes direct
-      or contributory patent infringement, then any patent licenses
-      granted to You under this License for that Work shall terminate
-      as of the date such litigation is filed.
-
-   4. Redistribution. You may reproduce and distribute copies of the
-      Work or Derivative Works thereof in any medium, with or without
-      modifications, and in Source or Object form, provided that You
-      meet the following conditions:
-
-      (a) You must give any other recipients of the Work or
-          Derivative Works a copy of this License; and
-
-      (b) You must cause any modified files to carry prominent notices
-          stating that You changed the files; and
-
-      (c) You must retain, in the Source form of any Derivative Works
-          that You distribute, all copyright, patent, trademark, and
-          attribution notices from the Source form of the Work,
-          excluding those notices that do not pertain to any part of
-          the Derivative Works; and
-
-      (d) If the Work includes a "NOTICE" text file as part of its
-          distribution, then any Derivative Works that You distribute must
-          include a readable copy of the attribution notices contained
-          within such NOTICE file, excluding those notices that do not
-          pertain to any part of the Derivative Works, in at least one
-          of the following places: within a NOTICE text file distributed
-          as part of the Derivative Works; within the Source form or
-          documentation, if provided along with the Derivative Works; or,
-          within a display generated by the Derivative Works, if and
-          wherever such third-party notices normally appear. The contents
-          of the NOTICE file are for informational purposes only and
-          do not modify the License. You may add Your own attribution
-          notices within Derivative Works that You distribute, alongside
-          or as an addendum to the NOTICE text from the Work, provided
-          that such additional attribution notices cannot be construed
-          as modifying the License.
-
-      You may add Your own copyright statement to Your modifications and
-      may provide additional or different license terms and conditions
-      for use, reproduction, or distribution of Your modifications, or
-      for any such Derivative Works as a whole, provided Your use,
-      reproduction, and distribution of the Work otherwise complies with
-      the conditions stated in this License.
-
-   5. Submission of Contributions. Unless You explicitly state otherwise,
-      any Contribution intentionally submitted for inclusion in the Work
-      by You to the Licensor shall be under the terms and conditions of
-      this License, without any additional terms or conditions.
-      Notwithstanding the above, nothing herein shall supersede or modify
-      the terms of any separate license agreement you may have executed
-      with Licensor regarding such Contributions.
-
-   6. Trademarks. This License does not grant permission to use the trade
-      names, trademarks, service marks, or product names of the Licensor,
-      except as required for reasonable and customary use in describing the
-      origin of the Work and reproducing the content of the NOTICE file.
-
-   7. Disclaimer of Warranty. Unless required by applicable law or
-      agreed to in writing, Licensor provides the Work (and each
-      Contributor provides its Contributions) on an "AS IS" BASIS,
-      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
-      implied, including, without limitation, any warranties or conditions
-      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
-      PARTICULAR PURPOSE. You are solely responsible for determining the
-      appropriateness of using or redistributing the Work and assume any
-      risks associated with Your exercise of permissions under this License.
-
-   8. Limitation of Liability. In no event and under no legal theory,
-      whether in tort (including negligence), contract, or otherwise,
-      unless required by applicable law (such as deliberate and grossly
-      negligent acts) or agreed to in writing, shall any Contributor be
-      liable to You for damages, including any direct, indirect, special,
-      incidental, or consequential damages of any character arising as a
-      result of this License or out of the use or inability to use the
-      Work (including but not limited to damages for loss of goodwill,
-      work stoppage, computer failure or malfunction, or any and all
-      other commercial damages or losses), even if such Contributor
-      has been advised of the possibility of such damages.
-
-   9. Accepting Warranty or Additional Liability. While redistributing
-      the Work or Derivative Works thereof, You may choose to offer,
-      and charge a fee for, acceptance of support, warranty, indemnity,
-      or other liability obligations and/or rights consistent with this
-      License. However, in accepting such obligations, You may act only
-      on Your own behalf and on Your sole responsibility, not on behalf
-      of any other Contributor, and only if You agree to indemnify,
-      defend, and hold each Contributor harmless for any liability
-      incurred by, or claims asserted against, such Contributor by reason
-      of your accepting any such warranty or additional liability.
-
-   END OF TERMS AND CONDITIONS
-
-   APPENDIX: How to apply the Apache License to your work.
-
-      To apply the Apache License to your work, attach the following
-      boilerplate notice, with the fields enclosed by brackets "[]"
-      replaced with your own identifying information. (Don't include
-      the brackets!)  The text should be enclosed in the appropriate
-      comment syntax for the file format. We also recommend that a
-      file or class name and description of purpose be included on the
-      same "printed page" as the copyright notice for easier
-      identification within third-party archives.
-
-   Copyright [yyyy] [name of copyright owner]
-
-   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.
-
-
-SafeParcelable library:
-
-
-                                 Apache License
-                           Version 2.0, January 2004
-                        http://www.apache.org/licenses/
-
-   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
-
-   1. Definitions.
-
-      "License" shall mean the terms and conditions for use, reproduction,
-      and distribution as defined by Sections 1 through 9 of this document.
-
-      "Licensor" shall mean the copyright owner or entity authorized by
-      the copyright owner that is granting the License.
-
-      "Legal Entity" shall mean the union of the acting entity and all
-      other entities that control, are controlled by, or are under common
-      control with that entity. For the purposes of this definition,
-      "control" means (i) the power, direct or indirect, to cause the
-      direction or management of such entity, whether by contract or
-      otherwise, or (ii) ownership of fifty percent (50%) or more of the
-      outstanding shares, or (iii) beneficial ownership of such entity.
-
-      "You" (or "Your") shall mean an individual or Legal Entity
-      exercising permissions granted by this License.
-
-      "Source" form shall mean the preferred form for making modifications,
-      including but not limited to software source code, documentation
-      source, and configuration files.
-
-      "Object" form shall mean any form resulting from mechanical
-      transformation or translation of a Source form, including but
-      not limited to compiled object code, generated documentation,
-      and conversions to other media types.
-
-      "Work" shall mean the work of authorship, whether in Source or
-      Object form, made available under the License, as indicated by a
-      copyright notice that is included in or attached to the work
-      (an example is provided in the Appendix below).
-
-      "Derivative Works" shall mean any work, whether in Source or Object
-      form, that is based on (or derived from) the Work and for which the
-      editorial revisions, annotations, elaborations, or other modifications
-      represent, as a whole, an original work of authorship. For the purposes
-      of this License, Derivative Works shall not include works that remain
-      separable from, or merely link (or bind by name) to the interfaces of,
-      the Work and Derivative Works thereof.
-
-      "Contribution" shall mean any work of authorship, including
-      the original version of the Work and any modifications or additions
-      to that Work or Derivative Works thereof, that is intentionally
-      submitted to Licensor for inclusion in the Work by the copyright owner
-      or by an individual or Legal Entity authorized to submit on behalf of
-      the copyright owner. For the purposes of this definition, "submitted"
-      means any form of electronic, verbal, or written communication sent
-      to the Licensor or its representatives, including but not limited to
-      communication on electronic mailing lists, source code control systems,
-      and issue tracking systems that are managed by, or on behalf of, the
-      Licensor for the purpose of discussing and improving the Work, but
-      excluding communication that is conspicuously marked or otherwise
-      designated in writing by the copyright owner as "Not a Contribution."
-
-      "Contributor" shall mean Licensor and any individual or Legal Entity
-      on behalf of whom a Contribution has been received by Licensor and
-      subsequently incorporated within the Work.
-
-   2. Grant of Copyright License. Subject to the terms and conditions of
-      this License, each Contributor hereby grants to You a perpetual,
-      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
-      copyright license to reproduce, prepare Derivative Works of,
-      publicly display, publicly perform, sublicense, and distribute the
-      Work and such Derivative Works in Source or Object form.
-
-   3. Grant of Patent License. Subject to the terms and conditions of
-      this License, each Contributor hereby grants to You a perpetual,
-      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
-      (except as stated in this section) patent license to make, have made,
-      use, offer to sell, sell, import, and otherwise transfer the Work,
-      where such license applies only to those patent claims licensable
-      by such Contributor that are necessarily infringed by their
-      Contribution(s) alone or by combination of their Contribution(s)
-      with the Work to which such Contribution(s) was submitted. If You
-      institute patent litigation against any entity (including a
-      cross-claim or counterclaim in a lawsuit) alleging that the Work
-      or a Contribution incorporated within the Work constitutes direct
-      or contributory patent infringement, then any patent licenses
-      granted to You under this License for that Work shall terminate
-      as of the date such litigation is filed.
-
-   4. Redistribution. You may reproduce and distribute copies of the
-      Work or Derivative Works thereof in any medium, with or without
-      modifications, and in Source or Object form, provided that You
-      meet the following conditions:
-
-      (a) You must give any other recipients of the Work or
-          Derivative Works a copy of this License; and
-
-      (b) You must cause any modified files to carry prominent notices
-          stating that You changed the files; and
-
-      (c) You must retain, in the Source form of any Derivative Works
-          that You distribute, all copyright, patent, trademark, and
-          attribution notices from the Source form of the Work,
-          excluding those notices that do not pertain to any part of
-          the Derivative Works; and
-
-      (d) If the Work includes a "NOTICE" text file as part of its
-          distribution, then any Derivative Works that You distribute must
-          include a readable copy of the attribution notices contained
-          within such NOTICE file, excluding those notices that do not
-          pertain to any part of the Derivative Works, in at least one
-          of the following places: within a NOTICE text file distributed
-          as part of the Derivative Works; within the Source form or
-          documentation, if provided along with the Derivative Works; or,
-          within a display generated by the Derivative Works, if and
-          wherever such third-party notices normally appear. The contents
-          of the NOTICE file are for informational purposes only and
-          do not modify the License. You may add Your own attribution
-          notices within Derivative Works that You distribute, alongside
-          or as an addendum to the NOTICE text from the Work, provided
-          that such additional attribution notices cannot be construed
-          as modifying the License.
-
-      You may add Your own copyright statement to Your modifications and
-      may provide additional or different license terms and conditions
-      for use, reproduction, or distribution of Your modifications, or
-      for any such Derivative Works as a whole, provided Your use,
-      reproduction, and distribution of the Work otherwise complies with
-      the conditions stated in this License.
-
-   5. Submission of Contributions. Unless You explicitly state otherwise,
-      any Contribution intentionally submitted for inclusion in the Work
-      by You to the Licensor shall be under the terms and conditions of
-      this License, without any additional terms or conditions.
-      Notwithstanding the above, nothing herein shall supersede or modify
-      the terms of any separate license agreement you may have executed
-      with Licensor regarding such Contributions.
-
-   6. Trademarks. This License does not grant permission to use the trade
-      names, trademarks, service marks, or product names of the Licensor,
-      except as required for reasonable and customary use in describing the
-      origin of the Work and reproducing the content of the NOTICE file.
-
-   7. Disclaimer of Warranty. Unless required by applicable law or
-      agreed to in writing, Licensor provides the Work (and each
-      Contributor provides its Contributions) on an "AS IS" BASIS,
-      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
-      implied, including, without limitation, any warranties or conditions
-      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
-      PARTICULAR PURPOSE. You are solely responsible for determining the
-      appropriateness of using or redistributing the Work and assume any
-      risks associated with Your exercise of permissions under this License.
-
-   8. Limitation of Liability. In no event and under no legal theory,
-      whether in tort (including negligence), contract, or otherwise,
-      unless required by applicable law (such as deliberate and grossly
-      negligent acts) or agreed to in writing, shall any Contributor be
-      liable to You for damages, including any direct, indirect, special,
-      incidental, or consequential damages of any character arising as a
-      result of this License or out of the use or inability to use the
-      Work (including but not limited to damages for loss of goodwill,
-      work stoppage, computer failure or malfunction, or any and all
-      other commercial damages or losses), even if such Contributor
-      has been advised of the possibility of such damages.
-
-   9. Accepting Warranty or Additional Liability. While redistributing
-      the Work or Derivative Works thereof, You may choose to offer,
-      and charge a fee for, acceptance of support, warranty, indemnity,
-      or other liability obligations and/or rights consistent with this
-      License. However, in accepting such obligations, You may act only
-      on Your own behalf and on Your sole responsibility, not on behalf
-      of any other Contributor, and only if You agree to indemnify,
-      defend, and hold each Contributor harmless for any liability
-      incurred by, or claims asserted against, such Contributor by reason
-      of your accepting any such warranty or additional liability.
-
-   END OF TERMS AND CONDITIONS
-
-   APPENDIX: How to apply the Apache License to your work.
-
-      To apply the Apache License to your work, attach the following
-      boilerplate notice, with the fields enclosed by brackets "[]"
-      replaced with your own identifying information. (Don't include
-      the brackets!)  The text should be enclosed in the appropriate
-      comment syntax for the file format. We also recommend that a
-      file or class name and description of purpose be included on the
-      same "printed page" as the copyright notice for easier
-      identification within third-party archives.
-
-   Copyright [yyyy] [name of copyright owner]
-
-   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.
-
-
-TensorFlow:
-
-                                 Apache License
-                           Version 2.0, January 2004
-                        http://www.apache.org/licenses/
-
-   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
-
-   1. Definitions.
-
-      "License" shall mean the terms and conditions for use, reproduction,
-      and distribution as defined by Sections 1 through 9 of this document.
-
-      "Licensor" shall mean the copyright owner or entity authorized by
-      the copyright owner that is granting the License.
-
-      "Legal Entity" shall mean the union of the acting entity and all
-      other entities that control, are controlled by, or are under common
-      control with that entity. For the purposes of this definition,
-      "control" means (i) the power, direct or indirect, to cause the
-      direction or management of such entity, whether by contract or
-      otherwise, or (ii) ownership of fifty percent (50%) or more of the
-      outstanding shares, or (iii) beneficial ownership of such entity.
-
-      "You" (or "Your") shall mean an individual or Legal Entity
-      exercising permissions granted by this License.
-
-      "Source" form shall mean the preferred form for making modifications,
-      including but not limited to software source code, documentation
-      source, and configuration files.
-
-      "Object" form shall mean any form resulting from mechanical
-      transformation or translation of a Source form, including but
-      not limited to compiled object code, generated documentation,
-      and conversions to other media types.
-
-      "Work" shall mean the work of authorship, whether in Source or
-      Object form, made available under the License, as indicated by a
-      copyright notice that is included in or attached to the work
-      (an example is provided in the Appendix below).
-
-      "Derivative Works" shall mean any work, whether in Source or Object
-      form, that is based on (or derived from) the Work and for which the
-      editorial revisions, annotations, elaborations, or other modifications
-      represent, as a whole, an original work of authorship. For the purposes
-      of this License, Derivative Works shall not include works that remain
-      separable from, or merely link (or bind by name) to the interfaces of,
-      the Work and Derivative Works thereof.
-
-      "Contribution" shall mean any work of authorship, including
-      the original version of the Work and any modifications or additions
-      to that Work or Derivative Works thereof, that is intentionally
-      submitted to Licensor for inclusion in the Work by the copyright owner
-      or by an individual or Legal Entity authorized to submit on behalf of
-      the copyright owner. For the purposes of this definition, "submitted"
-      means any form of electronic, verbal, or written communication sent
-      to the Licensor or its representatives, including but not limited to
-      communication on electronic mailing lists, source code control systems,
-      and issue tracking systems that are managed by, or on behalf of, the
-      Licensor for the purpose of discussing and improving the Work, but
-      excluding communication that is conspicuously marked or otherwise
-      designated in writing by the copyright owner as "Not a Contribution."
-
-      "Contributor" shall mean Licensor and any individual or Legal Entity
-      on behalf of whom a Contribution has been received by Licensor and
-      subsequently incorporated within the Work.
-
-   2. Grant of Copyright License. Subject to the terms and conditions of
-      this License, each Contributor hereby grants to You a perpetual,
-      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
-      copyright license to reproduce, prepare Derivative Works of,
-      publicly display, publicly perform, sublicense, and distribute the
-      Work and such Derivative Works in Source or Object form.
-
-   3. Grant of Patent License. Subject to the terms and conditions of
-      this License, each Contributor hereby grants to You a perpetual,
-      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
-      (except as stated in this section) patent license to make, have made,
-      use, offer to sell, sell, import, and otherwise transfer the Work,
-      where such license applies only to those patent claims licensable
-      by such Contributor that are necessarily infringed by their
-      Contribution(s) alone or by combination of their Contribution(s)
-      with the Work to which such Contribution(s) was submitted. If You
-      institute patent litigation against any entity (including a
-      cross-claim or counterclaim in a lawsuit) alleging that the Work
-      or a Contribution incorporated within the Work constitutes direct
-      or contributory patent infringement, then any patent licenses
-      granted to You under this License for that Work shall terminate
-      as of the date such litigation is filed.
-
-   4. Redistribution. You may reproduce and distribute copies of the
-      Work or Derivative Works thereof in any medium, with or without
-      modifications, and in Source or Object form, provided that You
-      meet the following conditions:
-
-      (a) You must give any other recipients of the Work or
-          Derivative Works a copy of this License; and
-
-      (b) You must cause any modified files to carry prominent notices
-          stating that You changed the files; and
-
-      (c) You must retain, in the Source form of any Derivative Works
-          that You distribute, all copyright, patent, trademark, and
-          attribution notices from the Source form of the Work,
-          excluding those notices that do not pertain to any part of
-          the Derivative Works; and
-
-      (d) If the Work includes a "NOTICE" text file as part of its
-          distribution, then any Derivative Works that You distribute must
-          include a readable copy of the attribution notices contained
-          within such NOTICE file, excluding those notices that do not
-          pertain to any part of the Derivative Works, in at least one
-          of the following places: within a NOTICE text file distributed
-          as part of the Derivative Works; within the Source form or
-          documentation, if provided along with the Derivative Works; or,
-          within a display generated by the Derivative Works, if and
-          wherever such third-party notices normally appear. The contents
-          of the NOTICE file are for informational purposes only and
-          do not modify the License. You may add Your own attribution
-          notices within Derivative Works that You distribute, alongside
-          or as an addendum to the NOTICE text from the Work, provided
-          that such additional attribution notices cannot be construed
-          as modifying the License.
-
-      You may add Your own copyright statement to Your modifications and
-      may provide additional or different license terms and conditions
-      for use, reproduction, or distribution of Your modifications, or
-      for any such Derivative Works as a whole, provided Your use,
-      reproduction, and distribution of the Work otherwise complies with
-      the conditions stated in this License.
-
-   5. Submission of Contributions. Unless You explicitly state otherwise,
-      any Contribution intentionally submitted for inclusion in the Work
-      by You to the Licensor shall be under the terms and conditions of
-      this License, without any additional terms or conditions.
-      Notwithstanding the above, nothing herein shall supersede or modify
-      the terms of any separate license agreement you may have executed
-      with Licensor regarding such Contributions.
-
-   6. Trademarks. This License does not grant permission to use the trade
-      names, trademarks, service marks, or product names of the Licensor,
-      except as required for reasonable and customary use in describing the
-      origin of the Work and reproducing the content of the NOTICE file.
-
-   7. Disclaimer of Warranty. Unless required by applicable law or
-      agreed to in writing, Licensor provides the Work (and each
-      Contributor provides its Contributions) on an "AS IS" BASIS,
-      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
-      implied, including, without limitation, any warranties or conditions
-      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
-      PARTICULAR PURPOSE. You are solely responsible for determining the
-      appropriateness of using or redistributing the Work and assume any
-      risks associated with Your exercise of permissions under this License.
-
-   8. Limitation of Liability. In no event and under no legal theory,
-      whether in tort (including negligence), contract, or otherwise,
-      unless required by applicable law (such as deliberate and grossly
-      negligent acts) or agreed to in writing, shall any Contributor be
-      liable to You for damages, including any direct, indirect, special,
-      incidental, or consequential damages of any character arising as a
-      result of this License or out of the use or inability to use the
-      Work (including but not limited to damages for loss of goodwill,
-      work stoppage, computer failure or malfunction, or any and all
-      other commercial damages or losses), even if such Contributor
-      has been advised of the possibility of such damages.
-
-   9. Accepting Warranty or Additional Liability. While redistributing
-      the Work or Derivative Works thereof, You may choose to offer,
-      and charge a fee for, acceptance of support, warranty, indemnity,
-      or other liability obligations and/or rights consistent with this
-      License. However, in accepting such obligations, You may act only
-      on Your own behalf and on Your sole responsibility, not on behalf
-      of any other Contributor, and only if You agree to indemnify,
-      defend, and hold each Contributor harmless for any liability
-      incurred by, or claims asserted against, such Contributor by reason
-      of your accepting any such warranty or additional liability.
-
-   END OF TERMS AND CONDITIONS
-
-   APPENDIX: How to apply the Apache License to your work.
-
-      To apply the Apache License to your work, attach the following
-      boilerplate notice, with the fields enclosed by brackets "[]"
-      replaced with your own identifying information. (Don't include
-      the brackets!)  The text should be enclosed in the appropriate
-      comment syntax for the file format. We also recommend that a
-      file or class name and description of purpose be included on the
-      same "printed page" as the copyright notice for easier
-      identification within third-party archives.
-
-   Copyright [yyyy] [name of copyright owner]
-
-   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.
-
-## Some of TensorFlow's code is derived from Caffe, which is subject to the following copyright notice:
-
-COPYRIGHT
-
-All contributions by the University of California:
-
-Copyright (c) 2014, The Regents of the University of California (Regents)
-All rights reserved.
-
-All other contributions:
-
-Copyright (c) 2014, the respective contributors
-All rights reserved.
-
-Caffe uses a shared copyright model: each contributor holds copyright over
-their contributions to Caffe. The project versioning records all such
-contribution and copyright details. If a contributor wants to further mark
-their specific copyright on a particular contribution, they should indicate
-their copyright solely in the commit message of the change when it is
-committed.
-
-LICENSE
-
-Redistribution and use in source and binary forms, with or without
-modification, are permitted provided that the following conditions are met:
-
-1. Redistributions of source code must retain the above copyright notice, this
-   list of conditions and the following disclaimer.
-
-2. Redistributions in binary form must reproduce the above copyright notice,
-   this list of conditions and the following disclaimer in the documentation
-   and/or other materials provided with the distribution.
-
-   THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
-   ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
-   WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-   DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
-   ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
-   (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
-   LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
-   ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-   (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
-   SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
-CONTRIBUTION AGREEMENT
-
-By contributing to the BVLC/caffe repository through pull-request, comment,
-or otherwise, the contributor releases their content to the
-license and copyright terms herein.
-
-apksig:
-
-
-   Copyright (c) 2005-2008, 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.
-
-   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.
-
-
-                                 Apache License
-                           Version 2.0, January 2004
-                        http://www.apache.org/licenses/
-
-   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
-
-   1. Definitions.
-
-      "License" shall mean the terms and conditions for use, reproduction,
-      and distribution as defined by Sections 1 through 9 of this document.
-
-      "Licensor" shall mean the copyright owner or entity authorized by
-      the copyright owner that is granting the License.
-
-      "Legal Entity" shall mean the union of the acting entity and all
-      other entities that control, are controlled by, or are under common
-      control with that entity. For the purposes of this definition,
-      "control" means (i) the power, direct or indirect, to cause the
-      direction or management of such entity, whether by contract or
-      otherwise, or (ii) ownership of fifty percent (50%) or more of the
-      outstanding shares, or (iii) beneficial ownership of such entity.
-
-      "You" (or "Your") shall mean an individual or Legal Entity
-      exercising permissions granted by this License.
-
-      "Source" form shall mean the preferred form for making modifications,
-      including but not limited to software source code, documentation
-      source, and configuration files.
-
-      "Object" form shall mean any form resulting from mechanical
-      transformation or translation of a Source form, including but
-      not limited to compiled object code, generated documentation,
-      and conversions to other media types.
-
-      "Work" shall mean the work of authorship, whether in Source or
-      Object form, made available under the License, as indicated by a
-      copyright notice that is included in or attached to the work
-      (an example is provided in the Appendix below).
-
-      "Derivative Works" shall mean any work, whether in Source or Object
-      form, that is based on (or derived from) the Work and for which the
-      editorial revisions, annotations, elaborations, or other modifications
-      represent, as a whole, an original work of authorship. For the purposes
-      of this License, Derivative Works shall not include works that remain
-      separable from, or merely link (or bind by name) to the interfaces of,
-      the Work and Derivative Works thereof.
-
-      "Contribution" shall mean any work of authorship, including
-      the original version of the Work and any modifications or additions
-      to that Work or Derivative Works thereof, that is intentionally
-      submitted to Licensor for inclusion in the Work by the copyright owner
-      or by an individual or Legal Entity authorized to submit on behalf of
-      the copyright owner. For the purposes of this definition, "submitted"
-      means any form of electronic, verbal, or written communication sent
-      to the Licensor or its representatives, including but not limited to
-      communication on electronic mailing lists, source code control systems,
-      and issue tracking systems that are managed by, or on behalf of, the
-      Licensor for the purpose of discussing and improving the Work, but
-      excluding communication that is conspicuously marked or otherwise
-      designated in writing by the copyright owner as "Not a Contribution."
-
-      "Contributor" shall mean Licensor and any individual or Legal Entity
-      on behalf of whom a Contribution has been received by Licensor and
-      subsequently incorporated within the Work.
-
-   2. Grant of Copyright License. Subject to the terms and conditions of
-      this License, each Contributor hereby grants to You a perpetual,
-      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
-      copyright license to reproduce, prepare Derivative Works of,
-      publicly display, publicly perform, sublicense, and distribute the
-      Work and such Derivative Works in Source or Object form.
-
-   3. Grant of Patent License. Subject to the terms and conditions of
-      this License, each Contributor hereby grants to You a perpetual,
-      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
-      (except as stated in this section) patent license to make, have made,
-      use, offer to sell, sell, import, and otherwise transfer the Work,
-      where such license applies only to those patent claims licensable
-      by such Contributor that are necessarily infringed by their
-      Contribution(s) alone or by combination of their Contribution(s)
-      with the Work to which such Contribution(s) was submitted. If You
-      institute patent litigation against any entity (including a
-      cross-claim or counterclaim in a lawsuit) alleging that the Work
-      or a Contribution incorporated within the Work constitutes direct
-      or contributory patent infringement, then any patent licenses
-      granted to You under this License for that Work shall terminate
-      as of the date such litigation is filed.
-
-   4. Redistribution. You may reproduce and distribute copies of the
-      Work or Derivative Works thereof in any medium, with or without
-      modifications, and in Source or Object form, provided that You
-      meet the following conditions:
-
-      (a) You must give any other recipients of the Work or
-          Derivative Works a copy of this License; and
-
-      (b) You must cause any modified files to carry prominent notices
-          stating that You changed the files; and
-
-      (c) You must retain, in the Source form of any Derivative Works
-          that You distribute, all copyright, patent, trademark, and
-          attribution notices from the Source form of the Work,
-          excluding those notices that do not pertain to any part of
-          the Derivative Works; and
-
-      (d) If the Work includes a "NOTICE" text file as part of its
-          distribution, then any Derivative Works that You distribute must
-          include a readable copy of the attribution notices contained
-          within such NOTICE file, excluding those notices that do not
-          pertain to any part of the Derivative Works, in at least one
-          of the following places: within a NOTICE text file distributed
-          as part of the Derivative Works; within the Source form or
-          documentation, if provided along with the Derivative Works; or,
-          within a display generated by the Derivative Works, if and
-          wherever such third-party notices normally appear. The contents
-          of the NOTICE file are for informational purposes only and
-          do not modify the License. You may add Your own attribution
-          notices within Derivative Works that You distribute, alongside
-          or as an addendum to the NOTICE text from the Work, provided
-          that such additional attribution notices cannot be construed
-          as modifying the License.
-
-      You may add Your own copyright statement to Your modifications and
-      may provide additional or different license terms and conditions
-      for use, reproduction, or distribution of Your modifications, or
-      for any such Derivative Works as a whole, provided Your use,
-      reproduction, and distribution of the Work otherwise complies with
-      the conditions stated in this License.
-
-   5. Submission of Contributions. Unless You explicitly state otherwise,
-      any Contribution intentionally submitted for inclusion in the Work
-      by You to the Licensor shall be under the terms and conditions of
-      this License, without any additional terms or conditions.
-      Notwithstanding the above, nothing herein shall supersede or modify
-      the terms of any separate license agreement you may have executed
-      with Licensor regarding such Contributions.
-
-   6. Trademarks. This License does not grant permission to use the trade
-      names, trademarks, service marks, or product names of the Licensor,
-      except as required for reasonable and customary use in describing the
-      origin of the Work and reproducing the content of the NOTICE file.
-
-   7. Disclaimer of Warranty. Unless required by applicable law or
-      agreed to in writing, Licensor provides the Work (and each
-      Contributor provides its Contributions) on an "AS IS" BASIS,
-      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
-      implied, including, without limitation, any warranties or conditions
-      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
-      PARTICULAR PURPOSE. You are solely responsible for determining the
-      appropriateness of using or redistributing the Work and assume any
-      risks associated with Your exercise of permissions under this License.
-
-   8. Limitation of Liability. In no event and under no legal theory,
-      whether in tort (including negligence), contract, or otherwise,
-      unless required by applicable law (such as deliberate and grossly
-      negligent acts) or agreed to in writing, shall any Contributor be
-      liable to You for damages, including any direct, indirect, special,
-      incidental, or consequential damages of any character arising as a
-      result of this License or out of the use or inability to use the
-      Work (including but not limited to damages for loss of goodwill,
-      work stoppage, computer failure or malfunction, or any and all
-      other commercial damages or losses), even if such Contributor
-      has been advised of the possibility of such damages.
-
-   9. Accepting Warranty or Additional Liability. While redistributing
-      the Work or Derivative Works thereof, You may choose to offer,
-      and charge a fee for, acceptance of support, warranty, indemnity,
-      or other liability obligations and/or rights consistent with this
-      License. However, in accepting such obligations, You may act only
-      on Your own behalf and on Your sole responsibility, not on behalf
-      of any other Contributor, and only if You agree to indemnify,
-      defend, and hold each Contributor harmless for any liability
-      incurred by, or claims asserted against, such Contributor by reason
-      of your accepting any such warranty or additional liability.
-
-   END OF TERMS AND CONDITIONS
-
-
-
-kotlinx_atomicfu:
-
-                                 Apache License
-                           Version 2.0, January 2004
-                        http://www.apache.org/licenses/
-
-   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
-
-   1. Definitions.
-
-      "License" shall mean the terms and conditions for use, reproduction,
-      and distribution as defined by Sections 1 through 9 of this document.
-
-      "Licensor" shall mean the copyright owner or entity authorized by
-      the copyright owner that is granting the License.
-
-      "Legal Entity" shall mean the union of the acting entity and all
-      other entities that control, are controlled by, or are under common
-      control with that entity. For the purposes of this definition,
-      "control" means (i) the power, direct or indirect, to cause the
-      direction or management of such entity, whether by contract or
-      otherwise, or (ii) ownership of fifty percent (50%) or more of the
-      outstanding shares, or (iii) beneficial ownership of such entity.
-
-      "You" (or "Your") shall mean an individual or Legal Entity
-      exercising permissions granted by this License.
-
-      "Source" form shall mean the preferred form for making modifications,
-      including but not limited to software source code, documentation
-      source, and configuration files.
-
-      "Object" form shall mean any form resulting from mechanical
-      transformation or translation of a Source form, including but
-      not limited to compiled object code, generated documentation,
-      and conversions to other media types.
-
-      "Work" shall mean the work of authorship, whether in Source or
-      Object form, made available under the License, as indicated by a
-      copyright notice that is included in or attached to the work
-      (an example is provided in the Appendix below).
-
-      "Derivative Works" shall mean any work, whether in Source or Object
-      form, that is based on (or derived from) the Work and for which the
-      editorial revisions, annotations, elaborations, or other modifications
-      represent, as a whole, an original work of authorship. For the purposes
-      of this License, Derivative Works shall not include works that remain
-      separable from, or merely link (or bind by name) to the interfaces of,
-      the Work and Derivative Works thereof.
-
-      "Contribution" shall mean any work of authorship, including
-      the original version of the Work and any modifications or additions
-      to that Work or Derivative Works thereof, that is intentionally
-      submitted to Licensor for inclusion in the Work by the copyright owner
-      or by an individual or Legal Entity authorized to submit on behalf of
-      the copyright owner. For the purposes of this definition, "submitted"
-      means any form of electronic, verbal, or written communication sent
-      to the Licensor or its representatives, including but not limited to
-      communication on electronic mailing lists, source code control systems,
-      and issue tracking systems that are managed by, or on behalf of, the
-      Licensor for the purpose of discussing and improving the Work, but
-      excluding communication that is conspicuously marked or otherwise
-      designated in writing by the copyright owner as "Not a Contribution."
-
-      "Contributor" shall mean Licensor and any individual or Legal Entity
-      on behalf of whom a Contribution has been received by Licensor and
-      subsequently incorporated within the Work.
-
-   2. Grant of Copyright License. Subject to the terms and conditions of
-      this License, each Contributor hereby grants to You a perpetual,
-      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
-      copyright license to reproduce, prepare Derivative Works of,
-      publicly display, publicly perform, sublicense, and distribute the
-      Work and such Derivative Works in Source or Object form.
-
-   3. Grant of Patent License. Subject to the terms and conditions of
-      this License, each Contributor hereby grants to You a perpetual,
-      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
-      (except as stated in this section) patent license to make, have made,
-      use, offer to sell, sell, import, and otherwise transfer the Work,
-      where such license applies only to those patent claims licensable
-      by such Contributor that are necessarily infringed by their
-      Contribution(s) alone or by combination of their Contribution(s)
-      with the Work to which such Contribution(s) was submitted. If You
-      institute patent litigation against any entity (including a
-      cross-claim or counterclaim in a lawsuit) alleging that the Work
-      or a Contribution incorporated within the Work constitutes direct
-      or contributory patent infringement, then any patent licenses
-      granted to You under this License for that Work shall terminate
-      as of the date such litigation is filed.
-
-   4. Redistribution. You may reproduce and distribute copies of the
-      Work or Derivative Works thereof in any medium, with or without
-      modifications, and in Source or Object form, provided that You
-      meet the following conditions:
-
-      (a) You must give any other recipients of the Work or
-          Derivative Works a copy of this License; and
-
-      (b) You must cause any modified files to carry prominent notices
-          stating that You changed the files; and
-
-      (c) You must retain, in the Source form of any Derivative Works
-          that You distribute, all copyright, patent, trademark, and
-          attribution notices from the Source form of the Work,
-          excluding those notices that do not pertain to any part of
-          the Derivative Works; and
-
-      (d) If the Work includes a "NOTICE" text file as part of its
-          distribution, then any Derivative Works that You distribute must
-          include a readable copy of the attribution notices contained
-          within such NOTICE file, excluding those notices that do not
-          pertain to any part of the Derivative Works, in at least one
-          of the following places: within a NOTICE text file distributed
-          as part of the Derivative Works; within the Source form or
-          documentation, if provided along with the Derivative Works; or,
-          within a display generated by the Derivative Works, if and
-          wherever such third-party notices normally appear. The contents
-          of the NOTICE file are for informational purposes only and
-          do not modify the License. You may add Your own attribution
-          notices within Derivative Works that You distribute, alongside
-          or as an addendum to the NOTICE text from the Work, provided
-          that such additional attribution notices cannot be construed
-          as modifying the License.
-
-      You may add Your own copyright statement to Your modifications and
-      may provide additional or different license terms and conditions
-      for use, reproduction, or distribution of Your modifications, or
-      for any such Derivative Works as a whole, provided Your use,
-      reproduction, and distribution of the Work otherwise complies with
-      the conditions stated in this License.
-
-   5. Submission of Contributions. Unless You explicitly state otherwise,
-      any Contribution intentionally submitted for inclusion in the Work
-      by You to the Licensor shall be under the terms and conditions of
-      this License, without any additional terms or conditions.
-      Notwithstanding the above, nothing herein shall supersede or modify
-      the terms of any separate license agreement you may have executed
-      with Licensor regarding such Contributions.
-
-   6. Trademarks. This License does not grant permission to use the trade
-      names, trademarks, service marks, or product names of the Licensor,
-      except as required for reasonable and customary use in describing the
-      origin of the Work and reproducing the content of the NOTICE file.
-
-   7. Disclaimer of Warranty. Unless required by applicable law or
-      agreed to in writing, Licensor provides the Work (and each
-      Contributor provides its Contributions) on an "AS IS" BASIS,
-      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
-      implied, including, without limitation, any warranties or conditions
-      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
-      PARTICULAR PURPOSE. You are solely responsible for determining the
-      appropriateness of using or redistributing the Work and assume any
-      risks associated with Your exercise of permissions under this License.
-
-   8. Limitation of Liability. In no event and under no legal theory,
-      whether in tort (including negligence), contract, or otherwise,
-      unless required by applicable law (such as deliberate and grossly
-      negligent acts) or agreed to in writing, shall any Contributor be
-      liable to You for damages, including any direct, indirect, special,
-      incidental, or consequential damages of any character arising as a
-      result of this License or out of the use or inability to use the
-      Work (including but not limited to damages for loss of goodwill,
-      work stoppage, computer failure or malfunction, or any and all
-      other commercial damages or losses), even if such Contributor
-      has been advised of the possibility of such damages.
-
-   9. Accepting Warranty or Additional Liability. While redistributing
-      the Work or Derivative Works thereof, You may choose to offer,
-      and charge a fee for, acceptance of support, warranty, indemnity,
-      or other liability obligations and/or rights consistent with this
-      License. However, in accepting such obligations, You may act only
-      on Your own behalf and on Your sole responsibility, not on behalf
-      of any other Contributor, and only if You agree to indemnify,
-      defend, and hold each Contributor harmless for any liability
-      incurred by, or claims asserted against, such Contributor by reason
-      of your accepting any such warranty or additional liability.
-
-   END OF TERMS AND CONDITIONS
-
-   APPENDIX: How to apply the Apache License to your work.
-
-      To apply the Apache License to your work, attach the following
-      boilerplate notice, with the fields enclosed by brackets "[]"
-      replaced with your own identifying information. (Don't include
-      the brackets!)  The text should be enclosed in the appropriate
-      comment syntax for the file format. We also recommend that a
-      file or class name and description of purpose be included on the
-      same "printed page" as the copyright notice for easier
-      identification within third-party archives.
-
-   Copyright [yyyy] [name of copyright owner]
-
-   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.
\ No newline at end of file
diff --git a/third_party/android_deps/libs/com_google_android_gms_play_services_tflite_java/OWNERS b/third_party/android_deps/libs/com_google_android_gms_play_services_tflite_java/OWNERS
deleted file mode 100644
index aea47a05..0000000
--- a/third_party/android_deps/libs/com_google_android_gms_play_services_tflite_java/OWNERS
+++ /dev/null
@@ -1 +0,0 @@
-file://third_party/android_deps/OWNERS
diff --git a/third_party/android_deps/libs/com_google_android_gms_play_services_tflite_java/README.chromium b/third_party/android_deps/libs/com_google_android_gms_play_services_tflite_java/README.chromium
deleted file mode 100644
index dcd7bf1..0000000
--- a/third_party/android_deps/libs/com_google_android_gms_play_services_tflite_java/README.chromium
+++ /dev/null
@@ -1,15 +0,0 @@
-Name: play-services-tflite-java
-Short Name: play-services-tflite-java
-URL: https://developers.google.com/android/guides/setup
-Version: 16.0.1
-License: Android Software Development Kit License
-License File: LICENSE
-CPEPrefix: unknown
-Security Critical: yes
-Shipped: yes
-
-Description:
-
-
-Local Modifications:
-No modifications.
diff --git a/third_party/android_deps/libs/org_tensorflow_tensorflow_lite_api/3pp/3pp.pb b/third_party/android_deps/libs/org_tensorflow_tensorflow_lite_api/3pp/3pp.pb
deleted file mode 100644
index d743b51b..0000000
--- a/third_party/android_deps/libs/org_tensorflow_tensorflow_lite_api/3pp/3pp.pb
+++ /dev/null
@@ -1,16 +0,0 @@
-# Copyright 2021 The Chromium Authors
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-# This is generated, do not edit. Update BuildConfigGenerator.groovy instead.
-
-create {
-  source {
-    script { name: "fetch.py" }
-  }
-}
-
-upload {
-  pkg_prefix: "chromium/third_party/android_deps/libs"
-  universal: true
-}
diff --git a/third_party/android_deps/libs/org_tensorflow_tensorflow_lite_api/3pp/fetch.py b/third_party/android_deps/libs/org_tensorflow_tensorflow_lite_api/3pp/fetch.py
deleted file mode 100755
index 2eb8e5b..0000000
--- a/third_party/android_deps/libs/org_tensorflow_tensorflow_lite_api/3pp/fetch.py
+++ /dev/null
@@ -1,27 +0,0 @@
-#!/usr/bin/env python3
-# Copyright 2021 The Chromium Authors
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-# This is generated, do not edit. Update BuildConfigGenerator.groovy and
-# 3ppFetch.template instead.
-
-import pathlib
-import sys
-
-_3PP_DIR = pathlib.Path(__file__).resolve().parent
-sys.path.insert(0, str(_3PP_DIR.parents[2]))
-import fetch_common
-
-_REPO_URL = 'https://repo.maven.apache.org/maven2'
-SPEC = fetch_common.Spec(repo_url=_REPO_URL,
-                         group_name='org/tensorflow',
-                         module_name='tensorflow-lite-api',
-                         file_ext='aar',
-                         patch_version='cr1',
-                         version_override='2.10.0',
-                         version_filter=None)
-
-
-if __name__ == '__main__':
-    fetch_common.main(SPEC)
diff --git a/third_party/android_deps/libs/org_tensorflow_tensorflow_lite_api/OWNERS b/third_party/android_deps/libs/org_tensorflow_tensorflow_lite_api/OWNERS
deleted file mode 100644
index aea47a05..0000000
--- a/third_party/android_deps/libs/org_tensorflow_tensorflow_lite_api/OWNERS
+++ /dev/null
@@ -1 +0,0 @@
-file://third_party/android_deps/OWNERS
diff --git a/third_party/android_deps/libs/org_tensorflow_tensorflow_lite_api/README.chromium b/third_party/android_deps/libs/org_tensorflow_tensorflow_lite_api/README.chromium
deleted file mode 100644
index 635ba01..0000000
--- a/third_party/android_deps/libs/org_tensorflow_tensorflow_lite_api/README.chromium
+++ /dev/null
@@ -1,15 +0,0 @@
-Name: TensorFlow Lite
-Short Name: tensorflow-lite-api
-URL: https://tensorflow.org/lite/
-Version: 2.10.0
-License: Apache Version 2.0
-License File: LICENSE
-CPEPrefix: unknown
-Security Critical: yes
-Shipped: yes
-
-Description:
-A library helps deploy machine learning models on mobile devices
-
-Local Modifications:
-No modifications.
diff --git a/third_party/angle b/third_party/angle
index 1368546..a114385 160000
--- a/third_party/angle
+++ b/third_party/angle
@@ -1 +1 @@
-Subproject commit 136854656738f30e034a5e0827a5b17a5511f2f8
+Subproject commit a114385768127994caf5e9c1cc30a337b51efb97
diff --git a/third_party/blink/public/common/features.h b/third_party/blink/public/common/features.h
index 09d2ffe..89afa56 100644
--- a/third_party/blink/public/common/features.h
+++ b/third_party/blink/public/common/features.h
@@ -386,8 +386,6 @@
 
 BLINK_COMMON_EXPORT BASE_DECLARE_FEATURE(kEditingNG);
 
-BLINK_COMMON_EXPORT BASE_DECLARE_FEATURE(kEnablePenetratingImageSelection);
-
 // Enables establishing the GPU channel asnchronously when requesting a new
 // layer tree frame sink.
 BLINK_COMMON_EXPORT BASE_DECLARE_FEATURE(kEstablishGpuChannelAsync);
diff --git a/third_party/blink/public/mojom/mediasession/media_session.mojom b/third_party/blink/public/mojom/mediasession/media_session.mojom
index 8739df287..cfdec2f6 100644
--- a/third_party/blink/public/mojom/mediasession/media_session.mojom
+++ b/third_party/blink/public/mojom/mediasession/media_session.mojom
@@ -40,6 +40,7 @@
   mojo_base.mojom.String16 artist;
   mojo_base.mojom.String16 album;
   array<media_session.mojom.MediaImage> artwork;
+  array<media_session.mojom.ChapterInformation> chapterInfo;
 };
 
 interface MediaSessionService {
diff --git a/third_party/blink/renderer/bindings/core/v8/native_value_traits.h b/third_party/blink/renderer/bindings/core/v8/native_value_traits.h
index 1e5a079..a5c28b3 100644
--- a/third_party/blink/renderer/bindings/core/v8/native_value_traits.h
+++ b/third_party/blink/renderer/bindings/core/v8/native_value_traits.h
@@ -84,6 +84,12 @@
       std::is_pointer_v<ImplType> ||
       requires(ImplType value) { value.IsNull(); };
 
+  // This should only be true for certain subclasses of ScriptWrappable
+  // that satisfy the assumptions of CreateIDLSequenceFromV8ArraySlow() with
+  // regards to how NativeValue() is implemented for the underlying type.
+  static constexpr bool supports_scriptwrappable_specific_fast_array_iteration =
+      false;
+
   template <typename... ExtraArgs>
   static decltype(auto) ArgumentValue(v8::Isolate* isolate,
                                       int argument_index,
diff --git a/third_party/blink/renderer/bindings/core/v8/native_value_traits_impl.h b/third_party/blink/renderer/bindings/core/v8/native_value_traits_impl.h
index 5011503..f085b6e 100644
--- a/third_party/blink/renderer/bindings/core/v8/native_value_traits_impl.h
+++ b/third_party/blink/renderer/bindings/core/v8/native_value_traits_impl.h
@@ -1037,10 +1037,86 @@
     return {};
   }
 
-  typename NativeValueTraits<IDLSequence<T>>::ImplType result;
+  using ResultType = typename NativeValueTraits<IDLSequence<T>>::ImplType;
+  ResultType result;
   result.ReserveInitialCapacity(length);
   v8::Local<v8::Context> current_context = isolate->GetCurrentContext();
   v8::TryCatch try_block(isolate);
+
+  // Fast path -- we're creating a sequence of script wrappables, which can be
+  // done by directly getting underlying object as long as array types are
+  // homogeneous. With ScriptWrappables, we don't expect to enter JS during
+  // iteration, so we can rely on v8::Array::Iterate() which is much faster than
+  // iterating an array on the client side of the v8. Additionally, for most
+  // subsptyes of ScriptWrappables, we can speed up type checks (see more on
+  // that below next to supports_scriptwrappable_specific_fast_array_iteration
+  // check.
+  if constexpr (std::is_base_of_v<ScriptWrappable, T>) {
+    struct CallbackData {
+      STACK_ALLOCATED();
+
+     public:
+      v8::Isolate* isolate;
+      v8::TypecheckWitness witness;
+      ResultType& result;
+      ExceptionState& exception_state;
+      CallbackData(v8::Isolate* isolate,
+                   ResultType& result,
+                   ExceptionState& exception_state)
+          : isolate(isolate),
+            witness(isolate),
+            result(result),
+            exception_state(exception_state) {}
+    };
+
+    CallbackData callback_data(isolate, result, exception_state);
+    v8::Array::IterationCallback callback = [](uint32_t index,
+                                               v8::Local<v8::Value> v8_element,
+                                               void* data) {
+      CallbackData* callback_data = reinterpret_cast<CallbackData*>(data);
+      // 3.4. Initialize Si to the result of converting nextItem to an IDL value
+      //   of type T.
+      v8::TypecheckWitness& witness = callback_data->witness;
+      // We can speed up type check by taking advantage of V8's type witness,
+      // provided traits' NativeValue implementation doesn't have additional
+      // logic beyond checking the type and calling ToScriptWrappable().
+      if constexpr (
+          NativeValueTraits<
+              T>::supports_scriptwrappable_specific_fast_array_iteration) {
+        if (witness.Matches(v8_element)) {
+          auto&& value = ToScriptWrappable(v8_element.As<v8::Object>())
+                             ->template ToImpl<T>();
+          callback_data->result.push_back(std::move(value));
+          return v8::Array::CallbackResult::kContinue;
+        }
+      }
+      auto&& element = NativeValueTraits<T>::NativeValue(
+          callback_data->isolate, v8_element, callback_data->exception_state);
+      if (callback_data->exception_state.HadException()) {
+        // It doesn't matter whether we return `kException` or `kBreak` here,
+        // as that only affects the return value of `v8_array->Iterate()`,
+        // which we are ignoring.
+        return v8::Array::CallbackResult::kException;
+      }
+      if constexpr (
+          NativeValueTraits<
+              T>::supports_scriptwrappable_specific_fast_array_iteration) {
+        witness.Update(v8_element);
+      }
+      callback_data->result.push_back(std::move(element));
+      return v8::Array::CallbackResult::kContinue;
+    };
+    if (!v8_array->Iterate(current_context, callback, &callback_data)
+             .IsJust()) {
+      if (try_block.HasCaught()) {
+        exception_state.RethrowV8Exception(try_block.Exception());
+      }
+      DCHECK(exception_state.HadException());
+      return {};
+    }
+    return result;
+  }
+
   // Array length may change if array is mutated during iteration.
   for (uint32_t i = 0; i < v8_array->Length(); ++i) {
     v8::Local<v8::Value> v8_element;
@@ -1056,6 +1132,7 @@
       return {};
     result.push_back(std::move(element));
   }
+
   // 3.2. If next is false, then return an IDL sequence value of type
   //   sequence<T> of length i, where the value of the element at index j is Sj.
   return result;
@@ -1398,6 +1475,7 @@
   }
 };
 
+// Interface types
 template <typename T>
   requires std::derived_from<T, CallbackInterfaceBase>
 struct NativeValueTraits<IDLNullable<T>>
@@ -1470,12 +1548,21 @@
 template <typename T>
   requires std::derived_from<T, ScriptWrappable>
 struct NativeValueTraits<T> : public NativeValueTraitsBase<T*> {
+  // This signifies that CreateIDLSequenceFromV8ArraySlow() may apply
+  // certain optimization based on assumptions about `NativeValue()`
+  // implementation below. For subclasses of ScriptWrappable that have
+  // different implementation of NativeValue(), this should remain false.
+  static constexpr bool supports_scriptwrappable_specific_fast_array_iteration =
+      true;
+
   static inline T* NativeValue(v8::Isolate* isolate,
                                v8::Local<v8::Value> value,
                                ExceptionState& exception_state) {
     const WrapperTypeInfo* wrapper_type_info = T::GetStaticWrapperTypeInfo();
-    if (V8PerIsolateData::From(isolate)->HasInstance(wrapper_type_info, value))
+    if (V8PerIsolateData::From(isolate)->HasInstance(wrapper_type_info,
+                                                     value)) {
       return ToScriptWrappable(value.As<v8::Object>())->template ToImpl<T>();
+    }
 
     bindings::NativeValueTraitsInterfaceNotOfType(wrapper_type_info,
                                                   exception_state);
diff --git a/third_party/blink/renderer/bindings/generated_in_modules.gni b/third_party/blink/renderer/bindings/generated_in_modules.gni
index 9375eb5..375d2d47 100644
--- a/third_party/blink/renderer/bindings/generated_in_modules.gni
+++ b/third_party/blink/renderer/bindings/generated_in_modules.gni
@@ -274,6 +274,8 @@
   "$root_gen_dir/third_party/blink/renderer/bindings/modules/v8/v8_channel_merger_options.h",
   "$root_gen_dir/third_party/blink/renderer/bindings/modules/v8/v8_channel_splitter_options.cc",
   "$root_gen_dir/third_party/blink/renderer/bindings/modules/v8/v8_channel_splitter_options.h",
+  "$root_gen_dir/third_party/blink/renderer/bindings/modules/v8/v8_chapter_information.cc",
+  "$root_gen_dir/third_party/blink/renderer/bindings/modules/v8/v8_chapter_information.h",
   "$root_gen_dir/third_party/blink/renderer/bindings/modules/v8/v8_client_query_options.cc",
   "$root_gen_dir/third_party/blink/renderer/bindings/modules/v8/v8_client_query_options.h",
   "$root_gen_dir/third_party/blink/renderer/bindings/modules/v8/v8_clipboard_permission_descriptor.cc",
diff --git a/third_party/blink/renderer/bindings/idl_in_modules.gni b/third_party/blink/renderer/bindings/idl_in_modules.gni
index c259835..91d0795 100644
--- a/third_party/blink/renderer/bindings/idl_in_modules.gni
+++ b/third_party/blink/renderer/bindings/idl_in_modules.gni
@@ -413,6 +413,7 @@
   "//third_party/blink/renderer/modules/mediarecorder/blob_event_init.idl",
   "//third_party/blink/renderer/modules/mediarecorder/media_recorder.idl",
   "//third_party/blink/renderer/modules/mediarecorder/media_recorder_options.idl",
+  "//third_party/blink/renderer/modules/mediasession/chapter_information.idl",
   "//third_party/blink/renderer/modules/mediasession/media_image.idl",
   "//third_party/blink/renderer/modules/mediasession/media_metadata.idl",
   "//third_party/blink/renderer/modules/mediasession/media_metadata_init.idl",
diff --git a/third_party/blink/renderer/build/scripts/make_element_lookup_trie.py b/third_party/blink/renderer/build/scripts/make_element_lookup_trie.py
index 52f8567..923aa69 100755
--- a/third_party/blink/renderer/build/scripts/make_element_lookup_trie.py
+++ b/third_party/blink/renderer/build/scripts/make_element_lookup_trie.py
@@ -27,7 +27,7 @@
 # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
 # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 
-from blinkbuild.name_style_converter import NameStyleConverter
+from name_utilities import tag_symbol_for_entry
 import json5_generator
 import trie_builder
 import template_expander
@@ -54,22 +54,21 @@
         'namespacePrefix': '',
         'namespaceURI': '',
     }
-    filters = {
-        'symbol':
-        lambda symbol: 'k' + NameStyleConverter(symbol).to_upper_camel_case()
-    }
 
     def __init__(self, json5_file_paths, output_dir):
         super(ElementLookupTrieWriter, self).__init__(json5_file_paths,
                                                       output_dir)
         self._tags = {}
+        self._tag_symbols = {}
         self._runtimeEnabledWithoutOriginTrial = {}
         for entry in self.json5_file.name_dictionaries:
-            self._tags[entry['name'].original] = entry['name'].original
+            tagname = entry['name'].original
+            self._tags[tagname] = tagname
+            self._tag_symbols[tagname] = tag_symbol_for_entry(entry)
             if 'runtimeEnabled' in entry and not entry.get(
                     'runtimeFlagHasOriginTrial', False):
-                self._runtimeEnabledWithoutOriginTrial[
-                    entry['name'].original] = entry['runtimeEnabled']
+                self._runtimeEnabledWithoutOriginTrial[tagname] = entry[
+                    'runtimeEnabled']
         self._namespace = self.json5_file.metadata['namespace'].strip('"')
         basename = self._namespace.lower() + '_element_lookup_trie'
         self._outputs = {
@@ -84,18 +83,15 @@
             'namespace': self._namespace,
         }
 
-    @template_expander.use_jinja(
-        'templates/element_lookup_trie.cc.tmpl', filters=filters)
+    @template_expander.use_jinja('templates/element_lookup_trie.cc.tmpl')
     def generate_implementation(self):
         return {
-            'input_files':
-            self._input_files,
-            'namespace':
-            self._namespace,
-            'length_tries':
-            trie_builder.trie_list_by_str_length(self._tags),
+            'input_files': self._input_files,
+            'namespace': self._namespace,
+            'length_tries': trie_builder.trie_list_by_str_length(self._tags),
             'runtimeEnabledWithoutOriginTrial':
-            self._runtimeEnabledWithoutOriginTrial
+            self._runtimeEnabledWithoutOriginTrial,
+            'tag_symbols': self._tag_symbols,
         }
 
 
diff --git a/third_party/blink/renderer/build/scripts/make_qualified_names.py b/third_party/blink/renderer/build/scripts/make_qualified_names.py
index e0d22a0..6c89345 100755
--- a/third_party/blink/renderer/build/scripts/make_qualified_names.py
+++ b/third_party/blink/renderer/build/scripts/make_qualified_names.py
@@ -35,6 +35,7 @@
 
 from aria_properties import ARIAReader
 from json5_generator import Json5File
+from name_utilities import tag_symbol_for_entry
 
 
 def _symbol(entry):
@@ -53,6 +54,7 @@
     filters = {
         'hash': hasher.hash,
         'symbol': _symbol,
+        'tag_symbol': tag_symbol_for_entry,
     }
 
     def __init__(self, json5_file_paths, output_dir):
diff --git a/third_party/blink/renderer/build/scripts/name_utilities.py b/third_party/blink/renderer/build/scripts/name_utilities.py
index 374fa2f..9b110851 100644
--- a/third_party/blink/renderer/build/scripts/name_utilities.py
+++ b/third_party/blink/renderer/build/scripts/name_utilities.py
@@ -73,3 +73,10 @@
     converter = NameStyleConverter(property_name) if isinstance(
         property_name, str) else property_name
     return converter.to_upper_camel_case()
+
+
+def tag_symbol_for_entry(json_entry):
+    suffix = "OrUnknown" if json_entry.get('runtimeFlagHasOriginTrial',
+                                           False) else ""
+    return 'k' + NameStyleConverter(
+        json_entry['name'].original).to_upper_camel_case() + suffix
diff --git a/third_party/blink/renderer/build/scripts/templates/element_lookup_trie.cc.tmpl b/third_party/blink/renderer/build/scripts/templates/element_lookup_trie.cc.tmpl
index 5afc1e2..d23c31c 100644
--- a/third_party/blink/renderer/build/scripts/templates/element_lookup_trie.cc.tmpl
+++ b/third_party/blink/renderer/build/scripts/templates/element_lookup_trie.cc.tmpl
@@ -22,10 +22,10 @@
       // the appropriate entry in html_tag_names.json5 .  Also
       // see the documentation in html_tag_names.json5 for
       // additional things you should test when doing this.
-      ? {{namespace|lower}}_names::HTMLTag::{{tag|symbol}}
+      ? {{namespace|lower}}_names::HTMLTag::{{tag_symbols[tag]}}
       : {{namespace|lower}}_names::HTMLTag::kUnknown)
 {%- else -%}
-  {{namespace|lower}}_names::HTMLTag::{{tag|symbol}}
+  {{namespace|lower}}_names::HTMLTag::{{tag_symbols[tag]}}
 {%- endif %}
 {%- endmacro %}
 
diff --git a/third_party/blink/renderer/build/scripts/templates/make_qualified_names.cc.tmpl b/third_party/blink/renderer/build/scripts/templates/make_qualified_names.cc.tmpl
index 134660b..b11021b 100644
--- a/third_party/blink/renderer/build/scripts/templates/make_qualified_names.cc.tmpl
+++ b/third_party/blink/renderer/build/scripts/templates/make_qualified_names.cc.tmpl
@@ -109,7 +109,7 @@
     {{namespace}}Tag tag) {
   switch (tag) {
 {% for tag in tags|sort(attribute='name', case_sensitive=True) %}
-    case {{namespace}}Tag::{{tag|symbol}}:
+    case {{namespace}}Tag::{{tag|tag_symbol}}:
       return {{tag|symbol}}Tag;
 {% endfor %}
     case {{namespace}}Tag::kUnknown:
diff --git a/third_party/blink/renderer/build/scripts/templates/make_qualified_names.h.tmpl b/third_party/blink/renderer/build/scripts/templates/make_qualified_names.h.tmpl
index cc27e09..c131213 100644
--- a/third_party/blink/renderer/build/scripts/templates/make_qualified_names.h.tmpl
+++ b/third_party/blink/renderer/build/scripts/templates/make_qualified_names.h.tmpl
@@ -31,7 +31,7 @@
   // lot, and comparing to 0 saves an instruction on some hardware.
   kUnknown = 0,
 {% for tag in tags|sort(attribute='name') %}
-  {{tag|symbol}},
+  {{tag|tag_symbol}},
 {% endfor %}
 };
 {% endif %}
diff --git a/third_party/blink/renderer/core/BUILD.gn b/third_party/blink/renderer/core/BUILD.gn
index 0035fff3a..bc2cecda 100644
--- a/third_party/blink/renderer/core/BUILD.gn
+++ b/third_party/blink/renderer/core/BUILD.gn
@@ -1476,6 +1476,9 @@
 source_set("unit_tests_v2") {
   testonly = true
 
+  # TODO(crbug.com/1315595): Remove once all tests under blink_unittests have been migrated to blink_unittests_v2.
+  defines = [ "HAS_BLINK_TASK_ENVIRONMENT" ]
+
   # If you create a new subdirectory 'foo' that contains unit tests, list them in
   # 'foo/build.gni' to define blink_core_tests_foo, and add any dependencies in
   # the deps section below.
@@ -1496,6 +1499,8 @@
   sources += rebase_path(blink_core_tests_fetch, "", "fetch")
   sources += rebase_path(blink_core_tests_fullscreen, "", "fullscreen")
   sources += rebase_path(blink_core_tests_geometry, "", "geometry")
+  sources +=
+      rebase_path(blink_core_tests_fragment_directive, "", "fragment_directive")
   sources += rebase_path(blink_core_tests_html, "", "html")
   sources += rebase_path(blink_core_tests_highlight, "", "highlight")
   sources += rebase_path(blink_core_tests_imagebitmap, "", "imagebitmap")
diff --git a/third_party/blink/renderer/core/clipboard/data_object.cc b/third_party/blink/renderer/core/clipboard/data_object.cc
index fa846704..8c8171fd 100644
--- a/third_party/blink/renderer/core/clipboard/data_object.cc
+++ b/third_party/blink/renderer/core/clipboard/data_object.cc
@@ -66,16 +66,19 @@
     mojom::blink::ClipboardFilesPtr files;
     if (type == kMimeTypeTextURIList) {
       files = system_clipboard->ReadFiles();
-      // Ignore ReadFiles() result if clipboard sequence number has changed.
-      if (system_clipboard->SequenceNumber() != sequence_number) {
-        files->files.clear();
-      }
-      for (const mojom::blink::DataTransferFilePtr& file : files->files) {
-        data_object->AddFilename(
-            context, FilePathToString(file->path),
-            FilePathToString(file->display_name), files->file_system_id,
-            base::MakeRefCounted<FileSystemAccessDropData>(
-                std::move(file->file_system_access_token)));
+      if (files) {
+        // Ignore ReadFiles() result if clipboard sequence number has changed.
+        if (system_clipboard->SequenceNumber() != sequence_number) {
+          files->files.clear();
+        } else {
+          for (const mojom::blink::DataTransferFilePtr& file : files->files) {
+            data_object->AddFilename(
+                context, FilePathToString(file->path),
+                FilePathToString(file->display_name), files->file_system_id,
+                base::MakeRefCounted<FileSystemAccessDropData>(
+                    std::move(file->file_system_access_token)));
+          }
+        }
       }
     }
     if (files && !files->files.empty()) {
diff --git a/third_party/blink/renderer/core/clipboard/system_clipboard.cc b/third_party/blink/renderer/core/clipboard/system_clipboard.cc
index 336cc66e..1933007 100644
--- a/third_party/blink/renderer/core/clipboard/system_clipboard.cc
+++ b/third_party/blink/renderer/core/clipboard/system_clipboard.cc
@@ -617,6 +617,10 @@
 // static
 mojom::blink::ClipboardFilesPtr SystemClipboard::Snapshot::CloneFiles(
     mojom::blink::ClipboardFilesPtr& files) {
+  if (!files) {
+    return {};
+  }
+
   WTF::Vector<mojom::blink::DataTransferFilePtr> vec;
   for (auto& dtf : files->files) {
     auto clones = CloneFsaToken(std::move(dtf->file_system_access_token));
diff --git a/third_party/blink/renderer/core/css/resolver/style_resolver.h b/third_party/blink/renderer/core/css/resolver/style_resolver.h
index e262d5f..75bc8f0e 100644
--- a/third_party/blink/renderer/core/css/resolver/style_resolver.h
+++ b/third_party/blink/renderer/core/css/resolver/style_resolver.h
@@ -385,7 +385,8 @@
 
   FRIEND_TEST_ALL_PREFIXES(ComputedStyleTest, ApplyInternalLightDarkColor);
   friend class StyleResolverTest;
-  FRIEND_TEST_ALL_PREFIXES(StyleResolverTest, TreeScopedReferences);
+  FRIEND_TEST_ALL_PREFIXES(ParameterizedStyleResolverTest,
+                           TreeScopedReferences);
 
   Element& EnsureElementForFormattedText();
   const ComputedStyle* StyleForFormattedText(
diff --git a/third_party/blink/renderer/core/css/resolver/style_resolver_test.cc b/third_party/blink/renderer/core/css/resolver/style_resolver_test.cc
index c62758b..d881ca64 100644
--- a/third_party/blink/renderer/core/css/resolver/style_resolver_test.cc
+++ b/third_party/blink/renderer/core/css/resolver/style_resolver_test.cc
@@ -122,12 +122,26 @@
   }
 };
 
-class StyleResolverTestCQ : public StyleResolverTest {
+// Variant of `StyleResolverTest` that runs with and without CSSMPCImprovements
+// to ensure we have some test coverage of both codepaths.
+class ParameterizedStyleResolverTest : public StyleResolverTest,
+                                       public testing::WithParamInterface<bool>,
+                                       private ScopedCSSMPCImprovementsForTest {
+ public:
+  ParameterizedStyleResolverTest()
+      : ScopedCSSMPCImprovementsForTest(GetParam()) {}
+};
+
+INSTANTIATE_TEST_SUITE_P(All, ParameterizedStyleResolverTest, testing::Bool());
+
+class StyleResolverTestCQ : public ParameterizedStyleResolverTest {
  protected:
   StyleResolverTestCQ() = default;
 };
 
-TEST_F(StyleResolverTest, StyleForTextInDisplayNone) {
+INSTANTIATE_TEST_SUITE_P(All, StyleResolverTestCQ, testing::Bool());
+
+TEST_P(ParameterizedStyleResolverTest, StyleForTextInDisplayNone) {
   GetDocument().documentElement()->setInnerHTML(R"HTML(
     <body style="display:none">Text</body>
   )HTML");
@@ -143,7 +157,7 @@
       To<Text>(GetDocument().body()->firstChild())));
 }
 
-TEST_F(StyleResolverTest, AnimationBaseComputedStyle) {
+TEST_P(ParameterizedStyleResolverTest, AnimationBaseComputedStyle) {
   GetDocument().documentElement()->setInnerHTML(R"HTML(
     <style>
       html { font-size: 10px; }
@@ -184,7 +198,7 @@
   EXPECT_EQ(20, resolver.ResolveStyle(div, recalc_context)->FontSize());
 }
 
-TEST_F(StyleResolverTest, HasEmUnits) {
+TEST_P(ParameterizedStyleResolverTest, HasEmUnits) {
   GetDocument().documentElement()->setInnerHTML("<div id=div>Test</div>");
   UpdateAllLifecyclePhasesForTest();
   EXPECT_FALSE(StyleForId("div")->HasEmUnits());
@@ -195,7 +209,7 @@
   EXPECT_TRUE(StyleForId("div")->HasEmUnits());
 }
 
-TEST_F(StyleResolverTest, BaseReusableIfFontRelativeUnitsAbsent) {
+TEST_P(ParameterizedStyleResolverTest, BaseReusableIfFontRelativeUnitsAbsent) {
   GetDocument().documentElement()->setInnerHTML("<div id=div>Test</div>");
   UpdateAllLifecyclePhasesForTest();
   Element* div = GetDocument().getElementById(AtomicString("div"));
@@ -215,7 +229,7 @@
   EXPECT_TRUE(StyleResolver::CanReuseBaseComputedStyle(state));
 }
 
-TEST_F(StyleResolverTest, AnimationNotMaskedByImportant) {
+TEST_P(ParameterizedStyleResolverTest, AnimationNotMaskedByImportant) {
   GetDocument().documentElement()->setInnerHTML(R"HTML(
     <style>
       div {
@@ -248,13 +262,14 @@
   EXPECT_TRUE(bitset && bitset->Has(CSSPropertyID::kHeight));
 }
 
-TEST_F(StyleResolverTest, AnimationNotMaskedWithoutElementAnimations) {
+TEST_P(ParameterizedStyleResolverTest,
+       AnimationNotMaskedWithoutElementAnimations) {
   EXPECT_FALSE(CSSAnimations::IsAnimatingStandardProperties(
       /* ElementAnimations */ nullptr, std::make_unique<CSSBitset>().get(),
       KeyframeEffect::kDefaultPriority));
 }
 
-TEST_F(StyleResolverTest, AnimationNotMaskedWithoutBitset) {
+TEST_P(ParameterizedStyleResolverTest, AnimationNotMaskedWithoutBitset) {
   GetDocument().documentElement()->setInnerHTML(R"HTML(
     <style>
       div {
@@ -285,7 +300,7 @@
       KeyframeEffect::kDefaultPriority));
 }
 
-TEST_F(StyleResolverTest, AnimationMaskedByImportant) {
+TEST_P(ParameterizedStyleResolverTest, AnimationMaskedByImportant) {
   GetDocument().documentElement()->setInnerHTML(R"HTML(
     <style>
       div {
@@ -317,7 +332,7 @@
   EXPECT_FALSE(StyleResolver::CanReuseBaseComputedStyle(state));
 }
 
-TEST_F(StyleResolverTest,
+TEST_P(ParameterizedStyleResolverTest,
        TransitionRetargetRelativeFontSizeOnParentlessElement) {
   GetDocument().documentElement()->setInnerHTML(R"HTML(
     <style>
@@ -454,7 +469,7 @@
 
 }  // namespace
 
-TEST_F(StyleResolverTest, BackgroundImageFetch) {
+TEST_P(ParameterizedStyleResolverTest, BackgroundImageFetch) {
   GetDocument().documentElement()->setInnerHTML(R"HTML(
     <style>
       #none {
@@ -608,7 +623,7 @@
       << "Fetch for display:none frameset - cached";
 }
 
-TEST_F(StyleResolverTest, NoFetchForAtPage) {
+TEST_P(ParameterizedStyleResolverTest, NoFetchForAtPage) {
   // Strictly, we should drop descriptors from @page rules which are not valid
   // descriptors, but as long as we apply them to ComputedStyle we should at
   // least not trigger fetches. The display:contents is here to make sure we
@@ -633,7 +648,7 @@
   EXPECT_TRUE(To<CSSImageValue>(bg_img_list->Item(0)).IsCachePending());
 }
 
-TEST_F(StyleResolverTest, NoFetchForHighlightPseudoElements) {
+TEST_P(ParameterizedStyleResolverTest, NoFetchForHighlightPseudoElements) {
   GetDocument().body()->setInnerHTML(R"HTML(
     <style>
       body::target-text, body::selection {
@@ -701,7 +716,7 @@
   }
 }
 
-TEST_F(StyleResolverTest, CSSMarkerPseudoElement) {
+TEST_P(ParameterizedStyleResolverTest, CSSMarkerPseudoElement) {
   GetDocument().body()->setInnerHTML(R"HTML(
     <style>
       b::before {
@@ -778,7 +793,7 @@
   }
 }
 
-TEST_F(StyleResolverTest, ApplyInheritedOnlyCustomPropertyChange) {
+TEST_P(ParameterizedStyleResolverTest, ApplyInheritedOnlyCustomPropertyChange) {
   // This test verifies that when we get a "apply inherited only"-type
   // hit in the MatchesPropertiesCache, we're able to detect that custom
   // properties changed, and that we therefore need to apply the non-inherited
@@ -802,7 +817,7 @@
   EXPECT_EQ("20px", ComputedValue("width", *StyleForId("child2")));
 }
 
-TEST_F(StyleResolverTest, CssRulesForElementIncludedRules) {
+TEST_P(ParameterizedStyleResolverTest, CssRulesForElementIncludedRules) {
   UpdateAllLifecyclePhasesForTest();
 
   Element* body = GetDocument().body();
@@ -815,7 +830,7 @@
   resolver.CssRulesForElement(body, StyleResolver::kAuthorCSSRules);
 }
 
-TEST_F(StyleResolverTest, NestedPseudoElement) {
+TEST_P(ParameterizedStyleResolverTest, NestedPseudoElement) {
   GetDocument().body()->setInnerHTML(R"HTML(
     <style>
       div::before { content: "Hello"; display: list-item; }
@@ -826,7 +841,7 @@
   // Don't crash when calculating style for nested pseudo elements.
 }
 
-TEST_F(StyleResolverTest, CascadedValuesForElement) {
+TEST_P(ParameterizedStyleResolverTest, CascadedValuesForElement) {
   GetDocument().body()->setInnerHTML(R"HTML(
     <style>
       #div {
@@ -876,7 +891,7 @@
   EXPECT_EQ("60em", map.at(height)->CssText());
 }
 
-TEST_F(StyleResolverTest, CascadedValuesForPseudoElement) {
+TEST_P(ParameterizedStyleResolverTest, CascadedValuesForPseudoElement) {
   GetDocument().body()->setInnerHTML(R"HTML(
     <style>
       #div::before {
@@ -901,7 +916,7 @@
   EXPECT_EQ("1em", map.at(top)->CssText());
 }
 
-TEST_F(StyleResolverTestCQ, CascadedValuesForElementInContainer) {
+TEST_P(StyleResolverTestCQ, CascadedValuesForElementInContainer) {
   GetDocument().body()->setInnerHTML(R"HTML(
     <style>
       #container { container-type: inline-size; }
@@ -931,7 +946,7 @@
   EXPECT_EQ("1em", map.at(top)->CssText());
 }
 
-TEST_F(StyleResolverTestCQ, CascadedValuesForPseudoElementInContainer) {
+TEST_P(StyleResolverTestCQ, CascadedValuesForPseudoElementInContainer) {
   GetDocument().body()->setInnerHTML(R"HTML(
     <style>
       #container { container-type: inline-size; }
@@ -961,7 +976,7 @@
   EXPECT_EQ("1em", map.at(top)->CssText());
 }
 
-TEST_F(StyleResolverTest, EnsureComputedStyleSlotFallback) {
+TEST_P(ParameterizedStyleResolverTest, EnsureComputedStyleSlotFallback) {
   GetDocument().body()->setInnerHTML(R"HTML(
     <div id="host"><span></span></div>
   )HTML");
@@ -993,7 +1008,7 @@
             fallback_style->VisitedDependentColor(GetCSSPropertyColor()));
 }
 
-TEST_F(StyleResolverTest, EnsureComputedStyleOutsideFlatTree) {
+TEST_P(ParameterizedStyleResolverTest, EnsureComputedStyleOutsideFlatTree) {
   GetDocument()
       .documentElement()
       ->setInnerHTMLWithDeclarativeShadowDOMForTesting(R"HTML(
@@ -1067,7 +1082,7 @@
   EXPECT_NE(c_style, c->GetComputedStyle());
 }
 
-TEST_F(StyleResolverTest, ComputeValueStandardProperty) {
+TEST_P(ParameterizedStyleResolverTest, ComputeValueStandardProperty) {
   GetDocument().body()->setInnerHTML(R"HTML(
     <style>
       #target { --color: green }
@@ -1111,7 +1126,7 @@
 
 }  // namespace
 
-TEST_F(StyleResolverTest, ComputeValueCustomProperty) {
+TEST_P(ParameterizedStyleResolverTest, ComputeValueCustomProperty) {
   GetDocument().body()->setInnerHTML(R"HTML(
     <style>
       #target { --color: green }
@@ -1134,7 +1149,7 @@
   EXPECT_EQ("blue", computed_value->CssText());
 }
 
-TEST_F(StyleResolverTest, TreeScopedReferences) {
+TEST_P(ParameterizedStyleResolverTest, TreeScopedReferences) {
   GetDocument().body()->setInnerHTML(R"HTML(
     <style>
       #host { animation-name: anim }
@@ -1221,7 +1236,7 @@
   }
 }
 
-TEST_F(StyleResolverTest, InheritStyleImagesFromDisplayContents) {
+TEST_P(ParameterizedStyleResolverTest, InheritStyleImagesFromDisplayContents) {
   GetDocument().documentElement()->setInnerHTML(R"HTML(
     <style>
       #parent {
@@ -1295,7 +1310,7 @@
       << "-webkit-mask-image is fetched";
 }
 
-TEST_F(StyleResolverTest, TextShadowInHighlightPseudoNotCounted1) {
+TEST_P(ParameterizedStyleResolverTest, TextShadowInHighlightPseudoNotCounted1) {
   EXPECT_FALSE(
       GetDocument().IsUseCounted(WebFeature::kTextShadowInHighlightPseudo));
   EXPECT_FALSE(GetDocument().IsUseCounted(
@@ -1332,7 +1347,7 @@
       WebFeature::kTextShadowNotNoneInHighlightPseudo));
 }
 
-TEST_F(StyleResolverTest, TextShadowInHighlightPseudoNotCounted2) {
+TEST_P(ParameterizedStyleResolverTest, TextShadowInHighlightPseudoNotCounted2) {
   EXPECT_FALSE(
       GetDocument().IsUseCounted(WebFeature::kTextShadowInHighlightPseudo));
   EXPECT_FALSE(GetDocument().IsUseCounted(
@@ -1373,7 +1388,7 @@
       WebFeature::kTextShadowNotNoneInHighlightPseudo));
 }
 
-TEST_F(StyleResolverTest, TextShadowInHighlightPseudotNone) {
+TEST_P(ParameterizedStyleResolverTest, TextShadowInHighlightPseudotNone) {
   EXPECT_FALSE(
       GetDocument().IsUseCounted(WebFeature::kTextShadowInHighlightPseudo));
   EXPECT_FALSE(GetDocument().IsUseCounted(
@@ -1413,7 +1428,7 @@
       WebFeature::kTextShadowNotNoneInHighlightPseudo));
 }
 
-TEST_F(StyleResolverTest, TextShadowInHighlightPseudoNotNone1) {
+TEST_P(ParameterizedStyleResolverTest, TextShadowInHighlightPseudoNotNone1) {
   EXPECT_FALSE(
       GetDocument().IsUseCounted(WebFeature::kTextShadowInHighlightPseudo));
   EXPECT_FALSE(GetDocument().IsUseCounted(
@@ -1450,7 +1465,7 @@
       WebFeature::kTextShadowNotNoneInHighlightPseudo));
 }
 
-TEST_F(StyleResolverTest, TextShadowInHighlightPseudoNotNone2) {
+TEST_P(ParameterizedStyleResolverTest, TextShadowInHighlightPseudoNotNone2) {
   EXPECT_FALSE(
       GetDocument().IsUseCounted(WebFeature::kTextShadowInHighlightPseudo));
   EXPECT_FALSE(GetDocument().IsUseCounted(
@@ -1490,7 +1505,7 @@
       WebFeature::kTextShadowNotNoneInHighlightPseudo));
 }
 
-TEST_F(StyleResolverTestCQ, DependsOnSizeContainerQueries) {
+TEST_P(StyleResolverTestCQ, DependsOnSizeContainerQueries) {
   GetDocument().documentElement()->setInnerHTML(R"HTML(
     <style>
       #a { color: red; }
@@ -1534,7 +1549,7 @@
   EXPECT_FALSE(e->ComputedStyleRef().DependsOnStyleContainerQueries());
 }
 
-TEST_F(StyleResolverTestCQ, DependsOnSizeContainerQueriesPseudo) {
+TEST_P(StyleResolverTestCQ, DependsOnSizeContainerQueriesPseudo) {
   GetDocument().documentElement()->setInnerHTML(R"HTML(
     <style>
       main { container-type: size; width: 100px; }
@@ -1565,7 +1580,7 @@
 
 // Verify that the ComputedStyle::DependsOnSizeContainerQuery flag does
 // not end up in the MatchedPropertiesCache (MPC).
-TEST_F(StyleResolverTestCQ, DependsOnSizeContainerQueriesMPC) {
+TEST_P(StyleResolverTestCQ, DependsOnSizeContainerQueriesMPC) {
   GetDocument().documentElement()->setInnerHTML(R"HTML(
     <style>
       @container (min-width: 9999999px) {
@@ -1598,7 +1613,7 @@
   EXPECT_FALSE(b->ComputedStyleRef().DependsOnSizeContainerQueries());
 }
 
-TEST_F(StyleResolverTestCQ, DependsOnStyleContainerQueries) {
+TEST_P(StyleResolverTestCQ, DependsOnStyleContainerQueries) {
   GetDocument().documentElement()->setInnerHTML(R"HTML(
     <style>
       #a { color: red; }
@@ -1642,7 +1657,7 @@
   EXPECT_FALSE(e->ComputedStyleRef().DependsOnSizeContainerQueries());
 }
 
-TEST_F(StyleResolverTest, NoCascadeLayers) {
+TEST_P(ParameterizedStyleResolverTest, NoCascadeLayers) {
   GetDocument().documentElement()->setInnerHTML(R"HTML(
     <style>
       #a { color: green; }
@@ -1683,7 +1698,7 @@
   EXPECT_EQ(properties[2].types_.origin, CascadeOrigin::kAuthor);
 }
 
-TEST_F(StyleResolverTest, CascadeLayersInDifferentSheets) {
+TEST_P(ParameterizedStyleResolverTest, CascadeLayersInDifferentSheets) {
   GetDocument().documentElement()->setInnerHTML(R"HTML(
     <style>
       @layer foo, bar;
@@ -1738,7 +1753,7 @@
   // There's no layer order for inline style; it's always above all layers.
 }
 
-TEST_F(StyleResolverTest, CascadeLayersInDifferentTreeScopes) {
+TEST_P(ParameterizedStyleResolverTest, CascadeLayersInDifferentTreeScopes) {
   GetDocument()
       .documentElement()
       ->setInnerHTMLWithDeclarativeShadowDOMForTesting(R"HTML(
@@ -1795,7 +1810,8 @@
 }
 
 // https://crbug.com/1313357
-TEST_F(StyleResolverTest, CascadeLayersAfterModifyingAnotherSheet) {
+TEST_P(ParameterizedStyleResolverTest,
+       CascadeLayersAfterModifyingAnotherSheet) {
   GetDocument().documentElement()->setInnerHTML(R"HTML(
     <style>
       @layer {
@@ -1843,7 +1859,8 @@
 }
 
 // https://crbug.com/1326791
-TEST_F(StyleResolverTest, CascadeLayersAddLayersWithImportantDeclarations) {
+TEST_P(ParameterizedStyleResolverTest,
+       CascadeLayersAddLayersWithImportantDeclarations) {
   GetDocument().documentElement()->setInnerHTML(R"HTML(
     <style id="addrule"></style>
     <target></target>
@@ -1893,7 +1910,7 @@
 
 // TODO(crbug.com/1095765): We should have a WPT for this test case, and the
 // Blink web test runner can now test @page rules in WPT.
-TEST_F(StyleResolverTest, CascadeLayersAndPageRules) {
+TEST_P(ParameterizedStyleResolverTest, CascadeLayersAndPageRules) {
   GetDocument().documentElement()->setInnerHTML(R"HTML(
     <style>
     @page { margin-top: 100px; }
@@ -1913,7 +1930,7 @@
   EXPECT_EQ(100, description.margin_top);
 }
 
-TEST_F(StyleResolverTest, BodyPropagationLayoutImageContain) {
+TEST_P(ParameterizedStyleResolverTest, BodyPropagationLayoutImageContain) {
   GetDocument().documentElement()->setAttribute(
       html_names::kStyleAttr,
       AtomicString("contain:size; display:inline-table; content:url(img);"));
@@ -1928,7 +1945,7 @@
                 GetCSSPropertyBackgroundColor()));
 }
 
-TEST_F(StyleResolverTest, IsInertWithAttributeAndDialog) {
+TEST_P(ParameterizedStyleResolverTest, IsInertWithAttributeAndDialog) {
   ScopedInertAttributeForTest enabled_scope(true);
   Document& document = GetDocument();
   NonThrowableExceptionState exception_state;
@@ -1996,7 +2013,7 @@
   EXPECT_EQ(dialog_text->GetLayoutObject(), nullptr);
 }
 
-TEST_F(StyleResolverTest, IsInertWithDialogs) {
+TEST_P(ParameterizedStyleResolverTest, IsInertWithDialogs) {
   Document& document = GetDocument();
   NonThrowableExceptionState exception_state;
 
@@ -2113,7 +2130,7 @@
   EXPECT_EQ(Fullscreen::FullscreenElementFrom(document), nullptr);
 }
 
-TEST_F(StyleResolverTest, IsInertWithFullscreen) {
+TEST_P(ParameterizedStyleResolverTest, IsInertWithFullscreen) {
   Document& document = GetDocument();
   document.body()->setInnerHTML(R"HTML(
     <div>
@@ -2186,7 +2203,7 @@
   ExpectState0();
 }
 
-TEST_F(StyleResolverTest, IsInertWithFrameAndFullscreen) {
+TEST_P(ParameterizedStyleResolverTest, IsInertWithFrameAndFullscreen) {
   Document& document = GetDocument();
   document.body()->setInnerHTML(R"HTML(
     <div>div_text</div>
@@ -2228,7 +2245,7 @@
   ExitFullscreen(document);
 }
 
-TEST_F(StyleResolverTest, IsInertWithBackdrop) {
+TEST_P(ParameterizedStyleResolverTest, IsInertWithBackdrop) {
   ScopedBackdropInheritOriginatingForTest backdrop_inherit(true);
 
   Document& document = GetDocument();
@@ -2286,7 +2303,7 @@
   ExitFullscreen(document);
 }
 
-TEST_F(StyleResolverTest, IsInertWithDialogAndFullscreen) {
+TEST_P(ParameterizedStyleResolverTest, IsInertWithDialogAndFullscreen) {
   Document& document = GetDocument();
   NonThrowableExceptionState exception_state;
 
@@ -2371,7 +2388,7 @@
   EXPECT_EQ(dialog->GetComputedStyle(), nullptr);
 }
 
-TEST_F(StyleResolverTestCQ, StyleRulesForElementContainerQuery) {
+TEST_P(StyleResolverTestCQ, StyleRulesForElementContainerQuery) {
   GetDocument().documentElement()->setInnerHTML(R"HTML(
     <style>
       #container { container-type: inline-size }
@@ -2401,7 +2418,7 @@
       << "Check that it is in fact the empty rule";
 }
 
-TEST_F(StyleResolverTest, LegacyOverlapPerspectiveOrigin_Single) {
+TEST_P(ParameterizedStyleResolverTest, LegacyOverlapPerspectiveOrigin_Single) {
   SetBodyInnerHTML(R"HTML(
       <style>
         div {
@@ -2414,7 +2431,7 @@
       << "Not counted when only perspective-origin is used";
 }
 
-TEST_F(StyleResolverTest, LegacyOverlapPerspectiveOrigin_Order) {
+TEST_P(ParameterizedStyleResolverTest, LegacyOverlapPerspectiveOrigin_Order) {
   SetBodyInnerHTML(R"HTML(
       <style>
         div {
@@ -2429,7 +2446,7 @@
       << "Not counted when perspective-origin is last";
 }
 
-TEST_F(StyleResolverTest, LegacyOverlapPerspectiveOrigin_Values) {
+TEST_P(ParameterizedStyleResolverTest, LegacyOverlapPerspectiveOrigin_Values) {
   SetBodyInnerHTML(R"HTML(
       <style>
         div {
@@ -2444,7 +2461,7 @@
       << "Not counted when values are the same";
 }
 
-TEST_F(StyleResolverTest, LegacyOverlapPerspectiveOrigin_Last) {
+TEST_P(ParameterizedStyleResolverTest, LegacyOverlapPerspectiveOrigin_Last) {
   SetBodyInnerHTML(R"HTML(
       <style>
         div {
@@ -2459,7 +2476,7 @@
       << "Counted when -webkit-perspective-* is last with different values";
 }
 
-TEST_F(StyleResolverTest, LegacyOverlapTransformOrigin_Single) {
+TEST_P(ParameterizedStyleResolverTest, LegacyOverlapTransformOrigin_Single) {
   SetBodyInnerHTML(R"HTML(
       <style>
         div {
@@ -2472,7 +2489,7 @@
       << "Not counted when only transform-origin is used";
 }
 
-TEST_F(StyleResolverTest, LegacyOverlapTransformOrigin_Order) {
+TEST_P(ParameterizedStyleResolverTest, LegacyOverlapTransformOrigin_Order) {
   SetBodyInnerHTML(R"HTML(
       <style>
         div {
@@ -2488,7 +2505,7 @@
       << "Not counted when transform-origin is last";
 }
 
-TEST_F(StyleResolverTest, LegacyOverlapTransformOrigin_Values) {
+TEST_P(ParameterizedStyleResolverTest, LegacyOverlapTransformOrigin_Values) {
   SetBodyInnerHTML(R"HTML(
       <style>
         div {
@@ -2504,7 +2521,7 @@
       << "Not counted when values are the same";
 }
 
-TEST_F(StyleResolverTest, LegacyOverlapTransformOrigin_Last) {
+TEST_P(ParameterizedStyleResolverTest, LegacyOverlapTransformOrigin_Last) {
   SetBodyInnerHTML(R"HTML(
       <style>
         div {
@@ -2521,7 +2538,7 @@
          "values";
 }
 
-TEST_F(StyleResolverTest, LegacyOverlapBorderImage_Single) {
+TEST_P(ParameterizedStyleResolverTest, LegacyOverlapBorderImage_Single) {
   SetBodyInnerHTML(R"HTML(
       <style>
         div {
@@ -2534,7 +2551,7 @@
       << "Not counted when only border-image is used";
 }
 
-TEST_F(StyleResolverTest, LegacyOverlapBorderImage_Order) {
+TEST_P(ParameterizedStyleResolverTest, LegacyOverlapBorderImage_Order) {
   SetBodyInnerHTML(R"HTML(
       <style>
         div {
@@ -2548,7 +2565,7 @@
       << "Not counted when border-image is last";
 }
 
-TEST_F(StyleResolverTest, LegacyOverlapBorderImage_Values) {
+TEST_P(ParameterizedStyleResolverTest, LegacyOverlapBorderImage_Values) {
   SetBodyInnerHTML(R"HTML(
       <style>
         div {
@@ -2562,7 +2579,7 @@
       << "Not counted when values are the same";
 }
 
-TEST_F(StyleResolverTest, LegacyOverlapBorderImage_Last_Source) {
+TEST_P(ParameterizedStyleResolverTest, LegacyOverlapBorderImage_Last_Source) {
   SetBodyInnerHTML(R"HTML(
       <style>
         div {
@@ -2576,7 +2593,7 @@
       << "Counted when border-image-source differs";
 }
 
-TEST_F(StyleResolverTest, LegacyOverlapBorderImage_Last_Slice) {
+TEST_P(ParameterizedStyleResolverTest, LegacyOverlapBorderImage_Last_Slice) {
   SetBodyInnerHTML(R"HTML(
       <style>
         div {
@@ -2590,7 +2607,8 @@
       << "Counted when border-image-slice differs";
 }
 
-TEST_F(StyleResolverTest, LegacyOverlapBorderImage_Last_SliceFill) {
+TEST_P(ParameterizedStyleResolverTest,
+       LegacyOverlapBorderImage_Last_SliceFill) {
   SetBodyInnerHTML(R"HTML(
       <style>
         div {
@@ -2604,7 +2622,8 @@
       << "Counted when the fill keyword of border-image-slice differs";
 }
 
-TEST_F(StyleResolverTest, LegacyOverlapBorderImage_SliceFillImplicit) {
+TEST_P(ParameterizedStyleResolverTest,
+       LegacyOverlapBorderImage_SliceFillImplicit) {
   SetBodyInnerHTML(R"HTML(
       <style>
         div {
@@ -2620,7 +2639,7 @@
       << "Counted when fill-less values are the same";
 }
 
-TEST_F(StyleResolverTest, LegacyOverlapBorderImage_Last_Width) {
+TEST_P(ParameterizedStyleResolverTest, LegacyOverlapBorderImage_Last_Width) {
   SetBodyInnerHTML(R"HTML(
       <style>
         div {
@@ -2634,7 +2653,7 @@
       << "Counted when border-image-slice differs";
 }
 
-TEST_F(StyleResolverTest, LegacyOverlapBorderImage_Last_Outset) {
+TEST_P(ParameterizedStyleResolverTest, LegacyOverlapBorderImage_Last_Outset) {
   SetBodyInnerHTML(R"HTML(
       <style>
         div {
@@ -2648,7 +2667,7 @@
       << "Counted when border-image-outset differs";
 }
 
-TEST_F(StyleResolverTest, LegacyOverlapBorderImage_Last_Repeat) {
+TEST_P(ParameterizedStyleResolverTest, LegacyOverlapBorderImage_Last_Repeat) {
   SetBodyInnerHTML(R"HTML(
       <style>
         div {
@@ -2662,7 +2681,7 @@
       << "Counted when border-image-repeat differs";
 }
 
-TEST_F(StyleResolverTest, LegacyOverlapBorderImageWidth_Single) {
+TEST_P(ParameterizedStyleResolverTest, LegacyOverlapBorderImageWidth_Single) {
   SetBodyInnerHTML(R"HTML(
     <style>
       div {
@@ -2675,7 +2694,7 @@
       << "Not counted when only border is used";
 }
 
-TEST_F(StyleResolverTest, LegacyOverlapBorderImageWidth_Order) {
+TEST_P(ParameterizedStyleResolverTest, LegacyOverlapBorderImageWidth_Order) {
   SetBodyInnerHTML(R"HTML(
     <style>
       div {
@@ -2689,7 +2708,7 @@
       << "Not counted when border is last";
 }
 
-TEST_F(StyleResolverTest, LegacyOverlapBorderImageWidth_Values) {
+TEST_P(ParameterizedStyleResolverTest, LegacyOverlapBorderImageWidth_Values) {
   SetBodyInnerHTML(R"HTML(
     <style>
       div {
@@ -2703,7 +2722,8 @@
       << "Not counted when values are the same";
 }
 
-TEST_F(StyleResolverTest, LegacyOverlapBorderImageWidth_Last_Border) {
+TEST_P(ParameterizedStyleResolverTest,
+       LegacyOverlapBorderImageWidth_Last_Border) {
   SetBodyInnerHTML(R"HTML(
       <style>
         div {
@@ -2722,7 +2742,8 @@
       << "Not even counted when -webkit-border-image is last";
 }
 
-TEST_F(StyleResolverTest, LegacyOverlapBorderImageWidth_Last_Style) {
+TEST_P(ParameterizedStyleResolverTest,
+       LegacyOverlapBorderImageWidth_Last_Style) {
   // Note that border-style is relevant here because the used border-width
   // is 0px if we don'y have any border-style. See e.g.
   // ComputedStyle::BorderLeftWidth.
@@ -2740,7 +2761,7 @@
          "border-width";
 }
 
-TEST_F(StyleResolverTest, PositionFallbackStylesBasic_Cascade) {
+TEST_P(ParameterizedStyleResolverTest, PositionFallbackStylesBasic_Cascade) {
   ScopedCSSAnchorPositioningForTest enabled(true);
   ScopedCSSAnchorPositioningCascadeFallbackForTest cascade(true);
 
@@ -2798,7 +2819,7 @@
   EXPECT_EQ(Length::Auto(), GetLeft(*try4));
 }
 
-TEST_F(StyleResolverTest,
+TEST_P(ParameterizedStyleResolverTest,
        PositionFallbackStylesResolveLogicalProperties_Cascade) {
   ScopedCSSAnchorPositioningForTest enabled(true);
   ScopedCSSAnchorPositioningCascadeFallbackForTest cascade(true);
@@ -2861,7 +2882,7 @@
   EXPECT_EQ(Length::Fixed(50), GetRight(*try3));
 }
 
-TEST_F(StyleResolverTest,
+TEST_P(ParameterizedStyleResolverTest,
        PositionFallbackStylesResolveRelativeLengthUnits_Cascade) {
   ScopedCSSAnchorPositioningForTest enabled(true);
   ScopedCSSAnchorPositioningCascadeFallbackForTest cascade(true);
@@ -2897,7 +2918,8 @@
   EXPECT_EQ(Length::Fixed(40), GetTop(*try1));
 }
 
-TEST_F(StyleResolverTest, PositionFallbackStylesInBeforePseudoElement_Cascade) {
+TEST_P(ParameterizedStyleResolverTest,
+       PositionFallbackStylesInBeforePseudoElement_Cascade) {
   ScopedCSSAnchorPositioningForTest enabled(true);
   ScopedCSSAnchorPositioningCascadeFallbackForTest cascade(true);
 
@@ -2936,7 +2958,8 @@
   EXPECT_EQ(Length::Fixed(50), GetTop(*try1));
 }
 
-TEST_F(StyleResolverTest, PositionFallbackStylesCSSWideKeywords_Cascade) {
+TEST_P(ParameterizedStyleResolverTest,
+       PositionFallbackStylesCSSWideKeywords_Cascade) {
   ScopedCSSAnchorPositioningForTest enabled(true);
   ScopedCSSAnchorPositioningCascadeFallbackForTest cascade(true);
 
@@ -3001,7 +3024,8 @@
   EXPECT_EQ(Length::Auto(), GetRight(*try3));
 }
 
-TEST_F(StyleResolverTest, PositionFallbackPropertyValueChange_Cascade) {
+TEST_P(ParameterizedStyleResolverTest,
+       PositionFallbackPropertyValueChange_Cascade) {
   ScopedCSSAnchorPositioningForTest enabled(true);
   ScopedCSSAnchorPositioningCascadeFallbackForTest cascade(true);
 
@@ -3062,7 +3086,7 @@
   }
 }
 
-TEST_F(StyleResolverTest, PositionFallback_PersistentTrySet) {
+TEST_P(ParameterizedStyleResolverTest, PositionFallback_PersistentTrySet) {
   ScopedCSSAnchorPositioningForTest enabled(true);
   ScopedCSSAnchorPositioningCascadeFallbackForTest cascade(true);
 
@@ -3109,7 +3133,7 @@
                target->GetPositionFallbackData()->GetTryPropertyValueSet());
 }
 
-TEST_F(StyleResolverTest, PositionFallback_PaintInvalidation) {
+TEST_P(ParameterizedStyleResolverTest, PositionFallback_PaintInvalidation) {
   ScopedCSSAnchorPositioningForTest enabled(true);
   ScopedCSSAnchorPositioningCascadeFallbackForTest cascade(true);
 
@@ -3147,7 +3171,7 @@
   EXPECT_TRUE(target->GetLayoutObject()->ShouldCheckForPaintInvalidation());
 }
 
-TEST_F(StyleResolverTest, TrySet_Basic) {
+TEST_P(ParameterizedStyleResolverTest, TrySet_Basic) {
   SetBodyInnerHTML(R"HTML(
     <style>
       div {
@@ -3181,7 +3205,7 @@
   EXPECT_EQ("30px", ComputedValue("right", *try_style));
 }
 
-TEST_F(StyleResolverTest, TrySet_RevertLayer) {
+TEST_P(ParameterizedStyleResolverTest, TrySet_RevertLayer) {
   SetBodyInnerHTML(R"HTML(
     <style>
       div {
@@ -3212,7 +3236,7 @@
   EXPECT_EQ("30px", ComputedValue("right", *try_style));
 }
 
-TEST_F(StyleResolverTest, TrySet_Revert) {
+TEST_P(ParameterizedStyleResolverTest, TrySet_Revert) {
   SetBodyInnerHTML(R"HTML(
     <style>
       div {
@@ -3243,7 +3267,7 @@
   EXPECT_EQ("30px", ComputedValue("right", *try_style));
 }
 
-TEST_F(StyleResolverTest, TrySet_NonAbsPos) {
+TEST_P(ParameterizedStyleResolverTest, TrySet_NonAbsPos) {
   SetBodyInnerHTML(R"HTML(
     <style>
       div {
@@ -3275,7 +3299,7 @@
   EXPECT_EQ("auto", ComputedValue("right", *try_style));
 }
 
-TEST_F(StyleResolverTest, TrySet_NonAbsPosDynamic) {
+TEST_P(ParameterizedStyleResolverTest, TrySet_NonAbsPosDynamic) {
   SetBodyInnerHTML(R"HTML(
     <style>
       div {
@@ -3310,7 +3334,7 @@
   EXPECT_EQ("auto", ComputedValue("right", *try_style));
 }
 
-TEST_F(StyleResolverTest,
+TEST_P(ParameterizedStyleResolverTest,
        PseudoElementWithAnimationAndOriginatingElementStyleChange) {
   SetBodyInnerHTML(R"HTML(
       <style>
@@ -3361,7 +3385,7 @@
   UpdateAllLifecyclePhasesForTest();
 }
 
-TEST_F(StyleResolverTestCQ, ContainerUnitContext) {
+TEST_P(StyleResolverTestCQ, ContainerUnitContext) {
   SetBodyInnerHTML(R"HTML(
     <style>
       #container, #div { container-type:size; }
@@ -3392,7 +3416,7 @@
   EXPECT_DOUBLE_EQ(200.0, state.CssToLengthConversionData().ContainerHeight());
 }
 
-TEST_F(StyleResolverTest, ScopedAnchorName) {
+TEST_P(ParameterizedStyleResolverTest, ScopedAnchorName) {
   GetDocument()
       .documentElement()
       ->setInnerHTMLWithDeclarativeShadowDOMForTesting(R"HTML(
@@ -3429,7 +3453,7 @@
       *inner_anchor->ComputedStyleRef().AnchorName()->GetNames()[0]);
 }
 
-TEST_F(StyleResolverTest, ScopedAnchorDefault) {
+TEST_P(ParameterizedStyleResolverTest, ScopedAnchorDefault) {
   GetDocument()
       .documentElement()
       ->setInnerHTMLWithDeclarativeShadowDOMForTesting(R"HTML(
@@ -3477,7 +3501,7 @@
              : nullptr;
 }
 
-TEST_F(StyleResolverTest, ScopedAnchorFunction) {
+TEST_P(ParameterizedStyleResolverTest, ScopedAnchorFunction) {
   GetDocument()
       .documentElement()
       ->setInnerHTMLWithDeclarativeShadowDOMForTesting(R"HTML(
@@ -3554,7 +3578,7 @@
   }
 }
 
-TEST_F(StyleResolverTest, ScopedAnchorSizeFunction) {
+TEST_P(ParameterizedStyleResolverTest, ScopedAnchorSizeFunction) {
   GetDocument()
       .documentElement()
       ->setInnerHTMLWithDeclarativeShadowDOMForTesting(R"HTML(
@@ -3615,7 +3639,7 @@
                                 GetMaxHeight(max_height->ComputedStyleRef())));
 }
 
-TEST_F(StyleResolverTestCQ, CanAffectAnimationsMPC) {
+TEST_P(StyleResolverTestCQ, CanAffectAnimationsMPC) {
   GetDocument().documentElement()->setInnerHTML(R"HTML(
     <style>
       #a { transition: color 1s; }
@@ -3643,7 +3667,7 @@
   EXPECT_FALSE(c->ComputedStyleRef().CanAffectAnimations());
 }
 
-TEST_F(StyleResolverTest, CssRulesForElementExcludeStartingStyle) {
+TEST_P(ParameterizedStyleResolverTest, CssRulesForElementExcludeStartingStyle) {
   SetBodyInnerHTML(R"HTML(
     <style>
       @starting-style {
@@ -3670,7 +3694,8 @@
             nullptr);
 }
 
-TEST_F(StyleResolverTest, PseudoCSSRulesForElementExcludeStartingStyle) {
+TEST_P(ParameterizedStyleResolverTest,
+       PseudoCSSRulesForElementExcludeStartingStyle) {
   SetBodyInnerHTML(R"HTML(
     <style>
       @starting-style {
diff --git a/third_party/blink/renderer/core/display_lock/display_lock_context.cc b/third_party/blink/renderer/core/display_lock/display_lock_context.cc
index c0f5a3c..b33a596 100644
--- a/third_party/blink/renderer/core/display_lock/display_lock_context.cc
+++ b/third_party/blink/renderer/core/display_lock/display_lock_context.cc
@@ -580,8 +580,9 @@
 
   // We also need to notify the AX cache (if it exists) to update the childrens
   // of |element_| in the AX cache.
-  if (AXObjectCache* cache = element_->GetDocument().ExistingAXObjectCache())
-    cache->ChildrenChanged(element_);
+  if (auto* ax_cache = element_->GetDocument().ExistingAXObjectCache()) {
+    ax_cache->SubtreeIsAttached(element_);
+  }
 
   // Schedule ContentVisibilityAutoStateChange event if needed.
   ScheduleStateChangeEventIfNeeded();
diff --git a/third_party/blink/renderer/core/dom/build.gni b/third_party/blink/renderer/core/dom/build.gni
index fb914afe..67b062db4 100644
--- a/third_party/blink/renderer/core/dom/build.gni
+++ b/third_party/blink/renderer/core/dom/build.gni
@@ -203,8 +203,6 @@
   "node_list.h",
   "node_lists_node_data.cc",
   "node_lists_node_data.h",
-  "node_move_scope.cc",
-  "node_move_scope.h",
   "node_part.cc",
   "node_part.h",
   "node_rare_data.cc",
diff --git a/third_party/blink/renderer/core/dom/child_node_part.cc b/third_party/blink/renderer/core/dom/child_node_part.cc
index dae224b..0e3781c1 100644
--- a/third_party/blink/renderer/core/dom/child_node_part.cc
+++ b/third_party/blink/renderer/core/dom/child_node_part.cc
@@ -8,7 +8,6 @@
 #include "third_party/blink/renderer/core/dom/document_fragment.h"
 #include "third_party/blink/renderer/core/dom/document_part_root.h"
 #include "third_party/blink/renderer/core/dom/node_cloning_data.h"
-#include "third_party/blink/renderer/core/dom/node_move_scope.h"
 #include "third_party/blink/renderer/platform/bindings/exception_state.h"
 #include "third_party/blink/renderer/platform/heap/collection_support/heap_vector.h"
 
@@ -20,6 +19,14 @@
                                      Node* next_sibling,
                                      const PartInit* init,
                                      ExceptionState& exception_state) {
+  if (!IsAcceptableNodeType(*previous_sibling) ||
+      !IsAcceptableNodeType(*next_sibling)) {
+    exception_state.ThrowDOMException(
+        DOMExceptionCode::kInvalidNodeTypeError,
+        "The provided previous_sibling and next_sibling nodes are not valid "
+        "for a ChildNodePart.");
+    return nullptr;
+  }
   return MakeGarbageCollected<ChildNodePart>(*GetPartRootFromUnion(root_union),
                                              *previous_sibling, *next_sibling,
                                              init);
@@ -32,6 +39,8 @@
     : Part(root, metadata),
       previous_sibling_(previous_sibling),
       next_sibling_(next_sibling) {
+  CHECK(IsAcceptableNodeType(previous_sibling));
+  CHECK(IsAcceptableNodeType(next_sibling));
   previous_sibling.AddDOMPart(*this);
   if (previous_sibling != next_sibling) {
     next_sibling.AddDOMPart(*this);
diff --git a/third_party/blink/renderer/core/dom/container_node.cc b/third_party/blink/renderer/core/dom/container_node.cc
index 3675f39..4710f6a 100644
--- a/third_party/blink/renderer/core/dom/container_node.cc
+++ b/third_party/blink/renderer/core/dom/container_node.cc
@@ -41,7 +41,6 @@
 #include "third_party/blink/renderer/core/dom/node_cloning_data.h"
 #include "third_party/blink/renderer/core/dom/node_computed_style.h"
 #include "third_party/blink/renderer/core/dom/node_lists_node_data.h"
-#include "third_party/blink/renderer/core/dom/node_move_scope.h"
 #include "third_party/blink/renderer/core/dom/node_rare_data.h"
 #include "third_party/blink/renderer/core/dom/node_traversal.h"
 #include "third_party/blink/renderer/core/dom/part.h"
@@ -155,9 +154,6 @@
     Node& node,
     NodeVector& nodes,
     ExceptionState& exception_state) {
-  if (RuntimeEnabledFeatures::DOMPartsAPIActivePartTrackingEnabled()) {
-    NodeMoveScope::SetCurrentNodeBeingRemoved(node);
-  }
   if (auto* fragment = DynamicTo<DocumentFragment>(node)) {
     GetChildNodes(*fragment, nodes);
     fragment->RemoveChildren();
@@ -419,10 +415,6 @@
   // 4. Adopt node into parent’s node document.
   NodeVector targets;
   DOMTreeMutationDetector detector(*new_child, *this);
-  NodeMoveScope node_move_scope(
-      *this, firstChild() == ref_child
-                 ? NodeMoveScopeType::kInsertBeforeAllChildren
-                 : NodeMoveScopeType::kOther);
   if (!CollectChildrenAndRemoveFromOldParent(*new_child, targets,
                                              exception_state))
     return new_child;
@@ -611,11 +603,6 @@
     // 13. Let nodes be node’s children if node is a DocumentFragment node, and
     // a list containing solely node otherwise.
     DOMTreeMutationDetector detector(*new_child, *this);
-    NodeMoveScope node_move_scope(
-        *this, !next ? NodeMoveScopeType::kAppendAfterAllChildren
-                     : (firstChild() == next
-                            ? NodeMoveScopeType::kInsertBeforeAllChildren
-                            : NodeMoveScopeType::kOther));
     if (!CollectChildrenAndRemoveFromOldParent(*new_child, targets,
                                                exception_state))
       return old_child;
@@ -930,8 +917,6 @@
 
   NodeVector targets;
   DOMTreeMutationDetector detector(*new_child, *this);
-  NodeMoveScope node_move_scope(*this,
-                                NodeMoveScopeType::kAppendAfterAllChildren);
   if (!CollectChildrenAndRemoveFromOldParent(*new_child, targets,
                                              exception_state))
     return new_child;
diff --git a/third_party/blink/renderer/core/dom/document.cc b/third_party/blink/renderer/core/dom/document.cc
index b48f1482..7e622ab6f 100644
--- a/third_party/blink/renderer/core/dom/document.cc
+++ b/third_party/blink/renderer/core/dom/document.cc
@@ -153,7 +153,6 @@
 #include "third_party/blink/renderer/core/dom/node_computed_style.h"
 #include "third_party/blink/renderer/core/dom/node_iterator.h"
 #include "third_party/blink/renderer/core/dom/node_lists_node_data.h"
-#include "third_party/blink/renderer/core/dom/node_move_scope.h"
 #include "third_party/blink/renderer/core/dom/node_rare_data.h"
 #include "third_party/blink/renderer/core/dom/node_traversal.h"
 #include "third_party/blink/renderer/core/dom/node_with_index.h"
@@ -8900,7 +8899,6 @@
   visitor->Trace(element_data_cache_);
   visitor->Trace(use_elements_needing_update_);
   visitor->Trace(svg_resources_needing_invalidation_);
-  visitor->Trace(node_move_scope_items_);
   visitor->Trace(template_document_);
   visitor->Trace(template_document_host_);
   visitor->Trace(user_action_elements_);
diff --git a/third_party/blink/renderer/core/dom/document.h b/third_party/blink/renderer/core/dom/document.h
index 9d3c83b..0507c29 100644
--- a/third_party/blink/renderer/core/dom/document.h
+++ b/third_party/blink/renderer/core/dom/document.h
@@ -209,7 +209,6 @@
 class MediaQueryListListener;
 class MediaQueryMatcher;
 class NodeIterator;
-class NodeMoveScopeItem;
 class NthIndexCache;
 class Page;
 class PendingAnimations;
@@ -1556,12 +1555,6 @@
     return *worklet_animation_controller_;
   }
 
-  // This uses an inline capacity of 2: typically there is only one scope active
-  // in a Document, but in some cases there will be a ShadowRoot being
-  // constructed, bringing the total to 2.
-  using NodeMoveScopeItemSet = HeapVector<Member<NodeMoveScopeItem>, 2>;
-  NodeMoveScopeItemSet& NodeMoveScopeItems() { return node_move_scope_items_; }
-
   void AttachCompositorTimeline(cc::AnimationTimeline*) const;
 
   enum class TopLayerReason {
@@ -2606,8 +2599,6 @@
   Member<WorkletAnimationController> worklet_animation_controller_;
   AnimationClock animation_clock_;
 
-  NodeMoveScopeItemSet node_move_scope_items_;
-
   Member<Document> template_document_;
   Member<Document> template_document_host_;
 
diff --git a/third_party/blink/renderer/core/dom/document_part_root.cc b/third_party/blink/renderer/core/dom/document_part_root.cc
index 6f8643a..1d43b289 100644
--- a/third_party/blink/renderer/core/dom/document_part_root.cc
+++ b/third_party/blink/renderer/core/dom/document_part_root.cc
@@ -10,7 +10,6 @@
 #include "third_party/blink/renderer/core/dom/document_fragment.h"
 #include "third_party/blink/renderer/core/dom/node.h"
 #include "third_party/blink/renderer/core/dom/node_cloning_data.h"
-#include "third_party/blink/renderer/core/dom/node_move_scope.h"
 #include "third_party/blink/renderer/platform/bindings/exception_state.h"
 #include "third_party/blink/renderer/platform/bindings/script_wrappable.h"
 #include "third_party/blink/renderer/platform/heap/garbage_collected.h"
@@ -38,7 +37,6 @@
   DocumentPartRoot* new_part_root =
       clone->IsDocumentNode() ? &To<Document>(clone)->getPartRoot()
                               : &To<DocumentFragment>(clone)->getPartRoot();
-  NodeMoveScope node_move_scope(*clone, NodeMoveScopeType::kClone);
   return PartRoot::GetUnionFromPartRoot(new_part_root);
 }
 
diff --git a/third_party/blink/renderer/core/dom/element.cc b/third_party/blink/renderer/core/dom/element.cc
index fe24f92..e46b9fa 100644
--- a/third_party/blink/renderer/core/dom/element.cc
+++ b/third_party/blink/renderer/core/dom/element.cc
@@ -3675,7 +3675,7 @@
       new_style = nullptr;
       NotifyAXOfAttachedSubtree();
     } else {
-      if (!new_style->IsContentVisibilityVisible()) {
+      if (!old_style && !new_style->IsContentVisibilityVisible()) {
         NotifyAXOfAttachedSubtree();
       }
       if (new_style->IsContainerForSizeContainerQueries()) {
diff --git a/third_party/blink/renderer/core/dom/node.cc b/third_party/blink/renderer/core/dom/node.cc
index 25f390336..74a741ab 100644
--- a/third_party/blink/renderer/core/dom/node.cc
+++ b/third_party/blink/renderer/core/dom/node.cc
@@ -2199,28 +2199,6 @@
   layout_object->SetSubtreeShouldDoFullPaintInvalidation();
 }
 
-void Node::UpdateForRemovedDOMParts(ContainerNode& insertion_point) {
-  if (LIKELY(!RuntimeEnabledFeatures::DOMPartsAPIEnabled())) {
-    return;
-  }
-  if (auto* parts = GetDOMParts()) {
-    for (Part* part : *parts) {
-      part->PartDisconnected(*this);
-    }
-  }
-}
-
-void Node::UpdateForInsertedDOMParts(ContainerNode& insertion_point) {
-  if (LIKELY(!RuntimeEnabledFeatures::DOMPartsAPIEnabled())) {
-    return;
-  }
-  if (auto* parts = GetDOMParts()) {
-    for (Part* part : *parts) {
-      part->PartConnected(*this, insertion_point);
-    }
-  }
-}
-
 Node::InsertionNotificationRequest Node::InsertedInto(
     ContainerNode& insertion_point) {
   DCHECK(!ChildNeedsStyleInvalidation());
@@ -2233,7 +2211,6 @@
     insertion_point.GetDocument().IncrementNodeCount();
 #endif
   }
-  UpdateForInsertedDOMParts(insertion_point);
   if (ParentOrShadowHostNode()->IsInShadowTree())
     SetFlag(kIsInShadowTreeFlag);
   if (auto* cache = GetDocument().ExistingAXObjectCache()) {
@@ -2254,7 +2231,6 @@
     insertion_point.GetDocument().DecrementNodeCount();
 #endif
   }
-  UpdateForRemovedDOMParts(insertion_point);
   if (IsInShadowTree() && !ContainingTreeScope().RootNode().IsShadowRoot())
     ClearFlag(kIsInShadowTreeFlag);
   if (auto* cache = GetDocument().ExistingAXObjectCache()) {
diff --git a/third_party/blink/renderer/core/dom/node.h b/third_party/blink/renderer/core/dom/node.h
index 0527f3d2..55e6164 100644
--- a/third_party/blink/renderer/core/dom/node.h
+++ b/third_party/blink/renderer/core/dom/node.h
@@ -956,8 +956,6 @@
   PartsList* GetDOMParts() const {
     return HasRareData() ? RareData()->GetDOMParts() : nullptr;
   }
-  void UpdateForRemovedDOMParts(ContainerNode& insertion_point);
-  void UpdateForInsertedDOMParts(ContainerNode& insertion_point);
 
   // For the imperative slot distribution API.
   void SetManuallyAssignedSlot(HTMLSlotElement* slot);
diff --git a/third_party/blink/renderer/core/dom/node_cloning_data.h b/third_party/blink/renderer/core/dom/node_cloning_data.h
index 55b65905..c02af9ee 100644
--- a/third_party/blink/renderer/core/dom/node_cloning_data.h
+++ b/third_party/blink/renderer/core/dom/node_cloning_data.h
@@ -64,6 +64,9 @@
     cloned_part_root_stack_.pop_back();
   }
   bool PartRootStackInvalid() const { return cloned_part_root_stack_.empty(); }
+  bool PartRootStackHasOnlyDocumentRoot() const {
+    return cloned_part_root_stack_.size() <= 1;
+  }
 
   PartRoot& CurrentPartRoot() const {
     DCHECK(!PartRootStackInvalid());
diff --git a/third_party/blink/renderer/core/dom/node_move_scope.cc b/third_party/blink/renderer/core/dom/node_move_scope.cc
deleted file mode 100644
index 86b98b95..0000000
--- a/third_party/blink/renderer/core/dom/node_move_scope.cc
+++ /dev/null
@@ -1,12 +0,0 @@
-// Copyright 2023 The Chromium Authors
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#include "third_party/blink/renderer/core/dom/node_move_scope.h"
-
-namespace blink {
-
-NodeMoveScopeItem* NodeMoveScope::current_item_ = nullptr;
-Document* NodeMoveScope::document_ = nullptr;
-
-}  // namespace blink
diff --git a/third_party/blink/renderer/core/dom/node_move_scope.h b/third_party/blink/renderer/core/dom/node_move_scope.h
deleted file mode 100644
index 8cca350..0000000
--- a/third_party/blink/renderer/core/dom/node_move_scope.h
+++ /dev/null
@@ -1,188 +0,0 @@
-// Copyright 2023 The Chromium Authors
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#ifndef THIRD_PARTY_BLINK_RENDERER_CORE_DOM_NODE_MOVE_SCOPE_H_
-#define THIRD_PARTY_BLINK_RENDERER_CORE_DOM_NODE_MOVE_SCOPE_H_
-
-#include "base/logging.h"
-#include "third_party/blink/renderer/core/core_export.h"
-#include "third_party/blink/renderer/core/dom/document.h"
-#include "third_party/blink/renderer/core/dom/node.h"
-#include "third_party/blink/renderer/platform/heap/garbage_collected.h"
-#include "third_party/blink/renderer/platform/runtime_enabled_features.h"
-#include "third_party/blink/renderer/platform/wtf/allocator/allocator.h"
-#include "third_party/blink/renderer/platform/wtf/wtf.h"
-
-namespace blink {
-
-enum class NodeMoveScopeType {
-  kOther = 0,
-  kInsertBeforeAllChildren,
-  kAppendAfterAllChildren,
-  kClone,
-};
-
-class NodeMoveScopeItem : public GarbageCollected<NodeMoveScopeItem> {
- public:
-  NodeMoveScopeItem(Node& destination_root, NodeMoveScopeType type)
-      : destination_root_(destination_root),
-        all_parts_lists_clean_(type != NodeMoveScopeType::kOther &&
-                               !destination_root.GetDocument().HasListenerType(
-                                   Document::kDOMMutationEventListener)),
-        prepending_children_(type ==
-                             NodeMoveScopeType::kInsertBeforeAllChildren) {
-    DCHECK(RuntimeEnabledFeatures::DOMPartsAPIActivePartTrackingEnabled());
-    DCHECK(RuntimeEnabledFeatures::DOMPartsAPIEnabled());
-  }
-  NodeMoveScopeItem(const NodeMoveScopeItem&) = delete;
-  NodeMoveScopeItem& operator=(const NodeMoveScopeItem&) = delete;
-
-  ~NodeMoveScopeItem() { DCHECK(destination_root_); }
-
-  Node* GetDestinationTreeRoot() {
-    if (!destination_tree_root_) {
-      destination_tree_root_ = &destination_root_->TreeRoot();
-    }
-    return destination_tree_root_.Get();
-  }
-
-  void SetCurrentNodeBeingRemoved(Node& node) {
-    current_node_being_removed_ = &node;
-  }
-
-  Node* CurrentNodeBeingRemoved() {
-    DCHECK(current_node_being_removed_);
-    return current_node_being_removed_.Get();
-  }
-
-  bool AllMovedPartsWereClean() { return all_parts_lists_clean_; }
-
-  bool IsPrepend() {
-    DCHECK(AllMovedPartsWereClean());
-    return prepending_children_;
-  }
-
-  void Trace(Visitor* visitor) const {
-    visitor->Trace(destination_root_);
-    visitor->Trace(destination_tree_root_);
-    visitor->Trace(current_node_being_removed_);
-  }
-
- private:
-  Member<Node> destination_root_;
-  Member<Node> destination_tree_root_;
-  Member<Node> current_node_being_removed_;
-  bool all_parts_lists_clean_;
-  bool prepending_children_;
-};
-
-class NodeMoveScope {
-  STACK_ALLOCATED();
-
- public:
-  NodeMoveScope(Node& destination_root, NodeMoveScopeType type) {
-    if (!RuntimeEnabledFeatures::DOMPartsAPIActivePartTrackingEnabled()) {
-      return;
-    }
-    DCHECK(RuntimeEnabledFeatures::DOMPartsAPIEnabled());
-    DCHECK(IsMainThread());
-    auto* document = &destination_root.GetDocument();
-    if (!document->DOMPartsInUse() && type != NodeMoveScopeType::kClone) {
-      return;
-    }
-    document_ = document;
-    current_item_ =
-        MakeGarbageCollected<NodeMoveScopeItem>(destination_root, type);
-    document_->NodeMoveScopeItems().push_back(current_item_);
-  }
-  NodeMoveScope(const NodeMoveScope&) = delete;
-  NodeMoveScope& operator=(const NodeMoveScope&) = delete;
-
-  ~NodeMoveScope() {
-    if (!RuntimeEnabledFeatures::DOMPartsAPIActivePartTrackingEnabled()) {
-      return;
-    }
-    DCHECK(RuntimeEnabledFeatures::DOMPartsAPIEnabled());
-    DCHECK(IsMainThread());
-    if (!InScope()) {
-      return;
-    }
-    if (document_) {
-      DCHECK(current_item_);
-      DCHECK_EQ(document_->NodeMoveScopeItems().back(), current_item_);
-      document_->NodeMoveScopeItems().pop_back();
-    }
-    if (!document_ || document_->NodeMoveScopeItems().empty()) {
-      current_item_ = nullptr;
-      document_ = nullptr;
-    } else {
-      current_item_ = document_->NodeMoveScopeItems().back();
-    }
-  }
-
-  static bool InScope() {
-    DCHECK_EQ(!document_, !current_item_);
-    return current_item_;
-  }
-
-  static Node* GetDestinationTreeRoot() {
-    DCHECK(RuntimeEnabledFeatures::DOMPartsAPIActivePartTrackingEnabled());
-    DCHECK(RuntimeEnabledFeatures::DOMPartsAPIEnabled());
-    DCHECK(IsMainThread());
-    if (!InScope()) {
-      return nullptr;
-    }
-    return current_item_->GetDestinationTreeRoot();
-  }
-
-  static void SetCurrentNodeBeingRemoved(Node& node) {
-    if (!RuntimeEnabledFeatures::DOMPartsAPIActivePartTrackingEnabled()) {
-      return;
-    }
-    DCHECK(RuntimeEnabledFeatures::DOMPartsAPIEnabled());
-    DCHECK(IsMainThread());
-    if (!InScope()) {
-      return;
-    }
-    current_item_->SetCurrentNodeBeingRemoved(node);
-  }
-
-  static Node* CurrentNodeBeingRemoved() {
-    DCHECK(RuntimeEnabledFeatures::DOMPartsAPIActivePartTrackingEnabled());
-    DCHECK(RuntimeEnabledFeatures::DOMPartsAPIEnabled());
-    DCHECK(IsMainThread());
-    if (!InScope()) {
-      return nullptr;
-    }
-    return current_item_->CurrentNodeBeingRemoved();
-  }
-
-  static bool AllMovedPartsWereClean() {
-    DCHECK(RuntimeEnabledFeatures::DOMPartsAPIActivePartTrackingEnabled());
-    DCHECK(RuntimeEnabledFeatures::DOMPartsAPIEnabled());
-    DCHECK(IsMainThread());
-    if (!InScope()) {
-      return false;
-    }
-    return current_item_->AllMovedPartsWereClean();
-  }
-
-  static bool IsPrepend() {
-    DCHECK(RuntimeEnabledFeatures::DOMPartsAPIActivePartTrackingEnabled());
-    DCHECK(RuntimeEnabledFeatures::DOMPartsAPIEnabled());
-    DCHECK(IsMainThread());
-    if (!InScope()) {
-      return false;
-    }
-    return current_item_->IsPrepend();
-  }
-
- private:
-  CORE_EXPORT static NodeMoveScopeItem* current_item_;
-  CORE_EXPORT static Document* document_;
-};
-
-}  // namespace blink
-
-#endif  // THIRD_PARTY_BLINK_RENDERER_CORE_DOM_NODE_MOVE_SCOPE_H_
diff --git a/third_party/blink/renderer/core/dom/node_part.cc b/third_party/blink/renderer/core/dom/node_part.cc
index 063f6aa..da488122 100644
--- a/third_party/blink/renderer/core/dom/node_part.cc
+++ b/third_party/blink/renderer/core/dom/node_part.cc
@@ -16,6 +16,12 @@
                            Node* node,
                            const PartInit* init,
                            ExceptionState& exception_state) {
+  if (!IsAcceptableNodeType(*node)) {
+    exception_state.ThrowDOMException(
+        DOMExceptionCode::kInvalidNodeTypeError,
+        "The provided node is not a valid node for a NodePart.");
+    return nullptr;
+  }
   return MakeGarbageCollected<NodePart>(
       *PartRoot::GetPartRootFromUnion(root_union), *node, init);
 }
@@ -25,6 +31,7 @@
                    bool add_to_parts_list,
                    const Vector<String> metadata)
     : Part(root, metadata), node_(node) {
+  CHECK(IsAcceptableNodeType(node));
   node.AddDOMPart(*this);
   if (add_to_parts_list) {
     root.AddPart(*this);
diff --git a/third_party/blink/renderer/core/dom/part.cc b/third_party/blink/renderer/core/dom/part.cc
index ef2fdfc..715e176f 100644
--- a/third_party/blink/renderer/core/dom/part.cc
+++ b/third_party/blink/renderer/core/dom/part.cc
@@ -7,83 +7,12 @@
 #include "third_party/blink/renderer/core/dom/document.h"
 #include "third_party/blink/renderer/core/dom/document_fragment.h"
 #include "third_party/blink/renderer/core/dom/document_part_root.h"
-#include "third_party/blink/renderer/core/dom/node_move_scope.h"
 #include "third_party/blink/renderer/core/dom/part_root.h"
 #include "third_party/blink/renderer/core/dom/tree_scope.h"
 #include "third_party/blink/renderer/platform/wtf/vector.h"
 
 namespace blink {
 
-// When disconnecting a Node/Part, if the root() is the DocumentPartRoot,
-// then we disconnect the Part from the PartRoot so that it can be attached
-// to the new PartRoot when reconnected. For any Part type except a
-// ChildNodePart, that's all we do. For ChildNodeParts, the node being moved
-// could be either the `previous_sibling` or the `next_sibling`. If we're
-// moving the parent Node, then both sibling nodes will get moved, and nothing
-// needs to be done. Similarly if the previous sibling is being moved by itself
-// then nothing needs to be done. However, if the next sibling is being moved
-// by itself, that won't trigger any root changes, so we mark the PartRoot
-// dirty in this case.
-void Part::PartDisconnected(Node& node) {
-  if (!root() ||
-      !RuntimeEnabledFeatures::DOMPartsAPIActivePartTrackingEnabled()) {
-    return;
-  }
-  if (&node == NodeToSortBy()) {
-    // If this part's root is the DocumentPartRoot, then disconnect it.
-    if (root()->IsDocumentPartRoot()) {
-      MoveToRoot(nullptr);
-    }
-  } else if (NodeMoveScope::CurrentNodeBeingRemoved() == &node) {
-    // This is the case when a ChildNodePart is having its `next_sibling` node
-    // moved directly. This must dirty the PartRoot since we're not also moving
-    // the `previous_sibling` node.
-    root()->MarkPartsDirty();
-  }
-}
-
-// When connecting a Node/Part, if this isn't the main Node for the Part, do
-// nothing. Similarly, if there's already a root(), do nothing. If there isn't
-// a root(), then we were disconnected from our previous DocumentPartRoot, so
-// we need to locate the new one and connect to it. If we're in a NodeMoveScope,
-// then it will have the root container, otherwise we use the slow TreeRoot()
-// walk.
-void Part::PartConnected(Node& node, ContainerNode& insertion_point) {
-  if (node != NodeToSortBy() || root() ||
-      !RuntimeEnabledFeatures::DOMPartsAPIActivePartTrackingEnabled()) {
-    return;
-  }
-  Node* root_container = NodeMoveScope::GetDestinationTreeRoot();
-  if (root_container) {
-    DCHECK_EQ(root_container, &insertion_point.TreeRoot());
-  } else {
-    // If we're not in a NodeMoveScope, we'll need to potentially walk the
-    // parent tree to find the TreeRoot, which can be slow.
-    root_container = &insertion_point.TreeRoot();
-  }
-  PartRoot* new_root;
-  if (auto* document_fragment = DynamicTo<DocumentFragment>(root_container)) {
-    new_root = &document_fragment->getPartRoot();
-  } else if (auto* document = DynamicTo<Document>(root_container)) {
-    new_root = &document->getPartRoot();
-  } else {
-    // insertion_point is not located in a Document or DocumentFragment.
-    new_root = nullptr;
-  }
-  MoveToRoot(new_root);
-}
-
-void Part::MoveToRoot(PartRoot* new_root) {
-  if (root_) {
-    root_->RemovePart(*this);
-  }
-  root_ = new_root;
-  is_valid_ = root_ && connected_;
-  if (new_root) {
-    new_root->AddPart(*this);
-  }
-}
-
 void Part::Trace(Visitor* visitor) const {
   visitor->Trace(root_);
   ScriptWrappable::Trace(visitor);
@@ -103,4 +32,16 @@
   return PartRoot::GetUnionFromPartRoot(root_.Get());
 }
 
+// static
+bool Part::IsAcceptableNodeType(Node& node) {
+  if (Element* element = DynamicTo<Element>(node)) {
+    if (element->IsDocumentElement()) {
+      return false;
+    }
+  }
+  auto type = node.getNodeType();
+  return type == Node::kElementNode || type == Node::kTextNode ||
+         type == Node::kCommentNode;
+}
+
 }  // namespace blink
diff --git a/third_party/blink/renderer/core/dom/part.h b/third_party/blink/renderer/core/dom/part.h
index bde50ae..55ee1cf 100644
--- a/third_party/blink/renderer/core/dom/part.h
+++ b/third_party/blink/renderer/core/dom/part.h
@@ -36,10 +36,7 @@
   virtual PartRoot* GetAsPartRoot() const { return nullptr; }
   virtual bool IncludeInPartsList() const { return true; }
   PartRoot* root() const { return root_.Get(); }
-  void MoveToRoot(PartRoot* new_root);
   virtual Document& GetDocument() const = 0;
-  void PartDisconnected(Node& node);
-  void PartConnected(Node& node, ContainerNode& insertion_point);
 
   // Part API
   V8UnionChildNodePartOrDocumentPartRoot* rootForBindings() const;
@@ -50,6 +47,7 @@
   Part(PartRoot& root, const Vector<String> metadata)
       : root_(root), metadata_(metadata) {}
   bool IsConnected() { return connected_; }
+  static bool IsAcceptableNodeType(Node& node);
 
  private:
   Member<PartRoot> root_;
diff --git a/third_party/blink/renderer/core/dom/part_root.cc b/third_party/blink/renderer/core/dom/part_root.cc
index 1c491d9..854e08cb 100644
--- a/third_party/blink/renderer/core/dom/part_root.cc
+++ b/third_party/blink/renderer/core/dom/part_root.cc
@@ -11,7 +11,6 @@
 #include "third_party/blink/renderer/core/dom/document_part_root.h"
 #include "third_party/blink/renderer/core/dom/element_traversal.h"
 #include "third_party/blink/renderer/core/dom/node_cloning_data.h"
-#include "third_party/blink/renderer/core/dom/node_move_scope.h"
 #include "third_party/blink/renderer/core/dom/node_traversal.h"
 #include "third_party/blink/renderer/core/dom/part.h"
 #include "third_party/blink/renderer/platform/heap/garbage_collected.h"
@@ -26,22 +25,8 @@
   if (cached_parts_list_dirty_) {
     return;
   }
-  bool no_tracking =
-      !RuntimeEnabledFeatures::DOMPartsAPIActivePartTrackingEnabled();
-  if (no_tracking || NodeMoveScope::AllMovedPartsWereClean()) {
-    DCHECK(!base::Contains(cached_ordered_parts_, &new_part));
-    if (no_tracking || !NodeMoveScope::IsPrepend()) {
-      cached_ordered_parts_.push_back(&new_part);
-    } else {
-      // TODO(crbug.com/1453291) If we go back to tracking parts, this case
-      // should do: cached_ordered_parts_.push_front(&new_part).
-      cached_ordered_parts_.clear();
-      cached_parts_list_dirty_ = true;
-    }
-  } else {
-    cached_ordered_parts_.clear();
-    cached_parts_list_dirty_ = true;
-  }
+  DCHECK(!base::Contains(cached_ordered_parts_, &new_part));
+  cached_ordered_parts_.push_back(&new_part);
 }
 
 // If we're removing the first Part in the cached part list, then just remove
@@ -88,10 +73,10 @@
         continue;
       }
       // This should *only* be the nextSibling of a ChildNodePart.
-      DCHECK(part->GetAsPartRoot()) << "Should be a ChildNodePart";
+      CHECK(part->GetAsPartRoot()) << "Should be a ChildNodePart";
       DCHECK_EQ(static_cast<ChildNodePart*>(part)->nextSibling(), source_node)
           << "This should be the next sibling node";
-      if (data.PartRootStackInvalid()) {
+      if (data.PartRootStackHasOnlyDocumentRoot()) {
         // If there have been mis-nested parts, abort.
         continue;
       }
diff --git a/third_party/blink/renderer/core/fragment_directive/text_fragment_anchor_metrics_test.cc b/third_party/blink/renderer/core/fragment_directive/text_fragment_anchor_metrics_test.cc
index 21b7dac..997b7a33 100644
--- a/third_party/blink/renderer/core/fragment_directive/text_fragment_anchor_metrics_test.cc
+++ b/third_party/blink/renderer/core/fragment_directive/text_fragment_anchor_metrics_test.cc
@@ -6,6 +6,7 @@
 
 #include "base/test/metrics/histogram_tester.h"
 #include "base/test/simple_test_tick_clock.h"
+#include "base/test/task_environment.h"
 #include "components/ukm/test_ukm_recorder.h"
 #include "services/metrics/public/cpp/ukm_builders.h"
 #include "testing/gtest/include/gtest/gtest.h"
@@ -34,6 +35,16 @@
 
 class TextFragmentAnchorMetricsTest : public TextFragmentAnchorTestBase {
  public:
+// TODO(crbug.com/1315595): Only have one constructor that initializes the
+// MOCK_TIME for blink::test::TaskEnvironment once migration to
+// blink_unittests_v2 completes.
+#if defined(HAS_BLINK_TASK_ENVIRONMENT)
+  TextFragmentAnchorMetricsTest()
+      : TextFragmentAnchorTestBase(
+            base::test::TaskEnvironment::TimeSource::MOCK_TIME) {}
+#else
+  TextFragmentAnchorMetricsTest() = default;
+#endif
   void SimulateClick(int x, int y) {
     WebMouseEvent event(WebInputEvent::Type::kMouseDown, gfx::PointF(x, y),
                         gfx::PointF(x, y), WebPointerProperties::Button::kLeft,
diff --git a/third_party/blink/renderer/core/fragment_directive/text_fragment_anchor_test.cc b/third_party/blink/renderer/core/fragment_directive/text_fragment_anchor_test.cc
index 5fb8771..ebfc821 100644
--- a/third_party/blink/renderer/core/fragment_directive/text_fragment_anchor_test.cc
+++ b/third_party/blink/renderer/core/fragment_directive/text_fragment_anchor_test.cc
@@ -4,6 +4,7 @@
 
 #include "base/run_loop.h"
 #include "base/test/scoped_feature_list.h"
+#include "base/test/task_environment.h"
 #include "build/build_config.h"
 #include "components/shared_highlighting/core/common/shared_highlighting_features.h"
 #include "testing/gtest/include/gtest/gtest.h"
@@ -55,8 +56,13 @@
 
 using test::RunPendingTasks;
 
-class TextFragmentAnchorTest : public TextFragmentAnchorTestBase {
+class TextFragmentAnchorTestController : public TextFragmentAnchorTestBase {
  public:
+  explicit TextFragmentAnchorTestController(
+      base::test::TaskEnvironment::TimeSource time_source)
+      : TextFragmentAnchorTestBase(time_source) {}
+  TextFragmentAnchorTestController() = default;
+
   void BeginEmptyFrame() {
     // If a test case doesn't find a match and therefore doesn't schedule the
     // beforematch event, we should still render a second frame as if we did
@@ -162,6 +168,20 @@
   }
 };
 
+// TODO(crbug.com/1315595): Only have one constructor that initializes the
+// MOCK_TIME for blink::test::TaskEnvironment once migration to
+// blink_unittests_v2 completes.
+class TextFragmentAnchorTest : public TextFragmentAnchorTestController {
+ public:
+#if defined(HAS_BLINK_TASK_ENVIRONMENT)
+  TextFragmentAnchorTest()
+      : TextFragmentAnchorTestController(
+            base::test::TaskEnvironment::TimeSource::MOCK_TIME) {}
+#else
+  TextFragmentAnchorTest() = default;
+#endif
+};
+
 // Basic test case, ensure we scroll the matching text into view.
 TEST_F(TextFragmentAnchorTest, BasicSmokeTest) {
   SimRequest request("https://example.com/test.html#:~:text=test", "text/html");
@@ -2547,16 +2567,14 @@
   EXPECT_TRUE(GetDocument().Markers().Markers().empty());
 }
 
-class TextFragmentAnchorPostLoadTest : public TextFragmentAnchorTest {
+// These tests are specifically testing the post-load timer task so use
+// the real clock to faithfully reproduce real-world behavior.
+class TextFragmentAnchorPostLoadTest : public TextFragmentAnchorTestController {
+ public:
+  TextFragmentAnchorPostLoadTest() = default;
   void SetUp() override {
-    TextFragmentAnchorTest::SetUp();
-
-    // These tests are specifically testing the post-load timer task so use
-    // the real clock to faithfully reproduce real-world behavior.
-    WebView()
-        .Scheduler()
-        ->GetVirtualTimeController()
-        ->DisableVirtualTimeForTesting();
+    TextFragmentAnchorTestController::SetUp();
+    DisableVirtualTimeIfSet();
   }
 };
 
diff --git a/third_party/blink/renderer/core/fragment_directive/text_fragment_selector_test.cc b/third_party/blink/renderer/core/fragment_directive/text_fragment_selector_test.cc
index 8801640..02e8ce2 100644
--- a/third_party/blink/renderer/core/fragment_directive/text_fragment_selector_test.cc
+++ b/third_party/blink/renderer/core/fragment_directive/text_fragment_selector_test.cc
@@ -6,6 +6,8 @@
 
 #include <gtest/gtest.h>
 
+#include "third_party/blink/renderer/platform/testing/task_environment.h"
+
 #define EXPECT_SELECTORS_EQ(a, b)    \
   EXPECT_EQ(a.Type(), b.Type());     \
   EXPECT_EQ(a.Start(), b.Start());   \
@@ -18,6 +20,11 @@
 static const TextFragmentSelector kInvalidSelector(
     TextFragmentSelector::kInvalid);
 
+class TextFragmentSelectorTest : public testing::Test {
+ private:
+  test::TaskEnvironment task_environment;
+};
+
 TEST(TextFragmentSelectorTest, ExactText) {
   TextFragmentSelector selector =
       TextFragmentSelector::FromTextDirective("test");
diff --git a/third_party/blink/renderer/core/fragment_directive/text_fragment_test_util.cc b/third_party/blink/renderer/core/fragment_directive/text_fragment_test_util.cc
index 97ee2fe4..6086fe43 100644
--- a/third_party/blink/renderer/core/fragment_directive/text_fragment_test_util.cc
+++ b/third_party/blink/renderer/core/fragment_directive/text_fragment_test_util.cc
@@ -12,26 +12,32 @@
 #include "third_party/blink/renderer/core/frame/web_frame_widget_impl.h"
 #include "third_party/blink/renderer/platform/scheduler/public/main_thread_scheduler.h"
 #include "third_party/blink/renderer/platform/scheduler/public/thread_scheduler.h"
+#include "third_party/blink/renderer/platform/testing/task_environment.h"
 #include "third_party/blink/renderer/platform/testing/unit_test_helpers.h"
 #include "ui/gfx/geometry/size.h"
 
 namespace blink {
 
+TextFragmentAnchorTestBase::TextFragmentAnchorTestBase()
+    : enable_virtual_time_(true) {}
+
+TextFragmentAnchorTestBase::TextFragmentAnchorTestBase(
+    base::test::TaskEnvironment::TimeSource time_source)
+    : SimTest(time_source) {}
+
 void TextFragmentAnchorTestBase::SetUp() {
   SimTest::SetUp();
-  // Most tests aren't concerned with the post-load task timers so use virtual
-  // time so tests don't spend time waiting for the real-clock timers to fire.
-  WebView().Scheduler()->GetVirtualTimeController()->EnableVirtualTime(
-      base::Time());
-
+  if (enable_virtual_time_) {
+    // Most tests aren't concerned with the post-load task timers so use virtual
+    // time so tests don't spend time waiting for the real-clock timers to fire.
+    WebView().Scheduler()->GetVirtualTimeController()->EnableVirtualTime(
+        base::Time());
+  }
   WebView().MainFrameViewWidget()->Resize(gfx::Size(800, 600));
 }
 
 void TextFragmentAnchorTestBase::TearDown() {
-  WebView()
-      .Scheduler()
-      ->GetVirtualTimeController()
-      ->DisableVirtualTimeForTesting();
+  DisableVirtualTimeIfSet();
   SimTest::TearDown();
 }
 
@@ -39,7 +45,11 @@
   ThreadScheduler::Current()
       ->ToMainThreadScheduler()
       ->StartIdlePeriodForTesting();
-  test::RunPendingTasks();
+  if (enable_virtual_time_) {
+    test::RunPendingTasks();
+  } else {
+    task_environment()->FastForwardUntilNoTasksRemain();
+  }
 }
 
 void TextFragmentAnchorTestBase::RunUntilTextFragmentFinalization() {
@@ -65,8 +75,12 @@
   }
   if (anchor->iteration_ == TextFragmentAnchor::kPostLoad) {
     // Run the TextFragmentAnchor::PostLoadTask which is on a timer delay.
-    test::RunDelayedTasks(TextFragmentAnchor::PostLoadTaskTimeout());
-
+    if (enable_virtual_time_) {
+      test::RunDelayedTasks(TextFragmentAnchor::PostLoadTaskTimeout());
+    } else {
+      task_environment()->FastForwardBy(
+          TextFragmentAnchor::PostLoadTaskTimeout());
+    }
     // PostLoadTask schedules a new frame to perform the final text search.
     // Perform that here.
     Compositor().BeginFrame();
@@ -79,4 +93,15 @@
   Compositor().BeginFrame();
 }
 
+void TextFragmentAnchorTestBase::DisableVirtualTimeIfSet() {
+  if (!enable_virtual_time_) {
+    return;
+  }
+  auto* virtual_time_controller =
+      WebView().Scheduler()->GetVirtualTimeController();
+  if (virtual_time_controller) {
+    virtual_time_controller->DisableVirtualTimeForTesting();
+  }
+}
+
 }  // namespace blink
diff --git a/third_party/blink/renderer/core/fragment_directive/text_fragment_test_util.h b/third_party/blink/renderer/core/fragment_directive/text_fragment_test_util.h
index cc97e96..579342909 100644
--- a/third_party/blink/renderer/core/fragment_directive/text_fragment_test_util.h
+++ b/third_party/blink/renderer/core/fragment_directive/text_fragment_test_util.h
@@ -7,17 +7,34 @@
 
 #include "third_party/blink/renderer/core/fragment_directive/text_fragment_anchor.h"
 #include "third_party/blink/renderer/core/testing/sim/sim_test.h"
+#include "third_party/blink/renderer/platform/testing/task_environment.h"
 
 namespace blink {
 
 class TextFragmentAnchorTestBase : public SimTest {
  public:
+  explicit TextFragmentAnchorTestBase(
+      base::test::TaskEnvironment::TimeSource time_source);
+  TextFragmentAnchorTestBase();
   // SimTest overrides
   void SetUp() override;
   void TearDown() override;
 
   void RunAsyncMatchingTasks();
   void RunUntilTextFragmentFinalization();
+
+  // Helps ensure that tests disable the virtual time controller during teardown
+  // or to test real time behavior from tests. This only works if the
+  // VirtualTimeController::EnableVirtualTime() has been called, otherwise this
+  // function no-ops.
+  void DisableVirtualTimeIfSet();
+
+ private:
+  // This is mostly used to run tests in blink_unittests which doesn't yet
+  // support blink::test::TaskEnvironment, and also provides a way for tests
+  // verifying real time behavior in blink_unittests_v2 to turn off virtual
+  // time.
+  bool enable_virtual_time_ = false;
 };
 
 }  // namespace blink
diff --git a/third_party/blink/renderer/core/frame/animation_frame_timing_monitor.h b/third_party/blink/renderer/core/frame/animation_frame_timing_monitor.h
index 77b8d74..24e75db 100644
--- a/third_party/blink/renderer/core/frame/animation_frame_timing_monitor.h
+++ b/third_party/blink/renderer/core/frame/animation_frame_timing_monitor.h
@@ -44,7 +44,6 @@
     virtual bool RequestedMainFramePending() = 0;
     virtual ukm::UkmRecorder* MainFrameUkmRecorder() = 0;
     virtual ukm::SourceId MainFrameUkmSourceId() = 0;
-    virtual bool IsMainFrameFullyLoaded() const = 0;
   };
   AnimationFrameTimingMonitor(Client&, CoreProbeSink*);
   AnimationFrameTimingMonitor(const AnimationFrameTimingMonitor&) = delete;
diff --git a/third_party/blink/renderer/core/frame/web_frame_widget_impl.cc b/third_party/blink/renderer/core/frame/web_frame_widget_impl.cc
index 4acfd9d..b7ea81d 100644
--- a/third_party/blink/renderer/core/frame/web_frame_widget_impl.cc
+++ b/third_party/blink/renderer/core/frame/web_frame_widget_impl.cc
@@ -422,22 +422,6 @@
   return local_root_->GetFrame()->DomWindow()->UkmSourceID();
 }
 
-bool WebFrameWidgetImpl::IsMainFrameFullyLoaded() const {
-  DCHECK(local_root_);
-  if (!local_root_->IsOutermostMainFrame()) {
-    return false;
-  }
-
-  return local_root_->GetFrame() &&
-         local_root_->GetFrame()->Loader().GetDocumentLoader() &&
-         !local_root_->GetFrame()
-              ->Loader()
-              .GetDocumentLoader()
-              ->GetTiming()
-              .LoadEventEnd()
-              .is_null();
-}
-
 gfx::Rect WebFrameWidgetImpl::ComputeBlockBound(
     const gfx::Point& point_in_root_frame,
     bool ignore_clipping) const {
diff --git a/third_party/blink/renderer/core/frame/web_frame_widget_impl.h b/third_party/blink/renderer/core/frame/web_frame_widget_impl.h
index 0c0bb60..f41c556 100644
--- a/third_party/blink/renderer/core/frame/web_frame_widget_impl.h
+++ b/third_party/blink/renderer/core/frame/web_frame_widget_impl.h
@@ -339,7 +339,6 @@
   bool RequestedMainFramePending() override;
   ukm::UkmRecorder* MainFrameUkmRecorder() override;
   ukm::SourceId MainFrameUkmSourceId() override;
-  bool IsMainFrameFullyLoaded() const override;
 
   // WebFrameWidget overrides.
   void InitializeNonCompositing(WebNonCompositedWidgetClient* client) override;
diff --git a/third_party/blink/renderer/core/html/html_tag_names.json5 b/third_party/blink/renderer/core/html/html_tag_names.json5
index d383c82..786b335b 100644
--- a/third_party/blink/renderer/core/html/html_tag_names.json5
+++ b/third_party/blink/renderer/core/html/html_tag_names.json5
@@ -15,7 +15,8 @@
   //   that ensure that the tokenizer produces HTMLTag::kUnknown when the
   //   feature flag is disabled.
   // * make sure that any uses of HTMLTag::kYourElement treat it as
-  //   HTMLTag::kUnknown if the feature flag is disabled.
+  //   HTMLTag::kUnknown if the feature flag is disabled.  The member is
+  //   renamed to HTMLTag::kYourElementOrUnknown to remind you of this.
   // * have a virtual suite testing the feature flag being disabled that
   //   checks that any relevant behaviors (parsing or otherwise) are
   //   unaffected when the feature is disabled.
diff --git a/third_party/blink/renderer/core/html/media/html_media_element.cc b/third_party/blink/renderer/core/html/media/html_media_element.cc
index 6c0d295..3d21695e 100644
--- a/third_party/blink/renderer/core/html/media/html_media_element.cc
+++ b/third_party/blink/renderer/core/html/media/html_media_element.cc
@@ -709,13 +709,6 @@
   return !IsFullscreen() || HTMLElement::IsFocusable(update_behavior);
 }
 
-bool HTMLMediaElement::IsKeyboardFocusable(
-    UpdateBehavior update_behavior) const {
-  // Media elements are keyboard focusable if they are focusable at all,
-  // and don't have a negative tabindex set.
-  return IsFocusable(update_behavior) && tabIndex() >= 0;
-}
-
 int HTMLMediaElement::DefaultTabIndex() const {
   return 0;
 }
diff --git a/third_party/blink/renderer/core/html/media/html_media_element.h b/third_party/blink/renderer/core/html/media/html_media_element.h
index b392df5..cb5b0ca0e 100644
--- a/third_party/blink/renderer/core/html/media/html_media_element.h
+++ b/third_party/blink/renderer/core/html/media/html_media_element.h
@@ -500,8 +500,6 @@
                          UpdateBehavior::kStyleAndLayout) const final;
   bool IsFocusable(UpdateBehavior update_behavior =
                        UpdateBehavior::kStyleAndLayout) const final;
-  bool IsKeyboardFocusable(UpdateBehavior update_behavior =
-                               UpdateBehavior::kStyleAndLayout) const final;
   int DefaultTabIndex() const final;
   bool LayoutObjectIsNeeded(const DisplayStyle&) const override;
   LayoutObject* CreateLayoutObject(const ComputedStyle&) override;
diff --git a/third_party/blink/renderer/core/html/parser/html_document_parser.cc b/third_party/blink/renderer/core/html/parser/html_document_parser.cc
index 96fdba63..b795ec5 100644
--- a/third_party/blink/renderer/core/html/parser/html_document_parser.cc
+++ b/third_party/blink/renderer/core/html/parser/html_document_parser.cc
@@ -29,9 +29,11 @@
 #include <utility>
 
 #include "base/feature_list.h"
+#include "base/memory/scoped_refptr.h"
 #include "base/metrics/histogram_functions.h"
 #include "base/numerics/safe_conversions.h"
 #include "base/strings/strcat.h"
+#include "base/synchronization/lock.h"
 #include "base/task/sequenced_task_runner.h"
 #include "base/task/single_thread_task_runner.h"
 #include "base/types/optional_util.h"
@@ -66,6 +68,7 @@
 #include "third_party/blink/renderer/core/probe/core_probes.h"
 #include "third_party/blink/renderer/core/script/html_parser_script_runner.h"
 #include "third_party/blink/renderer/platform/bindings/runtime_call_stats.h"
+#include "third_party/blink/renderer/platform/heap/cross_thread_handle.h"
 #include "third_party/blink/renderer/platform/heap/garbage_collected.h"
 #include "third_party/blink/renderer/platform/heap/persistent.h"
 #include "third_party/blink/renderer/platform/instrumentation/tracing/trace_event.h"
@@ -78,6 +81,7 @@
 #include "third_party/blink/renderer/platform/wtf/cross_thread_copier_base.h"
 #include "third_party/blink/renderer/platform/wtf/cross_thread_functional.h"
 #include "third_party/blink/renderer/platform/wtf/shared_buffer.h"
+#include "third_party/blink/renderer/platform/wtf/thread_safe_ref_counted.h"
 #include "third_party/blink/renderer/platform/wtf/wtf.h"
 
 namespace blink {
@@ -331,6 +335,37 @@
       preload_processing_mode_(GetPreloadProcessingMode()),
       budget_(budget) {}
 
+// Wrap pending preloads in a thread safe and ref-counted object since the
+// vector is added to from a background thread and taken from from the main
+// thread.
+class HTMLDocumentParser::PendingPreloads
+    : public ThreadSafeRefCounted<PendingPreloads> {
+ public:
+  PendingPreloads() = default;
+
+  Vector<std::unique_ptr<PendingPreloadData>> Take() {
+    base::AutoLock auto_lock(lock_);
+    return std::move(preloads_);
+  }
+
+  // Returns the number of items pending preload after `preload_data` has been
+  // added.
+  size_t Add(std::unique_ptr<PendingPreloadData> preload_data) {
+    base::AutoLock auto_lock(lock_);
+    preloads_.push_back(std::move(preload_data));
+    return preloads_.size();
+  }
+
+  bool IsEmpty() {
+    base::AutoLock auto_lock(lock_);
+    return preloads_.empty();
+  }
+
+ private:
+  base::Lock lock_;
+  Vector<std::unique_ptr<PendingPreloadData>> preloads_ GUARDED_BY(lock_);
+};
+
 HTMLDocumentParser::HTMLDocumentParser(HTMLDocument& document,
                                        ParserSynchronizationPolicy sync_policy,
                                        ParserPrefetchPolicy prefetch_policy)
@@ -394,6 +429,7 @@
            document.Url().IsLocalFile())
               ? kInfiniteTokenizationBudget
               : kDefaultMaxTokenizationBudget)),
+      pending_preloads_(base::MakeRefCounted<PendingPreloads>()),
       scheduler_(sync_policy == kAllowDeferredParsing
                      ? Thread::Current()->Scheduler()
                      : nullptr) {
@@ -1508,7 +1544,7 @@
           this, options_, GetPreloadScannerThread()->GetTaskRunner(),
           CrossThreadBindRepeating(
               &HTMLDocumentParser::AddPreloadDataOnBackgroundThread,
-              WrapCrossThreadWeakPersistent(this),
+              MakeCrossThreadWeakHandle(this), this->pending_preloads_,
               GetDocument()->GetTaskRunner(TaskType::kInternalLoading)));
 
       background_scan_fn_ = CrossThreadBindRepeating(
@@ -1545,31 +1581,29 @@
 
 // static
 void HTMLDocumentParser::AddPreloadDataOnBackgroundThread(
-    CrossThreadWeakPersistent<HTMLDocumentParser> weak_parser,
+    CrossThreadWeakHandle<HTMLDocumentParser> parser_handle,
+    scoped_refptr<PendingPreloads> pending_preloads,
     scoped_refptr<base::SequencedTaskRunner> task_runner,
     std::unique_ptr<PendingPreloadData> preload_data) {
   DCHECK(!IsMainThread());
-  auto parser = weak_parser.Lock();
-  if (!parser)
-    return;
 
-  bool should_post_task = false;
-  {
-    base::AutoLock lock(parser->pending_preload_lock_);
-    // Only post a task if the preload data is empty. Otherwise, a task has
-    // already been posted and will consume the new data.
-    should_post_task = parser->pending_preload_data_.empty();
-    parser->pending_preload_data_.push_back(std::move(preload_data));
-  }
+  size_t num_pending_preloads = pending_preloads->Add(std::move(preload_data));
 
-  if (should_post_task) {
+  // Only post a task if the preload data was empty before we added this data.
+  // Otherwise, a task has already been posted and will consume the new data.
+  if (num_pending_preloads == 1) {
     PostCrossThreadTask(
         *task_runner, FROM_HERE,
-        CrossThreadBindOnce(&HTMLDocumentParser::FlushPendingPreloads,
-                            std::move(parser)));
+        CrossThreadBindOnce(
+            &HTMLDocumentParser::FlushPendingPreloads,
+            MakeUnwrappingCrossThreadWeakHandle(std::move(parser_handle))));
   }
 }
 
+bool HTMLDocumentParser::HasPendingPreloads() {
+  return pending_preloads_->IsEmpty();
+}
+
 void HTMLDocumentParser::FlushPendingPreloads() {
   DCHECK(IsMainThread());
   if (!ThreadedPreloadScannerEnabled())
@@ -1579,15 +1613,11 @@
     return;
 
   // Do this in a loop in case more preloads are added in the background.
-  while (HasPendingPreloads()) {
-    Vector<std::unique_ptr<PendingPreloadData>> preload_data;
-    {
-      base::AutoLock lock(pending_preload_lock_);
-      preload_data = std::move(pending_preload_data_);
-    }
-
-    for (auto& preload : preload_data)
+  Vector<std::unique_ptr<PendingPreloadData>> preload_data;
+  while (!(preload_data = pending_preloads_->Take()).empty()) {
+    for (auto& preload : preload_data) {
       ProcessPreloadData(std::move(preload));
+    }
   }
 }
 
diff --git a/third_party/blink/renderer/core/html/parser/html_document_parser.h b/third_party/blink/renderer/core/html/parser/html_document_parser.h
index c196588..e2f7272 100644
--- a/third_party/blink/renderer/core/html/parser/html_document_parser.h
+++ b/third_party/blink/renderer/core/html/parser/html_document_parser.h
@@ -30,7 +30,6 @@
 
 #include "base/memory/scoped_refptr.h"
 #include "base/memory/weak_ptr.h"
-#include "base/synchronization/lock.h"
 #include "base/task/sequenced_task_runner.h"
 #include "base/task/single_thread_task_runner.h"
 #include "third_party/blink/public/common/features.h"
@@ -50,6 +49,7 @@
 #include "third_party/blink/renderer/core/html/parser/text_resource_decoder.h"
 #include "third_party/blink/renderer/core/page/viewport_description.h"
 #include "third_party/blink/renderer/core/script/html_parser_script_runner_host.h"
+#include "third_party/blink/renderer/platform/heap/cross_thread_handle.h"
 #include "third_party/blink/renderer/platform/heap/prefinalizer.h"
 #include "third_party/blink/renderer/platform/scheduler/public/thread_scheduler.h"
 #include "third_party/blink/renderer/platform/wtf/deque.h"
@@ -140,13 +140,14 @@
   void ForcePlaintextForTextDocument();
 
  private:
+  enum NextTokenStatus { kNoTokens, kHaveTokens, kHaveTokensAfterScript };
+  class PendingPreloads;
+
   HTMLDocumentParser(Document&,
                      ParserContentPolicy,
                      ParserSynchronizationPolicy,
                      ParserPrefetchPolicy);
 
-  enum NextTokenStatus { kNoTokens, kHaveTokens, kHaveTokensAfterScript };
-
   // DocumentParser
   void Detach() final;
   bool HasInsertionPoint() final;
@@ -234,14 +235,12 @@
 
   // Called on the background thread by |background_scanner_|.
   static void AddPreloadDataOnBackgroundThread(
-      CrossThreadWeakPersistent<HTMLDocumentParser> weak_parser,
+      CrossThreadWeakHandle<HTMLDocumentParser> parser_handle,
+      scoped_refptr<PendingPreloads> pending_preloads,
       scoped_refptr<base::SequencedTaskRunner> task_runner,
       std::unique_ptr<PendingPreloadData> preload_data);
 
-  bool HasPendingPreloads() {
-    base::AutoLock lock(pending_preload_lock_);
-    return !pending_preload_data_.empty();
-  }
+  bool HasPendingPreloads();
 
   // Returns true if the data should be processed (tokenizer pumped) now. If
   // this returns false, SchedulePumpTokenizer() should be called. This is
@@ -285,12 +284,10 @@
   // A timer for how long we are inactive after yielding
   std::unique_ptr<base::ElapsedTimer> yield_timer_;
 
-  // If ThreadedPreloadScanner is enabled, preload data will be added to this
-  // vector from a background thread. The main thread will take this preload
-  // data and send out the requests.
-  base::Lock pending_preload_lock_;
-  Vector<std::unique_ptr<PendingPreloadData>> pending_preload_data_
-      GUARDED_BY(pending_preload_lock_);
+  // If ThreadedPreloadScanner is enabled, preload data will be added to
+  // `pending_preloads_` from a background thread. The main thread will
+  // take this preload data and send out the requests.
+  scoped_refptr<PendingPreloads> pending_preloads_;
 
   ThreadScheduler* scheduler_;
 
diff --git a/third_party/blink/renderer/core/inspector/inspector_emulation_agent.cc b/third_party/blink/renderer/core/inspector/inspector_emulation_agent.cc
index 0e2ee0e4..4a289c4 100644
--- a/third_party/blink/renderer/core/inspector/inspector_emulation_agent.cc
+++ b/third_party/blink/renderer/core/inspector/inspector_emulation_agent.cc
@@ -192,6 +192,7 @@
   if (emulate_auto_dark_mode_.Get()) {
     setAutoDarkModeOverride(Maybe<bool>());
   }
+  setTimezoneOverride(String());
   setDefaultBackgroundColorOverride(Maybe<protocol::DOM::RGBA>());
   disabled_image_types_.Clear();
   return protocol::Response::Success();
diff --git a/third_party/blink/renderer/core/layout/grid/grid_item.cc b/third_party/blink/renderer/core/layout/grid/grid_item.cc
index 62d8509e..52444c5 100644
--- a/third_party/blink/renderer/core/layout/grid/grid_item.cc
+++ b/third_party/blink/renderer/core/layout/grid/grid_item.cc
@@ -11,11 +11,12 @@
 
 namespace {
 
-// Given an |item_style| determines the correct |AxisEdge| alignment.
+// Given an `item_style` determines the correct `AxisEdge` alignment.
 // Additionally will determine:
-//  - The behavior of 'auto' via the |auto_behavior| out-parameter.
-//  - If the alignment is safe via the |is_overflow_safe| out-parameter.
-AxisEdge AxisEdgeFromItemPosition(bool is_inline_axis,
+//  - The behavior of 'auto' via the `auto_behavior` out-parameter.
+//  - If the alignment is safe via the `is_overflow_safe` out-parameter.
+AxisEdge AxisEdgeFromItemPosition(GridTrackSizingDirection track_direction,
+                                  bool has_subgridded_axis,
                                   bool is_replaced,
                                   bool is_out_of_flow,
                                   const ComputedStyle& item_style,
@@ -24,7 +25,14 @@
                                   bool* is_overflow_safe) {
   DCHECK(auto_behavior && is_overflow_safe);
 
-  const auto& alignment = is_inline_axis
+  if (has_subgridded_axis) {
+    *auto_behavior = AutoSizeBehavior::kStretchImplicit;
+    *is_overflow_safe = true;
+    return AxisEdge::kStart;
+  }
+
+  const bool is_for_columns = track_direction == kForColumns;
+  const auto& alignment = is_for_columns
                               ? item_style.ResolvedJustifySelf(
                                     ItemPosition::kNormal, &root_grid_style)
                               : item_style.ResolvedAlignSelf(
@@ -36,11 +44,12 @@
   // Auto-margins take precedence over any alignment properties.
   if (item_style.MayHaveMargin() && !is_out_of_flow) {
     const bool is_start_auto =
-        is_inline_axis
+        is_for_columns
             ? item_style.MarginInlineStartUsing(root_grid_style).IsAuto()
             : item_style.MarginBlockStartUsing(root_grid_style).IsAuto();
+
     const bool is_end_auto =
-        is_inline_axis
+        is_for_columns
             ? item_style.MarginInlineEndUsing(root_grid_style).IsAuto()
             : item_style.MarginBlockEndUsing(root_grid_style).IsAuto();
 
@@ -78,7 +87,7 @@
                                           physical.Top(), physical.Right(),
                                           physical.Bottom(), physical.Left());
 
-      if (is_inline_axis) {
+      if (is_for_columns) {
         return item_position == ItemPosition::kSelfStart ? logical.InlineStart()
                                                          : logical.InlineEnd();
       }
@@ -101,11 +110,11 @@
     case ItemPosition::kLastBaseline:
       return AxisEdge::kLastBaseline;
     case ItemPosition::kLeft:
-      DCHECK(is_inline_axis);
+      DCHECK(is_for_columns);
       return root_grid_writing_direction.IsLtr() ? AxisEdge::kStart
                                                  : AxisEdge::kEnd;
     case ItemPosition::kRight:
-      DCHECK(is_inline_axis);
+      DCHECK(is_for_columns);
       return root_grid_writing_direction.IsRtl() ? AxisEdge::kStart
                                                  : AxisEdge::kEnd;
     case ItemPosition::kNormal:
@@ -142,22 +151,6 @@
       parent_grid_font_baseline(parent_grid_font_baseline) {
   const auto& style = node.Style();
 
-  const bool is_replaced = node.IsReplaced();
-  const bool is_out_of_flow = node.IsOutOfFlowPositioned();
-
-  // Determine the alignment for the grid item ahead of time (we may need to
-  // know if it stretches to correctly determine any block axis contribution).
-  bool is_overflow_safe;
-  inline_axis_alignment = AxisEdgeFromItemPosition(
-      /* is_inline_axis */ true, is_replaced, is_out_of_flow, style,
-      root_grid_style, &inline_auto_behavior, &is_overflow_safe);
-  is_inline_axis_overflow_safe = is_overflow_safe;
-
-  block_axis_alignment = AxisEdgeFromItemPosition(
-      /* is_inline_axis */ false, is_replaced, is_out_of_flow, style,
-      root_grid_style, &block_auto_behavior, &is_overflow_safe);
-  is_block_axis_overflow_safe = is_overflow_safe;
-
   const auto root_grid_writing_direction =
       root_grid_style.GetWritingDirection();
   const auto item_writing_mode = style.GetWritingMode();
@@ -173,16 +166,6 @@
       root_grid_writing_direction, item_writing_mode,
       /* is_parallel_context */ true);
 
-  column_baseline_group = DetermineBaselineGroup(
-      root_grid_writing_direction, column_baseline_writing_mode,
-      /* is_parallel_context */ false,
-      /* is_last_baseline */ inline_axis_alignment == AxisEdge::kLastBaseline);
-
-  row_baseline_group = DetermineBaselineGroup(
-      root_grid_writing_direction, row_baseline_writing_mode,
-      /* is_parallel_context */ true,
-      /* is_last_baseline */ block_axis_alignment == AxisEdge::kLastBaseline);
-
   // From https://drafts.csswg.org/css-grid-2/#subgrid-listing:
   //   "...if the grid container is otherwise forced to establish an independent
   //   formatting context... the grid container is not a subgrid."
@@ -202,6 +185,32 @@
                               : style.GridTemplateColumns().IsSubgriddedAxis();
   }
 
+  const bool is_out_of_flow = node.IsOutOfFlowPositioned();
+  const bool is_replaced = node.IsReplaced();
+
+  // Determine the alignment for the grid item ahead of time (we may need to
+  // know if it stretches to correctly determine any block axis contribution).
+  bool is_overflow_safe;
+  column_alignment = AxisEdgeFromItemPosition(
+      kForColumns, has_subgridded_columns, is_replaced, is_out_of_flow, style,
+      root_grid_style, &column_auto_behavior, &is_overflow_safe);
+  is_overflow_safe_for_columns = is_overflow_safe;
+
+  column_baseline_group = DetermineBaselineGroup(
+      root_grid_writing_direction, column_baseline_writing_mode,
+      /* is_parallel_context */ false,
+      /* is_last_baseline */ column_alignment == AxisEdge::kLastBaseline);
+
+  row_alignment = AxisEdgeFromItemPosition(
+      kForRows, has_subgridded_rows, is_replaced, is_out_of_flow, style,
+      root_grid_style, &row_auto_behavior, &is_overflow_safe);
+  is_overflow_safe_for_rows = is_overflow_safe;
+
+  row_baseline_group = DetermineBaselineGroup(
+      root_grid_writing_direction, row_baseline_writing_mode,
+      /* is_parallel_context */ true,
+      /* is_last_baseline */ row_alignment == AxisEdge::kLastBaseline);
+
   // The `false, true, false, true` parameters get the converter to calculate
   // whether the subgrids and its root grid are opposite direction in all cases.
   const LogicalToLogical<bool> direction_converter(
@@ -270,30 +279,20 @@
     return true;
   };
 
-  // Set fallback alignment to start edges if an item requests baseline
-  // alignment but does not meet requirements for it.
-  if (!CanParticipateInBaselineAlignment()) {
-    const auto baseline_group = BaselineGroup(track_direction);
-    if (track_direction == kForColumns) {
-      inline_axis_alignment_fallback = baseline_group == BaselineGroup::kMajor
-                                           ? AxisEdge::kStart
-                                           : AxisEdge::kEnd;
-      is_inline_axis_overflow_safe_fallback = true;
-    } else {
-      block_axis_alignment_fallback = baseline_group == BaselineGroup::kMajor
-                                          ? AxisEdge::kStart
-                                          : AxisEdge::kEnd;
-      is_block_axis_overflow_safe_fallback = true;
-    }
-  } else {
+  auto& fallback_alignment = (track_direction == kForColumns)
+                                 ? column_fallback_alignment
+                                 : row_fallback_alignment;
+
+  if (CanParticipateInBaselineAlignment()) {
     // Reset the alignment fallback if eligibility has changed.
-    if (track_direction == kForColumns) {
-      inline_axis_alignment_fallback.reset();
-      is_inline_axis_overflow_safe_fallback.reset();
-    } else {
-      block_axis_alignment_fallback.reset();
-      is_block_axis_overflow_safe_fallback.reset();
-    }
+    fallback_alignment.reset();
+  } else {
+    // Set fallback alignment to start edges if an item requests baseline
+    // alignment but does not meet the requirements for it.
+    fallback_alignment =
+        (BaselineGroup(track_direction) == BaselineGroup::kMajor)
+            ? AxisEdge::kStart
+            : AxisEdge::kEnd;
   }
 }
 
diff --git a/third_party/blink/renderer/core/layout/grid/grid_item.h b/third_party/blink/renderer/core/layout/grid/grid_item.h
index 0f4712a..7c3aeb83d 100644
--- a/third_party/blink/renderer/core/layout/grid/grid_item.h
+++ b/third_party/blink/renderer/core/layout/grid/grid_item.h
@@ -44,56 +44,35 @@
   void SetAlignmentFallback(GridTrackSizingDirection track_direction,
                             bool has_synthesized_baseline);
 
-  AxisEdge InlineAxisAlignment() const {
-    return inline_axis_alignment_fallback.value_or(inline_axis_alignment);
-  }
-  AxisEdge BlockAxisAlignment() const {
-    return block_axis_alignment_fallback.value_or(block_axis_alignment);
+  AxisEdge Alignment(GridTrackSizingDirection track_direction) const {
+    return (track_direction == kForColumns)
+               ? column_fallback_alignment.value_or(column_alignment)
+               : row_fallback_alignment.value_or(row_alignment);
   }
 
-  bool IsInlineAxisOverflowSafe() const {
-    return is_inline_axis_overflow_safe_fallback.value_or(
-        is_inline_axis_overflow_safe);
-  }
-  bool IsBlockAxisOverflowSafe() const {
-    return is_block_axis_overflow_safe_fallback.value_or(
-        is_block_axis_overflow_safe);
+  bool IsOverflowSafe(GridTrackSizingDirection track_direction) const {
+    return (track_direction == kForColumns)
+               ? column_fallback_alignment || is_overflow_safe_for_columns
+               : row_fallback_alignment || is_overflow_safe_for_rows;
   }
 
   bool IsBaselineAligned(GridTrackSizingDirection track_direction) const {
-    const bool is_for_columns = track_direction == kForColumns;
-    const bool has_subgridded_axis =
-        is_for_columns ? has_subgridded_columns : has_subgridded_rows;
-
-    if (has_subgridded_axis) {
-      return false;
-    }
-
-    const auto axis_alignment =
-        is_for_columns ? InlineAxisAlignment() : BlockAxisAlignment();
+    const auto axis_alignment = Alignment(track_direction);
     return (axis_alignment == AxisEdge::kFirstBaseline ||
             axis_alignment == AxisEdge::kLastBaseline);
   }
 
   bool IsBaselineSpecified(GridTrackSizingDirection track_direction) const {
-    const bool is_for_columns = track_direction == kForColumns;
-    const bool has_subgridded_axis =
-        is_for_columns ? has_subgridded_columns : has_subgridded_rows;
-
-    if (has_subgridded_axis) {
-      return false;
-    }
-
-    const auto axis_alignment =
-        is_for_columns ? inline_axis_alignment : block_axis_alignment;
+    const auto& axis_alignment =
+        (track_direction == kForColumns) ? column_alignment : row_alignment;
     return (axis_alignment == AxisEdge::kFirstBaseline ||
             axis_alignment == AxisEdge::kLastBaseline);
   }
 
   bool IsLastBaselineSpecified(GridTrackSizingDirection track_direction) const {
     return (track_direction == kForColumns)
-               ? inline_axis_alignment == AxisEdge::kLastBaseline
-               : block_axis_alignment == AxisEdge::kLastBaseline;
+               ? column_alignment == AxisEdge::kLastBaseline
+               : row_alignment == AxisEdge::kLastBaseline;
   }
 
   // For this item and track direction, computes the pair of indices |begin| and
@@ -231,31 +210,28 @@
 
   bool has_subgridded_columns : 1;
   bool has_subgridded_rows : 1;
-  bool is_block_axis_overflow_safe : 1;
   bool is_considered_for_column_sizing : 1;
   bool is_considered_for_row_sizing : 1;
-  bool is_inline_axis_overflow_safe : 1;
+  bool is_opposite_direction_in_root_grid_columns : 1;
+  bool is_opposite_direction_in_root_grid_rows : 1;
+  bool is_overflow_safe_for_columns : 1;
+  bool is_overflow_safe_for_rows : 1;
   bool is_parallel_with_root_grid : 1;
   bool is_sizing_dependent_on_block_size : 1;
   bool is_subgridded_to_parent_grid : 1;
-  bool is_opposite_direction_in_root_grid_columns : 1;
-  bool is_opposite_direction_in_root_grid_rows : 1;
   bool must_consider_grid_items_for_column_sizing : 1;
   bool must_consider_grid_items_for_row_sizing : 1;
 
   FontBaseline parent_grid_font_baseline;
 
-  AxisEdge inline_axis_alignment;
-  AxisEdge block_axis_alignment;
+  AxisEdge column_alignment;
+  AxisEdge row_alignment;
 
-  absl::optional<AxisEdge> inline_axis_alignment_fallback;
-  absl::optional<AxisEdge> block_axis_alignment_fallback;
+  absl::optional<AxisEdge> column_fallback_alignment;
+  absl::optional<AxisEdge> row_fallback_alignment;
 
-  absl::optional<bool> is_inline_axis_overflow_safe_fallback;
-  absl::optional<bool> is_block_axis_overflow_safe_fallback;
-
-  AutoSizeBehavior inline_auto_behavior;
-  AutoSizeBehavior block_auto_behavior;
+  AutoSizeBehavior column_auto_behavior;
+  AutoSizeBehavior row_auto_behavior;
 
   enum BaselineGroup column_baseline_group;
   enum BaselineGroup row_baseline_group;
diff --git a/third_party/blink/renderer/core/layout/grid/grid_layout_algorithm.cc b/third_party/blink/renderer/core/layout/grid/grid_layout_algorithm.cc
index 2c7455c..d6277af 100644
--- a/third_party/blink/renderer/core/layout/grid/grid_layout_algorithm.cc
+++ b/third_party/blink/renderer/core/layout/grid/grid_layout_algorithm.cc
@@ -3296,8 +3296,8 @@
   }
 
   builder.SetPercentageResolutionSize(containing_grid_area_size);
-  builder.SetInlineAutoBehavior(grid_item.inline_auto_behavior);
-  builder.SetBlockAutoBehavior(grid_item.block_auto_behavior);
+  builder.SetInlineAutoBehavior(grid_item.column_auto_behavior);
+  builder.SetBlockAutoBehavior(grid_item.row_auto_behavior);
 
   if (container_constraint_space.HasBlockFragmentation() &&
       opt_fragment_relative_block_offset) {
@@ -3619,13 +3619,12 @@
         AlignmentOffset(containing_grid_area.size.inline_size,
                         fragment.InlineSize(), margins.inline_start,
                         margins.inline_end, inline_baseline_offset,
-                        grid_item.InlineAxisAlignment(),
-                        grid_item.IsInlineAxisOverflowSafe()),
-        AlignmentOffset(containing_grid_area.size.block_size,
-                        fragment.BlockSize(), margins.block_start,
-                        margins.block_end, block_baseline_offset,
-                        grid_item.BlockAxisAlignment(),
-                        grid_item.IsBlockAxisOverflowSafe()));
+                        grid_item.Alignment(kForColumns),
+                        grid_item.IsOverflowSafe(kForColumns)),
+        AlignmentOffset(
+            containing_grid_area.size.block_size, fragment.BlockSize(),
+            margins.block_start, margins.block_end, block_baseline_offset,
+            grid_item.Alignment(kForRows), grid_item.IsOverflowSafe(kForRows)));
 
     // Grid is special in that %-based offsets resolve against the grid-area.
     // Determine the relative offset here (instead of in the builder). This is
@@ -4174,8 +4173,8 @@
     LogicalStaticPosition::InlineEdge inline_edge;
     LogicalStaticPosition::BlockEdge block_edge;
 
-    AlignmentOffsetForOutOfFlow(out_of_flow_item.InlineAxisAlignment(),
-                                out_of_flow_item.BlockAxisAlignment(),
+    AlignmentOffsetForOutOfFlow(out_of_flow_item.Alignment(kForColumns),
+                                out_of_flow_item.Alignment(kForRows),
                                 containing_block_size, &inline_edge,
                                 &block_edge, &child_offset);
 
diff --git a/third_party/blink/renderer/core/paint/build.gni b/third_party/blink/renderer/core/paint/build.gni
index 1d1b1e5c..af6dceb 100644
--- a/third_party/blink/renderer/core/paint/build.gni
+++ b/third_party/blink/renderer/core/paint/build.gni
@@ -200,6 +200,8 @@
   "timing/image_paint_timing_detector.h",
   "timing/largest_contentful_paint_calculator.cc",
   "timing/largest_contentful_paint_calculator.h",
+  "timing/lcp_objects.cc",
+  "timing/lcp_objects.h",
   "timing/media_record_id.cc",
   "timing/media_record_id.h",
   "timing/paint_timing.cc",
diff --git a/third_party/blink/renderer/core/paint/timing/image_paint_timing_detector.cc b/third_party/blink/renderer/core/paint/timing/image_paint_timing_detector.cc
index 2ebc909..ec1c28d 100644
--- a/third_party/blink/renderer/core/paint/timing/image_paint_timing_detector.cc
+++ b/third_party/blink/renderer/core/paint/timing/image_paint_timing_detector.cc
@@ -166,7 +166,8 @@
                GetFrameIdForTracing(&frame_view_->GetFrame()));
 }
 
-ImageRecord* ImagePaintTimingDetector::UpdateMetricsCandidate() {
+std::pair<ImageRecord*, bool>
+ImagePaintTimingDetector::UpdateMetricsCandidate() {
   ImageRecord* largest_image_record = records_manager_.LargestImage();
   base::TimeTicks time = largest_image_record ? largest_image_record->paint_time
                                               : base::TimeTicks();
@@ -207,8 +208,10 @@
   //
   // Two different candidates are rare to have the same time and size.
   // So when they are unchanged, the candidate is considered unchanged.
-  bool changed = detector.NotifyMetricsIfLargestImagePaintChanged(
-      time, size, largest_image_record, bpp, std::move(priority));
+  bool changed =
+      detector.GetLargestContentfulPaintCalculator()
+          ->NotifyMetricsIfLargestImagePaintChanged(
+              time, size, largest_image_record, bpp, std::move(priority));
   if (changed) {
     if (!time.is_null() && largest_image_record->loaded) {
       ReportCandidateToTrace(*largest_image_record, time);
@@ -216,7 +219,7 @@
       ReportNoCandidateToTrace();
     }
   }
-  return largest_image_record;
+  return {largest_image_record, changed};
 }
 
 void ImagePaintTimingDetector::OnPaintFinished() {
diff --git a/third_party/blink/renderer/core/paint/timing/image_paint_timing_detector.h b/third_party/blink/renderer/core/paint/timing/image_paint_timing_detector.h
index 853b27e6..e7f31311 100644
--- a/third_party/blink/renderer/core/paint/timing/image_paint_timing_detector.h
+++ b/third_party/blink/renderer/core/paint/timing/image_paint_timing_detector.h
@@ -16,6 +16,7 @@
 #include "third_party/blink/renderer/core/core_export.h"
 #include "third_party/blink/renderer/core/dom/dom_node_ids.h"
 #include "third_party/blink/renderer/core/loader/resource/image_resource_content.h"
+#include "third_party/blink/renderer/core/paint/timing/lcp_objects.h"
 #include "third_party/blink/renderer/core/paint/timing/media_record_id.h"
 #include "third_party/blink/renderer/core/paint/timing/paint_timing_detector.h"
 #include "third_party/blink/renderer/platform/allow_discouraged_type.h"
@@ -289,8 +290,8 @@
   void ReportPresentationTime(unsigned last_queued_frame_index,
                               base::TimeTicks);
 
-  // Return the candidate.
-  ImageRecord* UpdateMetricsCandidate();
+  // Return the image LCP candidate and whether the candidate has changed.
+  std::pair<ImageRecord*, bool> UpdateMetricsCandidate();
 
   // Called when documentElement changes from zero to nonzero opacity. Makes the
   // largest image that was hidden due to this a Largest Contentful Paint
diff --git a/third_party/blink/renderer/core/paint/timing/image_paint_timing_detector_test.cc b/third_party/blink/renderer/core/paint/timing/image_paint_timing_detector_test.cc
index 05e70e1..6656624 100644
--- a/third_party/blink/renderer/core/paint/timing/image_paint_timing_detector_test.cc
+++ b/third_party/blink/renderer/core/paint/timing/image_paint_timing_detector_test.cc
@@ -17,6 +17,7 @@
 #include "third_party/blink/renderer/core/frame/web_local_frame_impl.h"
 #include "third_party/blink/renderer/core/html/html_image_element.h"
 #include "third_party/blink/renderer/core/html/media/html_video_element.h"
+#include "third_party/blink/renderer/core/paint/timing/largest_contentful_paint_calculator.h"
 #include "third_party/blink/renderer/core/paint/timing/paint_timing_detector.h"
 #include "third_party/blink/renderer/core/paint/timing/paint_timing_test_helper.h"
 #include "third_party/blink/renderer/core/scroll/scroll_types.h"
@@ -155,26 +156,22 @@
         .records_manager_.recorded_images_.size();
   }
 
-  void UpdateCandidate() {
-    GetPaintTimingDetector()
-        .GetImagePaintTimingDetector()
-        .UpdateMetricsCandidate();
-  }
+  void UpdateCandidate() { GetPaintTimingDetector().UpdateLcpCandidate(); }
 
   void UpdateCandidateForChildFrame() {
-    GetChildPaintTimingDetector()
-        .GetImagePaintTimingDetector()
-        .UpdateMetricsCandidate();
+    GetChildPaintTimingDetector().UpdateLcpCandidate();
   }
 
   base::TimeTicks LargestPaintTime() {
     return GetPaintTimingDetector()
-        .latest_lcp_details_.largest_image_paint_time_;
+        .LatestLcpDetailsForTest()
+        .largest_image_paint_time;
   }
 
   uint64_t LargestPaintSize() {
     return GetPaintTimingDetector()
-        .latest_lcp_details_.largest_image_paint_size_;
+        .LatestLcpDetailsForTest()
+        .largest_image_paint_size;
   }
 
   static constexpr base::TimeDelta kQuantumOfTime = base::Milliseconds(10);
diff --git a/third_party/blink/renderer/core/paint/timing/largest_contentful_paint_calculator.cc b/third_party/blink/renderer/core/paint/timing/largest_contentful_paint_calculator.cc
index 3ac4bbd..9c6eaa8f 100644
--- a/third_party/blink/renderer/core/paint/timing/largest_contentful_paint_calculator.cc
+++ b/third_party/blink/renderer/core/paint/timing/largest_contentful_paint_calculator.cc
@@ -6,10 +6,13 @@
 
 #include "base/check.h"
 #include "third_party/blink/public/common/features.h"
+#include "third_party/blink/renderer/core/dom/dom_node_ids.h"
 #include "third_party/blink/renderer/core/frame/local_frame.h"
 #include "third_party/blink/renderer/core/inspector/identifiers_factory.h"
 #include "third_party/blink/renderer/core/paint/timing/image_element_timing.h"
+#include "third_party/blink/renderer/core/paint/timing/image_paint_timing_detector.h"
 #include "third_party/blink/renderer/core/paint/timing/paint_timing.h"
+#include "third_party/blink/renderer/core/paint/timing/text_paint_timing_detector.h"
 #include "third_party/blink/renderer/platform/runtime_enabled_features.h"
 
 namespace blink {
@@ -22,6 +25,32 @@
 
 }  // namespace
 
+LargestContentfulPaintType GetLargestContentfulPaintTypeFromString(
+    const AtomicString& type_string) {
+  if (type_string.empty()) {
+    return LargestContentfulPaintType::kNone;
+  }
+
+  using LargestContentfulPaintTypeMap =
+      HashMap<AtomicString, LargestContentfulPaintType>;
+
+  DEFINE_STATIC_LOCAL(LargestContentfulPaintTypeMap,
+                      largest_contentful_paint_type_map,
+                      ({{"svg", LargestContentfulPaintType::kSVG},
+                        {"gif", LargestContentfulPaintType::kGIF},
+                        {"png", LargestContentfulPaintType::kPNG},
+                        {"jpg", LargestContentfulPaintType::kJPG},
+                        {"avif", LargestContentfulPaintType::kAVIF},
+                        {"webp", LargestContentfulPaintType::kWebP}}));
+
+  auto it = largest_contentful_paint_type_map.find(type_string);
+  if (it != largest_contentful_paint_type_map.end()) {
+    return it->value;
+  }
+
+  return LargestContentfulPaintType::kNone;
+}
+
 LargestContentfulPaintCalculator::LargestContentfulPaintCalculator(
     WindowPerformance* window_performance)
     : window_performance_(window_performance) {}
@@ -163,6 +192,147 @@
   }
 }
 
+bool LargestContentfulPaintCalculator::HasLargestImagePaintChangedForMetrics(
+    base::TimeTicks largest_image_paint_time,
+    uint64_t largest_image_paint_size) const {
+  return largest_image_paint_time !=
+             latest_lcp_details_.largest_image_paint_time ||
+         largest_image_paint_size !=
+             latest_lcp_details_.largest_image_paint_size;
+}
+
+bool LargestContentfulPaintCalculator::HasLargestTextPaintChangedForMetrics(
+    base::TimeTicks largest_text_paint_time,
+    uint64_t largest_text_paint_size) const {
+  return largest_text_paint_time !=
+             latest_lcp_details_.largest_text_paint_time ||
+         largest_text_paint_size != latest_lcp_details_.largest_text_paint_size;
+}
+
+bool LargestContentfulPaintCalculator::NotifyMetricsIfLargestImagePaintChanged(
+    base::TimeTicks image_paint_time,
+    uint64_t image_paint_size,
+    ImageRecord* image_record,
+    double image_bpp,
+    absl::optional<WebURLRequest::Priority> priority) {
+  // (Experimental) Images with insufficient entropy are not considered
+  // candidates for LCP
+  if (base::FeatureList::IsEnabled(features::kExcludeLowEntropyImagesFromLCP)) {
+    if (image_bpp < features::kMinimumEntropyForLCP.Get()) {
+      return false;
+    }
+  }
+  if (!HasLargestImagePaintChangedForMetrics(image_paint_time,
+                                             image_paint_size)) {
+    return false;
+  }
+
+  latest_lcp_details_.largest_contentful_paint_type =
+      blink::LargestContentfulPaintType::kNone;
+  if (image_record) {
+    if (image_record->is_loaded_after_mouseover) {
+      latest_lcp_details_.largest_contentful_paint_type |=
+          blink::LargestContentfulPaintType::kAfterMouseover;
+    }
+    // TODO(yoav): Once we'd enable the kLCPAnimatedImagesReporting flag by
+    // default, we'd be able to use the value of
+    // largest_image_record->first_animated_frame_time directly.
+    if (image_record && image_record->media_timing) {
+      if (!image_record->media_timing->GetFirstVideoFrameTime().is_null()) {
+        // Set the video flag.
+        latest_lcp_details_.largest_contentful_paint_type |=
+            blink::LargestContentfulPaintType::kVideo;
+      } else if (image_record->media_timing->IsPaintedFirstFrame()) {
+        // Set the animated image flag.
+        latest_lcp_details_.largest_contentful_paint_type |=
+            blink::LargestContentfulPaintType::kAnimatedImage;
+      }
+
+      // Set image type flag.
+      latest_lcp_details_.largest_contentful_paint_type |=
+          blink::LargestContentfulPaintType::kImage;
+
+      // Set specific type of the image.
+      latest_lcp_details_.largest_contentful_paint_type |=
+          GetLargestContentfulPaintTypeFromString(
+              image_record->media_timing->MediaType());
+
+      // Set DataURI type.
+      if (image_record->media_timing->IsDataUrl()) {
+        latest_lcp_details_.largest_contentful_paint_type |=
+            blink::LargestContentfulPaintType::kDataURI;
+      }
+
+      latest_lcp_details_.largest_image_discovery_time =
+          image_record->media_timing->DiscoveryTime();
+      latest_lcp_details_.largest_image_load_start =
+          image_record->media_timing->LoadStart();
+      latest_lcp_details_.largest_image_load_end =
+          image_record->media_timing->LoadEnd();
+      latest_lcp_details_.is_loaded_from_memory_cache =
+          image_record->media_timing->IsLoadedFromMemoryCache();
+      latest_lcp_details_.is_preloaded_with_early_hints =
+          image_record->media_timing->IsPreloadedWithEarlyHints();
+    }
+  }
+  latest_lcp_details_.largest_image_paint_time = image_paint_time;
+  latest_lcp_details_.largest_image_paint_size = image_paint_size;
+  latest_lcp_details_.largest_contentful_paint_image_bpp = image_bpp;
+  latest_lcp_details_.largest_contentful_paint_image_request_priority =
+      std::move(priority);
+  UpdateLatestLcpDetails();
+  return true;
+}
+
+bool LargestContentfulPaintCalculator::NotifyMetricsIfLargestTextPaintChanged(
+    base::TimeTicks text_paint_time,
+    uint64_t text_paint_size) {
+  if (!HasLargestTextPaintChangedForMetrics(text_paint_time, text_paint_size)) {
+    return false;
+  }
+
+  DCHECK(!text_paint_time.is_null());
+  latest_lcp_details_.largest_text_paint_time = text_paint_time;
+  latest_lcp_details_.largest_text_paint_size = text_paint_size;
+  UpdateLatestLcpDetails();
+
+  return true;
+}
+
+void LargestContentfulPaintCalculator::UpdateLatestLcpDetails() {
+  if (latest_lcp_details_.largest_text_paint_size >
+      latest_lcp_details_.largest_image_paint_size) {
+    latest_lcp_details_.largest_contentful_paint_time =
+        latest_lcp_details_.largest_text_paint_time;
+
+    // We set latest_lcp_details_.largest_contentful_paint_type_ only here
+    // because we use latest_lcp_details_.largest_contentful_paint_type_ to
+    // track the LCP type of the largest image only. When the largest image gets
+    // updated, the latest_lcp_details_.largest_contentful_paint_type_ gets
+    // reset and updated accordingly in the
+    // NotifyMetricsIfLargestImagePaintChanged() method. If the LCP element
+    // turns out to be the largest text, we simply set the
+    // latest_lcp_details_.largest_contentful_paint_type_ to be kText here. This
+    // is possible because currently text elements have only 1 LCP type kText.
+    latest_lcp_details_.largest_contentful_paint_type =
+        LargestContentfulPaintType::kText;
+  } else if (latest_lcp_details_.largest_text_paint_size <
+             latest_lcp_details_.largest_image_paint_size) {
+    latest_lcp_details_.largest_contentful_paint_time =
+        latest_lcp_details_.largest_image_paint_time;
+  } else {
+    // Size is the same, take the shorter time.
+    latest_lcp_details_.largest_contentful_paint_time =
+        std::min(latest_lcp_details_.largest_text_paint_time,
+                 latest_lcp_details_.largest_image_paint_time);
+
+    if (latest_lcp_details_.largest_text_paint_time <
+        latest_lcp_details_.largest_image_paint_time) {
+      latest_lcp_details_.largest_contentful_paint_type =
+          LargestContentfulPaintType::kText;
+    }
+  }
+}
 void LargestContentfulPaintCalculator::Trace(Visitor* visitor) const {
   visitor->Trace(window_performance_);
 }
diff --git a/third_party/blink/renderer/core/paint/timing/largest_contentful_paint_calculator.h b/third_party/blink/renderer/core/paint/timing/largest_contentful_paint_calculator.h
index 877f921b..678481f 100644
--- a/third_party/blink/renderer/core/paint/timing/largest_contentful_paint_calculator.h
+++ b/third_party/blink/renderer/core/paint/timing/largest_contentful_paint_calculator.h
@@ -5,9 +5,9 @@
 #ifndef THIRD_PARTY_BLINK_RENDERER_CORE_PAINT_TIMING_LARGEST_CONTENTFUL_PAINT_CALCULATOR_H_
 #define THIRD_PARTY_BLINK_RENDERER_CORE_PAINT_TIMING_LARGEST_CONTENTFUL_PAINT_CALCULATOR_H_
 
+#include "third_party/blink/public/platform/web_url_request.h"
 #include "third_party/blink/renderer/core/core_export.h"
-#include "third_party/blink/renderer/core/paint/timing/image_paint_timing_detector.h"
-#include "third_party/blink/renderer/core/paint/timing/text_paint_timing_detector.h"
+#include "third_party/blink/renderer/core/paint/timing/lcp_objects.h"
 #include "third_party/blink/renderer/core/timing/window_performance.h"
 
 namespace blink {
@@ -29,6 +29,34 @@
       const ImageRecord* largest_image,
       bool is_triggered_by_soft_navigation);
 
+  bool HasLargestImagePaintChangedForMetrics(
+      base::TimeTicks largest_image_paint_time,
+      uint64_t largest_image_paint_size) const;
+
+  bool HasLargestTextPaintChangedForMetrics(
+      base::TimeTicks largest_text_paint_time,
+      uint64_t largest_text_paint_size) const;
+
+  bool NotifyMetricsIfLargestImagePaintChanged(
+      base::TimeTicks image_paint_time,
+      uint64_t image_paint_size,
+      ImageRecord* image_record,
+      double image_bpp,
+      absl::optional<WebURLRequest::Priority> priority);
+
+  bool NotifyMetricsIfLargestTextPaintChanged(base::TimeTicks text_paint_time,
+                                              uint64_t text_paint_size);
+
+  void UpdateLatestLcpDetails();
+
+  const LargestContentfulPaintDetails& LatestLcpDetails() const {
+    return latest_lcp_details_;
+  }
+
+  void ResetMetricsLcp() {
+    latest_lcp_details_ = LargestContentfulPaintDetails();
+  }
+
   void Trace(Visitor* visitor) const;
 
  private:
@@ -53,6 +81,11 @@
   uint64_t largest_reported_size_ = 0u;
   double largest_image_bpp_ = 0.0;
   unsigned count_candidates_ = 0;
+
+  // The |latest_lcp_details_| struct is just for internal accounting purposes
+  // and is not reported anywhere (neither to metrics, nor to the web exposed
+  // API).
+  LargestContentfulPaintDetails latest_lcp_details_;
 };
 
 }  // namespace blink
diff --git a/third_party/blink/renderer/core/paint/timing/largest_contentful_paint_calculator_test.cc b/third_party/blink/renderer/core/paint/timing/largest_contentful_paint_calculator_test.cc
index bc0511c..4b2e25d 100644
--- a/third_party/blink/renderer/core/paint/timing/largest_contentful_paint_calculator_test.cc
+++ b/third_party/blink/renderer/core/paint/timing/largest_contentful_paint_calculator_test.cc
@@ -10,8 +10,10 @@
 #include "third_party/blink/public/common/features.h"
 #include "third_party/blink/renderer/core/frame/web_local_frame_impl.h"
 #include "third_party/blink/renderer/core/html/html_image_element.h"
+#include "third_party/blink/renderer/core/paint/timing/image_paint_timing_detector.h"
 #include "third_party/blink/renderer/core/paint/timing/paint_timing_detector.h"
 #include "third_party/blink/renderer/core/paint/timing/paint_timing_test_helper.h"
+#include "third_party/blink/renderer/core/paint/timing/text_paint_timing_detector.h"
 #include "third_party/blink/renderer/core/testing/core_unit_test_helper.h"
 #include "third_party/blink/renderer/platform/graphics/unaccelerated_static_bitmap_image.h"
 #include "third_party/skia/include/core/SkImage.h"
@@ -101,10 +103,7 @@
   }
 
   void UpdateLargestContentfulPaintCandidate() {
-    GetFrame()
-        .View()
-        ->GetPaintTimingDetector()
-        .UpdateLargestContentfulPaintCandidate();
+    GetFrame().View()->GetPaintTimingDetector().UpdateLcpCandidate();
   }
 
   void SimulateContentPresentationPromise() {
diff --git a/third_party/blink/renderer/core/paint/timing/lcp_objects.cc b/third_party/blink/renderer/core/paint/timing/lcp_objects.cc
new file mode 100644
index 0000000..fcaeaab6
--- /dev/null
+++ b/third_party/blink/renderer/core/paint/timing/lcp_objects.cc
@@ -0,0 +1,20 @@
+// Copyright 2023 The Chromium Authors
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "third_party/blink/renderer/core/paint/timing/lcp_objects.h"
+
+namespace blink {
+
+void LCPRectInfo::OutputToTraceValue(TracedValue& value) const {
+  value.SetInteger("frame_x", frame_rect_info_.x());
+  value.SetInteger("frame_y", frame_rect_info_.y());
+  value.SetInteger("frame_width", frame_rect_info_.width());
+  value.SetInteger("frame_height", frame_rect_info_.height());
+  value.SetInteger("root_x", root_rect_info_.x());
+  value.SetInteger("root_y", root_rect_info_.y());
+  value.SetInteger("root_width", root_rect_info_.width());
+  value.SetInteger("root_height", root_rect_info_.height());
+}
+
+}  // namespace blink
diff --git a/third_party/blink/renderer/core/paint/timing/lcp_objects.h b/third_party/blink/renderer/core/paint/timing/lcp_objects.h
new file mode 100644
index 0000000..30cf72f
--- /dev/null
+++ b/third_party/blink/renderer/core/paint/timing/lcp_objects.h
@@ -0,0 +1,51 @@
+// Copyright 2023 The Chromium Authors
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef THIRD_PARTY_BLINK_RENDERER_CORE_PAINT_TIMING_LCP_OBJECTS_H_
+#define THIRD_PARTY_BLINK_RENDERER_CORE_PAINT_TIMING_LCP_OBJECTS_H_
+
+#include "base/time/time.h"
+#include "third_party/blink/public/common/performance/largest_contentful_paint_type.h"
+#include "third_party/blink/public/platform/web_url_request.h"
+#include "third_party/blink/renderer/platform/heap/garbage_collected.h"
+#include "third_party/blink/renderer/platform/instrumentation/tracing/traced_value.h"
+#include "ui/gfx/geometry/rect.h"
+
+namespace blink {
+
+struct LargestContentfulPaintDetails {
+  base::TimeTicks largest_image_paint_time = base::TimeTicks();
+  uint64_t largest_image_paint_size = 0;
+  base::TimeTicks largest_image_load_start = base::TimeTicks();
+  base::TimeTicks largest_image_load_end = base::TimeTicks();
+  base::TimeTicks largest_image_discovery_time = base::TimeTicks();
+  blink::LargestContentfulPaintType largest_contentful_paint_type =
+      blink::LargestContentfulPaintType::kNone;
+  double largest_contentful_paint_image_bpp = 0.0;
+  base::TimeTicks largest_text_paint_time = base::TimeTicks();
+  uint64_t largest_text_paint_size = 0;
+  base::TimeTicks largest_contentful_paint_time = base::TimeTicks();
+  absl::optional<WebURLRequest::Priority>
+      largest_contentful_paint_image_request_priority = absl::nullopt;
+  bool is_loaded_from_memory_cache = false;
+  bool is_preloaded_with_early_hints = false;
+};
+
+// This class is used for tracing only.
+class LCPRectInfo {
+  USING_FAST_MALLOC(LCPRectInfo);
+
+ public:
+  LCPRectInfo(const gfx::Rect& frame_rect_info, const gfx::Rect& root_rect_info)
+      : frame_rect_info_(frame_rect_info), root_rect_info_(root_rect_info) {}
+
+  void OutputToTraceValue(TracedValue&) const;
+
+ private:
+  gfx::Rect frame_rect_info_;
+  gfx::Rect root_rect_info_;
+};
+}  // namespace blink
+
+#endif  // THIRD_PARTY_BLINK_RENDERER_CORE_PAINT_TIMING_LCP_OBJECTS_H_
diff --git a/third_party/blink/renderer/core/paint/timing/paint_timing_detector.cc b/third_party/blink/renderer/core/paint/timing/paint_timing_detector.cc
index edc87caf..3f11aa6 100644
--- a/third_party/blink/renderer/core/paint/timing/paint_timing_detector.cc
+++ b/third_party/blink/renderer/core/paint/timing/paint_timing_detector.cc
@@ -66,32 +66,6 @@
   return true;
 }
 
-LargestContentfulPaintType GetLargestContentfulPaintTypeFromString(
-    const AtomicString& type_string) {
-  if (type_string.empty()) {
-    return LargestContentfulPaintType::kNone;
-  }
-
-  using LargestContentfulPaintTypeMap =
-      HashMap<AtomicString, LargestContentfulPaintType>;
-
-  DEFINE_STATIC_LOCAL(LargestContentfulPaintTypeMap,
-                      largest_contentful_paint_type_map,
-                      ({{"svg", LargestContentfulPaintType::kSVG},
-                        {"gif", LargestContentfulPaintType::kGIF},
-                        {"png", LargestContentfulPaintType::kPNG},
-                        {"jpg", LargestContentfulPaintType::kJPG},
-                        {"avif", LargestContentfulPaintType::kAVIF},
-                        {"webp", LargestContentfulPaintType::kWebP}}));
-
-  auto it = largest_contentful_paint_type_map.find(type_string);
-  if (it != largest_contentful_paint_type_map.end()) {
-    return it->value;
-  }
-
-  return LargestContentfulPaintType::kNone;
-}
-
 void ReportImagePixelInaccuracy(HTMLImageElement* image_element) {
   DCHECK(image_element);
   ImageResourceContent* image_content = image_element->CachedImage();
@@ -350,7 +324,7 @@
   image_paint_timing_detector_->RestartRecordingLargestImagePaint();
   lcp_was_restarted_ = true;
   soft_navigation_was_detected_ = false;
-  latest_lcp_details_.Reset();
+  GetLargestContentfulPaintCalculator()->ResetMetricsLcp();
 }
 
 void PaintTimingDetector::SoftNavigationDetected(LocalDOMWindow* window) {
@@ -374,7 +348,8 @@
 
   // Report the soft navigation LCP to metrics.
   CHECK(record_soft_navigation_lcp_for_metrics_);
-  soft_navigation_lcp_details_for_metrics_ = latest_lcp_details_;
+  soft_navigation_lcp_details_for_metrics_ =
+      largest_contentful_paint_calculator_->LatestLcpDetails();
   DidChangePerformanceTiming();
 }
 
@@ -385,7 +360,7 @@
   // Reset the lcp candidate and the soft navigation LCP for reporting to UKM
   // when a new soft navigation happens. When this resetting happens, the
   // previous lcp details should already be updated.
-  soft_navigation_lcp_details_for_metrics_.Reset();
+  soft_navigation_lcp_details_for_metrics_ = LargestContentfulPaintDetails();
 }
 
 LargestContentfulPaintCalculator*
@@ -405,175 +380,31 @@
   return largest_contentful_paint_calculator_.Get();
 }
 
-bool PaintTimingDetector::NotifyMetricsIfLargestImagePaintChanged(
-    base::TimeTicks image_paint_time,
-    uint64_t image_paint_size,
-    ImageRecord* image_record,
-    double image_bpp,
-    absl::optional<WebURLRequest::Priority> priority) {
-  // (Experimental) Images with insufficient entropy are not considered
-  // candidates for LCP
-  if (base::FeatureList::IsEnabled(features::kExcludeLowEntropyImagesFromLCP)) {
-    if (image_bpp < features::kMinimumEntropyForLCP.Get()) {
-      return false;
-    }
-  }
-  if (!HasLargestImagePaintChangedForMetrics(image_paint_time,
-                                             image_paint_size)) {
-    return false;
-  }
-
-  latest_lcp_details_.largest_contentful_paint_type_ =
-      blink::LargestContentfulPaintType::kNone;
-  if (image_record) {
-    if (image_record->is_loaded_after_mouseover) {
-      latest_lcp_details_.largest_contentful_paint_type_ |=
-          blink::LargestContentfulPaintType::kAfterMouseover;
-    }
-    // TODO(yoav): Once we'd enable the kLCPAnimatedImagesReporting flag by
-    // default, we'd be able to use the value of
-    // largest_image_record->first_animated_frame_time directly.
-    if (image_record && image_record->media_timing) {
-      if (!image_record->media_timing->GetFirstVideoFrameTime().is_null()) {
-        // Set the video flag.
-        latest_lcp_details_.largest_contentful_paint_type_ |=
-            blink::LargestContentfulPaintType::kVideo;
-      } else if (image_record->media_timing->IsPaintedFirstFrame()) {
-        // Set the animated image flag.
-        latest_lcp_details_.largest_contentful_paint_type_ |=
-            blink::LargestContentfulPaintType::kAnimatedImage;
-      }
-
-      // Set image type flag.
-      latest_lcp_details_.largest_contentful_paint_type_ |=
-          blink::LargestContentfulPaintType::kImage;
-
-      // Set specific type of the image.
-      latest_lcp_details_.largest_contentful_paint_type_ |=
-          GetLargestContentfulPaintTypeFromString(
-              image_record->media_timing->MediaType());
-
-      // Set DataURI type.
-      if (image_record->media_timing->IsDataUrl()) {
-        latest_lcp_details_.largest_contentful_paint_type_ |=
-            blink::LargestContentfulPaintType::kDataURI;
-      }
-
-      latest_lcp_details_.largest_image_discovery_time_ =
-          image_record->media_timing->DiscoveryTime();
-      latest_lcp_details_.largest_image_load_start_ =
-          image_record->media_timing->LoadStart();
-      latest_lcp_details_.largest_image_load_end_ =
-          image_record->media_timing->LoadEnd();
-      latest_lcp_details_.is_loaded_from_memory_cache_ =
-          image_record->media_timing->IsLoadedFromMemoryCache();
-      latest_lcp_details_.is_preloaded_with_early_hints_ =
-          image_record->media_timing->IsPreloadedWithEarlyHints();
-    }
-  }
-  latest_lcp_details_.largest_image_paint_time_ = image_paint_time;
-  latest_lcp_details_.largest_image_paint_size_ = image_paint_size;
-  latest_lcp_details_.largest_contentful_paint_image_bpp_ = image_bpp;
-  latest_lcp_details_.largest_contentful_paint_image_request_priority_ =
-      std::move(priority);
-  UpdateLargestContentfulPaintTimeForMetrics();
-  return true;
-}
-
-bool PaintTimingDetector::NotifyMetricsIfLargestTextPaintChanged(
-    base::TimeTicks text_paint_time,
-    uint64_t text_paint_size) {
-  if (!HasLargestTextPaintChangedForMetrics(text_paint_time, text_paint_size)) {
-    return false;
-  }
-  // If soft nav LCP is being recorded for LCP, because lcp_details is not
-  // reset, if its text paint size is not smaller than the new text paint size
-  // corresponding to the 1st soft nav, this new text paint size would not be
-  // updated. The 2nd condition is to fix this. For subsequent soft
-  // navigations, because record_soft_navigation_lcp_for_metrics_ is true, the
-  // soft_navigation_lcp_details_for_metrics_ is always updated to the
-  // lcp_details_. the 2nd condition
-  // soft_navigation_lcp_details_for_metrics_.largest_text_paint_size_ <
-  // text_paint_size is effectively the same the 1st condition.
-  if (latest_lcp_details_.largest_text_paint_size_ < text_paint_size ||
-      (record_soft_navigation_lcp_for_metrics_ &&
-       soft_navigation_lcp_details_for_metrics_.largest_text_paint_size_ <
-           text_paint_size)) {
-    DCHECK(!text_paint_time.is_null());
-    latest_lcp_details_.largest_text_paint_time_ = text_paint_time;
-    latest_lcp_details_.largest_text_paint_size_ = text_paint_size;
-  }
-  UpdateLargestContentfulPaintTimeForMetrics();
-  return true;
-}
-
-void PaintTimingDetector::UpdateLargestContentfulPaintTimeForMetrics() {
-  if (latest_lcp_details_.largest_text_paint_size_ >
-      latest_lcp_details_.largest_image_paint_size_) {
-    latest_lcp_details_.largest_contentful_paint_time_ =
-        latest_lcp_details_.largest_text_paint_time_;
-
-    // We set latest_lcp_details_.largest_contentful_paint_type_ only here
-    // because we use latest_lcp_details_.largest_contentful_paint_type_ to
-    // track the LCP type of the largest image only. When the largest image gets
-    // updated, the latest_lcp_details_.largest_contentful_paint_type_ gets
-    // reset and updated accordingly in the
-    // NotifyMetricsIfLargestImagePaintChanged() method. If the LCP element
-    // turns out to be the largest text, we simply set the
-    // latest_lcp_details_.largest_contentful_paint_type_ to be kText here. This
-    // is possible because currently text elements have only 1 LCP type kText.
-    latest_lcp_details_.largest_contentful_paint_type_ =
-        LargestContentfulPaintType::kText;
-  } else if (latest_lcp_details_.largest_text_paint_size_ <
-             latest_lcp_details_.largest_image_paint_size_) {
-    latest_lcp_details_.largest_contentful_paint_time_ =
-        latest_lcp_details_.largest_image_paint_time_;
-  } else {
-    // Size is the same, take the shorter time.
-    latest_lcp_details_.largest_contentful_paint_time_ =
-        std::min(latest_lcp_details_.largest_text_paint_time_,
-                 latest_lcp_details_.largest_image_paint_time_);
-
-    if (latest_lcp_details_.largest_text_paint_time_ <
-        latest_lcp_details_.largest_image_paint_time_) {
-      latest_lcp_details_.largest_contentful_paint_type_ =
-          LargestContentfulPaintType::kText;
-    }
+void PaintTimingDetector::UpdateMetricsLcp() {
+  // The DidChangePerformanceTiming method which triggers the reporting of
+  // metrics LCP would not be called when we are not recording metrics LCP.
+  if (!record_lcp_to_metrics_ && !record_soft_navigation_lcp_for_metrics_) {
+    return;
   }
 
   if (record_lcp_to_metrics_) {
-    lcp_details_for_metrics_ = latest_lcp_details_;
+    auto latest_lcp_details =
+        GetLargestContentfulPaintCalculator()->LatestLcpDetails();
+    lcp_details_for_metrics_ = latest_lcp_details;
   }
 
-  if (record_soft_navigation_lcp_for_metrics_) {
-    // If we're waiting on a softnav and it wasn't detected yet, keep on waiting
-    // and don't update.
-    if (!soft_navigation_was_detected_) {
-      return;
-    }
-    soft_navigation_lcp_details_for_metrics_ = latest_lcp_details_;
+  // If we're waiting on a softnav and it wasn't detected yet, keep on waiting
+  // and don't update.
+  if (record_soft_navigation_lcp_for_metrics_ &&
+      soft_navigation_was_detected_) {
+    auto latest_lcp_details =
+        GetLargestContentfulPaintCalculator()->LatestLcpDetails();
+    soft_navigation_lcp_details_for_metrics_ = latest_lcp_details;
   }
+
   DidChangePerformanceTiming();
 }
 
-bool PaintTimingDetector::HasLargestImagePaintChangedForMetrics(
-    base::TimeTicks largest_image_paint_time,
-    uint64_t largest_image_paint_size) const {
-  return largest_image_paint_time !=
-             latest_lcp_details_.largest_image_paint_time_ ||
-         largest_image_paint_size !=
-             latest_lcp_details_.largest_image_paint_size_;
-}
-
-bool PaintTimingDetector::HasLargestTextPaintChangedForMetrics(
-    base::TimeTicks largest_text_paint_time,
-    uint64_t largest_text_paint_size) const {
-  return largest_text_paint_time !=
-             latest_lcp_details_.largest_text_paint_time_ ||
-         largest_text_paint_size !=
-             latest_lcp_details_.largest_text_paint_size_;
-}
-
 void PaintTimingDetector::DidChangePerformanceTiming() {
   Document* document = frame_view_->GetFrame().GetDocument();
   if (!document) {
@@ -635,7 +466,7 @@
   return BlinkSpaceToDIPs(gfx::RectF(layout_visual_rect));
 }
 
-void PaintTimingDetector::UpdateLargestContentfulPaintCandidate() {
+void PaintTimingDetector::UpdateLcpCandidate() {
   auto* lcp_calculator = GetLargestContentfulPaintCalculator();
   if (!lcp_calculator) {
     return;
@@ -645,24 +476,29 @@
   // user input or no content show up on the page.
   // * Record.paint_time == 0 means there is an image but the image is still
   // loading. The perf API should wait until the paint-time is available.
-  TextRecord* largest_text_record = nullptr;
-  ImageRecord* largest_image_record = nullptr;
+  std::pair<TextRecord*, bool> text_update_result = {nullptr, false};
+  std::pair<ImageRecord*, bool> image_update_result = {nullptr, false};
+
   if (text_paint_timing_detector_->IsRecordingLargestTextPaint()) {
-    largest_text_record = text_paint_timing_detector_->UpdateMetricsCandidate();
+    text_update_result = text_paint_timing_detector_->UpdateMetricsCandidate();
   }
+
   if (image_paint_timing_detector_->IsRecordingLargestImagePaint()) {
-    largest_image_record =
+    image_update_result =
         image_paint_timing_detector_->UpdateMetricsCandidate();
   }
 
+  if (image_update_result.second || text_update_result.second) {
+    UpdateMetricsLcp();
+  }
   // If we stopped and then restarted LCP measurement (to support soft
   // navigations), and didn't yet detect a soft navigation, put aside the
   // records as potential soft navigation LCP ones, and don't update the web
   // exposed entries just yet. We'll do that once we actually detect the soft
   // navigation.
   if (lcp_was_restarted_ && !soft_navigation_was_detected_) {
-    potential_soft_navigation_text_record_ = largest_text_record;
-    potential_soft_navigation_image_record_ = largest_image_record;
+    potential_soft_navigation_text_record_ = text_update_result.first;
+    potential_soft_navigation_image_record_ = image_update_result.first;
     return;
   }
   potential_soft_navigation_text_record_ = nullptr;
@@ -672,7 +508,7 @@
   // restarted for soft navigations, fire the web exposed entry.
   if (record_lcp_to_metrics_ || lcp_was_restarted_) {
     lcp_calculator->UpdateWebExposedLargestContentfulPaintIfNeeded(
-        largest_text_record, largest_image_record,
+        text_update_result.first, image_update_result.first,
         /*is_triggered_by_soft_navigation=*/lcp_was_restarted_);
   }
 }
@@ -684,6 +520,11 @@
   }
 }
 
+const LargestContentfulPaintDetails&
+PaintTimingDetector::LatestLcpDetailsForTest() const {
+  return largest_contentful_paint_calculator_->LatestLcpDetails();
+}
+
 ScopedPaintTimingDetectorBlockPaintHook*
     ScopedPaintTimingDetectorBlockPaintHook::top_ = nullptr;
 
@@ -779,23 +620,11 @@
     std::move(frame_callbacks->front()).Run(paint_time);
     frame_callbacks->pop();
   }
-  frame_view_->GetPaintTimingDetector().UpdateLargestContentfulPaintCandidate();
+  frame_view_->GetPaintTimingDetector().UpdateLcpCandidate();
 }
 
 void PaintTimingCallbackManagerImpl::Trace(Visitor* visitor) const {
   visitor->Trace(frame_view_);
   PaintTimingCallbackManager::Trace(visitor);
 }
-
-void LCPRectInfo::OutputToTraceValue(TracedValue& value) const {
-  value.SetInteger("frame_x", frame_rect_info_.x());
-  value.SetInteger("frame_y", frame_rect_info_.y());
-  value.SetInteger("frame_width", frame_rect_info_.width());
-  value.SetInteger("frame_height", frame_rect_info_.height());
-  value.SetInteger("root_x", root_rect_info_.x());
-  value.SetInteger("root_y", root_rect_info_.y());
-  value.SetInteger("root_width", root_rect_info_.width());
-  value.SetInteger("root_height", root_rect_info_.height());
-}
-
 }  // namespace blink
diff --git a/third_party/blink/renderer/core/paint/timing/paint_timing_detector.h b/third_party/blink/renderer/core/paint/timing/paint_timing_detector.h
index 22414ef7..011c705 100644
--- a/third_party/blink/renderer/core/paint/timing/paint_timing_detector.h
+++ b/third_party/blink/renderer/core/paint/timing/paint_timing_detector.h
@@ -11,10 +11,10 @@
 #include "base/gtest_prod_util.h"
 #include "base/time/time.h"
 #include "third_party/blink/public/common/input/web_input_event.h"
-#include "third_party/blink/public/common/performance/largest_contentful_paint_type.h"
 #include "third_party/blink/public/platform/web_url_request.h"
 #include "third_party/blink/renderer/core/core_export.h"
 #include "third_party/blink/renderer/core/layout/layout_box_model_object.h"
+#include "third_party/blink/renderer/core/paint/timing/lcp_objects.h"
 #include "third_party/blink/renderer/core/paint/timing/paint_timing_visualizer.h"
 #include "third_party/blink/renderer/core/scroll/scroll_types.h"
 #include "third_party/blink/renderer/platform/graphics/paint/ignore_paint_timing_scope.h"
@@ -131,38 +131,6 @@
  public:
   PaintTimingDetector(LocalFrameView*);
 
-  struct LargestContentfulPaintDetails {
-    base::TimeTicks largest_image_paint_time_;
-    uint64_t largest_image_paint_size_ = 0;
-    base::TimeTicks largest_image_load_start_;
-    base::TimeTicks largest_image_load_end_;
-    base::TimeTicks largest_image_discovery_time_;
-    blink::LargestContentfulPaintType largest_contentful_paint_type_ =
-        blink::LargestContentfulPaintType::kNone;
-    double largest_contentful_paint_image_bpp_ = 0.0;
-    base::TimeTicks largest_text_paint_time_;
-    uint64_t largest_text_paint_size_ = 0;
-    base::TimeTicks largest_contentful_paint_time_;
-    absl::optional<WebURLRequest::Priority>
-        largest_contentful_paint_image_request_priority_;
-    bool is_loaded_from_memory_cache_ = false;
-    bool is_preloaded_with_early_hints_ = false;
-
-    void Reset() {
-      this->largest_image_paint_time_ = base::TimeTicks();
-      this->largest_image_paint_size_ = 0;
-      this->largest_image_load_start_ = base::TimeTicks();
-      this->largest_image_load_end_ = base::TimeTicks();
-      this->largest_contentful_paint_type_ =
-          blink::LargestContentfulPaintType::kNone;
-      this->largest_contentful_paint_image_bpp_ = 0.0;
-      this->largest_text_paint_time_ = base::TimeTicks();
-      this->largest_text_paint_size_ = 0;
-      this->largest_contentful_paint_time_ = base::TimeTicks();
-      this->largest_contentful_paint_image_request_priority_ = absl::nullopt;
-    }
-  };
-
   // Returns true if the image might ultimately be a candidate for largest
   // paint, otherwise false. When this method is called we do not know the
   // largest status for certain, because we need to wait for presentation.
@@ -227,21 +195,23 @@
 
   LargestContentfulPaintCalculator* GetLargestContentfulPaintCalculator();
 
-  const PaintTimingDetector::LargestContentfulPaintDetails&
-  LargestContentfulPaintDetailsForMetrics() const {
+  const LargestContentfulPaintDetails& LargestContentfulPaintDetailsForMetrics()
+      const {
     return lcp_details_for_metrics_;
   }
 
-  const PaintTimingDetector::LargestContentfulPaintDetails&
+  const LargestContentfulPaintDetails&
   SoftNavigationLargestContentfulPaintDetailsForMetrics() const {
     return soft_navigation_lcp_details_for_metrics_;
   }
 
+  const LargestContentfulPaintDetails& LatestLcpDetailsForTest() const;
+
   base::TimeTicks FirstInputOrScrollNotifiedTimestamp() const {
     return first_input_or_scroll_notified_timestamp_;
   }
 
-  void UpdateLargestContentfulPaintCandidate();
+  void UpdateLcpCandidate();
 
   // Reports the largest image and text candidates painted under non-nested 0
   // opacity layer.
@@ -256,11 +226,10 @@
 
   // Method called to stop recording the Largest Contentful Paint.
   void OnInputOrScroll();
-  bool HasLargestImagePaintChangedForMetrics(base::TimeTicks,
-                                             uint64_t size) const;
+
   bool HasLargestTextPaintChangedForMetrics(base::TimeTicks,
                                             uint64_t size) const;
-  void UpdateLargestContentfulPaintTimeForMetrics();
+  void UpdateMetricsLcp();
   Member<LocalFrameView> frame_view_;
   // This member lives forever because it is also used for Text Element
   // Timing.
@@ -282,10 +251,6 @@
 
   absl::optional<PaintTimingVisualizer> visualizer_;
 
-  // The |latest_lcp_details_| struct is just for internal accounting purposes
-  // and is not reported anywhere (neither to metrics, nor to the web exposed
-  // API).
-  LargestContentfulPaintDetails latest_lcp_details_;
   // The LCP details reported to metrics (UKM).
   LargestContentfulPaintDetails lcp_details_for_metrics_;
   // The soft navigation LCP details reported to metrics (UKM).
@@ -377,20 +342,6 @@
   ScopedPaintTimingDetectorBlockPaintHook::AggregateTextPaint(text_visual_rect);
 }
 
-class LCPRectInfo {
-  USING_FAST_MALLOC(LCPRectInfo);
-
- public:
-  LCPRectInfo(const gfx::Rect& frame_rect_info, const gfx::Rect& root_rect_info)
-      : frame_rect_info_(frame_rect_info), root_rect_info_(root_rect_info) {}
-
-  void OutputToTraceValue(TracedValue&) const;
-
- private:
-  gfx::Rect frame_rect_info_;
-  gfx::Rect root_rect_info_;
-};
-
 }  // namespace blink
 
 #endif  // THIRD_PARTY_BLINK_RENDERER_CORE_PAINT_TIMING_PAINT_TIMING_DETECTOR_H_
diff --git a/third_party/blink/renderer/core/paint/timing/text_paint_timing_detector.cc b/third_party/blink/renderer/core/paint/timing/text_paint_timing_detector.cc
index 45394af..cc26eae 100644
--- a/third_party/blink/renderer/core/paint/timing/text_paint_timing_detector.cc
+++ b/third_party/blink/renderer/core/paint/timing/text_paint_timing_detector.cc
@@ -64,22 +64,24 @@
       GetFrameIdForTracing(&frame_view_->GetFrame()));
 }
 
-TextRecord* LargestTextPaintManager::UpdateMetricsCandidate() {
+std::pair<TextRecord*, bool> LargestTextPaintManager::UpdateMetricsCandidate() {
   if (!largest_text_) {
-    return nullptr;
+    return {nullptr, false};
   }
   const base::TimeTicks time = largest_text_->paint_time;
   const uint64_t size = largest_text_->recorded_size;
-  DCHECK(paint_timing_detector_);
-  bool changed = paint_timing_detector_->NotifyMetricsIfLargestTextPaintChanged(
-      time, size);
+  CHECK(paint_timing_detector_);
+  CHECK(paint_timing_detector_->GetLargestContentfulPaintCalculator());
+
+  bool changed = paint_timing_detector_->GetLargestContentfulPaintCalculator()
+                     ->NotifyMetricsIfLargestTextPaintChanged(time, size);
   if (changed) {
     // It is not possible for an update to happen with a candidate that has no
     // paint time.
     DCHECK(!time.is_null());
     ReportCandidateToTrace(*largest_text_);
   }
-  return largest_text_.Get();
+  return {largest_text_.Get(), changed};
 }
 
 void TextPaintTimingDetector::OnPaintFinished() {
@@ -119,8 +121,6 @@
     }
   }
   AssignPaintTimeToQueuedRecords(frame_index, timestamp);
-  if (recording_largest_text_paint_)
-    ltp_manager_->UpdateMetricsCandidate();
 }
 
 bool TextPaintTimingDetector::ShouldWalkObject(
diff --git a/third_party/blink/renderer/core/paint/timing/text_paint_timing_detector.h b/third_party/blink/renderer/core/paint/timing/text_paint_timing_detector.h
index fcf52f7..527385c5 100644
--- a/third_party/blink/renderer/core/paint/timing/text_paint_timing_detector.h
+++ b/third_party/blink/renderer/core/paint/timing/text_paint_timing_detector.h
@@ -9,6 +9,7 @@
 
 #include "third_party/blink/renderer/core/core_export.h"
 #include "third_party/blink/renderer/core/dom/node.h"
+#include "third_party/blink/renderer/core/paint/timing/lcp_objects.h"
 #include "third_party/blink/renderer/core/paint/timing/paint_timing_detector.h"
 #include "third_party/blink/renderer/core/paint/timing/text_element_timing.h"
 #include "third_party/blink/renderer/platform/heap/collection_support/heap_hash_map.h"
@@ -69,7 +70,9 @@
                                      const uint64_t&,
                                      const gfx::Rect& frame_visual_rect,
                                      const gfx::RectF& root_visual_rect);
-  TextRecord* UpdateMetricsCandidate();
+
+  // Return the text LCP candidate and whether the candidate has changed.
+  std::pair<TextRecord*, bool> UpdateMetricsCandidate();
 
   void ReportCandidateToTrace(const TextRecord&);
   void PopulateTraceValue(TracedValue&, const TextRecord& first_text_paint);
@@ -143,7 +146,7 @@
   inline bool IsRecordingLargestTextPaint() const {
     return recording_largest_text_paint_;
   }
-  inline TextRecord* UpdateMetricsCandidate() {
+  inline std::pair<TextRecord*, bool> UpdateMetricsCandidate() {
     return ltp_manager_->UpdateMetricsCandidate();
   }
   void ReportLargestIgnoredText();
diff --git a/third_party/blink/renderer/core/paint/timing/text_paint_timing_detector_test.cc b/third_party/blink/renderer/core/paint/timing/text_paint_timing_detector_test.cc
index 5e13cd8..a979f79d 100644
--- a/third_party/blink/renderer/core/paint/timing/text_paint_timing_detector_test.cc
+++ b/third_party/blink/renderer/core/paint/timing/text_paint_timing_detector_test.cc
@@ -70,14 +70,14 @@
     return &GetPaintTimingDetector().GetTextPaintTimingDetector();
   }
 
-  TextPaintTimingDetector* GetChildFrameTextPaintTimingDetector() {
-    return &GetChildFrameView()
-                .GetPaintTimingDetector()
-                .GetTextPaintTimingDetector();
+  TextPaintTimingDetector& GetChildFrameTextPaintTimingDetector() {
+    return GetChildFrameView()
+        .GetPaintTimingDetector()
+        .GetTextPaintTimingDetector();
   }
 
-  LargestTextPaintManager* GetLargestTextPaintManager() {
-    return GetTextPaintTimingDetector()->ltp_manager_.Get();
+  LargestTextPaintManager& GetLargestTextPaintManager() {
+    return *GetTextPaintTimingDetector()->ltp_manager_;
   }
 
   wtf_size_t CountRecordedSize() {
@@ -110,30 +110,35 @@
   void InvokeCallback() {
     DCHECK_GT(mock_callback_manager_->CountCallbacks(), 0u);
     InvokePresentationTimeCallback(mock_callback_manager_);
+    // Outside the tests, this is invoked by
+    // |PaintTimingCallbackManagerImpl::ReportPaintTime|.
+    GetLargestTextPaintManager().UpdateMetricsCandidate();
   }
 
   void ChildFramePresentationTimeCallBack() {
     DCHECK_GT(child_frame_mock_callback_manager_->CountCallbacks(), 0u);
     InvokePresentationTimeCallback(child_frame_mock_callback_manager_);
+    // Outside the tests, this is invoked by
+    // |PaintTimingCallbackManagerImpl::ReportPaintTime|.
+    GetChildFrameTextPaintTimingDetector().UpdateMetricsCandidate();
   }
 
   void InvokePresentationTimeCallback(
       MockPaintTimingCallbackManager* callback_manager) {
     callback_manager->InvokePresentationTimeCallback(
         test_task_runner_->NowTicks());
-    // Outside the tests, this is invoked by
-    // |PaintTimingCallbackManagerImpl::ReportPaintTime|.
-    GetLargestTextPaintManager()->UpdateMetricsCandidate();
   }
 
   base::TimeTicks LargestPaintTime() {
     return GetPaintTimingDetector()
-        .latest_lcp_details_.largest_text_paint_time_;
+        .LatestLcpDetailsForTest()
+        .largest_text_paint_time;
   }
 
   uint64_t LargestPaintSize() {
     return GetPaintTimingDetector()
-        .latest_lcp_details_.largest_text_paint_size_;
+        .LatestLcpDetailsForTest()
+        .largest_text_paint_size;
   }
 
   void SetBodyInnerHTML(const std::string& content) {
@@ -151,7 +156,7 @@
     GetChildDocument()->body()->setInnerHTML(content, ASSERT_NO_EXCEPTION);
     child_frame_mock_callback_manager_ =
         MakeGarbageCollected<MockPaintTimingCallbackManager>();
-    GetChildFrameTextPaintTimingDetector()->ResetCallbackManager(
+    GetChildFrameTextPaintTimingDetector().ResetCallbackManager(
         child_frame_mock_callback_manager_);
     UpdateAllLifecyclePhases();
   }
@@ -206,7 +211,7 @@
   }
 
   TextRecord* TextRecordOfLargestTextPaint() {
-    return GetLargestTextPaintManager()->LargestText();
+    return GetLargestTextPaintManager().LargestText();
   }
 
   TextRecord* ChildFrameTextRecordOfLargestTextPaint() {
@@ -592,7 +597,6 @@
   EXPECT_TRUE(GetTextPaintTimingDetector()->IsRecordingLargestTextPaint());
 
   SimulateInputEvent();
-  EXPECT_TRUE(GetLargestTextPaintManager());
   EXPECT_FALSE(GetTextPaintTimingDetector()->IsRecordingLargestTextPaint());
 }
 
@@ -604,7 +608,6 @@
   EXPECT_TRUE(GetTextPaintTimingDetector()->IsRecordingLargestTextPaint());
 
   SimulateKeyUp();
-  EXPECT_TRUE(GetLargestTextPaintManager());
   EXPECT_TRUE(GetTextPaintTimingDetector()->IsRecordingLargestTextPaint());
 }
 
@@ -816,7 +819,6 @@
   AppendDivElementToBody("text");
   UpdateAllLifecyclePhasesAndSimulatePresentationTime();
   EXPECT_EQ(CountRecordedSize(), 1u);
-  EXPECT_TRUE(GetLargestTextPaintManager());
 
   SimulateInputEvent();
   UpdateAllLifecyclePhasesAndSimulatePresentationTime();
@@ -829,7 +831,6 @@
   AppendDivElementToBody("text");
   UpdateAllLifecyclePhasesAndSimulatePresentationTime();
   EXPECT_EQ(CountRecordedSize(), 1u);
-  EXPECT_TRUE(GetLargestTextPaintManager());
 
   SimulateScroll();
   UpdateAllLifecyclePhasesAndSimulatePresentationTime();
diff --git a/third_party/blink/renderer/core/testing/sim/sim_test.cc b/third_party/blink/renderer/core/testing/sim/sim_test.cc
index 7ca87607f..7935310 100644
--- a/third_party/blink/renderer/core/testing/sim/sim_test.cc
+++ b/third_party/blink/renderer/core/testing/sim/sim_test.cc
@@ -20,7 +20,12 @@
 
 namespace blink {
 
-SimTest::SimTest() {
+SimTest::SimTest(
+    std::optional<base::test::TaskEnvironment::TimeSource> time_source)
+    : task_environment_(
+          time_source.has_value()
+              ? time_source.value()
+              : base::test::TaskEnvironment::TimeSource::DEFAULT) {
   Document::SetForceSynchronousParsingForTesting(true);
   // Threaded animations are usually enabled for blink. However these tests use
   // synchronous compositing, which can not run threaded animations.
diff --git a/third_party/blink/renderer/core/testing/sim/sim_test.h b/third_party/blink/renderer/core/testing/sim/sim_test.h
index 3061be6..b14b4b5 100644
--- a/third_party/blink/renderer/core/testing/sim/sim_test.h
+++ b/third_party/blink/renderer/core/testing/sim/sim_test.h
@@ -5,6 +5,8 @@
 #ifndef THIRD_PARTY_BLINK_RENDERER_CORE_TESTING_SIM_SIM_TEST_H_
 #define THIRD_PARTY_BLINK_RENDERER_CORE_TESTING_SIM_SIM_TEST_H_
 
+#include <optional>
+
 #include <gtest/gtest.h>
 #include "base/task/single_thread_task_runner.h"
 #include "third_party/blink/public/platform/web_effective_connection_type.h"
@@ -23,7 +25,8 @@
 
 class SimTest : public testing::Test {
  protected:
-  SimTest();
+  explicit SimTest(std::optional<base::test::TaskEnvironment::TimeSource>
+                       time_source = std::nullopt);
   ~SimTest() override;
 
   void SetUp() override;
@@ -76,6 +79,7 @@
       bool is_for_scalable_page);
 
   void SetPreferCompositingToLCDText(bool enabled);
+  test::TaskEnvironment& task_environment() { return task_environment_; }
 
  private:
   test::TaskEnvironment task_environment_;
diff --git a/third_party/blink/renderer/core/timing/performance_timing_for_reporting.cc b/third_party/blink/renderer/core/timing/performance_timing_for_reporting.cc
index 6757c467..e29f1de0 100644
--- a/third_party/blink/renderer/core/timing/performance_timing_for_reporting.cc
+++ b/third_party/blink/renderer/core/timing/performance_timing_for_reporting.cc
@@ -15,6 +15,7 @@
 #include "third_party/blink/renderer/core/loader/document_load_timing.h"
 #include "third_party/blink/renderer/core/loader/document_loader.h"
 #include "third_party/blink/renderer/core/loader/interactive_detector.h"
+#include "third_party/blink/renderer/core/paint/timing/lcp_objects.h"
 #include "third_party/blink/renderer/core/paint/timing/paint_timing.h"
 #include "third_party/blink/renderer/core/paint/timing/paint_timing_detector.h"
 #include "third_party/blink/renderer/core/timing/performance.h"
@@ -34,43 +35,43 @@
 
 LargestContentfulPaintDetailsForReporting PerformanceTimingForReporting::
     PopulateLargestContentfulPaintDetailsForReporting(
-        PaintTimingDetector::LargestContentfulPaintDetails timing) const {
+        const LargestContentfulPaintDetails& timing) const {
   // The largest_image_paint_time and the largest_text_paint_time are converted
   // into seconds.
   double largest_image_paint_time =
       base::Milliseconds(
-          MonotonicTimeToIntegerMilliseconds(timing.largest_image_paint_time_))
+          MonotonicTimeToIntegerMilliseconds(timing.largest_image_paint_time))
           .InSecondsF();
 
   double largest_text_paint_time =
       base::Milliseconds(
-          MonotonicTimeToIntegerMilliseconds(timing.largest_text_paint_time_))
+          MonotonicTimeToIntegerMilliseconds(timing.largest_text_paint_time))
           .InSecondsF();
 
   absl::optional<base::TimeDelta> largest_image_discovery_time =
-      MonotonicTimeToPseudoWallTime(timing.largest_image_discovery_time_);
+      MonotonicTimeToPseudoWallTime(timing.largest_image_discovery_time);
 
   absl::optional<base::TimeDelta> largest_image_load_start =
-      MonotonicTimeToPseudoWallTime(timing.largest_image_load_start_);
+      MonotonicTimeToPseudoWallTime(timing.largest_image_load_start);
 
   absl::optional<base::TimeDelta> largest_image_load_end =
-      MonotonicTimeToPseudoWallTime(timing.largest_image_load_end_);
+      MonotonicTimeToPseudoWallTime(timing.largest_image_load_end);
 
   return {largest_image_paint_time,
-          timing.largest_image_paint_size_,
+          timing.largest_image_paint_size,
           largest_image_discovery_time,
           largest_image_load_start,
           largest_image_load_end,
-          timing.largest_contentful_paint_type_,
+          timing.largest_contentful_paint_type,
 
-          timing.largest_contentful_paint_image_bpp_,
+          timing.largest_contentful_paint_image_bpp,
           largest_text_paint_time,
-          timing.largest_text_paint_size_,
-          timing.largest_contentful_paint_time_,
+          timing.largest_text_paint_size,
+          timing.largest_contentful_paint_time,
 
-          timing.largest_contentful_paint_image_request_priority_,
-          timing.is_loaded_from_memory_cache_,
-          timing.is_preloaded_with_early_hints_};
+          timing.largest_contentful_paint_image_request_priority,
+          timing.is_loaded_from_memory_cache,
+          timing.is_preloaded_with_early_hints};
 }
 
 PerformanceTimingForReporting::PerformanceTimingForReporting(
diff --git a/third_party/blink/renderer/core/timing/performance_timing_for_reporting.h b/third_party/blink/renderer/core/timing/performance_timing_for_reporting.h
index f8797d8..681e834 100644
--- a/third_party/blink/renderer/core/timing/performance_timing_for_reporting.h
+++ b/third_party/blink/renderer/core/timing/performance_timing_for_reporting.h
@@ -22,7 +22,7 @@
 class DocumentTiming;
 class InteractiveDetector;
 class PaintTiming;
-class PaintTimingDetector;
+struct LargestContentfulPaintDetails;
 
 // This class is only used for non-web-exposed reporting purposes (e.g. UKM).
 class CORE_EXPORT PerformanceTimingForReporting final
@@ -100,7 +100,7 @@
 
   LargestContentfulPaintDetailsForReporting
   PopulateLargestContentfulPaintDetailsForReporting(
-      PaintTimingDetector::LargestContentfulPaintDetails timing) const;
+      const LargestContentfulPaintDetails& timing) const;
 
   // The time at which the frame is first eligible for painting due to not
   // being throttled. A zero value indicates throttling.
diff --git a/third_party/blink/renderer/modules/credentialmanagement/credential_manager_type_converters.cc b/third_party/blink/renderer/modules/credentialmanagement/credential_manager_type_converters.cc
index 088b5fc..7bee081 100644
--- a/third_party/blink/renderer/modules/credentialmanagement/credential_manager_type_converters.cc
+++ b/third_party/blink/renderer/modules/credentialmanagement/credential_manager_type_converters.cc
@@ -862,11 +862,11 @@
     Convert(const blink::IdentityProviderRequestOptions& options) {
   auto mojo_options = IdentityProviderRequestOptions::New();
   mojo_options->config = IdentityProviderConfig::New();
-  if (options.hasRegistered() &&
-      blink::RuntimeEnabledFeatures::FedCmIdPRegistrationEnabled()) {
-    mojo_options->config->use_registered_config_urls = options.registered();
+  CHECK(options.hasConfigURL());
+  if (blink::RuntimeEnabledFeatures::FedCmIdPRegistrationEnabled() &&
+      options.configURL() == "any") {
+    mojo_options->config->use_registered_config_urls = true;
   } else {
-    CHECK(options.hasConfigURL());
     mojo_options->config->config_url = blink::KURL(options.configURL());
   }
   mojo_options->config->client_id = options.clientId();
diff --git a/third_party/blink/renderer/modules/credentialmanagement/credentials_container.cc b/third_party/blink/renderer/modules/credentialmanagement/credentials_container.cc
index 446d44d..caadf95 100644
--- a/third_party/blink/renderer/modules/credentialmanagement/credentials_container.cc
+++ b/third_party/blink/renderer/modules/credentialmanagement/credentials_container.cc
@@ -1544,7 +1544,7 @@
       }
 
       if (blink::RuntimeEnabledFeatures::FedCmIdPRegistrationEnabled() &&
-          provider->hasRegistered() && provider->registered()) {
+          provider->hasConfigURL() && provider->configURL() == "any") {
         mojom::blink::IdentityProviderPtr identity_provider =
             blink::mojom::blink::IdentityProvider::From(*provider);
         identity_provider_ptrs.push_back(std::move(identity_provider));
diff --git a/third_party/blink/renderer/modules/credentialmanagement/identity_provider_config.idl b/third_party/blink/renderer/modules/credentialmanagement/identity_provider_config.idl
index 1c126b53..a2456e23 100644
--- a/third_party/blink/renderer/modules/credentialmanagement/identity_provider_config.idl
+++ b/third_party/blink/renderer/modules/credentialmanagement/identity_provider_config.idl
@@ -23,11 +23,6 @@
   [RuntimeEnabled=FedCmAuthz] record<USVString, USVString> params;
 };
 
-// extends the IdentityProviderConfig for Registered IdPs
-partial dictionary IdentityProviderConfig  {
-  [RuntimeEnabled=FedCmIdPRegistration] boolean registered;
-};
-
 // extends the IdentityProviderConfig with DigitalCredential-specific attributes
 partial dictionary IdentityProviderConfig  {
   [RuntimeEnabled=WebIdentityDigitalCredentials] DigitalCredentialProvider holder;
diff --git a/third_party/blink/renderer/modules/media_capabilities/media_capabilities_test.cc b/third_party/blink/renderer/modules/media_capabilities/media_capabilities_test.cc
index 6361c4e..18073425 100644
--- a/third_party/blink/renderer/modules/media_capabilities/media_capabilities_test.cc
+++ b/third_party/blink/renderer/modules/media_capabilities/media_capabilities_test.cc
@@ -216,6 +216,7 @@
   void SetRendererType(
       media::mojom::blink::RendererType renderer_type) override {}
   void SetKeySystem(const String& key_system) override {}
+  void SetHasWaitingForKey() override {}
   void SetIsHardwareSecure() override {}
   void SetHasPlayed() override {}
   void SetHaveEnough() override {}
diff --git a/third_party/blink/renderer/modules/mediarecorder/h264_encoder.cc b/third_party/blink/renderer/modules/mediarecorder/h264_encoder.cc
index 5fff4368..c19b954 100644
--- a/third_party/blink/renderer/modules/mediarecorder/h264_encoder.cc
+++ b/third_party/blink/renderer/modules/mediarecorder/h264_encoder.cc
@@ -89,11 +89,13 @@
     scoped_refptr<base::SequencedTaskRunner> encoding_task_runner,
     const VideoTrackRecorder::OnEncodedVideoCB& on_encoded_video_cb,
     VideoTrackRecorder::CodecProfile codec_profile,
-    uint32_t bits_per_second)
+    uint32_t bits_per_second,
+    const VideoTrackRecorder::OnErrorCB on_error_cb)
     : Encoder(std::move(encoding_task_runner),
               on_encoded_video_cb,
               bits_per_second),
-      codec_profile_(codec_profile) {
+      codec_profile_(codec_profile),
+      on_error_cb_(on_error_cb) {
   DCHECK_EQ(codec_profile_.codec_id, VideoTrackRecorder::CodecId::kH264);
 }
 
@@ -121,6 +123,7 @@
   const gfx::Size frame_size = frame->visible_rect().size();
   if (!openh264_encoder_ || configured_size_ != frame_size) {
     if (!ConfigureEncoder(frame_size)) {
+      on_error_cb_.Run();
       return;
     }
     first_frame_timestamp_ = capture_timestamp;
@@ -155,7 +158,7 @@
         {media::EncoderStatus::Codes::kEncoderFailedEncode,
          base::StrCat(
              {"OpenH264 failed to encode: ", base::NumberToString(ret)})});
-    NOTREACHED() << "OpenH264 encoding failed";
+    on_error_cb_.Run();
     return;
   }
   const media::Muxer::VideoParameters video_params(*frame);
diff --git a/third_party/blink/renderer/modules/mediarecorder/h264_encoder.h b/third_party/blink/renderer/modules/mediarecorder/h264_encoder.h
index 5c43598..df18917 100644
--- a/third_party/blink/renderer/modules/mediarecorder/h264_encoder.h
+++ b/third_party/blink/renderer/modules/mediarecorder/h264_encoder.h
@@ -29,7 +29,8 @@
   H264Encoder(scoped_refptr<base::SequencedTaskRunner> encoding_task_runner,
               const VideoTrackRecorder::OnEncodedVideoCB& on_encoded_video_cb,
               VideoTrackRecorder::CodecProfile codec_profile,
-              uint32_t bits_per_second);
+              uint32_t bits_per_second,
+              const VideoTrackRecorder::OnErrorCB on_error_cb);
   ~H264Encoder() override;
 
   H264Encoder(const H264Encoder&) = delete;
@@ -54,6 +55,8 @@
   // TODO(inker): Move this field into VideoTrackRecorder::Encoder.
   const VideoTrackRecorder::CodecProfile codec_profile_;
 
+  const VideoTrackRecorder::OnErrorCB on_error_cb_;
+
   // |openh264_encoder_| is a special scoped pointer to guarantee proper
   // destruction, also when reconfiguring due to parameters change.
   gfx::Size configured_size_;
diff --git a/third_party/blink/renderer/modules/mediarecorder/h264_encoder_unittest.cc b/third_party/blink/renderer/modules/mediarecorder/h264_encoder_unittest.cc
index 7b0ff57..11417827 100644
--- a/third_party/blink/renderer/modules/mediarecorder/h264_encoder_unittest.cc
+++ b/third_party/blink/renderer/modules/mediarecorder/h264_encoder_unittest.cc
@@ -12,6 +12,7 @@
 #include "base/task/thread_pool.h"
 #include "base/test/task_environment.h"
 #include "base/time/time.h"
+#include "media/base/limits.h"
 #include "media/base/mock_filters.h"
 #include "media/base/video_codecs.h"
 #include "media/base/video_encoder.h"
@@ -53,6 +54,9 @@
 
 class H264EncoderFixture : public ::testing::Test {
  public:
+  H264EncoderFixture()
+      : H264EncoderFixture(absl::nullopt, absl::nullopt, 1280 * 720 * 3) {}
+
   H264EncoderFixture(absl::optional<media::VideoCodecProfile> profile,
                      absl::optional<uint8_t> level,
                      uint32_t bitrate)
@@ -67,7 +71,9 @@
             VideoTrackRecorder::CodecProfile(VideoTrackRecorder::CodecId::kH264,
                                              profile_,
                                              level_),
-            bitrate_) {
+            bitrate_,
+            base::BindRepeating(&H264EncoderFixture::OnError,
+                                CrossThreadUnretained(this))) {
     auto metrics_provider =
         std::make_unique<media::MockVideoEncoderMetricsProvider>();
     mock_metrics_provider_ = metrics_provider.get();
@@ -78,6 +84,11 @@
   H264EncoderFixture& operator=(const H264EncoderFixture&) = delete;
 
  protected:
+  void OnError() {
+    DVLOG(4) << __func__ << " is called";
+    on_error_called_ = true;
+  }
+
   void EncodeFrame() {
     encoder_.StartFrameEncode(
         CrossThreadBindRepeating(base::TimeTicks::Now),
@@ -144,8 +155,32 @@
   raw_ptr<media::MockVideoEncoderMetricsProvider, ExperimentalRenderer>
       mock_metrics_provider_;
   H264Encoder encoder_;
+  bool on_error_called_ = false;
 };
 
+TEST_F(H264EncoderFixture, ErrorCallOnTooLargeFrame) {
+  constexpr int kTooLargeDimension = 1 << 14;  // 16384
+  static_assert(kTooLargeDimension <= media::limits::kMaxDimension,
+                "kTooLargeDimension is more than media::limits::kMaxDimension");
+  static_assert(
+      kTooLargeDimension * kTooLargeDimension <= media::limits::kMaxCanvas,
+      "kTooLargeDimension * kTooLargeDimension is more than "
+      "media::limits::kMaxDimension");
+  constexpr gfx::Size kTooLargeResolution(kTooLargeDimension,
+                                          kTooLargeDimension);
+  auto frame = media::VideoFrame::CreateBlackFrame(kTooLargeResolution);
+  ASSERT_TRUE(frame);
+  EXPECT_CALL(*mock_metrics_provider_,
+              MockInitialize(media::VideoCodecProfile::H264PROFILE_BASELINE,
+                             kTooLargeResolution,
+                             /*hardware_video_encoder=*/false,
+                             media::SVCScalabilityMode::kL1T1));
+  EXPECT_CALL(*mock_metrics_provider_, MockSetError);
+  encoder_.StartFrameEncode(CrossThreadBindRepeating(base::TimeTicks::Now),
+                            frame, base::TimeTicks::Now());
+  EXPECT_TRUE(on_error_called_);
+}
+
 class H264EncoderParameterTest
     : public H264EncoderFixture,
       public ::testing::WithParamInterface<TestParam> {
@@ -176,10 +211,10 @@
     ASSERT_EQ(profileLevel.first, GetParam().profile);
   if (GetParam().level)
     ASSERT_EQ(profileLevel.second, GetParam().level);
+  EXPECT_FALSE(on_error_called_);
 }
 
 INSTANTIATE_TEST_SUITE_P(All,
                          H264EncoderParameterTest,
                          testing::ValuesIn(kH264EncoderParameterTestParam));
-
 }  // namespace blink
diff --git a/third_party/blink/renderer/modules/mediarecorder/video_track_recorder.cc b/third_party/blink/renderer/modules/mediarecorder/video_track_recorder.cc
index ea54783..adcf1f3 100644
--- a/third_party/blink/renderer/modules/mediarecorder/video_track_recorder.cc
+++ b/third_party/blink/renderer/modules/mediarecorder/video_track_recorder.cc
@@ -891,16 +891,24 @@
   switch (codec_profile.codec_id) {
 #if BUILDFLAG(RTC_USE_H264)
     case CodecId::kH264:
-      return std::make_unique<H264Encoder>(std::move(encoding_task_runner),
-                                           on_encoded_video_cb, codec_profile,
-                                           bits_per_second);
+      return std::make_unique<H264Encoder>(
+          std::move(encoding_task_runner), on_encoded_video_cb, codec_profile,
+          bits_per_second,
+          base::BindPostTask(
+              main_thread_task_runner_,
+              WTF::BindRepeating(&CallbackInterface::OnVideoEncodingError,
+                                 WrapWeakPersistent(callback_interface()))));
 #endif
     case CodecId::kVp8:
     case CodecId::kVp9:
       return std::make_unique<VpxEncoder>(
           std::move(encoding_task_runner),
           codec_profile.codec_id == CodecId::kVp9, on_encoded_video_cb,
-          bits_per_second);
+          bits_per_second,
+          base::BindPostTask(
+              main_thread_task_runner_,
+              WTF::BindRepeating(&CallbackInterface::OnVideoEncodingError,
+                                 WrapWeakPersistent(callback_interface()))));
 #if BUILDFLAG(ENABLE_LIBAOM)
     case CodecId::kAv1: {
       auto on_error_cb = base::BindPostTask(
diff --git a/third_party/blink/renderer/modules/mediarecorder/video_track_recorder_unittest.cc b/third_party/blink/renderer/modules/mediarecorder/video_track_recorder_unittest.cc
index 44549a2..2337caf 100644
--- a/third_party/blink/renderer/modules/mediarecorder/video_track_recorder_unittest.cc
+++ b/third_party/blink/renderer/modules/mediarecorder/video_track_recorder_unittest.cc
@@ -13,6 +13,7 @@
 #include "base/synchronization/waitable_event.h"
 #include "base/test/bind.h"
 #include "base/test/gmock_callback_support.h"
+#include "media/base/limits.h"
 #include "media/base/mock_filters.h"
 #include "media/base/video_codecs.h"
 #include "media/base/video_frame.h"
@@ -365,16 +366,56 @@
   }
 };
 
-class VideoTrackRecorderTestMediaVideoEncoderParam
-    : public ::testing::TestWithParam<bool>,
+class VideoTrackRecorderTestWithCodec
+    : public TestWithParam<testing::tuple<VideoTrackRecorder::CodecId, bool>>,
       public VideoTrackRecorderTest,
       public ScopedMediaRecorderUseMediaVideoEncoderForTest {
  public:
-  VideoTrackRecorderTestMediaVideoEncoderParam()
-      : ScopedMediaRecorderUseMediaVideoEncoderForTest(GetParam()) {}
-  ~VideoTrackRecorderTestMediaVideoEncoderParam() override = default;
+  VideoTrackRecorderTestWithCodec()
+      : ScopedMediaRecorderUseMediaVideoEncoderForTest(
+            testing::get<1>(GetParam())) {}
+  ~VideoTrackRecorderTestWithCodec() override = default;
 };
 
+// Construct and destruct all objects, in particular |video_track_recorder_| and
+// its inner object(s). This is a non trivial sequence.
+TEST_P(VideoTrackRecorderTestWithCodec, ConstructAndDestruct) {
+  InitializeRecorder(testing::get<0>(GetParam()));
+}
+
+// Initializes an encoder with very large frame that causes an error on the
+// initialization. Check if the error is reported via OnVideoEncodingError().
+TEST_P(VideoTrackRecorderTestWithCodec,
+       SoftwareEncoderInitializeErrorWithLargeFrame) {
+  const VideoTrackRecorder::CodecId codec_id = testing::get<0>(GetParam());
+  if (codec_id == VideoTrackRecorder::CodecId::kVp9
+#if BUILDFLAG(ENABLE_LIBAOM)
+      || codec_id == VideoTrackRecorder::CodecId::kAv1
+#endif
+  ) {
+    // The max bits on width and height are 16bits in VP9 and AV1. Since it is
+    // more than media::limits::kMaxDimension (15 bits), the larger frame
+    // causing VP9 and AV1 initialization cannot be created because
+    // CreateBlackFrame() fails.
+    GTEST_SKIP();
+  }
+  InitializeRecorder(codec_id);
+  constexpr gfx::Size kTooLargeResolution(media::limits::kMaxDimension - 1, 1);
+  auto too_large_frame =
+      media::VideoFrame::CreateBlackFrame(kTooLargeResolution);
+  ASSERT_TRUE(too_large_frame);
+  base::RunLoop run_loop;
+  EXPECT_CALL(*mock_callback_interface_, OnVideoEncodingError)
+      .WillOnce(RunClosure(run_loop.QuitClosure()));
+  Encode(too_large_frame, base::TimeTicks::Now());
+  run_loop.Run();
+}
+
+INSTANTIATE_TEST_SUITE_P(All,
+                         VideoTrackRecorderTestWithCodec,
+                         ::testing::Combine(ValuesIn(kTrackRecorderTestCodec),
+                                            ::testing::Bool()));
+
 // TODO(crbug/1177593): refactor the test parameter space to something more
 // reasonable. Many tests below ignore parts of the space leading to too much
 // being tested.
@@ -393,12 +434,6 @@
   ~VideoTrackRecorderTestParam() override = default;
 };
 
-// Construct and destruct all objects, in particular |video_track_recorder_| and
-// its inner object(s). This is a non trivial sequence.
-TEST_P(VideoTrackRecorderTestParam, ConstructAndDestruct) {
-  InitializeRecorder(testing::get<0>(GetParam()));
-}
-
 // Creates the encoder and encodes 2 frames of the same size; the encoder
 // should be initialised and produce a keyframe, then a non-keyframe. Finally
 // a frame of larger size is sent and is expected to be encoded as a keyframe.
@@ -765,6 +800,77 @@
   run_loop.Run();
 }
 
+std::string PrintTestParams(
+    const testing::TestParamInfo<testing::tuple<VideoTrackRecorder::CodecId,
+                                                gfx::Size,
+                                                bool,
+                                                TestFrameType,
+                                                bool>>& info) {
+  std::stringstream ss;
+  ss << "codec ";
+  switch (testing::get<0>(info.param)) {
+    case VideoTrackRecorder::CodecId::kVp8:
+      ss << "vp8";
+      break;
+    case VideoTrackRecorder::CodecId::kVp9:
+      ss << "vp9";
+      break;
+#if BUILDFLAG(RTC_USE_H264)
+    case VideoTrackRecorder::CodecId::kH264:
+      ss << "h264";
+      break;
+#endif
+#if BUILDFLAG(ENABLE_LIBAOM)
+    case VideoTrackRecorder::CodecId::kAv1:
+      ss << "av1";
+      break;
+#endif
+    case VideoTrackRecorder::CodecId::kLast:
+    default:
+      ss << "invalid";
+      break;
+  }
+
+  ss << " size " + testing::get<1>(info.param).ToString() << " encode alpha "
+     << (testing::get<2>(info.param) ? "true" : "false") << " frame type ";
+  switch (testing::get<3>(info.param)) {
+    case TestFrameType::kNv12GpuMemoryBuffer:
+      ss << "NV12 GMB";
+      break;
+    case TestFrameType::kNv12Software:
+      ss << "I420 SW";
+      break;
+    case TestFrameType::kI420:
+      ss << "I420";
+      break;
+  }
+  ss << " mediaVideoEncoder "
+     << (testing::get<4>(info.param) ? "true" : "false");
+
+  std::string out;
+  base::ReplaceChars(ss.str(), " ", "_", &out);
+  return out;
+}
+
+INSTANTIATE_TEST_SUITE_P(All,
+                         VideoTrackRecorderTestParam,
+                         ::testing::Combine(ValuesIn(kTrackRecorderTestCodec),
+                                            ValuesIn(kTrackRecorderTestSize),
+                                            ::testing::Bool(),
+                                            ValuesIn(kTestFrameTypes),
+                                            ::testing::Bool()),
+                         PrintTestParams);
+
+class VideoTrackRecorderTestMediaVideoEncoderParam
+    : public ::testing::TestWithParam<bool>,
+      public VideoTrackRecorderTest,
+      public ScopedMediaRecorderUseMediaVideoEncoderForTest {
+ public:
+  VideoTrackRecorderTestMediaVideoEncoderParam()
+      : ScopedMediaRecorderUseMediaVideoEncoderForTest(GetParam()) {}
+  ~VideoTrackRecorderTestMediaVideoEncoderParam() override = default;
+};
+
 TEST_P(VideoTrackRecorderTestMediaVideoEncoderParam, RelaysReadyStateEnded) {
   InitializeRecorder(VideoTrackRecorder::CodecId::kVp8);
   base::RunLoop run_loop;
@@ -950,71 +1056,9 @@
   test::RunDelayedTasks(base::Seconds(1));
 }
 
-std::string PrintTestParams(
-    const testing::TestParamInfo<testing::tuple<VideoTrackRecorder::CodecId,
-                                                gfx::Size,
-                                                bool,
-                                                TestFrameType,
-                                                bool>>& info) {
-  std::stringstream ss;
-  ss << "codec ";
-  switch (testing::get<0>(info.param)) {
-    case VideoTrackRecorder::CodecId::kVp8:
-      ss << "vp8";
-      break;
-    case VideoTrackRecorder::CodecId::kVp9:
-      ss << "vp9";
-      break;
-#if BUILDFLAG(RTC_USE_H264)
-    case VideoTrackRecorder::CodecId::kH264:
-      ss << "h264";
-      break;
-#endif
-#if BUILDFLAG(ENABLE_LIBAOM)
-    case VideoTrackRecorder::CodecId::kAv1:
-      ss << "av1";
-      break;
-#endif
-    case VideoTrackRecorder::CodecId::kLast:
-    default:
-      ss << "invalid";
-      break;
-  }
-
-  ss << " size " + testing::get<1>(info.param).ToString() << " encode alpha "
-     << (testing::get<2>(info.param) ? "true" : "false") << " frame type ";
-  switch (testing::get<3>(info.param)) {
-    case TestFrameType::kNv12GpuMemoryBuffer:
-      ss << "NV12 GMB";
-      break;
-    case TestFrameType::kNv12Software:
-      ss << "I420 SW";
-      break;
-    case TestFrameType::kI420:
-      ss << "I420";
-      break;
-  }
-  ss << " mediaVideoEncoder "
-     << (testing::get<4>(info.param) ? "true" : "false");
-
-  std::string out;
-  base::ReplaceChars(ss.str(), " ", "_", &out);
-  return out;
-}
-
-INSTANTIATE_TEST_SUITE_P(All,
-                         VideoTrackRecorderTestParam,
-                         ::testing::Combine(ValuesIn(kTrackRecorderTestCodec),
-                                            ValuesIn(kTrackRecorderTestSize),
-                                            ::testing::Bool(),
-                                            ValuesIn(kTestFrameTypes),
-                                            ::testing::Bool()),
-                         PrintTestParams);
-
 INSTANTIATE_TEST_SUITE_P(All,
                          VideoTrackRecorderTestMediaVideoEncoderParam,
                          ::testing::Bool());
-
 class VideoTrackRecorderPassthroughTest
     : public TestWithParam<VideoTrackRecorder::CodecId>,
       public VideoTrackRecorderTestBase {
diff --git a/third_party/blink/renderer/modules/mediarecorder/vpx_encoder.cc b/third_party/blink/renderer/modules/mediarecorder/vpx_encoder.cc
index 10725d5..7c3162b 100644
--- a/third_party/blink/renderer/modules/mediarecorder/vpx_encoder.cc
+++ b/third_party/blink/renderer/modules/mediarecorder/vpx_encoder.cc
@@ -40,11 +40,13 @@
     scoped_refptr<base::SequencedTaskRunner> encoding_task_runner,
     bool use_vp9,
     const VideoTrackRecorder::OnEncodedVideoCB& on_encoded_video_cb,
-    uint32_t bits_per_second)
+    uint32_t bits_per_second,
+    const VideoTrackRecorder::OnErrorCB on_error_cb)
     : Encoder(std::move(encoding_task_runner),
               on_encoded_video_cb,
               bits_per_second),
-      use_vp9_(use_vp9) {
+      use_vp9_(use_vp9),
+      on_error_cb_(on_error_cb) {
   std::memset(&codec_config_, 0, sizeof(codec_config_));
   std::memset(&alpha_codec_config_, 0, sizeof(alpha_codec_config_));
   codec_config_.g_timebase.den = 0;        // Not initialized.
@@ -211,6 +213,8 @@
          base::StrCat(
              {"libvpx failed to encode: ", vpx_codec_err_to_string(ret), " - ",
               vpx_codec_error_detail(encoder)})});
+    on_error_cb_.Run();
+    return;
   }
   *keyframe = false;
   vpx_codec_iter_t iter = nullptr;
@@ -310,6 +314,7 @@
     DLOG(WARNING) << "vpx_codec_enc_init failed: " << ret;
     // Require the encoder to be reinitialized next frame.
     codec_config->g_timebase.den = 0;
+    on_error_cb_.Run();
     return false;
   }
   encoder->reset(tmp_encoder.release());
diff --git a/third_party/blink/renderer/modules/mediarecorder/vpx_encoder.h b/third_party/blink/renderer/modules/mediarecorder/vpx_encoder.h
index 3bd8cc1..03fae9a 100644
--- a/third_party/blink/renderer/modules/mediarecorder/vpx_encoder.h
+++ b/third_party/blink/renderer/modules/mediarecorder/vpx_encoder.h
@@ -29,7 +29,8 @@
   VpxEncoder(scoped_refptr<base::SequencedTaskRunner> encoding_task_runner,
              bool use_vp9,
              const VideoTrackRecorder::OnEncodedVideoCB& on_encoded_video_cb,
-             uint32_t bits_per_second);
+             uint32_t bits_per_second,
+             const VideoTrackRecorder::OnErrorCB on_error_cb);
 
   VpxEncoder(const VpxEncoder&) = delete;
   VpxEncoder& operator=(const VpxEncoder&) = delete;
@@ -73,6 +74,8 @@
   // Force usage of VP9 for encoding, instead of VP8 which is the default.
   const bool use_vp9_;
 
+  const VideoTrackRecorder::OnErrorCB on_error_cb_;
+
   // VPx internal objects: configuration and encoder. |encoder_| is a special
   // scoped pointer to guarantee proper destruction, particularly when
   // reconfiguring due to parameters change. Only used on
diff --git a/third_party/blink/renderer/modules/mediasession/chapter_information.idl b/third_party/blink/renderer/modules/mediasession/chapter_information.idl
new file mode 100644
index 0000000..6bd102f
--- /dev/null
+++ b/third_party/blink/renderer/modules/mediasession/chapter_information.idl
@@ -0,0 +1,11 @@
+// Copyright 2023 The Chromium Authors
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// https://wicg.github.io/mediasession/#dictdef-chapterinformation
+
+dictionary ChapterInformation {
+  DOMString title = "";
+  double startTime = 0;
+  sequence<MediaImage> artwork;
+};
diff --git a/third_party/blink/renderer/modules/mediasession/media_metadata.cc b/third_party/blink/renderer/modules/mediasession/media_metadata.cc
index 236a6e0..8f396d5 100644
--- a/third_party/blink/renderer/modules/mediasession/media_metadata.cc
+++ b/third_party/blink/renderer/modules/mediasession/media_metadata.cc
@@ -7,6 +7,7 @@
 #include "third_party/blink/public/platform/task_type.h"
 #include "third_party/blink/renderer/bindings/core/v8/to_v8_traits.h"
 #include "third_party/blink/renderer/bindings/core/v8/v8_binding_for_core.h"
+#include "third_party/blink/renderer/bindings/modules/v8/v8_chapter_information.h"
 #include "third_party/blink/renderer/bindings/modules/v8/v8_media_metadata_init.h"
 #include "third_party/blink/renderer/core/execution_context/execution_context.h"
 #include "third_party/blink/renderer/modules/mediasession/media_session.h"
@@ -15,6 +16,32 @@
 
 namespace blink {
 
+namespace {
+
+// Processes the `MediaImage` with a parsed url in the artwork list. Returns an
+// empty list when any exception happens.
+HeapVector<Member<MediaImage>> ProcessArtworkVector(
+    ScriptState* script_state,
+    const HeapVector<Member<MediaImage>>& artwork,
+    ExceptionState& exception_state) {
+  HeapVector<Member<MediaImage>> processed_artwork(artwork);
+
+  for (MediaImage* image : processed_artwork) {
+    KURL url = ExecutionContext::From(script_state)->CompleteURL(image->src());
+    if (!url.IsValid()) {
+      exception_state.ThrowTypeError("'" + image->src() +
+                                     "' can't be resolved to a valid URL.");
+      return {};
+    }
+    image->setSrc(url);
+  }
+
+  DCHECK(!exception_state.HadException());
+  return processed_artwork;
+}
+
+}  // namespace
+
 // static
 MediaMetadata* MediaMetadata::Create(ScriptState* script_state,
                                      const MediaMetadataInit* metadata,
@@ -52,6 +79,11 @@
   return artwork_;
 }
 
+const HeapVector<Member<ChapterInformation>>& MediaMetadata::chapterInfo()
+    const {
+  return chapterInfo_;
+}
+
 v8::LocalVector<v8::Value> MediaMetadata::artwork(
     ScriptState* script_state) const {
   v8::LocalVector<v8::Value> result(script_state->GetIsolate(),
@@ -67,6 +99,21 @@
   return result;
 }
 
+v8::LocalVector<v8::Value> MediaMetadata::chapterInfo(
+    ScriptState* script_state) const {
+  v8::LocalVector<v8::Value> result(script_state->GetIsolate(),
+                                    chapterInfo_.size());
+
+  for (wtf_size_t i = 0; i < chapterInfo_.size(); ++i) {
+    result[i] = FreezeV8Object(
+        ToV8Traits<ChapterInformation>::ToV8(script_state, chapterInfo_[i])
+            .ToLocalChecked(),
+        script_state->GetIsolate());
+  }
+
+  return result;
+}
+
 void MediaMetadata::setTitle(const String& title) {
   title_ = title;
   NotifySessionAsync();
@@ -89,6 +136,24 @@
   NotifySessionAsync();
 }
 
+void MediaMetadata::setChapterInfo(
+    ScriptState* script_state,
+    const HeapVector<Member<ChapterInformation>>& chapter_info,
+    ExceptionState& exception_state) {
+  HeapVector<Member<ChapterInformation>> processed_chapters(chapter_info);
+
+  for (ChapterInformation* chapter : processed_chapters) {
+    HeapVector<Member<MediaImage>> processed_artwork =
+        ProcessArtworkVector(script_state, chapter->artwork(), exception_state);
+    if (processed_artwork.empty()) {
+      return;
+    }
+    chapter->setArtwork(processed_artwork);
+  }
+  chapterInfo_.swap(processed_chapters);
+  NotifySessionAsync();
+}
+
 void MediaMetadata::SetSession(MediaSession* session) {
   session_ = session;
 }
@@ -109,24 +174,17 @@
     ScriptState* script_state,
     const HeapVector<Member<MediaImage>>& artwork,
     ExceptionState& exception_state) {
-  HeapVector<Member<MediaImage>> processed_artwork(artwork);
-
-  for (MediaImage* image : processed_artwork) {
-    KURL url = ExecutionContext::From(script_state)->CompleteURL(image->src());
-    if (!url.IsValid()) {
-      exception_state.ThrowTypeError("'" + image->src() +
-                                     "' can't be resolved to a valid URL.");
-      return;
-    }
-    image->setSrc(url);
+  HeapVector<Member<MediaImage>> processed_artwork =
+      ProcessArtworkVector(script_state, artwork, exception_state);
+  if (processed_artwork.empty()) {
+    return;
   }
-
-  DCHECK(!exception_state.HadException());
   artwork_.swap(processed_artwork);
 }
 
 void MediaMetadata::Trace(Visitor* visitor) const {
   visitor->Trace(artwork_);
+  visitor->Trace(chapterInfo_);
   visitor->Trace(session_);
   visitor->Trace(notify_session_timer_);
   ScriptWrappable::Trace(visitor);
diff --git a/third_party/blink/renderer/modules/mediasession/media_metadata.h b/third_party/blink/renderer/modules/mediasession/media_metadata.h
index 79a4d2d..52b33437 100644
--- a/third_party/blink/renderer/modules/mediasession/media_metadata.h
+++ b/third_party/blink/renderer/modules/mediasession/media_metadata.h
@@ -5,6 +5,7 @@
 #ifndef THIRD_PARTY_BLINK_RENDERER_MODULES_MEDIASESSION_MEDIA_METADATA_H_
 #define THIRD_PARTY_BLINK_RENDERER_MODULES_MEDIASESSION_MEDIA_METADATA_H_
 
+#include "third_party/blink/renderer/bindings/modules/v8/v8_chapter_information.h"
 #include "third_party/blink/renderer/bindings/modules/v8/v8_media_image.h"
 #include "third_party/blink/renderer/modules/modules_export.h"
 #include "third_party/blink/renderer/platform/bindings/script_wrappable.h"
@@ -40,10 +41,12 @@
   String artist() const;
   String album() const;
   v8::LocalVector<v8::Value> artwork(ScriptState*) const;
+  v8::LocalVector<v8::Value> chapterInfo(ScriptState*) const;
 
   // Internal use only, returns a reference to m_artwork instead of a Frozen
-  // copy of a MediaImage array.
+  // copy of a `MediaImage` array. Same for the `ChapterInformation`.
   const HeapVector<Member<MediaImage>>& artwork() const;
+  const HeapVector<Member<ChapterInformation>>& chapterInfo() const;
 
   void setTitle(const String&);
   void setArtist(const String&);
@@ -51,6 +54,9 @@
   void setArtwork(ScriptState*,
                   const HeapVector<Member<MediaImage>>&,
                   ExceptionState&);
+  void setChapterInfo(ScriptState*,
+                      const HeapVector<Member<ChapterInformation>>&,
+                      ExceptionState&);
 
   // Called by MediaSession to associate or de-associate itself.
   void SetSession(MediaSession*);
@@ -77,6 +83,7 @@
   String artist_;
   String album_;
   HeapVector<Member<MediaImage>> artwork_;
+  HeapVector<Member<ChapterInformation>> chapterInfo_;
 
   Member<MediaSession> session_;
   HeapTaskRunnerTimer<MediaMetadata> notify_session_timer_;
diff --git a/third_party/blink/renderer/modules/mediasession/media_metadata.idl b/third_party/blink/renderer/modules/mediasession/media_metadata.idl
index 6e98437f..d97f048b 100644
--- a/third_party/blink/renderer/modules/mediasession/media_metadata.idl
+++ b/third_party/blink/renderer/modules/mediasession/media_metadata.idl
@@ -13,4 +13,5 @@
     attribute DOMString artist;
     attribute DOMString album;
     [CallWith=ScriptState, RaisesException=Setter] attribute FrozenArray<MediaImage> artwork;
+    [RuntimeEnabled=MediaSessionChapterInformation, CallWith=ScriptState, RaisesException=Setter] attribute FrozenArray<ChapterInformation> chapterInfo;
 };
diff --git a/third_party/blink/renderer/modules/mediasession/media_metadata_init.idl b/third_party/blink/renderer/modules/mediasession/media_metadata_init.idl
index aceb25e2..cbeff95 100644
--- a/third_party/blink/renderer/modules/mediasession/media_metadata_init.idl
+++ b/third_party/blink/renderer/modules/mediasession/media_metadata_init.idl
@@ -9,4 +9,5 @@
     DOMString artist = "";
     DOMString album = "";
     sequence<MediaImage> artwork = [];
+    sequence<ChapterInformation> chapterInfo = [];
 };
diff --git a/third_party/blink/renderer/modules/mediasession/media_metadata_sanitizer.cc b/third_party/blink/renderer/modules/mediasession/media_metadata_sanitizer.cc
index 523dc66e..c0709ed 100644
--- a/third_party/blink/renderer/modules/mediasession/media_metadata_sanitizer.cc
+++ b/third_party/blink/renderer/modules/mediasession/media_metadata_sanitizer.cc
@@ -32,6 +32,9 @@
 // Maximum number of MediaImages inside the MediaMetadata.
 const size_t kMaxNumberOfMediaImages = 10;
 
+// Maximum number of `ChapterInformation` inside the `MediaMetadata`.
+const size_t kMaxNumberOfChapters = 200;
+
 // Maximum of sizes in a MediaImage.
 const size_t kMaxNumberOfImageSizes = 10;
 
@@ -89,6 +92,37 @@
   return mojo_image;
 }
 
+// Sanitize ChapterInformation and do mojo serialization.
+media_session::mojom::blink::ChapterInformationPtr
+SanitizeChapterInformationAndConvertToMojo(const ChapterInformation* chapter,
+                                           ExecutionContext* context) {
+  media_session::mojom::blink::ChapterInformationPtr mojo_chapter;
+
+  if (!chapter) {
+    return mojo_chapter;
+  }
+
+  mojo_chapter->title = chapter->title().Left(kMaxStringLength);
+  mojo_chapter->startTime = base::Seconds(chapter->startTime());
+
+  for (const MediaImage* image : chapter->artwork()) {
+    media_session::mojom::blink::MediaImagePtr mojo_image =
+        SanitizeMediaImageAndConvertToMojo(image, context);
+    if (!mojo_image.is_null()) {
+      mojo_chapter->artwork.push_back(std::move(mojo_image));
+    }
+    if (mojo_chapter->artwork.size() == kMaxNumberOfMediaImages) {
+      context->AddConsoleMessage(MakeGarbageCollected<ConsoleMessage>(
+          mojom::ConsoleMessageSource::kJavaScript,
+          mojom::ConsoleMessageLevel::kWarning,
+          "The number of MediaImage sizes exceeds the upper limit in a "
+          "chapter. All remaining MediaImage will be ignored"));
+      break;
+    }
+  }
+  return mojo_chapter;
+}
+
 }  // anonymous namespace
 
 blink::mojom::blink::SpecMediaMetadataPtr
@@ -118,6 +152,25 @@
       break;
     }
   }
+  if (!RuntimeEnabledFeatures::MediaSessionChapterInformationEnabled()) {
+    return mojo_metadata;
+  }
+
+  for (const ChapterInformation* chapter : metadata->chapterInfo()) {
+    media_session::mojom::blink::ChapterInformationPtr mojo_chapter =
+        SanitizeChapterInformationAndConvertToMojo(chapter, context);
+    if (!mojo_chapter.is_null()) {
+      mojo_metadata->chapterInfo.push_back(std::move(mojo_chapter));
+    }
+    if (mojo_metadata->chapterInfo.size() == kMaxNumberOfChapters) {
+      context->AddConsoleMessage(MakeGarbageCollected<ConsoleMessage>(
+          mojom::ConsoleMessageSource::kJavaScript,
+          mojom::ConsoleMessageLevel::kWarning,
+          "The number of ChapterInformation sizes exceeds the upper limit. "
+          "All remaining ChapterInformation will be ignored"));
+      break;
+    }
+  }
   return mojo_metadata;
 }
 
diff --git a/third_party/blink/renderer/platform/fonts/mac/font_cache_mac.mm b/third_party/blink/renderer/platform/fonts/mac/font_cache_mac.mm
index b0f5440..028028c 100644
--- a/third_party/blink/renderer/platform/fonts/mac/font_cache_mac.mm
+++ b/third_party/blink/renderer/platform/fonts/mac/font_cache_mac.mm
@@ -263,6 +263,12 @@
         MatchSystemUIFont(font_description.Weight(), font_description.Style(),
                           font_description.Stretch(), size)
             .release());
+  } else if (RuntimeEnabledFeatures::FontMatchingCTMigrationEnabled()) {
+    matched_font = base::apple::CFToNSOwnershipCast(
+        MatchFontFamily(creation_params.Family(), font_description.Weight(),
+                        font_description.Style(), font_description.Stretch(),
+                        size)
+            .release());
   } else {
     matched_font = MatchNSFontFamily(creation_params.Family(), traits,
                                      font_description.Weight(), size);
diff --git a/third_party/blink/renderer/platform/fonts/mac/font_matcher_mac.h b/third_party/blink/renderer/platform/fonts/mac/font_matcher_mac.h
index 2345ef0..e8da68d 100644
--- a/third_party/blink/renderer/platform/fonts/mac/font_matcher_mac.h
+++ b/third_party/blink/renderer/platform/fonts/mac/font_matcher_mac.h
@@ -42,6 +42,14 @@
                                           float size);
 
 PLATFORM_EXPORT
+base::apple::ScopedCFTypeRef<CTFontRef> MatchFontFamily(
+    const AtomicString& desired_family,
+    FontSelectionValue desired_weight,
+    FontSelectionValue desired_slant,
+    FontSelectionValue desired_width,
+    float size);
+
+PLATFORM_EXPORT
 base::apple::ScopedCFTypeRef<CTFontRef> MatchUniqueFont(
     const AtomicString& unique_font_name,
     float size);
@@ -56,6 +64,10 @@
 // Converts a blink::FontSelectionValue to the nearest AppKit font weight if
 // possible, otherwise returns the default font weight.
 int ToAppKitFontWeight(FontSelectionValue);
+
+PLATFORM_EXPORT
+int ToCSSFontWeight(float ct_font_weight);
+
 }  // namespace blink
 
 #endif  // THIRD_PARTY_BLINK_RENDERER_PLATFORM_FONTS_MAC_FONT_MATCHER_MAC_H_
diff --git a/third_party/blink/renderer/platform/fonts/mac/font_matcher_mac.mm b/third_party/blink/renderer/platform/fonts/mac/font_matcher_mac.mm
index d605ead..c28c3ba 100644
--- a/third_party/blink/renderer/platform/fonts/mac/font_matcher_mac.mm
+++ b/third_party/blink/renderer/platform/fonts/mac/font_matcher_mac.mm
@@ -28,9 +28,9 @@
  */
 
 #import "third_party/blink/renderer/platform/fonts/mac/font_matcher_mac.h"
-#include "third_party/blink/renderer/platform/runtime_enabled_features.h"
 
 #import <AppKit/AppKit.h>
+#import <CoreText/CoreText.h>
 #import <Foundation/Foundation.h>
 #import <math.h>
 
@@ -39,11 +39,13 @@
 #include "base/apple/scoped_cftyperef.h"
 #include "third_party/blink/renderer/platform/fonts/font_cache.h"
 #include "third_party/blink/renderer/platform/fonts/font_selection_types.h"
+#include "third_party/blink/renderer/platform/runtime_enabled_features.h"
 #import "third_party/blink/renderer/platform/wtf/hash_set.h"
 #include "third_party/blink/renderer/platform/wtf/text/atomic_string.h"
 #import "third_party/blink/renderer/platform/wtf/text/atomic_string_hash.h"
 #import "third_party/blink/renderer/platform/wtf/text/string_impl.h"
 
+using base::apple::CFCast;
 using base::apple::GetValueFromDictionary;
 using base::apple::ScopedCFTypeRef;
 
@@ -109,6 +111,127 @@
   return candidate_weight_delta_magnitude < chosen_weight_delta_magnitude;
 }
 
+CTFontSymbolicTraits ComputeDesiredTraits(FontSelectionValue desired_weight,
+                                          FontSelectionValue desired_slant,
+                                          FontSelectionValue desired_width) {
+  CTFontSymbolicTraits traits = 0;
+  if (desired_weight > kNormalWeightValue) {
+    traits |= kCTFontTraitBold;
+  }
+  if (desired_slant != kNormalSlopeValue) {
+    traits |= kCTFontTraitItalic;
+  }
+  if (desired_width > kNormalWidthValue) {
+    traits |= kCTFontTraitExpanded;
+  }
+  if (desired_width < kNormalWidthValue) {
+    traits |= kCTFontTraitCondensed;
+  }
+  return traits;
+}
+
+bool BetterChoiceCT(CTFontSymbolicTraits desired_traits,
+                    int desired_weight,
+                    CTFontSymbolicTraits chosen_traits,
+                    int chosen_weight,
+                    CTFontSymbolicTraits candidate_traits,
+                    int candidate_weight) {
+  // A list of the traits we care about.
+  // The top item in the list is the worst trait to mismatch; if a font has this
+  // and we didn't ask for it, we'd prefer any other font in the family.
+  const CTFontSymbolicTraits kMasks[] = {
+      kCTFontTraitCondensed, kCTFontTraitExpanded, kCTFontTraitItalic};
+
+  for (CTFontSymbolicTraits mask : kMasks) {
+    bool desired = (desired_traits & mask) != 0;
+    bool chosen_has_unwanted_trait = desired != ((chosen_traits & mask) != 0);
+    bool candidate_has_unwanted_trait =
+        desired != ((candidate_traits & mask) != 0);
+    if (!candidate_has_unwanted_trait && chosen_has_unwanted_trait) {
+      return true;
+    }
+    if (!chosen_has_unwanted_trait && candidate_has_unwanted_trait) {
+      return false;
+    }
+  }
+
+  int chosen_weight_delta_magnitude = abs(chosen_weight - desired_weight);
+  int candidate_weight_delta_magnitude = abs(candidate_weight - desired_weight);
+
+  // If both are the same distance from the desired weight, prefer the candidate
+  // if it is further from medium, i.e. 500.
+  if (chosen_weight_delta_magnitude == candidate_weight_delta_magnitude) {
+    return abs(candidate_weight - 500) > abs(chosen_weight - 500);
+  }
+
+  // Otherwise, prefer the one closer to the desired weight.
+  return candidate_weight_delta_magnitude < chosen_weight_delta_magnitude;
+}
+
+ScopedCFTypeRef<CTFontRef> BestStyleMatchForFamily(
+    ScopedCFTypeRef<CFStringRef> family_name,
+    CTFontSymbolicTraits desired_traits,
+    int desired_weight,
+    float size) {
+  ScopedCFTypeRef<CFMutableDictionaryRef> attributes(CFDictionaryCreateMutable(
+      kCFAllocatorDefault, 1, &kCFTypeDictionaryKeyCallBacks,
+      &kCFTypeDictionaryValueCallBacks));
+  CFDictionarySetValue(attributes.get(), kCTFontFamilyNameAttribute,
+                       family_name.get());
+
+  ScopedCFTypeRef<CTFontDescriptorRef> family_descriptor(
+      CTFontDescriptorCreateWithAttributes(attributes.get()));
+  ScopedCFTypeRef<CFMutableArrayRef> descriptors(
+      CFArrayCreateMutable(kCFAllocatorDefault, 1, &kCFTypeArrayCallBacks));
+  CFArrayAppendValue(descriptors.get(), family_descriptor.get());
+
+  ScopedCFTypeRef<CTFontCollectionRef> collection_from_family(
+      CTFontCollectionCreateWithFontDescriptors(descriptors.get(), nullptr));
+
+  ScopedCFTypeRef<CFArrayRef> fonts_in_family(
+      CTFontCollectionCreateMatchingFontDescriptors(
+          collection_from_family.get()));
+
+  ScopedCFTypeRef<CTFontRef> matched_font_in_family;
+  CTFontSymbolicTraits chosen_traits;
+  int chosen_weight;
+
+  for (CFIndex i = 0; i < CFArrayGetCount(fonts_in_family.get()); ++i) {
+    CTFontDescriptorRef descriptor = CFCast<CTFontDescriptorRef>(
+        CFArrayGetValueAtIndex(fonts_in_family.get(), i));
+    if (!descriptor) {
+      continue;
+    }
+
+    ScopedCFTypeRef<CFDictionaryRef> traits_dict(CFCast<CFDictionaryRef>(
+        CTFontDescriptorCopyAttribute(descriptor, kCTFontTraitsAttribute)));
+
+    CFNumberRef candidate_symbolic_traits_num =
+        GetValueFromDictionary<CFNumberRef>(traits_dict.get(),
+                                            kCTFontSymbolicTrait);
+    int candidate_traits;
+    CFNumberGetValue(candidate_symbolic_traits_num, kCFNumberIntType,
+                     &candidate_traits);
+
+    CFNumberRef candidate_weight_num = GetValueFromDictionary<CFNumberRef>(
+        traits_dict.get(), kCTFontWeightTrait);
+    float candidate_ct_weight;
+    CFNumberGetValue(candidate_weight_num, kCFNumberFloatType,
+                     &candidate_ct_weight);
+    int candidate_weight = ToCSSFontWeight(candidate_ct_weight);
+
+    if (!matched_font_in_family ||
+        BetterChoiceCT(desired_traits, desired_weight, chosen_traits,
+                       chosen_weight, candidate_traits, candidate_weight)) {
+      matched_font_in_family.reset(
+          CTFontCreateWithFontDescriptor(descriptor, size, nullptr));
+      chosen_traits = candidate_traits;
+      chosen_weight = candidate_weight;
+    }
+  }
+  return matched_font_in_family;
+}
+
 }  // namespace
 
 ScopedCFTypeRef<CTFontRef> MatchUniqueFont(const AtomicString& unique_font_name,
@@ -147,8 +270,8 @@
     FontSelectionValue& width) {
   ScopedCFTypeRef<CFArrayRef> all_axes(CTFontCopyVariationAxes(ct_font.get()));
   for (CFIndex i = 0; i < CFArrayGetCount(all_axes.get()); ++i) {
-    CFDictionaryRef axis = base::apple::CFCast<CFDictionaryRef>(
-        CFArrayGetValueAtIndex(all_axes.get(), i));
+    CFDictionaryRef axis =
+        CFCast<CFDictionaryRef>(CFArrayGetValueAtIndex(all_axes.get(), i));
     if (!axis) {
       continue;
     }
@@ -245,6 +368,61 @@
       ct_font.get(), size, nullptr, var_font_desc.get()));
 }
 
+// For legacy reasons, we first attempt to find an
+// exact match comparing the `desired_family_string` to the PostScript name of
+// the installed fonts.  If that fails we then do a search based on the family
+// names of the installed fonts.
+ScopedCFTypeRef<CTFontRef> MatchFontFamily(
+    const AtomicString& desired_family_string,
+    FontSelectionValue desired_weight,
+    FontSelectionValue desired_slant,
+    FontSelectionValue desired_width,
+    float size) {
+  if (!desired_family_string) {
+    return ScopedCFTypeRef<CTFontRef>(nullptr);
+  }
+  ScopedCFTypeRef<CFStringRef> desired_name(
+      desired_family_string.Impl()->CreateCFString());
+
+  ScopedCFTypeRef<CTFontRef> matched_font(
+      CTFontCreateWithName(desired_name.get(), size, nullptr));
+  // CoreText should give us *something* but not always an exactly matched font.
+  DCHECK(matched_font);
+
+  // We perform matching by PostScript name for legacy and compatibility reasons
+  // (Safari also does it), although CSS specs do not require that, see
+  // crbug.com/641861.
+  ScopedCFTypeRef<CFStringRef> matched_postscript_name(
+      CTFontCopyPostScriptName(matched_font.get()));
+  ScopedCFTypeRef<CFStringRef> matched_family_name(
+      CTFontCopyFamilyName(matched_font.get()));
+
+  // If the found font does not match in PostScript name or font family name,
+  // it's not the exact match that is required, so return nullptr.
+  if (CFStringCompare(matched_postscript_name.get(), desired_name.get(),
+                      kCFCompareCaseInsensitive) != kCFCompareEqualTo &&
+      CFStringCompare(matched_family_name.get(), desired_name.get(),
+                      kCFCompareCaseInsensitive) != kCFCompareEqualTo) {
+    return ScopedCFTypeRef<CTFontRef>(nullptr);
+  }
+
+  CTFontSymbolicTraits desired_traits =
+      ComputeDesiredTraits(desired_weight, desired_slant, desired_width);
+
+  if (CFStringCompare(matched_postscript_name.get(), desired_name.get(),
+                      kCFCompareCaseInsensitive) == kCFCompareEqualTo) {
+    CTFontSymbolicTraits traits = CTFontGetSymbolicTraits(matched_font.get());
+    // Matched a font by PostScript name that has desired traits, so we
+    // can skip matching by family name.
+    if ((desired_traits & traits) == desired_traits) {
+      return matched_font;
+    }
+  }
+
+  return BestStyleMatchForFamily(matched_family_name, desired_traits,
+                                 desired_weight, size);
+}
+
 // Family name is somewhat of a misnomer here.  We first attempt to find an
 // exact match comparing the desiredFamily to the PostScript name of the
 // installed fonts.  If that fails we then do a search based on the family
@@ -425,4 +603,31 @@
   return app_kit_font_weights[select_weight];
 }
 
+// CoreText font weight ranges are taken from `GetFontWeightFromCTFont` in
+// `ui/gfx/platform_font_mac.mm`
+int ToCSSFontWeight(float ct_font_weight) {
+  constexpr struct {
+    float weight_lower;
+    float weight_upper;
+    int css_weight;
+  } weights[] = {
+      {-1.0, -0.70, 100},   // Thin (Hairline)
+      {-0.70, -0.45, 200},  // Extra Light (Ultra Light)
+      {-0.45, -0.10, 300},  // Light
+      {-0.10, 0.10, 400},   // Normal (Regular)
+      {0.10, 0.27, 500},    // Medium
+      {0.27, 0.35, 600},    // Semi Bold (Demi Bold)
+      {0.35, 0.50, 700},    // Bold
+      {0.50, 0.60, 800},    // Extra Bold (Ultra Bold)
+      {0.60, 1.0, 900},     // Black (Heavy)
+  };
+  for (const auto& item : weights) {
+    if (item.weight_lower <= ct_font_weight &&
+        ct_font_weight <= item.weight_upper) {
+      return item.css_weight;
+    }
+  }
+  return kNormalWeightValue;
+}
+
 }  // namespace blink
diff --git a/third_party/blink/renderer/platform/fonts/mac/font_matcher_mac_test.mm b/third_party/blink/renderer/platform/fonts/mac/font_matcher_mac_test.mm
index 5f4ddc1..d42909d 100644
--- a/third_party/blink/renderer/platform/fonts/mac/font_matcher_mac_test.mm
+++ b/third_party/blink/renderer/platform/fonts/mac/font_matcher_mac_test.mm
@@ -12,16 +12,17 @@
 #include "testing/gtest/include/gtest/gtest.h"
 #include "third_party/blink/renderer/platform/font_family_names.h"
 #include "third_party/blink/renderer/platform/fonts/font_selection_types.h"
+#include "third_party/blink/renderer/platform/runtime_enabled_features.h"
 #include "third_party/blink/renderer/platform/wtf/text/atomic_string.h"
 
 using base::apple::CFCast;
+using base::apple::GetValueFromDictionary;
 using base::apple::NSToCFPtrCast;
 using base::apple::ScopedCFTypeRef;
 
 namespace blink {
 
 namespace {
-
 struct FontName {
   const char* full_font_name;
   const char* postscript_name;
@@ -62,31 +63,57 @@
 const char* FamiliesWithBoldItalicFaces[] = {"Baskerville", "Cochin", "Georgia",
                                              "GillSans"};
 
+ScopedCFTypeRef<CTFontRef> MatchCTFontFamily(const AtomicString& font_name,
+                                             FontSelectionValue desired_weight,
+                                             FontSelectionValue desired_slant,
+                                             FontSelectionValue desired_width,
+                                             float size) {
+  if (RuntimeEnabledFeatures::FontMatchingCTMigrationEnabled()) {
+    return MatchFontFamily(font_name, desired_weight, desired_slant,
+                           desired_width, size);
+  }
+
+  NSFontTraitMask traits = 0;
+  if (desired_slant != kNormalSlopeValue) {
+    traits |= NSFontItalicTrait;
+  }
+  if (desired_width > kNormalWidthValue) {
+    traits |= NSFontExpandedTrait;
+  }
+  if (desired_width < kNormalWidthValue) {
+    traits |= NSFontCondensedTrait;
+  }
+
+  return ScopedCFTypeRef<CTFontRef>(NSToCFPtrCast(
+      MatchNSFontFamily(font_name, traits, desired_weight, size)));
+}
+
 void TestFontWithBoldAndItalicTraits(const AtomicString& font_name) {
-  NSFont* font_italic =
-      MatchNSFontFamily(font_name, NSFontItalicTrait, kNormalWeightValue, 11);
+  ScopedCFTypeRef<CTFontRef> font_italic = MatchCTFontFamily(
+      font_name, kNormalWeightValue, kItalicSlopeValue, kNormalWidthValue, 11);
   EXPECT_TRUE(font_italic);
 
   CTFontSymbolicTraits italic_font_traits =
-      CTFontGetSymbolicTraits(NSToCFPtrCast(font_italic));
-  EXPECT_TRUE(italic_font_traits & NSFontItalicTrait);
+      CTFontGetSymbolicTraits(font_italic.get());
+  EXPECT_TRUE(italic_font_traits & kCTFontTraitItalic);
 
-  NSFont* font_bold_italic =
-      MatchNSFontFamily(font_name, NSFontItalicTrait, kBoldWeightValue, 11);
+  ScopedCFTypeRef<CTFontRef> font_bold_italic = MatchCTFontFamily(
+      font_name, kBoldWeightValue, kItalicSlopeValue, kNormalWidthValue, 11);
   EXPECT_TRUE(font_bold_italic);
 
   CTFontSymbolicTraits bold_italic_font_traits =
-      CTFontGetSymbolicTraits(NSToCFPtrCast(font_bold_italic));
-  EXPECT_TRUE(bold_italic_font_traits & NSFontItalicTrait);
-  EXPECT_TRUE(bold_italic_font_traits & NSFontBoldTrait);
+      CTFontGetSymbolicTraits(font_bold_italic.get());
+  EXPECT_TRUE(bold_italic_font_traits & kCTFontTraitItalic);
+  EXPECT_TRUE(bold_italic_font_traits & kCTFontTraitBold);
 }
 
-void TestFontMatchingByNameByFamilyName(const char* font_name) {
-  NSFont* font =
-      MatchNSFontFamily(AtomicString(font_name), 0, kNormalWeightValue, 11);
+void TestFontMatchingByFamilyName(const char* font_name) {
+  ScopedCFTypeRef<CTFontRef> font =
+      MatchCTFontFamily(AtomicString(font_name), kNormalWeightValue,
+                        kNormalSlopeValue, kNormalWidthValue, 11);
   EXPECT_TRUE(font);
   ScopedCFTypeRef<CFStringRef> matched_family_name(
-      CTFontCopyFamilyName(base::apple::NSToCFPtrCast(font)));
+      CTFontCopyFamilyName(font.get()));
   ScopedCFTypeRef<CFStringRef> expected_family_name(
       CFStringCreateWithCString(nullptr, font_name, kCFStringEncodingUTF8));
   EXPECT_EQ(
@@ -95,12 +122,13 @@
       kCFCompareEqualTo);
 }
 
-void TestFontMatchingByNameByPostscriptName(const char* font_name) {
-  NSFont* font =
-      MatchNSFontFamily(AtomicString(font_name), 0, kNormalWeightValue, 11);
+void TestFontMatchingByPostscriptName(const char* font_name) {
+  ScopedCFTypeRef<CTFontRef> font =
+      MatchCTFontFamily(AtomicString(font_name), kNormalWeightValue,
+                        kNormalSlopeValue, kNormalWidthValue, 11);
   EXPECT_TRUE(font);
   ScopedCFTypeRef<CFStringRef> matched_postscript_name(
-      CTFontCopyPostScriptName(base::apple::NSToCFPtrCast(font)));
+      CTFontCopyPostScriptName(font.get()));
   ScopedCFTypeRef<CFStringRef> expected_postscript_name(
       CFStringCreateWithCString(nullptr, font_name, kCFStringEncodingUTF8));
   EXPECT_EQ(CFStringCompare(matched_postscript_name.get(),
@@ -189,10 +217,10 @@
 }
 
 TEST(FontMatcherMacTest, FontFamilyMatchingUnavailableFont) {
-  NSFont* font = MatchNSFontFamily(
+  ScopedCFTypeRef<CTFontRef> font = MatchCTFontFamily(
       AtomicString(
           "ThisFontNameDoesNotExist07F444B9-4DDF-4A41-8F30-C80D4ED4CCA2"),
-      0, kNormalWeightValue, 12);
+      kNormalWeightValue, kNormalSlopeValue, kNormalWidthValue, 12);
   EXPECT_FALSE(font);
 }
 
@@ -219,12 +247,12 @@
 // crbug.com/641861.
 TEST_P(TestFontMatchingByName, MatchingByFamilyName) {
   const FontName font_name = TestFontMatchingByName::GetParam();
-  TestFontMatchingByNameByFamilyName(font_name.family_name);
+  TestFontMatchingByFamilyName(font_name.family_name);
 }
 
 TEST_P(TestFontMatchingByName, MatchingByPostscriptName) {
   const FontName font_name = TestFontMatchingByName::GetParam();
-  TestFontMatchingByNameByPostscriptName(font_name.postscript_name);
+  TestFontMatchingByPostscriptName(font_name.postscript_name);
 }
 
 TEST_P(TestFontMatchingByName, MatchUniqueFontByFullFontName) {
@@ -253,4 +281,42 @@
   TestFontWithBoldAndItalicTraits(AtomicString(font_name));
 }
 
+TEST(FontMatcherMacTest, FontFamilyMatchingWithBoldCondensedTraits) {
+  AtomicString family_name = AtomicString("American Typewriter");
+  ScopedCFTypeRef<CTFontRef> font_condensed =
+      MatchCTFontFamily(family_name, kNormalWeightValue, kNormalSlopeValue,
+                        kCondensedWidthValue, 11);
+  EXPECT_TRUE(font_condensed);
+
+  CTFontSymbolicTraits condensed_font_traits =
+      CTFontGetSymbolicTraits(font_condensed.get());
+  EXPECT_TRUE(condensed_font_traits & NSFontCondensedTrait);
+
+  ScopedCFTypeRef<CTFontRef> font_bold_condensed =
+      MatchCTFontFamily(family_name, kBoldWeightValue, kNormalSlopeValue,
+                        kCondensedWidthValue, 11);
+  EXPECT_TRUE(font_bold_condensed.get());
+
+  CTFontSymbolicTraits bold_condensed_font_traits =
+      CTFontGetSymbolicTraits(font_bold_condensed.get());
+  EXPECT_TRUE(bold_condensed_font_traits & NSFontCondensedTrait);
+  EXPECT_TRUE(bold_condensed_font_traits & NSFontCondensedTrait);
+}
+
+TEST(FontMatcherMacTest, MatchFamilyWithWeightVariations) {
+  AtomicString family_name = AtomicString("Noto Sans Myanmar");
+  for (int weight = 100; weight < 900; weight += 100) {
+    ScopedCFTypeRef<CTFontRef> font =
+        MatchCTFontFamily(family_name, FontSelectionValue(weight),
+                          kNormalSlopeValue, kCondensedWidthValue, 11);
+    ScopedCFTypeRef<CFDictionaryRef> traits_dict(CTFontCopyTraits(font.get()));
+    CFNumberRef actual_weight_num = GetValueFromDictionary<CFNumberRef>(
+        traits_dict.get(), kCTFontWeightTrait);
+    float actual_ct_weight;
+    CFNumberGetValue(actual_weight_num, kCFNumberFloatType, &actual_ct_weight);
+    int actual_weight = ToCSSFontWeight(actual_ct_weight);
+    EXPECT_EQ(actual_weight, weight);
+  }
+}
+
 }  // namespace blink
diff --git a/third_party/blink/renderer/platform/fonts/simple_font_data.h b/third_party/blink/renderer/platform/fonts/simple_font_data.h
index d661e6cd..6b74a4e 100644
--- a/third_party/blink/renderer/platform/fonts/simple_font_data.h
+++ b/third_party/blink/renderer/platform/fonts/simple_font_data.h
@@ -25,6 +25,7 @@
 #define THIRD_PARTY_BLINK_RENDERER_PLATFORM_FONTS_SIMPLE_FONT_DATA_H_
 
 #include <memory>
+#include <mutex>
 #include <utility>
 
 #include "build/build_config.h"
diff --git a/third_party/blink/renderer/platform/graphics/gpu/webgpu_texture_alpha_clearer.cc b/third_party/blink/renderer/platform/graphics/gpu/webgpu_texture_alpha_clearer.cc
index ff4e3c3a..7b656d3 100644
--- a/third_party/blink/renderer/platform/graphics/gpu/webgpu_texture_alpha_clearer.cc
+++ b/third_party/blink/renderer/platform/graphics/gpu/webgpu_texture_alpha_clearer.cc
@@ -89,6 +89,9 @@
 
   WGPURenderPassColorAttachment color_attachment = {
       .view = attachment_view,
+      // The depthSlice must be initialized with the 'undefined' value for 2d
+      // color attachments.
+      .depthSlice = WGPU_DEPTH_SLICE_UNDEFINED,
       .loadOp = WGPULoadOp_Load,
       .storeOp = WGPUStoreOp_Store,
   };
diff --git a/third_party/blink/renderer/platform/media/watch_time_reporter_unittest.cc b/third_party/blink/renderer/platform/media/watch_time_reporter_unittest.cc
index 3a6ef69..8783f40 100644
--- a/third_party/blink/renderer/platform/media/watch_time_reporter_unittest.cc
+++ b/third_party/blink/renderer/platform/media/watch_time_reporter_unittest.cc
@@ -290,6 +290,7 @@
         media::container_names::MediaContainerName container_name) override {}
     void SetRendererType(media::RendererType renderer_type) override {}
     void SetKeySystem(const std::string& key_system) override {}
+    void SetHasWaitingForKey() override {}
     void SetIsHardwareSecure() override {}
     void SetHasPlayed() override {}
     void SetHaveEnough() override {}
diff --git a/third_party/blink/renderer/platform/media/web_media_player_impl.cc b/third_party/blink/renderer/platform/media/web_media_player_impl.cc
index d492f30..a54e2f2 100644
--- a/third_party/blink/renderer/platform/media/web_media_player_impl.cc
+++ b/third_party/blink/renderer/platform/media/web_media_player_impl.cc
@@ -2273,6 +2273,7 @@
     case media::WaitingReason::kNoCdm:
     case media::WaitingReason::kNoDecryptionKey:
       has_waiting_for_key_ = true;
+      media_metrics_provider_->SetHasWaitingForKey();
       encrypted_client_->DidBlockPlaybackWaitingForKey();
       // TODO(jrummell): didResumePlaybackBlockedForKey() should only be called
       // when a key has been successfully added (e.g. OnSessionKeysChange() with
diff --git a/third_party/blink/renderer/platform/runtime_enabled_features.json5 b/third_party/blink/renderer/platform/runtime_enabled_features.json5
index ee308fa..feba815e 100644
--- a/third_party/blink/renderer/platform/runtime_enabled_features.json5
+++ b/third_party/blink/renderer/platform/runtime_enabled_features.json5
@@ -1479,12 +1479,6 @@
       status: "experimental",
     },
     {
-      // If enabled, DOM Parts API tracks DOM mutations that cause part changes.
-      // If disabled, the parts list returned by getParts() can be stale.
-      name: "DOMPartsAPIActivePartTracking",
-      depends_on: ["DOMPartsAPI"],
-    },
-    {
       // Shipping in M121, so should be safe to remove in M126.
       name: "DontFireDblclickOnDisabledFormControls",
       status: "stable",
@@ -1850,6 +1844,10 @@
       name: "FontationsFontBackend",
     },
     {
+      name: "FontMatchingCTMigration",
+      status: "test",
+    },
+    {
       name: "FontPaletteAnimation",
       status: "stable",
     },
@@ -2010,7 +2008,7 @@
     },
     {
       name: "HighlightInheritance",
-      status: "stable",
+      status: "experimental",
     },
     {
       name: "HighlightPointerEvents",
@@ -2418,6 +2416,10 @@
       base_feature: "none",
     },
     {
+      name: "MediaSessionChapterInformation",
+      status: "test",
+    },
+    {
       name: "MediaSessionEnterPictureInPicture",
       public: true,
       status: "experimental",
diff --git a/third_party/blink/web_tests/ChromeTestExpectations b/third_party/blink/web_tests/ChromeTestExpectations
index a0dfb75..4593360 100644
--- a/third_party/blink/web_tests/ChromeTestExpectations
+++ b/third_party/blink/web_tests/ChromeTestExpectations
@@ -589,6 +589,7 @@
 crbug.com/1507050 external/wpt/html/semantics/scripting-1/the-script-element/moving-between-documents/after-prepare-iframe-success-inline-classic.html [ Failure Pass ]
 
 # ====== New tests from wpt-importer added here ======
+crbug.com/626703 external/wpt/html/dom/elements/global-attributes/dir-auto-form-associated.window.html [ Crash ]
 crbug.com/626703 external/wpt/svg/pservers/reftests/gradient-color-interpolation.svg [ Failure ]
 crbug.com/626703 external/wpt/webdriver/tests/bidi/network/continue_response/invalid.py [ Timeout ]
 crbug.com/626703 external/wpt/webdriver/tests/bidi/network/continue_with_auth/invalid.py [ Timeout ]
diff --git a/third_party/blink/web_tests/FlagExpectations/force-renderer-accessibility b/third_party/blink/web_tests/FlagExpectations/force-renderer-accessibility
index f66b9f5..64d56e0 100644
--- a/third_party/blink/web_tests/FlagExpectations/force-renderer-accessibility
+++ b/third_party/blink/web_tests/FlagExpectations/force-renderer-accessibility
@@ -54,7 +54,7 @@
 external/wpt/webrtc/RTCRtpTransceiver-setCodecPreferences.html [ Skip ]
 external/wpt/webrtc/protocol/rtp-demuxing.html [ Skip ]
 external/wpt/webrtc/protocol/video-codecs.https.html [ Skip ]
-fast/mediarecorder/MediaRecorder-ignores-oversize-frames-h264.html [ Skip ]
+fast/mediarecorder/MediaRecorder-error-on-oversize-frame-h264.html [ Skip ]
 crbug.com/1126305 external/wpt/speculation-rules/prerender/restriction-encrypted-media.https.html [ Skip ]
 crbug.com/1126305 external/wpt/speculation-rules/prerender/restriction-media-auto-play-attribute.html?target_hint=_self [ Skip ]
 crbug.com/1126305 external/wpt/speculation-rules/prerender/restriction-media-auto-play-attribute.html?target_hint=_blank [ Skip ]
diff --git a/third_party/blink/web_tests/TestExpectations b/third_party/blink/web_tests/TestExpectations
index 6b67a449..6478b7e 100644
--- a/third_party/blink/web_tests/TestExpectations
+++ b/third_party/blink/web_tests/TestExpectations
@@ -2606,10 +2606,10 @@
 crbug.com/626703 external/wpt/preload/preload-resource-match.https.html [ Failure ]
 crbug.com/1359555 external/wpt/speculation-rules/prerender/workers.html [ Failure Timeout ]
 
-# Note: This test only crashes on CQ builders, not `*-blink-rel` ones, because
-# it fails a DCHECK:
-#   https://source.chromium.org/chromium/chromium/src/+/main:third_party/blink/renderer/core/css/parser/font_variant_alternates_parser.cc;l=20;drc=1e2eec4304a055554e03f07e6c595feca3f9da54;bpv=0;bpt=0
+# These tests crash due to DCHECKs. Only CQ/debug CI builders enable DCHECKs;
+# `*-blink-rel` builders don't.
 crbug.com/626703 external/wpt/css/css-fonts/parsing/font-variant-invalid.html [ Crash ]
+crbug.com/626703 external/wpt/html/dom/elements/global-attributes/dir-auto-form-associated.window.html [ Crash ]
 
 # These tests generate baselines whose names are too long.
 crbug.com/626703 external/wpt/editing/other/insertparagraph-in-editing-host-cannot-have-div.tentative.html* [ Failure ]
@@ -6180,9 +6180,6 @@
 # Sheriff 2023-03-23
 crbug.com/952717 [ Win10.20h2 ] http/tests/xmlhttprequest/redirect-cross-origin-post.html [ Failure Pass ]
 
-# Re-enable test after adding support for component ads in frame contexts
-crbug.com/1427455 virtual/fenced-frame-mparch/external/wpt/fenced-frame/nested-opaque-ad-sizes.https.html [ Failure Pass Timeout ]
-
 # TODO(crbug.com/1428795): Re-enable this test
 crbug.com/1428795 [ Linux ] external/wpt/dom/events/Event-dispatch-on-disabled-elements.html [ Failure Pass ]
 
@@ -6840,3 +6837,7 @@
 
 # Gardener 2023-12-20
 [ Mac ] accessibility/selection-change-notification-on-selection-removed.html [ Failure Pass ]
+
+# Gardener 2023-12-21
+crbug.com/1508113 virtual/automatic-lazy-frame-loading/wpt_internal/lazyembed/automatic-lazy-frame-loading.sub.html [ Timeout ]
+crbug.com/1470053 external/wpt/html/browsers/browsing-the-web/overlapping-navigations-and-traversals/cross-document-traversal-cross-document-traversal.html [ Failure Pass ]
diff --git a/third_party/blink/web_tests/VirtualTestSuites b/third_party/blink/web_tests/VirtualTestSuites
index 3cc8384..efe4ccd 100644
--- a/third_party/blink/web_tests/VirtualTestSuites
+++ b/third_party/blink/web_tests/VirtualTestSuites
@@ -1066,7 +1066,7 @@
     ],
     "args": ["--disable-features=DOMPartsAPI",
              "--disable-threaded-compositing", "--disable-threaded-animation"],
-    "expires": "Feb 1, 2024"
+    "expires": "Jul 1, 2024"
   },
   {
     "prefix": "details-styling-disabled",
@@ -1176,14 +1176,6 @@
     "expires": "Jan 15, 2024"
   },
   {
-    "prefix": "restrict-gamepad",
-    "platforms": ["Linux", "Mac", "Win"],
-    "bases": [ "external/wpt/gamepad" ],
-    "args": ["--enable-features=RestrictGamepadAccess",
-             "--disable-threaded-compositing", "--disable-threaded-animation"],
-    "expires": "Jul 1, 2023"
-  },
-  {
     "prefix": "third-party-cookie-phaseout-enabled",
     "platforms": ["Linux", "Mac", "Win"],
     "bases": [
diff --git a/third_party/blink/web_tests/bindings/sequence-type.html b/third_party/blink/web_tests/bindings/sequence-type.html
index 5aac48b..3df2e61 100644
--- a/third_party/blink/web_tests/bindings/sequence-type.html
+++ b/third_party/blink/web_tests/bindings/sequence-type.html
@@ -259,4 +259,38 @@
      "Array iteration should respect new length");
  }, "Array to sequence<> conversions with length decrease during iteration");
 
+ test(() => {
+   const sequenceTest = internals.sequenceTest();
+
+   const elems = [
+     document.createElement('div'),
+     document.createElement('div'),
+     document.createElement('div'),
+     document.createElement('div'),
+   ];
+   sequenceTest.setElementSequence(elems);
+   assert_array_equals(sequenceTest.getElementSequence(), elems,
+                      "Sequence items are properly converted");
+ }, "Array to sequence<> conversions with homogenous ScriptWrappable types");
+
+ test(() => {
+   const sequenceTest = internals.sequenceTest();
+
+   const elem1 = document.createElement('br');
+   elem1["my_property"] = "foo";
+   const elems = [
+     document.createElement('div'),
+     elem1,
+     document.createElement('div'),
+     document.createElement('span'),
+   ];
+   sequenceTest.setElementSequence(elems);
+   assert_array_equals(sequenceTest.getElementSequence(), elems,
+                      "Different types dervied from Element are properly converted");
+   const node = document.createTextNode("node");
+   assert_throws_js(TypeError, () => { sequenceTest.setElementSequence([...elems, node]) },
+                    "Invalid types cause exceptions");
+   assert_throws_js(TypeError, () => { sequenceTest.setElementSequence([...elems, 1]) },
+                    "Invalid types cause exceptions");
+ }, "Array to sequence<> conversions with heterogeneous ScriptWrappable types");
 </script>
diff --git a/third_party/blink/web_tests/external/WPT_BASE_MANIFEST_8.json b/third_party/blink/web_tests/external/WPT_BASE_MANIFEST_8.json
index 671c7c32..bffa595 100644
--- a/third_party/blink/web_tests/external/WPT_BASE_MANIFEST_8.json
+++ b/third_party/blink/web_tests/external/WPT_BASE_MANIFEST_8.json
@@ -77,6 +77,13 @@
        {}
       ]
      ],
+     "aria-owns-from-aria-hidden-subtree.html": [
+      "3e148ae981f1f2bf3fe7f3f4fe824802edc94f58",
+      [
+       null,
+       {}
+      ]
+     ],
      "aria-owns-reparent.html": [
       "2eaceb66f6957b0240a4f02b0c23b74e8ca4921a",
       [
@@ -301,6 +308,13 @@
        {}
       ]
      ],
+     "select-in-display-none.html": [
+      "dc113c76e854cf2d2a72029afe8828dab92d6b44",
+      [
+       null,
+       {}
+      ]
+     ],
      "serialize-with-no-document.html": [
       "f7719cf2ff1838b1125e08c5f86cf57910732c0e",
       [
@@ -478,6 +492,20 @@
        null,
        {}
       ]
+     ],
+     "chrome-1512373-2-crash.html": [
+      "ac27d8c2647c138fff1d4a93862aeb3291864596",
+      [
+       null,
+       {}
+      ]
+     ],
+     "chrome-1512373-crash.html": [
+      "d3ae0b5bb69a63f84f767f95bb877f2a53487d3e",
+      [
+       null,
+       {}
+      ]
      ]
     },
     "css-animations": {
@@ -825,6 +853,13 @@
         null,
         {}
        ]
+      ],
+      "textarea-input-flex-items-in-multicol-crash.html": [
+       "49ae5199e356ef8a3157278c79a68ecfc7b74d5b",
+       [
+        null,
+        {}
+       ]
       ]
      },
      "float-011-crash.html": [
@@ -2625,6 +2660,13 @@
         {}
        ]
       ],
+      "inline-become-oof-container-make-oof-inflow.html": [
+       "5a099eeaaf9ffb398b5e576836d4adbb8330c9d2",
+       [
+        null,
+        {}
+       ]
+      ],
       "inline-float-parallel-flow.html": [
        "06e80f1cd847dac2beb8fa6133723cdc906b362a",
        [
@@ -3024,6 +3066,13 @@
         {}
        ]
       ],
+      "relayout-fixedpos-in-abspos-in-relpos-in-nested-multicol.html": [
+       "6b9427d70429810166522070543986942b69a885",
+       [
+        null,
+        {}
+       ]
+      ],
       "relayout-nested-with-oof.html": [
        "bdc7147337fed88b29bfb9af36b645756695d6f6",
        [
@@ -79470,6 +79519,19 @@
        {}
       ]
      ],
+     "background-attachment-fixed-block-002.html": [
+      "8b5c5e80427866c7a1ce8f73e118fb2f897b583c",
+      [
+       null,
+       [
+        [
+         "/css/css-backgrounds/reference/background-attachment-fixed-block-002-ref.html",
+         "=="
+        ]
+       ],
+       {}
+      ]
+     ],
      "background-attachment-fixed-border-radius-offset.html": [
       "5d92bcb56a777e6f22f6a21179029bc2fc2d0f4b",
       [
@@ -79483,6 +79545,19 @@
        {}
       ]
      ],
+     "background-attachment-fixed-inline-002.html": [
+      "b624a68060127cf065f36858a06cd5f07bedeb87",
+      [
+       null,
+       [
+        [
+         "/css/css-backgrounds/reference/background-attachment-fixed-inline-002-ref.html",
+         "=="
+        ]
+       ],
+       {}
+      ]
+     ],
      "background-attachment-fixed-inline-scrolled.html": [
       "746997d6057ba1d2c109dafdfe7730ef149cd21e",
       [
@@ -79764,6 +79839,19 @@
        ]
       ]
      },
+     "background-attachment-local-block-002.html": [
+      "ce19e360428eb334be58ba275db7c3ba4a590d9e",
+      [
+       null,
+       [
+        [
+         "/css/css-backgrounds/reference/background-attachment-local-block-002-ref.html",
+         "=="
+        ]
+       ],
+       {}
+      ]
+     ],
      "background-attachment-local-hidden.html": [
       "cbe3440e3894e79223d4f647397a32da60411420",
       [
@@ -79793,6 +79881,19 @@
        }
       ]
      ],
+     "background-attachment-local-inline-002.html": [
+      "8b877f9a14cceadcccbea9299d95914545c234e1",
+      [
+       null,
+       [
+        [
+         "/css/css-backgrounds/reference/background-attachment-local-inline-002-ref.html",
+         "=="
+        ]
+       ],
+       {}
+      ]
+     ],
      "background-attachment-margin-root-001.html": [
       "88bc2845e8b6a6e24ca33547e704deab28e046bb",
       [
@@ -140250,6 +140351,19 @@
          {}
         ]
        ],
+       "masonry-not-inhibited-001.html": [
+        "54499d3d693a3059204a0a1015638f303ef3caa4",
+        [
+         null,
+         [
+          [
+           "/css/css-grid/masonry/tentative/masonry-not-inhibited-001-ref.html",
+           "=="
+          ]
+         ],
+         {}
+        ]
+       ],
        "order": {
         "masonry-order-001.html": [
          "d01f52ea0421199c37d04408b42d0f6929876301",
@@ -247236,7 +247350,7 @@
        ]
       ],
       "checkbox-appearance-native-vertical-lr-baseline.optional.html": [
-       "b19de139f15ca338d82a914342883b2e2a9bb257",
+       "377a8e8785430c76e2d64e1e73002d92b0dd6cd2",
        [
         null,
         [
@@ -247249,7 +247363,7 @@
        ]
       ],
       "checkbox-appearance-native-vertical-rl-baseline.optional.html": [
-       "3efb21136cd172bfd4960407c55cde4c2f87fa15",
+       "630a83c7ee88d60b69459285871c13514fbdb196",
        [
         null,
         [
@@ -247556,7 +247670,7 @@
        ]
       ],
       "radio-appearance-native-vertical-lr-baseline.optional.html": [
-       "8d5bf75fe8f354577b3d09e10704538fe41ec9e4",
+       "c7810034fe2870ef8db16904a2903848a8417f3c",
        [
         null,
         [
@@ -247569,7 +247683,7 @@
        ]
       ],
       "radio-appearance-native-vertical-rl-baseline.optional.html": [
-       "4c5a59a031a1acd5ab02a235ff739f43a72c88aa",
+       "6f7eed705e3605cf788fc603db028ac3bc327201",
        [
         null,
         [
@@ -272861,7 +272975,7 @@
        ]
       ],
       "details-pseudo-elements-001.tentative.html": [
-       "08321977c6b4abe71b88d6fa448b088688dccb45",
+       "1a9f7d6a023832c1b106d67579bfbbec34a5c4f2",
        [
         null,
         [
@@ -292379,10 +292493,20 @@
      "4713ae1797bfaef547c668c5ea0a9539389004e2",
      []
     ],
+    "WEB_FEATURES.yml": [
+     "3e5025581fb39627627493838e2a911143651f31",
+     []
+    ],
     "clipboard-item.https-expected.txt": [
      "6e41632081d6010e33af6b0c19f8649f7f615d96",
      []
     ],
+    "detached-iframe": {
+     "WEB_FEATURES.yml": [
+      "92abfee3580dcdc7b8c6eb717bcc3d7bfcebab1d",
+      []
+     ]
+    },
     "feature-policy": {
      "clipboard-read": {
       "clipboard-read-disabled-by-feature-policy.tentative.https.sub.html.headers": [
@@ -292425,6 +292549,12 @@
      "20a16fada97db02fe16d313033cd2b8490bb296a",
      []
     ],
+    "permissions": {
+     "WEB_FEATURES.yml": [
+      "92abfee3580dcdc7b8c6eb717bcc3d7bfcebab1d",
+      []
+     ]
+    },
     "resources": {
      "copied-file.txt": [
       "56a2838b7d6953afc894aa19be833fd041554b37",
@@ -292442,6 +292572,12 @@
       "ed294bb9cb27b552f23061118fcd260dc6b86a8f",
       []
      ]
+    },
+    "text-write-read": {
+     "WEB_FEATURES.yml": [
+      "92abfee3580dcdc7b8c6eb717bcc3d7bfcebab1d",
+      []
+     ]
     }
    },
    "close-watcher": {
@@ -295849,6 +295985,10 @@
        "cf62ceda22515dd036cdea9fec4de7305b4a51b4",
        []
       ],
+      "disconnect_failure.py": [
+       "f880218b2f6156817aeb7ac16c0e1e42f3ed5103",
+       []
+      ],
       "error_with_code_and_url.py": [
        "71bfea00f463051e7bd496cf1c28f25208e2b41e",
        []
@@ -295897,6 +296037,14 @@
        "591c927153b9a78695ded0663fed600cbae5bcb6",
        []
       ],
+      "manifest_with_cross_origin_disconnect.sub.json": [
+       "a1ad5c71ac3d2395c97d4aa387a6ec1de2b84b3e",
+       []
+      ],
+      "manifest_with_disconnect_failure.json": [
+       "96035e7e8b34d982c86e6555b384126e043e03fa",
+       []
+      ],
       "manifest_with_no_accounts.json": [
        "0d38f26d350c5064c3cd174d4af2c822c9d2ff97",
        []
@@ -295967,7 +296115,7 @@
       ]
      },
      "fedcm-helper.sub.js": [
-      "95a0de47227289b159e672a0e13dd7dfd21cf318",
+      "38cc26604ba328bab8562c7975f96ec1d5809ab0",
       []
      ],
      "fedcm-iframe-level2.html": [
@@ -304969,10 +305117,26 @@
        "2b568109db28719bc2973d350874f0685a630185",
        []
       ],
+      "background-attachment-fixed-block-002-ref.html": [
+       "4360def17f597aa12d2173692373b8150dc013fa",
+       []
+      ],
+      "background-attachment-fixed-inline-002-ref.html": [
+       "cfa97edd21ebb3c72eb99752552f0e4c5976b328",
+       []
+      ],
+      "background-attachment-local-block-002-ref.html": [
+       "501d70ea9f1cdfa2c9ae4f8bdc70da6c047da4e6",
+       []
+      ],
       "background-attachment-local-hidden-ref.html": [
        "fc593c23cd048af09b6ddc053524ca4ef8281e3d",
        []
       ],
+      "background-attachment-local-inline-002-ref.html": [
+       "3893b167f1a49d82bd602f5583a8d3d689404a1a",
+       []
+      ],
       "background-clip-002-ref.html": [
        "a03d6e202091f4ea0d1a62948b60e4e12ef2ccef",
        []
@@ -321088,6 +321252,10 @@
          []
         ]
        },
+       "masonry-not-inhibited-001-ref.html": [
+        "3e86b8a89b6d050e7bc4c4b5f38509c7aa7aabff",
+        []
+       ],
        "order": {
         "masonry-order-001-ref.html": [
          "6f20bd05838efed10a0915b30941ff7bcbb73b6a",
@@ -332837,6 +333005,10 @@
        "cad3e0ab4a02777b8aaad13a76b5db9832bdf55e",
        []
       ],
+      "white-space-invalid-expected.txt": [
+       "f9083f75e9fe878da4d41053ace9f252cb69373a",
+       []
+      ],
       "white-space-shorthand-expected.txt": [
        "d53b5c96447891937c9a686afa3fab97adb3573f",
        []
@@ -340978,11 +341150,11 @@
      ],
      "forms": {
       "checkbox-appearance-native-vertical-lr-baseline.optional-ref.html": [
-       "c3f6107546a9186a12016fc42db376cc88bf4102",
+       "a43403ccf17d6539253aa76877843a53b47f0234",
        []
       ],
       "checkbox-appearance-native-vertical-rl-baseline.optional-ref.html": [
-       "a253a71dd4949090bf1a57fd820178f6ea0099e1",
+       "7fe6db34073b8d3ffe668b5b1012874f1c0a33f4",
        []
       ],
       "checkbox-switch-input-computed-style.tentative-expected.txt": [
@@ -341014,11 +341186,11 @@
        []
       ],
       "radio-appearance-native-vertical-lr-baseline.optional-ref.html": [
-       "9b09537c937742fb9a69bdde6555f4610b09339d",
+       "6fca0762f41d3b0dd7b15b18ef9c5fe318e31ed7",
        []
       ],
       "radio-appearance-native-vertical-rl-baseline.optional-ref.html": [
-       "95871a518f1d2723a1c8f3bfc66b40462b2e3579",
+       "9e5dda820c7d8f3139d70b784f44cf280270a1a4",
        []
       ],
       "range-input-painting-ref.html": [
@@ -366696,7 +366868,7 @@
        []
       ],
       "details-pseudo-elements-001-ref.html": [
-       "43f2216bec7894f5ffd060bd52375697dbb3faec",
+       "e00e6c52ff5e1b73f7f1ef5fe65bc244b266e523",
        []
       ],
       "details-pseudo-elements-002-ref.html": [
@@ -368829,10 +369001,6 @@
        "select-willvalidate-readonly-attribute-expected.txt": [
         "33210c7ac09736ca139ba7c0f8924bcb6d8c152a",
         []
-       ],
-       "show-picker-being-rendered-expected.txt": [
-        "b3b679ac010e3faec753aa2de379ccec67198060",
-        []
        ]
       },
       "the-selectlist-element": {
@@ -372976,26 +373144,6 @@
       "35449ec5bab7c3e8ac3c61fa50a8207e667eabe2",
       []
      ],
-     "activation-trigger-keyboard-enter-expected.txt": [
-      "07edbf06dc1093051753fc4aa343be936afa463e",
-      []
-     ],
-     "activation-trigger-keyboard-escape-expected.txt": [
-      "57e8ff4711e5b7755672b875ce4c51cb8e8f705d",
-      []
-     ],
-     "activation-trigger-mouse-left-expected.txt": [
-      "18ce0222ceedcdecd35493453f2c6aab8354e640",
-      []
-     ],
-     "activation-trigger-mouse-right-expected.txt": [
-      "404856b7dbeb66a4be578ed7dde49d88e0c571b6",
-      []
-     ],
-     "activation-trigger-pointerevent_mouse-expected.txt": [
-      "1f796f76ec179759cb192d4d9404fe1958d3fbe2",
-      []
-     ],
      "propagation-sameorigin-expected.txt": [
       "6e8e5d65d08e3d1f78029107de443f94a1f1befb",
       []
@@ -373030,7 +373178,7 @@
        []
       ],
       "utils.js": [
-       "8cca6654e7f3968ca540e04ccbe11faa60baa5cf",
+       "5d3302583fbd968f990c7fd58a84bdc11f31993c",
        []
       ]
      }
@@ -380841,8 +380989,8 @@
       []
      ]
     },
-    "pointerevent_lostpointercapture_for_disconnected_node-expected.txt": [
-     "6b831a47c60ed736b637b2128d6f48c8c51d336f",
+    "pointerevent_lostpointercapture_remove_setcapture_node-expected.txt": [
+     "2d3c1af839d52c9176d85201b92de9c970fffe15",
      []
     ],
     "pointerevent_pointerout_no_pointer_movement-expected.txt": [
@@ -395634,11 +395782,11 @@
      []
     ],
     "idlharness.https.any-expected.txt": [
-     "5ab8e2bf259b10a3c49a6db45754f83d1e3140e8",
+     "f335321c701a7fdfe3c57de5a05025d51483b321",
      []
     ],
     "idlharness.https.any.worker-expected.txt": [
-     "14c36a8bf259be22fe47209a544059e195144237",
+     "bfc4b9ac5a56439425525b43fd3c2c4c11c46e52",
      []
     ],
     "leaky_relu.https.any.worker-expected.txt": [
@@ -395982,11 +396130,11 @@
      []
     ],
     "softplus.https.any-expected.txt": [
-     "dbaeeefdac4ffe182e4dce8819e8bce76468b61d",
+     "9d4bc98316f206a9efed987f863504d248b90cfc",
      []
     ],
     "softplus.https.any.worker-expected.txt": [
-     "add17319159a4f34907d1e4cecb030c1f3713c41",
+     "e4772a49406eabe9c8420f7aad88b4ecf9d741ff",
      []
     ],
     "softsign.https.any-expected.txt": [
@@ -435977,7 +436125,7 @@
      ]
     ],
     "fedcm-disconnect-errors.https.html": [
-     "41102cdabe187c7021011bf884fddc1dd17c8f6e",
+     "dbf42c4083bbb2601de44eca4877eea7ed0b9df1",
      [
       null,
       {
@@ -436022,7 +436170,7 @@
      ]
     ],
     "fedcm-error-basic.https.html": [
-     "18ab82d0bd7f976477a9db21ac1a2e8d667ee483",
+     "49d6ea50df3881eec5032381c400c0f1ffa413dd",
      [
       null,
       {
@@ -462797,7 +462945,7 @@
        ]
       ],
       "white-space-invalid.html": [
-       "12c34fb5378308c564b3d01b493cbad5ff75138c",
+       "599bd699c5a73d6da92f05dbb904826a59e83a5e",
        [
         null,
         {}
@@ -473106,7 +473254,7 @@
       ]
      ],
      "dir-pseudo-on-input-element.html": [
-      "f4a0de193a06dd4bc309d83b09ce2ac3c00961fd",
+      "25f7a080d7e2e639485a58185a7a715303a3b745",
       [
        null,
        {}
@@ -557070,7 +557218,7 @@
         ]
        ],
        "dir-auto-form-associated.window.js": [
-        "1777f75259bbc1e1bc440c075c06fef00395f797",
+        "3af7eb3c2ef8a2aabdd0f3e503abf52263a3e3d3",
         [
          "html/dom/elements/global-attributes/dir-auto-form-associated.window.html",
          {}
@@ -568767,6 +568915,15 @@
          {}
         ]
        ],
+       "show-picker-being-cv-hidden.html": [
+        "8990734f9366b9ebb6379adfa3b7a758c820523f",
+        [
+         null,
+         {
+          "testdriver": true
+         }
+        ]
+       ],
        "show-picker-being-rendered.html": [
         "e7be4aea526f2b13fcc80dec9bd4c62d8d8b6611",
         [
@@ -599670,6 +599827,15 @@
       }
      ]
     ],
+    "pointerevent_lostpointercapture_remove_setcapture_node.html": [
+     "4b372d04bdfa447ffd3d639efced347b93aacbde",
+     [
+      null,
+      {
+       "testdriver": true
+      }
+     ]
+    ],
     "pointerevent_mouse_capture_change_hover.html": [
      "ef824dafd963bc97f59283d833d0e0cb4fe97fc8",
      [
@@ -702413,7 +702579,7 @@
        },
        "continue_with_auth": {
         "action.py": [
-         "1c256aaeaa184914dc512c8f867f05d7de525e14",
+         "a122ce0e4926346950083d57161a277fd567c17a",
          [
           null,
           {}
@@ -703242,7 +703408,7 @@
         ]
        ],
        "send_keys.py": [
-        "92002f294576b9108d29d5bbf39a13a248094e8d",
+        "7b25d65a1b11eaf61485125eb6c3c0d06120e180",
         [
          null,
          {}
diff --git a/third_party/blink/web_tests/external/wpt/clipboard-apis/WEB_FEATURES.yml b/third_party/blink/web_tests/external/wpt/clipboard-apis/WEB_FEATURES.yml
new file mode 100644
index 0000000..3e502558
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/clipboard-apis/WEB_FEATURES.yml
@@ -0,0 +1,5 @@
+features:
+- name: async-clipboard
+  files:
+  - async-*
+  - clipboard-item.https.html
diff --git a/third_party/blink/web_tests/external/wpt/clipboard-apis/detached-iframe/WEB_FEATURES.yml b/third_party/blink/web_tests/external/wpt/clipboard-apis/detached-iframe/WEB_FEATURES.yml
new file mode 100644
index 0000000..92abfee3
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/clipboard-apis/detached-iframe/WEB_FEATURES.yml
@@ -0,0 +1,3 @@
+features:
+- name: async-clipboard
+  files: "**"
diff --git a/third_party/blink/web_tests/external/wpt/clipboard-apis/permissions/WEB_FEATURES.yml b/third_party/blink/web_tests/external/wpt/clipboard-apis/permissions/WEB_FEATURES.yml
new file mode 100644
index 0000000..92abfee3
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/clipboard-apis/permissions/WEB_FEATURES.yml
@@ -0,0 +1,3 @@
+features:
+- name: async-clipboard
+  files: "**"
diff --git a/third_party/blink/web_tests/external/wpt/clipboard-apis/text-write-read/WEB_FEATURES.yml b/third_party/blink/web_tests/external/wpt/clipboard-apis/text-write-read/WEB_FEATURES.yml
new file mode 100644
index 0000000..92abfee3
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/clipboard-apis/text-write-read/WEB_FEATURES.yml
@@ -0,0 +1,3 @@
+features:
+- name: async-clipboard
+  files: "**"
diff --git a/third_party/blink/web_tests/external/wpt/css/css-backgrounds/background-attachment-fixed-block-002.html b/third_party/blink/web_tests/external/wpt/css/css-backgrounds/background-attachment-fixed-block-002.html
new file mode 100644
index 0000000..8b5c5e80
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-backgrounds/background-attachment-fixed-block-002.html
@@ -0,0 +1,52 @@
+<!DOCTYPE html>
+
+ <html class="reftest-wait">
+
+  <meta charset="UTF-8">
+
+  <title>CSS Backgrounds and Borders Test: 'background-attachment: fixed' applied on a block element</title>
+
+  <!--
+
+  Created: November 25th 2023
+
+  Last modified: December 17th 2023
+
+  -->
+
+  <link rel="author" title="Gérard Talbot" href="http://www.gtalbot.org/BrowserBugsSection/css21testsuite/">
+  <link rel="help" href="https://www.w3.org/TR/css-backgrounds-3/#background-attachment">
+  <link rel="help" href="https://www.w3.org/TR/cssom-view-1/#dom-window-scroll">
+  <link rel="match" href="reference/background-attachment-fixed-block-002-ref.html">
+  <link rel="stylesheet" type="text/css" href="/fonts/ahem.css">
+
+  <meta name="assert" content="This test checks the interaction between a block element with a 'background-attachment: fixed' background-image and the expected behavior of the scroll() method which applies to the viewport window.">
+
+  <style>
+  body
+    {
+      color: transparent;
+      font-family: Ahem;
+      font-size: 50vh;
+      height: 50vh;
+      line-height: 2;
+      margin: 0px;
+    }
+
+  div#test-passed
+    {
+      background-attachment: fixed;
+      background-image: linear-gradient(to bottom, blue 25%, orange 25% 50%, lime 50% 75%, purple 75% 100%);
+    }
+  </style>
+
+  <body onload="window.scroll(0, document.body.offsetHeight); document.documentElement.classList.remove('reftest-wait');">
+
+  <div>F</div>
+
+  <!--
+  Having more than 1 character may trigger
+  unneedlessly an horizontal scrollbar
+  -->
+
+  <div id="test-passed">P</div>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-backgrounds/background-attachment-fixed-inline-002.html b/third_party/blink/web_tests/external/wpt/css/css-backgrounds/background-attachment-fixed-inline-002.html
new file mode 100644
index 0000000..b624a68
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-backgrounds/background-attachment-fixed-inline-002.html
@@ -0,0 +1,48 @@
+<!DOCTYPE html>
+
+ <html class="reftest-wait">
+
+  <meta charset="UTF-8">
+
+  <title>CSS Backgrounds and Borders Test: 'background-attachment: fixed' applied on an inline element</title>
+
+  <!--
+
+  Created: November 25th 2023
+
+  Last modified: December 17th 2023
+
+  -->
+
+  <link rel="author" title="Gérard Talbot" href="http://www.gtalbot.org/BrowserBugsSection/css21testsuite/">
+  <link rel="help" href="https://www.w3.org/TR/css-backgrounds-3/#background-attachment">
+  <link rel="help" href="https://www.w3.org/TR/cssom-view-1/#dom-window-scroll">
+  <link rel="match" href="reference/background-attachment-fixed-inline-002-ref.html">
+  <link rel="stylesheet" type="text/css" href="/fonts/ahem.css">
+
+  <meta name="assert" content="This test checks the interaction between an inline with a 'background-attachment: fixed' background-image and the expected behavior of the scroll() method which applies to the viewport window.">
+
+  <style>
+  body
+    {
+      color: transparent;
+      font-family: Ahem;
+      font-size: 50vh;
+      height: 50vh;
+      line-height: 2;
+      margin: 0px;
+    }
+
+  span#test-passed
+    {
+      background-attachment: fixed;
+      background-image: linear-gradient(to bottom, blue 25%, orange 25% 50%, lime 50% 75%, purple 75% 100%);
+      vertical-align: top;
+    }
+  </style>
+
+  <body onload="window.scroll(0, document.body.offsetHeight); document.documentElement.classList.remove('reftest-wait');">
+
+  <div>F</div>
+
+  <div><span id="test-passed">P</span></div>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-backgrounds/background-attachment-local-block-002.html b/third_party/blink/web_tests/external/wpt/css/css-backgrounds/background-attachment-local-block-002.html
new file mode 100644
index 0000000..ce19e360
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-backgrounds/background-attachment-local-block-002.html
@@ -0,0 +1,52 @@
+<!DOCTYPE html>
+
+ <html class="reftest-wait">
+
+  <meta charset="UTF-8">
+
+  <title>CSS Backgrounds and Borders Test: 'background-attachment: local' applied on a block element</title>
+
+  <!--
+
+  Created: November 25th 2023
+
+  Last modified: December 17th 2023
+
+  -->
+
+  <link rel="author" title="Gérard Talbot" href="http://www.gtalbot.org/BrowserBugsSection/css21testsuite/">
+  <link rel="help" href="https://www.w3.org/TR/css-backgrounds-3/#background-attachment">
+  <link rel="help" href="https://www.w3.org/TR/cssom-view-1/#dom-window-scroll">
+  <link rel="match" href="reference/background-attachment-local-block-002-ref.html">
+  <link rel="stylesheet" type="text/css" href="/fonts/ahem.css">
+
+  <meta name="assert" content="This test checks the interaction between a block element with a 'background-attachment: local' background-image and the expected behavior of the scroll() method which applies to the viewport window.">
+
+  <style>
+  body
+    {
+      color: transparent;
+      font-family: Ahem;
+      font-size: 50vh;
+      height: 50vh;
+      line-height: 2;
+      margin: 0px;
+    }
+
+  div#test-passed
+    {
+      background-attachment: local;
+      background-image: linear-gradient(to bottom, blue 25%, orange 25% 50%, lime 50% 75%, purple 75% 100%);
+    }
+  </style>
+
+  <body onload="window.scroll(0, document.body.offsetHeight); document.documentElement.classList.remove('reftest-wait');">
+
+  <div>F</div>
+
+  <!--
+  Having more than 1 character may trigger
+  unneedlessly an horizontal scrollbar
+  -->
+
+  <div id="test-passed">P</div>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-backgrounds/background-attachment-local-inline-002.html b/third_party/blink/web_tests/external/wpt/css/css-backgrounds/background-attachment-local-inline-002.html
new file mode 100644
index 0000000..8b877f9
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-backgrounds/background-attachment-local-inline-002.html
@@ -0,0 +1,48 @@
+<!DOCTYPE html>
+
+ <html class="reftest-wait">
+
+  <meta charset="UTF-8">
+
+  <title>CSS Backgrounds and Borders Test: 'background-attachment: local' applied on an inline element</title>
+
+  <!--
+
+  Created: November 25th 2023
+
+  Last modified: December 17th 2023
+
+  -->
+
+  <link rel="author" title="Gérard Talbot" href="http://www.gtalbot.org/BrowserBugsSection/css21testsuite/">
+  <link rel="help" href="https://www.w3.org/TR/css-backgrounds-3/#background-attachment">
+  <link rel="help" href="https://www.w3.org/TR/cssom-view-1/#dom-window-scroll">
+  <link rel="match" href="reference/background-attachment-local-inline-002-ref.html">
+  <link rel="stylesheet" type="text/css" href="/fonts/ahem.css">
+
+  <meta name="assert" content="This test checks the interaction between an inline with a 'background-attachment: local' background-image and the expected behavior of the scroll() method which applies to the viewport window.">
+
+  <style>
+  body
+    {
+      color: transparent;
+      font-family: Ahem;
+      font-size: 50vh;
+      height: 50vh;
+      line-height: 2;
+      margin: 0px;
+    }
+
+  span#test-passed
+    {
+      background-attachment: local;
+      background-image: linear-gradient(to bottom, blue 25%, orange 25% 50%, lime 50% 75%, purple 75% 100%);
+      vertical-align: top;
+    }
+  </style>
+
+  <body onload="window.scroll(0, document.body.offsetHeight); document.documentElement.classList.remove('reftest-wait');">
+
+  <div>F</div>
+
+  <div><span id="test-passed">P</span></div>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-backgrounds/reference/background-attachment-fixed-block-002-ref.html b/third_party/blink/web_tests/external/wpt/css/css-backgrounds/reference/background-attachment-fixed-block-002-ref.html
new file mode 100644
index 0000000..4360def
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-backgrounds/reference/background-attachment-fixed-block-002-ref.html
@@ -0,0 +1,47 @@
+<!DOCTYPE html>
+
+  <meta charset="UTF-8">
+
+  <title>CSS Reftest reference</title>
+
+  <link rel="author" title="Gérard Talbot" href="http://www.gtalbot.org/BrowserBugsSection/css21testsuite/">
+
+  <style>
+  body
+    {
+      height: 50vh;
+      margin: 0px;
+    }
+
+  div#filler-before
+    {
+      height: 100vh;
+    }
+
+  div#lime
+    {
+      background-color: lime;
+      height: 25vh;
+     }
+
+  div#purple
+    {
+      background-color: purple;
+      height: 25vh;
+    }
+
+  div#filler-after
+    {
+      height: 50vh;
+    }
+  </style>
+
+  <body onload="window.scroll(0, document.body.offsetHeight);">
+
+  <div id="filler-before"></div>
+
+  <div id="lime"></div>
+
+  <div id="purple"></div>
+
+  <div id="filler-after"></div>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-backgrounds/reference/background-attachment-fixed-inline-002-ref.html b/third_party/blink/web_tests/external/wpt/css/css-backgrounds/reference/background-attachment-fixed-inline-002-ref.html
new file mode 100644
index 0000000..cfa97edd
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-backgrounds/reference/background-attachment-fixed-inline-002-ref.html
@@ -0,0 +1,40 @@
+<!DOCTYPE html>
+
+  <meta charset="UTF-8">
+
+  <title>CSS Reftest reference</title>
+
+  <link rel="author" title="Gérard Talbot" href="http://www.gtalbot.org/BrowserBugsSection/css21testsuite/">
+
+  <style>
+  body
+    {
+      height: 50vh;
+      margin: 0px;
+    }
+
+  div#filler-before
+    {
+      height: 125vh;
+    }
+
+  div#purple
+    {
+      background-color: purple;
+      height: 25vh;
+      width: 50vh;
+     }
+
+  div#filler-after
+    {
+      height: 50vh;
+    }
+  </style>
+
+  <body onload="window.scroll(0, document.body.offsetHeight);">
+
+  <div id="filler-before"></div>
+
+  <div id="purple"></div>
+
+  <div id="filler-after"></div>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-backgrounds/reference/background-attachment-local-block-002-ref.html b/third_party/blink/web_tests/external/wpt/css/css-backgrounds/reference/background-attachment-local-block-002-ref.html
new file mode 100644
index 0000000..501d70e
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-backgrounds/reference/background-attachment-local-block-002-ref.html
@@ -0,0 +1,47 @@
+<!DOCTYPE html>
+
+  <meta charset="UTF-8">
+
+  <title>CSS Reftest reference</title>
+
+  <link rel="author" title="Gérard Talbot" href="http://www.gtalbot.org/BrowserBugsSection/css21testsuite/">
+
+  <style>
+  body
+    {
+      height: 50vh;
+      margin: 0px;
+    }
+
+  div#filler-before
+    {
+      height: 100vh;
+    }
+
+  div#blue
+    {
+      background-color: blue;
+      height: 25vh;
+     }
+
+  div#orange
+    {
+      background-color: orange;
+      height: 25vh;
+    }
+
+  div#filler-after
+    {
+      height: 50vh;
+    }
+  </style>
+
+  <body onload="window.scroll(0, document.body.offsetHeight);">
+
+  <div id="filler-before"></div>
+
+  <div id="blue"></div>
+
+  <div id="orange"></div>
+
+  <div id="filler-after"></div>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-backgrounds/reference/background-attachment-local-inline-002-ref.html b/third_party/blink/web_tests/external/wpt/css/css-backgrounds/reference/background-attachment-local-inline-002-ref.html
new file mode 100644
index 0000000..3893b167
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-backgrounds/reference/background-attachment-local-inline-002-ref.html
@@ -0,0 +1,49 @@
+<!DOCTYPE html>
+
+  <meta charset="UTF-8">
+
+  <title>CSS Reftest reference</title>
+
+  <link rel="author" title="Gérard Talbot" href="http://www.gtalbot.org/BrowserBugsSection/css21testsuite/">
+
+  <style>
+  body
+    {
+      height: 50vh;
+      margin: 0px;
+    }
+
+  div#filler-before
+    {
+      height: 125vh;
+    }
+
+  div#blue
+    {
+      background-color: blue;
+      height: 12.5vh;
+      width: 50vh;
+     }
+
+  div#orange
+    {
+      background-color: orange;
+      height: 12.5vh;
+      width: 50vh;
+    }
+
+  div#filler-after
+    {
+      height: 50vh;
+    }
+  </style>
+
+  <body onload="window.scroll(0, document.body.offsetHeight);">
+
+  <div id="filler-before"></div>
+
+  <div id="blue"></div>
+
+  <div id="orange"></div>
+
+  <div id="filler-after"></div>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-break/flexbox/textarea-input-flex-items-in-multicol-crash.html b/third_party/blink/web_tests/external/wpt/css/css-break/flexbox/textarea-input-flex-items-in-multicol-crash.html
new file mode 100644
index 0000000..49ae519
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-break/flexbox/textarea-input-flex-items-in-multicol-crash.html
@@ -0,0 +1,12 @@
+<!DOCTYPE html>
+<meta charset="utf-8">
+<link rel="author" title="Ting-Yu Lin" href="mailto:tlin@mozilla.com">
+<link rel="author" title="Mozilla" href="https://www.mozilla.org/">
+<link rel="help" href="https://bugzilla.mozilla.org/show_bug.cgi?id=1870103">
+
+<div style="columns: 2;">
+  <div style="display: flex;">
+    <textarea></textarea>
+    <input>
+  </div>
+</div>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-grid/masonry/tentative/masonry-not-inhibited-001-ref.html b/third_party/blink/web_tests/external/wpt/css/css-grid/masonry/tentative/masonry-not-inhibited-001-ref.html
new file mode 100644
index 0000000..3e86b8a8
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-grid/masonry/tentative/masonry-not-inhibited-001-ref.html
@@ -0,0 +1,37 @@
+<!DOCTYPE HTML>
+<meta charset="utf-8">
+<title>CSS Grid Reference</title>
+<link rel="author" title="Daniel Holbert" href="mailto:dholbert@mozilla.com">
+<style>
+grid {
+  vertical-align: top;
+  display: inline-grid;
+  grid-template-columns: 60px 60px;
+  grid-template-rows: 60px;
+  border: 2px solid black;
+}
+item {
+  width: 60px;
+  height: 60px;
+  background: cyan;
+}
+.tall {
+  background: tan;
+}
+</style>
+<grid>
+  <item class="tall"></item>
+  <item></item>
+</grid>
+<grid class="overflowSet">
+  <item class="tall"></item>
+  <item></item>
+</grid>
+<grid class="containSet">
+  <item class="tall"></item>
+  <item></item>
+</grid>
+<grid class="containSet overflowSet">
+  <item class="tall"></item>
+  <item></item>
+</grid>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-grid/masonry/tentative/masonry-not-inhibited-001.html b/third_party/blink/web_tests/external/wpt/css/css-grid/masonry/tentative/masonry-not-inhibited-001.html
new file mode 100644
index 0000000..54499d3d
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-grid/masonry/tentative/masonry-not-inhibited-001.html
@@ -0,0 +1,54 @@
+<!DOCTYPE HTML>
+<meta charset="utf-8">
+<title>CSS Grid Test: Masonry layout shouldn't be inhibited simply due to being an independent formatting context (unlike subgrid)</title>
+<link rel="author" title="Daniel Holbert" href="mailto:dholbert@mozilla.com">
+<link rel="help" href="https://drafts.csswg.org/css-grid-3/">
+<link rel="match" href="masonry-not-inhibited-001-ref.html">
+<style>
+grid {
+  vertical-align: top;
+  display: inline-grid;
+  grid-template-columns: 60px 60px;
+  grid-template-rows: masonry;
+  border: 2px solid black;
+}
+.overflowSet {
+  overflow: hidden;
+}
+.containSet {
+  contain: layout;
+}
+item {
+  width: 60px;
+  height: 30px;
+  background: cyan;
+}
+.tall {
+    /* This item is taller than the others, which lets us know if masonry
+       layout is being applied or not. If we're using masonry, then the second
+       and third items will stack in the same column.  If not, then the third
+       item will automatically fill in below this tall item. */
+    height: 60px;
+    background: tan;
+}
+</style>
+<grid>
+  <item class="tall"></item>
+  <item></item>
+  <item></item>
+</grid>
+<grid class="overflowSet">
+  <item class="tall"></item>
+  <item></item>
+  <item></item>
+</grid>
+<grid class="containSet">
+  <item class="tall"></item>
+  <item></item>
+  <item></item>
+</grid>
+<grid class="containSet overflowSet">
+  <item class="tall"></item>
+  <item></item>
+  <item></item>
+</grid>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-grid/subgrid/alignment-in-subgridded-axes-001.html b/third_party/blink/web_tests/external/wpt/css/css-grid/subgrid/alignment-in-subgridded-axes-001.html
new file mode 100644
index 0000000..419088b4
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-grid/subgrid/alignment-in-subgridded-axes-001.html
@@ -0,0 +1,102 @@
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Grid Test: Specified alignment properties in subgridded axes</title>
+<link rel="author" title="Ethan Jimenez" href="mailto:ethavar@microsoft.com">
+<link rel="help" href="https://drafts.csswg.org/css-grid-2/#subgrid-box-alignment">
+<style>
+body {
+  margin: 0;
+  padding: 0;
+  font-size: 0;
+}
+
+.grid {
+  background: gray;
+  display: inline-grid;
+  grid-auto-rows: 100px;
+  grid-template-columns: 100px;
+}
+
+.subgrid {
+  margin: 10px;
+  padding: 10px;
+  display: grid;
+  background: orangered;
+  border: blue solid 10px;
+  grid-template: subgrid / subgrid;
+}
+
+.as { align-self: start; }
+.ae { align-self: end; }
+.ac { align-self: center; }
+.ab { align-self: baseline; }
+
+.js { justify-self: start; }
+.je { justify-self: end; }
+.jc { justify-self: center; }
+.jb { justify-self: baseline; }
+</style>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/resources/check-layout-th.js"></script>
+<body onload="checkLayout('.item')">
+<div class="grid">
+  <div class="subgrid as js">
+    <div class="item" data-offset-x="30" data-expected-width="40" data-offset-y="30" data-expected-height="40"></div>
+  </div>
+  <div class="subgrid as je">
+    <div class="item" data-offset-x="30" data-expected-width="40" data-offset-y="130" data-expected-height="40"></div>
+  </div>
+  <div class="subgrid as jc">
+    <div class="item" data-offset-x="30" data-expected-width="40" data-offset-y="230" data-expected-height="40"></div>
+  </div>
+  <div class="subgrid as jb">
+    <div class="item" data-offset-x="30" data-expected-width="40" data-offset-y="330" data-expected-height="40"></div>
+  </div>
+</div>
+
+<div class="grid">
+  <div class="subgrid ae js">
+    <div class="item" data-offset-x="130" data-expected-width="40" data-offset-y="30" data-expected-height="40"></div>
+  </div>
+  <div class="subgrid ae je">
+    <div class="item" data-offset-x="130" data-expected-width="40" data-offset-y="130" data-expected-height="40"></div>
+  </div>
+  <div class="subgrid ae jc">
+    <div class="item" data-offset-x="130" data-expected-width="40" data-offset-y="230" data-expected-height="40"></div>
+  </div>
+  <div class="subgrid ae jb">
+    <div class="item" data-offset-x="130" data-expected-width="40" data-offset-y="330" data-expected-height="40"></div>
+  </div>
+</div>
+
+<div class="grid">
+  <div class="subgrid ac js">
+    <div class="item" data-offset-x="230" data-expected-width="40" data-offset-y="30" data-expected-height="40"></div>
+  </div>
+  <div class="subgrid ac je">
+    <div class="item" data-offset-x="230" data-expected-width="40" data-offset-y="130" data-expected-height="40"></div>
+  </div>
+  <div class="subgrid ac jc">
+    <div class="item" data-offset-x="230" data-expected-width="40" data-offset-y="230" data-expected-height="40"></div>
+  </div>
+  <div class="subgrid ac jb">
+    <div class="item" data-offset-x="230" data-expected-width="40" data-offset-y="330" data-expected-height="40"></div>
+  </div>
+</div>
+
+<div class="grid">
+  <div class="subgrid ab js">
+    <div class="item" data-offset-x="330" data-expected-width="40" data-offset-y="30" data-expected-height="40"></div>
+  </div>
+  <div class="subgrid ab je">
+    <div class="item" data-offset-x="330" data-expected-width="40" data-offset-y="130" data-expected-height="40"></div>
+  </div>
+  <div class="subgrid ab jc">
+    <div class="item" data-offset-x="330" data-expected-width="40" data-offset-y="230" data-expected-height="40"></div>
+  </div>
+  <div class="subgrid ab jb">
+    <div class="item" data-offset-x="330" data-expected-width="40" data-offset-y="330" data-expected-height="40"></div>
+  </div>
+</div>
+</body>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-grid/subgrid/subgrid-baseline-010.html b/third_party/blink/web_tests/external/wpt/css/css-grid/subgrid/subgrid-baseline-010.html
index 4e302e1..fde522c 100644
--- a/third_party/blink/web_tests/external/wpt/css/css-grid/subgrid/subgrid-baseline-010.html
+++ b/third_party/blink/web_tests/external/wpt/css/css-grid/subgrid/subgrid-baseline-010.html
@@ -2,7 +2,7 @@
 <meta charset="utf-8">
 <title>CSS Grid Test: Subgrid with baseline-aligned standalone axis</title>
 <link rel="author" title="Ethan Jimenez" href="mailto:ethavar@microsoft.com">
-<link rel="help" href="https://drafts.csswg.org/css-grid-2/#subgrid-grid-alignment">
+<link rel="help" href="https://drafts.csswg.org/css-grid-2/#subgrid-box-alignment">
 <link rel="stylesheet" type="text/css" href="/fonts/ahem.css">
 <style>
 body {
diff --git a/third_party/blink/web_tests/external/wpt/css/css-grid/subgrid/subgrid-baseline-011.html b/third_party/blink/web_tests/external/wpt/css/css-grid/subgrid/subgrid-baseline-011.html
index ed1e1335..098145cd 100644
--- a/third_party/blink/web_tests/external/wpt/css/css-grid/subgrid/subgrid-baseline-011.html
+++ b/third_party/blink/web_tests/external/wpt/css/css-grid/subgrid/subgrid-baseline-011.html
@@ -2,7 +2,7 @@
 <meta charset="utf-8">
 <title>CSS Grid Test: Subgrid with baseline-aligned standalone axis</title>
 <link rel="author" title="Ethan Jimenez" href="mailto:ethavar@microsoft.com">
-<link rel="help" href="https://drafts.csswg.org/css-grid-2/#subgrid-grid-alignment">
+<link rel="help" href="https://drafts.csswg.org/css-grid-2/#subgrid-box-alignment">
 <link rel="stylesheet" type="text/css" href="/fonts/ahem.css">
 <style>
 body {
diff --git a/third_party/blink/web_tests/external/wpt/css/css-text/parsing/white-space-invalid-expected.txt b/third_party/blink/web_tests/external/wpt/css/css-text/parsing/white-space-invalid-expected.txt
new file mode 100644
index 0000000..f9083f75
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-text/parsing/white-space-invalid-expected.txt
@@ -0,0 +1,7 @@
+This is a testharness.js-based test.
+[FAIL] e.style['white-space'] = "balance" should not set the property value
+  assert_equals: expected "" but got "balance"
+[FAIL] e.style['white-space'] = "pretty" should not set the property value
+  assert_equals: expected "" but got "pretty"
+Harness: the test ran to completion.
+
diff --git a/third_party/blink/web_tests/external/wpt/css/css-text/parsing/white-space-invalid.html b/third_party/blink/web_tests/external/wpt/css/css-text/parsing/white-space-invalid.html
index 12c34fb..599bd699 100644
--- a/third_party/blink/web_tests/external/wpt/css/css-text/parsing/white-space-invalid.html
+++ b/third_party/blink/web_tests/external/wpt/css/css-text/parsing/white-space-invalid.html
@@ -15,6 +15,8 @@
 test_invalid_value("white-space", "normal pre");
 test_invalid_value("white-space", "nowrap pre-wrap");
 test_invalid_value("white-space", "pre-line break-spaces");
+test_invalid_value("white-space", "balance");
+test_invalid_value("white-space", "pretty");
 </script>
 </body>
 </html>
diff --git a/third_party/blink/web_tests/external/wpt/css/cssom-view/offsetTop-offsetLeft-with-zoom.html b/third_party/blink/web_tests/external/wpt/css/cssom-view/offsetTop-offsetLeft-with-zoom.html
new file mode 100644
index 0000000..2d74a9f
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/cssom-view/offsetTop-offsetLeft-with-zoom.html
@@ -0,0 +1,95 @@
+<!DOCTYPE html>
+<title>OffsetTop and OffsetLeft for elements with css zoom</title>
+<link rel="author" title="Yotam Hacohen" href="mailto:yotha@chromium.org">
+<link rel="author" title="Google" href="http://www.google.com/">
+<link rel="help" href="https://drafts.csswg.org/css-viewport/">"
+<meta name="viewport" content="width=device-width,initial-scale=1">
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+
+<!DOCTYPE html>
+
+<style>
+  .outer_div {
+    width: 100px;
+    height: 100px;
+    border: 1px solid black;
+    position: relative;
+    margin: 10px;
+  }
+  .square {
+    width: 10px;
+    height: 10px;
+    background-color: green;
+    margin: 1px;
+    top:10x;
+    left: 10x;
+
+  }
+  .one {
+    position: relative;
+    top: 10px;
+    left: 10px;
+  }
+  .two {
+    position: absolute;
+    top: 20px;
+    left: 20px;
+    zoom: 2;
+    }
+
+  .three {
+    position: absolute;
+    top: 10px;
+    left: 50px;
+    zoom: 0.5;
+  }
+  span.square {
+      display: inline-block;
+  }
+</style>
+
+<div class="outer_div">
+  <div id="unzoomed_one" class="square one"></div>
+  <div id="unzoomed_two" class="square two"></div>
+  <div id="unzoomed_three" class="square three"></div>
+</div>
+<div style="zoom:3" class=outer_div>
+  <div id="zoomed_one" class="square one"></div>
+  <div id="zoomed_two" class="square two"></div>
+  <div id="zoomed_three" class="square three"></div>
+</div>
+
+<div class = outer_div style="margin: 30px;">
+    <div id="zoomed_middle" style="margin: 10px; zoom:2">
+        <div class="square" id="unzoomed_inner"></div>
+    </div>
+</div>
+<div class = outer_div style="margin: 30px;">
+    <div id="unzoomed_middle">
+        <div class="square" id="zoomed_inner" style="zoom:2"></div>
+    </div>
+</div>
+
+
+<script>
+test(() => {
+  assert_equals(unzoomed_one.offsetTop, 11, 'unzoomed_one.offsetTop');
+  assert_equals(unzoomed_one.offsetLeft, 11, 'unzoomed_one.offsetLeft');
+  assert_equals(unzoomed_two.offsetTop, 21, 'unzoomed_two.offsetTop');
+  assert_equals(unzoomed_two.offsetLeft, 21, 'unzoomed_two.offsetLeft');
+  assert_equals(unzoomed_three.offsetTop, 11, 'unzoomed_three.offsetTop');
+  assert_equals(unzoomed_three.offsetLeft, 51, 'unzoomed_three.offsetLeft');
+  assert_equals(zoomed_one.offsetTop, 11, 'zoomed_one.offsetTop');
+  assert_equals(zoomed_one.offsetLeft, 11, 'zoomed_one.offsetLeft');
+  assert_equals(zoomed_two.offsetTop, 21, 'zoomed_two.offsetTop');
+  assert_equals(zoomed_two.offsetLeft, 21, 'zoomed_two.offsetLeft');
+  assert_equals(zoomed_three.offsetTop, 11, 'zoomed_three.offsetTop');
+  assert_equals(zoomed_three.offsetLeft, 51, 'zoomed_three.offsetLeft');
+  assert_equals(unzoomed_inner.offsetTop, 10, 'unzoomed_inner.offsetTop');
+  assert_equals(unzoomed_inner.offsetLeft, 11, 'unzoomed_inner.offsetLeft');
+  assert_equals(zoomed_inner.offsetTop, 0, 'zoomed_inner.offsetTop');
+  assert_equals(zoomed_inner.offsetLeft, 1, 'zoomed_inner.offsetLeft');
+
+}, 'Verifies that offsetTop and offsetLeft find the right OffsetParent and return values excluding the target zoom');
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/selectors/dir-pseudo-on-input-element.html b/third_party/blink/web_tests/external/wpt/css/selectors/dir-pseudo-on-input-element.html
index f4a0de1..25f7a08 100644
--- a/third_party/blink/web_tests/external/wpt/css/selectors/dir-pseudo-on-input-element.html
+++ b/third_party/blink/web_tests/external/wpt/css/selectors/dir-pseudo-on-input-element.html
@@ -84,7 +84,7 @@
     document.body.removeChild(container);
 }, 'input element whose type attribute is in the telephone state in a RTL block');
 
-for (const type of ['password', 'text', 'search', 'url', 'email', 'submit', 'reset', 'button']) {
+for (const type of ['password', 'text', 'search', 'url', 'email', 'submit', 'reset', 'button', 'hidden']) {
     test(() => {
         const input = document.createElement('input');
         input.type = type;
diff --git a/third_party/blink/web_tests/external/wpt/dom/parts/basic-dom-part-objects.tentative.html b/third_party/blink/web_tests/external/wpt/dom/parts/basic-dom-part-objects.tentative.html
index c8c478ef..d7834fe6 100644
--- a/third_party/blink/web_tests/external/wpt/dom/parts/basic-dom-part-objects.tentative.html
+++ b/third_party/blink/web_tests/external/wpt/dom/parts/basic-dom-part-objects.tentative.html
@@ -175,7 +175,7 @@
     assertEqualParts(clonedChildNodePartRoot.getParts(),childExpectations,0,'clone of childNodePart should match');
   }, `Cloning (${description})`);
 
-  ['Element','Text','Comment','CDATASection','ProcessingInstruction'].forEach(nodeType => {
+  ['Element','Text','Comment'].forEach(nodeType => {
     test((t) => {
       const root = doc.getPartRoot();
       assert_equals(root.getParts().length,0);
@@ -184,20 +184,26 @@
         case 'Element' : node = document.createElement('div'); break;
         case 'Text' : node = document.createTextNode('hello'); break;
         case 'Comment': node = document.createComment('comment'); break;
-        case 'CDATASection':
-          const tempdoc = (new DOMParser()).parseFromString("<xml></xml>", "application/xml");
-          node = tempdoc.createCDATASection("CDATA");
-          break;
-        case 'ProcessingInstruction': node = document.createProcessingInstruction('target','data'); break;
       }
       t.add_cleanup(() => node.remove());
       doc.firstElementChild.append(node);
+      // NodePart
       const nodePart = addCleanup(t,new NodePart(root,node,{metadata:['foobar']}));
       assert_true(!!nodePart);
       const clone = root.clone();
       assert_equals(clone.getParts().length,1);
       assertEqualParts(clone.getParts(),[{type:'NodePart',metadata:['foobar']}],0,'getParts');
       assert_true(clone.getParts()[0].node instanceof window[nodeType]);
+
+      // ChildNodePart
+      const node2 = node.cloneNode(false);
+      node.parentElement.appendChild(node2);
+      const childNodePart = addCleanup(t,new ChildNodePart(root,node,node2,{metadata:['baz']}));
+      assert_true(!!childNodePart);
+      const clone2 = root.clone();
+      assert_equals(clone2.getParts().length,2);
+      assertEqualParts(clone2.getParts(),[{type:'NodePart',metadata:['foobar']},{type:'ChildNodePart',metadata:['baz']}],0,'getParts2');
+      assert_true(clone2.getParts()[1].previousSibling instanceof window[nodeType]);
     }, `Cloning ${nodeType} (${description})`);
   });
 
@@ -268,18 +274,15 @@
 
   test((t) => {
     const root = doc.getPartRoot();
-    // Make sure no crashes occur for invalid parts.
+    // Make sure no crashes occur for parts with mismatched endpoint nodes.
     const cornerCasePartsInvalid = [
       addCleanup(t,new ChildNodePart(root,target, target.children[2],{metadata: ['different parents']})),
       addCleanup(t,new ChildNodePart(root,target.children[0], target,{metadata: ['different parents']})),
-      addCleanup(t,new ChildNodePart(root,target, doc,{metadata: ['different parents']})),
+      addCleanup(t,new ChildNodePart(root,target.children[2], target.children[0],{metadata: ['reversed endpoints']})),
     ];
     const cornerCasePartsValid = [];
-    const maybeValid = addCleanup(t,new ChildNodePart(root,directChildren[0], directChildren[1],{metadata: ['direct parent of the root container']}));
-    if (directChildren[0] === directChildren[1]) {
-      cornerCasePartsInvalid.push(maybeValid);
-    } else {
-      cornerCasePartsValid.push(maybeValid);
+    if (directChildren[0] !== directChildren[1]) {
+      cornerCasePartsValid.push(addCleanup(t,new ChildNodePart(root,directChildren[0], directChildren[1],{metadata: ['direct parent of the root container']})));
     }
     assert_array_equals(root.getParts(),cornerCasePartsValid);
     assert_equals(root.clone().getParts().length,cornerCasePartsValid.length);
diff --git a/third_party/blink/web_tests/external/wpt/dom/parts/dom-parts-valid-node-types.tentative.html b/third_party/blink/web_tests/external/wpt/dom/parts/dom-parts-valid-node-types.tentative.html
new file mode 100644
index 0000000..f9ed167
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/dom/parts/dom-parts-valid-node-types.tentative.html
@@ -0,0 +1,55 @@
+<!DOCTYPE html>
+<title>DOM Parts: Valid node types for constructors</title>
+<meta name="author" href="mailto:masonf@chromium.org">
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="./resources/domparts-utils.js"></script>
+
+<body>
+<template foo></template>
+<script>
+  const root = document.getPartRoot();
+  const xml = new DOMParser().parseFromString("<xml></xml>", "application/xml");
+  const cdata = xml.createCDATASection('cdata');
+  document.body.appendChild(cdata);
+  const pi = document.createProcessingInstruction('processing','instruction');
+  document.body.appendChild(pi);
+  const invalidNodes = {
+    document: document.documentElement,
+    documentType: document.doctype,
+    attributeNode: document.querySelector('[foo]').attributes[0],
+    cdataSection: cdata,
+    processingInstruction: pi,
+    documentFragment: document.querySelector('[foo]').content,
+  };
+
+  const types = Object.keys(invalidNodes);
+  for(let i=0;i<types.length;++i) {
+    const type = types[i];
+    const obj = invalidNodes[types[i]];
+    const otherObj = invalidNodes[types[(i+1) % types.length]];
+    test((t) => {
+      assert_throws_dom("INVALID_NODE_TYPE_ERR", () => {
+        new NodePart(root, obj, {});
+      });
+      assert_throws_dom("INVALID_NODE_TYPE_ERR", () => {
+        new ChildNodePart(root, obj, otherObj, {});
+      });
+      assert_throws_dom("INVALID_NODE_TYPE_ERR", () => {
+        new ChildNodePart(root, otherObj, obj, {});
+      });
+    },`Invalid node types (${type})`);
+  }
+
+  test((t) => {
+    try {
+      const cnp = new ChildNodePart(root, invalidNodes.documentType, invalidNodes.document, {});
+      cnp.clone();
+    } catch {};
+    try {
+      const np = new NodePart(root, invalidNodes.documentType, {});
+      np.clone();
+    } catch {};
+    // This test passes if it does not crash.
+  },'Crash test');
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/fenced-frame/README.md b/third_party/blink/web_tests/external/wpt/fenced-frame/README.md
index e3c486b..3dc65fb 100644
--- a/third_party/blink/web_tests/external/wpt/fenced-frame/README.md
+++ b/third_party/blink/web_tests/external/wpt/fenced-frame/README.md
@@ -112,6 +112,22 @@
     ```
     attachIFrameContext({origin:get_host_info().HTTPS_REMOTE_ORIGIN})
     ```
+  * Number of ad components to create the frame with. Note that this only works
+    with `generator_api: 'fledge'`. Protected Audience supports up to 20 ad
+    components per auction.
+    ```
+    attachFencedFrameContext({num_components: 1});
+    attachIFrameContext({num_components: 20});
+    ```
+    After creating the frame with ad components, the ad component frame won't
+    be created until you explicitly call a special creator from within the
+    frame.
+    ```
+    attachComponentFencedFrameContext(0, {html: "<b>Hello, world!</b>"});
+    attachComponentIFrameContext(19);
+    ```
+    This takes in an index, and, optionally, the `html` and `attributes` fields
+    as described above.
 * There is also a helper `attachIFrameContext()`, which does the same thing
   but for iframes instead of fencedframes.
 * There is also a helper `replaceFrameContext(frame, {options})` which will
diff --git a/third_party/blink/web_tests/external/wpt/fenced-frame/automatic-beacon-component-ad.https.html b/third_party/blink/web_tests/external/wpt/fenced-frame/automatic-beacon-component-ad.https.html
new file mode 100644
index 0000000..132b123
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/fenced-frame/automatic-beacon-component-ad.https.html
@@ -0,0 +1,58 @@
+<!DOCTYPE html>
+<title>Test automatic beacons in ad components</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/common/utils.js"></script>
+<script src="/common/dispatcher/dispatcher.js"></script>
+<script src="resources/utils.js"></script>
+<script src="/resources/testdriver.js"></script>
+<script src="/resources/testdriver-actions.js"></script>
+<script src="/resources/testdriver-vendor.js"></script>
+
+<body>
+<script>
+promise_test(async(t) => {
+  const actions = new test_driver.Actions();
+  const fencedframe = await attachFencedFrameContext({
+    generator_api: 'fledge',
+    automatic_beacon: true,
+    num_components: 1,
+    // These headers will also be given to the component ad.
+    headers: [["Allow-Fenced-Frame-Automatic-Beacons", "true"]]
+  });
+  const new_url = new URL("resources/close.html", location.href);
+  const beacon_type = "reserved.top_navigation_start";
+  const beacon_data = "this is the beacon data";
+
+  await fencedframe.execute(async (new_url, beacon_type, beacon_data) => {
+    let beacon_event = {
+      eventType: beacon_type,
+      eventData: "this is the beacon data",
+      destination: ["buyer"],
+      crossOriginExposed: true,
+    }
+    window.fence.setReportEventDataForAutomaticBeacons(beacon_event);
+
+    // Add an ad component that will perform the top-level navigation.
+    // The headers are the same as the ones given to `fencedframe`.
+    const ad_component = await attachComponentFencedFrameContext();
+    await ad_component.execute(async (new_url) => {
+      addEventListener("click", (event) => {
+        window.open(new_url);
+      });
+    }, [new_url]);
+  }, [new_url, beacon_type]);
+
+  await actions.pointerMove(0, 0, {origin: fencedframe.element})
+      .pointerDown()
+      .pointerUp()
+      .send();
+
+  // The component frame should not use the data set in its parent.
+  const expected_beacon_data = "<No data>";
+  const received_beacon_data = await nextAutomaticBeacon(
+          beacon_type, expected_beacon_data);
+}, 'Automatic beacon in an ad component should send without data with a ' +
+   'header opt-in.');
+</script>
+</body>
diff --git a/third_party/blink/web_tests/external/wpt/fenced-frame/multiple-component-ads.https.html b/third_party/blink/web_tests/external/wpt/fenced-frame/multiple-component-ads.https.html
new file mode 100644
index 0000000..81d5068
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/fenced-frame/multiple-component-ads.https.html
@@ -0,0 +1,32 @@
+<!DOCTYPE html>
+<title>Test loading multiple component ads</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/common/utils.js"></script>
+<script src="/common/dispatcher/dispatcher.js"></script>
+<script src="resources/utils.js"></script>
+
+<body>
+<script>
+promise_test(async(t) => {
+  const fencedframe = await attachFencedFrameContext({
+    generator_api: 'fledge',
+    num_components: 2,
+  });
+
+  await fencedframe.execute(async () => {
+    const ad_component_1 = await attachComponentFencedFrameContext(0);
+    const ad_component_2 = await attachComponentFencedFrameContext(1);
+
+    await ad_component_1.execute(() => {
+      window.component_1_var = 4;
+    });
+
+    // Check that ad_component_2 is its own separate frame.
+    await ad_component_2.execute(() => {
+      assert_equals(window.component_1_var, undefined);
+    });
+  });
+}, 'Test creating and using multiple component ads in a FLEDGE auction');
+</script>
+</body>
diff --git a/third_party/blink/web_tests/external/wpt/fenced-frame/nested-opaque-ad-sizes.https.html b/third_party/blink/web_tests/external/wpt/fenced-frame/nested-opaque-ad-sizes.https.html
index 2ac8ff0..aa93b962 100644
--- a/third_party/blink/web_tests/external/wpt/fenced-frame/nested-opaque-ad-sizes.https.html
+++ b/third_party/blink/web_tests/external/wpt/fenced-frame/nested-opaque-ad-sizes.https.html
@@ -13,9 +13,12 @@
   const allowed_height = 50;
 
   // Create an opaque-ads fenced frame with an invalid size.
-  const frame = await attachFencedFrameContext({generator_api: "fledge",
-      resolve_to_config: true,
-      attributes: [["width", allowed_width+1], ["height", allowed_height+1]]});
+  const frame = await attachFencedFrameContext({
+    generator_api: "fledge",
+    resolve_to_config: true,
+    attributes: [["width", allowed_width+1], ["height", allowed_height+1]],
+    num_components: 1
+  });
 
   await frame.execute(async (allowed_width, allowed_height) => {
     // Observe that the size gets coerced to the nearest allowed size.
@@ -24,10 +27,7 @@
     assert_equals(window.innerHeight, allowed_height,
         "The outer opaque-ads fenced frame has its height coerced.");
 
-    // TODO(crbug.com/1427455): This currently fails. Add support for component
-    // ads being loaded through attachFencedFrameContext().
-    // Create a nested (component) opaque-ads fenced frame.
-    const component_ad_frame = await attachFencedFrameContext({
+    const component_ad_frame = await attachComponentFencedFrameContext(0, {
         attributes:
         [["width", allowed_width+1], ["height", allowed_height+1]]});
 
diff --git a/third_party/blink/web_tests/external/wpt/fenced-frame/resources/utils.js b/third_party/blink/web_tests/external/wpt/fenced-frame/resources/utils.js
index f6c884c..cbea173 100644
--- a/third_party/blink/web_tests/external/wpt/fenced-frame/resources/utils.js
+++ b/third_party/blink/web_tests/external/wpt/fenced-frame/resources/utils.js
@@ -274,13 +274,26 @@
 // 2. crbug.com/1394559: unfenced-top.https.html
 async function attachOpaqueContext(
     generator_api, resolve_to_config, ad_with_size, requested_size,
-    automatic_beacon, object_constructor, html, headers, origin) {
+    automatic_beacon, object_constructor, html, headers, origin,
+    num_components) {
   const [uuid, url] = generateRemoteContextURL(headers, origin);
+
+  let components_list = [];
+  for (let i = 0; i < num_components; i++) {
+    let [component_uuid, component_url] =
+        generateRemoteContextURL(headers, origin);
+    // This field will be read by attachComponentFrameContext() in order to
+    // know what uuid to point to when building the remote context.
+    html += '<input type=\'hidden\' id=\'component_uuid_' + i + '\' value=\'' +
+        component_uuid + '\'>';
+    components_list.push(component_url);
+  }
+
   const id = await (
       generator_api == 'fledge' ?
           generateURNFromFledge(
-              url, [], [], resolve_to_config, ad_with_size, requested_size,
-              automatic_beacon) :
+              url, [], components_list, resolve_to_config, ad_with_size,
+              requested_size, automatic_beacon) :
           runSelectURL(url, [], resolve_to_config));
   const object = object_constructor(id);
   return buildRemoteContextForObject(object, uuid, html);
@@ -288,12 +301,14 @@
 
 function attachPotentiallyOpaqueContext(
     generator_api, resolve_to_config, ad_with_size, requested_size,
-    automatic_beacon, frame_constructor, html, headers, origin) {
+    automatic_beacon, frame_constructor, html, headers, origin,
+    num_components) {
   generator_api = generator_api.toLowerCase();
   if (generator_api == 'fledge' || generator_api == 'sharedstorage') {
     return attachOpaqueContext(
         generator_api, resolve_to_config, ad_with_size, requested_size,
-        automatic_beacon, frame_constructor, html, headers, origin);
+        automatic_beacon, frame_constructor, html, headers, origin,
+        num_components);
   } else {
     return attachContext(frame_constructor, html, headers, origin);
   }
@@ -301,7 +316,8 @@
 
 function attachFrameContext(
     element_name, generator_api, resolve_to_config, ad_with_size,
-    requested_size, automatic_beacon, html, headers, attributes, origin) {
+    requested_size, automatic_beacon, html, headers, attributes, origin,
+    num_components) {
   frame_constructor = (id) => {
     frame = document.createElement(element_name);
     attributes.forEach(attribute => {
@@ -320,7 +336,8 @@
   };
   return attachPotentiallyOpaqueContext(
       generator_api, resolve_to_config, ad_with_size, requested_size,
-      automatic_beacon, frame_constructor, html, headers, origin);
+      automatic_beacon, frame_constructor, html, headers, origin,
+      num_components);
 }
 
 function replaceFrameContext(frame_proxy, {
@@ -382,11 +399,13 @@
   html = '',
   headers = [],
   attributes = [],
-  origin = ''
+  origin = '',
+  num_components = 0
 } = {}) {
   return attachFrameContext(
       'fencedframe', generator_api, resolve_to_config, ad_with_size,
-      requested_size, automatic_beacon, html, headers, attributes, origin);
+      requested_size, automatic_beacon, html, headers, attributes, origin,
+      num_components);
 }
 
 // Attach an iframe that waits for scripts to execute.
@@ -397,12 +416,13 @@
   html = '',
   headers = [],
   attributes = [],
-  origin = ''
+  origin = '',
+  num_components = 0
 } = {}) {
   return attachFrameContext(
       'iframe', generator_api, resolve_to_config = false, ad_with_size = false,
       requested_size = null, automatic_beacon, html, headers, attributes,
-      origin);
+      origin, num_components);
 }
 
 // Open a window that waits for scripts to execute.
@@ -416,6 +436,45 @@
   return attachContext(window_constructor, html, headers, origin);
 }
 
+// Attaches an ad component in a fenced frame. For this to work, this must be
+// called in a frame that was generated with attachFrameContext() using the
+// Protected Audience API (generator_api: 'fledge').
+function attachComponentFencedFrameContext(
+    index = 0, {attributes = [], html = ''} = {}) {
+  const urn = window.fence.getNestedConfigs()[index];
+  return attachComponentFrameContext(
+      index, 'fencedframe', urn, attributes, html);
+}
+
+// Same as attachComponentFencedFrameContext, but in a urn iframe.
+function attachComponentIFrameContext(
+    index = 0, {attributes = [], html = ''} = {}) {
+  const urn = navigator.adAuctionComponents(index + 1)[index];
+  return attachComponentFrameContext(index, 'iframe', urn, attributes, html);
+}
+
+function attachComponentFrameContext(
+    index, element_name, urn, attributes, html) {
+  assert_not_equals(
+      document.getElementById('component_uuid_' + index), null,
+      'Component frames can only be attached to frames loaded with ' +
+          'attach*FrameContext() with `num_components` set to at least ' +
+          (index + 1) + '.');
+
+  let frame = document.createElement(element_name);
+  attributes.forEach(attribute => {
+    frame.setAttribute(attribute[0], attribute[1]);
+  });
+  if (element_name == 'iframe') {
+    frame.src = urn;
+  } else {
+    frame.config = urn;
+  }
+  document.body.append(frame);
+  const context_uuid = document.getElementById('component_uuid_' + index).value;
+  return buildRemoteContextForObject(frame, context_uuid, html);
+}
+
 // Converts a key string into a key uuid using a cryptographic hash function.
 // This function only works in secure contexts (HTTPS).
 async function stringToStashKey(string) {
diff --git a/third_party/blink/web_tests/external/wpt/html/dom/elements/global-attributes/dir-auto-form-associated.window.js b/third_party/blink/web_tests/external/wpt/html/dom/elements/global-attributes/dir-auto-form-associated.window.js
index 1777f75..3af7eb3c 100644
--- a/third_party/blink/web_tests/external/wpt/html/dom/elements/global-attributes/dir-auto-form-associated.window.js
+++ b/third_party/blink/web_tests/external/wpt/html/dom/elements/global-attributes/dir-auto-form-associated.window.js
@@ -18,9 +18,19 @@
     t.add_cleanup(() => input.remove());
     input.type = type;
     assert_equals(input.type, type);
-    input.dir = "auto";
-    input.value = "\u05D0"; // The Hebrew letter Alef (strongly RTL)
     document.body.append(input);
+
+    input.setAttribute("value", "\u05D0"); // The Hebrew letter Alef (strongly RTL)
+    assert_true(input.matches(":dir(ltr)"));
+    input.removeAttribute("value");
+
+    input.dir = "auto";
+    input.setAttribute("value", "\u05D0");
+    assert_true(input.matches(":dir(rtl)"));
+    input.removeAttribute("value");
+    assert_true(input.matches(":dir(ltr)"));
+
+    input.value = "\u05D0";
     assert_true(input.matches(":dir(rtl)"));
   }, `<input dir=auto type=${type}> directionality`);
 });
diff --git a/third_party/blink/web_tests/external/wpt/html/user-activation/activation-trigger-keyboard-enter-expected.txt b/third_party/blink/web_tests/external/wpt/html/user-activation/activation-trigger-keyboard-enter-expected.txt
deleted file mode 100644
index 07edbf0..0000000
--- a/third_party/blink/web_tests/external/wpt/html/user-activation/activation-trigger-keyboard-enter-expected.txt
+++ /dev/null
@@ -1,5 +0,0 @@
-This is a testharness.js-based test.
-[FAIL] Activation through ENTER keyboard event
-  promise_test: Unhandled rejection with value: object "Error: User activation is not active so can't be consumed. Something is probably wrong with the test."
-Harness: the test ran to completion.
-
diff --git a/third_party/blink/web_tests/external/wpt/html/user-activation/activation-trigger-mouse-left-expected.txt b/third_party/blink/web_tests/external/wpt/html/user-activation/activation-trigger-mouse-left-expected.txt
deleted file mode 100644
index 18ce022..0000000
--- a/third_party/blink/web_tests/external/wpt/html/user-activation/activation-trigger-mouse-left-expected.txt
+++ /dev/null
@@ -1,5 +0,0 @@
-This is a testharness.js-based test.
-[FAIL] Activation through left-click mouse event
-  promise_test: Unhandled rejection with value: object "Error: User activation is not active so can't be consumed. Something is probably wrong with the test."
-Harness: the test ran to completion.
-
diff --git a/third_party/blink/web_tests/external/wpt/html/user-activation/activation-trigger-mouse-right-expected.txt b/third_party/blink/web_tests/external/wpt/html/user-activation/activation-trigger-mouse-right-expected.txt
deleted file mode 100644
index 404856b..0000000
--- a/third_party/blink/web_tests/external/wpt/html/user-activation/activation-trigger-mouse-right-expected.txt
+++ /dev/null
@@ -1,5 +0,0 @@
-This is a testharness.js-based test.
-[FAIL] Activation through right-click mouse event
-  promise_test: Unhandled rejection with value: object "Error: User activation is not active so can't be consumed. Something is probably wrong with the test."
-Harness: the test ran to completion.
-
diff --git a/third_party/blink/web_tests/external/wpt/html/user-activation/activation-trigger-pointerevent_mouse-expected.txt b/third_party/blink/web_tests/external/wpt/html/user-activation/activation-trigger-pointerevent_mouse-expected.txt
deleted file mode 100644
index 1f796f76..0000000
--- a/third_party/blink/web_tests/external/wpt/html/user-activation/activation-trigger-pointerevent_mouse-expected.txt
+++ /dev/null
@@ -1,5 +0,0 @@
-This is a testharness.js-based test.
-[FAIL] Activation through mouse pointerevent click
-  promise_test: Unhandled rejection with value: object "Error: User activation is not active so can't be consumed. Something is probably wrong with the test."
-Harness: the test ran to completion.
-
diff --git a/third_party/blink/web_tests/external/wpt/html/user-activation/resources/utils.js b/third_party/blink/web_tests/external/wpt/html/user-activation/resources/utils.js
index 8cca6654..5d33025 100644
--- a/third_party/blink/web_tests/external/wpt/html/user-activation/resources/utils.js
+++ b/third_party/blink/web_tests/external/wpt/html/user-activation/resources/utils.js
@@ -1,56 +1,37 @@
-/**
- * Calls the function (f) after N number of frames have passed.
- *
- * @param {Function} f
- * @param {number} num_frames
- */
 function delayByFrames(f, num_frames) {
   function recurse(depth) {
-    if (depth == 0) f();
-    else requestAnimationFrame(() => recurse(depth - 1));
+    if (depth == 0)
+      f();
+    else
+      requestAnimationFrame(() => recurse(depth-1));
   }
   recurse(num_frames);
 }
 
-/**
- * @param {string} eventType
- * @param {object} options EventListenerOptions
- * @returns {Promise<Event>} Resolved when the event is fired.
- */
-function getEvent(eventType, options = { once: true }) {
-  return new Promise((resolve) => {
-    document.body.addEventListener(eventType, resolve, options);
+// Returns a Promise which is resolved with the event object when the event is
+// fired.
+function getEvent(eventType) {
+  return new Promise(resolve => {
+    document.body.addEventListener(eventType, e => resolve(e), {once: true});
   });
 }
 
-/**
- *
- * @param {Window} context
- * @returns {Promise<Boolean>} resolved with a true if transient activation is consumed.
- */
-async function consumeTransientActivation(context = window) {
-  if (!context.navigator.userActivation.isActive) {
-    throw new Error(
-      "User activation is not active so can't be consumed. Something is probably wrong with the test."
-    );
+
+// Returns a Promise which is resolved with a "true" iff transient activation
+// was available and successfully consumed.
+//
+// This function relies on Fullscreen API to check/consume user activation
+// state.
+async function consumeTransientActivation() {
+  try {
+    await document.body.requestFullscreen();
+    await document.exitFullscreen();
+    return true;
+  } catch(e) {
+    return false;
   }
-  if (test_driver?.consume_user_activation) {
-    return test_driver.consume_user_activation(context);
-  }
-  // fallback to Fullscreen API.
-  if (!context.document.fullscreenElement) {
-    await context.document.documentElement.requestFullscreen();
-  }
-  await context.document.exitFullscreen();
-  return !context.navigator.userActivation.isActive;
 }
 
-/**
- * Waits for a message to be sent from an iframe.
- *
- * @param {string} type
- * @returns {Promise<Object>}
- */
 function receiveMessage(type) {
   return new Promise((resolve) => {
     window.addEventListener("message", function listener(event) {
@@ -65,19 +46,3 @@
     });
   });
 }
-
-/**
- * Creates an iframe and waits for it to load...
- *
- * @param {String} src
- * @returns {Promise<HTMLIFrameElement>}
- */
-async function attachIframe(src, document = window.document) {
-  const iframe = document.createElement("iframe");
-  await new Promise((resolve) => {
-    iframe.addEventListener("load", resolve, { once: true });
-    document.body.appendChild(iframe);
-    iframe.src = src;
-  });
-  return iframe;
-}
diff --git a/third_party/blink/web_tests/external/wpt/webdriver/tests/bidi/network/continue_with_auth/action.py b/third_party/blink/web_tests/external/wpt/webdriver/tests/bidi/network/continue_with_auth/action.py
index 1c256aa..a122ce0 100644
--- a/third_party/blink/web_tests/external/wpt/webdriver/tests/bidi/network/continue_with_auth/action.py
+++ b/third_party/blink/web_tests/external/wpt/webdriver/tests/bidi/network/continue_with_auth/action.py
@@ -89,25 +89,13 @@
         request=request, action="provideCredentials", credentials=credentials
     )
 
+    # TODO: At the moment, the specification does not expect to receive a
+    # responseCompleted event for each authentication attempt, so only assert
+    # the last event. See https://github.com/w3c/webdriver-bidi/issues/627
+
+    # Wait until a a responseCompleted event with status 200 OK is received.
     wait = AsyncPoll(bidi_session, message="Didn't receive response completed events")
-    await wait.until(lambda _: len(events) >= 2)
-    assert len(events) == 2
-
-    assert_response_event(
-        events[0],
-        expected_response={
-            "status": 401,
-            "statusText": "Unauthorized",
-        },
-    )
-
-    assert_response_event(
-        events[1],
-        expected_response={
-            "status": 200,
-            "statusText": "OK",
-        },
-    )
+    await wait.until(lambda _: len(events) > 0 and events[-1]["response"]["status"] == 200)
 
     remove_listener()
 
@@ -149,32 +137,12 @@
         request=request, action="provideCredentials", credentials=correct_credentials
     )
 
+    # TODO: At the moment, the specification does not expect to receive a
+    # responseCompleted event for each authentication attempt, so only assert
+    # the last event. See https://github.com/w3c/webdriver-bidi/issues/627
+
+    # Wait until a a responseCompleted event with status 200 OK is received.
     wait = AsyncPoll(bidi_session, message="Didn't receive response completed events")
-    await wait.until(lambda _: len(events) >= 3)
-    assert len(events) == 3
-
-    assert_response_event(
-        events[0],
-        expected_response={
-            "status": 401,
-            "statusText": "Unauthorized",
-        },
-    )
-
-    assert_response_event(
-        events[1],
-        expected_response={
-            "status": 401,
-            "statusText": "Unauthorized",
-        },
-    )
-
-    assert_response_event(
-        events[2],
-        expected_response={
-            "status": 200,
-            "statusText": "OK",
-        },
-    )
+    await wait.until(lambda _: len(events) > 0 and events[-1]["response"]["status"] == 200)
 
     remove_listener()
diff --git a/third_party/blink/web_tests/external/wpt/webdriver/tests/classic/element_send_keys/send_keys.py b/third_party/blink/web_tests/external/wpt/webdriver/tests/classic/element_send_keys/send_keys.py
index 92002f29..7b25d65 100644
--- a/third_party/blink/web_tests/external/wpt/webdriver/tests/classic/element_send_keys/send_keys.py
+++ b/third_party/blink/web_tests/external/wpt/webdriver/tests/classic/element_send_keys/send_keys.py
@@ -119,3 +119,14 @@
 
     response = element_send_keys(session, element, value)
     assert_error(response, "invalid argument")
+
+
+def test_surrogates(session, inline):
+    session.url = inline("<input>")
+    element = session.find.css("input", all=False)
+
+    text = "🦥🍄"
+    response = element_send_keys(session, element, text)
+    assert_success(response)
+
+    assert element.property("value") == text
diff --git a/third_party/blink/web_tests/fast/mediarecorder/MediaRecorder-ignores-oversize-frames-h264.html b/third_party/blink/web_tests/fast/mediarecorder/MediaRecorder-error-on-oversize-frame-h264.html
similarity index 82%
rename from third_party/blink/web_tests/fast/mediarecorder/MediaRecorder-ignores-oversize-frames-h264.html
rename to third_party/blink/web_tests/fast/mediarecorder/MediaRecorder-error-on-oversize-frame-h264.html
index be92543..92c12216 100644
--- a/third_party/blink/web_tests/fast/mediarecorder/MediaRecorder-ignores-oversize-frames-h264.html
+++ b/third_party/blink/web_tests/fast/mediarecorder/MediaRecorder-error-on-oversize-frame-h264.html
@@ -1,7 +1,7 @@
 <!DOCTYPE html>
 <script src=../../resources/testharness.js></script>
 <script src=../../resources/testharnessreport.js></script>
-<script src="utils/MediaRecorder-ignores-oversize-frames.js"></script>
+<script src="utils/MediaRecorder-error-oversize-frame.js"></script>
 <script>
   const maxPixels = 36864 << 8;
   const maxSize = maxPixels / canvasHeight;
diff --git a/third_party/blink/web_tests/fast/mediarecorder/MediaRecorder-ignores-oversize-frames-vpx.html b/third_party/blink/web_tests/fast/mediarecorder/MediaRecorder-error-on-oversize-frame-vpx.html
similarity index 79%
rename from third_party/blink/web_tests/fast/mediarecorder/MediaRecorder-ignores-oversize-frames-vpx.html
rename to third_party/blink/web_tests/fast/mediarecorder/MediaRecorder-error-on-oversize-frame-vpx.html
index e9c10939..5ed8416 100644
--- a/third_party/blink/web_tests/fast/mediarecorder/MediaRecorder-ignores-oversize-frames-vpx.html
+++ b/third_party/blink/web_tests/fast/mediarecorder/MediaRecorder-error-on-oversize-frame-vpx.html
@@ -1,7 +1,7 @@
 <!DOCTYPE html>
 <script src=../../resources/testharness.js></script>
 <script src=../../resources/testharnessreport.js></script>
-<script src="utils/MediaRecorder-ignores-oversize-frames.js"></script>
+<script src="utils/MediaRecorder-error-oversize-frame.js"></script>
 <script>
   genTest('video/webm; codecs="vp8"', 16383);
   // VP9 frames can be 65535x65535, which is larger than the max canvas size.
diff --git a/third_party/blink/web_tests/fast/mediarecorder/utils/MediaRecorder-ignores-oversize-frames.js b/third_party/blink/web_tests/fast/mediarecorder/utils/MediaRecorder-error-oversize-frame.js
similarity index 80%
rename from third_party/blink/web_tests/fast/mediarecorder/utils/MediaRecorder-ignores-oversize-frames.js
rename to third_party/blink/web_tests/fast/mediarecorder/utils/MediaRecorder-error-oversize-frame.js
index e185262..438df053 100644
--- a/third_party/blink/web_tests/fast/mediarecorder/utils/MediaRecorder-ignores-oversize-frames.js
+++ b/third_party/blink/web_tests/fast/mediarecorder/utils/MediaRecorder-error-oversize-frame.js
@@ -28,14 +28,14 @@
     let dataCount = 0;
     recorder.ondataavailable = t.step_func(event => {
       assert_equals(event.data.size, 0, 'Unexpected data when canvas stream is oversize.');
-      if (dataCount++ >= 2) t.done();
+    });
+    recorder.onerror = t.step_func(event => {
+      // Error is caused.
+      t.done();
     });
     recorder.start();
     t.add_cleanup(() => recorder.stop());
-    const genFrameInterval = setInterval(t.step_func(() => {
-      generateFrame();
-      recorder.requestData();
-    }), 100);
-    t.add_cleanup(() => clearInterval(genFrameInterval));
-  }, `Ignores frames when stream starts oversize with codec '${mimeType}'`);
+    generateFrame();
+    recorder.requestData();
+  }, `Causes an error when stream is oversize with codec '${mimeType}'`);
 }
diff --git a/third_party/blink/web_tests/media/controls/keynav-display-none.html b/third_party/blink/web_tests/media/controls/keynav-display-none.html
new file mode 100644
index 0000000..d6a887b3
--- /dev/null
+++ b/third_party/blink/web_tests/media/controls/keynav-display-none.html
@@ -0,0 +1,30 @@
+<!DOCTYPE html>
+<meta charset="utf-8">
+<link rel="author" title="Di Zhang" href="mailto:dizhangg@chromium.org">
+<link rel="help" href="https://crbug.com/1510366">
+<title>Media inside hidden element should not receive focus.</title>
+<script src="../../resources/testharness.js"></script>
+<script src="../../resources/testharnessreport.js"></script>
+
+<button id="start">start</button>
+<div style="display: none">
+  <video controls></video>
+  <button>inside</button>
+</div>
+<button id="end">end</button>
+
+<script>
+test(function(t) {
+  const video = document.querySelector('video');
+  video.src = "../content/test.ogv";
+
+  const start = document.getElementById('start');
+  const end = document.getElementById('end');
+
+  start.focus();
+  assert_equals(document.activeElement, start);
+  eventSender.keyDown('\t');
+  assert_equals(document.activeElement, end);
+}, `Verifies that focus only goes between elements that are displayed.`);
+
+</script>
diff --git a/third_party/blink/web_tests/media/controls/keynav-inert.html b/third_party/blink/web_tests/media/controls/keynav-inert.html
new file mode 100644
index 0000000..c8c5ffe
--- /dev/null
+++ b/third_party/blink/web_tests/media/controls/keynav-inert.html
@@ -0,0 +1,30 @@
+<!DOCTYPE html>
+<meta charset="utf-8">
+<link rel="author" title="Di Zhang" href="mailto:dizhangg@chromium.org">
+<link rel="help" href="https://crbug.com/1502970">
+<title>Media inside inert element should not receive focus.</title>
+<script src="../../resources/testharness.js"></script>
+<script src="../../resources/testharnessreport.js"></script>
+
+<button id="start">start</button>
+<div inert>
+  <video controls></video>
+  <button>inside</button>
+</div>
+<button id="end">end</button>
+
+<script>
+test(function(t) {
+  const video = document.querySelector('video');
+  video.src = "../content/test.ogv";
+
+  const start = document.getElementById('start');
+  const end = document.getElementById('end');
+
+  start.focus();
+  assert_equals(document.activeElement, start);
+  eventSender.keyDown('\t');
+  assert_equals(document.activeElement, end);
+}, `Verifies that focus only goes between elements that are not inert.`);
+
+</script>
diff --git a/third_party/blink/web_tests/platform/linux-chrome/external/wpt/html/user-activation/activation-trigger-keyboard-enter-expected.txt b/third_party/blink/web_tests/platform/linux-chrome/external/wpt/html/user-activation/activation-trigger-keyboard-enter-expected.txt
deleted file mode 100644
index 5b37deb..0000000
--- a/third_party/blink/web_tests/platform/linux-chrome/external/wpt/html/user-activation/activation-trigger-keyboard-enter-expected.txt
+++ /dev/null
@@ -1,4 +0,0 @@
-This is a testharness.js-based test.
-All subtests passed and are omitted for brevity.
-See https://chromium.googlesource.com/chromium/src/+/HEAD/docs/testing/writing_web_tests.md#Text-Test-Baselines for details.
-Harness: the test ran to completion.
diff --git a/third_party/blink/web_tests/external/wpt/html/user-activation/activation-trigger-keyboard-escape-expected.txt b/third_party/blink/web_tests/platform/linux-chrome/external/wpt/html/user-activation/activation-trigger-keyboard-escape-expected.txt
similarity index 100%
rename from third_party/blink/web_tests/external/wpt/html/user-activation/activation-trigger-keyboard-escape-expected.txt
rename to third_party/blink/web_tests/platform/linux-chrome/external/wpt/html/user-activation/activation-trigger-keyboard-escape-expected.txt
diff --git a/third_party/blink/web_tests/platform/linux-chrome/external/wpt/html/user-activation/activation-trigger-mouse-left-expected.txt b/third_party/blink/web_tests/platform/linux-chrome/external/wpt/html/user-activation/activation-trigger-mouse-left-expected.txt
deleted file mode 100644
index 5b37deb..0000000
--- a/third_party/blink/web_tests/platform/linux-chrome/external/wpt/html/user-activation/activation-trigger-mouse-left-expected.txt
+++ /dev/null
@@ -1,4 +0,0 @@
-This is a testharness.js-based test.
-All subtests passed and are omitted for brevity.
-See https://chromium.googlesource.com/chromium/src/+/HEAD/docs/testing/writing_web_tests.md#Text-Test-Baselines for details.
-Harness: the test ran to completion.
diff --git a/third_party/blink/web_tests/platform/linux-chrome/external/wpt/html/user-activation/activation-trigger-mouse-right-expected.txt b/third_party/blink/web_tests/platform/linux-chrome/external/wpt/html/user-activation/activation-trigger-mouse-right-expected.txt
deleted file mode 100644
index 5b37deb..0000000
--- a/third_party/blink/web_tests/platform/linux-chrome/external/wpt/html/user-activation/activation-trigger-mouse-right-expected.txt
+++ /dev/null
@@ -1,4 +0,0 @@
-This is a testharness.js-based test.
-All subtests passed and are omitted for brevity.
-See https://chromium.googlesource.com/chromium/src/+/HEAD/docs/testing/writing_web_tests.md#Text-Test-Baselines for details.
-Harness: the test ran to completion.
diff --git a/third_party/blink/web_tests/platform/linux-chrome/external/wpt/html/user-activation/activation-trigger-pointerevent_mouse-expected.txt b/third_party/blink/web_tests/platform/linux-chrome/external/wpt/html/user-activation/activation-trigger-pointerevent_mouse-expected.txt
deleted file mode 100644
index 5b37deb..0000000
--- a/third_party/blink/web_tests/platform/linux-chrome/external/wpt/html/user-activation/activation-trigger-pointerevent_mouse-expected.txt
+++ /dev/null
@@ -1,4 +0,0 @@
-This is a testharness.js-based test.
-All subtests passed and are omitted for brevity.
-See https://chromium.googlesource.com/chromium/src/+/HEAD/docs/testing/writing_web_tests.md#Text-Test-Baselines for details.
-Harness: the test ran to completion.
diff --git a/third_party/blink/web_tests/platform/linux/virtual/dir-pseudo-disabled/external/wpt/css/selectors/dir-pseudo-on-input-element-expected.txt b/third_party/blink/web_tests/platform/linux/virtual/dir-pseudo-disabled/external/wpt/css/selectors/dir-pseudo-on-input-element-expected.txt
new file mode 100644
index 0000000..df1687f
--- /dev/null
+++ b/third_party/blink/web_tests/platform/linux/virtual/dir-pseudo-disabled/external/wpt/css/selectors/dir-pseudo-on-input-element-expected.txt
@@ -0,0 +1,43 @@
+This is a testharness.js-based test.
+[FAIL] input element whose type attribute is in the telephone state
+  Failed to execute 'matches' on 'Element': ':dir(ltr)' is not a valid selector.
+[FAIL] input element whose type attribute is in the telephone state in a RTL block
+  Failed to execute 'matches' on 'Element': ':dir(ltr)' is not a valid selector.
+[FAIL] input element whose type attribute is in the password state
+  Failed to execute 'matches' on 'Element': ':dir(ltr)' is not a valid selector.
+[FAIL] input element whose type attribute is in the text state
+  Failed to execute 'matches' on 'Element': ':dir(ltr)' is not a valid selector.
+[FAIL] input element whose type attribute is in the search state
+  Failed to execute 'matches' on 'Element': ':dir(ltr)' is not a valid selector.
+[FAIL] input element whose type attribute is in the url state
+  Failed to execute 'matches' on 'Element': ':dir(ltr)' is not a valid selector.
+[FAIL] input element whose type attribute is in the email state
+  Failed to execute 'matches' on 'Element': ':dir(ltr)' is not a valid selector.
+[FAIL] input element whose type attribute is in the submit state
+  Failed to execute 'matches' on 'Element': ':dir(ltr)' is not a valid selector.
+[FAIL] input element whose type attribute is in the reset state
+  Failed to execute 'matches' on 'Element': ':dir(ltr)' is not a valid selector.
+[FAIL] input element whose type attribute is in the button state
+  Failed to execute 'matches' on 'Element': ':dir(ltr)' is not a valid selector.
+[FAIL] input element whose type attribute is in the hidden state
+  Failed to execute 'matches' on 'Element': ':dir(ltr)' is not a valid selector.
+[FAIL] dynamic changes to type of input elements affect whether value is used for dir=auto
+  Failed to execute 'matches' on 'Element': ':dir(ltr)' is not a valid selector.
+[FAIL] input element whose type attribute is in the date state
+  Failed to execute 'matches' on 'Element': ':dir(ltr)' is not a valid selector.
+[FAIL] input element whose type attribute is in the time state
+  Failed to execute 'matches' on 'Element': ':dir(ltr)' is not a valid selector.
+[FAIL] input element whose type attribute is in the number state
+  Failed to execute 'matches' on 'Element': ':dir(ltr)' is not a valid selector.
+[FAIL] input element whose type attribute is in the range state
+  Failed to execute 'matches' on 'Element': ':dir(ltr)' is not a valid selector.
+[FAIL] input element whose type attribute is in the color state
+  Failed to execute 'matches' on 'Element': ':dir(ltr)' is not a valid selector.
+[FAIL] input element whose type attribute is in the checkbox state
+  Failed to execute 'matches' on 'Element': ':dir(ltr)' is not a valid selector.
+[FAIL] input element whose type attribute is in the radio state
+  Failed to execute 'matches' on 'Element': ':dir(ltr)' is not a valid selector.
+[FAIL] input element whose type attribute is in the image state
+  Failed to execute 'matches' on 'Element': ':dir(ltr)' is not a valid selector.
+Harness: the test ran to completion.
+
diff --git a/third_party/blink/web_tests/platform/linux/virtual/dir-pseudo-disabled/external/wpt/html/dom/elements/global-attributes/dir-auto-form-associated.window-expected.txt b/third_party/blink/web_tests/platform/linux/virtual/dir-pseudo-disabled/external/wpt/html/dom/elements/global-attributes/dir-auto-form-associated.window-expected.txt
new file mode 100644
index 0000000..f5e5314
--- /dev/null
+++ b/third_party/blink/web_tests/platform/linux/virtual/dir-pseudo-disabled/external/wpt/html/dom/elements/global-attributes/dir-auto-form-associated.window-expected.txt
@@ -0,0 +1,47 @@
+This is a testharness.js-based test.
+[FAIL] <input dir=auto type=hidden> directionality
+  Failed to execute 'matches' on 'Element': ':dir(ltr)' is not a valid selector.
+[FAIL] <input dir=auto type=text> directionality
+  Failed to execute 'matches' on 'Element': ':dir(ltr)' is not a valid selector.
+[FAIL] <input dir=auto type=search> directionality
+  Failed to execute 'matches' on 'Element': ':dir(ltr)' is not a valid selector.
+[FAIL] <input dir=auto type=tel> directionality
+  Failed to execute 'matches' on 'Element': ':dir(ltr)' is not a valid selector.
+[FAIL] <input dir=auto type=url> directionality
+  Failed to execute 'matches' on 'Element': ':dir(ltr)' is not a valid selector.
+[FAIL] <input dir=auto type=email> directionality
+  Failed to execute 'matches' on 'Element': ':dir(ltr)' is not a valid selector.
+[FAIL] <input dir=auto type=password> directionality
+  Failed to execute 'matches' on 'Element': ':dir(ltr)' is not a valid selector.
+[FAIL] <input dir=auto type=submit> directionality
+  Failed to execute 'matches' on 'Element': ':dir(ltr)' is not a valid selector.
+[FAIL] <input dir=auto type=reset> directionality
+  Failed to execute 'matches' on 'Element': ':dir(ltr)' is not a valid selector.
+[FAIL] <input dir=auto type=button> directionality
+  Failed to execute 'matches' on 'Element': ':dir(ltr)' is not a valid selector.
+[FAIL] <input dir=auto type=date> directionality
+  Failed to execute 'matches' on 'Element': ':dir(ltr)' is not a valid selector.
+[FAIL] <input dir=auto type=month> directionality
+  Failed to execute 'matches' on 'Element': ':dir(ltr)' is not a valid selector.
+[FAIL] <input dir=auto type=week> directionality
+  Failed to execute 'matches' on 'Element': ':dir(ltr)' is not a valid selector.
+[FAIL] <input dir=auto type=time> directionality
+  Failed to execute 'matches' on 'Element': ':dir(ltr)' is not a valid selector.
+[FAIL] <input dir=auto type=datetime-local> directionality
+  Failed to execute 'matches' on 'Element': ':dir(ltr)' is not a valid selector.
+[FAIL] <input dir=auto type=number> directionality
+  Failed to execute 'matches' on 'Element': ':dir(ltr)' is not a valid selector.
+[FAIL] <input dir=auto type=range> directionality
+  Failed to execute 'matches' on 'Element': ':dir(ltr)' is not a valid selector.
+[FAIL] <input dir=auto type=color> directionality
+  Failed to execute 'matches' on 'Element': ':dir(ltr)' is not a valid selector.
+[FAIL] <input dir=auto type=checkbox> directionality
+  Failed to execute 'matches' on 'Element': ':dir(ltr)' is not a valid selector.
+[FAIL] <input dir=auto type=radio> directionality
+  Failed to execute 'matches' on 'Element': ':dir(ltr)' is not a valid selector.
+[FAIL] <input dir=auto type=image> directionality
+  Failed to execute 'matches' on 'Element': ':dir(ltr)' is not a valid selector.
+[FAIL] <textarea dir=auto> directionality
+  Failed to execute 'matches' on 'Element': ':dir(rtl)' is not a valid selector.
+Harness: the test ran to completion.
+
diff --git a/third_party/blink/web_tests/platform/linux/virtual/dom-parts-disabled/external/wpt/dom/parts/basic-dom-part-objects.tentative-expected.txt b/third_party/blink/web_tests/platform/linux/virtual/dom-parts-disabled/external/wpt/dom/parts/basic-dom-part-objects.tentative-expected.txt
index d61d1f1..35c2cb0b 100644
--- a/third_party/blink/web_tests/platform/linux/virtual/dom-parts-disabled/external/wpt/dom/parts/basic-dom-part-objects.tentative-expected.txt
+++ b/third_party/blink/web_tests/platform/linux/virtual/dom-parts-disabled/external/wpt/dom/parts/basic-dom-part-objects.tentative-expected.txt
@@ -9,10 +9,6 @@
   doc.getPartRoot is not a function
 [FAIL] Cloning Comment (Document)
   doc.getPartRoot is not a function
-[FAIL] Cloning CDATASection (Document)
-  doc.getPartRoot is not a function
-[FAIL] Cloning ProcessingInstruction (Document)
-  doc.getPartRoot is not a function
 [FAIL] DOM mutations are not tracked (Document)
   doc.getPartRoot is not a function
 [FAIL] ChildNodePart children manipulation (Document)
@@ -29,10 +25,6 @@
   doc.getPartRoot is not a function
 [FAIL] Cloning Comment (DocumentFragment)
   doc.getPartRoot is not a function
-[FAIL] Cloning CDATASection (DocumentFragment)
-  doc.getPartRoot is not a function
-[FAIL] Cloning ProcessingInstruction (DocumentFragment)
-  doc.getPartRoot is not a function
 [FAIL] DOM mutations are not tracked (DocumentFragment)
   doc.getPartRoot is not a function
 [FAIL] ChildNodePart children manipulation (DocumentFragment)
diff --git a/third_party/blink/web_tests/platform/linux/virtual/dom-parts-disabled/external/wpt/dom/parts/dom-parts-valid-node-types.tentative-expected.txt b/third_party/blink/web_tests/platform/linux/virtual/dom-parts-disabled/external/wpt/dom/parts/dom-parts-valid-node-types.tentative-expected.txt
new file mode 100644
index 0000000..42f70e1
--- /dev/null
+++ b/third_party/blink/web_tests/platform/linux/virtual/dom-parts-disabled/external/wpt/dom/parts/dom-parts-valid-node-types.tentative-expected.txt
@@ -0,0 +1,4 @@
+This is a testharness.js-based test.
+Harness Error. harness_status.status = 1 , harness_status.message = Uncaught TypeError: document.getPartRoot is not a function
+Harness: the test ran to completion.
+
diff --git a/third_party/blink/web_tests/platform/mac-mac12/paint/invalidation/selection/japanese-rl-selection-clear-expected.txt b/third_party/blink/web_tests/platform/mac-mac12/paint/invalidation/selection/japanese-rl-selection-clear-expected.txt
deleted file mode 100644
index f4aa676..0000000
--- a/third_party/blink/web_tests/platform/mac-mac12/paint/invalidation/selection/japanese-rl-selection-clear-expected.txt
+++ /dev/null
@@ -1,15 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "Scrolling background of LayoutView #document",
-      "bounds": [800, 600],
-      "contentsOpaque": true,
-      "backgroundColor": "#FFFFFF",
-      "invalidations": [
-        [288, 123, 484, 392],
-        [381, 123, 396, 399]
-      ]
-    }
-  ]
-}
-
diff --git a/third_party/blink/web_tests/platform/mac-mac12/virtual/text-antialias/international/vertical-text-metrics-test-expected.txt b/third_party/blink/web_tests/platform/mac-mac12/virtual/text-antialias/international/vertical-text-metrics-test-expected.txt
deleted file mode 100644
index c0e281b5..0000000
--- a/third_party/blink/web_tests/platform/mac-mac12/virtual/text-antialias/international/vertical-text-metrics-test-expected.txt
+++ /dev/null
@@ -1,22 +0,0 @@
-Simple text path
-
-string「あ、変っ!」。
-string「あ、変っ!」。
-string「あ、変っ!」。
-
-
-
-Complex text path
-
-string「あ、変っ!」。
-string「あ、変っ!」。
-string「あ、変っ!」。
-
-
-
-width=227
-width=33
-width=33
-width=227
-width=33
-width=33
diff --git a/third_party/blink/web_tests/platform/mac/editing/selection/japanese-lr-selection-expected.png b/third_party/blink/web_tests/platform/mac/editing/selection/japanese-lr-selection-expected.png
index 51041d0..39773e47 100644
--- a/third_party/blink/web_tests/platform/mac/editing/selection/japanese-lr-selection-expected.png
+++ b/third_party/blink/web_tests/platform/mac/editing/selection/japanese-lr-selection-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/editing/selection/japanese-rl-selection-expected.png b/third_party/blink/web_tests/platform/mac/editing/selection/japanese-rl-selection-expected.png
index 9977506..a038bd5 100644
--- a/third_party/blink/web_tests/platform/mac/editing/selection/japanese-rl-selection-expected.png
+++ b/third_party/blink/web_tests/platform/mac/editing/selection/japanese-rl-selection-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/fast/writing-mode/border-vertical-lr-expected.png b/third_party/blink/web_tests/platform/mac/fast/writing-mode/border-vertical-lr-expected.png
index 3e4ea49..060ca11 100644
--- a/third_party/blink/web_tests/platform/mac/fast/writing-mode/border-vertical-lr-expected.png
+++ b/third_party/blink/web_tests/platform/mac/fast/writing-mode/border-vertical-lr-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/fast/writing-mode/japanese-lr-text-expected.png b/third_party/blink/web_tests/platform/mac/fast/writing-mode/japanese-lr-text-expected.png
index 3b4bd4d..4dceac9 100644
--- a/third_party/blink/web_tests/platform/mac/fast/writing-mode/japanese-lr-text-expected.png
+++ b/third_party/blink/web_tests/platform/mac/fast/writing-mode/japanese-lr-text-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/fast/writing-mode/japanese-rl-text-expected.png b/third_party/blink/web_tests/platform/mac/fast/writing-mode/japanese-rl-text-expected.png
index a1b60ed..477ffa5 100644
--- a/third_party/blink/web_tests/platform/mac/fast/writing-mode/japanese-rl-text-expected.png
+++ b/third_party/blink/web_tests/platform/mac/fast/writing-mode/japanese-rl-text-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/fast/writing-mode/japanese-ruby-vertical-lr-expected.png b/third_party/blink/web_tests/platform/mac/fast/writing-mode/japanese-ruby-vertical-lr-expected.png
index 10990b23..3e61198 100644
--- a/third_party/blink/web_tests/platform/mac/fast/writing-mode/japanese-ruby-vertical-lr-expected.png
+++ b/third_party/blink/web_tests/platform/mac/fast/writing-mode/japanese-ruby-vertical-lr-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/fast/writing-mode/japanese-ruby-vertical-rl-expected.png b/third_party/blink/web_tests/platform/mac/fast/writing-mode/japanese-ruby-vertical-rl-expected.png
index 68f041f6..74017b2 100644
--- a/third_party/blink/web_tests/platform/mac/fast/writing-mode/japanese-ruby-vertical-rl-expected.png
+++ b/third_party/blink/web_tests/platform/mac/fast/writing-mode/japanese-ruby-vertical-rl-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/fast/writing-mode/vertical-align-table-baseline-expected.png b/third_party/blink/web_tests/platform/mac/fast/writing-mode/vertical-align-table-baseline-expected.png
index 69639d8..6018626f 100644
--- a/third_party/blink/web_tests/platform/mac/fast/writing-mode/vertical-align-table-baseline-expected.png
+++ b/third_party/blink/web_tests/platform/mac/fast/writing-mode/vertical-align-table-baseline-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/fast/writing-mode/vertical-baseline-alignment-expected.png b/third_party/blink/web_tests/platform/mac/fast/writing-mode/vertical-baseline-alignment-expected.png
index 4d007a9..a7558e1 100644
--- a/third_party/blink/web_tests/platform/mac/fast/writing-mode/vertical-baseline-alignment-expected.png
+++ b/third_party/blink/web_tests/platform/mac/fast/writing-mode/vertical-baseline-alignment-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/paint/invalidation/selection/japanese-rl-selection-clear-expected.png b/third_party/blink/web_tests/platform/mac/paint/invalidation/selection/japanese-rl-selection-clear-expected.png
index 5fb11e1..ef6cf5a0 100644
--- a/third_party/blink/web_tests/platform/mac/paint/invalidation/selection/japanese-rl-selection-clear-expected.png
+++ b/third_party/blink/web_tests/platform/mac/paint/invalidation/selection/japanese-rl-selection-clear-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/paint/invalidation/selection/japanese-rl-selection-clear-expected.txt b/third_party/blink/web_tests/platform/mac/paint/invalidation/selection/japanese-rl-selection-clear-expected.txt
index 793c404b..f4aa676 100644
--- a/third_party/blink/web_tests/platform/mac/paint/invalidation/selection/japanese-rl-selection-clear-expected.txt
+++ b/third_party/blink/web_tests/platform/mac/paint/invalidation/selection/japanese-rl-selection-clear-expected.txt
@@ -6,8 +6,8 @@
       "contentsOpaque": true,
       "backgroundColor": "#FFFFFF",
       "invalidations": [
-        [330, 123, 444, 390],
-        [387, 123, 390, 395]
+        [288, 123, 484, 392],
+        [381, 123, 396, 399]
       ]
     }
   ]
diff --git a/third_party/blink/web_tests/platform/mac/virtual/text-antialias/emphasis-vertical-expected.png b/third_party/blink/web_tests/platform/mac/virtual/text-antialias/emphasis-vertical-expected.png
index 19bab75..554d3620 100644
--- a/third_party/blink/web_tests/platform/mac/virtual/text-antialias/emphasis-vertical-expected.png
+++ b/third_party/blink/web_tests/platform/mac/virtual/text-antialias/emphasis-vertical-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/virtual/text-antialias/international/vertical-text-glyph-test-expected.png b/third_party/blink/web_tests/platform/mac/virtual/text-antialias/international/vertical-text-glyph-test-expected.png
index 54f6f18..dd062145 100644
--- a/third_party/blink/web_tests/platform/mac/virtual/text-antialias/international/vertical-text-glyph-test-expected.png
+++ b/third_party/blink/web_tests/platform/mac/virtual/text-antialias/international/vertical-text-glyph-test-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/virtual/text-antialias/international/vertical-text-metrics-test-expected.txt b/third_party/blink/web_tests/platform/mac/virtual/text-antialias/international/vertical-text-metrics-test-expected.txt
index 5bcebbc..c0e281b5 100644
--- a/third_party/blink/web_tests/platform/mac/virtual/text-antialias/international/vertical-text-metrics-test-expected.txt
+++ b/third_party/blink/web_tests/platform/mac/virtual/text-antialias/international/vertical-text-metrics-test-expected.txt
@@ -14,9 +14,9 @@
 
 
 
-width=219
-width=30
-width=30
-width=219
-width=30
-width=30
+width=227
+width=33
+width=33
+width=227
+width=33
+width=33
diff --git a/third_party/blink/web_tests/virtual/restrict-gamepad/README.md b/third_party/blink/web_tests/virtual/restrict-gamepad/README.md
deleted file mode 100644
index bdd7828..0000000
--- a/third_party/blink/web_tests/virtual/restrict-gamepad/README.md
+++ /dev/null
@@ -1,5 +0,0 @@
-This directory contains tests for the [Gamepad API](https://www.w3.org/TR/gamepad/).
-Specifically this virtual test suite tests the new [Permission Policy requirement](https://github.com/w3c/gamepad/pull/112)
-and the new [Secure Context requirement(https://github.com/w3c/gamepad/pull/120)
-
-**This suite runs the tests with** `--enable-features=RestrictGamepadAccess`
\ No newline at end of file
diff --git a/third_party/blink/web_tests/virtual/restrict-gamepad/external/wpt/gamepad/README.txt b/third_party/blink/web_tests/virtual/restrict-gamepad/external/wpt/gamepad/README.txt
deleted file mode 100644
index 6a6fc14..0000000
--- a/third_party/blink/web_tests/virtual/restrict-gamepad/external/wpt/gamepad/README.txt
+++ /dev/null
@@ -1,2 +0,0 @@
-These tests run the WPT for gamepad Permission Policy and Secure Context
-requirements with the restrict-gamepad-access flag turned on.
\ No newline at end of file
diff --git a/third_party/blink/web_tests/virtual/restrict-gamepad/external/wpt/gamepad/gamepad-secure-context-expected.txt b/third_party/blink/web_tests/virtual/restrict-gamepad/external/wpt/gamepad/gamepad-secure-context-expected.txt
deleted file mode 100644
index d4b3c0d..0000000
--- a/third_party/blink/web_tests/virtual/restrict-gamepad/external/wpt/gamepad/gamepad-secure-context-expected.txt
+++ /dev/null
@@ -1,5 +0,0 @@
-This is a testharness.js-based test.
-[FAIL] Gamepad API is not exposed in non-secure contexts
-  Failed to execute 'getGamepads' on 'Navigator': Access to the feature "gamepad" requires a secure context
-Harness: the test ran to completion.
-
diff --git a/third_party/blink/web_tests/webexposed/global-interface-listing-expected.txt b/third_party/blink/web_tests/webexposed/global-interface-listing-expected.txt
index 1ec4b9ee..a9c55fa 100644
--- a/third_party/blink/web_tests/webexposed/global-interface-listing-expected.txt
+++ b/third_party/blink/web_tests/webexposed/global-interface-listing-expected.txt
@@ -6037,11 +6037,13 @@
     getter album
     getter artist
     getter artwork
+    getter chapterInfo
     getter title
     method constructor
     setter album
     setter artist
     setter artwork
+    setter chapterInfo
     setter title
 interface MediaQueryList : EventTarget
     attribute @@toStringTag
diff --git a/third_party/dawn b/third_party/dawn
index 8d196ea..464418b 160000
--- a/third_party/dawn
+++ b/third_party/dawn
@@ -1 +1 @@
-Subproject commit 8d196eadb653897a30f765a4c4a9c2016c79b7eb
+Subproject commit 464418b24f65fce81114f6af89b611900f988424
diff --git a/third_party/devtools-frontend-internal b/third_party/devtools-frontend-internal
index cb8f270..1aa1443 160000
--- a/third_party/devtools-frontend-internal
+++ b/third_party/devtools-frontend-internal
@@ -1 +1 @@
-Subproject commit cb8f270a8aa35b4e328e1daab63a4b6ec0d895dc
+Subproject commit 1aa144373762ad547bc61052833c3ef9ea4eb418
diff --git a/third_party/devtools-frontend/src b/third_party/devtools-frontend/src
index 98d992a..a20e7f4 160000
--- a/third_party/devtools-frontend/src
+++ b/third_party/devtools-frontend/src
@@ -1 +1 @@
-Subproject commit 98d992a07f471468ad5a07cb37e7640dc38c2132
+Subproject commit a20e7f45af8fb569776ee3b605b70d57f71afbef
diff --git a/third_party/jni_zero/core.cc b/third_party/jni_zero/core.cc
index e9050933..8679f65 100644
--- a/third_party/jni_zero/core.cc
+++ b/third_party/jni_zero/core.cc
@@ -13,6 +13,8 @@
 // Until we fully migrate base's jni_android, we will maintain a copy of this
 // global here and will have base set this variable when it sets its own.
 JavaVM* g_jvm = nullptr;
+
+void (*g_exception_handler_callback)(JNIEnv*) = nullptr;
 }  // namespace
 
 JNIEnv* AttachCurrentThread() {
@@ -39,11 +41,35 @@
 #else
     ret = g_jvm->AttachCurrentThread(&env, &args);
 #endif
-    JNI_ZERO_CHECK(JNI_OK == ret);
+    JNI_ZERO_CHECK(ret == JNI_OK);
   }
   return env;
 }
 
+JNIEnv* AttachCurrentThreadWithName(const std::string& thread_name) {
+  JNI_ZERO_DCHECK(g_jvm);
+  JavaVMAttachArgs args;
+  args.version = JNI_VERSION_1_2;
+  args.name = const_cast<char*>(thread_name.c_str());
+  args.group = nullptr;
+  JNIEnv* env = nullptr;
+#if defined(JNI_ZERO_IS_ROBOLECTRIC)
+  jint ret = g_jvm->AttachCurrentThread(reinterpret_cast<void**>(&env), &args);
+#else
+  jint ret = g_jvm->AttachCurrentThread(&env, &args);
+#endif
+  JNI_ZERO_CHECK(ret == JNI_OK);
+  return env;
+}
+
+void DetachFromVM() {
+  // Ignore the return value, if the thread is not attached, DetachCurrentThread
+  // will fail. But it is ok as the native thread may never be attached.
+  if (g_jvm) {
+    g_jvm->DetachCurrentThread();
+  }
+}
+
 void InitVM(JavaVM* vm) {
   g_jvm = vm;
 }
@@ -51,4 +77,28 @@
 void DisableJvmForTesting() {
   g_jvm = nullptr;
 }
+
+bool IsVMInitialized() {
+  return g_jvm != nullptr;
+}
+
+JavaVM* GetVM() {
+  return g_jvm;
+}
+
+void SetExceptionHandler(void (*callback)(JNIEnv*)) {
+  g_exception_handler_callback = callback;
+}
+
+void CheckException(JNIEnv* env) {
+  if (env->ExceptionCheck() == JNI_FALSE) {
+    return;
+  }
+
+  if (g_exception_handler_callback) {
+    return g_exception_handler_callback(env);
+  }
+  JNI_ZERO_FLOG("jni_zero crashing due to uncaught Java exception");
+}
+
 }  // namespace jni_zero
diff --git a/third_party/jni_zero/core.h b/third_party/jni_zero/core.h
index 49c55c7..c46ddd02 100644
--- a/third_party/jni_zero/core.h
+++ b/third_party/jni_zero/core.h
@@ -7,21 +7,47 @@
 
 #include <jni.h>
 
+#include <string>
+
 #include "third_party/jni_zero/jni_export.h"
 
 namespace jni_zero {
 // Attaches the current thread to the VM (if necessary) and return the JNIEnv*.
 JNI_ZERO_COMPONENT_BUILD_EXPORT JNIEnv* AttachCurrentThread();
 
+// Same to AttachCurrentThread except that thread name will be set to
+// |thread_name| if it is the first call. Otherwise, thread_name won't be
+// changed. AttachCurrentThread() doesn't regard underlying platform thread
+// name, but just resets it to "Thread-???". This function should be called
+// right after new thread is created if it is important to keep thread name.
+JNI_ZERO_COMPONENT_BUILD_EXPORT JNIEnv* AttachCurrentThreadWithName(
+    const std::string& thread_name);
+
+// Detaches the current thread from VM if it is attached.
+JNI_ZERO_COMPONENT_BUILD_EXPORT void DetachFromVM();
+
 // Initializes the global JVM.
 JNI_ZERO_COMPONENT_BUILD_EXPORT void InitVM(JavaVM* vm);
 
+// Returns true if the global JVM has been initialized.
+JNI_ZERO_COMPONENT_BUILD_EXPORT bool IsVMInitialized();
+
+// Returns the global JVM, or nullptr if it has not been initialized.
+JNI_ZERO_COMPONENT_BUILD_EXPORT JavaVM* GetVM();
+
 // Do not allow any future native->java calls.
 // This is necessary in gtest DEATH_TESTS to prevent
 // GetJavaStackTraceIfPresent() from accessing a defunct JVM (due to fork()).
 // https://crbug.com/1484834
 JNI_ZERO_COMPONENT_BUILD_EXPORT void DisableJvmForTesting();
 
+JNI_ZERO_COMPONENT_BUILD_EXPORT void SetExceptionHandler(
+    void (*callback)(JNIEnv*));
+
+// If there's any pending exception, this function will call the set exception
+// handler, or if none are set, it will fatally LOG.
+JNI_ZERO_COMPONENT_BUILD_EXPORT void CheckException(JNIEnv* env);
+
 }  // namespace jni_zero
 
 #endif  // JNI_ZERO_CORE_H_
diff --git a/third_party/libaom/README.chromium b/third_party/libaom/README.chromium
index a409524..f40e4e5e 100644
--- a/third_party/libaom/README.chromium
+++ b/third_party/libaom/README.chromium
@@ -2,7 +2,7 @@
 Short Name: libaom
 URL: https://aomedia.googlesource.com/aom/
 Version: N/A
-Revision: ebe946034afb793a69d71fc864b561e691e403de
+Revision: f30a3ed4e80e97c2df4cb5c71eb11cc90c034ae6
 CPEPrefix: cpe:/a:aomedia:aomedia:3.6.1
 License: BSD
 License File: source/libaom/LICENSE
diff --git a/third_party/libaom/libaom_srcs.gni b/third_party/libaom/libaom_srcs.gni
index c6e6d42d..0416548 100644
--- a/third_party/libaom/libaom_srcs.gni
+++ b/third_party/libaom/libaom_srcs.gni
@@ -219,6 +219,7 @@
   "//third_party/libaom/source/libaom/av1/encoder/arm/neon/hybrid_fwd_txfm_neon.c",
   "//third_party/libaom/source/libaom/av1/encoder/arm/neon/ml_neon.c",
   "//third_party/libaom/source/libaom/av1/encoder/arm/neon/pickrst_neon.c",
+  "//third_party/libaom/source/libaom/av1/encoder/arm/neon/pickrst_neon.h",
   "//third_party/libaom/source/libaom/av1/encoder/arm/neon/quantize_neon.c",
   "//third_party/libaom/source/libaom/av1/encoder/arm/neon/rdopt_neon.c",
   "//third_party/libaom/source/libaom/av1/encoder/arm/neon/reconinter_enc_neon.c",
diff --git a/third_party/libaom/source/config/config/aom_version.h b/third_party/libaom/source/config/config/aom_version.h
index 638e0cd6..1531221f 100644
--- a/third_party/libaom/source/config/config/aom_version.h
+++ b/third_party/libaom/source/config/config/aom_version.h
@@ -12,8 +12,8 @@
 #define VERSION_MAJOR 3
 #define VERSION_MINOR 8
 #define VERSION_PATCH 0
-#define VERSION_EXTRA "152-gebe946034a"
+#define VERSION_EXTRA "168-gf30a3ed4e8"
 #define VERSION_PACKED \
   ((VERSION_MAJOR << 16) | (VERSION_MINOR << 8) | (VERSION_PATCH))
-#define VERSION_STRING_NOSP "3.8.0-152-gebe946034a"
-#define VERSION_STRING " 3.8.0-152-gebe946034a"
+#define VERSION_STRING_NOSP "3.8.0-168-gf30a3ed4e8"
+#define VERSION_STRING " 3.8.0-168-gf30a3ed4e8"
diff --git a/third_party/libaom/source/libaom b/third_party/libaom/source/libaom
index ebe9460..f30a3ed 160000
--- a/third_party/libaom/source/libaom
+++ b/third_party/libaom/source/libaom
@@ -1 +1 @@
-Subproject commit ebe946034afb793a69d71fc864b561e691e403de
+Subproject commit f30a3ed4e80e97c2df4cb5c71eb11cc90c034ae6
diff --git a/third_party/metrics_proto/BUILD.gn b/third_party/metrics_proto/BUILD.gn
index c34a6fbd..f99ce8d 100644
--- a/third_party/metrics_proto/BUILD.gn
+++ b/third_party/metrics_proto/BUILD.gn
@@ -14,6 +14,7 @@
   "chrome_os_app_list_launch_event.proto",
   "chrome_user_metrics_extension.proto",
   "custom_tab_session.proto",
+  "device_state.proto",
   "execution_context.proto",
   "extension_install.proto",
   "histogram_event.proto",
diff --git a/third_party/metrics_proto/README.chromium b/third_party/metrics_proto/README.chromium
index 5ebf113c..3b667bc4 100644
--- a/third_party/metrics_proto/README.chromium
+++ b/third_party/metrics_proto/README.chromium
@@ -1,8 +1,8 @@
 Name: Metrics Protos
 Short Name: metrics_proto
 URL: This is the canonical public repository
-Version: 585689501
-Date: 2023-11-27 UTC
+Version: 592666833
+Date: 2023-12-20 UTC
 License: BSD
 License File: LICENSE
 Shipped: yes
diff --git a/third_party/metrics_proto/device_state.proto b/third_party/metrics_proto/device_state.proto
new file mode 100644
index 0000000..391f0b2
--- /dev/null
+++ b/third_party/metrics_proto/device_state.proto
@@ -0,0 +1,24 @@
+// Copyright 2023 The Chromium Authors
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+syntax = "proto2";
+
+option optimize_for = LITE_RUNTIME;
+option java_package = "org.chromium.components.metrics";
+
+option java_outer_classname = "DeviceStateProtos";
+
+package metrics;
+
+// Enums corresponding to the state of the device when data was collected.
+
+// The system's thermal state, as defined by the power monitor in chromium
+// https://source.chromium.org/chromium/chromium/src/+/main:base/power_monitor/power_observer.h;l=49;drc=e4622aaeccea84652488d1822c28c78b7115684f
+enum ThermalState {
+  THERMAL_STATE_UNKNOWN = 0;
+  THERMAL_STATE_NOMINAL = 1;
+  THERMAL_STATE_FAIR = 2;
+  THERMAL_STATE_SERIOUS = 3;
+  THERMAL_STATE_CRITICAL = 4;
+}
diff --git a/third_party/metrics_proto/sampled_profile.proto b/third_party/metrics_proto/sampled_profile.proto
index d4d360f..7a1c4c98 100644
--- a/third_party/metrics_proto/sampled_profile.proto
+++ b/third_party/metrics_proto/sampled_profile.proto
@@ -12,6 +12,7 @@
 package metrics;
 
 import "call_stack_profile.proto";
+import "device_state.proto";
 import "execution_context.proto";
 import "perf_data.proto";
 import "perf_stat.proto";
@@ -20,7 +21,7 @@
 // Protocol buffer for collected sample-based profiling data.
 // Contains the parameters and data from a single profile collection event.
 
-// Next tag: 21
+// Next tag: 23
 message SampledProfile {
   // Indicates the event that triggered this collection.
   enum TriggerEvent {
@@ -140,4 +141,12 @@
   // The percent of the time that runnable processes are delayed because the CPU
   // is unavailable, accumulated over 60 seconds.
   optional float psi_cpu_last_60s_pct = 17;
+
+  // The device thermal state when the profile was collected.
+  optional ThermalState thermal_state = 21;
+
+  // The operating system's advertised speed limit for CPUs in percent. Values
+  // below 100 indicate that the system is impairing processing power due to
+  // thermal management.
+  optional int32 cpu_speed_limit_percent = 22;
 }
diff --git a/third_party/node/node_modules.tar.gz.sha1 b/third_party/node/node_modules.tar.gz.sha1
index 67f6889..baf64cc 100644
--- a/third_party/node/node_modules.tar.gz.sha1
+++ b/third_party/node/node_modules.tar.gz.sha1
@@ -1 +1 @@
-ac0367f7d8ca4d00e38212c8911682f3265cc30f
\ No newline at end of file
+e0b8a95aed06c02287872a2d15c28509b9808446
diff --git a/third_party/node/package-lock.json b/third_party/node/package-lock.json
index 1c5aa63..98b00442 100644
--- a/third_party/node/package-lock.json
+++ b/third_party/node/package-lock.json
@@ -25,7 +25,6 @@
         "@types/wicg-file-system-access": "2020.09.05",
         "@typescript-eslint/eslint-plugin": "6.7.4",
         "@typescript-eslint/parser": "6.7.4",
-        "babel-eslint": "10.0.2",
         "eslint": "8.50.0",
         "eslint-plugin-jsdoc": "46.8.2",
         "html-minifier": "4.0.0",
@@ -44,152 +43,6 @@
         "node": ">=0.10.0"
       }
     },
-    "node_modules/@babel/code-frame": {
-      "version": "7.14.5",
-      "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.14.5.tgz",
-      "integrity": "sha512-9pzDqyc6OLDaqe+zbACgFkb6fKMNG6CObKpnYXChRsvYGyEdc7CA2BaqeOM+vOtCS5ndmJicPJhKAwYRI6UfFw==",
-      "dependencies": {
-        "@babel/highlight": "^7.14.5"
-      },
-      "engines": {
-        "node": ">=6.9.0"
-      }
-    },
-    "node_modules/@babel/generator": {
-      "version": "7.15.4",
-      "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.15.4.tgz",
-      "integrity": "sha512-d3itta0tu+UayjEORPNz6e1T3FtvWlP5N4V5M+lhp/CxT4oAA7/NcScnpRyspUMLK6tu9MNHmQHxRykuN2R7hw==",
-      "dependencies": {
-        "@babel/types": "^7.15.4",
-        "jsesc": "^2.5.1",
-        "source-map": "^0.5.0"
-      },
-      "engines": {
-        "node": ">=6.9.0"
-      }
-    },
-    "node_modules/@babel/helper-function-name": {
-      "version": "7.15.4",
-      "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.15.4.tgz",
-      "integrity": "sha512-Z91cOMM4DseLIGOnog+Z8OI6YseR9bua+HpvLAQ2XayUGU+neTtX+97caALaLdyu53I/fjhbeCnWnRH1O3jFOw==",
-      "dependencies": {
-        "@babel/helper-get-function-arity": "^7.15.4",
-        "@babel/template": "^7.15.4",
-        "@babel/types": "^7.15.4"
-      },
-      "engines": {
-        "node": ">=6.9.0"
-      }
-    },
-    "node_modules/@babel/helper-get-function-arity": {
-      "version": "7.15.4",
-      "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.15.4.tgz",
-      "integrity": "sha512-1/AlxSF92CmGZzHnC515hm4SirTxtpDnLEJ0UyEMgTMZN+6bxXKg04dKhiRx5Enel+SUA1G1t5Ed/yQia0efrA==",
-      "dependencies": {
-        "@babel/types": "^7.15.4"
-      },
-      "engines": {
-        "node": ">=6.9.0"
-      }
-    },
-    "node_modules/@babel/helper-hoist-variables": {
-      "version": "7.15.4",
-      "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.15.4.tgz",
-      "integrity": "sha512-VTy085egb3jUGVK9ycIxQiPbquesq0HUQ+tPO0uv5mPEBZipk+5FkRKiWq5apuyTE9FUrjENB0rCf8y+n+UuhA==",
-      "dependencies": {
-        "@babel/types": "^7.15.4"
-      },
-      "engines": {
-        "node": ">=6.9.0"
-      }
-    },
-    "node_modules/@babel/helper-split-export-declaration": {
-      "version": "7.15.4",
-      "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.15.4.tgz",
-      "integrity": "sha512-HsFqhLDZ08DxCpBdEVtKmywj6PQbwnF6HHybur0MAnkAKnlS6uHkwnmRIkElB2Owpfb4xL4NwDmDLFubueDXsw==",
-      "dependencies": {
-        "@babel/types": "^7.15.4"
-      },
-      "engines": {
-        "node": ">=6.9.0"
-      }
-    },
-    "node_modules/@babel/helper-validator-identifier": {
-      "version": "7.15.7",
-      "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.15.7.tgz",
-      "integrity": "sha512-K4JvCtQqad9OY2+yTU8w+E82ywk/fe+ELNlt1G8z3bVGlZfn/hOcQQsUhGhW/N+tb3fxK800wLtKOE/aM0m72w==",
-      "engines": {
-        "node": ">=6.9.0"
-      }
-    },
-    "node_modules/@babel/highlight": {
-      "version": "7.14.5",
-      "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.14.5.tgz",
-      "integrity": "sha512-qf9u2WFWVV0MppaL877j2dBtQIDgmidgjGk5VIMw3OadXvYaXn66U1BFlH2t4+t3i+8PhedppRv+i40ABzd+gg==",
-      "dependencies": {
-        "@babel/helper-validator-identifier": "^7.14.5",
-        "chalk": "^2.0.0",
-        "js-tokens": "^4.0.0"
-      },
-      "engines": {
-        "node": ">=6.9.0"
-      }
-    },
-    "node_modules/@babel/parser": {
-      "version": "7.15.7",
-      "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.15.7.tgz",
-      "integrity": "sha512-rycZXvQ+xS9QyIcJ9HXeDWf1uxqlbVFAUq0Rq0dbc50Zb/+wUe/ehyfzGfm9KZZF0kBejYgxltBXocP+gKdL2g==",
-      "bin": {
-        "parser": "bin/babel-parser.js"
-      },
-      "engines": {
-        "node": ">=6.0.0"
-      }
-    },
-    "node_modules/@babel/template": {
-      "version": "7.15.4",
-      "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.15.4.tgz",
-      "integrity": "sha512-UgBAfEa1oGuYgDIPM2G+aHa4Nlo9Lh6mGD2bDBGMTbYnc38vulXPuC1MGjYILIEmlwl6Rd+BPR9ee3gm20CBtg==",
-      "dependencies": {
-        "@babel/code-frame": "^7.14.5",
-        "@babel/parser": "^7.15.4",
-        "@babel/types": "^7.15.4"
-      },
-      "engines": {
-        "node": ">=6.9.0"
-      }
-    },
-    "node_modules/@babel/traverse": {
-      "version": "7.15.4",
-      "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.15.4.tgz",
-      "integrity": "sha512-W6lQD8l4rUbQR/vYgSuCAE75ADyyQvOpFVsvPPdkhf6lATXAsQIG9YdtOcu8BB1dZ0LKu+Zo3c1wEcbKeuhdlA==",
-      "dependencies": {
-        "@babel/code-frame": "^7.14.5",
-        "@babel/generator": "^7.15.4",
-        "@babel/helper-function-name": "^7.15.4",
-        "@babel/helper-hoist-variables": "^7.15.4",
-        "@babel/helper-split-export-declaration": "^7.15.4",
-        "@babel/parser": "^7.15.4",
-        "@babel/types": "^7.15.4",
-        "debug": "^4.1.0",
-        "globals": "^11.1.0"
-      },
-      "engines": {
-        "node": ">=6.9.0"
-      }
-    },
-    "node_modules/@babel/types": {
-      "version": "7.15.6",
-      "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.15.6.tgz",
-      "integrity": "sha512-BPU+7QhqNjmWyDO0/vitH/CuhpV8ZmK1wpKva8nuyNF5MJfuRNWMc+hc14+u9xT93kvykMdncrJT19h74uB1Ig==",
-      "dependencies": {
-        "@babel/helper-validator-identifier": "^7.14.9",
-        "to-fast-properties": "^2.0.0"
-      },
-      "engines": {
-        "node": ">=6.9.0"
-      }
-    },
     "node_modules/@es-joy/jsdoccomment": {
       "version": "0.40.1",
       "resolved": "https://registry.npmjs.org/@es-joy/jsdoccomment/-/jsdoccomment-0.40.1.tgz",
@@ -943,17 +796,6 @@
         "node": ">=8"
       }
     },
-    "node_modules/ansi-styles": {
-      "version": "3.2.1",
-      "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz",
-      "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==",
-      "dependencies": {
-        "color-convert": "^1.9.0"
-      },
-      "engines": {
-        "node": ">=4"
-      }
-    },
     "node_modules/are-docs-informative": {
       "version": "0.0.2",
       "resolved": "https://registry.npmjs.org/are-docs-informative/-/are-docs-informative-0.0.2.tgz",
@@ -975,34 +817,6 @@
         "node": ">=8"
       }
     },
-    "node_modules/babel-eslint": {
-      "version": "10.0.2",
-      "resolved": "https://registry.npmjs.org/babel-eslint/-/babel-eslint-10.0.2.tgz",
-      "integrity": "sha512-UdsurWPtgiPgpJ06ryUnuaSXC2s0WoSZnQmEpbAH65XZSdwowgN5MvyP7e88nW07FYXv72erVtpBkxyDVKhH1Q==",
-      "deprecated": "babel-eslint is now @babel/eslint-parser. This package will no longer receive updates.",
-      "dependencies": {
-        "@babel/code-frame": "^7.0.0",
-        "@babel/parser": "^7.0.0",
-        "@babel/traverse": "^7.0.0",
-        "@babel/types": "^7.0.0",
-        "eslint-scope": "3.7.1",
-        "eslint-visitor-keys": "^1.0.0"
-      },
-      "engines": {
-        "node": ">=6"
-      },
-      "peerDependencies": {
-        "eslint": ">= 4.12.1"
-      }
-    },
-    "node_modules/babel-eslint/node_modules/eslint-visitor-keys": {
-      "version": "1.3.0",
-      "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz",
-      "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==",
-      "engines": {
-        "node": ">=4"
-      }
-    },
     "node_modules/balanced-match": {
       "version": "1.0.2",
       "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz",
@@ -1066,19 +880,6 @@
         "upper-case": "^1.1.1"
       }
     },
-    "node_modules/chalk": {
-      "version": "2.4.2",
-      "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
-      "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
-      "dependencies": {
-        "ansi-styles": "^3.2.1",
-        "escape-string-regexp": "^1.0.5",
-        "supports-color": "^5.3.0"
-      },
-      "engines": {
-        "node": ">=4"
-      }
-    },
     "node_modules/clean-css": {
       "version": "4.2.4",
       "resolved": "https://registry.npmjs.org/clean-css/-/clean-css-4.2.4.tgz",
@@ -1098,19 +899,6 @@
         "node": ">=0.10.0"
       }
     },
-    "node_modules/color-convert": {
-      "version": "1.9.3",
-      "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz",
-      "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==",
-      "dependencies": {
-        "color-name": "1.1.3"
-      }
-    },
-    "node_modules/color-name": {
-      "version": "1.1.3",
-      "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz",
-      "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU="
-    },
     "node_modules/commander": {
       "version": "2.20.3",
       "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz",
@@ -1315,14 +1103,6 @@
         "url": "https://github.com/fb55/entities?sponsor=1"
       }
     },
-    "node_modules/escape-string-regexp": {
-      "version": "1.0.5",
-      "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz",
-      "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=",
-      "engines": {
-        "node": ">=0.8.0"
-      }
-    },
     "node_modules/eslint": {
       "version": "8.50.0",
       "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.50.0.tgz",
@@ -1409,18 +1189,6 @@
         "url": "https://github.com/sponsors/sindresorhus"
       }
     },
-    "node_modules/eslint-scope": {
-      "version": "3.7.1",
-      "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-3.7.1.tgz",
-      "integrity": "sha1-PWPD7f2gLgbgGkUq2IyqzHzctug=",
-      "dependencies": {
-        "esrecurse": "^4.1.0",
-        "estraverse": "^4.1.1"
-      },
-      "engines": {
-        "node": ">=4.0.0"
-      }
-    },
     "node_modules/eslint-visitor-keys": {
       "version": "3.4.3",
       "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz",
@@ -1598,14 +1366,6 @@
         "node": ">=4.0"
       }
     },
-    "node_modules/estraverse": {
-      "version": "4.3.0",
-      "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz",
-      "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==",
-      "engines": {
-        "node": ">=4.0"
-      }
-    },
     "node_modules/esutils": {
       "version": "2.0.3",
       "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz",
@@ -1765,14 +1525,6 @@
         "node": ">=10.13.0"
       }
     },
-    "node_modules/globals": {
-      "version": "11.12.0",
-      "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz",
-      "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==",
-      "engines": {
-        "node": ">=4"
-      }
-    },
     "node_modules/globby": {
       "version": "11.1.0",
       "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz",
@@ -1797,14 +1549,6 @@
       "resolved": "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz",
       "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag=="
     },
-    "node_modules/has-flag": {
-      "version": "3.0.0",
-      "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz",
-      "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=",
-      "engines": {
-        "node": ">=4"
-      }
-    },
     "node_modules/he": {
       "version": "1.2.0",
       "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz",
@@ -1932,11 +1676,6 @@
       "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz",
       "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA="
     },
-    "node_modules/js-tokens": {
-      "version": "4.0.0",
-      "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz",
-      "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ=="
-    },
     "node_modules/js-yaml": {
       "version": "4.1.0",
       "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz",
@@ -1956,17 +1695,6 @@
         "node": ">=12.0.0"
       }
     },
-    "node_modules/jsesc": {
-      "version": "2.5.2",
-      "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz",
-      "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==",
-      "bin": {
-        "jsesc": "bin/jsesc"
-      },
-      "engines": {
-        "node": ">=4"
-      }
-    },
     "node_modules/json-schema-traverse": {
       "version": "0.4.1",
       "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz",
@@ -2393,14 +2121,6 @@
         "node": ">=8"
       }
     },
-    "node_modules/source-map": {
-      "version": "0.5.7",
-      "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz",
-      "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=",
-      "engines": {
-        "node": ">=0.10.0"
-      }
-    },
     "node_modules/source-map-js": {
       "version": "1.0.2",
       "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz",
@@ -2467,17 +2187,6 @@
         "url": "https://github.com/sponsors/sindresorhus"
       }
     },
-    "node_modules/supports-color": {
-      "version": "5.5.0",
-      "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz",
-      "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==",
-      "dependencies": {
-        "has-flag": "^3.0.0"
-      },
-      "engines": {
-        "node": ">=4"
-      }
-    },
     "node_modules/svgo": {
       "version": "3.0.2",
       "resolved": "https://registry.npmjs.org/svgo/-/svgo-3.0.2.tgz",
@@ -2531,14 +2240,6 @@
       "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz",
       "integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ="
     },
-    "node_modules/to-fast-properties": {
-      "version": "2.0.0",
-      "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz",
-      "integrity": "sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=",
-      "engines": {
-        "node": ">=4"
-      }
-    },
     "node_modules/to-regex-range": {
       "version": "5.0.1",
       "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz",
@@ -2661,113 +2362,6 @@
       "resolved": "https://registry.npmjs.org/@aashutoshrathi/word-wrap/-/word-wrap-1.2.6.tgz",
       "integrity": "sha512-1Yjs2SvM8TflER/OD3cOjhWWOZb58A2t7wpE2S9XfBYTiIl+XFhQG2bjy4Pu1I+EAlCNUzRDYDdFwFYUKvXcIA=="
     },
-    "@babel/code-frame": {
-      "version": "7.14.5",
-      "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.14.5.tgz",
-      "integrity": "sha512-9pzDqyc6OLDaqe+zbACgFkb6fKMNG6CObKpnYXChRsvYGyEdc7CA2BaqeOM+vOtCS5ndmJicPJhKAwYRI6UfFw==",
-      "requires": {
-        "@babel/highlight": "^7.14.5"
-      }
-    },
-    "@babel/generator": {
-      "version": "7.15.4",
-      "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.15.4.tgz",
-      "integrity": "sha512-d3itta0tu+UayjEORPNz6e1T3FtvWlP5N4V5M+lhp/CxT4oAA7/NcScnpRyspUMLK6tu9MNHmQHxRykuN2R7hw==",
-      "requires": {
-        "@babel/types": "^7.15.4",
-        "jsesc": "^2.5.1",
-        "source-map": "^0.5.0"
-      }
-    },
-    "@babel/helper-function-name": {
-      "version": "7.15.4",
-      "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.15.4.tgz",
-      "integrity": "sha512-Z91cOMM4DseLIGOnog+Z8OI6YseR9bua+HpvLAQ2XayUGU+neTtX+97caALaLdyu53I/fjhbeCnWnRH1O3jFOw==",
-      "requires": {
-        "@babel/helper-get-function-arity": "^7.15.4",
-        "@babel/template": "^7.15.4",
-        "@babel/types": "^7.15.4"
-      }
-    },
-    "@babel/helper-get-function-arity": {
-      "version": "7.15.4",
-      "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.15.4.tgz",
-      "integrity": "sha512-1/AlxSF92CmGZzHnC515hm4SirTxtpDnLEJ0UyEMgTMZN+6bxXKg04dKhiRx5Enel+SUA1G1t5Ed/yQia0efrA==",
-      "requires": {
-        "@babel/types": "^7.15.4"
-      }
-    },
-    "@babel/helper-hoist-variables": {
-      "version": "7.15.4",
-      "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.15.4.tgz",
-      "integrity": "sha512-VTy085egb3jUGVK9ycIxQiPbquesq0HUQ+tPO0uv5mPEBZipk+5FkRKiWq5apuyTE9FUrjENB0rCf8y+n+UuhA==",
-      "requires": {
-        "@babel/types": "^7.15.4"
-      }
-    },
-    "@babel/helper-split-export-declaration": {
-      "version": "7.15.4",
-      "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.15.4.tgz",
-      "integrity": "sha512-HsFqhLDZ08DxCpBdEVtKmywj6PQbwnF6HHybur0MAnkAKnlS6uHkwnmRIkElB2Owpfb4xL4NwDmDLFubueDXsw==",
-      "requires": {
-        "@babel/types": "^7.15.4"
-      }
-    },
-    "@babel/helper-validator-identifier": {
-      "version": "7.15.7",
-      "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.15.7.tgz",
-      "integrity": "sha512-K4JvCtQqad9OY2+yTU8w+E82ywk/fe+ELNlt1G8z3bVGlZfn/hOcQQsUhGhW/N+tb3fxK800wLtKOE/aM0m72w=="
-    },
-    "@babel/highlight": {
-      "version": "7.14.5",
-      "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.14.5.tgz",
-      "integrity": "sha512-qf9u2WFWVV0MppaL877j2dBtQIDgmidgjGk5VIMw3OadXvYaXn66U1BFlH2t4+t3i+8PhedppRv+i40ABzd+gg==",
-      "requires": {
-        "@babel/helper-validator-identifier": "^7.14.5",
-        "chalk": "^2.0.0",
-        "js-tokens": "^4.0.0"
-      }
-    },
-    "@babel/parser": {
-      "version": "7.15.7",
-      "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.15.7.tgz",
-      "integrity": "sha512-rycZXvQ+xS9QyIcJ9HXeDWf1uxqlbVFAUq0Rq0dbc50Zb/+wUe/ehyfzGfm9KZZF0kBejYgxltBXocP+gKdL2g=="
-    },
-    "@babel/template": {
-      "version": "7.15.4",
-      "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.15.4.tgz",
-      "integrity": "sha512-UgBAfEa1oGuYgDIPM2G+aHa4Nlo9Lh6mGD2bDBGMTbYnc38vulXPuC1MGjYILIEmlwl6Rd+BPR9ee3gm20CBtg==",
-      "requires": {
-        "@babel/code-frame": "^7.14.5",
-        "@babel/parser": "^7.15.4",
-        "@babel/types": "^7.15.4"
-      }
-    },
-    "@babel/traverse": {
-      "version": "7.15.4",
-      "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.15.4.tgz",
-      "integrity": "sha512-W6lQD8l4rUbQR/vYgSuCAE75ADyyQvOpFVsvPPdkhf6lATXAsQIG9YdtOcu8BB1dZ0LKu+Zo3c1wEcbKeuhdlA==",
-      "requires": {
-        "@babel/code-frame": "^7.14.5",
-        "@babel/generator": "^7.15.4",
-        "@babel/helper-function-name": "^7.15.4",
-        "@babel/helper-hoist-variables": "^7.15.4",
-        "@babel/helper-split-export-declaration": "^7.15.4",
-        "@babel/parser": "^7.15.4",
-        "@babel/types": "^7.15.4",
-        "debug": "^4.1.0",
-        "globals": "^11.1.0"
-      }
-    },
-    "@babel/types": {
-      "version": "7.15.6",
-      "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.15.6.tgz",
-      "integrity": "sha512-BPU+7QhqNjmWyDO0/vitH/CuhpV8ZmK1wpKva8nuyNF5MJfuRNWMc+hc14+u9xT93kvykMdncrJT19h74uB1Ig==",
-      "requires": {
-        "@babel/helper-validator-identifier": "^7.14.9",
-        "to-fast-properties": "^2.0.0"
-      }
-    },
     "@es-joy/jsdoccomment": {
       "version": "0.40.1",
       "resolved": "https://registry.npmjs.org/@es-joy/jsdoccomment/-/jsdoccomment-0.40.1.tgz",
@@ -3361,14 +2955,6 @@
       "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz",
       "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ=="
     },
-    "ansi-styles": {
-      "version": "3.2.1",
-      "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz",
-      "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==",
-      "requires": {
-        "color-convert": "^1.9.0"
-      }
-    },
     "are-docs-informative": {
       "version": "0.0.2",
       "resolved": "https://registry.npmjs.org/are-docs-informative/-/are-docs-informative-0.0.2.tgz",
@@ -3384,26 +2970,6 @@
       "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz",
       "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw=="
     },
-    "babel-eslint": {
-      "version": "10.0.2",
-      "resolved": "https://registry.npmjs.org/babel-eslint/-/babel-eslint-10.0.2.tgz",
-      "integrity": "sha512-UdsurWPtgiPgpJ06ryUnuaSXC2s0WoSZnQmEpbAH65XZSdwowgN5MvyP7e88nW07FYXv72erVtpBkxyDVKhH1Q==",
-      "requires": {
-        "@babel/code-frame": "^7.0.0",
-        "@babel/parser": "^7.0.0",
-        "@babel/traverse": "^7.0.0",
-        "@babel/types": "^7.0.0",
-        "eslint-scope": "3.7.1",
-        "eslint-visitor-keys": "^1.0.0"
-      },
-      "dependencies": {
-        "eslint-visitor-keys": {
-          "version": "1.3.0",
-          "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz",
-          "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ=="
-        }
-      }
-    },
     "balanced-match": {
       "version": "1.0.2",
       "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz",
@@ -3455,16 +3021,6 @@
         "upper-case": "^1.1.1"
       }
     },
-    "chalk": {
-      "version": "2.4.2",
-      "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
-      "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
-      "requires": {
-        "ansi-styles": "^3.2.1",
-        "escape-string-regexp": "^1.0.5",
-        "supports-color": "^5.3.0"
-      }
-    },
     "clean-css": {
       "version": "4.2.4",
       "resolved": "https://registry.npmjs.org/clean-css/-/clean-css-4.2.4.tgz",
@@ -3480,19 +3036,6 @@
         }
       }
     },
-    "color-convert": {
-      "version": "1.9.3",
-      "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz",
-      "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==",
-      "requires": {
-        "color-name": "1.1.3"
-      }
-    },
-    "color-name": {
-      "version": "1.1.3",
-      "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz",
-      "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU="
-    },
     "commander": {
       "version": "2.20.3",
       "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz",
@@ -3635,11 +3178,6 @@
       "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz",
       "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw=="
     },
-    "escape-string-regexp": {
-      "version": "1.0.5",
-      "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz",
-      "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ="
-    },
     "eslint": {
       "version": "8.50.0",
       "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.50.0.tgz",
@@ -3779,15 +3317,6 @@
         }
       }
     },
-    "eslint-scope": {
-      "version": "3.7.1",
-      "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-3.7.1.tgz",
-      "integrity": "sha1-PWPD7f2gLgbgGkUq2IyqzHzctug=",
-      "requires": {
-        "esrecurse": "^4.1.0",
-        "estraverse": "^4.1.1"
-      }
-    },
     "eslint-visitor-keys": {
       "version": "3.4.3",
       "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz",
@@ -3833,11 +3362,6 @@
         }
       }
     },
-    "estraverse": {
-      "version": "4.3.0",
-      "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz",
-      "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw=="
-    },
     "esutils": {
       "version": "2.0.3",
       "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz",
@@ -3959,11 +3483,6 @@
         "is-glob": "^4.0.3"
       }
     },
-    "globals": {
-      "version": "11.12.0",
-      "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz",
-      "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA=="
-    },
     "globby": {
       "version": "11.1.0",
       "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz",
@@ -3982,11 +3501,6 @@
       "resolved": "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz",
       "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag=="
     },
-    "has-flag": {
-      "version": "3.0.0",
-      "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz",
-      "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0="
-    },
     "he": {
       "version": "1.2.0",
       "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz",
@@ -4075,11 +3589,6 @@
       "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz",
       "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA="
     },
-    "js-tokens": {
-      "version": "4.0.0",
-      "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz",
-      "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ=="
-    },
     "js-yaml": {
       "version": "4.1.0",
       "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz",
@@ -4093,11 +3602,6 @@
       "resolved": "https://registry.npmjs.org/jsdoc-type-pratt-parser/-/jsdoc-type-pratt-parser-4.0.0.tgz",
       "integrity": "sha512-YtOli5Cmzy3q4dP26GraSOeAhqecewG04hoO8DY56CH4KJ9Fvv5qKWUCCo3HZob7esJQHCv6/+bnTy72xZZaVQ=="
     },
-    "jsesc": {
-      "version": "2.5.2",
-      "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz",
-      "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA=="
-    },
     "json-schema-traverse": {
       "version": "0.4.1",
       "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz",
@@ -4394,11 +3898,6 @@
       "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz",
       "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q=="
     },
-    "source-map": {
-      "version": "0.5.7",
-      "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz",
-      "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w="
-    },
     "source-map-js": {
       "version": "1.0.2",
       "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz",
@@ -4452,14 +3951,6 @@
       "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz",
       "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig=="
     },
-    "supports-color": {
-      "version": "5.5.0",
-      "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz",
-      "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==",
-      "requires": {
-        "has-flag": "^3.0.0"
-      }
-    },
     "svgo": {
       "version": "3.0.2",
       "resolved": "https://registry.npmjs.org/svgo/-/svgo-3.0.2.tgz",
@@ -4496,11 +3987,6 @@
       "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz",
       "integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ="
     },
-    "to-fast-properties": {
-      "version": "2.0.0",
-      "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz",
-      "integrity": "sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4="
-    },
     "to-regex-range": {
       "version": "5.0.1",
       "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz",
diff --git a/third_party/node/package.json b/third_party/node/package.json
index 4872d285..86b4c28 100644
--- a/third_party/node/package.json
+++ b/third_party/node/package.json
@@ -20,7 +20,6 @@
     "@types/wicg-file-system-access": "2020.09.05",
     "@typescript-eslint/eslint-plugin": "6.7.4",
     "@typescript-eslint/parser": "6.7.4",
-    "babel-eslint": "10.0.2",
     "eslint": "8.50.0",
     "eslint-plugin-jsdoc": "46.8.2",
     "html-minifier": "4.0.0",
diff --git a/third_party/screen-ai/BUILD.gn b/third_party/screen-ai/BUILD.gn
new file mode 100644
index 0000000..a9c61496
--- /dev/null
+++ b/third_party/screen-ai/BUILD.gn
@@ -0,0 +1,11 @@
+# Copyright 2023 The Chromium Authors. All rights reserved.
+# Use of this source code is governed by a BSD-style license that can be
+# found in the LICENSE file.
+
+group("screen_ai_linux") {
+  # Note that this group depends on data that must be used only for test. If we
+  # need to remove/update the testonly variable below, we must go through a
+  # security review.
+  testonly = true
+  data_deps = [ "//third_party/screen-ai/linux:screen_ai_resources" ]
+}
diff --git a/third_party/android_deps/libs/org_tensorflow_tensorflow_lite_api/LICENSE b/third_party/screen-ai/LICENSE
similarity index 89%
rename from third_party/android_deps/libs/org_tensorflow_tensorflow_lite_api/LICENSE
rename to third_party/screen-ai/LICENSE
index d645695..8c0497a 100644
--- a/third_party/android_deps/libs/org_tensorflow_tensorflow_lite_api/LICENSE
+++ b/third_party/screen-ai/LICENSE
@@ -1,4 +1,5 @@
-
+- Eigen is licensed for use as follows:
+/*
                                  Apache License
                            Version 2.0, January 2004
                         http://www.apache.org/licenses/
@@ -175,28 +176,4 @@
       of your accepting any such warranty or additional liability.
 
    END OF TERMS AND CONDITIONS
-
-   APPENDIX: How to apply the Apache License to your work.
-
-      To apply the Apache License to your work, attach the following
-      boilerplate notice, with the fields enclosed by brackets "[]"
-      replaced with your own identifying information. (Don't include
-      the brackets!)  The text should be enclosed in the appropriate
-      comment syntax for the file format. We also recommend that a
-      file or class name and description of purpose be included on the
-      same "printed page" as the copyright notice for easier
-      identification within third-party archives.
-
-   Copyright [yyyy] [name of copyright owner]
-
-   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.
+*/
diff --git a/third_party/screen-ai/OWNERS b/third_party/screen-ai/OWNERS
new file mode 100644
index 0000000..19b1eb5
--- /dev/null
+++ b/third_party/screen-ai/OWNERS
@@ -0,0 +1,2 @@
+rhalavati@chromium.org
+kyungjunlee@google.com
diff --git a/third_party/screen-ai/README.chromium b/third_party/screen-ai/README.chromium
new file mode 100644
index 0000000..cfc01f6
--- /dev/null
+++ b/third_party/screen-ai/README.chromium
@@ -0,0 +1,35 @@
+Name: ScreenAI Library
+Short Name: screen-ai
+URL: https://source.corp.google.com/piper///depot/google3/chrome/accessibility/machine_intelligence/chrome_screen_ai/README.md
+Version: 121.2
+Shipped: yes
+Security Critical: no
+
+Description:
+Provides ML models for Reading Mode and PDF OCR. Chrome downloads the binary of
+this library via Component Updater on Windows, Linux, and macOS, but Component
+Updater is not supported in browser tests. Only for browser tests on those
+platforms, the binary will be downloaded from CIPD and used in tests.
+
+Note that this binary is shipped to Chrome via Component Updater from
+(only Googler can access the following) go/chrome_screen_ai_source on Windows,
+Linux, and macOS, but metadata for credits is kept in this directory for license
+attribution.
+
+-------------------- DEPENDENCY DIVIDER --------------------
+
+Name: Eigen
+Short Name: eigen
+URL: https://gitlab.com/libeigen/eigen
+Version: 3.4
+License: Apache 2.0
+License File: LICENSE
+Shipped: yes
+Security Critical: no
+
+Description:
+Eigen is a C++ template library for linear algebra, matrices, vectors,
+numerical solvers, and related algorithms.
+
+Local Modifications:
+(none)
diff --git a/third_party/sqlite/src b/third_party/sqlite/src
index a5ab5b2..a5270ae 160000
--- a/third_party/sqlite/src
+++ b/third_party/sqlite/src
@@ -1 +1 @@
-Subproject commit a5ab5b2b89889c590b3496882f667d8d69569ee6
+Subproject commit a5270ae741714a5aad187ba8dcd8bddca39f791f
diff --git a/third_party/webrtc b/third_party/webrtc
index 4931512..c039e83 160000
--- a/third_party/webrtc
+++ b/third_party/webrtc
@@ -1 +1 @@
-Subproject commit 4931512cb01c1932299db3cd7c822b08dd812125
+Subproject commit c039e836f30450f07a815a7e16a19bd3dee3d22d
diff --git a/tools/clang/scripts/build.py b/tools/clang/scripts/build.py
index 6e6bf70..d3e8e8d 100755
--- a/tools/clang/scripts/build.py
+++ b/tools/clang/scripts/build.py
@@ -1282,10 +1282,8 @@
       target_triple = target_arch
       if target_arch == 'arm':
         target_triple = 'armv7'
-      api_level = '19'
-      if target_arch == 'aarch64' or target_arch == 'x86_64':
-        api_level = '21'
-      elif target_arch == 'riscv64':
+      api_level = '21'
+      if target_arch == 'riscv64':
         api_level = '35'
         toolchain_dir = ANDROID_NDK_CANARY_TOOLCHAIN_DIR
       target_triple += '-linux-android' + api_level
diff --git a/tools/clang/scripts/update.py b/tools/clang/scripts/update.py
index 1aae35cd..bf5dfc3 100755
--- a/tools/clang/scripts/update.py
+++ b/tools/clang/scripts/update.py
@@ -36,7 +36,7 @@
 # Reverting problematic clang rolls is safe, though.
 # This is the output of `git describe` and is usable as a commit-ish.
 CLANG_REVISION = 'llvmorg-18-init-14420-gea3a3b25'
-CLANG_SUB_REVISION = 2
+CLANG_SUB_REVISION = 3
 
 PACKAGE_VERSION = '%s-%s' % (CLANG_REVISION, CLANG_SUB_REVISION)
 RELEASE_VERSION = '18'
diff --git a/tools/metrics/actions/actions.xml b/tools/metrics/actions/actions.xml
index 0f15b9d..6815365 100644
--- a/tools/metrics/actions/actions.xml
+++ b/tools/metrics/actions/actions.xml
@@ -29776,6 +29776,13 @@
   </description>
 </action>
 
+<action name="ReadAloud.PlaybackStarted">
+  <owner>andreaxg@google.com</owner>
+  <owner>basiaz@google.com</owner>
+  <owner>iwells@chromium.org</owner>
+  <description>The user started a Read Aloud playback.</description>
+</action>
+
 <action name="ReadingList.Dialog.AddCurrentPage">
   <owner>corising@chromium.org</owner>
   <owner>chrome-desktop-ui-sea@google.com</owner>
diff --git a/tools/metrics/histograms/enums.xml b/tools/metrics/histograms/enums.xml
index da0a072..197fd69 100644
--- a/tools/metrics/histograms/enums.xml
+++ b/tools/metrics/histograms/enums.xml
@@ -5784,16 +5784,6 @@
   <int value="4" label="NetworkExceedsBufferLimit"/>
 </enum>
 
-<enum name="BackgroundHostCreatedForExtensionValues">
-  <int value="0" label="Other extension"/>
-  <int value="1"
-      label="Google Docs Offline (ghbmnnjooekpmoecnnnilnnbdlolhkhi)"/>
-  <int value="2"
-      label="In-App Payment Support (nmmhkkegccagdldgiimedpiccmgmieda)"/>
-  <int value="3"
-      label="Assessment Assistant (gndmhdcefbhlchkhipcnnbkcmicncehk)"/>
-</enum>
-
 <enum name="BackgroundResourceFetchSupportStatus">
   <int value="0" label="Supported"/>
   <int value="1" label="Unsupported sync request"/>
@@ -5853,14 +5843,6 @@
   <int value="20" label="Saving trace succeeded"/>
 </enum>
 
-<enum name="BadSyncDataReason">
-  <int value="0" label="Bad extension ID"/>
-  <int value="1" label="Bad version"/>
-  <int value="2" label="Bad update URL"/>
-  <int value="3" label="No ExtensionSpecifics"/>
-  <int value="4" label="Bad disable reasons"/>
-</enum>
-
 <enum name="BatteryDischargeMode">
   <int value="0" label="Battery discharging"/>
   <int value="1" label="Battery plugged-in"/>
@@ -6384,11 +6366,6 @@
   <int value="1" label="Has user activation"/>
 </enum>
 
-<enum name="BooleanHasWithheldHosts">
-  <int value="0" label="Does not have withheld hosts"/>
-  <int value="1" label="Has withheld hosts"/>
-</enum>
-
 <enum name="BooleanHiddenPresentationalAutofilled">
   <int value="0" label="Skipped"/>
   <int value="1" label="Autofilled"/>
@@ -9475,18 +9452,6 @@
   <int value="6" label="ORB wants to sniff more"/>
 </enum>
 
-<enum name="CorruptExtensionDisabledReason">
-  <summary>
-    The reason why content verification flagged an extension as corrupted. See
-    ContentVerifyJob::FailureReason in
-    src/extensions/browser/content_verify_job.h.
-  </summary>
-  <int value="0" label="Unknown Reason"/>
-  <int value="1" label="Missing All Hashes"/>
-  <int value="2" label="Missing File Hash"/>
-  <int value="3" label="Hash Mismatch"/>
-</enum>
-
 <enum name="CorruptionStates">
   <int value="0" label="Mount Failed"/>
   <int value="1" label="Rolled Back During Mount"/>
@@ -10974,24 +10939,6 @@
   <int value="50" label="Error - Not Container"/>
 </enum>
 
-<enum name="DeclarativeAPIFunctionType">
-  <int value="0" label="kDeclarativeContentAddRules"/>
-  <int value="1" label="kDeclarativeContentRemoveRules"/>
-  <int value="2" label="kDeclarativeContentGetRules"/>
-  <int value="3" label="kDeclarativeWebRequestAddRules"/>
-  <int value="4" label="kDeclarativeWebRequestRemoveRules"/>
-  <int value="5" label="kDeclarativeWebRequestGetRules"/>
-  <int value="6" label="kDeclarativeWebRequestWebviewAddRules"/>
-  <int value="7" label="kDeclarativeWebRequestWebviewRemoveRules"/>
-  <int value="8" label="kDeclarativeWebRequestWebviewGetRules"/>
-</enum>
-
-<enum name="DeclarativeContentActionType">
-  <int value="0" label="kShowAction"/>
-  <int value="1" label="kSetIcon"/>
-  <int value="2" label="kRequestContentScript"/>
-</enum>
-
 <enum name="DecodedImageType">
   <int value="0" label="kImageUnknown"/>
   <int value="1" label="kImageJPEG"/>
@@ -13907,2626 +13854,6 @@
   </int>
 </enum>
 
-<enum name="ExtensionActionInvocationSource">
-  <int value="0" label="Keyboard Shortcut"/>
-  <int value="1" label="Toolbar Button"/>
-  <int value="2" label="Extensions Menu Entry"/>
-  <int value="3" label="Legacy Overflow Menu Entry"/>
-  <int value="4" label="Programmatic API Call"/>
-</enum>
-
-<enum name="ExtensionAllowlistOmahaAttributeValue">
-  <int value="0" label="Undefined"/>
-  <int value="1" label="Allowlisted"/>
-  <int value="2" label="Not allowlisted"/>
-</enum>
-
-<enum name="ExtensionBackgroundPageType">
-  <int value="0" label="None"/>
-  <int value="1" label="Persistent"/>
-  <int value="2" label="Event Page"/>
-  <int value="3" label="Service worker"/>
-</enum>
-
-<enum name="ExtensionContextMenuAction">
-  <int value="0" label="kNoAction"/>
-  <int value="1" label="kCustomCommand"/>
-  <int value="2" label="kHomePage"/>
-  <int value="3" label="kOptions"/>
-  <int value="4" label="kToggleVisibility"/>
-  <int value="5" label="kUninstall"/>
-  <int value="6" label="kManageExtensions"/>
-  <int value="7" label="kInspectPopup"/>
-  <int value="8" label="kPageAccessRunOnClick"/>
-  <int value="9" label="kPageAccessRunOnSite"/>
-  <int value="10" label="kPageAccessRunOnAllSites"/>
-  <int value="11" label="kPageAccessLearnMore"/>
-  <int value="12" label="kPageAccessPermissionsPage"/>
-  <int value="13" label="kViewWebPermissions"/>
-  <int value="14" label="kPolicyInstalled"/>
-  <int value="15" label="kToggleSidePanelVisibility"/>
-</enum>
-
-<enum name="ExtensionDisableReason">
-  <int value="0" label="UNKNOWN"/>
-  <int value="1" label="USER_ACTION"/>
-  <int value="2" label="PERMISSIONS_INCREASE"/>
-  <int value="4" label="RELOAD"/>
-  <int value="8" label="UNSUPPORTED_REQUIREMENT"/>
-  <int value="16" label="SIDELOAD_WIPEOUT"/>
-  <int value="32" label="UNKNOWN_FROM_SYNC"/>
-  <int value="64" label="DEPRECATED_PERMISSIONS_CONSENT"/>
-  <int value="128" label="DEPRECATED_KNOWN_DISABLED"/>
-  <int value="256" label="NOT_VERIFIED"/>
-  <int value="512" label="GREYLIST"/>
-  <int value="1024" label="CORRUPTED"/>
-  <int value="2048" label="REMOTE_INSTALL"/>
-  <int value="4096" label="INACTIVE_EPHEMERAL_APP_DEPRECATED"/>
-  <int value="8192" label="EXTERNAL_EXTENSION"/>
-  <int value="16384" label="UPDATE_REQUIRED_BY_POLICY"/>
-  <int value="32768" label="CUSTODIAN_APPROVAL_REQUIRED"/>
-  <int value="65536" label="BLOCKED_BY_POLICY"/>
-  <int value="131072" label="DEPRECATED_BLOCKED_MATURE"/>
-  <int value="262144" label="DEPRECATED_DISABLE_REMOTELY_FOR_MALWARE"/>
-  <int value="524288" label="DISABLE_REINSTALL"/>
-  <int value="1048576" label="DISABLE_NOT_ALLOWLISTED"/>
-  <int value="2097152" label="DISABLE_NOT_ASH_KEEPLISTED"/>
-  <int value="4194304" label="DISABLE_PUBLISHED_IN_STORE_REQUIRED_BY_POLICY"/>
-</enum>
-
-<enum name="ExtensionEvents">
-<!-- Generated from extensions/browser/extension_event_histogram_value.h.
-Called by update_extension_histograms.py.-->
-
-  <int value="0" label="UNKNOWN"/>
-  <int value="1" label="FOR_TEST"/>
-  <int value="2" label="ACCESSIBILITY_PRIVATE_ON_INTRODUCE_CHROME_VOX"/>
-  <int value="3" label="ACTIVITY_LOG_PRIVATE_ON_EXTENSION_ACTIVITY"/>
-  <int value="4" label="ALARMS_ON_ALARM"/>
-  <int value="5" label="APP_CURRENT_WINDOW_INTERNAL_ON_ALPHA_ENABLED_CHANGED"/>
-  <int value="6" label="APP_CURRENT_WINDOW_INTERNAL_ON_BOUNDS_CHANGED"/>
-  <int value="7" label="APP_CURRENT_WINDOW_INTERNAL_ON_CLOSED"/>
-  <int value="8" label="APP_CURRENT_WINDOW_INTERNAL_ON_FULLSCREENED"/>
-  <int value="9" label="APP_CURRENT_WINDOW_INTERNAL_ON_MAXIMIZED"/>
-  <int value="10" label="APP_CURRENT_WINDOW_INTERNAL_ON_MINIMIZED"/>
-  <int value="11" label="APP_CURRENT_WINDOW_INTERNAL_ON_RESTORED"/>
-  <int value="12"
-      label="APP_CURRENT_WINDOW_INTERNAL_ON_WINDOW_SHOWN_FOR_TESTS"/>
-  <int value="13" label="APP_RUNTIME_ON_EMBED_REQUESTED"/>
-  <int value="14" label="APP_RUNTIME_ON_LAUNCHED"/>
-  <int value="15" label="APP_RUNTIME_ON_RESTARTED"/>
-  <int value="16" label="APP_WINDOW_ON_BOUNDS_CHANGED"/>
-  <int value="17" label="APP_WINDOW_ON_CLOSED"/>
-  <int value="18" label="APP_WINDOW_ON_FULLSCREENED"/>
-  <int value="19" label="APP_WINDOW_ON_MAXIMIZED"/>
-  <int value="20" label="APP_WINDOW_ON_MINIMIZED"/>
-  <int value="21" label="APP_WINDOW_ON_RESTORED"/>
-  <int value="22" label="DELETED_AUDIO_MODEM_ON_RECEIVED"/>
-  <int value="23" label="DELETED_AUDIO_MODEM_ON_TRANSMIT_FAIL"/>
-  <int value="24" label="DELETED_AUDIO_ON_DEVICE_CHANGED"/>
-  <int value="25" label="AUDIO_ON_DEVICES_CHANGED"/>
-  <int value="26" label="AUDIO_ON_LEVEL_CHANGED"/>
-  <int value="27" label="AUDIO_ON_MUTE_CHANGED"/>
-  <int value="28" label="AUTOFILL_PRIVATE_ON_ADDRESS_LIST_CHANGED_DEPRECATED"/>
-  <int value="29"
-      label="AUTOFILL_PRIVATE_ON_CREDIT_CARD_LIST_CHANGED_DEPRECATED"/>
-  <int value="30" label="AUTOMATION_INTERNAL_ON_ACCESSIBILITY_EVENT"/>
-  <int value="31" label="AUTOMATION_INTERNAL_ON_ACCESSIBILITY_TREE_DESTROYED"/>
-  <int value="32" label="BLUETOOTH_LOW_ENERGY_ON_CHARACTERISTIC_VALUE_CHANGED"/>
-  <int value="33" label="BLUETOOTH_LOW_ENERGY_ON_DESCRIPTOR_VALUE_CHANGED"/>
-  <int value="34" label="BLUETOOTH_LOW_ENERGY_ON_SERVICE_ADDED"/>
-  <int value="35" label="BLUETOOTH_LOW_ENERGY_ON_SERVICE_CHANGED"/>
-  <int value="36" label="BLUETOOTH_LOW_ENERGY_ON_SERVICE_REMOVED"/>
-  <int value="37" label="BLUETOOTH_ON_ADAPTER_STATE_CHANGED"/>
-  <int value="38" label="BLUETOOTH_ON_DEVICE_ADDED"/>
-  <int value="39" label="BLUETOOTH_ON_DEVICE_CHANGED"/>
-  <int value="40" label="BLUETOOTH_ON_DEVICE_REMOVED"/>
-  <int value="41" label="BLUETOOTH_PRIVATE_ON_PAIRING"/>
-  <int value="42" label="BLUETOOTH_SOCKET_ON_ACCEPT"/>
-  <int value="43" label="BLUETOOTH_SOCKET_ON_ACCEPT_ERROR"/>
-  <int value="44" label="BLUETOOTH_SOCKET_ON_RECEIVE"/>
-  <int value="45" label="BLUETOOTH_SOCKET_ON_RECEIVE_ERROR"/>
-  <int value="46" label="BOOKMARK_MANAGER_PRIVATE_ON_DRAG_ENTER"/>
-  <int value="47" label="BOOKMARK_MANAGER_PRIVATE_ON_DRAG_LEAVE"/>
-  <int value="48" label="BOOKMARK_MANAGER_PRIVATE_ON_DROP"/>
-  <int value="49" label="BOOKMARK_MANAGER_PRIVATE_ON_META_INFO_CHANGED"/>
-  <int value="50" label="BOOKMARKS_ON_CHANGED"/>
-  <int value="51" label="BOOKMARKS_ON_CHILDREN_REORDERED"/>
-  <int value="52" label="BOOKMARKS_ON_CREATED"/>
-  <int value="53" label="BOOKMARKS_ON_IMPORT_BEGAN"/>
-  <int value="54" label="BOOKMARKS_ON_IMPORT_ENDED"/>
-  <int value="55" label="BOOKMARKS_ON_MOVED"/>
-  <int value="56" label="BOOKMARKS_ON_REMOVED"/>
-  <int value="57" label="BRAILLE_DISPLAY_PRIVATE_ON_DISPLAY_STATE_CHANGED"/>
-  <int value="58" label="BRAILLE_DISPLAY_PRIVATE_ON_KEY_EVENT"/>
-  <int value="59" label="BROWSER_ACTION_ON_CLICKED"/>
-  <int value="60" label="DELETED_CAST_STREAMING_RTP_STREAM_ON_ERROR"/>
-  <int value="61" label="DELETED_CAST_STREAMING_RTP_STREAM_ON_STARTED"/>
-  <int value="62" label="DELETED_CAST_STREAMING_RTP_STREAM_ON_STOPPED"/>
-  <int value="63" label="COMMANDS_ON_COMMAND"/>
-  <int value="64" label="CONTEXT_MENUS_INTERNAL_ON_CLICKED"/>
-  <int value="65" label="CONTEXT_MENUS_ON_CLICKED"/>
-  <int value="66" label="COOKIES_ON_CHANGED"/>
-  <int value="67" label="DELETED_COPRESENCE_ON_MESSAGES_RECEIVED"/>
-  <int value="68" label="DELETED_COPRESENCE_ON_STATUS_UPDATED"/>
-  <int value="69" label="DELETED_COPRESENCE_PRIVATE_ON_CONFIG_AUDIO"/>
-  <int value="70" label="DELETED_COPRESENCE_PRIVATE_ON_DECODE_SAMPLES_REQUEST"/>
-  <int value="71" label="DELETED_COPRESENCE_PRIVATE_ON_ENCODE_TOKEN_REQUEST"/>
-  <int value="72" label="DEBUGGER_ON_DETACH"/>
-  <int value="73" label="DEBUGGER_ON_EVENT"/>
-  <int value="74" label="DECLARATIVE_CONTENT_ON_PAGE_CHANGED"/>
-  <int value="75" label="DECLARATIVE_WEB_REQUEST_ON_MESSAGE"/>
-  <int value="76" label="DECLARATIVE_WEB_REQUEST_ON_REQUEST"/>
-  <int value="77" label="DEVELOPER_PRIVATE_ON_ITEM_STATE_CHANGED"/>
-  <int value="78" label="DEVELOPER_PRIVATE_ON_PROFILE_STATE_CHANGED"/>
-  <int value="79" label="DEVTOOLS_INSPECTED_WINDOW_ON_RESOURCE_ADDED"/>
-  <int value="80"
-      label="DEVTOOLS_INSPECTED_WINDOW_ON_RESOURCE_CONTENT_COMMITTED"/>
-  <int value="81" label="DEVTOOLS_NETWORK_ON_NAVIGATED"/>
-  <int value="82" label="DEVTOOLS_NETWORK_ON_REQUEST_FINISHED"/>
-  <int value="83" label="DOWNLOADS_ON_CHANGED"/>
-  <int value="84" label="DOWNLOADS_ON_CREATED"/>
-  <int value="85" label="DOWNLOADS_ON_DETERMINING_FILENAME"/>
-  <int value="86" label="DOWNLOADS_ON_ERASED"/>
-  <int value="87" label="DELETED_EASY_UNLOCK_PRIVATE_ON_START_AUTO_PAIRING"/>
-  <int value="88" label="DELETED_EASY_UNLOCK_PRIVATE_ON_USER_INFO_UPDATED"/>
-  <int value="89" label="DELETED_EXPERIENCE_SAMPLING_PRIVATE_ON_DECISION"/>
-  <int value="90" label="DELETED_EXPERIENCE_SAMPLING_PRIVATE_ON_DISPLAYED"/>
-  <int value="91" label="EXPERIMENTAL_DEVTOOLS_CONSOLE_ON_MESSAGE_ADDED"/>
-  <int value="92" label="EXTENSION_ON_REQUEST"/>
-  <int value="93" label="EXTENSION_ON_REQUEST_EXTERNAL"/>
-  <int value="94" label="EXTENSION_OPTIONS_INTERNAL_ON_CLOSE"/>
-  <int value="95" label="EXTENSION_OPTIONS_INTERNAL_ON_LOAD"/>
-  <int value="96" label="EXTENSION_OPTIONS_INTERNAL_ON_PREFERRED_SIZE_CHANGED"/>
-  <int value="97" label="FEEDBACK_PRIVATE_ON_FEEDBACK_REQUESTED"/>
-  <int value="98" label="FILE_BROWSER_HANDLER_ON_EXECUTE"/>
-  <int value="99" label="FILE_MANAGER_PRIVATE_ON_COPY_PROGRESS"/>
-  <int value="100" label="FILE_MANAGER_PRIVATE_ON_DEVICE_CHANGED"/>
-  <int value="101" label="FILE_MANAGER_PRIVATE_ON_DIRECTORY_CHANGED"/>
-  <int value="102"
-      label="FILE_MANAGER_PRIVATE_ON_DRIVE_CONNECTION_STATUS_CHANGED"/>
-  <int value="103" label="FILE_MANAGER_PRIVATE_ON_DRIVE_SYNC_ERROR"/>
-  <int value="104" label="FILE_MANAGER_PRIVATE_ON_FILE_TRANSFERS_UPDATED"/>
-  <int value="105" label="FILE_MANAGER_PRIVATE_ON_MOUNT_COMPLETED"/>
-  <int value="106" label="FILE_MANAGER_PRIVATE_ON_PREFERENCES_CHANGED"/>
-  <int value="107" label="FILE_SYSTEM_ON_VOLUME_LIST_CHANGED"/>
-  <int value="108" label="FILE_SYSTEM_PROVIDER_ON_ABORT_REQUESTED"/>
-  <int value="109" label="FILE_SYSTEM_PROVIDER_ON_ADD_WATCHER_REQUESTED"/>
-  <int value="110" label="FILE_SYSTEM_PROVIDER_ON_CLOSE_FILE_REQUESTED"/>
-  <int value="111" label="FILE_SYSTEM_PROVIDER_ON_CONFIGURE_REQUESTED"/>
-  <int value="112" label="FILE_SYSTEM_PROVIDER_ON_COPY_ENTRY_REQUESTED"/>
-  <int value="113" label="FILE_SYSTEM_PROVIDER_ON_CREATE_DIRECTORY_REQUESTED"/>
-  <int value="114" label="FILE_SYSTEM_PROVIDER_ON_CREATE_FILE_REQUESTED"/>
-  <int value="115" label="FILE_SYSTEM_PROVIDER_ON_DELETE_ENTRY_REQUESTED"/>
-  <int value="116" label="FILE_SYSTEM_PROVIDER_ON_GET_METADATA_REQUESTED"/>
-  <int value="117" label="FILE_SYSTEM_PROVIDER_ON_MOUNT_REQUESTED"/>
-  <int value="118" label="FILE_SYSTEM_PROVIDER_ON_MOVE_ENTRY_REQUESTED"/>
-  <int value="119" label="FILE_SYSTEM_PROVIDER_ON_OPEN_FILE_REQUESTED"/>
-  <int value="120" label="FILE_SYSTEM_PROVIDER_ON_READ_DIRECTORY_REQUESTED"/>
-  <int value="121" label="FILE_SYSTEM_PROVIDER_ON_READ_FILE_REQUESTED"/>
-  <int value="122" label="FILE_SYSTEM_PROVIDER_ON_REMOVE_WATCHER_REQUESTED"/>
-  <int value="123" label="FILE_SYSTEM_PROVIDER_ON_TRUNCATE_REQUESTED"/>
-  <int value="124" label="FILE_SYSTEM_PROVIDER_ON_UNMOUNT_REQUESTED"/>
-  <int value="125" label="FILE_SYSTEM_PROVIDER_ON_WRITE_FILE_REQUESTED"/>
-  <int value="126" label="FONT_SETTINGS_ON_DEFAULT_FIXED_FONT_SIZE_CHANGED"/>
-  <int value="127" label="FONT_SETTINGS_ON_DEFAULT_FONT_SIZE_CHANGED"/>
-  <int value="128" label="FONT_SETTINGS_ON_FONT_CHANGED"/>
-  <int value="129" label="FONT_SETTINGS_ON_MINIMUM_FONT_SIZE_CHANGED"/>
-  <int value="130" label="DELETED_GCD_PRIVATE_ON_DEVICE_REMOVED"/>
-  <int value="131" label="DELETED_GCD_PRIVATE_ON_DEVICE_STATE_CHANGED"/>
-  <int value="132" label="GCM_ON_MESSAGE"/>
-  <int value="133" label="GCM_ON_MESSAGES_DELETED"/>
-  <int value="134" label="GCM_ON_SEND_ERROR"/>
-  <int value="135" label="HANGOUTS_PRIVATE_ON_HANGOUT_REQUESTED_DEPRECATED"/>
-  <int value="136" label="HID_ON_DEVICE_ADDED"/>
-  <int value="137" label="HID_ON_DEVICE_REMOVED"/>
-  <int value="138" label="HISTORY_ON_VISITED"/>
-  <int value="139" label="HISTORY_ON_VISIT_REMOVED"/>
-  <int value="140" label="HOTWORD_PRIVATE_ON_DELETE_SPEAKER_MODEL"/>
-  <int value="141" label="HOTWORD_PRIVATE_ON_ENABLED_CHANGED"/>
-  <int value="142" label="HOTWORD_PRIVATE_ON_FINALIZE_SPEAKER_MODEL"/>
-  <int value="143" label="HOTWORD_PRIVATE_ON_HOTWORD_SESSION_REQUESTED"/>
-  <int value="144" label="HOTWORD_PRIVATE_ON_HOTWORD_SESSION_STOPPED"/>
-  <int value="145" label="HOTWORD_PRIVATE_ON_HOTWORD_TRIGGERED"/>
-  <int value="146" label="HOTWORD_PRIVATE_ON_MICROPHONE_STATE_CHANGED"/>
-  <int value="147" label="HOTWORD_PRIVATE_ON_SPEAKER_MODEL_EXISTS"/>
-  <int value="148" label="HOTWORD_PRIVATE_ON_SPEAKER_MODEL_SAVED"/>
-  <int value="149" label="IDENTITY_ON_SIGN_IN_CHANGED"/>
-  <int value="150" label="DELETED_IDENTITY_PRIVATE_ON_WEB_FLOW_REQUEST"/>
-  <int value="151" label="IDLE_ON_STATE_CHANGED"/>
-  <int value="152" label="IMAGE_WRITER_PRIVATE_ON_DEVICE_INSERTED"/>
-  <int value="153" label="IMAGE_WRITER_PRIVATE_ON_DEVICE_REMOVED"/>
-  <int value="154" label="IMAGE_WRITER_PRIVATE_ON_WRITE_COMPLETE"/>
-  <int value="155" label="IMAGE_WRITER_PRIVATE_ON_WRITE_ERROR"/>
-  <int value="156" label="IMAGE_WRITER_PRIVATE_ON_WRITE_PROGRESS"/>
-  <int value="157" label="INPUT_IME_ON_ACTIVATE"/>
-  <int value="158" label="INPUT_IME_ON_BLUR"/>
-  <int value="159" label="INPUT_IME_ON_CANDIDATE_CLICKED"/>
-  <int value="160" label="INPUT_IME_ON_DEACTIVATED"/>
-  <int value="161" label="INPUT_IME_ON_FOCUS"/>
-  <int value="162" label="INPUT_IME_ON_INPUT_CONTEXT_UPDATE"/>
-  <int value="163" label="INPUT_IME_ON_KEY_EVENT"/>
-  <int value="164" label="INPUT_IME_ON_MENU_ITEM_ACTIVATED"/>
-  <int value="165" label="INPUT_IME_ON_RESET"/>
-  <int value="166" label="INPUT_IME_ON_SURROUNDING_TEXT_CHANGED"/>
-  <int value="167" label="INPUT_METHOD_PRIVATE_ON_CHANGED"/>
-  <int value="168" label="INPUT_METHOD_PRIVATE_ON_COMPOSITION_BOUNDS_CHANGED"/>
-  <int value="169" label="INPUT_METHOD_PRIVATE_ON_DICTIONARY_CHANGED"/>
-  <int value="170" label="INPUT_METHOD_PRIVATE_ON_DICTIONARY_LOADED"/>
-  <int value="171" label="INSTANCE_ID_ON_TOKEN_REFRESH"/>
-  <int value="172" label="DELETED_LOCATION_ON_LOCATION_ERROR"/>
-  <int value="173" label="DELETED_LOCATION_ON_LOCATION_UPDATE"/>
-  <int value="174" label="DELETED_LOG_PRIVATE_ON_CAPTURED_EVENTS"/>
-  <int value="175" label="MANAGEMENT_ON_DISABLED"/>
-  <int value="176" label="MANAGEMENT_ON_ENABLED"/>
-  <int value="177" label="MANAGEMENT_ON_INSTALLED"/>
-  <int value="178" label="MANAGEMENT_ON_UNINSTALLED"/>
-  <int value="179" label="MDNS_ON_SERVICE_LIST"/>
-  <int value="180" label="MEDIA_GALLERIES_ON_GALLERY_CHANGED"/>
-  <int value="181" label="MEDIA_GALLERIES_ON_SCAN_PROGRESS"/>
-  <int value="182" label="MEDIA_PLAYER_PRIVATE_ON_NEXT_TRACK"/>
-  <int value="183" label="MEDIA_PLAYER_PRIVATE_ON_PREV_TRACK"/>
-  <int value="184" label="MEDIA_PLAYER_PRIVATE_ON_TOGGLE_PLAY_STATE"/>
-  <int value="185"
-      label="DELETED_NETWORKING_CONFIG_ON_CAPTIVE_PORTAL_DETECTED"/>
-  <int value="186" label="NETWORKING_PRIVATE_ON_DEVICE_STATE_LIST_CHANGED"/>
-  <int value="187" label="NETWORKING_PRIVATE_ON_NETWORK_LIST_CHANGED"/>
-  <int value="188" label="NETWORKING_PRIVATE_ON_NETWORKS_CHANGED"/>
-  <int value="189" label="NETWORKING_PRIVATE_ON_PORTAL_DETECTION_COMPLETED"/>
-  <int value="190" label="DELETED_NOTIFICATION_PROVIDER_ON_CLEARED"/>
-  <int value="191" label="DELETED_NOTIFICATION_PROVIDER_ON_CREATED"/>
-  <int value="192" label="DELETED_NOTIFICATION_PROVIDER_ON_UPDATED"/>
-  <int value="193" label="NOTIFICATIONS_ON_BUTTON_CLICKED"/>
-  <int value="194" label="NOTIFICATIONS_ON_CLICKED"/>
-  <int value="195" label="NOTIFICATIONS_ON_CLOSED"/>
-  <int value="196" label="NOTIFICATIONS_ON_PERMISSION_LEVEL_CHANGED"/>
-  <int value="197" label="NOTIFICATIONS_ON_SHOW_SETTINGS"/>
-  <int value="198" label="OMNIBOX_ON_INPUT_CANCELLED"/>
-  <int value="199" label="OMNIBOX_ON_INPUT_CHANGED"/>
-  <int value="200" label="OMNIBOX_ON_INPUT_ENTERED"/>
-  <int value="201" label="OMNIBOX_ON_INPUT_STARTED"/>
-  <int value="202" label="PAGE_ACTION_ON_CLICKED"/>
-  <int value="203"
-      label="PASSWORDS_PRIVATE_ON_PASSWORD_EXCEPTIONS_LIST_CHANGED"/>
-  <int value="204" label="PASSWORDS_PRIVATE_ON_PLAINTEXT_PASSWORD_RETRIEVED"/>
-  <int value="205" label="PASSWORDS_PRIVATE_ON_SAVED_PASSWORDS_LIST_CHANGED"/>
-  <int value="206" label="PERMISSIONS_ON_ADDED"/>
-  <int value="207" label="PERMISSIONS_ON_REMOVED"/>
-  <int value="208" label="PRINTER_PROVIDER_ON_GET_CAPABILITY_REQUESTED"/>
-  <int value="209" label="PRINTER_PROVIDER_ON_GET_PRINTERS_REQUESTED"/>
-  <int value="210" label="PRINTER_PROVIDER_ON_GET_USB_PRINTER_INFO_REQUESTED"/>
-  <int value="211" label="PRINTER_PROVIDER_ON_PRINT_REQUESTED"/>
-  <int value="212" label="PROCESSES_ON_CREATED"/>
-  <int value="213" label="PROCESSES_ON_EXITED"/>
-  <int value="214" label="PROCESSES_ON_UNRESPONSIVE"/>
-  <int value="215" label="PROCESSES_ON_UPDATED"/>
-  <int value="216" label="PROCESSES_ON_UPDATED_WITH_MEMORY"/>
-  <int value="217" label="PROXY_ON_PROXY_ERROR"/>
-  <int value="218" label="RUNTIME_ON_BROWSER_UPDATE_AVAILABLE"/>
-  <int value="219" label="RUNTIME_ON_CONNECT"/>
-  <int value="220" label="RUNTIME_ON_CONNECT_EXTERNAL"/>
-  <int value="221" label="RUNTIME_ON_INSTALLED"/>
-  <int value="222" label="RUNTIME_ON_MESSAGE"/>
-  <int value="223" label="RUNTIME_ON_MESSAGE_EXTERNAL"/>
-  <int value="224" label="RUNTIME_ON_RESTART_REQUIRED"/>
-  <int value="225" label="RUNTIME_ON_STARTUP"/>
-  <int value="226" label="RUNTIME_ON_SUSPEND"/>
-  <int value="227" label="RUNTIME_ON_SUSPEND_CANCELED"/>
-  <int value="228" label="RUNTIME_ON_UPDATE_AVAILABLE"/>
-  <int value="229" label="SEARCH_ENGINES_PRIVATE_ON_SEARCH_ENGINES_CHANGED"/>
-  <int value="230" label="SERIAL_ON_RECEIVE"/>
-  <int value="231" label="SERIAL_ON_RECEIVE_ERROR"/>
-  <int value="232" label="SESSIONS_ON_CHANGED"/>
-  <int value="233" label="SETTINGS_PRIVATE_ON_PREFS_CHANGED"/>
-  <int value="234" label="DELETED_SIGNED_IN_DEVICES_ON_DEVICE_INFO_CHANGE"/>
-  <int value="235" label="SOCKETS_TCP_ON_RECEIVE"/>
-  <int value="236" label="SOCKETS_TCP_ON_RECEIVE_ERROR"/>
-  <int value="237" label="SOCKETS_TCP_SERVER_ON_ACCEPT"/>
-  <int value="238" label="SOCKETS_TCP_SERVER_ON_ACCEPT_ERROR"/>
-  <int value="239" label="SOCKETS_UDP_ON_RECEIVE"/>
-  <int value="240" label="SOCKETS_UDP_ON_RECEIVE_ERROR"/>
-  <int value="241" label="STORAGE_ON_CHANGED"/>
-  <int value="242"
-      label="DELETED_STREAMS_PRIVATE_ON_EXECUTE_MIME_TYPE_HANDLER"/>
-  <int value="243" label="SYNC_FILE_SYSTEM_ON_FILE_STATUS_CHANGED"/>
-  <int value="244" label="SYNC_FILE_SYSTEM_ON_SERVICE_STATUS_CHANGED"/>
-  <int value="245" label="SYSTEM_DISPLAY_ON_DISPLAY_CHANGED"/>
-  <int value="246" label="SYSTEM_INDICATOR_ON_CLICKED"/>
-  <int value="247" label="SYSTEM_PRIVATE_ON_BRIGHTNESS_CHANGED"/>
-  <int value="248" label="SYSTEM_PRIVATE_ON_SCREEN_UNLOCKED"/>
-  <int value="249" label="SYSTEM_PRIVATE_ON_VOLUME_CHANGED"/>
-  <int value="250" label="SYSTEM_PRIVATE_ON_WOKE_UP"/>
-  <int value="251" label="SYSTEM_STORAGE_ON_ATTACHED"/>
-  <int value="252" label="SYSTEM_STORAGE_ON_DETACHED"/>
-  <int value="253" label="TAB_CAPTURE_ON_STATUS_CHANGED"/>
-  <int value="254" label="TABS_ON_ACTIVATED"/>
-  <int value="255" label="TABS_ON_ACTIVE_CHANGED"/>
-  <int value="256" label="TABS_ON_ATTACHED"/>
-  <int value="257" label="TABS_ON_CREATED"/>
-  <int value="258" label="TABS_ON_DETACHED"/>
-  <int value="259" label="TABS_ON_HIGHLIGHT_CHANGED"/>
-  <int value="260" label="TABS_ON_HIGHLIGHTED"/>
-  <int value="261" label="TABS_ON_MOVED"/>
-  <int value="262" label="TABS_ON_REMOVED"/>
-  <int value="263" label="TABS_ON_REPLACED"/>
-  <int value="264" label="TABS_ON_SELECTION_CHANGED"/>
-  <int value="265" label="TABS_ON_UPDATED"/>
-  <int value="266" label="TABS_ON_ZOOM_CHANGE"/>
-  <int value="267" label="TERMINAL_PRIVATE_ON_PROCESS_OUTPUT"/>
-  <int value="268" label="TEST_ON_MESSAGE"/>
-  <int value="269" label="TTS_ENGINE_ON_PAUSE"/>
-  <int value="270" label="TTS_ENGINE_ON_RESUME"/>
-  <int value="271" label="TTS_ENGINE_ON_SPEAK"/>
-  <int value="272" label="TTS_ENGINE_ON_STOP"/>
-  <int value="273" label="USB_ON_DEVICE_ADDED"/>
-  <int value="274" label="USB_ON_DEVICE_REMOVED"/>
-  <int value="275" label="VIRTUAL_KEYBOARD_PRIVATE_ON_BOUNDS_CHANGED"/>
-  <int value="276" label="VIRTUAL_KEYBOARD_PRIVATE_ON_TEXT_INPUT_BOX_FOCUSED"/>
-  <int value="277" label="VPN_PROVIDER_ON_CONFIG_CREATED"/>
-  <int value="278" label="VPN_PROVIDER_ON_CONFIG_REMOVED"/>
-  <int value="279" label="VPN_PROVIDER_ON_PACKET_RECEIVED"/>
-  <int value="280" label="VPN_PROVIDER_ON_PLATFORM_MESSAGE"/>
-  <int value="281" label="VPN_PROVIDER_ON_UI_EVENT"/>
-  <int value="282"
-      label="DELETED_WALLPAPER_PRIVATE_ON_WALLPAPER_CHANGED_BY_3RD_PARTY"/>
-  <int value="283" label="WEB_NAVIGATION_ON_BEFORE_NAVIGATE"/>
-  <int value="284" label="WEB_NAVIGATION_ON_COMMITTED"/>
-  <int value="285" label="WEB_NAVIGATION_ON_COMPLETED"/>
-  <int value="286" label="WEB_NAVIGATION_ON_CREATED_NAVIGATION_TARGET"/>
-  <int value="287" label="WEB_NAVIGATION_ON_DOM_CONTENT_LOADED"/>
-  <int value="288" label="WEB_NAVIGATION_ON_ERROR_OCCURRED"/>
-  <int value="289" label="WEB_NAVIGATION_ON_HISTORY_STATE_UPDATED"/>
-  <int value="290" label="WEB_NAVIGATION_ON_REFERENCE_FRAGMENT_UPDATED"/>
-  <int value="291" label="WEB_NAVIGATION_ON_TAB_REPLACED"/>
-  <int value="292" label="WEB_REQUEST_ON_AUTH_REQUIRED"/>
-  <int value="293" label="WEB_REQUEST_ON_BEFORE_REDIRECT"/>
-  <int value="294" label="WEB_REQUEST_ON_BEFORE_REQUEST"/>
-  <int value="295" label="WEB_REQUEST_ON_BEFORE_SEND_HEADERS"/>
-  <int value="296" label="WEB_REQUEST_ON_COMPLETED"/>
-  <int value="297" label="WEB_REQUEST_ON_ERROR_OCCURRED"/>
-  <int value="298" label="WEB_REQUEST_ON_HEADERS_RECEIVED"/>
-  <int value="299" label="WEB_REQUEST_ON_RESPONSE_STARTED"/>
-  <int value="300" label="WEB_REQUEST_ON_SEND_HEADERS"/>
-  <int value="301" label="WEBRTC_AUDIO_PRIVATE_ON_SINKS_CHANGED"/>
-  <int value="302" label="WEBSTORE_ON_DOWNLOAD_PROGRESS"/>
-  <int value="303" label="WEBSTORE_ON_INSTALL_STAGE_CHANGED"/>
-  <int value="304" label="DELETED_WEBSTORE_WIDGET_PRIVATE_ON_SHOW_WIDGET"/>
-  <int value="305" label="WEBVIEW_TAG_CLOSE"/>
-  <int value="306" label="WEBVIEW_TAG_CONSOLEMESSAGE"/>
-  <int value="307" label="WEBVIEW_TAG_CONTENTLOAD"/>
-  <int value="308" label="WEBVIEW_TAG_DIALOG"/>
-  <int value="309" label="WEBVIEW_TAG_EXIT"/>
-  <int value="310" label="WEBVIEW_TAG_FINDUPDATE"/>
-  <int value="311" label="WEBVIEW_TAG_LOADABORT"/>
-  <int value="312" label="WEBVIEW_TAG_LOADCOMMIT"/>
-  <int value="313" label="WEBVIEW_TAG_LOADREDIRECT"/>
-  <int value="314" label="WEBVIEW_TAG_LOADSTART"/>
-  <int value="315" label="WEBVIEW_TAG_LOADSTOP"/>
-  <int value="316" label="WEBVIEW_TAG_NEWWINDOW"/>
-  <int value="317" label="WEBVIEW_TAG_PERMISSIONREQUEST"/>
-  <int value="318" label="WEBVIEW_TAG_RESPONSIVE"/>
-  <int value="319" label="WEBVIEW_TAG_SIZECHANGED"/>
-  <int value="320" label="WEBVIEW_TAG_UNRESPONSIVE"/>
-  <int value="321" label="WEBVIEW_TAG_ZOOMCHANGE"/>
-  <int value="322" label="WINDOWS_ON_CREATED"/>
-  <int value="323" label="WINDOWS_ON_FOCUS_CHANGED"/>
-  <int value="324" label="WINDOWS_ON_REMOVED"/>
-  <int value="325" label="FILE_SYSTEM_PROVIDER_ON_EXECUTE_ACTION_REQUESTED"/>
-  <int value="326" label="FILE_SYSTEM_PROVIDER_ON_GET_ACTIONS_REQUESTED"/>
-  <int value="327" label="DELETED_LAUNCHER_SEARCH_PROVIDER_ON_QUERY_STARTED"/>
-  <int value="328" label="DELETED_LAUNCHER_SEARCH_PROVIDER_ON_QUERY_ENDED"/>
-  <int value="329" label="DELETED_LAUNCHER_SEARCH_PROVIDER_ON_OPEN_RESULT"/>
-  <int value="330" label="CHROME_WEB_VIEW_INTERNAL_ON_CLICKED"/>
-  <int value="331" label="WEB_VIEW_INTERNAL_CONTEXT_MENUS"/>
-  <int value="332" label="CONTEXT_MENUS"/>
-  <int value="333" label="TTS_ON_EVENT"/>
-  <int value="334" label="LAUNCHER_PAGE_ON_TRANSITION_CHANGED_DEPRECATED"/>
-  <int value="335" label="LAUNCHER_PAGE_ON_POP_SUBPAGE_DEPRECATED"/>
-  <int value="336" label="DIAL_ON_DEVICE_LIST"/>
-  <int value="337" label="DIAL_ON_ERROR"/>
-  <int value="338" label="CAST_CHANNEL_ON_MESSAGE"/>
-  <int value="339" label="CAST_CHANNEL_ON_ERROR"/>
-  <int value="340" label="DELETED_SCREENLOCK_PRIVATE_ON_CHANGED"/>
-  <int value="341" label="DELETED_SCREENLOCK_PRIVATE_ON_AUTH_ATTEMPTED"/>
-  <int value="342" label="TYPES_CHROME_SETTING_ON_CHANGE"/>
-  <int value="343"
-      label="DELETED_TYPES_PRIVATE_CHROME_DIRECT_SETTING_ON_CHANGE"/>
-  <int value="344" label="WEB_VIEW_INTERNAL_ON_MESSAGE"/>
-  <int value="345" label="DELETED_EXTENSION_VIEW_INTERNAL_ON_LOAD_COMMIT"/>
-  <int value="346" label="RUNTIME_ON_REQUEST"/>
-  <int value="347" label="RUNTIME_ON_REQUEST_EXTERNAL"/>
-  <int value="348" label="CHROME_WEB_VIEW_INTERNAL_ON_CONTEXT_MENU_SHOW"/>
-  <int value="349" label="WEB_VIEW_INTERNAL_ON_BEFORE_REQUEST"/>
-  <int value="350" label="WEB_VIEW_INTERNAL_ON_BEFORE_SEND_HEADERS"/>
-  <int value="351" label="WEB_VIEW_INTERNAL_ON_CLOSE"/>
-  <int value="352" label="WEB_VIEW_INTERNAL_ON_COMPLETED"/>
-  <int value="353" label="WEB_VIEW_INTERNAL_ON_CONSOLE_MESSAGE"/>
-  <int value="354" label="WEB_VIEW_INTERNAL_ON_CONTENT_LOAD"/>
-  <int value="355" label="WEB_VIEW_INTERNAL_ON_DIALOG"/>
-  <int value="356" label="DELETED_WEB_VIEW_INTERNAL_ON_DROP_LINK"/>
-  <int value="357" label="WEB_VIEW_INTERNAL_ON_EXIT"/>
-  <int value="358" label="WEB_VIEW_INTERNAL_ON_EXIT_FULLSCREEN"/>
-  <int value="359" label="WEB_VIEW_INTERNAL_ON_FIND_REPLY"/>
-  <int value="360" label="WEB_VIEW_INTERNAL_ON_FRAME_NAME_CHANGED"/>
-  <int value="361" label="WEB_VIEW_INTERNAL_ON_HEADERS_RECEIVED"/>
-  <int value="362" label="WEB_VIEW_INTERNAL_ON_LOAD_ABORT"/>
-  <int value="363" label="WEB_VIEW_INTERNAL_ON_LOAD_COMMIT"/>
-  <int value="364" label="WEB_VIEW_INTERNAL_ON_LOAD_PROGRESS"/>
-  <int value="365" label="WEB_VIEW_INTERNAL_ON_LOAD_REDIRECT"/>
-  <int value="366" label="WEB_VIEW_INTERNAL_ON_LOAD_START"/>
-  <int value="367" label="WEB_VIEW_INTERNAL_ON_LOAD_STOP"/>
-  <int value="368" label="WEB_VIEW_INTERNAL_ON_NEW_WINDOW"/>
-  <int value="369" label="WEB_VIEW_INTERNAL_ON_PERMISSION_REQUEST"/>
-  <int value="370" label="WEB_VIEW_INTERNAL_ON_RESPONSE_STARTED"/>
-  <int value="371" label="WEB_VIEW_INTERNAL_ON_RESPONSIVE"/>
-  <int value="372" label="WEB_VIEW_INTERNAL_ON_SIZE_CHANGED"/>
-  <int value="373" label="WEB_VIEW_INTERNAL_ON_UNRESPONSIVE"/>
-  <int value="374" label="WEB_VIEW_INTERNAL_ON_ZOOM_CHANGE"/>
-  <int value="375" label="GUEST_VIEW_INTERNAL_ON_RESIZE"/>
-  <int value="376" label="LANGUAGE_SETTINGS_PRIVATE_ON_INPUT_METHOD_ADDED"/>
-  <int value="377" label="LANGUAGE_SETTINGS_PRIVATE_ON_INPUT_METHOD_REMOVED"/>
-  <int value="378"
-      label="LANGUAGE_SETTINGS_PRIVATE_ON_SPELLCHECK_DICTIONARIES_CHANGED"/>
-  <int value="379"
-      label="LANGUAGE_SETTINGS_PRIVATE_ON_CUSTOM_DICTIONARY_CHANGED"/>
-  <int value="380" label="CAST_DEVICES_PRIVATE_ON_UPDATE_DEVICES_REQUESTED"/>
-  <int value="381" label="CAST_DEVICES_PRIVATE_ON_START_CAST"/>
-  <int value="382" label="CAST_DEVICES_PRIVATE_ON_STOP_CAST"/>
-  <int value="383" label="CERTIFICATEPROVIDER_ON_CERTIFICATES_REQUESTED"/>
-  <int value="384" label="CERTIFICATEPROVIDER_ON_SIGN_DIGEST_REQUESTED"/>
-  <int value="385" label="WEB_VIEW_INTERNAL_ON_AUTH_REQUIRED"/>
-  <int value="386" label="WEB_VIEW_INTERNAL_ON_BEFORE_REDIRECT"/>
-  <int value="387" label="WEB_VIEW_INTERNAL_ON_ERROR_OCCURRED"/>
-  <int value="388" label="WEB_VIEW_INTERNAL_ON_SEND_HEADERS"/>
-  <int value="389"
-      label="DELETED_EASY_UNLOCK_PRIVATE_ON_CONNECTION_STATUS_CHANGED"/>
-  <int value="390" label="DELETED_EASY_UNLOCK_PRIVATE_ON_DATA_RECEIVED"/>
-  <int value="391" label="DELETED_EASY_UNLOCK_PRIVATE_ON_SEND_COMPLETED"/>
-  <int value="392" label="DELETED_DISPLAY_SOURCE_ON_SINKS_UPDATED"/>
-  <int value="393" label="INPUT_IME_ON_COMPOSITION_BOUNDS_CHANGED"/>
-  <int value="394" label="INPUT_METHOD_PRIVATE_ON_IME_MENU_ACTIVATION_CHANGED"/>
-  <int value="395" label="INPUT_METHOD_PRIVATE_ON_IME_MENU_LIST_CHANGED"/>
-  <int value="396" label="INPUT_METHOD_PRIVATE_ON_IME_MENU_ITEMS_CHANGED"/>
-  <int value="397" label="BLUETOOTH_LOW_ENERGY_ON_CHARACTERISTIC_READ_REQUEST"/>
-  <int value="398"
-      label="BLUETOOTH_LOW_ENERGY_ON_CHARACTERISTIC_WRITE_REQUEST"/>
-  <int value="399" label="BLUETOOTH_LOW_ENERGY_ON_DESCRIPTOR_READ_REQUEST"/>
-  <int value="400" label="BLUETOOTH_LOW_ENERGY_ON_DESCRIPTOR_WRITE_REQUEST"/>
-  <int value="401" label="ACCESSIBILITY_PRIVATE_ON_ACCESSIBILITY_GESTURE"/>
-  <int value="402" label="QUICK_UNLOCK_PRIVATE_ON_ACTIVE_MODES_CHANGED"/>
-  <int value="403" label="CLIPBOARD_ON_CLIPBOARD_DATA_CHANGED"/>
-  <int value="404" label="VIRTUAL_KEYBOARD_PRIVATE_ON_KEYBOARD_CLOSED"/>
-  <int value="405" label="FILE_MANAGER_PRIVATE_ON_APPS_UPDATED"/>
-  <int value="406" label="ACCESSIBILITY_PRIVATE_ON_TWO_FINGER_TOUCH_START"/>
-  <int value="407" label="ACCESSIBILITY_PRIVATE_ON_TWO_FINGER_TOUCH_STOP"/>
-  <int value="408" label="MEDIA_PERCEPTION_PRIVATE_ON_MEDIA_PERCEPTION"/>
-  <int value="409" label="NETWORKING_PRIVATE_ON_CERTIFICATE_LISTS_CHANGED"/>
-  <int value="410" label="LOCK_SCREEN_DATA_ON_DATA_ITEMS_AVAILABLE"/>
-  <int value="411" label="WEB_VIEW_INTERNAL_ON_AUDIO_STATE_CHANGED"/>
-  <int value="412" label="AUTOMATION_INTERNAL_ON_ACTION_RESULT"/>
-  <int value="413" label="OMNIBOX_ON_DELETE_SUGGESTION"/>
-  <int value="414" label="VIRTUAL_KEYBOARD_PRIVATE_ON_KEYBOARD_CONFIG_CHANGED"/>
-  <int value="415" label="PASSWORDS_PRIVATE_ON_PASSWORDS_FILE_EXPORT_PROGRESS"/>
-  <int value="416"
-      label="SAFE_BROWSING_PRIVATE_ON_POLICY_SPECIFIED_PASSWORD_REUSE_DETECTED"/>
-  <int value="417"
-      label="SAFE_BROWSING_PRIVATE_ON_POLICY_SPECIFIED_PASSWORD_CHANGED"/>
-  <int value="418" label="SAFE_BROWSING_PRIVATE_ON_DANGEROUS_DOWNLOAD_OPENED"/>
-  <int value="419"
-      label="SAFE_BROWSING_PRIVATE_ON_SECURITY_INTERSTITIAL_SHOWN"/>
-  <int value="420"
-      label="SAFE_BROWSING_PRIVATE_ON_SECURITY_INTERSTITIAL_PROCEEDED"/>
-  <int value="421"
-      label="ACCESSIBILITY_PRIVATE_ON_SELECT_TO_SPEAK_STATE_CHANGE_REQUESTED"/>
-  <int value="422" label="INPUT_METHOD_PRIVATE_ON_FOCUS"/>
-  <int value="423" label="DELETED_SYSTEM_POWER_SOURCE_ONPOWERCHANGED"/>
-  <int value="424" label="WEB_REQUEST_ON_ACTION_IGNORED"/>
-  <int value="425" label="ARC_APPS_PRIVATE_ON_INSTALLED"/>
-  <int value="426" label="FILE_MANAGER_PRIVATE_ON_CROSTINI_CHANGED"/>
-  <int value="427" label="AUTOMATION_INTERNAL_ON_GET_TEXT_LOCATION_RESULT"/>
-  <int value="428" label="INPUT_METHOD_PRIVATE_ON_SETTINGS_CHANGED"/>
-  <int value="429" label="INPUT_METHOD_PRIVATE_ON_SCREEN_PROJECTION_CHANGED"/>
-  <int value="430" label="STORAGE_LOCAL_ON_CHANGE"/>
-  <int value="431" label="STORAGE_SYNC_ON_CHANGE"/>
-  <int value="432" label="STORAGE_MANAGED_ON_CHANGE"/>
-  <int value="433"
-      label="AUTOFILL_PRIVATE_ON_LOCAL_CREDIT_CARD_LIST_CHANGED_DEPRECATED"/>
-  <int value="434"
-      label="AUTOFILL_PRIVATE_ON_SERVER_CREDIT_CARD_LIST_CHANGED_DEPRECATED"/>
-  <int value="435" label="ACCESSIBILITY_PRIVATE_ON_ANNOUNCE_FOR_ACCESSIBILITY"/>
-  <int value="436" label="MIME_HANDLER_PRIVATE_SAVE"/>
-  <int value="437" label="RUNTIME_ON_CONNECT_NATIVE"/>
-  <int value="438" label="ACTION_ON_CLICKED"/>
-  <int value="439" label="ACCESSIBILITY_PRIVATE_ON_SWITCH_ACCESS_COMMAND"/>
-  <int value="440"
-      label="ACCESSIBILITY_PRIVATE_FIND_SCROLLABLE_BOUNDS_FOR_POINT"/>
-  <int value="441" label="LOGIN_STATE_ON_SESSION_STATE_CHANGED"/>
-  <int value="442" label="PRINTING_METRICS_ON_PRINT_JOB_FINISHED"/>
-  <int value="443" label="AUTOTESTPRIVATE_ON_CLIPBOARD_DATA_CHANGED"/>
-  <int value="444" label="AUTOFILL_PRIVATE_ON_PERSONAL_DATA_CHANGED"/>
-  <int value="445" label="PRINTING_ON_JOB_STATUS_CHANGED"/>
-  <int value="446" label="DECLARATIVE_NET_REQUEST_ON_RULE_MATCHED_DEBUG"/>
-  <int value="447" label="TERMINAL_PRIVATE_ON_SETTINGS_CHANGED"/>
-  <int value="448"
-      label="DELETED_AUTOFILL_ASSISTANT_PRIVATE_ON_ACTIONS_CHANGED"/>
-  <int value="449"
-      label="DELETED_AUTOFILL_ASSISTANT_PRIVATE_ON_STATUS_MESSAGE_CHANGED"/>
-  <int value="450" label="BLUETOOTH_PRIVATE_ON_DEVICE_ADDRESS_CHANGED"/>
-  <int value="451"
-      label="PASSWORDS_PRIVATE_ON_ACCOUNT_STORAGE_OPT_IN_STATE_CHANGED"/>
-  <int value="452"
-      label="ACCESSIBILITY_PRIVATE_ON_CUSTOM_SPOKEN_FEEDBACK_TOGGLED"/>
-  <int value="453"
-      label="DELETED_PASSWORDS_PRIVATE_ON_COMPROMISED_CREDENTIALS_INFO_CHANGED"/>
-  <int value="454" label="TERMINAL_PRIVATE_ON_A11Y_STATUS_CHANGED"/>
-  <int value="455" label="PASSWORDS_PRIVATE_ON_PASSWORD_CHECK_STATUS_CHANGED"/>
-  <int value="456" label="INPUT_IME_ON_ASSISTIVE_WINDOW_BUTTON_CLICKED"/>
-  <int value="457" label="INPUT_IME_ON_SUGGESTIONS_CHANGED"/>
-  <int value="458" label="INPUT_IME_ON_INPUT_METHOD_OPTIONS_CHANGED"/>
-  <int value="459"
-      label="CERTIFICATEPROVIDER_ON_CERTIFICATES_UPDATE_REQUESTED"/>
-  <int value="460" label="CERTIFICATEPROVIDER_ON_SIGNATURE_REQUESTED"/>
-  <int value="461" label="WINDOWS_ON_BOUNDS_CHANGED"/>
-  <int value="462"
-      label="DELETED_WALLPAPER_PRIVATE_ON_CLOSE_PREVIEW_WALLPAPER"/>
-  <int value="463"
-      label="DELETED_PASSWORDS_PRIVATE_ON_WEAK_CREDENTIALS_CHANGED"/>
-  <int value="464" label="ACCESSIBILITY_PRIVATE_ON_MAGNIFIER_BOUNDS_CHANGED"/>
-  <int value="465" label="FILE_MANAGER_PRIVATE_ON_PIN_TRANSFERS_UPDATED"/>
-  <int value="466" label="ACCESSIBILITY_PRIVATE_ON_POINT_SCAN_SET"/>
-  <int value="467"
-      label="ACCESSIBILITY_PRIVATE_ON_SELECT_TO_SPEAK_PANEL_ACTION"/>
-  <int value="468" label="FILE_MANAGER_PRIVATE_ON_TABLET_MODE_CHANGED"/>
-  <int value="469"
-      label="VIRTUAL_KEYBOARD_PRIVATE_ON_CLIPBOARD_HISTORY_CHANGED"/>
-  <int value="470" label="VIRTUAL_KEYBOARD_PRIVATE_ON_CLIPBOARD_ITEM_UPDATED"/>
-  <int value="471" label="TAB_GROUPS_ON_CREATED"/>
-  <int value="472" label="TAB_GROUPS_ON_MOVED"/>
-  <int value="473" label="TAB_GROUPS_ON_REMOVED"/>
-  <int value="474" label="TAB_GROUPS_ON_UPDATED"/>
-  <int value="475" label="FILE_MANAGER_PRIVATE_ON_DRIVE_CONFIRM_DIALOG"/>
-  <int value="476" label="TTS_ENGINE_ON_SPEAK_WITH_AUDIO_STREAM"/>
-  <int value="477" label="ACCESSIBILITY_PRIVATE_ON_SHOW_CHROMEVOX_TUTORIAL"/>
-  <int value="478" label="STORAGE_SESSION_ON_CHANGE"/>
-  <int value="479" label="ACCESSIBILITY_PRIVATE_ON_TOGGLE_DICTATION"/>
-  <int value="480" label="WEB_AUTHENTICATION_PROXY_ON_ISUVPAA_REQUEST"/>
-  <int value="481" label="SPEECH_RECOGNITION_PRIVATE_ON_STOP"/>
-  <int value="482" label="SPEECH_RECOGNITION_PRIVATE_ON_RESULT"/>
-  <int value="483" label="SPEECH_RECOGNITION_PRIVATE_ON_ERROR"/>
-  <int value="484" label="FILE_MANAGER_PRIVATE_ON_IO_TASK_PROGRESS_STATUS"/>
-  <int value="485" label="INPUT_METHOD_PRIVATE_ON_TOUCH"/>
-  <int value="486" label="WEB_AUTHENTICATION_PROXY_ON_CREATE_REQUEST"/>
-  <int value="487" label="WEB_AUTHENTICATION_PROXY_REQUEST_CANCELLED"/>
-  <int value="488" label="WEB_AUTHENTICATION_PROXY_ON_GET_REQUEST"/>
-  <int value="489" label="DEVELOPER_PRIVATE_ON_USER_SITE_SETTINGS_CHANGED"/>
-  <int value="490" label="TERMINAL_PRIVATE_ON_PREF_CHANGED"/>
-  <int value="491"
-      label="WEB_AUTHENTICATION_PROXY_ON_REMOTE_SESSION_STATE_CHANGE"/>
-  <int value="492" label="LOGIN_ON_REQUEST_EXTERNAL_LOGOUT"/>
-  <int value="493" label="LOGIN_ON_EXTERNAL_LOGOUT_DONE"/>
-  <int value="494" label="ACCESSIBILITY_PRIVATE_ON_PUMPKIN_INSTALLED"/>
-  <int value="495" label="ENTERPRISE_REMOTE_APPS_ON_REMOTE_APP_LAUNCHED"/>
-  <int value="496" label="INPUT_METHOD_PRIVATE_ON_CARET_BOUNDS_CHANGED"/>
-  <int value="497" label="PASSWORDS_PRIVATE_ON_PASSWORD_MANAGER_AUTH_TIMEOUT"/>
-  <int value="498" label="PASSWORDS_PRIVATE_ON_INSECURE_CREDENTIALS_CHANGED"/>
-  <int value="499" label="VIRTUAL_KEYBOARD_PRIVATE_ON_COLOR_PROVIDER_CHANGED"/>
-  <int value="500"
-      label="SMART_CARD_PROVIDER_PRIVATE_ON_ESTABLISH_CONTEXT_REQUESTED"/>
-  <int value="501"
-      label="SMART_CARD_PROVIDER_PRIVATE_ON_RELEASE_CONTEXT_REQUESTED"/>
-  <int value="502"
-      label="SMART_CARD_PROVIDER_PRIVATE_ON_LIST_READERS_REQUESTED"/>
-  <int value="503"
-      label="SMART_CARD_PROVIDER_PRIVATE_ON_GET_STATUS_CHANGE_REQUESTED"/>
-  <int value="504" label="PDF_VIEWER_PRIVATE_ON_PDF_OCR_PREF_CHANGED"/>
-  <int value="505" label="SMART_CARD_PROVIDER_PRIVATE_ON_CONNECT_REQUESTED"/>
-  <int value="506" label="SMART_CARD_PROVIDER_PRIVATE_ON_DISCONNECT_REQUESTED"/>
-  <int value="507" label="SMART_CARD_PROVIDER_PRIVATE_ON_CANCEL_REQUESTED"/>
-  <int value="508" label="OS_EVENTS_ON_AUDIO_JACK_EVENT"/>
-  <int value="509"
-      label="ACCESSIBILITY_PRIVATE_ON_SELECT_TO_SPEAK_KEYS_PRESSED_CHANGED"/>
-  <int value="510"
-      label="ACCESSIBILITY_PRIVATE_ON_SELECT_TO_SPEAK_MOUSE_CHANGED"/>
-  <int value="511" label="FILE_MANAGER_PRIVATE_ON_BULK_PIN_PROGRESS"/>
-  <int value="512" label="OS_EVENTS_ON_LID_EVENT"/>
-  <int value="513" label="OS_EVENTS_ON_USB_EVENT"/>
-  <int value="514" label="OS_EVENTS_ON_SD_CARD_EVENT"/>
-  <int value="515" label="SMART_CARD_PROVIDER_PRIVATE_ON_TRANSMIT_REQUESTED"/>
-  <int value="516" label="SMART_CARD_PROVIDER_PRIVATE_ON_CONTROL_REQUESTED"/>
-  <int value="517" label="OS_EVENTS_ON_POWER_EVENT"/>
-  <int value="518" label="SMART_CARD_PROVIDER_PRIVATE_ON_GET_ATTRIB_REQUESTED"/>
-  <int value="519" label="OS_EVENTS_ON_KEYBOARD_DIAGNOSTIC_EVENT"/>
-  <int value="520" label="DESK_EVENTS_ON_DESK_ADDED"/>
-  <int value="521" label="DESK_EVENTS_ON_DESK_REMOVED"/>
-  <int value="522" label="DESK_EVENTS_ON_DESK_SWITCHED"/>
-  <int value="523" label="SMART_CARD_PROVIDER_PRIVATE_ON_SET_ATTRIB_REQUESTED"/>
-  <int value="524" label="OS_EVENTS_ON_STYLUS_GARAGE_EVENT"/>
-  <int value="525" label="SMART_CARD_PROVIDER_PRIVATE_ON_STATUS_REQUESTED"/>
-  <int value="526" label="OS_EVENTS_ON_TOUCHPAD_BUTTON_EVENT"/>
-  <int value="527" label="OS_EVENTS_ON_TOUCHPAD_TOUCH_EVENT"/>
-  <int value="528" label="OS_EVENTS_ON_TOUCHPAD_CONNECTED_EVENT"/>
-  <int value="529"
-      label="SMART_CARD_PROVIDER_PRIVATE_ON_BEGIN_TRANSACTION_REQUESTED"/>
-  <int value="530"
-      label="SMART_CARD_PROVIDER_PRIVATE_ON_END_TRANSACTION_REQUESTED"/>
-  <int value="531" label="OS_EVENTS_ON_EXTERNAL_DISPLAY_EVENT"/>
-  <int value="532" label="OS_EVENTS_ON_STYLUS_TOUCH_EVENT"/>
-  <int value="533" label="OS_EVENTS_ON_STYLUS_CONNECTED_EVENT"/>
-  <int value="534"
-      label="ACCESSIBILITY_PRIVATE_ON_SELECT_TO_SPEAK_CONTEXT_MENU_CLICKED"/>
-  <int value="535" label="DESK_EVENTS_ON_DESK_REMOVAL_UNDONE"/>
-  <int value="536" label="READING_LIST_ON_ENTRY_ADDED"/>
-  <int value="537" label="READING_LIST_ON_ENTRY_REMOVED"/>
-  <int value="538" label="READING_LIST_ON_ENTRY_UPDATED"/>
-  <int value="539" label="OS_DIAGNOSTICS_ON_ROUTINE_INITIALIZED"/>
-  <int value="540" label="OS_DIAGNOSTICS_ON_ROUTINE_RUNNING"/>
-  <int value="541" label="OS_DIAGNOSTICS_ON_ROUTINE_WAITING"/>
-  <int value="542" label="OS_DIAGNOSTICS_ON_MEMORY_ROUTINE_FINISHED"/>
-  <int value="543" label="OS_EVENTS_ON_TOUCHSCREEN_TOUCH_EVENT"/>
-  <int value="544" label="OS_EVENTS_ON_TOUCHSCREEN_CONNECTED_EVENT"/>
-  <int value="545"
-      label="FILE_MANAGER_PRIVATE_ON_DEVICE_CONNECTION_STATUS_CHANGED"/>
-  <int value="546" label="OS_DIAGNOSTICS_ON_ROUTINE_EXCEPTION"/>
-  <int value="547"
-      label="ACCESSIBILITY_SERVICE_PRIVATE_CLIPBOARD_COPY_IN_ACTIVE_GOOGLE_DOC"/>
-  <int value="548"
-      label="INPUT_METHOD_PRIVATE_ON_LANGUAGE_PACK_STATUS_CHANGED"/>
-  <int value="549" label="OS_DIAGNOSTICS_ON_VOLUME_BUTTON_ROUTINE_FINISHED"/>
-  <int value="550" label="OS_DIAGNOSTICS_ON_FAN_ROUTINE_FINISHED"/>
-  <int value="551" label="ODFS_CONFIG_PRIVATE_MOUNT_CHANGED"/>
-  <int value="552" label="ODFS_CONFIG_PRIVATE_ACCOUNT_RESTRICTIONS_CHANGED"/>
-  <int value="553" label="PDF_VIEWER_PRIVATE_ON_SAVE"/>
-</enum>
-
-<enum name="ExtensionFromWebstoreInconcistencyEnum">
-  <int value="0" label="Non-webstore update URL"/>
-  <int value="1" label="External install location"/>
-</enum>
-
-<enum name="ExtensionFunctions">
-<!-- Generated from extensions/browser/extension_function_histogram_value.h.
-Called by update_extension_histograms.py.-->
-
-  <int value="0" label="UNKNOWN"/>
-  <int value="1" label="WEBNAVIGATION_GETALLFRAMES"/>
-  <int value="2" label="BROWSINGDATA_REMOVEWEBSQL"/>
-  <int value="3" label="ALARMS_CREATE"/>
-  <int value="4" label="FILEMANAGERPRIVATEINTERNAL_REMOVEFILEWATCH"/>
-  <int value="5" label="COOKIES_GET"/>
-  <int value="6" label="FONTSETTINGS_GETMINIMUMFONTSIZE"/>
-  <int value="7" label="CHROMEOSINFOPRIVATE_GET"/>
-  <int value="8" label="BOOKMARKMANAGERPRIVATE_CUT"/>
-  <int value="9" label="TABS_CAPTUREVISIBLETAB"/>
-  <int value="10" label="MANAGEMENT_SETENABLED"/>
-  <int value="11" label="HISTORY_DELETEALL"/>
-  <int value="12" label="STORAGE_GET"/>
-  <int value="13" label="SOCKET_SETKEEPALIVE"/>
-  <int value="14" label="DOWNLOADS_CANCEL"/>
-  <int value="15" label="BOOKMARKS_CREATE"/>
-  <int value="16" label="BOOKMARKS_UPDATE"/>
-  <int value="17" label="FILEMANAGERPRIVATE_GETDRIVEFILES"/>
-  <int value="18" label="TERMINALPRIVATE_ONTERMINALRESIZE"/>
-  <int value="19" label="DELETED_FILEMANAGERPRIVATE_REQUESTDIRECTORYREFRESH"/>
-  <int value="20" label="BLUETOOTH_GETADAPTERSTATE"/>
-  <int value="21"
-      label="DELETED_FILEMANAGERPRIVATEINTERNAL_CANCELFILETRANSFERS"/>
-  <int value="22" label="FILEMANAGERPRIVATEINTERNAL_PINDRIVEFILE"/>
-  <int value="23" label="SOCKET_WRITE"/>
-  <int value="24" label="OMNIBOX_SETDEFAULTSUGGESTION"/>
-  <int value="25" label="TTS_SPEAK"/>
-  <int value="26" label="DELETED_WALLPAPERPRIVATE_RESTOREMINIMIZEDWINDOWS"/>
-  <int value="27" label="BROWSINGDATA_REMOVEHISTORY"/>
-  <int value="28" label="DELETED_FILEMANAGERPRIVATE_ISFULLSCREEN"/>
-  <int value="29" label="AUTOTESTPRIVATE_LOGOUT"/>
-  <int value="30" label="EXPERIMENTAL_HISTORY_GETMOSTVISITED"/>
-  <int value="31" label="DELETED_BLUETOOTH_DISCONNECT"/>
-  <int value="32" label="DELETED_BLUETOOTH_SETOUTOFBANDPAIRINGDATA"/>
-  <int value="33" label="BOOKMARKMANAGERPRIVATE_CANPASTE"/>
-  <int value="34" label="AUTOTESTPRIVATE_RESTART"/>
-  <int value="35" label="USB_CLAIMINTERFACE"/>
-  <int value="36" label="MEDIAPLAYERPRIVATE_SETWINDOWHEIGHT"/>
-  <int value="37" label="DELETED_EXPERIMENTAL_PROCESSES_GETPROCESSINFO"/>
-  <int value="38" label="HISTORY_GETVISITS"/>
-  <int value="39" label="SOCKET_BIND"/>
-  <int value="40" label="TABS_MOVE"/>
-  <int value="41" label="SOCKET_DISCONNECT"/>
-  <int value="42" label="FILESYSTEM_GETWRITABLEENTRY"/>
-  <int value="43" label="SYNCFILESYSTEM_REQUESTFILESYSTEM"/>
-  <int value="44" label="COMMANDS_GETALL"/>
-  <int value="45" label="EXPERIMENTAL_DISCOVERY_REMOVESUGGESTION"/>
-  <int value="46" label="VIRTUALKEYBOARDPRIVATE_SENDKEYEVENT"/>
-  <int value="47" label="BOOKMARKMANAGERPRIVATE_GETSUBTREE"/>
-  <int value="48" label="DELETED_EXPERIMENTAL_RLZ_RECORDPRODUCTEVENT"/>
-  <int value="49" label="BOOKMARKS_GETRECENT"/>
-  <int value="50" label="APP_CURRENTWINDOWINTERNAL_SETBOUNDS"/>
-  <int value="51" label="DELETED_CLOUDPRINTPRIVATE_SETUPCONNECTOR"/>
-  <int value="52" label="SERIAL_SETCONTROLSIGNALS"/>
-  <int value="53" label="DELETED_FILEMANAGERPRIVATE_SETLASTMODIFIED"/>
-  <int value="54" label="IDLE_SETDETECTIONINTERVAL"/>
-  <int value="55" label="FILEMANAGERPRIVATEINTERNAL_GETFILETASKS"/>
-  <int value="56" label="WEBSTOREPRIVATE_GETSTORELOGIN"/>
-  <int value="57" label="SYSTEMPRIVATE_GETINCOGNITOMODEAVAILABILITY"/>
-  <int value="58" label="IDLTEST_SENDARRAYBUFFERVIEW"/>
-  <int value="59" label="SOCKET_SETNODELAY"/>
-  <int value="60" label="APP_CURRENTWINDOWINTERNAL_SHOW"/>
-  <int value="61" label="WEBSTOREPRIVATE_GETBROWSERLOGIN"/>
-  <int value="62" label="EXPERIMENTAL_IDENTITY_GETAUTHTOKEN"/>
-  <int value="63" label="DELETED_SYSTEMINFO_DISPLAY_GETDISPLAYINFO"/>
-  <int value="64" label="BROWSINGDATA_REMOVEPLUGINDATA"/>
-  <int value="65" label="SOCKET_LISTEN"/>
-  <int value="66" label="MEDIAGALLERIES_GETMEDIAFILESYSTEMS"/>
-  <int value="67" label="DOWNLOADS_OPEN"/>
-  <int value="68" label="TABS_EXECUTESCRIPT"/>
-  <int value="69" label="SYNCFILESYSTEM_GETUSAGEANDQUOTA"/>
-  <int value="70" label="INPUTMETHODPRIVATE_GET"/>
-  <int value="71" label="USB_CLOSEDEVICE"/>
-  <int value="72" label="TTS_STOP"/>
-  <int value="73" label="DELETED_SERIAL_GETPORTS"/>
-  <int value="74" label="DELETED_FILEMANAGERPRIVATE_CLEARDRIVECACHE"/>
-  <int value="75" label="SERIAL_GETCONTROLSIGNALS"/>
-  <int value="76" label="DELETED_DEVELOPERPRIVATE_ENABLE"/>
-  <int value="77" label="FILEMANAGERPRIVATEINTERNAL_GETENTRYPROPERTIES"/>
-  <int value="78" label="USB_FINDDEVICES"/>
-  <int value="79" label="BOOKMARKMANAGERPRIVATE_DROP"/>
-  <int value="80" label="DELETED_FILEMANAGERPRIVATE_GETFILETRANSFERS"/>
-  <int value="81" label="INPUT_IME_SETMENUITEMS"/>
-  <int value="82" label="DELETED_BOOKMARKS_EXPORT"/>
-  <int value="83" label="HISTORY_SEARCH"/>
-  <int value="84" label="TTSENGINE_SENDTTSEVENT"/>
-  <int value="85" label="ACCESSIBILITY_PRIVATE_GETALERTSFORTAB"/>
-  <int value="86" label="DELETED_BOOKMARKS_IMPORT"/>
-  <int value="87" label="SYNCFILESYSTEM_DELETEFILESYSTEM"/>
-  <int value="88" label="DEBUGGER_SENDCOMMAND"/>
-  <int value="89" label="DEBUGGER_DETACH"/>
-  <int value="90" label="METRICSPRIVATE_RECORDSMALLCOUNT"/>
-  <int value="91" label="APP_CURRENTWINDOWINTERNAL_MINIMIZE"/>
-  <int value="92" label="DEVELOPERPRIVATE_AUTOUPDATE"/>
-  <int value="93" label="DNS_RESOLVE"/>
-  <int value="94" label="DELETED_EXPERIMENTAL_SYSTEMINFO_MEMORY_GET"/>
-  <int value="95" label="HISTORY_ADDURL"/>
-  <int value="96" label="TABS_GET"/>
-  <int value="97" label="BROWSERACTION_SETBADGETEXT"/>
-  <int value="98" label="TABS_RELOAD"/>
-  <int value="99" label="WINDOWS_CREATE"/>
-  <int value="100" label="DEVELOPERPRIVATE_LOADUNPACKED"/>
-  <int value="101" label="DELETED_DOWNLOADS_SETDESTINATION"/>
-  <int value="102" label="DELETED_EXPERIMENTAL_PROCESSES_GETPROCESSIDFORTAB"/>
-  <int value="103" label="BOOKMARKS_GETCHILDREN"/>
-  <int value="104" label="BROWSERACTION_GETTITLE"/>
-  <int value="105" label="TERMINALPRIVATE_OPENTERMINALPROCESS"/>
-  <int value="106" label="DELETED_SERIAL_CLOSE"/>
-  <int value="107" label="CONTEXTMENUS_REMOVE"/>
-  <int value="108" label="FILESYSTEM_REQUESTFILESYSTEM"/>
-  <int value="109" label="ECHOPRIVATE_GETREGISTRATIONCODE"/>
-  <int value="110" label="TABS_GETCURRENT"/>
-  <int value="111" label="FONTSETTINGS_CLEARDEFAULTFIXEDFONTSIZE"/>
-  <int value="112" label="MEDIAPLAYERPRIVATE_CLOSEWINDOW"/>
-  <int value="113" label="WEBREQUESTINTERNAL_ADDEVENTLISTENER"/>
-  <int value="114" label="DELETED_CLOUDPRINTPRIVATE_GETPRINTERS"/>
-  <int value="115" label="STORAGE_SET"/>
-  <int value="116" label="FONTSETTINGS_GETDEFAULTFONTSIZE"/>
-  <int value="117" label="EXTENSION_SETUPDATEURLDATA"/>
-  <int value="118" label="DELETED_SERIAL_WRITE"/>
-  <int value="119" label="IDLE_QUERYSTATE"/>
-  <int value="120" label="DELETED_EXPERIMENTAL_RLZ_GETACCESSPOINTRLZ"/>
-  <int value="121" label="WEBSTOREPRIVATE_SETSTORELOGIN"/>
-  <int value="122" label="DELETED_PAGEACTIONS_ENABLEFORTAB"/>
-  <int value="123" label="COOKIES_SET"/>
-  <int value="124" label="CONTENTSETTINGS_SET"/>
-  <int value="125" label="CONTEXTMENUS_REMOVEALL"/>
-  <int value="126" label="TABS_INSERTCSS"/>
-  <int value="127" label="WEBREQUEST_HANDLERBEHAVIORCHANGED"/>
-  <int value="128" label="INPUT_IME_SETCURSORPOSITION"/>
-  <int value="129" label="OMNIBOX_SENDSUGGESTIONS"/>
-  <int value="130" label="SYSTEMINDICATOR_ENABLE"/>
-  <int value="131" label="EVENTS_GETRULES"/>
-  <int value="132" label="BOOKMARKMANAGERPRIVATE_COPY"/>
-  <int value="133" label="SOCKET_RECVFROM"/>
-  <int value="134" label="TABS_GETALLINWINDOW"/>
-  <int value="135" label="CONTEXTMENUS_UPDATE"/>
-  <int value="136" label="BOOKMARKS_SEARCH"/>
-  <int value="137" label="EXPERIMENTAL_APP_CLEARALLNOTIFICATIONS"/>
-  <int value="138" label="DELETED_BLUETOOTH_GETLOCALOUTOFBANDPAIRINGDATA"/>
-  <int value="139" label="SYSTEMPRIVATE_GETUPDATESTATUS"/>
-  <int value="140" label="FONTSETTINGS_CLEARMINIMUMFONTSIZE"/>
-  <int value="141" label="DELETED_FILEMANAGERPRIVATE_GETFILELOCATIONS"/>
-  <int value="142" label="EXPERIMENTAL_DISCOVERY_SUGGEST"/>
-  <int value="143" label="FILEMANAGERPRIVATEINTERNAL_SETDEFAULTTASK"/>
-  <int value="144" label="BROWSERACTION_GETBADGETEXT"/>
-  <int value="145" label="APP_CURRENTWINDOWINTERNAL_HIDE"/>
-  <int value="146" label="SOCKET_CONNECT"/>
-  <int value="147" label="BOOKMARKS_GETSUBTREE"/>
-  <int value="148" label="HISTORY_DELETEURL"/>
-  <int value="149"
-      label="DELETED_EXPERIMENTAL_MEDIAGALLERIES_ASSEMBLEMEDIAFILE"/>
-  <int value="150" label="BOOKMARKMANAGERPRIVATE_STARTDRAG"/>
-  <int value="151" label="BROWSINGDATA_REMOVEPASSWORDS"/>
-  <int value="152" label="DELETED_DOWNLOADS_DRAG"/>
-  <int value="153" label="INPUT_IME_SETCOMPOSITION"/>
-  <int value="154" label="METRICSPRIVATE_RECORDUSERACTION"/>
-  <int value="155" label="USB_RELEASEINTERFACE"/>
-  <int value="156" label="PAGEACTION_GETPOPUP"/>
-  <int value="157" label="DELETED_SCRIPTBADGE_GETATTENTION"/>
-  <int value="158" label="FONTSETTINGS_GETFONTLIST"/>
-  <int value="159" label="PERMISSIONS_CONTAINS"/>
-  <int value="160" label="DELETED_SCRIPTBADGE_GETPOPUP"/>
-  <int value="161" label="ACCESSIBILITY_PRIVATE_GETFOCUSEDCONTROL"/>
-  <int value="162" label="DEVELOPERPRIVATE_GETSTRINGS"/>
-  <int value="163" label="METRICSPRIVATE_RECORDMEDIUMCOUNT"/>
-  <int value="164" label="MANAGEMENT_GET"/>
-  <int value="165" label="PERMISSIONS_GETALL"/>
-  <int value="166" label="DOWNLOADS_SHOW"/>
-  <int value="167" label="DELETED_EXPERIMENTAL_RLZ_CLEARPRODUCTSTATE"/>
-  <int value="168" label="TABS_REMOVE"/>
-  <int value="169" label="MANAGEMENT_GETPERMISSIONWARNINGSBYID"/>
-  <int value="170" label="WINDOWS_GET"/>
-  <int value="171" label="FILEMANAGERPRIVATEINTERNAL_EXECUTETASK"/>
-  <int value="172" label="TTS_GETVOICES"/>
-  <int value="173" label="MANAGEMENT_GETALL"/>
-  <int value="174" label="MANAGEMENT_GETPERMISSIONWARNINGSBYMANIFEST"/>
-  <int value="175" label="APP_CURRENTWINDOWINTERNAL_CLEARATTENTION"/>
-  <int value="176" label="AUTOTESTPRIVATE_SHUTDOWN"/>
-  <int value="177" label="FONTSETTINGS_CLEARDEFAULTFONTSIZE"/>
-  <int value="178" label="BOOKMARKS_GETTREE"/>
-  <int value="179" label="FILEMANAGERPRIVATE_SELECTFILES"/>
-  <int value="180" label="RUNTIME_GETBACKGROUNDPAGE"/>
-  <int value="181" label="DELETED_EXPERIMENTAL_RECORD_REPLAYURLS"/>
-  <int value="182" label="WEBSTOREPRIVATE_COMPLETEINSTALL"/>
-  <int value="183" label="DELETED_EXPERIMENTAL_SPEECHINPUT_START"/>
-  <int value="184" label="COOKIES_GETALL"/>
-  <int value="185" label="DOWNLOADS_GETFILEICON"/>
-  <int value="186" label="PAGEACTION_GETTITLE"/>
-  <int value="187" label="BROWSINGDATA_REMOVE"/>
-  <int value="188" label="DELETED_SERIAL_OPEN"/>
-  <int value="189" label="FILESYSTEM_GETDISPLAYPATH"/>
-  <int value="190" label="FILEMANAGERPRIVATE_FORMATVOLUME"/>
-  <int value="191" label="BOOKMARKS_GET"/>
-  <int value="192" label="DELETED_MANAGEDMODEPRIVATE_GET"/>
-  <int value="193" label="ALARMS_CLEAR"/>
-  <int value="194" label="SYNCFILESYSTEM_GETFILESYNCSTATUS"/>
-  <int value="195" label="SOCKET_GETINFO"/>
-  <int value="196" label="DELETED_WEBSTOREPRIVATE_INSTALLBUNDLE"/>
-  <int value="197" label="BROWSERACTION_ENABLE"/>
-  <int value="198" label="METRICSPRIVATE_RECORDMEDIUMTIME"/>
-  <int value="199" label="PAGEACTION_SETTITLE"/>
-  <int value="200" label="DELETED_CLOUDPRINTPRIVATE_GETHOSTNAME"/>
-  <int value="201" label="CONTENTSETTINGS_GETRESOURCEIDENTIFIERS"/>
-  <int value="202" label="SOCKET_CREATE"/>
-  <int value="203" label="DEVELOPERPRIVATE_RELOAD"/>
-  <int value="204" label="FILEMANAGERPRIVATE_GETVOLUMEMETADATALIST"/>
-  <int value="205" label="APP_RUNTIME_POSTINTENTRESPONSE"/>
-  <int value="206" label="DELETED_MANAGEDMODEPRIVATE_SETPOLICY"/>
-  <int value="207" label="WEBSTOREPRIVATE_BEGININSTALLWITHMANIFEST3"/>
-  <int value="208" label="DELETED_WALLPAPERPRIVATE_SETWALLPAPER"/>
-  <int value="209" label="USB_CONTROLTRANSFER"/>
-  <int value="210" label="DELETED_EXPERIMENTAL_SPEECHINPUT_STOP"/>
-  <int value="211" label="USB_BULKTRANSFER"/>
-  <int value="212" label="DELETED_FILEMANAGERPRIVATE_GETVOLUMEMETADATA"/>
-  <int value="213" label="PAGECAPTURE_SAVEASMHTML"/>
-  <int value="214" label="EXTENSION_ISALLOWEDINCOGNITOACCESS"/>
-  <int value="215" label="BROWSINGDATA_REMOVEAPPCACHE"/>
-  <int value="216" label="APP_CURRENTWINDOWINTERNAL_DRAWATTENTION"/>
-  <int value="217" label="METRICSPRIVATE_RECORDCOUNT"/>
-  <int value="218" label="USB_INTERRUPTTRANSFER"/>
-  <int value="219" label="TYPES_CHROMESETTING_CLEAR"/>
-  <int value="220" label="INPUT_IME_COMMITTEXT"/>
-  <int value="221" label="IDLTEST_SENDARRAYBUFFER"/>
-  <int value="222" label="DELETED_WALLPAPERPRIVATE_SETWALLPAPERIFEXISTS"/>
-  <int value="223" label="SOCKET_ACCEPT"/>
-  <int value="224" label="WEBNAVIGATION_GETFRAME"/>
-  <int value="225" label="EXPERIMENTAL_POWER_RELEASEKEEPAWAKE"/>
-  <int value="226" label="APP_CURRENTWINDOWINTERNAL_SETICON"/>
-  <int value="227" label="DELETED_PUSHMESSAGING_GETCHANNELID"/>
-  <int value="228" label="DELETED_EXPERIMENTAL_INFOBARS_SHOW"/>
-  <int value="229" label="INPUT_IME_SETCANDIDATEWINDOWPROPERTIES"/>
-  <int value="230" label="METRICSPRIVATE_RECORDPERCENTAGE"/>
-  <int value="231" label="TYPES_CHROMESETTING_GET"/>
-  <int value="232" label="WINDOWS_GETLASTFOCUSED"/>
-  <int value="233" label="DELETED_MANAGEDMODEPRIVATE_GETPOLICY"/>
-  <int value="234" label="STORAGE_CLEAR"/>
-  <int value="235" label="STORAGE_GETBYTESINUSE"/>
-  <int value="236" label="TABS_QUERY"/>
-  <int value="237" label="PAGEACTION_SETPOPUP"/>
-  <int value="238" label="DEVELOPERPRIVATE_INSPECT"/>
-  <int value="239" label="DOWNLOADS_SEARCH"/>
-  <int value="240" label="FONTSETTINGS_CLEARFONT"/>
-  <int value="241" label="WINDOWS_UPDATE"/>
-  <int value="242" label="DELETED_BOOKMARKMANAGERPRIVATE_CANOPENNEWWINDOWS"/>
-  <int value="243" label="SERIAL_FLUSH"/>
-  <int value="244" label="BROWSERACTION_SETTITLE"/>
-  <int value="245" label="BOOKMARKMANAGERPRIVATE_CANEDIT"/>
-  <int value="246" label="DELETED_WALLPAPERPRIVATE_SETCUSTOMWALLPAPER"/>
-  <int value="247" label="BOOKMARKS_REMOVE"/>
-  <int value="248" label="INPUT_IME_SETCANDIDATES"/>
-  <int value="249" label="TERMINALPRIVATE_CLOSETERMINALPROCESS"/>
-  <int value="250" label="HISTORY_DELETERANGE"/>
-  <int value="251" label="IDLTEST_GETARRAYBUFFER"/>
-  <int value="252" label="TERMINALPRIVATE_SENDINPUT"/>
-  <int value="253" label="TABS_HIGHLIGHT"/>
-  <int value="254" label="BLUETOOTH_STARTDISCOVERY"/>
-  <int value="255" label="FILEMANAGERPRIVATE_SELECTFILE"/>
-  <int value="256" label="WINDOWS_GETCURRENT"/>
-  <int value="257" label="DEBUGGER_ATTACH"/>
-  <int value="258" label="DELETED_WALLPAPERPRIVATE_SAVETHUMBNAIL"/>
-  <int value="259" label="INPUT_IME_KEYEVENTHANDLED"/>
-  <int value="260" label="FONTSETTINGS_SETDEFAULTFONTSIZE"/>
-  <int value="261" label="RUNTIME_REQUESTUPDATECHECK"/>
-  <int value="262" label="PAGEACTION_SETICON"/>
-  <int value="263" label="BROWSERACTION_SETBADGEBACKGROUNDCOLOR"/>
-  <int value="264" label="DELETED_DEVELOPERPRIVATE_GETITEMSINFO"/>
-  <int value="265" label="BLUETOOTH_STOPDISCOVERY"/>
-  <int value="266" label="COOKIES_REMOVE"/>
-  <int value="267" label="DELETED_EXPERIMENTAL_RLZ_SENDFINANCIALPING"/>
-  <int value="268" label="TABCAPTURE_GETCAPTUREDTABS"/>
-  <int value="269" label="WINDOWS_REMOVE"/>
-  <int value="270" label="DELETED_WALLPAPERPRIVATE_GETOFFLINEWALLPAPERLIST"/>
-  <int value="271" label="BROWSERACTION_GETBADGEBACKGROUNDCOLOR"/>
-  <int value="272" label="DELETED_PAGEACTIONS_DISABLEFORTAB"/>
-  <int value="273" label="DELETED_DEVELOPERPRIVATE_ALLOWFILEACCESS"/>
-  <int value="274" label="FILEMANAGERPRIVATE_REMOVEMOUNT"/>
-  <int value="275" label="DELETED_BLUETOOTH_CONNECT"/>
-  <int value="276" label="TABCAPTURE_CAPTURE"/>
-  <int value="277" label="NOTIFICATIONS_CREATE"/>
-  <int value="278" label="TABS_DUPLICATE"/>
-  <int value="279" label="DELETED_BLUETOOTH_WRITE"/>
-  <int value="280" label="PAGEACTION_SHOW"/>
-  <int value="281" label="DELETED_WALLPAPERPRIVATE_GETTHUMBNAIL"/>
-  <int value="282" label="DOWNLOADS_PAUSE"/>
-  <int value="283" label="PERMISSIONS_REQUEST"/>
-  <int value="284" label="TOPSITES_GET"/>
-  <int value="285" label="BROWSINGDATA_REMOVEDOWNLOADS"/>
-  <int value="286" label="BROWSINGDATA_REMOVELOCALSTORAGE"/>
-  <int value="287" label="DELETED_FILEBROWSERHANDLERINTERNAL_SELECTFILE"/>
-  <int value="288" label="INPUT_IME_UPDATEMENUITEMS"/>
-  <int value="289" label="FILEMANAGERPRIVATE_GETSTRINGS"/>
-  <int value="290" label="CONTENTSETTINGS_GET"/>
-  <int value="291" label="FONTSETTINGS_SETDEFAULTFIXEDFONTSIZE"/>
-  <int value="292" label="EXPERIMENTAL_APP_NOTIFY"/>
-  <int value="293" label="METRICSPRIVATE_RECORDLONGTIME"/>
-  <int value="294" label="SOCKET_READ"/>
-  <int value="295" label="DELETED_EXPERIMENTAL_PROCESSES_TERMINATE"/>
-  <int value="296" label="METRICSPRIVATE_RECORDTIME"/>
-  <int value="297" label="DELETED_BOOKMARKMANAGERPRIVATE_GETSTRINGS"/>
-  <int value="298" label="USB_ISOCHRONOUSTRANSFER"/>
-  <int value="299" label="PERMISSIONS_REMOVE"/>
-  <int value="300" label="MANAGEMENT_UNINSTALL"/>
-  <int value="301" label="I18N_GETACCEPTLANGUAGES"/>
-  <int value="302" label="MANAGEMENT_LAUNCHAPP"/>
-  <int value="303" label="INPUT_IME_CLEARCOMPOSITION"/>
-  <int value="304" label="ALARMS_GETALL"/>
-  <int value="305" label="DELETED_DIAL_DISCOVERNOW"/>
-  <int value="306" label="TYPES_CHROMESETTING_SET"/>
-  <int value="307" label="BROWSERACTION_SETICON"/>
-  <int value="308" label="ACCESSIBILITY_PRIVATE_SETACCESSIBILITYENABLED"/>
-  <int value="309" label="DELETED_FILEMANAGERPRIVATE_VIEWFILES"/>
-  <int value="310" label="DELETED_BLUETOOTH_GETSERVICES"/>
-  <int value="311" label="TABS_UPDATE"/>
-  <int value="312" label="BROWSINGDATA_REMOVEFORMDATA"/>
-  <int value="313" label="DELETED_FILEMANAGERPRIVATE_RELOADDRIVE"/>
-  <int value="314" label="ALARMS_GET"/>
-  <int value="315" label="BROWSINGDATA_REMOVEINDEXEDDB"/>
-  <int value="316" label="FILEMANAGERPRIVATEINTERNAL_ADDFILEWATCH"/>
-  <int value="317" label="CONTENTSETTINGS_CLEAR"/>
-  <int value="318" label="FILEMANAGERPRIVATE_GETPREFERENCES"/>
-  <int value="319" label="BOOKMARKMANAGERPRIVATE_PASTE"/>
-  <int value="320" label="FILESYSTEM_ISWRITABLEENTRY"/>
-  <int value="321" label="USB_SETINTERFACEALTERNATESETTING"/>
-  <int value="322" label="FONTSETTINGS_SETMINIMUMFONTSIZE"/>
-  <int value="323" label="BROWSERACTION_GETPOPUP"/>
-  <int value="324" label="SOCKET_DESTROY"/>
-  <int value="325" label="BLUETOOTH_GETDEVICES"/>
-  <int value="326" label="ALARMS_CLEARALL"/>
-  <int value="327" label="FONTSETTINGS_GETDEFAULTFIXEDFONTSIZE"/>
-  <int value="328" label="FILEMANAGERPRIVATEINTERNAL_ZIPSELECTION"/>
-  <int value="329" label="SYSTEMINDICATOR_DISABLE"/>
-  <int value="330" label="DELETED_SCRIPTBADGE_SETPOPUP"/>
-  <int value="331" label="EXTENSION_ISALLOWEDFILESCHEMEACCESS"/>
-  <int value="332" label="EXPERIMENTAL_IDENTITY_LAUNCHWEBAUTHFLOW"/>
-  <int value="333" label="FILEMANAGERPRIVATE_GETDRIVECONNECTIONSTATE"/>
-  <int value="334" label="TABS_DETECTLANGUAGE"/>
-  <int value="335" label="METRICSPRIVATE_RECORDVALUE"/>
-  <int value="336" label="BOOKMARKMANAGERPRIVATE_SORTCHILDREN"/>
-  <int value="337" label="DELETED_SERIAL_READ"/>
-  <int value="338" label="APP_CURRENTWINDOWINTERNAL_MAXIMIZE"/>
-  <int value="339" label="EXPERIMENTAL_DISCOVERY_CLEARALLSUGGESTIONS"/>
-  <int value="340" label="DELETED_MANAGEDMODEPRIVATE_ENTER"/>
-  <int value="341" label="DELETED_FILEMANAGERPRIVATE_TRANSFERFILE"/>
-  <int value="342" label="BROWSERACTION_SETPOPUP"/>
-  <int value="343" label="TABS_GETSELECTED"/>
-  <int value="344" label="FONTSETTINGS_GETFONT"/>
-  <int value="345" label="DELETED_BLUETOOTH_READ"/>
-  <int value="346" label="WEBREQUESTINTERNAL_EVENTHANDLED"/>
-  <int value="347" label="EVENTS_ADDRULES"/>
-  <int value="348" label="CONTEXTMENUS_CREATE"/>
-  <int value="349" label="MEDIAPLAYERPRIVATE_GETPLAYLIST"/>
-  <int value="350" label="DOWNLOADS_ERASE"/>
-  <int value="351" label="DELETED_EXPERIMENTAL_RECORD_CAPTUREURLS"/>
-  <int value="352" label="TTS_ISSPEAKING"/>
-  <int value="353" label="BOOKMARKS_REMOVETREE"/>
-  <int value="354" label="FILEMANAGERPRIVATE_SEARCHDRIVE"/>
-  <int value="355" label="DELETED_EXPERIMENTAL_SYSTEMINFO_CPU_GET"/>
-  <int value="356" label="FILEMANAGERPRIVATE_SETPREFERENCES"/>
-  <int value="357" label="FONTSETTINGS_SETFONT"/>
-  <int value="358" label="SOCKET_GETNETWORKLIST"/>
-  <int value="359" label="BOOKMARKS_MOVE"/>
-  <int value="360" label="DELETED_WALLPAPERPRIVATE_MINIMIZEINACTIVEWINDOWS"/>
-  <int value="361" label="STORAGE_REMOVE"/>
-  <int value="362" label="AUTOTESTPRIVATE_LOGINSTATUS"/>
-  <int value="363" label="TABS_CREATE"/>
-  <int value="364" label="FILEMANAGERPRIVATE_CANCELDIALOG"/>
-  <int value="365" label="BROWSINGDATA_REMOVECOOKIES"/>
-  <int value="366" label="FILESYSTEM_CHOOSEENTRY"/>
-  <int value="367" label="MEDIAPLAYERPRIVATE_PLAY"/>
-  <int value="368" label="WEBSTOREPRIVATE_GETWEBGLSTATUS"/>
-  <int value="369" label="SOCKET_SENDTO"/>
-  <int value="370" label="BROWSINGDATA_REMOVEFILESYSTEMS"/>
-  <int value="371" label="DELETED_WALLPAPERPRIVATE_GETSTRINGS"/>
-  <int value="372" label="BROWSINGDATA_REMOVECACHE"/>
-  <int value="373" label="BOOKMARKMANAGERPRIVATE_RECORDLAUNCH"/>
-  <int value="374" label="BROWSERACTION_DISABLE"/>
-  <int value="375" label="DELETED_EXPERIMENTAL_SPEECHINPUT_ISRECORDING"/>
-  <int value="376" label="APP_WINDOW_CREATE"/>
-  <int value="377" label="RUNTIME_RELOAD"/>
-  <int value="378" label="EXPERIMENTAL_POWER_REQUESTKEEPAWAKE"/>
-  <int value="379" label="SYSTEMINDICATOR_SETICON"/>
-  <int value="380" label="FILEMANAGERPRIVATE_ADDMOUNT"/>
-  <int value="381" label="APP_CURRENTWINDOWINTERNAL_FOCUS"/>
-  <int value="382" label="EVENTS_REMOVERULES"/>
-  <int value="383" label="DOWNLOADS_DOWNLOAD"/>
-  <int value="384" label="WINDOWS_GETALL"/>
-  <int value="385" label="DELETED_FILEMANAGERPRIVATE_TOGGLEFULLSCREEN"/>
-  <int value="386" label="APP_CURRENTWINDOWINTERNAL_RESTORE"/>
-  <int value="387" label="DELETED_WEBSOCKETPROXYPRIVATE_GETPASSPORTFORTCP"/>
-  <int value="388" label="PAGEACTION_HIDE"/>
-  <int value="389" label="DELETED_EXPERIMENTAL_SYSTEMINFO_STORAGE_GET"/>
-  <int value="390" label="DOWNLOADS_ACCEPTDANGER"/>
-  <int value="391" label="DELETED_WEBSOCKETPROXYPRIVATE_GETURLFORTCP"/>
-  <int value="392" label="FILEMANAGERPRIVATE_GETSIZESTATS"/>
-  <int value="393" label="DOWNLOADS_RESUME"/>
-  <int value="394" label="COOKIES_GETALLCOOKIESTORES"/>
-  <int value="395" label="DELETED_MEDIAGALLERIESPRIVATE_ADDGALLERYWATCH"/>
-  <int value="396" label="DELETED_MEDIAGALLERIESPRIVATE_REMOVEGALLERYWATCH"/>
-  <int value="397" label="DELETED_WEBVIEW_EXECUTESCRIPT"/>
-  <int value="398" label="NOTIFICATIONS_UPDATE"/>
-  <int value="399" label="NOTIFICATIONS_CLEAR"/>
-  <int value="400" label="DELETED_SESSIONRESTORE_GETRECENTLYCLOSED"/>
-  <int value="401" label="DELETED_SESSIONRESTORE_RESTORE"/>
-  <int value="402" label="MANAGEMENT_UNINSTALLSELF"/>
-  <int value="403" label="ECHOPRIVATE_GETOOBETIMESTAMP"/>
-  <int value="404" label="FILEMANAGERPRIVATEINTERNAL_VALIDATEPATHNAMELENGTH"/>
-  <int value="405" label="BROWSINGDATA_SETTINGS"/>
-  <int value="406" label="WEBSTOREPRIVATE_GETISLAUNCHERENABLED"/>
-  <int value="407" label="NETWORKINGPRIVATE_GETPROPERTIES"/>
-  <int value="408" label="NETWORKINGPRIVATE_GETVISIBLENETWORKS"/>
-  <int value="409" label="NETWORKINGPRIVATE_STARTCONNECT"/>
-  <int value="410" label="NETWORKINGPRIVATE_STARTDISCONNECT"/>
-  <int value="411" label="DELETED_MEDIAGALLERIESPRIVATE_GETALLGALLERYWATCH"/>
-  <int value="412" label="DELETED_MEDIAGALLERIESPRIVATE_REMOVEALLGALLERYWATCH"/>
-  <int value="413" label="FILEMANAGERPRIVATE_SEARCHDRIVEMETADATA"/>
-  <int value="414" label="DELETED_ECHOPRIVATE_CHECKALLOWREDEEMOFFERS"/>
-  <int value="415" label="DELETED_MEDIAGALLERIESPRIVATE_EJECTDEVICE"/>
-  <int value="416" label="FILEMANAGERPRIVATE_LOGOUTUSERFORREAUTHENTICATION"/>
-  <int value="417" label="DEVELOPERPRIVATE_CHOOSEPATH"/>
-  <int value="418" label="DEVELOPERPRIVATE_PACKDIRECTORY"/>
-  <int value="419" label="NETWORKINGPRIVATE_VERIFYDESTINATION"/>
-  <int value="420" label="NETWORKINGPRIVATE_VERIFYANDENCRYPTCREDENTIALS"/>
-  <int value="421" label="NETWORKINGPRIVATE_VERIFYANDENCRYPTDATA"/>
-  <int value="422" label="DEVELOPERPRIVATE_RESTART"/>
-  <int value="423" label="DELETED_DEVELOPERPRIVATE_ALLOWINCOGNITO"/>
-  <int value="424" label="INPUT_IME_DELETESURROUNDINGTEXT"/>
-  <int value="425" label="DELETED_FILEMANAGERPRIVATE_OPENNEWWINDOW"/>
-  <int value="426" label="DELETED_CLOUDPRINTPRIVATE_GETCLIENTID"/>
-  <int value="427" label="ECHOPRIVATE_GETUSERCONSENT"/>
-  <int value="428" label="SYNCFILESYSTEM_SETCONFLICTRESOLUTIONPOLICY"/>
-  <int value="429" label="SYNCFILESYSTEM_GETCONFLICTRESOLUTIONPOLICY"/>
-  <int value="430" label="NETWORKINGPRIVATE_SETPROPERTIES"/>
-  <int value="431" label="NETWORKINGPRIVATE_GETSTATE"/>
-  <int value="432" label="POWER_REQUESTKEEPAWAKE"/>
-  <int value="433" label="POWER_RELEASEKEEPAWAKE"/>
-  <int value="434" label="DELETED_WALLPAPERPRIVATE_SETCUSTOMWALLPAPERLAYOUT"/>
-  <int value="435" label="DOWNLOADSINTERNAL_DETERMINEFILENAME"/>
-  <int value="436" label="SYNCFILESYSTEM_GETFILESYNCSTATUSES"/>
-  <int value="437" label="DELETED_MEDIAGALLERIESPRIVATE_GETHANDLERS"/>
-  <int value="438" label="DELETED_WALLPAPERPRIVATE_RESETWALLPAPER"/>
-  <int value="439" label="DEVELOPERPRIVATE_PERMISSIONS"/>
-  <int value="440" label="WEBSTOREPRIVATE_ENABLEAPPLAUNCHER"/>
-  <int value="441" label="APP_CURRENTWINDOWINTERNAL_FULLSCREEN"/>
-  <int value="442" label="DEVELOPERPRIVATE_LOADUNPACKEDCROS"/>
-  <int value="443" label="NETWORKINGPRIVATE_REQUESTNETWORKSCAN"/>
-  <int value="444" label="ENTERPRISE_PLATFORMKEYSPRIVATE_CHALLENGEMACHINEKEY"/>
-  <int value="445" label="ENTERPRISE_PLATFORMKEYSPRIVATE_CHALLENGEUSERKEY"/>
-  <int value="446" label="DEVELOPERPRIVATE_LOADPROJECTTOSYNCFS"/>
-  <int value="447" label="DEVELOPERPRIVATE_GETPROJECTSINFO"/>
-  <int value="448" label="DEVELOPERPRIVATE_LOADPROJECT"/>
-  <int value="449" label="COMMANDLINEPRIVATE_HASSWITCH"/>
-  <int value="450" label="NETWORKINGPRIVATE_GETMANAGEDPROPERTIES"/>
-  <int value="451" label="DELETED_LOCATION_WATCHLOCATION"/>
-  <int value="452" label="DELETED_LOCATION_CLEARWATCH"/>
-  <int value="453" label="DELETED_BLUETOOTH_ADDPROFILE"/>
-  <int value="454" label="DELETED_BLUETOOTH_REMOVEPROFILE"/>
-  <int value="455" label="DELETED_BLUETOOTH_GETPROFILES"/>
-  <int value="456" label="EXPERIMENTAL_IDENTITY_REMOVECACHEDAUTHTOKEN"/>
-  <int value="457" label="DELETED_AUDIO_GETINFO"/>
-  <int value="458" label="AUDIO_SETACTIVEDEVICES"/>
-  <int value="459" label="AUDIO_SETPROPERTIES"/>
-  <int value="460" label="USB_RESETDEVICE"/>
-  <int value="461" label="SOCKET_MULTICAST_JOIN_GROUP"/>
-  <int value="462" label="SOCKET_MULTICAST_LEAVE_GROUP"/>
-  <int value="463" label="SOCKET_MULTICAST_SET_TIME_TO_LIVE"/>
-  <int value="464" label="SOCKET_MULTICAST_SET_LOOPBACK_MODE"/>
-  <int value="465" label="SOCKET_MULTICAST_GET_JOINED_GROUPS"/>
-  <int value="466" label="ACCESSIBILITY_PRIVATE_SETNATIVEACCESSIBILITYENABLED"/>
-  <int value="467" label="RUNTIME_GETPLATFORMINFO"/>
-  <int value="468" label="DELETED_WEBVIEW_INSERTCSS"/>
-  <int value="469" label="METRICSPRIVATE_GETISCRASHRECORDINGENABLED"/>
-  <int value="470" label="DELETED_IDENTITYPRIVATE_GETSTRINGS"/>
-  <int value="471" label="NOTIFICATIONS_GET_ALL"/>
-  <int value="472" label="USB_LISTINTERFACES"/>
-  <int value="473" label="FILESYSTEM_RETAINENTRY"/>
-  <int value="474" label="FILESYSTEM_ISRESTORABLE"/>
-  <int value="475" label="FILESYSTEM_RESTOREENTRY"/>
-  <int value="476" label="RUNTIME_SETUNINSTALLURL"/>
-  <int value="477" label="INPUTMETHODPRIVATE_STARTIME"/>
-  <int value="478" label="DELETED_MUSICMANAGERPRIVATE_GETDEVICEID"/>
-  <int value="479" label="TTS_PAUSE"/>
-  <int value="480" label="TTS_RESUME"/>
-  <int value="481" label="DELETED_SYSTEMINFO_CPU_GET"/>
-  <int value="482" label="DELETED_EXPERIMENTAL_SYSTEMINFO_STORAGE_ADDWATCH"/>
-  <int value="483" label="DELETED_EXPERIMENTAL_SYSTEMINFO_STORAGE_REMOVEWATCH"/>
-  <int value="484" label="DELETED_EXPERIMENTAL_SYSTEMINFO_STORAGE_GETALLWATCH"/>
-  <int value="485"
-      label="DELETED_EXPERIMENTAL_SYSTEMINFO_STORAGE_REMOVEALLWATCH"/>
-  <int value="486" label="DELETED_SYSTEMINFO_MEMORY_GET"/>
-  <int value="487" label="ACTIVITYLOGPRIVATE_GETEXTENSIONACTIVITIES"/>
-  <int value="488" label="RUNTIME_GETPACKAGEDIRECTORYENTRY"/>
-  <int value="489" label="DELETED_SYSTEMINFO_DISPLAY_SETDISPLAYPROPERTIES"/>
-  <int value="490" label="FEEDBACKPRIVATE_GETUSEREMAIL"/>
-  <int value="491" label="FEEDBACKPRIVATE_GETSYSTEMINFORMATION"/>
-  <int value="492" label="FEEDBACKPRIVATE_SENDFEEDBACK"/>
-  <int value="493" label="VIRTUALKEYBOARDPRIVATE_INSERTTEXT"/>
-  <int value="494" label="DIAGNOSTICS_SENDPACKET"/>
-  <int value="495" label="METRICSPRIVATE_GETFIELDTRIAL"/>
-  <int value="496" label="FILEMANAGERPRIVATE_ZOOM"/>
-  <int value="497" label="DELETED_WEBVIEW_GO"/>
-  <int value="498" label="WEBSTOREPRIVATE_ISININCOGNITOMODEFUNCTION"/>
-  <int value="499" label="DELETED_FILEMANAGERPRIVATE_REQUESTACCESSTOKEN"/>
-  <int value="500" label="DELETED_WEBVIEW_STOP"/>
-  <int value="501" label="DELETED_WEBVIEW_RELOAD"/>
-  <int value="502" label="DELETED_WEBVIEW_TERMINATE"/>
-  <int value="503" label="DELETED_TYPES_PRIVATE_CHROMEDIRECTSETTING_GET"/>
-  <int value="504" label="DELETED_TYPES_PRIVATE_CHROMEDIRECTSETTING_SET"/>
-  <int value="505" label="DELETED_TYPES_PRIVATE_CHROMEDIRECTSETTING_CLEAR"/>
-  <int value="506" label="DELETED_EXPERIMENTAL_SYSTEMINFO_STORAGE_EJECTDEVICE"/>
-  <int value="507" label="SYSTEM_CPU_GETINFO"/>
-  <int value="508" label="BOOKMARKMANAGERPRIVATE_REMOVETREES"/>
-  <int value="509" label="SYSTEM_DISPLAY_GETINFO"/>
-  <int value="510" label="SYSTEM_DISPLAY_SETDISPLAYPROPERTIES"/>
-  <int value="511" label="SYSTEM_MEMORY_GETINFO"/>
-  <int value="512" label="FILEMANAGERPRIVATEINTERNAL_GETSHAREURL"/>
-  <int value="513" label="SYSTEM_STORAGE_GETINFO"/>
-  <int value="514" label="SYSTEM_STORAGE_EJECTDEVICE"/>
-  <int value="515" label="DELETED_SYSTEM_STORAGE_ADDAVAILABLECAPACITYWATCH"/>
-  <int value="516" label="DELETED_SYSTEM_STORAGE_REMOVEAVAILABLECAPACITYWATCH"/>
-  <int value="517"
-      label="DELETED_SYSTEM_STORAGE_GETALLAVAILABLECAPACITYWATCHES"/>
-  <int value="518"
-      label="DELETED_SYSTEM_STORAGE_REMOVEALLAVAILABLECAPACITYWATCHES"/>
-  <int value="519" label="DOWNLOADS_REMOVEFILE"/>
-  <int value="520" label="DOWNLOADS_SHOWDEFAULTFOLDER"/>
-  <int value="521" label="DELETED_INFOBARS_SHOW"/>
-  <int value="522" label="DOWNLOADS_SETSHELFENABLED"/>
-  <int value="523" label="IMAGEWRITER_WRITEFROMURL"/>
-  <int value="524" label="IMAGEWRITER_WRITEFROMFILE"/>
-  <int value="525" label="IMAGEWRITER_CANCELWRITE"/>
-  <int value="526" label="IMAGEWRITER_DESTROYPARTITIONS"/>
-  <int value="527" label="DELETED_FEEDBACKPRIVATE_GETSTRINGS"/>
-  <int value="528" label="DELETED_LOGPRIVATE_GETHISTORICAL"/>
-  <int value="529" label="VIRTUALKEYBOARDPRIVATE_MOVECURSOR"/>
-  <int value="530" label="METRICSPRIVATE_GETVARIATIONPARAMS"/>
-  <int value="531" label="DELETED_WEBVIEW_SETPERMISSION"/>
-  <int value="532" label="DESKTOPCAPTURE_CHOOSEDESKTOPMEDIA"/>
-  <int value="533" label="APP_CURRENTWINDOWINTERNAL_SETSHAPE"/>
-  <int value="534" label="PROCESSES_GETPROCESSINFO"/>
-  <int value="535" label="PROCESSES_GETPROCESSIDFORTAB"/>
-  <int value="536" label="PROCESSES_TERMINATE"/>
-  <int value="537" label="SOCKETS_UDP_CREATE"/>
-  <int value="538" label="SOCKETS_UDP_UPDATE"/>
-  <int value="539" label="SOCKETS_UDP_BIND"/>
-  <int value="540" label="SOCKETS_UDP_SEND"/>
-  <int value="541" label="SOCKETS_UDP_CLOSE"/>
-  <int value="542" label="SOCKETS_UDP_GETINFO"/>
-  <int value="543" label="SOCKETS_UDP_GETSOCKETS"/>
-  <int value="544" label="SOCKETS_UDP_JOINGROUP"/>
-  <int value="545" label="SOCKETS_UDP_LEAVEGROUP"/>
-  <int value="546" label="SOCKETS_UDP_SETMULTICASTTIMETOLIVE"/>
-  <int value="547" label="SOCKETS_UDP_SETMULTICASTLOOPBACKMODE"/>
-  <int value="548" label="SOCKETS_UDP_GETJOINEDGROUPS"/>
-  <int value="549" label="DELETED_SIGNED_IN_DEVICES_GET"/>
-  <int value="550" label="AUTOTESTPRIVATE_SIMULATEASANMEMORYBUG"/>
-  <int value="551" label="DELETED_WEBVIEW_CLEARDATA"/>
-  <int value="552" label="SESSIONS_GETRECENTLYCLOSED"/>
-  <int value="553" label="SESSIONS_GETDEVICES"/>
-  <int value="554" label="SESSIONS_RESTORE"/>
-  <int value="555" label="SYNCFILESYSTEM_GETSERVICESTATUS"/>
-  <int value="556" label="ECHOPRIVATE_SETOFFERINFO"/>
-  <int value="557" label="ECHOPRIVATE_GETOFFERINFO"/>
-  <int value="558" label="DEVELOPERPRIVATE_ISPROFILEMANAGED"/>
-  <int value="559" label="DELETED_FILEMANAGERPRIVATE_INSTALLWEBSTOREITEM"/>
-  <int value="560" label="FILEMANAGERPRIVATEINTERNAL_STARTCOPY"/>
-  <int value="561" label="FILEMANAGERPRIVATE_CANCELCOPY"/>
-  <int value="562" label="NETWORKINGPRIVATE_CREATENETWORK"/>
-  <int value="563" label="BRAILLEDISPLAYPRIVATE_GETDISPLAYSTATE"/>
-  <int value="564" label="BRAILLEDISPLAYPRIVATE_WRITEDOTS"/>
-  <int value="565" label="USB_GETDEVICES"/>
-  <int value="566" label="USB_REQUESTACCESS"/>
-  <int value="567" label="USB_OPENDEVICE"/>
-  <int value="568" label="ACTIVITYLOGPRIVATE_DELETEDATABASE"/>
-  <int value="569" label="ACTIVITYLOGPRIVATE_DELETEURLS"/>
-  <int value="570" label="FILEMANAGERPRIVATE_REQUESTWEBSTOREACCESSTOKEN"/>
-  <int value="571" label="IMAGEWRITER_LISTREMOVABLESTORAGEDEVICES"/>
-  <int value="572" label="WALLPAPER_SETWALLPAPER"/>
-  <int value="573" label="VIRTUALKEYBOARDPRIVATE_HIDEKEYBOARD"/>
-  <int value="574" label="AUTOTESTPRIVATE_LOCKSCREEN"/>
-  <int value="575" label="WEBRTCLOGGINGPRIVATE_SETMETADATA"/>
-  <int value="576" label="WEBRTCLOGGINGPRIVATE_START"/>
-  <int value="577" label="WEBRTCLOGGINGPRIVATE_SETUPLOADONRENDERCLOSE"/>
-  <int value="578" label="WEBRTCLOGGINGPRIVATE_STOP"/>
-  <int value="579" label="WEBRTCLOGGINGPRIVATE_UPLOAD"/>
-  <int value="580" label="WEBRTCLOGGINGPRIVATE_DISCARD"/>
-  <int value="581" label="DELETED_WEBVIEW_OVERRIDEUSERAGENT"/>
-  <int value="582" label="DELETED_PRINCIPALSPRIVATE_SHOWAVATARBUBBLE"/>
-  <int value="583" label="DELETED_PRINCIPALSPRIVATE_SIGNOUT"/>
-  <int value="584" label="CAST_CHANNEL_OPEN"/>
-  <int value="585" label="CAST_CHANNEL_SEND"/>
-  <int value="586" label="CAST_CHANNEL_CLOSE"/>
-  <int value="587" label="RUNTIME_RESTART"/>
-  <int value="588" label="DESKTOPCAPTURE_CANCELCHOOSEDESKTOPMEDIA"/>
-  <int value="589" label="APP_CURRENTWINDOWINTERNAL_SETALWAYSONTOP"/>
-  <int value="590" label="SOCKETS_TCP_CREATE"/>
-  <int value="591" label="SOCKETS_TCP_UPDATE"/>
-  <int value="592" label="SOCKETS_TCP_SETPAUSED"/>
-  <int value="593" label="SOCKETS_TCP_SETKEEPALIVE"/>
-  <int value="594" label="SOCKETS_TCP_SETNODELAY"/>
-  <int value="595" label="SOCKETS_TCP_CONNECT"/>
-  <int value="596" label="SOCKETS_TCP_DISCONNECT"/>
-  <int value="597" label="SOCKETS_TCP_SEND"/>
-  <int value="598" label="SOCKETS_TCP_CLOSE"/>
-  <int value="599" label="SOCKETS_TCP_GETINFO"/>
-  <int value="600" label="SOCKETS_TCP_GETSOCKETS"/>
-  <int value="601" label="NETWORKINGPRIVATE_GETENABLEDNETWORKTYPES"/>
-  <int value="602" label="NETWORKINGPRIVATE_ENABLENETWORKTYPE"/>
-  <int value="603" label="NETWORKINGPRIVATE_DISABLENETWORKTYPE"/>
-  <int value="604" label="SOCKETS_TCP_SERVER_CREATE"/>
-  <int value="605" label="SOCKETS_TCP_SERVER_UPDATE"/>
-  <int value="606" label="SOCKETS_TCP_SERVER_SETPAUSED"/>
-  <int value="607" label="SOCKETS_TCP_SERVER_LISTEN"/>
-  <int value="608" label="SOCKETS_TCP_SERVER_DISCONNECT"/>
-  <int value="609" label="SOCKETS_TCP_SERVER_CLOSE"/>
-  <int value="610" label="SOCKETS_TCP_SERVER_GETINFO"/>
-  <int value="611" label="SOCKETS_TCP_SERVER_GETSOCKETS"/>
-  <int value="612" label="SYSTEM_STORAGE_GETAVAILABLECAPACITY"/>
-  <int value="613" label="BROWSERACTION_OPEN_POPUP"/>
-  <int value="614" label="WEBRTC_AUDIO_PRIVATE_GET_SINKS"/>
-  <int value="615" label="DELETED_WEBRTC_AUDIO_PRIVATE_GET_ACTIVE_SINK"/>
-  <int value="616" label="DELETED_WEBRTC_AUDIO_PRIVATE_SET_ACTIVE_SINK"/>
-  <int value="617" label="WEBRTC_AUDIO_PRIVATE_GET_ASSOCIATED_SINK"/>
-  <int value="618" label="VIRTUALKEYBOARDPRIVATE_KEYBOARDLOADED"/>
-  <int value="619" label="DELETED_APP_CURRENTWINDOWINTERNAL_SETMINWIDTH"/>
-  <int value="620" label="DELETED_APP_CURRENTWINDOWINTERNAL_SETMINHEIGHT"/>
-  <int value="621" label="DELETED_APP_CURRENTWINDOWINTERNAL_SETMAXWIDTH"/>
-  <int value="622" label="DELETED_APP_CURRENTWINDOWINTERNAL_SETMAXHEIGHT"/>
-  <int value="623" label="SYSTEMPRIVATE_GETAPIKEY"/>
-  <int value="624" label="CHROMEOSINFOPRIVATE_SET"/>
-  <int value="625" label="BOOKMARKMANAGERPRIVATE_GETMETAINFO"/>
-  <int value="626" label="BOOKMARKMANAGERPRIVATE_SETMETAINFO"/>
-  <int value="627" label="FILESYSTEMPROVIDER_MOUNT"/>
-  <int value="628" label="AUTOTESTPRIVATE_GETEXTENSIONSINFO"/>
-  <int value="629" label="DELETED_SCREENLOCKPRIVATE_GETLOCKED"/>
-  <int value="630" label="DELETED_SCREENLOCKPRIVATE_SETLOCKED"/>
-  <int value="631" label="DELETED_SCREENLOCKPRIVATE_SHOWMESSAGE"/>
-  <int value="632" label="FEEDBACKPRIVATE_GETHISTOGRAMS"/>
-  <int value="633" label="SYSTEM_NETWORK_GETNETWORKINTERFACES"/>
-  <int value="634" label="SERIAL_GETDEVICES"/>
-  <int value="635" label="SERIAL_UPDATE"/>
-  <int value="636" label="SERIAL_SETPAUSED"/>
-  <int value="637" label="SERIAL_GETINFO"/>
-  <int value="638" label="SERIAL_GETCONNECTIONS"/>
-  <int value="639" label="SERIAL_SEND"/>
-  <int value="640" label="GCM_REGISTER"/>
-  <int value="641" label="GCM_SEND"/>
-  <int value="642" label="SERIAL_CONNECT"/>
-  <int value="643" label="SERIAL_DISCONNECT"/>
-  <int value="644"
-      label="DELETED_MEDIAGALLERIES_GETALLMEDIAFILESYSTEMMETADATA"/>
-  <int value="645" label="FIRSTRUNPRIVATE_GETLOCALIZEDSTRINGS"/>
-  <int value="646" label="FIRSTRUNPRIVATE_LAUNCHTUTORIAL"/>
-  <int value="647" label="SOCKETS_UDP_SETPAUSED"/>
-  <int value="648" label="DELETED_WEBVIEW_CAPTUREVISIBLEREGION"/>
-  <int value="649" label="MEDIAGALLERIES_GETMETADATA"/>
-  <int value="650" label="INPUT_IME_SENDKEYEVENTS"/>
-  <int value="651" label="VIRTUALKEYBOARDPRIVATE_LOCKKEYBOARD"/>
-  <int value="652" label="DELETED_SCREENLOCKPRIVATE_SHOWCUSTOMICON"/>
-  <int value="653" label="INPUT_IME_HIDEINPUTVIEW"/>
-  <int value="654" label="BOOKMARKMANAGERPRIVATE_UNDO"/>
-  <int value="655" label="BOOKMARKMANAGERPRIVATE_REDO"/>
-  <int value="656" label="BOOKMARKMANAGERPRIVATE_UNDOINFO"/>
-  <int value="657" label="BOOKMARKMANAGERPRIVATE_REDOINFO"/>
-  <int value="658" label="MEDIAGALLERIES_ADDUSERSELECTEDFOLDER"/>
-  <int value="659"
-      label="DELETED_PREFERENCESPRIVATE_GETSYNCCATEGORIESWITHOUTPASSPHRASE"/>
-  <int value="660" label="DELETED_READINGLISTPRIVATE_ADDENTRY"/>
-  <int value="661" label="DELETED_READINGLISTPRIVATE_REMOVEENTRY"/>
-  <int value="662" label="DELETED_READINGLISTPRIVATE_GETENTRIES"/>
-  <int value="663" label="DELETED_MEDIAGALLERIES_STARTMEDIASCAN"/>
-  <int value="664" label="DELETED_MEDIAGALLERIES_CANCELMEDIASCAN"/>
-  <int value="665" label="DELETED_MEDIAGALLERIES_ADDSCANRESULTS"/>
-  <int value="666" label="DELETED_LOGPRIVATE_STARTNETINTERNALSWATCH"/>
-  <int value="667" label="DELETED_LOGPRIVATE_STOPNETINTERNALSWATCH"/>
-  <int value="668" label="FILEMANAGERPRIVATE_GETPROFILES"/>
-  <int value="669" label="DELETED_FILEMANAGERPRIVATE_VISITDESKTOP"/>
-  <int value="670" label="VIRTUALKEYBOARDPRIVATE_GETKEYBOARDCONFIG"/>
-  <int value="671" label="HID_GETDEVICES"/>
-  <int value="672" label="HID_CONNECT"/>
-  <int value="673" label="HID_DISCONNECT"/>
-  <int value="674" label="HID_RECEIVE"/>
-  <int value="675" label="HID_SEND"/>
-  <int value="676" label="HID_RECEIVEFEATUREREPORT"/>
-  <int value="677" label="HID_SENDFEATUREREPORT"/>
-  <int value="678" label="HOTWORDPRIVATE_SETENABLED"/>
-  <int value="679" label="HOTWORDPRIVATE_GETSTATUS"/>
-  <int value="680" label="DELETED_APP_CURRENTWINDOWINTERNAL_SETBADGEICON"/>
-  <int value="681" label="DELETED_APP_CURRENTWINDOWINTERNAL_CLEARBADGE"/>
-  <int value="682" label="DELETED_WEBVIEW_SETZOOM"/>
-  <int value="683" label="DELETED_WEBVIEW_GETZOOM"/>
-  <int value="684" label="DEVELOPERPRIVATE_REQUESTFILESOURCE"/>
-  <int value="685" label="DEVELOPERPRIVATE_OPENDEVTOOLS"/>
-  <int value="686" label="ACTIVITYLOGPRIVATE_DELETEACTIVITIES"/>
-  <int value="687" label="NETWORKINGPRIVATE_SETWIFITDLSENABLEDSTATE"/>
-  <int value="688" label="NETWORKINGPRIVATE_GETWIFITDLSSTATUS"/>
-  <int value="689" label="DELETED_SCREENLOCKPRIVATE_HIDECUSTOMICON"/>
-  <int value="690" label="DELETED_SCREENLOCKPRIVATE_SETAUTHTYPE"/>
-  <int value="691" label="DELETED_SCREENLOCKPRIVATE_GETAUTHTYPE"/>
-  <int value="692" label="DELETED_SCREENLOCKPRIVATE_ACCEPTAUTHATTEMPT"/>
-  <int value="693" label="DELETED_WEBVIEW_FIND"/>
-  <int value="694" label="DELETED_WEBVIEW_STOPFINDING"/>
-  <int value="695" label="DELETED_WEBVIEW_CONTEXTMENUSCREATE"/>
-  <int value="696" label="DELETED_WEBVIEW_CONTEXTMENUSUPDATE"/>
-  <int value="697" label="DELETED_WEBVIEW_CONTEXTMENUSREMOVE"/>
-  <int value="698" label="DELETED_WEBVIEW_CONTEXTMENUSREMOVEALL"/>
-  <int value="699" label="DELETED_AUTOMATIONINTERNAL_ENABLETAB"/>
-  <int value="700" label="APP_CURRENTWINDOWINTERNAL_SETSIZECONSTRAINTS"/>
-  <int value="701" label="BLUETOOTH_GETDEVICE"/>
-  <int value="702" label="GCM_UNREGISTER"/>
-  <int value="703"
-      label="DELETED_FILEMANAGERPRIVATEINTERNAL_REQUESTDRIVESHARE"/>
-  <int value="704" label="METRICSPRIVATE_RECORDSPARSEVALUE"/>
-  <int value="705" label="HOTWORDPRIVATE_SETAUDIOLOGGINGENABLED"/>
-  <int value="706" label="BLUETOOTHPRIVATE_SETADAPTERSTATE"/>
-  <int value="707" label="DELETED_BLUETOOTHPRIVATE_ENABLEPAIRING"/>
-  <int value="708" label="DELETED_BLUETOOTHPRIVATE_DISABLEPAIRING"/>
-  <int value="709" label="BLUETOOTHPRIVATE_SETPAIRINGRESPONSE"/>
-  <int value="710" label="NETWORKINGPRIVATE_GETCAPTIVEPORTALSTATUS"/>
-  <int value="711" label="AUTOMATIONINTERNAL_PERFORMACTION"/>
-  <int value="712" label="DELETED_BLUETOOTH_UPDATE_SOCKET"/>
-  <int value="713" label="DELETED_BLUETOOTH_SET_SOCKET_PAUSED"/>
-  <int value="714" label="DELETED_BLUETOOTH_GET_SOCKET"/>
-  <int value="715" label="DELETED_BLUETOOTH_GET_SOCKETS"/>
-  <int value="716" label="FILESYSTEMPROVIDER_UNMOUNT"/>
-  <int value="717" label="FILESYSTEMPROVIDERINTERNAL_UNMOUNTREQUESTEDSUCCESS"/>
-  <int value="718"
-      label="DELETED_FILESYSTEMPROVIDERINTERNAL_UNMOUNTREQUESTEDERROR"/>
-  <int value="719"
-      label="DELETED_MEDIAGALLERIES_DROPPERMISSIONFORMEDIAFILESYSTEM"/>
-  <int value="720" label="WEBCAMPRIVATE_SET"/>
-  <int value="721" label="WEBCAMPRIVATE_RESET"/>
-  <int value="722" label="WEBCAMPRIVATE_GET"/>
-  <int value="723" label="BLUETOOTHLOWENERGY_GETSERVICE"/>
-  <int value="724" label="BLUETOOTHLOWENERGY_GETSERVICES"/>
-  <int value="725" label="BLUETOOTHLOWENERGY_GETCHARACTERISTIC"/>
-  <int value="726" label="BLUETOOTHLOWENERGY_GETCHARACTERISTICS"/>
-  <int value="727" label="BLUETOOTHLOWENERGY_GETINCLUDEDSERVICES"/>
-  <int value="728" label="BLUETOOTHLOWENERGY_GETDESCRIPTOR"/>
-  <int value="729" label="BLUETOOTHLOWENERGY_GETDESCRIPTORS"/>
-  <int value="730" label="BLUETOOTHLOWENERGY_READCHARACTERISTICVALUE"/>
-  <int value="731" label="BLUETOOTHLOWENERGY_WRITECHARACTERISTICVALUE"/>
-  <int value="732" label="BLUETOOTHLOWENERGY_READDESCRIPTORVALUE"/>
-  <int value="733" label="BLUETOOTHLOWENERGY_WRITEDESCRIPTORVALUE"/>
-  <int value="734" label="BOOKMARKMANAGERPRIVATE_CREATEWITHMETAINFO"/>
-  <int value="735" label="BOOKMARKMANAGERPRIVATE_UPDATEMETAINFO"/>
-  <int value="736" label="BLUETOOTHSOCKET_CREATE"/>
-  <int value="737" label="BLUETOOTHSOCKET_UPDATE"/>
-  <int value="738" label="BLUETOOTHSOCKET_SETPAUSED"/>
-  <int value="739" label="BLUETOOTHSOCKET_LISTENUSINGRFCOMM"/>
-  <int value="740" label="BLUETOOTHSOCKET_LISTENUSINGINSECURERFCOMM"/>
-  <int value="741" label="BLUETOOTHSOCKET_LISTENUSINGL2CAP"/>
-  <int value="742" label="BLUETOOTHSOCKET_CONNECT"/>
-  <int value="743" label="BLUETOOTHSOCKET_DISCONNECT"/>
-  <int value="744" label="BLUETOOTHSOCKET_CLOSE"/>
-  <int value="745" label="BLUETOOTHSOCKET_SEND"/>
-  <int value="746" label="BLUETOOTHSOCKET_GETINFO"/>
-  <int value="747" label="BLUETOOTHSOCKET_GETSOCKETS"/>
-  <int value="748" label="DELETED_WEBSTOREPRIVATE_SIGNINFUNCTION"/>
-  <int value="749" label="DELETED_SHELL_CREATEWINDOW"/>
-  <int value="750"
-      label="FILESYSTEMPROVIDERINTERNAL_GETMETADATAREQUESTEDSUCCESS"/>
-  <int value="751"
-      label="DELETED_FILESYSTEMPROVIDERINTERNAL_GETMETADATAREQUESTEDERROR"/>
-  <int value="752" label="BROWSER_OPENTAB"/>
-  <int value="753" label="MANAGEMENT_CREATEAPPSHORTCUT"/>
-  <int value="754" label="DELETED_WEBVIEW_SHOWCONTEXTMENU"/>
-  <int value="755" label="WEBRTCLOGGINGPRIVATE_STARTRTPDUMP"/>
-  <int value="756" label="WEBRTCLOGGINGPRIVATE_STOPRTPDUMP"/>
-  <int value="757" label="AUTOMATIONINTERNAL_ENABLEDESKTOP"/>
-  <int value="758" label="HOTWORDPRIVATE_SETHOTWORDSESSIONSTATE"/>
-  <int value="759" label="HOTWORDPRIVATE_NOTIFYHOTWORDRECOGNITION"/>
-  <int value="760"
-      label="FILESYSTEMPROVIDERINTERNAL_READDIRECTORYREQUESTEDSUCCESS"/>
-  <int value="761"
-      label="DELETED_FILESYSTEMPROVIDERINTERNAL_READDIRECTORYREQUESTEDERROR"/>
-  <int value="762" label="DELETED_LEDGER_BATCHEXECUTE"/>
-  <int value="763"
-      label="DELETED_FILESYSTEMPROVIDERINTERNAL_OPENFILEREQUESTEDSUCCESS"/>
-  <int value="764"
-      label="DELETED_FILESYSTEMPROVIDERINTERNAL_OPENFILEREQUESTEDERROR"/>
-  <int value="765"
-      label="DELETED_FILESYSTEMPROVIDERINTERNAL_CLOSEFILEREQUESTEDSUCCESS"/>
-  <int value="766"
-      label="DELETED_FILESYSTEMPROVIDERINTERNAL_CLOSEFILEREQUESTEDERROR"/>
-  <int value="767" label="DELETED_SYNCEDNOTIFICATIONSPRIVATE_GETINITIALDATA"/>
-  <int value="768"
-      label="DELETED_SYNCEDNOTIFICATIONSPRIVATE_UPDATENOTIFICATION"/>
-  <int value="769" label="DELETED_SYNCEDNOTIFICATIONSPRIVATE_SETRENDERCONTEXT"/>
-  <int value="770" label="IDENTITY_GETACCOUNTS"/>
-  <int value="771" label="FILEMANAGERPRIVATE_RESOLVEISOLATEDENTRIES"/>
-  <int value="772" label="FILESYSTEMPROVIDERINTERNAL_READFILEREQUESTEDSUCCESS"/>
-  <int value="773"
-      label="DELETED_FILESYSTEMPROVIDERINTERNAL_READFILEREQUESTEDERROR"/>
-  <int value="774" label="NETWORKINGPRIVATE_GETNETWORKS"/>
-  <int value="775" label="DELETED_WEBVIEW_SETNAME"/>
-  <int value="776" label="ENTERPRISE_PLATFORMKEYSINTERNAL_GENERATEKEY"/>
-  <int value="777" label="PLATFORMKEYSINTERNAL_SIGN"/>
-  <int value="778" label="ENTERPRISE_PLATFORMKEYSINTERNAL_GETTOKENS"/>
-  <int value="779" label="ENTERPRISE_PLATFORMKEYS_GETCERTIFICATES"/>
-  <int value="780" label="ENTERPRISE_PLATFORMKEYS_IMPORTCERTIFICATE"/>
-  <int value="781" label="ENTERPRISE_PLATFORMKEYS_REMOVECERTIFICATE"/>
-  <int value="782" label="FILEMANAGERPRIVATE_OPENINSPECTOR"/>
-  <int value="783" label="DELETED_STREAMSPRIVATE_ABORT"/>
-  <int value="784" label="MANAGEMENT_SETLAUNCHTYPE"/>
-  <int value="785" label="MANAGEMENT_GENERATEAPPFORLINK"/>
-  <int value="786" label="DELETED_GUESTVIEWINTERNAL_ALLOCATEINSTANCEID"/>
-  <int value="787" label="DELETED_WEBVIEW_NAVIGATE"/>
-  <int value="788" label="INPUTMETHODPRIVATE_GETCURRENTINPUTMETHOD"/>
-  <int value="789" label="INPUTMETHODPRIVATE_SETCURRENTINPUTMETHOD"/>
-  <int value="790" label="INPUTMETHODPRIVATE_GETINPUTMETHODS"/>
-  <int value="791" label="IDENTITY_GETPROFILEUSERINFO"/>
-  <int value="792" label="VIRTUALKEYBOARDPRIVATE_OPENSETTINGS"/>
-  <int value="793" label="BLUETOOTHLOWENERGY_CONNECT"/>
-  <int value="794" label="BLUETOOTHLOWENERGY_DISCONNECT"/>
-  <int value="795" label="DELETED_WEBSTOREPRIVATE_GETEPHEMERALAPPSENABLED"/>
-  <int value="796" label="DELETED_WEBSTOREPRIVATE_LAUNCHEPHEMERALAPP"/>
-  <int value="797" label="FILESYSTEMPROVIDERINTERNAL_OPERATIONREQUESTEDERROR"/>
-  <int value="798"
-      label="FILESYSTEMPROVIDERINTERNAL_OPERATIONREQUESTEDSUCCESS"/>
-  <int value="799" label="GUESTVIEWINTERNAL_CREATEGUEST"/>
-  <int value="800" label="WEBVIEWINTERNAL_CAPTUREVISIBLEREGION"/>
-  <int value="801" label="WEBVIEWINTERNAL_CONTEXTMENUSCREATE"/>
-  <int value="802" label="WEBVIEWINTERNAL_CONTEXTMENUSREMOVE"/>
-  <int value="803" label="WEBVIEWINTERNAL_CONTEXTMENUSREMOVEALL"/>
-  <int value="804" label="WEBVIEWINTERNAL_CONTEXTMENUSUPDATE"/>
-  <int value="805" label="WEBVIEWINTERNAL_CLEARDATA"/>
-  <int value="806" label="WEBVIEWINTERNAL_EXECUTESCRIPT"/>
-  <int value="807" label="WEBVIEWINTERNAL_FIND"/>
-  <int value="808" label="WEBVIEWINTERNAL_GETZOOM"/>
-  <int value="809" label="WEBVIEWINTERNAL_GO"/>
-  <int value="810" label="WEBVIEWINTERNAL_INSERTCSS"/>
-  <int value="811" label="WEBVIEWINTERNAL_NAVIGATE"/>
-  <int value="812" label="WEBVIEWINTERNAL_OVERRIDEUSERAGENT"/>
-  <int value="813" label="WEBVIEWINTERNAL_RELOAD"/>
-  <int value="814" label="WEBVIEWINTERNAL_SETNAME"/>
-  <int value="815" label="WEBVIEWINTERNAL_SETPERMISSION"/>
-  <int value="816" label="WEBVIEWINTERNAL_SETZOOM"/>
-  <int value="817" label="WEBVIEWINTERNAL_SHOWCONTEXTMENU"/>
-  <int value="818" label="WEBVIEWINTERNAL_STOP"/>
-  <int value="819" label="WEBVIEWINTERNAL_STOPFINDING"/>
-  <int value="820" label="WEBVIEWINTERNAL_TERMINATE"/>
-  <int value="821" label="BLUETOOTHLOWENERGY_STARTCHARACTERISTICNOTIFICATIONS"/>
-  <int value="822" label="BLUETOOTHLOWENERGY_STOPCHARACTERISTICNOTIFICATIONS"/>
-  <int value="823" label="DELETED_GCDPRIVATE_GETCLOUDDEVICELIST"/>
-  <int value="824" label="DELETED_GCDPRIVATE_QUERYFORNEWLOCALDEVICES"/>
-  <int value="825" label="DELETED_GCDPRIVATE_PREFETCHWIFIPASSWORD"/>
-  <int value="826" label="DELETED_GCDPRIVATE_ESTABLISHSESSION"/>
-  <int value="827" label="DELETED_GCDPRIVATE_SENDMESSAGE"/>
-  <int value="828" label="DELETED_GCDPRIVATE_CONFIRMCODE"/>
-  <int value="829" label="DELETED_GCDPRIVATE_TERMINATESESSION"/>
-  <int value="830" label="TABS_SETZOOM"/>
-  <int value="831" label="TABS_GETZOOM"/>
-  <int value="832" label="TABS_SETZOOMSETTINGS"/>
-  <int value="833" label="TABS_GETZOOMSETTINGS"/>
-  <int value="834" label="DELETED_GCDPRIVATE_GETCOMMANDDEFINITIONS"/>
-  <int value="835" label="DELETED_GCDPRIVATE_INSERTCOMMAND"/>
-  <int value="836" label="DELETED_GCDPRIVATE_GETCOMMAND"/>
-  <int value="837" label="DELETED_GCDPRIVATE_CANCELCOMMAND"/>
-  <int value="838" label="DELETED_GCDPRIVATE_GETCOMMANDSLIST"/>
-  <int value="839" label="APPVIEWINTERNAL_ATTACHFRAME"/>
-  <int value="840" label="APPVIEWINTERNAL_DENYREQUEST"/>
-  <int value="841" label="FILEMANAGERPRIVATEINTERNAL_GETDOWNLOADURL"/>
-  <int value="842" label="DELETED_EASYUNLOCKPRIVATE_PERFORMECDHKEYAGREEMENT"/>
-  <int value="843" label="DELETED_EASYUNLOCKPRIVATE_GENERATEECP256KEYPAIR"/>
-  <int value="844" label="DELETED_EASYUNLOCKPRIVATE_CREATESECUREMESSAGE"/>
-  <int value="845" label="DELETED_EASYUNLOCKPRIVATE_UNWRAPSECUREMESSAGE"/>
-  <int value="846" label="DELETED_LOGPRIVATE_STARTEVENTRECODER"/>
-  <int value="847" label="DELETED_LOGPRIVATE_STOPEVENTRECODER"/>
-  <int value="848" label="DELETED_LOGPRIVATE_DUMPLOGS"/>
-  <int value="849" label="SOCKET_SECURE"/>
-  <int value="850" label="SOCKETS_TCP_SECURE"/>
-  <int value="851" label="DELETED_EXPERIENCESAMPLINGPRIVATE_GETBROWSERINFO"/>
-  <int value="852"
-      label="DELETED_EASYUNLOCKPRIVATE_SEEKBLUETOOTHDEVICEBYADDRESS"/>
-  <int value="853" label="DELETED_EASYUNLOCKPRIVATE_GETSTRINGS"/>
-  <int value="854" label="DELETED_NOTIFICATIONPROVIDER_SENDONCLEAR"/>
-  <int value="855" label="DELETED_NOTIFICATIONPROVIDER_NOTIFYONCLEARED"/>
-  <int value="856" label="DELETED_NOTIFICATIONPROVIDER_NOTIFYONCLICKED"/>
-  <int value="857" label="DELETED_NOTIFICATIONPROVIDER_NOTIFYONBUTTONCLICKED"/>
-  <int value="858"
-      label="DELETED_NOTIFICATIONPROVIDER_NOTIFYONPERMISSIONLEVELCHANGED"/>
-  <int value="859" label="DELETED_NOTIFICATIONPROVIDER_NOTIFYONSHOWSETTINGS"/>
-  <int value="860" label="DELETED_NOTIFICATIONPROVIDER_GETNOTIFIER"/>
-  <int value="861" label="DELETED_NOTIFICATIONPROVIDER_GETALLNOTIFIERS"/>
-  <int value="862" label="DELETED_GCDPRIVATE_GETPREFETCHEDWIFINAMELIST"/>
-  <int value="863" label="GUESTVIEWINTERNAL_SETAUTOSIZE"/>
-  <int value="864" label="DELETED_COPRESENCEPRIVATE_SENDFOUND"/>
-  <int value="865" label="DELETED_COPRESENCEPRIVATE_SENDSAMPLES"/>
-  <int value="866" label="DELETED_COPRESENCEPRIVATE_SENDDETECT"/>
-  <int value="867" label="DELETED_COPRESENCEPRIVATE_SENDINITIALIZED"/>
-  <int value="868" label="DELETED_COPRESENCE_EXECUTE"/>
-  <int value="869" label="DELETED_COPRESENCE_SETAPIKEY"/>
-  <int value="870" label="DELETED_FILESYSTEM_OBSERVEDIRECTORY"/>
-  <int value="871" label="DELETED_FILESYSTEM_UNOBSERVEENTRY"/>
-  <int value="872" label="DELETED_FILESYSTEM_GETOBSERVEDENTRIES"/>
-  <int value="873" label="BROWSINGDATA_REMOVESERVICEWORKERS"/>
-  <int value="874" label="DELETED_USBPRIVATE_GETDEVICES"/>
-  <int value="875" label="DELETED_USBPRIVATE_GETDEVICEINFO"/>
-  <int value="876" label="DELETED_EASYUNLOCKPRIVATE_UPDATESCREENLOCKSTATE"/>
-  <int value="877" label="CAST_CHANNEL_GETLOGS"/>
-  <int value="878" label="DELETED_EASYUNLOCKPRIVATE_SETPERMITACCESS"/>
-  <int value="879" label="DELETED_EASYUNLOCKPRIVATE_GETPERMITACCESS"/>
-  <int value="880" label="DELETED_EASYUNLOCKPRIVATE_CLEARPERMITACCESS"/>
-  <int value="881" label="DELETED_EASYUNLOCKPRIVATE_SETREMOTEDEVICES"/>
-  <int value="882" label="DELETED_EASYUNLOCKPRIVATE_GETREMOTEDEVICES"/>
-  <int value="883" label="FILESYSTEMPROVIDER_GETALL"/>
-  <int value="884"
-      label="DELETED_EASYUNLOCKPRIVATE_CONNECTTOBLUETOOTHSERVICEINSECURELY"/>
-  <int value="885" label="MEDIAGALLERIES_ADDGALLERYWATCH"/>
-  <int value="886" label="MEDIAGALLERIES_REMOVEGALLERYWATCH"/>
-  <int value="887" label="DELETED_MEDIAGALLERIES_GETALLGALLERYWATCH"/>
-  <int value="888" label="DELETED_MEDIAGALLERIES_REMOVEALLGALLERYWATCH"/>
-  <int value="889" label="MANAGEMENT_GETSELF"/>
-  <int value="890" label="APP_CURRENTWINDOWINTERNAL_SETVISIBLEONALLWORKSPACES"/>
-  <int value="891" label="DELETED_EASYUNLOCKPRIVATE_GETSIGNINCHALLENGE"/>
-  <int value="892" label="DELETED_EASYUNLOCKPRIVATE_TRYSIGNINSECRET"/>
-  <int value="893" label="ACCESSIBILITY_PRIVATE_SETFOCUSRING"/>
-  <int value="894" label="USB_GETCONFIGURATION"/>
-  <int value="895" label="WEBVIEWINTERNAL_SETALLOWTRANSPARENCY"/>
-  <int value="896" label="DELETED_EASYUNLOCKPRIVATE_GETUSERINFO"/>
-  <int value="897" label="HOTWORDPRIVATE_GETLAUNCHSTATE"/>
-  <int value="898" label="HOTWORDPRIVATE_SETHOTWORDALWAYSONSEARCHENABLED"/>
-  <int value="899" label="WEBVIEWINTERNAL_LOADDATAWITHBASEURL"/>
-  <int value="900" label="DELETED_GUESTVIEWINTERNAL_DESTROYGUEST"/>
-  <int value="901" label="DELETED_COPRESENCESOCKET_CREATEPEER"/>
-  <int value="902" label="DELETED_COPRESENCESOCKET_DESTROYPEER"/>
-  <int value="903" label="DELETED_COPRESENCESOCKET_SEND"/>
-  <int value="904" label="DELETED_COPRESENCESOCKET_DISCONNECT"/>
-  <int value="905" label="DELETED_BOOKMARKMANAGERPRIVATE_SETVERSION"/>
-  <int value="906" label="FILESYSTEMPROVIDER_NOTIFY"/>
-  <int value="907" label="USB_GETUSERSELECTEDDEVICES"/>
-  <int value="908" label="INPUTMETHODPRIVATE_GETINPUTMETHODCONFIG"/>
-  <int value="909" label="DELETED_WALLPAPERPRIVATE_GETSYNCSETTING"/>
-  <int value="910" label="DELETED_COPRESENCE_SETAUTHTOKEN"/>
-  <int value="911" label="CAST_CHANNEL_SETAUTHORITYKEYS"/>
-  <int value="912" label="HOTWORDPRIVATE_STARTTRAINING"/>
-  <int value="913" label="HOTWORDPRIVATE_FINALIZESPEAKERMODEL"/>
-  <int value="914" label="HOTWORDPRIVATE_STOPTRAINING"/>
-  <int value="915" label="DELETED_GCDPRIVATE_STARTPAIRING"/>
-  <int value="916" label="VPNPROVIDER_CREATECONFIG"/>
-  <int value="917" label="VPNPROVIDER_DESTROYCONFIG"/>
-  <int value="918" label="VPNPROVIDER_SETPARAMETERS"/>
-  <int value="919" label="VPNPROVIDER_SENDPACKET"/>
-  <int value="920" label="VPNPROVIDER_NOTIFYCONNECTIONSTATECHANGED"/>
-  <int value="921" label="DOCUMENTSCAN_SCAN"/>
-  <int value="922" label="DELETED_EASYUNLOCKPRIVATE_GETUSERIMAGE"/>
-  <int value="923" label="HOTWORDPRIVATE_NOTIFYSPEAKERMODELSAVED"/>
-  <int value="924" label="HOTWORDPRIVATE_GETLOCALIZEDSTRINGS"/>
-  <int value="925" label="HOTWORDPRIVATE_SETAUDIOHISTORYENABLED"/>
-  <int value="926" label="HOTWORDPRIVATE_GETAUDIOHISTORYENABLED"/>
-  <int value="927"
-      label="DELETED_APP_CURRENTWINDOWINTERNAL_SETINTERCEPTALLKEYS"/>
-  <int value="928" label="DELETED_LAUNCHERPAGE_PUSHSUBPAGE"/>
-  <int value="929" label="DELETED_LAUNCHERPAGE_SHOW"/>
-  <int value="930" label="AUTOTESTPRIVATE_SETTOUCHPADSENSITIVITY"/>
-  <int value="931" label="AUTOTESTPRIVATE_SETTAPTOCLICK"/>
-  <int value="932" label="AUTOTESTPRIVATE_SETTHREEFINGERCLICK"/>
-  <int value="933" label="AUTOTESTPRIVATE_SETTAPDRAGGING"/>
-  <int value="934" label="AUTOTESTPRIVATE_SETNATURALSCROLL"/>
-  <int value="935" label="AUTOTESTPRIVATE_SETMOUSESENSITIVITY"/>
-  <int value="936" label="AUTOTESTPRIVATE_SETPRIMARYBUTTONRIGHT"/>
-  <int value="937" label="DELETED_COPRESENCEENDPOINTS_CREATELOCALENDPOINT"/>
-  <int value="938" label="DELETED_COPRESENCEENDPOINTS_DESTROYLOCALENDPOINT"/>
-  <int value="939" label="DELETED_COPRESENCEENDPOINTS_SEND"/>
-  <int value="940" label="DELETED_INLINE_INSTALL_PRIVATE_INSTALL"/>
-  <int value="941" label="DELETED_LAUNCHERPAGE_SETENABLED"/>
-  <int value="942" label="DELETED_CRYPTOTOKENPRIVATE_REQUESTPERMISSION"/>
-  <int value="943" label="BLUETOOTHPRIVATE_DISCONNECTALL"/>
-  <int value="944" label="FILEMANAGERPRIVATEINTERNAL_GETMIMETYPE"/>
-  <int value="945" label="USB_SETCONFIGURATION"/>
-  <int value="946" label="DELETED_EASYUNLOCKPRIVATE_GETCONNECTIONINFO"/>
-  <int value="947" label="FILEMANAGERPRIVATEINTERNAL_COMPUTECHECKSUM"/>
-  <int value="948" label="PRINTERPROVIDERINTERNAL_REPORTPRINTRESULT"/>
-  <int value="949" label="PRINTERPROVIDERINTERNAL_REPORTPRINTERCAPABILITY"/>
-  <int value="950" label="PRINTERPROVIDERINTERNAL_REPORTPRINTERS"/>
-  <int value="951" label="FILESYSTEMPROVIDER_GET"/>
-  <int value="952" label="FILEMANAGERPRIVATE_SEARCHFILESBYHASHES"/>
-  <int value="953" label="DELETED_EASYUNLOCKPRIVATE_SHOWERRORBUBBLE"/>
-  <int value="954" label="DELETED_EXTENSIONVIEWINTERNAL_NAVIGATE"/>
-  <int value="955" label="DELETED_NETWORKING_CONFIG_SETNETWORKFILTER"/>
-  <int value="956" label="DELETED_NETWORKING_CONFIG_FINISHAUTHENTICATION"/>
-  <int value="957" label="PLATFORMKEYSINTERNAL_SELECTCLIENTCERTIFICATES"/>
-  <int value="958" label="DELETED_CRYPTOTOKENPRIVATE_CANORIGINASSERTAPPID"/>
-  <int value="959" label="DELETED_EASYUNLOCKPRIVATE_SETAUTOPAIRINGRESULT"/>
-  <int value="960" label="DELETED_FILEMANAGERPRIVATE_ISUMAENABLED"/>
-  <int value="961" label="WEBVIEWINTERNAL_SETALLOWSCALING"/>
-  <int value="962" label="PLATFORMKEYSINTERNAL_GETPUBLICKEY"/>
-  <int value="963" label="RUNTIME_OPENOPTIONSPAGE"/>
-  <int value="964" label="DELETED_AUDIOMODEM_TRANSMIT"/>
-  <int value="965" label="DELETED_AUDIOMODEM_STOPTRANSMIT"/>
-  <int value="966" label="DELETED_AUDIOMODEM_RECEIVE"/>
-  <int value="967" label="DELETED_AUDIOMODEM_STOPRECEIVE"/>
-  <int value="968" label="WEBRTCLOGGINGPRIVATE_STORE"/>
-  <int value="969" label="WEBRTCLOGGINGPRIVATE_UPLOADSTORED"/>
-  <int value="970" label="FILEMANAGERPRIVATEINTERNAL_SETENTRYTAG"/>
-  <int value="971" label="INPUTMETHODPRIVATE_FETCHALLDICTIONARYWORDS"/>
-  <int value="972" label="INPUTMETHODPRIVATE_ADDWORDTODICTIONARY"/>
-  <int value="973"
-      label="DASHBOARDPRIVATE_SHOWPERMISSIONPROMPTFORDELEGATEDINSTALL"/>
-  <int value="974" label="PRINTERPROVIDERINTERNAL_GETPRINTDATA"/>
-  <int value="975" label="VIRTUALKEYBOARDPRIVATE_SETMODE"/>
-  <int value="976" label="NETWORKINGPRIVATE_STARTACTIVATE"/>
-  <int value="977" label="FILEMANAGERPRIVATE_GRANTACCESS"/>
-  <int value="978" label="DEVELOPERPRIVATE_GETEXTENSIONSINFO"/>
-  <int value="979" label="DEVELOPERPRIVATE_GETEXTENSIONINFO"/>
-  <int value="980" label="FILEMANAGERPRIVATE_ENABLEEXTERNALFILESCHEME"/>
-  <int value="981" label="DEVELOPERPRIVATE_UPDATEEXTENSIONCONFIGURATION"/>
-  <int value="982" label="DEVELOPERPRIVATE_DELETEEXTENSIONERRORS"/>
-  <int value="983" label="FILEMANAGERPRIVATE_ISPIEXLOADERENABLED"/>
-  <int value="984" label="HOTWORDPRIVATE_SPEAKERMODELEXISTSRESULT"/>
-  <int value="985" label="SETTINGSPRIVATE_SETPREF"/>
-  <int value="986" label="DELETED_SETTINGSPRIVATE_SETDOUBLEPREF"/>
-  <int value="987" label="DELETED_SETTINGSPRIVATE_SETSTRINGPREF"/>
-  <int value="988" label="DELETED_SETTINGSPRIVATE_SETURLPREF"/>
-  <int value="989" label="SETTINGSPRIVATE_GETALLPREFS"/>
-  <int value="990" label="SETTINGSPRIVATE_GETPREF"/>
-  <int value="991" label="NETWORKINGPRIVATE_FORGETNETWORK"/>
-  <int value="992" label="DELETED_EASYUNLOCKPRIVATE_HIDEERRORBUBBLE"/>
-  <int value="993" label="WEBVIEWINTERNAL_SETZOOMMODE"/>
-  <int value="994" label="WEBVIEWINTERNAL_GETZOOMMODE"/>
-  <int value="995" label="DELETED_LAUNCHERSEARCHPROVIDER_SETSEARCHRESULTS"/>
-  <int value="996" label="DELETED_DATAREDUCTIONPROXY_CLEARDATASAVINGS"/>
-  <int value="997" label="BLUETOOTHPRIVATE_SETDISCOVERYFILTER"/>
-  <int value="998" label="FILESYSTEM_GETVOLUMELIST"/>
-  <int value="999" label="NETWORKINGPRIVATE_GETDEVICESTATES"/>
-  <int value="1000" label="DEVELOPERPRIVATE_GETPROFILECONFIGURATION"/>
-  <int value="1001" label="DEVELOPERPRIVATE_UPDATEPROFILECONFIGURATION"/>
-  <int value="1002" label="SOCKETS_UDP_SETBROADCAST"/>
-  <int value="1003" label="FILEMANAGERPRIVATE_GETPROVIDERS"/>
-  <int value="1004" label="WEBVIEWINTERNAL_ADDCONTENTSCRIPTS"/>
-  <int value="1005" label="WEBVIEWINTERNAL_REMOVECONTENTSCRIPTS"/>
-  <int value="1006" label="DEVELOPERPRIVATE_REPAIREXTENSION"/>
-  <int value="1007" label="DEVELOPERPRIVATE_SHOWOPTIONS"/>
-  <int value="1008" label="DEVELOPERPRIVATE_SHOWPATH"/>
-  <int value="1009" label="FILEMANAGERPRIVATE_ADDPROVIDEDFILESYSTEM"/>
-  <int value="1010" label="FILEMANAGERPRIVATE_CONFIGUREVOLUME"/>
-  <int value="1011" label="DELETED_SEARCHENGINESPRIVATE_GETSEARCHENGINES"/>
-  <int value="1012"
-      label="DELETED_SEARCHENGINESPRIVATE_SETSELECTEDSEARCHENGINE"/>
-  <int value="1013" label="AUTOFILLPRIVATE_SAVEADDRESS"/>
-  <int value="1014" label="AUTOFILLPRIVATE_GETADDRESSCOMPONENTS"/>
-  <int value="1015" label="AUTOFILLPRIVATE_SAVECREDITCARD"/>
-  <int value="1016" label="AUTOFILLPRIVATE_REMOVEENTRY"/>
-  <int value="1017" label="DELETED_AUTOFILLPRIVATE_VALIDATEPHONENUMBERS"/>
-  <int value="1018" label="AUTOFILLPRIVATE_MASKCREDITCARD"/>
-  <int value="1019" label="INSTANCEID_GETID"/>
-  <int value="1020" label="INSTANCEID_GETCREATIONTIME"/>
-  <int value="1021" label="INSTANCEID_GETTOKEN"/>
-  <int value="1022" label="INSTANCEID_DELETETOKEN"/>
-  <int value="1023" label="INSTANCEID_DELETEID"/>
-  <int value="1024" label="DELETED_GCDPRIVATE_GETDEVICEINFO"/>
-  <int value="1025" label="DELETED_SEARCHENGINESPRIVATE_GETHOTWORDSTATE"/>
-  <int value="1026" label="DELETED_SEARCHENGINESPRIVATE_ADDOTHERSEARCHENGINE"/>
-  <int value="1027" label="DELETED_SEARCHENGINESPRIVATE_REMOVESEARCHENGINE"/>
-  <int value="1028" label="DELETED_SEARCHENGINESPRIVATE_UPDATESEARCHENGINE"/>
-  <int value="1029" label="DELETED_SEARCHENGINESPRIVATE_OPTINTOHOTWORDING"/>
-  <int value="1030" label="DELETED_WEBSTOREWIDGETPRIVATE_INSTALLWEBSTOREITEM"/>
-  <int value="1031" label="DELETED_WEBSTOREWIDGETPRIVATE_GETSTRINGS"/>
-  <int value="1032" label="WEBRTCDESKTOPCAPTUREPRIVATE_CHOOSEDESKTOPMEDIA"/>
-  <int value="1033"
-      label="WEBRTCDESKTOPCAPTUREPRIVATE_CANCELCHOOSEDESKTOPMEDIA"/>
-  <int value="1034" label="BLUETOOTHLOWENERGY_REGISTERADVERTISEMENT"/>
-  <int value="1035" label="BLUETOOTHLOWENERGY_UNREGISTERADVERTISEMENT"/>
-  <int value="1036"
-      label="DELETED_PASSWORDSPRIVATE_CANPASSWORDACCOUNTBEMANAGED"/>
-  <int value="1037" label="PASSWORDSPRIVATE_REMOVECREDENTIAL"/>
-  <int value="1038" label="PASSWORDSPRIVATE_REMOVEPASSWORDEXCEPTION"/>
-  <int value="1039" label="PASSWORDSPRIVATE_REQUESTPLAINTEXTPASSWORD"/>
-  <int value="1040" label="DELETED_LAUNCHERPAGE_HIDE"/>
-  <int value="1041" label="PLATFORMKEYS_VERIFYTLSSERVERCERTIFICATE"/>
-  <int value="1042" label="DEVELOPERPRIVATE_SETSHORTCUTHANDLINGSUSPENDED"/>
-  <int value="1043" label="DEVELOPERPRIVATE_UPDATEEXTENSIONCOMMAND"/>
-  <int value="1044" label="DELETED_INPUTMETHODPRIVATE_GETENCRYPTSYNCENABLED"/>
-  <int value="1045" label="USERSPRIVATE_GETUSERS"/>
-  <int value="1046" label="USERSPRIVATE_ADDUSER"/>
-  <int value="1047" label="USERSPRIVATE_REMOVEUSER"/>
-  <int value="1048" label="USERSPRIVATE_ISCURRENTUSEROWNER"/>
-  <int value="1049" label="USERSPRIVATE_ISUSERLISTMANAGED"/>
-  <int value="1050" label="PRINTERPROVIDERINTERNAL_REPORTUSBPRINTERINFO"/>
-  <int value="1051" label="WEBCAMPRIVATE_OPENSERIALWEBCAM"/>
-  <int value="1052" label="WEBCAMPRIVATE_CLOSEWEBCAM"/>
-  <int value="1053" label="SERIAL_SETBREAK"/>
-  <int value="1054" label="SERIAL_CLEARBREAK"/>
-  <int value="1055" label="DELETED_EXTENSIONVIEWINTERNAL_LOADSRC"/>
-  <int value="1056" label="DELETED_EXTENSIONVIEWINTERNAL_PARSESRC"/>
-  <int value="1057" label="DELETED_HID_GETUSERSELECTEDDEVICES"/>
-  <int value="1058"
-      label="FILESYSTEMPROVIDERINTERNAL_GETACTIONSREQUESTEDSUCCESS"/>
-  <int value="1059"
-      label="DASHBOARDPRIVATE_SHOWPERMISSIONPROMPTFORDELEGATEDBUNDLEINSTALL"/>
-  <int value="1060" label="FILEMANAGERPRIVATEINTERNAL_GETCUSTOMACTIONS"/>
-  <int value="1061" label="FILEMANAGERPRIVATEINTERNAL_EXECUTECUSTOMACTION"/>
-  <int value="1062" label="MDNS_FORCEDISCOVERY"/>
-  <int value="1063" label="LANGUAGESETTINGSPRIVATE_GETLANGUAGELIST"/>
-  <int value="1064" label="DELETED_LANGUAGESETTINGSPRIVATE_SETLANGUAGELIST"/>
-  <int value="1065"
-      label="LANGUAGESETTINGSPRIVATE_GETSPELLCHECKDICTIONARYSTATUS"/>
-  <int value="1066" label="LANGUAGESETTINGSPRIVATE_GETSPELLCHECKWORDS"/>
-  <int value="1067" label="LANGUAGESETTINGSPRIVATE_GETTRANSLATETARGETLANGUAGE"/>
-  <int value="1068" label="LANGUAGESETTINGSPRIVATE_GETINPUTMETHODLISTS"/>
-  <int value="1069" label="LANGUAGESETTINGSPRIVATE_ADDINPUTMETHOD"/>
-  <int value="1070" label="LANGUAGESETTINGSPRIVATE_REMOVEINPUTMETHOD"/>
-  <int value="1071" label="FILEMANAGERPRIVATE_CANCELALLFILETRANSFERS"/>
-  <int value="1072" label="NETWORKINGPRIVATE_UNLOCKCELLULARSIM"/>
-  <int value="1073" label="NETWORKINGPRIVATE_SETCELLULARSIMSTATE"/>
-  <int value="1074" label="ENTERPRISE_DEVICEATTRIBUTES_GETDIRECTORYDEVICEID"/>
-  <int value="1075" label="CASTDEVICESPRIVATE_UPDATEDEVICES"/>
-  <int value="1076" label="SYSTEM_DISPLAY_ENABLEUNIFIEDDESKTOP"/>
-  <int value="1077" label="BROWSINGDATA_REMOVECACHESTORAGE"/>
-  <int value="1078" label="VIRTUALKEYBOARDPRIVATE_SETKEYBOARDSTATE"/>
-  <int value="1079" label="VIRTUALKEYBOARDPRIVATE_SETHOTRODKEYBOARD"/>
-  <int value="1080" label="CERTIFICATEPROVIDERINTERNAL_REPORTSIGNATURE"/>
-  <int value="1081" label="CERTIFICATEPROVIDERINTERNAL_REPORTCERTIFICATES"/>
-  <int value="1082" label="BLUETOOTHPRIVATE_PAIR"/>
-  <int value="1083" label="DELETED_EASYUNLOCKPRIVATE_FINDSETUPCONNECTION"/>
-  <int value="1084" label="RESOURCESPRIVATE_GETSTRINGS"/>
-  <int value="1085" label="USB_GETCONFIGURATIONS"/>
-  <int value="1086" label="DELETED_EASYUNLOCKPRIVATE_SETUPCONNECTIONSTATUS"/>
-  <int value="1087"
-      label="DELETED_EASYUNLOCKPRIVATE_SETUPCONNECTIONDISCONNECT"/>
-  <int value="1088" label="DELETED_EASYUNLOCKPRIVATE_SETUPCONNECTIONSEND"/>
-  <int value="1089" label="DELETED_DATAREDUCTIONPROXY_GETDATAUSAGE"/>
-  <int value="1090"
-      label="DELETED_EASYUNLOCKPRIVATE_SETUPCONNECTIONGETDEVICEADDRESS"/>
-  <int value="1091" label="DELETED_TABCAPTURE_CAPTUREOFFSCREENTAB"/>
-  <int value="1092" label="LANGUAGESETTINGSPRIVATE_ADDSPELLCHECKWORD"/>
-  <int value="1093" label="LANGUAGESETTINGSPRIVATE_REMOVESPELLCHECKWORD"/>
-  <int value="1094" label="SETTINGSPRIVATE_GETDEFAULTZOOMFUNCTION"/>
-  <int value="1095" label="SETTINGSPRIVATE_SETDEFAULTZOOMFUNCTION"/>
-  <int value="1096" label="BLUETOOTHPRIVATE_CONNECT"/>
-  <int value="1097" label="BLUETOOTHPRIVATE_FORGETDEVICE"/>
-  <int value="1098" label="DELETED_DISPLAYSOURCE_GETAVAILABLESINKS"/>
-  <int value="1099" label="DELETED_DISPLAYSOURCE_REQUESTAUTHENTICATION"/>
-  <int value="1100" label="WEBRTCLOGGINGPRIVATE_STARTAUDIODEBUGRECORDINGS"/>
-  <int value="1101" label="WEBRTCLOGGINGPRIVATE_STOPAUDIODEBUGRECORDINGS"/>
-  <int value="1102" label="TERMINALPRIVATE_ACKOUTPUT"/>
-  <int value="1103" label="INPUT_IME_CREATEWINDOW"/>
-  <int value="1104" label="INPUTMETHODPRIVATE_SETXKBLAYOUT"/>
-  <int value="1105" label="ACCESSIBILITY_PRIVATE_SETKEYBOARDLISTENER"/>
-  <int value="1106" label="INPUT_IME_ACTIVATE"/>
-  <int value="1107" label="INPUT_IME_DEACTIVATE"/>
-  <int value="1108" label="ENTERPRISE_PLATFORMKEYS_CHALLENGEMACHINEKEY"/>
-  <int value="1109" label="ENTERPRISE_PLATFORMKEYS_CHALLENGEUSERKEY"/>
-  <int value="1110"
-      label="DELETED_INPUTMETHODPRIVATE_NOTIFYIMEMENUITEMACTIVATED"/>
-  <int value="1111" label="INPUT_IME_SHOWWINDOW"/>
-  <int value="1112" label="INPUT_IME_HIDEWINDOW"/>
-  <int value="1113" label="INPUTMETHODPRIVATE_SHOWINPUTVIEW"/>
-  <int value="1114" label="DELETED_WALLPAPERPRIVATE_RECORDWALLPAPERUMA"/>
-  <int value="1115" label="AUTOTESTPRIVATE_GETVISIBLENOTIFICATIONS"/>
-  <int value="1116" label="DELETED_WEBRTCLOGGINGPRIVATE_STARTRTCEVENTLOGGING"/>
-  <int value="1117" label="DELETED_WEBRTCLOGGINGPRIVATE_STOPRTCEVENTLOGGING"/>
-  <int value="1118" label="PASSWORDSPRIVATE_GETSAVEDPASSWORDLIST"/>
-  <int value="1119" label="PASSWORDSPRIVATE_GETPASSWORDEXCEPTIONLIST"/>
-  <int value="1120" label="INPUTMETHODPRIVATE_OPENOPTIONSPAGE"/>
-  <int value="1121" label="DELETED_FEEDBACKPRIVATE_LOGSRTPROMPTRESULT"/>
-  <int value="1122" label="BLUETOOTHLOWENERGY_CREATESERVICE"/>
-  <int value="1123" label="BLUETOOTHLOWENERGY_CREATECHARACTERISTIC"/>
-  <int value="1124" label="BLUETOOTHLOWENERGY_CREATEDESCRIPTOR"/>
-  <int value="1125" label="BLUETOOTHLOWENERGY_REGISTERSERVICE"/>
-  <int value="1126" label="BLUETOOTHLOWENERGY_UNREGISTERSERVICE"/>
-  <int value="1127" label="BLUETOOTHLOWENERGY_SENDREQUESTRESPONSE"/>
-  <int value="1128"
-      label="BLUETOOTHLOWENERGY_NOTIFYCHARACTERISTICVALUECHANGED"/>
-  <int value="1129" label="BLUETOOTHLOWENERGY_REMOVESERVICE"/>
-  <int value="1130" label="AUTOFILLPRIVATE_GETADDRESSLIST"/>
-  <int value="1131" label="AUTOFILLPRIVATE_GETCREDITCARDLIST"/>
-  <int value="1132" label="SYSTEM_DISPLAY_OVERSCANCALIBRATIONSTART"/>
-  <int value="1133" label="SYSTEM_DISPLAY_OVERSCANCALIBRATIONADJUST"/>
-  <int value="1134" label="SYSTEM_DISPLAY_OVERSCANCALIBRATIONRESET"/>
-  <int value="1135" label="SYSTEM_DISPLAY_OVERSCANCALIBRATIONCOMPLETE"/>
-  <int value="1136" label="AUTOFILLPRIVATE_GETCOUNTRYLIST"/>
-  <int value="1137" label="RUNTIME_RESTARTAFTERDELAY"/>
-  <int value="1138" label="SYSTEM_DISPLAY_SETDISPLAYLAYOUT"/>
-  <int value="1139" label="SYSTEM_DISPLAY_GETDISPLAYLAYOUT"/>
-  <int value="1140" label="QUICKUNLOCKPRIVATE_SETMODES"/>
-  <int value="1141" label="QUICKUNLOCKPRIVATE_GETACTIVEMODES"/>
-  <int value="1142" label="QUICKUNLOCKPRIVATE_GETAVAILABLEMODES"/>
-  <int value="1143" label="WEBSTOREPRIVATE_ISPENDINGCUSTODIANAPPROVAL"/>
-  <int value="1144" label="TABS_DISCARD"/>
-  <int value="1145" label="LANGUAGESETTINGSPRIVATE_ENABLELANGUAGE"/>
-  <int value="1146" label="LANGUAGESETTINGSPRIVATE_DISABLELANGUAGE"/>
-  <int value="1147" label="FILEMANAGERPRIVATEINTERNAL_GETDIRECTORYSIZE"/>
-  <int value="1148" label="BLUETOOTHLOWENERGY_SETADVERTISINGINTERVAL"/>
-  <int value="1149" label="SYSTEM_DISPLAY_SHOWNATIVETOUCHCALIBRATION"/>
-  <int value="1150" label="SYSTEM_DISPLAY_COMPLETECUSTOMTOUCHCALIBRATION"/>
-  <int value="1151" label="SYSTEM_DISPLAY_CLEARTOUCHCALIBRATION"/>
-  <int value="1152" label="CERTIFICATEPROVIDER_REQUESTPIN"/>
-  <int value="1153" label="CERTIFICATEPROVIDER_STOPPINREQUEST"/>
-  <int value="1154" label="QUICKUNLOCKPRIVATE_CHECKCREDENTIAL"/>
-  <int value="1155" label="QUICKUNLOCKPRIVATE_GETCREDENTIALREQUIREMENTS"/>
-  <int value="1156" label="CLIPBOARD_SETIMAGEDATA"/>
-  <int value="1157" label="NETWORKINGPRIVATE_GETGLOBALPOLICY"/>
-  <int value="1158" label="DELETED_DIAL_FETCHDEVICEDESCRIPTION"/>
-  <int value="1159" label="SYSTEM_DISPLAY_STARTCUSTOMTOUCHCALIBRATION"/>
-  <int value="1160" label="AUDIO_GETMUTE"/>
-  <int value="1161" label="AUDIO_SETMUTE"/>
-  <int value="1162" label="AUDIO_GETDEVICES"/>
-  <int value="1163" label="VIRTUALKEYBOARD_RESTRICTFEATURES"/>
-  <int value="1164" label="DELETED_NETWORKINGCASTPRIVATE_VERIFYDESTINATION"/>
-  <int value="1165"
-      label="DELETED_NETWORKINGCASTPRIVATE_VERIFYANDENCRYPTCREDENTIALS"/>
-  <int value="1166" label="DELETED_NETWORKINGCASTPRIVATE_VERIFYANDENCRYPTDATA"/>
-  <int value="1167"
-      label="DELETED_NETWORKINGCASTPRIVATE_SETWIFITDLSENABLEDSTATE"/>
-  <int value="1168" label="DELETED_NETWORKINGCASTPRIVATE_GETWIFITDLSSTATUS"/>
-  <int value="1169" label="ACCESSIBILITY_PRIVATE_DARKENSCREEN"/>
-  <int value="1170" label="WEBRTC_AUDIO_PRIVATE_SET_AUDIO_EXPERIMENTS"/>
-  <int value="1171" label="AUTOTESTPRIVATE_GETPLAYSTORESTATE"/>
-  <int value="1172" label="AUTOTESTPRIVATE_SETPLAYSTOREENABLED"/>
-  <int value="1173" label="APP_CURRENTWINDOWINTERNAL_SETACTIVATEONPOINTER"/>
-  <int value="1174" label="MEDIAPERCEPTIONPRIVATE_GETSTATE"/>
-  <int value="1175" label="MEDIAPERCEPTIONPRIVATE_SETSTATE"/>
-  <int value="1176" label="MEDIAPERCEPTIONPRIVATE_GETDIAGNOSTICS"/>
-  <int value="1177" label="NETWORKINGPRIVATE_GETCERTIFICATELISTS"/>
-  <int value="1178" label="DELETED_ACCESSIBILITY_PRIVATE_SETSWITCHACCESSKEYS"/>
-  <int value="1179" label="FEEDBACKPRIVATE_READLOGSOURCE"/>
-  <int value="1180" label="LOCKSCREENDATA_CREATE"/>
-  <int value="1181" label="LOCKSCREENDATA_GETALL"/>
-  <int value="1182" label="LOCKSCREENDATA_GETCONTENT"/>
-  <int value="1183" label="LOCKSCREENDATA_SETCONTENT"/>
-  <int value="1184" label="LOCKSCREENDATA_DELETE"/>
-  <int value="1185" label="BLUETOOTHLOWENERGY_RESETADVERTISING"/>
-  <int value="1186" label="WEBVIEWINTERNAL_SETAUDIOMUTED"/>
-  <int value="1187" label="WEBVIEWINTERNAL_ISAUDIOMUTED"/>
-  <int value="1188" label="WEBVIEWINTERNAL_GETAUDIOSTATE"/>
-  <int value="1189" label="FILEMANAGERPRIVATE_GETRECENTFILES"/>
-  <int value="1190" label="FILEMANAGERPRIVATE_RENAMEVOLUME"/>
-  <int value="1191" label="AUTOTESTPRIVATE_SETMOUSEREVERSESCROLL"/>
-  <int value="1192" label="DELETED_METRICSPRIVATE_RECORDSPARSEHASHABLE"/>
-  <int value="1193" label="NETWORKINGPRIVATE_SELECTCELLULARMOBILENETWORK"/>
-  <int value="1194" label="PASSWORDSPRIVATE_IMPORTPASSWORDS"/>
-  <int value="1195" label="PASSWORDSPRIVATE_EXPORTPASSWORDS"/>
-  <int value="1196"
-      label="PASSWORDSPRIVATE_UNDOREMOVESAVEDPASSWORDOREXCEPTION"/>
-  <int value="1197"
-      label="ACCESSIBILITY_PRIVATE_SETNATIVECHROMEVOXARCSUPPORTFORCURRENTAPP"/>
-  <int value="1198"
-      label="LANGUAGESETTINGSPRIVATE_SETENABLETRANSLATIONFORLANGUAGE"/>
-  <int value="1199" label="LANGUAGESETTINGSPRIVATE_MOVELANGUAGE"/>
-  <int value="1200" label="MEDIAPERCEPTIONPRIVATE_SETANALYTICSCOMPONENT"/>
-  <int value="1201" label="ACCESSIBILITY_PRIVATE_SETHIGHLIGHTS"/>
-  <int value="1202" label="WEBRTCLOGGINGPRIVATE_GETLOGSDIRECTORY"/>
-  <int value="1203" label="VIRTUALKEYBOARDPRIVATE_SETDRAGGABLEAREA"/>
-  <int value="1204" label="METRICSPRIVATE_RECORDBOOLEAN"/>
-  <int value="1205" label="METRICSPRIVATE_RECORDENUMERATIONVALUE"/>
-  <int value="1206" label="DEVELOPERPRIVATE_NOTIFYDRAGINSTALLINPROGRESS"/>
-  <int value="1207" label="AUTOTESTPRIVATE_GETPRINTERLIST"/>
-  <int value="1208" label="DEVELOPERPRIVATE_GETEXTENSIONSIZE"/>
-  <int value="1209"
-      label="DELETED_CRYPTOTOKENPRIVATE_ISAPPIDHASHINENTERPRISECONTEXT"/>
-  <int value="1210" label="DELETED_CRYPTOTOKENPRIVATE_CANAPPIDGETATTESTATION"/>
-  <int value="1211" label="SYSTEM_DISPLAY_SETMIRRORMODE"/>
-  <int value="1212" label="TTSENGINE_UPDATEVOICES"/>
-  <int value="1213" label="PASSWORDSPRIVATE_REQUESTEXPORTPROGRESSSTATUS"/>
-  <int value="1214" label="DELETED_WALLPAPERPRIVATE_GETCOLLECTIONSINFO"/>
-  <int value="1215" label="DELETED_WALLPAPERPRIVATE_GETIMAGESINFO"/>
-  <int value="1216" label="ACCESSIBILITY_PRIVATE_SENDSYNTHETICKEYEVENT"/>
-  <int value="1217" label="DELETED_WALLPAPERPRIVATE_GETLOCALIMAGEPATHS"/>
-  <int value="1218" label="DELETED_WALLPAPERPRIVATE_GETLOCALIMAGEDATA"/>
-  <int value="1219" label="ENTERPRISE_DEVICEATTRIBUTES_GETDEVICESERIALNUMBER"/>
-  <int value="1220" label="ENTERPRISE_DEVICEATTRIBUTES_GETDEVICEASSETID"/>
-  <int value="1221"
-      label="ENTERPRISE_DEVICEATTRIBUTES_GETDEVICEANNOTATEDLOCATION"/>
-  <int value="1222" label="DELETED_PASSWORDSPRIVATE_CANCELEXPORTPASSWORDS"/>
-  <int value="1223" label="FILEMANAGERPRIVATE_MARKCACHEASMOUNTED"/>
-  <int value="1224" label="DELETED_WALLPAPERPRIVATE_CONFIRMPREVIEWWALLPAPER"/>
-  <int value="1225" label="DELETED_WALLPAPERPRIVATE_CANCELPREVIEWWALLPAPER"/>
-  <int value="1226" label="WEBRTCLOGGINGPRIVATE_STARTEVENTLOGGING"/>
-  <int value="1227" label="VIRTUALKEYBOARDPRIVATE_SETCONTAINERBEHAVIOR"/>
-  <int value="1228" label="QUICKUNLOCKPRIVATE_GETAUTHTOKEN"/>
-  <int value="1229" label="QUICKUNLOCKPRIVATE_SETLOCKSCREENENABLED"/>
-  <int value="1230" label="LANGUAGESETTINGSPRIVATE_RETRYDOWNLOADDICTIONARY"/>
-  <int value="1231" label="DELETED_DECLARATIVENETREQUEST_ADDALLOWEDPAGES"/>
-  <int value="1232" label="DELETED_DECLARATIVENETREQUEST_REMOVEALLOWEDPAGES"/>
-  <int value="1233" label="DELETED_DECLARATIVENETREQUEST_GETALLOWEDPAGES"/>
-  <int value="1234" label="DEVELOPERPRIVATE_INSTALLDROPPEDFILE"/>
-  <int value="1235" label="AUTOMATIONINTERNAL_ENABLETREE"/>
-  <int value="1236" label="AUTOMATIONINTERNAL_QUERYSELECTOR"/>
-  <int value="1237" label="DEBUGGER_GETTARGETS"/>
-  <int value="1238" label="NOTIFICATIONS_GETPERMISSIONLEVEL"/>
-  <int value="1239" label="DELETED_FILEMANAGERPRIVATE_ENSUREFILEDOWNLOADED"/>
-  <int value="1240" label="FILEMANAGERPRIVATE_OPENSETTINGSSUBPAGE"/>
-  <int value="1241"
-      label="ENTERPRISEREPORTINGPRIVATE_UPLOADCHROMEDESKTOPREPORT"/>
-  <int value="1242" label="CECPRIVATE_SENDSTANDBY"/>
-  <int value="1243" label="CECPRIVATE_SENDWAKEUP"/>
-  <int value="1244" label="WEBSTOREPRIVATE_GETREFERRERCHAIN"/>
-  <int value="1245" label="AUTOTESTPRIVATE_UPDATEPRINTER"/>
-  <int value="1246" label="AUTOTESTPRIVATE_REMOVEPRINTER"/>
-  <int value="1247"
-      label="DELETED_WALLPAPERPRIVATE_GETCURRENTWALLPAPERTHUMBNAIL"/>
-  <int value="1248" label="ACCESSIBILITY_PRIVATE_SETSELECTTOSPEAKSTATE"/>
-  <int value="1249" label="DELETED_INPUTMETHODPRIVATE_GETCOMPOSITIONBOUNDS"/>
-  <int value="1250" label="DELETED_FILEMANAGERPRIVATE_ISCROSTINIENABLED"/>
-  <int value="1251" label="FILEMANAGERPRIVATE_MOUNTCROSTINI"/>
-  <int value="1252" label="CECPRIVATE_QUERYDISPLAYCECPOWERSTATE"/>
-  <int value="1253" label="DEVELOPERPRIVATE_ADDHOSTPERMISSION"/>
-  <int value="1254" label="DEVELOPERPRIVATE_REMOVEHOSTPERMISSION"/>
-  <int value="1255" label="MEDIAPERCEPTIONPRIVATE_SETCOMPONENTPROCESSSTATE"/>
-  <int value="1256" label="USERSPRIVATE_GETCURRENTUSER"/>
-  <int value="1257" label="DELETED_WALLPAPERPRIVATE_GETSURPRISEMEIMAGE"/>
-  <int value="1258" label="VIRTUALKEYBOARDPRIVATE_SETOCCLUDEDBOUNDS"/>
-  <int value="1259" label="DELETED_SYSTEM_POWER_SOURCE_GETPOWERSOURCEINFO"/>
-  <int value="1260" label="DELETED_SYSTEM_POWER_SOURCE_REQUESTSTATUSUPDATE"/>
-  <int value="1261" label="INPUTMETHODPRIVATE_GETSURROUNDINGTEXT"/>
-  <int value="1262" label="USERSPRIVATE_GETLOGINSTATUS"/>
-  <int value="1263" label="FILEMANAGERPRIVATEINTERNAL_INSTALLLINUXPACKAGE"/>
-  <int value="1264" label="VIRTUALKEYBOARDPRIVATE_SETHITTESTBOUNDS"/>
-  <int value="1265" label="ARCAPPSPRIVATE_GETLAUNCHABLEAPPS"/>
-  <int value="1266" label="ARCAPPSPRIVATE_LAUNCHAPP"/>
-  <int value="1267" label="AUTOTESTPRIVATE_RUNCROSTINIINSTALLER"/>
-  <int value="1268" label="AUTOFILLPRIVATE_MIGRATECREDITCARDS"/>
-  <int value="1269" label="AUTOTESTPRIVATE_ISAPPSHOWN"/>
-  <int value="1270" label="ENTERPRISEREPORTINGPRIVATE_GETDEVICEID"/>
-  <int value="1271"
-      label="ENTERPRISE_HARDWAREPLATFORM_GETHARDWAREPLATFORMINFO"/>
-  <int value="1272" label="FILEMANAGERPRIVATEINTERNAL_SHAREPATHSWITHCROSTINI"/>
-  <int value="1273" label="AUTOTESTPRIVATE_SETCROSTINIENABLED"/>
-  <int value="1274" label="METRICSPRIVATE_GETHISTOGRAM"/>
-  <int value="1275" label="TABCAPTURE_GETMEDIASTREAMID"/>
-  <int value="1276" label="WEBVIEWINTERNAL_SETSPATIALNAVIGATIONENABLED"/>
-  <int value="1277" label="WEBVIEWINTERNAL_ISSPATIALNAVIGATIONENABLED"/>
-  <int value="1278" label="DELETED_FILEMANAGERPRIVATEINTERNAL_GETTHUMBNAIL"/>
-  <int value="1279" label="FILEMANAGERPRIVATEINTERNAL_GETCROSTINISHAREDPATHS"/>
-  <int value="1280" label="AUTOTESTPRIVATE_LAUNCHAPP"/>
-  <int value="1281" label="AUTOTESTPRIVATE_BOOTSTRAPMACHINELEARNINGSERVICE"/>
-  <int value="1282" label="AUTOTESTPRIVATE_RUNCROSTINIUNINSTALLER"/>
-  <int value="1283" label="AUTOTESTPRIVATE_TAKESCREENSHOT"/>
-  <int value="1284" label="ACCESSIBILITY_PRIVATE_TOGGLEDICTATION"/>
-  <int value="1285" label="ACCESSIBILITY_PRIVATE_ENABLEMOUSEEVENTS"/>
-  <int value="1286" label="ACCESSIBILITY_PRIVATE_SENDSYNTHETICMOUSEEVENT"/>
-  <int value="1287" label="DELETED_FILEMANAGERPRIVATE_DETECTCHARACTERENCODING"/>
-  <int value="1288" label="FILEMANAGERPRIVATEINTERNAL_GETLINUXPACKAGEINFO"/>
-  <int value="1289" label="TABS_GOFORWARD"/>
-  <int value="1290" label="TABS_GOBACK"/>
-  <int value="1291"
-      label="BRAILLEDISPLAYPRIVATE_UPDATEBLUETOOTHBRAILLEDISPLAYADDRESS"/>
-  <int value="1292" label="AUTOTESTPRIVATE_SETASSISTANTENABLED"/>
-  <int value="1293" label="AUTOTESTPRIVATE_ISARCPROVISIONED"/>
-  <int value="1294" label="DELETED_CRYPTOTOKENPRIVATE_CANPROXYTOWEBAUTHN"/>
-  <int value="1295" label="INPUTMETHODPRIVATE_GETSETTINGS"/>
-  <int value="1296" label="INPUTMETHODPRIVATE_SETSETTINGS"/>
-  <int value="1297" label="FILEMANAGERPRIVATEINTERNAL_UNSHAREPATHWITHCROSTINI"/>
-  <int value="1298"
-      label="PASSWORDSPRIVATE_RECORDPASSWORDSPAGEACCESSINSETTINGS"/>
-  <int value="1299" label="AUTOFILLPRIVATE_SERVERCARDLINKCLICKED"/>
-  <int value="1300" label="AUTOTESTPRIVATE_GETARCAPP"/>
-  <int value="1301" label="AUTOTESTPRIVATE_GETARCPACKAGE"/>
-  <int value="1302" label="DELETED_AUTOTESTPRIVATE_LAUNCHARCAPP"/>
-  <int value="1303" label="AUTOTESTPRIVATE_CLOSEAPP"/>
-  <int value="1304"
-      label="DELETED_ACCESSIBILITY_PRIVATE_SETSWITCHACCESSMENUSTATE"/>
-  <int value="1305" label="AUTOTESTPRIVATE_SENDASSISTANTTEXTQUERY"/>
-  <int value="1306" label="AUTOTESTPRIVATE_SETCROSTINIAPPSCALED"/>
-  <int value="1307" label="ACTIVITYLOGPRIVATE_DELETEACTIVITIESBYEXTENSION"/>
-  <int value="1308"
-      label="ACCESSIBILITY_PRIVATE_FORWARDKEYEVENTSTOSWITCHACCESS"/>
-  <int value="1309"
-      label="AUTOTESTPRIVATE_ENSUREWINDOWSERVICECLIENTHASDRAWNWINDOW"/>
-  <int value="1310" label="ACCESSIBILITY_PRIVATE_GETBATTERYDESCRIPTION"/>
-  <int value="1311" label="IDLE_GETAUTOLOCKDELAY"/>
-  <int value="1312" label="AUTOTESTPRIVATE_GETPRIMARYDISPLAYSCALEFACTOR"/>
-  <int value="1313" label="AUTOFILLPRIVATE_GETLOCALCREDITCARDLIST_DEPRECATED"/>
-  <int value="1314" label="AUTOFILLPRIVATE_GETSERVERCREDITCARDLIST_DEPRECATED"/>
-  <int value="1315" label="DELETED_PASSWORDSPRIVATE_CHANGESAVEDPASSWORD"/>
-  <int value="1316" label="AUTOTESTPRIVATE_SETWHITELISTEDPREF"/>
-  <int value="1317" label="SAFEBROWSINGPRIVATE_GETREFERRERCHAIN"/>
-  <int value="1318" label="DELETED_DECLARATIVENETREQUEST_ADDDYNAMICRULES"/>
-  <int value="1319" label="DELETED_DECLARATIVENETREQUEST_REMOVEDYNAMICRULES"/>
-  <int value="1320" label="DECLARATIVENETREQUEST_GETDYNAMICRULES"/>
-  <int value="1321" label="AUTOTESTPRIVATE_GETARCSTATE"/>
-  <int value="1322" label="AUTOTESTPRIVATE_ISTABLETMODEENABLED"/>
-  <int value="1323" label="AUTOTESTPRIVATE_SETTABLETMODEENABLED"/>
-  <int value="1324" label="AUTOTESTPRIVATE_GETSHELFAUTOHIDEBEHAVIOR"/>
-  <int value="1325" label="AUTOTESTPRIVATE_SETSHELFAUTOHIDEBEHAVIOR"/>
-  <int value="1326" label="AUTOTESTPRIVATE_EXPORTCROSTINI"/>
-  <int value="1327" label="AUTOTESTPRIVATE_IMPORTCROSTINI"/>
-  <int value="1328" label="ACCESSIBILITY_PRIVATE_SETVIRTUALKEYBOARDVISIBLE"/>
-  <int value="1329" label="AUTOTESTPRIVATE_SHOWVIRTUALKEYBOARDIFENABLED"/>
-  <int value="1330" label="DELETED_FEEDBACKPRIVATE_LOGINFEEDBACKCOMPLETE"/>
-  <int value="1331" label="FILEMANAGERPRIVATE_SEARCHFILES"/>
-  <int value="1332" label="MANAGEMENT_INSTALLREPLACEMENTWEBAPP"/>
-  <int value="1333" label="FILEMANAGERPRIVATE_GETANDROIDPICKERAPPS"/>
-  <int value="1334" label="FILEMANAGERPRIVATE_SELECTANDROIDPICKERAPP"/>
-  <int value="1335" label="AUTOTESTPRIVATE_GETSHELFALIGNMENT"/>
-  <int value="1336" label="AUTOTESTPRIVATE_SETSHELFALIGNMENT"/>
-  <int value="1337" label="BLUETOOTHPRIVATE_RECORDPAIRING"/>
-  <int value="1338" label="FILEMANAGERPRIVATE_SETARCSTORAGETOASTSHOWNFLAG"/>
-  <int value="1339" label="INPUTMETHODPRIVATE_SETCOMPOSITIONRANGE"/>
-  <int value="1340" label="BLUETOOTHPRIVATE_RECORDRECONNECTION"/>
-  <int value="1341" label="LOGINSCREENUI_SHOW"/>
-  <int value="1342" label="LOGINSCREENUI_CLOSE"/>
-  <int value="1343" label="DECLARATIVENETREQUEST_GETMATCHEDRULES"/>
-  <int value="1344" label="DECLARATIVENETREQUEST_SETACTIONCOUNTASBADGETEXT"/>
-  <int value="1345" label="BLUETOOTHPRIVATE_RECORDDEVICESELECTION"/>
-  <int value="1346" label="LOGIN_LAUNCHMANAGEDGUESTSESSION"/>
-  <int value="1347" label="LOGIN_EXITCURRENTSESSION"/>
-  <int value="1348" label="DELETED_LOGIN_ISRUNNINGINLOGINPROFILE"/>
-  <int value="1349" label="LOGIN_FETCHDATAFORNEXTLOGINATTEMPT"/>
-  <int value="1350" label="ACTION_SETICON"/>
-  <int value="1351" label="AUTOTESTPRIVATE_GETALLENTERPRISEPOLICIES"/>
-  <int value="1352"
-      label="ACCESSIBILITY_PRIVATE_HANDLESCROLLABLEBOUNDSFORPOINTFOUND"/>
-  <int value="1353" label="ACTION_GETPOPUP"/>
-  <int value="1354" label="ACTION_SETPOPUP"/>
-  <int value="1355" label="ACTION_GETTITLE"/>
-  <int value="1356" label="ACTION_SETTITLE"/>
-  <int value="1357" label="ACTION_GETBADGETEXT"/>
-  <int value="1358" label="ACTION_SETBADGETEXT"/>
-  <int value="1359" label="ACTION_GETBADGEBACKGROUNDCOLOR"/>
-  <int value="1360" label="ACTION_SETBADGEBACKGROUNDCOLOR"/>
-  <int value="1361" label="DELETED_AUTOTESTPRIVATE_SETARCAPPWINDOWSTATE"/>
-  <int value="1362" label="ACCESSIBILITY_PRIVATE_OPENSETTINGSSUBPAGE"/>
-  <int value="1363" label="ACTION_ENABLE"/>
-  <int value="1364" label="ACTION_DISABLE"/>
-  <int value="1365" label="FILEMANAGERPRIVATEINTERNAL_IMPORTCROSTINIIMAGE"/>
-  <int value="1366" label="AUTOTESTPRIVATE_GETSHELFITEMS"/>
-  <int value="1367" label="DELETED_MANAGEMENT_INSTALLREPLACEMENTANDROIDAPP"/>
-  <int value="1368" label="DELETED_MANAGEMENT_CANINSTALLREPLACEMENTANDROIDAPP"/>
-  <int value="1369" label="AUTOTESTPRIVATE_REGISTERCOMPONENT"/>
-  <int value="1370" label="LOGINSCREENSTORAGE_STOREPERSISTENTDATA"/>
-  <int value="1371" label="LOGINSCREENSTORAGE_RETRIEVEPERSISTENTDATA"/>
-  <int value="1372" label="LOGINSCREENSTORAGE_STORECREDENTIALS"/>
-  <int value="1373" label="LOGINSCREENSTORAGE_RETRIEVECREDENTIALS"/>
-  <int value="1374" label="DELETED_AUTOTESTPRIVATE_GETARCAPPWINDOWSTATE"/>
-  <int value="1375" label="DELETED_AUTOTESTPRIVATE_GETARCAPPWINDOWINFO"/>
-  <int value="1376" label="AUTOTESTPRIVATE_GETALLINSTALLEDAPPS"/>
-  <int value="1377" label="AUTOTESTPRIVATE_SWAPWINDOWSINSPLITVIEW"/>
-  <int value="1378" label="AUTOTESTPRIVATE_SETARCAPPWINDOWFOCUS"/>
-  <int value="1379" label="LOGINSTATE_GETPROFILETYPE"/>
-  <int value="1380" label="LOGINSTATE_GETSESSIONSTATE"/>
-  <int value="1381" label="AUTOTESTPRIVATE_GETARCSTARTTIME"/>
-  <int value="1382" label="AUTOTESTPRIVATE_SETOVERVIEWMODESTATE"/>
-  <int value="1383" label="AUTOTESTPRIVATE_TAKESCREENSHOTFORDISPLAY"/>
-  <int value="1384" label="AUTOFILLPRIVATE_SETCREDITCARDFIDOAUTHENABLEDSTATE"/>
-  <int value="1385" label="USERSPRIVATE_ISUSERINLIST"/>
-  <int value="1386" label="PRINTINGMETRICS_GETPRINTJOBS"/>
-  <int value="1387" label="AUTOTESTPRIVATE_WAITFORASSISTANTQUERYSTATUS"/>
-  <int value="1388" label="AUTOTESTPRIVATE_GETCLIPBOARDTEXTDATA"/>
-  <int value="1389" label="AUTOTESTPRIVATE_SETCLIPBOARDTEXTDATA"/>
-  <int value="1390" label="AUTOTESTPRIVATE_INITIALIZEEVENTS"/>
-  <int value="1391" label="AUTOTESTPRIVATE_WAITFORDISPLAYROTATION"/>
-  <int value="1392" label="AUTOTESTPRIVATE_ARCAPPTRACINGSTART"/>
-  <int value="1393" label="AUTOTESTPRIVATE_ARCAPPTRACINGSTOPANDANALYZE"/>
-  <int value="1394" label="AUTOTESTPRIVATE_GETAPPWINDOWLIST"/>
-  <int value="1395" label="AUTOTESTPRIVATE_SETAPPWINDOWSTATE"/>
-  <int value="1396" label="AUTOTESTPRIVATE_CLOSEAPPWINDOW"/>
-  <int value="1397" label="AUTOTESTPRIVATE_REFRESHENTERPRISEPOLICIES"/>
-  <int value="1398" label="AUTOTESTPRIVATE_INSTALLPWAFORCURRENTURL"/>
-  <int value="1399" label="AUTOTESTPRIVATE_ACTIVATEACCELERATOR"/>
-  <int value="1400" label="AUTOTESTPRIVATE_WAITFORLAUNCHERSTATE"/>
-  <int value="1401" label="AUTOTESTPRIVATE_CREATENEWDESK"/>
-  <int value="1402" label="AUTOTESTPRIVATE_ACTIVATEDESKATINDEX"/>
-  <int value="1403" label="AUTOTESTPRIVATE_REMOVEACTIVEDESK"/>
-  <int value="1404" label="TERMINALPRIVATE_GETCROSHSETTINGS"/>
-  <int value="1405" label="AUTOTESTPRIVATE_ENABLEASSISTANTANDWAITFORREADY"/>
-  <int value="1406" label="INPUTMETHODPRIVATE_FINISHCOMPOSINGTEXT"/>
-  <int value="1407" label="DECLARATIVENETREQUEST_UPDATEDYNAMICRULES"/>
-  <int value="1408" label="AUTOTESTPRIVATE_MOUSECLICK"/>
-  <int value="1409" label="AUTOTESTPRIVATE_MOUSEPRESS"/>
-  <int value="1410" label="AUTOTESTPRIVATE_MOUSERELEASE"/>
-  <int value="1411" label="AUTOTESTPRIVATE_MOUSEMOVE"/>
-  <int value="1412" label="WEBSTOREPRIVATE_GETEXTENSIONSTATUS"/>
-  <int value="1413" label="DELETED_INPUTMETHODPRIVATE_SETSELECTIONRANGE"/>
-  <int value="1414" label="VIRTUALKEYBOARDPRIVATE_SETAREATOREMAINONSCREEN"/>
-  <int value="1415" label="TERMINALPRIVATE_GETSETTINGS"/>
-  <int value="1416" label="TERMINALPRIVATE_SETSETTINGS"/>
-  <int value="1417" label="DELETED_WEBSTOREPRIVATE_REQUESTEXTENSION"/>
-  <int value="1418" label="AUTOTESTPRIVATE_INSTALLPLUGINVM"/>
-  <int value="1419" label="CRASHREPORTPRIVATE_REPORTERROR"/>
-  <int value="1420" label="AUTOTESTPRIVATE_SETMETRICSENABLED"/>
-  <int value="1421" label="ENTERPRISEREPORTINGPRIVATE_GETPERSISTENTSECRET"/>
-  <int value="1422" label="ENTERPRISEREPORTINGPRIVATE_GETDEVICEDATA"/>
-  <int value="1423" label="ENTERPRISEREPORTINGPRIVATE_SETDEVICEDATA"/>
-  <int value="1424" label="ENTERPRISEREPORTINGPRIVATE_GETDEVICEINFO"/>
-  <int value="1425" label="PRINTING_GETPRINTERS"/>
-  <int value="1426" label="WEBCAMPRIVATE_SET_HOME"/>
-  <int value="1427" label="INPUTMETHODPRIVATE_RESET"/>
-  <int value="1428" label="PRINTING_GETPRINTERINFO"/>
-  <int value="1429" label="AUTOTESTPRIVATE_ISARCPACKAGELISTINITIALREFRESHED"/>
-  <int value="1430" label="DELETED_AUTOTESTPRIVATE_STARTTRACING"/>
-  <int value="1431" label="DELETED_AUTOTESTPRIVATE_STOPTRACING"/>
-  <int value="1432" label="LOGIN_LOCKMANAGEDGUESTSESSION"/>
-  <int value="1433" label="LOGIN_UNLOCKMANAGEDGUESTSESSION"/>
-  <int value="1434" label="AUTOTESTPRIVATE_SETARCTOUCHMODE"/>
-  <int value="1435" label="PRINTING_SUBMITJOB"/>
-  <int value="1436" label="DELETED_IDENTITYPRIVATE_SETCONSENTRESULT"/>
-  <int value="1437" label="PRINTING_CANCELJOB"/>
-  <int value="1438" label="DELETED_AUTOFILLASSISTANTPRIVATE_CREATE"/>
-  <int value="1439" label="DELETED_AUTOFILLASSISTANTPRIVATE_START"/>
-  <int value="1440" label="DELETED_AUTOFILLASSISTANTPRIVATE_GETSTATE"/>
-  <int value="1441" label="DELETED_AUTOFILLASSISTANTPRIVATE_PERFORMACTION"/>
-  <int value="1442" label="DELETED_AUTOFILLASSISTANTPRIVATE_PROVIDEUSERDATA"/>
-  <int value="1443" label="PASSWORDSPRIVATE_ISOPTEDINFORACCOUNTSTORAGE"/>
-  <int value="1444" label="AUTOTESTPRIVATE_PINSHELFICON"/>
-  <int value="1445" label="AUTOTESTPRIVATE_WAITFOROVERVIEWSTATE"/>
-  <int value="1446" label="AUTOTESTPRIVATE_GETSCROLLABLESHELFINFOFORSTATE"/>
-  <int value="1447" label="ENTERPRISE_DEVICEATTRIBUTES_GETDEVICEHOSTNAME"/>
-  <int value="1448" label="DELETED_AUTOFILLPRIVATE_GETUPIIDLIST"/>
-  <int value="1449" label="WEBCAMPRIVATE_RESTORE_CAMERA_PRESET"/>
-  <int value="1450" label="WEBCAMPRIVATE_SET_CAMERA_PRESET"/>
-  <int value="1451" label="DELETED_PASSWORDSPRIVATE_GETCOMPROMISEDCREDENTIALS"/>
-  <int value="1452" label="INPUTMETHODPRIVATE_HIDEINPUTVIEW"/>
-  <int value="1453" label="PASSWORDSPRIVATE_GETPLAINTEXTINSECUREPASSWORD"/>
-  <int value="1454" label="PASSWORDSPRIVATE_CHANGEINSECURECREDENTIAL"/>
-  <int value="1455" label="PASSWORDSPRIVATE_REMOVEINSECURECREDENTIAL"/>
-  <int value="1456" label="TERMINALPRIVATE_GETA11YSTATUS"/>
-  <int value="1457" label="AUTOTESTPRIVATE_GETSHELFUIINFOFORSTATE"/>
-  <int value="1458" label="PASSWORDSPRIVATE_STARTPASSWORDCHECK"/>
-  <int value="1459" label="DELETED_PASSWORDSPRIVATE_STOPPASSWORDCHECK"/>
-  <int value="1460" label="PASSWORDSPRIVATE_GETPASSWORDCHECKSTATUS"/>
-  <int value="1461" label="TERMINALPRIVATE_OPENVMSHELLPROCESS"/>
-  <int value="1462" label="PASSWORDSPRIVATE_OPTINFORACCOUNTSTORAGE"/>
-  <int value="1463" label="DELETED_CRYPTOTOKENPRIVATE_RECORDREGISTERREQUEST"/>
-  <int value="1464" label="DELETED_CRYPTOTOKENPRIVATE_RECORDSIGNREQUEST"/>
-  <int value="1465" label="VIRTUALKEYBOARDPRIVATE_SETWINDOWBOUNDSINSCREEN"/>
-  <int value="1466" label="AUTOTESTPRIVATE_SETWINDOWBOUNDS"/>
-  <int value="1467" label="AUTOTESTPRIVATE_STARTSMOOTHNESSTRACKING"/>
-  <int value="1468" label="AUTOTESTPRIVATE_STOPSMOOTHNESSTRACKING"/>
-  <int value="1469" label="ACCESSIBILITY_PRIVATE_UPDATESWITCHACCESSBUBBLE"/>
-  <int value="1470" label="TERMINALPRIVATE_OPENOPTIONSPAGE"/>
-  <int value="1471" label="DECLARATIVENETREQUEST_UPDATEENABLEDRULESETS"/>
-  <int value="1472" label="DECLARATIVENETREQUEST_GETENABLEDRULESETS"/>
-  <int value="1473" label="TERMINALPRIVATE_OPENWINDOW"/>
-  <int value="1474" label="AUTOTESTPRIVATE_SETPLUGINVMPOLICY"/>
-  <int value="1475" label="AUTOTESTPRIVATE_SHOWPLUGINVMINSTALLER"/>
-  <int value="1476" label="DELETED_PASSWORDSPRIVATE_REMOVESAVEDPASSWORDS"/>
-  <int value="1477" label="DELETED_PASSWORDSPRIVATE_REMOVEPASSWORDEXCEPTIONS"/>
-  <int value="1478" label="AUTOTESTPRIVATE_WAITFORAMBIENTPHOTOANIMATION"/>
-  <int value="1479" label="INPUT_IME_SETASSISTIVEWINDOWPROPERTIES"/>
-  <int value="1480" label="PASSWORDSPRIVATE_MOVEPASSWORDSTOACCOUNT"/>
-  <int value="1481" label="AUTOTESTPRIVATE_DISABLESWITCHACCESSDIALOG"/>
-  <int value="1482" label="ENTERPRISE_NETWORKINGATTRIBUTES_GETNETWORKDETAILS"/>
-  <int value="1483" label="DELETED_INPUTMETHODPRIVATE_SETAUTOCORRECTRANGE"/>
-  <int value="1484" label="PLATFORMKEYSINTERNAL_GETPUBLICKEYBYSPKI"/>
-  <int value="1485" label="CERTIFICATEPROVIDER_SETCERTIFICATES"/>
-  <int value="1486" label="AUTOTESTPRIVATE_DISABLEAUTOMATION"/>
-  <int value="1487" label="INPUT_IME_SETASSISTIVEWINDOWBUTTONHIGHLIGHTED"/>
-  <int value="1488" label="CERTIFICATEPROVIDER_REPORTSIGNATURE"/>
-  <int value="1489" label="QUICKUNLOCKPRIVATE_SETPINAUTOSUBMITENABLED"/>
-  <int value="1490" label="QUICKUNLOCKPRIVATE_CANAUTHENTICATEPIN"/>
-  <int value="1491"
-      label="DELETED_INPUTMETHODPRIVATE_GETAUTOCORRECTCHARACTERBOUNDS"/>
-  <int value="1492"
-      label="AUTOTESTPRIVATE_STARTTHROUGHPUTTRACKERDATACOLLECTION"/>
-  <int value="1493"
-      label="AUTOTESTPRIVATE_STOPTHROUGHPUTTRACKERDATACOLLECTION"/>
-  <int value="1494" label="DELETED_INPUTMETHODPRIVATE_GETAUTOCORRECTRANGE"/>
-  <int value="1495" label="FILEMANAGERPRIVATEINTERNAL_SHARESHEETHASTARGETS"/>
-  <int value="1496" label="FILEMANAGERPRIVATEINTERNAL_INVOKESHARESHEET"/>
-  <int value="1497" label="FILEMANAGERPRIVATEINTERNAL_GETCONTENTMIMETYPE"/>
-  <int value="1498" label="FILEMANAGERPRIVATEINTERNAL_GETCONTENTMETADATA"/>
-  <int value="1499" label="SEARCH_QUERY"/>
-  <int value="1500" label="FILEMANAGERPRIVATEINTERNAL_COPYIMAGETOCLIPBOARD"/>
-  <int value="1501"
-      label="AUTOTESTPRIVATE_WAITFORSYSTEMWEBAPPSINSTALLFUNCTION"/>
-  <int value="1502" label="AUTOTESTPRIVATE_GETREGISTEREDSYSTEMWEBAPPSFUNCTION"/>
-  <int value="1503"
-      label="FILEMANAGERPRIVATEINTERNAL_TOGGLEADDEDTOHOLDINGSPACE"/>
-  <int value="1504" label="FILEMANAGERPRIVATEINTERNAL_GETHOLDINGSPACESTATE"/>
-  <int value="1505" label="DELETED_INPUTMETHODPRIVATE_SETCOMPOSINGRANGE"/>
-  <int value="1506" label="AUTOTESTPRIVATE_LAUNCHSYSTEMWEBAPP"/>
-  <int value="1507" label="ACCESSIBILITY_PRIVATE_PERFORMACCELERATORACTION"/>
-  <int value="1508" label="DECLARATIVENETREQUEST_ISREGEXSUPPORTED"/>
-  <int value="1509" label="DELETED_PASSWORDSPRIVATE_GETWEAKCREDENTIALS"/>
-  <int value="1510" label="ACCESSIBILITY_PRIVATE_MOVEMAGNIFIERTORECT"/>
-  <int value="1511" label="FILEMANAGERPRIVATE_SINGLEPARTITIONFORMAT"/>
-  <int value="1512" label="TABS_REMOVECSS"/>
-  <int value="1513" label="IDENTITY_CLEARALLCACHEDAUTHTOKENS"/>
-  <int value="1514" label="TABS_GROUP"/>
-  <int value="1515" label="TABS_UNGROUP"/>
-  <int value="1516"
-      label="DELETED_FILEMANAGERPRIVATEINTERNAL_GETDRIVETHUMBNAIL"/>
-  <int value="1517" label="DELETED_FILEMANAGERPRIVATEINTERNAL_GETPDFTHUMBNAIL"/>
-  <int value="1518" label="AUTOTESTPRIVATE_REMOVEALLNOTIFICATIONS"/>
-  <int value="1519" label="VIRTUALKEYBOARDPRIVATE_OPENSUGGESTIONSETTINGS"/>
-  <int value="1520" label="ACCESSIBILITY_PRIVATE_SETPOINTSCANSTATE"/>
-  <int value="1521" label="AUTOTESTPRIVATE_ACTIVATEADJACENTDESKSTOTARGETINDEX"/>
-  <int value="1522" label="DECLARATIVENETREQUEST_GETAVAILABLESTATICRULECOUNT"/>
-  <int value="1523" label="CHROMEOSINFOPRIVATE_ISTABLETMODEENABLED"/>
-  <int value="1524"
-      label="DELETED_FILEMANAGERPRIVATEINTERNAL_GETARCDOCUMENTSPROVIDERTHUMBNAIL"/>
-  <int value="1525" label="ACCESSIBILITY_PRIVATE_ISFEATUREENABLED"/>
-  <int value="1526" label="INPUTMETHODPRIVATE_ONAUTOCORRECT"/>
-  <int value="1527" label="TAB_GROUPS_GET"/>
-  <int value="1528" label="TAB_GROUPS_QUERY"/>
-  <int value="1529" label="TAB_GROUPS_UPDATE"/>
-  <int value="1530" label="ACCESSIBILITY_PRIVATE_UPDATESELECTTOSPEAKPANEL"/>
-  <int value="1531" label="TAB_GROUPS_MOVE"/>
-  <int value="1532" label="SCRIPTING_EXECUTESCRIPT"/>
-  <int value="1533" label="DECLARATIVENETREQUEST_UPDATESESSIONRULES"/>
-  <int value="1534" label="DECLARATIVENETREQUEST_GETSESSIONRULES"/>
-  <int value="1535" label="SCRIPTING_INSERTCSS"/>
-  <int value="1536" label="VIRTUALKEYBOARDPRIVATE_PASTECLIPBOARDITEM"/>
-  <int value="1537" label="VIRTUALKEYBOARDPRIVATE_GETCLIPBOARDHISTORY"/>
-  <int value="1538" label="VIRTUALKEYBOARDPRIVATE_DELETECLIPBOARDITEM"/>
-  <int value="1539" label="FILEMANAGERPRIVATE_ISTABLETMODEENABLED"/>
-  <int value="1540" label="FILEMANAGERPRIVATE_NOTIFYDRIVEDIALOGRESULT"/>
-  <int value="1541" label="ENTERPRISEREPORTINGPRIVATE_GETCONTEXTINFO"/>
-  <int value="1542" label="SCRIPTING_REMOVECSS"/>
-  <int value="1543" label="FILEMANAGERPRIVATEINTERNAL_GETVOLUMEROOT"/>
-  <int value="1544"
-      label="LANGUAGESETTINGSPRIVATE_GETALWAYSTRANSLATELANGUAGES"/>
-  <int value="1545"
-      label="LANGUAGESETTINGSPRIVATE_SETLANGUAGEALWAYSTRANSLATESTATE"/>
-  <int value="1546" label="ACCESSIBILITY_PRIVATE_SHOWCONFIRMATIONDIALOG"/>
-  <int value="1547" label="AUTOTESTPRIVATE_INSTALLBOREALIS"/>
-  <int value="1548" label="LANGUAGESETTINGSPRIVATE_SETTRANSLATETARGETLANGUAGE"/>
-  <int value="1549" label="LANGUAGESETTINGSPRIVATE_GETNEVERTRANSLATELANGUAGES"/>
-  <int value="1550" label="ACTION_GETUSERSETTINGS"/>
-  <int value="1551" label="ENTERPRISEREPORTINGPRIVATE_GETCERTIFICATE"/>
-  <int value="1552" label="AUTOTESTPRIVATE_ISSYSTEMWEBAPPOPENFUNCTION"/>
-  <int value="1553" label="TTSENGINE_SENDTTSAUDIO"/>
-  <int value="1554" label="AUTOTESTPRIVATE_ACTIVATEAPPWINDOW"/>
-  <int value="1555" label="FILEMANAGERPRIVATE_CANCELZIP"/>
-  <int value="1556"
-      label="ACCESSIBILITY_PRIVATE_GETLOCALIZEDDOMKEYSTRINGFORKEYCODE"/>
-  <int value="1557" label="SCRIPTING_REGISTERCONTENTSCRIPTS"/>
-  <int value="1558"
-      label="DELETED_WMDESKSPRIVATE_CAPTUREACTIVEDESKANDSAVETEMPLATE"/>
-  <int value="1559" label="DELETED_WMDESKSPRIVATE_UPDATEDESKTEMPLATE"/>
-  <int value="1560" label="WMDESKSPRIVATE_GETSAVEDDESKS"/>
-  <int value="1561" label="DELETED_WMDESKSPRIVATE_DELETEDESKTEMPLATE"/>
-  <int value="1562" label="WMDESKSPRIVATE_LAUNCHDESK"/>
-  <int value="1563" label="AUTOTESTPRIVATE_SETSHELFICONPIN"/>
-  <int value="1564" label="SCRIPTING_GETREGISTEREDCONTENTSCRIPTS"/>
-  <int value="1565" label="OS_TELEMETRY_GETVPDINFO"/>
-  <int value="1566" label="ACCESSIBILITY_PRIVATE_MAGNIFIERCENTERONPOINT"/>
-  <int value="1567" label="STORAGE_SETACCESSLEVEL"/>
-  <int value="1568" label="OS_TELEMETRY_GETOEMDATA"/>
-  <int value="1569" label="SCRIPTING_UNREGISTERCONTENTSCRIPTS"/>
-  <int value="1570" label="FILEMANAGERPRIVATE_GETZIPPROGRESS"/>
-  <int value="1571" label="DELETED_CRYPTOTOKENPRIVATE_CANMAKEU2FAPIREQUEST"/>
-  <int value="1572" label="OS_DIAGNOSTICS_RUNBATTERYCAPACITYROUTINE"/>
-  <int value="1573" label="WEB_AUTHENTICATION_PROXY_COMPLETE_ISUVPAA_REQUEST"/>
-  <int value="1574" label="LOGIN_LAUNCHSHAREDMANAGEDGUESTSESSION"/>
-  <int value="1575" label="LOGIN_ENTERSHAREDSESSION"/>
-  <int value="1576" label="LOGIN_UNLOCKSHAREDSESSION"/>
-  <int value="1577" label="LOGIN_ENDSHAREDSESSION"/>
-  <int value="1578" label="AUTOTESTPRIVATE_GETDEFAULTPINNEDAPPIDS"/>
-  <int value="1579" label="LOGIN_SETDATAFORNEXTLOGINATTEMPT"/>
-  <int value="1580" label="OS_DIAGNOSTICS_GETAVAILABLEROUTINES"/>
-  <int value="1581" label="OS_DIAGNOSTICS_RUNBATTERYHEALTHROUTINE"/>
-  <int value="1582" label="OS_DIAGNOSTICS_RUNBATTERYDISCHARGEROUTINE"/>
-  <int value="1583" label="OS_DIAGNOSTICS_RUNBATTERYCHARGEROUTINE"/>
-  <int value="1584" label="OS_DIAGNOSTICS_RUNCPUSTRESSROUTINE"/>
-  <int value="1585" label="OS_DIAGNOSTICS_RUNCPUCACHEROUTINE"/>
-  <int value="1586" label="SCRIPTING_UPDATECONTENTSCRIPTS"/>
-  <int value="1587" label="FILEMANAGERPRIVATE_OPENWINDOW"/>
-  <int value="1588" label="OS_DIAGNOSTICS_RUNMEMORYROUTINE"/>
-  <int value="1589" label="OS_DIAGNOSTICS_GETROUTINEUPDATE"/>
-  <int value="1590" label="SPEECHRECOGNITIONPRIVATE_START"/>
-  <int value="1591" label="SPEECHRECOGNITIONPRIVATE_STOP"/>
-  <int value="1592" label="FILEMANAGERPRIVATEINTERNAL_STARTIOTASK"/>
-  <int value="1593" label="DELETED_WALLPAPERPRIVATE_ISSWAENABLED"/>
-  <int value="1594" label="INPUTMETHODPRIVATE_GETTEXTFIELDBOUNDS"/>
-  <int value="1595" label="PASSWORDSPRIVATE_GETURLCOLLECTION"/>
-  <int value="1596" label="PASSWORDSPRIVATE_ADDPASSWORD"/>
-  <int value="1597" label="PASSWORDSPRIVATE_ISACCOUNTSTOREDEFAULT"/>
-  <int value="1598" label="WEB_AUTHENTICATION_PROXY_ATTACH"/>
-  <int value="1599" label="WEB_AUTHENTICATION_PROXY_DETACH"/>
-  <int value="1600" label="FILEMANAGERPRIVATE_CANCELIOTASK"/>
-  <int value="1601" label="AUTOTESTPRIVATE_GETDISPLAYSMOOTHNESS"/>
-  <int value="1602" label="AUTOTESTPRIVATE_RESETHOLDINGSPACE"/>
-  <int value="1603" label="FILEMANAGERPRIVATEINTERNAL_GETDISALLOWEDTRANSFERS"/>
-  <int value="1604" label="WMDESKSPRIVATE_GETDESKTEMPLATEJSON"/>
-  <int value="1605" label="OS_DIAGNOSTICS_RUNCPUFLOATINGPOINTACCURACYROUTINE"/>
-  <int value="1606" label="OS_DIAGNOSTICS_RUNCPUPRIMESEARCHROUTINE"/>
-  <int value="1607" label="ACCESSIBILITY_PRIVATE_UPDATEDICTATIONBUBBLE"/>
-  <int value="1608" label="TERMINALPRIVATE_GETOSINFO"/>
-  <int value="1609" label="OS_TELEMETRY_GETMEMORYINFO"/>
-  <int value="1610" label="AUTOTESTPRIVATE_COULDALLOWCROSTINI"/>
-  <int value="1611" label="WEB_AUTHENTICATION_PROXY_COMPLETE_CREATE_REQUEST"/>
-  <int value="1612" label="DEVELOPERPRIVATE_GETUSERSITESETTINGS"/>
-  <int value="1613" label="ACTION_OPENPOPUP"/>
-  <int value="1614" label="OS_TELEMETRY_GETCPUINFO"/>
-  <int value="1615" label="FILEMANAGERPRIVATE_OPENURL"/>
-  <int value="1616" label="FILEMANAGERPRIVATE_GETFRAMECOLOR"/>
-  <int value="1617" label="DEVELOPERPRIVATE_ADDUSERSPECIFIEDSITES"/>
-  <int value="1618" label="DEVELOPERPRIVATE_REMOVEUSERSPECIFIEDSITES"/>
-  <int value="1619" label="AUTOTESTPRIVATE_STARTARC"/>
-  <int value="1620" label="AUTOTESTPRIVATE_STOPARC"/>
-  <int value="1621" label="PASSWORDSPRIVATE_MUTEINSECURECREDENTIAL"/>
-  <int value="1622" label="WEB_AUTHENTICATION_PROXY_COMPLETE_GET_REQUEST"/>
-  <int value="1623" label="PASSWORDSPRIVATE_UNMUTEINSECURECREDENTIAL"/>
-  <int value="1624" label="OS_DIAGNOSTICS_RUNSMARTCTLCHECKROUTINE"/>
-  <int value="1625" label="OS_DIAGNOSTICS_RUNNVMEWEARLEVELROUTINE"/>
-  <int value="1626" label="AUTOFILLPRIVATE_ADDVIRTUALCARD"/>
-  <int value="1627" label="AUTOFILLPRIVATE_REMOVEVIRTUALCARD"/>
-  <int value="1628" label="FILEMANAGERPRIVATE_LISTMOUNTABLEGUESTS"/>
-  <int value="1629"
-      label="AUTOTESTPRIVATE_STARTLOGINEVENTRECORDERDATACOLLECTION"/>
-  <int value="1630" label="AUTOTESTPRIVATE_GETLOGINEVENTRECORDERLOGINEVENTS"/>
-  <int value="1631" label="AUTOTESTPRIVATE_ADDLOGINEVENTFORTESTING"/>
-  <int value="1632" label="OS_DIAGNOSTICS_RUNDISKREADROUTINE"/>
-  <int value="1633" label="FILEMANAGERPRIVATE_MOUNTGUEST"/>
-  <int value="1634" label="DELETED_AUTOTESTPRIVATE_ISLACROSPRIMARYBROWSER"/>
-  <int value="1635" label="INPUTMETHODPRIVATE_SWITCHTOLASTUSEDINPUTMETHOD"/>
-  <int value="1636" label="AUTOTESTPRIVATE_LOADSMARTDIMCOMPONENT"/>
-  <int value="1637" label="TERMINALPRIVATE_GETPREFS"/>
-  <int value="1638" label="TERMINALPRIVATE_SETPREFS"/>
-  <int value="1639" label="DELETED_AUTOTESTPRIVATE_GETCRYPTOHOMERECOVERYDATA"/>
-  <int value="1640" label="TERMINALPRIVATE_OPENSETTINGSSUBPAGE"/>
-  <int value="1641" label="AUTOTESTPRIVATE_GETLACROSINFO"/>
-  <int value="1642" label="LOGIN_LAUNCHSAMLUSERSESSION"/>
-  <int value="1643" label="LOGIN_LOCKCURRENTSESSION"/>
-  <int value="1644" label="LOGIN_UNLOCKCURRENTSESSION"/>
-  <int value="1645" label="OS_TELEMETRY_GETBATTERYINFO"/>
-  <int value="1646" label="FILEMANAGERPRIVATE_POLLDRIVEHOSTEDFILEPINSTATES"/>
-  <int value="1647" label="OS_DIAGNOSTICS_RUNLANCONNECTIVITYROUTINE"/>
-  <int value="1648" label="LOGIN_REQUESTEXTERNALLOGOUT"/>
-  <int value="1649" label="LOGIN_NOTIFYEXTERNALLOGOUTDONE"/>
-  <int value="1650"
-      label="DELETED_PASSWORDSPRIVATE_RECORDCHANGEPASSWORDFLOWSTARTED"/>
-  <int value="1651" label="ENTERPRISEREPORTINGPRIVATE_ENQUEUERECORD"/>
-  <int value="1652" label="FILEMANAGERPRIVATE_SENDFEEDBACK"/>
-  <int value="1653" label="DECLARATIVENETREQUEST_TESTMATCHOUTCOME"/>
-  <int value="1654" label="FILEMANAGERPRIVATE_CANCELMOUNTING"/>
-  <int value="1655" label="AUTOMATIONINTERNAL_DISABLEDESKTOP"/>
-  <int value="1656" label="ACCESSIBILITY_PRIVATE_INSTALLPUMPKINFORDICTATION"/>
-  <int value="1657" label="BOOKMARKMANAGERPRIVATE_OPENINNEWTAB"/>
-  <int value="1658" label="BOOKMARKMANAGERPRIVATE_OPENINNEWWINDOW"/>
-  <int value="1659" label="WMDESKSPRIVATE_REMOVEDESK"/>
-  <int value="1660" label="SHAREDSTORAGEPRIVATE_GET"/>
-  <int value="1661" label="SHAREDSTORAGEPRIVATE_SET"/>
-  <int value="1662" label="SHAREDSTORAGEPRIVATE_REMOVE"/>
-  <int value="1663" label="FILEMANAGERPRIVATEINTERNAL_GETDLPMETADATA"/>
-  <int value="1664" label="WMDESKSPRIVATE_GETALLDESKS"/>
-  <int value="1665" label="AUTOTESTPRIVATE_FORCEAUTOTHEMEMODE"/>
-  <int value="1666" label="OS_TELEMETRY_GETSTATEFULPARTITIONINFO"/>
-  <int value="1667" label="OS_DIAGNOSTICS_RUNACPOWERROUTINE"/>
-  <int value="1668" label="OS_TELEMETRY_GETOSVERSIONINFO"/>
-  <int value="1669" label="ENTERPRISE_REMOTEAPPS_ADDFOLDER"/>
-  <int value="1670" label="ENTERPRISE_REMOTEAPPS_ADDAPP"/>
-  <int value="1671" label="ENTERPRISE_REMOTEAPPS_DELETEAPP"/>
-  <int value="1672" label="ENTERPRISEREPORTINGPRIVATE_GETAVINFO"/>
-  <int value="1673" label="ENTERPRISEREPORTINGPRIVATE_GETHOTFIXES"/>
-  <int value="1674" label="AUTOTESTPRIVATE_GETACCESSTOKEN"/>
-  <int value="1675" label="DEVELOPERPRIVATE_GETUSERANDEXTENSIONSITESBYETLD"/>
-  <int value="1676" label="AUTOTESTPRIVATE_SENDARCOVERLAYCOLOR"/>
-  <int value="1677" label="AUTOTESTPRIVATE_ISINPUTMETHODREADYFORTESTING"/>
-  <int value="1678" label="AUTOTESTPRIVATE_GETARCAPPKILLS"/>
-  <int value="1679" label="FILEMANAGERPRIVATE_OPENMANAGESYNCSETTINGS"/>
-  <int value="1680"
-      label="DELETED_PASSWORDSPRIVATE_STARTAUTOMATEDPASSWORDCHANGE"/>
-  <int value="1681" label="OFFSCREEN_CREATEDOCUMENT"/>
-  <int value="1682" label="DELETED_PASSWORDSPRIVATE_REFRESHSCRIPTSIFNECESSARY"/>
-  <int value="1683" label="OFFSCREEN_CLOSEDOCUMENT"/>
-  <int value="1684" label="WMDESKSPRIVATE_SETWINDOWPROPERTIES"/>
-  <int value="1685" label="AUTOTESTPRIVATE_LAUNCHFILESAPPTOPATH"/>
-  <int value="1686" label="SIDEPANEL_GETOPTIONS"/>
-  <int value="1687" label="SIDEPANEL_SETOPTIONS"/>
-  <int value="1688" label="ENTERPRISEREPORTINGPRIVATE_GETFILESYSTEMINFO"/>
-  <int value="1689" label="FILEMANAGERPRIVATE_GETDRIVEQUOTAMETADATA"/>
-  <int value="1690" label="DOWNLOADS_SETUIOPTIONS"/>
-  <int value="1691" label="AUTOTESTPRIVATE_GETDESKCOUNT"/>
-  <int value="1692" label="METRICSPRIVATE_RECORDSPARSEVALUEWITHPERSISTENTHASH"/>
-  <int value="1693" label="METRICSPRIVATE_RECORDSPARSEVALUEWITHHASHMETRICNAME"/>
-  <int value="1694" label="FILEMANAGERPRIVATE_GETDLPRESTRICTIONDETAILS"/>
-  <int value="1695" label="ACCESSIBILITY_PRIVATE_SILENCESPOKENFEEDBACK"/>
-  <int value="1696" label="AUTOTESTPRIVATE_SETALLOWEDPREF"/>
-  <int value="1697" label="DELETED_PASSWORDSPRIVATE_REQUESTCREDENTIALDETAILS"/>
-  <int value="1698" label="DEVELOPERPRIVATE_GETMATCHINGEXTENSIONSFORSITE"/>
-  <int value="1699" label="ACCESSIBILITY_PRIVATE_GETDLCCONTENTS"/>
-  <int value="1700" label="FILEMANAGERPRIVATEINTERNAL_PARSETRASHINFOFILES"/>
-  <int value="1701" label="PASSWORDSPRIVATE_EXTENDAUTHVALIDITY"/>
-  <int value="1702" label="AUTOTESTPRIVATE_GETDESKSINFO"/>
-  <int value="1703" label="ENTERPRISEREPORTINGPRIVATE_GETSETTINGS"/>
-  <int value="1704" label="WMDESKSPRIVATE_SAVEACTIVEDESK"/>
-  <int value="1705" label="WMDESKSPRIVATE_DELETESAVEDDESK"/>
-  <int value="1706" label="WMDESKSPRIVATE_RECALLSAVEDDESK"/>
-  <int value="1707" label="FILEMANAGERPRIVATE_GETDLPBLOCKEDCOMPONENTS"/>
-  <int value="1708" label="FILEMANAGERPRIVATE_GETDIALOGCALLER"/>
-  <int value="1709" label="OS_TELEMETRY_GETNONREMOVABLEBLOCKDEVICESINFO"/>
-  <int value="1710" label="OS_DIAGNOSTICS_RUNDNSRESOLUTIONROUTINE"/>
-  <int value="1711" label="OS_DIAGNOSTICS_RUNSIGNALSTRENGTHROUTINE"/>
-  <int value="1712" label="OS_DIAGNOSTICS_RUNGATEWAYCANBEPINGEDROUTINE"/>
-  <int value="1713" label="OS_DIAGNOSTICS_RUNDNSRESOLVERPRESENTROUTINE"/>
-  <int value="1714" label="OS_TELEMETRY_GETINTERNETCONNECTIVITYINFO"/>
-  <int value="1715" label="PASSWORDSPRIVATE_GETINSECURECREDENTIALS"/>
-  <int value="1716" label="ACTION_ISENABLED"/>
-  <int value="1717"
-      label="PASSWORDSPRIVATE_SWITCHBIOMETRICAUTHBEFOREFILLINGSTATE"/>
-  <int value="1718" label="WMDESKSPRIVATE_GETACTIVEDESK"/>
-  <int value="1719" label="WMDESKSPRIVATE_SWITCHDESK"/>
-  <int value="1720" label="OS_TELEMETRY_GETTPMINFO"/>
-  <int value="1721"
-      label="INPUTMETHODPRIVATE_NOTIFYINPUTMETHODREADYFORTESTING"/>
-  <int value="1722" label="AUTOTESTPRIVATE_MAKEFUSEBOXTEMPDIR"/>
-  <int value="1723" label="AUTOTESTPRIVATE_REMOVEFUSEBOXTEMPDIR"/>
-  <int value="1724" label="AUTOTESTPRIVATE_GETTHROUGHPUTTRACKERDATA"/>
-  <int value="1725" label="ENTERPRISE_REMOTEAPPS_SORTLAUNCHER"/>
-  <int value="1726" label="PASSWORDSPRIVATE_SHOWADDSHORTCUTDIALOG"/>
-  <int value="1727" label="ACTION_GETBADGETEXTCOLOR"/>
-  <int value="1728" label="ACTION_SETBADGETEXTCOLOR"/>
-  <int value="1729" label="AUTOTESTPRIVATE_REMOVECOMPONENTEXTENSION"/>
-  <int value="1730" label="PASSWORDSPRIVATE_REQUESTCREDENTIALSDETAILS"/>
-  <int value="1731" label="PASSWORDSPRIVATE_GETCREDENTIALGROUPS"/>
-  <int value="1732" label="AUTOTESTPRIVATE_GETLAUNCHERSSEARCHBOXSTATE"/>
-  <int value="1733" label="OS_DIAGNOSTICS_RUNSENSITIVESENSORROUTINE"/>
-  <int value="1734" label="OS_DIAGNOSTICS_RUNNVMESELFTESTROUTINE"/>
-  <int value="1735" label="AUTOTESTPRIVATE_STARTFRAMECOUNTING"/>
-  <int value="1736" label="AUTOTESTPRIVATE_STOPFRAMECOUNTING"/>
-  <int value="1737" label="FEEDBACKPRIVATE_OPENFEEDBACK"/>
-  <int value="1738" label="OS_DIAGNOSTICS_RUNFINGERPRINTALIVEROUTINE"/>
-  <int value="1739" label="DEVELOPERPRIVATE_UPDATESITEACCESS"/>
-  <int value="1740" label="AUTOTESTPRIVATE_REFRESHREMOTECOMMANDS"/>
-  <int value="1741" label="FILESYSTEMPROVIDERINTERNAL_RESPONDTOMOUNTREQUEST"/>
-  <int value="1742" label="OS_DIAGNOSTICS_RUNEMMCLIFETIMEROUTINE"/>
-  <int value="1743" label="AUTOFILLPRIVATE_SAVEIBAN"/>
-  <int value="1744" label="AUTOFILLPRIVATE_GETIBANLIST"/>
-  <int value="1745" label="ENTERPRISE_PLATFORMKEYS_CHALLENGEKEY"/>
-  <int value="1746" label="PDFVIEWERPRIVATE_ISALLOWEDLOCALFILEACCESS"/>
-  <int value="1747" label="DECLARATIVENETREQUEST_UPDATESTATICRULES"/>
-  <int value="1748" label="FILEMANAGERPRIVATEINTERNAL_SEARCHFILES"/>
-  <int value="1749" label="SYSTEMLOG_ADD"/>
-  <int value="1750" label="DECLARATIVENETREQUEST_GETDISABLEDRULEIDS"/>
-  <int value="1751"
-      label="SMARTCARDPROVIDERPRIVATE_REPORTESTABLISHCONTEXTRESULT"/>
-  <int value="1752"
-      label="SMARTCARDPROVIDERPRIVATE_REPORTRELEASECONTEXTRESULT"/>
-  <int value="1753" label="SMARTCARDPROVIDERPRIVATE_REPORTLISTREADERSRESULT"/>
-  <int value="1754"
-      label="SMARTCARDPROVIDERPRIVATE_REPORTGETSTATUSCHANGERESULT"/>
-  <int value="1755" label="FILEMANAGERPRIVATE_RESUMEIOTASK"/>
-  <int value="1756" label="PASSWORDSPRIVATE_GETCREDENTIALSWITHREUSEDPASSWORD"/>
-  <int value="1757" label="OS_TELEMETRY_GETAUDIOINFO"/>
-  <int value="1758" label="OS_TELEMETRY_GETMARKETINGINFO"/>
-  <int value="1759" label="OS_TELEMETRY_GETUSBBUSINFO"/>
-  <int value="1760" label="PDFVIEWERPRIVATE_ISPDFOCRALWAYSACTIVE"/>
-  <int value="1761" label="PDFVIEWERPRIVATE_SETPDFOCRPREF"/>
-  <int value="1762" label="AUTOFILLPRIVATE_GETACCOUNTINFO"/>
-  <int value="1763" label="FILEMANAGERPRIVATE_PROGRESSPAUSEDTASKS"/>
-  <int value="1764" label="BOOKMARKMANAGERPRIVATE_IMPORT"/>
-  <int value="1765" label="BOOKMARKMANAGERPRIVATE_EXPORT"/>
-  <int value="1766" label="PASSWORDSPRIVATE_SHOWEXPORTEDFILEINSHELL"/>
-  <int value="1767" label="FILEMANAGERPRIVATE_TOGGLEBULKPINNING"/>
-  <int value="1768" label="SMARTCARDPROVIDERPRIVATE_REPORTCONNECTRESULT"/>
-  <int value="1769"
-      label="DELETED_SMARTCARDPROVIDERPRIVATE_REPORTDISCONNECTRESULT"/>
-  <int value="1770" label="WMDESKSPRIVATE_GETDESKBYID"/>
-  <int value="1771" label="AUTOFILLPRIVATE_ISVALIDIBAN"/>
-  <int value="1772" label="ACCESSIBILITY_PRIVATE_ISLACROSPRIMARY"/>
-  <int value="1773" label="POWER_REPORTACTIVITY"/>
-  <int value="1774" label="PASSWORDSPRIVATE_CONTINUEIMPORT"/>
-  <int value="1775" label="PASSWORDSPRIVATE_RESETIMPORTER"/>
-  <int value="1776" label="SMARTCARDPROVIDERPRIVATE_REPORTPLAINRESULT"/>
-  <int value="1777" label="RUNTIME_GETCONTEXTS"/>
-  <int value="1778" label="OS_EVENTS_ISEVENTSUPPORTED"/>
-  <int value="1779" label="OS_EVENTS_STARTCAPTURINGEVENTS"/>
-  <int value="1780" label="OS_EVENTS_STOPCAPTURINGEVENTS"/>
-  <int value="1781" label="SIDEPANEL_SETPANELBEHAVIOR"/>
-  <int value="1782" label="SIDEPANEL_GETPANELBEHAVIOR"/>
-  <int value="1783" label="FILEMANAGERPRIVATE_GETBULKPINPROGRESS"/>
-  <int value="1784" label="ENTERPRISE_REMOTEAPPS_SETPINNEDAPPS"/>
-  <int value="1785" label="SMARTCARDPROVIDERPRIVATE_REPORTDATARESULT"/>
-  <int value="1786" label="FILEMANAGERPRIVATE_CALCULATEBULKPINREQUIREDSPACE"/>
-  <int value="1787"
-      label="AUTOFILLPRIVATE_AUTHENTICATEUSERANDFLIPMANDATORYAUTHTOGGLE"/>
-  <int value="1788" label="FILEMANAGERPRIVATE_SHOWPOLICYDIALOG"/>
-  <int value="1789" label="SIDEPANEL_OPEN"/>
-  <int value="1790" label="AUTOTESTPRIVATE_INSTALLBRUSCHETTA"/>
-  <int value="1791" label="AUTOTESTPRIVATE_REMOVEBRUSCHETTA"/>
-  <int value="1792" label="AUTOFILLPRIVATE_GETLOCALCARD"/>
-  <int value="1793" label="AUTOTESTPRIVATE_ISFEATUREENABLED"/>
-  <int value="1794" label="PASSWORDSPRIVATE_CHANGECREDENTIAL"/>
-  <int value="1795" label="SMARTCARDPROVIDERPRIVATE_REPORTSTATUSRESULT"/>
-  <int value="1796" label="AUTOTESTPRIVATE_WAITFORAMBIENTVIDEO"/>
-  <int value="1797" label="GUESTVIEWINTERNAL_DESTROYUNATTACHEDGUEST"/>
-  <int value="1798" label="AUTOTESTPRIVATE_GETCURRENTINPUTMETHODDESCRIPTOR"/>
-  <int value="1799" label="OS_DIAGNOSTICS_RUNBLUETOOTHPOWERROUTINE"/>
-  <int value="1800" label="OS_DIAGNOSTICS_RUNUFSLIFETIMEROUTINE"/>
-  <int value="1801" label="OS_TELEMETRY_GETDISPLAYINFO"/>
-  <int value="1802" label="OS_DIAGNOSTICS_RUNPOWERBUTTONROUTINE"/>
-  <int value="1803" label="OS_DIAGNOSTICS_RUNAUDIODRIVERROUTINE"/>
-  <int value="1804" label="READINGLIST_ADDENTRY"/>
-  <int value="1805" label="READINGLIST_REMOVEENTRY"/>
-  <int value="1806" label="PASSWORDSPRIVATE_FETCHFAMILYMEMBERS"/>
-  <int value="1807" label="READINGLIST_UPDATEENTRY"/>
-  <int value="1808" label="READINGLIST_QUERY"/>
-  <int value="1809" label="DEVELOPERPRIVATE_REMOVEMULTIPLEEXTENSIONS"/>
-  <int value="1810" label="PASSWORDSPRIVATE_SHAREPASSWORD"/>
-  <int value="1811" label="AUTOFILLPRIVATE_CHECKIFDEVICEAUTHAVAILABLE"/>
-  <int value="1812" label="OS_DIAGNOSTICS_RUNBLUETOOTHDISCOVERYROUTINE"/>
-  <int value="1813"
-      label="IMAGELOADERPRIVATE_GETARCDOCUMENTSPROVIDERTHUMBNAIL"/>
-  <int value="1814" label="IMAGELOADERPRIVATE_GETDRIVETHUMBNAIL"/>
-  <int value="1815" label="IMAGELOADERPRIVATE_GETPDFTHUMBNAIL"/>
-  <int value="1816" label="ACCESSIBILITYSERVICEPRIVATE_SPEAKSELECTEDTEXT"/>
-  <int value="1817" label="USERSCRIPTS_REGISTER"/>
-  <int value="1818" label="OS_DIAGNOSTICS_RUNBLUETOOTHSCANNINGROUTINE"/>
-  <int value="1819" label="OS_DIAGNOSTICS_RUNBLUETOOTHPAIRINGROUTINE"/>
-  <int value="1820" label="FILEMANAGERPRIVATE_DISMISSIOTASK"/>
-  <int value="1821" label="ACCESSIBILITY_PRIVATE_SHOWTOAST"/>
-  <int value="1822" label="USERSCRIPTS_GETSCRIPTS"/>
-  <int value="1823" label="FILEMANAGERPRIVATE_GETDEVICECONNECTIONSTATE"/>
-  <int value="1824" label="USERSCRIPTS_UNREGISTER"/>
-  <int value="1825" label="AUTOTESTPRIVATE_SETARCINTERACTIVESTATE"/>
-  <int value="1826" label="OS_DIAGNOSTICS_CREATEMEMORYROUTINE"/>
-  <int value="1827" label="OS_DIAGNOSTICS_STARTROUTINE"/>
-  <int value="1828" label="OS_DIAGNOSTICS_CANCELROUTINE"/>
-  <int value="1829" label="OS_DIAGNOSTICS_ISMEMORYROUTINEARGUMENTSUPPORTED"/>
-  <int value="1830"
-      label="ACCESSIBILITY_PRIVATE_CLIPBOARDCOPYINACTIVELACROSGOOGLEDOC"/>
-  <int value="1831" label="USERSCRIPTS_UPDATE"/>
-  <int value="1832" label="INPUTMETHODPRIVATE_GETLANGUAGEPACKSTATUS"/>
-  <int value="1833" label="OS_DIAGNOSTICS_RUNFANROUTINE"/>
-  <int value="1834" label="AUTOTESTPRIVATE_ISFIELDTRIALACTIVE"/>
-  <int value="1835" label="AUTOTESTPRIVATE_GETARCWAKEFULNESSMODE"/>
-  <int value="1836" label="OS_DIAGNOSTICS_CREATEVOLUMEBUTTONROUTINE"/>
-  <int value="1837"
-      label="OS_DIAGNOSTICS_ISVOLUMEBUTTONROUTINEARGUMENTSUPPORTED"/>
-  <int value="1838" label="USERSCRIPTS_CONFIGUREWORLD"/>
-  <int value="1839" label="ENTERPRISE_KIOSKINPUT_SETCURRENTINPUTMETHOD"/>
-  <int value="1840" label="AUTOFILLPRIVATE_BULKDELETEALLCVCS"/>
-  <int value="1841" label="PDFVIEWERPRIVATE_GETSTREAMINFO"/>
-  <int value="1842" label="PDFVIEWERPRIVATE_SETPDFPLUGINATTRIBUTES"/>
-  <int value="1843" label="ACCESSIBILITY_PRIVATE_SETCURSORPOSITION"/>
-  <int value="1844" label="ACCESSIBILITY_PRIVATE_GETTTSDLCCONTENTS"/>
-  <int value="1845" label="OS_DIAGNOSTICS_CREATEFANROUTINE"/>
-  <int value="1846" label="OS_DIAGNOSTICS_ISFANROUTINEARGUMENTSUPPORTED"/>
-  <int value="1847" label="AUTOTESTPRIVATE_OVERRIDEORCARESPONSE"/>
-  <int value="1848" label="ODFSCONFIGPRIVATE_GETMOUNT"/>
-  <int value="1849" label="ODFSCONFIGPRIVATE_GETACCOUNTRESTRICTIONS"/>
-  <int value="1850" label="DOCUMENTSCAN_GETSCANNERLIST"/>
-  <int value="1851" label="OS_MANAGEMENT_SETAUDIOGAIN"/>
-  <int value="1852" label="DOCUMENTSCAN_OPENSCANNER"/>
-  <int value="1853" label="DOCUMENTSCAN_CLOSESCANNER"/>
-  <int value="1854" label="ACCESSIBILITY_PRIVATE_GETDISPLAYBOUNDS"/>
-  <int value="1855" label="AUTOFILLPRIVATE_SERVERIBANLINKCLICKED"/>
-  <int value="1856" label="AUTOTESTPRIVATE_CLEARALLOWEDPREF"/>
-  <int value="1857" label="DOCUMENTSCAN_STARTSCAN"/>
-  <int value="1858" label="DOCUMENTSCAN_CANCELSCAN"/>
-  <int value="1859" label="DOCUMENTSCAN_READSCANDATA"/>
-  <int value="1860" label="DOCUMENTSCAN_SETOPTIONS"/>
-  <int value="1861" label="DOCUMENTSCAN_GETOPTIONGROUPS"/>
-</enum>
-
 <enum name="ExtensionInProgressRequestState">
   <int value="0" label="In progress"/>
   <int value="1" label="In progress, but the final response has arrived"/>
@@ -16546,56 +13873,6 @@
   <int value="14" label="The request is completed"/>
 </enum>
 
-<enum name="ExtensionInstallationCrxInstallError">
-  <int value="0" label="NONE"/>
-  <int value="1" label="CONVERT_USER_SCRIPT_TO_EXTENSION_FAILED"/>
-  <int value="2" label="UNEXPECTED_ID"/>
-  <int value="3" label="UNEXPECTED_VERSION"/>
-  <int value="4" label="MISMATCHED_VERSION"/>
-  <int value="5" label="MANIFEST_INVALID"/>
-  <int value="6" label="INSTALL_NOT_ENABLED"/>
-  <int value="7" label="OFFSTORE_INSTALL_DISALLOWED"/>
-  <int value="8" label="INCORRECT_APP_CONTENT_TYPE"/>
-  <int value="9" label="NOT_INSTALLED_FROM_GALLERY"/>
-  <int value="10" label="INCORRECT_INSTALL_HOST"/>
-  <int value="11" label="DEPENDENCY_NOT_SHARED_MODULE"/>
-  <int value="12" label="DEPENDENCY_OLD_VERSION"/>
-  <int value="13" label="DEPENDENCY_NOT_ALLOWLISTED"/>
-  <int value="14" label="UNSUPPORTED_REQUIREMENTS"/>
-  <int value="15" label="EXTENSION_IS_BLOCKLISTED"/>
-  <int value="16" label="DISALLOWED_BY_POLICY"/>
-  <int value="17" label="KIOSK_MODE_ONLY"/>
-  <int value="18" label="OVERLAPPING_WEB_EXTENT"/>
-  <int value="19" label="CANT_DOWNGRADE_VERSION"/>
-  <int value="20" label="MOVE_DIRECTORY_TO_PROFILE_FAILED"/>
-  <int value="21" label="CANT_LOAD_EXTENSION"/>
-  <int value="22" label="USER_CANCELED"/>
-  <int value="23" label="USER_ABORTED"/>
-  <int value="24" label="UPDATE_NON_EXISTING_EXTENSION"/>
-</enum>
-
-<enum name="ExtensionInstallationDownloadingCacheStatus">
-  <int value="0" label="UNKNOWN"/>
-  <int value="1" label="DISABLED"/>
-  <int value="2" label="MISS"/>
-  <int value="3" label="OUTDATED"/>
-  <int value="4" label="HIT"/>
-  <int value="5" label="HIT_ON_MANIFEST_FETCH_FAILURE"/>
-</enum>
-
-<enum name="ExtensionInstallationDownloadingStage">
-  <int value="0" label="PENDING"/>
-  <int value="1" label="QUEUED_FOR_MANIFEST"/>
-  <int value="2" label="DOWNLOADING_MANIFEST"/>
-  <int value="3" label="DOWNLOADING_MANIFEST_RETRY"/>
-  <int value="4" label="PARSING_MANIFEST"/>
-  <int value="5" label="MANIFEST_LOADED"/>
-  <int value="6" label="QUEUED_FOR_CRX"/>
-  <int value="7" label="DOWNLOADING_CRX"/>
-  <int value="8" label="DOWNLOADING_CRX_RETRY"/>
-  <int value="9" label="FINISHED"/>
-</enum>
-
 <enum name="ExtensionInstallationFailureReason">
   <int value="0" label="UNKNOWN"/>
   <int value="1" label="INVALID_ID"/>
@@ -16628,447 +13905,16 @@
   <int value="28" label="REPLACED_BY_SYSTEM_APP"/>
 </enum>
 
-<enum name="ExtensionInstallationStage">
-  <int value="0" label="CREATED"/>
-  <int value="1" label="PENDING"/>
-  <int value="2" label="DOWNLOADING"/>
-  <int value="3" label="INSTALLING"/>
-  <int value="4" label="COMPLETE"/>
-</enum>
-
-<enum name="ExtensionInstallCreationStage">
-  <int value="0" label="UNKNOWN"/>
-  <int value="1" label="CREATION_INITIATED"/>
-  <int value="2" label="NOTIFIED_FROM_MANAGEMENT_INITIAL_CREATION_FORCED"/>
-  <int value="3" label="NOTIFIED_FROM_MANAGEMENT_INITIAL_CREATION_NOT_FORCED"/>
-  <int value="4" label="NOTIFIED_FROM_MANAGEMENT"/>
-  <int value="5" label="NOTIFIED_FROM_MANAGEMENT_NOT_FORCED"/>
-  <int value="6" label="SEEN_BY_POLICY_LOADER"/>
-  <int value="7" label="SEEN_BY_EXTERNAL_PROVIDER"/>
-</enum>
-
-<enum name="ExtensionInstallFrictionDialogAction">
-  <int value="0" label="Close"/>
-  <int value="1" label="Learn more"/>
-  <int value="2" label="Continue to install"/>
-</enum>
-
-<enum name="ExtensionLaunchType">
-  <int value="0" label="PINNED"/>
-  <int value="1" label="REGULAR"/>
-  <int value="2" label="FULLSCREEN"/>
-  <int value="3" label="WINDOW"/>
-</enum>
-
-<enum name="ExtensionLocation">
-  <int value="0" label="INVALID"/>
-  <int value="1" label="INTERNAL"/>
-  <int value="2" label="EXTERNAL_PREF"/>
-  <int value="3" label="EXTERNAL_REGISTRY"/>
-  <int value="4" label="LOAD"/>
-  <int value="5" label="COMPONENT"/>
-  <int value="6" label="EXTERNAL_PREF_DOWNLOAD"/>
-  <int value="7" label="EXTERNAL_POLICY_DOWNLOAD"/>
-  <int value="8" label="COMMAND_LINE"/>
-  <int value="9" label="EXTERNAL_POLICY"/>
-  <int value="10" label="EXTERNAL_COMPONENT"/>
-</enum>
-
-<enum name="ExtensionNavigationScheme">
-  <int value="0" label="HttpOrHttps"/>
-  <int value="1" label="Chrome"/>
-  <int value="2" label="FileWithPermission"/>
-  <int value="3" label="FileWithoutPermission"/>
-  <int value="4" label="Other"/>
-</enum>
-
-<enum name="ExtensionNoUpdatesInfo">
-  <int value="0" label="Unknown"/>
-  <int value="1" label="Empty"/>
-  <int value="2" label="Rate limit"/>
-  <int value="3" label="Disabled by client"/>
-  <int value="4" label="Bandwidth limit"/>
-</enum>
-
-<enum name="ExtensionPermission3">
-<!-- Generated from extensions/common/mojom/api_permission_id.mojom.
-Called by update_extension_permission.py.-->
-
-  <int value="0" label="kInvalid"/>
-  <int value="1" label="kUnknown"/>
-  <int value="2" label="kAccessibilityFeaturesModify"/>
-  <int value="3" label="kAccessibilityFeaturesRead"/>
-  <int value="4" label="kAccessibilityPrivate"/>
-  <int value="5" label="kActiveTab"/>
-  <int value="6" label="kActivityLogPrivate"/>
-  <int value="7" label="kAlarms"/>
-  <int value="8" label="kAlphaEnabled"/>
-  <int value="9" label="kAlwaysOnTopWindows"/>
-  <int value="10" label="kAppView"/>
-  <int value="11" label="kAudio"/>
-  <int value="12" label="kAudioCapture"/>
-  <int value="13" label="kDeleted_AudioModem"/>
-  <int value="14" label="kAutofillPrivate"/>
-  <int value="15" label="kAutomation"/>
-  <int value="16" label="kAutoTestPrivate"/>
-  <int value="17" label="kBackground"/>
-  <int value="18" label="kBluetoothPrivate"/>
-  <int value="19" label="kBookmark"/>
-  <int value="20" label="kDeleted_BookmarkManagerPrivate"/>
-  <int value="21" label="kBrailleDisplayPrivate"/>
-  <int value="22" label="kBrowser"/>
-  <int value="23" label="kBrowsingData"/>
-  <int value="24" label="kDeleted_Cast"/>
-  <int value="25" label="kDeleted_CastStreaming"/>
-  <int value="26" label="kChromeosInfoPrivate"/>
-  <int value="27" label="kClipboardRead"/>
-  <int value="28" label="kClipboardWrite"/>
-  <int value="29" label="kDeleted_CloudPrintPrivate"/>
-  <int value="30" label="kCommandLinePrivate"/>
-  <int value="31" label="kCommandsAccessibility"/>
-  <int value="32" label="kContentSettings"/>
-  <int value="33" label="kContextMenus"/>
-  <int value="34" label="kCookie"/>
-  <int value="35" label="kDeleted_Copresence"/>
-  <int value="36" label="kDeleted_CopresencePrivate"/>
-  <int value="37" label="kDeleted_CryptotokenPrivate"/>
-  <int value="38" label="kDeleted_DataReductionProxy"/>
-  <int value="39" label="kDiagnostics"/>
-  <int value="40" label="kDeleted_Dial"/>
-  <int value="41" label="kDebugger"/>
-  <int value="42" label="kDeclarative"/>
-  <int value="43" label="kDeclarativeContent"/>
-  <int value="44" label="kDeclarativeWebRequest"/>
-  <int value="45" label="kDesktopCapture"/>
-  <int value="46" label="kDeleted_DesktopCapturePrivate"/>
-  <int value="47" label="kDeveloperPrivate"/>
-  <int value="48" label="kDevtools"/>
-  <int value="49" label="kDns"/>
-  <int value="50" label="kDocumentScan"/>
-  <int value="51" label="kDownloads"/>
-  <int value="52" label="kDeleted_DownloadsInternal"/>
-  <int value="53" label="kDownloadsOpen"/>
-  <int value="54" label="kDownloadsShelf"/>
-  <int value="55" label="kDeleted_EasyUnlockPrivate"/>
-  <int value="56" label="kEchoPrivate"/>
-  <int value="57" label="kDeleted_EmbeddedExtensionOptions"/>
-  <int value="58" label="kEnterprisePlatformKeys"/>
-  <int value="59" label="kEnterprisePlatformKeysPrivate"/>
-  <int value="60" label="kDeleted_ExperienceSamplingPrivate"/>
-  <int value="61" label="kExperimental"/>
-  <int value="62" label="kDeleted_ExtensionView"/>
-  <int value="63" label="kDeprecated_ExternallyConnectableAllUrls"/>
-  <int value="64" label="kFeedbackPrivate"/>
-  <int value="65" label="kFileBrowserHandler"/>
-  <int value="66" label="kDeleted_FileBrowserHandlerInternal"/>
-  <int value="67" label="kFileManagerPrivate"/>
-  <int value="68" label="kFileSystem"/>
-  <int value="69" label="kFileSystemDirectory"/>
-  <int value="70" label="kFileSystemProvider"/>
-  <int value="71" label="kFileSystemRequestFileSystem"/>
-  <int value="72" label="kFileSystemRetainEntries"/>
-  <int value="73" label="kFileSystemWrite"/>
-  <int value="74" label="kDeleted_FileSystemWriteDirectory"/>
-  <int value="75" label="kFirstRunPrivate"/>
-  <int value="76" label="kFontSettings"/>
-  <int value="77" label="kFullscreen"/>
-  <int value="78" label="kDeleted_GcdPrivate"/>
-  <int value="79" label="kGcm"/>
-  <int value="80" label="kGeolocation"/>
-  <int value="81" label="kHid"/>
-  <int value="82" label="kHistory"/>
-  <int value="83" label="kHomepage"/>
-  <int value="84" label="kHotwordPrivate"/>
-  <int value="85" label="kIdentity"/>
-  <int value="86" label="kIdentityEmail"/>
-  <int value="87" label="kDeleted_IdentityPrivate"/>
-  <int value="88" label="kIdltest"/>
-  <int value="89" label="kIdle"/>
-  <int value="90" label="kImeWindowEnabled"/>
-  <int value="91" label="kDeleted_InlineInstallPrivate"/>
-  <int value="92" label="kInput"/>
-  <int value="93" label="kInputMethodPrivate"/>
-  <int value="94" label="kDeleted_InterceptAllKeys"/>
-  <int value="95" label="kDeleted_LauncherSearchProvider"/>
-  <int value="96" label="kLocation"/>
-  <int value="97" label="kDeleted_LogPrivate"/>
-  <int value="98" label="kManagement"/>
-  <int value="99" label="kMediaGalleries"/>
-  <int value="100" label="kMediaPlayerPrivate"/>
-  <int value="101" label="kDeleted_MediaRouterPrivate"/>
-  <int value="102" label="kMetricsPrivate"/>
-  <int value="103" label="kMDns"/>
-  <int value="104" label="kDeleted_MusicManagerPrivate"/>
-  <int value="105" label="kNativeMessaging"/>
-  <int value="106" label="kDeleted_NetworkingConfig"/>
-  <int value="107" label="kNetworkingPrivate"/>
-  <int value="108" label="kDeleted_NotificationProvider"/>
-  <int value="109" label="kNotifications"/>
-  <int value="110" label="kOverrideEscFullscreen"/>
-  <int value="111" label="kPageCapture"/>
-  <int value="112" label="kPointerLock"/>
-  <int value="113" label="kPlatformKeys"/>
-  <int value="114" label="kDeleted_Plugin"/>
-  <int value="115" label="kPower"/>
-  <int value="116" label="kDeleted_PreferencesPrivate"/>
-  <int value="117" label="kDeleted_PrincipalsPrivate"/>
-  <int value="118" label="kPrinterProvider"/>
-  <int value="119" label="kPrivacy"/>
-  <int value="120" label="kProcesses"/>
-  <int value="121" label="kProxy"/>
-  <int value="122" label="kImageWriterPrivate"/>
-  <int value="123" label="kDeleted_ReadingListPrivate"/>
-  <int value="124" label="kRtcPrivate"/>
-  <int value="125" label="kSearchProvider"/>
-  <int value="126" label="kSearchEnginesPrivate"/>
-  <int value="127" label="kSerial"/>
-  <int value="128" label="kSessions"/>
-  <int value="129" label="kSettingsPrivate"/>
-  <int value="130" label="kDeleted_SignedInDevices"/>
-  <int value="131" label="kSocket"/>
-  <int value="132" label="kStartupPages"/>
-  <int value="133" label="kStorage"/>
-  <int value="134" label="kDeleted_StreamsPrivate"/>
-  <int value="135" label="kSyncFileSystem"/>
-  <int value="136" label="kSystemPrivate"/>
-  <int value="137" label="kSystemDisplay"/>
-  <int value="138" label="kSystemStorage"/>
-  <int value="139" label="kTab"/>
-  <int value="140" label="kTabCapture"/>
-  <int value="141" label="kTabCaptureForTab"/>
-  <int value="142" label="kTerminalPrivate"/>
-  <int value="143" label="kTopSites"/>
-  <int value="144" label="kTts"/>
-  <int value="145" label="kTtsEngine"/>
-  <int value="146" label="kUnlimitedStorage"/>
-  <int value="147" label="kU2fDevices"/>
-  <int value="148" label="kUsb"/>
-  <int value="149" label="kUsbDevice"/>
-  <int value="150" label="kVideoCapture"/>
-  <int value="151" label="kVirtualKeyboardPrivate"/>
-  <int value="152" label="kVpnProvider"/>
-  <int value="153" label="kWallpaper"/>
-  <int value="154" label="kDeleted_WallpaperPrivate"/>
-  <int value="155" label="kWebcamPrivate"/>
-  <int value="156" label="kDeleted_kWebConnectable"/>
-  <int value="157" label="kWebNavigation"/>
-  <int value="158" label="kWebRequest"/>
-  <int value="159" label="kWebRequestBlocking"/>
-  <int value="160" label="kWebrtcAudioPrivate"/>
-  <int value="161" label="kWebrtcDesktopCapturePrivate"/>
-  <int value="162" label="kWebrtcLoggingPrivate"/>
-  <int value="163" label="kWebstorePrivate"/>
-  <int value="164" label="kDeleted_WebstoreWidgetPrivate"/>
-  <int value="165" label="kWebView"/>
-  <int value="166" label="kWindowShape"/>
-  <int value="167" label="kDeleted_ScreenlockPrivate"/>
-  <int value="168" label="kSystemCpu"/>
-  <int value="169" label="kSystemMemory"/>
-  <int value="170" label="kSystemNetwork"/>
-  <int value="171" label="kSystemInfoCpu"/>
-  <int value="172" label="kSystemInfoMemory"/>
-  <int value="173" label="kBluetooth"/>
-  <int value="174" label="kBluetoothDevices"/>
-  <int value="175" label="kFavicon"/>
-  <int value="176" label="kFullAccess"/>
-  <int value="177" label="kHostReadOnly"/>
-  <int value="178" label="kHostReadWrite"/>
-  <int value="179" label="kHostsAll"/>
-  <int value="180" label="kHostsAllReadOnly"/>
-  <int value="181" label="kMediaGalleriesAllGalleriesCopyTo"/>
-  <int value="182" label="kMediaGalleriesAllGalleriesDelete"/>
-  <int value="183" label="kMediaGalleriesAllGalleriesRead"/>
-  <int value="184" label="kNetworkState"/>
-  <int value="185" label="kDeleted_OverrideBookmarksUI"/>
-  <int value="186" label="kShouldWarnAllHosts"/>
-  <int value="187" label="kSocketAnyHost"/>
-  <int value="188" label="kSocketDomainHosts"/>
-  <int value="189" label="kSocketSpecificHosts"/>
-  <int value="190" label="kDeleted_UsbDeviceList"/>
-  <int value="191" label="kUsbDeviceUnknownProduct"/>
-  <int value="192" label="kUsbDeviceUnknownVendor"/>
-  <int value="193" label="kUsersPrivate"/>
-  <int value="194" label="kPasswordsPrivate"/>
-  <int value="195" label="kLanguageSettingsPrivate"/>
-  <int value="196" label="kEnterpriseDeviceAttributes"/>
-  <int value="197" label="kCertificateProvider"/>
-  <int value="198" label="kResourcesPrivate"/>
-  <int value="199" label="kDeleted_DisplaySource"/>
-  <int value="200" label="kClipboard"/>
-  <int value="201" label="kNetworkingOnc"/>
-  <int value="202" label="kVirtualKeyboard"/>
-  <int value="203" label="kDeleted_NetworkingCastPrivate"/>
-  <int value="204" label="kMediaPerceptionPrivate"/>
-  <int value="205" label="kLockScreen"/>
-  <int value="206" label="kNewTabPageOverride"/>
-  <int value="207" label="kDeclarativeNetRequest"/>
-  <int value="208" label="kLockWindowFullscreenPrivate"/>
-  <int value="209" label="kWebrtcLoggingPrivateAudioDebug"/>
-  <int value="210" label="kEnterpriseReportingPrivate"/>
-  <int value="211" label="kCecPrivate"/>
-  <int value="212" label="kSafeBrowsingPrivate"/>
-  <int value="213" label="kDeleted_FileSystemRequestDownloads"/>
-  <int value="214" label="kDeleted_SystemPowerSource"/>
-  <int value="215" label="kArcAppsPrivate"/>
-  <int value="216" label="kEnterpriseHardwarePlatform"/>
-  <int value="217" label="kLoginScreenUi"/>
-  <int value="218" label="kDeclarativeNetRequestFeedback"/>
-  <int value="219" label="kTransientBackground"/>
-  <int value="220" label="kLogin"/>
-  <int value="221" label="kLoginScreenStorage"/>
-  <int value="222" label="kLoginState"/>
-  <int value="223" label="kPrintingMetrics"/>
-  <int value="224" label="kPrinting"/>
-  <int value="225" label="kCrashReportPrivate"/>
-  <int value="226" label="kDeleted_AutofillAssistantPrivate"/>
-  <int value="227" label="kEnterpriseNetworkingAttributes"/>
-  <int value="228" label="kSearch"/>
-  <int value="229" label="kTabGroups"/>
-  <int value="230" label="kScripting"/>
-  <int value="231" label="kWmDesksPrivate"/>
-  <int value="232" label="kWebAuthenticationProxy"/>
-  <int value="233" label="kDeclarativeNetRequestWithHostAccess"/>
-  <int value="234" label="kChromeOSTelemetry"/>
-  <int value="235" label="kSpeechRecognitionPrivate"/>
-  <int value="236" label="kChromeOSDiagnostics"/>
-  <int value="237" label="kChromeOSTelemetrySerialNumber"/>
-  <int value="238" label="kSharedStoragePrivate"/>
-  <int value="239" label="kEnterpriseRemoteApps"/>
-  <int value="240" label="kOffscreen"/>
-  <int value="241" label="kSidePanel"/>
-  <int value="242" label="kDownloadsUi"/>
-  <int value="243" label="kWebRequestAuthProvider"/>
-  <int value="244" label="kChromeOSTelemetryNetworkInformation"/>
-  <int value="245" label="kPdfViewerPrivate"/>
-  <int value="246" label="kSystemLog"/>
-  <int value="247" label="kSmartCardProviderPrivate"/>
-  <int value="248" label="kChromeOSEvents"/>
-  <int value="249" label="kChromeOSAttachedDeviceInfo"/>
-  <int value="250" label="kReadingList"/>
-  <int value="251" label="kImageLoaderPrivate"/>
-  <int value="252" label="kAccessibilityServicePrivate"/>
-  <int value="253" label="kUserScripts"/>
-  <int value="254" label="kChromeOSBluetoothPeripheralsInfo"/>
-  <int value="255" label="kEnterpriseKioskInput"/>
-  <int value="256" label="kOdfsConfigPrivate"/>
-  <int value="257" label="kChromeOSManagementAudio"/>
-</enum>
-
 <enum name="ExtensionPointEnableState">
   <int value="0" label="EXTENSIONPOINT_DISABLED_IME"/>
   <int value="1" label="EXTENSIONPOINT_ENABLED"/>
 </enum>
 
-<enum name="ExtensionPolicyReinstallReason">
-  <int value="0" label="Tried to load a corrupted extension"/>
-  <int value="1" label="Corrupted Chrome Web Store extension"/>
-  <int value="2" label="Corrupted non-webstore extension"/>
-  <int value="4" label="Non-webstore extension without hashes skipped"/>
-</enum>
-
-<enum name="ExtensionType">
-  <int value="0" label="UNKNOWN"/>
-  <int value="1" label="EXTENSION"/>
-  <int value="2" label="THEME"/>
-  <int value="3" label="USER_SCRIPT"/>
-  <int value="4" label="HOSTED_APP"/>
-  <int value="5" label="LEGACY_PACKAGED_APP"/>
-  <int value="6" label="PLATFORM_APP"/>
-  <int value="7" label="SHARED_MODULE"/>
-  <int value="8" label="LOGIN_SCREEN_EXTENSION"/>
-  <int value="9" label="CHROMEOS_SYSTEM_EXTENSION"/>
-</enum>
-
-<enum name="ExtensionUninstallSource">
-  <int value="0" label="Testing"/>
-  <int value="1" label="Context menu"/>
-  <int value="2" label="Permissions increase"/>
-  <int value="3" label="Storage threshold exceeded"/>
-  <int value="4" label="App list"/>
-  <int value="5" label="App info dialog"/>
-  <int value="6" label="Chrome apps page"/>
-  <int value="7" label="Chrome extensions page"/>
-  <int value="8" label="Extension"/>
-  <int value="9" label="Chrome Webstore"/>
-  <int value="10" label="Hosted app menu"/>
-</enum>
-
-<enum name="ExtensionUnpackFailureReason">
-  <summary>
-    Reasons the sandboxed extension unpacker can fail. See enum FailureReason in
-    src/chrome/browser/extensions/sandboxed_extension_unpacker.h .
-  </summary>
-  <int value="0" label="COULD_NOT_GET_TEMP_DIRECTORY"/>
-  <int value="1" label="COULD_NOT_CREATE_TEMP_DIRECTORY"/>
-  <int value="2" label="FAILED_TO_COPY_EXTENSION_FILE_TO_TEMP_DIRECTORY"/>
-  <int value="3" label="COULD_NOT_GET_SANDBOX_FRIENDLY_PATH"/>
-  <int value="4" label="COULD_NOT_LOCALIZE_EXTENSION"/>
-  <int value="5" label="INVALID_MANIFEST"/>
-  <int value="6" label="UNPACKER_CLIENT_FAILED"/>
-  <int value="7" label="UTILITY_PROCESS_CRASHED_WHILE_TRYING_TO_INSTALL"/>
-  <int value="8" label="CRX_FILE_NOT_READABLE"/>
-  <int value="9" label="CRX_HEADER_INVALID"/>
-  <int value="10" label="CRX_MAGIC_NUMBER_INVALID"/>
-  <int value="11" label="CRX_VERSION_NUMBER_INVALID"/>
-  <int value="12" label="CRX_EXCESSIVELY_LARGE_KEY_OR_SIGNATURE"/>
-  <int value="13" label="CRX_ZERO_KEY_LENGTH"/>
-  <int value="14" label="CRX_ZERO_SIGNATURE_LENGTH"/>
-  <int value="15" label="CRX_PUBLIC_KEY_INVALID"/>
-  <int value="16" label="CRX_SIGNATURE_INVALID"/>
-  <int value="17" label="CRX_SIGNATURE_VERIFICATION_INITIALIZATION_FAILED"/>
-  <int value="18" label="CRX_SIGNATURE_VERIFICATION_FAILED"/>
-  <int value="19" label="ERROR_SERIALIZING_MANIFEST_JSON"/>
-  <int value="20" label="ERROR_SAVING_MANIFEST_JSON"/>
-  <int value="21" label="COULD_NOT_READ_IMAGE_DATA_FROM_DISK"/>
-  <int value="22" label="DECODED_IMAGES_DO_NOT_MATCH_THE_MANIFEST"/>
-  <int value="23" label="INVALID_PATH_FOR_BROWSER_IMAGE"/>
-  <int value="24" label="ERROR_REMOVING_OLD_IMAGE_FILE"/>
-  <int value="25" label="INVALID_PATH_FOR_BITMAP_IMAGE"/>
-  <int value="26" label="ERROR_RE_ENCODING_THEME_IMAGE"/>
-  <int value="27" label="ERROR_SAVING_THEME_IMAGE"/>
-  <int value="28" label="DEPRECATED_ABORTED_DUE_TO_SHUTDOWN"/>
-  <int value="29" label="COULD_NOT_READ_CATALOG_DATA_FROM_DISK"/>
-  <int value="30" label="INVALID_CATALOG_DATA"/>
-  <int value="31" label="INVALID_PATH_FOR_CATALOG"/>
-  <int value="32" label="ERROR_SERIALIZING_CATALOG"/>
-  <int value="33" label="ERROR_SAVING_CATALOG"/>
-  <int value="34" label="CRX_HASH_VERIFICATION_FAILED"/>
-  <int value="35" label="UNZIP_FAILED"/>
-  <int value="36" label="DIRECTORY_MOVE_FAILED"/>
-  <int value="37" label="CRX_FILE_IS_DELTA_UPDATE"/>
-  <int value="38" label="CRX_EXPECTED_HASH_INVALID"/>
-  <int value="39" label="DEPRECATED_ERROR_PARSING_DNR_RULESET"/>
-  <int value="40" label="ERROR_INDEXING_DNR_RULESET"/>
-  <int value="41" label="CRX_REQUIRED_PROOF_MISSING"/>
-  <int value="42" label="CRX_HEADER_VERIFIED_CONTENTS_UNCOMPRESSING_FAILURE"/>
-  <int value="43" label="MALFORMED_VERIFIED_CONTENTS"/>
-  <int value="44" label="COULD_NOT_CREATE_METADATA_DIRECTORY"/>
-  <int value="45" label="COULD_NOT_WRITE_VERIFIED_CONTENTS_INTO_FILE"/>
-</enum>
-
-<enum name="ExtensionUpdateCheckDataKey">
-  <int value="0" label="No update check keys (no action taken)"/>
-  <int value="1" label="Malware"/>
-  <int value="2" label="Potentially UWS"/>
-  <int value="3" label="Policy Violation"/>
-</enum>
-
 <enum name="ExternalDisplaySendResult">
   <int value="0" label="Success"/>
   <int value="1" label="ioctl() to I2C device failed"/>
 </enum>
 
-<enum name="ExternalItemState">
-  <int value="0" label="DEPRECATED_DISABLED"/>
-  <int value="1" label="DEPRECATED_ENABLED"/>
-  <int value="2" label="DISABLED (in webstore)"/>
-  <int value="3" label="ENABLED (in webstore)"/>
-  <int value="4" label="DISABLED (not in webstore)"/>
-  <int value="5" label="ENABLED (not in webstore)"/>
-  <int value="6" label="UNINSTALLED (in webstore)"/>
-  <int value="7" label="UNINSTALLED (not in webstore)"/>
-</enum>
-
 <enum name="FactoryPingEmbargoEndDateValidity">
   <summary>
     Defines the validity of the factory ping embargo end date in RW_VPD.
@@ -23752,13 +20598,6 @@
   <int value="9" label="kErrorDeserializingJSonLogs"/>
 </enum>
 
-<enum name="GoogleDocsExtensionAvailablity">
-  <int value="0" label="Available, Regular mode"/>
-  <int value="1" label="Not Available, Regular mode"/>
-  <int value="2" label="Available, Incognito mode"/>
-  <int value="3" label="Not Available, Incognito mode"/>
-</enum>
-
 <enum name="GooglePlayServicesConnectionResult">
   <summary>
     Results of attempting a connection to Google Play Services. See Javadoc for
@@ -24168,15 +21007,6 @@
   <int value="6" label="DEFAULT_NTP"/>
 </enum>
 
-<enum name="HostPermissionsAccess">
-  <int value="0" label="CANNOT_AFFECT"/>
-  <int value="1" label="NOT_REQUESTED"/>
-  <int value="2" label="ON_CLICK"/>
-  <int value="3" label="ON_SPECIFIC_SITES"/>
-  <int value="4" label="ON_ALL_REQUESTED_SITES"/>
-  <int value="5" label="ON_ACTIVE_TAB_ONLY"/>
-</enum>
-
 <enum name="HpsTurnOnResult">
   <int value="0" label="Success"/>
   <int value="1" label="Version Mismatch, will cause an update"/>
@@ -25233,12 +22063,6 @@
       label="Download message not shown due to null message dispatcher"/>
 </enum>
 
-<enum name="InDeveloperMode">
-  <summary>A boolean for whether the user is in the developer mode.</summary>
-  <int value="0" label="User is not in the developer mode"/>
-  <int value="1" label="User is in the developer mode"/>
-</enum>
-
 <enum name="InferredLabelSource">
   <int value="0" label="No label"/>
   <int value="1" label="&lt;label&gt; sibling/ancestor"/>
@@ -26029,15 +22853,6 @@
   </int>
 </enum>
 
-<enum name="IsForceInstalledExtensionFailedWithCrxHeaderInvalidFromCWSBoolean">
-  <summary>
-    A boolean for whether a force installed extension which failed with error
-    CRX_HEADER_INVALID is from Chrome Web Store or not.
-  </summary>
-  <int value="0" label="Offstore"/>
-  <int value="1" label="Chrome Web Store"/>
-</enum>
-
 <enum name="IsolatedPrerenderISPFilteringStatus">
   <int value="0" label="No probing"/>
   <int value="1" label="DNS probing success"/>
@@ -28229,15 +25044,6 @@
   <int value="2" label="Child account status load"/>
 </enum>
 
-<enum name="LoadRulesetResult">
-  <int value="0" label="Load succeeded"/>
-  <int value="1" label="Load failed - Invalid path"/>
-  <int value="2" label="Load failed - File read error"/>
-  <int value="3" label="Load failed - Checksum mismatch"/>
-  <int value="4" label="Load failed - Version mismatch"/>
-  <int value="5" label="Load failed - Checksum not found in prefs"/>
-</enum>
-
 <enum name="LoadSodaResult">
   <int value="0" label="Unknown"/>
   <int value="1" label="Success"/>
@@ -30524,6 +27330,7 @@
   <int value="-1259901957" label="VrBrowserKeyboard:disabled"/>
   <int value="-1259809702" label="Enable16Desks:enabled"/>
   <int value="-1259627326" label="AllowRepeatedUpdates:disabled"/>
+  <int value="-1258793847" label="MagicStackAndroid:disabled"/>
   <int value="-1258141852" label="ScrollUnification:enabled"/>
   <int value="-1257822114" label="ContextMenuPopupForAllScreenSizes:disabled"/>
   <int value="-1256823053" label="WebRtcHWVP9Encoding:enabled"/>
@@ -34620,6 +31427,7 @@
   <int value="685571935"
       label="FencedFramesCrossOriginAutomaticBeacons:disabled"/>
   <int value="685916283" label="enable-zip-archiver-on-file-manager"/>
+  <int value="686830244" label="AutofillEnableIbanAndroidBottomSheet:disabled"/>
   <int value="686929809" label="BorealisWebUIInstaller:enabled"/>
   <int value="687838135" label="ThirdPartyDoodles:disabled"/>
   <int value="687967510" label="LacrosNonSyncingProfiles:disabled"/>
@@ -35154,6 +31962,7 @@
   <int value="940705998" label="CrOSLateBootArcSwitchToKeyMintDaemon:disabled"/>
   <int value="940751405" label="IppFirstSetupForUsbPrinters:enabled"/>
   <int value="941036016" label="ContentSuggestionsSettings:disabled"/>
+  <int value="941703796" label="MagicStackAndroid:enabled"/>
   <int value="941883332" label="ProactiveTabFreezeAndDiscard:disabled"/>
   <int value="941948340" label="PlaybackSpeedButton:enabled"/>
   <int value="942357311" label="UpcomingSharingFeatures:disabled"/>
@@ -37112,6 +33921,7 @@
   <int value="1855184563"
       label="EarlyDocumentSwapForBackForwardTransitions:disabled"/>
   <int value="1855524566" label="allow-insecure-websocket-from-https-origin"/>
+  <int value="1855558635" label="AutofillEnableIbanAndroidBottomSheet:enabled"/>
   <int value="1855804266" label="ShoppingIconColorVariant:enabled"/>
   <int value="1856270952" label="AutofillAssistantProactiveHelp:disabled"/>
   <int value="1857000695" label="SendWebUIJavaScriptErrorReports:disabled"/>
@@ -38064,30 +34874,6 @@
   <int value="1" label="Settings link clicked"/>
 </enum>
 
-<enum name="ManifestInvalidAppStatusError">
-  <int value="0" label="Unknown"/>
-  <int value="1" label="Error unknown application"/>
-  <int value="2" label="Error invalid app id"/>
-  <int value="3" label="Error restricted"/>
-</enum>
-
-<enum name="ManifestInvalidError">
-  <int value="0" label="XML Parsing failed"/>
-  <int value="1" label="Invalid xlmns on gupdate tag"/>
-  <int value="2" label="Missing gupdate tag"/>
-  <int value="3" label="Invalid protocol on gupdate tag"/>
-  <int value="4" label="Missing app id"/>
-  <int value="5" label="Missing update check tags"/>
-  <int value="6" label="Multiple update check tags"/>
-  <int value="7" label="Invalid Prodversion min"/>
-  <int value="8" label="Empty codebase url"/>
-  <int value="9" label="Invalid codebase url"/>
-  <int value="10" label="Missing version for update check"/>
-  <int value="11" label="Invalid version"/>
-  <int value="12" label="Bad Update specification"/>
-  <int value="13" label="Bad App Status"/>
-</enum>
-
 <enum name="ManifestParseIdResultType">
   <int value="0" label="Success"/>
   <int value="1" label="Not specified, used default value"/>
@@ -46248,15 +43034,6 @@
   <int value="4" label="Letter spacing change"/>
 </enum>
 
-<enum name="ReadDynamicRulesJSONStatus">
-  <int value="0" label="kSuccess"/>
-  <int value="1" label="kFileDoesNotExist"/>
-  <int value="2" label="kFileReadError"/>
-  <int value="3" label="kJSONParseError"/>
-  <int value="4" label="kJSONIsNotList"/>
-  <int value="5" label="kRuleCountLimitExceeded"/>
-</enum>
-
 <enum name="ReaderModeEntryPoint">
   <int value="0" label="Omnibox icon"/>
   <int value="1" label="Menu option"/>
@@ -46350,11 +43127,6 @@
   <int value="4" label="Policy Opt Out"/>
 </enum>
 
-<enum name="RegexRuleStatus">
-  <int value="0" label="Normal regex (indexed)"/>
-  <int value="1" label="Large Regex (ignored)"/>
-</enum>
-
 <enum name="RelatedActiveContentsSyncAccessInfo">
   <int value="0" label="kNoSyncAccess"/>
   <int value="1"
@@ -46601,14 +43373,6 @@
   </int>
 </enum>
 
-<enum name="RequestAction">
-  <int value="0" label="CANCEL"/>
-  <int value="1" label="REDIRECT"/>
-  <int value="2" label="MODIFY_REQUEST_HEADERS"/>
-  <int value="3" label="MODIFY_RESPONSE_HEADERS"/>
-  <int value="4" label="SET_AUTH_CREDENTIALS"/>
-</enum>
-
 <enum name="RequestDestination">
   <int value="0" label="EMPTY"/>
   <int value="1" label="AUDIO"/>
@@ -46718,16 +43482,6 @@
   <int value="3" label="Invalid File"/>
 </enum>
 
-<enum name="SafetyCheckExtensionsStatus">
-  <int value="0" label="CHECKING"/>
-  <int value="1" label="DEPRECATED_ERROR"/>
-  <int value="2" label="NONE_BLOCKLISTED"/>
-  <int value="3" label="BLOCKLISTED_ALL_DISABLED"/>
-  <int value="4" label="BLOCKLISTED_REENABLED_ALL_BY_USER"/>
-  <int value="5" label="BLOCKLISTED_REENABLED_SOME_BY_USER"/>
-  <int value="6" label="BLOCKLISTED_REENABLED_ALL_BY_ADMIN"/>
-</enum>
-
 <enum name="SafetyCheckNotificationsModuleInteractions">
   <int value="0" label="Block"/>
   <int value="1" label="Block all"/>
@@ -47846,14 +44600,6 @@
   <int value="3" label="Timeout"/>
 </enum>
 
-<enum name="ServiceWorkerExternalRequestResult">
-  <int value="0" label="Ok"/>
-  <int value="1" label="Bad request ID"/>
-  <int value="2" label="Worker not running"/>
-  <int value="3" label="Worker not found"/>
-  <int value="4" label="Null context"/>
-</enum>
-
 <enum name="ServiceWorkerFetchEventResult">
   <int value="0" label="Should Fallback"/>
   <int value="1" label="Got Response"/>
@@ -48101,19 +44847,6 @@
   </int>
 </enum>
 
-<enum name="SessionType">
-  <int value="0" label="Existing Regular"/>
-  <int value="1" label="Guest"/>
-  <int value="2" label="New Regular"/>
-  <int value="3" label="Public Account"/>
-  <int value="4" label="(Obsolete) Locally Managed"/>
-  <int value="5" label="Kiosk App"/>
-  <int value="6" label="Regular Supervised"/>
-  <int value="7" label="ARC Kiosk"/>
-  <int value="8" label="Active Directory"/>
-  <int value="9" label="Web App Kiosk"/>
-</enum>
-
 <enum name="SettingId">
   <int value="1" label="Wifi"/>
   <int value="2" label="Cellular"/>
@@ -48143,13 +44876,6 @@
   <int value="7" label="Open 'Learn more' link about language packs"/>
 </enum>
 
-<enum name="SettingsOverriddenDialogResult">
-  <int value="0" label="Change settings back"/>
-  <int value="1" label="Keep new settings"/>
-  <int value="2" label="Dialog dismissed"/>
-  <int value="3" label="Dialog closed without user action"/>
-</enum>
-
 <enum name="SettingsPrivacyElementInteractions">
   <int value="0" label="Sync control button"/>
   <int value="1" label="Allow Chrome sign in toggle"/>
@@ -50743,28 +47469,6 @@
   <int value="3" label="No Update"/>
 </enum>
 
-<enum name="UpdateDynamicRulesStatus">
-  <int value="0" label="kSuccess"/>
-  <int value="1" label="kErrorReadJSONRules"/>
-  <int value="2" label="kErrorRuleCountExceeded"/>
-  <int value="3" label="kErrorCreateTemporarySource_Deprecated"/>
-  <int value="4" label="kErrorWriteTemporaryJSONRuleset_Deprecated"/>
-  <int value="5" label="kErrorWriteTemporaryIndexedRuleset_Deprecated"/>
-  <int value="6" label="kErrorInvalidRules"/>
-  <int value="7" label="kErrorCreateDynamicRulesDirectory"/>
-  <int value="8" label="kErrorReplaceIndexedFile_Deprecated"/>
-  <int value="9" label="kErrorReplaceJSONFile_Deprecated"/>
-  <int value="10" label="kErrorCreateMatcher_InvalidPath"/>
-  <int value="11" label="kErrorCreateMatcher_FileReadError"/>
-  <int value="12" label="kErrorCreateMatcher_ChecksumMismatch"/>
-  <int value="13" label="kErrorCreateMatcher_VersionMismatch"/>
-  <int value="14" label="kErrorRegexTooLarge"/>
-  <int value="15" label="kErrorRegexRuleCountExceeded"/>
-  <int value="16" label="kErrorSerializeToJson"/>
-  <int value="17" label="kErrorWriteJson"/>
-  <int value="18" label="kErrorWriteFlatbuffer"/>
-</enum>
-
 <enum name="UpdateEngineAttemptResult">
   <int value="0" label="Update Succeeded"/>
   <int value="1" label="Internal Error"/>
@@ -51903,130 +48607,6 @@
   <int value="3" label="Idle, high priority"/>
 </enum>
 
-<enum name="WebRequest.RequestHeader">
-  <int value="0" label="kNone"/>
-  <int value="1" label="kOther"/>
-  <int value="2" label="kAccept"/>
-  <int value="3" label="kAcceptCharset"/>
-  <int value="4" label="kAcceptEncoding"/>
-  <int value="5" label="kAcceptLanguage"/>
-  <int value="6" label="kAccessControlRequestHeaders"/>
-  <int value="7" label="kAccessControlRequestMethod"/>
-  <int value="8" label="kAuthorization"/>
-  <int value="9" label="kCacheControl"/>
-  <int value="10" label="kConnection"/>
-  <int value="11" label="kContentEncoding"/>
-  <int value="12" label="kContentLanguage"/>
-  <int value="13" label="kContentLength"/>
-  <int value="14" label="kContentLocation"/>
-  <int value="15" label="kContentType"/>
-  <int value="16" label="kCookie"/>
-  <int value="17" label="kDate"/>
-  <int value="18" label="kDnt"/>
-  <int value="19" label="kEarlyData"/>
-  <int value="20" label="kExpect"/>
-  <int value="21" label="kForwarded"/>
-  <int value="22" label="kFrom"/>
-  <int value="23" label="kHost"/>
-  <int value="24" label="kIfMatch"/>
-  <int value="25" label="kIfModifiedSince"/>
-  <int value="26" label="kIfNoneMatch"/>
-  <int value="27" label="kIfRange"/>
-  <int value="28" label="kIfUnmodifiedSince"/>
-  <int value="29" label="kKeepAlive"/>
-  <int value="30" label="kOrigin"/>
-  <int value="31" label="kPragma"/>
-  <int value="32" label="kProxyAuthorization"/>
-  <int value="33" label="kProxyConnection"/>
-  <int value="34" label="kRange"/>
-  <int value="35" label="kReferer"/>
-  <int value="37" label="kTe"/>
-  <int value="38" label="kTransferEncoding"/>
-  <int value="39" label="kUpgrade"/>
-  <int value="40" label="kUpgradeInsecureRequests"/>
-  <int value="41" label="kUserAgent"/>
-  <int value="42" label="kVia"/>
-  <int value="43" label="kWarning"/>
-  <int value="44" label="kXForwardedFor"/>
-  <int value="45" label="kXForwardedHost"/>
-  <int value="46" label="kXForwardedProto"/>
-</enum>
-
-<enum name="WebRequest.ResponseHeader">
-  <int value="0" label="kNone"/>
-  <int value="1" label="kOther"/>
-  <int value="2" label="kAcceptPatch"/>
-  <int value="3" label="kAcceptRanges"/>
-  <int value="4" label="kAccessControlAllowCredentials"/>
-  <int value="5" label="kAccessControlAllowHeaders"/>
-  <int value="6" label="kAccessControlAllowMethods"/>
-  <int value="7" label="kAccessControlAllowOrigin"/>
-  <int value="8" label="kAccessControlExposeHeaders"/>
-  <int value="9" label="kAccessControlMaxAge"/>
-  <int value="10" label="kAge"/>
-  <int value="11" label="kAllow"/>
-  <int value="12" label="kAltSvc"/>
-  <int value="13" label="kCacheControl"/>
-  <int value="14" label="kClearSiteData"/>
-  <int value="15" label="kConnection"/>
-  <int value="16" label="kContentDisposition"/>
-  <int value="17" label="kContentEncoding"/>
-  <int value="18" label="kContentLanguage"/>
-  <int value="19" label="kContentLength"/>
-  <int value="20" label="kContentLocation"/>
-  <int value="21" label="kContentRange"/>
-  <int value="22" label="kContentSecurityPolicy"/>
-  <int value="23" label="kContentSecurityPolicyReportOnly"/>
-  <int value="24" label="kContentType"/>
-  <int value="25" label="kDate"/>
-  <int value="26" label="kETag"/>
-  <int value="27" label="kExpectCT"/>
-  <int value="28" label="kExpires"/>
-  <int value="29" label="kFeaturePolicy"/>
-  <int value="30" label="kKeepAlive"/>
-  <int value="31" label="kLargeAllocation"/>
-  <int value="32" label="kLastModified"/>
-  <int value="33" label="kLocation"/>
-  <int value="34" label="kPragma"/>
-  <int value="35" label="kProxyAuthenticate"/>
-  <int value="36" label="kProxyConnection"/>
-  <int value="37" label="kPublicKeyPins"/>
-  <int value="38" label="kPublicKeyPinsReportOnly"/>
-  <int value="39" label="kReferrerPolicy"/>
-  <int value="40" label="kRefresh"/>
-  <int value="41" label="kRetryAfter"/>
-  <int value="42" label="kSecWebSocketAccept"/>
-  <int value="43" label="kServer"/>
-  <int value="44" label="kServerTiming"/>
-  <int value="45" label="kSetCookie"/>
-  <int value="46" label="kSourceMap"/>
-  <int value="47" label="kStrictTransportSecurity"/>
-  <int value="48" label="kTimingAllowOrigin"/>
-  <int value="49" label="kTk"/>
-  <int value="50" label="kTrailer"/>
-  <int value="51" label="kTransferEncoding"/>
-  <int value="52" label="kUpgrade"/>
-  <int value="53" label="kVary"/>
-  <int value="54" label="kVia"/>
-  <int value="55" label="kWarning"/>
-  <int value="56" label="kWWWAuthenticate"/>
-  <int value="57" label="kXContentTypeOptions"/>
-  <int value="58" label="kXDNSPrefetchControl"/>
-  <int value="59" label="kXFrameOptions"/>
-  <int value="60" label="kXXSSProtection"/>
-</enum>
-
-<enum name="WebRequestEventListenerFlag">
-  <int value="0" label="Total"/>
-  <int value="1" label="None"/>
-  <int value="2" label="requestHeaders"/>
-  <int value="3" label="responseHeaders"/>
-  <int value="4" label="blocking"/>
-  <int value="5" label="asyncBlocking"/>
-  <int value="6" label="requestBody"/>
-  <int value="7" label="extraHeaders"/>
-</enum>
-
 <enum name="WebSandboxFlags">
   <int value="1" label="Navigation"/>
   <int value="2" label="Plugins"/>
@@ -52176,12 +48756,6 @@
   <int value="3" label="Blob"/>
 </enum>
 
-<enum name="WebStoreInstallAllowlistParameter">
-  <int value="0" label="Undefined"/>
-  <int value="1" label="Allowlisted"/>
-  <int value="2" label="Not allowlisted"/>
-</enum>
-
 <enum name="WebUIOSSettingsPathHashes">
   <int value="-2019732586" label="/printing"/>
   <int value="-1950073287" label="/crostini/details"/>
diff --git a/tools/metrics/histograms/histograms_index.txt b/tools/metrics/histograms/histograms_index.txt
index c81ea7b..14a040dea 100644
--- a/tools/metrics/histograms/histograms_index.txt
+++ b/tools/metrics/histograms/histograms_index.txt
@@ -68,6 +68,7 @@
 tools/metrics/histograms/metadata/enterprise/histograms.xml
 tools/metrics/histograms/metadata/event/enums.xml
 tools/metrics/histograms/metadata/event/histograms.xml
+tools/metrics/histograms/metadata/extensions/enums.xml
 tools/metrics/histograms/metadata/extensions/histograms.xml
 tools/metrics/histograms/metadata/families/enums.xml
 tools/metrics/histograms/metadata/families/histograms.xml
diff --git a/tools/metrics/histograms/metadata/autofill/histograms.xml b/tools/metrics/histograms/metadata/autofill/histograms.xml
index 6f9e1f62..e8de4075 100644
--- a/tools/metrics/histograms/metadata/autofill/histograms.xml
+++ b/tools/metrics/histograms/metadata/autofill/histograms.xml
@@ -1540,6 +1540,20 @@
   <token key="CardType" variants="Autofill.PaymentsRpcCardType"/>
 </histogram>
 
+<histogram name="Autofill.CvcInfoBar{AutofillSaveCreditCardPromptDestination}"
+    enum="AutofillCreditCardInfoBar" expires_after="2024-07-01">
+  <owner>yishuil@google.com</owner>
+  <owner>vishwasuppoor@google.com</owner>
+  <owner>payments-autofill-team@google.com</owner>
+  <summary>
+    The relative frequency with which users accept, deny, or ignore the Autofill
+    info bar prompt for saving card CVC
+    {AutofillSaveCreditCardPromptDestination}.
+  </summary>
+  <token key="AutofillSaveCreditCardPromptDestination"
+      variants="AutofillSaveCreditCardPromptDestination"/>
+</histogram>
+
 <histogram name="Autofill.CvcStorage.CvcFilling.{CardType}"
     enum="CvcFillingFlowType" expires_after="2024-07-01">
   <owner>jialihuang@google.com</owner>
diff --git a/tools/metrics/histograms/metadata/blink/histograms.xml b/tools/metrics/histograms/metadata/blink/histograms.xml
index e20371e..ac2f9983 100644
--- a/tools/metrics/histograms/metadata/blink/histograms.xml
+++ b/tools/metrics/histograms/metadata/blink/histograms.xml
@@ -2244,7 +2244,7 @@
 </histogram>
 
 <histogram name="Blink.HTMLParsing.ChunkCount4" units="chunks"
-    expires_after="2024-05-26">
+    expires_after="2025-01-31">
   <owner>masonf@chromium.org</owner>
   <owner>dom-dev@chromium.org</owner>
   <summary>
@@ -2258,7 +2258,7 @@
 </histogram>
 
 <histogram name="Blink.HTMLParsing.InputCharacterCount4" units="characters"
-    expires_after="2024-05-26">
+    expires_after="2025-01-31">
   <owner>masonf@chromium.org</owner>
   <owner>dom-dev@chromium.org</owner>
   <summary>
@@ -2273,7 +2273,7 @@
 </histogram>
 
 <histogram name="Blink.HTMLParsing.ParsingTimeMax4" units="microseconds"
-    expires_after="2024-05-12">
+    expires_after="2025-01-31">
   <owner>masonf@chromium.org</owner>
   <owner>dom-dev@chromium.org</owner>
   <summary>
@@ -2288,7 +2288,7 @@
 </histogram>
 
 <histogram name="Blink.HTMLParsing.ParsingTimeMin4" units="microseconds"
-    expires_after="2024-05-19">
+    expires_after="2025-01-31">
   <owner>masonf@chromium.org</owner>
   <owner>dom-dev@chromium.org</owner>
   <summary>
@@ -2303,7 +2303,7 @@
 </histogram>
 
 <histogram name="Blink.HTMLParsing.ParsingTimeTotal4" units="microseconds"
-    expires_after="2024-05-12">
+    expires_after="2025-01-31">
   <owner>masonf@chromium.org</owner>
   <owner>dom-dev@chromium.org</owner>
   <summary>
@@ -2333,7 +2333,7 @@
 </histogram>
 
 <histogram name="Blink.HTMLParsing.TokensParsedAverage4" units="tokens"
-    expires_after="2024-05-19">
+    expires_after="2025-01-31">
   <owner>masonf@chromium.org</owner>
   <owner>dom-dev@chromium.org</owner>
   <summary>
@@ -2346,7 +2346,7 @@
 </histogram>
 
 <histogram name="Blink.HTMLParsing.TokensParsedMax4" units="tokens"
-    expires_after="2024-01-21">
+    expires_after="2025-01-31">
   <owner>masonf@chromium.org</owner>
   <owner>dom-dev@chromium.org</owner>
   <summary>
@@ -2359,7 +2359,7 @@
 </histogram>
 
 <histogram name="Blink.HTMLParsing.TokensParsedMin4" units="tokens"
-    expires_after="2024-01-21">
+    expires_after="2025-01-31">
   <owner>masonf@chromium.org</owner>
   <owner>dom-dev@chromium.org</owner>
   <summary>
@@ -2372,7 +2372,7 @@
 </histogram>
 
 <histogram name="Blink.HTMLParsing.TokensParsedTotal4" units="tokens"
-    expires_after="2024-05-19">
+    expires_after="2025-01-31">
   <owner>masonf@chromium.org</owner>
   <owner>dom-dev@chromium.org</owner>
   <summary>
@@ -2385,7 +2385,7 @@
 </histogram>
 
 <histogram name="Blink.HTMLParsing.YieldedTimeAverage4" units="microseconds"
-    expires_after="2024-04-28">
+    expires_after="2025-01-31">
   <owner>masonf@chromium.org</owner>
   <owner>dom-dev@chromium.org</owner>
   <summary>
@@ -2399,7 +2399,7 @@
 </histogram>
 
 <histogram name="Blink.HTMLParsing.YieldedTimeMax4" units="microseconds"
-    expires_after="2024-01-14">
+    expires_after="2025-01-31">
   <owner>masonf@chromium.org</owner>
   <owner>dom-dev@chromium.org</owner>
   <summary>
@@ -2413,7 +2413,7 @@
 </histogram>
 
 <histogram name="Blink.HTMLParsing.YieldedTimeMin4" units="microseconds"
-    expires_after="2024-01-21">
+    expires_after="2025-01-31">
   <owner>masonf@chromium.org</owner>
   <owner>dom-dev@chromium.org</owner>
   <summary>
diff --git a/tools/metrics/histograms/metadata/content/histograms.xml b/tools/metrics/histograms/metadata/content/histograms.xml
index c1635ca5..1dae392 100644
--- a/tools/metrics/histograms/metadata/content/histograms.xml
+++ b/tools/metrics/histograms/metadata/content/histograms.xml
@@ -67,7 +67,7 @@
 </histogram>
 
 <histogram name="Content.Classification.OpenGraph"
-    enum="ContentClassificationOpenGraph" expires_after="2024-01-31">
+    enum="ContentClassificationOpenGraph" expires_after="2024-04-28">
   <owner>sophey@chromium.org</owner>
   <owner>chrome-sherlock@google.com</owner>
   <summary>
diff --git a/tools/metrics/histograms/metadata/enterprise/histograms.xml b/tools/metrics/histograms/metadata/enterprise/histograms.xml
index 1c0838a..a55198c 100644
--- a/tools/metrics/histograms/metadata/enterprise/histograms.xml
+++ b/tools/metrics/histograms/metadata/enterprise/histograms.xml
@@ -1943,7 +1943,7 @@
 </histogram>
 
 <histogram name="Enterprise.EnrollmentNudge.PolicyFetchResult"
-    enum="EnrollmentNudgePolicyFetchResult" expires_after="2024-04-28">
+    enum="EnrollmentNudgePolicyFetchResult" expires_after="2024-12-31">
   <owner>andreydav@google.com</owner>
   <owner>rodmartin@google.com</owner>
   <owner>chromeos-commercial-identity@google.com</owner>
@@ -1954,7 +1954,7 @@
 </histogram>
 
 <histogram name="Enterprise.EnrollmentNudge.UserAction"
-    enum="EnrollmentNudgeUserAction" expires_after="2024-02-01">
+    enum="EnrollmentNudgeUserAction" expires_after="2024-12-31">
   <owner>andreydav@google.com</owner>
   <owner>rodmartin@google.com</owner>
   <owner>chromeos-commercial-identity@google.com</owner>
diff --git a/tools/metrics/histograms/metadata/extensions/enums.xml b/tools/metrics/histograms/metadata/extensions/enums.xml
new file mode 100644
index 0000000..564a438
--- /dev/null
+++ b/tools/metrics/histograms/metadata/extensions/enums.xml
@@ -0,0 +1,3451 @@
+<!--
+Copyright 2023 The Chromium Authors
+Use of this source code is governed by a BSD-style license that can be
+found in the LICENSE file.
+-->
+
+<!--
+
+This file describes the enumerations referenced by entries in histograms.xml for
+this directory. Some enums may instead be listed in the central enums.xml file
+at src/tools/metrics/histograms/enums.xml when multiple files use them.
+
+For best practices on writing enumerations descriptions, see
+https://chromium.googlesource.com/chromium/src.git/+/HEAD/tools/metrics/histograms/README.md#Enum-Histograms
+
+Please follow the instructions in the OWNERS file in this directory to find a
+reviewer. If no OWNERS file exists, please consider signing up at
+go/reviewing-metrics (Googlers only), as all subdirectories are expected to
+have an OWNERS file. As a last resort you can send the CL to
+chromium-metrics-reviews@google.com.
+-->
+
+<histogram-configuration>
+
+<!-- Enum types -->
+
+<enums>
+
+<enum name="BackgroundHostCreatedForExtensionValues">
+  <int value="0" label="Other extension"/>
+  <int value="1"
+      label="Google Docs Offline (ghbmnnjooekpmoecnnnilnnbdlolhkhi)"/>
+  <int value="2"
+      label="In-App Payment Support (nmmhkkegccagdldgiimedpiccmgmieda)"/>
+  <int value="3"
+      label="Assessment Assistant (gndmhdcefbhlchkhipcnnbkcmicncehk)"/>
+</enum>
+
+<enum name="BadSyncDataReason">
+  <int value="0" label="Bad extension ID"/>
+  <int value="1" label="Bad version"/>
+  <int value="2" label="Bad update URL"/>
+  <int value="3" label="No ExtensionSpecifics"/>
+  <int value="4" label="Bad disable reasons"/>
+</enum>
+
+<enum name="BooleanHasWithheldHosts">
+  <int value="0" label="Does not have withheld hosts"/>
+  <int value="1" label="Has withheld hosts"/>
+</enum>
+
+<enum name="CorruptExtensionDisabledReason">
+  <summary>
+    The reason why content verification flagged an extension as corrupted. See
+    ContentVerifyJob::FailureReason in
+    src/extensions/browser/content_verify_job.h.
+  </summary>
+  <int value="0" label="Unknown Reason"/>
+  <int value="1" label="Missing All Hashes"/>
+  <int value="2" label="Missing File Hash"/>
+  <int value="3" label="Hash Mismatch"/>
+</enum>
+
+<enum name="DeclarativeAPIFunctionType">
+  <int value="0" label="kDeclarativeContentAddRules"/>
+  <int value="1" label="kDeclarativeContentRemoveRules"/>
+  <int value="2" label="kDeclarativeContentGetRules"/>
+  <int value="3" label="kDeclarativeWebRequestAddRules"/>
+  <int value="4" label="kDeclarativeWebRequestRemoveRules"/>
+  <int value="5" label="kDeclarativeWebRequestGetRules"/>
+  <int value="6" label="kDeclarativeWebRequestWebviewAddRules"/>
+  <int value="7" label="kDeclarativeWebRequestWebviewRemoveRules"/>
+  <int value="8" label="kDeclarativeWebRequestWebviewGetRules"/>
+</enum>
+
+<enum name="DeclarativeContentActionType">
+  <int value="0" label="kShowAction"/>
+  <int value="1" label="kSetIcon"/>
+  <int value="2" label="kRequestContentScript"/>
+</enum>
+
+<enum name="ExtensionActionInvocationSource">
+  <int value="0" label="Keyboard Shortcut"/>
+  <int value="1" label="Toolbar Button"/>
+  <int value="2" label="Extensions Menu Entry"/>
+  <int value="3" label="Legacy Overflow Menu Entry"/>
+  <int value="4" label="Programmatic API Call"/>
+</enum>
+
+<enum name="ExtensionAllowlistOmahaAttributeValue">
+  <int value="0" label="Undefined"/>
+  <int value="1" label="Allowlisted"/>
+  <int value="2" label="Not allowlisted"/>
+</enum>
+
+<enum name="ExtensionBackgroundPageType">
+  <int value="0" label="None"/>
+  <int value="1" label="Persistent"/>
+  <int value="2" label="Event Page"/>
+  <int value="3" label="Service worker"/>
+</enum>
+
+<enum name="ExtensionContextMenuAction">
+  <int value="0" label="kNoAction"/>
+  <int value="1" label="kCustomCommand"/>
+  <int value="2" label="kHomePage"/>
+  <int value="3" label="kOptions"/>
+  <int value="4" label="kToggleVisibility"/>
+  <int value="5" label="kUninstall"/>
+  <int value="6" label="kManageExtensions"/>
+  <int value="7" label="kInspectPopup"/>
+  <int value="8" label="kPageAccessRunOnClick"/>
+  <int value="9" label="kPageAccessRunOnSite"/>
+  <int value="10" label="kPageAccessRunOnAllSites"/>
+  <int value="11" label="kPageAccessLearnMore"/>
+  <int value="12" label="kPageAccessPermissionsPage"/>
+  <int value="13" label="kViewWebPermissions"/>
+  <int value="14" label="kPolicyInstalled"/>
+  <int value="15" label="kToggleSidePanelVisibility"/>
+</enum>
+
+<enum name="ExtensionDisableReason">
+  <int value="0" label="UNKNOWN"/>
+  <int value="1" label="USER_ACTION"/>
+  <int value="2" label="PERMISSIONS_INCREASE"/>
+  <int value="4" label="RELOAD"/>
+  <int value="8" label="UNSUPPORTED_REQUIREMENT"/>
+  <int value="16" label="SIDELOAD_WIPEOUT"/>
+  <int value="32" label="UNKNOWN_FROM_SYNC"/>
+  <int value="64" label="DEPRECATED_PERMISSIONS_CONSENT"/>
+  <int value="128" label="DEPRECATED_KNOWN_DISABLED"/>
+  <int value="256" label="NOT_VERIFIED"/>
+  <int value="512" label="GREYLIST"/>
+  <int value="1024" label="CORRUPTED"/>
+  <int value="2048" label="REMOTE_INSTALL"/>
+  <int value="4096" label="INACTIVE_EPHEMERAL_APP_DEPRECATED"/>
+  <int value="8192" label="EXTERNAL_EXTENSION"/>
+  <int value="16384" label="UPDATE_REQUIRED_BY_POLICY"/>
+  <int value="32768" label="CUSTODIAN_APPROVAL_REQUIRED"/>
+  <int value="65536" label="BLOCKED_BY_POLICY"/>
+  <int value="131072" label="DEPRECATED_BLOCKED_MATURE"/>
+  <int value="262144" label="DEPRECATED_DISABLE_REMOTELY_FOR_MALWARE"/>
+  <int value="524288" label="DISABLE_REINSTALL"/>
+  <int value="1048576" label="DISABLE_NOT_ALLOWLISTED"/>
+  <int value="2097152" label="DISABLE_NOT_ASH_KEEPLISTED"/>
+  <int value="4194304" label="DISABLE_PUBLISHED_IN_STORE_REQUIRED_BY_POLICY"/>
+</enum>
+
+<enum name="ExtensionEvents">
+<!-- Generated from extensions/browser/extension_event_histogram_value.h.
+Called by update_extension_histograms.py.-->
+
+  <int value="0" label="UNKNOWN"/>
+  <int value="1" label="FOR_TEST"/>
+  <int value="2" label="ACCESSIBILITY_PRIVATE_ON_INTRODUCE_CHROME_VOX"/>
+  <int value="3" label="ACTIVITY_LOG_PRIVATE_ON_EXTENSION_ACTIVITY"/>
+  <int value="4" label="ALARMS_ON_ALARM"/>
+  <int value="5" label="APP_CURRENT_WINDOW_INTERNAL_ON_ALPHA_ENABLED_CHANGED"/>
+  <int value="6" label="APP_CURRENT_WINDOW_INTERNAL_ON_BOUNDS_CHANGED"/>
+  <int value="7" label="APP_CURRENT_WINDOW_INTERNAL_ON_CLOSED"/>
+  <int value="8" label="APP_CURRENT_WINDOW_INTERNAL_ON_FULLSCREENED"/>
+  <int value="9" label="APP_CURRENT_WINDOW_INTERNAL_ON_MAXIMIZED"/>
+  <int value="10" label="APP_CURRENT_WINDOW_INTERNAL_ON_MINIMIZED"/>
+  <int value="11" label="APP_CURRENT_WINDOW_INTERNAL_ON_RESTORED"/>
+  <int value="12"
+      label="APP_CURRENT_WINDOW_INTERNAL_ON_WINDOW_SHOWN_FOR_TESTS"/>
+  <int value="13" label="APP_RUNTIME_ON_EMBED_REQUESTED"/>
+  <int value="14" label="APP_RUNTIME_ON_LAUNCHED"/>
+  <int value="15" label="APP_RUNTIME_ON_RESTARTED"/>
+  <int value="16" label="APP_WINDOW_ON_BOUNDS_CHANGED"/>
+  <int value="17" label="APP_WINDOW_ON_CLOSED"/>
+  <int value="18" label="APP_WINDOW_ON_FULLSCREENED"/>
+  <int value="19" label="APP_WINDOW_ON_MAXIMIZED"/>
+  <int value="20" label="APP_WINDOW_ON_MINIMIZED"/>
+  <int value="21" label="APP_WINDOW_ON_RESTORED"/>
+  <int value="22" label="DELETED_AUDIO_MODEM_ON_RECEIVED"/>
+  <int value="23" label="DELETED_AUDIO_MODEM_ON_TRANSMIT_FAIL"/>
+  <int value="24" label="DELETED_AUDIO_ON_DEVICE_CHANGED"/>
+  <int value="25" label="AUDIO_ON_DEVICES_CHANGED"/>
+  <int value="26" label="AUDIO_ON_LEVEL_CHANGED"/>
+  <int value="27" label="AUDIO_ON_MUTE_CHANGED"/>
+  <int value="28" label="AUTOFILL_PRIVATE_ON_ADDRESS_LIST_CHANGED_DEPRECATED"/>
+  <int value="29"
+      label="AUTOFILL_PRIVATE_ON_CREDIT_CARD_LIST_CHANGED_DEPRECATED"/>
+  <int value="30" label="AUTOMATION_INTERNAL_ON_ACCESSIBILITY_EVENT"/>
+  <int value="31" label="AUTOMATION_INTERNAL_ON_ACCESSIBILITY_TREE_DESTROYED"/>
+  <int value="32" label="BLUETOOTH_LOW_ENERGY_ON_CHARACTERISTIC_VALUE_CHANGED"/>
+  <int value="33" label="BLUETOOTH_LOW_ENERGY_ON_DESCRIPTOR_VALUE_CHANGED"/>
+  <int value="34" label="BLUETOOTH_LOW_ENERGY_ON_SERVICE_ADDED"/>
+  <int value="35" label="BLUETOOTH_LOW_ENERGY_ON_SERVICE_CHANGED"/>
+  <int value="36" label="BLUETOOTH_LOW_ENERGY_ON_SERVICE_REMOVED"/>
+  <int value="37" label="BLUETOOTH_ON_ADAPTER_STATE_CHANGED"/>
+  <int value="38" label="BLUETOOTH_ON_DEVICE_ADDED"/>
+  <int value="39" label="BLUETOOTH_ON_DEVICE_CHANGED"/>
+  <int value="40" label="BLUETOOTH_ON_DEVICE_REMOVED"/>
+  <int value="41" label="BLUETOOTH_PRIVATE_ON_PAIRING"/>
+  <int value="42" label="BLUETOOTH_SOCKET_ON_ACCEPT"/>
+  <int value="43" label="BLUETOOTH_SOCKET_ON_ACCEPT_ERROR"/>
+  <int value="44" label="BLUETOOTH_SOCKET_ON_RECEIVE"/>
+  <int value="45" label="BLUETOOTH_SOCKET_ON_RECEIVE_ERROR"/>
+  <int value="46" label="BOOKMARK_MANAGER_PRIVATE_ON_DRAG_ENTER"/>
+  <int value="47" label="BOOKMARK_MANAGER_PRIVATE_ON_DRAG_LEAVE"/>
+  <int value="48" label="BOOKMARK_MANAGER_PRIVATE_ON_DROP"/>
+  <int value="49" label="BOOKMARK_MANAGER_PRIVATE_ON_META_INFO_CHANGED"/>
+  <int value="50" label="BOOKMARKS_ON_CHANGED"/>
+  <int value="51" label="BOOKMARKS_ON_CHILDREN_REORDERED"/>
+  <int value="52" label="BOOKMARKS_ON_CREATED"/>
+  <int value="53" label="BOOKMARKS_ON_IMPORT_BEGAN"/>
+  <int value="54" label="BOOKMARKS_ON_IMPORT_ENDED"/>
+  <int value="55" label="BOOKMARKS_ON_MOVED"/>
+  <int value="56" label="BOOKMARKS_ON_REMOVED"/>
+  <int value="57" label="BRAILLE_DISPLAY_PRIVATE_ON_DISPLAY_STATE_CHANGED"/>
+  <int value="58" label="BRAILLE_DISPLAY_PRIVATE_ON_KEY_EVENT"/>
+  <int value="59" label="BROWSER_ACTION_ON_CLICKED"/>
+  <int value="60" label="DELETED_CAST_STREAMING_RTP_STREAM_ON_ERROR"/>
+  <int value="61" label="DELETED_CAST_STREAMING_RTP_STREAM_ON_STARTED"/>
+  <int value="62" label="DELETED_CAST_STREAMING_RTP_STREAM_ON_STOPPED"/>
+  <int value="63" label="COMMANDS_ON_COMMAND"/>
+  <int value="64" label="CONTEXT_MENUS_INTERNAL_ON_CLICKED"/>
+  <int value="65" label="CONTEXT_MENUS_ON_CLICKED"/>
+  <int value="66" label="COOKIES_ON_CHANGED"/>
+  <int value="67" label="DELETED_COPRESENCE_ON_MESSAGES_RECEIVED"/>
+  <int value="68" label="DELETED_COPRESENCE_ON_STATUS_UPDATED"/>
+  <int value="69" label="DELETED_COPRESENCE_PRIVATE_ON_CONFIG_AUDIO"/>
+  <int value="70" label="DELETED_COPRESENCE_PRIVATE_ON_DECODE_SAMPLES_REQUEST"/>
+  <int value="71" label="DELETED_COPRESENCE_PRIVATE_ON_ENCODE_TOKEN_REQUEST"/>
+  <int value="72" label="DEBUGGER_ON_DETACH"/>
+  <int value="73" label="DEBUGGER_ON_EVENT"/>
+  <int value="74" label="DECLARATIVE_CONTENT_ON_PAGE_CHANGED"/>
+  <int value="75" label="DECLARATIVE_WEB_REQUEST_ON_MESSAGE"/>
+  <int value="76" label="DECLARATIVE_WEB_REQUEST_ON_REQUEST"/>
+  <int value="77" label="DEVELOPER_PRIVATE_ON_ITEM_STATE_CHANGED"/>
+  <int value="78" label="DEVELOPER_PRIVATE_ON_PROFILE_STATE_CHANGED"/>
+  <int value="79" label="DEVTOOLS_INSPECTED_WINDOW_ON_RESOURCE_ADDED"/>
+  <int value="80"
+      label="DEVTOOLS_INSPECTED_WINDOW_ON_RESOURCE_CONTENT_COMMITTED"/>
+  <int value="81" label="DEVTOOLS_NETWORK_ON_NAVIGATED"/>
+  <int value="82" label="DEVTOOLS_NETWORK_ON_REQUEST_FINISHED"/>
+  <int value="83" label="DOWNLOADS_ON_CHANGED"/>
+  <int value="84" label="DOWNLOADS_ON_CREATED"/>
+  <int value="85" label="DOWNLOADS_ON_DETERMINING_FILENAME"/>
+  <int value="86" label="DOWNLOADS_ON_ERASED"/>
+  <int value="87" label="DELETED_EASY_UNLOCK_PRIVATE_ON_START_AUTO_PAIRING"/>
+  <int value="88" label="DELETED_EASY_UNLOCK_PRIVATE_ON_USER_INFO_UPDATED"/>
+  <int value="89" label="DELETED_EXPERIENCE_SAMPLING_PRIVATE_ON_DECISION"/>
+  <int value="90" label="DELETED_EXPERIENCE_SAMPLING_PRIVATE_ON_DISPLAYED"/>
+  <int value="91" label="EXPERIMENTAL_DEVTOOLS_CONSOLE_ON_MESSAGE_ADDED"/>
+  <int value="92" label="EXTENSION_ON_REQUEST"/>
+  <int value="93" label="EXTENSION_ON_REQUEST_EXTERNAL"/>
+  <int value="94" label="EXTENSION_OPTIONS_INTERNAL_ON_CLOSE"/>
+  <int value="95" label="EXTENSION_OPTIONS_INTERNAL_ON_LOAD"/>
+  <int value="96" label="EXTENSION_OPTIONS_INTERNAL_ON_PREFERRED_SIZE_CHANGED"/>
+  <int value="97" label="FEEDBACK_PRIVATE_ON_FEEDBACK_REQUESTED"/>
+  <int value="98" label="FILE_BROWSER_HANDLER_ON_EXECUTE"/>
+  <int value="99" label="FILE_MANAGER_PRIVATE_ON_COPY_PROGRESS"/>
+  <int value="100" label="FILE_MANAGER_PRIVATE_ON_DEVICE_CHANGED"/>
+  <int value="101" label="FILE_MANAGER_PRIVATE_ON_DIRECTORY_CHANGED"/>
+  <int value="102"
+      label="FILE_MANAGER_PRIVATE_ON_DRIVE_CONNECTION_STATUS_CHANGED"/>
+  <int value="103" label="FILE_MANAGER_PRIVATE_ON_DRIVE_SYNC_ERROR"/>
+  <int value="104" label="FILE_MANAGER_PRIVATE_ON_FILE_TRANSFERS_UPDATED"/>
+  <int value="105" label="FILE_MANAGER_PRIVATE_ON_MOUNT_COMPLETED"/>
+  <int value="106" label="FILE_MANAGER_PRIVATE_ON_PREFERENCES_CHANGED"/>
+  <int value="107" label="FILE_SYSTEM_ON_VOLUME_LIST_CHANGED"/>
+  <int value="108" label="FILE_SYSTEM_PROVIDER_ON_ABORT_REQUESTED"/>
+  <int value="109" label="FILE_SYSTEM_PROVIDER_ON_ADD_WATCHER_REQUESTED"/>
+  <int value="110" label="FILE_SYSTEM_PROVIDER_ON_CLOSE_FILE_REQUESTED"/>
+  <int value="111" label="FILE_SYSTEM_PROVIDER_ON_CONFIGURE_REQUESTED"/>
+  <int value="112" label="FILE_SYSTEM_PROVIDER_ON_COPY_ENTRY_REQUESTED"/>
+  <int value="113" label="FILE_SYSTEM_PROVIDER_ON_CREATE_DIRECTORY_REQUESTED"/>
+  <int value="114" label="FILE_SYSTEM_PROVIDER_ON_CREATE_FILE_REQUESTED"/>
+  <int value="115" label="FILE_SYSTEM_PROVIDER_ON_DELETE_ENTRY_REQUESTED"/>
+  <int value="116" label="FILE_SYSTEM_PROVIDER_ON_GET_METADATA_REQUESTED"/>
+  <int value="117" label="FILE_SYSTEM_PROVIDER_ON_MOUNT_REQUESTED"/>
+  <int value="118" label="FILE_SYSTEM_PROVIDER_ON_MOVE_ENTRY_REQUESTED"/>
+  <int value="119" label="FILE_SYSTEM_PROVIDER_ON_OPEN_FILE_REQUESTED"/>
+  <int value="120" label="FILE_SYSTEM_PROVIDER_ON_READ_DIRECTORY_REQUESTED"/>
+  <int value="121" label="FILE_SYSTEM_PROVIDER_ON_READ_FILE_REQUESTED"/>
+  <int value="122" label="FILE_SYSTEM_PROVIDER_ON_REMOVE_WATCHER_REQUESTED"/>
+  <int value="123" label="FILE_SYSTEM_PROVIDER_ON_TRUNCATE_REQUESTED"/>
+  <int value="124" label="FILE_SYSTEM_PROVIDER_ON_UNMOUNT_REQUESTED"/>
+  <int value="125" label="FILE_SYSTEM_PROVIDER_ON_WRITE_FILE_REQUESTED"/>
+  <int value="126" label="FONT_SETTINGS_ON_DEFAULT_FIXED_FONT_SIZE_CHANGED"/>
+  <int value="127" label="FONT_SETTINGS_ON_DEFAULT_FONT_SIZE_CHANGED"/>
+  <int value="128" label="FONT_SETTINGS_ON_FONT_CHANGED"/>
+  <int value="129" label="FONT_SETTINGS_ON_MINIMUM_FONT_SIZE_CHANGED"/>
+  <int value="130" label="DELETED_GCD_PRIVATE_ON_DEVICE_REMOVED"/>
+  <int value="131" label="DELETED_GCD_PRIVATE_ON_DEVICE_STATE_CHANGED"/>
+  <int value="132" label="GCM_ON_MESSAGE"/>
+  <int value="133" label="GCM_ON_MESSAGES_DELETED"/>
+  <int value="134" label="GCM_ON_SEND_ERROR"/>
+  <int value="135" label="HANGOUTS_PRIVATE_ON_HANGOUT_REQUESTED_DEPRECATED"/>
+  <int value="136" label="HID_ON_DEVICE_ADDED"/>
+  <int value="137" label="HID_ON_DEVICE_REMOVED"/>
+  <int value="138" label="HISTORY_ON_VISITED"/>
+  <int value="139" label="HISTORY_ON_VISIT_REMOVED"/>
+  <int value="140" label="HOTWORD_PRIVATE_ON_DELETE_SPEAKER_MODEL"/>
+  <int value="141" label="HOTWORD_PRIVATE_ON_ENABLED_CHANGED"/>
+  <int value="142" label="HOTWORD_PRIVATE_ON_FINALIZE_SPEAKER_MODEL"/>
+  <int value="143" label="HOTWORD_PRIVATE_ON_HOTWORD_SESSION_REQUESTED"/>
+  <int value="144" label="HOTWORD_PRIVATE_ON_HOTWORD_SESSION_STOPPED"/>
+  <int value="145" label="HOTWORD_PRIVATE_ON_HOTWORD_TRIGGERED"/>
+  <int value="146" label="HOTWORD_PRIVATE_ON_MICROPHONE_STATE_CHANGED"/>
+  <int value="147" label="HOTWORD_PRIVATE_ON_SPEAKER_MODEL_EXISTS"/>
+  <int value="148" label="HOTWORD_PRIVATE_ON_SPEAKER_MODEL_SAVED"/>
+  <int value="149" label="IDENTITY_ON_SIGN_IN_CHANGED"/>
+  <int value="150" label="DELETED_IDENTITY_PRIVATE_ON_WEB_FLOW_REQUEST"/>
+  <int value="151" label="IDLE_ON_STATE_CHANGED"/>
+  <int value="152" label="IMAGE_WRITER_PRIVATE_ON_DEVICE_INSERTED"/>
+  <int value="153" label="IMAGE_WRITER_PRIVATE_ON_DEVICE_REMOVED"/>
+  <int value="154" label="IMAGE_WRITER_PRIVATE_ON_WRITE_COMPLETE"/>
+  <int value="155" label="IMAGE_WRITER_PRIVATE_ON_WRITE_ERROR"/>
+  <int value="156" label="IMAGE_WRITER_PRIVATE_ON_WRITE_PROGRESS"/>
+  <int value="157" label="INPUT_IME_ON_ACTIVATE"/>
+  <int value="158" label="INPUT_IME_ON_BLUR"/>
+  <int value="159" label="INPUT_IME_ON_CANDIDATE_CLICKED"/>
+  <int value="160" label="INPUT_IME_ON_DEACTIVATED"/>
+  <int value="161" label="INPUT_IME_ON_FOCUS"/>
+  <int value="162" label="INPUT_IME_ON_INPUT_CONTEXT_UPDATE"/>
+  <int value="163" label="INPUT_IME_ON_KEY_EVENT"/>
+  <int value="164" label="INPUT_IME_ON_MENU_ITEM_ACTIVATED"/>
+  <int value="165" label="INPUT_IME_ON_RESET"/>
+  <int value="166" label="INPUT_IME_ON_SURROUNDING_TEXT_CHANGED"/>
+  <int value="167" label="INPUT_METHOD_PRIVATE_ON_CHANGED"/>
+  <int value="168" label="INPUT_METHOD_PRIVATE_ON_COMPOSITION_BOUNDS_CHANGED"/>
+  <int value="169" label="INPUT_METHOD_PRIVATE_ON_DICTIONARY_CHANGED"/>
+  <int value="170" label="INPUT_METHOD_PRIVATE_ON_DICTIONARY_LOADED"/>
+  <int value="171" label="INSTANCE_ID_ON_TOKEN_REFRESH"/>
+  <int value="172" label="DELETED_LOCATION_ON_LOCATION_ERROR"/>
+  <int value="173" label="DELETED_LOCATION_ON_LOCATION_UPDATE"/>
+  <int value="174" label="DELETED_LOG_PRIVATE_ON_CAPTURED_EVENTS"/>
+  <int value="175" label="MANAGEMENT_ON_DISABLED"/>
+  <int value="176" label="MANAGEMENT_ON_ENABLED"/>
+  <int value="177" label="MANAGEMENT_ON_INSTALLED"/>
+  <int value="178" label="MANAGEMENT_ON_UNINSTALLED"/>
+  <int value="179" label="MDNS_ON_SERVICE_LIST"/>
+  <int value="180" label="MEDIA_GALLERIES_ON_GALLERY_CHANGED"/>
+  <int value="181" label="MEDIA_GALLERIES_ON_SCAN_PROGRESS"/>
+  <int value="182" label="MEDIA_PLAYER_PRIVATE_ON_NEXT_TRACK"/>
+  <int value="183" label="MEDIA_PLAYER_PRIVATE_ON_PREV_TRACK"/>
+  <int value="184" label="MEDIA_PLAYER_PRIVATE_ON_TOGGLE_PLAY_STATE"/>
+  <int value="185"
+      label="DELETED_NETWORKING_CONFIG_ON_CAPTIVE_PORTAL_DETECTED"/>
+  <int value="186" label="NETWORKING_PRIVATE_ON_DEVICE_STATE_LIST_CHANGED"/>
+  <int value="187" label="NETWORKING_PRIVATE_ON_NETWORK_LIST_CHANGED"/>
+  <int value="188" label="NETWORKING_PRIVATE_ON_NETWORKS_CHANGED"/>
+  <int value="189" label="NETWORKING_PRIVATE_ON_PORTAL_DETECTION_COMPLETED"/>
+  <int value="190" label="DELETED_NOTIFICATION_PROVIDER_ON_CLEARED"/>
+  <int value="191" label="DELETED_NOTIFICATION_PROVIDER_ON_CREATED"/>
+  <int value="192" label="DELETED_NOTIFICATION_PROVIDER_ON_UPDATED"/>
+  <int value="193" label="NOTIFICATIONS_ON_BUTTON_CLICKED"/>
+  <int value="194" label="NOTIFICATIONS_ON_CLICKED"/>
+  <int value="195" label="NOTIFICATIONS_ON_CLOSED"/>
+  <int value="196" label="NOTIFICATIONS_ON_PERMISSION_LEVEL_CHANGED"/>
+  <int value="197" label="NOTIFICATIONS_ON_SHOW_SETTINGS"/>
+  <int value="198" label="OMNIBOX_ON_INPUT_CANCELLED"/>
+  <int value="199" label="OMNIBOX_ON_INPUT_CHANGED"/>
+  <int value="200" label="OMNIBOX_ON_INPUT_ENTERED"/>
+  <int value="201" label="OMNIBOX_ON_INPUT_STARTED"/>
+  <int value="202" label="PAGE_ACTION_ON_CLICKED"/>
+  <int value="203"
+      label="PASSWORDS_PRIVATE_ON_PASSWORD_EXCEPTIONS_LIST_CHANGED"/>
+  <int value="204" label="PASSWORDS_PRIVATE_ON_PLAINTEXT_PASSWORD_RETRIEVED"/>
+  <int value="205" label="PASSWORDS_PRIVATE_ON_SAVED_PASSWORDS_LIST_CHANGED"/>
+  <int value="206" label="PERMISSIONS_ON_ADDED"/>
+  <int value="207" label="PERMISSIONS_ON_REMOVED"/>
+  <int value="208" label="PRINTER_PROVIDER_ON_GET_CAPABILITY_REQUESTED"/>
+  <int value="209" label="PRINTER_PROVIDER_ON_GET_PRINTERS_REQUESTED"/>
+  <int value="210" label="PRINTER_PROVIDER_ON_GET_USB_PRINTER_INFO_REQUESTED"/>
+  <int value="211" label="PRINTER_PROVIDER_ON_PRINT_REQUESTED"/>
+  <int value="212" label="PROCESSES_ON_CREATED"/>
+  <int value="213" label="PROCESSES_ON_EXITED"/>
+  <int value="214" label="PROCESSES_ON_UNRESPONSIVE"/>
+  <int value="215" label="PROCESSES_ON_UPDATED"/>
+  <int value="216" label="PROCESSES_ON_UPDATED_WITH_MEMORY"/>
+  <int value="217" label="PROXY_ON_PROXY_ERROR"/>
+  <int value="218" label="RUNTIME_ON_BROWSER_UPDATE_AVAILABLE"/>
+  <int value="219" label="RUNTIME_ON_CONNECT"/>
+  <int value="220" label="RUNTIME_ON_CONNECT_EXTERNAL"/>
+  <int value="221" label="RUNTIME_ON_INSTALLED"/>
+  <int value="222" label="RUNTIME_ON_MESSAGE"/>
+  <int value="223" label="RUNTIME_ON_MESSAGE_EXTERNAL"/>
+  <int value="224" label="RUNTIME_ON_RESTART_REQUIRED"/>
+  <int value="225" label="RUNTIME_ON_STARTUP"/>
+  <int value="226" label="RUNTIME_ON_SUSPEND"/>
+  <int value="227" label="RUNTIME_ON_SUSPEND_CANCELED"/>
+  <int value="228" label="RUNTIME_ON_UPDATE_AVAILABLE"/>
+  <int value="229" label="SEARCH_ENGINES_PRIVATE_ON_SEARCH_ENGINES_CHANGED"/>
+  <int value="230" label="SERIAL_ON_RECEIVE"/>
+  <int value="231" label="SERIAL_ON_RECEIVE_ERROR"/>
+  <int value="232" label="SESSIONS_ON_CHANGED"/>
+  <int value="233" label="SETTINGS_PRIVATE_ON_PREFS_CHANGED"/>
+  <int value="234" label="DELETED_SIGNED_IN_DEVICES_ON_DEVICE_INFO_CHANGE"/>
+  <int value="235" label="SOCKETS_TCP_ON_RECEIVE"/>
+  <int value="236" label="SOCKETS_TCP_ON_RECEIVE_ERROR"/>
+  <int value="237" label="SOCKETS_TCP_SERVER_ON_ACCEPT"/>
+  <int value="238" label="SOCKETS_TCP_SERVER_ON_ACCEPT_ERROR"/>
+  <int value="239" label="SOCKETS_UDP_ON_RECEIVE"/>
+  <int value="240" label="SOCKETS_UDP_ON_RECEIVE_ERROR"/>
+  <int value="241" label="STORAGE_ON_CHANGED"/>
+  <int value="242"
+      label="DELETED_STREAMS_PRIVATE_ON_EXECUTE_MIME_TYPE_HANDLER"/>
+  <int value="243" label="SYNC_FILE_SYSTEM_ON_FILE_STATUS_CHANGED"/>
+  <int value="244" label="SYNC_FILE_SYSTEM_ON_SERVICE_STATUS_CHANGED"/>
+  <int value="245" label="SYSTEM_DISPLAY_ON_DISPLAY_CHANGED"/>
+  <int value="246" label="SYSTEM_INDICATOR_ON_CLICKED"/>
+  <int value="247" label="SYSTEM_PRIVATE_ON_BRIGHTNESS_CHANGED"/>
+  <int value="248" label="SYSTEM_PRIVATE_ON_SCREEN_UNLOCKED"/>
+  <int value="249" label="SYSTEM_PRIVATE_ON_VOLUME_CHANGED"/>
+  <int value="250" label="SYSTEM_PRIVATE_ON_WOKE_UP"/>
+  <int value="251" label="SYSTEM_STORAGE_ON_ATTACHED"/>
+  <int value="252" label="SYSTEM_STORAGE_ON_DETACHED"/>
+  <int value="253" label="TAB_CAPTURE_ON_STATUS_CHANGED"/>
+  <int value="254" label="TABS_ON_ACTIVATED"/>
+  <int value="255" label="TABS_ON_ACTIVE_CHANGED"/>
+  <int value="256" label="TABS_ON_ATTACHED"/>
+  <int value="257" label="TABS_ON_CREATED"/>
+  <int value="258" label="TABS_ON_DETACHED"/>
+  <int value="259" label="TABS_ON_HIGHLIGHT_CHANGED"/>
+  <int value="260" label="TABS_ON_HIGHLIGHTED"/>
+  <int value="261" label="TABS_ON_MOVED"/>
+  <int value="262" label="TABS_ON_REMOVED"/>
+  <int value="263" label="TABS_ON_REPLACED"/>
+  <int value="264" label="TABS_ON_SELECTION_CHANGED"/>
+  <int value="265" label="TABS_ON_UPDATED"/>
+  <int value="266" label="TABS_ON_ZOOM_CHANGE"/>
+  <int value="267" label="TERMINAL_PRIVATE_ON_PROCESS_OUTPUT"/>
+  <int value="268" label="TEST_ON_MESSAGE"/>
+  <int value="269" label="TTS_ENGINE_ON_PAUSE"/>
+  <int value="270" label="TTS_ENGINE_ON_RESUME"/>
+  <int value="271" label="TTS_ENGINE_ON_SPEAK"/>
+  <int value="272" label="TTS_ENGINE_ON_STOP"/>
+  <int value="273" label="USB_ON_DEVICE_ADDED"/>
+  <int value="274" label="USB_ON_DEVICE_REMOVED"/>
+  <int value="275" label="VIRTUAL_KEYBOARD_PRIVATE_ON_BOUNDS_CHANGED"/>
+  <int value="276" label="VIRTUAL_KEYBOARD_PRIVATE_ON_TEXT_INPUT_BOX_FOCUSED"/>
+  <int value="277" label="VPN_PROVIDER_ON_CONFIG_CREATED"/>
+  <int value="278" label="VPN_PROVIDER_ON_CONFIG_REMOVED"/>
+  <int value="279" label="VPN_PROVIDER_ON_PACKET_RECEIVED"/>
+  <int value="280" label="VPN_PROVIDER_ON_PLATFORM_MESSAGE"/>
+  <int value="281" label="VPN_PROVIDER_ON_UI_EVENT"/>
+  <int value="282"
+      label="DELETED_WALLPAPER_PRIVATE_ON_WALLPAPER_CHANGED_BY_3RD_PARTY"/>
+  <int value="283" label="WEB_NAVIGATION_ON_BEFORE_NAVIGATE"/>
+  <int value="284" label="WEB_NAVIGATION_ON_COMMITTED"/>
+  <int value="285" label="WEB_NAVIGATION_ON_COMPLETED"/>
+  <int value="286" label="WEB_NAVIGATION_ON_CREATED_NAVIGATION_TARGET"/>
+  <int value="287" label="WEB_NAVIGATION_ON_DOM_CONTENT_LOADED"/>
+  <int value="288" label="WEB_NAVIGATION_ON_ERROR_OCCURRED"/>
+  <int value="289" label="WEB_NAVIGATION_ON_HISTORY_STATE_UPDATED"/>
+  <int value="290" label="WEB_NAVIGATION_ON_REFERENCE_FRAGMENT_UPDATED"/>
+  <int value="291" label="WEB_NAVIGATION_ON_TAB_REPLACED"/>
+  <int value="292" label="WEB_REQUEST_ON_AUTH_REQUIRED"/>
+  <int value="293" label="WEB_REQUEST_ON_BEFORE_REDIRECT"/>
+  <int value="294" label="WEB_REQUEST_ON_BEFORE_REQUEST"/>
+  <int value="295" label="WEB_REQUEST_ON_BEFORE_SEND_HEADERS"/>
+  <int value="296" label="WEB_REQUEST_ON_COMPLETED"/>
+  <int value="297" label="WEB_REQUEST_ON_ERROR_OCCURRED"/>
+  <int value="298" label="WEB_REQUEST_ON_HEADERS_RECEIVED"/>
+  <int value="299" label="WEB_REQUEST_ON_RESPONSE_STARTED"/>
+  <int value="300" label="WEB_REQUEST_ON_SEND_HEADERS"/>
+  <int value="301" label="WEBRTC_AUDIO_PRIVATE_ON_SINKS_CHANGED"/>
+  <int value="302" label="WEBSTORE_ON_DOWNLOAD_PROGRESS"/>
+  <int value="303" label="WEBSTORE_ON_INSTALL_STAGE_CHANGED"/>
+  <int value="304" label="DELETED_WEBSTORE_WIDGET_PRIVATE_ON_SHOW_WIDGET"/>
+  <int value="305" label="WEBVIEW_TAG_CLOSE"/>
+  <int value="306" label="WEBVIEW_TAG_CONSOLEMESSAGE"/>
+  <int value="307" label="WEBVIEW_TAG_CONTENTLOAD"/>
+  <int value="308" label="WEBVIEW_TAG_DIALOG"/>
+  <int value="309" label="WEBVIEW_TAG_EXIT"/>
+  <int value="310" label="WEBVIEW_TAG_FINDUPDATE"/>
+  <int value="311" label="WEBVIEW_TAG_LOADABORT"/>
+  <int value="312" label="WEBVIEW_TAG_LOADCOMMIT"/>
+  <int value="313" label="WEBVIEW_TAG_LOADREDIRECT"/>
+  <int value="314" label="WEBVIEW_TAG_LOADSTART"/>
+  <int value="315" label="WEBVIEW_TAG_LOADSTOP"/>
+  <int value="316" label="WEBVIEW_TAG_NEWWINDOW"/>
+  <int value="317" label="WEBVIEW_TAG_PERMISSIONREQUEST"/>
+  <int value="318" label="WEBVIEW_TAG_RESPONSIVE"/>
+  <int value="319" label="WEBVIEW_TAG_SIZECHANGED"/>
+  <int value="320" label="WEBVIEW_TAG_UNRESPONSIVE"/>
+  <int value="321" label="WEBVIEW_TAG_ZOOMCHANGE"/>
+  <int value="322" label="WINDOWS_ON_CREATED"/>
+  <int value="323" label="WINDOWS_ON_FOCUS_CHANGED"/>
+  <int value="324" label="WINDOWS_ON_REMOVED"/>
+  <int value="325" label="FILE_SYSTEM_PROVIDER_ON_EXECUTE_ACTION_REQUESTED"/>
+  <int value="326" label="FILE_SYSTEM_PROVIDER_ON_GET_ACTIONS_REQUESTED"/>
+  <int value="327" label="DELETED_LAUNCHER_SEARCH_PROVIDER_ON_QUERY_STARTED"/>
+  <int value="328" label="DELETED_LAUNCHER_SEARCH_PROVIDER_ON_QUERY_ENDED"/>
+  <int value="329" label="DELETED_LAUNCHER_SEARCH_PROVIDER_ON_OPEN_RESULT"/>
+  <int value="330" label="CHROME_WEB_VIEW_INTERNAL_ON_CLICKED"/>
+  <int value="331" label="WEB_VIEW_INTERNAL_CONTEXT_MENUS"/>
+  <int value="332" label="CONTEXT_MENUS"/>
+  <int value="333" label="TTS_ON_EVENT"/>
+  <int value="334" label="LAUNCHER_PAGE_ON_TRANSITION_CHANGED_DEPRECATED"/>
+  <int value="335" label="LAUNCHER_PAGE_ON_POP_SUBPAGE_DEPRECATED"/>
+  <int value="336" label="DIAL_ON_DEVICE_LIST"/>
+  <int value="337" label="DIAL_ON_ERROR"/>
+  <int value="338" label="CAST_CHANNEL_ON_MESSAGE"/>
+  <int value="339" label="CAST_CHANNEL_ON_ERROR"/>
+  <int value="340" label="DELETED_SCREENLOCK_PRIVATE_ON_CHANGED"/>
+  <int value="341" label="DELETED_SCREENLOCK_PRIVATE_ON_AUTH_ATTEMPTED"/>
+  <int value="342" label="TYPES_CHROME_SETTING_ON_CHANGE"/>
+  <int value="343"
+      label="DELETED_TYPES_PRIVATE_CHROME_DIRECT_SETTING_ON_CHANGE"/>
+  <int value="344" label="WEB_VIEW_INTERNAL_ON_MESSAGE"/>
+  <int value="345" label="DELETED_EXTENSION_VIEW_INTERNAL_ON_LOAD_COMMIT"/>
+  <int value="346" label="RUNTIME_ON_REQUEST"/>
+  <int value="347" label="RUNTIME_ON_REQUEST_EXTERNAL"/>
+  <int value="348" label="CHROME_WEB_VIEW_INTERNAL_ON_CONTEXT_MENU_SHOW"/>
+  <int value="349" label="WEB_VIEW_INTERNAL_ON_BEFORE_REQUEST"/>
+  <int value="350" label="WEB_VIEW_INTERNAL_ON_BEFORE_SEND_HEADERS"/>
+  <int value="351" label="WEB_VIEW_INTERNAL_ON_CLOSE"/>
+  <int value="352" label="WEB_VIEW_INTERNAL_ON_COMPLETED"/>
+  <int value="353" label="WEB_VIEW_INTERNAL_ON_CONSOLE_MESSAGE"/>
+  <int value="354" label="WEB_VIEW_INTERNAL_ON_CONTENT_LOAD"/>
+  <int value="355" label="WEB_VIEW_INTERNAL_ON_DIALOG"/>
+  <int value="356" label="DELETED_WEB_VIEW_INTERNAL_ON_DROP_LINK"/>
+  <int value="357" label="WEB_VIEW_INTERNAL_ON_EXIT"/>
+  <int value="358" label="WEB_VIEW_INTERNAL_ON_EXIT_FULLSCREEN"/>
+  <int value="359" label="WEB_VIEW_INTERNAL_ON_FIND_REPLY"/>
+  <int value="360" label="WEB_VIEW_INTERNAL_ON_FRAME_NAME_CHANGED"/>
+  <int value="361" label="WEB_VIEW_INTERNAL_ON_HEADERS_RECEIVED"/>
+  <int value="362" label="WEB_VIEW_INTERNAL_ON_LOAD_ABORT"/>
+  <int value="363" label="WEB_VIEW_INTERNAL_ON_LOAD_COMMIT"/>
+  <int value="364" label="WEB_VIEW_INTERNAL_ON_LOAD_PROGRESS"/>
+  <int value="365" label="WEB_VIEW_INTERNAL_ON_LOAD_REDIRECT"/>
+  <int value="366" label="WEB_VIEW_INTERNAL_ON_LOAD_START"/>
+  <int value="367" label="WEB_VIEW_INTERNAL_ON_LOAD_STOP"/>
+  <int value="368" label="WEB_VIEW_INTERNAL_ON_NEW_WINDOW"/>
+  <int value="369" label="WEB_VIEW_INTERNAL_ON_PERMISSION_REQUEST"/>
+  <int value="370" label="WEB_VIEW_INTERNAL_ON_RESPONSE_STARTED"/>
+  <int value="371" label="WEB_VIEW_INTERNAL_ON_RESPONSIVE"/>
+  <int value="372" label="WEB_VIEW_INTERNAL_ON_SIZE_CHANGED"/>
+  <int value="373" label="WEB_VIEW_INTERNAL_ON_UNRESPONSIVE"/>
+  <int value="374" label="WEB_VIEW_INTERNAL_ON_ZOOM_CHANGE"/>
+  <int value="375" label="GUEST_VIEW_INTERNAL_ON_RESIZE"/>
+  <int value="376" label="LANGUAGE_SETTINGS_PRIVATE_ON_INPUT_METHOD_ADDED"/>
+  <int value="377" label="LANGUAGE_SETTINGS_PRIVATE_ON_INPUT_METHOD_REMOVED"/>
+  <int value="378"
+      label="LANGUAGE_SETTINGS_PRIVATE_ON_SPELLCHECK_DICTIONARIES_CHANGED"/>
+  <int value="379"
+      label="LANGUAGE_SETTINGS_PRIVATE_ON_CUSTOM_DICTIONARY_CHANGED"/>
+  <int value="380" label="CAST_DEVICES_PRIVATE_ON_UPDATE_DEVICES_REQUESTED"/>
+  <int value="381" label="CAST_DEVICES_PRIVATE_ON_START_CAST"/>
+  <int value="382" label="CAST_DEVICES_PRIVATE_ON_STOP_CAST"/>
+  <int value="383" label="CERTIFICATEPROVIDER_ON_CERTIFICATES_REQUESTED"/>
+  <int value="384" label="CERTIFICATEPROVIDER_ON_SIGN_DIGEST_REQUESTED"/>
+  <int value="385" label="WEB_VIEW_INTERNAL_ON_AUTH_REQUIRED"/>
+  <int value="386" label="WEB_VIEW_INTERNAL_ON_BEFORE_REDIRECT"/>
+  <int value="387" label="WEB_VIEW_INTERNAL_ON_ERROR_OCCURRED"/>
+  <int value="388" label="WEB_VIEW_INTERNAL_ON_SEND_HEADERS"/>
+  <int value="389"
+      label="DELETED_EASY_UNLOCK_PRIVATE_ON_CONNECTION_STATUS_CHANGED"/>
+  <int value="390" label="DELETED_EASY_UNLOCK_PRIVATE_ON_DATA_RECEIVED"/>
+  <int value="391" label="DELETED_EASY_UNLOCK_PRIVATE_ON_SEND_COMPLETED"/>
+  <int value="392" label="DELETED_DISPLAY_SOURCE_ON_SINKS_UPDATED"/>
+  <int value="393" label="INPUT_IME_ON_COMPOSITION_BOUNDS_CHANGED"/>
+  <int value="394" label="INPUT_METHOD_PRIVATE_ON_IME_MENU_ACTIVATION_CHANGED"/>
+  <int value="395" label="INPUT_METHOD_PRIVATE_ON_IME_MENU_LIST_CHANGED"/>
+  <int value="396" label="INPUT_METHOD_PRIVATE_ON_IME_MENU_ITEMS_CHANGED"/>
+  <int value="397" label="BLUETOOTH_LOW_ENERGY_ON_CHARACTERISTIC_READ_REQUEST"/>
+  <int value="398"
+      label="BLUETOOTH_LOW_ENERGY_ON_CHARACTERISTIC_WRITE_REQUEST"/>
+  <int value="399" label="BLUETOOTH_LOW_ENERGY_ON_DESCRIPTOR_READ_REQUEST"/>
+  <int value="400" label="BLUETOOTH_LOW_ENERGY_ON_DESCRIPTOR_WRITE_REQUEST"/>
+  <int value="401" label="ACCESSIBILITY_PRIVATE_ON_ACCESSIBILITY_GESTURE"/>
+  <int value="402" label="QUICK_UNLOCK_PRIVATE_ON_ACTIVE_MODES_CHANGED"/>
+  <int value="403" label="CLIPBOARD_ON_CLIPBOARD_DATA_CHANGED"/>
+  <int value="404" label="VIRTUAL_KEYBOARD_PRIVATE_ON_KEYBOARD_CLOSED"/>
+  <int value="405" label="FILE_MANAGER_PRIVATE_ON_APPS_UPDATED"/>
+  <int value="406" label="ACCESSIBILITY_PRIVATE_ON_TWO_FINGER_TOUCH_START"/>
+  <int value="407" label="ACCESSIBILITY_PRIVATE_ON_TWO_FINGER_TOUCH_STOP"/>
+  <int value="408" label="MEDIA_PERCEPTION_PRIVATE_ON_MEDIA_PERCEPTION"/>
+  <int value="409" label="NETWORKING_PRIVATE_ON_CERTIFICATE_LISTS_CHANGED"/>
+  <int value="410" label="LOCK_SCREEN_DATA_ON_DATA_ITEMS_AVAILABLE"/>
+  <int value="411" label="WEB_VIEW_INTERNAL_ON_AUDIO_STATE_CHANGED"/>
+  <int value="412" label="AUTOMATION_INTERNAL_ON_ACTION_RESULT"/>
+  <int value="413" label="OMNIBOX_ON_DELETE_SUGGESTION"/>
+  <int value="414" label="VIRTUAL_KEYBOARD_PRIVATE_ON_KEYBOARD_CONFIG_CHANGED"/>
+  <int value="415" label="PASSWORDS_PRIVATE_ON_PASSWORDS_FILE_EXPORT_PROGRESS"/>
+  <int value="416"
+      label="SAFE_BROWSING_PRIVATE_ON_POLICY_SPECIFIED_PASSWORD_REUSE_DETECTED"/>
+  <int value="417"
+      label="SAFE_BROWSING_PRIVATE_ON_POLICY_SPECIFIED_PASSWORD_CHANGED"/>
+  <int value="418" label="SAFE_BROWSING_PRIVATE_ON_DANGEROUS_DOWNLOAD_OPENED"/>
+  <int value="419"
+      label="SAFE_BROWSING_PRIVATE_ON_SECURITY_INTERSTITIAL_SHOWN"/>
+  <int value="420"
+      label="SAFE_BROWSING_PRIVATE_ON_SECURITY_INTERSTITIAL_PROCEEDED"/>
+  <int value="421"
+      label="ACCESSIBILITY_PRIVATE_ON_SELECT_TO_SPEAK_STATE_CHANGE_REQUESTED"/>
+  <int value="422" label="INPUT_METHOD_PRIVATE_ON_FOCUS"/>
+  <int value="423" label="DELETED_SYSTEM_POWER_SOURCE_ONPOWERCHANGED"/>
+  <int value="424" label="WEB_REQUEST_ON_ACTION_IGNORED"/>
+  <int value="425" label="ARC_APPS_PRIVATE_ON_INSTALLED"/>
+  <int value="426" label="FILE_MANAGER_PRIVATE_ON_CROSTINI_CHANGED"/>
+  <int value="427" label="AUTOMATION_INTERNAL_ON_GET_TEXT_LOCATION_RESULT"/>
+  <int value="428" label="INPUT_METHOD_PRIVATE_ON_SETTINGS_CHANGED"/>
+  <int value="429" label="INPUT_METHOD_PRIVATE_ON_SCREEN_PROJECTION_CHANGED"/>
+  <int value="430" label="STORAGE_LOCAL_ON_CHANGE"/>
+  <int value="431" label="STORAGE_SYNC_ON_CHANGE"/>
+  <int value="432" label="STORAGE_MANAGED_ON_CHANGE"/>
+  <int value="433"
+      label="AUTOFILL_PRIVATE_ON_LOCAL_CREDIT_CARD_LIST_CHANGED_DEPRECATED"/>
+  <int value="434"
+      label="AUTOFILL_PRIVATE_ON_SERVER_CREDIT_CARD_LIST_CHANGED_DEPRECATED"/>
+  <int value="435" label="ACCESSIBILITY_PRIVATE_ON_ANNOUNCE_FOR_ACCESSIBILITY"/>
+  <int value="436" label="MIME_HANDLER_PRIVATE_SAVE"/>
+  <int value="437" label="RUNTIME_ON_CONNECT_NATIVE"/>
+  <int value="438" label="ACTION_ON_CLICKED"/>
+  <int value="439" label="ACCESSIBILITY_PRIVATE_ON_SWITCH_ACCESS_COMMAND"/>
+  <int value="440"
+      label="ACCESSIBILITY_PRIVATE_FIND_SCROLLABLE_BOUNDS_FOR_POINT"/>
+  <int value="441" label="LOGIN_STATE_ON_SESSION_STATE_CHANGED"/>
+  <int value="442" label="PRINTING_METRICS_ON_PRINT_JOB_FINISHED"/>
+  <int value="443" label="AUTOTESTPRIVATE_ON_CLIPBOARD_DATA_CHANGED"/>
+  <int value="444" label="AUTOFILL_PRIVATE_ON_PERSONAL_DATA_CHANGED"/>
+  <int value="445" label="PRINTING_ON_JOB_STATUS_CHANGED"/>
+  <int value="446" label="DECLARATIVE_NET_REQUEST_ON_RULE_MATCHED_DEBUG"/>
+  <int value="447" label="TERMINAL_PRIVATE_ON_SETTINGS_CHANGED"/>
+  <int value="448"
+      label="DELETED_AUTOFILL_ASSISTANT_PRIVATE_ON_ACTIONS_CHANGED"/>
+  <int value="449"
+      label="DELETED_AUTOFILL_ASSISTANT_PRIVATE_ON_STATUS_MESSAGE_CHANGED"/>
+  <int value="450" label="BLUETOOTH_PRIVATE_ON_DEVICE_ADDRESS_CHANGED"/>
+  <int value="451"
+      label="PASSWORDS_PRIVATE_ON_ACCOUNT_STORAGE_OPT_IN_STATE_CHANGED"/>
+  <int value="452"
+      label="ACCESSIBILITY_PRIVATE_ON_CUSTOM_SPOKEN_FEEDBACK_TOGGLED"/>
+  <int value="453"
+      label="DELETED_PASSWORDS_PRIVATE_ON_COMPROMISED_CREDENTIALS_INFO_CHANGED"/>
+  <int value="454" label="TERMINAL_PRIVATE_ON_A11Y_STATUS_CHANGED"/>
+  <int value="455" label="PASSWORDS_PRIVATE_ON_PASSWORD_CHECK_STATUS_CHANGED"/>
+  <int value="456" label="INPUT_IME_ON_ASSISTIVE_WINDOW_BUTTON_CLICKED"/>
+  <int value="457" label="INPUT_IME_ON_SUGGESTIONS_CHANGED"/>
+  <int value="458" label="INPUT_IME_ON_INPUT_METHOD_OPTIONS_CHANGED"/>
+  <int value="459"
+      label="CERTIFICATEPROVIDER_ON_CERTIFICATES_UPDATE_REQUESTED"/>
+  <int value="460" label="CERTIFICATEPROVIDER_ON_SIGNATURE_REQUESTED"/>
+  <int value="461" label="WINDOWS_ON_BOUNDS_CHANGED"/>
+  <int value="462"
+      label="DELETED_WALLPAPER_PRIVATE_ON_CLOSE_PREVIEW_WALLPAPER"/>
+  <int value="463"
+      label="DELETED_PASSWORDS_PRIVATE_ON_WEAK_CREDENTIALS_CHANGED"/>
+  <int value="464" label="ACCESSIBILITY_PRIVATE_ON_MAGNIFIER_BOUNDS_CHANGED"/>
+  <int value="465" label="FILE_MANAGER_PRIVATE_ON_PIN_TRANSFERS_UPDATED"/>
+  <int value="466" label="ACCESSIBILITY_PRIVATE_ON_POINT_SCAN_SET"/>
+  <int value="467"
+      label="ACCESSIBILITY_PRIVATE_ON_SELECT_TO_SPEAK_PANEL_ACTION"/>
+  <int value="468" label="FILE_MANAGER_PRIVATE_ON_TABLET_MODE_CHANGED"/>
+  <int value="469"
+      label="VIRTUAL_KEYBOARD_PRIVATE_ON_CLIPBOARD_HISTORY_CHANGED"/>
+  <int value="470" label="VIRTUAL_KEYBOARD_PRIVATE_ON_CLIPBOARD_ITEM_UPDATED"/>
+  <int value="471" label="TAB_GROUPS_ON_CREATED"/>
+  <int value="472" label="TAB_GROUPS_ON_MOVED"/>
+  <int value="473" label="TAB_GROUPS_ON_REMOVED"/>
+  <int value="474" label="TAB_GROUPS_ON_UPDATED"/>
+  <int value="475" label="FILE_MANAGER_PRIVATE_ON_DRIVE_CONFIRM_DIALOG"/>
+  <int value="476" label="TTS_ENGINE_ON_SPEAK_WITH_AUDIO_STREAM"/>
+  <int value="477" label="ACCESSIBILITY_PRIVATE_ON_SHOW_CHROMEVOX_TUTORIAL"/>
+  <int value="478" label="STORAGE_SESSION_ON_CHANGE"/>
+  <int value="479" label="ACCESSIBILITY_PRIVATE_ON_TOGGLE_DICTATION"/>
+  <int value="480" label="WEB_AUTHENTICATION_PROXY_ON_ISUVPAA_REQUEST"/>
+  <int value="481" label="SPEECH_RECOGNITION_PRIVATE_ON_STOP"/>
+  <int value="482" label="SPEECH_RECOGNITION_PRIVATE_ON_RESULT"/>
+  <int value="483" label="SPEECH_RECOGNITION_PRIVATE_ON_ERROR"/>
+  <int value="484" label="FILE_MANAGER_PRIVATE_ON_IO_TASK_PROGRESS_STATUS"/>
+  <int value="485" label="INPUT_METHOD_PRIVATE_ON_TOUCH"/>
+  <int value="486" label="WEB_AUTHENTICATION_PROXY_ON_CREATE_REQUEST"/>
+  <int value="487" label="WEB_AUTHENTICATION_PROXY_REQUEST_CANCELLED"/>
+  <int value="488" label="WEB_AUTHENTICATION_PROXY_ON_GET_REQUEST"/>
+  <int value="489" label="DEVELOPER_PRIVATE_ON_USER_SITE_SETTINGS_CHANGED"/>
+  <int value="490" label="TERMINAL_PRIVATE_ON_PREF_CHANGED"/>
+  <int value="491"
+      label="WEB_AUTHENTICATION_PROXY_ON_REMOTE_SESSION_STATE_CHANGE"/>
+  <int value="492" label="LOGIN_ON_REQUEST_EXTERNAL_LOGOUT"/>
+  <int value="493" label="LOGIN_ON_EXTERNAL_LOGOUT_DONE"/>
+  <int value="494" label="ACCESSIBILITY_PRIVATE_ON_PUMPKIN_INSTALLED"/>
+  <int value="495" label="ENTERPRISE_REMOTE_APPS_ON_REMOTE_APP_LAUNCHED"/>
+  <int value="496" label="INPUT_METHOD_PRIVATE_ON_CARET_BOUNDS_CHANGED"/>
+  <int value="497" label="PASSWORDS_PRIVATE_ON_PASSWORD_MANAGER_AUTH_TIMEOUT"/>
+  <int value="498" label="PASSWORDS_PRIVATE_ON_INSECURE_CREDENTIALS_CHANGED"/>
+  <int value="499" label="VIRTUAL_KEYBOARD_PRIVATE_ON_COLOR_PROVIDER_CHANGED"/>
+  <int value="500"
+      label="SMART_CARD_PROVIDER_PRIVATE_ON_ESTABLISH_CONTEXT_REQUESTED"/>
+  <int value="501"
+      label="SMART_CARD_PROVIDER_PRIVATE_ON_RELEASE_CONTEXT_REQUESTED"/>
+  <int value="502"
+      label="SMART_CARD_PROVIDER_PRIVATE_ON_LIST_READERS_REQUESTED"/>
+  <int value="503"
+      label="SMART_CARD_PROVIDER_PRIVATE_ON_GET_STATUS_CHANGE_REQUESTED"/>
+  <int value="504" label="PDF_VIEWER_PRIVATE_ON_PDF_OCR_PREF_CHANGED"/>
+  <int value="505" label="SMART_CARD_PROVIDER_PRIVATE_ON_CONNECT_REQUESTED"/>
+  <int value="506" label="SMART_CARD_PROVIDER_PRIVATE_ON_DISCONNECT_REQUESTED"/>
+  <int value="507" label="SMART_CARD_PROVIDER_PRIVATE_ON_CANCEL_REQUESTED"/>
+  <int value="508" label="OS_EVENTS_ON_AUDIO_JACK_EVENT"/>
+  <int value="509"
+      label="ACCESSIBILITY_PRIVATE_ON_SELECT_TO_SPEAK_KEYS_PRESSED_CHANGED"/>
+  <int value="510"
+      label="ACCESSIBILITY_PRIVATE_ON_SELECT_TO_SPEAK_MOUSE_CHANGED"/>
+  <int value="511" label="FILE_MANAGER_PRIVATE_ON_BULK_PIN_PROGRESS"/>
+  <int value="512" label="OS_EVENTS_ON_LID_EVENT"/>
+  <int value="513" label="OS_EVENTS_ON_USB_EVENT"/>
+  <int value="514" label="OS_EVENTS_ON_SD_CARD_EVENT"/>
+  <int value="515" label="SMART_CARD_PROVIDER_PRIVATE_ON_TRANSMIT_REQUESTED"/>
+  <int value="516" label="SMART_CARD_PROVIDER_PRIVATE_ON_CONTROL_REQUESTED"/>
+  <int value="517" label="OS_EVENTS_ON_POWER_EVENT"/>
+  <int value="518" label="SMART_CARD_PROVIDER_PRIVATE_ON_GET_ATTRIB_REQUESTED"/>
+  <int value="519" label="OS_EVENTS_ON_KEYBOARD_DIAGNOSTIC_EVENT"/>
+  <int value="520" label="DESK_EVENTS_ON_DESK_ADDED"/>
+  <int value="521" label="DESK_EVENTS_ON_DESK_REMOVED"/>
+  <int value="522" label="DESK_EVENTS_ON_DESK_SWITCHED"/>
+  <int value="523" label="SMART_CARD_PROVIDER_PRIVATE_ON_SET_ATTRIB_REQUESTED"/>
+  <int value="524" label="OS_EVENTS_ON_STYLUS_GARAGE_EVENT"/>
+  <int value="525" label="SMART_CARD_PROVIDER_PRIVATE_ON_STATUS_REQUESTED"/>
+  <int value="526" label="OS_EVENTS_ON_TOUCHPAD_BUTTON_EVENT"/>
+  <int value="527" label="OS_EVENTS_ON_TOUCHPAD_TOUCH_EVENT"/>
+  <int value="528" label="OS_EVENTS_ON_TOUCHPAD_CONNECTED_EVENT"/>
+  <int value="529"
+      label="SMART_CARD_PROVIDER_PRIVATE_ON_BEGIN_TRANSACTION_REQUESTED"/>
+  <int value="530"
+      label="SMART_CARD_PROVIDER_PRIVATE_ON_END_TRANSACTION_REQUESTED"/>
+  <int value="531" label="OS_EVENTS_ON_EXTERNAL_DISPLAY_EVENT"/>
+  <int value="532" label="OS_EVENTS_ON_STYLUS_TOUCH_EVENT"/>
+  <int value="533" label="OS_EVENTS_ON_STYLUS_CONNECTED_EVENT"/>
+  <int value="534"
+      label="ACCESSIBILITY_PRIVATE_ON_SELECT_TO_SPEAK_CONTEXT_MENU_CLICKED"/>
+  <int value="535" label="DESK_EVENTS_ON_DESK_REMOVAL_UNDONE"/>
+  <int value="536" label="READING_LIST_ON_ENTRY_ADDED"/>
+  <int value="537" label="READING_LIST_ON_ENTRY_REMOVED"/>
+  <int value="538" label="READING_LIST_ON_ENTRY_UPDATED"/>
+  <int value="539" label="OS_DIAGNOSTICS_ON_ROUTINE_INITIALIZED"/>
+  <int value="540" label="OS_DIAGNOSTICS_ON_ROUTINE_RUNNING"/>
+  <int value="541" label="OS_DIAGNOSTICS_ON_ROUTINE_WAITING"/>
+  <int value="542" label="OS_DIAGNOSTICS_ON_MEMORY_ROUTINE_FINISHED"/>
+  <int value="543" label="OS_EVENTS_ON_TOUCHSCREEN_TOUCH_EVENT"/>
+  <int value="544" label="OS_EVENTS_ON_TOUCHSCREEN_CONNECTED_EVENT"/>
+  <int value="545"
+      label="FILE_MANAGER_PRIVATE_ON_DEVICE_CONNECTION_STATUS_CHANGED"/>
+  <int value="546" label="OS_DIAGNOSTICS_ON_ROUTINE_EXCEPTION"/>
+  <int value="547"
+      label="ACCESSIBILITY_SERVICE_PRIVATE_CLIPBOARD_COPY_IN_ACTIVE_GOOGLE_DOC"/>
+  <int value="548"
+      label="INPUT_METHOD_PRIVATE_ON_LANGUAGE_PACK_STATUS_CHANGED"/>
+  <int value="549" label="OS_DIAGNOSTICS_ON_VOLUME_BUTTON_ROUTINE_FINISHED"/>
+  <int value="550" label="OS_DIAGNOSTICS_ON_FAN_ROUTINE_FINISHED"/>
+  <int value="551" label="ODFS_CONFIG_PRIVATE_MOUNT_CHANGED"/>
+  <int value="552" label="ODFS_CONFIG_PRIVATE_ACCOUNT_RESTRICTIONS_CHANGED"/>
+  <int value="553" label="PDF_VIEWER_PRIVATE_ON_SAVE"/>
+</enum>
+
+<enum name="ExtensionFromWebstoreInconcistencyEnum">
+  <int value="0" label="Non-webstore update URL"/>
+  <int value="1" label="External install location"/>
+</enum>
+
+<enum name="ExtensionFunctions">
+<!-- Generated from extensions/browser/extension_function_histogram_value.h.
+Called by update_extension_histograms.py.-->
+
+  <int value="0" label="UNKNOWN"/>
+  <int value="1" label="WEBNAVIGATION_GETALLFRAMES"/>
+  <int value="2" label="BROWSINGDATA_REMOVEWEBSQL"/>
+  <int value="3" label="ALARMS_CREATE"/>
+  <int value="4" label="FILEMANAGERPRIVATEINTERNAL_REMOVEFILEWATCH"/>
+  <int value="5" label="COOKIES_GET"/>
+  <int value="6" label="FONTSETTINGS_GETMINIMUMFONTSIZE"/>
+  <int value="7" label="CHROMEOSINFOPRIVATE_GET"/>
+  <int value="8" label="BOOKMARKMANAGERPRIVATE_CUT"/>
+  <int value="9" label="TABS_CAPTUREVISIBLETAB"/>
+  <int value="10" label="MANAGEMENT_SETENABLED"/>
+  <int value="11" label="HISTORY_DELETEALL"/>
+  <int value="12" label="STORAGE_GET"/>
+  <int value="13" label="SOCKET_SETKEEPALIVE"/>
+  <int value="14" label="DOWNLOADS_CANCEL"/>
+  <int value="15" label="BOOKMARKS_CREATE"/>
+  <int value="16" label="BOOKMARKS_UPDATE"/>
+  <int value="17" label="FILEMANAGERPRIVATE_GETDRIVEFILES"/>
+  <int value="18" label="TERMINALPRIVATE_ONTERMINALRESIZE"/>
+  <int value="19" label="DELETED_FILEMANAGERPRIVATE_REQUESTDIRECTORYREFRESH"/>
+  <int value="20" label="BLUETOOTH_GETADAPTERSTATE"/>
+  <int value="21"
+      label="DELETED_FILEMANAGERPRIVATEINTERNAL_CANCELFILETRANSFERS"/>
+  <int value="22" label="FILEMANAGERPRIVATEINTERNAL_PINDRIVEFILE"/>
+  <int value="23" label="SOCKET_WRITE"/>
+  <int value="24" label="OMNIBOX_SETDEFAULTSUGGESTION"/>
+  <int value="25" label="TTS_SPEAK"/>
+  <int value="26" label="DELETED_WALLPAPERPRIVATE_RESTOREMINIMIZEDWINDOWS"/>
+  <int value="27" label="BROWSINGDATA_REMOVEHISTORY"/>
+  <int value="28" label="DELETED_FILEMANAGERPRIVATE_ISFULLSCREEN"/>
+  <int value="29" label="AUTOTESTPRIVATE_LOGOUT"/>
+  <int value="30" label="EXPERIMENTAL_HISTORY_GETMOSTVISITED"/>
+  <int value="31" label="DELETED_BLUETOOTH_DISCONNECT"/>
+  <int value="32" label="DELETED_BLUETOOTH_SETOUTOFBANDPAIRINGDATA"/>
+  <int value="33" label="BOOKMARKMANAGERPRIVATE_CANPASTE"/>
+  <int value="34" label="AUTOTESTPRIVATE_RESTART"/>
+  <int value="35" label="USB_CLAIMINTERFACE"/>
+  <int value="36" label="MEDIAPLAYERPRIVATE_SETWINDOWHEIGHT"/>
+  <int value="37" label="DELETED_EXPERIMENTAL_PROCESSES_GETPROCESSINFO"/>
+  <int value="38" label="HISTORY_GETVISITS"/>
+  <int value="39" label="SOCKET_BIND"/>
+  <int value="40" label="TABS_MOVE"/>
+  <int value="41" label="SOCKET_DISCONNECT"/>
+  <int value="42" label="FILESYSTEM_GETWRITABLEENTRY"/>
+  <int value="43" label="SYNCFILESYSTEM_REQUESTFILESYSTEM"/>
+  <int value="44" label="COMMANDS_GETALL"/>
+  <int value="45" label="EXPERIMENTAL_DISCOVERY_REMOVESUGGESTION"/>
+  <int value="46" label="VIRTUALKEYBOARDPRIVATE_SENDKEYEVENT"/>
+  <int value="47" label="BOOKMARKMANAGERPRIVATE_GETSUBTREE"/>
+  <int value="48" label="DELETED_EXPERIMENTAL_RLZ_RECORDPRODUCTEVENT"/>
+  <int value="49" label="BOOKMARKS_GETRECENT"/>
+  <int value="50" label="APP_CURRENTWINDOWINTERNAL_SETBOUNDS"/>
+  <int value="51" label="DELETED_CLOUDPRINTPRIVATE_SETUPCONNECTOR"/>
+  <int value="52" label="SERIAL_SETCONTROLSIGNALS"/>
+  <int value="53" label="DELETED_FILEMANAGERPRIVATE_SETLASTMODIFIED"/>
+  <int value="54" label="IDLE_SETDETECTIONINTERVAL"/>
+  <int value="55" label="FILEMANAGERPRIVATEINTERNAL_GETFILETASKS"/>
+  <int value="56" label="WEBSTOREPRIVATE_GETSTORELOGIN"/>
+  <int value="57" label="SYSTEMPRIVATE_GETINCOGNITOMODEAVAILABILITY"/>
+  <int value="58" label="IDLTEST_SENDARRAYBUFFERVIEW"/>
+  <int value="59" label="SOCKET_SETNODELAY"/>
+  <int value="60" label="APP_CURRENTWINDOWINTERNAL_SHOW"/>
+  <int value="61" label="WEBSTOREPRIVATE_GETBROWSERLOGIN"/>
+  <int value="62" label="EXPERIMENTAL_IDENTITY_GETAUTHTOKEN"/>
+  <int value="63" label="DELETED_SYSTEMINFO_DISPLAY_GETDISPLAYINFO"/>
+  <int value="64" label="BROWSINGDATA_REMOVEPLUGINDATA"/>
+  <int value="65" label="SOCKET_LISTEN"/>
+  <int value="66" label="MEDIAGALLERIES_GETMEDIAFILESYSTEMS"/>
+  <int value="67" label="DOWNLOADS_OPEN"/>
+  <int value="68" label="TABS_EXECUTESCRIPT"/>
+  <int value="69" label="SYNCFILESYSTEM_GETUSAGEANDQUOTA"/>
+  <int value="70" label="INPUTMETHODPRIVATE_GET"/>
+  <int value="71" label="USB_CLOSEDEVICE"/>
+  <int value="72" label="TTS_STOP"/>
+  <int value="73" label="DELETED_SERIAL_GETPORTS"/>
+  <int value="74" label="DELETED_FILEMANAGERPRIVATE_CLEARDRIVECACHE"/>
+  <int value="75" label="SERIAL_GETCONTROLSIGNALS"/>
+  <int value="76" label="DELETED_DEVELOPERPRIVATE_ENABLE"/>
+  <int value="77" label="FILEMANAGERPRIVATEINTERNAL_GETENTRYPROPERTIES"/>
+  <int value="78" label="USB_FINDDEVICES"/>
+  <int value="79" label="BOOKMARKMANAGERPRIVATE_DROP"/>
+  <int value="80" label="DELETED_FILEMANAGERPRIVATE_GETFILETRANSFERS"/>
+  <int value="81" label="INPUT_IME_SETMENUITEMS"/>
+  <int value="82" label="DELETED_BOOKMARKS_EXPORT"/>
+  <int value="83" label="HISTORY_SEARCH"/>
+  <int value="84" label="TTSENGINE_SENDTTSEVENT"/>
+  <int value="85" label="ACCESSIBILITY_PRIVATE_GETALERTSFORTAB"/>
+  <int value="86" label="DELETED_BOOKMARKS_IMPORT"/>
+  <int value="87" label="SYNCFILESYSTEM_DELETEFILESYSTEM"/>
+  <int value="88" label="DEBUGGER_SENDCOMMAND"/>
+  <int value="89" label="DEBUGGER_DETACH"/>
+  <int value="90" label="METRICSPRIVATE_RECORDSMALLCOUNT"/>
+  <int value="91" label="APP_CURRENTWINDOWINTERNAL_MINIMIZE"/>
+  <int value="92" label="DEVELOPERPRIVATE_AUTOUPDATE"/>
+  <int value="93" label="DNS_RESOLVE"/>
+  <int value="94" label="DELETED_EXPERIMENTAL_SYSTEMINFO_MEMORY_GET"/>
+  <int value="95" label="HISTORY_ADDURL"/>
+  <int value="96" label="TABS_GET"/>
+  <int value="97" label="BROWSERACTION_SETBADGETEXT"/>
+  <int value="98" label="TABS_RELOAD"/>
+  <int value="99" label="WINDOWS_CREATE"/>
+  <int value="100" label="DEVELOPERPRIVATE_LOADUNPACKED"/>
+  <int value="101" label="DELETED_DOWNLOADS_SETDESTINATION"/>
+  <int value="102" label="DELETED_EXPERIMENTAL_PROCESSES_GETPROCESSIDFORTAB"/>
+  <int value="103" label="BOOKMARKS_GETCHILDREN"/>
+  <int value="104" label="BROWSERACTION_GETTITLE"/>
+  <int value="105" label="TERMINALPRIVATE_OPENTERMINALPROCESS"/>
+  <int value="106" label="DELETED_SERIAL_CLOSE"/>
+  <int value="107" label="CONTEXTMENUS_REMOVE"/>
+  <int value="108" label="FILESYSTEM_REQUESTFILESYSTEM"/>
+  <int value="109" label="ECHOPRIVATE_GETREGISTRATIONCODE"/>
+  <int value="110" label="TABS_GETCURRENT"/>
+  <int value="111" label="FONTSETTINGS_CLEARDEFAULTFIXEDFONTSIZE"/>
+  <int value="112" label="MEDIAPLAYERPRIVATE_CLOSEWINDOW"/>
+  <int value="113" label="WEBREQUESTINTERNAL_ADDEVENTLISTENER"/>
+  <int value="114" label="DELETED_CLOUDPRINTPRIVATE_GETPRINTERS"/>
+  <int value="115" label="STORAGE_SET"/>
+  <int value="116" label="FONTSETTINGS_GETDEFAULTFONTSIZE"/>
+  <int value="117" label="EXTENSION_SETUPDATEURLDATA"/>
+  <int value="118" label="DELETED_SERIAL_WRITE"/>
+  <int value="119" label="IDLE_QUERYSTATE"/>
+  <int value="120" label="DELETED_EXPERIMENTAL_RLZ_GETACCESSPOINTRLZ"/>
+  <int value="121" label="WEBSTOREPRIVATE_SETSTORELOGIN"/>
+  <int value="122" label="DELETED_PAGEACTIONS_ENABLEFORTAB"/>
+  <int value="123" label="COOKIES_SET"/>
+  <int value="124" label="CONTENTSETTINGS_SET"/>
+  <int value="125" label="CONTEXTMENUS_REMOVEALL"/>
+  <int value="126" label="TABS_INSERTCSS"/>
+  <int value="127" label="WEBREQUEST_HANDLERBEHAVIORCHANGED"/>
+  <int value="128" label="INPUT_IME_SETCURSORPOSITION"/>
+  <int value="129" label="OMNIBOX_SENDSUGGESTIONS"/>
+  <int value="130" label="SYSTEMINDICATOR_ENABLE"/>
+  <int value="131" label="EVENTS_GETRULES"/>
+  <int value="132" label="BOOKMARKMANAGERPRIVATE_COPY"/>
+  <int value="133" label="SOCKET_RECVFROM"/>
+  <int value="134" label="TABS_GETALLINWINDOW"/>
+  <int value="135" label="CONTEXTMENUS_UPDATE"/>
+  <int value="136" label="BOOKMARKS_SEARCH"/>
+  <int value="137" label="EXPERIMENTAL_APP_CLEARALLNOTIFICATIONS"/>
+  <int value="138" label="DELETED_BLUETOOTH_GETLOCALOUTOFBANDPAIRINGDATA"/>
+  <int value="139" label="SYSTEMPRIVATE_GETUPDATESTATUS"/>
+  <int value="140" label="FONTSETTINGS_CLEARMINIMUMFONTSIZE"/>
+  <int value="141" label="DELETED_FILEMANAGERPRIVATE_GETFILELOCATIONS"/>
+  <int value="142" label="EXPERIMENTAL_DISCOVERY_SUGGEST"/>
+  <int value="143" label="FILEMANAGERPRIVATEINTERNAL_SETDEFAULTTASK"/>
+  <int value="144" label="BROWSERACTION_GETBADGETEXT"/>
+  <int value="145" label="APP_CURRENTWINDOWINTERNAL_HIDE"/>
+  <int value="146" label="SOCKET_CONNECT"/>
+  <int value="147" label="BOOKMARKS_GETSUBTREE"/>
+  <int value="148" label="HISTORY_DELETEURL"/>
+  <int value="149"
+      label="DELETED_EXPERIMENTAL_MEDIAGALLERIES_ASSEMBLEMEDIAFILE"/>
+  <int value="150" label="BOOKMARKMANAGERPRIVATE_STARTDRAG"/>
+  <int value="151" label="BROWSINGDATA_REMOVEPASSWORDS"/>
+  <int value="152" label="DELETED_DOWNLOADS_DRAG"/>
+  <int value="153" label="INPUT_IME_SETCOMPOSITION"/>
+  <int value="154" label="METRICSPRIVATE_RECORDUSERACTION"/>
+  <int value="155" label="USB_RELEASEINTERFACE"/>
+  <int value="156" label="PAGEACTION_GETPOPUP"/>
+  <int value="157" label="DELETED_SCRIPTBADGE_GETATTENTION"/>
+  <int value="158" label="FONTSETTINGS_GETFONTLIST"/>
+  <int value="159" label="PERMISSIONS_CONTAINS"/>
+  <int value="160" label="DELETED_SCRIPTBADGE_GETPOPUP"/>
+  <int value="161" label="ACCESSIBILITY_PRIVATE_GETFOCUSEDCONTROL"/>
+  <int value="162" label="DEVELOPERPRIVATE_GETSTRINGS"/>
+  <int value="163" label="METRICSPRIVATE_RECORDMEDIUMCOUNT"/>
+  <int value="164" label="MANAGEMENT_GET"/>
+  <int value="165" label="PERMISSIONS_GETALL"/>
+  <int value="166" label="DOWNLOADS_SHOW"/>
+  <int value="167" label="DELETED_EXPERIMENTAL_RLZ_CLEARPRODUCTSTATE"/>
+  <int value="168" label="TABS_REMOVE"/>
+  <int value="169" label="MANAGEMENT_GETPERMISSIONWARNINGSBYID"/>
+  <int value="170" label="WINDOWS_GET"/>
+  <int value="171" label="FILEMANAGERPRIVATEINTERNAL_EXECUTETASK"/>
+  <int value="172" label="TTS_GETVOICES"/>
+  <int value="173" label="MANAGEMENT_GETALL"/>
+  <int value="174" label="MANAGEMENT_GETPERMISSIONWARNINGSBYMANIFEST"/>
+  <int value="175" label="APP_CURRENTWINDOWINTERNAL_CLEARATTENTION"/>
+  <int value="176" label="AUTOTESTPRIVATE_SHUTDOWN"/>
+  <int value="177" label="FONTSETTINGS_CLEARDEFAULTFONTSIZE"/>
+  <int value="178" label="BOOKMARKS_GETTREE"/>
+  <int value="179" label="FILEMANAGERPRIVATE_SELECTFILES"/>
+  <int value="180" label="RUNTIME_GETBACKGROUNDPAGE"/>
+  <int value="181" label="DELETED_EXPERIMENTAL_RECORD_REPLAYURLS"/>
+  <int value="182" label="WEBSTOREPRIVATE_COMPLETEINSTALL"/>
+  <int value="183" label="DELETED_EXPERIMENTAL_SPEECHINPUT_START"/>
+  <int value="184" label="COOKIES_GETALL"/>
+  <int value="185" label="DOWNLOADS_GETFILEICON"/>
+  <int value="186" label="PAGEACTION_GETTITLE"/>
+  <int value="187" label="BROWSINGDATA_REMOVE"/>
+  <int value="188" label="DELETED_SERIAL_OPEN"/>
+  <int value="189" label="FILESYSTEM_GETDISPLAYPATH"/>
+  <int value="190" label="FILEMANAGERPRIVATE_FORMATVOLUME"/>
+  <int value="191" label="BOOKMARKS_GET"/>
+  <int value="192" label="DELETED_MANAGEDMODEPRIVATE_GET"/>
+  <int value="193" label="ALARMS_CLEAR"/>
+  <int value="194" label="SYNCFILESYSTEM_GETFILESYNCSTATUS"/>
+  <int value="195" label="SOCKET_GETINFO"/>
+  <int value="196" label="DELETED_WEBSTOREPRIVATE_INSTALLBUNDLE"/>
+  <int value="197" label="BROWSERACTION_ENABLE"/>
+  <int value="198" label="METRICSPRIVATE_RECORDMEDIUMTIME"/>
+  <int value="199" label="PAGEACTION_SETTITLE"/>
+  <int value="200" label="DELETED_CLOUDPRINTPRIVATE_GETHOSTNAME"/>
+  <int value="201" label="CONTENTSETTINGS_GETRESOURCEIDENTIFIERS"/>
+  <int value="202" label="SOCKET_CREATE"/>
+  <int value="203" label="DEVELOPERPRIVATE_RELOAD"/>
+  <int value="204" label="FILEMANAGERPRIVATE_GETVOLUMEMETADATALIST"/>
+  <int value="205" label="APP_RUNTIME_POSTINTENTRESPONSE"/>
+  <int value="206" label="DELETED_MANAGEDMODEPRIVATE_SETPOLICY"/>
+  <int value="207" label="WEBSTOREPRIVATE_BEGININSTALLWITHMANIFEST3"/>
+  <int value="208" label="DELETED_WALLPAPERPRIVATE_SETWALLPAPER"/>
+  <int value="209" label="USB_CONTROLTRANSFER"/>
+  <int value="210" label="DELETED_EXPERIMENTAL_SPEECHINPUT_STOP"/>
+  <int value="211" label="USB_BULKTRANSFER"/>
+  <int value="212" label="DELETED_FILEMANAGERPRIVATE_GETVOLUMEMETADATA"/>
+  <int value="213" label="PAGECAPTURE_SAVEASMHTML"/>
+  <int value="214" label="EXTENSION_ISALLOWEDINCOGNITOACCESS"/>
+  <int value="215" label="BROWSINGDATA_REMOVEAPPCACHE"/>
+  <int value="216" label="APP_CURRENTWINDOWINTERNAL_DRAWATTENTION"/>
+  <int value="217" label="METRICSPRIVATE_RECORDCOUNT"/>
+  <int value="218" label="USB_INTERRUPTTRANSFER"/>
+  <int value="219" label="TYPES_CHROMESETTING_CLEAR"/>
+  <int value="220" label="INPUT_IME_COMMITTEXT"/>
+  <int value="221" label="IDLTEST_SENDARRAYBUFFER"/>
+  <int value="222" label="DELETED_WALLPAPERPRIVATE_SETWALLPAPERIFEXISTS"/>
+  <int value="223" label="SOCKET_ACCEPT"/>
+  <int value="224" label="WEBNAVIGATION_GETFRAME"/>
+  <int value="225" label="EXPERIMENTAL_POWER_RELEASEKEEPAWAKE"/>
+  <int value="226" label="APP_CURRENTWINDOWINTERNAL_SETICON"/>
+  <int value="227" label="DELETED_PUSHMESSAGING_GETCHANNELID"/>
+  <int value="228" label="DELETED_EXPERIMENTAL_INFOBARS_SHOW"/>
+  <int value="229" label="INPUT_IME_SETCANDIDATEWINDOWPROPERTIES"/>
+  <int value="230" label="METRICSPRIVATE_RECORDPERCENTAGE"/>
+  <int value="231" label="TYPES_CHROMESETTING_GET"/>
+  <int value="232" label="WINDOWS_GETLASTFOCUSED"/>
+  <int value="233" label="DELETED_MANAGEDMODEPRIVATE_GETPOLICY"/>
+  <int value="234" label="STORAGE_CLEAR"/>
+  <int value="235" label="STORAGE_GETBYTESINUSE"/>
+  <int value="236" label="TABS_QUERY"/>
+  <int value="237" label="PAGEACTION_SETPOPUP"/>
+  <int value="238" label="DEVELOPERPRIVATE_INSPECT"/>
+  <int value="239" label="DOWNLOADS_SEARCH"/>
+  <int value="240" label="FONTSETTINGS_CLEARFONT"/>
+  <int value="241" label="WINDOWS_UPDATE"/>
+  <int value="242" label="DELETED_BOOKMARKMANAGERPRIVATE_CANOPENNEWWINDOWS"/>
+  <int value="243" label="SERIAL_FLUSH"/>
+  <int value="244" label="BROWSERACTION_SETTITLE"/>
+  <int value="245" label="BOOKMARKMANAGERPRIVATE_CANEDIT"/>
+  <int value="246" label="DELETED_WALLPAPERPRIVATE_SETCUSTOMWALLPAPER"/>
+  <int value="247" label="BOOKMARKS_REMOVE"/>
+  <int value="248" label="INPUT_IME_SETCANDIDATES"/>
+  <int value="249" label="TERMINALPRIVATE_CLOSETERMINALPROCESS"/>
+  <int value="250" label="HISTORY_DELETERANGE"/>
+  <int value="251" label="IDLTEST_GETARRAYBUFFER"/>
+  <int value="252" label="TERMINALPRIVATE_SENDINPUT"/>
+  <int value="253" label="TABS_HIGHLIGHT"/>
+  <int value="254" label="BLUETOOTH_STARTDISCOVERY"/>
+  <int value="255" label="FILEMANAGERPRIVATE_SELECTFILE"/>
+  <int value="256" label="WINDOWS_GETCURRENT"/>
+  <int value="257" label="DEBUGGER_ATTACH"/>
+  <int value="258" label="DELETED_WALLPAPERPRIVATE_SAVETHUMBNAIL"/>
+  <int value="259" label="INPUT_IME_KEYEVENTHANDLED"/>
+  <int value="260" label="FONTSETTINGS_SETDEFAULTFONTSIZE"/>
+  <int value="261" label="RUNTIME_REQUESTUPDATECHECK"/>
+  <int value="262" label="PAGEACTION_SETICON"/>
+  <int value="263" label="BROWSERACTION_SETBADGEBACKGROUNDCOLOR"/>
+  <int value="264" label="DELETED_DEVELOPERPRIVATE_GETITEMSINFO"/>
+  <int value="265" label="BLUETOOTH_STOPDISCOVERY"/>
+  <int value="266" label="COOKIES_REMOVE"/>
+  <int value="267" label="DELETED_EXPERIMENTAL_RLZ_SENDFINANCIALPING"/>
+  <int value="268" label="TABCAPTURE_GETCAPTUREDTABS"/>
+  <int value="269" label="WINDOWS_REMOVE"/>
+  <int value="270" label="DELETED_WALLPAPERPRIVATE_GETOFFLINEWALLPAPERLIST"/>
+  <int value="271" label="BROWSERACTION_GETBADGEBACKGROUNDCOLOR"/>
+  <int value="272" label="DELETED_PAGEACTIONS_DISABLEFORTAB"/>
+  <int value="273" label="DELETED_DEVELOPERPRIVATE_ALLOWFILEACCESS"/>
+  <int value="274" label="FILEMANAGERPRIVATE_REMOVEMOUNT"/>
+  <int value="275" label="DELETED_BLUETOOTH_CONNECT"/>
+  <int value="276" label="TABCAPTURE_CAPTURE"/>
+  <int value="277" label="NOTIFICATIONS_CREATE"/>
+  <int value="278" label="TABS_DUPLICATE"/>
+  <int value="279" label="DELETED_BLUETOOTH_WRITE"/>
+  <int value="280" label="PAGEACTION_SHOW"/>
+  <int value="281" label="DELETED_WALLPAPERPRIVATE_GETTHUMBNAIL"/>
+  <int value="282" label="DOWNLOADS_PAUSE"/>
+  <int value="283" label="PERMISSIONS_REQUEST"/>
+  <int value="284" label="TOPSITES_GET"/>
+  <int value="285" label="BROWSINGDATA_REMOVEDOWNLOADS"/>
+  <int value="286" label="BROWSINGDATA_REMOVELOCALSTORAGE"/>
+  <int value="287" label="DELETED_FILEBROWSERHANDLERINTERNAL_SELECTFILE"/>
+  <int value="288" label="INPUT_IME_UPDATEMENUITEMS"/>
+  <int value="289" label="FILEMANAGERPRIVATE_GETSTRINGS"/>
+  <int value="290" label="CONTENTSETTINGS_GET"/>
+  <int value="291" label="FONTSETTINGS_SETDEFAULTFIXEDFONTSIZE"/>
+  <int value="292" label="EXPERIMENTAL_APP_NOTIFY"/>
+  <int value="293" label="METRICSPRIVATE_RECORDLONGTIME"/>
+  <int value="294" label="SOCKET_READ"/>
+  <int value="295" label="DELETED_EXPERIMENTAL_PROCESSES_TERMINATE"/>
+  <int value="296" label="METRICSPRIVATE_RECORDTIME"/>
+  <int value="297" label="DELETED_BOOKMARKMANAGERPRIVATE_GETSTRINGS"/>
+  <int value="298" label="USB_ISOCHRONOUSTRANSFER"/>
+  <int value="299" label="PERMISSIONS_REMOVE"/>
+  <int value="300" label="MANAGEMENT_UNINSTALL"/>
+  <int value="301" label="I18N_GETACCEPTLANGUAGES"/>
+  <int value="302" label="MANAGEMENT_LAUNCHAPP"/>
+  <int value="303" label="INPUT_IME_CLEARCOMPOSITION"/>
+  <int value="304" label="ALARMS_GETALL"/>
+  <int value="305" label="DELETED_DIAL_DISCOVERNOW"/>
+  <int value="306" label="TYPES_CHROMESETTING_SET"/>
+  <int value="307" label="BROWSERACTION_SETICON"/>
+  <int value="308" label="ACCESSIBILITY_PRIVATE_SETACCESSIBILITYENABLED"/>
+  <int value="309" label="DELETED_FILEMANAGERPRIVATE_VIEWFILES"/>
+  <int value="310" label="DELETED_BLUETOOTH_GETSERVICES"/>
+  <int value="311" label="TABS_UPDATE"/>
+  <int value="312" label="BROWSINGDATA_REMOVEFORMDATA"/>
+  <int value="313" label="DELETED_FILEMANAGERPRIVATE_RELOADDRIVE"/>
+  <int value="314" label="ALARMS_GET"/>
+  <int value="315" label="BROWSINGDATA_REMOVEINDEXEDDB"/>
+  <int value="316" label="FILEMANAGERPRIVATEINTERNAL_ADDFILEWATCH"/>
+  <int value="317" label="CONTENTSETTINGS_CLEAR"/>
+  <int value="318" label="FILEMANAGERPRIVATE_GETPREFERENCES"/>
+  <int value="319" label="BOOKMARKMANAGERPRIVATE_PASTE"/>
+  <int value="320" label="FILESYSTEM_ISWRITABLEENTRY"/>
+  <int value="321" label="USB_SETINTERFACEALTERNATESETTING"/>
+  <int value="322" label="FONTSETTINGS_SETMINIMUMFONTSIZE"/>
+  <int value="323" label="BROWSERACTION_GETPOPUP"/>
+  <int value="324" label="SOCKET_DESTROY"/>
+  <int value="325" label="BLUETOOTH_GETDEVICES"/>
+  <int value="326" label="ALARMS_CLEARALL"/>
+  <int value="327" label="FONTSETTINGS_GETDEFAULTFIXEDFONTSIZE"/>
+  <int value="328" label="FILEMANAGERPRIVATEINTERNAL_ZIPSELECTION"/>
+  <int value="329" label="SYSTEMINDICATOR_DISABLE"/>
+  <int value="330" label="DELETED_SCRIPTBADGE_SETPOPUP"/>
+  <int value="331" label="EXTENSION_ISALLOWEDFILESCHEMEACCESS"/>
+  <int value="332" label="EXPERIMENTAL_IDENTITY_LAUNCHWEBAUTHFLOW"/>
+  <int value="333" label="FILEMANAGERPRIVATE_GETDRIVECONNECTIONSTATE"/>
+  <int value="334" label="TABS_DETECTLANGUAGE"/>
+  <int value="335" label="METRICSPRIVATE_RECORDVALUE"/>
+  <int value="336" label="BOOKMARKMANAGERPRIVATE_SORTCHILDREN"/>
+  <int value="337" label="DELETED_SERIAL_READ"/>
+  <int value="338" label="APP_CURRENTWINDOWINTERNAL_MAXIMIZE"/>
+  <int value="339" label="EXPERIMENTAL_DISCOVERY_CLEARALLSUGGESTIONS"/>
+  <int value="340" label="DELETED_MANAGEDMODEPRIVATE_ENTER"/>
+  <int value="341" label="DELETED_FILEMANAGERPRIVATE_TRANSFERFILE"/>
+  <int value="342" label="BROWSERACTION_SETPOPUP"/>
+  <int value="343" label="TABS_GETSELECTED"/>
+  <int value="344" label="FONTSETTINGS_GETFONT"/>
+  <int value="345" label="DELETED_BLUETOOTH_READ"/>
+  <int value="346" label="WEBREQUESTINTERNAL_EVENTHANDLED"/>
+  <int value="347" label="EVENTS_ADDRULES"/>
+  <int value="348" label="CONTEXTMENUS_CREATE"/>
+  <int value="349" label="MEDIAPLAYERPRIVATE_GETPLAYLIST"/>
+  <int value="350" label="DOWNLOADS_ERASE"/>
+  <int value="351" label="DELETED_EXPERIMENTAL_RECORD_CAPTUREURLS"/>
+  <int value="352" label="TTS_ISSPEAKING"/>
+  <int value="353" label="BOOKMARKS_REMOVETREE"/>
+  <int value="354" label="FILEMANAGERPRIVATE_SEARCHDRIVE"/>
+  <int value="355" label="DELETED_EXPERIMENTAL_SYSTEMINFO_CPU_GET"/>
+  <int value="356" label="FILEMANAGERPRIVATE_SETPREFERENCES"/>
+  <int value="357" label="FONTSETTINGS_SETFONT"/>
+  <int value="358" label="SOCKET_GETNETWORKLIST"/>
+  <int value="359" label="BOOKMARKS_MOVE"/>
+  <int value="360" label="DELETED_WALLPAPERPRIVATE_MINIMIZEINACTIVEWINDOWS"/>
+  <int value="361" label="STORAGE_REMOVE"/>
+  <int value="362" label="AUTOTESTPRIVATE_LOGINSTATUS"/>
+  <int value="363" label="TABS_CREATE"/>
+  <int value="364" label="FILEMANAGERPRIVATE_CANCELDIALOG"/>
+  <int value="365" label="BROWSINGDATA_REMOVECOOKIES"/>
+  <int value="366" label="FILESYSTEM_CHOOSEENTRY"/>
+  <int value="367" label="MEDIAPLAYERPRIVATE_PLAY"/>
+  <int value="368" label="WEBSTOREPRIVATE_GETWEBGLSTATUS"/>
+  <int value="369" label="SOCKET_SENDTO"/>
+  <int value="370" label="BROWSINGDATA_REMOVEFILESYSTEMS"/>
+  <int value="371" label="DELETED_WALLPAPERPRIVATE_GETSTRINGS"/>
+  <int value="372" label="BROWSINGDATA_REMOVECACHE"/>
+  <int value="373" label="BOOKMARKMANAGERPRIVATE_RECORDLAUNCH"/>
+  <int value="374" label="BROWSERACTION_DISABLE"/>
+  <int value="375" label="DELETED_EXPERIMENTAL_SPEECHINPUT_ISRECORDING"/>
+  <int value="376" label="APP_WINDOW_CREATE"/>
+  <int value="377" label="RUNTIME_RELOAD"/>
+  <int value="378" label="EXPERIMENTAL_POWER_REQUESTKEEPAWAKE"/>
+  <int value="379" label="SYSTEMINDICATOR_SETICON"/>
+  <int value="380" label="FILEMANAGERPRIVATE_ADDMOUNT"/>
+  <int value="381" label="APP_CURRENTWINDOWINTERNAL_FOCUS"/>
+  <int value="382" label="EVENTS_REMOVERULES"/>
+  <int value="383" label="DOWNLOADS_DOWNLOAD"/>
+  <int value="384" label="WINDOWS_GETALL"/>
+  <int value="385" label="DELETED_FILEMANAGERPRIVATE_TOGGLEFULLSCREEN"/>
+  <int value="386" label="APP_CURRENTWINDOWINTERNAL_RESTORE"/>
+  <int value="387" label="DELETED_WEBSOCKETPROXYPRIVATE_GETPASSPORTFORTCP"/>
+  <int value="388" label="PAGEACTION_HIDE"/>
+  <int value="389" label="DELETED_EXPERIMENTAL_SYSTEMINFO_STORAGE_GET"/>
+  <int value="390" label="DOWNLOADS_ACCEPTDANGER"/>
+  <int value="391" label="DELETED_WEBSOCKETPROXYPRIVATE_GETURLFORTCP"/>
+  <int value="392" label="FILEMANAGERPRIVATE_GETSIZESTATS"/>
+  <int value="393" label="DOWNLOADS_RESUME"/>
+  <int value="394" label="COOKIES_GETALLCOOKIESTORES"/>
+  <int value="395" label="DELETED_MEDIAGALLERIESPRIVATE_ADDGALLERYWATCH"/>
+  <int value="396" label="DELETED_MEDIAGALLERIESPRIVATE_REMOVEGALLERYWATCH"/>
+  <int value="397" label="DELETED_WEBVIEW_EXECUTESCRIPT"/>
+  <int value="398" label="NOTIFICATIONS_UPDATE"/>
+  <int value="399" label="NOTIFICATIONS_CLEAR"/>
+  <int value="400" label="DELETED_SESSIONRESTORE_GETRECENTLYCLOSED"/>
+  <int value="401" label="DELETED_SESSIONRESTORE_RESTORE"/>
+  <int value="402" label="MANAGEMENT_UNINSTALLSELF"/>
+  <int value="403" label="ECHOPRIVATE_GETOOBETIMESTAMP"/>
+  <int value="404" label="FILEMANAGERPRIVATEINTERNAL_VALIDATEPATHNAMELENGTH"/>
+  <int value="405" label="BROWSINGDATA_SETTINGS"/>
+  <int value="406" label="WEBSTOREPRIVATE_GETISLAUNCHERENABLED"/>
+  <int value="407" label="NETWORKINGPRIVATE_GETPROPERTIES"/>
+  <int value="408" label="NETWORKINGPRIVATE_GETVISIBLENETWORKS"/>
+  <int value="409" label="NETWORKINGPRIVATE_STARTCONNECT"/>
+  <int value="410" label="NETWORKINGPRIVATE_STARTDISCONNECT"/>
+  <int value="411" label="DELETED_MEDIAGALLERIESPRIVATE_GETALLGALLERYWATCH"/>
+  <int value="412" label="DELETED_MEDIAGALLERIESPRIVATE_REMOVEALLGALLERYWATCH"/>
+  <int value="413" label="FILEMANAGERPRIVATE_SEARCHDRIVEMETADATA"/>
+  <int value="414" label="DELETED_ECHOPRIVATE_CHECKALLOWREDEEMOFFERS"/>
+  <int value="415" label="DELETED_MEDIAGALLERIESPRIVATE_EJECTDEVICE"/>
+  <int value="416" label="FILEMANAGERPRIVATE_LOGOUTUSERFORREAUTHENTICATION"/>
+  <int value="417" label="DEVELOPERPRIVATE_CHOOSEPATH"/>
+  <int value="418" label="DEVELOPERPRIVATE_PACKDIRECTORY"/>
+  <int value="419" label="NETWORKINGPRIVATE_VERIFYDESTINATION"/>
+  <int value="420" label="NETWORKINGPRIVATE_VERIFYANDENCRYPTCREDENTIALS"/>
+  <int value="421" label="NETWORKINGPRIVATE_VERIFYANDENCRYPTDATA"/>
+  <int value="422" label="DEVELOPERPRIVATE_RESTART"/>
+  <int value="423" label="DELETED_DEVELOPERPRIVATE_ALLOWINCOGNITO"/>
+  <int value="424" label="INPUT_IME_DELETESURROUNDINGTEXT"/>
+  <int value="425" label="DELETED_FILEMANAGERPRIVATE_OPENNEWWINDOW"/>
+  <int value="426" label="DELETED_CLOUDPRINTPRIVATE_GETCLIENTID"/>
+  <int value="427" label="ECHOPRIVATE_GETUSERCONSENT"/>
+  <int value="428" label="SYNCFILESYSTEM_SETCONFLICTRESOLUTIONPOLICY"/>
+  <int value="429" label="SYNCFILESYSTEM_GETCONFLICTRESOLUTIONPOLICY"/>
+  <int value="430" label="NETWORKINGPRIVATE_SETPROPERTIES"/>
+  <int value="431" label="NETWORKINGPRIVATE_GETSTATE"/>
+  <int value="432" label="POWER_REQUESTKEEPAWAKE"/>
+  <int value="433" label="POWER_RELEASEKEEPAWAKE"/>
+  <int value="434" label="DELETED_WALLPAPERPRIVATE_SETCUSTOMWALLPAPERLAYOUT"/>
+  <int value="435" label="DOWNLOADSINTERNAL_DETERMINEFILENAME"/>
+  <int value="436" label="SYNCFILESYSTEM_GETFILESYNCSTATUSES"/>
+  <int value="437" label="DELETED_MEDIAGALLERIESPRIVATE_GETHANDLERS"/>
+  <int value="438" label="DELETED_WALLPAPERPRIVATE_RESETWALLPAPER"/>
+  <int value="439" label="DEVELOPERPRIVATE_PERMISSIONS"/>
+  <int value="440" label="WEBSTOREPRIVATE_ENABLEAPPLAUNCHER"/>
+  <int value="441" label="APP_CURRENTWINDOWINTERNAL_FULLSCREEN"/>
+  <int value="442" label="DEVELOPERPRIVATE_LOADUNPACKEDCROS"/>
+  <int value="443" label="NETWORKINGPRIVATE_REQUESTNETWORKSCAN"/>
+  <int value="444" label="ENTERPRISE_PLATFORMKEYSPRIVATE_CHALLENGEMACHINEKEY"/>
+  <int value="445" label="ENTERPRISE_PLATFORMKEYSPRIVATE_CHALLENGEUSERKEY"/>
+  <int value="446" label="DEVELOPERPRIVATE_LOADPROJECTTOSYNCFS"/>
+  <int value="447" label="DEVELOPERPRIVATE_GETPROJECTSINFO"/>
+  <int value="448" label="DEVELOPERPRIVATE_LOADPROJECT"/>
+  <int value="449" label="COMMANDLINEPRIVATE_HASSWITCH"/>
+  <int value="450" label="NETWORKINGPRIVATE_GETMANAGEDPROPERTIES"/>
+  <int value="451" label="DELETED_LOCATION_WATCHLOCATION"/>
+  <int value="452" label="DELETED_LOCATION_CLEARWATCH"/>
+  <int value="453" label="DELETED_BLUETOOTH_ADDPROFILE"/>
+  <int value="454" label="DELETED_BLUETOOTH_REMOVEPROFILE"/>
+  <int value="455" label="DELETED_BLUETOOTH_GETPROFILES"/>
+  <int value="456" label="EXPERIMENTAL_IDENTITY_REMOVECACHEDAUTHTOKEN"/>
+  <int value="457" label="DELETED_AUDIO_GETINFO"/>
+  <int value="458" label="AUDIO_SETACTIVEDEVICES"/>
+  <int value="459" label="AUDIO_SETPROPERTIES"/>
+  <int value="460" label="USB_RESETDEVICE"/>
+  <int value="461" label="SOCKET_MULTICAST_JOIN_GROUP"/>
+  <int value="462" label="SOCKET_MULTICAST_LEAVE_GROUP"/>
+  <int value="463" label="SOCKET_MULTICAST_SET_TIME_TO_LIVE"/>
+  <int value="464" label="SOCKET_MULTICAST_SET_LOOPBACK_MODE"/>
+  <int value="465" label="SOCKET_MULTICAST_GET_JOINED_GROUPS"/>
+  <int value="466" label="ACCESSIBILITY_PRIVATE_SETNATIVEACCESSIBILITYENABLED"/>
+  <int value="467" label="RUNTIME_GETPLATFORMINFO"/>
+  <int value="468" label="DELETED_WEBVIEW_INSERTCSS"/>
+  <int value="469" label="METRICSPRIVATE_GETISCRASHRECORDINGENABLED"/>
+  <int value="470" label="DELETED_IDENTITYPRIVATE_GETSTRINGS"/>
+  <int value="471" label="NOTIFICATIONS_GET_ALL"/>
+  <int value="472" label="USB_LISTINTERFACES"/>
+  <int value="473" label="FILESYSTEM_RETAINENTRY"/>
+  <int value="474" label="FILESYSTEM_ISRESTORABLE"/>
+  <int value="475" label="FILESYSTEM_RESTOREENTRY"/>
+  <int value="476" label="RUNTIME_SETUNINSTALLURL"/>
+  <int value="477" label="INPUTMETHODPRIVATE_STARTIME"/>
+  <int value="478" label="DELETED_MUSICMANAGERPRIVATE_GETDEVICEID"/>
+  <int value="479" label="TTS_PAUSE"/>
+  <int value="480" label="TTS_RESUME"/>
+  <int value="481" label="DELETED_SYSTEMINFO_CPU_GET"/>
+  <int value="482" label="DELETED_EXPERIMENTAL_SYSTEMINFO_STORAGE_ADDWATCH"/>
+  <int value="483" label="DELETED_EXPERIMENTAL_SYSTEMINFO_STORAGE_REMOVEWATCH"/>
+  <int value="484" label="DELETED_EXPERIMENTAL_SYSTEMINFO_STORAGE_GETALLWATCH"/>
+  <int value="485"
+      label="DELETED_EXPERIMENTAL_SYSTEMINFO_STORAGE_REMOVEALLWATCH"/>
+  <int value="486" label="DELETED_SYSTEMINFO_MEMORY_GET"/>
+  <int value="487" label="ACTIVITYLOGPRIVATE_GETEXTENSIONACTIVITIES"/>
+  <int value="488" label="RUNTIME_GETPACKAGEDIRECTORYENTRY"/>
+  <int value="489" label="DELETED_SYSTEMINFO_DISPLAY_SETDISPLAYPROPERTIES"/>
+  <int value="490" label="FEEDBACKPRIVATE_GETUSEREMAIL"/>
+  <int value="491" label="FEEDBACKPRIVATE_GETSYSTEMINFORMATION"/>
+  <int value="492" label="FEEDBACKPRIVATE_SENDFEEDBACK"/>
+  <int value="493" label="VIRTUALKEYBOARDPRIVATE_INSERTTEXT"/>
+  <int value="494" label="DIAGNOSTICS_SENDPACKET"/>
+  <int value="495" label="METRICSPRIVATE_GETFIELDTRIAL"/>
+  <int value="496" label="FILEMANAGERPRIVATE_ZOOM"/>
+  <int value="497" label="DELETED_WEBVIEW_GO"/>
+  <int value="498" label="WEBSTOREPRIVATE_ISININCOGNITOMODEFUNCTION"/>
+  <int value="499" label="DELETED_FILEMANAGERPRIVATE_REQUESTACCESSTOKEN"/>
+  <int value="500" label="DELETED_WEBVIEW_STOP"/>
+  <int value="501" label="DELETED_WEBVIEW_RELOAD"/>
+  <int value="502" label="DELETED_WEBVIEW_TERMINATE"/>
+  <int value="503" label="DELETED_TYPES_PRIVATE_CHROMEDIRECTSETTING_GET"/>
+  <int value="504" label="DELETED_TYPES_PRIVATE_CHROMEDIRECTSETTING_SET"/>
+  <int value="505" label="DELETED_TYPES_PRIVATE_CHROMEDIRECTSETTING_CLEAR"/>
+  <int value="506" label="DELETED_EXPERIMENTAL_SYSTEMINFO_STORAGE_EJECTDEVICE"/>
+  <int value="507" label="SYSTEM_CPU_GETINFO"/>
+  <int value="508" label="BOOKMARKMANAGERPRIVATE_REMOVETREES"/>
+  <int value="509" label="SYSTEM_DISPLAY_GETINFO"/>
+  <int value="510" label="SYSTEM_DISPLAY_SETDISPLAYPROPERTIES"/>
+  <int value="511" label="SYSTEM_MEMORY_GETINFO"/>
+  <int value="512" label="FILEMANAGERPRIVATEINTERNAL_GETSHAREURL"/>
+  <int value="513" label="SYSTEM_STORAGE_GETINFO"/>
+  <int value="514" label="SYSTEM_STORAGE_EJECTDEVICE"/>
+  <int value="515" label="DELETED_SYSTEM_STORAGE_ADDAVAILABLECAPACITYWATCH"/>
+  <int value="516" label="DELETED_SYSTEM_STORAGE_REMOVEAVAILABLECAPACITYWATCH"/>
+  <int value="517"
+      label="DELETED_SYSTEM_STORAGE_GETALLAVAILABLECAPACITYWATCHES"/>
+  <int value="518"
+      label="DELETED_SYSTEM_STORAGE_REMOVEALLAVAILABLECAPACITYWATCHES"/>
+  <int value="519" label="DOWNLOADS_REMOVEFILE"/>
+  <int value="520" label="DOWNLOADS_SHOWDEFAULTFOLDER"/>
+  <int value="521" label="DELETED_INFOBARS_SHOW"/>
+  <int value="522" label="DOWNLOADS_SETSHELFENABLED"/>
+  <int value="523" label="IMAGEWRITER_WRITEFROMURL"/>
+  <int value="524" label="IMAGEWRITER_WRITEFROMFILE"/>
+  <int value="525" label="IMAGEWRITER_CANCELWRITE"/>
+  <int value="526" label="IMAGEWRITER_DESTROYPARTITIONS"/>
+  <int value="527" label="DELETED_FEEDBACKPRIVATE_GETSTRINGS"/>
+  <int value="528" label="DELETED_LOGPRIVATE_GETHISTORICAL"/>
+  <int value="529" label="VIRTUALKEYBOARDPRIVATE_MOVECURSOR"/>
+  <int value="530" label="METRICSPRIVATE_GETVARIATIONPARAMS"/>
+  <int value="531" label="DELETED_WEBVIEW_SETPERMISSION"/>
+  <int value="532" label="DESKTOPCAPTURE_CHOOSEDESKTOPMEDIA"/>
+  <int value="533" label="APP_CURRENTWINDOWINTERNAL_SETSHAPE"/>
+  <int value="534" label="PROCESSES_GETPROCESSINFO"/>
+  <int value="535" label="PROCESSES_GETPROCESSIDFORTAB"/>
+  <int value="536" label="PROCESSES_TERMINATE"/>
+  <int value="537" label="SOCKETS_UDP_CREATE"/>
+  <int value="538" label="SOCKETS_UDP_UPDATE"/>
+  <int value="539" label="SOCKETS_UDP_BIND"/>
+  <int value="540" label="SOCKETS_UDP_SEND"/>
+  <int value="541" label="SOCKETS_UDP_CLOSE"/>
+  <int value="542" label="SOCKETS_UDP_GETINFO"/>
+  <int value="543" label="SOCKETS_UDP_GETSOCKETS"/>
+  <int value="544" label="SOCKETS_UDP_JOINGROUP"/>
+  <int value="545" label="SOCKETS_UDP_LEAVEGROUP"/>
+  <int value="546" label="SOCKETS_UDP_SETMULTICASTTIMETOLIVE"/>
+  <int value="547" label="SOCKETS_UDP_SETMULTICASTLOOPBACKMODE"/>
+  <int value="548" label="SOCKETS_UDP_GETJOINEDGROUPS"/>
+  <int value="549" label="DELETED_SIGNED_IN_DEVICES_GET"/>
+  <int value="550" label="AUTOTESTPRIVATE_SIMULATEASANMEMORYBUG"/>
+  <int value="551" label="DELETED_WEBVIEW_CLEARDATA"/>
+  <int value="552" label="SESSIONS_GETRECENTLYCLOSED"/>
+  <int value="553" label="SESSIONS_GETDEVICES"/>
+  <int value="554" label="SESSIONS_RESTORE"/>
+  <int value="555" label="SYNCFILESYSTEM_GETSERVICESTATUS"/>
+  <int value="556" label="ECHOPRIVATE_SETOFFERINFO"/>
+  <int value="557" label="ECHOPRIVATE_GETOFFERINFO"/>
+  <int value="558" label="DEVELOPERPRIVATE_ISPROFILEMANAGED"/>
+  <int value="559" label="DELETED_FILEMANAGERPRIVATE_INSTALLWEBSTOREITEM"/>
+  <int value="560" label="FILEMANAGERPRIVATEINTERNAL_STARTCOPY"/>
+  <int value="561" label="FILEMANAGERPRIVATE_CANCELCOPY"/>
+  <int value="562" label="NETWORKINGPRIVATE_CREATENETWORK"/>
+  <int value="563" label="BRAILLEDISPLAYPRIVATE_GETDISPLAYSTATE"/>
+  <int value="564" label="BRAILLEDISPLAYPRIVATE_WRITEDOTS"/>
+  <int value="565" label="USB_GETDEVICES"/>
+  <int value="566" label="USB_REQUESTACCESS"/>
+  <int value="567" label="USB_OPENDEVICE"/>
+  <int value="568" label="ACTIVITYLOGPRIVATE_DELETEDATABASE"/>
+  <int value="569" label="ACTIVITYLOGPRIVATE_DELETEURLS"/>
+  <int value="570" label="FILEMANAGERPRIVATE_REQUESTWEBSTOREACCESSTOKEN"/>
+  <int value="571" label="IMAGEWRITER_LISTREMOVABLESTORAGEDEVICES"/>
+  <int value="572" label="WALLPAPER_SETWALLPAPER"/>
+  <int value="573" label="VIRTUALKEYBOARDPRIVATE_HIDEKEYBOARD"/>
+  <int value="574" label="AUTOTESTPRIVATE_LOCKSCREEN"/>
+  <int value="575" label="WEBRTCLOGGINGPRIVATE_SETMETADATA"/>
+  <int value="576" label="WEBRTCLOGGINGPRIVATE_START"/>
+  <int value="577" label="WEBRTCLOGGINGPRIVATE_SETUPLOADONRENDERCLOSE"/>
+  <int value="578" label="WEBRTCLOGGINGPRIVATE_STOP"/>
+  <int value="579" label="WEBRTCLOGGINGPRIVATE_UPLOAD"/>
+  <int value="580" label="WEBRTCLOGGINGPRIVATE_DISCARD"/>
+  <int value="581" label="DELETED_WEBVIEW_OVERRIDEUSERAGENT"/>
+  <int value="582" label="DELETED_PRINCIPALSPRIVATE_SHOWAVATARBUBBLE"/>
+  <int value="583" label="DELETED_PRINCIPALSPRIVATE_SIGNOUT"/>
+  <int value="584" label="CAST_CHANNEL_OPEN"/>
+  <int value="585" label="CAST_CHANNEL_SEND"/>
+  <int value="586" label="CAST_CHANNEL_CLOSE"/>
+  <int value="587" label="RUNTIME_RESTART"/>
+  <int value="588" label="DESKTOPCAPTURE_CANCELCHOOSEDESKTOPMEDIA"/>
+  <int value="589" label="APP_CURRENTWINDOWINTERNAL_SETALWAYSONTOP"/>
+  <int value="590" label="SOCKETS_TCP_CREATE"/>
+  <int value="591" label="SOCKETS_TCP_UPDATE"/>
+  <int value="592" label="SOCKETS_TCP_SETPAUSED"/>
+  <int value="593" label="SOCKETS_TCP_SETKEEPALIVE"/>
+  <int value="594" label="SOCKETS_TCP_SETNODELAY"/>
+  <int value="595" label="SOCKETS_TCP_CONNECT"/>
+  <int value="596" label="SOCKETS_TCP_DISCONNECT"/>
+  <int value="597" label="SOCKETS_TCP_SEND"/>
+  <int value="598" label="SOCKETS_TCP_CLOSE"/>
+  <int value="599" label="SOCKETS_TCP_GETINFO"/>
+  <int value="600" label="SOCKETS_TCP_GETSOCKETS"/>
+  <int value="601" label="NETWORKINGPRIVATE_GETENABLEDNETWORKTYPES"/>
+  <int value="602" label="NETWORKINGPRIVATE_ENABLENETWORKTYPE"/>
+  <int value="603" label="NETWORKINGPRIVATE_DISABLENETWORKTYPE"/>
+  <int value="604" label="SOCKETS_TCP_SERVER_CREATE"/>
+  <int value="605" label="SOCKETS_TCP_SERVER_UPDATE"/>
+  <int value="606" label="SOCKETS_TCP_SERVER_SETPAUSED"/>
+  <int value="607" label="SOCKETS_TCP_SERVER_LISTEN"/>
+  <int value="608" label="SOCKETS_TCP_SERVER_DISCONNECT"/>
+  <int value="609" label="SOCKETS_TCP_SERVER_CLOSE"/>
+  <int value="610" label="SOCKETS_TCP_SERVER_GETINFO"/>
+  <int value="611" label="SOCKETS_TCP_SERVER_GETSOCKETS"/>
+  <int value="612" label="SYSTEM_STORAGE_GETAVAILABLECAPACITY"/>
+  <int value="613" label="BROWSERACTION_OPEN_POPUP"/>
+  <int value="614" label="WEBRTC_AUDIO_PRIVATE_GET_SINKS"/>
+  <int value="615" label="DELETED_WEBRTC_AUDIO_PRIVATE_GET_ACTIVE_SINK"/>
+  <int value="616" label="DELETED_WEBRTC_AUDIO_PRIVATE_SET_ACTIVE_SINK"/>
+  <int value="617" label="WEBRTC_AUDIO_PRIVATE_GET_ASSOCIATED_SINK"/>
+  <int value="618" label="VIRTUALKEYBOARDPRIVATE_KEYBOARDLOADED"/>
+  <int value="619" label="DELETED_APP_CURRENTWINDOWINTERNAL_SETMINWIDTH"/>
+  <int value="620" label="DELETED_APP_CURRENTWINDOWINTERNAL_SETMINHEIGHT"/>
+  <int value="621" label="DELETED_APP_CURRENTWINDOWINTERNAL_SETMAXWIDTH"/>
+  <int value="622" label="DELETED_APP_CURRENTWINDOWINTERNAL_SETMAXHEIGHT"/>
+  <int value="623" label="SYSTEMPRIVATE_GETAPIKEY"/>
+  <int value="624" label="CHROMEOSINFOPRIVATE_SET"/>
+  <int value="625" label="BOOKMARKMANAGERPRIVATE_GETMETAINFO"/>
+  <int value="626" label="BOOKMARKMANAGERPRIVATE_SETMETAINFO"/>
+  <int value="627" label="FILESYSTEMPROVIDER_MOUNT"/>
+  <int value="628" label="AUTOTESTPRIVATE_GETEXTENSIONSINFO"/>
+  <int value="629" label="DELETED_SCREENLOCKPRIVATE_GETLOCKED"/>
+  <int value="630" label="DELETED_SCREENLOCKPRIVATE_SETLOCKED"/>
+  <int value="631" label="DELETED_SCREENLOCKPRIVATE_SHOWMESSAGE"/>
+  <int value="632" label="FEEDBACKPRIVATE_GETHISTOGRAMS"/>
+  <int value="633" label="SYSTEM_NETWORK_GETNETWORKINTERFACES"/>
+  <int value="634" label="SERIAL_GETDEVICES"/>
+  <int value="635" label="SERIAL_UPDATE"/>
+  <int value="636" label="SERIAL_SETPAUSED"/>
+  <int value="637" label="SERIAL_GETINFO"/>
+  <int value="638" label="SERIAL_GETCONNECTIONS"/>
+  <int value="639" label="SERIAL_SEND"/>
+  <int value="640" label="GCM_REGISTER"/>
+  <int value="641" label="GCM_SEND"/>
+  <int value="642" label="SERIAL_CONNECT"/>
+  <int value="643" label="SERIAL_DISCONNECT"/>
+  <int value="644"
+      label="DELETED_MEDIAGALLERIES_GETALLMEDIAFILESYSTEMMETADATA"/>
+  <int value="645" label="FIRSTRUNPRIVATE_GETLOCALIZEDSTRINGS"/>
+  <int value="646" label="FIRSTRUNPRIVATE_LAUNCHTUTORIAL"/>
+  <int value="647" label="SOCKETS_UDP_SETPAUSED"/>
+  <int value="648" label="DELETED_WEBVIEW_CAPTUREVISIBLEREGION"/>
+  <int value="649" label="MEDIAGALLERIES_GETMETADATA"/>
+  <int value="650" label="INPUT_IME_SENDKEYEVENTS"/>
+  <int value="651" label="VIRTUALKEYBOARDPRIVATE_LOCKKEYBOARD"/>
+  <int value="652" label="DELETED_SCREENLOCKPRIVATE_SHOWCUSTOMICON"/>
+  <int value="653" label="INPUT_IME_HIDEINPUTVIEW"/>
+  <int value="654" label="BOOKMARKMANAGERPRIVATE_UNDO"/>
+  <int value="655" label="BOOKMARKMANAGERPRIVATE_REDO"/>
+  <int value="656" label="BOOKMARKMANAGERPRIVATE_UNDOINFO"/>
+  <int value="657" label="BOOKMARKMANAGERPRIVATE_REDOINFO"/>
+  <int value="658" label="MEDIAGALLERIES_ADDUSERSELECTEDFOLDER"/>
+  <int value="659"
+      label="DELETED_PREFERENCESPRIVATE_GETSYNCCATEGORIESWITHOUTPASSPHRASE"/>
+  <int value="660" label="DELETED_READINGLISTPRIVATE_ADDENTRY"/>
+  <int value="661" label="DELETED_READINGLISTPRIVATE_REMOVEENTRY"/>
+  <int value="662" label="DELETED_READINGLISTPRIVATE_GETENTRIES"/>
+  <int value="663" label="DELETED_MEDIAGALLERIES_STARTMEDIASCAN"/>
+  <int value="664" label="DELETED_MEDIAGALLERIES_CANCELMEDIASCAN"/>
+  <int value="665" label="DELETED_MEDIAGALLERIES_ADDSCANRESULTS"/>
+  <int value="666" label="DELETED_LOGPRIVATE_STARTNETINTERNALSWATCH"/>
+  <int value="667" label="DELETED_LOGPRIVATE_STOPNETINTERNALSWATCH"/>
+  <int value="668" label="FILEMANAGERPRIVATE_GETPROFILES"/>
+  <int value="669" label="DELETED_FILEMANAGERPRIVATE_VISITDESKTOP"/>
+  <int value="670" label="VIRTUALKEYBOARDPRIVATE_GETKEYBOARDCONFIG"/>
+  <int value="671" label="HID_GETDEVICES"/>
+  <int value="672" label="HID_CONNECT"/>
+  <int value="673" label="HID_DISCONNECT"/>
+  <int value="674" label="HID_RECEIVE"/>
+  <int value="675" label="HID_SEND"/>
+  <int value="676" label="HID_RECEIVEFEATUREREPORT"/>
+  <int value="677" label="HID_SENDFEATUREREPORT"/>
+  <int value="678" label="HOTWORDPRIVATE_SETENABLED"/>
+  <int value="679" label="HOTWORDPRIVATE_GETSTATUS"/>
+  <int value="680" label="DELETED_APP_CURRENTWINDOWINTERNAL_SETBADGEICON"/>
+  <int value="681" label="DELETED_APP_CURRENTWINDOWINTERNAL_CLEARBADGE"/>
+  <int value="682" label="DELETED_WEBVIEW_SETZOOM"/>
+  <int value="683" label="DELETED_WEBVIEW_GETZOOM"/>
+  <int value="684" label="DEVELOPERPRIVATE_REQUESTFILESOURCE"/>
+  <int value="685" label="DEVELOPERPRIVATE_OPENDEVTOOLS"/>
+  <int value="686" label="ACTIVITYLOGPRIVATE_DELETEACTIVITIES"/>
+  <int value="687" label="NETWORKINGPRIVATE_SETWIFITDLSENABLEDSTATE"/>
+  <int value="688" label="NETWORKINGPRIVATE_GETWIFITDLSSTATUS"/>
+  <int value="689" label="DELETED_SCREENLOCKPRIVATE_HIDECUSTOMICON"/>
+  <int value="690" label="DELETED_SCREENLOCKPRIVATE_SETAUTHTYPE"/>
+  <int value="691" label="DELETED_SCREENLOCKPRIVATE_GETAUTHTYPE"/>
+  <int value="692" label="DELETED_SCREENLOCKPRIVATE_ACCEPTAUTHATTEMPT"/>
+  <int value="693" label="DELETED_WEBVIEW_FIND"/>
+  <int value="694" label="DELETED_WEBVIEW_STOPFINDING"/>
+  <int value="695" label="DELETED_WEBVIEW_CONTEXTMENUSCREATE"/>
+  <int value="696" label="DELETED_WEBVIEW_CONTEXTMENUSUPDATE"/>
+  <int value="697" label="DELETED_WEBVIEW_CONTEXTMENUSREMOVE"/>
+  <int value="698" label="DELETED_WEBVIEW_CONTEXTMENUSREMOVEALL"/>
+  <int value="699" label="DELETED_AUTOMATIONINTERNAL_ENABLETAB"/>
+  <int value="700" label="APP_CURRENTWINDOWINTERNAL_SETSIZECONSTRAINTS"/>
+  <int value="701" label="BLUETOOTH_GETDEVICE"/>
+  <int value="702" label="GCM_UNREGISTER"/>
+  <int value="703"
+      label="DELETED_FILEMANAGERPRIVATEINTERNAL_REQUESTDRIVESHARE"/>
+  <int value="704" label="METRICSPRIVATE_RECORDSPARSEVALUE"/>
+  <int value="705" label="HOTWORDPRIVATE_SETAUDIOLOGGINGENABLED"/>
+  <int value="706" label="BLUETOOTHPRIVATE_SETADAPTERSTATE"/>
+  <int value="707" label="DELETED_BLUETOOTHPRIVATE_ENABLEPAIRING"/>
+  <int value="708" label="DELETED_BLUETOOTHPRIVATE_DISABLEPAIRING"/>
+  <int value="709" label="BLUETOOTHPRIVATE_SETPAIRINGRESPONSE"/>
+  <int value="710" label="NETWORKINGPRIVATE_GETCAPTIVEPORTALSTATUS"/>
+  <int value="711" label="AUTOMATIONINTERNAL_PERFORMACTION"/>
+  <int value="712" label="DELETED_BLUETOOTH_UPDATE_SOCKET"/>
+  <int value="713" label="DELETED_BLUETOOTH_SET_SOCKET_PAUSED"/>
+  <int value="714" label="DELETED_BLUETOOTH_GET_SOCKET"/>
+  <int value="715" label="DELETED_BLUETOOTH_GET_SOCKETS"/>
+  <int value="716" label="FILESYSTEMPROVIDER_UNMOUNT"/>
+  <int value="717" label="FILESYSTEMPROVIDERINTERNAL_UNMOUNTREQUESTEDSUCCESS"/>
+  <int value="718"
+      label="DELETED_FILESYSTEMPROVIDERINTERNAL_UNMOUNTREQUESTEDERROR"/>
+  <int value="719"
+      label="DELETED_MEDIAGALLERIES_DROPPERMISSIONFORMEDIAFILESYSTEM"/>
+  <int value="720" label="WEBCAMPRIVATE_SET"/>
+  <int value="721" label="WEBCAMPRIVATE_RESET"/>
+  <int value="722" label="WEBCAMPRIVATE_GET"/>
+  <int value="723" label="BLUETOOTHLOWENERGY_GETSERVICE"/>
+  <int value="724" label="BLUETOOTHLOWENERGY_GETSERVICES"/>
+  <int value="725" label="BLUETOOTHLOWENERGY_GETCHARACTERISTIC"/>
+  <int value="726" label="BLUETOOTHLOWENERGY_GETCHARACTERISTICS"/>
+  <int value="727" label="BLUETOOTHLOWENERGY_GETINCLUDEDSERVICES"/>
+  <int value="728" label="BLUETOOTHLOWENERGY_GETDESCRIPTOR"/>
+  <int value="729" label="BLUETOOTHLOWENERGY_GETDESCRIPTORS"/>
+  <int value="730" label="BLUETOOTHLOWENERGY_READCHARACTERISTICVALUE"/>
+  <int value="731" label="BLUETOOTHLOWENERGY_WRITECHARACTERISTICVALUE"/>
+  <int value="732" label="BLUETOOTHLOWENERGY_READDESCRIPTORVALUE"/>
+  <int value="733" label="BLUETOOTHLOWENERGY_WRITEDESCRIPTORVALUE"/>
+  <int value="734" label="BOOKMARKMANAGERPRIVATE_CREATEWITHMETAINFO"/>
+  <int value="735" label="BOOKMARKMANAGERPRIVATE_UPDATEMETAINFO"/>
+  <int value="736" label="BLUETOOTHSOCKET_CREATE"/>
+  <int value="737" label="BLUETOOTHSOCKET_UPDATE"/>
+  <int value="738" label="BLUETOOTHSOCKET_SETPAUSED"/>
+  <int value="739" label="BLUETOOTHSOCKET_LISTENUSINGRFCOMM"/>
+  <int value="740" label="BLUETOOTHSOCKET_LISTENUSINGINSECURERFCOMM"/>
+  <int value="741" label="BLUETOOTHSOCKET_LISTENUSINGL2CAP"/>
+  <int value="742" label="BLUETOOTHSOCKET_CONNECT"/>
+  <int value="743" label="BLUETOOTHSOCKET_DISCONNECT"/>
+  <int value="744" label="BLUETOOTHSOCKET_CLOSE"/>
+  <int value="745" label="BLUETOOTHSOCKET_SEND"/>
+  <int value="746" label="BLUETOOTHSOCKET_GETINFO"/>
+  <int value="747" label="BLUETOOTHSOCKET_GETSOCKETS"/>
+  <int value="748" label="DELETED_WEBSTOREPRIVATE_SIGNINFUNCTION"/>
+  <int value="749" label="DELETED_SHELL_CREATEWINDOW"/>
+  <int value="750"
+      label="FILESYSTEMPROVIDERINTERNAL_GETMETADATAREQUESTEDSUCCESS"/>
+  <int value="751"
+      label="DELETED_FILESYSTEMPROVIDERINTERNAL_GETMETADATAREQUESTEDERROR"/>
+  <int value="752" label="BROWSER_OPENTAB"/>
+  <int value="753" label="MANAGEMENT_CREATEAPPSHORTCUT"/>
+  <int value="754" label="DELETED_WEBVIEW_SHOWCONTEXTMENU"/>
+  <int value="755" label="WEBRTCLOGGINGPRIVATE_STARTRTPDUMP"/>
+  <int value="756" label="WEBRTCLOGGINGPRIVATE_STOPRTPDUMP"/>
+  <int value="757" label="AUTOMATIONINTERNAL_ENABLEDESKTOP"/>
+  <int value="758" label="HOTWORDPRIVATE_SETHOTWORDSESSIONSTATE"/>
+  <int value="759" label="HOTWORDPRIVATE_NOTIFYHOTWORDRECOGNITION"/>
+  <int value="760"
+      label="FILESYSTEMPROVIDERINTERNAL_READDIRECTORYREQUESTEDSUCCESS"/>
+  <int value="761"
+      label="DELETED_FILESYSTEMPROVIDERINTERNAL_READDIRECTORYREQUESTEDERROR"/>
+  <int value="762" label="DELETED_LEDGER_BATCHEXECUTE"/>
+  <int value="763"
+      label="DELETED_FILESYSTEMPROVIDERINTERNAL_OPENFILEREQUESTEDSUCCESS"/>
+  <int value="764"
+      label="DELETED_FILESYSTEMPROVIDERINTERNAL_OPENFILEREQUESTEDERROR"/>
+  <int value="765"
+      label="DELETED_FILESYSTEMPROVIDERINTERNAL_CLOSEFILEREQUESTEDSUCCESS"/>
+  <int value="766"
+      label="DELETED_FILESYSTEMPROVIDERINTERNAL_CLOSEFILEREQUESTEDERROR"/>
+  <int value="767" label="DELETED_SYNCEDNOTIFICATIONSPRIVATE_GETINITIALDATA"/>
+  <int value="768"
+      label="DELETED_SYNCEDNOTIFICATIONSPRIVATE_UPDATENOTIFICATION"/>
+  <int value="769" label="DELETED_SYNCEDNOTIFICATIONSPRIVATE_SETRENDERCONTEXT"/>
+  <int value="770" label="IDENTITY_GETACCOUNTS"/>
+  <int value="771" label="FILEMANAGERPRIVATE_RESOLVEISOLATEDENTRIES"/>
+  <int value="772" label="FILESYSTEMPROVIDERINTERNAL_READFILEREQUESTEDSUCCESS"/>
+  <int value="773"
+      label="DELETED_FILESYSTEMPROVIDERINTERNAL_READFILEREQUESTEDERROR"/>
+  <int value="774" label="NETWORKINGPRIVATE_GETNETWORKS"/>
+  <int value="775" label="DELETED_WEBVIEW_SETNAME"/>
+  <int value="776" label="ENTERPRISE_PLATFORMKEYSINTERNAL_GENERATEKEY"/>
+  <int value="777" label="PLATFORMKEYSINTERNAL_SIGN"/>
+  <int value="778" label="ENTERPRISE_PLATFORMKEYSINTERNAL_GETTOKENS"/>
+  <int value="779" label="ENTERPRISE_PLATFORMKEYS_GETCERTIFICATES"/>
+  <int value="780" label="ENTERPRISE_PLATFORMKEYS_IMPORTCERTIFICATE"/>
+  <int value="781" label="ENTERPRISE_PLATFORMKEYS_REMOVECERTIFICATE"/>
+  <int value="782" label="FILEMANAGERPRIVATE_OPENINSPECTOR"/>
+  <int value="783" label="DELETED_STREAMSPRIVATE_ABORT"/>
+  <int value="784" label="MANAGEMENT_SETLAUNCHTYPE"/>
+  <int value="785" label="MANAGEMENT_GENERATEAPPFORLINK"/>
+  <int value="786" label="DELETED_GUESTVIEWINTERNAL_ALLOCATEINSTANCEID"/>
+  <int value="787" label="DELETED_WEBVIEW_NAVIGATE"/>
+  <int value="788" label="INPUTMETHODPRIVATE_GETCURRENTINPUTMETHOD"/>
+  <int value="789" label="INPUTMETHODPRIVATE_SETCURRENTINPUTMETHOD"/>
+  <int value="790" label="INPUTMETHODPRIVATE_GETINPUTMETHODS"/>
+  <int value="791" label="IDENTITY_GETPROFILEUSERINFO"/>
+  <int value="792" label="VIRTUALKEYBOARDPRIVATE_OPENSETTINGS"/>
+  <int value="793" label="BLUETOOTHLOWENERGY_CONNECT"/>
+  <int value="794" label="BLUETOOTHLOWENERGY_DISCONNECT"/>
+  <int value="795" label="DELETED_WEBSTOREPRIVATE_GETEPHEMERALAPPSENABLED"/>
+  <int value="796" label="DELETED_WEBSTOREPRIVATE_LAUNCHEPHEMERALAPP"/>
+  <int value="797" label="FILESYSTEMPROVIDERINTERNAL_OPERATIONREQUESTEDERROR"/>
+  <int value="798"
+      label="FILESYSTEMPROVIDERINTERNAL_OPERATIONREQUESTEDSUCCESS"/>
+  <int value="799" label="GUESTVIEWINTERNAL_CREATEGUEST"/>
+  <int value="800" label="WEBVIEWINTERNAL_CAPTUREVISIBLEREGION"/>
+  <int value="801" label="WEBVIEWINTERNAL_CONTEXTMENUSCREATE"/>
+  <int value="802" label="WEBVIEWINTERNAL_CONTEXTMENUSREMOVE"/>
+  <int value="803" label="WEBVIEWINTERNAL_CONTEXTMENUSREMOVEALL"/>
+  <int value="804" label="WEBVIEWINTERNAL_CONTEXTMENUSUPDATE"/>
+  <int value="805" label="WEBVIEWINTERNAL_CLEARDATA"/>
+  <int value="806" label="WEBVIEWINTERNAL_EXECUTESCRIPT"/>
+  <int value="807" label="WEBVIEWINTERNAL_FIND"/>
+  <int value="808" label="WEBVIEWINTERNAL_GETZOOM"/>
+  <int value="809" label="WEBVIEWINTERNAL_GO"/>
+  <int value="810" label="WEBVIEWINTERNAL_INSERTCSS"/>
+  <int value="811" label="WEBVIEWINTERNAL_NAVIGATE"/>
+  <int value="812" label="WEBVIEWINTERNAL_OVERRIDEUSERAGENT"/>
+  <int value="813" label="WEBVIEWINTERNAL_RELOAD"/>
+  <int value="814" label="WEBVIEWINTERNAL_SETNAME"/>
+  <int value="815" label="WEBVIEWINTERNAL_SETPERMISSION"/>
+  <int value="816" label="WEBVIEWINTERNAL_SETZOOM"/>
+  <int value="817" label="WEBVIEWINTERNAL_SHOWCONTEXTMENU"/>
+  <int value="818" label="WEBVIEWINTERNAL_STOP"/>
+  <int value="819" label="WEBVIEWINTERNAL_STOPFINDING"/>
+  <int value="820" label="WEBVIEWINTERNAL_TERMINATE"/>
+  <int value="821" label="BLUETOOTHLOWENERGY_STARTCHARACTERISTICNOTIFICATIONS"/>
+  <int value="822" label="BLUETOOTHLOWENERGY_STOPCHARACTERISTICNOTIFICATIONS"/>
+  <int value="823" label="DELETED_GCDPRIVATE_GETCLOUDDEVICELIST"/>
+  <int value="824" label="DELETED_GCDPRIVATE_QUERYFORNEWLOCALDEVICES"/>
+  <int value="825" label="DELETED_GCDPRIVATE_PREFETCHWIFIPASSWORD"/>
+  <int value="826" label="DELETED_GCDPRIVATE_ESTABLISHSESSION"/>
+  <int value="827" label="DELETED_GCDPRIVATE_SENDMESSAGE"/>
+  <int value="828" label="DELETED_GCDPRIVATE_CONFIRMCODE"/>
+  <int value="829" label="DELETED_GCDPRIVATE_TERMINATESESSION"/>
+  <int value="830" label="TABS_SETZOOM"/>
+  <int value="831" label="TABS_GETZOOM"/>
+  <int value="832" label="TABS_SETZOOMSETTINGS"/>
+  <int value="833" label="TABS_GETZOOMSETTINGS"/>
+  <int value="834" label="DELETED_GCDPRIVATE_GETCOMMANDDEFINITIONS"/>
+  <int value="835" label="DELETED_GCDPRIVATE_INSERTCOMMAND"/>
+  <int value="836" label="DELETED_GCDPRIVATE_GETCOMMAND"/>
+  <int value="837" label="DELETED_GCDPRIVATE_CANCELCOMMAND"/>
+  <int value="838" label="DELETED_GCDPRIVATE_GETCOMMANDSLIST"/>
+  <int value="839" label="APPVIEWINTERNAL_ATTACHFRAME"/>
+  <int value="840" label="APPVIEWINTERNAL_DENYREQUEST"/>
+  <int value="841" label="FILEMANAGERPRIVATEINTERNAL_GETDOWNLOADURL"/>
+  <int value="842" label="DELETED_EASYUNLOCKPRIVATE_PERFORMECDHKEYAGREEMENT"/>
+  <int value="843" label="DELETED_EASYUNLOCKPRIVATE_GENERATEECP256KEYPAIR"/>
+  <int value="844" label="DELETED_EASYUNLOCKPRIVATE_CREATESECUREMESSAGE"/>
+  <int value="845" label="DELETED_EASYUNLOCKPRIVATE_UNWRAPSECUREMESSAGE"/>
+  <int value="846" label="DELETED_LOGPRIVATE_STARTEVENTRECODER"/>
+  <int value="847" label="DELETED_LOGPRIVATE_STOPEVENTRECODER"/>
+  <int value="848" label="DELETED_LOGPRIVATE_DUMPLOGS"/>
+  <int value="849" label="SOCKET_SECURE"/>
+  <int value="850" label="SOCKETS_TCP_SECURE"/>
+  <int value="851" label="DELETED_EXPERIENCESAMPLINGPRIVATE_GETBROWSERINFO"/>
+  <int value="852"
+      label="DELETED_EASYUNLOCKPRIVATE_SEEKBLUETOOTHDEVICEBYADDRESS"/>
+  <int value="853" label="DELETED_EASYUNLOCKPRIVATE_GETSTRINGS"/>
+  <int value="854" label="DELETED_NOTIFICATIONPROVIDER_SENDONCLEAR"/>
+  <int value="855" label="DELETED_NOTIFICATIONPROVIDER_NOTIFYONCLEARED"/>
+  <int value="856" label="DELETED_NOTIFICATIONPROVIDER_NOTIFYONCLICKED"/>
+  <int value="857" label="DELETED_NOTIFICATIONPROVIDER_NOTIFYONBUTTONCLICKED"/>
+  <int value="858"
+      label="DELETED_NOTIFICATIONPROVIDER_NOTIFYONPERMISSIONLEVELCHANGED"/>
+  <int value="859" label="DELETED_NOTIFICATIONPROVIDER_NOTIFYONSHOWSETTINGS"/>
+  <int value="860" label="DELETED_NOTIFICATIONPROVIDER_GETNOTIFIER"/>
+  <int value="861" label="DELETED_NOTIFICATIONPROVIDER_GETALLNOTIFIERS"/>
+  <int value="862" label="DELETED_GCDPRIVATE_GETPREFETCHEDWIFINAMELIST"/>
+  <int value="863" label="GUESTVIEWINTERNAL_SETAUTOSIZE"/>
+  <int value="864" label="DELETED_COPRESENCEPRIVATE_SENDFOUND"/>
+  <int value="865" label="DELETED_COPRESENCEPRIVATE_SENDSAMPLES"/>
+  <int value="866" label="DELETED_COPRESENCEPRIVATE_SENDDETECT"/>
+  <int value="867" label="DELETED_COPRESENCEPRIVATE_SENDINITIALIZED"/>
+  <int value="868" label="DELETED_COPRESENCE_EXECUTE"/>
+  <int value="869" label="DELETED_COPRESENCE_SETAPIKEY"/>
+  <int value="870" label="DELETED_FILESYSTEM_OBSERVEDIRECTORY"/>
+  <int value="871" label="DELETED_FILESYSTEM_UNOBSERVEENTRY"/>
+  <int value="872" label="DELETED_FILESYSTEM_GETOBSERVEDENTRIES"/>
+  <int value="873" label="BROWSINGDATA_REMOVESERVICEWORKERS"/>
+  <int value="874" label="DELETED_USBPRIVATE_GETDEVICES"/>
+  <int value="875" label="DELETED_USBPRIVATE_GETDEVICEINFO"/>
+  <int value="876" label="DELETED_EASYUNLOCKPRIVATE_UPDATESCREENLOCKSTATE"/>
+  <int value="877" label="CAST_CHANNEL_GETLOGS"/>
+  <int value="878" label="DELETED_EASYUNLOCKPRIVATE_SETPERMITACCESS"/>
+  <int value="879" label="DELETED_EASYUNLOCKPRIVATE_GETPERMITACCESS"/>
+  <int value="880" label="DELETED_EASYUNLOCKPRIVATE_CLEARPERMITACCESS"/>
+  <int value="881" label="DELETED_EASYUNLOCKPRIVATE_SETREMOTEDEVICES"/>
+  <int value="882" label="DELETED_EASYUNLOCKPRIVATE_GETREMOTEDEVICES"/>
+  <int value="883" label="FILESYSTEMPROVIDER_GETALL"/>
+  <int value="884"
+      label="DELETED_EASYUNLOCKPRIVATE_CONNECTTOBLUETOOTHSERVICEINSECURELY"/>
+  <int value="885" label="MEDIAGALLERIES_ADDGALLERYWATCH"/>
+  <int value="886" label="MEDIAGALLERIES_REMOVEGALLERYWATCH"/>
+  <int value="887" label="DELETED_MEDIAGALLERIES_GETALLGALLERYWATCH"/>
+  <int value="888" label="DELETED_MEDIAGALLERIES_REMOVEALLGALLERYWATCH"/>
+  <int value="889" label="MANAGEMENT_GETSELF"/>
+  <int value="890" label="APP_CURRENTWINDOWINTERNAL_SETVISIBLEONALLWORKSPACES"/>
+  <int value="891" label="DELETED_EASYUNLOCKPRIVATE_GETSIGNINCHALLENGE"/>
+  <int value="892" label="DELETED_EASYUNLOCKPRIVATE_TRYSIGNINSECRET"/>
+  <int value="893" label="ACCESSIBILITY_PRIVATE_SETFOCUSRING"/>
+  <int value="894" label="USB_GETCONFIGURATION"/>
+  <int value="895" label="WEBVIEWINTERNAL_SETALLOWTRANSPARENCY"/>
+  <int value="896" label="DELETED_EASYUNLOCKPRIVATE_GETUSERINFO"/>
+  <int value="897" label="HOTWORDPRIVATE_GETLAUNCHSTATE"/>
+  <int value="898" label="HOTWORDPRIVATE_SETHOTWORDALWAYSONSEARCHENABLED"/>
+  <int value="899" label="WEBVIEWINTERNAL_LOADDATAWITHBASEURL"/>
+  <int value="900" label="DELETED_GUESTVIEWINTERNAL_DESTROYGUEST"/>
+  <int value="901" label="DELETED_COPRESENCESOCKET_CREATEPEER"/>
+  <int value="902" label="DELETED_COPRESENCESOCKET_DESTROYPEER"/>
+  <int value="903" label="DELETED_COPRESENCESOCKET_SEND"/>
+  <int value="904" label="DELETED_COPRESENCESOCKET_DISCONNECT"/>
+  <int value="905" label="DELETED_BOOKMARKMANAGERPRIVATE_SETVERSION"/>
+  <int value="906" label="FILESYSTEMPROVIDER_NOTIFY"/>
+  <int value="907" label="USB_GETUSERSELECTEDDEVICES"/>
+  <int value="908" label="INPUTMETHODPRIVATE_GETINPUTMETHODCONFIG"/>
+  <int value="909" label="DELETED_WALLPAPERPRIVATE_GETSYNCSETTING"/>
+  <int value="910" label="DELETED_COPRESENCE_SETAUTHTOKEN"/>
+  <int value="911" label="CAST_CHANNEL_SETAUTHORITYKEYS"/>
+  <int value="912" label="HOTWORDPRIVATE_STARTTRAINING"/>
+  <int value="913" label="HOTWORDPRIVATE_FINALIZESPEAKERMODEL"/>
+  <int value="914" label="HOTWORDPRIVATE_STOPTRAINING"/>
+  <int value="915" label="DELETED_GCDPRIVATE_STARTPAIRING"/>
+  <int value="916" label="VPNPROVIDER_CREATECONFIG"/>
+  <int value="917" label="VPNPROVIDER_DESTROYCONFIG"/>
+  <int value="918" label="VPNPROVIDER_SETPARAMETERS"/>
+  <int value="919" label="VPNPROVIDER_SENDPACKET"/>
+  <int value="920" label="VPNPROVIDER_NOTIFYCONNECTIONSTATECHANGED"/>
+  <int value="921" label="DOCUMENTSCAN_SCAN"/>
+  <int value="922" label="DELETED_EASYUNLOCKPRIVATE_GETUSERIMAGE"/>
+  <int value="923" label="HOTWORDPRIVATE_NOTIFYSPEAKERMODELSAVED"/>
+  <int value="924" label="HOTWORDPRIVATE_GETLOCALIZEDSTRINGS"/>
+  <int value="925" label="HOTWORDPRIVATE_SETAUDIOHISTORYENABLED"/>
+  <int value="926" label="HOTWORDPRIVATE_GETAUDIOHISTORYENABLED"/>
+  <int value="927"
+      label="DELETED_APP_CURRENTWINDOWINTERNAL_SETINTERCEPTALLKEYS"/>
+  <int value="928" label="DELETED_LAUNCHERPAGE_PUSHSUBPAGE"/>
+  <int value="929" label="DELETED_LAUNCHERPAGE_SHOW"/>
+  <int value="930" label="AUTOTESTPRIVATE_SETTOUCHPADSENSITIVITY"/>
+  <int value="931" label="AUTOTESTPRIVATE_SETTAPTOCLICK"/>
+  <int value="932" label="AUTOTESTPRIVATE_SETTHREEFINGERCLICK"/>
+  <int value="933" label="AUTOTESTPRIVATE_SETTAPDRAGGING"/>
+  <int value="934" label="AUTOTESTPRIVATE_SETNATURALSCROLL"/>
+  <int value="935" label="AUTOTESTPRIVATE_SETMOUSESENSITIVITY"/>
+  <int value="936" label="AUTOTESTPRIVATE_SETPRIMARYBUTTONRIGHT"/>
+  <int value="937" label="DELETED_COPRESENCEENDPOINTS_CREATELOCALENDPOINT"/>
+  <int value="938" label="DELETED_COPRESENCEENDPOINTS_DESTROYLOCALENDPOINT"/>
+  <int value="939" label="DELETED_COPRESENCEENDPOINTS_SEND"/>
+  <int value="940" label="DELETED_INLINE_INSTALL_PRIVATE_INSTALL"/>
+  <int value="941" label="DELETED_LAUNCHERPAGE_SETENABLED"/>
+  <int value="942" label="DELETED_CRYPTOTOKENPRIVATE_REQUESTPERMISSION"/>
+  <int value="943" label="BLUETOOTHPRIVATE_DISCONNECTALL"/>
+  <int value="944" label="FILEMANAGERPRIVATEINTERNAL_GETMIMETYPE"/>
+  <int value="945" label="USB_SETCONFIGURATION"/>
+  <int value="946" label="DELETED_EASYUNLOCKPRIVATE_GETCONNECTIONINFO"/>
+  <int value="947" label="FILEMANAGERPRIVATEINTERNAL_COMPUTECHECKSUM"/>
+  <int value="948" label="PRINTERPROVIDERINTERNAL_REPORTPRINTRESULT"/>
+  <int value="949" label="PRINTERPROVIDERINTERNAL_REPORTPRINTERCAPABILITY"/>
+  <int value="950" label="PRINTERPROVIDERINTERNAL_REPORTPRINTERS"/>
+  <int value="951" label="FILESYSTEMPROVIDER_GET"/>
+  <int value="952" label="FILEMANAGERPRIVATE_SEARCHFILESBYHASHES"/>
+  <int value="953" label="DELETED_EASYUNLOCKPRIVATE_SHOWERRORBUBBLE"/>
+  <int value="954" label="DELETED_EXTENSIONVIEWINTERNAL_NAVIGATE"/>
+  <int value="955" label="DELETED_NETWORKING_CONFIG_SETNETWORKFILTER"/>
+  <int value="956" label="DELETED_NETWORKING_CONFIG_FINISHAUTHENTICATION"/>
+  <int value="957" label="PLATFORMKEYSINTERNAL_SELECTCLIENTCERTIFICATES"/>
+  <int value="958" label="DELETED_CRYPTOTOKENPRIVATE_CANORIGINASSERTAPPID"/>
+  <int value="959" label="DELETED_EASYUNLOCKPRIVATE_SETAUTOPAIRINGRESULT"/>
+  <int value="960" label="DELETED_FILEMANAGERPRIVATE_ISUMAENABLED"/>
+  <int value="961" label="WEBVIEWINTERNAL_SETALLOWSCALING"/>
+  <int value="962" label="PLATFORMKEYSINTERNAL_GETPUBLICKEY"/>
+  <int value="963" label="RUNTIME_OPENOPTIONSPAGE"/>
+  <int value="964" label="DELETED_AUDIOMODEM_TRANSMIT"/>
+  <int value="965" label="DELETED_AUDIOMODEM_STOPTRANSMIT"/>
+  <int value="966" label="DELETED_AUDIOMODEM_RECEIVE"/>
+  <int value="967" label="DELETED_AUDIOMODEM_STOPRECEIVE"/>
+  <int value="968" label="WEBRTCLOGGINGPRIVATE_STORE"/>
+  <int value="969" label="WEBRTCLOGGINGPRIVATE_UPLOADSTORED"/>
+  <int value="970" label="FILEMANAGERPRIVATEINTERNAL_SETENTRYTAG"/>
+  <int value="971" label="INPUTMETHODPRIVATE_FETCHALLDICTIONARYWORDS"/>
+  <int value="972" label="INPUTMETHODPRIVATE_ADDWORDTODICTIONARY"/>
+  <int value="973"
+      label="DASHBOARDPRIVATE_SHOWPERMISSIONPROMPTFORDELEGATEDINSTALL"/>
+  <int value="974" label="PRINTERPROVIDERINTERNAL_GETPRINTDATA"/>
+  <int value="975" label="VIRTUALKEYBOARDPRIVATE_SETMODE"/>
+  <int value="976" label="NETWORKINGPRIVATE_STARTACTIVATE"/>
+  <int value="977" label="FILEMANAGERPRIVATE_GRANTACCESS"/>
+  <int value="978" label="DEVELOPERPRIVATE_GETEXTENSIONSINFO"/>
+  <int value="979" label="DEVELOPERPRIVATE_GETEXTENSIONINFO"/>
+  <int value="980" label="FILEMANAGERPRIVATE_ENABLEEXTERNALFILESCHEME"/>
+  <int value="981" label="DEVELOPERPRIVATE_UPDATEEXTENSIONCONFIGURATION"/>
+  <int value="982" label="DEVELOPERPRIVATE_DELETEEXTENSIONERRORS"/>
+  <int value="983" label="FILEMANAGERPRIVATE_ISPIEXLOADERENABLED"/>
+  <int value="984" label="HOTWORDPRIVATE_SPEAKERMODELEXISTSRESULT"/>
+  <int value="985" label="SETTINGSPRIVATE_SETPREF"/>
+  <int value="986" label="DELETED_SETTINGSPRIVATE_SETDOUBLEPREF"/>
+  <int value="987" label="DELETED_SETTINGSPRIVATE_SETSTRINGPREF"/>
+  <int value="988" label="DELETED_SETTINGSPRIVATE_SETURLPREF"/>
+  <int value="989" label="SETTINGSPRIVATE_GETALLPREFS"/>
+  <int value="990" label="SETTINGSPRIVATE_GETPREF"/>
+  <int value="991" label="NETWORKINGPRIVATE_FORGETNETWORK"/>
+  <int value="992" label="DELETED_EASYUNLOCKPRIVATE_HIDEERRORBUBBLE"/>
+  <int value="993" label="WEBVIEWINTERNAL_SETZOOMMODE"/>
+  <int value="994" label="WEBVIEWINTERNAL_GETZOOMMODE"/>
+  <int value="995" label="DELETED_LAUNCHERSEARCHPROVIDER_SETSEARCHRESULTS"/>
+  <int value="996" label="DELETED_DATAREDUCTIONPROXY_CLEARDATASAVINGS"/>
+  <int value="997" label="BLUETOOTHPRIVATE_SETDISCOVERYFILTER"/>
+  <int value="998" label="FILESYSTEM_GETVOLUMELIST"/>
+  <int value="999" label="NETWORKINGPRIVATE_GETDEVICESTATES"/>
+  <int value="1000" label="DEVELOPERPRIVATE_GETPROFILECONFIGURATION"/>
+  <int value="1001" label="DEVELOPERPRIVATE_UPDATEPROFILECONFIGURATION"/>
+  <int value="1002" label="SOCKETS_UDP_SETBROADCAST"/>
+  <int value="1003" label="FILEMANAGERPRIVATE_GETPROVIDERS"/>
+  <int value="1004" label="WEBVIEWINTERNAL_ADDCONTENTSCRIPTS"/>
+  <int value="1005" label="WEBVIEWINTERNAL_REMOVECONTENTSCRIPTS"/>
+  <int value="1006" label="DEVELOPERPRIVATE_REPAIREXTENSION"/>
+  <int value="1007" label="DEVELOPERPRIVATE_SHOWOPTIONS"/>
+  <int value="1008" label="DEVELOPERPRIVATE_SHOWPATH"/>
+  <int value="1009" label="FILEMANAGERPRIVATE_ADDPROVIDEDFILESYSTEM"/>
+  <int value="1010" label="FILEMANAGERPRIVATE_CONFIGUREVOLUME"/>
+  <int value="1011" label="DELETED_SEARCHENGINESPRIVATE_GETSEARCHENGINES"/>
+  <int value="1012"
+      label="DELETED_SEARCHENGINESPRIVATE_SETSELECTEDSEARCHENGINE"/>
+  <int value="1013" label="AUTOFILLPRIVATE_SAVEADDRESS"/>
+  <int value="1014" label="AUTOFILLPRIVATE_GETADDRESSCOMPONENTS"/>
+  <int value="1015" label="AUTOFILLPRIVATE_SAVECREDITCARD"/>
+  <int value="1016" label="AUTOFILLPRIVATE_REMOVEENTRY"/>
+  <int value="1017" label="DELETED_AUTOFILLPRIVATE_VALIDATEPHONENUMBERS"/>
+  <int value="1018" label="AUTOFILLPRIVATE_MASKCREDITCARD"/>
+  <int value="1019" label="INSTANCEID_GETID"/>
+  <int value="1020" label="INSTANCEID_GETCREATIONTIME"/>
+  <int value="1021" label="INSTANCEID_GETTOKEN"/>
+  <int value="1022" label="INSTANCEID_DELETETOKEN"/>
+  <int value="1023" label="INSTANCEID_DELETEID"/>
+  <int value="1024" label="DELETED_GCDPRIVATE_GETDEVICEINFO"/>
+  <int value="1025" label="DELETED_SEARCHENGINESPRIVATE_GETHOTWORDSTATE"/>
+  <int value="1026" label="DELETED_SEARCHENGINESPRIVATE_ADDOTHERSEARCHENGINE"/>
+  <int value="1027" label="DELETED_SEARCHENGINESPRIVATE_REMOVESEARCHENGINE"/>
+  <int value="1028" label="DELETED_SEARCHENGINESPRIVATE_UPDATESEARCHENGINE"/>
+  <int value="1029" label="DELETED_SEARCHENGINESPRIVATE_OPTINTOHOTWORDING"/>
+  <int value="1030" label="DELETED_WEBSTOREWIDGETPRIVATE_INSTALLWEBSTOREITEM"/>
+  <int value="1031" label="DELETED_WEBSTOREWIDGETPRIVATE_GETSTRINGS"/>
+  <int value="1032" label="WEBRTCDESKTOPCAPTUREPRIVATE_CHOOSEDESKTOPMEDIA"/>
+  <int value="1033"
+      label="WEBRTCDESKTOPCAPTUREPRIVATE_CANCELCHOOSEDESKTOPMEDIA"/>
+  <int value="1034" label="BLUETOOTHLOWENERGY_REGISTERADVERTISEMENT"/>
+  <int value="1035" label="BLUETOOTHLOWENERGY_UNREGISTERADVERTISEMENT"/>
+  <int value="1036"
+      label="DELETED_PASSWORDSPRIVATE_CANPASSWORDACCOUNTBEMANAGED"/>
+  <int value="1037" label="PASSWORDSPRIVATE_REMOVECREDENTIAL"/>
+  <int value="1038" label="PASSWORDSPRIVATE_REMOVEPASSWORDEXCEPTION"/>
+  <int value="1039" label="PASSWORDSPRIVATE_REQUESTPLAINTEXTPASSWORD"/>
+  <int value="1040" label="DELETED_LAUNCHERPAGE_HIDE"/>
+  <int value="1041" label="PLATFORMKEYS_VERIFYTLSSERVERCERTIFICATE"/>
+  <int value="1042" label="DEVELOPERPRIVATE_SETSHORTCUTHANDLINGSUSPENDED"/>
+  <int value="1043" label="DEVELOPERPRIVATE_UPDATEEXTENSIONCOMMAND"/>
+  <int value="1044" label="DELETED_INPUTMETHODPRIVATE_GETENCRYPTSYNCENABLED"/>
+  <int value="1045" label="USERSPRIVATE_GETUSERS"/>
+  <int value="1046" label="USERSPRIVATE_ADDUSER"/>
+  <int value="1047" label="USERSPRIVATE_REMOVEUSER"/>
+  <int value="1048" label="USERSPRIVATE_ISCURRENTUSEROWNER"/>
+  <int value="1049" label="USERSPRIVATE_ISUSERLISTMANAGED"/>
+  <int value="1050" label="PRINTERPROVIDERINTERNAL_REPORTUSBPRINTERINFO"/>
+  <int value="1051" label="WEBCAMPRIVATE_OPENSERIALWEBCAM"/>
+  <int value="1052" label="WEBCAMPRIVATE_CLOSEWEBCAM"/>
+  <int value="1053" label="SERIAL_SETBREAK"/>
+  <int value="1054" label="SERIAL_CLEARBREAK"/>
+  <int value="1055" label="DELETED_EXTENSIONVIEWINTERNAL_LOADSRC"/>
+  <int value="1056" label="DELETED_EXTENSIONVIEWINTERNAL_PARSESRC"/>
+  <int value="1057" label="DELETED_HID_GETUSERSELECTEDDEVICES"/>
+  <int value="1058"
+      label="FILESYSTEMPROVIDERINTERNAL_GETACTIONSREQUESTEDSUCCESS"/>
+  <int value="1059"
+      label="DASHBOARDPRIVATE_SHOWPERMISSIONPROMPTFORDELEGATEDBUNDLEINSTALL"/>
+  <int value="1060" label="FILEMANAGERPRIVATEINTERNAL_GETCUSTOMACTIONS"/>
+  <int value="1061" label="FILEMANAGERPRIVATEINTERNAL_EXECUTECUSTOMACTION"/>
+  <int value="1062" label="MDNS_FORCEDISCOVERY"/>
+  <int value="1063" label="LANGUAGESETTINGSPRIVATE_GETLANGUAGELIST"/>
+  <int value="1064" label="DELETED_LANGUAGESETTINGSPRIVATE_SETLANGUAGELIST"/>
+  <int value="1065"
+      label="LANGUAGESETTINGSPRIVATE_GETSPELLCHECKDICTIONARYSTATUS"/>
+  <int value="1066" label="LANGUAGESETTINGSPRIVATE_GETSPELLCHECKWORDS"/>
+  <int value="1067" label="LANGUAGESETTINGSPRIVATE_GETTRANSLATETARGETLANGUAGE"/>
+  <int value="1068" label="LANGUAGESETTINGSPRIVATE_GETINPUTMETHODLISTS"/>
+  <int value="1069" label="LANGUAGESETTINGSPRIVATE_ADDINPUTMETHOD"/>
+  <int value="1070" label="LANGUAGESETTINGSPRIVATE_REMOVEINPUTMETHOD"/>
+  <int value="1071" label="FILEMANAGERPRIVATE_CANCELALLFILETRANSFERS"/>
+  <int value="1072" label="NETWORKINGPRIVATE_UNLOCKCELLULARSIM"/>
+  <int value="1073" label="NETWORKINGPRIVATE_SETCELLULARSIMSTATE"/>
+  <int value="1074" label="ENTERPRISE_DEVICEATTRIBUTES_GETDIRECTORYDEVICEID"/>
+  <int value="1075" label="CASTDEVICESPRIVATE_UPDATEDEVICES"/>
+  <int value="1076" label="SYSTEM_DISPLAY_ENABLEUNIFIEDDESKTOP"/>
+  <int value="1077" label="BROWSINGDATA_REMOVECACHESTORAGE"/>
+  <int value="1078" label="VIRTUALKEYBOARDPRIVATE_SETKEYBOARDSTATE"/>
+  <int value="1079" label="VIRTUALKEYBOARDPRIVATE_SETHOTRODKEYBOARD"/>
+  <int value="1080" label="CERTIFICATEPROVIDERINTERNAL_REPORTSIGNATURE"/>
+  <int value="1081" label="CERTIFICATEPROVIDERINTERNAL_REPORTCERTIFICATES"/>
+  <int value="1082" label="BLUETOOTHPRIVATE_PAIR"/>
+  <int value="1083" label="DELETED_EASYUNLOCKPRIVATE_FINDSETUPCONNECTION"/>
+  <int value="1084" label="RESOURCESPRIVATE_GETSTRINGS"/>
+  <int value="1085" label="USB_GETCONFIGURATIONS"/>
+  <int value="1086" label="DELETED_EASYUNLOCKPRIVATE_SETUPCONNECTIONSTATUS"/>
+  <int value="1087"
+      label="DELETED_EASYUNLOCKPRIVATE_SETUPCONNECTIONDISCONNECT"/>
+  <int value="1088" label="DELETED_EASYUNLOCKPRIVATE_SETUPCONNECTIONSEND"/>
+  <int value="1089" label="DELETED_DATAREDUCTIONPROXY_GETDATAUSAGE"/>
+  <int value="1090"
+      label="DELETED_EASYUNLOCKPRIVATE_SETUPCONNECTIONGETDEVICEADDRESS"/>
+  <int value="1091" label="DELETED_TABCAPTURE_CAPTUREOFFSCREENTAB"/>
+  <int value="1092" label="LANGUAGESETTINGSPRIVATE_ADDSPELLCHECKWORD"/>
+  <int value="1093" label="LANGUAGESETTINGSPRIVATE_REMOVESPELLCHECKWORD"/>
+  <int value="1094" label="SETTINGSPRIVATE_GETDEFAULTZOOMFUNCTION"/>
+  <int value="1095" label="SETTINGSPRIVATE_SETDEFAULTZOOMFUNCTION"/>
+  <int value="1096" label="BLUETOOTHPRIVATE_CONNECT"/>
+  <int value="1097" label="BLUETOOTHPRIVATE_FORGETDEVICE"/>
+  <int value="1098" label="DELETED_DISPLAYSOURCE_GETAVAILABLESINKS"/>
+  <int value="1099" label="DELETED_DISPLAYSOURCE_REQUESTAUTHENTICATION"/>
+  <int value="1100" label="WEBRTCLOGGINGPRIVATE_STARTAUDIODEBUGRECORDINGS"/>
+  <int value="1101" label="WEBRTCLOGGINGPRIVATE_STOPAUDIODEBUGRECORDINGS"/>
+  <int value="1102" label="TERMINALPRIVATE_ACKOUTPUT"/>
+  <int value="1103" label="INPUT_IME_CREATEWINDOW"/>
+  <int value="1104" label="INPUTMETHODPRIVATE_SETXKBLAYOUT"/>
+  <int value="1105" label="ACCESSIBILITY_PRIVATE_SETKEYBOARDLISTENER"/>
+  <int value="1106" label="INPUT_IME_ACTIVATE"/>
+  <int value="1107" label="INPUT_IME_DEACTIVATE"/>
+  <int value="1108" label="ENTERPRISE_PLATFORMKEYS_CHALLENGEMACHINEKEY"/>
+  <int value="1109" label="ENTERPRISE_PLATFORMKEYS_CHALLENGEUSERKEY"/>
+  <int value="1110"
+      label="DELETED_INPUTMETHODPRIVATE_NOTIFYIMEMENUITEMACTIVATED"/>
+  <int value="1111" label="INPUT_IME_SHOWWINDOW"/>
+  <int value="1112" label="INPUT_IME_HIDEWINDOW"/>
+  <int value="1113" label="INPUTMETHODPRIVATE_SHOWINPUTVIEW"/>
+  <int value="1114" label="DELETED_WALLPAPERPRIVATE_RECORDWALLPAPERUMA"/>
+  <int value="1115" label="AUTOTESTPRIVATE_GETVISIBLENOTIFICATIONS"/>
+  <int value="1116" label="DELETED_WEBRTCLOGGINGPRIVATE_STARTRTCEVENTLOGGING"/>
+  <int value="1117" label="DELETED_WEBRTCLOGGINGPRIVATE_STOPRTCEVENTLOGGING"/>
+  <int value="1118" label="PASSWORDSPRIVATE_GETSAVEDPASSWORDLIST"/>
+  <int value="1119" label="PASSWORDSPRIVATE_GETPASSWORDEXCEPTIONLIST"/>
+  <int value="1120" label="INPUTMETHODPRIVATE_OPENOPTIONSPAGE"/>
+  <int value="1121" label="DELETED_FEEDBACKPRIVATE_LOGSRTPROMPTRESULT"/>
+  <int value="1122" label="BLUETOOTHLOWENERGY_CREATESERVICE"/>
+  <int value="1123" label="BLUETOOTHLOWENERGY_CREATECHARACTERISTIC"/>
+  <int value="1124" label="BLUETOOTHLOWENERGY_CREATEDESCRIPTOR"/>
+  <int value="1125" label="BLUETOOTHLOWENERGY_REGISTERSERVICE"/>
+  <int value="1126" label="BLUETOOTHLOWENERGY_UNREGISTERSERVICE"/>
+  <int value="1127" label="BLUETOOTHLOWENERGY_SENDREQUESTRESPONSE"/>
+  <int value="1128"
+      label="BLUETOOTHLOWENERGY_NOTIFYCHARACTERISTICVALUECHANGED"/>
+  <int value="1129" label="BLUETOOTHLOWENERGY_REMOVESERVICE"/>
+  <int value="1130" label="AUTOFILLPRIVATE_GETADDRESSLIST"/>
+  <int value="1131" label="AUTOFILLPRIVATE_GETCREDITCARDLIST"/>
+  <int value="1132" label="SYSTEM_DISPLAY_OVERSCANCALIBRATIONSTART"/>
+  <int value="1133" label="SYSTEM_DISPLAY_OVERSCANCALIBRATIONADJUST"/>
+  <int value="1134" label="SYSTEM_DISPLAY_OVERSCANCALIBRATIONRESET"/>
+  <int value="1135" label="SYSTEM_DISPLAY_OVERSCANCALIBRATIONCOMPLETE"/>
+  <int value="1136" label="AUTOFILLPRIVATE_GETCOUNTRYLIST"/>
+  <int value="1137" label="RUNTIME_RESTARTAFTERDELAY"/>
+  <int value="1138" label="SYSTEM_DISPLAY_SETDISPLAYLAYOUT"/>
+  <int value="1139" label="SYSTEM_DISPLAY_GETDISPLAYLAYOUT"/>
+  <int value="1140" label="QUICKUNLOCKPRIVATE_SETMODES"/>
+  <int value="1141" label="QUICKUNLOCKPRIVATE_GETACTIVEMODES"/>
+  <int value="1142" label="QUICKUNLOCKPRIVATE_GETAVAILABLEMODES"/>
+  <int value="1143" label="WEBSTOREPRIVATE_ISPENDINGCUSTODIANAPPROVAL"/>
+  <int value="1144" label="TABS_DISCARD"/>
+  <int value="1145" label="LANGUAGESETTINGSPRIVATE_ENABLELANGUAGE"/>
+  <int value="1146" label="LANGUAGESETTINGSPRIVATE_DISABLELANGUAGE"/>
+  <int value="1147" label="FILEMANAGERPRIVATEINTERNAL_GETDIRECTORYSIZE"/>
+  <int value="1148" label="BLUETOOTHLOWENERGY_SETADVERTISINGINTERVAL"/>
+  <int value="1149" label="SYSTEM_DISPLAY_SHOWNATIVETOUCHCALIBRATION"/>
+  <int value="1150" label="SYSTEM_DISPLAY_COMPLETECUSTOMTOUCHCALIBRATION"/>
+  <int value="1151" label="SYSTEM_DISPLAY_CLEARTOUCHCALIBRATION"/>
+  <int value="1152" label="CERTIFICATEPROVIDER_REQUESTPIN"/>
+  <int value="1153" label="CERTIFICATEPROVIDER_STOPPINREQUEST"/>
+  <int value="1154" label="QUICKUNLOCKPRIVATE_CHECKCREDENTIAL"/>
+  <int value="1155" label="QUICKUNLOCKPRIVATE_GETCREDENTIALREQUIREMENTS"/>
+  <int value="1156" label="CLIPBOARD_SETIMAGEDATA"/>
+  <int value="1157" label="NETWORKINGPRIVATE_GETGLOBALPOLICY"/>
+  <int value="1158" label="DELETED_DIAL_FETCHDEVICEDESCRIPTION"/>
+  <int value="1159" label="SYSTEM_DISPLAY_STARTCUSTOMTOUCHCALIBRATION"/>
+  <int value="1160" label="AUDIO_GETMUTE"/>
+  <int value="1161" label="AUDIO_SETMUTE"/>
+  <int value="1162" label="AUDIO_GETDEVICES"/>
+  <int value="1163" label="VIRTUALKEYBOARD_RESTRICTFEATURES"/>
+  <int value="1164" label="DELETED_NETWORKINGCASTPRIVATE_VERIFYDESTINATION"/>
+  <int value="1165"
+      label="DELETED_NETWORKINGCASTPRIVATE_VERIFYANDENCRYPTCREDENTIALS"/>
+  <int value="1166" label="DELETED_NETWORKINGCASTPRIVATE_VERIFYANDENCRYPTDATA"/>
+  <int value="1167"
+      label="DELETED_NETWORKINGCASTPRIVATE_SETWIFITDLSENABLEDSTATE"/>
+  <int value="1168" label="DELETED_NETWORKINGCASTPRIVATE_GETWIFITDLSSTATUS"/>
+  <int value="1169" label="ACCESSIBILITY_PRIVATE_DARKENSCREEN"/>
+  <int value="1170" label="WEBRTC_AUDIO_PRIVATE_SET_AUDIO_EXPERIMENTS"/>
+  <int value="1171" label="AUTOTESTPRIVATE_GETPLAYSTORESTATE"/>
+  <int value="1172" label="AUTOTESTPRIVATE_SETPLAYSTOREENABLED"/>
+  <int value="1173" label="APP_CURRENTWINDOWINTERNAL_SETACTIVATEONPOINTER"/>
+  <int value="1174" label="MEDIAPERCEPTIONPRIVATE_GETSTATE"/>
+  <int value="1175" label="MEDIAPERCEPTIONPRIVATE_SETSTATE"/>
+  <int value="1176" label="MEDIAPERCEPTIONPRIVATE_GETDIAGNOSTICS"/>
+  <int value="1177" label="NETWORKINGPRIVATE_GETCERTIFICATELISTS"/>
+  <int value="1178" label="DELETED_ACCESSIBILITY_PRIVATE_SETSWITCHACCESSKEYS"/>
+  <int value="1179" label="FEEDBACKPRIVATE_READLOGSOURCE"/>
+  <int value="1180" label="LOCKSCREENDATA_CREATE"/>
+  <int value="1181" label="LOCKSCREENDATA_GETALL"/>
+  <int value="1182" label="LOCKSCREENDATA_GETCONTENT"/>
+  <int value="1183" label="LOCKSCREENDATA_SETCONTENT"/>
+  <int value="1184" label="LOCKSCREENDATA_DELETE"/>
+  <int value="1185" label="BLUETOOTHLOWENERGY_RESETADVERTISING"/>
+  <int value="1186" label="WEBVIEWINTERNAL_SETAUDIOMUTED"/>
+  <int value="1187" label="WEBVIEWINTERNAL_ISAUDIOMUTED"/>
+  <int value="1188" label="WEBVIEWINTERNAL_GETAUDIOSTATE"/>
+  <int value="1189" label="FILEMANAGERPRIVATE_GETRECENTFILES"/>
+  <int value="1190" label="FILEMANAGERPRIVATE_RENAMEVOLUME"/>
+  <int value="1191" label="AUTOTESTPRIVATE_SETMOUSEREVERSESCROLL"/>
+  <int value="1192" label="DELETED_METRICSPRIVATE_RECORDSPARSEHASHABLE"/>
+  <int value="1193" label="NETWORKINGPRIVATE_SELECTCELLULARMOBILENETWORK"/>
+  <int value="1194" label="PASSWORDSPRIVATE_IMPORTPASSWORDS"/>
+  <int value="1195" label="PASSWORDSPRIVATE_EXPORTPASSWORDS"/>
+  <int value="1196"
+      label="PASSWORDSPRIVATE_UNDOREMOVESAVEDPASSWORDOREXCEPTION"/>
+  <int value="1197"
+      label="ACCESSIBILITY_PRIVATE_SETNATIVECHROMEVOXARCSUPPORTFORCURRENTAPP"/>
+  <int value="1198"
+      label="LANGUAGESETTINGSPRIVATE_SETENABLETRANSLATIONFORLANGUAGE"/>
+  <int value="1199" label="LANGUAGESETTINGSPRIVATE_MOVELANGUAGE"/>
+  <int value="1200" label="MEDIAPERCEPTIONPRIVATE_SETANALYTICSCOMPONENT"/>
+  <int value="1201" label="ACCESSIBILITY_PRIVATE_SETHIGHLIGHTS"/>
+  <int value="1202" label="WEBRTCLOGGINGPRIVATE_GETLOGSDIRECTORY"/>
+  <int value="1203" label="VIRTUALKEYBOARDPRIVATE_SETDRAGGABLEAREA"/>
+  <int value="1204" label="METRICSPRIVATE_RECORDBOOLEAN"/>
+  <int value="1205" label="METRICSPRIVATE_RECORDENUMERATIONVALUE"/>
+  <int value="1206" label="DEVELOPERPRIVATE_NOTIFYDRAGINSTALLINPROGRESS"/>
+  <int value="1207" label="AUTOTESTPRIVATE_GETPRINTERLIST"/>
+  <int value="1208" label="DEVELOPERPRIVATE_GETEXTENSIONSIZE"/>
+  <int value="1209"
+      label="DELETED_CRYPTOTOKENPRIVATE_ISAPPIDHASHINENTERPRISECONTEXT"/>
+  <int value="1210" label="DELETED_CRYPTOTOKENPRIVATE_CANAPPIDGETATTESTATION"/>
+  <int value="1211" label="SYSTEM_DISPLAY_SETMIRRORMODE"/>
+  <int value="1212" label="TTSENGINE_UPDATEVOICES"/>
+  <int value="1213" label="PASSWORDSPRIVATE_REQUESTEXPORTPROGRESSSTATUS"/>
+  <int value="1214" label="DELETED_WALLPAPERPRIVATE_GETCOLLECTIONSINFO"/>
+  <int value="1215" label="DELETED_WALLPAPERPRIVATE_GETIMAGESINFO"/>
+  <int value="1216" label="ACCESSIBILITY_PRIVATE_SENDSYNTHETICKEYEVENT"/>
+  <int value="1217" label="DELETED_WALLPAPERPRIVATE_GETLOCALIMAGEPATHS"/>
+  <int value="1218" label="DELETED_WALLPAPERPRIVATE_GETLOCALIMAGEDATA"/>
+  <int value="1219" label="ENTERPRISE_DEVICEATTRIBUTES_GETDEVICESERIALNUMBER"/>
+  <int value="1220" label="ENTERPRISE_DEVICEATTRIBUTES_GETDEVICEASSETID"/>
+  <int value="1221"
+      label="ENTERPRISE_DEVICEATTRIBUTES_GETDEVICEANNOTATEDLOCATION"/>
+  <int value="1222" label="DELETED_PASSWORDSPRIVATE_CANCELEXPORTPASSWORDS"/>
+  <int value="1223" label="FILEMANAGERPRIVATE_MARKCACHEASMOUNTED"/>
+  <int value="1224" label="DELETED_WALLPAPERPRIVATE_CONFIRMPREVIEWWALLPAPER"/>
+  <int value="1225" label="DELETED_WALLPAPERPRIVATE_CANCELPREVIEWWALLPAPER"/>
+  <int value="1226" label="WEBRTCLOGGINGPRIVATE_STARTEVENTLOGGING"/>
+  <int value="1227" label="VIRTUALKEYBOARDPRIVATE_SETCONTAINERBEHAVIOR"/>
+  <int value="1228" label="QUICKUNLOCKPRIVATE_GETAUTHTOKEN"/>
+  <int value="1229" label="QUICKUNLOCKPRIVATE_SETLOCKSCREENENABLED"/>
+  <int value="1230" label="LANGUAGESETTINGSPRIVATE_RETRYDOWNLOADDICTIONARY"/>
+  <int value="1231" label="DELETED_DECLARATIVENETREQUEST_ADDALLOWEDPAGES"/>
+  <int value="1232" label="DELETED_DECLARATIVENETREQUEST_REMOVEALLOWEDPAGES"/>
+  <int value="1233" label="DELETED_DECLARATIVENETREQUEST_GETALLOWEDPAGES"/>
+  <int value="1234" label="DEVELOPERPRIVATE_INSTALLDROPPEDFILE"/>
+  <int value="1235" label="AUTOMATIONINTERNAL_ENABLETREE"/>
+  <int value="1236" label="AUTOMATIONINTERNAL_QUERYSELECTOR"/>
+  <int value="1237" label="DEBUGGER_GETTARGETS"/>
+  <int value="1238" label="NOTIFICATIONS_GETPERMISSIONLEVEL"/>
+  <int value="1239" label="DELETED_FILEMANAGERPRIVATE_ENSUREFILEDOWNLOADED"/>
+  <int value="1240" label="FILEMANAGERPRIVATE_OPENSETTINGSSUBPAGE"/>
+  <int value="1241"
+      label="ENTERPRISEREPORTINGPRIVATE_UPLOADCHROMEDESKTOPREPORT"/>
+  <int value="1242" label="CECPRIVATE_SENDSTANDBY"/>
+  <int value="1243" label="CECPRIVATE_SENDWAKEUP"/>
+  <int value="1244" label="WEBSTOREPRIVATE_GETREFERRERCHAIN"/>
+  <int value="1245" label="AUTOTESTPRIVATE_UPDATEPRINTER"/>
+  <int value="1246" label="AUTOTESTPRIVATE_REMOVEPRINTER"/>
+  <int value="1247"
+      label="DELETED_WALLPAPERPRIVATE_GETCURRENTWALLPAPERTHUMBNAIL"/>
+  <int value="1248" label="ACCESSIBILITY_PRIVATE_SETSELECTTOSPEAKSTATE"/>
+  <int value="1249" label="DELETED_INPUTMETHODPRIVATE_GETCOMPOSITIONBOUNDS"/>
+  <int value="1250" label="DELETED_FILEMANAGERPRIVATE_ISCROSTINIENABLED"/>
+  <int value="1251" label="FILEMANAGERPRIVATE_MOUNTCROSTINI"/>
+  <int value="1252" label="CECPRIVATE_QUERYDISPLAYCECPOWERSTATE"/>
+  <int value="1253" label="DEVELOPERPRIVATE_ADDHOSTPERMISSION"/>
+  <int value="1254" label="DEVELOPERPRIVATE_REMOVEHOSTPERMISSION"/>
+  <int value="1255" label="MEDIAPERCEPTIONPRIVATE_SETCOMPONENTPROCESSSTATE"/>
+  <int value="1256" label="USERSPRIVATE_GETCURRENTUSER"/>
+  <int value="1257" label="DELETED_WALLPAPERPRIVATE_GETSURPRISEMEIMAGE"/>
+  <int value="1258" label="VIRTUALKEYBOARDPRIVATE_SETOCCLUDEDBOUNDS"/>
+  <int value="1259" label="DELETED_SYSTEM_POWER_SOURCE_GETPOWERSOURCEINFO"/>
+  <int value="1260" label="DELETED_SYSTEM_POWER_SOURCE_REQUESTSTATUSUPDATE"/>
+  <int value="1261" label="INPUTMETHODPRIVATE_GETSURROUNDINGTEXT"/>
+  <int value="1262" label="USERSPRIVATE_GETLOGINSTATUS"/>
+  <int value="1263" label="FILEMANAGERPRIVATEINTERNAL_INSTALLLINUXPACKAGE"/>
+  <int value="1264" label="VIRTUALKEYBOARDPRIVATE_SETHITTESTBOUNDS"/>
+  <int value="1265" label="ARCAPPSPRIVATE_GETLAUNCHABLEAPPS"/>
+  <int value="1266" label="ARCAPPSPRIVATE_LAUNCHAPP"/>
+  <int value="1267" label="AUTOTESTPRIVATE_RUNCROSTINIINSTALLER"/>
+  <int value="1268" label="AUTOFILLPRIVATE_MIGRATECREDITCARDS"/>
+  <int value="1269" label="AUTOTESTPRIVATE_ISAPPSHOWN"/>
+  <int value="1270" label="ENTERPRISEREPORTINGPRIVATE_GETDEVICEID"/>
+  <int value="1271"
+      label="ENTERPRISE_HARDWAREPLATFORM_GETHARDWAREPLATFORMINFO"/>
+  <int value="1272" label="FILEMANAGERPRIVATEINTERNAL_SHAREPATHSWITHCROSTINI"/>
+  <int value="1273" label="AUTOTESTPRIVATE_SETCROSTINIENABLED"/>
+  <int value="1274" label="METRICSPRIVATE_GETHISTOGRAM"/>
+  <int value="1275" label="TABCAPTURE_GETMEDIASTREAMID"/>
+  <int value="1276" label="WEBVIEWINTERNAL_SETSPATIALNAVIGATIONENABLED"/>
+  <int value="1277" label="WEBVIEWINTERNAL_ISSPATIALNAVIGATIONENABLED"/>
+  <int value="1278" label="DELETED_FILEMANAGERPRIVATEINTERNAL_GETTHUMBNAIL"/>
+  <int value="1279" label="FILEMANAGERPRIVATEINTERNAL_GETCROSTINISHAREDPATHS"/>
+  <int value="1280" label="AUTOTESTPRIVATE_LAUNCHAPP"/>
+  <int value="1281" label="AUTOTESTPRIVATE_BOOTSTRAPMACHINELEARNINGSERVICE"/>
+  <int value="1282" label="AUTOTESTPRIVATE_RUNCROSTINIUNINSTALLER"/>
+  <int value="1283" label="AUTOTESTPRIVATE_TAKESCREENSHOT"/>
+  <int value="1284" label="ACCESSIBILITY_PRIVATE_TOGGLEDICTATION"/>
+  <int value="1285" label="ACCESSIBILITY_PRIVATE_ENABLEMOUSEEVENTS"/>
+  <int value="1286" label="ACCESSIBILITY_PRIVATE_SENDSYNTHETICMOUSEEVENT"/>
+  <int value="1287" label="DELETED_FILEMANAGERPRIVATE_DETECTCHARACTERENCODING"/>
+  <int value="1288" label="FILEMANAGERPRIVATEINTERNAL_GETLINUXPACKAGEINFO"/>
+  <int value="1289" label="TABS_GOFORWARD"/>
+  <int value="1290" label="TABS_GOBACK"/>
+  <int value="1291"
+      label="BRAILLEDISPLAYPRIVATE_UPDATEBLUETOOTHBRAILLEDISPLAYADDRESS"/>
+  <int value="1292" label="AUTOTESTPRIVATE_SETASSISTANTENABLED"/>
+  <int value="1293" label="AUTOTESTPRIVATE_ISARCPROVISIONED"/>
+  <int value="1294" label="DELETED_CRYPTOTOKENPRIVATE_CANPROXYTOWEBAUTHN"/>
+  <int value="1295" label="INPUTMETHODPRIVATE_GETSETTINGS"/>
+  <int value="1296" label="INPUTMETHODPRIVATE_SETSETTINGS"/>
+  <int value="1297" label="FILEMANAGERPRIVATEINTERNAL_UNSHAREPATHWITHCROSTINI"/>
+  <int value="1298"
+      label="PASSWORDSPRIVATE_RECORDPASSWORDSPAGEACCESSINSETTINGS"/>
+  <int value="1299" label="AUTOFILLPRIVATE_SERVERCARDLINKCLICKED"/>
+  <int value="1300" label="AUTOTESTPRIVATE_GETARCAPP"/>
+  <int value="1301" label="AUTOTESTPRIVATE_GETARCPACKAGE"/>
+  <int value="1302" label="DELETED_AUTOTESTPRIVATE_LAUNCHARCAPP"/>
+  <int value="1303" label="AUTOTESTPRIVATE_CLOSEAPP"/>
+  <int value="1304"
+      label="DELETED_ACCESSIBILITY_PRIVATE_SETSWITCHACCESSMENUSTATE"/>
+  <int value="1305" label="AUTOTESTPRIVATE_SENDASSISTANTTEXTQUERY"/>
+  <int value="1306" label="AUTOTESTPRIVATE_SETCROSTINIAPPSCALED"/>
+  <int value="1307" label="ACTIVITYLOGPRIVATE_DELETEACTIVITIESBYEXTENSION"/>
+  <int value="1308"
+      label="ACCESSIBILITY_PRIVATE_FORWARDKEYEVENTSTOSWITCHACCESS"/>
+  <int value="1309"
+      label="AUTOTESTPRIVATE_ENSUREWINDOWSERVICECLIENTHASDRAWNWINDOW"/>
+  <int value="1310" label="ACCESSIBILITY_PRIVATE_GETBATTERYDESCRIPTION"/>
+  <int value="1311" label="IDLE_GETAUTOLOCKDELAY"/>
+  <int value="1312" label="AUTOTESTPRIVATE_GETPRIMARYDISPLAYSCALEFACTOR"/>
+  <int value="1313" label="AUTOFILLPRIVATE_GETLOCALCREDITCARDLIST_DEPRECATED"/>
+  <int value="1314" label="AUTOFILLPRIVATE_GETSERVERCREDITCARDLIST_DEPRECATED"/>
+  <int value="1315" label="DELETED_PASSWORDSPRIVATE_CHANGESAVEDPASSWORD"/>
+  <int value="1316" label="AUTOTESTPRIVATE_SETWHITELISTEDPREF"/>
+  <int value="1317" label="SAFEBROWSINGPRIVATE_GETREFERRERCHAIN"/>
+  <int value="1318" label="DELETED_DECLARATIVENETREQUEST_ADDDYNAMICRULES"/>
+  <int value="1319" label="DELETED_DECLARATIVENETREQUEST_REMOVEDYNAMICRULES"/>
+  <int value="1320" label="DECLARATIVENETREQUEST_GETDYNAMICRULES"/>
+  <int value="1321" label="AUTOTESTPRIVATE_GETARCSTATE"/>
+  <int value="1322" label="AUTOTESTPRIVATE_ISTABLETMODEENABLED"/>
+  <int value="1323" label="AUTOTESTPRIVATE_SETTABLETMODEENABLED"/>
+  <int value="1324" label="AUTOTESTPRIVATE_GETSHELFAUTOHIDEBEHAVIOR"/>
+  <int value="1325" label="AUTOTESTPRIVATE_SETSHELFAUTOHIDEBEHAVIOR"/>
+  <int value="1326" label="AUTOTESTPRIVATE_EXPORTCROSTINI"/>
+  <int value="1327" label="AUTOTESTPRIVATE_IMPORTCROSTINI"/>
+  <int value="1328" label="ACCESSIBILITY_PRIVATE_SETVIRTUALKEYBOARDVISIBLE"/>
+  <int value="1329" label="AUTOTESTPRIVATE_SHOWVIRTUALKEYBOARDIFENABLED"/>
+  <int value="1330" label="DELETED_FEEDBACKPRIVATE_LOGINFEEDBACKCOMPLETE"/>
+  <int value="1331" label="FILEMANAGERPRIVATE_SEARCHFILES"/>
+  <int value="1332" label="MANAGEMENT_INSTALLREPLACEMENTWEBAPP"/>
+  <int value="1333" label="FILEMANAGERPRIVATE_GETANDROIDPICKERAPPS"/>
+  <int value="1334" label="FILEMANAGERPRIVATE_SELECTANDROIDPICKERAPP"/>
+  <int value="1335" label="AUTOTESTPRIVATE_GETSHELFALIGNMENT"/>
+  <int value="1336" label="AUTOTESTPRIVATE_SETSHELFALIGNMENT"/>
+  <int value="1337" label="BLUETOOTHPRIVATE_RECORDPAIRING"/>
+  <int value="1338" label="FILEMANAGERPRIVATE_SETARCSTORAGETOASTSHOWNFLAG"/>
+  <int value="1339" label="INPUTMETHODPRIVATE_SETCOMPOSITIONRANGE"/>
+  <int value="1340" label="BLUETOOTHPRIVATE_RECORDRECONNECTION"/>
+  <int value="1341" label="LOGINSCREENUI_SHOW"/>
+  <int value="1342" label="LOGINSCREENUI_CLOSE"/>
+  <int value="1343" label="DECLARATIVENETREQUEST_GETMATCHEDRULES"/>
+  <int value="1344" label="DECLARATIVENETREQUEST_SETACTIONCOUNTASBADGETEXT"/>
+  <int value="1345" label="BLUETOOTHPRIVATE_RECORDDEVICESELECTION"/>
+  <int value="1346" label="LOGIN_LAUNCHMANAGEDGUESTSESSION"/>
+  <int value="1347" label="LOGIN_EXITCURRENTSESSION"/>
+  <int value="1348" label="DELETED_LOGIN_ISRUNNINGINLOGINPROFILE"/>
+  <int value="1349" label="LOGIN_FETCHDATAFORNEXTLOGINATTEMPT"/>
+  <int value="1350" label="ACTION_SETICON"/>
+  <int value="1351" label="AUTOTESTPRIVATE_GETALLENTERPRISEPOLICIES"/>
+  <int value="1352"
+      label="ACCESSIBILITY_PRIVATE_HANDLESCROLLABLEBOUNDSFORPOINTFOUND"/>
+  <int value="1353" label="ACTION_GETPOPUP"/>
+  <int value="1354" label="ACTION_SETPOPUP"/>
+  <int value="1355" label="ACTION_GETTITLE"/>
+  <int value="1356" label="ACTION_SETTITLE"/>
+  <int value="1357" label="ACTION_GETBADGETEXT"/>
+  <int value="1358" label="ACTION_SETBADGETEXT"/>
+  <int value="1359" label="ACTION_GETBADGEBACKGROUNDCOLOR"/>
+  <int value="1360" label="ACTION_SETBADGEBACKGROUNDCOLOR"/>
+  <int value="1361" label="DELETED_AUTOTESTPRIVATE_SETARCAPPWINDOWSTATE"/>
+  <int value="1362" label="ACCESSIBILITY_PRIVATE_OPENSETTINGSSUBPAGE"/>
+  <int value="1363" label="ACTION_ENABLE"/>
+  <int value="1364" label="ACTION_DISABLE"/>
+  <int value="1365" label="FILEMANAGERPRIVATEINTERNAL_IMPORTCROSTINIIMAGE"/>
+  <int value="1366" label="AUTOTESTPRIVATE_GETSHELFITEMS"/>
+  <int value="1367" label="DELETED_MANAGEMENT_INSTALLREPLACEMENTANDROIDAPP"/>
+  <int value="1368" label="DELETED_MANAGEMENT_CANINSTALLREPLACEMENTANDROIDAPP"/>
+  <int value="1369" label="AUTOTESTPRIVATE_REGISTERCOMPONENT"/>
+  <int value="1370" label="LOGINSCREENSTORAGE_STOREPERSISTENTDATA"/>
+  <int value="1371" label="LOGINSCREENSTORAGE_RETRIEVEPERSISTENTDATA"/>
+  <int value="1372" label="LOGINSCREENSTORAGE_STORECREDENTIALS"/>
+  <int value="1373" label="LOGINSCREENSTORAGE_RETRIEVECREDENTIALS"/>
+  <int value="1374" label="DELETED_AUTOTESTPRIVATE_GETARCAPPWINDOWSTATE"/>
+  <int value="1375" label="DELETED_AUTOTESTPRIVATE_GETARCAPPWINDOWINFO"/>
+  <int value="1376" label="AUTOTESTPRIVATE_GETALLINSTALLEDAPPS"/>
+  <int value="1377" label="AUTOTESTPRIVATE_SWAPWINDOWSINSPLITVIEW"/>
+  <int value="1378" label="AUTOTESTPRIVATE_SETARCAPPWINDOWFOCUS"/>
+  <int value="1379" label="LOGINSTATE_GETPROFILETYPE"/>
+  <int value="1380" label="LOGINSTATE_GETSESSIONSTATE"/>
+  <int value="1381" label="AUTOTESTPRIVATE_GETARCSTARTTIME"/>
+  <int value="1382" label="AUTOTESTPRIVATE_SETOVERVIEWMODESTATE"/>
+  <int value="1383" label="AUTOTESTPRIVATE_TAKESCREENSHOTFORDISPLAY"/>
+  <int value="1384" label="AUTOFILLPRIVATE_SETCREDITCARDFIDOAUTHENABLEDSTATE"/>
+  <int value="1385" label="USERSPRIVATE_ISUSERINLIST"/>
+  <int value="1386" label="PRINTINGMETRICS_GETPRINTJOBS"/>
+  <int value="1387" label="AUTOTESTPRIVATE_WAITFORASSISTANTQUERYSTATUS"/>
+  <int value="1388" label="AUTOTESTPRIVATE_GETCLIPBOARDTEXTDATA"/>
+  <int value="1389" label="AUTOTESTPRIVATE_SETCLIPBOARDTEXTDATA"/>
+  <int value="1390" label="AUTOTESTPRIVATE_INITIALIZEEVENTS"/>
+  <int value="1391" label="AUTOTESTPRIVATE_WAITFORDISPLAYROTATION"/>
+  <int value="1392" label="AUTOTESTPRIVATE_ARCAPPTRACINGSTART"/>
+  <int value="1393" label="AUTOTESTPRIVATE_ARCAPPTRACINGSTOPANDANALYZE"/>
+  <int value="1394" label="AUTOTESTPRIVATE_GETAPPWINDOWLIST"/>
+  <int value="1395" label="AUTOTESTPRIVATE_SETAPPWINDOWSTATE"/>
+  <int value="1396" label="AUTOTESTPRIVATE_CLOSEAPPWINDOW"/>
+  <int value="1397" label="AUTOTESTPRIVATE_REFRESHENTERPRISEPOLICIES"/>
+  <int value="1398" label="AUTOTESTPRIVATE_INSTALLPWAFORCURRENTURL"/>
+  <int value="1399" label="AUTOTESTPRIVATE_ACTIVATEACCELERATOR"/>
+  <int value="1400" label="AUTOTESTPRIVATE_WAITFORLAUNCHERSTATE"/>
+  <int value="1401" label="AUTOTESTPRIVATE_CREATENEWDESK"/>
+  <int value="1402" label="AUTOTESTPRIVATE_ACTIVATEDESKATINDEX"/>
+  <int value="1403" label="AUTOTESTPRIVATE_REMOVEACTIVEDESK"/>
+  <int value="1404" label="TERMINALPRIVATE_GETCROSHSETTINGS"/>
+  <int value="1405" label="AUTOTESTPRIVATE_ENABLEASSISTANTANDWAITFORREADY"/>
+  <int value="1406" label="INPUTMETHODPRIVATE_FINISHCOMPOSINGTEXT"/>
+  <int value="1407" label="DECLARATIVENETREQUEST_UPDATEDYNAMICRULES"/>
+  <int value="1408" label="AUTOTESTPRIVATE_MOUSECLICK"/>
+  <int value="1409" label="AUTOTESTPRIVATE_MOUSEPRESS"/>
+  <int value="1410" label="AUTOTESTPRIVATE_MOUSERELEASE"/>
+  <int value="1411" label="AUTOTESTPRIVATE_MOUSEMOVE"/>
+  <int value="1412" label="WEBSTOREPRIVATE_GETEXTENSIONSTATUS"/>
+  <int value="1413" label="DELETED_INPUTMETHODPRIVATE_SETSELECTIONRANGE"/>
+  <int value="1414" label="VIRTUALKEYBOARDPRIVATE_SETAREATOREMAINONSCREEN"/>
+  <int value="1415" label="TERMINALPRIVATE_GETSETTINGS"/>
+  <int value="1416" label="TERMINALPRIVATE_SETSETTINGS"/>
+  <int value="1417" label="DELETED_WEBSTOREPRIVATE_REQUESTEXTENSION"/>
+  <int value="1418" label="AUTOTESTPRIVATE_INSTALLPLUGINVM"/>
+  <int value="1419" label="CRASHREPORTPRIVATE_REPORTERROR"/>
+  <int value="1420" label="AUTOTESTPRIVATE_SETMETRICSENABLED"/>
+  <int value="1421" label="ENTERPRISEREPORTINGPRIVATE_GETPERSISTENTSECRET"/>
+  <int value="1422" label="ENTERPRISEREPORTINGPRIVATE_GETDEVICEDATA"/>
+  <int value="1423" label="ENTERPRISEREPORTINGPRIVATE_SETDEVICEDATA"/>
+  <int value="1424" label="ENTERPRISEREPORTINGPRIVATE_GETDEVICEINFO"/>
+  <int value="1425" label="PRINTING_GETPRINTERS"/>
+  <int value="1426" label="WEBCAMPRIVATE_SET_HOME"/>
+  <int value="1427" label="INPUTMETHODPRIVATE_RESET"/>
+  <int value="1428" label="PRINTING_GETPRINTERINFO"/>
+  <int value="1429" label="AUTOTESTPRIVATE_ISARCPACKAGELISTINITIALREFRESHED"/>
+  <int value="1430" label="DELETED_AUTOTESTPRIVATE_STARTTRACING"/>
+  <int value="1431" label="DELETED_AUTOTESTPRIVATE_STOPTRACING"/>
+  <int value="1432" label="LOGIN_LOCKMANAGEDGUESTSESSION"/>
+  <int value="1433" label="LOGIN_UNLOCKMANAGEDGUESTSESSION"/>
+  <int value="1434" label="AUTOTESTPRIVATE_SETARCTOUCHMODE"/>
+  <int value="1435" label="PRINTING_SUBMITJOB"/>
+  <int value="1436" label="DELETED_IDENTITYPRIVATE_SETCONSENTRESULT"/>
+  <int value="1437" label="PRINTING_CANCELJOB"/>
+  <int value="1438" label="DELETED_AUTOFILLASSISTANTPRIVATE_CREATE"/>
+  <int value="1439" label="DELETED_AUTOFILLASSISTANTPRIVATE_START"/>
+  <int value="1440" label="DELETED_AUTOFILLASSISTANTPRIVATE_GETSTATE"/>
+  <int value="1441" label="DELETED_AUTOFILLASSISTANTPRIVATE_PERFORMACTION"/>
+  <int value="1442" label="DELETED_AUTOFILLASSISTANTPRIVATE_PROVIDEUSERDATA"/>
+  <int value="1443" label="PASSWORDSPRIVATE_ISOPTEDINFORACCOUNTSTORAGE"/>
+  <int value="1444" label="AUTOTESTPRIVATE_PINSHELFICON"/>
+  <int value="1445" label="AUTOTESTPRIVATE_WAITFOROVERVIEWSTATE"/>
+  <int value="1446" label="AUTOTESTPRIVATE_GETSCROLLABLESHELFINFOFORSTATE"/>
+  <int value="1447" label="ENTERPRISE_DEVICEATTRIBUTES_GETDEVICEHOSTNAME"/>
+  <int value="1448" label="DELETED_AUTOFILLPRIVATE_GETUPIIDLIST"/>
+  <int value="1449" label="WEBCAMPRIVATE_RESTORE_CAMERA_PRESET"/>
+  <int value="1450" label="WEBCAMPRIVATE_SET_CAMERA_PRESET"/>
+  <int value="1451" label="DELETED_PASSWORDSPRIVATE_GETCOMPROMISEDCREDENTIALS"/>
+  <int value="1452" label="INPUTMETHODPRIVATE_HIDEINPUTVIEW"/>
+  <int value="1453" label="PASSWORDSPRIVATE_GETPLAINTEXTINSECUREPASSWORD"/>
+  <int value="1454" label="PASSWORDSPRIVATE_CHANGEINSECURECREDENTIAL"/>
+  <int value="1455" label="PASSWORDSPRIVATE_REMOVEINSECURECREDENTIAL"/>
+  <int value="1456" label="TERMINALPRIVATE_GETA11YSTATUS"/>
+  <int value="1457" label="AUTOTESTPRIVATE_GETSHELFUIINFOFORSTATE"/>
+  <int value="1458" label="PASSWORDSPRIVATE_STARTPASSWORDCHECK"/>
+  <int value="1459" label="DELETED_PASSWORDSPRIVATE_STOPPASSWORDCHECK"/>
+  <int value="1460" label="PASSWORDSPRIVATE_GETPASSWORDCHECKSTATUS"/>
+  <int value="1461" label="TERMINALPRIVATE_OPENVMSHELLPROCESS"/>
+  <int value="1462" label="PASSWORDSPRIVATE_OPTINFORACCOUNTSTORAGE"/>
+  <int value="1463" label="DELETED_CRYPTOTOKENPRIVATE_RECORDREGISTERREQUEST"/>
+  <int value="1464" label="DELETED_CRYPTOTOKENPRIVATE_RECORDSIGNREQUEST"/>
+  <int value="1465" label="VIRTUALKEYBOARDPRIVATE_SETWINDOWBOUNDSINSCREEN"/>
+  <int value="1466" label="AUTOTESTPRIVATE_SETWINDOWBOUNDS"/>
+  <int value="1467" label="AUTOTESTPRIVATE_STARTSMOOTHNESSTRACKING"/>
+  <int value="1468" label="AUTOTESTPRIVATE_STOPSMOOTHNESSTRACKING"/>
+  <int value="1469" label="ACCESSIBILITY_PRIVATE_UPDATESWITCHACCESSBUBBLE"/>
+  <int value="1470" label="TERMINALPRIVATE_OPENOPTIONSPAGE"/>
+  <int value="1471" label="DECLARATIVENETREQUEST_UPDATEENABLEDRULESETS"/>
+  <int value="1472" label="DECLARATIVENETREQUEST_GETENABLEDRULESETS"/>
+  <int value="1473" label="TERMINALPRIVATE_OPENWINDOW"/>
+  <int value="1474" label="AUTOTESTPRIVATE_SETPLUGINVMPOLICY"/>
+  <int value="1475" label="AUTOTESTPRIVATE_SHOWPLUGINVMINSTALLER"/>
+  <int value="1476" label="DELETED_PASSWORDSPRIVATE_REMOVESAVEDPASSWORDS"/>
+  <int value="1477" label="DELETED_PASSWORDSPRIVATE_REMOVEPASSWORDEXCEPTIONS"/>
+  <int value="1478" label="AUTOTESTPRIVATE_WAITFORAMBIENTPHOTOANIMATION"/>
+  <int value="1479" label="INPUT_IME_SETASSISTIVEWINDOWPROPERTIES"/>
+  <int value="1480" label="PASSWORDSPRIVATE_MOVEPASSWORDSTOACCOUNT"/>
+  <int value="1481" label="AUTOTESTPRIVATE_DISABLESWITCHACCESSDIALOG"/>
+  <int value="1482" label="ENTERPRISE_NETWORKINGATTRIBUTES_GETNETWORKDETAILS"/>
+  <int value="1483" label="DELETED_INPUTMETHODPRIVATE_SETAUTOCORRECTRANGE"/>
+  <int value="1484" label="PLATFORMKEYSINTERNAL_GETPUBLICKEYBYSPKI"/>
+  <int value="1485" label="CERTIFICATEPROVIDER_SETCERTIFICATES"/>
+  <int value="1486" label="AUTOTESTPRIVATE_DISABLEAUTOMATION"/>
+  <int value="1487" label="INPUT_IME_SETASSISTIVEWINDOWBUTTONHIGHLIGHTED"/>
+  <int value="1488" label="CERTIFICATEPROVIDER_REPORTSIGNATURE"/>
+  <int value="1489" label="QUICKUNLOCKPRIVATE_SETPINAUTOSUBMITENABLED"/>
+  <int value="1490" label="QUICKUNLOCKPRIVATE_CANAUTHENTICATEPIN"/>
+  <int value="1491"
+      label="DELETED_INPUTMETHODPRIVATE_GETAUTOCORRECTCHARACTERBOUNDS"/>
+  <int value="1492"
+      label="AUTOTESTPRIVATE_STARTTHROUGHPUTTRACKERDATACOLLECTION"/>
+  <int value="1493"
+      label="AUTOTESTPRIVATE_STOPTHROUGHPUTTRACKERDATACOLLECTION"/>
+  <int value="1494" label="DELETED_INPUTMETHODPRIVATE_GETAUTOCORRECTRANGE"/>
+  <int value="1495" label="FILEMANAGERPRIVATEINTERNAL_SHARESHEETHASTARGETS"/>
+  <int value="1496" label="FILEMANAGERPRIVATEINTERNAL_INVOKESHARESHEET"/>
+  <int value="1497" label="FILEMANAGERPRIVATEINTERNAL_GETCONTENTMIMETYPE"/>
+  <int value="1498" label="FILEMANAGERPRIVATEINTERNAL_GETCONTENTMETADATA"/>
+  <int value="1499" label="SEARCH_QUERY"/>
+  <int value="1500" label="FILEMANAGERPRIVATEINTERNAL_COPYIMAGETOCLIPBOARD"/>
+  <int value="1501"
+      label="AUTOTESTPRIVATE_WAITFORSYSTEMWEBAPPSINSTALLFUNCTION"/>
+  <int value="1502" label="AUTOTESTPRIVATE_GETREGISTEREDSYSTEMWEBAPPSFUNCTION"/>
+  <int value="1503"
+      label="FILEMANAGERPRIVATEINTERNAL_TOGGLEADDEDTOHOLDINGSPACE"/>
+  <int value="1504" label="FILEMANAGERPRIVATEINTERNAL_GETHOLDINGSPACESTATE"/>
+  <int value="1505" label="DELETED_INPUTMETHODPRIVATE_SETCOMPOSINGRANGE"/>
+  <int value="1506" label="AUTOTESTPRIVATE_LAUNCHSYSTEMWEBAPP"/>
+  <int value="1507" label="ACCESSIBILITY_PRIVATE_PERFORMACCELERATORACTION"/>
+  <int value="1508" label="DECLARATIVENETREQUEST_ISREGEXSUPPORTED"/>
+  <int value="1509" label="DELETED_PASSWORDSPRIVATE_GETWEAKCREDENTIALS"/>
+  <int value="1510" label="ACCESSIBILITY_PRIVATE_MOVEMAGNIFIERTORECT"/>
+  <int value="1511" label="FILEMANAGERPRIVATE_SINGLEPARTITIONFORMAT"/>
+  <int value="1512" label="TABS_REMOVECSS"/>
+  <int value="1513" label="IDENTITY_CLEARALLCACHEDAUTHTOKENS"/>
+  <int value="1514" label="TABS_GROUP"/>
+  <int value="1515" label="TABS_UNGROUP"/>
+  <int value="1516"
+      label="DELETED_FILEMANAGERPRIVATEINTERNAL_GETDRIVETHUMBNAIL"/>
+  <int value="1517" label="DELETED_FILEMANAGERPRIVATEINTERNAL_GETPDFTHUMBNAIL"/>
+  <int value="1518" label="AUTOTESTPRIVATE_REMOVEALLNOTIFICATIONS"/>
+  <int value="1519" label="VIRTUALKEYBOARDPRIVATE_OPENSUGGESTIONSETTINGS"/>
+  <int value="1520" label="ACCESSIBILITY_PRIVATE_SETPOINTSCANSTATE"/>
+  <int value="1521" label="AUTOTESTPRIVATE_ACTIVATEADJACENTDESKSTOTARGETINDEX"/>
+  <int value="1522" label="DECLARATIVENETREQUEST_GETAVAILABLESTATICRULECOUNT"/>
+  <int value="1523" label="CHROMEOSINFOPRIVATE_ISTABLETMODEENABLED"/>
+  <int value="1524"
+      label="DELETED_FILEMANAGERPRIVATEINTERNAL_GETARCDOCUMENTSPROVIDERTHUMBNAIL"/>
+  <int value="1525" label="ACCESSIBILITY_PRIVATE_ISFEATUREENABLED"/>
+  <int value="1526" label="INPUTMETHODPRIVATE_ONAUTOCORRECT"/>
+  <int value="1527" label="TAB_GROUPS_GET"/>
+  <int value="1528" label="TAB_GROUPS_QUERY"/>
+  <int value="1529" label="TAB_GROUPS_UPDATE"/>
+  <int value="1530" label="ACCESSIBILITY_PRIVATE_UPDATESELECTTOSPEAKPANEL"/>
+  <int value="1531" label="TAB_GROUPS_MOVE"/>
+  <int value="1532" label="SCRIPTING_EXECUTESCRIPT"/>
+  <int value="1533" label="DECLARATIVENETREQUEST_UPDATESESSIONRULES"/>
+  <int value="1534" label="DECLARATIVENETREQUEST_GETSESSIONRULES"/>
+  <int value="1535" label="SCRIPTING_INSERTCSS"/>
+  <int value="1536" label="VIRTUALKEYBOARDPRIVATE_PASTECLIPBOARDITEM"/>
+  <int value="1537" label="VIRTUALKEYBOARDPRIVATE_GETCLIPBOARDHISTORY"/>
+  <int value="1538" label="VIRTUALKEYBOARDPRIVATE_DELETECLIPBOARDITEM"/>
+  <int value="1539" label="FILEMANAGERPRIVATE_ISTABLETMODEENABLED"/>
+  <int value="1540" label="FILEMANAGERPRIVATE_NOTIFYDRIVEDIALOGRESULT"/>
+  <int value="1541" label="ENTERPRISEREPORTINGPRIVATE_GETCONTEXTINFO"/>
+  <int value="1542" label="SCRIPTING_REMOVECSS"/>
+  <int value="1543" label="FILEMANAGERPRIVATEINTERNAL_GETVOLUMEROOT"/>
+  <int value="1544"
+      label="LANGUAGESETTINGSPRIVATE_GETALWAYSTRANSLATELANGUAGES"/>
+  <int value="1545"
+      label="LANGUAGESETTINGSPRIVATE_SETLANGUAGEALWAYSTRANSLATESTATE"/>
+  <int value="1546" label="ACCESSIBILITY_PRIVATE_SHOWCONFIRMATIONDIALOG"/>
+  <int value="1547" label="AUTOTESTPRIVATE_INSTALLBOREALIS"/>
+  <int value="1548" label="LANGUAGESETTINGSPRIVATE_SETTRANSLATETARGETLANGUAGE"/>
+  <int value="1549" label="LANGUAGESETTINGSPRIVATE_GETNEVERTRANSLATELANGUAGES"/>
+  <int value="1550" label="ACTION_GETUSERSETTINGS"/>
+  <int value="1551" label="ENTERPRISEREPORTINGPRIVATE_GETCERTIFICATE"/>
+  <int value="1552" label="AUTOTESTPRIVATE_ISSYSTEMWEBAPPOPENFUNCTION"/>
+  <int value="1553" label="TTSENGINE_SENDTTSAUDIO"/>
+  <int value="1554" label="AUTOTESTPRIVATE_ACTIVATEAPPWINDOW"/>
+  <int value="1555" label="FILEMANAGERPRIVATE_CANCELZIP"/>
+  <int value="1556"
+      label="ACCESSIBILITY_PRIVATE_GETLOCALIZEDDOMKEYSTRINGFORKEYCODE"/>
+  <int value="1557" label="SCRIPTING_REGISTERCONTENTSCRIPTS"/>
+  <int value="1558"
+      label="DELETED_WMDESKSPRIVATE_CAPTUREACTIVEDESKANDSAVETEMPLATE"/>
+  <int value="1559" label="DELETED_WMDESKSPRIVATE_UPDATEDESKTEMPLATE"/>
+  <int value="1560" label="WMDESKSPRIVATE_GETSAVEDDESKS"/>
+  <int value="1561" label="DELETED_WMDESKSPRIVATE_DELETEDESKTEMPLATE"/>
+  <int value="1562" label="WMDESKSPRIVATE_LAUNCHDESK"/>
+  <int value="1563" label="AUTOTESTPRIVATE_SETSHELFICONPIN"/>
+  <int value="1564" label="SCRIPTING_GETREGISTEREDCONTENTSCRIPTS"/>
+  <int value="1565" label="OS_TELEMETRY_GETVPDINFO"/>
+  <int value="1566" label="ACCESSIBILITY_PRIVATE_MAGNIFIERCENTERONPOINT"/>
+  <int value="1567" label="STORAGE_SETACCESSLEVEL"/>
+  <int value="1568" label="OS_TELEMETRY_GETOEMDATA"/>
+  <int value="1569" label="SCRIPTING_UNREGISTERCONTENTSCRIPTS"/>
+  <int value="1570" label="FILEMANAGERPRIVATE_GETZIPPROGRESS"/>
+  <int value="1571" label="DELETED_CRYPTOTOKENPRIVATE_CANMAKEU2FAPIREQUEST"/>
+  <int value="1572" label="OS_DIAGNOSTICS_RUNBATTERYCAPACITYROUTINE"/>
+  <int value="1573" label="WEB_AUTHENTICATION_PROXY_COMPLETE_ISUVPAA_REQUEST"/>
+  <int value="1574" label="LOGIN_LAUNCHSHAREDMANAGEDGUESTSESSION"/>
+  <int value="1575" label="LOGIN_ENTERSHAREDSESSION"/>
+  <int value="1576" label="LOGIN_UNLOCKSHAREDSESSION"/>
+  <int value="1577" label="LOGIN_ENDSHAREDSESSION"/>
+  <int value="1578" label="AUTOTESTPRIVATE_GETDEFAULTPINNEDAPPIDS"/>
+  <int value="1579" label="LOGIN_SETDATAFORNEXTLOGINATTEMPT"/>
+  <int value="1580" label="OS_DIAGNOSTICS_GETAVAILABLEROUTINES"/>
+  <int value="1581" label="OS_DIAGNOSTICS_RUNBATTERYHEALTHROUTINE"/>
+  <int value="1582" label="OS_DIAGNOSTICS_RUNBATTERYDISCHARGEROUTINE"/>
+  <int value="1583" label="OS_DIAGNOSTICS_RUNBATTERYCHARGEROUTINE"/>
+  <int value="1584" label="OS_DIAGNOSTICS_RUNCPUSTRESSROUTINE"/>
+  <int value="1585" label="OS_DIAGNOSTICS_RUNCPUCACHEROUTINE"/>
+  <int value="1586" label="SCRIPTING_UPDATECONTENTSCRIPTS"/>
+  <int value="1587" label="FILEMANAGERPRIVATE_OPENWINDOW"/>
+  <int value="1588" label="OS_DIAGNOSTICS_RUNMEMORYROUTINE"/>
+  <int value="1589" label="OS_DIAGNOSTICS_GETROUTINEUPDATE"/>
+  <int value="1590" label="SPEECHRECOGNITIONPRIVATE_START"/>
+  <int value="1591" label="SPEECHRECOGNITIONPRIVATE_STOP"/>
+  <int value="1592" label="FILEMANAGERPRIVATEINTERNAL_STARTIOTASK"/>
+  <int value="1593" label="DELETED_WALLPAPERPRIVATE_ISSWAENABLED"/>
+  <int value="1594" label="INPUTMETHODPRIVATE_GETTEXTFIELDBOUNDS"/>
+  <int value="1595" label="PASSWORDSPRIVATE_GETURLCOLLECTION"/>
+  <int value="1596" label="PASSWORDSPRIVATE_ADDPASSWORD"/>
+  <int value="1597" label="PASSWORDSPRIVATE_ISACCOUNTSTOREDEFAULT"/>
+  <int value="1598" label="WEB_AUTHENTICATION_PROXY_ATTACH"/>
+  <int value="1599" label="WEB_AUTHENTICATION_PROXY_DETACH"/>
+  <int value="1600" label="FILEMANAGERPRIVATE_CANCELIOTASK"/>
+  <int value="1601" label="AUTOTESTPRIVATE_GETDISPLAYSMOOTHNESS"/>
+  <int value="1602" label="AUTOTESTPRIVATE_RESETHOLDINGSPACE"/>
+  <int value="1603" label="FILEMANAGERPRIVATEINTERNAL_GETDISALLOWEDTRANSFERS"/>
+  <int value="1604" label="WMDESKSPRIVATE_GETDESKTEMPLATEJSON"/>
+  <int value="1605" label="OS_DIAGNOSTICS_RUNCPUFLOATINGPOINTACCURACYROUTINE"/>
+  <int value="1606" label="OS_DIAGNOSTICS_RUNCPUPRIMESEARCHROUTINE"/>
+  <int value="1607" label="ACCESSIBILITY_PRIVATE_UPDATEDICTATIONBUBBLE"/>
+  <int value="1608" label="TERMINALPRIVATE_GETOSINFO"/>
+  <int value="1609" label="OS_TELEMETRY_GETMEMORYINFO"/>
+  <int value="1610" label="AUTOTESTPRIVATE_COULDALLOWCROSTINI"/>
+  <int value="1611" label="WEB_AUTHENTICATION_PROXY_COMPLETE_CREATE_REQUEST"/>
+  <int value="1612" label="DEVELOPERPRIVATE_GETUSERSITESETTINGS"/>
+  <int value="1613" label="ACTION_OPENPOPUP"/>
+  <int value="1614" label="OS_TELEMETRY_GETCPUINFO"/>
+  <int value="1615" label="FILEMANAGERPRIVATE_OPENURL"/>
+  <int value="1616" label="FILEMANAGERPRIVATE_GETFRAMECOLOR"/>
+  <int value="1617" label="DEVELOPERPRIVATE_ADDUSERSPECIFIEDSITES"/>
+  <int value="1618" label="DEVELOPERPRIVATE_REMOVEUSERSPECIFIEDSITES"/>
+  <int value="1619" label="AUTOTESTPRIVATE_STARTARC"/>
+  <int value="1620" label="AUTOTESTPRIVATE_STOPARC"/>
+  <int value="1621" label="PASSWORDSPRIVATE_MUTEINSECURECREDENTIAL"/>
+  <int value="1622" label="WEB_AUTHENTICATION_PROXY_COMPLETE_GET_REQUEST"/>
+  <int value="1623" label="PASSWORDSPRIVATE_UNMUTEINSECURECREDENTIAL"/>
+  <int value="1624" label="OS_DIAGNOSTICS_RUNSMARTCTLCHECKROUTINE"/>
+  <int value="1625" label="OS_DIAGNOSTICS_RUNNVMEWEARLEVELROUTINE"/>
+  <int value="1626" label="AUTOFILLPRIVATE_ADDVIRTUALCARD"/>
+  <int value="1627" label="AUTOFILLPRIVATE_REMOVEVIRTUALCARD"/>
+  <int value="1628" label="FILEMANAGERPRIVATE_LISTMOUNTABLEGUESTS"/>
+  <int value="1629"
+      label="AUTOTESTPRIVATE_STARTLOGINEVENTRECORDERDATACOLLECTION"/>
+  <int value="1630" label="AUTOTESTPRIVATE_GETLOGINEVENTRECORDERLOGINEVENTS"/>
+  <int value="1631" label="AUTOTESTPRIVATE_ADDLOGINEVENTFORTESTING"/>
+  <int value="1632" label="OS_DIAGNOSTICS_RUNDISKREADROUTINE"/>
+  <int value="1633" label="FILEMANAGERPRIVATE_MOUNTGUEST"/>
+  <int value="1634" label="DELETED_AUTOTESTPRIVATE_ISLACROSPRIMARYBROWSER"/>
+  <int value="1635" label="INPUTMETHODPRIVATE_SWITCHTOLASTUSEDINPUTMETHOD"/>
+  <int value="1636" label="AUTOTESTPRIVATE_LOADSMARTDIMCOMPONENT"/>
+  <int value="1637" label="TERMINALPRIVATE_GETPREFS"/>
+  <int value="1638" label="TERMINALPRIVATE_SETPREFS"/>
+  <int value="1639" label="DELETED_AUTOTESTPRIVATE_GETCRYPTOHOMERECOVERYDATA"/>
+  <int value="1640" label="TERMINALPRIVATE_OPENSETTINGSSUBPAGE"/>
+  <int value="1641" label="AUTOTESTPRIVATE_GETLACROSINFO"/>
+  <int value="1642" label="LOGIN_LAUNCHSAMLUSERSESSION"/>
+  <int value="1643" label="LOGIN_LOCKCURRENTSESSION"/>
+  <int value="1644" label="LOGIN_UNLOCKCURRENTSESSION"/>
+  <int value="1645" label="OS_TELEMETRY_GETBATTERYINFO"/>
+  <int value="1646" label="FILEMANAGERPRIVATE_POLLDRIVEHOSTEDFILEPINSTATES"/>
+  <int value="1647" label="OS_DIAGNOSTICS_RUNLANCONNECTIVITYROUTINE"/>
+  <int value="1648" label="LOGIN_REQUESTEXTERNALLOGOUT"/>
+  <int value="1649" label="LOGIN_NOTIFYEXTERNALLOGOUTDONE"/>
+  <int value="1650"
+      label="DELETED_PASSWORDSPRIVATE_RECORDCHANGEPASSWORDFLOWSTARTED"/>
+  <int value="1651" label="ENTERPRISEREPORTINGPRIVATE_ENQUEUERECORD"/>
+  <int value="1652" label="FILEMANAGERPRIVATE_SENDFEEDBACK"/>
+  <int value="1653" label="DECLARATIVENETREQUEST_TESTMATCHOUTCOME"/>
+  <int value="1654" label="FILEMANAGERPRIVATE_CANCELMOUNTING"/>
+  <int value="1655" label="AUTOMATIONINTERNAL_DISABLEDESKTOP"/>
+  <int value="1656" label="ACCESSIBILITY_PRIVATE_INSTALLPUMPKINFORDICTATION"/>
+  <int value="1657" label="BOOKMARKMANAGERPRIVATE_OPENINNEWTAB"/>
+  <int value="1658" label="BOOKMARKMANAGERPRIVATE_OPENINNEWWINDOW"/>
+  <int value="1659" label="WMDESKSPRIVATE_REMOVEDESK"/>
+  <int value="1660" label="SHAREDSTORAGEPRIVATE_GET"/>
+  <int value="1661" label="SHAREDSTORAGEPRIVATE_SET"/>
+  <int value="1662" label="SHAREDSTORAGEPRIVATE_REMOVE"/>
+  <int value="1663" label="FILEMANAGERPRIVATEINTERNAL_GETDLPMETADATA"/>
+  <int value="1664" label="WMDESKSPRIVATE_GETALLDESKS"/>
+  <int value="1665" label="AUTOTESTPRIVATE_FORCEAUTOTHEMEMODE"/>
+  <int value="1666" label="OS_TELEMETRY_GETSTATEFULPARTITIONINFO"/>
+  <int value="1667" label="OS_DIAGNOSTICS_RUNACPOWERROUTINE"/>
+  <int value="1668" label="OS_TELEMETRY_GETOSVERSIONINFO"/>
+  <int value="1669" label="ENTERPRISE_REMOTEAPPS_ADDFOLDER"/>
+  <int value="1670" label="ENTERPRISE_REMOTEAPPS_ADDAPP"/>
+  <int value="1671" label="ENTERPRISE_REMOTEAPPS_DELETEAPP"/>
+  <int value="1672" label="ENTERPRISEREPORTINGPRIVATE_GETAVINFO"/>
+  <int value="1673" label="ENTERPRISEREPORTINGPRIVATE_GETHOTFIXES"/>
+  <int value="1674" label="AUTOTESTPRIVATE_GETACCESSTOKEN"/>
+  <int value="1675" label="DEVELOPERPRIVATE_GETUSERANDEXTENSIONSITESBYETLD"/>
+  <int value="1676" label="AUTOTESTPRIVATE_SENDARCOVERLAYCOLOR"/>
+  <int value="1677" label="AUTOTESTPRIVATE_ISINPUTMETHODREADYFORTESTING"/>
+  <int value="1678" label="AUTOTESTPRIVATE_GETARCAPPKILLS"/>
+  <int value="1679" label="FILEMANAGERPRIVATE_OPENMANAGESYNCSETTINGS"/>
+  <int value="1680"
+      label="DELETED_PASSWORDSPRIVATE_STARTAUTOMATEDPASSWORDCHANGE"/>
+  <int value="1681" label="OFFSCREEN_CREATEDOCUMENT"/>
+  <int value="1682" label="DELETED_PASSWORDSPRIVATE_REFRESHSCRIPTSIFNECESSARY"/>
+  <int value="1683" label="OFFSCREEN_CLOSEDOCUMENT"/>
+  <int value="1684" label="WMDESKSPRIVATE_SETWINDOWPROPERTIES"/>
+  <int value="1685" label="AUTOTESTPRIVATE_LAUNCHFILESAPPTOPATH"/>
+  <int value="1686" label="SIDEPANEL_GETOPTIONS"/>
+  <int value="1687" label="SIDEPANEL_SETOPTIONS"/>
+  <int value="1688" label="ENTERPRISEREPORTINGPRIVATE_GETFILESYSTEMINFO"/>
+  <int value="1689" label="FILEMANAGERPRIVATE_GETDRIVEQUOTAMETADATA"/>
+  <int value="1690" label="DOWNLOADS_SETUIOPTIONS"/>
+  <int value="1691" label="AUTOTESTPRIVATE_GETDESKCOUNT"/>
+  <int value="1692" label="METRICSPRIVATE_RECORDSPARSEVALUEWITHPERSISTENTHASH"/>
+  <int value="1693" label="METRICSPRIVATE_RECORDSPARSEVALUEWITHHASHMETRICNAME"/>
+  <int value="1694" label="FILEMANAGERPRIVATE_GETDLPRESTRICTIONDETAILS"/>
+  <int value="1695" label="ACCESSIBILITY_PRIVATE_SILENCESPOKENFEEDBACK"/>
+  <int value="1696" label="AUTOTESTPRIVATE_SETALLOWEDPREF"/>
+  <int value="1697" label="DELETED_PASSWORDSPRIVATE_REQUESTCREDENTIALDETAILS"/>
+  <int value="1698" label="DEVELOPERPRIVATE_GETMATCHINGEXTENSIONSFORSITE"/>
+  <int value="1699" label="ACCESSIBILITY_PRIVATE_GETDLCCONTENTS"/>
+  <int value="1700" label="FILEMANAGERPRIVATEINTERNAL_PARSETRASHINFOFILES"/>
+  <int value="1701" label="PASSWORDSPRIVATE_EXTENDAUTHVALIDITY"/>
+  <int value="1702" label="AUTOTESTPRIVATE_GETDESKSINFO"/>
+  <int value="1703" label="ENTERPRISEREPORTINGPRIVATE_GETSETTINGS"/>
+  <int value="1704" label="WMDESKSPRIVATE_SAVEACTIVEDESK"/>
+  <int value="1705" label="WMDESKSPRIVATE_DELETESAVEDDESK"/>
+  <int value="1706" label="WMDESKSPRIVATE_RECALLSAVEDDESK"/>
+  <int value="1707" label="FILEMANAGERPRIVATE_GETDLPBLOCKEDCOMPONENTS"/>
+  <int value="1708" label="FILEMANAGERPRIVATE_GETDIALOGCALLER"/>
+  <int value="1709" label="OS_TELEMETRY_GETNONREMOVABLEBLOCKDEVICESINFO"/>
+  <int value="1710" label="OS_DIAGNOSTICS_RUNDNSRESOLUTIONROUTINE"/>
+  <int value="1711" label="OS_DIAGNOSTICS_RUNSIGNALSTRENGTHROUTINE"/>
+  <int value="1712" label="OS_DIAGNOSTICS_RUNGATEWAYCANBEPINGEDROUTINE"/>
+  <int value="1713" label="OS_DIAGNOSTICS_RUNDNSRESOLVERPRESENTROUTINE"/>
+  <int value="1714" label="OS_TELEMETRY_GETINTERNETCONNECTIVITYINFO"/>
+  <int value="1715" label="PASSWORDSPRIVATE_GETINSECURECREDENTIALS"/>
+  <int value="1716" label="ACTION_ISENABLED"/>
+  <int value="1717"
+      label="PASSWORDSPRIVATE_SWITCHBIOMETRICAUTHBEFOREFILLINGSTATE"/>
+  <int value="1718" label="WMDESKSPRIVATE_GETACTIVEDESK"/>
+  <int value="1719" label="WMDESKSPRIVATE_SWITCHDESK"/>
+  <int value="1720" label="OS_TELEMETRY_GETTPMINFO"/>
+  <int value="1721"
+      label="INPUTMETHODPRIVATE_NOTIFYINPUTMETHODREADYFORTESTING"/>
+  <int value="1722" label="AUTOTESTPRIVATE_MAKEFUSEBOXTEMPDIR"/>
+  <int value="1723" label="AUTOTESTPRIVATE_REMOVEFUSEBOXTEMPDIR"/>
+  <int value="1724" label="AUTOTESTPRIVATE_GETTHROUGHPUTTRACKERDATA"/>
+  <int value="1725" label="ENTERPRISE_REMOTEAPPS_SORTLAUNCHER"/>
+  <int value="1726" label="PASSWORDSPRIVATE_SHOWADDSHORTCUTDIALOG"/>
+  <int value="1727" label="ACTION_GETBADGETEXTCOLOR"/>
+  <int value="1728" label="ACTION_SETBADGETEXTCOLOR"/>
+  <int value="1729" label="AUTOTESTPRIVATE_REMOVECOMPONENTEXTENSION"/>
+  <int value="1730" label="PASSWORDSPRIVATE_REQUESTCREDENTIALSDETAILS"/>
+  <int value="1731" label="PASSWORDSPRIVATE_GETCREDENTIALGROUPS"/>
+  <int value="1732" label="AUTOTESTPRIVATE_GETLAUNCHERSSEARCHBOXSTATE"/>
+  <int value="1733" label="OS_DIAGNOSTICS_RUNSENSITIVESENSORROUTINE"/>
+  <int value="1734" label="OS_DIAGNOSTICS_RUNNVMESELFTESTROUTINE"/>
+  <int value="1735" label="AUTOTESTPRIVATE_STARTFRAMECOUNTING"/>
+  <int value="1736" label="AUTOTESTPRIVATE_STOPFRAMECOUNTING"/>
+  <int value="1737" label="FEEDBACKPRIVATE_OPENFEEDBACK"/>
+  <int value="1738" label="OS_DIAGNOSTICS_RUNFINGERPRINTALIVEROUTINE"/>
+  <int value="1739" label="DEVELOPERPRIVATE_UPDATESITEACCESS"/>
+  <int value="1740" label="AUTOTESTPRIVATE_REFRESHREMOTECOMMANDS"/>
+  <int value="1741" label="FILESYSTEMPROVIDERINTERNAL_RESPONDTOMOUNTREQUEST"/>
+  <int value="1742" label="OS_DIAGNOSTICS_RUNEMMCLIFETIMEROUTINE"/>
+  <int value="1743" label="AUTOFILLPRIVATE_SAVEIBAN"/>
+  <int value="1744" label="AUTOFILLPRIVATE_GETIBANLIST"/>
+  <int value="1745" label="ENTERPRISE_PLATFORMKEYS_CHALLENGEKEY"/>
+  <int value="1746" label="PDFVIEWERPRIVATE_ISALLOWEDLOCALFILEACCESS"/>
+  <int value="1747" label="DECLARATIVENETREQUEST_UPDATESTATICRULES"/>
+  <int value="1748" label="FILEMANAGERPRIVATEINTERNAL_SEARCHFILES"/>
+  <int value="1749" label="SYSTEMLOG_ADD"/>
+  <int value="1750" label="DECLARATIVENETREQUEST_GETDISABLEDRULEIDS"/>
+  <int value="1751"
+      label="SMARTCARDPROVIDERPRIVATE_REPORTESTABLISHCONTEXTRESULT"/>
+  <int value="1752"
+      label="SMARTCARDPROVIDERPRIVATE_REPORTRELEASECONTEXTRESULT"/>
+  <int value="1753" label="SMARTCARDPROVIDERPRIVATE_REPORTLISTREADERSRESULT"/>
+  <int value="1754"
+      label="SMARTCARDPROVIDERPRIVATE_REPORTGETSTATUSCHANGERESULT"/>
+  <int value="1755" label="FILEMANAGERPRIVATE_RESUMEIOTASK"/>
+  <int value="1756" label="PASSWORDSPRIVATE_GETCREDENTIALSWITHREUSEDPASSWORD"/>
+  <int value="1757" label="OS_TELEMETRY_GETAUDIOINFO"/>
+  <int value="1758" label="OS_TELEMETRY_GETMARKETINGINFO"/>
+  <int value="1759" label="OS_TELEMETRY_GETUSBBUSINFO"/>
+  <int value="1760" label="PDFVIEWERPRIVATE_ISPDFOCRALWAYSACTIVE"/>
+  <int value="1761" label="PDFVIEWERPRIVATE_SETPDFOCRPREF"/>
+  <int value="1762" label="AUTOFILLPRIVATE_GETACCOUNTINFO"/>
+  <int value="1763" label="FILEMANAGERPRIVATE_PROGRESSPAUSEDTASKS"/>
+  <int value="1764" label="BOOKMARKMANAGERPRIVATE_IMPORT"/>
+  <int value="1765" label="BOOKMARKMANAGERPRIVATE_EXPORT"/>
+  <int value="1766" label="PASSWORDSPRIVATE_SHOWEXPORTEDFILEINSHELL"/>
+  <int value="1767" label="FILEMANAGERPRIVATE_TOGGLEBULKPINNING"/>
+  <int value="1768" label="SMARTCARDPROVIDERPRIVATE_REPORTCONNECTRESULT"/>
+  <int value="1769"
+      label="DELETED_SMARTCARDPROVIDERPRIVATE_REPORTDISCONNECTRESULT"/>
+  <int value="1770" label="WMDESKSPRIVATE_GETDESKBYID"/>
+  <int value="1771" label="AUTOFILLPRIVATE_ISVALIDIBAN"/>
+  <int value="1772" label="ACCESSIBILITY_PRIVATE_ISLACROSPRIMARY"/>
+  <int value="1773" label="POWER_REPORTACTIVITY"/>
+  <int value="1774" label="PASSWORDSPRIVATE_CONTINUEIMPORT"/>
+  <int value="1775" label="PASSWORDSPRIVATE_RESETIMPORTER"/>
+  <int value="1776" label="SMARTCARDPROVIDERPRIVATE_REPORTPLAINRESULT"/>
+  <int value="1777" label="RUNTIME_GETCONTEXTS"/>
+  <int value="1778" label="OS_EVENTS_ISEVENTSUPPORTED"/>
+  <int value="1779" label="OS_EVENTS_STARTCAPTURINGEVENTS"/>
+  <int value="1780" label="OS_EVENTS_STOPCAPTURINGEVENTS"/>
+  <int value="1781" label="SIDEPANEL_SETPANELBEHAVIOR"/>
+  <int value="1782" label="SIDEPANEL_GETPANELBEHAVIOR"/>
+  <int value="1783" label="FILEMANAGERPRIVATE_GETBULKPINPROGRESS"/>
+  <int value="1784" label="ENTERPRISE_REMOTEAPPS_SETPINNEDAPPS"/>
+  <int value="1785" label="SMARTCARDPROVIDERPRIVATE_REPORTDATARESULT"/>
+  <int value="1786" label="FILEMANAGERPRIVATE_CALCULATEBULKPINREQUIREDSPACE"/>
+  <int value="1787"
+      label="AUTOFILLPRIVATE_AUTHENTICATEUSERANDFLIPMANDATORYAUTHTOGGLE"/>
+  <int value="1788" label="FILEMANAGERPRIVATE_SHOWPOLICYDIALOG"/>
+  <int value="1789" label="SIDEPANEL_OPEN"/>
+  <int value="1790" label="AUTOTESTPRIVATE_INSTALLBRUSCHETTA"/>
+  <int value="1791" label="AUTOTESTPRIVATE_REMOVEBRUSCHETTA"/>
+  <int value="1792" label="AUTOFILLPRIVATE_GETLOCALCARD"/>
+  <int value="1793" label="AUTOTESTPRIVATE_ISFEATUREENABLED"/>
+  <int value="1794" label="PASSWORDSPRIVATE_CHANGECREDENTIAL"/>
+  <int value="1795" label="SMARTCARDPROVIDERPRIVATE_REPORTSTATUSRESULT"/>
+  <int value="1796" label="AUTOTESTPRIVATE_WAITFORAMBIENTVIDEO"/>
+  <int value="1797" label="GUESTVIEWINTERNAL_DESTROYUNATTACHEDGUEST"/>
+  <int value="1798" label="AUTOTESTPRIVATE_GETCURRENTINPUTMETHODDESCRIPTOR"/>
+  <int value="1799" label="OS_DIAGNOSTICS_RUNBLUETOOTHPOWERROUTINE"/>
+  <int value="1800" label="OS_DIAGNOSTICS_RUNUFSLIFETIMEROUTINE"/>
+  <int value="1801" label="OS_TELEMETRY_GETDISPLAYINFO"/>
+  <int value="1802" label="OS_DIAGNOSTICS_RUNPOWERBUTTONROUTINE"/>
+  <int value="1803" label="OS_DIAGNOSTICS_RUNAUDIODRIVERROUTINE"/>
+  <int value="1804" label="READINGLIST_ADDENTRY"/>
+  <int value="1805" label="READINGLIST_REMOVEENTRY"/>
+  <int value="1806" label="PASSWORDSPRIVATE_FETCHFAMILYMEMBERS"/>
+  <int value="1807" label="READINGLIST_UPDATEENTRY"/>
+  <int value="1808" label="READINGLIST_QUERY"/>
+  <int value="1809" label="DEVELOPERPRIVATE_REMOVEMULTIPLEEXTENSIONS"/>
+  <int value="1810" label="PASSWORDSPRIVATE_SHAREPASSWORD"/>
+  <int value="1811" label="AUTOFILLPRIVATE_CHECKIFDEVICEAUTHAVAILABLE"/>
+  <int value="1812" label="OS_DIAGNOSTICS_RUNBLUETOOTHDISCOVERYROUTINE"/>
+  <int value="1813"
+      label="IMAGELOADERPRIVATE_GETARCDOCUMENTSPROVIDERTHUMBNAIL"/>
+  <int value="1814" label="IMAGELOADERPRIVATE_GETDRIVETHUMBNAIL"/>
+  <int value="1815" label="IMAGELOADERPRIVATE_GETPDFTHUMBNAIL"/>
+  <int value="1816" label="ACCESSIBILITYSERVICEPRIVATE_SPEAKSELECTEDTEXT"/>
+  <int value="1817" label="USERSCRIPTS_REGISTER"/>
+  <int value="1818" label="OS_DIAGNOSTICS_RUNBLUETOOTHSCANNINGROUTINE"/>
+  <int value="1819" label="OS_DIAGNOSTICS_RUNBLUETOOTHPAIRINGROUTINE"/>
+  <int value="1820" label="FILEMANAGERPRIVATE_DISMISSIOTASK"/>
+  <int value="1821" label="ACCESSIBILITY_PRIVATE_SHOWTOAST"/>
+  <int value="1822" label="USERSCRIPTS_GETSCRIPTS"/>
+  <int value="1823" label="FILEMANAGERPRIVATE_GETDEVICECONNECTIONSTATE"/>
+  <int value="1824" label="USERSCRIPTS_UNREGISTER"/>
+  <int value="1825" label="AUTOTESTPRIVATE_SETARCINTERACTIVESTATE"/>
+  <int value="1826" label="OS_DIAGNOSTICS_CREATEMEMORYROUTINE"/>
+  <int value="1827" label="OS_DIAGNOSTICS_STARTROUTINE"/>
+  <int value="1828" label="OS_DIAGNOSTICS_CANCELROUTINE"/>
+  <int value="1829" label="OS_DIAGNOSTICS_ISMEMORYROUTINEARGUMENTSUPPORTED"/>
+  <int value="1830"
+      label="ACCESSIBILITY_PRIVATE_CLIPBOARDCOPYINACTIVELACROSGOOGLEDOC"/>
+  <int value="1831" label="USERSCRIPTS_UPDATE"/>
+  <int value="1832" label="INPUTMETHODPRIVATE_GETLANGUAGEPACKSTATUS"/>
+  <int value="1833" label="OS_DIAGNOSTICS_RUNFANROUTINE"/>
+  <int value="1834" label="AUTOTESTPRIVATE_ISFIELDTRIALACTIVE"/>
+  <int value="1835" label="AUTOTESTPRIVATE_GETARCWAKEFULNESSMODE"/>
+  <int value="1836" label="OS_DIAGNOSTICS_CREATEVOLUMEBUTTONROUTINE"/>
+  <int value="1837"
+      label="OS_DIAGNOSTICS_ISVOLUMEBUTTONROUTINEARGUMENTSUPPORTED"/>
+  <int value="1838" label="USERSCRIPTS_CONFIGUREWORLD"/>
+  <int value="1839" label="ENTERPRISE_KIOSKINPUT_SETCURRENTINPUTMETHOD"/>
+  <int value="1840" label="AUTOFILLPRIVATE_BULKDELETEALLCVCS"/>
+  <int value="1841" label="PDFVIEWERPRIVATE_GETSTREAMINFO"/>
+  <int value="1842" label="PDFVIEWERPRIVATE_SETPDFPLUGINATTRIBUTES"/>
+  <int value="1843" label="ACCESSIBILITY_PRIVATE_SETCURSORPOSITION"/>
+  <int value="1844" label="ACCESSIBILITY_PRIVATE_GETTTSDLCCONTENTS"/>
+  <int value="1845" label="OS_DIAGNOSTICS_CREATEFANROUTINE"/>
+  <int value="1846" label="OS_DIAGNOSTICS_ISFANROUTINEARGUMENTSUPPORTED"/>
+  <int value="1847" label="AUTOTESTPRIVATE_OVERRIDEORCARESPONSE"/>
+  <int value="1848" label="ODFSCONFIGPRIVATE_GETMOUNT"/>
+  <int value="1849" label="ODFSCONFIGPRIVATE_GETACCOUNTRESTRICTIONS"/>
+  <int value="1850" label="DOCUMENTSCAN_GETSCANNERLIST"/>
+  <int value="1851" label="OS_MANAGEMENT_SETAUDIOGAIN"/>
+  <int value="1852" label="DOCUMENTSCAN_OPENSCANNER"/>
+  <int value="1853" label="DOCUMENTSCAN_CLOSESCANNER"/>
+  <int value="1854" label="ACCESSIBILITY_PRIVATE_GETDISPLAYBOUNDS"/>
+  <int value="1855" label="AUTOFILLPRIVATE_SERVERIBANLINKCLICKED"/>
+  <int value="1856" label="AUTOTESTPRIVATE_CLEARALLOWEDPREF"/>
+  <int value="1857" label="DOCUMENTSCAN_STARTSCAN"/>
+  <int value="1858" label="DOCUMENTSCAN_CANCELSCAN"/>
+  <int value="1859" label="DOCUMENTSCAN_READSCANDATA"/>
+  <int value="1860" label="DOCUMENTSCAN_SETOPTIONS"/>
+  <int value="1861" label="DOCUMENTSCAN_GETOPTIONGROUPS"/>
+</enum>
+
+<enum name="ExtensionInstallationCrxInstallError">
+  <int value="0" label="NONE"/>
+  <int value="1" label="CONVERT_USER_SCRIPT_TO_EXTENSION_FAILED"/>
+  <int value="2" label="UNEXPECTED_ID"/>
+  <int value="3" label="UNEXPECTED_VERSION"/>
+  <int value="4" label="MISMATCHED_VERSION"/>
+  <int value="5" label="MANIFEST_INVALID"/>
+  <int value="6" label="INSTALL_NOT_ENABLED"/>
+  <int value="7" label="OFFSTORE_INSTALL_DISALLOWED"/>
+  <int value="8" label="INCORRECT_APP_CONTENT_TYPE"/>
+  <int value="9" label="NOT_INSTALLED_FROM_GALLERY"/>
+  <int value="10" label="INCORRECT_INSTALL_HOST"/>
+  <int value="11" label="DEPENDENCY_NOT_SHARED_MODULE"/>
+  <int value="12" label="DEPENDENCY_OLD_VERSION"/>
+  <int value="13" label="DEPENDENCY_NOT_ALLOWLISTED"/>
+  <int value="14" label="UNSUPPORTED_REQUIREMENTS"/>
+  <int value="15" label="EXTENSION_IS_BLOCKLISTED"/>
+  <int value="16" label="DISALLOWED_BY_POLICY"/>
+  <int value="17" label="KIOSK_MODE_ONLY"/>
+  <int value="18" label="OVERLAPPING_WEB_EXTENT"/>
+  <int value="19" label="CANT_DOWNGRADE_VERSION"/>
+  <int value="20" label="MOVE_DIRECTORY_TO_PROFILE_FAILED"/>
+  <int value="21" label="CANT_LOAD_EXTENSION"/>
+  <int value="22" label="USER_CANCELED"/>
+  <int value="23" label="USER_ABORTED"/>
+  <int value="24" label="UPDATE_NON_EXISTING_EXTENSION"/>
+</enum>
+
+<enum name="ExtensionInstallationDownloadingCacheStatus">
+  <int value="0" label="UNKNOWN"/>
+  <int value="1" label="DISABLED"/>
+  <int value="2" label="MISS"/>
+  <int value="3" label="OUTDATED"/>
+  <int value="4" label="HIT"/>
+  <int value="5" label="HIT_ON_MANIFEST_FETCH_FAILURE"/>
+</enum>
+
+<enum name="ExtensionInstallationDownloadingStage">
+  <int value="0" label="PENDING"/>
+  <int value="1" label="QUEUED_FOR_MANIFEST"/>
+  <int value="2" label="DOWNLOADING_MANIFEST"/>
+  <int value="3" label="DOWNLOADING_MANIFEST_RETRY"/>
+  <int value="4" label="PARSING_MANIFEST"/>
+  <int value="5" label="MANIFEST_LOADED"/>
+  <int value="6" label="QUEUED_FOR_CRX"/>
+  <int value="7" label="DOWNLOADING_CRX"/>
+  <int value="8" label="DOWNLOADING_CRX_RETRY"/>
+  <int value="9" label="FINISHED"/>
+</enum>
+
+<enum name="ExtensionInstallationStage">
+  <int value="0" label="CREATED"/>
+  <int value="1" label="PENDING"/>
+  <int value="2" label="DOWNLOADING"/>
+  <int value="3" label="INSTALLING"/>
+  <int value="4" label="COMPLETE"/>
+</enum>
+
+<enum name="ExtensionInstallCreationStage">
+  <int value="0" label="UNKNOWN"/>
+  <int value="1" label="CREATION_INITIATED"/>
+  <int value="2" label="NOTIFIED_FROM_MANAGEMENT_INITIAL_CREATION_FORCED"/>
+  <int value="3" label="NOTIFIED_FROM_MANAGEMENT_INITIAL_CREATION_NOT_FORCED"/>
+  <int value="4" label="NOTIFIED_FROM_MANAGEMENT"/>
+  <int value="5" label="NOTIFIED_FROM_MANAGEMENT_NOT_FORCED"/>
+  <int value="6" label="SEEN_BY_POLICY_LOADER"/>
+  <int value="7" label="SEEN_BY_EXTERNAL_PROVIDER"/>
+</enum>
+
+<enum name="ExtensionInstallFrictionDialogAction">
+  <int value="0" label="Close"/>
+  <int value="1" label="Learn more"/>
+  <int value="2" label="Continue to install"/>
+</enum>
+
+<enum name="ExtensionLaunchType">
+  <int value="0" label="PINNED"/>
+  <int value="1" label="REGULAR"/>
+  <int value="2" label="FULLSCREEN"/>
+  <int value="3" label="WINDOW"/>
+</enum>
+
+<enum name="ExtensionLocation">
+  <int value="0" label="INVALID"/>
+  <int value="1" label="INTERNAL"/>
+  <int value="2" label="EXTERNAL_PREF"/>
+  <int value="3" label="EXTERNAL_REGISTRY"/>
+  <int value="4" label="LOAD"/>
+  <int value="5" label="COMPONENT"/>
+  <int value="6" label="EXTERNAL_PREF_DOWNLOAD"/>
+  <int value="7" label="EXTERNAL_POLICY_DOWNLOAD"/>
+  <int value="8" label="COMMAND_LINE"/>
+  <int value="9" label="EXTERNAL_POLICY"/>
+  <int value="10" label="EXTERNAL_COMPONENT"/>
+</enum>
+
+<enum name="ExtensionNavigationScheme">
+  <int value="0" label="HttpOrHttps"/>
+  <int value="1" label="Chrome"/>
+  <int value="2" label="FileWithPermission"/>
+  <int value="3" label="FileWithoutPermission"/>
+  <int value="4" label="Other"/>
+</enum>
+
+<enum name="ExtensionNoUpdatesInfo">
+  <int value="0" label="Unknown"/>
+  <int value="1" label="Empty"/>
+  <int value="2" label="Rate limit"/>
+  <int value="3" label="Disabled by client"/>
+  <int value="4" label="Bandwidth limit"/>
+</enum>
+
+<enum name="ExtensionPermission3">
+<!-- Generated from extensions/common/mojom/api_permission_id.mojom.
+Called by update_extension_permission.py.-->
+
+  <int value="0" label="kInvalid"/>
+  <int value="1" label="kUnknown"/>
+  <int value="2" label="kAccessibilityFeaturesModify"/>
+  <int value="3" label="kAccessibilityFeaturesRead"/>
+  <int value="4" label="kAccessibilityPrivate"/>
+  <int value="5" label="kActiveTab"/>
+  <int value="6" label="kActivityLogPrivate"/>
+  <int value="7" label="kAlarms"/>
+  <int value="8" label="kAlphaEnabled"/>
+  <int value="9" label="kAlwaysOnTopWindows"/>
+  <int value="10" label="kAppView"/>
+  <int value="11" label="kAudio"/>
+  <int value="12" label="kAudioCapture"/>
+  <int value="13" label="kDeleted_AudioModem"/>
+  <int value="14" label="kAutofillPrivate"/>
+  <int value="15" label="kAutomation"/>
+  <int value="16" label="kAutoTestPrivate"/>
+  <int value="17" label="kBackground"/>
+  <int value="18" label="kBluetoothPrivate"/>
+  <int value="19" label="kBookmark"/>
+  <int value="20" label="kDeleted_BookmarkManagerPrivate"/>
+  <int value="21" label="kBrailleDisplayPrivate"/>
+  <int value="22" label="kBrowser"/>
+  <int value="23" label="kBrowsingData"/>
+  <int value="24" label="kDeleted_Cast"/>
+  <int value="25" label="kDeleted_CastStreaming"/>
+  <int value="26" label="kChromeosInfoPrivate"/>
+  <int value="27" label="kClipboardRead"/>
+  <int value="28" label="kClipboardWrite"/>
+  <int value="29" label="kDeleted_CloudPrintPrivate"/>
+  <int value="30" label="kCommandLinePrivate"/>
+  <int value="31" label="kCommandsAccessibility"/>
+  <int value="32" label="kContentSettings"/>
+  <int value="33" label="kContextMenus"/>
+  <int value="34" label="kCookie"/>
+  <int value="35" label="kDeleted_Copresence"/>
+  <int value="36" label="kDeleted_CopresencePrivate"/>
+  <int value="37" label="kDeleted_CryptotokenPrivate"/>
+  <int value="38" label="kDeleted_DataReductionProxy"/>
+  <int value="39" label="kDiagnostics"/>
+  <int value="40" label="kDeleted_Dial"/>
+  <int value="41" label="kDebugger"/>
+  <int value="42" label="kDeclarative"/>
+  <int value="43" label="kDeclarativeContent"/>
+  <int value="44" label="kDeclarativeWebRequest"/>
+  <int value="45" label="kDesktopCapture"/>
+  <int value="46" label="kDeleted_DesktopCapturePrivate"/>
+  <int value="47" label="kDeveloperPrivate"/>
+  <int value="48" label="kDevtools"/>
+  <int value="49" label="kDns"/>
+  <int value="50" label="kDocumentScan"/>
+  <int value="51" label="kDownloads"/>
+  <int value="52" label="kDeleted_DownloadsInternal"/>
+  <int value="53" label="kDownloadsOpen"/>
+  <int value="54" label="kDownloadsShelf"/>
+  <int value="55" label="kDeleted_EasyUnlockPrivate"/>
+  <int value="56" label="kEchoPrivate"/>
+  <int value="57" label="kDeleted_EmbeddedExtensionOptions"/>
+  <int value="58" label="kEnterprisePlatformKeys"/>
+  <int value="59" label="kEnterprisePlatformKeysPrivate"/>
+  <int value="60" label="kDeleted_ExperienceSamplingPrivate"/>
+  <int value="61" label="kExperimental"/>
+  <int value="62" label="kDeleted_ExtensionView"/>
+  <int value="63" label="kDeprecated_ExternallyConnectableAllUrls"/>
+  <int value="64" label="kFeedbackPrivate"/>
+  <int value="65" label="kFileBrowserHandler"/>
+  <int value="66" label="kDeleted_FileBrowserHandlerInternal"/>
+  <int value="67" label="kFileManagerPrivate"/>
+  <int value="68" label="kFileSystem"/>
+  <int value="69" label="kFileSystemDirectory"/>
+  <int value="70" label="kFileSystemProvider"/>
+  <int value="71" label="kFileSystemRequestFileSystem"/>
+  <int value="72" label="kFileSystemRetainEntries"/>
+  <int value="73" label="kFileSystemWrite"/>
+  <int value="74" label="kDeleted_FileSystemWriteDirectory"/>
+  <int value="75" label="kFirstRunPrivate"/>
+  <int value="76" label="kFontSettings"/>
+  <int value="77" label="kFullscreen"/>
+  <int value="78" label="kDeleted_GcdPrivate"/>
+  <int value="79" label="kGcm"/>
+  <int value="80" label="kGeolocation"/>
+  <int value="81" label="kHid"/>
+  <int value="82" label="kHistory"/>
+  <int value="83" label="kHomepage"/>
+  <int value="84" label="kHotwordPrivate"/>
+  <int value="85" label="kIdentity"/>
+  <int value="86" label="kIdentityEmail"/>
+  <int value="87" label="kDeleted_IdentityPrivate"/>
+  <int value="88" label="kIdltest"/>
+  <int value="89" label="kIdle"/>
+  <int value="90" label="kImeWindowEnabled"/>
+  <int value="91" label="kDeleted_InlineInstallPrivate"/>
+  <int value="92" label="kInput"/>
+  <int value="93" label="kInputMethodPrivate"/>
+  <int value="94" label="kDeleted_InterceptAllKeys"/>
+  <int value="95" label="kDeleted_LauncherSearchProvider"/>
+  <int value="96" label="kLocation"/>
+  <int value="97" label="kDeleted_LogPrivate"/>
+  <int value="98" label="kManagement"/>
+  <int value="99" label="kMediaGalleries"/>
+  <int value="100" label="kMediaPlayerPrivate"/>
+  <int value="101" label="kDeleted_MediaRouterPrivate"/>
+  <int value="102" label="kMetricsPrivate"/>
+  <int value="103" label="kMDns"/>
+  <int value="104" label="kDeleted_MusicManagerPrivate"/>
+  <int value="105" label="kNativeMessaging"/>
+  <int value="106" label="kDeleted_NetworkingConfig"/>
+  <int value="107" label="kNetworkingPrivate"/>
+  <int value="108" label="kDeleted_NotificationProvider"/>
+  <int value="109" label="kNotifications"/>
+  <int value="110" label="kOverrideEscFullscreen"/>
+  <int value="111" label="kPageCapture"/>
+  <int value="112" label="kPointerLock"/>
+  <int value="113" label="kPlatformKeys"/>
+  <int value="114" label="kDeleted_Plugin"/>
+  <int value="115" label="kPower"/>
+  <int value="116" label="kDeleted_PreferencesPrivate"/>
+  <int value="117" label="kDeleted_PrincipalsPrivate"/>
+  <int value="118" label="kPrinterProvider"/>
+  <int value="119" label="kPrivacy"/>
+  <int value="120" label="kProcesses"/>
+  <int value="121" label="kProxy"/>
+  <int value="122" label="kImageWriterPrivate"/>
+  <int value="123" label="kDeleted_ReadingListPrivate"/>
+  <int value="124" label="kRtcPrivate"/>
+  <int value="125" label="kSearchProvider"/>
+  <int value="126" label="kSearchEnginesPrivate"/>
+  <int value="127" label="kSerial"/>
+  <int value="128" label="kSessions"/>
+  <int value="129" label="kSettingsPrivate"/>
+  <int value="130" label="kDeleted_SignedInDevices"/>
+  <int value="131" label="kSocket"/>
+  <int value="132" label="kStartupPages"/>
+  <int value="133" label="kStorage"/>
+  <int value="134" label="kDeleted_StreamsPrivate"/>
+  <int value="135" label="kSyncFileSystem"/>
+  <int value="136" label="kSystemPrivate"/>
+  <int value="137" label="kSystemDisplay"/>
+  <int value="138" label="kSystemStorage"/>
+  <int value="139" label="kTab"/>
+  <int value="140" label="kTabCapture"/>
+  <int value="141" label="kTabCaptureForTab"/>
+  <int value="142" label="kTerminalPrivate"/>
+  <int value="143" label="kTopSites"/>
+  <int value="144" label="kTts"/>
+  <int value="145" label="kTtsEngine"/>
+  <int value="146" label="kUnlimitedStorage"/>
+  <int value="147" label="kU2fDevices"/>
+  <int value="148" label="kUsb"/>
+  <int value="149" label="kUsbDevice"/>
+  <int value="150" label="kVideoCapture"/>
+  <int value="151" label="kVirtualKeyboardPrivate"/>
+  <int value="152" label="kVpnProvider"/>
+  <int value="153" label="kWallpaper"/>
+  <int value="154" label="kDeleted_WallpaperPrivate"/>
+  <int value="155" label="kWebcamPrivate"/>
+  <int value="156" label="kDeleted_kWebConnectable"/>
+  <int value="157" label="kWebNavigation"/>
+  <int value="158" label="kWebRequest"/>
+  <int value="159" label="kWebRequestBlocking"/>
+  <int value="160" label="kWebrtcAudioPrivate"/>
+  <int value="161" label="kWebrtcDesktopCapturePrivate"/>
+  <int value="162" label="kWebrtcLoggingPrivate"/>
+  <int value="163" label="kWebstorePrivate"/>
+  <int value="164" label="kDeleted_WebstoreWidgetPrivate"/>
+  <int value="165" label="kWebView"/>
+  <int value="166" label="kWindowShape"/>
+  <int value="167" label="kDeleted_ScreenlockPrivate"/>
+  <int value="168" label="kSystemCpu"/>
+  <int value="169" label="kSystemMemory"/>
+  <int value="170" label="kSystemNetwork"/>
+  <int value="171" label="kSystemInfoCpu"/>
+  <int value="172" label="kSystemInfoMemory"/>
+  <int value="173" label="kBluetooth"/>
+  <int value="174" label="kBluetoothDevices"/>
+  <int value="175" label="kFavicon"/>
+  <int value="176" label="kFullAccess"/>
+  <int value="177" label="kHostReadOnly"/>
+  <int value="178" label="kHostReadWrite"/>
+  <int value="179" label="kHostsAll"/>
+  <int value="180" label="kHostsAllReadOnly"/>
+  <int value="181" label="kMediaGalleriesAllGalleriesCopyTo"/>
+  <int value="182" label="kMediaGalleriesAllGalleriesDelete"/>
+  <int value="183" label="kMediaGalleriesAllGalleriesRead"/>
+  <int value="184" label="kNetworkState"/>
+  <int value="185" label="kDeleted_OverrideBookmarksUI"/>
+  <int value="186" label="kShouldWarnAllHosts"/>
+  <int value="187" label="kSocketAnyHost"/>
+  <int value="188" label="kSocketDomainHosts"/>
+  <int value="189" label="kSocketSpecificHosts"/>
+  <int value="190" label="kDeleted_UsbDeviceList"/>
+  <int value="191" label="kUsbDeviceUnknownProduct"/>
+  <int value="192" label="kUsbDeviceUnknownVendor"/>
+  <int value="193" label="kUsersPrivate"/>
+  <int value="194" label="kPasswordsPrivate"/>
+  <int value="195" label="kLanguageSettingsPrivate"/>
+  <int value="196" label="kEnterpriseDeviceAttributes"/>
+  <int value="197" label="kCertificateProvider"/>
+  <int value="198" label="kResourcesPrivate"/>
+  <int value="199" label="kDeleted_DisplaySource"/>
+  <int value="200" label="kClipboard"/>
+  <int value="201" label="kNetworkingOnc"/>
+  <int value="202" label="kVirtualKeyboard"/>
+  <int value="203" label="kDeleted_NetworkingCastPrivate"/>
+  <int value="204" label="kMediaPerceptionPrivate"/>
+  <int value="205" label="kLockScreen"/>
+  <int value="206" label="kNewTabPageOverride"/>
+  <int value="207" label="kDeclarativeNetRequest"/>
+  <int value="208" label="kLockWindowFullscreenPrivate"/>
+  <int value="209" label="kWebrtcLoggingPrivateAudioDebug"/>
+  <int value="210" label="kEnterpriseReportingPrivate"/>
+  <int value="211" label="kCecPrivate"/>
+  <int value="212" label="kSafeBrowsingPrivate"/>
+  <int value="213" label="kDeleted_FileSystemRequestDownloads"/>
+  <int value="214" label="kDeleted_SystemPowerSource"/>
+  <int value="215" label="kArcAppsPrivate"/>
+  <int value="216" label="kEnterpriseHardwarePlatform"/>
+  <int value="217" label="kLoginScreenUi"/>
+  <int value="218" label="kDeclarativeNetRequestFeedback"/>
+  <int value="219" label="kTransientBackground"/>
+  <int value="220" label="kLogin"/>
+  <int value="221" label="kLoginScreenStorage"/>
+  <int value="222" label="kLoginState"/>
+  <int value="223" label="kPrintingMetrics"/>
+  <int value="224" label="kPrinting"/>
+  <int value="225" label="kCrashReportPrivate"/>
+  <int value="226" label="kDeleted_AutofillAssistantPrivate"/>
+  <int value="227" label="kEnterpriseNetworkingAttributes"/>
+  <int value="228" label="kSearch"/>
+  <int value="229" label="kTabGroups"/>
+  <int value="230" label="kScripting"/>
+  <int value="231" label="kWmDesksPrivate"/>
+  <int value="232" label="kWebAuthenticationProxy"/>
+  <int value="233" label="kDeclarativeNetRequestWithHostAccess"/>
+  <int value="234" label="kChromeOSTelemetry"/>
+  <int value="235" label="kSpeechRecognitionPrivate"/>
+  <int value="236" label="kChromeOSDiagnostics"/>
+  <int value="237" label="kChromeOSTelemetrySerialNumber"/>
+  <int value="238" label="kSharedStoragePrivate"/>
+  <int value="239" label="kEnterpriseRemoteApps"/>
+  <int value="240" label="kOffscreen"/>
+  <int value="241" label="kSidePanel"/>
+  <int value="242" label="kDownloadsUi"/>
+  <int value="243" label="kWebRequestAuthProvider"/>
+  <int value="244" label="kChromeOSTelemetryNetworkInformation"/>
+  <int value="245" label="kPdfViewerPrivate"/>
+  <int value="246" label="kSystemLog"/>
+  <int value="247" label="kSmartCardProviderPrivate"/>
+  <int value="248" label="kChromeOSEvents"/>
+  <int value="249" label="kChromeOSAttachedDeviceInfo"/>
+  <int value="250" label="kReadingList"/>
+  <int value="251" label="kImageLoaderPrivate"/>
+  <int value="252" label="kAccessibilityServicePrivate"/>
+  <int value="253" label="kUserScripts"/>
+  <int value="254" label="kChromeOSBluetoothPeripheralsInfo"/>
+  <int value="255" label="kEnterpriseKioskInput"/>
+  <int value="256" label="kOdfsConfigPrivate"/>
+  <int value="257" label="kChromeOSManagementAudio"/>
+</enum>
+
+<enum name="ExtensionPolicyReinstallReason">
+  <int value="0" label="Tried to load a corrupted extension"/>
+  <int value="1" label="Corrupted Chrome Web Store extension"/>
+  <int value="2" label="Corrupted non-webstore extension"/>
+  <int value="4" label="Non-webstore extension without hashes skipped"/>
+</enum>
+
+<enum name="ExtensionType">
+  <int value="0" label="UNKNOWN"/>
+  <int value="1" label="EXTENSION"/>
+  <int value="2" label="THEME"/>
+  <int value="3" label="USER_SCRIPT"/>
+  <int value="4" label="HOSTED_APP"/>
+  <int value="5" label="LEGACY_PACKAGED_APP"/>
+  <int value="6" label="PLATFORM_APP"/>
+  <int value="7" label="SHARED_MODULE"/>
+  <int value="8" label="LOGIN_SCREEN_EXTENSION"/>
+  <int value="9" label="CHROMEOS_SYSTEM_EXTENSION"/>
+</enum>
+
+<enum name="ExtensionUninstallSource">
+  <int value="0" label="Testing"/>
+  <int value="1" label="Context menu"/>
+  <int value="2" label="Permissions increase"/>
+  <int value="3" label="Storage threshold exceeded"/>
+  <int value="4" label="App list"/>
+  <int value="5" label="App info dialog"/>
+  <int value="6" label="Chrome apps page"/>
+  <int value="7" label="Chrome extensions page"/>
+  <int value="8" label="Extension"/>
+  <int value="9" label="Chrome Webstore"/>
+  <int value="10" label="Hosted app menu"/>
+</enum>
+
+<enum name="ExtensionUnpackFailureReason">
+  <summary>
+    Reasons the sandboxed extension unpacker can fail. See enum FailureReason in
+    src/chrome/browser/extensions/sandboxed_extension_unpacker.h .
+  </summary>
+  <int value="0" label="COULD_NOT_GET_TEMP_DIRECTORY"/>
+  <int value="1" label="COULD_NOT_CREATE_TEMP_DIRECTORY"/>
+  <int value="2" label="FAILED_TO_COPY_EXTENSION_FILE_TO_TEMP_DIRECTORY"/>
+  <int value="3" label="COULD_NOT_GET_SANDBOX_FRIENDLY_PATH"/>
+  <int value="4" label="COULD_NOT_LOCALIZE_EXTENSION"/>
+  <int value="5" label="INVALID_MANIFEST"/>
+  <int value="6" label="UNPACKER_CLIENT_FAILED"/>
+  <int value="7" label="UTILITY_PROCESS_CRASHED_WHILE_TRYING_TO_INSTALL"/>
+  <int value="8" label="CRX_FILE_NOT_READABLE"/>
+  <int value="9" label="CRX_HEADER_INVALID"/>
+  <int value="10" label="CRX_MAGIC_NUMBER_INVALID"/>
+  <int value="11" label="CRX_VERSION_NUMBER_INVALID"/>
+  <int value="12" label="CRX_EXCESSIVELY_LARGE_KEY_OR_SIGNATURE"/>
+  <int value="13" label="CRX_ZERO_KEY_LENGTH"/>
+  <int value="14" label="CRX_ZERO_SIGNATURE_LENGTH"/>
+  <int value="15" label="CRX_PUBLIC_KEY_INVALID"/>
+  <int value="16" label="CRX_SIGNATURE_INVALID"/>
+  <int value="17" label="CRX_SIGNATURE_VERIFICATION_INITIALIZATION_FAILED"/>
+  <int value="18" label="CRX_SIGNATURE_VERIFICATION_FAILED"/>
+  <int value="19" label="ERROR_SERIALIZING_MANIFEST_JSON"/>
+  <int value="20" label="ERROR_SAVING_MANIFEST_JSON"/>
+  <int value="21" label="COULD_NOT_READ_IMAGE_DATA_FROM_DISK"/>
+  <int value="22" label="DECODED_IMAGES_DO_NOT_MATCH_THE_MANIFEST"/>
+  <int value="23" label="INVALID_PATH_FOR_BROWSER_IMAGE"/>
+  <int value="24" label="ERROR_REMOVING_OLD_IMAGE_FILE"/>
+  <int value="25" label="INVALID_PATH_FOR_BITMAP_IMAGE"/>
+  <int value="26" label="ERROR_RE_ENCODING_THEME_IMAGE"/>
+  <int value="27" label="ERROR_SAVING_THEME_IMAGE"/>
+  <int value="28" label="DEPRECATED_ABORTED_DUE_TO_SHUTDOWN"/>
+  <int value="29" label="COULD_NOT_READ_CATALOG_DATA_FROM_DISK"/>
+  <int value="30" label="INVALID_CATALOG_DATA"/>
+  <int value="31" label="INVALID_PATH_FOR_CATALOG"/>
+  <int value="32" label="ERROR_SERIALIZING_CATALOG"/>
+  <int value="33" label="ERROR_SAVING_CATALOG"/>
+  <int value="34" label="CRX_HASH_VERIFICATION_FAILED"/>
+  <int value="35" label="UNZIP_FAILED"/>
+  <int value="36" label="DIRECTORY_MOVE_FAILED"/>
+  <int value="37" label="CRX_FILE_IS_DELTA_UPDATE"/>
+  <int value="38" label="CRX_EXPECTED_HASH_INVALID"/>
+  <int value="39" label="DEPRECATED_ERROR_PARSING_DNR_RULESET"/>
+  <int value="40" label="ERROR_INDEXING_DNR_RULESET"/>
+  <int value="41" label="CRX_REQUIRED_PROOF_MISSING"/>
+  <int value="42" label="CRX_HEADER_VERIFIED_CONTENTS_UNCOMPRESSING_FAILURE"/>
+  <int value="43" label="MALFORMED_VERIFIED_CONTENTS"/>
+  <int value="44" label="COULD_NOT_CREATE_METADATA_DIRECTORY"/>
+  <int value="45" label="COULD_NOT_WRITE_VERIFIED_CONTENTS_INTO_FILE"/>
+</enum>
+
+<enum name="ExtensionUpdateCheckDataKey">
+  <int value="0" label="No update check keys (no action taken)"/>
+  <int value="1" label="Malware"/>
+  <int value="2" label="Potentially UWS"/>
+  <int value="3" label="Policy Violation"/>
+</enum>
+
+<enum name="ExternalItemState">
+  <int value="0" label="DEPRECATED_DISABLED"/>
+  <int value="1" label="DEPRECATED_ENABLED"/>
+  <int value="2" label="DISABLED (in webstore)"/>
+  <int value="3" label="ENABLED (in webstore)"/>
+  <int value="4" label="DISABLED (not in webstore)"/>
+  <int value="5" label="ENABLED (not in webstore)"/>
+  <int value="6" label="UNINSTALLED (in webstore)"/>
+  <int value="7" label="UNINSTALLED (not in webstore)"/>
+</enum>
+
+<enum name="GoogleDocsExtensionAvailablity">
+  <int value="0" label="Available, Regular mode"/>
+  <int value="1" label="Not Available, Regular mode"/>
+  <int value="2" label="Available, Incognito mode"/>
+  <int value="3" label="Not Available, Incognito mode"/>
+</enum>
+
+<enum name="HostPermissionsAccess">
+  <int value="0" label="CANNOT_AFFECT"/>
+  <int value="1" label="NOT_REQUESTED"/>
+  <int value="2" label="ON_CLICK"/>
+  <int value="3" label="ON_SPECIFIC_SITES"/>
+  <int value="4" label="ON_ALL_REQUESTED_SITES"/>
+  <int value="5" label="ON_ACTIVE_TAB_ONLY"/>
+</enum>
+
+<enum name="InDeveloperMode">
+  <summary>A boolean for whether the user is in the developer mode.</summary>
+  <int value="0" label="User is not in the developer mode"/>
+  <int value="1" label="User is in the developer mode"/>
+</enum>
+
+<enum name="IsForceInstalledExtensionFailedWithCrxHeaderInvalidFromCWSBoolean">
+  <summary>
+    A boolean for whether a force installed extension which failed with error
+    CRX_HEADER_INVALID is from Chrome Web Store or not.
+  </summary>
+  <int value="0" label="Offstore"/>
+  <int value="1" label="Chrome Web Store"/>
+</enum>
+
+<enum name="LoadRulesetResult">
+  <int value="0" label="Load succeeded"/>
+  <int value="1" label="Load failed - Invalid path"/>
+  <int value="2" label="Load failed - File read error"/>
+  <int value="3" label="Load failed - Checksum mismatch"/>
+  <int value="4" label="Load failed - Version mismatch"/>
+  <int value="5" label="Load failed - Checksum not found in prefs"/>
+</enum>
+
+<enum name="ManifestInvalidAppStatusError">
+  <int value="0" label="Unknown"/>
+  <int value="1" label="Error unknown application"/>
+  <int value="2" label="Error invalid app id"/>
+  <int value="3" label="Error restricted"/>
+</enum>
+
+<enum name="ManifestInvalidError">
+  <int value="0" label="XML Parsing failed"/>
+  <int value="1" label="Invalid xlmns on gupdate tag"/>
+  <int value="2" label="Missing gupdate tag"/>
+  <int value="3" label="Invalid protocol on gupdate tag"/>
+  <int value="4" label="Missing app id"/>
+  <int value="5" label="Missing update check tags"/>
+  <int value="6" label="Multiple update check tags"/>
+  <int value="7" label="Invalid Prodversion min"/>
+  <int value="8" label="Empty codebase url"/>
+  <int value="9" label="Invalid codebase url"/>
+  <int value="10" label="Missing version for update check"/>
+  <int value="11" label="Invalid version"/>
+  <int value="12" label="Bad Update specification"/>
+  <int value="13" label="Bad App Status"/>
+</enum>
+
+<enum name="ReadDynamicRulesJSONStatus">
+  <int value="0" label="kSuccess"/>
+  <int value="1" label="kFileDoesNotExist"/>
+  <int value="2" label="kFileReadError"/>
+  <int value="3" label="kJSONParseError"/>
+  <int value="4" label="kJSONIsNotList"/>
+  <int value="5" label="kRuleCountLimitExceeded"/>
+</enum>
+
+<enum name="RegexRuleStatus">
+  <int value="0" label="Normal regex (indexed)"/>
+  <int value="1" label="Large Regex (ignored)"/>
+</enum>
+
+<enum name="RequestAction">
+  <int value="0" label="CANCEL"/>
+  <int value="1" label="REDIRECT"/>
+  <int value="2" label="MODIFY_REQUEST_HEADERS"/>
+  <int value="3" label="MODIFY_RESPONSE_HEADERS"/>
+  <int value="4" label="SET_AUTH_CREDENTIALS"/>
+</enum>
+
+<enum name="ServiceWorkerExternalRequestResult">
+  <int value="0" label="Ok"/>
+  <int value="1" label="Bad request ID"/>
+  <int value="2" label="Worker not running"/>
+  <int value="3" label="Worker not found"/>
+  <int value="4" label="Null context"/>
+</enum>
+
+<enum name="SessionType">
+  <int value="0" label="Existing Regular"/>
+  <int value="1" label="Guest"/>
+  <int value="2" label="New Regular"/>
+  <int value="3" label="Public Account"/>
+  <int value="4" label="(Obsolete) Locally Managed"/>
+  <int value="5" label="Kiosk App"/>
+  <int value="6" label="Regular Supervised"/>
+  <int value="7" label="ARC Kiosk"/>
+  <int value="8" label="Active Directory"/>
+  <int value="9" label="Web App Kiosk"/>
+</enum>
+
+<enum name="SettingsOverriddenDialogResult">
+  <int value="0" label="Change settings back"/>
+  <int value="1" label="Keep new settings"/>
+  <int value="2" label="Dialog dismissed"/>
+  <int value="3" label="Dialog closed without user action"/>
+</enum>
+
+<enum name="UpdateDynamicRulesStatus">
+  <int value="0" label="kSuccess"/>
+  <int value="1" label="kErrorReadJSONRules"/>
+  <int value="2" label="kErrorRuleCountExceeded"/>
+  <int value="3" label="kErrorCreateTemporarySource_Deprecated"/>
+  <int value="4" label="kErrorWriteTemporaryJSONRuleset_Deprecated"/>
+  <int value="5" label="kErrorWriteTemporaryIndexedRuleset_Deprecated"/>
+  <int value="6" label="kErrorInvalidRules"/>
+  <int value="7" label="kErrorCreateDynamicRulesDirectory"/>
+  <int value="8" label="kErrorReplaceIndexedFile_Deprecated"/>
+  <int value="9" label="kErrorReplaceJSONFile_Deprecated"/>
+  <int value="10" label="kErrorCreateMatcher_InvalidPath"/>
+  <int value="11" label="kErrorCreateMatcher_FileReadError"/>
+  <int value="12" label="kErrorCreateMatcher_ChecksumMismatch"/>
+  <int value="13" label="kErrorCreateMatcher_VersionMismatch"/>
+  <int value="14" label="kErrorRegexTooLarge"/>
+  <int value="15" label="kErrorRegexRuleCountExceeded"/>
+  <int value="16" label="kErrorSerializeToJson"/>
+  <int value="17" label="kErrorWriteJson"/>
+  <int value="18" label="kErrorWriteFlatbuffer"/>
+</enum>
+
+<enum name="WebRequest.RequestHeader">
+  <int value="0" label="kNone"/>
+  <int value="1" label="kOther"/>
+  <int value="2" label="kAccept"/>
+  <int value="3" label="kAcceptCharset"/>
+  <int value="4" label="kAcceptEncoding"/>
+  <int value="5" label="kAcceptLanguage"/>
+  <int value="6" label="kAccessControlRequestHeaders"/>
+  <int value="7" label="kAccessControlRequestMethod"/>
+  <int value="8" label="kAuthorization"/>
+  <int value="9" label="kCacheControl"/>
+  <int value="10" label="kConnection"/>
+  <int value="11" label="kContentEncoding"/>
+  <int value="12" label="kContentLanguage"/>
+  <int value="13" label="kContentLength"/>
+  <int value="14" label="kContentLocation"/>
+  <int value="15" label="kContentType"/>
+  <int value="16" label="kCookie"/>
+  <int value="17" label="kDate"/>
+  <int value="18" label="kDnt"/>
+  <int value="19" label="kEarlyData"/>
+  <int value="20" label="kExpect"/>
+  <int value="21" label="kForwarded"/>
+  <int value="22" label="kFrom"/>
+  <int value="23" label="kHost"/>
+  <int value="24" label="kIfMatch"/>
+  <int value="25" label="kIfModifiedSince"/>
+  <int value="26" label="kIfNoneMatch"/>
+  <int value="27" label="kIfRange"/>
+  <int value="28" label="kIfUnmodifiedSince"/>
+  <int value="29" label="kKeepAlive"/>
+  <int value="30" label="kOrigin"/>
+  <int value="31" label="kPragma"/>
+  <int value="32" label="kProxyAuthorization"/>
+  <int value="33" label="kProxyConnection"/>
+  <int value="34" label="kRange"/>
+  <int value="35" label="kReferer"/>
+  <int value="37" label="kTe"/>
+  <int value="38" label="kTransferEncoding"/>
+  <int value="39" label="kUpgrade"/>
+  <int value="40" label="kUpgradeInsecureRequests"/>
+  <int value="41" label="kUserAgent"/>
+  <int value="42" label="kVia"/>
+  <int value="43" label="kWarning"/>
+  <int value="44" label="kXForwardedFor"/>
+  <int value="45" label="kXForwardedHost"/>
+  <int value="46" label="kXForwardedProto"/>
+</enum>
+
+<enum name="WebRequest.ResponseHeader">
+  <int value="0" label="kNone"/>
+  <int value="1" label="kOther"/>
+  <int value="2" label="kAcceptPatch"/>
+  <int value="3" label="kAcceptRanges"/>
+  <int value="4" label="kAccessControlAllowCredentials"/>
+  <int value="5" label="kAccessControlAllowHeaders"/>
+  <int value="6" label="kAccessControlAllowMethods"/>
+  <int value="7" label="kAccessControlAllowOrigin"/>
+  <int value="8" label="kAccessControlExposeHeaders"/>
+  <int value="9" label="kAccessControlMaxAge"/>
+  <int value="10" label="kAge"/>
+  <int value="11" label="kAllow"/>
+  <int value="12" label="kAltSvc"/>
+  <int value="13" label="kCacheControl"/>
+  <int value="14" label="kClearSiteData"/>
+  <int value="15" label="kConnection"/>
+  <int value="16" label="kContentDisposition"/>
+  <int value="17" label="kContentEncoding"/>
+  <int value="18" label="kContentLanguage"/>
+  <int value="19" label="kContentLength"/>
+  <int value="20" label="kContentLocation"/>
+  <int value="21" label="kContentRange"/>
+  <int value="22" label="kContentSecurityPolicy"/>
+  <int value="23" label="kContentSecurityPolicyReportOnly"/>
+  <int value="24" label="kContentType"/>
+  <int value="25" label="kDate"/>
+  <int value="26" label="kETag"/>
+  <int value="27" label="kExpectCT"/>
+  <int value="28" label="kExpires"/>
+  <int value="29" label="kFeaturePolicy"/>
+  <int value="30" label="kKeepAlive"/>
+  <int value="31" label="kLargeAllocation"/>
+  <int value="32" label="kLastModified"/>
+  <int value="33" label="kLocation"/>
+  <int value="34" label="kPragma"/>
+  <int value="35" label="kProxyAuthenticate"/>
+  <int value="36" label="kProxyConnection"/>
+  <int value="37" label="kPublicKeyPins"/>
+  <int value="38" label="kPublicKeyPinsReportOnly"/>
+  <int value="39" label="kReferrerPolicy"/>
+  <int value="40" label="kRefresh"/>
+  <int value="41" label="kRetryAfter"/>
+  <int value="42" label="kSecWebSocketAccept"/>
+  <int value="43" label="kServer"/>
+  <int value="44" label="kServerTiming"/>
+  <int value="45" label="kSetCookie"/>
+  <int value="46" label="kSourceMap"/>
+  <int value="47" label="kStrictTransportSecurity"/>
+  <int value="48" label="kTimingAllowOrigin"/>
+  <int value="49" label="kTk"/>
+  <int value="50" label="kTrailer"/>
+  <int value="51" label="kTransferEncoding"/>
+  <int value="52" label="kUpgrade"/>
+  <int value="53" label="kVary"/>
+  <int value="54" label="kVia"/>
+  <int value="55" label="kWarning"/>
+  <int value="56" label="kWWWAuthenticate"/>
+  <int value="57" label="kXContentTypeOptions"/>
+  <int value="58" label="kXDNSPrefetchControl"/>
+  <int value="59" label="kXFrameOptions"/>
+  <int value="60" label="kXXSSProtection"/>
+</enum>
+
+<enum name="WebRequestEventListenerFlag">
+  <int value="0" label="Total"/>
+  <int value="1" label="None"/>
+  <int value="2" label="requestHeaders"/>
+  <int value="3" label="responseHeaders"/>
+  <int value="4" label="blocking"/>
+  <int value="5" label="asyncBlocking"/>
+  <int value="6" label="requestBody"/>
+  <int value="7" label="extraHeaders"/>
+</enum>
+
+<enum name="WebStoreInstallAllowlistParameter">
+  <int value="0" label="Undefined"/>
+  <int value="1" label="Allowlisted"/>
+  <int value="2" label="Not allowlisted"/>
+</enum>
+
+</enums>
+
+</histogram-configuration>
diff --git a/tools/metrics/histograms/metadata/extensions/histograms.xml b/tools/metrics/histograms/metadata/extensions/histograms.xml
index d579bd44..58441757 100644
--- a/tools/metrics/histograms/metadata/extensions/histograms.xml
+++ b/tools/metrics/histograms/metadata/extensions/histograms.xml
@@ -22,6 +22,28 @@
 
 <histograms>
 
+<variants name="BackgroundContextType">
+  <variant name="ExtensionEventPage3"
+      summary="event page. Emitted when extensions browser code receives
+               receives an ack from the renderer that it fired the event in
+               the event page. It only counts events that ran in a event page
+               background script, other listeners in the extension renderer
+               that can receive the event are not counted. Replaced previous
+               version because values were inaccurate due to a bug where we
+               recorded this metric for all events for an extension, rather
+               that just for those that ran in the lazy background page
+               script 2023-10"/>
+  <variant name="ExtensionServiceWorker2"
+      summary="service worker. Emitted shortly after extensions browser code
+               receives the ack from the renderer that it fired the event in
+               the service worker. &quot;shortly&quot; because there is a
+               function call between the receipt by the browser and recording
+               the value. Note: this may include some amount of execution
+               time of the extension service worker JS listener. Replaced
+               previous version because values were inaccurate due to a bug
+               with recording the dispatch start time 2023-08"/>
+</variants>
+
 <variants name="ExtensionFunctionExecutionTime">
   <variant name=".1msTo5ms"
       summary="Execution took between 1ms and 5ms (tolerable)."/>
@@ -1282,7 +1304,8 @@
   </token>
 </histogram>
 
-<histogram name="Extensions.Events.DispatchToAckTime.{BackgroundContextType}"
+<histogram
+    name="Extensions.Events.DispatchToAckTime.{BackgroundContextType}{ContextActive}"
     units="microseconds" expires_after="never">
 <!-- expires-never: Monitors core extension system health. -->
 
@@ -1290,36 +1313,24 @@
   <owner>extensions-core@chromium.org</owner>
   <summary>
     Records the time it took for the event to be sent to the event router for
-    dispatch for background page of type {BackgroundContextType}. Reports
-    samples at microseconds granualarity up to 5 minutes. Values over 5 minutes
-    are bucketed together since no ack is expected to take longer than that. 5
-    minutes was decided since that is the maximum for extension service worker
-    event lifetime. This is recorded only for clients with high-resolution
-    clocks. It does not include any requests that utilize the
+    dispatch for background page of type {BackgroundContextType}{ContextActive}.
+    Reports samples at microseconds granualarity up to 5 minutes. Values over 5
+    minutes are bucketed together since no ack is expected to take longer than
+    that. 5 minutes was decided since that is the maximum for extension service
+    worker event lifetime. This is recorded only for clients with
+    high-resolution clocks. It does not include any requests that utilize the
     EventRouter::DispatchEventToSender() event routing flow (some web request
     API, and web view API events).
   </summary>
-  <token key="BackgroundContextType">
-    <variant name="ExtensionEventPage3"
-        summary="event page. Emitted when extensions browser code receives
-                 receives an ack from the renderer that it fired the event in
-                 the event page. It only counts events that ran in a event
-                 page background script, other listeners in the extension
-                 renderer that can receive the event are not counted.
-                 Replaced previous version because values were inaccurate due
-                 to a bug where we recorded this metric for all events for an
-                 extension, rather that just for those that ran in the lazy
-                 background page script 2023-10"/>
-    <variant name="ExtensionServiceWorker2"
-        summary="service worker. Emitted shortly after extensions browser
-                 code receives the ack from the renderer that it fired the
-                 event in the service worker. &quot;shortly&quot; because
-                 there is a function call between the receipt by the browser
-                 and recording the value. Note: this may include some amount
-                 of execution time of the extension service worker JS
-                 listener. Replaced previous version because values were
-                 inaccurate due to a bug with recording the dispatch start
-                 time 2023-08"/>
+  <token key="BackgroundContextType" variants="BackgroundContextType"/>
+  <token key="ContextActive">
+    <variant name="" summary=""/>
+    <variant name=".Active"
+        summary="and in status active. Active means that the background
+                 script was already started when the event was dispatched"/>
+    <variant name=".Inactive"
+        summary="and in status inactive. Inactive means that the background
+                 script was not started when the event was dispatched"/>
   </token>
 </histogram>
 
diff --git a/tools/metrics/histograms/metadata/gpu/histograms.xml b/tools/metrics/histograms/metadata/gpu/histograms.xml
index b1901c5..412c980c 100644
--- a/tools/metrics/histograms/metadata/gpu/histograms.xml
+++ b/tools/metrics/histograms/metadata/gpu/histograms.xml
@@ -597,27 +597,6 @@
   </summary>
 </histogram>
 
-<histogram name="GPU.DirectComposition.DCLayerResult.StreamVideo"
-    enum="DCLayerResult" expires_after="2021-12-12">
-  <owner>sunnyps@chromium.org</owner>
-  <owner>zmo@chromium.org</owner>
-  <summary>
-    Recorded for each stream video quad (on overlay processing) the reason it
-    was or wasn't put in an overlay.
-  </summary>
-</histogram>
-
-<histogram name="GPU.DirectComposition.DCLayerResult.Texture"
-    enum="DCLayerResult" expires_after="2023-08-20">
-  <owner>sunnyps@chromium.org</owner>
-  <owner>zmo@chromium.org</owner>
-  <summary>
-    Recorded for each texture quad (on overlay processing) the reason it was or
-    wasn't put in an overlay. (This metric might be lack of coverage between
-    2022-05-01 and 2022-06-24 due to metric expiration.)
-  </summary>
-</histogram>
-
 <histogram base="true"
     name="GPU.DirectComposition.DCLayerResult.Video.{GPUProtectedVideoType}"
     enum="DCLayerResult" expires_after="2024-04-28">
@@ -631,6 +610,28 @@
   <token key="GPUProtectedVideoType" variants="GPUProtectedVideoType"/>
 </histogram>
 
+<histogram
+    name="GPU.DirectComposition.DCLayerResult.{OverlayProcessingQuadType}"
+    enum="DCLayerResult" expires_after="2024-06-30">
+  <owner>sunnyps@chromium.org</owner>
+  <owner>zmo@chromium.org</owner>
+  <owner>graphics-dev@chromium.org</owner>
+  <summary>
+    Recorded for each quad (on overlay processing) the reason it was or wasn't
+    put in an overlay. Reported for {OverlayProcessingQuadType} data may be
+    missing.
+  </summary>
+  <token key="OverlayProcessingQuadType">
+    <variant name="StreamVideo"
+        summary="StreamVideo quad type. Warning: this histogram was expired
+                 from 2021-12-12 to 2023-12-21;"/>
+    <variant name="Texture"
+        summary="Texture quad type. Warning: this histogram was expired from
+                 2022-05-01 to 2022-06-24 and again from 2023-08-20 and
+                 2023-12-21;"/>
+  </token>
+</histogram>
+
 <histogram name="GPU.DirectComposition.DcompDeviceCreateSurface" enum="Hresult"
     expires_after="2024-04-28">
   <owner>magchen@chromium.org</owner>
diff --git a/tools/metrics/histograms/metadata/history/histograms.xml b/tools/metrics/histograms/metadata/history/histograms.xml
index b6536f5..95225bc 100644
--- a/tools/metrics/histograms/metadata/history/histograms.xml
+++ b/tools/metrics/histograms/metadata/history/histograms.xml
@@ -489,7 +489,7 @@
 </histogram>
 
 <histogram name="History.Clusters.Actions.LinksOpened" units="links opened"
-    expires_after="2024-01-31">
+    expires_after="2024-04-28">
   <owner>manukh@chromium.org</owner>
   <owner>chrome-journeys@google.com</owner>
   <component>UI&gt;Browser&gt;Journeys</component>
@@ -544,7 +544,7 @@
 
 <histogram
     name="History.Clusters.Backend.ClusterSimilarityHeuristicsProcessor.ClusterSearchTermOverriden"
-    enum="Boolean" expires_after="2024-01-31">
+    enum="Boolean" expires_after="2024-04-28">
   <owner>sophiechang@chromium.org</owner>
   <owner>chrome-journeys@google.com</owner>
   <component>UI&gt;Browser&gt;Journeys</component>
@@ -564,7 +564,7 @@
 </histogram>
 
 <histogram name="History.Clusters.Backend.ComputeClusters.ThreadTime"
-    units="ms" expires_after="2024-01-31">
+    units="ms" expires_after="2024-04-28">
   <owner>sophiechang@chromium.org</owner>
   <owner>chrome-journeys@google.com</owner>
   <component>UI&gt;Browser&gt;Journeys</component>
@@ -579,7 +579,7 @@
 </histogram>
 
 <histogram name="History.Clusters.Backend.ComputeClustersForUI.ThreadTime"
-    units="ms" expires_after="2024-01-31">
+    units="ms" expires_after="2024-04-28">
   <owner>sophiechang@chromium.org</owner>
   <owner>chrome-journeys@google.com</owner>
   <component>UI&gt;Browser&gt;Journeys</component>
@@ -596,7 +596,7 @@
 
 <histogram
     name="History.Clusters.Backend.ComputeClusterTriggerability2.ThreadTime"
-    units="ms" expires_after="2024-01-31">
+    units="ms" expires_after="2024-04-28">
   <owner>sophiechang@chromium.org</owner>
   <owner>chrome-journeys@google.com</owner>
   <component>UI&gt;Browser&gt;Journeys</component>
@@ -869,7 +869,7 @@
 </histogram>
 
 <histogram name="History.Clusters.Backend.NumClustersReturned"
-    units="number clusters returned" expires_after="2024-01-31">
+    units="number clusters returned" expires_after="2024-04-28">
   <owner>mcrouse@chromium.org</owner>
   <owner>chrome-journeys@google.com</owner>
   <component>UI&gt;Browser&gt;Journeys</component>
@@ -882,7 +882,7 @@
 </histogram>
 
 <histogram name="History.Clusters.Backend.NumVisitsBelowFold"
-    units="number visits" expires_after="2023-12-01">
+    units="number visits" expires_after="2024-04-28">
   <owner>sophiechang@chromium.org</owner>
   <owner>chrome-journeys@google.com</owner>
   <component>UI&gt;Browser&gt;Journeys</component>
@@ -894,7 +894,7 @@
 </histogram>
 
 <histogram name="History.Clusters.Backend.NumVisitsBelowFoldPercentage"
-    units="%" expires_after="2023-12-01">
+    units="%" expires_after="2024-04-28">
   <owner>sophiechang@chromium.org</owner>
   <owner>chrome-journeys@google.com</owner>
   <component>UI&gt;Browser&gt;Journeys</component>
@@ -906,7 +906,7 @@
 </histogram>
 
 <histogram name="History.Clusters.Backend.NumVisitsToCluster"
-    units="number visits" expires_after="2024-01-31">
+    units="number visits" expires_after="2024-04-28">
   <owner>mcrouse@chromium.org</owner>
   <owner>chrome-journeys@google.com</owner>
   <component>UI&gt;Browser&gt;Journeys</component>
@@ -949,7 +949,7 @@
 </histogram>
 
 <histogram name="History.Clusters.Backend.UpdateClusters.Counts.{Segment}"
-    units="count" expires_after="2024-01-31">
+    units="count" expires_after="2024-04-28">
   <owner>manukh@chromium.org</owner>
   <owner>chrome-journeys@google.com</owner>
   <component>UI&gt;Browser&gt;Journeys</component>
@@ -1218,7 +1218,7 @@
 </histogram>
 
 <histogram name="History.Clusters.ContextClusterer.NumClusters.AtCleanUp"
-    units="num clusters" expires_after="2024-01-31">
+    units="num clusters" expires_after="2024-04-28">
   <owner>sophiechang@chromium.org</owner>
   <owner>chrome-journeys@google.com</owner>
   <component>UI&gt;Browser&gt;Journeys</component>
@@ -1229,7 +1229,7 @@
 </histogram>
 
 <histogram name="History.Clusters.ContextClusterer.NumClusters.CleanedUp"
-    units="num clusters" expires_after="2024-01-31">
+    units="num clusters" expires_after="2024-04-28">
   <owner>sophiechang@chromium.org</owner>
   <owner>chrome-journeys@google.com</owner>
   <component>UI&gt;Browser&gt;Journeys</component>
@@ -1240,7 +1240,7 @@
 </histogram>
 
 <histogram name="History.Clusters.ContextClusterer.NumClusters.PostCleanUp"
-    units="num clusters" expires_after="2024-01-31">
+    units="num clusters" expires_after="2024-04-28">
   <owner>sophiechang@chromium.org</owner>
   <owner>chrome-journeys@google.com</owner>
   <component>UI&gt;Browser&gt;Journeys</component>
@@ -1470,7 +1470,7 @@
 </histogram>
 
 <histogram name="History.Clusters.UIActions.ToggledVisibility"
-    enum="BooleanVisible" expires_after="2024-01-31">
+    enum="BooleanVisible" expires_after="2024-04-28">
   <owner>mahmadi@chromium.org</owner>
   <owner>chrome-journeys@google.com</owner>
   <component>UI&gt;Browser&gt;Journeys</component>
diff --git a/tools/metrics/histograms/metadata/ios/enums.xml b/tools/metrics/histograms/metadata/ios/enums.xml
index 47dc9233..d681c414 100644
--- a/tools/metrics/histograms/metadata/ios/enums.xml
+++ b/tools/metrics/histograms/metadata/ios/enums.xml
@@ -918,6 +918,7 @@
   <int value="1" label="Used payment suggestion"/>
   <int value="2" label="Accessed Payment Methods through the long press menu"/>
   <int value="3" label="Accessed Payment Details through the long press menu"/>
+  <int value="4" label="The suggestion provider's type was incorrect"/>
 </enum>
 
 <enum name="PromoWithInstructionsAction">
diff --git a/tools/metrics/histograms/metadata/settings/histograms.xml b/tools/metrics/histograms/metadata/settings/histograms.xml
index 42cf083..e9d8ed0 100644
--- a/tools/metrics/histograms/metadata/settings/histograms.xml
+++ b/tools/metrics/histograms/metadata/settings/histograms.xml
@@ -465,13 +465,6 @@
   </summary>
 </histogram>
 
-<histogram name="Settings.SafetyCheck.ExtensionsResult"
-    enum="SafetyCheckExtensionsStatus" expires_after="2021-06-20">
-  <owner>andzaytsev@google.com</owner>
-  <owner>msramek@chromium.org</owner>
-  <summary>Resulting state of the safety check extensions check.</summary>
-</histogram>
-
 <histogram name="Settings.SafetyCheck.Interactions"
     enum="SettingsSafetyCheckInteractions" expires_after="2024-04-28">
   <owner>rainhard@chromium.org</owner>
diff --git a/tools/metrics/histograms/metadata/web_rtc/enums.xml b/tools/metrics/histograms/metadata/web_rtc/enums.xml
index 45ff323..1d48dc86 100644
--- a/tools/metrics/histograms/metadata/web_rtc/enums.xml
+++ b/tools/metrics/histograms/metadata/web_rtc/enums.xml
@@ -144,12 +144,6 @@
   <int value="1" label="NetworkFailure"/>
 </enum>
 
-<enum name="IceRestartState">
-  <int value="0" label="Connecting"/>
-  <int value="1" label="Connected"/>
-  <int value="2" label="Disconnected"/>
-</enum>
-
 <enum name="MediaStreamRequestState">
   <int value="0" label="Explicitly Cancelled"/>
   <int value="1" label="Stream Not Generated"/>
diff --git a/tools/metrics/histograms/metadata/web_rtc/histograms.xml b/tools/metrics/histograms/metadata/web_rtc/histograms.xml
index 0494789a..b66fccc 100644
--- a/tools/metrics/histograms/metadata/web_rtc/histograms.xml
+++ b/tools/metrics/histograms/metadata/web_rtc/histograms.xml
@@ -1296,14 +1296,6 @@
   <summary>Records the reasons for ICE re-gathering.</summary>
 </histogram>
 
-<histogram name="WebRTC.PeerConnection.IceRestartState" enum="IceRestartState"
-    expires_after="M77">
-  <owner>honghaiz@chromium.org</owner>
-  <summary>
-    Records the transport channel states when ICE restart happens.
-  </summary>
-</histogram>
-
 <histogram name="WebRTC.PeerConnection.IPMetrics" enum="PeerConnectionCounters"
     expires_after="2024-06-15">
   <owner>hta@chromium.org</owner>
diff --git a/tools/metrics/histograms/update_extension_histograms.py b/tools/metrics/histograms/update_extension_histograms.py
index 9e8f0e4..4740d014 100755
--- a/tools/metrics/histograms/update_extension_histograms.py
+++ b/tools/metrics/histograms/update_extension_histograms.py
@@ -29,9 +29,10 @@
     ('ExtensionFunctions',
      'extensions/browser/extension_function_histogram_value.h'))
   for enum_name, source_header in histograms:
-    UpdateHistogramEnum('tools/metrics/histograms/enums.xml',
-                        histogram_enum_name=enum_name,
-                        source_enum_path=source_header,
-                        start_marker='^enum HistogramValue {',
-                        end_marker='^ENUM_BOUNDARY',
-                        calling_script=os.path.basename(__file__))
+    UpdateHistogramEnum(
+        'tools/metrics/histograms/metadata/extensions/enums.xml',
+        histogram_enum_name=enum_name,
+        source_enum_path=source_header,
+        start_marker='^enum HistogramValue {',
+        end_marker='^ENUM_BOUNDARY',
+        calling_script=os.path.basename(__file__))
diff --git a/tools/metrics/histograms/update_extension_permission.py b/tools/metrics/histograms/update_extension_permission.py
index 023d64e2..42a235d4 100644
--- a/tools/metrics/histograms/update_extension_permission.py
+++ b/tools/metrics/histograms/update_extension_permission.py
@@ -22,7 +22,7 @@
     sys.exit(1)
 
   source_file = 'extensions/common/mojom/api_permission_id.mojom'
-  UpdateHistogramEnum('tools/metrics/histograms/enums.xml',
+  UpdateHistogramEnum('tools/metrics/histograms/metadata/extensions/enums.xml',
                       histogram_enum_name='ExtensionPermission3',
                       source_enum_path=source_file,
                       start_marker='^enum APIPermissionID {',
diff --git a/tools/metrics/ukm/ukm.xml b/tools/metrics/ukm/ukm.xml
index 298f1bc..3aaeda0 100644
--- a/tools/metrics/ukm/ukm.xml
+++ b/tools/metrics/ukm/ukm.xml
@@ -14582,6 +14582,20 @@
       other values indicate the playback ended in an error.
     </summary>
   </metric>
+  <metric name="HasWaitingForKey" enum="Boolean">
+    <summary>
+      Boolean value indicating whether an EME playback has been blocked waiting
+      for the CDM to be set or waiting for decryption key. For an non-EME
+      playback, this is always reported as false.
+    </summary>
+    <aggregation>
+      <history>
+        <statistics>
+          <enumeration/>
+        </statistics>
+      </history>
+    </aggregation>
+  </metric>
   <metric name="IsEME">
     <summary>
       Boolean value indicating if this event is for an EME playback. Note: EME
diff --git a/tools/rust/update_rust.py b/tools/rust/update_rust.py
index b92195e..ac60e83 100755
--- a/tools/rust/update_rust.py
+++ b/tools/rust/update_rust.py
@@ -35,7 +35,7 @@
 # this back to its previous value _AND_ set `OVERRIDE_CLANG_REVISION` below
 # to the `CLANG_REVISION` that was in place before the roll.
 RUST_REVISION = 'df0295f07175acc7325ce3ca4152eb05752af1f2'
-RUST_SUB_REVISION = 3
+RUST_SUB_REVISION = 4
 
 # If not None, this overrides the `CLANG_REVISION` in
 # //tools/clang/scripts/update.py in order to download a Rust toolchain that
diff --git a/tools/typescript/validate_tsconfig.py b/tools/typescript/validate_tsconfig.py
index 03956c6..d7c5780 100644
--- a/tools/typescript/validate_tsconfig.py
+++ b/tools/typescript/validate_tsconfig.py
@@ -121,9 +121,6 @@
       # TODO(b/314827247): Migrate media_app_ui to TypeScript and remove
       # exception.
       'ash/webui/media_app_ui/',
-      # TODO(b/310963279): Migrate os_feedback_ui to TypeScript and remove
-      # exception.
-      'ash/webui/os_feedback_ui/',
       # TODO(b/315002705): Migrate shimless_rma to TypeScript and remove
       # exception.
       'ash/webui/shimless_rma/',
@@ -148,9 +145,6 @@
       'chrome/test/data/webui',
       'chrome/test/data/webui/chromeos',
       'chrome/test/data/webui/chromeos/ash_common',
-      # TODO(b/310963279): Migrate os_feedback_ui to TypeScript and remove
-      # exception.
-      'chrome/test/data/webui/chromeos/os_feedback_ui',
       'chrome/test/data/webui/cr_components/chromeos',
       'chrome/test/data/webui/nearby_share',
       'chrome/test/data/webui/settings/chromeos',
diff --git a/ui/accessibility/accessibility_features.cc b/ui/accessibility/accessibility_features.cc
index 87be86b..b84eefd 100644
--- a/ui/accessibility/accessibility_features.cc
+++ b/ui/accessibility/accessibility_features.cc
@@ -355,6 +355,14 @@
 bool IsScreenAIDebugModeEnabled() {
   return base::FeatureList::IsEnabled(::features::kScreenAIDebugMode);
 }
+
+// This feature is only used in tests and must not be enabled by default.
+BASE_FEATURE(kScreenAITestMode,
+             "ScreenAITestMode",
+             base::FEATURE_DISABLED_BY_DEFAULT);
+bool IsScreenAITestModeEnabled() {
+  return base::FeatureList::IsEnabled(::features::kScreenAITestMode);
+}
 #endif  // !BUILDFLAG(IS_ANDROID)
 
 #if BUILDFLAG(IS_MAC)
diff --git a/ui/accessibility/accessibility_features.h b/ui/accessibility/accessibility_features.h
index be6718e..fb8008d 100644
--- a/ui/accessibility/accessibility_features.h
+++ b/ui/accessibility/accessibility_features.h
@@ -264,6 +264,11 @@
 // Write some ScreenAI library debug data in /tmp.
 AX_BASE_EXPORT BASE_DECLARE_FEATURE(kScreenAIDebugMode);
 AX_BASE_EXPORT bool IsScreenAIDebugModeEnabled();
+
+// Enables to use the Screen AI component available for testing.
+// If enabled, ScreenAI library will be loaded from //third_party/screen-ai.
+AX_BASE_EXPORT BASE_DECLARE_FEATURE(kScreenAITestMode);
+AX_BASE_EXPORT bool IsScreenAITestModeEnabled();
 #endif  // !BUILDFLAG(IS_ANDROID)
 
 #if BUILDFLAG(IS_MAC)
diff --git a/ui/base/models/dialog_model.cc b/ui/base/models/dialog_model.cc
index 19dfe98df..bb38e2d 100644
--- a/ui/base/models/dialog_model.cc
+++ b/ui/base/models/dialog_model.cc
@@ -200,39 +200,13 @@
 }
 
 DialogModelField* DialogModel::GetFieldByUniqueId(ElementIdentifier id) {
-  // Assert that there are not duplicate fields corresponding to `id`. There
-  // could be no matches in `fields_` if `id` corresponds to a button.
-  CHECK_LE(static_cast<int>(base::ranges::count_if(
-               contents_.fields(),
-               [id](auto& field) {
-                 // TODO(pbos): This does not
-                 // work recursively yet.
-                 CHECK_NE(field->type_, DialogModelField::kSection);
-                 return field->id_ == id;
-               })),
-           1);
-
-  for (auto& field : contents_.fields()) {
-    if (field->id_ == id)
-      return field.get();
+  // TODO(pbos): Make sure buttons aren't accessed through GetFieldByUniqueId.
+  // Then make this simply forward to contents_.
+  if (Button* const button = MaybeGetButtonByUniqueId(id)) {
+    return button;
   }
 
-  // Buttons are fields, too.
-  // TODO(pbos): Reconsider whether this needs to be true.
-  return GetButtonByUniqueId(id);
-}
-
-DialogModelCheckbox* DialogModel::GetCheckboxByUniqueId(ElementIdentifier id) {
-  return GetFieldByUniqueId(id)->AsCheckbox();
-}
-
-DialogModelCombobox* DialogModel::GetComboboxByUniqueId(ElementIdentifier id) {
-  return GetFieldByUniqueId(id)->AsCombobox();
-}
-
-DialogModelTextfield* DialogModel::GetTextfieldByUniqueId(
-    ElementIdentifier id) {
-  return GetFieldByUniqueId(id)->AsTextfield();
+  return contents_.GetFieldByUniqueId(id);
 }
 
 DialogModel::Button* DialogModel::GetButtonByUniqueId(ElementIdentifier id) {
@@ -292,21 +266,14 @@
 void DialogModel::SetVisible(ElementIdentifier id, bool visible) {
   // TODO(pbos): Consider a different method for dialog buttons vs. contents.
   if (Button* button = MaybeGetButtonByUniqueId(id)) {
-    button->set_visible(visible);
+    button->SetVisible(visible);
     if (host_) {
       host_->OnDialogButtonChanged();
     }
     return;
   }
 
-  DialogModelField* const field = GetFieldByUniqueId(id);
-
-  CHECK(field);
-  field->set_visible(visible);
-
-  if (host_) {
-    host_->OnFieldChanged(field);
-  }
+  GetFieldByUniqueId(id)->SetVisible(visible);
 }
 
 void DialogModel::SetButtonLabel(DialogModel::Button* button,
diff --git a/ui/base/models/dialog_model.h b/ui/base/models/dialog_model.h
index 0acdcbe..13a77a9 100644
--- a/ui/base/models/dialog_model.h
+++ b/ui/base/models/dialog_model.h
@@ -451,9 +451,15 @@
   // not present in the model is a bug, and the methods will NOTREACHED(). If
   // you have unique fields that are conditionally present, see HasField().
   DialogModelField* GetFieldByUniqueId(ElementIdentifier id);
-  DialogModelCheckbox* GetCheckboxByUniqueId(ElementIdentifier id);
-  DialogModelCombobox* GetComboboxByUniqueId(ElementIdentifier id);
-  DialogModelTextfield* GetTextfieldByUniqueId(ElementIdentifier id);
+  DialogModelCheckbox* GetCheckboxByUniqueId(ElementIdentifier id) {
+    return contents_.GetCheckboxByUniqueId(id);
+  }
+  DialogModelCombobox* GetComboboxByUniqueId(ElementIdentifier id) {
+    return contents_.GetComboboxByUniqueId(id);
+  }
+  DialogModelTextfield* GetTextfieldByUniqueId(ElementIdentifier id) {
+    return contents_.GetTextfieldByUniqueId(id);
+  }
   Button* GetButtonByUniqueId(ElementIdentifier id);
 
   // Methods with base::PassKey<DialogModelHost> are only intended to be called
diff --git a/ui/base/models/dialog_model_field.cc b/ui/base/models/dialog_model_field.cc
index 11230866..f4f4653 100644
--- a/ui/base/models/dialog_model_field.cc
+++ b/ui/base/models/dialog_model_field.cc
@@ -105,6 +105,16 @@
 
 DialogModelField::~DialogModelField() = default;
 
+base::CallbackListSubscription DialogModelField::AddOnFieldChangedCallback(
+    base::RepeatingClosure on_field_changed) {
+  return on_field_changed_.Add(on_field_changed);
+}
+
+void DialogModelField::SetVisible(bool visible) {
+  is_visible_ = visible;
+  on_field_changed_.Notify();
+}
+
 DialogModelParagraph* DialogModelField::AsParagraph() {
   CHECK_EQ(type_, kParagraph, base::NotFatalUntil::M123);
   return static_cast<DialogModelParagraph*>(this);
@@ -301,6 +311,48 @@
   return on_field_added_.Add(std::move(on_field_added));
 }
 
+base::CallbackListSubscription DialogModelSection::AddOnFieldChangedCallback(
+    base::RepeatingCallback<void(DialogModelField*)> on_field_changed) {
+  return on_field_changed_.Add(std::move(on_field_changed));
+}
+
+DialogModelField* DialogModelSection::GetFieldByUniqueId(ElementIdentifier id) {
+  // Assert that there are not duplicate fields corresponding to `id`. There
+  // could be no matches in `fields_` if `id` corresponds to a button.
+  CHECK_EQ(static_cast<int>(base::ranges::count_if(
+               fields_,
+               [id](auto& field) {
+                 // TODO(pbos): This does not
+                 // work recursively yet.
+                 CHECK_NE(field->type(), DialogModelField::kSection);
+                 return field->id() == id;
+               })),
+           1);
+
+  for (auto& field : fields_) {
+    if (field->id() == id) {
+      return field.get();
+    }
+  }
+
+  NOTREACHED_NORETURN();
+}
+
+DialogModelCheckbox* DialogModelSection::GetCheckboxByUniqueId(
+    ElementIdentifier id) {
+  return GetFieldByUniqueId(id)->AsCheckbox();
+}
+
+DialogModelCombobox* DialogModelSection::GetComboboxByUniqueId(
+    ElementIdentifier id) {
+  return GetFieldByUniqueId(id)->AsCombobox();
+}
+
+DialogModelTextfield* DialogModelSection::GetTextfieldByUniqueId(
+    ElementIdentifier id) {
+  return GetFieldByUniqueId(id)->AsTextfield();
+}
+
 void DialogModelSection::AddParagraph(const DialogModelLabel& label,
                                       std::u16string header,
                                       ElementIdentifier id) {
@@ -353,13 +405,21 @@
 
 void DialogModelSection::AddField(std::unique_ptr<DialogModelField> field) {
   CHECK(field);
+
   // This probably needs to be updated for recursive fields. CHECK that we don't
   // add recursive sections until we've thought through how the updates are
   // communicated.
   CHECK_NE(field->type(), DialogModelField::kSection);
   auto* const field_ptr = field.get();
+  field_subscriptions_.push_back(field->AddOnFieldChangedCallback(
+      base::BindRepeating(&DialogModelSection::OnFieldChanged,
+                          base::Unretained(this), field_ptr)));
   fields_.push_back(std::move(field));
   on_field_added_.Notify(field_ptr);
 }
 
+void DialogModelSection::OnFieldChanged(DialogModelField* field) {
+  on_field_changed_.Notify(field);
+}
+
 }  // namespace ui
diff --git a/ui/base/models/dialog_model_field.h b/ui/base/models/dialog_model_field.h
index b71f88c..aeda018 100644
--- a/ui/base/models/dialog_model_field.h
+++ b/ui/base/models/dialog_model_field.h
@@ -190,13 +190,19 @@
   DialogModelField& operator=(const DialogModelField&) = delete;
   virtual ~DialogModelField();
 
+  [[nodiscard]] base::CallbackListSubscription AddOnFieldChangedCallback(
+      base::RepeatingClosure on_field_changed);
+
   Type type() const { return type_; }
+
+  void SetVisible(bool visible);
   bool is_visible() { return is_visible_; }
 
   const base::flat_set<Accelerator>& accelerators() const {
     return accelerators_;
   }
   ElementIdentifier id() const { return id_; }
+
   DialogModelParagraph* AsParagraph();
   DialogModelCheckbox* AsCheckbox();
   DialogModelCombobox* AsCombobox();
@@ -212,8 +218,6 @@
                    base::flat_set<Accelerator> accelerators,
                    const DialogModelField::Params& params);
 
-  void set_visible(bool visible) { is_visible_ = visible; }
-
  private:
   friend class DialogModel;
   FRIEND_TEST_ALL_PREFIXES(DialogModelButtonTest, UsesParamsUniqueId);
@@ -224,6 +228,8 @@
   const base::flat_set<Accelerator> accelerators_;
 
   bool is_visible_;
+
+  base::RepeatingClosureList on_field_changed_;
 };
 
 // Field class representing a paragraph.
@@ -512,10 +518,18 @@
   [[nodiscard]] base::CallbackListSubscription AddOnFieldAddedCallback(
       base::RepeatingCallback<void(DialogModelField*)> on_field_added);
 
+  [[nodiscard]] base::CallbackListSubscription AddOnFieldChangedCallback(
+      base::RepeatingCallback<void(DialogModelField*)> on_field_changed);
+
   const std::vector<std::unique_ptr<DialogModelField>>& fields() const {
     return fields_;
   }
 
+  DialogModelField* GetFieldByUniqueId(ElementIdentifier id);
+  DialogModelCheckbox* GetCheckboxByUniqueId(ElementIdentifier id);
+  DialogModelCombobox* GetComboboxByUniqueId(ElementIdentifier id);
+  DialogModelTextfield* GetTextfieldByUniqueId(ElementIdentifier id);
+
   // Adds a paragraph at the end of the section. A paragraph consists of a
   // label and an optional header.
   void AddParagraph(const DialogModelLabel& label,
@@ -560,10 +574,14 @@
 
  private:
   void AddField(std::unique_ptr<DialogModelField> field);
+  void OnFieldChanged(DialogModelField* field);
 
   base::RepeatingCallbackList<void(DialogModelField*)> on_field_added_;
+  base::RepeatingCallbackList<void(DialogModelField*)> on_field_changed_;
 
   std::vector<std::unique_ptr<DialogModelField>> fields_;
+
+  std::vector<base::CallbackListSubscription> field_subscriptions_;
 };
 
 }  // namespace ui
diff --git a/ui/base/models/dialog_model_host.h b/ui/base/models/dialog_model_host.h
index ce245bb..4bf9adcfe 100644
--- a/ui/base/models/dialog_model_host.h
+++ b/ui/base/models/dialog_model_host.h
@@ -11,7 +11,6 @@
 namespace ui {
 
 class DialogModel;
-class DialogModelField;
 
 // Platform-agnostic interface for toolkit integrations.
 class COMPONENT_EXPORT(UI_BASE) DialogModelHost {
@@ -30,13 +29,8 @@
     return base::PassKey<DialogModelHost>();
   }
 
-  // Called when various parts of the model changes.
-  // TODO(pbos): Break this down to API that says what was added/removed/changed
-  // to not have to reset everything.
-
-  // Called when some aspect of |field| changes.
-  virtual void OnFieldChanged(DialogModelField* field) = 0;
-
+  // TODO(pbos): Turn this into a RepeatingClosure that can be added to a
+  // subscriber list in DialogModel.
   // Called when a button changes.
   virtual void OnDialogButtonChanged() = 0;
 };
diff --git a/ui/base/models/dialog_model_menu_model_adapter.cc b/ui/base/models/dialog_model_menu_model_adapter.cc
index b514b72..6608b4a 100644
--- a/ui/base/models/dialog_model_menu_model_adapter.cc
+++ b/ui/base/models/dialog_model_menu_model_adapter.cc
@@ -20,10 +20,6 @@
   NOTREACHED_NORETURN();
 }
 
-void DialogModelMenuModelAdapter::OnFieldChanged(DialogModelField* field) {
-  NOTREACHED_NORETURN();
-}
-
 // TODO(pbos): This should probably not be hosting a DialogModel but rather
 // another model with DialogModelSection(s).
 void DialogModelMenuModelAdapter::OnDialogButtonChanged() {
diff --git a/ui/base/models/dialog_model_menu_model_adapter.h b/ui/base/models/dialog_model_menu_model_adapter.h
index 11965006..a4895c1b 100644
--- a/ui/base/models/dialog_model_menu_model_adapter.h
+++ b/ui/base/models/dialog_model_menu_model_adapter.h
@@ -25,7 +25,6 @@
 
   // DialogModelHost:
   void Close() override;
-  void OnFieldChanged(DialogModelField* field) override;
   void OnDialogButtonChanged() override;
 
   // MenuModel:
diff --git a/ui/base/test/test_dialog_model_host.cc b/ui/base/test/test_dialog_model_host.cc
index 53334a7..aa179d23 100644
--- a/ui/base/test/test_dialog_model_host.cc
+++ b/ui/base/test/test_dialog_model_host.cc
@@ -104,10 +104,6 @@
   NOTREACHED_NORETURN();
 }
 
-void TestDialogModelHost::OnFieldChanged(DialogModelField* field) {
-  NOTREACHED_NORETURN();
-}
-
 void TestDialogModelHost::OnDialogButtonChanged() {
   NOTREACHED_NORETURN();
 }
diff --git a/ui/base/test/test_dialog_model_host.h b/ui/base/test/test_dialog_model_host.h
index b66deb0..e4654d0c 100644
--- a/ui/base/test/test_dialog_model_host.h
+++ b/ui/base/test/test_dialog_model_host.h
@@ -55,7 +55,6 @@
  private:
   // DialogModelHost:
   void Close() override;
-  void OnFieldChanged(DialogModelField* field) override;
   void OnDialogButtonChanged() override;
 
   std::unique_ptr<DialogModel> dialog_model_;
diff --git a/ui/views/bubble/bubble_dialog_model_host.cc b/ui/views/bubble/bubble_dialog_model_host.cc
index 5ba4feb..fabb6463 100644
--- a/ui/views/bubble/bubble_dialog_model_host.cc
+++ b/ui/views/bubble/bubble_dialog_model_host.cc
@@ -91,9 +91,10 @@
 
 int GetDialogTopMargins(LayoutProvider* layout_provider,
                         ui::DialogModelField* first_field) {
+  CHECK(first_field);
+
   const BubbleDialogModelHost::FieldType field_type =
-      first_field ? GetFieldTypeForField(first_field)
-                  : BubbleDialogModelHost::FieldType::kControl;
+      GetFieldTypeForField(first_field);
   switch (field_type) {
     case BubbleDialogModelHost::FieldType::kMenuItem:
       return 0;
@@ -109,9 +110,9 @@
 int GetDialogBottomMargins(LayoutProvider* layout_provider,
                            ui::DialogModelField* last_field,
                            bool has_buttons) {
+  CHECK(last_field);
   const BubbleDialogModelHost::FieldType field_type =
-      last_field ? GetFieldTypeForField(last_field)
-                 : BubbleDialogModelHost::FieldType::kControl;
+      GetFieldTypeForField(last_field);
   switch (field_type) {
     case BubbleDialogModelHost::FieldType::kMenuItem:
       return has_buttons ? layout_provider->GetDistanceMetric(
@@ -292,8 +293,6 @@
   return std::move(view_);
 }
 
-// TODO(pbos): Migrate most code that calls contents_view_->(some View method)
-// into this class. This was done in steps to limit the size of the diff.
 class BubbleDialogModelHostContentsView final
     : public BoxLayoutView,
       public ui::DialogModelFieldHost {
@@ -310,22 +309,23 @@
         on_field_added_subscription_(
             contents->AddOnFieldAddedCallback(base::BindRepeating(
                 &BubbleDialogModelHostContentsView::OnFieldAdded,
+                base::Unretained(this)))),
+        on_field_changed_subscription_(
+            contents->AddOnFieldChangedCallback(base::BindRepeating(
+                &BubbleDialogModelHostContentsView::OnFieldChanged,
                 base::Unretained(this)))) {
     // Note that between-child spacing is manually handled using kMarginsKey.
     SetOrientation(views::BoxLayout::Orientation::kVertical);
-  }
 
-  void Init() {
-    CHECK(children().empty()) << "This should only be called once.";
-
+    // Add all fields from the model.
     for (const auto& field : contents_->fields()) {
       OnFieldAdded(field.get());
     }
   }
 
-  [[nodiscard]] base::CallbackListSubscription AddOnFieldAddedCallback(
-      base::RepeatingClosure on_field_added) {
-    return on_field_added_.Add(std::move(on_field_added));
+  [[nodiscard]] base::CallbackListSubscription AddOnContentsChangedCallback(
+      base::RepeatingClosure on_contents_changed) {
+    return on_contents_changed_.Add(std::move(on_contents_changed));
   }
 
   // TODO(pbos): Move (most) of the host's OnFieldAdded stuff into here. If
@@ -364,16 +364,16 @@
         AddDialogModelHostField(std::move(view), info);
         break;
     }
-    UpdateFieldVisibility(field);
-    on_field_added_.Notify();
+    OnFieldChanged(field);
   }
 
-  void UpdateFieldVisibility(ui::DialogModelField* field) {
+  void OnFieldChanged(ui::DialogModelField* field) {
     const DialogModelHostField host_field = FindDialogModelHostField(field);
 
     if (host_field.field_view) {
       host_field.field_view->SetVisible(field->is_visible());
     }
+    on_contents_changed_.Notify();
   }
 
   // TODO(pbos): Remove the need for this method by making sure the host always
@@ -694,11 +694,12 @@
   const ui::ElementIdentifier initially_focused_field_id_;
 
   const base::CallbackListSubscription on_field_added_subscription_;
+  const base::CallbackListSubscription on_field_changed_subscription_;
 
   std::vector<DialogModelHostField> fields_;
-  // TODO(pbos): Try to work away this list (and just have the parent observe
-  // size changes).
-  base::RepeatingClosureList on_field_added_;
+  // TODO(pbos): Try to work away this list if the parent can observe enough
+  // things as a ViewObserver of us.
+  base::RepeatingClosureList on_contents_changed_;
 
   std::vector<base::CallbackListSubscription> property_changed_subscriptions_;
 
@@ -743,9 +744,10 @@
       // uses IsModalDialog().
       contents_view_(
           (SetModalType(modal_type), InitContentsView(model_->contents()))),
-      on_field_added_subscription_(contents_view_->AddOnFieldAddedCallback(
-          base::BindRepeating(&BubbleDialogModelHost::OnFieldAdded,
-                              base::Unretained(this)))),
+      on_contents_changed_subscription_(
+          contents_view_->AddOnContentsChangedCallback(
+              base::BindRepeating(&BubbleDialogModelHost::OnContentsViewChanged,
+                                  base::Unretained(this)))),
       theme_observer_(this, contents_view_) {
   model_->set_host(DialogModelHost::GetPassKey(), this);
 
@@ -877,9 +879,8 @@
       anchor_view ? DISTANCE_BUBBLE_PREFERRED_WIDTH
                   : DISTANCE_MODAL_DIALOG_PREFERRED_WIDTH));
 
-  // TODO(pbos): See if it's safe to just call this at the end of ContentsView's
-  // constructor and remove Init.
-  contents_view_->Init();
+  // Make sure we're up to date with initial contents state.
+  UpdateSpacingAndMargins();
 }
 
 BubbleDialogModelHost::~BubbleDialogModelHost() {
@@ -958,10 +959,6 @@
   }
 }
 
-View* BubbleDialogModelHost::GetContentsViewForTesting() {
-  return contents_view_;
-}
-
 void BubbleDialogModelHost::Close() {
   DCHECK(model_);
   DCHECK(GetWidget());
@@ -1021,10 +1018,7 @@
   return contents_view;
 }
 
-// TODO(pbos): Try to remove this parameter and have a more-generic
-// OnContentsViewChanged. Maybe this doesn't even need to get communicated from
-// ContentsView but can be a ViewObserver for when the preferred size changes.
-void BubbleDialogModelHost::OnFieldAdded() {
+void BubbleDialogModelHost::OnContentsViewChanged() {
   UpdateSpacingAndMargins();
 
   if (GetBubbleFrameView()) {
@@ -1032,17 +1026,6 @@
   }
 }
 
-void BubbleDialogModelHost::OnFieldChanged(ui::DialogModelField* field) {
-  CHECK(field);
-
-  // TODO(pbos): This should move into BubbleDialogModelHostContentsView.
-  contents_view_->UpdateFieldVisibility(field);
-
-  // If the contents of the dialog change (text, field visitiblity, etc.), the
-  // dialog may need to be resized.
-  SizeToContents();
-}
-
 void BubbleDialogModelHost::OnDialogButtonChanged() {
   UpdateDialogButtons();
 
@@ -1089,6 +1072,14 @@
                                            ? scroll_view->contents()->children()
                                            : contents_view_->children();
 
+  if (children.empty()) {
+    // TODO(pbos): Copied from the BubbleDialogDelegate constructor. Maybe there
+    // should be a way to reset them if we become empty?
+    set_margins(layout_provider->GetDialogInsetsForContentType(
+        DialogContentType::kText, DialogContentType::kText));
+    return;
+  }
+
   for (View* const view : children) {
     ui::DialogModelField* const field =
         contents_view_->FindDialogModelHostField(view).dialog_model_field;
diff --git a/ui/views/bubble/bubble_dialog_model_host.h b/ui/views/bubble/bubble_dialog_model_host.h
index 0fec8e3..5004cc39 100644
--- a/ui/views/bubble/bubble_dialog_model_host.h
+++ b/ui/views/bubble/bubble_dialog_model_host.h
@@ -80,11 +80,8 @@
   View* GetInitiallyFocusedView() override;
   void OnWidgetInitialized() override;
 
-  View* GetContentsViewForTesting();
-
   // ui::DialogModelHost:
   void Close() override;
-  void OnFieldChanged(ui::DialogModelField* field) override;
   void OnDialogButtonChanged() override;
 
  private:
@@ -109,7 +106,7 @@
   [[nodiscard]] BubbleDialogModelHostContentsView* InitContentsView(
       ui::DialogModelSection* contents);
 
-  void OnFieldAdded();
+  void OnContentsViewChanged();
 
   void OnWindowClosing();
 
@@ -122,7 +119,7 @@
 
   std::unique_ptr<ui::DialogModel> model_;
   const raw_ptr<BubbleDialogModelHostContentsView> contents_view_;
-  base::CallbackListSubscription on_field_added_subscription_;
+  base::CallbackListSubscription on_contents_changed_subscription_;
   ThemeChangedObserver theme_observer_;
 };
 
diff --git a/ui/views/bubble/bubble_dialog_model_host_unittest.cc b/ui/views/bubble/bubble_dialog_model_host_unittest.cc
index f335938..41e63ce 100644
--- a/ui/views/bubble/bubble_dialog_model_host_unittest.cc
+++ b/ui/views/bubble/bubble_dialog_model_host_unittest.cc
@@ -254,7 +254,7 @@
   views::View* const text_field =
       views::ElementTrackerViews::GetInstance()->GetUniqueView(kField, context);
 
-  EXPECT_NE(text_field, nullptr);
+  ASSERT_NE(text_field, nullptr);
   EXPECT_TRUE(text_field->GetVisible());
 
   bubble_widget->CloseNow();
diff --git a/ui/views/cocoa/bridged_native_widget_interactive_uitest.mm b/ui/views/cocoa/bridged_native_widget_interactive_uitest.mm
index 0baa745..2cc7ec81 100644
--- a/ui/views/cocoa/bridged_native_widget_interactive_uitest.mm
+++ b/ui/views/cocoa/bridged_native_widget_interactive_uitest.mm
@@ -33,12 +33,13 @@
     SetUpForInteractiveTests();
     WidgetTest::SetUp();
 
+    widget_delegate_ = std::make_unique<WidgetDelegate>();
+
     Widget::InitParams init_params =
         CreateParams(Widget::InitParams::TYPE_WINDOW);
     init_params.ownership = Widget::InitParams::WIDGET_OWNS_NATIVE_WIDGET;
     init_params.bounds = gfx::Rect(100, 100, 300, 200);
-    init_params.delegate = new views::WidgetDelegate;
-    init_params.delegate->SetOwnedByWidget(true);
+    init_params.delegate = widget_delegate_.get();
 
     // Provide a resizable Widget by default, as macOS doesn't correctly restore
     // the window size when coming out of fullscreen if the window is not
@@ -61,6 +62,7 @@
   }
 
  protected:
+  std::unique_ptr<WidgetDelegate> widget_delegate_;
   std::unique_ptr<Widget> widget_;
 };
 
diff --git a/ui/views/color_chooser/color_chooser_view.cc b/ui/views/color_chooser/color_chooser_view.cc
index e552d6c3..a9f29446 100644
--- a/ui/views/color_chooser/color_chooser_view.cc
+++ b/ui/views/color_chooser/color_chooser_view.cc
@@ -543,7 +543,6 @@
   delegate->SetContentsView(BuildView());
   delegate->SetInitiallyFocusedView(textfield_);
   delegate->SetModalType(ui::MODAL_TYPE_WINDOW);
-  delegate->SetOwnedByWidget(true);
   delegate->RegisterWindowClosingCallback(
       base::BindOnce(&ColorChooser::OnViewClosing, this->AsWeakPtr()));
 
diff --git a/ui/views/focus/focus_manager_unittest.cc b/ui/views/focus/focus_manager_unittest.cc
index b4a33ad6..cafb166e 100644
--- a/ui/views/focus/focus_manager_unittest.cc
+++ b/ui/views/focus/focus_manager_unittest.cc
@@ -11,6 +11,7 @@
 #include <vector>
 
 #include "base/command_line.h"
+#include "base/functional/callback_helpers.h"
 #include "base/memory/raw_ptr.h"
 #include "base/memory/scoped_refptr.h"
 #include "base/strings/utf_string_conversions.h"
@@ -925,9 +926,9 @@
   UniqueWidgetPtr child_widget = std::make_unique<Widget>();
   std::unique_ptr<AdvanceFocusWidgetDelegate> delegate_owned =
       std::make_unique<AdvanceFocusWidgetDelegate>(child_widget.get());
-  AdvanceFocusWidgetDelegate* delegate = delegate_owned.get();
-  params.delegate = delegate_owned.release();
-  delegate->SetOwnedByWidget(true);
+  params.delegate = delegate_owned.get();
+  params.delegate->RegisterDeleteDelegateCallback(
+      base::DoNothingWithBoundArgs(std::move(delegate_owned)));
   child_widget->Init(std::move(params));
 
   View* view1 = new View;
diff --git a/ui/views/widget/desktop_aura/desktop_window_tree_host_platform_impl_interactive_uitest.cc b/ui/views/widget/desktop_aura/desktop_window_tree_host_platform_impl_interactive_uitest.cc
index a920d1b..2cbf078 100644
--- a/ui/views/widget/desktop_aura/desktop_window_tree_host_platform_impl_interactive_uitest.cc
+++ b/ui/views/widget/desktop_aura/desktop_window_tree_host_platform_impl_interactive_uitest.cc
@@ -184,10 +184,7 @@
 // This is used to return HitTestNonClientFrameView on create call.
 class HitTestWidgetDelegate : public WidgetDelegate {
  public:
-  HitTestWidgetDelegate() {
-    SetCanResize(true);
-    SetOwnedByWidget(true);
-  }
+  HitTestWidgetDelegate() { SetCanResize(true); }
 
   HitTestWidgetDelegate(const HitTestWidgetDelegate&) = delete;
   HitTestWidgetDelegate& operator=(const HitTestWidgetDelegate&) = delete;
@@ -262,7 +259,7 @@
  protected:
   Widget* BuildTopLevelDesktopWidget(const gfx::Rect& bounds) {
     Widget* toplevel = new Widget;
-    delegate_ = new HitTestWidgetDelegate();
+    delegate_ = std::make_unique<HitTestWidgetDelegate>();
     Widget::InitParams toplevel_params =
         CreateParams(Widget::InitParams::TYPE_WINDOW);
     auto* native_widget = new DesktopNativeWidgetAura(toplevel);
@@ -314,7 +311,7 @@
                                 base::TimeTicks::Now(), gesture_details);
   }
 
-  raw_ptr<HitTestWidgetDelegate, DanglingUntriaged> delegate_ = nullptr;
+  std::unique_ptr<HitTestWidgetDelegate> delegate_ = nullptr;
   raw_ptr<TestDesktopWindowTreeHostPlatformImpl, DanglingUntriaged> host_ =
       nullptr;
 };
diff --git a/ui/views/widget/native_widget_aura_unittest.cc b/ui/views/widget/native_widget_aura_unittest.cc
index f48393f..52112ce 100644
--- a/ui/views/widget/native_widget_aura_unittest.cc
+++ b/ui/views/widget/native_widget_aura_unittest.cc
@@ -468,8 +468,11 @@
       std::make_unique<PropertyTestLayoutManager>());
   UniqueWidgetPtr widget = std::make_unique<TestWidget>();
   Widget::InitParams params(Widget::InitParams::TYPE_WINDOW);
-  params.delegate = new WidgetDelegate();
-  params.delegate->SetOwnedByWidget(true);
+
+  auto delegate_owned = std::make_unique<WidgetDelegate>();
+  params.delegate = delegate_owned.get();
+  params.delegate->RegisterDeleteDelegateCallback(
+      base::DoNothingWithBoundArgs(std::move(delegate_owned)));
   params.delegate->SetHasWindowSizeControls(true);
   params.parent = nullptr;
   params.context = root_window();
@@ -767,9 +770,9 @@
   // is destroyed.
   // See WidgetDelegateView::WidgetDelegateView();
   auto delegate = std::make_unique<MoveTestWidgetDelegate>();
-  auto* delegate_ptr = delegate.get();
+  auto* delegate_ptr = delegate.release();
   UniqueWidgetPtr widget = base::WrapUnique(Widget::CreateWindowWithContext(
-      std::move(delegate), root_window(), gfx::Rect(10, 10, 100, 200)));
+      delegate_ptr, root_window(), gfx::Rect(10, 10, 100, 200)));
   widget->Show();
   delegate_ptr->ClearGotMove();
   // Simulate a maximize with animation.
@@ -842,8 +845,11 @@
   UniqueWidgetPtr child = std::make_unique<Widget>();
   Widget::InitParams child_params(Widget::InitParams::TYPE_WINDOW);
   child_params.parent = parent->GetNativeWindow();
-  child_params.delegate = new WidgetDelegate;
-  child_params.delegate->SetOwnedByWidget(true);
+
+  auto delegate_owned = std::make_unique<WidgetDelegate>();
+  child_params.delegate = delegate_owned.get();
+  child_params.delegate->RegisterDeleteDelegateCallback(
+      base::DoNothingWithBoundArgs(std::move(delegate_owned)));
   child_params.delegate->SetModalType(ui::MODAL_TYPE_WINDOW);
   child->Init(std::move(child_params));
   child->SetBounds(gfx::Rect(0, 0, 200, 200));
diff --git a/ui/views/widget/widget.cc b/ui/views/widget/widget.cc
index 93b17a67..866bb701 100644
--- a/ui/views/widget/widget.cc
+++ b/ui/views/widget/widget.cc
@@ -392,25 +392,16 @@
     params.opacity = views::Widget::InitParams::WindowOpacity::kOpaque;
   }
 
-  {
-    // ViewsDelegate::OnBeforeWidgetInit() may change `params.delegate` either
-    // by setting it to null or assigning a different value to it, so handle
-    // both cases.
-    ViewsDelegate::GetInstance()->OnBeforeWidgetInit(&params, this);
+  // ViewsDelegate::OnBeforeWidgetInit() may change `params.delegate` either by
+  // setting it to null or assigning a different value to it, so handle both
+  // cases.
+  ViewsDelegate::GetInstance()->OnBeforeWidgetInit(&params, this);
 
-    if (params.delegate) {
-      // TODO(kylixrd): This will be unnecessary once the Widget can no longer
-      // "own" the delegate.
-      if (params.delegate->owned_by_widget()) {
-        owned_widget_delegate_ = base::WrapUnique(params.delegate.get());
-        widget_delegate_ = owned_widget_delegate_->AsWeakPtr();
-      } else {
-        widget_delegate_ = params.delegate->AsWeakPtr();
-      }
-    } else {
-      auto default_delegate = std::make_unique<DefaultWidgetDelegate>();
-      widget_delegate_ = default_delegate.release()->AsWeakPtr();
-    }
+  if (params.delegate) {
+    widget_delegate_ = params.delegate->AsWeakPtr();
+  } else {
+    auto default_delegate = std::make_unique<DefaultWidgetDelegate>();
+    widget_delegate_ = default_delegate.release()->AsWeakPtr();
   }
   DCHECK(widget_delegate_);
 
@@ -423,9 +414,6 @@
 
   widget_delegate_->SetCanActivate(can_activate);
 
-  // Henceforth, ensure the delegate outlives the Widget.
-  widget_delegate_->can_delete_this_ = false;
-
   widget_delegate_->WidgetInitializing(this);
 
   ownership_ = params.ownership;
@@ -1629,17 +1617,9 @@
 void Widget::OnNativeWidgetDestroyed() {
   for (WidgetObserver& observer : observers_)
     observer.OnWidgetDestroyed(this);
-  // TODO(kylixrd): Remove the references to owned_by_widget once widgets cease
-  // being able to "own" the delegate.
+
   if (widget_delegate_) {
-    if (widget_delegate_->owned_by_widget()) {
-      widget_delegate_->DeleteDelegate();
-      widget_delegate_->can_delete_this_ = true;
-      owned_widget_delegate_.reset();
-    } else {
-      widget_delegate_->can_delete_this_ = true;
-      widget_delegate_->DeleteDelegate();
-    }
+    widget_delegate_->DeleteDelegate();
   }
   // Immediately reset the weak ptr. If NATIVE_WIDGET_OWNS_WIDGET destruction of
   // the NativeWidget can destroy the Widget. We don't want to touch the
diff --git a/ui/views/widget/widget.h b/ui/views/widget/widget.h
index c7ba1a4..65959ee 100644
--- a/ui/views/widget/widget.h
+++ b/ui/views/widget/widget.h
@@ -1186,6 +1186,9 @@
   // logically part of the same window as the parent.
   void SetCheckParentForFullscreen();
 
+  // Returns the current ownership model of the widget.
+  InitParams::Ownership ownership() const { return ownership_; }
+
  protected:
   // Creates the RootView to be used within this Widget. Subclasses may override
   // to create custom RootViews that do specialized event processing.
@@ -1240,9 +1243,6 @@
   friend class TextfieldTest;
   friend class ViewAuraTest;
   friend class ui_devtools::PageAgentViews;
-  // TODO (kylixrd): Remove this after Widget no longer can "own" the
-  // WidgetDelegate.
-  friend class WidgetDelegate;
   friend void DisableActivationChangeHandlingForTests();
 
   // Sets/gets the type of disabling widget activation change handling.
@@ -1308,15 +1308,6 @@
   // to Init() a default WidgetDelegate is created.
   base::WeakPtr<WidgetDelegate> widget_delegate_;
 
-  // TODO(kylixrd): Rename this once the transition requiring the client to own
-  // the delegate is finished.
-  // [Owned Widget delegate if the DefaultWidgetDelegate is used. This
-  // ties the lifetime of the default delegate to the Widget.]
-  //
-  // This will "own" the delegate when WidgetDelegate::owned_by_widget() is
-  // true.
-  std::unique_ptr<WidgetDelegate> owned_widget_delegate_;
-
   // The parent of this widget. This is the widget that associates with
   // the |params.parent| supplied to Init(). If no parent is given or the native
   // view parent has no associating Widget, this value will be nullptr.
diff --git a/ui/views/widget/widget_delegate.cc b/ui/views/widget/widget_delegate.cc
index 813bfbb..4047eeb 100644
--- a/ui/views/widget/widget_delegate.cc
+++ b/ui/views/widget/widget_delegate.cc
@@ -56,10 +56,6 @@
     delete default_contents_view_;
     default_contents_view_ = nullptr;
   }
-  if (destructor_ran_) {
-    DCHECK(!*destructor_ran_);
-    *destructor_ran_ = true;
-  }
 }
 
 void WidgetDelegate::SetCanActivate(bool can_activate) {
@@ -256,6 +252,8 @@
 }
 
 void WidgetDelegate::WidgetInitializing(Widget* widget) {
+  can_delete_this_ = false;
+
   widget_ = widget;
 }
 
@@ -284,12 +282,13 @@
 }
 
 void WidgetDelegate::DeleteDelegate() {
-  bool owned_by_widget = params_.owned_by_widget;
+  can_delete_this_ = true;
+
+  bool owned_by_widget = owned_by_widget_;
   ClosureVector delete_callbacks;
   delete_callbacks.swap(delete_delegate_callbacks_);
 
-  bool destructor_ran = false;
-  destructor_ran_ = &destructor_ran;
+  base::WeakPtr<WidgetDelegate> weak_this = AsWeakPtr();
   for (auto&& callback : delete_callbacks)
     std::move(callback).Run();
 
@@ -300,21 +299,10 @@
   // DeleteDelegate callbacks to destruct it; if it is not owned by the Widget,
   // the DeleteDelete callbacks are allowed but not required to destroy it.
   if (owned_by_widget) {
-    DCHECK(!destructor_ran);
+    DCHECK(weak_this);
     // TODO(kylxird): Rework this once the Widget stops being able to "own" the
     // delegate.
-    // Only delete this if this delegate was never actually initialized wth a
-    // Widget or the delegate isn't "owned" by the Widget.
-    if (can_delete_this_) {
-      delete this;
-      return;
-    }
-    destructor_ran_ = nullptr;
-  } else {
-    // If the destructor didn't get run, reset destructor_ran_ so that when it
-    // does run it doesn't try to scribble over where our stack was.
-    if (!destructor_ran)
-      destructor_ran_ = nullptr;
+    delete this;
   }
 }
 
@@ -408,15 +396,7 @@
 // TODO (kylixrd): This will be removed once Widget no longer "owns" the
 // WidgetDelegate.
 void WidgetDelegate::SetOwnedByWidget(bool owned) {
-  if (params_.owned_by_widget == owned)
-    return;
-  params_.owned_by_widget = owned;
-  if (widget_ && widget_->widget_delegate_.get() == this) {
-    if (params_.owned_by_widget)
-      widget_->owned_widget_delegate_ = base::WrapUnique(this);
-    else
-      widget_->owned_widget_delegate_.release();
-  }
+  owned_by_widget_ = owned;
 }
 
 void WidgetDelegate::SetFocusTraversesOut(bool focus_traverses_out) {
diff --git a/ui/views/widget/widget_delegate.h b/ui/views/widget/widget_delegate.h
index 3ae0ed7..30dfd72 100644
--- a/ui/views/widget/widget_delegate.h
+++ b/ui/views/widget/widget_delegate.h
@@ -96,11 +96,6 @@
     // all on Mac.
     ui::ModalType modal_type = ui::MODAL_TYPE_NONE;
 
-    // Whether this WidgetDelegate should delete itself when the Widget for
-    // which it is the delegate is about to be destroyed.
-    // See https://crbug.com/1119898 for more details.
-    bool owned_by_widget = false;
-
     // Whether to show a close button in the widget frame.
     bool show_close_button = true;
 
@@ -395,7 +390,7 @@
                                        bool forward,
                                        bool enable_wrapping);
 
-  bool owned_by_widget() const { return params_.owned_by_widget; }
+  bool owned_by_widget() const { return owned_by_widget_; }
 
   void set_internal_name(std::string name) { params_.internal_name = name; }
   std::string internal_name() const { return params_.internal_name; }
@@ -422,13 +417,14 @@
   raw_ptr<View, AcrossTasksDanglingUntriaged> unowned_contents_view_ = nullptr;
   std::unique_ptr<View> owned_contents_view_;
 
+  // Whether this WidgetDelegate should delete itself when the Widget for
+  // which it is the delegate is about to be destroyed.
+  // See https://crbug.com/1119898 for more details.
+  bool owned_by_widget_ = false;
+
   // Managed by Widget. Ensures |this| outlives its Widget.
   bool can_delete_this_ = true;
 
-  // Used to ensure that a client Delete callback doesn't actually destruct the
-  // WidgetDelegate if the client has given ownership to the Widget.
-  raw_ptr<bool> destructor_ran_ = nullptr;
-
   // This is stored as a unique_ptr to make it easier to check in the
   // registration methods whether a callback is being registered too late in the
   // WidgetDelegate's lifecycle.
diff --git a/ui/views/widget/widget_unittest.cc b/ui/views/widget/widget_unittest.cc
index 75d605f..69bef37e 100644
--- a/ui/views/widget/widget_unittest.cc
+++ b/ui/views/widget/widget_unittest.cc
@@ -9,6 +9,7 @@
 
 #include "base/functional/bind.h"
 #include "base/functional/callback.h"
+#include "base/functional/callback_helpers.h"
 #include "base/memory/raw_ptr.h"
 #include "base/ranges/algorithm.h"
 #include "base/run_loop.h"
@@ -3575,21 +3576,6 @@
   EXPECT_EQ(bubble_counter.CallCount(), 0);
 }
 
-// Widget delegate that holds paint as active lock during its lifetime.
-class PaintAsActiveTestDesktopWidgetDelegate
-    : public TestDesktopWidgetDelegate {
- public:
-  PaintAsActiveTestDesktopWidgetDelegate() = default;
-  ~PaintAsActiveTestDesktopWidgetDelegate() override = default;
-
-  void LockWidgetPaintAsActive() {
-    paint_as_active_lock_ = GetWidget()->LockPaintAsActive();
-  }
-
- private:
-  std::unique_ptr<Widget::PaintAsActiveLock> paint_as_active_lock_;
-};
-
 // Tests that there is no crash when paint as active lock is removed for child
 // widget while its parent widget is being closed.
 TEST_F(DesktopWidgetTest, LockPaintAsActiveAndCloseParent) {
@@ -3599,13 +3585,12 @@
   std::unique_ptr<Widget> parent = CreateTestWidget();
   parent->Show();
 
-  auto* delegate = new PaintAsActiveTestDesktopWidgetDelegate();
-  // Ensure that the delegate is destroyed in Widget::OnNativeWidgetDestroyed().
-  delegate->SetOwnedByWidget(true);
+  auto delegate = std::make_unique<TestDesktopWidgetDelegate>();
   Widget::InitParams params = CreateParams(Widget::InitParams::TYPE_WINDOW);
   params.parent = parent->GetNativeView();
   delegate->InitWidget(std::move(params));
-  delegate->LockWidgetPaintAsActive();
+  delegate->RegisterDeleteDelegateCallback(
+      base::DoNothingWithBoundArgs(delegate->GetWidget()->LockPaintAsActive()));
   base::WeakPtr<Widget> child = delegate->GetWidget()->GetWeakPtr();
   child->ShowInactive();
 
diff --git a/ui/views/window/dialog_delegate.cc b/ui/views/window/dialog_delegate.cc
index 925ae9c..ed132b0 100644
--- a/ui/views/window/dialog_delegate.cc
+++ b/ui/views/window/dialog_delegate.cc
@@ -121,6 +121,10 @@
   // method behaviors.
   params.child = parent && (delegate->GetModalType() == ui::MODAL_TYPE_CHILD);
 #endif
+
+  if (dialog && dialog->widget_owns_native_widget_) {
+    params.ownership = Widget::InitParams::WIDGET_OWNS_NATIVE_WIDGET;
+  }
   return params;
 }
 
@@ -428,6 +432,11 @@
   close_callback_ = std::move(callback);
 }
 
+void DialogDelegate::SetWidgetOwnsNativeWidget() {
+  CHECK(!GetWidget());
+  widget_owns_native_widget_ = true;
+}
+
 std::unique_ptr<View> DialogDelegate::DisownExtraView() {
   return std::move(extra_view_);
 }
diff --git a/ui/views/window/dialog_delegate.h b/ui/views/window/dialog_delegate.h
index 41050ed..d0bd746 100644
--- a/ui/views/window/dialog_delegate.h
+++ b/ui/views/window/dialog_delegate.h
@@ -279,6 +279,10 @@
   // use is if the dialog's parent widget is closed.
   void SetCloseCallback(base::OnceClosure callback);
 
+  // By default the NativeWidget owns the Widget. Calling this method will
+  // instead cause the reverse. Must be called before creating the Widget.
+  void SetWidgetOwnsNativeWidget();
+
   // Returns ownership of the extra view for this dialog, if one was provided
   // via SetExtraView(). This is only for use by DialogClientView; don't call
   // it.
@@ -396,6 +400,8 @@
   // returned true, *or* one of the Accept/Cancel methods have been called and
   // returned true.
   bool already_started_close_ = false;
+
+  bool widget_owns_native_widget_ = false;
 };
 
 // A DialogDelegate implementation that is-a View. Used to override GetWidget()
diff --git a/ui/webui/resources/BUILD.gn b/ui/webui/resources/BUILD.gn
index 4a04bee..b31af28 100644
--- a/ui/webui/resources/BUILD.gn
+++ b/ui/webui/resources/BUILD.gn
@@ -6,7 +6,6 @@
 import("//crypto/features.gni")
 import("//ui/webui/resources/include_polymer.gni")
 import("//ui/webui/resources/tools/generate_grd.gni")
-import("//ui/webui/webui_features.gni")
 
 generate_grd("build_grd") {
   grd_prefix = "webui"
@@ -58,10 +57,12 @@
       "cr_components/settings_prefs:build_grdp",
       "cr_components/theme_color_picker:build_grdp",
       "//third_party/d3:build_grdp",
+      "//third_party/lit/v3_0:build_grdp",
       "//third_party/polymer/v3_0:build_grdp",
     ]
     grdp_files += [
       "$root_gen_dir/third_party/d3/d3_resources.grdp",
+      "$root_gen_dir/third_party/lit/v3_0/resources.grdp",
       "$root_gen_dir/third_party/polymer/v3_0/polymer_3_0_resources.grdp",
       "$target_gen_dir/cr_components/app_management/resources.grdp",
       "$target_gen_dir/cr_components/theme_color_picker/resources.grdp",
@@ -75,11 +76,6 @@
       "$target_gen_dir/cr_components/settings_prefs/resources.grdp",
     ]
 
-    if (!optimize_webui) {
-      public_deps += [ "//third_party/lit/v3_0:build_grdp" ]
-      grdp_files += [ "$root_gen_dir/third_party/lit/v3_0/resources.grdp" ]
-    }
-
     if (use_nss_certs) {
       public_deps += [ "cr_components/certificate_manager:build_grdp" ]
       grdp_files +=
diff --git a/ui/webui/resources/cr_components/omnibox/realbox_action.html b/ui/webui/resources/cr_components/omnibox/realbox_action.html
index aff6e4d..db0cf68 100644
--- a/ui/webui/resources/cr_components/omnibox/realbox_action.html
+++ b/ui/webui/resources/cr_components/omnibox/realbox_action.html
@@ -13,7 +13,7 @@
 
   :host-context([expanded-state-layout-chrome-refresh]) {
     --action-height: 28px;
-    border: solid 1px var(--color-realbox-results-action-chip, #A8C7FA);
+    border: solid 1px var(--color-realbox-results-action-chip);
     border-radius: 8px;
     padding-inline-end: 8px;
     padding-inline-start: 8px;
@@ -35,7 +35,7 @@
     -webkit-mask-position: center;
     -webkit-mask-repeat: no-repeat;
     -webkit-mask-size: 15px;
-    background-color: var(--color-realbox-results-action-chip-icon, #0B57D0);
+    background-color: var(--color-realbox-results-action-chip-icon);
     background-position: center center;
     background-repeat: no-repeat;
     height: 16px;
@@ -63,7 +63,7 @@
       .focus-outline-visible):host(:focus) {
     margin: 2px;
     margin-inline-end: 2px;
-    border: solid 1px var(--color-realbox-results-action-chip, #a8c7fa);
+    border: solid 1px var(--color-realbox-results-action-chip);
     box-shadow: none;
   }
 
diff --git a/ui/webui/resources/cr_components/omnibox/realbox_icon.html b/ui/webui/resources/cr_components/omnibox/realbox_icon.html
index a29779d8..40b434f3 100644
--- a/ui/webui/resources/cr_components/omnibox/realbox_icon.html
+++ b/ui/webui/resources/cr_components/omnibox/realbox_icon.html
@@ -38,7 +38,7 @@
 
   /* If icon is for a pedal or AiS, and it is not in the search box, apply background. */
   :host([has-icon-container-background]:not([in-searchbox])) #container {
-    background-color: var(--color-realbox-answer-icon-background, #D3E3FD);
+    background-color: var(--color-realbox-answer-icon-background);
   }
 
   :host([is-weather-answer]) #container {
@@ -110,7 +110,7 @@
   }
 
   :host([has-icon-container-background]:not([in-searchbox])) #icon {
-    background-color: var(--color-realbox-answer-icon-foreground, #041E49);
+    background-color: var(--color-realbox-answer-icon-foreground);
   }
 
 </style>
diff --git a/ui/webui/resources/cr_components/omnibox/realbox_match.html b/ui/webui/resources/cr_components/omnibox/realbox_match.html
index ced9be5..3160b39 100644
--- a/ui/webui/resources/cr_components/omnibox/realbox_match.html
+++ b/ui/webui/resources/cr_components/omnibox/realbox_match.html
@@ -17,7 +17,7 @@
   }
 
   #actions-focus-border:focus-within {
-    outline: 2px solid var(--color-realbox-results-action-chip-focus-outline, #0B57D0);
+    outline: 2px solid var(--color-realbox-results-action-chip-focus-outline);
     border-radius: 10px;
     margin-inline-start: -2px;
   }
@@ -99,7 +99,7 @@
   }
 
   #focus-indicator {
-    background-color: var(--color-realbox-results-focus-indicator, --google-blue-600);
+    background-color: var(--color-realbox-results-focus-indicator);
     border-radius: 3px;
     display: none;
     height: 100%;
@@ -173,6 +173,8 @@
 
   /* Uses a dimmed color for description for entities. */
   :host([is-entity-suggestion]) #description,
+  /* Description ellipsis color to match the description text color */
+  #description:has(.dim),
   .dim {
     color: var(--color-realbox-results-foreground-dimmed);
   }
@@ -183,6 +185,8 @@
     color: var(--color-realbox-results-dim-selected);
   }
 
+  /* URL ellipsis color to match the URL text color */
+  #description:has(.url),
   .url {
     color: var(--color-realbox-results-url);
   }
diff --git a/ui/webui/resources/cr_elements/chromeos/cros_color_overrides.css b/ui/webui/resources/cr_elements/chromeos/cros_color_overrides.css
index 773a19a..0e21f9be 100644
--- a/ui/webui/resources/cr_elements/chromeos/cros_color_overrides.css
+++ b/ui/webui/resources/cr_elements/chromeos/cros_color_overrides.css
@@ -234,7 +234,9 @@
 }
 
 :host-context([cros][chrome-refresh-2023]) cr-input,
-:host-context([cros][chrome-refresh-2023]) cr-search-field::part(searchInput) {
+:host-context([cros][chrome-refresh-2023]) cr-search-field::part(searchInput),
+:host-context([cros][chrome-refresh-2023])
+    cr-searchable-drop-down::part(input) {
   --cr-input-background-color: var(--cros-sys-input_field_on_base);
   --cr-input-border: none;
   --cr-input-border-bottom: none;
@@ -378,7 +380,8 @@
 }
 
 /* Searchable Dropdown */
-:host-context(body.jelly-enabled) cr-searchable-drop-down {
+:host-context(body.jelly-enabled) cr-searchable-drop-down,
+:host-context([cros][chrome-refresh-2023]) cr-searchable-drop-down {
   --cr-searchable-drop-down-bg-color: var(--cros-sys-base_elevated);
   --cr-searchable-drop-down-icon-color-focus: var(--cros-sys-primary);
   --cr-searchable-drop-down-list-bg-color-selected:
diff --git a/ui/webui/resources/cr_elements/cr_searchable_drop_down/cr_searchable_drop_down.html b/ui/webui/resources/cr_elements/cr_searchable_drop_down/cr_searchable_drop_down.html
index b06a29c..0d096ad 100644
--- a/ui/webui/resources/cr_elements/cr_searchable_drop_down/cr_searchable_drop_down.html
+++ b/ui/webui/resources/cr_elements/cr_searchable_drop_down/cr_searchable_drop_down.html
@@ -15,6 +15,13 @@
 
       cr-input {
         --cr-input-padding-start: 8px;
+
+        /* cr-inputs are by default isolated into their own stacking contexts
+         * but cr-searchable-drop-down requires a fixed overlay that floats over
+         * and covers other content outside their parent cr-input's stacking
+         * contexts.
+         */
+        isolation: auto;
       }
 
       iron-dropdown {
diff --git a/v8 b/v8
index 87402b7..3b9eebc 160000
--- a/v8
+++ b/v8
@@ -1 +1 @@
-Subproject commit 87402b7de5af5ec6a63be94919c773d933b9a64d
+Subproject commit 3b9eebc293329e7062db722b160a2f19e32e2fd5