diff --git a/DEPS b/DEPS
index 5f9f301..da816165 100644
--- a/DEPS
+++ b/DEPS
@@ -313,15 +313,15 @@
   # Three lines of non-changing comments so that
   # the commit queue can handle CLs rolling V8
   # and whatever else without interference from each other.
-  'src_internal_revision': 'f11a7d33a9d0c660a8c3b3b2fca966b25c575b3e',
+  'src_internal_revision': 'c4e9cf1cc0de2e6de21aca6876facddd3ea450a1',
   # Three lines of non-changing comments so that
   # the commit queue can handle CLs rolling Skia
   # and whatever else without interference from each other.
-  'skia_revision': 'b72fe6f76c61be2fd9cf6878f6e3defd44960af8',
+  'skia_revision': 'c5f8c24606eadfdf5ddf1741c6bd4bbeb34e0214',
   # 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': 'c57efa129901e286f562dccac8c5e77b9517b1fd',
+  'v8_revision': 'b5f6750fd599671f406a077969c2caf4bd8e2da7',
   # Three lines of non-changing comments so that
   # the commit queue can handle CLs rolling ANGLE
   # and whatever else without interference from each other.
@@ -408,7 +408,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': '4ef9c73c536379ce499e8771304ef3f999fc86b6',
+  'devtools_frontend_revision': 'a4cc1be16a5fecf8333afbb0a8bbbd70e09bdd94',
   # 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.
@@ -448,7 +448,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': '174c42e551ba1b82747056cb7fc2b9722082d0d4',
+  'dawn_revision': '3cd439bfaf464c0ea5ab2d669febda4bc5651e0a',
   # Three lines of non-changing comments so that
   # the commit queue can handle CLs rolling feed
   # and whatever else without interference from each other.
@@ -848,7 +848,7 @@
 
   'src/clank': {
     'url': Var('chrome_git') + '/clank/internal/apps.git' + '@' +
-    '5c5f938d64e779438a837a026ff3234e7050b392',
+    'cb7ce7fd96470a676aa91a7f942323c10f78da2f',
     'condition': 'checkout_android and checkout_src_internal',
   },
 
@@ -1054,7 +1054,7 @@
     'packages': [
       {
           'package': 'chromium/third_party/androidx',
-          'version': 'ubPprrWxHA0qqDaHt15loHyEFma5qJ5_nZ5SY4oHLewC',
+          'version': 'fT5pz2yH4irycAN03PGWg7WhP9YI8WplHi8GsnRTL0IC',
       },
     ],
     'condition': 'checkout_android',
@@ -1298,13 +1298,13 @@
   },
 
   'src/third_party/depot_tools':
-    Var('chromium_git') + '/chromium/tools/depot_tools.git' + '@' + '456663282214a9b81f7299908f67d03beeb63845',
+    Var('chromium_git') + '/chromium/tools/depot_tools.git' + '@' + 'aabd869daf9956514eba5f57d92da166f993ca47',
 
   'src/third_party/devtools-frontend/src':
     Var('chromium_git') + '/devtools/devtools-frontend' + '@' + Var('devtools_frontend_revision'),
 
   'src/third_party/devtools-frontend-internal': {
-      'url': Var('chrome_git') + '/devtools/devtools-internal.git' + '@' + '5fde161dd4df5e1bc613121743ca9a6f92e1acf8',
+      'url': Var('chrome_git') + '/devtools/devtools-internal.git' + '@' + 'e892097f7c37eb2144577fadb1a390fc0ce3f8e4',
     'condition': 'checkout_src_internal',
   },
 
@@ -1481,7 +1481,7 @@
     Var('chromium_git') + '/chromium/deps/hunspell_dictionaries.git' + '@' + '41cdffd71c9948f63c7ad36e1fb0ff519aa7a37e',
 
   'src/third_party/icu':
-    Var('chromium_git') + '/chromium/deps/icu.git' + '@' + '985b9a6f70e13f3db741fed121e4dcc3046ad494',
+    Var('chromium_git') + '/chromium/deps/icu.git' + '@' + '995db880cff28a8b5d3a9978acd1b7cab9885edd',
 
   'src/third_party/icu4j': {
       'packages': [
@@ -1782,7 +1782,7 @@
     Var('chromium_git') + '/external/github.com/cisco/openh264' + '@' + '09a4f3ec842a8932341b195c5b01e141c8a16eb7',
 
   'src/third_party/openscreen/src':
-    Var('chromium_git') + '/openscreen' + '@' + 'cba24a91356b6d7d2930797541168ff6e0d17885',
+    Var('chromium_git') + '/openscreen' + '@' + 'd0b32cadd6ddc94646047ee93aff43db2470f9c0',
 
   'src/third_party/openxr/src': {
     'url': Var('chromium_git') + '/external/github.com/KhronosGroup/OpenXR-SDK' + '@' + '58a00cf85c39ad5ec4dc43a769624e420c06179a',
@@ -1938,7 +1938,7 @@
       'dep_type': 'cipd',
   },
 
-  'src/third_party/vulkan-deps': '{chromium_git}/vulkan-deps@be2755d4d1097be1c7efa48b4c75d2abfc689205',
+  'src/third_party/vulkan-deps': '{chromium_git}/vulkan-deps@b0fb86c92b69af3d19421199c5d8f3b6dda018e0',
 
   'src/third_party/vulkan_memory_allocator':
     Var('chromium_git') + '/external/github.com/GPUOpen-LibrariesAndSDKs/VulkanMemoryAllocator.git' + '@' + 'e87036508bb156f9986ea959323de1869e328f58',
@@ -1978,7 +1978,7 @@
     Var('chromium_git') + '/external/github.com/gpuweb/cts.git' + '@' + '4e91a54a0767cf596a407e9bc0933e4bbc66e8d3',
 
   'src/third_party/webrtc':
-    Var('webrtc_git') + '/src.git' + '@' + '756911644f7c82cedc9230dd626e24053b9a50c4',
+    Var('webrtc_git') + '/src.git' + '@' + 'cedabf3e2ee01939dcef2fef18c1be8515b09ecd',
 
   # 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.
@@ -4874,10 +4874,12 @@
   },
 
   # Pull down Node binaries for WebUI toolchain.
+  # The Linux binary is always downloaded regardless of host os and architecture
+  # since remote node actions run on Linux worker.
+  # See also //third_party/node/node.gni
   {
     'name': 'node_linux64',
     'pattern': '.',
-    'condition': 'host_os == "linux"',
     'action': [ 'python3',
                 'src/third_party/depot_tools/download_from_google_storage.py',
                 '--no_resume',
diff --git a/android_webview/BUILD.gn b/android_webview/BUILD.gn
index 6d5fc09..200f5b5 100644
--- a/android_webview/BUILD.gn
+++ b/android_webview/BUILD.gn
@@ -845,6 +845,7 @@
     "//components/metrics:metrics_java",
     "//components/network_session_configurator/android:network_session_configurator_java",
     "//components/permissions/android:core_java",
+    "//components/safe_browsing/android:safe_browsing_java",
     "//components/variations:variations_java",
     "//components/viz:viz_java",
     "//content/public/android:content_java",
diff --git a/android_webview/java/src/org/chromium/android_webview/common/ProductionSupportedFlagList.java b/android_webview/java/src/org/chromium/android_webview/common/ProductionSupportedFlagList.java
index abcb5e4..574d720e 100644
--- a/android_webview/java/src/org/chromium/android_webview/common/ProductionSupportedFlagList.java
+++ b/android_webview/java/src/org/chromium/android_webview/common/ProductionSupportedFlagList.java
@@ -19,6 +19,7 @@
 import org.chromium.components.metrics.MetricsSwitches;
 import org.chromium.components.network_session_configurator.NetworkSessionSwitches;
 import org.chromium.components.permissions.PermissionsAndroidFeatureList;
+import org.chromium.components.safe_browsing.SafeBrowsingFeatures;
 import org.chromium.components.variations.VariationsSwitches;
 import org.chromium.components.viz.common.VizFeatures;
 import org.chromium.content_public.common.ContentFeatures;
@@ -449,6 +450,8 @@
             Flag.baseFeature(AwFeatures.WEBVIEW_METRICS_FILTERING,
                     "If enabled, clients used to be out-sampled will report filtered metrics."
                             + " This has no effect if metrics reporting is disabled"),
+            Flag.baseFeature(SafeBrowsingFeatures.SAFE_BROWSING_SKIP_SUBRESOURCES,
+                "When enabled, Safe Browsing will skip subresources"),
             Flag.baseFeature("SafeBrowsingOnUIThread"),
             Flag.baseFeature(BlinkFeatures.ANDROID_EXTENDED_KEYBOARD_SHORTCUTS,
                     "Enables WebView to use the extended keyboard shortcuts added for Android U"),
diff --git a/android_webview/ui/grit_resources_allowlist.txt b/android_webview/ui/grit_resources_allowlist.txt
index 49e55d6..643dcceb 100644
--- a/android_webview/ui/grit_resources_allowlist.txt
+++ b/android_webview/ui/grit_resources_allowlist.txt
@@ -9,6 +9,7 @@
 IDR_SAFE_BROWSING_JS
 IDR_SAFE_BROWSING_HTML
 IDR_WEBUI_JS_CR_JS
+IDR_WEBUI_JS_ASSERT_JS
 IDR_WEBUI_JS_ASSERT_TS_JS
 IDR_WEBUI_JS_UTIL_TS_JS
 IDR_WEBUI_JS_PROMISE_RESOLVER_JS
diff --git a/ash/system/tray/tray_bubble_wrapper.cc b/ash/system/tray/tray_bubble_wrapper.cc
index 34c733c..e46dc40 100644
--- a/ash/system/tray/tray_bubble_wrapper.cc
+++ b/ash/system/tray/tray_bubble_wrapper.cc
@@ -10,8 +10,10 @@
 #include "ash/system/tray/tray_background_view.h"
 #include "ash/system/tray/tray_bubble_view.h"
 #include "ash/system/tray/tray_event_filter.h"
+#include "ui/aura/window.h"
 #include "ui/views/bubble/bubble_dialog_delegate_view.h"
 #include "ui/views/widget/widget.h"
+#include "ui/wm/core/transient_window_manager.h"
 
 namespace ash {
 
@@ -21,6 +23,12 @@
 
 TrayBubbleWrapper::~TrayBubbleWrapper() {
   if (bubble_widget_) {
+    auto* transient_manager = ::wm::TransientWindowManager::GetOrCreate(
+        bubble_widget_->GetNativeWindow());
+    if (transient_manager) {
+      for (auto* window : transient_manager->transient_children())
+        transient_manager->RemoveTransientChild(window);
+    }
     bubble_widget_->RemoveObserver(this);
     bubble_widget_->Close();
   }
@@ -41,7 +49,6 @@
   TrayBackgroundView::InitializeBubbleAnimations(bubble_widget_);
   bubble_view_->InitializeAndShowBubble();
 
-  // We need to explicitly dismiss app list bubble here due to b/1186479.
   if (!Shell::Get()->tablet_mode_controller()->InTabletMode())
     Shell::Get()->app_list_controller()->DismissAppList();
 
@@ -68,6 +75,12 @@
   bubble_widget_->RemoveObserver(this);
   bubble_widget_ = nullptr;
 
+  // Although the bubble is already closed, the next mouse release event
+  // will invoke PerformAction which reopens the bubble again. To prevent the
+  // reopen, the mouse capture of |tray_| has to be released.
+  // See crbug.com/177075
+  tray_->GetWidget()->GetNativeWindow()->ReleaseCapture();
+
   tray_->HideBubbleWithView(bubble_view_);  // May destroy |bubble_view_|
 }
 
diff --git a/ash/system/tray/tray_event_filter.cc b/ash/system/tray/tray_event_filter.cc
index 3a5c6e8..8b1f3f9 100644
--- a/ash/system/tray/tray_event_filter.cc
+++ b/ash/system/tray/tray_event_filter.cc
@@ -136,7 +136,13 @@
   auto* gained_active_widget =
       views::Widget::GetWidgetForNativeView(gained_active);
 
-  if (bubble_widget == gained_active_widget) {
+  // Don't close the bubble if a transient child is gaining or losing
+  // activation.
+  if (bubble_widget == gained_active_widget ||
+      ::wm::HasTransientAncestor(gained_active,
+                                 bubble_widget->GetNativeWindow()) ||
+      (lost_active && ::wm::HasTransientAncestor(
+                          lost_active, bubble_widget->GetNativeWindow()))) {
     return;
   }
 
diff --git a/ash/system/unified/unified_system_tray_bubble.cc b/ash/system/unified/unified_system_tray_bubble.cc
index 410b0a6..84b4f4d 100644
--- a/ash/system/unified/unified_system_tray_bubble.cc
+++ b/ash/system/unified/unified_system_tray_bubble.cc
@@ -351,7 +351,11 @@
 
   // Don't close the bubble if a transient child is gaining or losing
   // activation.
-  if (bubble_widget_ == gained_active_widget) {
+  if (bubble_widget_ == gained_active_widget ||
+      ::wm::HasTransientAncestor(gained_active,
+                                 bubble_widget_->GetNativeWindow()) ||
+      (lost_active && ::wm::HasTransientAncestor(
+                          lost_active, bubble_widget_->GetNativeWindow()))) {
     return;
   }
 
diff --git a/ash/test/ash_test_helper.cc b/ash/test/ash_test_helper.cc
index 78d6220..da9c7444 100644
--- a/ash/test/ash_test_helper.cc
+++ b/ash/test/ash_test_helper.cc
@@ -411,9 +411,10 @@
   // Tests expect empty wallpaper.
   shell->wallpaper_controller()->CreateEmptyWallpaperForTesting();
 
-  // Move the mouse cursor to far away so that native events don't interfere
-  // with test expectations.
-  Shell::GetPrimaryRootWindow()->MoveCursorTo(gfx::Point(-1000, -1000));
+  // Native events and mouse movements are disabled by
+  // `ui::DisableNativeUiEventDispatchDisabled()`. Just make sure that the the
+  // mouse cursour is not on the screen by default.
+  aura::Env::GetInstance()->SetLastMouseLocation(gfx::Point(-1000, -1000));
   shell->cursor_manager()->EnableMouseEvents();
 
   // Changing GestureConfiguration shouldn't make tests fail. These values
diff --git a/ash/webui/camera_app_ui/resources/utils/cca/commands/dev.py b/ash/webui/camera_app_ui/resources/utils/cca/commands/dev.py
index 3775989..844f51b9 100644
--- a/ash/webui/camera_app_ui/resources/utils/cca/commands/dev.py
+++ b/ash/webui/camera_app_ui/resources/utils/cca/commands/dev.py
@@ -341,9 +341,17 @@
         routes = self._handler.routes
         for route in routes:
             if _route_match(route):
-                return self._send_200(path, route.handler(path))
+                try:
+                    content = route.handler(path)
+                except Exception as e:
+                    logging.debug(f"Error while handling {path}", e)
+                    self.send_response(404)
+                    self.end_headers()
+                    return
+                return self._send_200(path, content)
 
         self.send_response(404)
+        self.end_headers()
 
 
 _DEV_OUTPUT_TEMP_DIR = "/tmp/cca-dev-out"
diff --git a/base/containers/circular_deque_unittest.cc b/base/containers/circular_deque_unittest.cc
index d02b8081..d7a9ae3 100644
--- a/base/containers/circular_deque_unittest.cc
+++ b/base/containers/circular_deque_unittest.cc
@@ -7,6 +7,7 @@
 #include "base/memory/raw_ptr.h"
 #include "base/memory/scoped_refptr.h"
 #include "base/test/copy_only_int.h"
+#include "base/test/gtest_util.h"
 #include "base/test/move_only_int.h"
 #include "testing/gtest/include/gtest/gtest.h"
 
@@ -879,9 +880,7 @@
   EXPECT_EQ(&back, &q.back());
 }
 
-/*
-This test should assert in a debug build. It tries to dereference an iterator
-after mutating the container. Uncomment to double-check that this works.
+// This test tries to dereference an iterator after mutating the container.
 TEST(CircularDeque, UseIteratorAfterMutate) {
   circular_deque<int> q;
   q.push_back(0);
@@ -890,9 +889,10 @@
   EXPECT_EQ(0, *old_begin);
 
   q.push_back(1);
-  EXPECT_EQ(0, *old_begin);  // Should DCHECK.
+
+  // This statement is not executed when DCHECKs are disabled.
+  EXPECT_DCHECK_DEATH(*old_begin);
 }
-*/
 
 // This test verifies that a scoped_refptr specifically is moved rather than
 // copied when a circular_deque is resized. It would be extremely inefficient if
diff --git a/base/system/sys_info.cc b/base/system/sys_info.cc
index 4c6cbdfd..1407922 100644
--- a/base/system/sys_info.cc
+++ b/base/system/sys_info.cc
@@ -88,28 +88,79 @@
 
 namespace {
 
-bool IsAndroid4GbOr6GbDevice() {
+enum class BucketizedSize {
+  k2GbOrLess,
+  k3Gb,
+  k4Gb,
+  k6Gb,
+  k8GbOrHigher,
+};
+
+BucketizedSize GetAndroidSystemRamBucketizedSize() {
+  int physical_memory = base::SysInfo::AmountOfPhysicalMemoryMB();
+
   // Because of Android carveouts, AmountOfPhysicalMemory() returns smaller
-  // than the actual memory size, So we will use a small lowerbound than 4GB
-  // to discriminate real 4GB devices from lower memory ones.
-  constexpr int kLowerBoundMB = 3.2 * 1024;
-  constexpr int kUpperBoundMB = 6 * 1024;
-  static bool is_4gb_or_6g_device =
-      kLowerBoundMB <= base::SysInfo::AmountOfPhysicalMemoryMB() &&
-      base::SysInfo::AmountOfPhysicalMemoryMB() <= kUpperBoundMB;
-  return is_4gb_or_6g_device;
+  // than the actual memory size, So we will use a small lowerbound than "X"GB
+  // to discriminate real "X"GB devices from lower memory ones.
+
+  constexpr int kUpperBound2GB = 2 * 1024;  // inclusive
+  if (physical_memory <= kUpperBound2GB) {
+    return BucketizedSize::k2GbOrLess;
+  }
+
+  constexpr int kLowerBound3GB = kUpperBound2GB;  // exclusive
+  constexpr int kUpperBound3GB = 3.2 * 1024;      // inclusive
+  if (kLowerBound3GB < physical_memory && physical_memory <= kUpperBound3GB) {
+    return BucketizedSize::k3Gb;
+  }
+
+  constexpr int kLowerBound4GB = kUpperBound3GB;  // exclusive
+  constexpr int kUpperBound4GB = 4 * 1024;        // inclusive
+  if (kLowerBound4GB < physical_memory && physical_memory <= kUpperBound4GB) {
+    return BucketizedSize::k4Gb;
+  }
+
+  constexpr int kLowerBound6GB = kUpperBound4GB;  // exclusive
+  constexpr int kUpperBound6GB = 6.5 * 1024 - 1;  // inclusive
+  if (kLowerBound6GB < physical_memory && physical_memory <= kUpperBound6GB) {
+    return BucketizedSize::k6Gb;
+  }
+
+  return BucketizedSize::k8GbOrHigher;
+}
+
+BucketizedSize GetCachedAndroidSystemRamBucketizedSize() {
+  static BucketizedSize s_size = GetAndroidSystemRamBucketizedSize();
+  return s_size;
 }
 
 bool IsPartialLowEndModeOnMidRangeDevicesEnabled() {
   // TODO(crbug.com/1434873): make the feature not enable on 32-bit devices
   // before launching or going to high Stable %.
-  return IsAndroid4GbOr6GbDevice() &&
+  return SysInfo::IsAndroid4GbOr6GbDevice() &&
          base::FeatureList::IsEnabled(
              features::kPartialLowEndModeOnMidRangeDevices);
 }
 
 }  // namespace
 
+bool SysInfo::IsAndroid3GbDevice() {
+  return GetCachedAndroidSystemRamBucketizedSize() == BucketizedSize::k3Gb;
+}
+
+bool SysInfo::IsAndroid4GbDevice() {
+  return GetCachedAndroidSystemRamBucketizedSize() == BucketizedSize::k4Gb;
+}
+
+bool SysInfo::IsAndroid4GbOr6GbDevice() {
+  return GetCachedAndroidSystemRamBucketizedSize() == BucketizedSize::k4Gb ||
+         GetCachedAndroidSystemRamBucketizedSize() == BucketizedSize::k6Gb;
+}
+
+bool SysInfo::IsAndroid6GbDevice() {
+  return GetCachedAndroidSystemRamBucketizedSize() == BucketizedSize::k6Gb;
+}
+
 #endif  // BUILDFLAG(IS_ANDROID)
 
 // TODO(crbug.com/1434873): This method is for chromium native code.
diff --git a/base/system/sys_info.h b/base/system/sys_info.h
index 5d03488..b07d4c9 100644
--- a/base/system/sys_info.h
+++ b/base/system/sys_info.h
@@ -297,6 +297,19 @@
   static bool IsLowEndDeviceOrPartialLowEndModeEnabled(
       const FeatureParam<bool>& param_for_exclusion);
 
+#if BUILDFLAG(IS_ANDROID)
+  // Returns true for Android devices whose memory is X GB, considering
+  // carveouts. The carveouts is memory reserved by the system, e.g.
+  // for drivers, MTE, etc. It's very common for querying app to see
+  // hundreds MBs less than actual physical memory installed on the system.
+  static bool IsAndroid3GbDevice();
+  static bool IsAndroid4GbDevice();
+  static bool IsAndroid6GbDevice();
+  // Returns true for Android devices whose memory is 4GB or 6GB, considering
+  // carveouts.
+  static bool IsAndroid4GbOr6GbDevice();
+#endif  // BUILDFLAG(IS_ANDROID)
+
 #if BUILDFLAG(IS_MAC)
   // Indicates that CPU security mitigations are enabled for the current
   // process. This is used to control the behavior of NumberOfProcessors(), see
diff --git a/base/threading/thread_local_internal.h b/base/threading/thread_local_internal.h
index ed99410..5504813 100644
--- a/base/threading/thread_local_internal.h
+++ b/base/threading/thread_local_internal.h
@@ -30,7 +30,7 @@
  public:
   CheckedThreadLocalOwnedPointer() = default;
 
-  CheckedThreadLocalOwnedPointer<T>(const CheckedThreadLocalOwnedPointer<T>&) =
+  CheckedThreadLocalOwnedPointer(const CheckedThreadLocalOwnedPointer<T>&) =
       delete;
   CheckedThreadLocalOwnedPointer<T>& operator=(
       const CheckedThreadLocalOwnedPointer<T>&) = delete;
diff --git a/build/config/compiler/BUILD.gn b/build/config/compiler/BUILD.gn
index bc098eb74..3f6344e 100644
--- a/build/config/compiler/BUILD.gn
+++ b/build/config/compiler/BUILD.gn
@@ -1134,17 +1134,6 @@
         "-m64",
         "-msse3",
       ]
-
-      # Minimum SIMD support for devices running lacros.
-      # See https://crbug.com/1475858
-      if (is_chromeos_lacros) {
-        cflags += [
-          "-mssse3",
-          "-msse4",
-          "-msse4.1",
-          "-msse4.2",
-        ]
-      }
       ldflags += [ "-m64" ]
     } else if (current_cpu == "x86") {
       cflags += [ "-m32" ]
diff --git a/build/config/ios/BUILD.gn b/build/config/ios/BUILD.gn
index 120eb6b..4360f32 100644
--- a/build/config/ios/BUILD.gn
+++ b/build/config/ios/BUILD.gn
@@ -64,10 +64,6 @@
   ]
 
   cflags_objcc = [
-    # Without this, the constructors and destructors of a C++ object inside
-    # an Objective C struct won't be called, which is very bad.
-    "-fobjc-call-cxx-cdtors",
-
     # When using -std=c++20 or higher, clang automatically returns true for
     # `__has_feature(modules)` as it enables cxx modules. This is problematic
     # because Objective-C code uses this to detect whether `@import` can be
diff --git a/build/config/mac/BUILD.gn b/build/config/mac/BUILD.gn
index fc7f57a..85a668d 100644
--- a/build/config/mac/BUILD.gn
+++ b/build/config/mac/BUILD.gn
@@ -43,10 +43,6 @@
   asmflags = common_mac_flags
   cflags = common_mac_flags
 
-  # Without this, the constructors and destructors of a C++ object inside
-  # an Objective C struct won't be called, which is very bad.
-  cflags_objcc = [ "-fobjc-call-cxx-cdtors" ]
-
   ldflags = common_mac_flags
 
   if (save_unstripped_output) {
diff --git a/build/config/siso/clang_all.star b/build/config/siso/clang_all.star
index b617e1da..de0003c 100644
--- a/build/config/siso/clang_all.star
+++ b/build/config/siso/clang_all.star
@@ -6,7 +6,7 @@
 
 load("@builtin//struct.star", "module")
 
-def __filegroups(ct):
+def __filegroups(ctx):
     return {
         "third_party/libc++/src/include:headers": {
             "type": "glob",
diff --git a/build/config/siso/clang_windows.star b/build/config/siso/clang_windows.star
index 67d2b46..712a245f3 100644
--- a/build/config/siso/clang_windows.star
+++ b/build/config/siso/clang_windows.star
@@ -4,29 +4,43 @@
 # found in the LICENSE file.
 """Siso configuration for clang-cl/windows."""
 
+load("@builtin//encoding.star", "json")
 load("@builtin//path.star", "path")
 load("@builtin//struct.star", "module")
 load("./clang_all.star", "clang_all")
 load("./clang_code_coverage_wrapper.star", "clang_code_coverage_wrapper")
 load("./rewrapper_cfg.star", "rewrapper_cfg")
 
+def __win_toolchain_dir(ctx):
+    # build/win_toolchain.json may not exist when
+    # $env:DEPOT_TOOLS_WIN_TOOLCHAIN=0 or so.
+    if not ctx.fs.exists("build/win_toolchain.json"):
+        return None
+    data = json.decode(str(ctx.fs.read("build/win_toolchain.json")))
+    if "path" in data:
+        return ctx.fs.canonpath(data["path"])
+    return None
+
 def __filegroups(ctx):
-    fg = {
-        # for precomputed subtree
-        "third_party/depot_tools/win_toolchain/vs_files/27370823e7:headers-ci": {
-            "type": "glob",
-            "includes": [
-                "*.h",
-                "*.inl",
-                "*.H",
-                "*.Hxx",
-                "*.hxx",
-                "*.hpp",
-                "VC/Tools/MSVC/*/include/*",
-                "VC/Tools/MSVC/*/include/*/*",
-            ],
-        },
-    }
+    win_toolchain_dir = __win_toolchain_dir(ctx)
+    fg = {}
+    if win_toolchain_dir:
+        fg.update({
+            # for precomputed subtree
+            win_toolchain_dir + ":headers-ci": {
+                "type": "glob",
+                "includes": [
+                    "*.h",
+                    "*.inl",
+                    "*.H",
+                    "*.Hxx",
+                    "*.hxx",
+                    "*.hpp",
+                    "VC/Tools/MSVC/*/include/*",
+                    "VC/Tools/MSVC/*/include/*/*",
+                ],
+            },
+        })
     fg.update(clang_all.filegroups(ctx))
     return fg
 
@@ -46,167 +60,176 @@
             "clang-cl": reproxy_config["platform"],
         })
         step_config["input_deps"].update(clang_all.input_deps)
-        if reproxy_config["platform"]["OSFamily"] == "Windows":
-            step_config["input_deps"].update({
-                "third_party/depot_tools/win_toolchain/vs_files/27370823e7:headers": [
-                    "third_party/depot_tools/win_toolchain/vs_files/27370823e7:headers-ci",
-                ],
-            })
-        else:
-            step_config["input_deps"].update({
-                "third_party/depot_tools/win_toolchain/vs_files/27370823e7:headers": [
-                    "third_party/depot_tools/win_toolchain/vs_files/27370823e7:headers-ci",
-                    # third_party/libc++ includes "DeplayIMP.h"
-                    "third_party/depot_tools/win_toolchain/vs_files/27370823e7/VC/Tools/MSVC/14.34.31933/include/DelayIMP.h",
-                    # third_party/abseil-cpp includes "dbghelp.h"
-                    "third_party/depot_tools/win_toolchain/vs_files/27370823e7/Windows Kits/10/Include/10.0.22621.0/um/dbghelp.h",
-                    # third_party/abseil-cpp includes "aclapi.h"
-                    "third_party/depot_tools/win_toolchain/vs_files/27370823e7/Windows Kits/10/Include/10.0.22621.0/um/aclapi.h",
-                    # base/debug includes "psapi.h"
-                    "third_party/depot_tools/win_toolchain/vs_files/27370823e7/Windows Kits/10/Include/10.0.22621.0/um/psapi.h",
-                    # base/process includes "tlhelp32.h"
-                    "third_party/depot_tools/win_toolchain/vs_files/27370823e7/Windows Kits/10/Include/10.0.22621.0/um/tlhelp32.h",
-                    # base/process includes "userenv.h"
-                    "third_party/depot_tools/win_toolchain/vs_files/27370823e7/Windows Kits/10/Include/10.0.22621.0/um/userenv.h",
-                    # base includes "shlobj.h"
-                    "third_party/depot_tools/win_toolchain/vs_files/27370823e7/Windows Kits/10/Include/10.0.22621.0/um/shlobj.h",
-                    # base/win includes "lm.h"
-                    "third_party/depot_tools/win_toolchain/vs_files/27370823e7/Windows Kits/10/Include/10.0.22621.0/um/lm.h",
-                    # base/win includes "mdmregistration.h"
-                    "third_party/depot_tools/win_toolchain/vs_files/27370823e7/Windows Kits/10/Include/10.0.22621.0/um/mdmregistration.h",
-                    # base/win includes "shellscalingapi.h"
-                    "third_party/depot_tools/win_toolchain/vs_files/27370823e7/Windows Kits/10/Include/10.0.22621.0/um/shellscalingapi.h",
-                    # base/win includes "uiviewsettingsinterop.h"
-                    "third_party/depot_tools/win_toolchain/vs_files/27370823e7/Windows Kits/10/Include/10.0.22621.0/um/uiviewsettingsinterop.h",
-                    # native_client/src/shared/platform/win includes "WinError.h"
-                    "third_party/depot_tools/win_toolchain/vs_files/27370823e7/Windows Kits/10/Include/10.0.22621.0/shared/WinError.h",
-                    # third_party/webrtc/rtc_base/win includes "windows.graphics.directX.direct3d11.h"
-                    "third_party/depot_tools/win_toolchain/vs_files/27370823e7/Windows Kits/10/Include/10.0.22621.0/cppwinrt/winrt/windows.graphics.directX.direct3d11.h",
-                    "third_party/depot_tools/win_toolchain/vs_files/27370823e7/Windows Kits/10/Include/10.0.22621.0/winrt/windows.graphics.directX.direct3d11.h",
-                    # third_party/webrtc/rtc_base/win includes "windows.graphics.directX.direct3d11.interop.h"
-                    "third_party/depot_tools/win_toolchain/vs_files/27370823e7/Windows Kits/10/Include/10.0.22621.0/um/windows.graphics.directX.direct3d11.interop.h",
-                    # third_party/crashpad/crashpad/handler/win includes "werapi.h"
-                    "third_party/depot_tools/win_toolchain/vs_files/27370823e7/Windows Kits/10/Include/10.0.22621.0/um/werapi.h",
-                    # chrome/install_static/ includes "wtsapi32.h"
-                    "third_party/depot_tools/win_toolchain/vs_files/27370823e7/Windows Kits/10/Include/10.0.22621.0/um/wtsapi32.h",
-                    # third_party/dawn/include/dawn/native includes "DXGI1_4.h"
-                    "third_party/depot_tools/win_toolchain/vs_files/27370823e7/Windows Kits/10/Include/10.0.22621.0/shared/DXGI1_4.h",
-                    # v8/src/diagnostics includes "versionhelpers.h"
-                    "third_party/depot_tools/win_toolchain/vs_files/27370823e7/Windows Kits/10/Include/10.0.22621.0/um/versionhelpers.h",
-                    # ui/gfx/ includes "DXGIType.h"
-                    "third_party/depot_tools/win_toolchain/vs_files/27370823e7/Windows Kits/10/Include/10.0.22621.0/shared/DXGIType.h",
-                    # third_party/unrar includes "PowrProf.h"
-                    "third_party/depot_tools/win_toolchain/vs_files/27370823e7/Windows Kits/10/Include/10.0.22621.0/um/PowrProf.h",
-                    # device/base/ includes "dbt.h"
-                    "third_party/depot_tools/win_toolchain/vs_files/27370823e7/Windows Kits/10/Include/10.0.22621.0/um/dbt.h",
-                    # third_party/skia/ includes "ObjBase.h"
-                    "third_party/depot_tools/win_toolchain/vs_files/27370823e7/Windows Kits/10/Include/10.0.22621.0/um/ObjBase.h",
-                    # third_party/webrtc/rtc_base includes "ws2spi.h"
-                    "third_party/depot_tools/win_toolchain/vs_files/27370823e7/Windows Kits/10/Include/10.0.22621.0/um/ws2spi.h",
-                    # third_party/skia/ includes "T2EmbApi.h"
-                    "third_party/depot_tools/win_toolchain/vs_files/27370823e7/Windows Kits/10/Include/10.0.22621.0/um/T2EmbApi.h",
-                    # device/vr/windows/ includes "D3D11_1.h"
-                    "third_party/depot_tools/win_toolchain/vs_files/27370823e7/Windows Kits/10/Include/10.0.22621.0/um/D3D11_1.h",
-                    # rlz/win/ includes "Sddl.h"
-                    "third_party/depot_tools/win_toolchain/vs_files/27370823e7/Windows Kits/10/Include/10.0.22621.0/shared/Sddl.h",
-                    # chrome/common/safe_browsing/ includes "softpub.h"
-                    "third_party/depot_tools/win_toolchain/vs_files/27370823e7/Windows Kits/10/Include/10.0.22621.0/um/softpub.h",
-                    # services/device/generic_sensor/ includes "Sensors.h"
-                    "third_party/depot_tools/win_toolchain/vs_files/27370823e7/Windows Kits/10/Include/10.0.22621.0/um/Sensors.h",
-                    # third_party/webrtc/modules/desktop_capture/win includes "windows.graphics.capture.interop.h"
-                    "third_party/depot_tools/win_toolchain/vs_files/27370823e7/Windows Kits/10/Include/10.0.22621.0/um/windows.graphics.capture.interop.h",
-                    # third_party/skia/ includes "FontSub.h"
-                    "third_party/depot_tools/win_toolchain/vs_files/27370823e7/Windows Kits/10/Include/10.0.22621.0/um/FontSub.h",
-                    # chrome/updater/ includes "regstr.h"
-                    "third_party/depot_tools/win_toolchain/vs_files/27370823e7/Windows Kits/10/Include/10.0.22621.0/um/regstr.h",
-                    # services/device/compute_pressure includes "pdh.h"
-                    "third_party/depot_tools/win_toolchain/vs_files/27370823e7/Windows Kits/10/Include/10.0.22621.0/um/pdh.h",
-                    # chrome/installer/ includes "mshtmhst.h"
-                    "third_party/depot_tools/win_toolchain/vs_files/27370823e7/Windows Kits/10/Include/10.0.22621.0/um/mshtmhst.h",
-                    # net/ssl/ includes "NCrypt.h"
-                    "third_party/depot_tools/win_toolchain/vs_files/27370823e7/Windows Kits/10/Include/10.0.22621.0/um/NCrypt.h",
-                    # device/fido/win/ includes "Combaseapi.h"
-                    "third_party/depot_tools/win_toolchain/vs_files/27370823e7/Windows Kits/10/Include/10.0.22621.0/um/Combaseapi.h",
-                    # components/device_signals/core/system_signals/win includes "wscapi.h"
-                    "third_party/depot_tools/win_toolchain/vs_files/27370823e7/Windows Kits/10/Include/10.0.22621.0/um/wscapi.h",
-                    # net/proxy_resolution/win/ includes "dhcpcsdk.h"
-                    "third_party/depot_tools/win_toolchain/vs_files/27370823e7/Windows Kits/10/Include/10.0.22621.0/um/dhcpcsdk.h",
-                    # third_party/dawn/third_party/glfw includes "xinput.h"
-                    "third_party/depot_tools/win_toolchain/vs_files/27370823e7/Windows Kits/10/Include/10.0.22621.0/um/xinput.h",
-                    # v8/tools/v8windbg includes "pathcch.h"
-                    "third_party/depot_tools/win_toolchain/vs_files/27370823e7/Windows Kits/10/Include/10.0.22621.0/um/pathcch.h",
-                    # remoting/host includes "rpcproxy.h"
-                    "third_party/depot_tools/win_toolchain/vs_files/27370823e7/Windows Kits/10/Include/10.0.22621.0/um/rpcproxy.h",
-                    # sandbox/win includes "Aclapi.h"
-                    "third_party/depot_tools/win_toolchain/vs_files/27370823e7/Windows Kits/10/Include/10.0.22621.0/um/Aclapi.h",
-                    # ui/accessibility/platform includes "uiautomation.h"
-                    "third_party/depot_tools/win_toolchain/vs_files/27370823e7/Windows Kits/10/Include/10.0.22621.0/um/uiautomation.h",
-                    # chrome/credential_provider/gaiacp includes "ntsecapi.h"
-                    "third_party/depot_tools/win_toolchain/vs_files/27370823e7/Windows Kits/10/Include/10.0.22621.0/um/ntsecapi.h",
-                    # net/dns includes "Winsock2.h"
-                    "third_party/depot_tools/win_toolchain/vs_files/27370823e7/Windows Kits/10/Include/10.0.22621.0/um/Winsock2.h",
-                    # media/cdm/win includes "mferror.h"
-                    "third_party/depot_tools/win_toolchain/vs_files/27370823e7/Windows Kits/10/Include/10.0.22621.0/um/mferror.h",
-                    # chrome/credentialProvider/gaiacp includes "Winternl.h"
-                    "third_party/depot_tools/win_toolchain/vs_files/27370823e7/Windows Kits/10/Include/10.0.22621.0/um/Winternl.h",
-                    # media/audio/win includes "audioclient.h"
-                    "third_party/depot_tools/win_toolchain/vs_files/27370823e7/Windows Kits/10/Include/10.0.22621.0/um/audioclient.h",
-                    # media/audio/win includes "MMDeviceAPI.h"
-                    "third_party/depot_tools/win_toolchain/vs_files/27370823e7/Windows Kits/10/Include/10.0.22621.0/um/MMDeviceAPI.h",
-                    # net/proxy_resolution/win includes "dhcpv6csdk.h"
-                    "third_party/depot_tools/win_toolchain/vs_files/27370823e7/Windows Kits/10/Include/10.0.22621.0/um/dhcpv6csdk.h",
-                    # components/system_media_controls/win includes "systemmediatransportcontrolsinterop.h"
-                    "third_party/depot_tools/win_toolchain/vs_files/27370823e7/Windows Kits/10/Include/10.0.22621.0/um/systemmediatransportcontrolsinterop.h",
-                    # ui/native_theme includes "Windows.Media.ClosedCaptioning.h"
-                    "third_party/depot_tools/win_toolchain/vs_files/27370823e7/Windows Kits/10/Include/10.0.22621.0/cppwinrt/winrt/Windows.Media.ClosedCaptioning.h",
-                    "third_party/depot_tools/win_toolchain/vs_files/27370823e7/Windows Kits/10/Include/10.0.22621.0/winrt/Windows.Media.ClosedCaptioning.h",
-                    # media/audio/win includes "Functiondiscoverykeys_devpkey.h"
-                    "third_party/depot_tools/win_toolchain/vs_files/27370823e7/Windows Kits/10/Include/10.0.22621.0/um/Functiondiscoverykeys_devpkey.h",
-                    # device/fido includes "Winuser.h"
-                    "third_party/depot_tools/win_toolchain/vs_files/27370823e7/Windows Kits/10/Include/10.0.22621.0/um/Winuser.h",
-                    # chrome/updater/win includes "msxml2.h"
-                    "third_party/depot_tools/win_toolchain/vs_files/27370823e7/Windows Kits/10/Include/10.0.22621.0/um/msxml2.h",
-                    # remoting/host includes "ime.h"
-                    "third_party/depot_tools/win_toolchain/vs_files/27370823e7/Windows Kits/10/Include/10.0.22621.0/um/ime.h",
-                    # remoting/host/win includes "D3DCommon.h"
-                    "third_party/depot_tools/win_toolchain/vs_files/27370823e7/Windows Kits/10/Include/10.0.22621.0/um/D3DCommon.h",
-                    # ui/views/controls/menu includes "Vssym32.h"
-                    "third_party/depot_tools/win_toolchain/vs_files/27370823e7/Windows Kits/10/Include/10.0.22621.0/um/Vssym32.h",
-                    # third_party/wtl includes "richedit.h"
-                    "third_party/depot_tools/win_toolchain/vs_files/27370823e7/Windows Kits/10/Include/10.0.22621.0/um/richedit.h",
-                    # chrome/updater/net includes "Urlmon.h"
-                    "third_party/depot_tools/win_toolchain/vs_files/27370823e7/Windows Kits/10/Include/10.0.22621.0/um/Urlmon.h",
-                    # device/gamepad includes "XInput.h"
-                    "third_party/depot_tools/win_toolchain/vs_files/27370823e7/Windows Kits/10/Include/10.0.22621.0/um/XInput.h",
-                    # chrome/credential_provider/gaiacp includes "Shlobj.h"
-                    "third_party/depot_tools/win_toolchain/vs_files/27370823e7/Windows Kits/10/Include/10.0.22621.0/um/Shlobj.h",
-                    # content/renderer includes "mlang.h"
-                    "third_party/depot_tools/win_toolchain/vs_files/27370823e7/Windows Kits/10/Include/10.0.22621.0/um/mlang.h",
-                    # components/storage_monitor includes "portabledevice.h"
-                    "third_party/depot_tools/win_toolchain/vs_files/27370823e7/Windows Kits/10/Include/10.0.22621.0/um/portabledevice.h",
-                    # third_party/wtl includes "richole.h"
-                    "third_party/depot_tools/win_toolchain/vs_files/27370823e7/Windows Kits/10/Include/10.0.22621.0/um/richole.h",
-                    # chrome/utility/importer includes "intshcut.h"
-                    "third_party/depot_tools/win_toolchain/vs_files/27370823e7/Windows Kits/10/Include/10.0.22621.0/um/intshcut.h",
-                    # chrome/browser/net includes "Ws2spi.h"
-                    "third_party/depot_tools/win_toolchain/vs_files/27370823e7/Windows Kits/10/Include/10.0.22621.0/um/Ws2spi.h",
-                    # chrome/browser/enterprise/platform_auth includes "proofofpossessioncookieinfo.h"
-                    "third_party/depot_tools/win_toolchain/vs_files/27370823e7/Windows Kits/10/Include/10.0.22621.0/um/proofofpossessioncookieinfo.h",
-                    # chrome/utility/importer includes "urlhist.h"
-                    "third_party/depot_tools/win_toolchain/vs_files/27370823e7/Windows Kits/10/Include/10.0.22621.0/um/urlhist.h",
-                    # chrome/updater/win/installer includes "msiquery.h"
-                    "third_party/depot_tools/win_toolchain/vs_files/27370823e7/Windows Kits/10/Include/10.0.22621.0/um/msiquery.h",
-                    # third_party/win_virtual_display/controller includes "Devpropdef.h"
-                    "third_party/depot_tools/win_toolchain/vs_files/27370823e7/Windows Kits/10/Include/10.0.22621.0/shared/Devpropdef.h",
-                ],
-            })
+
+        # when win_toolchain_dir is unknown (e.g.
+        # missing build/win_toolchain.json), we can't run
+        # clang-cl remotely as we can find sysroot files
+        # under exec_root, so just run locally.
+        remote = False
+        win_toolchain_dir = __win_toolchain_dir(ctx)
+        if win_toolchain_dir:
+            if reproxy_config["platform"]["OSFamily"] == "Windows":
+                step_config["input_deps"].update({
+                    win_toolchain_dir + ":headers": [
+                        win_toolchain_dir + ":headers-ci",
+                    ],
+                })
+            else:
+                step_config["input_deps"].update({
+                    win_toolchain_dir + ":headers": [
+                        win_toolchain_dir + ":headers-ci",
+                        # third_party/libc++ includes "DeplayIMP.h"
+                        path.join(win_toolchain_dir, "VC/Tools/MSVC/14.34.31933/include/DelayIMP.h"),
+                        # third_party/abseil-cpp includes "dbghelp.h"
+                        path.join(win_toolchain_dir, "Windows Kits/10/Include/10.0.22621.0/um/dbghelp.h"),
+                        # third_party/abseil-cpp includes "aclapi.h"
+                        path.join(win_toolchain_dir, "Windows Kits/10/Include/10.0.22621.0/um/aclapi.h"),
+                        # base/debug includes "psapi.h"
+                        path.join(win_toolchain_dir, "Windows Kits/10/Include/10.0.22621.0/um/psapi.h"),
+                        # base/process includes "tlhelp32.h"
+                        path.join(win_toolchain_dir, "Windows Kits/10/Include/10.0.22621.0/um/tlhelp32.h"),
+                        # base/process includes "userenv.h"
+                        path.join(win_toolchain_dir, "Windows Kits/10/Include/10.0.22621.0/um/userenv.h"),
+                        # base includes "shlobj.h"
+                        path.join(win_toolchain_dir, "Windows Kits/10/Include/10.0.22621.0/um/shlobj.h"),
+                        # base/win includes "lm.h"
+                        path.join(win_toolchain_dir, "Windows Kits/10/Include/10.0.22621.0/um/lm.h"),
+                        # base/win includes "mdmregistration.h"
+                        path.join(win_toolchain_dir, "Windows Kits/10/Include/10.0.22621.0/um/mdmregistration.h"),
+                        # base/win includes "shellscalingapi.h"
+                        path.join(win_toolchain_dir, "Windows Kits/10/Include/10.0.22621.0/um/shellscalingapi.h"),
+                        # base/win includes "uiviewsettingsinterop.h"
+                        path.join(win_toolchain_dir, "Windows Kits/10/Include/10.0.22621.0/um/uiviewsettingsinterop.h"),
+                        # native_client/src/shared/platform/win includes "WinError.h"
+                        path.join(win_toolchain_dir, "Windows Kits/10/Include/10.0.22621.0/shared/WinError.h"),
+                        # third_party/webrtc/rtc_base/win includes "windows.graphics.directX.direct3d11.h"
+                        path.join(win_toolchain_dir, "Windows Kits/10/Include/10.0.22621.0/cppwinrt/winrt/windows.graphics.directX.direct3d11.h"),
+                        path.join(win_toolchain_dir, "Windows Kits/10/Include/10.0.22621.0/winrt/windows.graphics.directX.direct3d11.h"),
+                        # third_party/webrtc/rtc_base/win includes "windows.graphics.directX.direct3d11.interop.h"
+                        path.join(win_toolchain_dir, "Windows Kits/10/Include/10.0.22621.0/um/windows.graphics.directX.direct3d11.interop.h"),
+                        # third_party/crashpad/crashpad/handler/win includes "werapi.h"
+                        path.join(win_toolchain_dir, "Windows Kits/10/Include/10.0.22621.0/um/werapi.h"),
+                        # chrome/install_static/ includes "wtsapi32.h"
+                        path.join(win_toolchain_dir, "Windows Kits/10/Include/10.0.22621.0/um/wtsapi32.h"),
+                        # third_party/dawn/include/dawn/native includes "DXGI1_4.h"
+                        path.join(win_toolchain_dir, "Windows Kits/10/Include/10.0.22621.0/shared/DXGI1_4.h"),
+                        # v8/src/diagnostics includes "versionhelpers.h"
+                        path.join(win_toolchain_dir, "Windows Kits/10/Include/10.0.22621.0/um/versionhelpers.h"),
+                        # ui/gfx/ includes "DXGIType.h"
+                        path.join(win_toolchain_dir, "Windows Kits/10/Include/10.0.22621.0/shared/DXGIType.h"),
+                        # third_party/unrar includes "PowrProf.h"
+                        path.join(win_toolchain_dir, "Windows Kits/10/Include/10.0.22621.0/um/PowrProf.h"),
+                        # device/base/ includes "dbt.h"
+                        path.join(win_toolchain_dir, "Windows Kits/10/Include/10.0.22621.0/um/dbt.h"),
+                        # third_party/skia/ includes "ObjBase.h"
+                        path.join(win_toolchain_dir, "Windows Kits/10/Include/10.0.22621.0/um/ObjBase.h"),
+                        # third_party/webrtc/rtc_base includes "ws2spi.h"
+                        path.join(win_toolchain_dir, "Windows Kits/10/Include/10.0.22621.0/um/ws2spi.h"),
+                        # third_party/skia/ includes "T2EmbApi.h"
+                        path.join(win_toolchain_dir, "Windows Kits/10/Include/10.0.22621.0/um/T2EmbApi.h"),
+                        # device/vr/windows/ includes "D3D11_1.h"
+                        path.join(win_toolchain_dir, "Windows Kits/10/Include/10.0.22621.0/um/D3D11_1.h"),
+                        # rlz/win/ includes "Sddl.h"
+                        path.join(win_toolchain_dir, "Windows Kits/10/Include/10.0.22621.0/shared/Sddl.h"),
+                        # chrome/common/safe_browsing/ includes "softpub.h"
+                        path.join(win_toolchain_dir, "Windows Kits/10/Include/10.0.22621.0/um/softpub.h"),
+                        # services/device/generic_sensor/ includes "Sensors.h"
+                        path.join(win_toolchain_dir, "Windows Kits/10/Include/10.0.22621.0/um/Sensors.h"),
+                        # third_party/webrtc/modules/desktop_capture/win includes "windows.graphics.capture.interop.h"
+                        path.join(win_toolchain_dir, "Windows Kits/10/Include/10.0.22621.0/um/windows.graphics.capture.interop.h"),
+                        # third_party/skia/ includes "FontSub.h"
+                        path.join(win_toolchain_dir, "Windows Kits/10/Include/10.0.22621.0/um/FontSub.h"),
+                        # chrome/updater/ includes "regstr.h"
+                        path.join(win_toolchain_dir, "Windows Kits/10/Include/10.0.22621.0/um/regstr.h"),
+                        # services/device/compute_pressure includes "pdh.h"
+                        path.join(win_toolchain_dir, "Windows Kits/10/Include/10.0.22621.0/um/pdh.h"),
+                        # chrome/installer/ includes "mshtmhst.h"
+                        path.join(win_toolchain_dir, "Windows Kits/10/Include/10.0.22621.0/um/mshtmhst.h"),
+                        # net/ssl/ includes "NCrypt.h"
+                        path.join(win_toolchain_dir, "Windows Kits/10/Include/10.0.22621.0/um/NCrypt.h"),
+                        # device/fido/win/ includes "Combaseapi.h"
+                        path.join(win_toolchain_dir, "Windows Kits/10/Include/10.0.22621.0/um/Combaseapi.h"),
+                        # components/device_signals/core/system_signals/win includes "wscapi.h"
+                        path.join(win_toolchain_dir, "Windows Kits/10/Include/10.0.22621.0/um/wscapi.h"),
+                        # net/proxy_resolution/win/ includes "dhcpcsdk.h"
+                        path.join(win_toolchain_dir, "Windows Kits/10/Include/10.0.22621.0/um/dhcpcsdk.h"),
+                        # third_party/dawn/third_party/glfw includes "xinput.h"
+                        path.join(win_toolchain_dir, "Windows Kits/10/Include/10.0.22621.0/um/xinput.h"),
+                        # v8/tools/v8windbg includes "pathcch.h"
+                        path.join(win_toolchain_dir, "Windows Kits/10/Include/10.0.22621.0/um/pathcch.h"),
+                        # remoting/host includes "rpcproxy.h"
+                        path.join(win_toolchain_dir, "Windows Kits/10/Include/10.0.22621.0/um/rpcproxy.h"),
+                        # sandbox/win includes "Aclapi.h"
+                        path.join(win_toolchain_dir, "Windows Kits/10/Include/10.0.22621.0/um/Aclapi.h"),
+                        # ui/accessibility/platform includes "uiautomation.h"
+                        path.join(win_toolchain_dir, "Windows Kits/10/Include/10.0.22621.0/um/uiautomation.h"),
+                        # chrome/credential_provider/gaiacp includes "ntsecapi.h"
+                        path.join(win_toolchain_dir, "Windows Kits/10/Include/10.0.22621.0/um/ntsecapi.h"),
+                        # net/dns includes "Winsock2.h"
+                        path.join(win_toolchain_dir, "Windows Kits/10/Include/10.0.22621.0/um/Winsock2.h"),
+                        # media/cdm/win includes "mferror.h"
+                        path.join(win_toolchain_dir, "Windows Kits/10/Include/10.0.22621.0/um/mferror.h"),
+                        # chrome/credentialProvider/gaiacp includes "Winternl.h"
+                        path.join(win_toolchain_dir, "Windows Kits/10/Include/10.0.22621.0/um/Winternl.h"),
+                        # media/audio/win includes "audioclient.h"
+                        path.join(win_toolchain_dir, "Windows Kits/10/Include/10.0.22621.0/um/audioclient.h"),
+                        # media/audio/win includes "MMDeviceAPI.h"
+                        path.join(win_toolchain_dir, "Windows Kits/10/Include/10.0.22621.0/um/MMDeviceAPI.h"),
+                        # net/proxy_resolution/win includes "dhcpv6csdk.h"
+                        path.join(win_toolchain_dir, "Windows Kits/10/Include/10.0.22621.0/um/dhcpv6csdk.h"),
+                        # components/system_media_controls/win includes "systemmediatransportcontrolsinterop.h"
+                        path.join(win_toolchain_dir, "Windows Kits/10/Include/10.0.22621.0/um/systemmediatransportcontrolsinterop.h"),
+                        # ui/native_theme includes "Windows.Media.ClosedCaptioning.h"
+                        path.join(win_toolchain_dir, "Windows Kits/10/Include/10.0.22621.0/cppwinrt/winrt/Windows.Media.ClosedCaptioning.h"),
+                        path.join(win_toolchain_dir, "Windows Kits/10/Include/10.0.22621.0/winrt/Windows.Media.ClosedCaptioning.h"),
+                        # media/audio/win includes "Functiondiscoverykeys_devpkey.h"
+                        path.join(win_toolchain_dir, "Windows Kits/10/Include/10.0.22621.0/um/Functiondiscoverykeys_devpkey.h"),
+                        # device/fido includes "Winuser.h"
+                        path.join(win_toolchain_dir, "Windows Kits/10/Include/10.0.22621.0/um/Winuser.h"),
+                        # chrome/updater/win includes "msxml2.h"
+                        path.join(win_toolchain_dir, "Windows Kits/10/Include/10.0.22621.0/um/msxml2.h"),
+                        # remoting/host includes "ime.h"
+                        path.join(win_toolchain_dir, "Windows Kits/10/Include/10.0.22621.0/um/ime.h"),
+                        # remoting/host/win includes "D3DCommon.h"
+                        path.join(win_toolchain_dir, "Windows Kits/10/Include/10.0.22621.0/um/D3DCommon.h"),
+                        # ui/views/controls/menu includes "Vssym32.h"
+                        path.join(win_toolchain_dir, "Windows Kits/10/Include/10.0.22621.0/um/Vssym32.h"),
+                        # third_party/wtl includes "richedit.h"
+                        path.join(win_toolchain_dir, "Windows Kits/10/Include/10.0.22621.0/um/richedit.h"),
+                        # chrome/updater/net includes "Urlmon.h"
+                        path.join(win_toolchain_dir, "Windows Kits/10/Include/10.0.22621.0/um/Urlmon.h"),
+                        # device/gamepad includes "XInput.h"
+                        path.join(win_toolchain_dir, "Windows Kits/10/Include/10.0.22621.0/um/XInput.h"),
+                        # chrome/credential_provider/gaiacp includes "Shlobj.h"
+                        path.join(win_toolchain_dir, "Windows Kits/10/Include/10.0.22621.0/um/Shlobj.h"),
+                        # content/renderer includes "mlang.h"
+                        path.join(win_toolchain_dir, "Windows Kits/10/Include/10.0.22621.0/um/mlang.h"),
+                        # components/storage_monitor includes "portabledevice.h"
+                        path.join(win_toolchain_dir, "Windows Kits/10/Include/10.0.22621.0/um/portabledevice.h"),
+                        # third_party/wtl includes "richole.h"
+                        path.join(win_toolchain_dir, "Windows Kits/10/Include/10.0.22621.0/um/richole.h"),
+                        # chrome/utility/importer includes "intshcut.h"
+                        path.join(win_toolchain_dir, "Windows Kits/10/Include/10.0.22621.0/um/intshcut.h"),
+                        # chrome/browser/net includes "Ws2spi.h"
+                        path.join(win_toolchain_dir, "Windows Kits/10/Include/10.0.22621.0/um/Ws2spi.h"),
+                        # chrome/browser/enterprise/platform_auth includes "proofofpossessioncookieinfo.h)"
+                        path.join(win_toolchain_dir, "Windows Kits/10/Include/10.0.22621.0/um/proofofpossessioncookieinfo.h"),
+                        # chrome/utility/importer includes "urlhist.h"
+                        path.join(win_toolchain_dir, "Windows Kits/10/Include/10.0.22621.0/um/urlhist.h"),
+                        # chrome/updater/win/installer includes "msiquery.h"
+                        path.join(win_toolchain_dir, "Windows Kits/10/Include/10.0.22621.0/um/msiquery.h"),
+                        # third_party/win_virtual_display/controller includes "Devpropdef.h"
+                        path.join(win_toolchain_dir, "Windows Kits/10/Include/10.0.22621.0/shared/Devpropdef.h"),
+                    ],
+                })
+                remote = True
         step_config["rules"].extend([
             {
                 "name": "clang-cl/cxx",
                 "action": "(.*_)?cxx",
                 "command_prefix": "..\\..\\third_party\\llvm-build\\Release+Asserts\\bin\\clang-cl.exe",
                 "platform_ref": "clang-cl",
-                "remote": True,
+                "remote": remote,
                 "remote_wrapper": reproxy_config["remote_wrapper"],
                 "timeout": "2m",
             },
@@ -215,7 +238,7 @@
                 "action": "(.*_)?cc",
                 "command_prefix": "..\\..\\third_party\\llvm-build\\Release+Asserts\\bin\\clang-cl.exe",
                 "platform_ref": "clang-cl",
-                "remote": True,
+                "remote": remote,
                 "remote_wrapper": reproxy_config["remote_wrapper"],
                 "timeout": "2m",
             },
@@ -228,7 +251,7 @@
                 ],
                 "handler": "clang_compile_coverage",
                 "platform_ref": "clang-cl",
-                "remote": True,
+                "remote": remote,
                 "remote_wrapper": reproxy_config["remote_wrapper"],
                 "timeout": "2m",
             },
@@ -241,7 +264,7 @@
                 ],
                 "handler": "clang_compile_coverage",
                 "platform_ref": "clang-cl",
-                "remote": True,
+                "remote": remote,
                 "remote_wrapper": reproxy_config["remote_wrapper"],
                 "timeout": "2m",
             },
diff --git a/build/config/siso/cros.star b/build/config/siso/cros.star
new file mode 100644
index 0000000..a5faff5
--- /dev/null
+++ b/build/config/siso/cros.star
@@ -0,0 +1,114 @@
+# -*- bazel-starlark -*-
+# 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.
+"""Siso configuration for ChromeOS builds."""
+
+load("@builtin//lib/gn.star", "gn")
+load("@builtin//path.star", "path")
+load("@builtin//struct.star", "module")
+
+def __filegroups(ctx):
+    fg = {}
+    if not "args.gn" in ctx.metadata:
+        print("no args.gn")
+        return fg
+    gn_args = gn.args(ctx)
+    if not "cros_target_cxx" in gn_args:
+        print("no cros_target_cxx")
+        return fg
+    toolchain = gn_args.get("cros_target_cxx")
+    toolchain = toolchain.strip('"')
+    toolchain = ctx.fs.canonpath(toolchain)
+    print("toolchain = %s" % toolchain)
+    if toolchain:
+        toolchain = path.dir(path.dir(toolchain))
+        fg[toolchain + ":headers"] = {
+            "type": "glob",
+            "includes": ["*"],
+        }
+    if not "target_sysroot" in gn_args:
+        print("no target_sysroot")
+        return fg
+    sysroot = gn_args.get("target_sysroot")
+    sysroot = sysroot.strip('"')
+    sysroot = ctx.fs.canonpath(sysroot)
+    print("sysroot = %s" % sysroot)
+    if sysroot:
+        fg[path.join(sysroot, "usr/include") + ":include"] = {
+            "type": "glob",
+            "includes": ["*"],
+            # needs bits/stab.def, c++/*
+        }
+        fg[path.join(sysroot, "usr/lib") + ":headers"] = {
+            "type": "glob",
+            "includes": ["*.h", "crtbegin.o"],
+        }
+        fg[path.join(sysroot, "usr/lib64") + ":headers"] = {
+            "type": "glob",
+            "includes": ["*.h"],
+        }
+    print(fg)
+    return fg
+
+def __cros_compiler(ctx, cmd):
+    tool_inputs = cmd.tool_inputs
+    for i, arg in enumerate(cmd.args):
+        if arg.startswith("-fprofile-sample-use="):
+            # profile data is in ninja input (direct or indirect),
+            # but siso doesn't include ninja inputs for deps=gcc
+            # (it would include lots of unnecessary inputs)
+            # so just add profdata by checking command line flag.
+            profdata = ctx.fs.canonpath(arg.removeprefix("-fprofile-sample-use="))
+            tool_inputs.append(profdata)
+    ctx.actions.fix(tool_inputs = tool_inputs)
+
+__handlers = {
+    "cros_compiler": __cros_compiler,
+}
+
+def __step_config(ctx, step_config):
+    if not "args.gn" in ctx.metadata:
+        return step_config
+    gn_args = gn.args(ctx)
+    if "cros_target_cxx" in gn_args:
+        toolchain = gn_args.get("cros_target_cxx")
+        if toolchain:
+            step_config["rules"].extend([
+                {
+                    "name": "clang-cros/cxx",
+                    "command_prefix": "../../build/cros_cache/chrome-sdk/",
+                    "remote": True,
+                    "handler": "cros_compiler",
+                    "canonicalize_dir": True,
+                    "timeout": "5m",
+                },
+                {
+                    "name": "clang-cros/cc",
+                    "command_prefix": "../../build/cros_cache/chrome-sdk/",
+                    "remote": True,
+                    "handler": "cros_compiler",
+                    "canonicalize_dir": True,
+                    "timeout": "5m",
+                },
+            ])
+    if "target_sysroot" in gn_args:
+        sysroot = gn_args.get("target_sysroot")
+        if sysroot:
+            sysroot = sysroot.strip('"')
+            sysroot = ctx.fs.canonpath(sysroot)
+            step_config["input_deps"].update({
+                sysroot + ":headers": [
+                    path.join(sysroot, "usr/include") + ":include",
+                    path.join(sysroot, "usr/lib") + ":headers",
+                    path.join(sysroot, "usr/lib64") + ":headers",
+                ],
+            })
+    return step_config
+
+cros = module(
+    "cros",
+    filegroups = __filegroups,
+    handlers = __handlers,
+    step_config = __step_config,
+)
diff --git a/build/config/siso/linux.star b/build/config/siso/linux.star
index abf04b7..1c6208f 100644
--- a/build/config/siso/linux.star
+++ b/build/config/siso/linux.star
@@ -7,6 +7,7 @@
 load("@builtin//struct.star", "module")
 load("./android.star", "android")
 load("./clang_linux.star", "clang")
+load("./cros.star", "cros")
 load("./config.star", "config")
 load("./nacl_linux.star", "nacl")
 load("./nasm_linux.star", "nasm")
@@ -19,6 +20,7 @@
     fg = {}
     fg.update(android.filegroups(ctx))
     fg.update(clang.filegroups(ctx))
+    fg.update(cros.filegroups(ctx))
     fg.update(nacl.filegroups(ctx))
     fg.update(nasm.filegroups(ctx))
     fg.update(proto.filegroups(ctx))
@@ -29,6 +31,7 @@
 __handlers = {}
 __handlers.update(android.handlers)
 __handlers.update(clang.handlers)
+__handlers.update(cros.handlers)
 __handlers.update(nacl.handlers)
 __handlers.update(nasm.handlers)
 __handlers.update(proto.handlers)
@@ -86,6 +89,7 @@
         step_config = android.step_config(ctx, step_config)
 
     step_config = clang.step_config(ctx, step_config)
+    step_config = cros.step_config(ctx, step_config)
     step_config = nacl.step_config(ctx, step_config)
     step_config = nasm.step_config(ctx, step_config)
     step_config = proto.step_config(ctx, step_config)
diff --git a/buildtools/reclient_cfgs/configure_reclient_cfgs.py b/buildtools/reclient_cfgs/configure_reclient_cfgs.py
index 38409c1..82bbc1048 100755
--- a/buildtools/reclient_cfgs/configure_reclient_cfgs.py
+++ b/buildtools/reclient_cfgs/configure_reclient_cfgs.py
@@ -54,8 +54,8 @@
       return None
     return subprocess.check_output(
         ['git', 'log', '-1', '--format=%H'],
-        cwd= nacl_dir, shell=os.name == 'nt',
-    ).decode('utf-8').strip()
+        cwd= nacl_dir, shell=os.name == 'nt', text=True,
+    ).strip()
 
 class CipdError(Exception):
   """Raised by configure_reclient_cfgs on fatal cipd error."""
@@ -83,12 +83,16 @@
       raise CipdError(e.output) from e
 
 def IsCipdLoggedIn():
-    ret = subprocess.call(
+    ps = subprocess.run(
        ['cipd', 'auth-info'],
-       shell=True,
-       stderr=subprocess.PIPE,
-       stdout=subprocess.DEVNULL)
-    return ret == 0
+        shell=True, capture_output=True, text=True)
+    logging.info(
+        "log for http://b/304677840: stdout from cipd auth-info: %s",
+        ps.stdout)
+    logging.info(
+        "log for http://b/304677840: stderr from cipd auth-info: %s",
+        ps.stderr)
+    return ps.returncode == 0
 
 def RbeProjectFromInstance(instance):
     m = re.fullmatch(r'projects/([-\w]+)/instances/[-\w]+', instance)
diff --git a/chrome/VERSION b/chrome/VERSION
index 41b7bb6..a34ee30 100644
--- a/chrome/VERSION
+++ b/chrome/VERSION
@@ -1,4 +1,4 @@
 MAJOR=120
 MINOR=0
-BUILD=6060
+BUILD=6061
 PATCH=0
diff --git a/chrome/android/profiles/arm.newest.txt b/chrome/android/profiles/arm.newest.txt
index fa3081bb..e9c643f 100644
--- a/chrome/android/profiles/arm.newest.txt
+++ b/chrome/android/profiles/arm.newest.txt
@@ -1 +1 @@
-chromeos-chrome-arm-120.0.6057.0_rc-r2-merged.afdo.bz2
+chromeos-chrome-arm-120.0.6058.0_rc-r1-merged.afdo.bz2
diff --git a/chrome/android/profiles/newest.txt b/chrome/android/profiles/newest.txt
index 955a2190..a059efa8 100644
--- a/chrome/android/profiles/newest.txt
+++ b/chrome/android/profiles/newest.txt
@@ -1 +1 @@
-chromeos-chrome-amd64-120.0.6057.0_rc-r2-merged.afdo.bz2
+chromeos-chrome-amd64-120.0.6058.0_rc-r1-merged.afdo.bz2
diff --git a/chrome/app/generated_resources.grd b/chrome/app/generated_resources.grd
index 8ef60a1..315aa68 100644
--- a/chrome/app/generated_resources.grd
+++ b/chrome/app/generated_resources.grd
@@ -3287,9 +3287,9 @@
                desc="Subpage summary for cookie theft warning with account info.">
         This file can harm your personal and social network accounts, including <ph name="USER_EMAIL">$1<ex>john@google.com</ex></ph>
       </message>
-      <message name="IDS_DOWNLOAD_BUBBLE_SUBPAGE_SUMMARY_WARNING_MALWARE"
-               desc="Subpage summary text for a download item when the downloaded file may hide malware.">
-        This file may hide malware
+      <message name="IDS_DOWNLOAD_BUBBLE_SUBPAGE_SUMMARY_WARNING_ARCHIVE_MALWARE"
+               desc="Subpage summary text for a download item when the downloaded archive file may hide malware.">
+        This archive file includes other files that may hide malware
       </message>
 
       <!-- Deep scanning in download bubble -->
diff --git a/chrome/app/generated_resources_grd/IDS_DOWNLOAD_BUBBLE_SUBPAGE_SUMMARY_WARNING_ARCHIVE_MALWARE.png.sha1 b/chrome/app/generated_resources_grd/IDS_DOWNLOAD_BUBBLE_SUBPAGE_SUMMARY_WARNING_ARCHIVE_MALWARE.png.sha1
new file mode 100644
index 0000000..57c71aa
--- /dev/null
+++ b/chrome/app/generated_resources_grd/IDS_DOWNLOAD_BUBBLE_SUBPAGE_SUMMARY_WARNING_ARCHIVE_MALWARE.png.sha1
@@ -0,0 +1 @@
+bce360a5edfdf9855442a180790d9af88bf90095
\ No newline at end of file
diff --git a/chrome/app/generated_resources_grd/IDS_DOWNLOAD_BUBBLE_SUBPAGE_SUMMARY_WARNING_MALWARE.png.sha1 b/chrome/app/generated_resources_grd/IDS_DOWNLOAD_BUBBLE_SUBPAGE_SUMMARY_WARNING_MALWARE.png.sha1
deleted file mode 100644
index 258c802..0000000
--- a/chrome/app/generated_resources_grd/IDS_DOWNLOAD_BUBBLE_SUBPAGE_SUMMARY_WARNING_MALWARE.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-aea8d231ebbba8b46286dfaee61b7208a683a678
\ No newline at end of file
diff --git a/chrome/app/gmc_strings.grdp b/chrome/app/gmc_strings.grdp
index 657ec95..81f8ded 100644
--- a/chrome/app/gmc_strings.grdp
+++ b/chrome/app/gmc_strings.grdp
@@ -52,6 +52,12 @@
   <message name="IDS_GLOBAL_MEDIA_CONTROLS_CONTROL_CAST_SESSIONS_PROMO" desc="Text shown on promotional UI appearing next to the global media controls button to promote controlling cast sessions.">
    Control the media you're casting
   </message>
+  <message name="IDS_GMC_LOCAL_MEDIA_CAST_SESSIONS_PROMO" desc="Text shown on promotional UI appearing next to the global media controls button to promote starting cast sessions for local media.">
+   Cast video files on your device to another screen
+  </message>
+  <message name="IDS_GMC_LOCAL_MEDIA_CAST_START_PROMO" desc="Text used by the screenreader when accessing the IPH for starting a cast session for local media">
+   Initiate casting of video files from your device to another screen
+  </message>
   <message name="IDS_MEDIA_TOOLBAR_CONTEXT_REPORT_CAST_ISSUE" desc="Title of the toolbar button's context menu item, which, on click, opens a page to report an issue with Cast.">
    Report an issue with Google Cast
   </message>
diff --git a/chrome/app/gmc_strings_grdp/IDS_GMC_LOCAL_MEDIA_CAST_SESSIONS_PROMO.png.sha1 b/chrome/app/gmc_strings_grdp/IDS_GMC_LOCAL_MEDIA_CAST_SESSIONS_PROMO.png.sha1
new file mode 100644
index 0000000..bbcc00eb5
--- /dev/null
+++ b/chrome/app/gmc_strings_grdp/IDS_GMC_LOCAL_MEDIA_CAST_SESSIONS_PROMO.png.sha1
@@ -0,0 +1 @@
+a9bdb15c7d9c4609c605a34d517b7efd2e251c89
\ No newline at end of file
diff --git a/chrome/app/gmc_strings_grdp/IDS_GMC_LOCAL_MEDIA_CAST_START_PROMO.png.sha1 b/chrome/app/gmc_strings_grdp/IDS_GMC_LOCAL_MEDIA_CAST_START_PROMO.png.sha1
new file mode 100644
index 0000000..bbcc00eb5
--- /dev/null
+++ b/chrome/app/gmc_strings_grdp/IDS_GMC_LOCAL_MEDIA_CAST_START_PROMO.png.sha1
@@ -0,0 +1 @@
+a9bdb15c7d9c4609c605a34d517b7efd2e251c89
\ No newline at end of file
diff --git a/chrome/browser/BUILD.gn b/chrome/browser/BUILD.gn
index f8c84f3..259d5b9 100644
--- a/chrome/browser/BUILD.gn
+++ b/chrome/browser/BUILD.gn
@@ -5248,6 +5248,7 @@
       "//ash/webui/system_extensions_internals_ui/mojom",
       "//build:chromeos_buildflags",
       "//chrome/app/theme:chrome_unscaled_resources_grit",
+      "//chrome/browser/apps/almanac_api_client",
       "//chrome/browser/apps/app_deduplication_service",
       "//chrome/browser/apps/app_discovery_service",
       "//chrome/browser/apps/app_preload_service",
@@ -5417,6 +5418,9 @@
       # TODO(crbug.com/1253318): Refactor window_management into ash/ and expose
       # the InstanceRegistry via an InstanceRegistryWrapper, then remove this.
       "//chrome/browser/ash/system_extensions/api/window_management",
+
+      # Dependent on ProfileKey and ImageFetcherServiceFactory.
+      "//chrome/browser/apps/almanac_api_client",
     ]
 
     if (target_cpu == "x64") {
diff --git a/chrome/browser/about_flags.cc b/chrome/browser/about_flags.cc
index d906384..b8457cd 100644
--- a/chrome/browser/about_flags.cc
+++ b/chrome/browser/about_flags.cc
@@ -340,6 +340,7 @@
 #endif
 
 #if BUILDFLAG(IS_LINUX) || BUILDFLAG(IS_MAC) || BUILDFLAG(IS_WIN)
+#include "chrome/browser/apps/link_capturing/link_capturing_features.h"
 #include "chrome/browser/enterprise/profile_management/profile_management_features.h"
 #endif  // BUILDFLAG(IS_LINUX) || BUILDFLAG(IS_MAC) || BUILDFLAG(IS_WIN)
 
@@ -10977,6 +10978,12 @@
     {"uno-desktop", flag_descriptions::kUnoDesktopName,
      flag_descriptions::kUnoDesktopDescription, kOsLinux | kOsMac | kOsWin,
      FEATURE_VALUE_TYPE(switches::kUnoDesktop)},
+
+    {"enable-user-link-capturing-pwa",
+     flag_descriptions::kDesktopPWAsUserLinkCapturingName,
+     flag_descriptions::kDesktopPWAsUserLinkCapturingDescription,
+     kOsLinux | kOsMac | kOsWin,
+     FEATURE_VALUE_TYPE(apps::features::kDesktopPWAsLinkCapturing)},
 #endif  // BUILDFLAG(IS_LINUX) || BUILDFLAG(IS_MAC) || BUILDFLAG(IS_WIN)
 
     {"forgot-password-form-support",
diff --git a/chrome/browser/apps/almanac_api_client/BUILD.gn b/chrome/browser/apps/almanac_api_client/BUILD.gn
index 5b160a6..fded467f 100644
--- a/chrome/browser/apps/almanac_api_client/BUILD.gn
+++ b/chrome/browser/apps/almanac_api_client/BUILD.gn
@@ -10,6 +10,8 @@
   sources = [
     "almanac_api_util.cc",
     "almanac_api_util.h",
+    "almanac_icon_cache.cc",
+    "almanac_icon_cache.h",
     "device_info_manager.cc",
     "device_info_manager.h",
     "proto_file_manager.cc",
@@ -26,7 +28,12 @@
     "//chrome/common:channel_info",
     "//chromeos/ash/components/system",
     "//chromeos/version",
+    "//components/image_fetcher/core",
     "//components/language/core/browser",
+
+    # TODO(elitsa@google.com): This is needed because of profile_key.
+    # Split the target out of //chrome/browser.
+    "//components/leveldb_proto",
     "//components/prefs",
     "//components/version_info",
     "//google_apis",
@@ -40,6 +47,7 @@
 
   sources = [
     "almanac_api_util_unittest.cc",
+    "almanac_icon_cache_unittest.cc",
     "device_info_manager_unittest.cc",
     "proto_file_manager_unittest.cc",
   ]
@@ -51,6 +59,8 @@
     "//chrome/browser/apps/app_deduplication_service/proto",
     "//chrome/common:channel_info",
     "//chrome/test:test_support",
+    "//components/image_fetcher/core",
+    "//components/image_fetcher/core:test_support",
     "//components/language/core/browser",
     "//components/prefs",
     "//testing/gtest",
diff --git a/chrome/browser/apps/almanac_api_client/almanac_icon_cache.cc b/chrome/browser/apps/almanac_api_client/almanac_icon_cache.cc
new file mode 100644
index 0000000..4c580e2
--- /dev/null
+++ b/chrome/browser/apps/almanac_api_client/almanac_icon_cache.cc
@@ -0,0 +1,94 @@
+// 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/apps/almanac_api_client/almanac_icon_cache.h"
+
+#include "chrome/browser/image_fetcher/image_fetcher_service_factory.h"
+#include "chrome/browser/profiles/profile_key.h"
+#include "components/image_fetcher/core/image_fetcher.h"
+#include "components/image_fetcher/core/image_fetcher_service.h"
+#include "components/image_fetcher/core/request_metadata.h"
+#include "net/traffic_annotation/network_traffic_annotation.h"
+#include "ui/gfx/image/image.h"
+#include "url/gurl.h"
+
+namespace apps {
+namespace {
+// The UMA name for the Almanac Icon Cache client of the Image Fetcher service.
+constexpr char kUmaClientName[] = "AlmanacIcons";
+
+// Description of the network request.
+constexpr net::NetworkTrafficAnnotationTag kTrafficAnnotation =
+    net::DefineNetworkTrafficAnnotation("almanac_icon_cache", R"(
+      semantics {
+        sender: "Almanac Apps Icon Cache"
+        description:
+          "Sends a request to either a website or a Google-owned server to "
+          "retrieve an app icon. The data is used by clients of the service "
+          "for displaying app results."
+        trigger:
+          "A request is sent when an app is to be displayed e.g. installing "
+          "or searching for an app."
+        internal {
+          contacts {
+            email: "cros-apps-foundation-system@google.com"
+          }
+        }
+        user_data: {
+          type: NONE
+        }
+        data: "Icon URL"
+        destination: WEBSITE
+        last_reviewed: "2023-10-09"
+      }
+      policy {
+        cookies_allowed: NO
+        setting: "This feature cannot be disabled by settings."
+        policy_exception_justification:
+          "This feature is required to deliver core user experiences and "
+          "cannot be disabled by policy."
+      }
+    )");
+
+void OnIconDownloaded(base::OnceCallback<void(const gfx::Image&)> callback,
+                      const gfx::Image& icon,
+                      const image_fetcher::RequestMetadata& metadata) {
+  std::move(callback).Run(icon);
+}
+}  // namespace
+
+AlmanacIconCache::AlmanacIconCache(ProfileKey* key) {
+  image_fetcher::ImageFetcherService* image_fetcher_service =
+      ImageFetcherServiceFactory::GetForKey(key);
+  if (!image_fetcher_service) {
+    return;
+  }
+
+  // TODO(b/296157719): Verify kDiskCacheOnly works. Otherwise use
+  // kNetworkOnly.
+  image_fetcher_ = image_fetcher_service->GetImageFetcher(
+      image_fetcher::ImageFetcherConfig::kDiskCacheOnly);
+}
+
+AlmanacIconCache::AlmanacIconCache() = default;
+AlmanacIconCache::~AlmanacIconCache() = default;
+
+image_fetcher::ImageFetcher* AlmanacIconCache::GetImageFetcher() {
+  return image_fetcher_.get();
+}
+
+void AlmanacIconCache::GetIcon(
+    const GURL& icon_url,
+    base::OnceCallback<void(const gfx::Image&)> callback) {
+  if (!GetImageFetcher()) {
+    std::move(callback).Run(gfx::Image());
+    return;
+  }
+  image_fetcher::ImageFetcherParams params(kTrafficAnnotation, kUmaClientName);
+  GetImageFetcher()->FetchImage(
+      icon_url, base::BindOnce(&OnIconDownloaded, std::move(callback)),
+      std::move(params));
+}
+
+}  // namespace apps
diff --git a/chrome/browser/apps/almanac_api_client/almanac_icon_cache.h b/chrome/browser/apps/almanac_api_client/almanac_icon_cache.h
new file mode 100644
index 0000000..ab2dcb25
--- /dev/null
+++ b/chrome/browser/apps/almanac_api_client/almanac_icon_cache.h
@@ -0,0 +1,46 @@
+// 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_APPS_ALMANAC_API_CLIENT_ALMANAC_ICON_CACHE_H_
+#define CHROME_BROWSER_APPS_ALMANAC_API_CLIENT_ALMANAC_ICON_CACHE_H_
+
+#include "base/functional/callback.h"
+
+class GURL;
+class ProfileKey;
+
+namespace image_fetcher {
+class ImageFetcher;
+}  // namespace image_fetcher
+
+namespace gfx {
+class Image;
+}  // namespace gfx
+
+namespace apps {
+
+// Generic icon cache for the different use cases of the Almanac server.
+class AlmanacIconCache {
+ public:
+  explicit AlmanacIconCache(ProfileKey* key);
+  virtual ~AlmanacIconCache();
+
+  // Downloads the icon for the specified GURL.
+  void GetIcon(const GURL& icon_url,
+               base::OnceCallback<void(const gfx::Image&)> callback);
+
+ protected:
+  AlmanacIconCache();
+
+  // Method is overridden for the mock version of the image fetcher to
+  // propagate.
+  virtual image_fetcher::ImageFetcher* GetImageFetcher();
+
+ private:
+  raw_ptr<image_fetcher::ImageFetcher> image_fetcher_ = nullptr;
+};
+
+}  // namespace apps
+
+#endif  // CHROME_BROWSER_APPS_ALMANAC_API_CLIENT_ALMANAC_ICON_CACHE_H_
diff --git a/chrome/browser/apps/almanac_api_client/almanac_icon_cache_unittest.cc b/chrome/browser/apps/almanac_api_client/almanac_icon_cache_unittest.cc
new file mode 100644
index 0000000..b72d0ee
--- /dev/null
+++ b/chrome/browser/apps/almanac_api_client/almanac_icon_cache_unittest.cc
@@ -0,0 +1,98 @@
+// 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/apps/almanac_api_client/almanac_icon_cache.h"
+
+#include <memory>
+
+#include "base/memory/weak_ptr.h"
+#include "base/task/single_thread_task_runner.h"
+#include "base/test/task_environment.h"
+#include "base/test/test_future.h"
+#include "components/image_fetcher/core/mock_image_fetcher.h"
+#include "components/image_fetcher/core/request_metadata.h"
+#include "ui/base/resource/resource_bundle.h"
+#include "ui/gfx/image/image.h"
+#include "ui/gfx/image/image_unittest_util.h"
+#include "ui/resources/grit/ui_resources.h"
+
+namespace apps {
+namespace {
+
+using testing::_;
+
+ACTION_P(PostFetchReply, p0) {
+  base::SingleThreadTaskRunner::GetCurrentDefault()->PostTask(
+      FROM_HERE,
+      base::BindOnce(std::move(*arg2), p0, image_fetcher::RequestMetadata()));
+}
+
+class TestAlmanacIconCache : public AlmanacIconCache {
+ public:
+  TestAlmanacIconCache()
+      : mock_image_fetcher_(
+            std::make_unique<image_fetcher::MockImageFetcher>()) {}
+  ~TestAlmanacIconCache() override = default;
+
+  image_fetcher::MockImageFetcher* mock_image_fetcher() const {
+    return mock_image_fetcher_.get();
+  }
+
+ private:
+  image_fetcher::ImageFetcher* GetImageFetcher() override {
+    return mock_image_fetcher_.get();
+  }
+  gfx::Image image_override_;
+
+  std::unique_ptr<image_fetcher::MockImageFetcher> mock_image_fetcher_;
+};
+
+class AlmanacIconCacheTest : public testing::Test {
+ public:
+  AlmanacIconCacheTest()
+      : almanac_image_fetcher_(std::make_unique<TestAlmanacIconCache>()) {}
+
+  gfx::Image& GetTestImage(int resource_id) {
+    return ui::ResourceBundle::GetSharedInstance().GetNativeImageNamed(
+        resource_id);
+  }
+
+  image_fetcher::MockImageFetcher* mock_image_fetcher() {
+    return almanac_image_fetcher_->mock_image_fetcher();
+  }
+
+  TestAlmanacIconCache* almanac_image_fetcher() {
+    return almanac_image_fetcher_.get();
+  }
+
+ private:
+  base::test::TaskEnvironment task_environment_;
+  std::unique_ptr<TestAlmanacIconCache> almanac_image_fetcher_;
+};
+
+TEST_F(AlmanacIconCacheTest, DownloadIconSuccess) {
+  GURL fake_url = GURL("https://www.example.com/fake_image");
+  gfx::Image expected_image = GetTestImage(IDR_DEFAULT_FAVICON);
+  base::test::TestFuture<const gfx::Image&> received_image;
+
+  EXPECT_CALL(*mock_image_fetcher(), FetchImageAndData_(fake_url, _, _, _))
+      .WillOnce(PostFetchReply(expected_image));
+  almanac_image_fetcher()->GetIcon(fake_url, received_image.GetCallback());
+
+  EXPECT_TRUE(gfx::test::AreImagesEqual(expected_image, received_image.Get()));
+}
+
+TEST_F(AlmanacIconCacheTest, DownloadIconServerFailure) {
+  GURL fake_url = GURL("https://www.example.com/fake_image");
+  gfx::Image expected_image = gfx::Image();
+  base::test::TestFuture<const gfx::Image&> received_image;
+
+  EXPECT_CALL(*mock_image_fetcher(), FetchImageAndData_(fake_url, _, _, _))
+      .WillOnce(PostFetchReply(gfx::Image()));
+  almanac_image_fetcher()->GetIcon(fake_url, received_image.GetCallback());
+
+  EXPECT_TRUE(gfx::test::AreImagesEqual(expected_image, received_image.Get()));
+}
+}  // namespace
+}  // namespace apps
diff --git a/chrome/browser/apps/app_discovery_service/almanac_api/launcher_app.proto b/chrome/browser/apps/app_discovery_service/almanac_api/launcher_app.proto
index c91a698..cc6eb87 100644
--- a/chrome/browser/apps/app_discovery_service/almanac_api/launcher_app.proto
+++ b/chrome/browser/apps/app_discovery_service/almanac_api/launcher_app.proto
@@ -36,33 +36,8 @@
     // A set of icons for the app group in the requested language.
     repeated Icon icons = 3;
 
-    // One or more app instances belonging to the app group.
-    repeated AppInstance app_instances = 4;
-  }
-
-  message AppInstance {
-    // PackageId for the installable app that the information is being requested
-    // for. This is always "platform:primary_key", for example
-    // "android:com.spotify.music" or "web:http://manifest/id"
-    optional string package_id = 1;
-
-    // The name of the app in the requested language.
-    optional string name = 2;
-
-    // A set of icons for this app instance.
-    repeated Icon icons = 3;
-
-    // TODO(b/296157719): verify whether we need the fields and whether to move
-    // them to extras.
-
-    // The deeplink of the app.
-    optional string deeplink = 4;
-
-    // The app identifier for the given platform.
-    optional string app_id_for_platform = 5;
-
-    // Codes of countries where the app is available.
-    repeated string available_country_codes = 6;
+    // An action link for the app. This is typically a deeplink.
+    optional string action_link = 4;
   }
 
   message Icon {
@@ -72,10 +47,7 @@
     // Width of the icon in pixels.
     optional int32 width_in_pixels = 2;
 
-    // Mime type of the icon.
-    optional string mime_type = 3;
-
     // Whether or not we have permission from the platform to mask the icon.
-    optional bool is_masking_allowed = 4;
+    optional bool is_masking_allowed = 3;
   }
 }
diff --git a/chrome/browser/apps/app_discovery_service/almanac_fetcher.cc b/chrome/browser/apps/app_discovery_service/almanac_fetcher.cc
index ea6dcd2..ec7aaae1 100644
--- a/chrome/browser/apps/app_discovery_service/almanac_fetcher.cc
+++ b/chrome/browser/apps/app_discovery_service/almanac_fetcher.cc
@@ -28,26 +28,24 @@
     "app_discovery_service.last_launcher_app_almanac_call_timestamp";
 
 // Maps the Almanac Launcher App proto response to an app result. The icon
-// information is not needed here as this is all handled by the icon cache.
+// url is passed and later handled by the icon cache.
 std::vector<Result> MapToApps(const proto::LauncherAppResponse& proto) {
   std::vector<Result> apps;
   for (proto::LauncherAppResponse::AppGroup app_group : proto.app_groups()) {
-    if (app_group.app_instances().empty()) {
+    // Skip apps we cannot display.
+    if (app_group.icons().empty() || app_group.name().empty() ||
+        app_group.action_link().empty()) {
       continue;
     }
-    // There should be just a single GFN instance. We want to handle more
-    // platforms in the future but for now just read the first one.
-    const proto::LauncherAppResponse::AppInstance& instance =
-        app_group.app_instances(0);
+    // There should be just a single GFN app with a single icon. We want to
+    // handle more in the future but for now just read the first icon.
+    const proto::LauncherAppResponse::Icon& icon = app_group.icons(0);
     auto extras = std::make_unique<GameExtras>(
-        // TODO(b/296157719): construct this from the package id platform
-        // instead of hardcoding.
         u"GeForce NOW",
-        /*relative_icon_path_=*/base::FilePath(""),
-        /*is_icon_masking_allowed_=*/false, GURL(instance.deeplink()));
+        /*relative_icon_path_=*/base::FilePath(""), icon.is_masking_allowed(),
+        GURL(app_group.action_link()));
 
-    // TODO(b/296157719): use the package id instead.
-    apps.emplace_back(AppSource::kGames, instance.app_id_for_platform(),
+    apps.emplace_back(AppSource::kGames, icon.url(),
                       base::UTF8ToUTF16(app_group.name()), std::move(extras));
   }
   return apps;
diff --git a/chrome/browser/apps/app_discovery_service/almanac_fetcher_unittest.cc b/chrome/browser/apps/app_discovery_service/almanac_fetcher_unittest.cc
index f2c9649..50f2016 100644
--- a/chrome/browser/apps/app_discovery_service/almanac_fetcher_unittest.cc
+++ b/chrome/browser/apps/app_discovery_service/almanac_fetcher_unittest.cc
@@ -32,52 +32,60 @@
 constexpr char kOneApp[] =
     R"pb(app_groups: {
            uuid: "cf2890ac-486f-11ee-be56-0242ac120002"
-           name: "group_name"
-           app_instances: {
-             name: "app_name"
-             package_id: "gfn:cf2be56486f11ee"
-             app_id_for_platform: "cf2be56486f11ee"
-             deeplink: "https://game-deeplink.com/cf2be56486f11ee"
-             icons: {
-               url: "http://icon/"
-               width_in_pixels: 20
-               mime_type: "image/png"
-               is_masking_allowed: true
-             }
+           name: "app_name"
+           action_link: "https://game-deeplink.com/cf2be56486f11ee"
+           icons: {
+             url: "http://icon/"
+             width_in_pixels: 20
+             is_masking_allowed: true
            }
          })pb";
-constexpr char kTwoApps[] =
+constexpr char kTwoValidApps[] =
     R"pb(app_groups: {
            uuid: "e42c6c70-7732-437f-b2e7-0d17036b8cc1"
-           name: "group_name1"
-           app_instances: {
-             name: "app_name1"
-             package_id: "gfn:jrioj324j2095245234320o"
-             app_id_for_platform: "jrioj324j2095245234320o"
-             deeplink: "https://game-deeplink.com/jrioj324j2095245234320o"
-             icons: {
-               url: "http://icon/"
-               width_in_pixels: 20
-               mime_type: "image/png"
-               is_masking_allowed: true
-             }
+           name: "app_name1"
+           action_link: "https://game-deeplink.com/jrioj324j2095245234320o"
+           icons: {
+             url: "http://icon1/"
+             width_in_pixels: 20
+             is_masking_allowed: true
            }
          }
          app_groups: {
            uuid: "d8eb7470-9d43-472c-aa49-125f5c3111d4"
-           name: "group_name2"
-           app_instances: {
-             name: "app_name2"
-             package_id: "gfn:reijarowaiore131983u12jkljs893"
-             app_id_for_platform: "reijarowaiore131983u12jkljs893"
-             deeplink: "https://game-deeplink.com/reijarowaiore131983u12jkljs893"
-             icons: {
-               url: "http://icon2/"
-               width_in_pixels: 30
-               mime_type: "image/png"
-               is_masking_allowed: false
-             }
+           name: "app_name2"
+           action_link: "https://game-deeplink.com/reijarowaiore131983u12jkljs893"
+           icons: {
+             url: "http://icon2/"
+             width_in_pixels: 30
+             is_masking_allowed: false
            }
+         }
+         # The invalid games below are filtered out.
+         app_groups: {
+           uuid: "invalid-game1-id"
+           name: ""
+           action_link: "https://invalid-game1-deeplink.com/"
+           icons: {
+             url: "http://icon3/"
+             width_in_pixels: 30
+             is_masking_allowed: false
+           }
+         }
+         app_groups: {
+           uuid: "invalid-game2-id"
+           name: "invalid-game2"
+           action_link: ""
+           icons: {
+             url: "http://icon3/"
+             width_in_pixels: 30
+             is_masking_allowed: false
+           }
+         }
+         app_groups: {
+           uuid: "invalid-game3-id"
+           name: "invalid-game3"
+           action_link: "https://invalid-game3-deeplink.com/"
          })pb";
 
 // The path is equivalent to $root_gen_dir, where the protos are generated.
@@ -118,7 +126,7 @@
 
     proto_loader_ = std::make_unique<base::TestProtoLoader>(
         launcher_app_descriptor_, "apps.proto.LauncherAppResponse");
-    SetServerResponse(url_loader_factory_, proto_loader(), kTwoApps);
+    SetServerResponse(url_loader_factory_, proto_loader(), kTwoValidApps);
   }
 
   TestingProfile* profile() { return profile_.get(); }
@@ -148,18 +156,19 @@
   std::vector<Result> results = waiter.Take();
   ASSERT_EQ(results.size(), 2u);
   EXPECT_EQ(results[0].GetAppSource(), AppSource::kGames);
-  EXPECT_EQ(results[0].GetAppId(), "jrioj324j2095245234320o");
-  EXPECT_EQ(results[0].GetAppTitle(), u"group_name1");
+  EXPECT_EQ(results[0].GetAppId(), "http://icon1/");
+  EXPECT_EQ(results[0].GetAppTitle(), u"app_name1");
   ASSERT_TRUE(results[0].GetSourceExtras());
   auto* game_extras = results[0].GetSourceExtras()->AsGameExtras();
   ASSERT_TRUE(game_extras);
   EXPECT_EQ(game_extras->GetSource(), u"GeForce NOW");
   EXPECT_EQ(game_extras->GetDeeplinkUrl(),
             GURL("https://game-deeplink.com/jrioj324j2095245234320o"));
+  EXPECT_TRUE(game_extras->GetIsIconMaskingAllowed());
 
   EXPECT_EQ(results[1].GetAppSource(), AppSource::kGames);
-  EXPECT_EQ(results[1].GetAppId(), "reijarowaiore131983u12jkljs893");
-  EXPECT_EQ(results[1].GetAppTitle(), u"group_name2");
+  EXPECT_EQ(results[1].GetAppId(), "http://icon2/");
+  EXPECT_EQ(results[1].GetAppTitle(), u"app_name2");
   EXPECT_TRUE(results[1].GetSourceExtras());
   game_extras = results[1].GetSourceExtras()->AsGameExtras();
   ASSERT_TRUE(game_extras);
@@ -167,6 +176,7 @@
   EXPECT_EQ(game_extras->GetDeeplinkUrl(),
             GURL("https://game-deeplink.com/"
                  "reijarowaiore131983u12jkljs893"));
+  EXPECT_FALSE(game_extras->GetIsIconMaskingAllowed());
   EXPECT_GT(almanac_fetcher()->GetLastAppsUpdateTime(), before_download);
 }
 
@@ -189,8 +199,8 @@
       almanac_fetcher()->RegisterForAppUpdates(waiter.GetRepeatingCallback());
   std::vector<Result> results = waiter.Take();
   ASSERT_EQ(results.size(), 2u);
-  EXPECT_EQ(results[0].GetAppTitle(), u"group_name1");
-  EXPECT_EQ(results[1].GetAppTitle(), u"group_name2");
+  EXPECT_EQ(results[0].GetAppTitle(), u"app_name1");
+  EXPECT_EQ(results[1].GetAppTitle(), u"app_name2");
 
   // Confirm a new subscriber also gets notified as the apps are available.
   base::test::TestFuture<const std::vector<Result>&> waiter2;
@@ -206,8 +216,8 @@
       almanac_fetcher()->RegisterForAppUpdates(waiter.GetRepeatingCallback());
   std::vector<Result> results = waiter.Take();
   ASSERT_EQ(results.size(), 2u);
-  EXPECT_EQ(results[0].GetAppTitle(), u"group_name1");
-  EXPECT_EQ(results[1].GetAppTitle(), u"group_name2");
+  EXPECT_EQ(results[0].GetAppTitle(), u"app_name1");
+  EXPECT_EQ(results[1].GetAppTitle(), u"app_name2");
 
   base::Time after_download = almanac_fetcher()->GetLastAppsUpdateTime();
   EXPECT_GT(after_download, before_download);
@@ -228,8 +238,8 @@
       almanac_fetcher()->RegisterForAppUpdates(waiter.GetRepeatingCallback());
   std::vector<Result> results = waiter.Take();
   ASSERT_EQ(results.size(), 2u);
-  EXPECT_EQ(results[0].GetAppTitle(), u"group_name1");
-  EXPECT_EQ(results[1].GetAppTitle(), u"group_name2");
+  EXPECT_EQ(results[0].GetAppTitle(), u"app_name1");
+  EXPECT_EQ(results[1].GetAppTitle(), u"app_name2");
   EXPECT_GT(almanac_fetcher()->GetLastAppsUpdateTime(), before_download);
 
   // Re-set to initiate a new login.
@@ -265,18 +275,19 @@
         EXPECT_EQ(error, DiscoveryError::kSuccess);
         ASSERT_EQ(results.size(), 2u);
         EXPECT_EQ(results[0].GetAppSource(), AppSource::kGames);
-        EXPECT_EQ(results[0].GetAppId(), "jrioj324j2095245234320o");
-        EXPECT_EQ(results[0].GetAppTitle(), u"group_name1");
+        EXPECT_EQ(results[0].GetAppId(), "http://icon1/");
+        EXPECT_EQ(results[0].GetAppTitle(), u"app_name1");
         ASSERT_TRUE(results[0].GetSourceExtras());
         auto* game_extras = results[0].GetSourceExtras()->AsGameExtras();
         ASSERT_TRUE(game_extras);
         EXPECT_EQ(game_extras->GetSource(), u"GeForce NOW");
         EXPECT_EQ(game_extras->GetDeeplinkUrl(),
                   GURL("https://game-deeplink.com/jrioj324j2095245234320o"));
+        EXPECT_TRUE(game_extras->GetIsIconMaskingAllowed());
 
         EXPECT_EQ(results[1].GetAppSource(), AppSource::kGames);
-        EXPECT_EQ(results[1].GetAppId(), "reijarowaiore131983u12jkljs893");
-        EXPECT_EQ(results[1].GetAppTitle(), u"group_name2");
+        EXPECT_EQ(results[1].GetAppId(), "http://icon2/");
+        EXPECT_EQ(results[1].GetAppTitle(), u"app_name2");
         EXPECT_TRUE(results[1].GetSourceExtras());
         game_extras = results[1].GetSourceExtras()->AsGameExtras();
         ASSERT_TRUE(game_extras);
@@ -284,6 +295,7 @@
         EXPECT_EQ(game_extras->GetDeeplinkUrl(),
                   GURL("https://game-deeplink.com/"
                        "reijarowaiore131983u12jkljs893"));
+        EXPECT_FALSE(game_extras->GetIsIconMaskingAllowed());
       }));
 
   // Re-set to initiate a new login.
@@ -301,14 +313,15 @@
         EXPECT_EQ(error, DiscoveryError::kSuccess);
         ASSERT_EQ(results.size(), 1u);
         EXPECT_EQ(results[0].GetAppSource(), AppSource::kGames);
-        EXPECT_EQ(results[0].GetAppId(), "cf2be56486f11ee");
-        EXPECT_EQ(results[0].GetAppTitle(), u"group_name");
+        EXPECT_EQ(results[0].GetAppId(), "http://icon/");
+        EXPECT_EQ(results[0].GetAppTitle(), u"app_name");
         ASSERT_TRUE(results[0].GetSourceExtras());
         auto* game_extras = results[0].GetSourceExtras()->AsGameExtras();
         ASSERT_TRUE(game_extras);
         EXPECT_EQ(game_extras->GetSource(), u"GeForce NOW");
         EXPECT_EQ(game_extras->GetDeeplinkUrl(),
                   GURL("https://game-deeplink.com/cf2be56486f11ee"));
+        EXPECT_TRUE(game_extras->GetIsIconMaskingAllowed());
       }));
 }
 }  // namespace
diff --git a/chrome/browser/apps/app_discovery_service/result.h b/chrome/browser/apps/app_discovery_service/result.h
index 4fc3720..a21f6c2 100644
--- a/chrome/browser/apps/app_discovery_service/result.h
+++ b/chrome/browser/apps/app_discovery_service/result.h
@@ -45,7 +45,10 @@
   // The endpoint from which the app was fetched from.
   AppSource GetAppSource() const;
 
-  // The identifier used by the AppSource to identify the app.
+  // The identifier used by the AppSource to identify an app icon.
+  // Note this is NOT the same as ChromeOS app id.
+  // For the Almanac fetcher this is an icon url. After the migration is
+  // complete, we can further refactor and rename this.
   const std::string& GetAppId() const;
 
   // The title of the app to display to users.
diff --git a/chrome/browser/apps/link_capturing/enable_link_capturing_infobar_delegate.cc b/chrome/browser/apps/link_capturing/enable_link_capturing_infobar_delegate.cc
index 32302d9..3dccf36e 100644
--- a/chrome/browser/apps/link_capturing/enable_link_capturing_infobar_delegate.cc
+++ b/chrome/browser/apps/link_capturing/enable_link_capturing_infobar_delegate.cc
@@ -6,6 +6,7 @@
 
 #include <memory>
 
+#include "base/functional/callback_helpers.h"
 #include "base/metrics/user_metrics.h"
 #include "base/metrics/user_metrics_action.h"
 #include "base/numerics/clamped_math.h"
@@ -70,24 +71,6 @@
   debug_result.Set("supported_links_offer_dismiss_count", new_count);
   return base::Value(std::move(debug_result));
 }
-
-base::Value EnableUserLinkCapturing(webapps::AppId app_id,
-                                    web_app::AppLock& app_lock) {
-  web_app::ScopedRegistryUpdate update = app_lock.sync_bridge().BeginUpdate();
-  web_app::WebApp* app = update->UpdateApp(app_id);
-
-  base::Value::Dict debug_result;
-  debug_result.Set("app_id", app_id);
-  if (!app) {
-    debug_result.Set("error", "AppId does not exist.");
-    debug_result.Set("user_link_capturing_set", false);
-    return base::Value(std::move(debug_result));
-  }
-  app->SetIsUserSelectedAppForSupportedLinks(true);
-
-  debug_result.Set("user_link_capturing_set", true);
-  return base::Value(std::move(debug_result));
-}
 }  // namespace
 
 // Searches the toolbar on this web contents for this infobar, and returns it
@@ -222,10 +205,8 @@
   action_taken_ = true;
   base::RecordAction(
       base::UserMetricsAction("LinkCapturingAcceptedFromInfoBar"));
-  provider_->scheduler().ScheduleCallbackWithLock(
-      "EnableUserLinkCapturing",
-      std::make_unique<web_app::AppLockDescription>(app_id_),
-      base::BindOnce(&EnableUserLinkCapturing, app_id_));
+  provider_->scheduler().SetAppCapturesSupportedLinksDisableOverlapping(
+      app_id_, true, base::DoNothing());
   return true;
 }
 
diff --git a/chrome/browser/ash/accessibility/accessibility_manager.cc b/chrome/browser/ash/accessibility/accessibility_manager.cc
index 90afa9e0..89c0f1c 100644
--- a/chrome/browser/ash/accessibility/accessibility_manager.cc
+++ b/chrome/browser/ash/accessibility/accessibility_manager.cc
@@ -991,6 +991,10 @@
 
 void AccessibilityManager::SetDarkenScreen(bool darken) {
   AccessibilityController::Get()->SetDarkenScreen(darken);
+
+  if (screen_darken_observer_for_test_) {
+    screen_darken_observer_for_test_.Run();
+  }
 }
 
 void AccessibilityManager::SetCaretHighlightEnabled(bool enabled) {
@@ -2206,6 +2210,11 @@
   g_braille_controller_for_test = controller;
 }
 
+void AccessibilityManager::SetScreenDarkenObserverForTest(
+    base::RepeatingCallback<void()> observer) {
+  screen_darken_observer_for_test_ = observer;
+}
+
 void AccessibilityManager::SetFocusRingObserverForTest(
     base::RepeatingCallback<void()> observer) {
   AccessibilityFocusRingController::Get()->SetFocusRingObserverForTesting(
diff --git a/chrome/browser/ash/accessibility/accessibility_manager.h b/chrome/browser/ash/accessibility/accessibility_manager.h
index 717f0f7..a08d584 100644
--- a/chrome/browser/ash/accessibility/accessibility_manager.h
+++ b/chrome/browser/ash/accessibility/accessibility_manager.h
@@ -407,6 +407,7 @@
   void SetProfileForTest(Profile* profile);
   static void SetBrailleControllerForTest(
       extensions::api::braille_display_private::BrailleController* controller);
+  void SetScreenDarkenObserverForTest(base::RepeatingCallback<void()> observer);
   void SetFocusRingObserverForTest(base::RepeatingCallback<void()> observer);
   // Runs when highlights are set or updated, but not when they are removed.
   void SetHighlightsObserverForTest(base::RepeatingCallback<void()> observer);
@@ -650,6 +651,7 @@
   bool dictation_triggered_by_user_ = false;
   bool ignore_dictation_locale_pref_change_ = false;
 
+  base::RepeatingCallback<void()> screen_darken_observer_for_test_;
   base::RepeatingCallback<void()> highlights_observer_for_test_;
   base::RepeatingCallback<void()> select_to_speak_state_observer_for_test_;
   base::RepeatingCallback<void(const gfx::Rect&)>
diff --git a/chrome/browser/ash/accessibility/service/accessibility_service_client_browsertest.cc b/chrome/browser/ash/accessibility/service/accessibility_service_client_browsertest.cc
index 8f3a498..58ee28fc 100644
--- a/chrome/browser/ash/accessibility/service/accessibility_service_client_browsertest.cc
+++ b/chrome/browser/ash/accessibility/service/accessibility_service_client_browsertest.cc
@@ -2,6 +2,7 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
+#include "ash/accessibility/accessibility_controller_impl.h"
 #include "ash/accessibility/ui/accessibility_focus_ring_controller_impl.h"
 #include "ash/accessibility/ui/accessibility_highlight_layer.h"
 #include "ash/public/cpp/accessibility_focus_ring_info.h"
@@ -20,6 +21,7 @@
 #include "chrome/browser/ui/browser.h"
 #include "chrome/common/extensions/extension_constants.h"
 #include "chrome/test/base/in_process_browser_test.h"
+#include "chromeos/dbus/power/fake_power_manager_client.h"
 #include "components/keyed_service/core/keyed_service.h"
 #include "content/public/browser/tts_utterance.h"
 #include "content/public/test/browser_test.h"
@@ -867,6 +869,24 @@
   waiter.Run();
 }
 
+IN_PROC_BROWSER_TEST_F(AccessibilityServiceClientTest, DarkenScreen) {
+  auto client = TurnOnAccessibilityService(AssistiveTechnologyType::kChromeVox);
+  fake_service_->BindAnotherUserInterface();
+
+  base::RunLoop waiter;
+  AccessibilityManager::Get()->SetScreenDarkenObserverForTest(
+      base::BindLambdaForTesting([&waiter] {
+        waiter.Quit();
+
+        EXPECT_TRUE(
+            chromeos::FakePowerManagerClient::Get()->backlights_forced_off());
+      }));
+
+  fake_service_->RequestDarkenScreen(true);
+
+  waiter.Run();
+}
+
 IN_PROC_BROWSER_TEST_F(AccessibilityServiceClientTest, SetFocusRings) {
   auto client =
       TurnOnAccessibilityService(AssistiveTechnologyType::kSwitchAccess);
diff --git a/chrome/browser/ash/accessibility/service/fake_accessibility_service.cc b/chrome/browser/ash/accessibility/service/fake_accessibility_service.cc
index d5e3f647..fcd3aa0 100644
--- a/chrome/browser/ash/accessibility/service/fake_accessibility_service.cc
+++ b/chrome/browser/ash/accessibility/service/fake_accessibility_service.cc
@@ -200,6 +200,12 @@
   }
 }
 
+void FakeAccessibilityService::RequestDarkenScreen(bool darken) {
+  for (auto& ux_client : ux_remotes_) {
+    ux_client->DarkenScreen(darken);
+  }
+}
+
 void FakeAccessibilityService::RequestSetFocusRings(
     std::vector<ax::mojom::FocusRingInfoPtr> focus_rings,
     ax::mojom::AssistiveTechnologyType at_type) {
diff --git a/chrome/browser/ash/accessibility/service/fake_accessibility_service.h b/chrome/browser/ash/accessibility/service/fake_accessibility_service.h
index d01de2d..2cb1af0 100644
--- a/chrome/browser/ash/accessibility/service/fake_accessibility_service.h
+++ b/chrome/browser/ash/accessibility/service/fake_accessibility_service.h
@@ -138,6 +138,8 @@
   // Methods to pretend a UserInterface request came from the service.
   //
 
+  void RequestDarkenScreen(bool darken);
+
   void RequestSetFocusRings(
       std::vector<ax::mojom::FocusRingInfoPtr> focus_rings,
       ax::mojom::AssistiveTechnologyType at_type);
diff --git a/chrome/browser/ash/accessibility/service/user_interface_impl.cc b/chrome/browser/ash/accessibility/service/user_interface_impl.cc
index 26e25292..1ec3ff4 100644
--- a/chrome/browser/ash/accessibility/service/user_interface_impl.cc
+++ b/chrome/browser/ash/accessibility/service/user_interface_impl.cc
@@ -22,6 +22,10 @@
   ui_receivers_.Add(this, std::move(ui_receiver));
 }
 
+void UserInterfaceImpl::DarkenScreen(bool darken) {
+  AccessibilityManager::Get()->SetDarkenScreen(darken);
+}
+
 void UserInterfaceImpl::SetFocusRings(
     std::vector<ax::mojom::FocusRingInfoPtr> focus_rings,
     ax::mojom::AssistiveTechnologyType at_type) {
diff --git a/chrome/browser/ash/accessibility/service/user_interface_impl.h b/chrome/browser/ash/accessibility/service/user_interface_impl.h
index 95d09e9..169ad26 100644
--- a/chrome/browser/ash/accessibility/service/user_interface_impl.h
+++ b/chrome/browser/ash/accessibility/service/user_interface_impl.h
@@ -25,6 +25,7 @@
   void Bind(mojo::PendingReceiver<ax::mojom::UserInterface> ui_receiver);
 
   // ax::mojom::UserInterface:
+  void DarkenScreen(bool enabled) override;
   void SetFocusRings(std::vector<ax::mojom::FocusRingInfoPtr> focus_rings,
                      ax::mojom::AssistiveTechnologyType at_type) override;
   void SetHighlights(const std::vector<gfx::Rect>& rects,
diff --git a/chrome/browser/ash/arc/arc_demo_mode_delegate_impl_unittest.cc b/chrome/browser/ash/arc/arc_demo_mode_delegate_impl_unittest.cc
index 2928b97..fef2165 100644
--- a/chrome/browser/ash/arc/arc_demo_mode_delegate_impl_unittest.cc
+++ b/chrome/browser/ash/arc/arc_demo_mode_delegate_impl_unittest.cc
@@ -20,12 +20,7 @@
 
 class ArcDemoModeDelegateImplTest : public testing::Test {
  public:
-  ArcDemoModeDelegateImplTest()
-      : user_manager_enabler_(std::make_unique<ash::FakeChromeUserManager>()) {
-    stub_install_attributes_ =
-        std::make_unique<ash::ScopedStubInstallAttributes>(
-            ash::StubInstallAttributes::CreateDemoMode());
-  }
+  ArcDemoModeDelegateImplTest() = default;
   ~ArcDemoModeDelegateImplTest() override = default;
   ArcDemoModeDelegateImplTest(const ArcDemoModeDelegateImplTest&) = delete;
   ArcDemoModeDelegateImplTest& operator=(const ArcDemoModeDelegateImplTest&) =
@@ -35,11 +30,14 @@
   ash::DemoModeTestHelper* demo_helper() { return &demo_helper_; }
 
   ArcDemoModeDelegateImpl* delegate() { return &delegate_; }
-  std::unique_ptr<ash::ScopedStubInstallAttributes> stub_install_attributes_;
+  std::unique_ptr<ash::ScopedStubInstallAttributes> stub_install_attributes_{
+      std::make_unique<ash::ScopedStubInstallAttributes>(
+          ash::StubInstallAttributes::CreateDemoMode())};
 
  private:
   content::BrowserTaskEnvironment browser_task_environment_;
-  user_manager::ScopedUserManager user_manager_enabler_;
+  user_manager::TypedScopedUserManager<ash::FakeChromeUserManager>
+      fake_user_manager_{std::make_unique<ash::FakeChromeUserManager>()};
   ash::DemoModeTestHelper demo_helper_;
   ArcDemoModeDelegateImpl delegate_;
 };
diff --git a/chrome/browser/ash/arc/arc_support_host_unittest.cc b/chrome/browser/ash/arc/arc_support_host_unittest.cc
index 17b3feb..ed0e7a3 100644
--- a/chrome/browser/ash/arc/arc_support_host_unittest.cc
+++ b/chrome/browser/ash/arc/arc_support_host_unittest.cc
@@ -66,8 +66,7 @@
 
   void SetUp() override {
     BrowserWithTestWindowTest::SetUp();
-    user_manager_enabler_ = std::make_unique<user_manager::ScopedUserManager>(
-        std::make_unique<ash::FakeChromeUserManager>());
+    fake_user_manager_.Reset(std::make_unique<ash::FakeChromeUserManager>());
     identity_test_env_adaptor_ =
         std::make_unique<IdentityTestEnvironmentProfileAdaptor>(profile());
     // The code under test should not be tied to browser sync consent.
@@ -86,7 +85,7 @@
     fake_arc_support_.reset();
     support_host_.reset();
     identity_test_env_adaptor_.reset();
-    user_manager_enabler_.reset();
+    fake_user_manager_.Reset();
 
     BrowserWithTestWindowTest::TearDown();
   }
@@ -122,9 +121,10 @@
   }
 
  private:
+  user_manager::TypedScopedUserManager<ash::FakeChromeUserManager>
+      fake_user_manager_;
   std::unique_ptr<ArcSupportHost> support_host_;
   std::unique_ptr<FakeArcSupport> fake_arc_support_;
-  std::unique_ptr<user_manager::ScopedUserManager> user_manager_enabler_;
   std::unique_ptr<IdentityTestEnvironmentProfileAdaptor>
       identity_test_env_adaptor_;
 
diff --git a/chrome/browser/ash/arc/arc_util.cc b/chrome/browser/ash/arc/arc_util.cc
index acec38f..4d94a1f 100644
--- a/chrome/browser/ash/arc/arc_util.cc
+++ b/chrome/browser/ash/arc/arc_util.cc
@@ -209,6 +209,16 @@
     return false;
   }
 
+  if (base::FeatureList::IsEnabled(kUnaffiliatedDeviceArcRestriction)) {
+    if (policy_util::IsAccountManaged(profile) && !user->IsAffiliated() &&
+        !(profile->GetPrefs()->GetBoolean(
+            prefs::kUnaffiliatedDeviceArcAllowed))) {
+      VLOG_IF(1, should_report_reason)
+        << "ARC disallowed for unaffiliated users";
+      return false;
+    }
+  }
+
   return true;
 }
 
diff --git a/chrome/browser/ash/arc/arc_util_unittest.cc b/chrome/browser/ash/arc/arc_util_unittest.cc
index 60ddf65..bc0f933 100644
--- a/chrome/browser/ash/arc/arc_util_unittest.cc
+++ b/chrome/browser/ash/arc/arc_util_unittest.cc
@@ -77,6 +77,12 @@
       ash::FakeChromeUserManager* fake_user_manager,
       const AccountId& account_id,
       user_manager::UserType user_type = user_manager::USER_TYPE_REGULAR)
+      : ScopedLogIn(false, fake_user_manager, account_id, user_type) {}
+  ScopedLogIn(
+      bool isAffiliated,
+      ash::FakeChromeUserManager* fake_user_manager,
+      const AccountId& account_id,
+      user_manager::UserType user_type = user_manager::USER_TYPE_REGULAR)
       : fake_user_manager_(fake_user_manager), account_id_(account_id) {
     // Prevent access to DBus. This switch is reset in case set from test SetUp
     // due massive usage of InitFromArgv.
@@ -86,7 +92,10 @@
 
     switch (user_type) {
       case user_manager::USER_TYPE_REGULAR:
-        LogIn();
+        if (!isAffiliated)
+          LogIn();
+        else
+          LogInWithAffiliatedAccount();
         break;
       case user_manager::USER_TYPE_PUBLIC_ACCOUNT:
         LogInAsPublicAccount();
@@ -120,6 +129,11 @@
     fake_user_manager_->LoginUser(account_id_);
   }
 
+  void LogInWithAffiliatedAccount() {
+    fake_user_manager_->AddUserWithAffiliation(account_id_, true);
+    fake_user_manager_->LoginUser(account_id_);
+  }
+
   raw_ptr<ash::FakeChromeUserManager, ExperimentalAsh> fake_user_manager_;
   const AccountId account_id_;
 };
@@ -143,14 +157,13 @@
   void SetUp() override {
     command_line_ = std::make_unique<base::test::ScopedCommandLine>();
 
+    fake_user_manager_.Reset(std::make_unique<ash::FakeChromeUserManager>());
+
     ASSERT_TRUE(data_dir_.CreateUniqueTempDir());
     profile_manager_ = std::make_unique<TestingProfileManager>(
         TestingBrowserProcess::GetGlobal());
     ASSERT_TRUE(profile_manager_->SetUp());
 
-    user_manager_enabler_ = std::make_unique<user_manager::ScopedUserManager>(
-        std::make_unique<ash::FakeChromeUserManager>());
-
     profile_ = profile_manager_->CreateTestingProfile(kTestProfileName);
   }
 
@@ -159,23 +172,22 @@
     ResetArcAllowedCheckForTesting(profile_);
     profile_manager_->DeleteTestingProfile(kTestProfileName);
     profile_ = nullptr;
-    user_manager_enabler_.reset();
     profile_manager_.reset();
+    fake_user_manager_.Reset();
     command_line_.reset();
   }
 
   TestingProfile* profile() { return profile_; }
 
   ash::FakeChromeUserManager* GetFakeUserManager() const {
-    return static_cast<ash::FakeChromeUserManager*>(
-        user_manager::UserManager::Get());
+    return fake_user_manager_.Get();
   }
 
   void LogIn() {
     const auto account_id = AccountId::FromUserEmailGaiaId(
         profile()->GetProfileUserName(), kTestGaiaId);
-    GetFakeUserManager()->AddUser(account_id);
-    GetFakeUserManager()->LoginUser(account_id);
+    fake_user_manager_->AddUser(account_id);
+    fake_user_manager_->LoginUser(account_id);
   }
 
  protected:
@@ -186,8 +198,9 @@
   base::test::ScopedFeatureList feature_list_;
   content::BrowserTaskEnvironment task_environment_;
   base::ScopedTempDir data_dir_;
+  user_manager::TypedScopedUserManager<ash::FakeChromeUserManager>
+      fake_user_manager_;
   std::unique_ptr<TestingProfileManager> profile_manager_;
-  std::unique_ptr<user_manager::ScopedUserManager> user_manager_enabler_;
   // Owned by |profile_manager_|
   raw_ptr<TestingProfile, DanglingUntriaged | ExperimentalAsh> profile_ =
       nullptr;
@@ -848,5 +861,107 @@
   EXPECT_FALSE(IsArcTermsOfServiceOobeNegotiationNeeded());
 }
 
+using ChromeUnaffiliatedDevicesArcRestrictionTest = ChromeArcUtilTest;
+
+TEST_F(ChromeUnaffiliatedDevicesArcRestrictionTest,
+       ArcAllowedForAffiliatedUser_WhenPolicyValueTrue) {
+  base::test::ScopedFeatureList feature_list;
+  feature_list.InitAndEnableFeature(
+      arc::kUnaffiliatedDeviceArcRestriction);
+  base::CommandLine::ForCurrentProcess()->InitFromArgv(
+      {"", "--arc-availability=officially-supported"});
+  ScopedLogIn login(true, GetFakeUserManager(),
+                    AccountId::FromUserEmailGaiaId(
+                        profile()->GetProfileUserName(), kTestGaiaId));
+  SetProfileIsManagedForTesting(profile());
+  profile()->GetPrefs()->SetBoolean(prefs::kUnaffiliatedDeviceArcAllowed,
+                                    true);
+
+  EXPECT_TRUE(IsArcAllowedForProfileOnFirstCall(profile()));
+}
+
+TEST_F(ChromeUnaffiliatedDevicesArcRestrictionTest,
+       ArcAllowedForUnAffiliatedUser_WhenPolicyValueTrue) {
+  base::test::ScopedFeatureList feature_list;
+  feature_list.InitAndEnableFeature(
+      arc::kUnaffiliatedDeviceArcRestriction);
+  base::CommandLine::ForCurrentProcess()->InitFromArgv(
+      {"", "--arc-availability=officially-supported"});
+  ScopedLogIn login(false, GetFakeUserManager(),
+                    AccountId::FromUserEmailGaiaId(
+                        profile()->GetProfileUserName(), kTestGaiaId));
+  SetProfileIsManagedForTesting(profile());
+  profile()->GetPrefs()->SetBoolean(prefs::kUnaffiliatedDeviceArcAllowed,
+                                    true);
+
+  EXPECT_TRUE(IsArcAllowedForProfileOnFirstCall(profile()));
+}
+
+TEST_F(ChromeUnaffiliatedDevicesArcRestrictionTest,
+       ArcAllowedForNonEnterpriseAccount_WhenPolicyValueTrue) {
+  base::test::ScopedFeatureList feature_list;
+  feature_list.InitAndEnableFeature(
+      arc::kUnaffiliatedDeviceArcRestriction);
+  base::CommandLine::ForCurrentProcess()->InitFromArgv(
+      {"", "--arc-availability=officially-supported"});
+  ScopedLogIn login(false, GetFakeUserManager(),
+                    AccountId::FromUserEmailGaiaId(
+                        profile()->GetProfileUserName(), kTestGaiaId));
+  profile()->GetPrefs()->SetBoolean(prefs::kUnaffiliatedDeviceArcAllowed,
+                                    true);
+
+  EXPECT_TRUE(IsArcAllowedForProfileOnFirstCall(profile()));
+}
+
+TEST_F(ChromeUnaffiliatedDevicesArcRestrictionTest,
+       ArcAllowedForAffiliatedUser_WhenPolicyValueFalse) {
+  base::test::ScopedFeatureList feature_list;
+  feature_list.InitAndEnableFeature(
+      arc::kUnaffiliatedDeviceArcRestriction);
+  base::CommandLine::ForCurrentProcess()->InitFromArgv(
+      {"", "--arc-availability=officially-supported"});
+  ScopedLogIn login(true, GetFakeUserManager(),
+                    AccountId::FromUserEmailGaiaId(
+                        profile()->GetProfileUserName(), kTestGaiaId));
+  SetProfileIsManagedForTesting(profile());
+  profile()->GetPrefs()->SetBoolean(prefs::kUnaffiliatedDeviceArcAllowed,
+                                    false);
+
+  EXPECT_TRUE(IsArcAllowedForProfileOnFirstCall(profile()));
+}
+
+TEST_F(ChromeUnaffiliatedDevicesArcRestrictionTest,
+       ArcNotAllowedForUnAffiliatedUser_WhenPolicyValueFalse) {
+  base::test::ScopedFeatureList feature_list;
+  feature_list.InitAndEnableFeature(
+      arc::kUnaffiliatedDeviceArcRestriction);
+  base::CommandLine::ForCurrentProcess()->InitFromArgv(
+      {"", "--arc-availability=officially-supported"});
+  ScopedLogIn login(false, GetFakeUserManager(),
+                    AccountId::FromUserEmailGaiaId(
+                        profile()->GetProfileUserName(), kTestGaiaId));
+  SetProfileIsManagedForTesting(profile());
+  profile()->GetPrefs()->SetBoolean(prefs::kUnaffiliatedDeviceArcAllowed,
+                                    false);
+
+  EXPECT_FALSE(IsArcAllowedForProfileOnFirstCall(profile()));
+}
+
+TEST_F(ChromeUnaffiliatedDevicesArcRestrictionTest,
+       ArcAllowedForNonEnterpriseAccount_WhenPolicyValueFalse) {
+  base::test::ScopedFeatureList feature_list;
+  feature_list.InitAndEnableFeature(
+      arc::kUnaffiliatedDeviceArcRestriction);
+  base::CommandLine::ForCurrentProcess()->InitFromArgv(
+      {"", "--arc-availability=officially-supported"});
+  ScopedLogIn login(false, GetFakeUserManager(),
+                    AccountId::FromUserEmailGaiaId(
+                        profile()->GetProfileUserName(), kTestGaiaId));
+  profile()->GetPrefs()->SetBoolean(prefs::kUnaffiliatedDeviceArcAllowed,
+                                    false);
+
+  EXPECT_TRUE(IsArcAllowedForProfileOnFirstCall(profile()));
+}
+
 }  // namespace util
 }  // namespace arc
diff --git a/chrome/browser/ash/arc/auth/arc_auth_service_browsertest.cc b/chrome/browser/ash/arc/auth/arc_auth_service_browsertest.cc
index b74d21f..8c0c626b 100644
--- a/chrome/browser/ash/arc/auth/arc_auth_service_browsertest.cc
+++ b/chrome/browser/ash/arc/auth/arc_auth_service_browsertest.cc
@@ -296,8 +296,8 @@
   void SetUpOnMainThread() override {
     ASSERT_TRUE(temp_dir_.CreateUniqueTempDir());
 
-    user_manager_enabler_ = std::make_unique<user_manager::ScopedUserManager>(
-        std::make_unique<ash::FakeChromeUserManager>());
+    fake_user_manager_.Reset(std::make_unique<ash::FakeChromeUserManager>());
+
     // Init ArcSessionManager for testing.
     ArcServiceLauncher::Get()->ResetForTesting();
     ArcSessionManager::SetUiEnabledForTesting(false);
@@ -317,10 +317,10 @@
     // a dangling pointer to the User.
     // TODO(nya): Consider removing all users from ProfileHelper in the
     // destructor of ash::FakeChromeUserManager.
-    auto* user = GetFakeUserManager()->GetActiveUser();
+    auto* user = fake_user_manager_->GetActiveUser();
     if (user) {
-      GetFakeUserManager()->RemoveUserFromList(
-          GetFakeUserManager()->GetActiveUser()->GetAccountId());
+      fake_user_manager_->RemoveUserFromList(
+          fake_user_manager_->GetActiveUser()->GetAccountId());
     }
     // Since ArcServiceLauncher is (re-)set up with profile() in
     // SetUpOnMainThread() it is necessary to Shutdown() before the profile()
@@ -334,12 +334,7 @@
     }
     identity_test_environment_adaptor_.reset();
     profile_.reset();
-    user_manager_enabler_.reset();
-  }
-
-  ash::FakeChromeUserManager* GetFakeUserManager() const {
-    return static_cast<ash::FakeChromeUserManager*>(
-        user_manager::UserManager::Get());
+    fake_user_manager_.Reset();
   }
 
   void EnableRemovalOfExtendedAccountInfo() {
@@ -353,16 +348,16 @@
     const user_manager::User* user = nullptr;
     switch (user_type) {
       case user_manager::USER_TYPE_CHILD:
-        user = GetFakeUserManager()->AddChildUser(account_id);
+        user = fake_user_manager_->AddChildUser(account_id);
         break;
       case user_manager::USER_TYPE_REGULAR:
-        user = GetFakeUserManager()->AddUser(account_id);
+        user = fake_user_manager_->AddUser(account_id);
         break;
       case user_manager::USER_TYPE_PUBLIC_ACCOUNT:
-        user = GetFakeUserManager()->AddPublicAccountUser(account_id);
+        user = fake_user_manager_->AddPublicAccountUser(account_id);
         break;
       case user_manager::USER_TYPE_ARC_KIOSK_APP:
-        user = GetFakeUserManager()->AddUserWithAffiliationAndTypeAndProfile(
+        user = fake_user_manager_->AddUserWithAffiliationAndTypeAndProfile(
             account_id, false /*is_affiliated*/,
             user_manager::USER_TYPE_ARC_KIOSK_APP, nullptr /*profile*/);
         break;
@@ -371,7 +366,7 @@
         return;
     }
 
-    GetFakeUserManager()->LoginUser(account_id);
+    fake_user_manager_->LoginUser(account_id);
 
     // Create test profile.
     TestingProfile::Builder profile_builder;
@@ -558,7 +553,8 @@
   }
 
  private:
-  std::unique_ptr<user_manager::ScopedUserManager> user_manager_enabler_;
+  user_manager::TypedScopedUserManager<ash::FakeChromeUserManager>
+      fake_user_manager_;
   base::ScopedTempDir temp_dir_;
   std::unique_ptr<TestingProfile> profile_;
   network::TestURLLoaderFactory test_url_loader_factory_;
diff --git a/chrome/browser/ash/arc/auth/arc_robot_auth_code_fetcher_browsertest.cc b/chrome/browser/ash/arc/auth/arc_robot_auth_code_fetcher_browsertest.cc
index bfee3498..c1b7dcb 100644
--- a/chrome/browser/ash/arc/auth/arc_robot_auth_code_fetcher_browsertest.cc
+++ b/chrome/browser/ash/arc/auth/arc_robot_auth_code_fetcher_browsertest.cc
@@ -87,12 +87,11 @@
   }
 
   void SetUpOnMainThread() override {
-    user_manager_enabler_ = std::make_unique<user_manager::ScopedUserManager>(
-        std::make_unique<ash::FakeChromeUserManager>());
+    fake_user_manager_.Reset(std::make_unique<ash::FakeChromeUserManager>());
 
     const AccountId account_id(AccountId::FromUserEmail(kFakeUserName));
-    GetFakeUserManager()->AddArcKioskAppUser(account_id);
-    GetFakeUserManager()->LoginUser(account_id);
+    fake_user_manager_->AddArcKioskAppUser(account_id);
+    fake_user_manager_->LoginUser(account_id);
 
     if (cloud_policy_client_setup_ == CloudPolicyClientSetup::kSkip)
       return;
@@ -113,12 +112,7 @@
     cloud_policy_client->client_id_ = "client-id";
   }
 
-  void TearDownOnMainThread() override { user_manager_enabler_.reset(); }
-
-  ash::FakeChromeUserManager* GetFakeUserManager() const {
-    return static_cast<ash::FakeChromeUserManager*>(
-        user_manager::UserManager::Get());
-  }
+  void TearDownOnMainThread() override { fake_user_manager_.Reset(); }
 
   void FetchAuthCode(ArcRobotAuthCodeFetcher* fetcher,
                      bool* output_fetch_success,
@@ -150,7 +144,8 @@
   CloudPolicyClientSetup cloud_policy_client_setup_;
 
   network::TestURLLoaderFactory test_url_loader_factory_;
-  std::unique_ptr<user_manager::ScopedUserManager> user_manager_enabler_;
+  user_manager::TypedScopedUserManager<ash::FakeChromeUserManager>
+      fake_user_manager_;
 };
 
 IN_PROC_BROWSER_TEST_F(ArcRobotAuthCodeFetcherBrowserTest,
diff --git a/chrome/browser/ash/arc/boot_phase_monitor/arc_boot_phase_monitor_bridge_unittest.cc b/chrome/browser/ash/arc/boot_phase_monitor/arc_boot_phase_monitor_bridge_unittest.cc
index d81788a..00bab42 100644
--- a/chrome/browser/ash/arc/boot_phase_monitor/arc_boot_phase_monitor_bridge_unittest.cc
+++ b/chrome/browser/ash/arc/boot_phase_monitor/arc_boot_phase_monitor_bridge_unittest.cc
@@ -33,7 +33,7 @@
 class ArcBootPhaseMonitorBridgeTest : public testing::Test {
  public:
   ArcBootPhaseMonitorBridgeTest()
-      : scoped_user_manager_(std::make_unique<ash::FakeChromeUserManager>()) {
+      : fake_user_manager_(std::make_unique<ash::FakeChromeUserManager>()) {
     ash::ConciergeClient::InitializeFake(/*fake_cicerone_client=*/nullptr);
     ash::SessionManagerClient::InitializeFakeInMemory();
 
@@ -48,8 +48,8 @@
 
     const AccountId account_id(AccountId::FromUserEmailGaiaId(
         testing_profile_->GetProfileUserName(), "1234567890"));
-    GetFakeUserManager()->AddUser(account_id);
-    GetFakeUserManager()->LoginUser(account_id);
+    fake_user_manager_->AddUser(account_id);
+    fake_user_manager_->LoginUser(account_id);
   }
 
   ArcBootPhaseMonitorBridgeTest(const ArcBootPhaseMonitorBridgeTest&) = delete;
@@ -139,13 +139,9 @@
     const raw_ptr<ArcBootPhaseMonitorBridgeTest, ExperimentalAsh> test_;
   };
 
-  ash::FakeChromeUserManager* GetFakeUserManager() const {
-    return static_cast<ash::FakeChromeUserManager*>(
-        user_manager::UserManager::Get());
-  }
-
   content::BrowserTaskEnvironment task_environment_;
-  user_manager::ScopedUserManager scoped_user_manager_;
+  user_manager::TypedScopedUserManager<ash::FakeChromeUserManager>
+      fake_user_manager_;
   std::unique_ptr<ArcServiceManager> arc_service_manager_;
   std::unique_ptr<ArcSessionManager> arc_session_manager_;
   std::unique_ptr<TestingProfile> testing_profile_;
diff --git a/chrome/browser/ash/arc/enterprise/arc_enterprise_reporting_service_unittest.cc b/chrome/browser/ash/arc/enterprise/arc_enterprise_reporting_service_unittest.cc
index a58d72b..5d82e11 100644
--- a/chrome/browser/ash/arc/enterprise/arc_enterprise_reporting_service_unittest.cc
+++ b/chrome/browser/ash/arc/enterprise/arc_enterprise_reporting_service_unittest.cc
@@ -41,20 +41,19 @@
   ~ArcEnterpriseReportingServiceTest() override = default;
 
   void SetUp() override {
-    // Set up profile and user manager for ReportCloudDpcOperationTime tests
+    // Set up user manager and profile and for ReportCloudDpcOperationTime tests
+    fake_user_manager_.Reset(std::make_unique<ash::FakeChromeUserManager>());
+
     profile_manager_ = std::make_unique<TestingProfileManager>(
         TestingBrowserProcess::GetGlobal());
     ASSERT_TRUE(profile_manager_->SetUp());
 
-    user_manager_enabler_ = std::make_unique<user_manager::ScopedUserManager>(
-        std::make_unique<ash::FakeChromeUserManager>());
-
     profile_ = profile_manager_->CreateTestingProfile(kTestProfileName);
 
     const auto account_id = AccountId::FromUserEmailGaiaId(
         profile_->GetProfileUserName(), kTestGaiaId);
-    GetFakeUserManager()->AddUser(account_id);
-    GetFakeUserManager()->LoginUser(account_id);
+    fake_user_manager_->AddUser(account_id);
+    fake_user_manager_->LoginUser(account_id);
 
     // Set up ArcSessionManager for ReportManagementState tests
     ash::ConciergeClient::InitializeFake(/*fake_cicerone_client=*/nullptr);
@@ -75,8 +74,8 @@
     arc_session_manager_->Shutdown();
     profile_manager_->DeleteTestingProfile(kTestProfileName);
     profile_ = nullptr;
-    user_manager_enabler_.reset();
     profile_manager_.reset();
+    fake_user_manager_.Reset();
     arc_session_manager_.reset();
     arc_service_manager_.reset();
   }
@@ -85,11 +84,6 @@
     return arc_session_manager_.get();
   }
 
-  ash::FakeChromeUserManager* GetFakeUserManager() const {
-    return static_cast<ash::FakeChromeUserManager*>(
-        user_manager::UserManager::Get());
-  }
-
   TestingProfile* profile() { return profile_; }
 
   ArcEnterpriseReportingService* service() { return service_; }
@@ -98,11 +92,12 @@
   raw_ptr<ArcEnterpriseReportingService, DanglingUntriaged | ExperimentalAsh>
       service_ = nullptr;
   content::BrowserTaskEnvironment task_environment_;
+  user_manager::TypedScopedUserManager<ash::FakeChromeUserManager>
+      fake_user_manager_;
   raw_ptr<TestingProfile, DanglingUntriaged | ExperimentalAsh> profile_;
   std::unique_ptr<ArcServiceManager> arc_service_manager_;
   std::unique_ptr<arc::ArcSessionManager> arc_session_manager_;
   std::unique_ptr<TestingProfileManager> profile_manager_;
-  std::unique_ptr<user_manager::ScopedUserManager> user_manager_enabler_;
 };
 
 TEST_F(ArcEnterpriseReportingServiceTest, ReportCloudDpcOperationTime_Success) {
diff --git a/chrome/browser/ash/arc/instance_throttle/arc_boot_phase_throttle_observer_unittest.cc b/chrome/browser/ash/arc/instance_throttle/arc_boot_phase_throttle_observer_unittest.cc
index 32495ec..a7da207 100644
--- a/chrome/browser/ash/arc/instance_throttle/arc_boot_phase_throttle_observer_unittest.cc
+++ b/chrome/browser/ash/arc/instance_throttle/arc_boot_phase_throttle_observer_unittest.cc
@@ -37,7 +37,7 @@
 class ArcBootPhaseThrottleObserverTest : public testing::Test {
  public:
   ArcBootPhaseThrottleObserverTest()
-      : scoped_user_manager_(std::make_unique<ash::FakeChromeUserManager>()) {
+      : fake_user_manager_(std::make_unique<ash::FakeChromeUserManager>()) {
     ash::ConciergeClient::InitializeFake(/*fake_cicerone_client=*/nullptr);
     arc_session_manager_ =
         CreateTestArcSessionManager(std::make_unique<ArcSessionRunner>(
@@ -49,10 +49,8 @@
         base::CommandLine::ForCurrentProcess());
     const AccountId account_id(AccountId::FromUserEmailGaiaId(
         testing_profile_->GetProfileUserName(), ""));
-    auto* user_manager = static_cast<ash::FakeChromeUserManager*>(
-        user_manager::UserManager::Get());
-    user_manager->AddUser(account_id);
-    user_manager->LoginUser(account_id);
+    fake_user_manager_->AddUser(account_id);
+    fake_user_manager_->LoginUser(account_id);
 
     // By default, ARC is not started for opt-in.
     arc_session_manager()->set_skipped_terms_of_service_negotiation_for_testing(
@@ -123,7 +121,8 @@
  private:
   content::BrowserTaskEnvironment task_environment_{
       base::test::TaskEnvironment::TimeSource::MOCK_TIME};
-  user_manager::ScopedUserManager scoped_user_manager_;
+  user_manager::TypedScopedUserManager<ash::FakeChromeUserManager>
+      fake_user_manager_;
   ArcServiceManager arc_service_manager_;
   std::unique_ptr<ArcSessionManager> arc_session_manager_;
   ArcBootPhaseThrottleObserver observer_;
diff --git a/chrome/browser/ash/arc/instance_throttle/arc_kiosk_mode_throttle_observer_unittest.cc b/chrome/browser/ash/arc/instance_throttle/arc_kiosk_mode_throttle_observer_unittest.cc
index 86b82ae..e3eeb4e 100644
--- a/chrome/browser/ash/arc/instance_throttle/arc_kiosk_mode_throttle_observer_unittest.cc
+++ b/chrome/browser/ash/arc/instance_throttle/arc_kiosk_mode_throttle_observer_unittest.cc
@@ -34,32 +34,28 @@
     // due massive usage of InitFromArgv.
     base::CommandLine::ForCurrentProcess()->AppendSwitch(switches::kTestType);
 
-    user_manager_enabler_ = std::make_unique<user_manager::ScopedUserManager>(
-        std::make_unique<ash::FakeChromeUserManager>());
+    fake_user_manager_.Reset(std::make_unique<ash::FakeChromeUserManager>());
     const AccountId account_id(AccountId::FromUserEmail(kTestProfileName));
-    if (kiosk_user)
-      GetFakeUserManager()->AddArcKioskAppUser(account_id);
-    else
-      GetFakeUserManager()->AddUser(account_id);
-    GetFakeUserManager()->LoginUser(account_id);
+    if (kiosk_user) {
+      fake_user_manager_->AddArcKioskAppUser(account_id);
+    } else {
+      fake_user_manager_->AddUser(account_id);
+    }
+    fake_user_manager_->LoginUser(account_id);
   }
 
   ScopedKioskModeLogIn(const ScopedKioskModeLogIn&) = delete;
   ScopedKioskModeLogIn& operator=(const ScopedKioskModeLogIn&) = delete;
 
   ~ScopedKioskModeLogIn() {
-    GetFakeUserManager()->RemoveUserFromList(
+    fake_user_manager_->RemoveUserFromList(
         AccountId::FromUserEmail(kTestProfileName));
-    user_manager_enabler_.reset();
+    fake_user_manager_.Reset();
   }
 
  private:
-  ash::FakeChromeUserManager* GetFakeUserManager() const {
-    return static_cast<ash::FakeChromeUserManager*>(
-        user_manager::UserManager::Get());
-  }
-
-  std::unique_ptr<user_manager::ScopedUserManager> user_manager_enabler_;
+  user_manager::TypedScopedUserManager<ash::FakeChromeUserManager>
+      fake_user_manager_;
 };
 }  // namespace
 
diff --git a/chrome/browser/ash/arc/instance_throttle/arc_provisioning_throttle_observer_unittest.cc b/chrome/browser/ash/arc/instance_throttle/arc_provisioning_throttle_observer_unittest.cc
index b786386..41c3cad 100644
--- a/chrome/browser/ash/arc/instance_throttle/arc_provisioning_throttle_observer_unittest.cc
+++ b/chrome/browser/ash/arc/instance_throttle/arc_provisioning_throttle_observer_unittest.cc
@@ -28,7 +28,7 @@
 class ArcProvisioningThrottleObserverTest : public testing::Test {
  public:
   ArcProvisioningThrottleObserverTest()
-      : scoped_user_manager_(std::make_unique<ash::FakeChromeUserManager>()) {
+      : fake_user_manager_(std::make_unique<ash::FakeChromeUserManager>()) {
     ash::ConciergeClient::InitializeFake(/*fake_cicerone_client=*/nullptr);
     SetArcAvailableCommandLineForTesting(
         base::CommandLine::ForCurrentProcess());
@@ -101,7 +101,8 @@
 
  private:
   content::BrowserTaskEnvironment task_environment_;
-  user_manager::ScopedUserManager scoped_user_manager_;
+  user_manager::TypedScopedUserManager<ash::FakeChromeUserManager>
+      fake_user_manager_;
   ArcServiceManager service_manager_;
   std::unique_ptr<ArcSessionManager> session_manager_;
   ArcProvisioningThrottleObserver observer_;
diff --git a/chrome/browser/ash/arc/intent_helper/arc_settings_service_unittest.cc b/chrome/browser/ash/arc/intent_helper/arc_settings_service_unittest.cc
index e2c2edb..f8eda90 100644
--- a/chrome/browser/ash/arc/intent_helper/arc_settings_service_unittest.cc
+++ b/chrome/browser/ash/arc/intent_helper/arc_settings_service_unittest.cc
@@ -64,7 +64,7 @@
 class ArcSettingsServiceTest : public BrowserWithTestWindowTest {
  public:
   ArcSettingsServiceTest()
-      : user_manager_enabler_(std::make_unique<ash::FakeChromeUserManager>()) {}
+      : fake_user_manager_(std::make_unique<ash::FakeChromeUserManager>()) {}
   ArcSettingsServiceTest(const ArcSettingsServiceTest&) = delete;
   ArcSettingsServiceTest& operator=(const ArcSettingsServiceTest&) = delete;
   ~ArcSettingsServiceTest() override = default;
@@ -103,8 +103,8 @@
 
     const AccountId account_id(AccountId::FromUserEmailGaiaId(
         profile()->GetProfileUserName(), "1234567890"));
-    user_manager()->AddUser(account_id);
-    user_manager()->LoginUser(account_id);
+    fake_user_manager_->AddUser(account_id);
+    fake_user_manager_->LoginUser(account_id);
 
     arc_session_manager()->SetProfile(profile());
     arc_session_manager()->Initialize();
@@ -159,10 +159,6 @@
     WaitForInstanceReady(arc_bridge_service()->app());
   }
 
-  ash::FakeChromeUserManager* user_manager() {
-    return static_cast<ash::FakeChromeUserManager*>(
-        user_manager::UserManager::Get());
-  }
   ArcBridgeService* arc_bridge_service() {
     return arc_service_manager_->arc_bridge_service();
   }
@@ -181,7 +177,8 @@
   std::unique_ptr<ash::network_config::CrosNetworkConfigTestHelper>
       network_config_helper_;
   TestingPrefServiceSimple local_state_;
-  user_manager::ScopedUserManager user_manager_enabler_;
+  user_manager::TypedScopedUserManager<ash::FakeChromeUserManager>
+      fake_user_manager_;
   std::unique_ptr<FakeIntentHelperHost> intent_helper_host_;
   std::unique_ptr<ArcSessionManager> arc_session_manager_;
   std::unique_ptr<ArcServiceManager> arc_service_manager_;
diff --git a/chrome/browser/ash/arc/notification/arc_provision_notification_service_unittest.cc b/chrome/browser/ash/arc/notification/arc_provision_notification_service_unittest.cc
index d9fa36e..b65e7788 100644
--- a/chrome/browser/ash/arc/notification/arc_provision_notification_service_unittest.cc
+++ b/chrome/browser/ash/arc/notification/arc_provision_notification_service_unittest.cc
@@ -44,7 +44,7 @@
 class ArcProvisionNotificationServiceTest : public BrowserWithTestWindowTest {
  protected:
   ArcProvisionNotificationServiceTest()
-      : user_manager_enabler_(std::make_unique<ash::FakeChromeUserManager>()) {}
+      : fake_user_manager_(std::make_unique<ash::FakeChromeUserManager>()) {}
 
   ArcProvisionNotificationServiceTest(
       const ArcProvisionNotificationServiceTest&) = delete;
@@ -87,8 +87,8 @@
 
     const AccountId account_id(AccountId::FromUserEmailGaiaId(
         profile()->GetProfileUserName(), "1234567890"));
-    GetFakeUserManager()->AddUser(account_id);
-    GetFakeUserManager()->LoginUser(account_id);
+    fake_user_manager_->AddUser(account_id);
+    fake_user_manager_->LoginUser(account_id);
   }
 
   void TearDown() override {
@@ -106,18 +106,14 @@
     ash::ConciergeClient::Shutdown();
   }
 
-  ash::FakeChromeUserManager* GetFakeUserManager() {
-    return static_cast<ash::FakeChromeUserManager*>(
-        user_manager::UserManager::Get());
-  }
-
   std::unique_ptr<ArcServiceManager> arc_service_manager_;
   std::unique_ptr<ArcSessionManager> arc_session_manager_;
   std::unique_ptr<NotificationDisplayServiceTester> display_service_;
   raw_ptr<session_manager::SessionManager, ExperimentalAsh> session_manager_;
 
  private:
-  user_manager::ScopedUserManager user_manager_enabler_;
+  user_manager::TypedScopedUserManager<ash::FakeChromeUserManager>
+      fake_user_manager_;
   TestingPrefServiceSimple local_state_;
 };
 
diff --git a/chrome/browser/ash/arc/notification/arc_vm_data_migration_notifier_unittest.cc b/chrome/browser/ash/arc/notification/arc_vm_data_migration_notifier_unittest.cc
index 3e201b66..7f7c1d2a 100644
--- a/chrome/browser/ash/arc/notification/arc_vm_data_migration_notifier_unittest.cc
+++ b/chrome/browser/ash/arc/notification/arc_vm_data_migration_notifier_unittest.cc
@@ -61,17 +61,15 @@
         CreateTestArcSessionManager(std::make_unique<ArcSessionRunner>(
             base::BindRepeating(FakeArcSession::Create)));
 
+    fake_user_manager_.Reset(std::make_unique<ash::FakeChromeUserManager>());
     profile_manager_ = std::make_unique<TestingProfileManager>(
         TestingBrowserProcess::GetGlobal());
     ASSERT_TRUE(profile_manager_->SetUp());
     testing_profile_ = profile_manager_->CreateTestingProfile(kProfileName);
     const AccountId account_id = AccountId::FromUserEmailGaiaId(
         testing_profile_->GetProfileUserName(), kGaiaId);
-    auto fake_user_manager = std::make_unique<ash::FakeChromeUserManager>();
-    fake_user_manager->AddUser(account_id);
-    fake_user_manager->LoginUser(account_id);
-    user_manager_ = std::make_unique<user_manager::ScopedUserManager>(
-        std::move(fake_user_manager));
+    fake_user_manager_->AddUser(account_id);
+    fake_user_manager_->LoginUser(account_id);
     DCHECK(ash::ProfileHelper::IsPrimaryProfile(testing_profile_));
 
     notification_tester_ =
@@ -86,10 +84,10 @@
   void TearDown() override {
     arc_session_manager_->Shutdown();
     notification_tester_.reset();
-    user_manager_.reset();
     profile_manager_->DeleteTestingProfile(kProfileName);
     testing_profile_ = nullptr;
     profile_manager_.reset();
+    fake_user_manager_.Reset();
     arc_vm_data_migration_notifier_.reset();
     arc_session_manager_.reset();
     ash::ConciergeClient::Shutdown();
@@ -109,10 +107,11 @@
  private:
   std::unique_ptr<ArcSessionManager> arc_session_manager_;
   std::unique_ptr<ArcVmDataMigrationNotifier> arc_vm_data_migration_notifier_;
+  user_manager::TypedScopedUserManager<ash::FakeChromeUserManager>
+      fake_user_manager_;
   std::unique_ptr<TestingProfileManager> profile_manager_;
   raw_ptr<TestingProfile, DanglingUntriaged | ExperimentalAsh>
       testing_profile_ = nullptr;  // Owned by |profile_manager_|.
-  std::unique_ptr<user_manager::ScopedUserManager> user_manager_;
   std::unique_ptr<NotificationDisplayServiceTester> notification_tester_;
 };
 
diff --git a/chrome/browser/ash/arc/optin/arc_terms_of_service_default_negotiator_unittest.cc b/chrome/browser/ash/arc/optin/arc_terms_of_service_default_negotiator_unittest.cc
index 63087d9..ceeff79 100644
--- a/chrome/browser/ash/arc/optin/arc_terms_of_service_default_negotiator_unittest.cc
+++ b/chrome/browser/ash/arc/optin/arc_terms_of_service_default_negotiator_unittest.cc
@@ -135,8 +135,6 @@
     base::SetRecordActionTaskRunner(
         task_environment()->GetMainThreadTaskRunner());
 
-    user_manager_enabler_ = std::make_unique<user_manager::ScopedUserManager>(
-        std::make_unique<ash::FakeChromeUserManager>());
     signin::MakePrimaryAccountAvailable(
         IdentityManagerFactory::GetForProfile(profile()), "testing@account.com",
         signin::ConsentLevel::kSync);
@@ -155,7 +153,7 @@
     negotiator_.reset();
     fake_arc_support_.reset();
     support_host_.reset();
-    user_manager_enabler_.reset();
+    fake_user_manager_.Reset();
     owner_key_util_->Clear();
 
     test_metrics_service_.reset();
@@ -183,8 +181,7 @@
   }
 
   ash::FakeChromeUserManager* user_manager() {
-    return static_cast<ash::FakeChromeUserManager*>(
-        user_manager::UserManager::Get());
+    return fake_user_manager_.Get();
   }
 
   consent_auditor::FakeConsentAuditor* consent_auditor() {
@@ -222,7 +219,8 @@
       test_enabled_state_provider_;
   std::unique_ptr<metrics::MetricsService> test_metrics_service_;
 
-  std::unique_ptr<user_manager::ScopedUserManager> user_manager_enabler_;
+  user_manager::TypedScopedUserManager<ash::FakeChromeUserManager>
+      fake_user_manager_{std::make_unique<ash::FakeChromeUserManager>()};
   std::unique_ptr<ArcSupportHost> support_host_;
   std::unique_ptr<FakeArcSupport> fake_arc_support_;
   std::unique_ptr<ArcTermsOfServiceDefaultNegotiator> negotiator_;
diff --git a/chrome/browser/ash/arc/policy/arc_policy_bridge_unittest.cc b/chrome/browser/ash/arc/policy/arc_policy_bridge_unittest.cc
index 85b7d2a..05388032 100644
--- a/chrome/browser/ash/arc/policy/arc_policy_bridge_unittest.cc
+++ b/chrome/browser/ash/arc/policy/arc_policy_bridge_unittest.cc
@@ -219,13 +219,11 @@
         .Times(1);
 
     // Set up user profile for ReportCompliance() tests.
-    auto* const fake_user_manager = new ash::FakeChromeUserManager();
-    user_manager_enabler_ = std::make_unique<user_manager::ScopedUserManager>(
-        base::WrapUnique(fake_user_manager));
+    fake_user_manager_.Reset(std::make_unique<ash::FakeChromeUserManager>());
     const AccountId account_id(
         AccountId::FromUserEmailGaiaId(kTestUserEmail, "1111111111"));
-    fake_user_manager->AddUserWithAffiliation(account_id, is_affiliated);
-    fake_user_manager->LoginUser(account_id);
+    fake_user_manager_->AddUserWithAffiliation(account_id, is_affiliated);
+    fake_user_manager_->LoginUser(account_id);
     testing_profile_manager_ = std::make_unique<TestingProfileManager>(
         TestingBrowserProcess::GetGlobal());
     ASSERT_TRUE(testing_profile_manager_->SetUp());
@@ -348,7 +346,8 @@
  private:
   content::BrowserTaskEnvironment task_environment_;
   data_decoder::test::InProcessDataDecoder in_process_data_decoder_;
-  std::unique_ptr<user_manager::ScopedUserManager> user_manager_enabler_;
+  user_manager::TypedScopedUserManager<ash::FakeChromeUserManager>
+      fake_user_manager_;
   std::unique_ptr<TestingProfileManager> testing_profile_manager_;
   base::RunLoop run_loop_;
   raw_ptr<TestingProfile, DanglingUntriaged | ExperimentalAsh> profile_;
diff --git a/chrome/browser/ash/arc/policy/managed_configuration_variables_unittest.cc b/chrome/browser/ash/arc/policy/managed_configuration_variables_unittest.cc
index 014b2d1..0c183a4 100644
--- a/chrome/browser/ash/arc/policy/managed_configuration_variables_unittest.cc
+++ b/chrome/browser/ash/arc/policy/managed_configuration_variables_unittest.cc
@@ -203,12 +203,10 @@
     ash::system::StatisticsProvider::SetTestProvider(&statistics_provider_);
 
     // Set up a fake user and capture its profile.
-    auto* const user_manager = new ash::FakeChromeUserManager();
-    scoped_user_manager_ = std::make_unique<user_manager::ScopedUserManager>(
-        base::WrapUnique(user_manager));
+    fake_user_manager_.Reset(std::make_unique<ash::FakeChromeUserManager>());
     const AccountId account_id(
         AccountId::FromUserEmailGaiaId(kTestEmail, kTestGaiaId));
-    user_manager->AddUserWithAffiliation(account_id, is_affiliated);
+    fake_user_manager_->AddUserWithAffiliation(account_id, is_affiliated);
     profile_manager_ = std::make_unique<TestingProfileManager>(
         TestingBrowserProcess::GetGlobal());
     ASSERT_TRUE(profile_manager_->SetUp());
@@ -233,7 +231,7 @@
   void DoTearDown() {
     fake_device_attributes_.reset();
     profile_manager_.reset();
-    scoped_user_manager_.reset();
+    fake_user_manager_.Reset();
   }
 
   const Profile* profile() { return profile_; }
@@ -245,7 +243,8 @@
  private:
   content::BrowserTaskEnvironment task_environment_;
 
-  std::unique_ptr<user_manager::ScopedUserManager> scoped_user_manager_;
+  user_manager::TypedScopedUserManager<ash::FakeChromeUserManager>
+      fake_user_manager_;
 
   std::unique_ptr<TestingProfileManager> profile_manager_;
 
diff --git a/chrome/browser/ash/arc/session/arc_activation_necessity_checker_unittest.cc b/chrome/browser/ash/arc/session/arc_activation_necessity_checker_unittest.cc
index 0872a42..2a0907a 100644
--- a/chrome/browser/ash/arc/session/arc_activation_necessity_checker_unittest.cc
+++ b/chrome/browser/ash/arc/session/arc_activation_necessity_checker_unittest.cc
@@ -55,7 +55,7 @@
 class ArcActivationNecessityCheckerTest : public testing::Test {
  public:
   ArcActivationNecessityCheckerTest()
-      : scoped_user_manager_(std::make_unique<ash::FakeChromeUserManager>()) {}
+      : fake_user_manager_(std::make_unique<ash::FakeChromeUserManager>()) {}
   ~ArcActivationNecessityCheckerTest() override = default;
 
   void SetUp() override {
@@ -113,7 +113,8 @@
 
  protected:
   content::BrowserTaskEnvironment task_environment_;
-  user_manager::ScopedUserManager scoped_user_manager_;
+  user_manager::TypedScopedUserManager<ash::FakeChromeUserManager>
+      fake_user_manager_;
   base::test::ScopedFeatureList feature_list_;
   std::unique_ptr<TestingProfile> profile_;
   std::unique_ptr<ArcServiceManager> arc_service_manager_;
diff --git a/chrome/browser/ash/arc/session/arc_play_store_enabled_preference_handler_unittest.cc b/chrome/browser/ash/arc/session/arc_play_store_enabled_preference_handler_unittest.cc
index 666da50..4db572b0 100644
--- a/chrome/browser/ash/arc/session/arc_play_store_enabled_preference_handler_unittest.cc
+++ b/chrome/browser/ash/arc/session/arc_play_store_enabled_preference_handler_unittest.cc
@@ -55,7 +55,7 @@
 class ArcPlayStoreEnabledPreferenceHandlerTest : public testing::Test {
  public:
   ArcPlayStoreEnabledPreferenceHandlerTest()
-      : user_manager_enabler_(std::make_unique<ash::FakeChromeUserManager>()) {}
+      : fake_user_manager_(std::make_unique<ash::FakeChromeUserManager>()) {}
 
   ArcPlayStoreEnabledPreferenceHandlerTest(
       const ArcPlayStoreEnabledPreferenceHandlerTest&) = delete;
@@ -91,8 +91,8 @@
             profile_.get(), arc_session_manager_.get());
     const AccountId account_id(AccountId::FromUserEmailGaiaId(
         profile()->GetProfileUserName(), kTestGaiaId));
-    GetFakeUserManager()->AddUser(account_id);
-    GetFakeUserManager()->LoginUser(account_id);
+    fake_user_manager_->AddUser(account_id);
+    fake_user_manager_->LoginUser(account_id);
 
     identity_test_env_profile_adaptor_->identity_test_env()
         ->MakePrimaryAccountAvailable(kTestEmail,
@@ -120,10 +120,6 @@
   ArcPlayStoreEnabledPreferenceHandler* preference_handler() const {
     return preference_handler_.get();
   }
-  ash::FakeChromeUserManager* GetFakeUserManager() const {
-    return static_cast<ash::FakeChromeUserManager*>(
-        user_manager::UserManager::Get());
-  }
 
   consent_auditor::FakeConsentAuditor* consent_auditor() const {
     return static_cast<consent_auditor::FakeConsentAuditor*>(
@@ -146,7 +142,8 @@
 
  private:
   content::BrowserTaskEnvironment task_environment_;
-  user_manager::ScopedUserManager user_manager_enabler_;
+  user_manager::TypedScopedUserManager<ash::FakeChromeUserManager>
+      fake_user_manager_;
   base::ScopedTempDir temp_dir_;
   std::unique_ptr<IdentityTestEnvironmentProfileAdaptor>
       identity_test_env_profile_adaptor_;
diff --git a/chrome/browser/ash/arc/session/arc_session_manager_browsertest.cc b/chrome/browser/ash/arc/session/arc_session_manager_browsertest.cc
index 0bddef36..2311ed2 100644
--- a/chrome/browser/ash/arc/session/arc_session_manager_browsertest.cc
+++ b/chrome/browser/ash/arc/session/arc_session_manager_browsertest.cc
@@ -126,8 +126,7 @@
 
   void SetUpOnMainThread() override {
     MixinBasedInProcessBrowserTest::SetUpOnMainThread();
-    user_manager_enabler_ = std::make_unique<user_manager::ScopedUserManager>(
-        std::make_unique<ash::FakeChromeUserManager>());
+    fake_user_manager_.Reset(std::make_unique<ash::FakeChromeUserManager>());
     // Init ArcSessionManager for testing.
     ArcServiceLauncher::Get()->ResetForTesting();
     ArcSessionManager::SetUiEnabledForTesting(false);
@@ -143,8 +142,8 @@
 
     const AccountId account_id(
         AccountId::FromUserEmailGaiaId(kFakeUserName, kFakeGaiaId));
-    GetFakeUserManager()->AddUser(account_id);
-    GetFakeUserManager()->LoginUser(account_id);
+    fake_user_manager_->AddUser(account_id);
+    fake_user_manager_->LoginUser(account_id);
 
     // Create test profile.
     TestingProfile::Builder profile_builder;
@@ -156,7 +155,7 @@
     identity_test_environment_adaptor_ =
         std::make_unique<IdentityTestEnvironmentProfileAdaptor>(profile_.get());
     ash::ProfileHelper::Get()->SetUserToProfileMappingForTesting(
-        GetFakeUserManager()->GetPrimaryUser(), profile_.get());
+        fake_user_manager_->GetPrimaryUser(), profile_.get());
 
     // Seed account info properly.
     identity_test_env()->MakePrimaryAccountAvailable(
@@ -189,7 +188,7 @@
     // destructor of ash::FakeChromeUserManager.
     const AccountId account_id(
         AccountId::FromUserEmailGaiaId(kFakeUserName, kFakeGaiaId));
-    GetFakeUserManager()->RemoveUserFromList(account_id);
+    fake_user_manager_->RemoveUserFromList(account_id);
     // Since ArcServiceLauncher is (re-)set up with profile() in
     // SetUpOnMainThread() it is necessary to Shutdown() before the profile()
     // is destroyed. ArcServiceLauncher::Shutdown() will be called again on
@@ -200,16 +199,11 @@
     identity_test_environment_adaptor_.reset();
     profile_.reset();
     base::RunLoop().RunUntilIdle();
-    user_manager_enabler_.reset();
     ash::ProfileHelper::SetAlwaysReturnPrimaryUserForTesting(false);
+    fake_user_manager_.Reset();
     MixinBasedInProcessBrowserTest::TearDownOnMainThread();
   }
 
-  ash::FakeChromeUserManager* GetFakeUserManager() const {
-    return static_cast<ash::FakeChromeUserManager*>(
-        user_manager::UserManager::Get());
-  }
-
   void EnableArc() {
     PrefService* const prefs = profile()->GetPrefs();
     prefs->SetBoolean(prefs::kArcEnabled, true);
@@ -232,7 +226,8 @@
 
  private:
   ash::EmbeddedPolicyTestServerMixin policy_test_server_mixin_{&mixin_host_};
-  std::unique_ptr<user_manager::ScopedUserManager> user_manager_enabler_;
+  user_manager::TypedScopedUserManager<ash::FakeChromeUserManager>
+      fake_user_manager_;
   std::unique_ptr<IdentityTestEnvironmentProfileAdaptor>
       identity_test_environment_adaptor_;
   base::ScopedTempDir temp_dir_;
diff --git a/chrome/browser/ash/arc/session/arc_session_manager_unittest.cc b/chrome/browser/ash/arc/session/arc_session_manager_unittest.cc
index 5b6c21a..713e98c 100644
--- a/chrome/browser/ash/arc/session/arc_session_manager_unittest.cc
+++ b/chrome/browser/ash/arc/session/arc_session_manager_unittest.cc
@@ -167,7 +167,7 @@
 class ArcSessionManagerInLoginScreenTest : public testing::Test {
  public:
   ArcSessionManagerInLoginScreenTest()
-      : user_manager_enabler_(std::make_unique<ash::FakeChromeUserManager>()) {
+      : fake_user_manager_(std::make_unique<ash::FakeChromeUserManager>()) {
     ash::ConciergeClient::InitializeFake(/*fake_cicerone_client=*/nullptr);
     ash::SessionManagerClient::InitializeFakeInMemory();
 
@@ -208,7 +208,8 @@
   content::BrowserTaskEnvironment task_environment_;
   std::unique_ptr<ArcServiceManager> arc_service_manager_;
   std::unique_ptr<ArcSessionManager> arc_session_manager_;
-  user_manager::ScopedUserManager user_manager_enabler_;
+  user_manager::TypedScopedUserManager<ash::FakeChromeUserManager>
+      fake_user_manager_;
 };
 
 // We expect mini instance starts to run if EmitLoginPromptVisible signal is
@@ -269,7 +270,7 @@
   ArcSessionManagerTestBase()
       : task_environment_(content::BrowserTaskEnvironment::IO_MAINLOOP,
                           base::test::TaskEnvironment::TimeSource::MOCK_TIME),
-        user_manager_enabler_(std::make_unique<ash::FakeChromeUserManager>()) {
+        fake_user_manager_(std::make_unique<ash::FakeChromeUserManager>()) {
     TestingBrowserProcess::GetGlobal()->SetLocalState(&test_local_state_);
     arc::prefs::RegisterLocalStatePrefs(test_local_state_.registry());
     ash::DemoSetupController::RegisterLocalStatePrefs(
@@ -328,8 +329,7 @@
   }
 
   ash::FakeChromeUserManager* GetFakeUserManager() const {
-    return static_cast<ash::FakeChromeUserManager*>(
-        user_manager::UserManager::Get());
+    return fake_user_manager_.Get();
   }
 
  protected:
@@ -367,10 +367,11 @@
   }
 
   content::BrowserTaskEnvironment task_environment_;
+  user_manager::TypedScopedUserManager<ash::FakeChromeUserManager>
+      fake_user_manager_;
   std::unique_ptr<TestingProfile> profile_;
   std::unique_ptr<ArcServiceManager> arc_service_manager_;
   std::unique_ptr<ArcSessionManager> arc_session_manager_;
-  user_manager::ScopedUserManager user_manager_enabler_;
   base::ScopedTempDir temp_dir_;
   TestingPrefServiceSimple test_local_state_;
   std::unique_ptr<ash::AuthEventsRecorder> auth_events_recorder_;
diff --git a/chrome/browser/ash/arc/wallpaper/arc_wallpaper_service_unittest.cc b/chrome/browser/ash/arc/wallpaper/arc_wallpaper_service_unittest.cc
index 48bd8ea7..4a05f63c 100644
--- a/chrome/browser/ash/arc/wallpaper/arc_wallpaper_service_unittest.cc
+++ b/chrome/browser/ash/arc/wallpaper/arc_wallpaper_service_unittest.cc
@@ -63,8 +63,7 @@
  public:
   ArcWallpaperServiceTest()
       : task_environment_(std::make_unique<content::BrowserTaskEnvironment>()),
-        user_manager_(new ash::FakeChromeUserManager()),
-        user_manager_enabler_(base::WrapUnique(user_manager_.get())) {}
+        fake_user_manager_(std::make_unique<ash::FakeChromeUserManager>()) {}
 
   ArcWallpaperServiceTest(const ArcWallpaperServiceTest&) = delete;
   ArcWallpaperServiceTest& operator=(const ArcWallpaperServiceTest&) = delete;
@@ -82,9 +81,9 @@
         prefs::kDeviceWallpaperImageFilePath, std::string());
 
     // User
-    user_manager_->AddUser(user_manager::StubAccountId());
-    user_manager_->LoginUser(user_manager::StubAccountId());
-    ASSERT_TRUE(user_manager_->GetPrimaryUser());
+    fake_user_manager_->AddUser(user_manager::StubAccountId());
+    fake_user_manager_->LoginUser(user_manager::StubAccountId());
+    ASSERT_TRUE(fake_user_manager_->GetPrimaryUser());
 
     // Wallpaper
     wallpaper_controller_client_ = std::make_unique<
@@ -127,9 +126,8 @@
 
  private:
   std::unique_ptr<content::BrowserTaskEnvironment> task_environment_;
-  const raw_ptr<ash::FakeChromeUserManager, DanglingUntriaged | ExperimentalAsh>
-      user_manager_ = nullptr;
-  user_manager::ScopedUserManager user_manager_enabler_;
+  user_manager::TypedScopedUserManager<ash::FakeChromeUserManager>
+      fake_user_manager_;
   arc::ArcServiceManager arc_service_manager_;
   // testing_profile_ needs to be deleted before arc_service_manager_.
   TestingProfile testing_profile_;
diff --git a/chrome/browser/ash/file_manager/file_manager_browsertest_base.cc b/chrome/browser/ash/file_manager/file_manager_browsertest_base.cc
index 098185e5..c01c1a9 100644
--- a/chrome/browser/ash/file_manager/file_manager_browsertest_base.cc
+++ b/chrome/browser/ash/file_manager/file_manager_browsertest_base.cc
@@ -2373,16 +2373,8 @@
     disabled_features.push_back(ash::features::kFilesDriveShortcuts);
   }
 
-  if (options.enable_jellybean) {
-    enabled_features.push_back(chromeos::features::kJelly);
-  } else {
-    disabled_features.push_back(chromeos::features::kJelly);
-  }
-
   if (options.enable_cros_components) {
     enabled_features.push_back(chromeos::features::kCrosComponents);
-    DCHECK(options.enable_jellybean)
-        << "Cannot enable cros-components without jellybean";
   } else {
     disabled_features.push_back(chromeos::features::kCrosComponents);
   }
@@ -3926,11 +3918,6 @@
     return;
   }
 
-  if (name == "isJellybean") {
-    *output = options.enable_jellybean ? "true" : "false";
-    return;
-  }
-
   if (name == "isCrosComponents") {
     *output = options.enable_cros_components ? "true" : "false";
     return;
diff --git a/chrome/browser/ash/file_manager/file_manager_browsertest_base.h b/chrome/browser/ash/file_manager/file_manager_browsertest_base.h
index a963e88..aae3b96 100644
--- a/chrome/browser/ash/file_manager/file_manager_browsertest_base.h
+++ b/chrome/browser/ash/file_manager/file_manager_browsertest_base.h
@@ -198,9 +198,6 @@
     // Whether to enable Drive shortcuts showing a badge or not.
     bool enable_drive_shortcuts = false;
 
-    // Whether to enable jellybean styles.
-    bool enable_jellybean = false;
-
     // Whether to enable jellybean UI elements.
     bool enable_cros_components = false;
 
diff --git a/chrome/browser/ash/file_manager/file_manager_browsertest_utils.cc b/chrome/browser/ash/file_manager/file_manager_browsertest_utils.cc
index 64337521..c267a87 100644
--- a/chrome/browser/ash/file_manager/file_manager_browsertest_utils.cc
+++ b/chrome/browser/ash/file_manager/file_manager_browsertest_utils.cc
@@ -207,7 +207,6 @@
 
 TestCase& TestCase::EnableCrosComponents() {
   options.enable_cros_components = true;
-  options.enable_jellybean = true;
   return *this;
 }
 
diff --git a/chrome/browser/ash/file_manager/office_file_tasks.cc b/chrome/browser/ash/file_manager/office_file_tasks.cc
index 09f6e36..669c622 100644
--- a/chrome/browser/ash/file_manager/office_file_tasks.cc
+++ b/chrome/browser/ash/file_manager/office_file_tasks.cc
@@ -99,33 +99,28 @@
     std::unique_ptr<ash::cloud_upload::CloudOpenMetrics> cloud_open_metrics) {
   switch (fallback_reason) {
     case ash::office_fallback::FallbackReason::kOffline:
-      UMA_HISTOGRAM_ENUMERATION(
-          ash::cloud_upload::kDriveErrorMetricName,
+      cloud_open_metrics->LogGoogleDriveOpenError(
           ash::cloud_upload::OfficeDriveOpenErrors::kOffline);
       break;
     case ash::office_fallback::FallbackReason::kDriveDisabled:
-      UMA_HISTOGRAM_ENUMERATION(
-          ash::cloud_upload::kDriveErrorMetricName,
+      cloud_open_metrics->LogGoogleDriveOpenError(
           ash::cloud_upload::OfficeDriveOpenErrors::kDriveDisabled);
       break;
     case ash::office_fallback::FallbackReason::kNoDriveService:
-      UMA_HISTOGRAM_ENUMERATION(
-          ash::cloud_upload::kDriveErrorMetricName,
+      cloud_open_metrics->LogGoogleDriveOpenError(
           ash::cloud_upload::OfficeDriveOpenErrors::kNoDriveService);
       break;
     case ash::office_fallback::FallbackReason::kDriveAuthenticationNotReady:
-      UMA_HISTOGRAM_ENUMERATION(ash::cloud_upload::kDriveErrorMetricName,
-                                ash::cloud_upload::OfficeDriveOpenErrors::
-                                    kDriveAuthenticationNotReady);
+      cloud_open_metrics->LogGoogleDriveOpenError(
+          ash::cloud_upload::OfficeDriveOpenErrors::
+              kDriveAuthenticationNotReady);
       break;
     case ash::office_fallback::FallbackReason::kDriveFsInterfaceError:
-      UMA_HISTOGRAM_ENUMERATION(
-          ash::cloud_upload::kDriveErrorMetricName,
+      cloud_open_metrics->LogGoogleDriveOpenError(
           ash::cloud_upload::OfficeDriveOpenErrors::kDriveFsInterface);
       break;
     case ash::office_fallback::FallbackReason::kMeteredConnection:
-      UMA_HISTOGRAM_ENUMERATION(
-          ash::cloud_upload::kDriveErrorMetricName,
+      cloud_open_metrics->LogGoogleDriveOpenError(
           ash::cloud_upload::OfficeDriveOpenErrors::kMeteredConnection);
       break;
   }
diff --git a/chrome/browser/browsing_data/counters/browsing_data_counter_utils_browsertest.cc b/chrome/browser/browsing_data/counters/browsing_data_counter_utils_browsertest.cc
index af3faf2..c558113 100644
--- a/chrome/browser/browsing_data/counters/browsing_data_counter_utils_browsertest.cc
+++ b/chrome/browser/browsing_data/counters/browsing_data_counter_utils_browsertest.cc
@@ -36,8 +36,14 @@
   ~BrowsingDataCounterUtilsBrowserTest() override = default;
 };
 
+// TODO(https://crbug.com/1491584): Test is flaky on ChromeOS.
+#if BUILDFLAG(IS_CHROMEOS)
+#define MAYBE_ShouldShowCookieException DISABLED_ShouldShowCookieException
+#else
+#define MAYBE_ShouldShowCookieException ShouldShowCookieException
+#endif
 IN_PROC_BROWSER_TEST_F(BrowsingDataCounterUtilsBrowserTest,
-                       ShouldShowCookieException) {
+                       MAYBE_ShouldShowCookieException) {
   ASSERT_TRUE(SetupClients());
 
   // By default, a fresh profile is not signed in, nor syncing, so no cookie
diff --git a/chrome/browser/download/download_item_model.cc b/chrome/browser/download/download_item_model.cc
index 2129f56c..8d64370 100644
--- a/chrome/browser/download/download_item_model.cc
+++ b/chrome/browser/download/download_item_model.cc
@@ -925,7 +925,7 @@
           TailoredVerdict::SUSPICIOUS_ARCHIVE) {
     return DownloadUIModel::BubbleUIInfo::SuspiciousUiPattern(
         l10n_util::GetStringUTF16(
-            IDS_DOWNLOAD_BUBBLE_SUBPAGE_SUMMARY_WARNING_MALWARE),
+            IDS_DOWNLOAD_BUBBLE_SUBPAGE_SUMMARY_WARNING_ARCHIVE_MALWARE),
         l10n_util::GetStringUTF16(
             IDS_DOWNLOAD_BUBBLE_CONTINUE_SUSPICIOUS_FILE));
   }
diff --git a/chrome/browser/download/download_item_model_unittest.cc b/chrome/browser/download/download_item_model_unittest.cc
index ebf7a6d..4791025 100644
--- a/chrome/browser/download/download_item_model_unittest.cc
+++ b/chrome/browser/download/download_item_model_unittest.cc
@@ -1517,7 +1517,8 @@
   EXPECT_EQ(DownloadCommands::Command::KEEP,
             bubble_ui_info.subpage_buttons[1].command);
   EXPECT_FALSE(bubble_ui_info.subpage_buttons[1].is_prominent);
-  EXPECT_EQ(u"This file may hide malware", bubble_ui_info.warning_summary);
+  EXPECT_EQ(u"This archive file includes other files that may hide malware",
+            bubble_ui_info.warning_summary);
 }
 
 TEST_F(DownloadItemModelTailoredWarningTest,
diff --git a/chrome/browser/extensions/api/printing/printing_apitest.cc b/chrome/browser/extensions/api/printing/printing_apitest.cc
index e644fce..d152771 100644
--- a/chrome/browser/extensions/api/printing/printing_apitest.cc
+++ b/chrome/browser/extensions/api/printing/printing_apitest.cc
@@ -204,6 +204,8 @@
   scoped_refptr<printing::TestPrintBackend> test_print_backend_;
 };
 
+using PrintingPromiseApiTest = PrintingApiTest;
+
 IN_PROC_BROWSER_TEST_P(PrintingApiTest, GetPrinters) {
   chromeos::Printer printer = chromeos::Printer(kId);
   printer.set_display_name("name");
@@ -240,6 +242,21 @@
   RunTest("submit_job.html");
 }
 
+// As above, but tests using promise based API calls.
+IN_PROC_BROWSER_TEST_P(PrintingPromiseApiTest, SubmitJob) {
+  ASSERT_TRUE(StartEmbeddedTestServer());
+
+  AddAvailablePrinter(kId, ConstructPrinterCapabilities());
+  PrintingAPIHandler* handler = PrintingAPIHandler::Get(browser()->profile());
+  handler->SetPrintJobControllerForTesting(
+      std::make_unique<FakePrintJobControllerAsh>(GetPrintJobManager(),
+                                                  GetPrintersManager()));
+  base::AutoReset<bool> skip_confirmation_dialog_reset(
+      PrintJobSubmitter::SkipConfirmationDialogForTesting());
+
+  RunTest("submit_job_promise.html");
+}
+
 // Verifies that:
 // a) Cancel job request works smoothly.
 // b) OnJobStatusChanged() events are dispatched correctly.
@@ -263,4 +280,10 @@
                                          ExtensionType::kExtensionMV2,
                                          ExtensionType::kExtensionMV3));
 
+// We only run the promise based tests for MV3 extensions as promise based API
+// calls are only exposed to MV3.
+INSTANTIATE_TEST_SUITE_P(/**/,
+                         PrintingPromiseApiTest,
+                         testing::Values(ExtensionType::kExtensionMV3));
+
 }  // namespace extensions
diff --git a/chrome/browser/extensions/api/scripting/scripting_apitest.cc b/chrome/browser/extensions/api/scripting/scripting_apitest.cc
index 2f86e91..da9d914 100644
--- a/chrome/browser/extensions/api/scripting/scripting_apitest.cc
+++ b/chrome/browser/extensions/api/scripting/scripting_apitest.cc
@@ -138,7 +138,8 @@
   ASSERT_TRUE(RunExtensionTest("scripting/remove_css")) << message_;
 }
 
-IN_PROC_BROWSER_TEST_F(ScriptingAPITest, DynamicContentScripts) {
+// TODO(crbug.com/1491650): Re-enable this test
+IN_PROC_BROWSER_TEST_F(ScriptingAPITest, DISABLED_DynamicContentScripts) {
   ASSERT_TRUE(RunExtensionTest("scripting/dynamic_scripts")) << message_;
 }
 
diff --git a/chrome/browser/extensions/back_forward_cache_browsertest.cc b/chrome/browser/extensions/back_forward_cache_browsertest.cc
index d660fb9..fd823b3 100644
--- a/chrome/browser/extensions/back_forward_cache_browsertest.cc
+++ b/chrome/browser/extensions/back_forward_cache_browsertest.cc
@@ -435,7 +435,7 @@
 // cross document navigation for a document with an active channel, allowing
 // the frame to be bfcached subsequently.
 IN_PROC_BROWSER_TEST_F(ExtensionBackForwardCacheBrowserTest,
-                       ChromeRuntimeConnectUsageInIframe) {
+                       ChromeRuntimeConnectUsageInIframeWithIframeNavigation) {
   const Extension* extension =
       LoadExtension(test_data_dir_.AppendASCII("back_forward_cache")
                         .AppendASCII("content_script"));
@@ -484,6 +484,108 @@
             content::RenderFrameHost::LifecycleState::kInBackForwardCache);
 }
 
+// Test that the page can enter BFCache with an active channel created from the
+// iframe.
+IN_PROC_BROWSER_TEST_F(
+    ExtensionBackForwardCacheBrowserTest,
+    ChromeRuntimeConnectUsageInIframeWithoutIframeNavigation) {
+  const Extension* extension =
+      LoadExtension(test_data_dir_.AppendASCII("back_forward_cache")
+                        .AppendASCII("content_script"));
+  ASSERT_TRUE(extension);
+
+  ASSERT_TRUE(embedded_test_server()->Start());
+  GURL url_a = embedded_test_server()->GetURL("a.com", "/iframe.html");
+  GURL url_b(embedded_test_server()->GetURL("b.com", "/title1.html"));
+
+  // 1) Navigate to A.
+  content::RenderFrameHostWrapper primary_render_frame_host(
+      ui_test_utils::NavigateToURL(browser(), url_a));
+  std::u16string expected_title = u"connected";
+  content::TitleWatcher title_watcher(
+      browser()->tab_strip_model()->GetActiveWebContents(), expected_title);
+
+  content::RenderFrameHost* child =
+      ChildFrameAt(primary_render_frame_host.get(), 0);
+
+  std::string action = base::StringPrintf(
+      R"JS(
+        var p = chrome.runtime.connect('%s');
+        p.onMessage.addListener((m) => {window.top.document.title = m; });
+      )JS",
+      extension->id().c_str());
+  ASSERT_TRUE(ExecJs(child, action));
+
+  // 2) Wait for the message port to be connected.
+  EXPECT_EQ(expected_title, title_watcher.WaitAndGetTitle());
+
+  // Expect that a channel is open.
+  EXPECT_EQ(1u, MessageService::Get(profile())->GetChannelCountForTest());
+
+  // 3) Navigate to B, and the channel is still open.
+  ASSERT_TRUE(ui_test_utils::NavigateToURL(browser(), url_b));
+  EXPECT_EQ(1u, MessageService::Get(profile())->GetChannelCountForTest());
+
+  // 4) Expect that A is in the back forward cache.
+  EXPECT_FALSE(primary_render_frame_host.IsDestroyed());
+  EXPECT_EQ(primary_render_frame_host->GetLifecycleState(),
+            content::RenderFrameHost::LifecycleState::kInBackForwardCache);
+}
+
+// Test that the page can enter BFCache with an active channel that's created
+// from the extension background with two receivers from different frames.
+IN_PROC_BROWSER_TEST_F(ExtensionBackForwardCacheBrowserTest,
+                       ChromeTabsConnectWithMultipleReceivers) {
+  const Extension* extension =
+      LoadExtension(test_data_dir_.AppendASCII("back_forward_cache")
+                        .AppendASCII("content_script_all_frames"));
+  ASSERT_TRUE(extension);
+
+  ASSERT_TRUE(embedded_test_server()->Start());
+  GURL url_a(embedded_test_server()->GetURL("a.com", "/iframe.html"));
+  GURL url_b(embedded_test_server()->GetURL("b.com", "/title1.html"));
+
+  // 1) Navigate to A.
+  content::RenderFrameHostWrapper primary_render_frame_host(
+      ui_test_utils::NavigateToURL(browser(), url_a));
+
+  // 2) Create channel from the extension background.
+  static constexpr char kScript[] =
+      R"JS(
+      var p;
+      var countConnected = 0;
+      chrome.tabs.query({}, (t) => {
+        p = chrome.tabs.connect(t[0].id);
+        p.onMessage.addListener(
+         (m) => {
+          if (m == 'connected') {
+            countConnected++;
+            if (countConnected == 2) {
+              chrome.test.sendScriptResult('connected twice');
+            }
+          }
+        });
+      });
+    )JS";
+
+  // The background should receives two "connected" messages from different
+  // frames.
+  EXPECT_EQ("connected twice",
+            ExecuteScriptInBackgroundPage(extension->id(), kScript));
+  // Even though there are two ports from the receiver end, there is still one
+  // channel.
+  EXPECT_EQ(1u, MessageService::Get(profile())->GetChannelCountForTest());
+
+  // 3) Navigate to B.
+  ASSERT_TRUE(ui_test_utils::NavigateToURL(browser(), url_b));
+
+  // 4) Expect that A is in the back forward cache.
+  EXPECT_EQ(primary_render_frame_host->GetLifecycleState(),
+            content::RenderFrameHost::LifecycleState::kInBackForwardCache);
+  // The channel should still be active.
+  EXPECT_EQ(1u, MessageService::Get(profile())->GetChannelCountForTest());
+}
+
 // Test if the chrome.runtime.sendMessage API is called, the page is allowed
 // to enter the bfcache.
 IN_PROC_BROWSER_TEST_F(ExtensionBackForwardCacheBrowserTest,
diff --git a/chrome/browser/flag-metadata.json b/chrome/browser/flag-metadata.json
index 7d07286..286e3da73 100644
--- a/chrome/browser/flag-metadata.json
+++ b/chrome/browser/flag-metadata.json
@@ -3791,6 +3791,11 @@
     "expiry_milestone": 119
   },
   {
+    "name": "enable-user-link-capturing-pwa",
+    "owners": [ "dibyapal", "desktop-pwas-team@google.com" ],
+    "expiry_milestone": 125
+  },
+  {
     "name": "enable-user-policy-for-signin-and-nosync-consent-level",
     "owners": [ "vincb" ],
     "expiry_milestone": 130
@@ -5476,7 +5481,7 @@
   {
     "name": "media-remoting-without-fullscreen",
     "owners": [ "muyaoxu@google.com", "openscreen-eng@google.com" ],
-    "expiry_milestone": 120
+    "expiry_milestone": 140
   },
   {
     "name": "media-route-dial-provider",
diff --git a/chrome/browser/flag_descriptions.cc b/chrome/browser/flag_descriptions.cc
index ffa71c8..1978af0 100644
--- a/chrome/browser/flag_descriptions.cc
+++ b/chrome/browser/flag_descriptions.cc
@@ -7657,6 +7657,10 @@
 const char kUnoDesktopDescription[] =
     "Enables the UNO model on Desktop. This is currently an experiment in a "
     "prototype stage in order to validate the model.";
+
+const char kDesktopPWAsUserLinkCapturingName[] = "Desktop PWA Link Capturing";
+const char kDesktopPWAsUserLinkCapturingDescription[] =
+    "Enables opening links from Chrome in an installed PWA";
 #endif  // BUILDFLAG(IS_LINUX) || BUILDFLAG(IS_MAC) || BUILDFLAG(IS_WIN)
 
 #if BUILDFLAG(ENABLE_HLS_DEMUXER)
diff --git a/chrome/browser/flag_descriptions.h b/chrome/browser/flag_descriptions.h
index b2057f4b..5e136711 100644
--- a/chrome/browser/flag_descriptions.h
+++ b/chrome/browser/flag_descriptions.h
@@ -4435,6 +4435,9 @@
 
 extern const char kUnoDesktopName[];
 extern const char kUnoDesktopDescription[];
+
+extern const char kDesktopPWAsUserLinkCapturingName[];
+extern const char kDesktopPWAsUserLinkCapturingDescription[];
 #endif  // BUILDFLAG(IS_LINUX) || BUILDFLAG(IS_MAC) || BUILDFLAG(IS_WIN)
 
 #if BUILDFLAG(ENABLE_HLS_DEMUXER)
diff --git a/chrome/browser/policy/messaging_layer/upload/record_handler_impl.cc b/chrome/browser/policy/messaging_layer/upload/record_handler_impl.cc
index 1d4bdee8..dc9fc17b 100644
--- a/chrome/browser/policy/messaging_layer/upload/record_handler_impl.cc
+++ b/chrome/browser/policy/messaging_layer/upload/record_handler_impl.cc
@@ -76,6 +76,7 @@
   return priority;
 }
 
+#if BUILDFLAG(IS_CHROMEOS)
 // Returns true if `generation_guid` is required and missing.
 // Returns false otherwise.
 static bool IsMissingGenerationGuid(const std::string* generation_guid) {
@@ -88,6 +89,7 @@
   }
   return !generation_guid || generation_guid->empty();
 }
+#endif  // BUILDFLAG(IS_CHROMEOS)
 
 // Returns true if any required sequence info is missing. Returns
 // false otherwise.
@@ -97,11 +99,14 @@
     const absl::optional<Priority> priority_result,
     const std::string* generation_guid) {
   return !sequencing_id || !generation_id || generation_id->empty() ||
+#if BUILDFLAG(IS_CHROMEOS)
+         IsMissingGenerationGuid(generation_guid) ||
+#endif  // BUILDFLAG(IS_CHROMEOS)
          !priority_result.has_value() ||
-         !Priority_IsValid(priority_result.value()) ||
-         IsMissingGenerationGuid(generation_guid);
+         !Priority_IsValid(priority_result.value());
 }
 
+#if BUILDFLAG(IS_CHROMEOS)
 // Returns true if `generation_guid` can be parsed as a GUID or if
 // `generation_guid` does not need to be parsed based on the type of device.
 // Returns false otherwise.
@@ -116,6 +121,7 @@
   }
   return base::Uuid::ParseCaseInsensitive(generation_guid).is_valid();
 }
+#endif  // BUILDFLAG(IS_CHROMEOS)
 
 // Processes LOG_UPLOAD event.
 void ProcessFileUpload(base::WeakPtr<FileUploadJob::Delegate> delegate,
@@ -331,6 +337,12 @@
   }
   const auto [seq_id, gen_id] = parse_seq_id_gen_id_result.ValueOrDie();
 
+  SequenceInformation proto;
+  proto.set_sequencing_id(seq_id);
+  proto.set_generation_id(gen_id);
+  proto.set_priority(Priority(priority_result.value()));
+
+#if BUILDFLAG(IS_CHROMEOS)
   // If `generation_guid` does not exist, set it to be an empty string.
   const std::string gen_guid = generation_guid ? *generation_guid : "";
   if (!GenerationGuidIsValid(gen_guid)) {
@@ -340,12 +352,8 @@
                       "SequenceInformation proto. Invalid generation guid : ",
                       value.DebugString()}));
   }
-
-  SequenceInformation proto;
-  proto.set_sequencing_id(seq_id);
-  proto.set_generation_id(gen_id);
-  proto.set_priority(Priority(priority_result.value()));
   proto.set_generation_guid(gen_guid);
+#endif  // BUILDFLAG(IS_CHROMEOS)
   return proto;
 }
 
@@ -474,6 +482,7 @@
 void RecordHandlerImpl::ReportUploader::LogNumRecordsInUpload(
     size_t num_records) {
   DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
+#if BUILDFLAG(IS_CHROMEOS)
   if (policy::ManagementServiceFactory::GetForPlatform()
           ->HasManagementAuthority(
               policy::EnterpriseManagementAuthority::CLOUD_DOMAIN)) {
@@ -484,6 +493,8 @@
     base::UmaHistogramCounts1000(
         "Browser.ERP.RecordsPerUploadFromUnmanagedDevice", num_records);
   }
+// TODO(b/304623373): Add separate UMA for non-ChromeOS devices.
+#endif  // BUILDFLAG(IS_CHROMEOS)
 }
 
 void RecordHandlerImpl::ReportUploader::ResumeUpload(size_t next_record) {
diff --git a/chrome/browser/policy/messaging_layer/upload/record_handler_impl_unittest.cc b/chrome/browser/policy/messaging_layer/upload/record_handler_impl_unittest.cc
index f73515a..cf4aa95 100644
--- a/chrome/browser/policy/messaging_layer/upload/record_handler_impl_unittest.cc
+++ b/chrome/browser/policy/messaging_layer/upload/record_handler_impl_unittest.cc
@@ -15,6 +15,7 @@
 #include "base/strings/string_number_conversions.h"
 #include "base/uuid.h"
 #include "base/values.h"
+#include "build/build_config.h"
 #include "chrome/browser/enterprise/browser_management/management_service_factory.h"
 #include "chrome/browser/policy/messaging_layer/public/report_client.h"
 #include "chrome/browser/policy/messaging_layer/public/report_client_test_util.h"
@@ -173,7 +174,9 @@
     auto* sequence_information =
         encrypted_record.mutable_sequence_information();
     sequence_information->set_generation_id(generation_id);
+#if BUILDFLAG(IS_CHROMEOS)
     sequence_information->set_generation_guid(generation_guid);
+#endif  // BUILDFLAG(IS_CHROMEOS)
     sequence_information->set_sequencing_id(i);
     sequence_information->set_priority(Priority::IMMEDIATE);
     ScopedReservation record_reservation(encrypted_record.ByteSizeLong(),
@@ -307,6 +310,7 @@
                       .Build();
   ASSERT_TRUE(response.has_value());
 
+#if BUILDFLAG(IS_CHROMEOS)
   // Verify generation guid exists and equals kGenerationGuid.
   ASSERT_THAT(response->FindStringByDottedPath(
                   "lastSucceedUploadedRecord.generationGuid"),
@@ -314,6 +318,7 @@
   EXPECT_THAT(*(response->FindStringByDottedPath(
                   "lastSucceedUploadedRecord.generationGuid")),
               StrEq(kGenerationGuid));
+#endif  // BUILDFLAG(IS_CHROMEOS)
 
   test_env_.SimulateCustomResponseForRequest(0, std::move(response.value()));
 
@@ -355,6 +360,7 @@
   EXPECT_OK(result) << result.status();
 }
 
+#if BUILDFLAG(IS_CHROMEOS)
 TEST_P(RecordHandlerImplTest, InvalidGenerationGuid) {
   auto test_records = BuildTestRecordsVector(kNumTestRecords, kGenerationId,
                                              kGenerationGuid, memory_resource_);
@@ -387,6 +393,7 @@
   EXPECT_THAT(result.status(),
               Property(&Status::error_code, Eq(error::INTERNAL)));
 }
+#endif  // BUILDFLAG(IS_CHROMEOS)
 
 TEST_P(RecordHandlerImplTest, MissingGenerationGuidFromManagedDeviceIsOk) {
   // Set device as managed
@@ -427,6 +434,7 @@
   EXPECT_OK(result) << result.status();
 }
 
+#if BUILDFLAG(IS_CHROMEOS)
 TEST_P(RecordHandlerImplTest,
        MissingGenerationGuidFromUnmanagedDeviceReturnError) {
   // Set device as unmanaged
@@ -467,6 +475,7 @@
   EXPECT_THAT(result.status(),
               Property(&Status::error_code, Eq(error::INTERNAL)));
 }
+#endif  // BUILDFLAG(IS_CHROMEOS)
 
 TEST_P(RecordHandlerImplTest, MissingSequenceInformation) {
   // test records that has one record with missing sequence information.
diff --git a/chrome/browser/policy/messaging_layer/upload/record_handler_upload_unittest.cc b/chrome/browser/policy/messaging_layer/upload/record_handler_upload_unittest.cc
index 8b048a26..8171b0d 100644
--- a/chrome/browser/policy/messaging_layer/upload/record_handler_upload_unittest.cc
+++ b/chrome/browser/policy/messaging_layer/upload/record_handler_upload_unittest.cc
@@ -10,7 +10,7 @@
 #include "base/task/sequenced_task_runner.h"
 #include "base/test/task_environment.h"
 #include "base/time/time.h"
-
+#include "build/build_config.h"
 #include "chrome/browser/enterprise/browser_management/management_service_factory.h"
 #include "chrome/browser/policy/messaging_layer/proto/synced/log_upload_event.pb.h"
 #include "chrome/browser/policy/messaging_layer/public/report_client_test_util.h"
@@ -221,13 +221,15 @@
     UploadSettings upload_settings,
     absl::optional<UploadTracker> upload_tracker) {
   static constexpr int64_t kGenerationId = 1234;
-  static const std::string kGenerationGuid =
-      base::Uuid::GenerateRandomV4().AsLowercaseString();
   EncryptedRecord encrypted_record;
   encrypted_record.set_encrypted_wrapped_record(data.data(), data.size());
   auto* sequence_information = encrypted_record.mutable_sequence_information();
   sequence_information->set_generation_id(kGenerationId);
+#if BUILDFLAG(IS_CHROMEOS)
+  static const std::string kGenerationGuid =
+      base::Uuid::GenerateRandomV4().AsLowercaseString();
   sequence_information->set_generation_guid(kGenerationGuid);
+#endif  // BUILDFLAG(IS_CHROMEOS)
   sequence_information->set_sequencing_id(0);
   sequence_information->set_priority(Priority::SECURITY);
   {
diff --git a/chrome/browser/policy/messaging_layer/upload/record_upload_request_builder.cc b/chrome/browser/policy/messaging_layer/upload/record_upload_request_builder.cc
index ddb99d91..f889150 100644
--- a/chrome/browser/policy/messaging_layer/upload/record_upload_request_builder.cc
+++ b/chrome/browser/policy/messaging_layer/upload/record_upload_request_builder.cc
@@ -13,6 +13,7 @@
 #include "base/strings/string_number_conversions.h"
 #include "base/token.h"
 #include "base/values.h"
+#include "build/build_config.h"
 #include "chrome/browser/enterprise/browser_management/management_service_factory.h"
 #include "components/reporting/proto/synced/record.pb.h"
 #include "third_party/abseil-cpp/absl/types/optional.h"
@@ -267,12 +268,16 @@
   // required only for unmanaged devices.
   if (!sequence_information.has_sequencing_id() ||
       !sequence_information.has_generation_id() ||
-      !sequence_information.has_priority() ||
-      // Require generation guid for non ChromeOS-managed devices.
+      !sequence_information.has_priority()
+#if BUILDFLAG(IS_CHROMEOS)
+      ||
+      // Require generation guid for unmanaged ChromeOS devices.
       (!policy::ManagementServiceFactory::GetForPlatform()
             ->HasManagementAuthority(
                 policy::EnterpriseManagementAuthority::CLOUD_DOMAIN) &&
-       !sequence_information.has_generation_guid())) {
+       !sequence_information.has_generation_guid())
+#endif  // BUILDFLAG(IS_CHROMEOS)
+  ) {
     return;
   }
 
@@ -282,7 +287,9 @@
   result_->Set(GetGenerationIdPath(),
                base::NumberToString(sequence_information.generation_id()));
   result_->Set(GetPriorityPath(), sequence_information.priority());
+#if BUILDFLAG(IS_CHROMEOS)
   result_->Set(GetGenerationGuidPath(), sequence_information.generation_guid());
+#endif  // BUILDFLAG(IS_CHROMEOS)
 }
 
 SequenceInformationDictionaryBuilder::~SequenceInformationDictionaryBuilder() =
@@ -309,9 +316,11 @@
 }
 
 // static
+#if BUILDFLAG(IS_CHROMEOS)
 std::string_view SequenceInformationDictionaryBuilder::GetGenerationGuidPath() {
   return UploadEncryptedReportingRequestBuilder::kGenerationGuid;
 }
+#endif  // BUILDFLAG(IS_CHROMEOS)
 
 EncryptionInfoDictionaryBuilder::EncryptionInfoDictionaryBuilder(
     const EncryptionInfo& encryption_info) {
diff --git a/chrome/browser/policy/messaging_layer/upload/record_upload_request_builder.h b/chrome/browser/policy/messaging_layer/upload/record_upload_request_builder.h
index b40d603..0289fb3 100644
--- a/chrome/browser/policy/messaging_layer/upload/record_upload_request_builder.h
+++ b/chrome/browser/policy/messaging_layer/upload/record_upload_request_builder.h
@@ -9,7 +9,7 @@
 
 #include "base/feature_list.h"
 #include "base/values.h"
-
+#include "build/build_config.h"
 #include "components/reporting/proto/synced/record.pb.h"
 #include "components/reporting/resources/resource_manager.h"
 #include "third_party/abseil-cpp/absl/types/optional.h"
@@ -34,9 +34,10 @@
 //         "generationId": 123456789,
 //         "priority": 1
 //         // The string value of the `generation_guid` may be empty for managed
-//         // devices, but will always have a value for unmanaged devices. It's
-//         // value, if present, must be a string of base::Uuid. See base/uuid.h
-//         // for format information.
+//         // ChromeOS devices or any non-ChromeOS devices, but will always have
+//         // a value for unmanaged ChromeOS devices. Its value, if present,
+//         // must be a string of base::Uuid. See base/uuid.h for format
+//         // information.
 //         "generation_guid": "xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx"
 //       },
 //       "compressionInformation": {
@@ -167,7 +168,9 @@
   static std::string_view GetSequencingIdPath();
   static std::string_view GetGenerationIdPath();
   static std::string_view GetPriorityPath();
+#if BUILDFLAG(IS_CHROMEOS)
   static std::string_view GetGenerationGuidPath();
+#endif  // BUILDFLAG(IS_CHROMEOS)
 
  private:
   absl::optional<base::Value::Dict> result_;
diff --git a/chrome/browser/policy/messaging_layer/upload/record_upload_request_builder_unittest.cc b/chrome/browser/policy/messaging_layer/upload/record_upload_request_builder_unittest.cc
index 0fbb69f..dfd9651 100644
--- a/chrome/browser/policy/messaging_layer/upload/record_upload_request_builder_unittest.cc
+++ b/chrome/browser/policy/messaging_layer/upload/record_upload_request_builder_unittest.cc
@@ -14,6 +14,7 @@
 #include "base/test/task_environment.h"
 #include "base/token.h"
 #include "base/uuid.h"
+#include "build/build_config.h"
 #include "chrome/browser/enterprise/browser_management/management_service_factory.h"
 #include "chrome/browser/policy/messaging_layer/upload/record_handler_impl.h"
 #include "chrome/browser/policy/messaging_layer/util/test_request_payload.h"
@@ -236,6 +237,7 @@
   EXPECT_THAT(record_dict.value(), IsRecordValid<>());
   EXPECT_TRUE(record_reservation.reserved());
 
+#if BUILDFLAG(IS_CHROMEOS)
   // Now, verify that generation guid is required when the device is in an
   // unmanaged state. The generation guid is not set, so we just need to ensure
   // the device is unmanaged.
@@ -255,6 +257,8 @@
 
   // Set the generation id - expect complete call.
   sequence_information->set_generation_guid(kGenerationGuid);
+#endif  // BUILDFLAG(IS_CHROMEOS)
+
   record_dict =
       EncryptedRecordDictionaryBuilder(record, record_reservation).Build();
 
diff --git a/chrome/browser/policy/messaging_layer/upload/upload_client_unittest.cc b/chrome/browser/policy/messaging_layer/upload/upload_client_unittest.cc
index 3ddbf7e..2d293de3 100644
--- a/chrome/browser/policy/messaging_layer/upload/upload_client_unittest.cc
+++ b/chrome/browser/policy/messaging_layer/upload/upload_client_unittest.cc
@@ -116,8 +116,10 @@
 TEST_P(UploadClientTest, CreateUploadClientAndUploadRecords) {
   static constexpr int64_t kExpectedCallTimes = 10;
   static constexpr int64_t kGenerationId = 1234;
+#if BUILDFLAG(IS_CHROMEOS)
   static constexpr char kGenerationGuid[] =
       "c947e7e9-b87d-4592-9fe7-407792544e53";
+#endif  // BUILDFLAG(IS_CHROMEOS)
 
   base::Value::Dict data;
   data.Set("TEST_KEY", "TEST_VALUE");
@@ -141,7 +143,9 @@
         encrypted_record.mutable_sequence_information();
     sequence_information->set_sequencing_id(static_cast<int64_t>(i));
     sequence_information->set_generation_id(kGenerationId);
+#if BUILDFLAG(IS_CHROMEOS)
     sequence_information->set_generation_guid(kGenerationGuid);
+#endif  // BUILDFLAG(IS_CHROMEOS)
     sequence_information->set_priority(Priority::IMMEDIATE);
     ScopedReservation record_reservation(encrypted_record.ByteSizeLong(),
                                          memory_resource_);
@@ -165,6 +169,7 @@
   ReportingServerConnector::TestEnvironment test_env;
 
   static constexpr char matched_record_template[] =
+#if BUILDFLAG(IS_CHROMEOS)
       R"JSON(
 {
   "sequenceInformation": {
@@ -174,7 +179,19 @@
     "sequencingId": "%d"
   }
 }
-)JSON";
+)JSON"
+#else   // BUILDFLAG(IS_CHROMEOS)
+      R"JSON(
+{
+  "sequenceInformation": {
+    "generationId": "1234",
+    "priority": 1,
+    "sequencingId": "%d"
+  }
+}
+)JSON"
+#endif  // BUILDFLAG(IS_CHROMEOS)
+      ;
 
   test::TestMultiEvent<SequenceInformation, bool> upload_success_event;
 
diff --git a/chrome/browser/printing/system_access_process_print_browsertest.cc b/chrome/browser/printing/system_access_process_print_browsertest.cc
index 3c0c83a..1b0f73e 100644
--- a/chrome/browser/printing/system_access_process_print_browsertest.cc
+++ b/chrome/browser/printing/system_access_process_print_browsertest.cc
@@ -1334,7 +1334,8 @@
 
 #if BUILDFLAG(IS_WIN)
 IN_PROC_BROWSER_TEST_P(SystemAccessProcessPrintBrowserTest,
-                       StartPrintingPdfConversionFails) {
+                       // TODO(crbug.com/1491616): Re-enable this test
+                       DISABLED_StartPrintingPdfConversionFails) {
   AddPrinter("printer1");
   SetPrinterNameForSubsequentContexts("printer1");
   PrimeForPdfConversionErrorOnPageIndex(/*page_index=*/1);
diff --git a/chrome/browser/resources/BUILD.gn b/chrome/browser/resources/BUILD.gn
index d97c401..b7f3bdf8 100644
--- a/chrome/browser/resources/BUILD.gn
+++ b/chrome/browser/resources/BUILD.gn
@@ -6,7 +6,6 @@
 import("//build/config/chromeos/ui_mode.gni")
 import("//chrome/browser/buildflags.gni")
 import("//chrome/common/features.gni")
-import("//chrome/test/base/js2gtest.gni")
 import("//components/compose/features.gni")
 import("//components/signin/features.gni")
 import("//pdf/features.gni")
diff --git a/chrome/browser/resources/gaia_auth_host/BUILD.gn b/chrome/browser/resources/gaia_auth_host/BUILD.gn
index b5374d6..4da2758 100644
--- a/chrome/browser/resources/gaia_auth_host/BUILD.gn
+++ b/chrome/browser/resources/gaia_auth_host/BUILD.gn
@@ -4,7 +4,6 @@
 
 import("//build/config/chromeos/ui_mode.gni")
 import("//chrome/common/features.gni")
-import("//chrome/test/base/js2gtest.gni")
 import("//third_party/closure_compiler/compile_js.gni")
 import("//tools/grit/grit_rule.gni")
 import("//tools/grit/preprocess_if_expr.gni")
diff --git a/chrome/browser/safe_browsing/download_protection/download_request_maker.cc b/chrome/browser/safe_browsing/download_protection/download_request_maker.cc
index b0c82be..7d5e34c 100644
--- a/chrome/browser/safe_browsing/download_protection/download_request_maker.cc
+++ b/chrome/browser/safe_browsing/download_protection/download_request_maker.cc
@@ -38,7 +38,7 @@
 // Note: The name of this variable is checked by PRESUBMIT. Please update the
 // PRESUBMIT script before renaming this variable.
 constexpr int kTailoredWarningVersion = 1;
-constexpr int kTailoredWarningVersionWithImprovedDownloadBubbleWarnings = 2;
+constexpr int kTailoredWarningVersionWithImprovedDownloadBubbleWarnings = 3;
 
 DownloadRequestMaker::TabUrls TabUrlsFromWebContents(
     content::WebContents* web_contents) {
diff --git a/chrome/browser/safe_browsing/download_protection/download_request_maker_unittest.cc b/chrome/browser/safe_browsing/download_protection/download_request_maker_unittest.cc
index 304ae5b6..979ff62fa 100644
--- a/chrome/browser/safe_browsing/download_protection/download_request_maker_unittest.cc
+++ b/chrome/browser/safe_browsing/download_protection/download_request_maker_unittest.cc
@@ -431,7 +431,7 @@
   run_loop.Run();
 
   ASSERT_NE(request, nullptr);
-  EXPECT_EQ(request->tailored_info().version(), 2);
+  EXPECT_EQ(request->tailored_info().version(), 3);
 }
 
 TEST_F(DownloadRequestMakerTest, PopulatesFileBasename) {
diff --git a/chrome/browser/ui/global_media_controls/cast_device_list_host.cc b/chrome/browser/ui/global_media_controls/cast_device_list_host.cc
index 2f0f3b3..9520b49 100644
--- a/chrome/browser/ui/global_media_controls/cast_device_list_host.cc
+++ b/chrome/browser/ui/global_media_controls/cast_device_list_host.cc
@@ -83,12 +83,14 @@
 CastDeviceListHost::CastDeviceListHost(
     std::unique_ptr<media_router::CastDialogController> dialog_controller,
     mojo::PendingRemote<global_media_controls::mojom::DeviceListClient> client,
-    MediaRemotingCallback media_remoting_callback,
-    base::RepeatingClosure hide_dialog_callback)
+    base::RepeatingClosure media_remoting_callback,
+    base::RepeatingClosure hide_dialog_callback,
+    base::RepeatingClosure on_sinks_discovered_callback)
     : cast_controller_(std::move(dialog_controller)),
       client_(std::move(client)),
       media_remoting_callback_(std::move(media_remoting_callback)),
       hide_dialog_callback_(std::move(hide_dialog_callback)),
+      on_sinks_discovered_callback_(std::move(on_sinks_discovered_callback)),
       id_(next_id_++) {
   cast_controller_->AddObserver(this);
   cast_controller_->RegisterDestructor(
@@ -155,6 +157,10 @@
       devices.push_back(CreateDevice(sink));
     }
   }
+
+  if (!devices.empty()) {
+    on_sinks_discovered_callback_.Run();
+  }
   client_->OnDevicesUpdated(std::move(devices));
 }
 
diff --git a/chrome/browser/ui/global_media_controls/cast_device_list_host.h b/chrome/browser/ui/global_media_controls/cast_device_list_host.h
index 6b1f1e5..2bd691b 100644
--- a/chrome/browser/ui/global_media_controls/cast_device_list_host.h
+++ b/chrome/browser/ui/global_media_controls/cast_device_list_host.h
@@ -19,14 +19,13 @@
 class CastDeviceListHost : public global_media_controls::mojom::DeviceListHost,
                            media_router::CastDialogController::Observer {
  public:
-  using MediaRemotingCallback = base::RepeatingCallback<void()>;
-
   CastDeviceListHost(
       std::unique_ptr<media_router::CastDialogController> dialog_controller,
       mojo::PendingRemote<global_media_controls::mojom::DeviceListClient>
           observer,
-      MediaRemotingCallback media_remoting_callback,
-      base::RepeatingClosure hide_dialog_callback);
+      base::RepeatingClosure media_remoting_callback,
+      base::RepeatingClosure hide_dialog_callback,
+      base::RepeatingClosure on_sinks_discovered_callback);
   ~CastDeviceListHost() override;
 
   // mojom::DeviceListHost:
@@ -49,9 +48,11 @@
   mojo::Remote<global_media_controls::mojom::DeviceListClient> client_;
   std::vector<media_router::UIMediaSink> sinks_;
   // Called whenever a Media Remoting session is starting.
-  MediaRemotingCallback media_remoting_callback_;
+  base::RepeatingClosure media_remoting_callback_;
   // Called whenever a tab mirroring session starts.
   base::RepeatingClosure hide_dialog_callback_;
+  // Called whenever the sink is discovered.
+  base::RepeatingClosure on_sinks_discovered_callback_;
   const int id_;
 };
 
diff --git a/chrome/browser/ui/global_media_controls/cast_device_list_host_unittest.cc b/chrome/browser/ui/global_media_controls/cast_device_list_host_unittest.cc
index 816fb04..5274dca 100644
--- a/chrome/browser/ui/global_media_controls/cast_device_list_host_unittest.cc
+++ b/chrome/browser/ui/global_media_controls/cast_device_list_host_unittest.cc
@@ -80,6 +80,7 @@
 
   MOCK_METHOD(void, OnMediaRemotingRequested, ());
   MOCK_METHOD(void, HideMediaDialog, ());
+  MOCK_METHOD(void, OnSinksDiscoveredCallback, ());
 
  protected:
   std::unique_ptr<CastDeviceListHost> CreateHost(
@@ -91,6 +92,8 @@
         base::BindRepeating(&CastDeviceListHostTest::OnMediaRemotingRequested,
                             base::Unretained(this)),
         base::BindRepeating(&CastDeviceListHostTest::HideMediaDialog,
+                            base::Unretained(this)),
+        base::BindRepeating(&CastDeviceListHostTest::OnSinksDiscoveredCallback,
                             base::Unretained(this)));
   }
 
@@ -137,7 +140,6 @@
   UIMediaSink sink = CreateMediaSink();
   sink.cast_modes = {media_router::MediaCastMode::REMOTE_PLAYBACK};
   host_->OnModelUpdated({CreateModelWithSinks({sink})});
-
   EXPECT_CALL(
       *dialog_controller_,
       StartCasting(sink.id, media_router::MediaCastMode::REMOTE_PLAYBACK));
@@ -160,6 +162,16 @@
 }
 #endif  // !BUILDFLAG(IS_CHROMEOS)
 
+TEST_F(CastDeviceListHostTest, OnSinksDiscovered) {
+  EXPECT_CALL(*this, OnSinksDiscoveredCallback());
+  UIMediaSink sink = CreateMediaSink();
+  sink.cast_modes = {media_router::MediaCastMode::REMOTE_PLAYBACK};
+  host_->OnModelUpdated({CreateModelWithSinks({sink})});
+
+  EXPECT_CALL(*this, OnSinksDiscoveredCallback()).Times(0);
+  host_->OnModelUpdated({CreateModelWithSinks({})});
+}
+
 TEST_F(CastDeviceListHostTest, HideMediaDialogCallback) {
   EXPECT_CALL(*this, HideMediaDialog());
   host_->OnCastingStarted();
diff --git a/chrome/browser/ui/global_media_controls/media_notification_service.cc b/chrome/browser/ui/global_media_controls/media_notification_service.cc
index b2894800..a7dc22c 100644
--- a/chrome/browser/ui/global_media_controls/media_notification_service.cc
+++ b/chrome/browser/ui/global_media_controls/media_notification_service.cc
@@ -10,6 +10,7 @@
 #include "base/metrics/histogram_functions.h"
 #include "base/ranges/algorithm.h"
 #include "base/unguessable_token.h"
+#include "chrome/browser/feature_engagement/tracker_factory.h"
 #include "chrome/browser/media/router/media_router_feature.h"
 #include "chrome/browser/profiles/profile.h"
 #include "chrome/browser/ui/browser.h"
@@ -21,6 +22,7 @@
 #include "chrome/browser/ui/media_router/cast_dialog_controller.h"
 #include "chrome/browser/ui/media_router/media_router_ui.h"
 #include "chrome/browser/ui/tabs/tab_strip_model.h"
+#include "components/feature_engagement/public/tracker.h"
 #include "components/global_media_controls/public/media_dialog_delegate.h"
 #include "components/global_media_controls/public/media_item_manager.h"
 #include "components/global_media_controls/public/media_item_producer.h"
@@ -285,8 +287,27 @@
 void MediaNotificationService::OnMediaRemotingRequested(
     const std::string& item_id) {
   auto item = media_session_item_producer_->GetMediaItem(item_id);
-  if (item) {
-    item->RequestMediaRemoting();
+  if (!item) {
+    return;
+  }
+
+  item->RequestMediaRemoting();
+  auto* web_contents =
+      content::MediaSession::GetWebContentsFromRequestId(item_id);
+  if (web_contents && web_contents->GetLastCommittedURL().SchemeIsFile()) {
+    feature_engagement::TrackerFactory::GetForBrowserContext(profile_)
+        ->NotifyEvent("media_route_started_from_gmc");
+  }
+}
+
+void MediaNotificationService::OnSinksDiscovered(const std::string& item_id) {
+  auto item = media_session_item_producer_->GetMediaItem(item_id);
+  auto* web_contents =
+      content::MediaSession::GetWebContentsFromRequestId(item_id);
+
+  if (web_contents) {
+    should_show_cast_local_media_iph_ =
+        web_contents->GetLastCommittedURL().SchemeIsFile();
   }
 }
 
@@ -515,11 +536,18 @@
                 &MediaNotificationService::OnMediaRemotingRequested,
                 weak_ptr_factory_.GetWeakPtr(), remoting_session_id.value())
           : base::DoNothing();
+  auto on_sinks_discovered_callback =
+      remoting_session_id.has_value()
+          ? base::BindRepeating(&MediaNotificationService::OnSinksDiscovered,
+                                weak_ptr_factory_.GetWeakPtr(),
+                                remoting_session_id.value())
+          : base::DoNothing();
   auto host = std::make_unique<CastDeviceListHost>(
       std::move(dialog_controller), std::move(client_remote),
       std::move(media_remoting_callback_),
       base::BindRepeating(&global_media_controls::MediaItemManager::HideDialog,
-                          item_manager_->GetWeakPtr()));
+                          item_manager_->GetWeakPtr()),
+      std::move(on_sinks_discovered_callback));
   int host_id = host->id();
   mojo::SelfOwnedReceiverRef<global_media_controls::mojom::DeviceListHost>
       host_receiver = mojo::MakeSelfOwnedReceiver(
diff --git a/chrome/browser/ui/global_media_controls/media_notification_service.h b/chrome/browser/ui/global_media_controls/media_notification_service.h
index 9ac096de..24a5b353 100644
--- a/chrome/browser/ui/global_media_controls/media_notification_service.h
+++ b/chrome/browser/ui/global_media_controls/media_notification_service.h
@@ -72,6 +72,8 @@
       base::RepeatingCallback<void(bool)> callback) override;
   void OnMediaRemotingRequested(const std::string& item_id) override;
 
+  void OnSinksDiscovered(const std::string& item_id);
+
   // global_media_controls::MediaSessionItemProducerObserver:
   void OnMediaSessionActionButtonPressed(
       const std::string& id,
@@ -114,6 +116,9 @@
       std::unique_ptr<media_router::StartPresentationContext> context);
 #endif  // BUILDFLAG(IS_CHROMEOS)
 
+  bool should_show_cast_local_media_iph() const {
+    return should_show_cast_local_media_iph_;
+  }
   void set_device_provider_for_testing(
       std::unique_ptr<MediaNotificationDeviceProvider> device_provider);
 
@@ -192,6 +197,10 @@
 
   bool shutdown_has_started_ = false;
 
+  // It's set to true when MediaNotificationService receives sink updates for a
+  // local media.
+  bool should_show_cast_local_media_iph_ = false;
+
   base::WeakPtrFactory<MediaNotificationService> weak_ptr_factory_{this};
 };
 
diff --git a/chrome/browser/ui/global_media_controls/media_notification_service_unittest.cc b/chrome/browser/ui/global_media_controls/media_notification_service_unittest.cc
index f99bd29..a8499e1 100644
--- a/chrome/browser/ui/global_media_controls/media_notification_service_unittest.cc
+++ b/chrome/browser/ui/global_media_controls/media_notification_service_unittest.cc
@@ -17,9 +17,10 @@
 #include "build/build_config.h"
 #include "chrome/browser/media/router/chrome_media_router_factory.h"
 #include "chrome/browser/media/router/media_router_feature.h"
+#include "chrome/browser/ui/global_media_controls/cast_device_list_host.h"
 #include "chrome/browser/ui/global_media_controls/cast_media_notification_producer.h"
 #include "chrome/browser/ui/global_media_controls/test_helper.h"
-#include "chrome/browser/ui/media_router/cast_dialog_controller.h"
+#include "chrome/browser/ui/media_router/cast_dialog_model.h"
 #include "chrome/browser/ui/media_router/media_route_starter.h"
 #include "chrome/browser/ui/media_router/query_result_manager.h"
 #include "chrome/test/base/chrome_render_view_host_test_harness.h"
@@ -652,3 +653,23 @@
   // TODO(takumif): Confirm that this calls the MediaNotificationItem.
   service()->OnMediaRemotingRequested(id.ToString());
 }
+
+TEST_F(MediaNotificationServiceCastTest, OnSinksDiscoveredForLocalMedia) {
+  // Playing the media.
+  auto id = SimulatePlayingControllableMediaForWebContents(web_contents());
+
+  NiceMock<global_media_controls::test::MockMediaDialogDelegate>
+      dialog_delegate;
+
+  // Opening the dialog.
+  SimulateDialogOpened(&dialog_delegate);
+
+  service()->OnSinksDiscovered(id.ToString());
+  EXPECT_FALSE(service()->should_show_cast_local_media_iph());
+
+  // Navigating to a page with local media.
+  NavigateAndCommit(GURL("file:///example.mp4"));
+
+  service()->OnSinksDiscovered(id.ToString());
+  EXPECT_TRUE(service()->should_show_cast_local_media_iph());
+}
diff --git a/chrome/browser/ui/global_media_controls/media_toolbar_button_controller.cc b/chrome/browser/ui/global_media_controls/media_toolbar_button_controller.cc
index b349993..b8663d86 100644
--- a/chrome/browser/ui/global_media_controls/media_toolbar_button_controller.cc
+++ b/chrome/browser/ui/global_media_controls/media_toolbar_button_controller.cc
@@ -30,7 +30,12 @@
 
 void MediaToolbarButtonController::OnMediaDialogClosed() {
   UpdateToolbarButtonState();
+  // Triggered when media playback is active and a casting session is initiated,
+  // prompting the user to manage their casting session.
   delegate_->MaybeShowStopCastingPromo();
+  // Triggered exclusively for local media content, encourages the user to begin
+  // casting if a compatible sink is available.
+  delegate_->MaybeShowLocalMediaCastingPromo();
 }
 
 void MediaToolbarButtonController::ShowToolbarButton() {
diff --git a/chrome/browser/ui/global_media_controls/media_toolbar_button_controller_delegate.h b/chrome/browser/ui/global_media_controls/media_toolbar_button_controller_delegate.h
index ef093c57..ba6f830 100644
--- a/chrome/browser/ui/global_media_controls/media_toolbar_button_controller_delegate.h
+++ b/chrome/browser/ui/global_media_controls/media_toolbar_button_controller_delegate.h
@@ -13,6 +13,7 @@
   virtual void Hide() = 0;
   virtual void Enable() = 0;
   virtual void Disable() = 0;
+  virtual void MaybeShowLocalMediaCastingPromo() = 0;
   virtual void MaybeShowStopCastingPromo() = 0;
 
  protected:
diff --git a/chrome/browser/ui/global_media_controls/media_toolbar_button_controller_unittest.cc b/chrome/browser/ui/global_media_controls/media_toolbar_button_controller_unittest.cc
index 5ed843c..6cdbb3e0 100644
--- a/chrome/browser/ui/global_media_controls/media_toolbar_button_controller_unittest.cc
+++ b/chrome/browser/ui/global_media_controls/media_toolbar_button_controller_unittest.cc
@@ -26,6 +26,7 @@
   MOCK_METHOD(void, Hide, ());
   MOCK_METHOD(void, Enable, ());
   MOCK_METHOD(void, Disable, ());
+  MOCK_METHOD(void, MaybeShowLocalMediaCastingPromo, ());
   MOCK_METHOD(void, MaybeShowStopCastingPromo, ());
 };
 
diff --git a/chrome/browser/ui/passwords/bubble_controllers/add_username_bubble_controller.cc b/chrome/browser/ui/passwords/bubble_controllers/add_username_bubble_controller.cc
index bcf571b..6708311 100644
--- a/chrome/browser/ui/passwords/bubble_controllers/add_username_bubble_controller.cc
+++ b/chrome/browser/ui/passwords/bubble_controllers/add_username_bubble_controller.cc
@@ -30,8 +30,7 @@
   if (!delegate_) {
     return;
   }
-  delegate_->SavePassword(GetPendingPassword().username_value,
-                          GetPendingPassword().password_value);
+  delegate_->OnAddUsernameSaveClicked(pending_password().username_value);
 }
 
 std::u16string AddUsernameBubbleController::GetTitle() const {
diff --git a/chrome/browser/ui/passwords/bubble_controllers/add_username_bubble_controller_unittest.cc b/chrome/browser/ui/passwords/bubble_controllers/add_username_bubble_controller_unittest.cc
index 81d7a69..b084274 100644
--- a/chrome/browser/ui/passwords/bubble_controllers/add_username_bubble_controller_unittest.cc
+++ b/chrome/browser/ui/passwords/bubble_controllers/add_username_bubble_controller_unittest.cc
@@ -10,6 +10,7 @@
 #include "testing/gtest/include/gtest/gtest.h"
 
 using ::testing::_;
+using ::testing::Eq;
 using ::testing::Return;
 using ::testing::ReturnRef;
 
@@ -56,8 +57,8 @@
   }
 
  private:
-  std::unique_ptr<PasswordsModelDelegateMock> mock_delegate_;
   std::unique_ptr<AddUsernameBubbleController> controller_;
+  std::unique_ptr<PasswordsModelDelegateMock> mock_delegate_;
   password_manager::PasswordForm pending_password_;
 };
 
@@ -76,8 +77,7 @@
   base::HistogramTester histogram_tester;
   CreateController();
 
-  EXPECT_CALL(*delegate(), SavePassword(pending_password().username_value,
-                                        pending_password().password_value));
+  EXPECT_CALL(*delegate(), OnAddUsernameSaveClicked(Eq(kUsername)));
   controller()->OnSaveClicked();
 
   EXPECT_CALL(*delegate(), OnBubbleHidden());
diff --git a/chrome/browser/ui/passwords/bubble_controllers/manage_passwords_bubble_controller.cc b/chrome/browser/ui/passwords/bubble_controllers/manage_passwords_bubble_controller.cc
index 25f2dd056..afc7269 100644
--- a/chrome/browser/ui/passwords/bubble_controllers/manage_passwords_bubble_controller.cc
+++ b/chrome/browser/ui/passwords/bubble_controllers/manage_passwords_bubble_controller.cc
@@ -74,9 +74,11 @@
 }
 
 std::u16string ManagePasswordsBubbleController::GetTitle() const {
-  return GetManagePasswordsDialogTitleText(
-      GetWebContents()->GetVisibleURL(), delegate_->GetOrigin(),
-      !delegate_->GetCurrentForms().empty());
+  return delegate_->GetState() == password_manager::ui::CONFIRMATION_STATE
+             ? GetConfirmationManagePasswordsDialogTitleText()
+             : GetManagePasswordsDialogTitleText(
+                   GetWebContents()->GetVisibleURL(), delegate_->GetOrigin(),
+                   !delegate_->GetCurrentForms().empty());
 }
 
 void ManagePasswordsBubbleController::OnManageClicked(
diff --git a/chrome/browser/ui/passwords/manage_passwords_state.cc b/chrome/browser/ui/passwords/manage_passwords_state.cc
index e7c740d9..b573018 100644
--- a/chrome/browser/ui/passwords/manage_passwords_state.cc
+++ b/chrome/browser/ui/passwords/manage_passwords_state.cc
@@ -134,6 +134,29 @@
   SetState(password_manager::ui::CONFIRMATION_STATE);
 }
 
+void ManagePasswordsState::OnSubmittedGeneratedPassword(
+    password_manager::ui::State state,
+    std::unique_ptr<password_manager::PasswordFormManagerForUI> form_manager) {
+  CHECK(state == password_manager::ui::CONFIRMATION_STATE ||
+        state == password_manager::ui::GENERATED_PASSWORD_CONFIRMATION_STATE);
+  if (form_manager) {
+    ClearData();
+    form_manager_ = std::move(form_manager);
+  }
+
+  local_credentials_forms_ =
+      DeepCopyNonPSLVector(form_manager_->GetBestMatches());
+  AppendDeepCopyVector(form_manager_->GetFederatedMatches(),
+                       &local_credentials_forms_);
+  // In the confirmation state, a list of saved passwords is displayed, and that
+  // list should contain the just added one.
+  local_credentials_forms_.push_back(
+      std::make_unique<PasswordForm>(form_manager_->GetPendingCredentials()));
+
+  origin_ = url::Origin::Create(form_manager_->GetURL());
+  SetState(state);
+}
+
 void ManagePasswordsState::OnPasswordAutofilled(
     const std::vector<const PasswordForm*>& password_forms,
     url::Origin origin,
diff --git a/chrome/browser/ui/passwords/manage_passwords_state.h b/chrome/browser/ui/passwords/manage_passwords_state.h
index 81042ddf..c139493 100644
--- a/chrome/browser/ui/passwords/manage_passwords_state.h
+++ b/chrome/browser/ui/passwords/manage_passwords_state.h
@@ -68,6 +68,12 @@
   void OnAutomaticPasswordSave(
       std::unique_ptr<password_manager::PasswordFormManagerForUI> form_manager);
 
+  // Move to |state|. Updates local_credentials_forms_ to contain pending
+  // credentials.
+  void OnSubmittedGeneratedPassword(
+      password_manager::ui::State state,
+      std::unique_ptr<password_manager::PasswordFormManagerForUI> form_manager);
+
   // Move to MANAGE_STATE or INACTIVE_STATE for PSL matched passwords.
   // |password_forms| contains best matches from the password store for the
   // form which was autofilled, |origin| is an origin of the form which was
diff --git a/chrome/browser/ui/passwords/manage_passwords_ui_controller.cc b/chrome/browser/ui/passwords/manage_passwords_ui_controller.cc
index ed5e3046..01ccd48 100644
--- a/chrome/browser/ui/passwords/manage_passwords_ui_controller.cc
+++ b/chrome/browser/ui/passwords/manage_passwords_ui_controller.cc
@@ -257,7 +257,18 @@
     std::unique_ptr<PasswordFormManagerForUI> form_manager) {
   DestroyPopups();
   save_fallback_timer_.Stop();
-  passwords_data_.OnAutomaticPasswordSave(std::move(form_manager));
+  if (base::FeatureList::IsEnabled(
+          password_manager::features::
+              kNewConfirmationBubbleForGeneratedPasswords)) {
+    passwords_data_.OnSubmittedGeneratedPassword(
+        form_manager->GetPendingCredentials().username_value.empty()
+            ? password_manager::ui::GENERATED_PASSWORD_CONFIRMATION_STATE
+            : password_manager::ui::CONFIRMATION_STATE,
+        std::move(form_manager));
+  } else {
+    passwords_data_.OnAutomaticPasswordSave(std::move(form_manager));
+  }
+
   bubble_status_ = BubbleStatus::SHOULD_POP_UP;
   UpdateBubbleAndIconVisibility();
 }
@@ -416,6 +427,20 @@
   UpdateBubbleAndIconVisibility();
 }
 
+void ManagePasswordsUIController::OnAddUsernameSaveClicked(
+    const std::u16string& username) {
+  CHECK(!dialog_controller_);
+  passwords_data_.form_manager()->OnUpdateUsernameFromPrompt(username);
+  save_fallback_timer_.Stop();
+
+  passwords_data_.form_manager()->Save();
+  passwords_data_.OnSubmittedGeneratedPassword(
+      password_manager::ui::CONFIRMATION_STATE, nullptr);
+  // After adding a new username, confirmation helium bubble should appear.
+  bubble_status_ = BubbleStatus::SHOULD_POP_UP;
+  UpdateBubbleAndIconVisibility();
+}
+
 void ManagePasswordsUIController::NotifyUnsyncedCredentialsWillBeDeleted(
     std::vector<password_manager::PasswordForm> unsynced_credentials) {
   passwords_data_.ProcessUnsyncedCredentialsWillBeDeleted(
@@ -501,10 +526,12 @@
   if (GetState() == password_manager::ui::AUTO_SIGNIN_STATE)
     return *GetCurrentForms()[0];
 
-  DCHECK(GetState() == password_manager::ui::PENDING_PASSWORD_STATE ||
-         GetState() == password_manager::ui::PENDING_PASSWORD_UPDATE_STATE ||
-         GetState() == password_manager::ui::CONFIRMATION_STATE ||
-         GetState() == password_manager::ui::CAN_MOVE_PASSWORD_TO_ACCOUNT_STATE)
+  CHECK(
+      GetState() == password_manager::ui::PENDING_PASSWORD_STATE ||
+      GetState() == password_manager::ui::PENDING_PASSWORD_UPDATE_STATE ||
+      GetState() == password_manager::ui::CONFIRMATION_STATE ||
+      GetState() == password_manager::ui::CAN_MOVE_PASSWORD_TO_ACCOUNT_STATE ||
+      GetState() == password_manager::ui::GENERATED_PASSWORD_CONFIRMATION_STATE)
       << GetState();
   password_manager::PasswordFormManagerForUI* form_manager =
       passwords_data_.form_manager();
diff --git a/chrome/browser/ui/passwords/manage_passwords_ui_controller.h b/chrome/browser/ui/passwords/manage_passwords_ui_controller.h
index 2df98db..00d34fc 100644
--- a/chrome/browser/ui/passwords/manage_passwords_ui_controller.h
+++ b/chrome/browser/ui/passwords/manage_passwords_ui_controller.h
@@ -111,6 +111,7 @@
   void OnBiometricAuthenticationForFilling(PrefService* prefs) override;
   void ShowBiometricActivationConfirmation() override;
   void OnBiometricAuthBeforeFillingDeclined() override;
+  void OnAddUsernameSaveClicked(const std::u16string& username) override;
 
   virtual void NotifyUnsyncedCredentialsWillBeDeleted(
       std::vector<password_manager::PasswordForm> unsynced_credentials);
diff --git a/chrome/browser/ui/passwords/manage_passwords_ui_controller_unittest.cc b/chrome/browser/ui/passwords/manage_passwords_ui_controller_unittest.cc
index 4664fe9..2c45548 100644
--- a/chrome/browser/ui/passwords/manage_passwords_ui_controller_unittest.cc
+++ b/chrome/browser/ui/passwords/manage_passwords_ui_controller_unittest.cc
@@ -68,6 +68,7 @@
 using ::testing::Contains;
 using ::testing::DoAll;
 using ::testing::ElementsAre;
+using ::testing::Eq;
 using ::testing::IsEmpty;
 using ::testing::Not;
 using ::testing::Pointee;
@@ -322,14 +323,15 @@
   auto form_manager =
       std::make_unique<testing::StrictMock<MockPasswordFormManagerForUI>>();
   EXPECT_CALL(*form_manager, GetBestMatches())
-      .Times(AtMost(1))
-      .WillOnce(ReturnRef(*best_matches));
+      .Times(AtMost(2))
+      .WillRepeatedly(ReturnRef(*best_matches));
   EXPECT_CALL(*form_manager, GetFederatedMatches())
-      .Times(AtMost(1))
-      .WillOnce(Return(std::vector<const password_manager::PasswordForm*>()));
+      .Times(AtMost(2))
+      .WillRepeatedly(
+          Return(std::vector<const password_manager::PasswordForm*>()));
   EXPECT_CALL(*form_manager, GetURL())
-      .Times(AtMost(1))
-      .WillOnce(ReturnRef(test_local_form_.url));
+      .Times(AtMost(2))
+      .WillRepeatedly(ReturnRef(test_local_form_.url));
   EXPECT_CALL(*form_manager, IsBlocklisted())
       .Times(AtMost(1))
       .WillOnce(Return(is_blocklisted));
@@ -1765,6 +1767,22 @@
       password_manager::ui::CAN_MOVE_PASSWORD_TO_ACCOUNT_STATE);
 }
 
+TEST_F(ManagePasswordsUIControllerTest, UsernameAdded) {
+  std::vector<const PasswordForm*> best_matches;
+  auto test_form_manager = CreateFormManagerWithBestMatches(&best_matches);
+  MockPasswordFormManagerForUI* test_form_manager_raw = test_form_manager.get();
+  controller()->OnAutomaticPasswordSave(std::move(test_form_manager));
+
+  EXPECT_CALL(*test_form_manager_raw, Save());
+  EXPECT_CALL(*test_form_manager_raw,
+              OnUpdateUsernameFromPrompt(Eq(kExampleUsername)));
+  EXPECT_CALL(*controller(), OnUpdateBubbleAndIconVisibility());
+  controller()->OnAddUsernameSaveClicked(kExampleUsername);
+
+  EXPECT_TRUE(controller()->opened_automatic_bubble());
+  EXPECT_EQ(password_manager::ui::CONFIRMATION_STATE, controller()->GetState());
+}
+
 TEST_F(ManagePasswordsUIControllerTest, IsDeviceAuthenticatorObtained) {
   base::MockCallback<base::OnceCallback<void(bool)>> result_callback;
 #if !BUILDFLAG(IS_MAC) && !BUILDFLAG(IS_WIN) && !BUILDFLAG(IS_CHROMEOS)
diff --git a/chrome/browser/ui/passwords/passwords_model_delegate.h b/chrome/browser/ui/passwords/passwords_model_delegate.h
index 4259aea..3feb96b 100644
--- a/chrome/browser/ui/passwords/passwords_model_delegate.h
+++ b/chrome/browser/ui/passwords/passwords_model_delegate.h
@@ -188,6 +188,9 @@
   // before filling promo dialog.
   virtual void OnBiometricAuthBeforeFillingDeclined() = 0;
 
+  // Called when user clicked "Add username" button in AddUsername bubble.
+  virtual void OnAddUsernameSaveClicked(const std::u16string& username) = 0;
+
   // Called from the Save/Update bubble controller to decide whether or not we
   // should show the user the Chrome for iOS promo.
   virtual void MaybeShowIOSPasswordPromo() = 0;
diff --git a/chrome/browser/ui/passwords/passwords_model_delegate_mock.h b/chrome/browser/ui/passwords/passwords_model_delegate_mock.h
index d6656ac3..d311a65 100644
--- a/chrome/browser/ui/passwords/passwords_model_delegate_mock.h
+++ b/chrome/browser/ui/passwords/passwords_model_delegate_mock.h
@@ -111,6 +111,10 @@
       (override));
   MOCK_METHOD(void, ShowBiometricActivationConfirmation, (), (override));
   MOCK_METHOD(void, OnBiometricAuthBeforeFillingDeclined, (), (override));
+  MOCK_METHOD(void,
+              OnAddUsernameSaveClicked,
+              (const std::u16string&),
+              (override));
   MOCK_METHOD(void, MaybeShowIOSPasswordPromo, (), (override));
 };
 
diff --git a/chrome/browser/ui/passwords/ui_utils.cc b/chrome/browser/ui/passwords/ui_utils.cc
index b7cceb6e..b0b040d 100644
--- a/chrome/browser/ui/passwords/ui_utils.cc
+++ b/chrome/browser/ui/passwords/ui_utils.cc
@@ -151,6 +151,10 @@
                       : IDS_MANAGE_PASSWORDS_NO_PASSWORDS_TITLE);
 }
 
+std::u16string GetConfirmationManagePasswordsDialogTitleText() {
+  return l10n_util::GetStringUTF16(IDS_PASSWORD_MANAGER_CONFIRM_SAVED_TITLE);
+}
+
 std::u16string GetDisplayUsername(const password_manager::PasswordForm& form) {
   return form.username_value.empty()
              ? l10n_util::GetStringUTF16(IDS_PASSWORD_MANAGER_EMPTY_LOGIN)
diff --git a/chrome/browser/ui/passwords/ui_utils.h b/chrome/browser/ui/passwords/ui_utils.h
index a4d9b4d..98648eb 100644
--- a/chrome/browser/ui/passwords/ui_utils.h
+++ b/chrome/browser/ui/passwords/ui_utils.h
@@ -78,6 +78,10 @@
     const url::Origin& password_origin_url,
     bool has_credentials);
 
+// Returns text that is used when manage passwords bubble is used as a
+// confirmation.
+std::u16string GetConfirmationManagePasswordsDialogTitleText();
+
 // Returns an username in the form that should be shown in the bubble.
 std::u16string GetDisplayUsername(const password_manager::PasswordForm& form);
 
diff --git a/chrome/browser/ui/passwords/ui_utils_unittest.cc b/chrome/browser/ui/passwords/ui_utils_unittest.cc
index 758d6ea..4a6dcd8 100644
--- a/chrome/browser/ui/passwords/ui_utils_unittest.cc
+++ b/chrome/browser/ui/passwords/ui_utils_unittest.cc
@@ -202,3 +202,8 @@
     EXPECT_TRUE(title.find(domain) != std::u16string::npos);
   }
 }
+
+TEST(ManagePasswordsViewUtilTest,
+     GetConfirmationManagePasswordsDialogTitleText) {
+  EXPECT_NE(std::u16string(), GetConfirmationManagePasswordsDialogTitleText());
+}
diff --git a/chrome/browser/ui/views/controls/md_text_button_with_down_arrow.cc b/chrome/browser/ui/views/controls/md_text_button_with_down_arrow.cc
index 91106fa..09765e9 100644
--- a/chrome/browser/ui/views/controls/md_text_button_with_down_arrow.cc
+++ b/chrome/browser/ui/views/controls/md_text_button_with_down_arrow.cc
@@ -6,6 +6,7 @@
 
 #include "chrome/browser/ui/views/chrome_layout_provider.h"
 #include "ui/base/metadata/metadata_impl_macros.h"
+#include "ui/base/ui_base_features.h"
 #include "ui/gfx/color_utils.h"
 #include "ui/gfx/paint_vector_icon.h"
 #include "ui/views/border.h"
@@ -49,9 +50,12 @@
 }
 
 void MdTextButtonWithDownArrow::SetDropArrowImage() {
-  auto drop_arrow_image = ui::ImageModel::FromVectorIcon(
-      kMenuDropArrowIcon,
-      color_utils::DeriveDefaultIconColor(label()->GetEnabledColor()));
+  SkColor drop_arrow_color =
+      features::IsChromeRefresh2023()
+          ? label()->GetEnabledColor()
+          : color_utils::DeriveDefaultIconColor(label()->GetEnabledColor());
+  auto drop_arrow_image =
+      ui::ImageModel::FromVectorIcon(kMenuDropArrowIcon, drop_arrow_color);
   SetImageModel(Button::STATE_NORMAL, drop_arrow_image);
 }
 
diff --git a/chrome/browser/ui/views/frame/browser_non_client_frame_view_chromeos.cc b/chrome/browser/ui/views/frame/browser_non_client_frame_view_chromeos.cc
index 71aea4a..0f01d5b0 100644
--- a/chrome/browser/ui/views/frame/browser_non_client_frame_view_chromeos.cc
+++ b/chrome/browser/ui/views/frame/browser_non_client_frame_view_chromeos.cc
@@ -16,6 +16,8 @@
 #include "chrome/browser/themes/theme_properties.h"
 #include "chrome/browser/ui/browser.h"
 #include "chrome/browser/ui/color/chrome_color_id.h"
+#include "chrome/browser/ui/exclusive_access/exclusive_access_manager.h"
+#include "chrome/browser/ui/exclusive_access/fullscreen_controller.h"
 #include "chrome/browser/ui/sad_tab_helper.h"
 #include "chrome/browser/ui/views/frame/browser_frame.h"
 #include "chrome/browser/ui/views/frame/browser_view.h"
@@ -646,11 +648,23 @@
   ImmersiveModeController* immersive_mode_controller =
       browser_view()->immersive_mode_controller();
   const bool was_enabled = immersive_mode_controller->IsEnabled();
-  immersive_mode_controller->SetEnabled(ShouldEnableImmersiveModeController());
+
+  // If the current immersive mode state is not what it should be after the
+  // tablet mode has been toggled, toggle fullscreen mode to update the
+  // immersive mode. Note that it should not call
+  // ImmersiveModeController::SetEnabled since it won't update fullscreen mode.
+  if (ShouldEnableImmersiveModeController() != was_enabled) {
+    browser_view()
+        ->browser()
+        ->exclusive_access_manager()
+        ->fullscreen_controller()
+        ->ToggleBrowserFullscreenMode();
+  }
 
   // Do not relayout if immersive mode has not changed.
-  if (was_enabled == immersive_mode_controller->IsEnabled())
+  if (was_enabled == immersive_mode_controller->IsEnabled()) {
     return;
+  }
 
   InvalidateLayout();
   // Can be null in tests.
diff --git a/chrome/browser/ui/views/frame/browser_non_client_frame_view_chromeos_browsertest.cc b/chrome/browser/ui/views/frame/browser_non_client_frame_view_chromeos_browsertest.cc
index 839aef9..fb96d800 100644
--- a/chrome/browser/ui/views/frame/browser_non_client_frame_view_chromeos_browsertest.cc
+++ b/chrome/browser/ui/views/frame/browser_non_client_frame_view_chromeos_browsertest.cc
@@ -1293,6 +1293,28 @@
   EXPECT_EQ(inset_normal, inset_in_overview_mode);
 }
 
+IN_PROC_BROWSER_TEST_P(BrowserNonClientFrameViewChromeOSTest,
+                       ToggleTabletModeWhileImmersiveModeEnabled) {
+  BrowserView* browser_view = BrowserView::GetBrowserViewForBrowser(browser());
+  ImmersiveModeController* immersive_mode_controller =
+      browser_view->immersive_mode_controller();
+  ASSERT_FALSE(immersive_mode_controller->IsEnabled());
+  ASSERT_FALSE(browser_view->IsFullscreen());
+
+  // Enter immersive mode.
+  ToggleFullscreenModeAndWait(browser());
+  ASSERT_TRUE(immersive_mode_controller->IsEnabled());
+  ASSERT_TRUE(browser_view->IsFullscreen());
+
+  // Enable tablet mode.
+  ASSERT_NO_FATAL_FAILURE(
+      ash::ShellTestApi().SetTabletModeEnabledForTest(true));
+
+  // Should exit immersive mode + fullscreen when tablet mode is enabled.
+  EXPECT_FALSE(immersive_mode_controller->IsEnabled());
+  EXPECT_FALSE(browser_view->IsFullscreen());
+}
+
 // TODO(b/270175923): Consider using WebUiTabStripOverrideTest, since it
 // makes sense for it to always be enabled.
 class FloatBrowserNonClientFrameViewChromeOSTest
diff --git a/chrome/browser/ui/views/global_media_controls/media_toolbar_button_view.cc b/chrome/browser/ui/views/global_media_controls/media_toolbar_button_view.cc
index f6a6aef..7ecc69c 100644
--- a/chrome/browser/ui/views/global_media_controls/media_toolbar_button_view.cc
+++ b/chrome/browser/ui/views/global_media_controls/media_toolbar_button_view.cc
@@ -133,6 +133,15 @@
     observer.OnMediaButtonDisabled();
 }
 
+void MediaToolbarButtonView::MaybeShowLocalMediaCastingPromo() {
+  if (media_router::GlobalMediaControlsCastStartStopEnabled(
+          browser_->profile()) &&
+      service_->should_show_cast_local_media_iph()) {
+    browser_->window()->MaybeShowFeaturePromo(
+        feature_engagement::kIPHGMCLocalMediaCastingFeature);
+  }
+}
+
 void MediaToolbarButtonView::MaybeShowStopCastingPromo() {
   if (media_router::GlobalMediaControlsCastStartStopEnabled(
           browser_->profile()) &&
diff --git a/chrome/browser/ui/views/global_media_controls/media_toolbar_button_view.h b/chrome/browser/ui/views/global_media_controls/media_toolbar_button_view.h
index d9deab0..965fca6 100644
--- a/chrome/browser/ui/views/global_media_controls/media_toolbar_button_view.h
+++ b/chrome/browser/ui/views/global_media_controls/media_toolbar_button_view.h
@@ -40,6 +40,7 @@
   void Hide() override;
   void Enable() override;
   void Disable() override;
+  void MaybeShowLocalMediaCastingPromo() override;
   void MaybeShowStopCastingPromo() override;
 
   MediaToolbarButtonController* media_toolbar_button_controller() {
diff --git a/chrome/browser/ui/views/media_router/cast_dialog_metrics.cc b/chrome/browser/ui/views/media_router/cast_dialog_metrics.cc
index 141a779..de7bc097 100644
--- a/chrome/browser/ui/views/media_router/cast_dialog_metrics.cc
+++ b/chrome/browser/ui/views/media_router/cast_dialog_metrics.cc
@@ -142,41 +142,12 @@
   sinks_load_time_ = sinks_load_time;
 }
 
-void CastDialogMetrics::OnPaint(const base::Time& paint_time) {
-  if (!paint_time_.is_null())
-    return;
-  MediaRouterMetrics::RecordMediaRouterDialogPaint(paint_time -
-                                                   initialization_time_);
-  paint_time_ = paint_time;
-}
-
-void CastDialogMetrics::OnStartCasting(const base::Time& start_time,
-                                       int selected_sink_index,
-                                       MediaCastMode cast_mode,
+void CastDialogMetrics::OnStartCasting(MediaCastMode cast_mode,
                                        SinkIconType icon_type) {
-  DCHECK(!sinks_load_time_.is_null());
-  MediaRouterMetrics::RecordStartRouteDeviceIndex(selected_sink_index);
-  if (!first_action_recorded_) {
-    MediaRouterMetrics::RecordStartLocalSessionLatency(start_time -
-                                                       sinks_load_time_);
-  }
   MaybeRecordActivationLocationAndCastMode(cast_mode);
   MediaRouterMetrics::RecordMediaSinkTypeForCastDialog(icon_type);
 }
 
-void CastDialogMetrics::OnStopCasting(bool is_local_route) {
-  if (is_local_route) {
-    MediaRouterMetrics::RecordStopLocalRoute();
-  } else {
-    MediaRouterMetrics::RecordStopRemoteRoute();
-  }
-}
-
-void CastDialogMetrics::OnCloseDialog(const base::Time& close_time) {
-  if (!first_action_recorded_ && !paint_time_.is_null())
-    MediaRouterMetrics::RecordCloseDialogLatency(close_time - paint_time_);
-}
-
 void CastDialogMetrics::OnRecordSinkCount(
     const std::vector<CastDialogSinkButton*>& sink_buttons) {
   media_router::MediaRouterMetrics::RecordDeviceCount(sink_buttons.size());
diff --git a/chrome/browser/ui/views/media_router/cast_dialog_metrics.h b/chrome/browser/ui/views/media_router/cast_dialog_metrics.h
index b886160..46ecb674 100644
--- a/chrome/browser/ui/views/media_router/cast_dialog_metrics.h
+++ b/chrome/browser/ui/views/media_router/cast_dialog_metrics.h
@@ -40,22 +40,8 @@
   // is called when the list of sinks becomes non-empty.
   void OnSinksLoaded(const base::Time& sinks_load_time);
 
-  // Records the time it took to paint when called for the first time.
-  void OnPaint(const base::Time& paint_time);
-
-  // Records the index of the selected sink in the sink list. Also records how
-  // long it took to start casting if no other action (aside from selecting a
-  // sink) was taken prior to that.
-  void OnStartCasting(const base::Time& start_time,
-                      int selected_sink_index,
-                      MediaCastMode cast_mode,
-                      SinkIconType icon_type);
-
-  void OnStopCasting(bool is_local_route);
-
-  // Records the time it took to close the dialog, if no other action was taken
-  // prior to that after opening the dialog.
-  void OnCloseDialog(const base::Time& close_time);
+  // Records the cast mode and the sink type for a session that was started.
+  void OnStartCasting(MediaCastMode cast_mode, SinkIconType icon_type);
 
   // Records the number of sinks, which may be 0.
   void OnRecordSinkCount(
@@ -70,9 +56,6 @@
   // The time when the dialog UI started initializing.
   base::Time initialization_time_;
 
-  // The time when the dialog was painted.
-  base::Time paint_time_;
-
   // The time when a non-empty list of sinks was loaded.
   base::Time sinks_load_time_;
 
@@ -80,10 +63,6 @@
 
   bool const is_icon_pinned_;
 
-  // Whether we have already recorded the first user action taken in this dialog
-  // instance.
-  bool first_action_recorded_ = false;
-
   bool activation_location_and_cast_mode_recorded_ = false;
 };
 
diff --git a/chrome/browser/ui/views/media_router/cast_dialog_metrics_unittest.cc b/chrome/browser/ui/views/media_router/cast_dialog_metrics_unittest.cc
index 16aa780a0..1b6026f 100644
--- a/chrome/browser/ui/views/media_router/cast_dialog_metrics_unittest.cc
+++ b/chrome/browser/ui/views/media_router/cast_dialog_metrics_unittest.cc
@@ -52,38 +52,13 @@
       (sink_load_time - init_time).InMilliseconds(), 1);
 }
 
-TEST_F(CastDialogMetricsTest, OnPaint) {
-  metrics_.OnPaint(paint_time);
-  tester_.ExpectUniqueSample(MediaRouterMetrics::kHistogramUiDialogPaint,
-                             (paint_time - init_time).InMilliseconds(), 1);
-}
-
 TEST_F(CastDialogMetricsTest, OnStartCasting) {
-  constexpr int kSinkIndex = 4;
   metrics_.OnSinksLoaded(sink_load_time);
-  metrics_.OnStartCasting(start_casting_time, kSinkIndex, TAB_MIRROR,
-                          SinkIconType::CAST);
-  tester_.ExpectUniqueSample(
-      MediaRouterMetrics::kHistogramStartLocalLatency,
-      (start_casting_time - sink_load_time).InMilliseconds(), 1);
+  metrics_.OnStartCasting(TAB_MIRROR, SinkIconType::CAST);
   tester_.ExpectUniqueSample("MediaRouter.Sink.SelectedType.CastHarmony",
                              SinkIconType::CAST, 1);
 }
 
-TEST_F(CastDialogMetricsTest, OnStopCasting) {
-  metrics_.OnStopCasting(/* is_local_route*/ false);
-  tester_.ExpectUniqueSample(MediaRouterMetrics::kHistogramStopRoute,
-                             /* Remote route */ 1, 1);
-}
-
-TEST_F(CastDialogMetricsTest, OnCloseDialog) {
-  metrics_.OnPaint(paint_time);
-  metrics_.OnCloseDialog(close_dialog_time);
-  tester_.ExpectUniqueSample(MediaRouterMetrics::kHistogramCloseLatency,
-                             (close_dialog_time - paint_time).InMilliseconds(),
-                             1);
-}
-
 TEST_F(CastDialogMetricsTest, OnRecordSinkCount) {
   UIMediaSink sink1{mojom::MediaRouteProviderId::CAST};
   UIMediaSink sink2{mojom::MediaRouteProviderId::CAST};
@@ -133,10 +108,8 @@
 }
 
 TEST_F(CastDialogMetricsTest, RecordDialogActivationLocationAndCastMode) {
-  constexpr int kSinkIndex = 4;
   metrics_.OnSinksLoaded(sink_load_time);
-  metrics_.OnStartCasting(start_casting_time, kSinkIndex, TAB_MIRROR,
-                          SinkIconType::CAST);
+  metrics_.OnStartCasting(TAB_MIRROR, SinkIconType::CAST);
   tester_.ExpectUniqueSample(
       "MediaRouter.Ui.Dialog.ActivationLocationAndCastMode",
       DialogActivationLocationAndCastMode::kEphemeralIconAndTabMirror, 1);
@@ -144,8 +117,7 @@
   CastDialogMetrics metrics_opened_from_page{
       init_time, MediaRouterDialogActivationLocation::PAGE, &profile_};
   metrics_opened_from_page.OnSinksLoaded(sink_load_time);
-  metrics_opened_from_page.OnStartCasting(start_casting_time, kSinkIndex,
-                                          PRESENTATION, SinkIconType::GENERIC);
+  metrics_opened_from_page.OnStartCasting(PRESENTATION, SinkIconType::GENERIC);
   tester_.ExpectBucketCount(
       "MediaRouter.Ui.Dialog.ActivationLocationAndCastMode",
       DialogActivationLocationAndCastMode::kPageAndPresentation, 1);
@@ -154,8 +126,7 @@
   CastDialogMetrics metrics_with_pinned_icon{
       init_time, MediaRouterDialogActivationLocation::TOOLBAR, &profile_};
   metrics_with_pinned_icon.OnSinksLoaded(sink_load_time);
-  metrics_with_pinned_icon.OnStartCasting(start_casting_time, kSinkIndex,
-                                          DESKTOP_MIRROR, SinkIconType::CAST);
+  metrics_with_pinned_icon.OnStartCasting(DESKTOP_MIRROR, SinkIconType::CAST);
   tester_.ExpectBucketCount(
       "MediaRouter.Ui.Dialog.ActivationLocationAndCastMode",
       DialogActivationLocationAndCastMode::kPinnedIconAndDesktopMirror, 1);
diff --git a/chrome/browser/ui/views/media_router/cast_dialog_view.cc b/chrome/browser/ui/views/media_router/cast_dialog_view.cc
index 42d8bc3..3c9e56d 100644
--- a/chrome/browser/ui/views/media_router/cast_dialog_view.cc
+++ b/chrome/browser/ui/views/media_router/cast_dialog_view.cc
@@ -124,11 +124,6 @@
   // cause the dialog to immediately open again.
 }
 
-void CastDialogView::OnPaint(gfx::Canvas* canvas) {
-  views::BubbleDialogDelegateView::OnPaint(canvas);
-  metrics_.OnPaint(base::Time::Now());
-}
-
 bool CastDialogView::IsCommandIdChecked(int command_id) const {
   return command_id == selected_source_;
 }
@@ -170,9 +165,9 @@
 }
 
 void CastDialogView::WindowClosing() {
-  for (Observer& observer : observers_)
+  for (Observer& observer : observers_) {
     observer.OnDialogWillClose(this);
-  metrics_.OnCloseDialog(base::Time::Now());
+  }
 }
 
 void CastDialogView::ShowAccessCodeCastDialog() {
@@ -292,8 +287,7 @@
           l10n_util::GetStringUTF16(
               IDS_MEDIA_ROUTER_ALTERNATIVE_SOURCES_BUTTON)));
   sources_button_->SetEnabled(false);
-  // TODO(crbug.com/1467969): Set the button style to `ui::ButtonStyle::kTonal`
-  // once crbug.com/1486965 is fixed.
+  sources_button_->SetStyle(ui::ButtonStyle::kTonal);
 }
 
 void CastDialogView::ShowSourcesMenu() {
@@ -329,7 +323,6 @@
   // due to a model update, so make a copy here.
   const UIMediaSink sink = sink_views_.at(index)->sink();
   if (sink.route) {
-    metrics_.OnStopCasting(sink.route->is_local());
     // StopCasting() may trigger a model update and invalidate |sink|.
     controller_->StopCasting(sink.route->media_route_id());
   } else if (sink.issue) {
@@ -338,8 +331,6 @@
     absl::optional<MediaCastMode> cast_mode = GetCastModeToUse(sink);
     if (cast_mode) {
       controller_->StartCasting(sink.id, cast_mode.value());
-      metrics_.OnStartCasting(base::Time::Now(), index, cast_mode.value(),
-                              sink.icon_type);
     }
   }
 }
@@ -353,7 +344,6 @@
   if (!sink.route) {
     return;
   }
-  metrics_.OnStopCasting(sink.route->is_local());
   // StopCasting() may trigger a model update and invalidate |sink|.
   controller_->StopCasting(sink.route->media_route_id());
 }
diff --git a/chrome/browser/ui/views/media_router/cast_dialog_view.h b/chrome/browser/ui/views/media_router/cast_dialog_view.h
index 8a8fe52..59b08e7 100644
--- a/chrome/browser/ui/views/media_router/cast_dialog_view.h
+++ b/chrome/browser/ui/views/media_router/cast_dialog_view.h
@@ -25,10 +25,6 @@
 
 class Profile;
 
-namespace gfx {
-class Canvas;
-}  // namespace gfx
-
 namespace media_router {
 
 class CastDialogSinkView;
@@ -69,9 +65,6 @@
   void OnModelUpdated(const CastDialogModel& model) override;
   void OnControllerDestroying() override;
 
-  // views::BubbleDialogDelegateView:
-  void OnPaint(gfx::Canvas* canvas) override;
-
   // ui::SimpleMenuModel::Delegate:
   bool IsCommandIdChecked(int command_id) const override;
   bool IsCommandIdEnabled(int command_id) const override;
diff --git a/chrome/browser/ui/views/passwords/password_add_username_view.cc b/chrome/browser/ui/views/passwords/password_add_username_view.cc
index 3fe26b6..7756d83 100644
--- a/chrome/browser/ui/views/passwords/password_add_username_view.cc
+++ b/chrome/browser/ui/views/passwords/password_add_username_view.cc
@@ -114,6 +114,8 @@
 
   std::unique_ptr<views::EditableCombobox> username_dropdown =
       CreateUsernameEditableCombobox(password_form);
+  username_dropdown->SetCallback(base::BindRepeating(
+      &PasswordAddUsernameView::OnUsernameChanged, base::Unretained(this)));
   username_dropdown_ = username_dropdown.get();
 
   std::unique_ptr<views::Label> password_label =
@@ -140,6 +142,7 @@
   SetFootnoteView(CreateFooterView());
   SetButtons((ui::DIALOG_BUTTON_OK | ui::DIALOG_BUTTON_CANCEL));
 
+  SetButtonEnabled(ui::DIALOG_BUTTON_OK, false);
   SetButtonLabel(ui::DIALOG_BUTTON_OK,
                  l10n_util::GetStringUTF16(IDS_ADD_USERNAME));
   SetButtonLabel(ui::DIALOG_BUTTON_CANCEL,
@@ -199,3 +202,8 @@
       IDS_PASSWORD_BUBBLES_PASSWORD_MANAGER_LINK_TEXT_SYNCED_TO_ACCOUNT,
       controller_.GetPrimaryAccountEmail(), open_password_manager_closure);
 }
+
+void PasswordAddUsernameView::OnUsernameChanged() {
+  SetButtonEnabled(ui::DIALOG_BUTTON_OK,
+                   !username_dropdown_->GetText().empty());
+}
diff --git a/chrome/browser/ui/views/passwords/password_add_username_view.h b/chrome/browser/ui/views/passwords/password_add_username_view.h
index df9e322a..2cd28dc 100644
--- a/chrome/browser/ui/views/passwords/password_add_username_view.h
+++ b/chrome/browser/ui/views/passwords/password_add_username_view.h
@@ -37,6 +37,7 @@
 
   void UpdateUsernameInModel();
   std::unique_ptr<views::View> CreateFooterView();
+  void OnUsernameChanged();
 
   AddUsernameBubbleController controller_;
   raw_ptr<views::EditableCombobox> username_dropdown_ = nullptr;
diff --git a/chrome/browser/ui/views/passwords/password_bubble_view_base.cc b/chrome/browser/ui/views/passwords/password_bubble_view_base.cc
index 3785c17..45046432 100644
--- a/chrome/browser/ui/views/passwords/password_bubble_view_base.cc
+++ b/chrome/browser/ui/views/passwords/password_bubble_view_base.cc
@@ -18,6 +18,7 @@
 #include "chrome/browser/ui/views/passwords/manage_passwords_icon_views.h"
 #include "chrome/browser/ui/views/passwords/manage_passwords_view.h"
 #include "chrome/browser/ui/views/passwords/move_to_account_store_bubble_view.h"
+#include "chrome/browser/ui/views/passwords/password_add_username_view.h"
 #include "chrome/browser/ui/views/passwords/password_auto_sign_in_view.h"
 #include "chrome/browser/ui/views/passwords/password_generation_confirmation_view.h"
 #include "chrome/browser/ui/views/passwords/password_save_unsynced_credentials_locally_view.h"
@@ -26,6 +27,7 @@
 #include "chrome/browser/ui/views/passwords/shared_passwords_notification_view.h"
 #include "chrome/browser/ui/views/toolbar/toolbar_view.h"
 #include "chrome/grit/generated_resources.h"
+#include "components/password_manager/core/browser/features/password_features.h"
 #include "components/password_manager/core/browser/password_form.h"
 #include "components/password_manager/core/common/password_manager_ui.h"
 #include "ui/views/controls/button/button.h"
@@ -86,8 +88,14 @@
   } else if (model_state == password_manager::ui::AUTO_SIGNIN_STATE) {
     view = new PasswordAutoSignInView(web_contents, anchor_view);
   } else if (model_state == password_manager::ui::CONFIRMATION_STATE) {
-    view = new PasswordGenerationConfirmationView(web_contents, anchor_view,
-                                                  reason);
+    if (base::FeatureList::IsEnabled(
+            password_manager::features::
+                kNewConfirmationBubbleForGeneratedPasswords)) {
+      view = new ManagePasswordsView(web_contents, anchor_view);
+    } else {
+      view = new PasswordGenerationConfirmationView(web_contents, anchor_view,
+                                                    reason);
+    }
   } else if (model_state ==
                  password_manager::ui::PENDING_PASSWORD_UPDATE_STATE ||
              model_state == password_manager::ui::PENDING_PASSWORD_STATE) {
@@ -103,6 +111,9 @@
              model_state ==
                  password_manager::ui::PASSWORD_UPDATED_MORE_TO_FIX) {
     view = new PostSaveCompromisedBubbleView(web_contents, anchor_view);
+  } else if (model_state ==
+             password_manager::ui::GENERATED_PASSWORD_CONFIRMATION_STATE) {
+    view = new PasswordAddUsernameView(web_contents, anchor_view, reason);
 #if BUILDFLAG(IS_MAC) || BUILDFLAG(IS_WIN)
   } else if (model_state ==
              password_manager::ui::BIOMETRIC_AUTHENTICATION_FOR_FILLING_STATE) {
diff --git a/chrome/browser/ui/views/side_panel/side_panel_interactive_uitest.cc b/chrome/browser/ui/views/side_panel/side_panel_interactive_uitest.cc
index 3a4024f..c7aed8b 100644
--- a/chrome/browser/ui/views/side_panel/side_panel_interactive_uitest.cc
+++ b/chrome/browser/ui/views/side_panel/side_panel_interactive_uitest.cc
@@ -196,12 +196,6 @@
       EnsureNotPresent(kReadLaterSidePanelWebViewElementId));
 }
 
-namespace {
-DEFINE_LOCAL_STATE_IDENTIFIER_VALUE(
-    ui::test::PollingStateObserver<absl::optional<SidePanelEntryId>>,
-    kCurrentSidePanelState);
-}
-
 // Test case for menus that only appear with the kSidePanelPinning feature
 // enabled.
 class PinnedSidePanelInteractiveTest : public InteractiveBrowserTest {
@@ -215,17 +209,6 @@
     InteractiveBrowserTest::SetUp();
   }
 
-  auto WatchSidePanelSelection() {
-    return PollState(kCurrentSidePanelState, [&]() {
-      auto* const side_panel = SidePanelUI::GetSidePanelUIForBrowser(browser());
-      return side_panel ? side_panel->GetCurrentEntryId() : absl::nullopt;
-    });
-  }
-
-  auto WaitForSidePanelSelection(SidePanelEntryId entry_id) {
-    return WaitForState(kCurrentSidePanelState, entry_id);
-  }
-
  private:
   base::test::ScopedFeatureList scoped_feature_list_;
 };
@@ -234,17 +217,12 @@
 // tools context menu.
 IN_PROC_BROWSER_TEST_F(PinnedSidePanelInteractiveTest,
                        OpenReadingModeSidePanel) {
-  SidePanelUtil::GetSidePanelCoordinatorForBrowser(browser())
-      ->SetNoDelaysForTesting(true);
+  SidePanelCoordinator* const coordinator =
+      SidePanelUtil::GetSidePanelCoordinatorForBrowser(browser());
+  coordinator->SetNoDelaysForTesting(true);
 
-  RunTestSequence(EnsureNotPresent(kSidePanelElementId),
-                  PressButton(kToolbarAppMenuButtonElementId),
-                  SelectMenuItem(AppMenuModel::kMoreToolsMenuItem),
-                  SelectMenuItem(ToolsMenuModel::kReadingModeMenuItem),
-                  WatchSidePanelSelection(), WaitForShow(kSidePanelElementId),
-                  FlushEvents(),
-                  WaitForSidePanelSelection(SidePanelEntryId::kReadAnything),
-                  // Click on the close button to dismiss the side panel.
-                  PressButton(kSidePanelCloseButtonElementId),
-                  WaitForHide(kSidePanelElementId));
+  chrome::ExecuteCommand(browser(), IDC_SHOW_READING_MODE_SIDE_PANEL);
+
+  EXPECT_EQ(SidePanelEntryKey(SidePanelEntryId::kReadAnything),
+            coordinator->GetCurrentSidePanelEntryForTesting()->key());
 }
diff --git a/chrome/browser/ui/views/user_education/browser_user_education_service.cc b/chrome/browser/ui/views/user_education/browser_user_education_service.cc
index 768e9f8..488a311 100644
--- a/chrome/browser/ui/views/user_education/browser_user_education_service.cc
+++ b/chrome/browser/ui/views/user_education/browser_user_education_service.cc
@@ -402,6 +402,13 @@
       kToolbarMediaButtonElementId,
       IDS_GLOBAL_MEDIA_CONTROLS_CONTROL_CAST_SESSIONS_PROMO));
 
+  // kIPHGMCLocalMediaCastingFeature:
+  registry.RegisterFeature(FeaturePromoSpecification::CreateForToastPromo(
+      feature_engagement::kIPHGMCLocalMediaCastingFeature,
+      kToolbarMediaButtonElementId, IDS_GMC_LOCAL_MEDIA_CAST_SESSIONS_PROMO,
+      IDS_GMC_LOCAL_MEDIA_CAST_START_PROMO,
+      FeaturePromoSpecification::AcceleratorInfo()));
+
   // kIPHPasswordsAccountStorageFeature:
   registry.RegisterFeature(std::move(
       FeaturePromoSpecification::CreateForLegacyPromo(
diff --git a/chrome/browser/ui/web_applications/web_app_link_capturing_browsertest.cc b/chrome/browser/ui/web_applications/web_app_link_capturing_browsertest.cc
index 7cd5c739..c308a9b 100644
--- a/chrome/browser/ui/web_applications/web_app_link_capturing_browsertest.cc
+++ b/chrome/browser/ui/web_applications/web_app_link_capturing_browsertest.cc
@@ -200,10 +200,10 @@
 #if BUILDFLAG(IS_CHROMEOS)
     apps_util::SetSupportedLinksPreferenceAndWait(profile(), app_id);
 #else
-    ScopedRegistryUpdate update = provider().sync_bridge_unsafe().BeginUpdate();
-    WebApp* app = update->UpdateApp(app_id);
-    CHECK(app);
-    app->SetIsUserSelectedAppForSupportedLinks(true);
+    base::test::TestFuture<void> preference_set;
+    provider().scheduler().SetAppCapturesSupportedLinksDisableOverlapping(
+        app_id, true, preference_set.GetCallback());
+    ASSERT_TRUE(preference_set.Wait());
 #endif  // BUILDFLAG(IS_CHROMEOS)
   }
 
diff --git a/chrome/browser/ui/webui/app_management/app_management_page_handler.cc b/chrome/browser/ui/webui/app_management/app_management_page_handler.cc
index 8e113bd..6b56ea2 100644
--- a/chrome/browser/ui/webui/app_management/app_management_page_handler.cc
+++ b/chrome/browser/ui/webui/app_management/app_management_page_handler.cc
@@ -14,6 +14,7 @@
 #include "base/containers/flat_map.h"
 #include "base/containers/flat_set.h"
 #include "base/debug/dump_without_crashing.h"
+#include "base/functional/callback_helpers.h"
 #include "base/i18n/message_formatter.h"
 #include "base/logging.h"
 #include "base/strings/strcat.h"
@@ -407,11 +408,9 @@
 #else
   web_app::WebAppProvider* provider =
       web_app::WebAppProvider::GetForWebApps(profile_);
-  provider->scheduler().ScheduleCallbackWithLock<web_app::AllAppsLock>(
-      "AppManagementPageHandler::MakeAppPreferredAndResetOthers",
-      std::make_unique<web_app::AllAppsLockDescription>(),
-      base::BindOnce(&AppManagementPageHandler::MakeAppPreferredAndResetOthers,
-                     weak_ptr_factory_.GetWeakPtr(), app_id, is_preferred_app));
+
+  provider->scheduler().SetAppCapturesSupportedLinksDisableOverlapping(
+      app_id, is_preferred_app, base::DoNothing());
 #endif  // BUILDFLAG(IS_CHROMEOS)
 }
 
@@ -769,52 +768,3 @@
     apps::PreferredAppsListHandle* handle) {
   preferred_apps_list_handle_observer_.Reset();
 }
-
-#if !BUILDFLAG(IS_CHROMEOS)
-void AppManagementPageHandler::MakeAppPreferredAndResetOthers(
-    const webapps::AppId& app_id,
-    bool set_to_preferred,
-    web_app::AllAppsLock& lock) {
-  bool is_already_preferred = lock.registrar().CapturesLinksInScope(app_id);
-
-  // Only update in web_app DB if the user selected choice does not match the
-  // one in the DB currently.
-  bool requires_update = (set_to_preferred && !is_already_preferred) ||
-                         (!set_to_preferred && is_already_preferred);
-
-  if (!requires_update) {
-    return;
-  }
-
-  // TODO(b/273830801): Automatically call observers when changes are committed
-  //  to the web_app DB.
-  for (const webapps::AppId& id : lock.registrar().GetAppIds()) {
-    if (id == app_id) {
-      {
-        web_app::ScopedRegistryUpdate update = lock.sync_bridge().BeginUpdate();
-        web_app::WebApp* app_to_update = update->UpdateApp(app_id);
-        app_to_update->SetIsUserSelectedAppForSupportedLinks(set_to_preferred);
-      }
-      lock.registrar().NotifyWebAppUserLinkCapturingPreferencesChanged(
-          app_id, set_to_preferred);
-    } else {
-      // For all other app_ids, if one is already set as the preferred, reset
-      // all other apps in the registry if they were previously set to be a
-      // preferred app to capture similar type of links according to scope
-      // prefixes.
-      if (set_to_preferred && lock.registrar().CapturesLinksInScope(id) &&
-          lock.registrar().AppScopesMatchForUserLinkCapturing(app_id, id)) {
-        {
-          web_app::ScopedRegistryUpdate update =
-              lock.sync_bridge().BeginUpdate();
-          web_app::WebApp* app_to_update = update->UpdateApp(id);
-          app_to_update->SetIsUserSelectedAppForSupportedLinks(
-              /*is_user_selected_app_for_capturing_links=*/false);
-        }
-        lock.registrar().NotifyWebAppUserLinkCapturingPreferencesChanged(
-            id, /*is_preferred=*/false);
-      }
-    }
-  }
-}
-#endif  // !BUILDFLAG(IS_CHROMEOS)
diff --git a/chrome/browser/ui/webui/app_management/app_management_page_handler.h b/chrome/browser/ui/webui/app_management/app_management_page_handler.h
index b226813..85caa65 100644
--- a/chrome/browser/ui/webui/app_management/app_management_page_handler.h
+++ b/chrome/browser/ui/webui/app_management/app_management_page_handler.h
@@ -118,12 +118,6 @@
   void OnPreferredAppsListWillBeDestroyed(
       apps::PreferredAppsListHandle* handle) override;
 
-#if !BUILDFLAG(IS_CHROMEOS)
-  void MakeAppPreferredAndResetOthers(const webapps::AppId& app_id,
-                                      bool set_to_preferred,
-                                      web_app::AllAppsLock& lock);
-#endif  // !BUILDFLAG(IS_CHROMEOS)
-
   mojo::Receiver<app_management::mojom::PageHandler> receiver_;
 
   mojo::Remote<app_management::mojom::Page> page_;
diff --git a/chrome/browser/ui/webui/ash/cloud_upload/cloud_open_metrics.cc b/chrome/browser/ui/webui/ash/cloud_upload/cloud_open_metrics.cc
index d5dd1f0..1c152601 100644
--- a/chrome/browser/ui/webui/ash/cloud_upload/cloud_open_metrics.cc
+++ b/chrome/browser/ui/webui/ash/cloud_upload/cloud_open_metrics.cc
@@ -11,7 +11,17 @@
 
 CloudOpenMetrics::CloudOpenMetrics(CloudProvider cloud_provider)
     : cloud_provider_(cloud_provider),
+      copy_error_(cloud_provider_ == CloudProvider::kGoogleDrive
+                      ? kGoogleDriveCopyErrorMetricName
+                      : kOneDriveCopyErrorMetricName),
+      move_error_(cloud_provider_ == CloudProvider::kGoogleDrive
+                      ? kGoogleDriveMoveErrorMetricName
+                      : kOneDriveMoveErrorMetricName),
+      drive_open_error_(kDriveErrorMetricName),
       one_drive_open_error_(kOneDriveErrorMetricName),
+      source_volume_(cloud_provider_ == CloudProvider::kGoogleDrive
+                         ? kDriveOpenSourceVolumeMetric
+                         : kOneDriveOpenSourceVolumeMetric),
       task_result_(cloud_provider_ == CloudProvider::kGoogleDrive
                        ? kGoogleDriveTaskResultMetricName
                        : kOneDriveTaskResultMetricName),
@@ -24,10 +34,26 @@
 
 CloudOpenMetrics::~CloudOpenMetrics() = default;
 
+void CloudOpenMetrics::LogCopyError(base::File::Error value) {
+  copy_error_.Log(value);
+}
+
+void CloudOpenMetrics::LogMoveError(base::File::Error value) {
+  move_error_.Log(value);
+}
+
+void CloudOpenMetrics::LogGoogleDriveOpenError(OfficeDriveOpenErrors value) {
+  drive_open_error_.Log(value);
+}
+
 void CloudOpenMetrics::LogOneDriveOpenError(OfficeOneDriveOpenErrors value) {
   one_drive_open_error_.Log(value);
 }
 
+void CloudOpenMetrics::LogSourceVolume(OfficeFilesSourceVolume value) {
+  source_volume_.Log(value);
+}
+
 void CloudOpenMetrics::LogTaskResult(OfficeTaskResult value) {
   task_result_.Log(value);
 }
@@ -55,7 +81,7 @@
 
 template <class MetricType>
 void CloudOpenMetrics::Metric<MetricType>::Log(MetricType value) {
-  base::UmaHistogramEnumeration(metric_name_, value);
+  LogMetric(value);
   if (state_ == MetricState::kCorrectlyNotLogged) {
     state_ = MetricState::kCorrectlyLogged;
   } else {
@@ -68,4 +94,17 @@
   value_ = value;
 }
 
+template <class MetricType>
+void CloudOpenMetrics::Metric<MetricType>::LogMetric(MetricType value) {
+  base::UmaHistogramEnumeration(metric_name_, value);
+}
+
+// Handle a value of type base::File::Error differently.
+template <>
+void CloudOpenMetrics::Metric<base::File::Error>::LogMetric(
+    base::File::Error value) {
+  base::UmaHistogramExactLinear(metric_name_, -value,
+                                -base::File::FILE_ERROR_MAX);
+}
+
 }  // namespace ash::cloud_upload
diff --git a/chrome/browser/ui/webui/ash/cloud_upload/cloud_open_metrics.h b/chrome/browser/ui/webui/ash/cloud_upload/cloud_open_metrics.h
index 989b124..bd8efda 100644
--- a/chrome/browser/ui/webui/ash/cloud_upload/cloud_open_metrics.h
+++ b/chrome/browser/ui/webui/ash/cloud_upload/cloud_open_metrics.h
@@ -28,9 +28,21 @@
   CloudOpenMetrics(const CloudOpenMetrics&&) = delete;
   CloudOpenMetrics& operator=(CloudOpenMetrics&&) = delete;
 
+  // Log the `value` for the CopyError metric.
+  void LogCopyError(base::File::Error value);
+
+  // Log the `value` for the MoveError metric.
+  void LogMoveError(base::File::Error value);
+
+  // Log the `value` for the DriveOpenError metric.
+  void LogGoogleDriveOpenError(OfficeDriveOpenErrors value);
+
   // Log the `value` for the OneDriveOpenError metric.
   void LogOneDriveOpenError(OfficeOneDriveOpenErrors value);
 
+  // Log the `value` for the SourceVolume metric.
+  void LogSourceVolume(OfficeFilesSourceVolume value);
+
   // Log the `value` for the TaskResult metric.
   void LogTaskResult(OfficeTaskResult value);
 
@@ -80,11 +92,16 @@
     MetricType value_;
 
    private:
+    void LogMetric(MetricType value);
     const std::string metric_name_;
   };
 
   CloudProvider cloud_provider_;
+  Metric<base::File::Error> copy_error_;
+  Metric<base::File::Error> move_error_;
+  Metric<OfficeDriveOpenErrors> drive_open_error_;
   Metric<OfficeOneDriveOpenErrors> one_drive_open_error_;
+  Metric<OfficeFilesSourceVolume> source_volume_;
   Metric<OfficeTaskResult> task_result_;
   Metric<OfficeFilesTransferRequired> transfer_required_;
   Metric<OfficeFilesUploadResult> upload_result_;
diff --git a/chrome/browser/ui/webui/ash/cloud_upload/cloud_upload_dialog.cc b/chrome/browser/ui/webui/ash/cloud_upload/cloud_upload_dialog.cc
index b2b6350..392ea57f 100644
--- a/chrome/browser/ui/webui/ash/cloud_upload/cloud_upload_dialog.cc
+++ b/chrome/browser/ui/webui/ash/cloud_upload/cloud_upload_dialog.cc
@@ -455,11 +455,7 @@
       source_volume = OfficeFilesSourceVolume::kUnknown;
     }
   }
-  if (cloud_provider_ == CloudProvider::kGoogleDrive) {
-    UMA_HISTOGRAM_ENUMERATION(kDriveOpenSourceVolumeMetric, source_volume);
-  } else if (cloud_provider_ == CloudProvider::kOneDrive) {
-    UMA_HISTOGRAM_ENUMERATION(kOneDriveOpenSourceVolumeMetric, source_volume);
-  }
+  cloud_open_metrics_->LogSourceVolume(source_volume);
 
   if (cloud_provider_ == CloudProvider::kGoogleDrive &&
       PathIsOnDriveFS(profile_, file_urls_.front().path())) {
@@ -864,7 +860,7 @@
 void CloudOpenTask::LogGoogleDriveOpenResultUMA(
     OfficeTaskResult success_task_result,
     OfficeDriveOpenErrors open_result) {
-  UMA_HISTOGRAM_ENUMERATION(kDriveErrorMetricName, open_result);
+  cloud_open_metrics_->LogGoogleDriveOpenError(open_result);
   cloud_open_metrics_->LogTaskResult(open_result ==
                                              OfficeDriveOpenErrors::kSuccess
                                          ? success_task_result
diff --git a/chrome/browser/ui/webui/ash/cloud_upload/drive_upload_handler.cc b/chrome/browser/ui/webui/ash/cloud_upload/drive_upload_handler.cc
index fcc6f31..cca0861 100644
--- a/chrome/browser/ui/webui/ash/cloud_upload/drive_upload_handler.cc
+++ b/chrome/browser/ui/webui/ash/cloud_upload/drive_upload_handler.cc
@@ -379,9 +379,11 @@
   base::File::Error file_error =
       GetFirstTaskError(status).value_or(base::File::FILE_ERROR_FAILED);
 
-  base::UmaHistogramExactLinear(
-      copy ? kGoogleDriveCopyErrorMetricName : kGoogleDriveMoveErrorMetricName,
-      -file_error, -base::File::FILE_ERROR_MAX);
+  if (copy) {
+    cloud_open_metrics_->LogCopyError(file_error);
+  } else {
+    cloud_open_metrics_->LogMoveError(file_error);
+  }
 
   switch (file_error) {
     case base::File::FILE_ERROR_NO_SPACE:
diff --git a/chrome/browser/ui/webui/ash/cloud_upload/one_drive_upload_handler.cc b/chrome/browser/ui/webui/ash/cloud_upload/one_drive_upload_handler.cc
index 2341e88d..05e909ae 100644
--- a/chrome/browser/ui/webui/ash/cloud_upload/one_drive_upload_handler.cc
+++ b/chrome/browser/ui/webui/ash/cloud_upload/one_drive_upload_handler.cc
@@ -262,9 +262,11 @@
   base::File::Error file_error =
       GetFirstTaskError(status).value_or(base::File::FILE_ERROR_FAILED);
 
-  base::UmaHistogramExactLinear(
-      copy ? kOneDriveCopyErrorMetricName : kOneDriveMoveErrorMetricName,
-      -file_error, -base::File::FILE_ERROR_MAX);
+  if (copy) {
+    cloud_open_metrics_->LogCopyError(file_error);
+  } else {
+    cloud_open_metrics_->LogMoveError(file_error);
+  }
 
   switch (file_error) {
     case base::File::FILE_ERROR_ACCESS_DENIED:
diff --git a/chrome/browser/web_applications/BUILD.gn b/chrome/browser/web_applications/BUILD.gn
index 9123813..03ab12c8 100644
--- a/chrome/browser/web_applications/BUILD.gn
+++ b/chrome/browser/web_applications/BUILD.gn
@@ -343,6 +343,13 @@
     ]
   }
 
+  if (!is_chromeos) {
+    sources += [
+      "jobs/link_capturing.cc",
+      "jobs/link_capturing.h",
+    ]
+  }
+
   if (is_chromeos_ash) {
     sources += [
       "web_app_system_web_app_delegate_map_utils.cc",
@@ -770,6 +777,10 @@
     ]
   }
 
+  if (!is_chromeos) {
+    sources += [ "jobs/link_capturing_unittest.cc" ]
+  }
+
   deps = [
     ":web_applications",
     ":web_applications_test_support",
diff --git a/chrome/browser/web_applications/jobs/link_capturing.cc b/chrome/browser/web_applications/jobs/link_capturing.cc
new file mode 100644
index 0000000..0f695f2
--- /dev/null
+++ b/chrome/browser/web_applications/jobs/link_capturing.cc
@@ -0,0 +1,70 @@
+// 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/web_applications/jobs/link_capturing.h"
+
+#include "base/values.h"
+#include "chrome/browser/web_applications/locks/all_apps_lock.h"
+#include "chrome/browser/web_applications/web_app.h"
+#include "chrome/browser/web_applications/web_app_registrar.h"
+#include "chrome/browser/web_applications/web_app_registry_update.h"
+#include "chrome/browser/web_applications/web_app_sync_bridge.h"
+
+namespace web_app {
+
+base::Value SetAppCapturesSupportedLinksDisableOverlapping(
+    const webapps::AppId& app_id,
+    bool set_to_preferred,
+    AllAppsLock& lock) {
+  base::Value::Dict debug_value;
+  debug_value.Set("app_id", app_id);
+  debug_value.Set("set_to_preferred", set_to_preferred);
+
+  bool is_already_preferred = lock.registrar().CapturesLinksInScope(app_id);
+
+  // Only update in web_app DB if the user selected choice does not match the
+  // one in the DB currently.
+  bool requires_update = (set_to_preferred && !is_already_preferred) ||
+                         (!set_to_preferred && is_already_preferred);
+
+  debug_value.Set("requires_update", requires_update);
+  if (!requires_update) {
+    return base::Value(std::move(debug_value));
+  }
+
+  // TODO(b/273830801): Automatically call observers when changes are committed
+  // to the web_app DB.
+  for (const webapps::AppId& id : lock.registrar().GetAppIds()) {
+    if (id == app_id) {
+      {
+        ScopedRegistryUpdate update = lock.sync_bridge().BeginUpdate();
+        WebApp* app_to_update = update->UpdateApp(app_id);
+        app_to_update->SetIsUserSelectedAppForSupportedLinks(set_to_preferred);
+      }
+      debug_value.Set("app_updated", true);
+      lock.registrar().NotifyWebAppUserLinkCapturingPreferencesChanged(
+          app_id, set_to_preferred);
+    } else {
+      // For all other app_ids, if one is already set as the preferred, reset
+      // all other apps in the registry if they were previously set to be a
+      // preferred app to capture similar type of links according to scope
+      // prefixes.
+      if (set_to_preferred && lock.registrar().CapturesLinksInScope(id) &&
+          lock.registrar().AppScopesMatchForUserLinkCapturing(app_id, id)) {
+        {
+          ScopedRegistryUpdate update = lock.sync_bridge().BeginUpdate();
+          WebApp* app_to_update = update->UpdateApp(id);
+          app_to_update->SetIsUserSelectedAppForSupportedLinks(
+              /*is_user_selected_app_for_capturing_links=*/false);
+        }
+        debug_value.EnsureList("capturing_apps_disabled")->Append(id);
+        lock.registrar().NotifyWebAppUserLinkCapturingPreferencesChanged(
+            id, /*is_preferred=*/false);
+      }
+    }
+  }
+  return base::Value(std::move(debug_value));
+}
+
+}  // namespace web_app
diff --git a/chrome/browser/web_applications/jobs/link_capturing.h b/chrome/browser/web_applications/jobs/link_capturing.h
new file mode 100644
index 0000000..c34408a
--- /dev/null
+++ b/chrome/browser/web_applications/jobs/link_capturing.h
@@ -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.
+
+#ifndef CHROME_BROWSER_WEB_APPLICATIONS_JOBS_LINK_CAPTURING_H_
+#define CHROME_BROWSER_WEB_APPLICATIONS_JOBS_LINK_CAPTURING_H_
+
+#include "components/webapps/common/web_app_id.h"
+
+namespace base {
+class Value;
+}  // namespace base
+
+namespace web_app {
+class AllAppsLock;
+
+base::Value SetAppCapturesSupportedLinksDisableOverlapping(
+    const webapps::AppId& app_id,
+    bool set_to_preferred,
+    AllAppsLock& lock);
+
+}  // namespace web_app
+
+#endif  // CHROME_BROWSER_WEB_APPLICATIONS_JOBS_LINK_CAPTURING_H_
diff --git a/chrome/browser/web_applications/jobs/link_capturing_unittest.cc b/chrome/browser/web_applications/jobs/link_capturing_unittest.cc
new file mode 100644
index 0000000..f694838
--- /dev/null
+++ b/chrome/browser/web_applications/jobs/link_capturing_unittest.cc
@@ -0,0 +1,98 @@
+// 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/web_applications/jobs/link_capturing.h"
+
+#include "base/test/test_future.h"
+#include "chrome/browser/web_applications/test/web_app_install_test_utils.h"
+#include "chrome/browser/web_applications/test/web_app_test.h"
+#include "chrome/browser/web_applications/web_app_command_scheduler.h"
+#include "chrome/browser/web_applications/web_app_install_info.h"
+#include "chrome/browser/web_applications/web_app_provider.h"
+#include "chrome/browser/web_applications/web_app_registrar.h"
+#include "components/webapps/common/web_app_id.h"
+#include "testing/gtest/include/gtest/gtest.h"
+#include "url/gurl.h"
+
+namespace web_app {
+namespace {
+
+class LinkCapturingJobTest : public WebAppTest {
+ public:
+  const GURL kTestAppUrl = GURL("https://example.com/index.html");
+  const GURL kTestOverlappingAppUrl = GURL("https://example.com/index2.html");
+  const GURL kTestAppCapturablePage = GURL("https://example.com/page.html");
+
+  LinkCapturingJobTest() = default;
+  ~LinkCapturingJobTest() override = default;
+
+  void SetUp() override {
+    WebAppTest::SetUp();
+    test::AwaitStartWebAppProviderAndSubsystems(profile());
+  }
+
+  WebAppProvider* provider() { return WebAppProvider::GetForTest(profile()); }
+};
+
+TEST_F(LinkCapturingJobTest, SingleAppEnabled) {
+  webapps::AppId app_id = test::InstallWebApp(
+      profile(), WebAppInstallInfo::CreateWithStartUrlForTesting(kTestAppUrl));
+
+  EXPECT_TRUE(provider()->registrar_unsafe().IsLinkCapturableByApp(
+      app_id, kTestAppCapturablePage));
+  EXPECT_FALSE(provider()->registrar_unsafe().CapturesLinksInScope(app_id));
+  EXPECT_EQ(absl::nullopt,
+            provider()->registrar_unsafe().FindAppThatCapturesLinksInScope(
+                kTestAppCapturablePage));
+
+  base::test::TestFuture<void> preference_set;
+  provider()->scheduler().SetAppCapturesSupportedLinksDisableOverlapping(
+      app_id, true, preference_set.GetCallback());
+  ASSERT_TRUE(preference_set.Wait());
+
+  EXPECT_TRUE(provider()->registrar_unsafe().IsLinkCapturableByApp(
+      app_id, kTestAppCapturablePage));
+  EXPECT_TRUE(provider()->registrar_unsafe().CapturesLinksInScope(app_id));
+  EXPECT_EQ(app_id,
+            provider()->registrar_unsafe().FindAppThatCapturesLinksInScope(
+                kTestAppCapturablePage));
+}
+
+TEST_F(LinkCapturingJobTest, DisablesOtherApps) {
+  webapps::AppId app1_id = test::InstallWebApp(
+      profile(), WebAppInstallInfo::CreateWithStartUrlForTesting(kTestAppUrl));
+  webapps::AppId app2_id = test::InstallWebApp(
+      profile(),
+      WebAppInstallInfo::CreateWithStartUrlForTesting(kTestOverlappingAppUrl));
+
+  {
+    base::test::TestFuture<void> preference_set;
+    provider()->scheduler().SetAppCapturesSupportedLinksDisableOverlapping(
+        app1_id, true, preference_set.GetCallback());
+    ASSERT_TRUE(preference_set.Wait());
+  }
+
+  EXPECT_TRUE(provider()->registrar_unsafe().CapturesLinksInScope(app1_id));
+
+  // This should disable link capturing on the first app, and enable it on the
+  // second app.
+  {
+    base::test::TestFuture<void> preference_set;
+    provider()->scheduler().SetAppCapturesSupportedLinksDisableOverlapping(
+        app2_id, true, preference_set.GetCallback());
+    ASSERT_TRUE(preference_set.Wait());
+  }
+
+  // The first app should have this disabled.
+  EXPECT_FALSE(provider()->registrar_unsafe().CapturesLinksInScope(app1_id));
+
+  // It should be set up on the second app.
+  EXPECT_TRUE(provider()->registrar_unsafe().CapturesLinksInScope(app2_id));
+  EXPECT_EQ(app2_id,
+            provider()->registrar_unsafe().FindAppThatCapturesLinksInScope(
+                kTestAppCapturablePage));
+}
+
+}  // namespace
+}  // namespace web_app
diff --git a/chrome/browser/web_applications/web_app_command_scheduler.cc b/chrome/browser/web_applications/web_app_command_scheduler.cc
index 32dd56d..47865e9 100644
--- a/chrome/browser/web_applications/web_app_command_scheduler.cc
+++ b/chrome/browser/web_applications/web_app_command_scheduler.cc
@@ -11,13 +11,14 @@
 #include "base/files/file_path.h"
 #include "base/functional/bind.h"
 #include "base/functional/callback.h"
-#include "base/functional/callback_forward.h"
+#include "base/functional/callback_helpers.h"
 #include "base/location.h"
 #include "base/metrics/histogram_functions.h"
 #include "base/task/sequenced_task_runner.h"
 #include "base/types/expected.h"
 #include "base/values.h"
 #include "base/version.h"
+#include "build/build_config.h"
 #include "chrome/browser/profiles/keep_alive/profile_keep_alive_types.h"
 #include "chrome/browser/profiles/keep_alive/scoped_profile_keep_alive.h"
 #include "chrome/browser/profiles/profile.h"
@@ -73,6 +74,10 @@
 #include "content/public/browser/web_contents.h"
 #include "third_party/abseil-cpp/absl/types/optional.h"
 
+#if !BUILDFLAG(IS_CHROMEOS)
+#include "chrome/browser/web_applications/jobs/link_capturing.h"
+#endif
+
 namespace web_app {
 
 WebAppCommandScheduler::WebAppCommandScheduler(Profile& profile)
@@ -827,6 +832,28 @@
       location);
 }
 
+void WebAppCommandScheduler::SetAppCapturesSupportedLinksDisableOverlapping(
+    const webapps::AppId app_id,
+    bool set_to_preferred,
+    base::OnceClosure done,
+    const base::Location& location) {
+#if BUILDFLAG(IS_CHROMEOS)
+  NOTREACHED() << "Preferred apps in ChromeOS are implemented in AppService";
+#else
+  if (IsShuttingDown()) {
+    base::SequencedTaskRunner::GetCurrentDefault()->PostTask(FROM_HERE,
+                                                             std::move(done));
+    return;
+  }
+
+  ScheduleCallbackWithLock(
+      "SetAppCapturesSupporedLinks", std::make_unique<AllAppsLockDescription>(),
+      base::BindOnce(::web_app::SetAppCapturesSupportedLinksDisableOverlapping,
+                     app_id, set_to_preferred),
+      location, std::move(done));
+#endif
+}
+
 void WebAppCommandScheduler::LaunchApp(apps::AppLaunchParams params,
                                        LaunchWebAppWindowSetting option,
                                        LaunchWebAppCallback callback,
diff --git a/chrome/browser/web_applications/web_app_command_scheduler.h b/chrome/browser/web_applications/web_app_command_scheduler.h
index d7384c3..6750a15b 100644
--- a/chrome/browser/web_applications/web_app_command_scheduler.h
+++ b/chrome/browser/web_applications/web_app_command_scheduler.h
@@ -31,6 +31,7 @@
 #include "chrome/browser/web_applications/web_app_install_params.h"
 #include "chrome/browser/web_applications/web_app_ui_manager.h"
 #include "components/webapps/browser/installable/installable_metrics.h"
+#include "components/webapps/common/web_app_id.h"
 #include "third_party/abseil-cpp/absl/types/optional.h"
 
 class GURL;
@@ -414,6 +415,17 @@
   void ScheduleDedupeInstallUrls(base::OnceClosure callback,
                                  const base::Location& location = FROM_HERE);
 
+  // Sets the user preference for link capturing for the given app. If
+  // `set_to_preferred` is true, then links in the browser can be launched in
+  // the app corresponding to app_id, respecting the app's launch handler
+  // preferences. Additionally, if there are multiple apps within the same
+  // scope, this will reset the preference on those apps to false.
+  void SetAppCapturesSupportedLinksDisableOverlapping(
+      const webapps::AppId app_id,
+      bool set_to_preferred,
+      base::OnceClosure done,
+      const base::Location& location = FROM_HERE);
+
   // TODO(https://crbug.com/1298130): expose all commands for web app
   // operations.
 
diff --git a/chrome/browser/web_applications/web_app_install_info.cc b/chrome/browser/web_applications/web_app_install_info.cc
index ccc1c88..91ffe94 100644
--- a/chrome/browser/web_applications/web_app_install_info.cc
+++ b/chrome/browser/web_applications/web_app_install_info.cc
@@ -282,8 +282,10 @@
 // static
 std::unique_ptr<WebAppInstallInfo>
 WebAppInstallInfo::CreateWithStartUrlForTesting(const GURL& start_url) {
-  return std::make_unique<WebAppInstallInfo>(
+  auto info = std::make_unique<WebAppInstallInfo>(
       GenerateManifestIdFromStartUrlOnly(start_url), start_url);
+  info->scope = start_url.GetWithoutFilename();
+  return info;
 }
 
 WebAppInstallInfo::WebAppInstallInfo() = default;
diff --git a/chrome/build/android-arm32.pgo.txt b/chrome/build/android-arm32.pgo.txt
index 310c1c2..ec7d9f1 100644
--- a/chrome/build/android-arm32.pgo.txt
+++ b/chrome/build/android-arm32.pgo.txt
@@ -1 +1 @@
-chrome-android32-main-1696960791-c4572a9ba628afff87d3b6b6c86581902db8bb75.profdata
+chrome-android32-main-1697003727-8148b49700725e91eb3fb2091b6f2cfb69346d43.profdata
diff --git a/chrome/build/android-arm64.pgo.txt b/chrome/build/android-arm64.pgo.txt
index 92c6bdb..e91f1fd0 100644
--- a/chrome/build/android-arm64.pgo.txt
+++ b/chrome/build/android-arm64.pgo.txt
@@ -1 +1 @@
-chrome-android64-main-1696960791-a3891e7ce1d554df5a87e1851505500505865333.profdata
+chrome-android64-main-1697003727-3b7ac5d219fbc705db6181a22392c7a70087ddbd.profdata
diff --git a/chrome/build/lacros64.pgo.txt b/chrome/build/lacros64.pgo.txt
index 50771e1..1d3a119 100644
--- a/chrome/build/lacros64.pgo.txt
+++ b/chrome/build/lacros64.pgo.txt
@@ -1 +1 @@
-chrome-chromeos-amd64-generic-main-1696939335-41449fcd2e91b6f1994759f74df32f32593fe04a.profdata
+chrome-chromeos-amd64-generic-main-1696982576-6e190c4923762996809b9d0d43cae6992d853643.profdata
diff --git a/chrome/build/linux.pgo.txt b/chrome/build/linux.pgo.txt
index 07f5e313..8a4fbbb6f 100644
--- a/chrome/build/linux.pgo.txt
+++ b/chrome/build/linux.pgo.txt
@@ -1 +1 @@
-chrome-linux-main-1696960791-718dce9755181af7b5ea08010e46d347813a33da.profdata
+chrome-linux-main-1696982384-19605558a553a7b8b8dab5b93eba02f284e23665.profdata
diff --git a/chrome/build/mac-arm.pgo.txt b/chrome/build/mac-arm.pgo.txt
index 70cab83..5fd2291 100644
--- a/chrome/build/mac-arm.pgo.txt
+++ b/chrome/build/mac-arm.pgo.txt
@@ -1 +1 @@
-chrome-mac-arm-main-1696975158-c8dcbb0eea3dc510a58d17c99d90ffbf15bf8ce9.profdata
+chrome-mac-arm-main-1696996622-adf0748864e5fb5359e78b3168488e54a5720c48.profdata
diff --git a/chrome/build/mac.pgo.txt b/chrome/build/mac.pgo.txt
index 8d74bb8..844aca6 100644
--- a/chrome/build/mac.pgo.txt
+++ b/chrome/build/mac.pgo.txt
@@ -1 +1 @@
-chrome-mac-main-1696960791-5613ca688c1e1cb48339cef54abab1e4cee45095.profdata
+chrome-mac-main-1696982384-c8cf68ed226c26fe9b6051fc18b2611cbfd091da.profdata
diff --git a/chrome/build/win-arm64.pgo.txt b/chrome/build/win-arm64.pgo.txt
index 271deac..bb385e50 100644
--- a/chrome/build/win-arm64.pgo.txt
+++ b/chrome/build/win-arm64.pgo.txt
@@ -1 +1 @@
-chrome-win-arm64-main-1696960791-10e6e5bc24faa6771b8d77e3f7155a93fffc3bd7.profdata
+chrome-win-arm64-main-1696982384-65a3766b95569e897c098be7917f2800bb7fe1e2.profdata
diff --git a/chrome/build/win32.pgo.txt b/chrome/build/win32.pgo.txt
index 96945025..1554429 100644
--- a/chrome/build/win32.pgo.txt
+++ b/chrome/build/win32.pgo.txt
@@ -1 +1 @@
-chrome-win32-main-1696960791-53c62ef92c4f0d599ad3fbe91841eea59909a5a6.profdata
+chrome-win32-main-1696993044-2e30de9dc1d057f2af10ce6277ad890589c7aff6.profdata
diff --git a/chrome/build/win64.pgo.txt b/chrome/build/win64.pgo.txt
index 984740b..95819d22 100644
--- a/chrome/build/win64.pgo.txt
+++ b/chrome/build/win64.pgo.txt
@@ -1 +1 @@
-chrome-win64-main-1696960791-559705329bff7c798076b7924e71eec09535f8e8.profdata
+chrome-win64-main-1696993044-55679c0a0642c04c5867c6b766763319679c5764.profdata
diff --git a/chrome/common/extensions/api/accessibility_private.json b/chrome/common/extensions/api/accessibility_private.json
index 1fb40f8..ab8d7b3 100644
--- a/chrome/common/extensions/api/accessibility_private.json
+++ b/chrome/common/extensions/api/accessibility_private.json
@@ -531,7 +531,7 @@
         "parameters": [
           {
             "type": "boolean",
-            "name": "enabled",
+            "name": "darken",
             "description": "True to darken screen; false to undarken screen."
           }
         ]
diff --git a/chrome/renderer/extensions/api/printing_hooks_delegate.cc b/chrome/renderer/extensions/api/printing_hooks_delegate.cc
index 8f1a8732..f06a8631 100644
--- a/chrome/renderer/extensions/api/printing_hooks_delegate.cc
+++ b/chrome/renderer/extensions/api/printing_hooks_delegate.cc
@@ -8,6 +8,7 @@
 #include "extensions/renderer/v8_helpers.h"
 #include "gin/dictionary.h"
 #include "third_party/blink/public/web/web_blob.h"
+#include "v8/include/v8-primitive.h"
 
 namespace extensions {
 
@@ -52,6 +53,14 @@
 RequestResult PrintingHooksDelegate::HandleSubmitJob(
     v8::Isolate* isolate,
     std::vector<v8::Local<v8::Value>>* arguments) {
+  // If being called without the callback parameter (i.e. a promise based API
+  // call) the bindings require the final argument to be filled out with a null
+  // argument instead.
+  // TODO(tjudkins): It would be good to fix the logic to not require this. For
+  // more details see the comment in APIBindingJSUtil::SendRequest.
+  if (arguments->size() == 1u) {
+    arguments->push_back(v8::Null(isolate));
+  }
   DCHECK_EQ(2u, arguments->size());
   DCHECK((*arguments)[0]->IsObject());
 
diff --git a/chrome/test/BUILD.gn b/chrome/test/BUILD.gn
index 81a3c09..0db0ceb 100644
--- a/chrome/test/BUILD.gn
+++ b/chrome/test/BUILD.gn
@@ -21,7 +21,6 @@
 import("//chrome/common/features.gni")
 
 import("//chrome/services/speech/buildflags/buildflags.gni")
-import("//chrome/test/base/js2gtest.gni")
 import("//chrome/test/include_js_tests.gni")
 import("//chrome/version.gni")
 import("//chromeos/ash/components/assistant/assistant.gni")
@@ -66,6 +65,10 @@
   import("//tools/perf/chrome_telemetry_build/android_browser_types.gni")
 }
 
+if (is_chromeos_ash && include_js2gtest_tests) {
+  import("//chrome/test/base/js2gtest.gni")
+}
+
 # This target exists to reference other test executables to bring these files
 # into the build.
 group("test") {
@@ -2025,7 +2028,13 @@
       "//ui/webui/resources/",
     ]
 
-    data += js2gtest_js_libraries
+    if (is_chromeos_ash) {
+      # Libraries for tests that inherit from BaseWebUIBrowserTest.
+      data += [
+        "//third_party/node/node_modules/chai/chai.js",
+        "//chrome/test/data/webui/test_api.js",
+      ]
+    }
     data += metric_integration_jsdeps
 
     sources = [
@@ -2711,7 +2720,6 @@
       "base/save_desktop_snapshot_browsertest.cc",
       "base/test_chrome_web_ui_controller_factory_browsertest.cc",
       "base/ui_test_utils_browsertest.cc",
-      "base/web_ui_browser_test_browsertest.cc",
       "base/web_ui_mocha_browser_test_browsertest.cc",
       "data/webui/mojo/mojo_file_system_access_browsertest.cc",
       "data/webui/mojo/mojo_js_interface_broker_browsertest.cc",
@@ -2853,6 +2861,7 @@
         "../browser/sessions/tab_restore_service_browsertest.cc",
         "../browser/support_tool/signin_data_collector_browsertest.cc",
         "../browser/ui/views/web_apps/web_app_integration_browsertest_cros.cc",
+        "base/web_ui_browser_test_browsertest.cc",
         "data/webui/async_gen.cc",
         "data/webui/async_gen.h",
         "data/webui/chromeos/webui_resource_browsertest.cc",
@@ -3183,26 +3192,25 @@
     if (include_js_tests) {
       deps += [ "//chrome/test/data/webui:browser_tests" ]
     }
-    if (include_js2gtest_tests) {
-      deps += [ "//chrome/test/data/webui:browser_tests_js_webui" ]
-      if (is_chromeos_ash) {
-        deps += [
-          "//ash/webui/color_internals:browser_tests_js",
-          "//ash/webui/eche_app_ui:browser_tests_js",
-          "//ash/webui/help_app_ui:browser_tests_js",
-          "//ash/webui/media_app_ui:browser_tests_js",
-          "//ash/webui/system_apps:browser_tests",
-          "//ash/webui/system_extensions_internals_ui:browser_tests_js",
-          "//chrome/test/data/webui:browser_tests_js_mojo_lite_webui",
-          "//chrome/test/data/webui:browser_tests_js_mojo_webui",
-          "//chromeos/ash/components/human_presence:browser_tests_js",
-        ]
+    if (is_chromeos_ash && include_js2gtest_tests) {
+      deps += [
+        "//ash/webui/color_internals:browser_tests_js",
+        "//ash/webui/eche_app_ui:browser_tests_js",
+        "//ash/webui/help_app_ui:browser_tests_js",
+        "//ash/webui/media_app_ui:browser_tests_js",
+        "//ash/webui/system_apps:browser_tests",
+        "//ash/webui/system_extensions_internals_ui:browser_tests_js",
+        "//chrome/test/data/webui:browser_tests_js_mojo_lite_webui",
+        "//chrome/test/data/webui:browser_tests_js_mojo_webui",
+        "//chrome/test/data/webui:browser_tests_js_webui",
+        "//chromeos/ash/components/human_presence:browser_tests_js",
+      ]
 
-        data_deps += [ "//chrome/test/data/webui:browser_tests_js_webui" ]
+      data += js2gtest_js_libraries
+      data_deps += [ "//chrome/test/data/webui:browser_tests_js_webui" ]
 
-        if (!is_official_build) {
-          deps += [ "//ash/webui/sample_system_web_app_ui:browser_tests_js" ]
-        }
+      if (!is_official_build) {
+        deps += [ "//ash/webui/sample_system_web_app_ui:browser_tests_js" ]
       }
     }
 
@@ -5335,7 +5343,6 @@
       "//chrome/app:command_ids",
       "//chrome/browser/chromeos",
       "//chrome/browser/chromeos:test_support",
-      "//chrome/browser/chromeos/extensions/telemetry/api:browser_tests",
       "//chromeos/crosapi/mojom",
       "//chromeos/lacros",
       "//chromeos/lacros:test_support",
@@ -5493,6 +5500,7 @@
       "//chrome/browser/apps/link_capturing",
       "//chrome/browser/chromeos",
       "//chrome/browser/chromeos:test_support",
+      "//chrome/browser/chromeos/extensions/telemetry/api:browser_tests",
       "//chrome/browser/chromeos/extensions/vpn_provider",
       "//chrome/browser/chromeos/extensions/wm",
       "//chrome/browser/media/router:test_support",
@@ -6475,7 +6483,6 @@
     data += [ "data/" ]
   }
 
-  data += js2gtest_js_libraries
   if (is_android) {
     data += [
       "$root_gen_dir/chrome/android/chrome_apk_paks/chrome_100_percent.pak",
@@ -8056,6 +8063,7 @@
     data += [ "//ash/components/arc/test/data/icons/" ]
 
     if (include_js2gtest_tests && is_chromeos_ash) {
+      data += js2gtest_js_libraries
       deps +=
           [ "//chrome/browser/resources/chromeos/accessibility:unit_tests_js" ]
     }
@@ -10022,8 +10030,6 @@
       "base/test_chrome_web_ui_controller_factory.h",
       "base/ui_test_utils.cc",
       "base/ui_test_utils.h",
-      "base/web_ui_browser_test.cc",
-      "base/web_ui_browser_test.h",
       "base/web_ui_mocha_browser_test.cc",
       "base/web_ui_mocha_browser_test.h",
       "base/web_ui_test_data_source.cc",
@@ -10224,6 +10230,8 @@
       sources += [
         "base/mojo_web_ui_browser_test.cc",
         "base/mojo_web_ui_browser_test.h",
+        "base/web_ui_browser_test.cc",
+        "base/web_ui_browser_test.h",
       ]
       deps += [
         "//ash",
@@ -10466,7 +10474,6 @@
       "//tools/metrics/histograms/enums.xml",
       "//ui/webui/resources/js/",
     ]
-    data += js2gtest_js_libraries
 
     defines = [ "HAS_OUT_OF_PROC_TEST_RUNNER" ]
     ldflags = []
@@ -10590,6 +10597,7 @@
       deps += [ "//chrome/test/data/webui:interactive_ui_tests" ]
     }
     if (include_js2gtest_tests && is_chromeos_ash) {
+      data += js2gtest_js_libraries
       deps += [ "//chrome/test/data/webui:interactive_ui_tests_js_webui" ]
     }
 
@@ -11842,27 +11850,12 @@
 }
 
 if (is_win) {
-  action("generate_allowed_imports") {
-    testonly = true
-    script = "delayload/generate_allowed_imports.py"
-    sources = [ "delayload/supported_imports_10.0.10240.txt" ]
-    outputs = [ "$target_gen_dir/chrome/test/delayload/supported_imports.inc" ]
-    args = [
-      "--exports-file",
-      rebase_path("delayload/supported_imports_10.0.10240.txt", root_build_dir),
-      "--out-file",
-      rebase_path("$target_gen_dir/chrome/test/delayload/supported_imports.inc",
-                  root_build_dir),
-    ]
-  }
-
   test("delayloads_unittests") {
     output_name = "delayloads_unittests"
     sources = [ "delayload/delayloads_unittest.cc" ]
 
     include_dirs = [ "$target_gen_dir" ]
     deps = [
-      ":generate_allowed_imports",
       "//base",
       "//base/test:test_support",
       "//chrome",
diff --git a/chrome/test/base/js2gtest.gni b/chrome/test/base/js2gtest.gni
index 08e9f852..e4ba4ac7 100644
--- a/chrome/test/base/js2gtest.gni
+++ b/chrome/test/base/js2gtest.gni
@@ -2,9 +2,12 @@
 # Use of this source code is governed by a BSD-style license that can be
 # found in the LICENSE file.
 
+import("//build/config/chromeos/ui_mode.gni")
 import("//v8/gni/snapshot_toolchain.gni")
 import("//v8/gni/v8.gni")
 
+assert(is_chromeos_ash)
+
 # Libraries required to generate the custom test library built with js2gtest.
 # Changing the size or the order of files in this array also requires changing
 # src/chrome/test/base/v8sh.py.
diff --git a/chrome/test/data/extensions/api_test/printing/printing_util.js b/chrome/test/data/extensions/api_test/printing/printing_util.js
index ef416a5..72b8c4c 100644
--- a/chrome/test/data/extensions/api_test/printing/printing_util.js
+++ b/chrome/test/data/extensions/api_test/printing/printing_util.js
@@ -41,3 +41,10 @@
     chrome.printing.submitJob(submitJobRequest, callback);
   });
 }
+
+async function submitJobPromise(printerId, title, url) {
+  let response = await fetch(url);
+  let arrayBuffer = await response.arrayBuffer();
+  const submitJobRequest = formatPrintJobRequest(printerId, title, arrayBuffer);
+  return chrome.printing.submitJob(submitJobRequest);
+}
diff --git a/chrome/test/data/extensions/api_test/printing/submit_job_promise.html b/chrome/test/data/extensions/api_test/printing/submit_job_promise.html
new file mode 100644
index 0000000..f5d8062
--- /dev/null
+++ b/chrome/test/data/extensions/api_test/printing/submit_job_promise.html
@@ -0,0 +1,7 @@
+<!--
+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.
+-->
+<script src="printing_util.js"></script>
+<script src="submit_job_promise.js"></script>
diff --git a/chrome/test/data/extensions/api_test/printing/submit_job_promise.js b/chrome/test/data/extensions/api_test/printing/submit_job_promise.js
new file mode 100644
index 0000000..3537bad
--- /dev/null
+++ b/chrome/test/data/extensions/api_test/printing/submit_job_promise.js
@@ -0,0 +1,13 @@
+// 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.
+
+chrome.test.getConfig(async function(config) {
+  const url = `http://localhost:${config.testServer.port}/pdf/test.pdf`;
+  let response = await submitJobPromise('id', 'test job', url);
+  chrome.test.assertTrue(!!response);
+  chrome.test.assertEq(chrome.printing.SubmitJobStatus.OK, response.status);
+  chrome.test.assertTrue(!!response.jobId);
+
+  chrome.test.notifyPass();
+});
diff --git a/chrome/test/data/extensions/back_forward_cache/content_script_all_frames/background.js b/chrome/test/data/extensions/back_forward_cache/content_script_all_frames/background.js
new file mode 100644
index 0000000..2d5c331
--- /dev/null
+++ b/chrome/test/data/extensions/back_forward_cache/content_script_all_frames/background.js
@@ -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.
+
+chrome.runtime.onConnectExternal.addListener((p) => {
+  p.postMessage('connected');
+  p.onMessage.addListener((m) => {
+    if (m == 'disconnect') {
+      p.disconnect();
+    }
+  })
+});
diff --git a/chrome/test/data/extensions/back_forward_cache/content_script_all_frames/content_script.js b/chrome/test/data/extensions/back_forward_cache/content_script_all_frames/content_script.js
new file mode 100644
index 0000000..39cedd0
--- /dev/null
+++ b/chrome/test/data/extensions/back_forward_cache/content_script_all_frames/content_script.js
@@ -0,0 +1,14 @@
+// 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.
+
+document.title = "modified";
+
+chrome.runtime.onConnect.addListener((p) => {
+  p.postMessage('connected');
+  p.onMessage.addListener((m) => {
+    if (m == 'disconnect') {
+      p.disconnect();
+    }
+  });
+});
diff --git a/chrome/test/data/extensions/back_forward_cache/content_script_all_frames/manifest.json b/chrome/test/data/extensions/back_forward_cache/content_script_all_frames/manifest.json
new file mode 100644
index 0000000..0178cc1
--- /dev/null
+++ b/chrome/test/data/extensions/back_forward_cache/content_script_all_frames/manifest.json
@@ -0,0 +1,34 @@
+{
+  "name": "no caching",
+  "version": "0.1",
+  "manifest_version": 2,
+  "description": "Checks that content scripts do prevent back forward cache.",
+  "permissions": [
+    "http://*/*",
+    "https://*/*"
+  ],
+  "externally_connectable": {
+    "matches": [
+      "*://a.com/*"
+    ]
+  },
+  "content_scripts": [
+    {
+      "matches": [
+        "http://*/*",
+        "https://*/*"
+      ],
+      "js": [
+        "content_script.js"
+      ],
+      "run_at": "document_end",
+      "all_frames": true
+    }
+  ],
+  "background": {
+    "scripts": [
+      "background.js"
+    ],
+    "persistent": false
+  }
+}
\ No newline at end of file
diff --git a/chrome/test/data/webui/BUILD.gn b/chrome/test/data/webui/BUILD.gn
index 9bb54fc3..82f08a30 100644
--- a/chrome/test/data/webui/BUILD.gn
+++ b/chrome/test/data/webui/BUILD.gn
@@ -6,7 +6,6 @@
 import("//build/config/chromeos/ui_mode.gni")
 import("//build/config/ui.gni")
 import("//chrome/common/features.gni")
-import("//chrome/test/base/js2gtest.gni")
 import("//chrome/test/include_js_tests.gni")
 import("//components/compose/features.gni")
 import("//components/signin/features.gni")
@@ -20,6 +19,10 @@
 import("//ui/webui/resources/tools/generate_grd.gni")
 import("//ui/webui/webui_features.gni")
 
+if (is_chromeos_ash) {
+  import("//chrome/test/base/js2gtest.gni")
+}
+
 assert(!is_android)
 
 source_set("browser_tests") {
@@ -223,21 +226,19 @@
   ]
 }
 
-if (include_js2gtest_tests) {
-  if (is_chromeos_ash) {
-    js2gtest("interactive_ui_tests_js_webui") {
-      test_type = "webui"
+if (include_js2gtest_tests && is_chromeos_ash) {
+  js2gtest("interactive_ui_tests_js_webui") {
+    test_type = "webui"
 
-      sources = [ "cr_focus_row_behavior_interactive_test.js" ]
+    sources = [ "cr_focus_row_behavior_interactive_test.js" ]
 
-      gen_include_files = [
-        "polymer_browser_test_base.js",
-        "polymer_interactive_ui_test.js",
-      ]
+    gen_include_files = [
+      "polymer_browser_test_base.js",
+      "polymer_interactive_ui_test.js",
+    ]
 
-      deps = [ "//chrome/browser/ui" ]
-      defines = [ "HAS_OUT_OF_PROC_TEST_RUNNER" ]
-    }
+    deps = [ "//chrome/browser/ui" ]
+    defines = [ "HAS_OUT_OF_PROC_TEST_RUNNER" ]
   }
 
   js2gtest("browser_tests_js_webui") {
@@ -246,7 +247,36 @@
     # Javascript sources. These are combined with the .cc files in the GYP
     # build and are handled by a rule, but in the GN build they're in a
     # separate action so need to be separated out.
-    sources = [ "assertions.js" ]
+    sources = [
+      "../../../browser/resources/chromeos/login/security_token_pin_browsertest.js",
+      "../../../browser/ui/webui/ash/certificate_manager_dialog_browsertest.js",
+      "assertions.js",
+      "async_gen.js",
+      "chromeos/account_manager/account_manager_browsertest.js",
+      "chromeos/arc_account_picker/arc_account_picker_browsertest.js",
+      "chromeos/ash_common/ash_common_browsertest.js",
+      "chromeos/ash_common/ash_common_resources_browsertest.js",
+      "chromeos/ash_common/post_message_api/post_message_api_browsertest.js",
+      "chromeos/bluetooth_pairing_dialog_browsertest.js",
+      "chromeos/borealis_installer/borealis_installer_browsertest.js",
+      "chromeos/cloud_upload/cloud_upload_dialog_browsertest.js",
+      "chromeos/cloud_upload/connect_onedrive_browsertest.js",
+      "chromeos/cloud_upload/file_handler_page_browsertest.js",
+      "chromeos/cloud_upload/move_confirmation_page_browsertest.js",
+      "chromeos/edu_coexistence/edu_coexistence_browsertest.js",
+      "chromeos/emoji_picker/emoji_picker_browsertest.js",
+      "chromeos/gaia_action_buttons/gaia_action_buttons_browsertest.js",
+      "chromeos/internet_config_dialog_browsertest.js",
+      "chromeos/internet_detail_dialog_browsertest.js",
+      "chromeos/network_browsertest.js",
+      "chromeos/office_fallback/office_fallback_browsertest.js",
+      "chromeos/set_time_dialog_browsertest.js",
+      "chromeos/sys_internals/sys_internals_browsertest.js",
+      "cr_components/chromeos/cr_components_chromeos_v3_browsertest.js",
+      "js/i18n_process_test.js",
+      "js2gtest_browsertest.js",
+      "settings/chromeos/os_settings_browsertest.js",
+    ]
 
     gen_include_files = [ "polymer_browser_test_base.js" ]
 
@@ -259,84 +289,47 @@
       "//skia",
     ]
 
-    if (is_chromeos_ash) {
+    if (is_cfm) {
       sources += [
-        "../../../browser/resources/chromeos/login/security_token_pin_browsertest.js",
-        "../../../browser/ui/webui/ash/certificate_manager_dialog_browsertest.js",
-        "async_gen.js",
-        "chromeos/account_manager/account_manager_browsertest.js",
-        "chromeos/arc_account_picker/arc_account_picker_browsertest.js",
-        "chromeos/ash_common/ash_common_browsertest.js",
-        "chromeos/ash_common/ash_common_resources_browsertest.js",
-        "chromeos/ash_common/post_message_api/post_message_api_browsertest.js",
-        "chromeos/bluetooth_pairing_dialog_browsertest.js",
-        "chromeos/borealis_installer/borealis_installer_browsertest.js",
-        "chromeos/cloud_upload/cloud_upload_dialog_browsertest.js",
-        "chromeos/cloud_upload/connect_onedrive_browsertest.js",
-        "chromeos/cloud_upload/file_handler_page_browsertest.js",
-        "chromeos/cloud_upload/move_confirmation_page_browsertest.js",
-        "chromeos/edu_coexistence/edu_coexistence_browsertest.js",
-        "chromeos/emoji_picker/emoji_picker_browsertest.js",
-        "chromeos/gaia_action_buttons/gaia_action_buttons_browsertest.js",
-        "chromeos/internet_config_dialog_browsertest.js",
-        "chromeos/internet_detail_dialog_browsertest.js",
-        "chromeos/network_browsertest.js",
-        "chromeos/office_fallback/office_fallback_browsertest.js",
-        "chromeos/set_time_dialog_browsertest.js",
-        "chromeos/sys_internals/sys_internals_browsertest.js",
-        "cr_components/chromeos/cr_components_chromeos_v3_browsertest.js",
-        "js/i18n_process_test.js",
-        "js2gtest_browsertest.js",
-        "settings/chromeos/os_settings_browsertest.js",
+        "chromeos/chromebox_for_meetings/cfm_network_settings_browsertest.js",
       ]
-
-      if (is_cfm) {
-        sources += [
-          "chromeos/chromebox_for_meetings/cfm_network_settings_browsertest.js",
-        ]
-      }
-
-      data = [ "//ui/webui/resources/js/load_time_data_deprecated.js" ]
     }
 
+    data = [ "//ui/webui/resources/js/load_time_data_deprecated.js" ]
+
     defines = [ "HAS_OUT_OF_PROC_TEST_RUNNER" ]
   }
 
-  if (is_chromeos_ash) {
-    js2gtest("browser_tests_js_mojo_lite_webui") {
-      test_type = "mojo_lite_webui"
+  js2gtest("browser_tests_js_mojo_lite_webui") {
+    test_type = "mojo_lite_webui"
 
-      deps = [ "//chrome/browser/ui" ]
+    deps = [ "//chrome/browser/ui" ]
 
-      sources = [
-        "chromeos/crostini_installer_browsertest.js",
-        "chromeos/crostini_upgrader_browsertest.js",
-        "chromeos/firmware_update/firmware_update_browsertest.js",
-        "chromeos/os_feedback_ui/os_feedback_browsertest.js",
-        "chromeos/scanning/scanning_app_browsertest.js",
-        "chromeos/shimless_rma/shimless_rma_browsertest.js",
-      ]
+    sources = [
+      "chromeos/crostini_installer_browsertest.js",
+      "chromeos/crostini_upgrader_browsertest.js",
+      "chromeos/firmware_update/firmware_update_browsertest.js",
+      "chromeos/os_feedback_ui/os_feedback_browsertest.js",
+      "chromeos/scanning/scanning_app_browsertest.js",
+      "chromeos/shimless_rma/shimless_rma_browsertest.js",
+    ]
 
-      defines = [ "HAS_OUT_OF_PROC_TEST_RUNNER" ]
-    }
+    defines = [ "HAS_OUT_OF_PROC_TEST_RUNNER" ]
+  }
 
-    js2gtest("browser_tests_js_mojo_webui") {
-      test_type = "mojo_webui"
-      sources = []
-      if (is_chromeos_ash) {
-        sources += [
-          "chromeos/diagnostics/diagnostics_browsertest.js",
-          "chromeos/manage_mirrorsync/manage_mirrorsync_browsertest.js",
-          "chromeos/parent_access/parent_access_browsertest.js",
-          "chromeos/personalization_app/personalization_app_browsertest.js",
-          "chromeos/print_management/print_management_browsertest.js",
-          "chromeos/shortcut_customization/shortcut_customization_browsertest.js",
-          "nearby_share/nearby_browsertest.js",
-          "nearby_share/shared/nearby_shared_v3_browsertest.js",
-        ]
-      }
-      defines = [ "HAS_OUT_OF_PROC_TEST_RUNNER" ]
-    }
+  js2gtest("browser_tests_js_mojo_webui") {
+    test_type = "mojo_webui"
+    sources = [
+      "chromeos/diagnostics/diagnostics_browsertest.js",
+      "chromeos/manage_mirrorsync/manage_mirrorsync_browsertest.js",
+      "chromeos/parent_access/parent_access_browsertest.js",
+      "chromeos/personalization_app/personalization_app_browsertest.js",
+      "chromeos/print_management/print_management_browsertest.js",
+      "chromeos/shortcut_customization/shortcut_customization_browsertest.js",
+      "nearby_share/nearby_browsertest.js",
+      "nearby_share/shared/nearby_shared_v3_browsertest.js",
+    ]
+    defines = [ "HAS_OUT_OF_PROC_TEST_RUNNER" ]
   }
 }
 
diff --git a/chrome/test/delayload/delayloads_unittest.cc b/chrome/test/delayload/delayloads_unittest.cc
index 04611c8c..5c08637e 100644
--- a/chrome/test/delayload/delayloads_unittest.cc
+++ b/chrome/test/delayload/delayloads_unittest.cc
@@ -24,20 +24,10 @@
 #include "base/win/pe_image.h"
 #include "build/build_config.h"
 #include "chrome/install_static/test/scoped_install_details.h"
-#include "testing/gmock/include/gmock/gmock-matchers.h"
-#include "testing/gmock/include/gmock/gmock.h"
 #include "testing/gtest/include/gtest/gtest.h"
 
 namespace {
 
-using DetailedImports = std::map<std::string, std::set<std::string>>;
-
-// Generated static data - see `generate_allowed_imports.py` - module must be
-// lowercase as we force imports to lowercase when we read the module.
-// e.g. const DetailedImports kAvailableImports = {
-//     {"kernel32.dll", {"Function1", "Function2"}}};
-#include "chrome/test/delayload/supported_imports.inc"
-
 class DelayloadsTest : public testing::Test {
  protected:
   static bool ImportsCallback(const base::win::PEImage& image,
@@ -51,83 +41,17 @@
     return true;
   }
 
-  static std::vector<std::string> GetImports(
-      const base::FilePath& module_path) {
-    std::vector<std::string> imports;
+  static void GetImports(const base::FilePath& module_path,
+                         std::vector<std::string>* imports) {
+    ASSERT_TRUE(imports != NULL);
 
     base::MemoryMappedFile module_mmap;
-    CHECK(module_mmap.Initialize(module_path));
 
+    ASSERT_TRUE(module_mmap.Initialize(module_path));
     base::win::PEImageAsData pe_image_data(
         reinterpret_cast<HMODULE>(const_cast<uint8_t*>(module_mmap.data())));
-    pe_image_data.EnumImportChunks(DelayloadsTest::ImportsCallback, &imports,
+    pe_image_data.EnumImportChunks(DelayloadsTest::ImportsCallback, imports,
                                    nullptr);
-    return imports;
-  }
-
-  static bool DetailedImportsCallback(const base::win::PEImage& image,
-                                      const char* module,
-                                      DWORD ordinal,
-                                      const char* import_name,
-                                      DWORD hint,
-                                      IMAGE_THUNK_DATA* iat,
-                                      void* cookie) {
-    if (!module) {
-      return false;
-    }
-    if (!import_name) {
-      return true;
-    }
-    // Force module name to lowercase here.
-    const std::string mod_str = base::ToLowerASCII(module);
-    DetailedImports* imports = reinterpret_cast<DetailedImports*>(cookie);
-    if (auto fn_names = imports->find(mod_str); fn_names != imports->end()) {
-      fn_names->second.emplace(import_name);
-    } else {
-      std::set<std::string> empty_fn_names;
-      empty_fn_names.emplace(import_name);
-      imports->emplace(std::move(mod_str), std::move(empty_fn_names));
-    }
-    return true;
-  }
-
-  static DetailedImports GetDetailedImports(const base::FilePath& module_path) {
-    base::MemoryMappedFile module_mmap;
-    DetailedImports imports;
-
-    CHECK(module_mmap.Initialize(module_path));
-    base::win::PEImageAsData pe_image_data(
-        reinterpret_cast<HMODULE>(const_cast<uint8_t*>(module_mmap.data())));
-    pe_image_data.EnumAllImports(DelayloadsTest::DetailedImportsCallback,
-                                 &imports, nullptr);
-    return imports;
-  }
-
-  // Validate that any static (non-delayloaded) imported functions are available
-  // in the earliest version of Windows that Chrome supports. If an unsupported
-  // function is added to Chrome's imports Chrome and its crash reporting client
-  // may fail to start.
-  // `mod_path` - exe or dll (e.g. chrome.exe) to check.
-  // `internal_modules` - modules from the build (e.g. chrome.exe can import
-  // chrome_elf.dll).
-  static void ValidateImportsForEarliestWindowsVersion(
-      const base::FilePath& mod_path,
-      const std::set<std::string>& internal_modules) {
-    DetailedImports imports = GetDetailedImports(mod_path);
-
-    for (const auto& imports_entry : imports) {
-      const std::string& module = imports_entry.first;
-      auto available_functions = kAvailableImports.find(module);
-      if (available_functions == kAvailableImports.end()) {
-        // Unlisted modules must be provided by the Chrome build.
-        EXPECT_THAT(internal_modules, testing::Contains(module));
-      } else {
-        // Imported functions must be available in earliest Windows version.
-        for (const auto& function : imports_entry.second) {
-          EXPECT_THAT(available_functions->second, testing::Contains(function));
-        }
-      }
-    }
   }
 };
 
@@ -157,7 +81,8 @@
   base::FilePath dll;
   ASSERT_TRUE(base::PathService::Get(base::DIR_EXE, &dll));
   dll = dll.Append(L"chrome.dll");
-  std::vector<std::string> dll_imports = GetImports(dll);
+  std::vector<std::string> dll_imports;
+  GetImports(dll, &dll_imports);
 
   // Check that the dll has imports.
   ASSERT_LT(0u, dll_imports.size())
@@ -257,7 +182,8 @@
   base::FilePath dll;
   ASSERT_TRUE(base::PathService::Get(base::DIR_EXE, &dll));
   dll = dll.Append(L"chrome_elf.dll");
-  std::vector<std::string> dll_imports = GetImports(dll);
+  std::vector<std::string> dll_imports;
+  GetImports(dll, &dll_imports);
 
   // Check that the dll has imports.
   ASSERT_LT(0u, dll_imports.size())
@@ -342,10 +268,11 @@
 }
 
 TEST_F(DelayloadsTest, ChromeExeDelayloadsCheck) {
+  std::vector<std::string> exe_imports;
   base::FilePath exe;
   ASSERT_TRUE(base::PathService::Get(base::DIR_EXE, &exe));
   exe = exe.Append(L"chrome.exe");
-  std::vector<std::string> exe_imports = GetImports(exe);
+  GetImports(exe, &exe_imports);
 
   // Check that chrome.exe has imports.
   ASSERT_LT(0u, exe_imports.size())
@@ -380,25 +307,15 @@
   }
 }
 
-TEST_F(DelayloadsTest, MinimumSupportedImports) {
-  base::FilePath module_path;
-  ASSERT_TRUE(base::PathService::Get(base::DIR_EXE, &module_path));
-
-  ValidateImportsForEarliestWindowsVersion(module_path.Append(L"chrome.exe"),
-                                           {"chrome_elf.dll"});
-  ValidateImportsForEarliestWindowsVersion(
-      module_path.Append(L"chrome_elf.dll"), {});
-  ValidateImportsForEarliestWindowsVersion(module_path.Append(L"chrome.dll"),
-                                           {"chrome_elf.dll"});
-}
-
 #endif  // NDEBUG && !COMPONENT_BUILD
 
 TEST_F(DelayloadsTest, ChromeExeLoadSanityCheck) {
+  std::vector<std::string> exe_imports;
+
   base::FilePath exe;
   ASSERT_TRUE(base::PathService::Get(base::DIR_EXE, &exe));
   exe = exe.Append(L"chrome.exe");
-  std::vector<std::string> exe_imports = GetImports(exe);
+  GetImports(exe, &exe_imports);
 
   // Check that chrome.exe has imports.
   ASSERT_LT(0u, exe_imports.size())
diff --git a/chrome/test/delayload/generate_allowed_imports.py b/chrome/test/delayload/generate_allowed_imports.py
deleted file mode 100644
index 5a6d67c..0000000
--- a/chrome/test/delayload/generate_allowed_imports.py
+++ /dev/null
@@ -1,108 +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.
-"""
-Generates the list of valid imports for the lowest-supported version of
-Windows.
-
-Run from the root directory of the checkout - builds a .inc file that
-will be included into delayloads_unittest.cc.
-"""
-
-import argparse
-import os
-import re
-import sys
-
-USE_PYTHON_3 = f'This script will only run under python3.'
-
-# e.g. '  Section contains the following exports for CRYPT32.dll'
-RE_NEWMOD = re.compile(
-  'Section contains the following exports for (?P<dll>\w+\.(?i:dll|drv))')
-# e.g. '       1020    0 00088A30 CertAddCRLContextToStore'
-#                        ^ can be blank
-RE_EXPORT = re.compile('^\s+\d+\s+[0-9A-F]+\s+[0-9A-F ]{8}\s+(?P<export>\w+)')
-
-def parse_file(f):
-  """Naive parser for dumpbin output.
-
-  f: filehandle to file containing dumpbin output."""
-  mods = dict()
-  curmod = None
-  imports = []
-  for line in f.readlines():
-    # e.g. '  Section contains the following exports for CRYPT32.dll'
-    m = re.search(RE_NEWMOD, line)
-    if m:
-      if curmod:
-        mods[curmod] = imports
-        imports = []
-      curmod = m.group('dll')
-      continue
-    if curmod is None:
-      continue
-    # e.g. '       1020    0 00088A30 CertAddCRLContextToStore'
-    m = re.search(RE_EXPORT, line)
-    if m:
-      imports.append(m.group('export'))
-  if curmod:
-    mods[curmod] = imports
-  return mods
-
-
-def generate_inc(input_file):
-  """Reads output of dumpbin /exports *.dll and makes input for .inc C++ file.
-
-  input_file: path to file containing output of `dumpbin /exports *.dll`.
-
-  using DetailedImports = std::map<std::string, std::set<std::string>>; """
-  mods = parse_file(open(input_file, 'r', encoding='utf-8'))
-  module_entries = [];
-  for module, functions in mods.items():
-    joined_functions = ',\n'.join([f'  "{fn}"' for fn in functions])
-    lower_module = module.lower()
-    module_line = f' {{"{lower_module}", {{{joined_functions}}}}}'
-    module_entries.append(module_line)
-  all_modules = (',\n').join(module_entries)
-  output = f'const DetailedImports kAvailableImports =\n {{{all_modules}}};\n'
-  return output
-
-
-def maybe_read(filename):
-  """ Read existing file so that we don't write it again if it hasn't changed"""
-  if not os.path.isfile(filename):
-    return None;
-  try:
-    with open(filename, 'r', encoding='utf-8') as f:
-      return f.read();
-  except Exception:
-    return None
-
-
-def write_imports_inc(input, output):
-  existing_content = maybe_read(output)
-  new_content = generate_inc(input)
-  if existing_content == new_content:
-    return
-  os.makedirs(os.path.dirname(output), exist_ok=True)
-  with open(output, 'w', encoding='utf-8') as f:
-    f.write(new_content)
-
-
-def main():
-  parser = argparse.ArgumentParser(
-      description=__doc__, formatter_class=argparse.RawTextHelpFormatter)
-  parser.add_argument('--exports-file',
-                      default="chrome/test/delayload/supported_imports.txt",
-                      metavar='FILE_NAME',
-                      help='output of dumpbin /exports *.dll')
-  parser.add_argument('--out-file',
-                      default='gen/chrome/test/delayload/supported_imports.inc',
-                      metavar='FILE_NAME',
-                      help='path to write .inc file to, within out-dir')
-  args, _extras = parser.parse_known_args()
-  write_imports_inc(args.exports_file, args.out_file)
-
-
-if __name__ == '__main__':
-  sys.exit(main())
diff --git a/chrome/test/delayload/supported_imports_10.0.10240.txt b/chrome/test/delayload/supported_imports_10.0.10240.txt
deleted file mode 100644
index c578e426..0000000
--- a/chrome/test/delayload/supported_imports_10.0.10240.txt
+++ /dev/null
@@ -1,6610 +0,0 @@
-# Output of dumpbin /exports *.dll for system dlls that Chrome imports.
-# Consumed by generate_allowed_imports.py to build delayload_unittest.
-
-Microsoft (R) COFF/PE Dumper Version 14.36.32538.0
-Copyright (C) Microsoft Corporation.  All rights reserved.
-
-
-Dump of file 10.0.10240\crypt32.dll
-
-File Type: DLL
-
-  Section contains the following exports for CRYPT32.dll
-
-    00000000 characteristics
-    64CAB2D6 time date stamp Wed Aug  2 12:47:34 2023
-        0.00 version
-        1001 ordinal base
-        1000 number of functions
-         290 number of names
-
-    ordinal hint RVA      name
-
-       1020    0 00088A30 CertAddCRLContextToStore
-       1021    1 00088AB0 CertAddCRLLinkToStore
-       1022    2 00088A30 CertAddCTLContextToStore
-       1023    3 00088AB0 CertAddCTLLinkToStore
-       1024    4 0000D5B0 CertAddCertificateContextToStore
-       1025    5 00088AB0 CertAddCertificateLinkToStore
-       1026    6 000421F0 CertAddEncodedCRLToStore
-       1027    7 0000E8E0 CertAddEncodedCTLToStore
-       1028    8 00026570 CertAddEncodedCertificateToStore
-       1029    9 000899B0 CertAddEncodedCertificateToSystemStoreA
-       1030    A 00089A30 CertAddEncodedCertificateToSystemStoreW
-       1031    B 00089FB0 CertAddEnhancedKeyUsageIdentifier
-       1032    C 0008AFB0 CertAddRefServerOcspResponse
-       1033    D 0008AFC0 CertAddRefServerOcspResponseContext
-       1034    E 000115A0 CertAddSerializedElementToStore
-       1035    F 0004C0A0 CertAddStoreToCollection
-       1036   10 0008B250 CertAlgIdToOID
-       1037   11 0008AFD0 CertCloseServerOcspResponse
-       1038   12 00035E60 CertCloseStore
-       1039   13 00010660 CertCompareCertificate
-       1040   14 000122B0 CertCompareCertificateName
-       1041   15 000106C0 CertCompareIntegerBlob
-       1042   16 0002F3E0 CertComparePublicKeyInfo
-       1043   17 00035710 CertControlStore
-       1044   18 00045830 CertCreateCRLContext
-       1045   19 0000E8A0 CertCreateCTLContext
-       1046   1A 00088B10 CertCreateCTLEntryFromCertificateContextProperties
-       1047   1B 00054C80 CertCreateCertificateChainEngine
-       1048   1C 00028630 CertCreateCertificateContext
-       1049   1D 0003DDE0 CertCreateContext
-       1050   1E 0008B8C0 CertCreateSelfSignCertificate
-       1051   1F 00089000 CertDeleteCRLFromStore
-       1052   20 00089000 CertDeleteCTLFromStore
-       1053   21 00089000 CertDeleteCertificateFromStore
-       1054   22 000179D0 CertDuplicateCRLContext
-       1055   23 000127F0 CertDuplicateCTLContext
-       1056   24 00057040 CertDuplicateCertificateChain
-       1057   25 00018420 CertDuplicateCertificateContext
-       1058   26 0004C2D0 CertDuplicateStore
-       1059   27 00089020 CertEnumCRLContextProperties
-       1060   28 00011DF0 CertEnumCRLsInStore
-       1061   29 00089020 CertEnumCTLContextProperties
-       1062   2A 00017DB0 CertEnumCTLsInStore
-       1063   2B 00089020 CertEnumCertificateContextProperties
-       1064   2C 000190B0 CertEnumCertificatesInStore
-       1065   2D 0008FB30 CertEnumPhysicalStore
-       1066   2E 00089040 CertEnumSubjectInSortedCTL
-       1067   2F 0008FB50 CertEnumSystemStore
-       1068   30 0008FEE0 CertEnumSystemStoreLocation
-       1069   31 00013040 CertFindAttribute
-       1070   32 00006150 CertFindCRLInStore
-       1071   33 000891A0 CertFindCTLInStore
-       1072   34 00011EF0 CertFindCertificateInCRL
-       1073   35 00018FE0 CertFindCertificateInStore
-       1074   36 00090BB0 CertFindChainInStore
-       1075   37 00016230 CertFindExtension
-       1076   38 000072D0 CertFindRDNAttr
-       1077   39 000486E0 CertFindSubjectInCTL
-       1078   3A 00016B90 CertFindSubjectInSortedCTL
-       1079   3B 00017EB0 CertFreeCRLContext
-       1080   3C 00017EB0 CertFreeCTLContext
-       1081   3D 0000F7B0 CertFreeCertificateChain
-       1082   3E 00058200 CertFreeCertificateChainEngine
-       1083   3F 000584D0 CertFreeCertificateChainList
-       1084   40 0003C4B0 CertFreeCertificateContext
-       1085   41 0008B030 CertFreeServerOcspResponseContext
-       1086   42 00089200 CertGetCRLContextProperty
-       1087   43 000083E0 CertGetCRLFromStore
-       1088   44 00089200 CertGetCTLContextProperty
-       1089   45 00027680 CertGetCertificateChain
-       1090   46 0001F3B0 CertGetCertificateContextProperty
-       1091   47 00018DA0 CertGetEnhancedKeyUsage
-       1092   48 0008B290 CertGetIntendedKeyUsage
-       1093   49 00089230 CertGetIssuerCertificateFromStore
-       1094   4A 00091B40 CertGetNameStringA
-       1095   4B 00039EA0 CertGetNameStringW
-       1096   4C 00028F40 CertGetPublicKeyLength
-       1097   4D 0008B070 CertGetServerOcspResponseContext
-       1098   4E 00089330 CertGetStoreProperty
-       1099   4F 00052DC0 CertGetSubjectCertificateFromStore
-       1100   50 00012B80 CertGetValidUsages
-       1101   51 0008B3D0 CertIsRDNAttrsInCertificateName
-       1102   52 000938F0 CertIsStrongHashToSign
-       1103   53 00015EB0 CertIsValidCRLForCertificate
-       1104   54 000265F0 CertIsWeakHash
-       1105   55 00091C00 CertNameToStrA
-       1106   56 00058520 CertNameToStrW
-       1107   57 000488B0 CertOIDToAlgId
-       1108   58 0005ADC0 CertOpenServerOcspResponse
-       1109   59 00037580 CertOpenStore
-       1110   5A 00089AB0 CertOpenSystemStoreA
-       1111   5B 0005B4F0 CertOpenSystemStoreW
-       1112   5C 00091CA0 CertRDNValueToStrA
-       1113   5D 00091D70 CertRDNValueToStrW
-       1114   5E 0008FFB0 CertRegisterPhysicalStore
-       1115   5F 00090250 CertRegisterSystemStore
-       1116   60 0008A170 CertRemoveEnhancedKeyUsageIdentifier
-       1117   61 00007250 CertRemoveStoreFromCollection
-       1118   62 000C54D0 CertResyncCertificateChainEngine
-       1119   63 00093C50 CertRetrieveLogoOrBiometricInfo
-       1120   64 00016910 CertSaveStore
-       1121   65 00011910 CertSelectCertificateChains
-       1122   66 000169F0 CertSerializeCRLStoreElement
-       1123   67 000169F0 CertSerializeCTLStoreElement
-       1124   68 000169F0 CertSerializeCertificateStoreElement
-       1125   69 00012220 CertSetCRLContextProperty
-       1126   6A 000894D0 CertSetCTLContextProperty
-       1127   6B 0000D760 CertSetCertificateContextPropertiesFromCTLEntry
-       1128   6C 00012220 CertSetCertificateContextProperty
-       1129   6D 0008A270 CertSetEnhancedKeyUsage
-       1130   6E 00089500 CertSetStoreProperty
-       1131   6F 00091F10 CertStrToNameA
-       1132   70 0000E9F0 CertStrToNameW
-       1133   71 00090340 CertUnregisterPhysicalStore
-       1134   72 00090450 CertUnregisterSystemStore
-       1135   73 0008B5E0 CertVerifyCRLRevocation
-       1136   74 0008B670 CertVerifyCRLTimeValidity
-       1137   75 00094460 CertVerifyCTLUsage
-       1138   76 00027C90 CertVerifyCertificateChainPolicy
-       1139   77 00017270 CertVerifyRevocation
-       1140   78 00089570 CertVerifySubjectCertificateContext
-       1141   79 000105C0 CertVerifyTimeValidity
-       1142   7A 0008B710 CertVerifyValidityNesting
-       1143   7B 00057330 CryptAcquireCertificatePrivateKey
-       1144   7C 00058C10 CryptBinaryToStringA
-       1145   7D 00058AF0 CryptBinaryToStringW
-       1146   7E 000B7650 CryptCloseAsyncHandle
-       1147   7F 00095010 CryptCreateAsyncHandle
-       1148   80 00092DB0 CryptCreateKeyIdentifierFromCSP
-       1149   81 000968D0 CryptDecodeMessage
-       1150   82 000321A0 CryptDecodeObject
-       1151   83 00032300 CryptDecodeObjectEx
-       1152   84 00096970 CryptDecryptAndVerifyMessageSignature
-       1153   85 00096B90 CryptDecryptMessage
-       1154   86 0002A700 CryptEncodeObject
-       1155   87 0002A730 CryptEncodeObjectEx
-       1156   88 00096C00 CryptEncryptMessage
-       1157   89 000895B0 CryptEnumKeyIdentifierProperties
-       1158   8A 0002D150 CryptEnumOIDFunction
-       1159   8B 000A4C20 CryptEnumOIDInfo
-       1160   8C 000CCD50 CryptExportPKCS8
-       1161   8D 00008900 CryptExportPublicKeyInfo
-       1162   8E 00054F20 CryptExportPublicKeyInfoEx
-       1163   8F 00092E40 CryptExportPublicKeyInfoFromBCryptKeyHandle
-       1164   90 0008B760 CryptFindCertificateKeyProvInfo
-       1165   91 000A4D20 CryptFindLocalizedName
-       1166   92 0002E760 CryptFindOIDInfo
-       1167   93 000AEA00 CryptFormatObject
-       1168   94 00029360 CryptFreeOIDFunctionAddress
-       1169   95 00095030 CryptGetAsyncParam
-       1170   96 00017700 CryptGetDefaultOIDDllList
-       1171   97 000177B0 CryptGetDefaultOIDFunctionAddress
-       1172   98 000896B0 CryptGetKeyIdentifierProperty
-       1173   99 00096CE0 CryptGetMessageCertificates
-       1174   9A 00096D20 CryptGetMessageSignerCount
-       1175   9B 0002AF80 CryptGetOIDFunctionAddress
-       1176   9C 000A3320 CryptGetOIDFunctionValue
-       1177   9D 00050460 CryptHashCertificate
-       1178   9E 0002CF40 CryptHashCertificate2
-       1179   9F 00096DD0 CryptHashMessage
-       1180   A0 00092E90 CryptHashPublicKeyInfo
-       1181   A1 0002E5A0 CryptHashToBeSigned
-       1182   A2 000CD120 CryptImportPKCS8
-       1183   A3 0004FEA0 CryptImportPublicKeyInfo
-       1184   A4 00029E10 CryptImportPublicKeyInfoEx
-       1185   A5 0002B290 CryptImportPublicKeyInfoEx2
-       1186   A6 0003F640 CryptInitOIDFunctionSet
-       1187   A7 000B3A80 CryptInstallDefaultContext
-       1188   A8 0003F720 CryptInstallOIDFunctionAddress
-       1189   A9 000D9160 CryptLoadSip
-       1190   AA 00052BA0 CryptMemAlloc
-       1191   AB 00027550 CryptMemFree
-       1192   AC 000B3EA0 CryptMemRealloc
-       1193   AD 000029B0 CryptMsgCalculateEncodedLength
-       1194   AE 0003BDB0 CryptMsgClose
-       1195   AF 0003FF60 CryptMsgControl
-       1196   B0 000E2FD0 CryptMsgCountersign
-       1197   B1 000E3190 CryptMsgCountersignEncoded
-       1198   B2 00057730 CryptMsgDuplicate
-       1199   B3 00001ED0 CryptMsgEncodeAndSignCTL
-       1200   B4 0000E520 CryptMsgGetAndVerifySigner
-       1201   B5 0002F8A0 CryptMsgGetParam
-       1202   B6 0003C980 CryptMsgOpenToDecode
-       1203   B7 000020B0 CryptMsgOpenToEncode
-       1204   B8 00001FB0 CryptMsgSignCTL
-       1205   B9 0003AE10 CryptMsgUpdate
-       1206   BA 000E3510 CryptMsgVerifyCountersignatureEncoded
-       1207   BB 00056210 CryptMsgVerifyCountersignatureEncodedEx
-       1012   BC 000CA2F0 CryptObjectLocatorFree
-       1013   BD 000CA330 CryptObjectLocatorGet
-       1014   BE 000CA370 CryptObjectLocatorGetContent
-       1015   BF 000CA420 CryptObjectLocatorGetUpdated
-       1016   C0 000CA460 CryptObjectLocatorInitialize
-       1017   C1 000CA7D0 CryptObjectLocatorIsChanged
-       1018   C2 000CA7F0 CryptObjectLocatorRelease
-       1208   C3 00054860 CryptProtectData
-       1209   C4          CryptProtectMemory (forwarded to DPAPI.CryptProtectMemory)
-       1210   C5 0003CA90 CryptQueryObject
-       1211   C6 000A3410 CryptRegisterDefaultOIDFunction
-       1212   C7 000A3710 CryptRegisterOIDFunction
-       1213   C8 000A4DD0 CryptRegisterOIDInfo
-       1214   C9 000D9650 CryptRetrieveTimeStamp
-       1215   CA 000D9200 CryptSIPAddProvider
-       1216   CB 0002A2B0 CryptSIPCreateIndirectData
-       1217   CC 00052E30 CryptSIPGetCaps
-       1218   CD 000D9570 CryptSIPGetSealedDigest
-       1219   CE 0002A170 CryptSIPGetSignedDataMsg
-       1220   CF 0002A460 CryptSIPLoad
-       1221   D0 00007EA0 CryptSIPPutSignedDataMsg
-       1222   D1 000D93D0 CryptSIPRemoveProvider
-       1223   D2 00008310 CryptSIPRemoveSignedDataMsg
-       1224   D3 0004D320 CryptSIPRetrieveSubjectGuid
-       1225   D4 0004D0A0 CryptSIPRetrieveSubjectGuidForCatalogFile
-       1226   D5 00053490 CryptSIPVerifyIndirectData
-       1227   D6 000B7650 CryptSetAsyncParam
-       1228   D7 000897D0 CryptSetKeyIdentifierProperty
-       1229   D8 000A3810 CryptSetOIDFunctionValue
-       1230   D9 000501B0 CryptSignAndEncodeCertificate
-       1231   DA 00097030 CryptSignAndEncryptMessage
-       1232   DB 00050350 CryptSignCertificate
-       1233   DC 00097190 CryptSignMessage
-       1234   DD 000972A0 CryptSignMessageWithKey
-       1235   DE 0007A470 CryptStringToBinaryA
-       1236   DF 00045D50 CryptStringToBinaryW
-       1237   E0 000B3C40 CryptUninstallDefaultContext
-       1238   E1 0004C5F0 CryptUnprotectData
-       1239   E2          CryptUnprotectMemory (forwarded to DPAPI.CryptUnprotectMemory)
-       1240   E3 000A3900 CryptUnregisterDefaultOIDFunction
-       1241   E4 000A3BB0 CryptUnregisterOIDFunction
-       1242   E5 000A4FD0 CryptUnregisterOIDInfo
-       1243   E6          CryptUpdateProtectedState (forwarded to DPAPI.CryptUpdateProtectedState)
-       1244   E7 0008B870 CryptVerifyCertificateSignature
-       1245   E8 00019150 CryptVerifyCertificateSignatureEx
-       1246   E9 00097510 CryptVerifyDetachedMessageHash
-       1247   EA 00097570 CryptVerifyDetachedMessageSignature
-       1248   EB 000975F0 CryptVerifyMessageHash
-       1249   EC 00097640 CryptVerifyMessageSignature
-       1250   ED 000976C0 CryptVerifyMessageSignatureWithKey
-       1251   EE 000D9990 CryptVerifyTimeStampSignature
-       1252   EF 00017B50 I_CertChainEngineIsDisallowedCertificate
-       1253   F0 000277F0 I_CertDiagControl
-       1254   F1 000514B0 I_CertProtectFunction
-       1255   F2 000122F0 I_CertSrvProtectFunction
-       1256   F3 00089990 I_CertSyncStore
-       1257   F4 00056490 I_CertUpdateStore
-       1258   F5 000561E0 I_CryptAddRefLruEntry
-       1259   F6 000B7340 I_CryptAddSmartCardCertToStore
-       1260   F7 00058130 I_CryptAllocTls
-       1261   F8 0003F4B0 I_CryptAllocTlsEx
-       1262   F9 00027460 I_CryptCreateLruCache
-       1263   FA 00025460 I_CryptCreateLruEntry
-       1264   FB 000525A0 I_CryptDetachTls
-       1265   FC 000C5630 I_CryptDisableLruOfEntries
-       1266   FD 000C5670 I_CryptEnableLruOfEntries
-       1267   FE 00027590 I_CryptEnumMatchingLruEntries
-       1268   FF 000256A0 I_CryptFindLruEntry
-       1269  100 000C56E0 I_CryptFindLruEntryData
-       1270  101 000B7430 I_CryptFindSmartCardCertInStore
-       1271  102 000556F0 I_CryptFlushLruCache
-       1272  103 000561B0 I_CryptFreeLruCache
-       1273  104 00052950 I_CryptFreeTls
-       1274  105 0002C980 I_CryptGetAsn1Decoder
-       1275  106 00040AA0 I_CryptGetAsn1Encoder
-       1276  107 0003AD20 I_CryptGetDefaultCryptProv
-       1277  108 000B3D80 I_CryptGetDefaultCryptProvForEncrypt
-       1278  109 00079FE0 I_CryptGetFileVersion
-       1279  10A 00054C00 I_CryptGetLruEntryData
-       1280  10B 000C5710 I_CryptGetLruEntryIdentifier
-       1281  10C 000B7670 I_CryptGetOssGlobal
-       1282  10D 00015640 I_CryptGetTls
-       1283  10E 00025DB0 I_CryptInsertLruEntry
-       1284  10F 00055EC0 I_CryptInstallAsn1Module
-       1285  110 000B7670 I_CryptInstallOssGlobal
-       1286  111 0004CC10 I_CryptReadTrustedPublisherDWORDValueFromRegistry
-       1287  112 000B7650 I_CryptRegisterSmartCardStore
-       1288  113 00025620 I_CryptReleaseLruEntry
-       1289  114 00057120 I_CryptRemoveLruEntry
-       1290  115 00017230 I_CryptSetTls
-       1291  116 000578D0 I_CryptTouchLruEntry
-       1292  117 00052940 I_CryptUninstallAsn1Module
-       1293  118 000B7670 I_CryptUninstallOssGlobal
-       1294  119 000B7650 I_CryptUnregisterSmartCardStore
-       1295  11A 00058340 I_CryptWalkAllLruCacheEntries
-       1019  11B 0000C0A0 I_PFXImportCertStoreEx
-       1296  11C 000CBC20 PFXExportCertStore
-       1297  11D 000CBD30 PFXExportCertStore2
-       1298  11E 000CBD50 PFXExportCertStoreEx
-       1299  11F 0000D010 PFXImportCertStore
-       1300  120 0000C660 PFXIsPFXBlob
-       1301  121 000CBF40 PFXVerifyPassword
-       1001      0005D750 [NONAME]
-       1002      0007A0E0 [NONAME]
-       1003      00079C10 [NONAME]
-       1004      00079C00 [NONAME]
-       1005      00079CA0 [NONAME]
-       1006      00079C90 [NONAME]
-       1007      00079BB0 [NONAME]
-       1008      00079BF0 [NONAME]
-       1009      00079C50 [NONAME]
-       1010      00079C80 [NONAME]
-       1011      00079BA0 [NONAME]
-       2000      0000B100 [NONAME]
-
-  Summary
-
-        7000 .data
-        1000 .didat
-        D000 .pdata
-       35000 .rdata
-        2000 .reloc
-       B5000 .rsrc
-       F1000 .text
-Microsoft (R) COFF/PE Dumper Version 14.36.32538.0
-Copyright (C) Microsoft Corporation.  All rights reserved.
-
-
-Dump of file 10.0.10240\dbghelp.dll
-
-File Type: DLL
-
-  Section contains the following exports for dbghelp.dll
-
-    00000000 characteristics
-    6270626D time date stamp Mon May  2 15:59:57 2022
-        0.00 version
-           1 ordinal base
-         232 number of functions
-         232 number of names
-
-    ordinal hint RVA      name
-
-          5    0 000E9620 DbgHelpCreateUserDump
-          6    1 000E9700 DbgHelpCreateUserDumpW
-          7    2 000E2A50 EnumDirTree
-          8    3 000E2B70 EnumDirTreeW
-          9    4 000DBDD0 EnumerateLoadedModules
-         10    5 000DBDD0 EnumerateLoadedModules64
-         11    6 000DBE50 EnumerateLoadedModulesEx
-         12    7 000DBED0 EnumerateLoadedModulesExW
-         13    8 000DBF50 EnumerateLoadedModulesW64
-         14    9 0000E0C0 ExtensionApiVersion
-         15    A 000E2BC0 FindDebugInfoFile
-         16    B 000E2BE0 FindDebugInfoFileEx
-         17    C 000E2CB0 FindDebugInfoFileExW
-         18    D 000E2D00 FindExecutableImage
-         19    E 000E2D20 FindExecutableImageEx
-         20    F 000E2E20 FindExecutableImageExW
-         21   10 000E2E70 FindFileInPath
-         22   11 000E2EC0 FindFileInSearchPath
-         23   12 000DBFD0 GetSymLoadError
-         24   13 000D52A0 GetTimestampForLoadedLibrary
-         25   14 000D4E10 ImageDirectoryEntryToData
-         26   15 000D4E30 ImageDirectoryEntryToDataEx
-         27   16 000D4F50 ImageNtHeader
-         28   17 000D4F80 ImageRvaToSection
-         29   18 000D4FE0 ImageRvaToVa
-         30   19 000E2F00 ImagehlpApiVersion
-         31   1A 0000DFB0 ImagehlpApiVersionEx
-         32   1B 000E2F10 MakeSureDirectoryPathExists
-         33   1C          MiniDumpReadDumpStream (forwarded to dbgcore.MiniDumpReadDumpStream)
-         34   1D          MiniDumpWriteDump (forwarded to dbgcore.MiniDumpWriteDump)
-         35   1E 000EF2D0 RangeMapAddPeImageSections
-         36   1F 000EF3C0 RangeMapCreate
-         37   20 000EF420 RangeMapFree
-         38   21 000EF440 RangeMapRead
-         39   22 000EF4E0 RangeMapRemove
-         40   23 000EF530 RangeMapWrite
-         41   24 0000DEC0 RemoveInvalidModuleList
-         42   25 0000DBF0 ReportSymbolLoadSummary
-         43   26 000E3080 SearchTreeForFile
-         44   27 000E30B0 SearchTreeForFileW
-         45   28 0000E0B0 SetCheckUserInterruptShared
-         46   29 000DBFE0 SetSymLoadError
-         47   2A 000EE730 StackWalk
-         48   2B 000EE730 StackWalk64
-         49   2C 00007030 StackWalkEx
-         50   2D 000DBFF0 SymAddSourceStream
-         51   2E 000DC000 SymAddSourceStreamA
-         52   2F 000DC070 SymAddSourceStreamW
-         53   30 000DC1E0 SymAddSymbol
-         54   31 000DC260 SymAddSymbolW
-         55   32 0000E050 SymAddrIncludeInlineTrace
-         56   33 0000DCE0 SymCleanup
-         57   34 000DC350 SymCompareInlineTrace
-         58   35 000DC880 SymDeleteSymbol
-         59   36 000DC8F0 SymDeleteSymbolW
-         60   37 000DC9C0 SymEnumLines
-         61   38 000DCA90 SymEnumLinesW
-         62   39 000DCB40 SymEnumProcesses
-         63   3A 000DCBE0 SymEnumSourceFileTokens
-         64   3B 000DCC80 SymEnumSourceFiles
-         65   3C 000DCD30 SymEnumSourceFilesW
-         66   3D 000DCDD0 SymEnumSourceLines
-         67   3E 000DCEC0 SymEnumSourceLinesW
-         68   3F 000DCF80 SymEnumSym
-         69   40 000DCFB0 SymEnumSymbols
-         70   41 000DCFE0 SymEnumSymbolsEx
-         71   42 000DD090 SymEnumSymbolsExW
-         72   43 000DD130 SymEnumSymbolsForAddr
-         73   44 000DD250 SymEnumSymbolsForAddrW
-         74   45 000DD370 SymEnumSymbolsW
-         75   46 000DD3A0 SymEnumTypes
-         76   47 000DD420 SymEnumTypesByName
-         77   48 000DD500 SymEnumTypesByNameW
-         78   49 000DD590 SymEnumTypesW
-         79   4A 000DD620 SymEnumerateModules
-         80   4B 000DD620 SymEnumerateModules64
-         81   4C 000DD690 SymEnumerateModulesW64
-         82   4D 000DD700 SymEnumerateSymbols
-         83   4E 000DD700 SymEnumerateSymbols64
-         84   4F 000DD780 SymEnumerateSymbolsW
-         85   50 000DD780 SymEnumerateSymbolsW64
-         86   51 000E30E0 SymFindDebugInfoFile
-         87   52 000E31D0 SymFindDebugInfoFileW
-         88   53 000E3250 SymFindExecutableImage
-         89   54 000E3340 SymFindExecutableImageW
-         90   55 000E33C0 SymFindFileInPath
-         91   56 000E34F0 SymFindFileInPathW
-          1   57 000DB350 SymFreeDiaString
-         92   58 000DD800 SymFromAddr
-         93   59 000DD820 SymFromAddrW
-         94   5A 000DD840 SymFromIndex
-         95   5B 000DD8B0 SymFromIndexW
-         96   5C 000DD990 SymFromInlineContext
-         97   5D 000DD9E0 SymFromInlineContextW
-         98   5E 000DDA30 SymFromName
-         99   5F 000DDAB0 SymFromNameW
-        100   60 000DDAE0 SymFromToken
-        101   61 000DDB90 SymFromTokenW
-        102   62 00009D10 SymFunctionTableAccess
-        103   63 00009D10 SymFunctionTableAccess64
-        104   64 00009D30 SymFunctionTableAccess64AccessRoutines
-          2   65 000DB360 SymGetDiaSession
-        105   66 000D5FE0 SymGetFileLineOffsets64
-        106   67 000DDC80 SymGetHomeDirectory
-        107   68 000DDD00 SymGetHomeDirectoryW
-        108   69 000DDDC0 SymGetLineFromAddr
-        109   6A 000DDDC0 SymGetLineFromAddr64
-        110   6B 000DDDF0 SymGetLineFromAddrW64
-        111   6C 000DDE20 SymGetLineFromInlineContext
-        112   6D 000DDEF0 SymGetLineFromInlineContextW
-        113   6E 000DE050 SymGetLineFromName
-        114   6F 000DE050 SymGetLineFromName64
-        115   70 000DE120 SymGetLineFromNameW64
-        116   71 000DE6C0 SymGetLineNext
-        117   72 000DE6C0 SymGetLineNext64
-        118   73 000DE730 SymGetLineNextW64
-        119   74 000DE750 SymGetLinePrev
-        120   75 000DE750 SymGetLinePrev64
-        121   76 000DE7C0 SymGetLinePrevW64
-        122   77 000DE7D0 SymGetModuleBase
-        123   78 000DE7D0 SymGetModuleBase64
-        124   79 000DE830 SymGetModuleInfo
-        125   7A 000DE830 SymGetModuleInfo64
-        126   7B 0000AED0 SymGetModuleInfoW
-        127   7C 0000AED0 SymGetModuleInfoW64
-          3   7D 000DB390 SymGetOmapBlockBase
-        128   7E 000DE8D0 SymGetOmaps
-        129   7F 0000F1C0 SymGetOptions
-        130   80 000DE9B0 SymGetScope
-        131   81 000DEA30 SymGetScopeW
-        132   82 000DEB40 SymGetSearchPath
-        133   83 000DEBC0 SymGetSearchPathW
-        134   84 000DEC20 SymGetSourceFile
-        135   85 000DECA0 SymGetSourceFileFromToken
-        136   86 000DED50 SymGetSourceFileFromTokenW
-        137   87 000DEDC0 SymGetSourceFileToken
-        138   88 000DEE30 SymGetSourceFileTokenW
-        139   89 000DEEF0 SymGetSourceFileW
-        140   8A 000DEF70 SymGetSourceVarFromToken
-        141   8B 000DF040 SymGetSourceVarFromTokenW
-        142   8C 000DF0F0 SymGetSymFromAddr
-        143   8D 000DF0F0 SymGetSymFromAddr64
-        144   8E 000DF130 SymGetSymFromName
-        145   8F 000DF130 SymGetSymFromName64
-        146   90 000DF1A0 SymGetSymNext
-        147   91 000DF1A0 SymGetSymNext64
-        148   92 000DF1C0 SymGetSymPrev
-        149   93 000DF1C0 SymGetSymPrev64
-        150   94 000E80D0 SymGetSymbolFile
-        151   95 000E8200 SymGetSymbolFileW
-        152   96 000DF1D0 SymGetTypeFromName
-        153   97 000DF280 SymGetTypeFromNameW
-        154   98 000DF3E0 SymGetTypeInfo
-        155   99 000DF420 SymGetTypeInfoEx
-        156   9A 000DF450 SymGetUnwindInfo
-        157   9B 0000F250 SymInitialize
-        158   9C 0000E120 SymInitializeW
-        159   9D 000DF5F0 SymLoadModule
-        160   9E 000DF5F0 SymLoadModule64
-        161   9F 000DF630 SymLoadModuleEx
-        162   A0 0000B500 SymLoadModuleExW
-        163   A1 000DF710 SymMatchFileName
-        164   A2 000DF810 SymMatchFileNameW
-        165   A3 000DF8F0 SymMatchString
-        166   A4 000DF930 SymMatchStringA
-        167   A5 000DF940 SymMatchStringW
-        168   A6 000DF980 SymNext
-        169   A7 000DFA20 SymNextW
-        170   A8 000DFA40 SymPrev
-        171   A9 000DFAE0 SymPrevW
-        172   AA 000DFAF0 SymQueryInlineTrace
-        173   AB 000DFE00 SymRefreshModuleList
-        174   AC 000DFE70 SymRegisterCallback
-        175   AD 000DFE70 SymRegisterCallback64
-        176   AE 0000DE40 SymRegisterCallbackW64
-        177   AF 0000DF40 SymRegisterFunctionEntryCallback
-        178   B0 0000DF40 SymRegisterFunctionEntryCallback64
-        179   B1 000DFEE0 SymSearch
-        180   B2 000DFFB0 SymSearchW
-        181   B3 000E0070 SymSetContext
-        182   B4 000E0120 SymSetHomeDirectory
-        183   B5 000E01C0 SymSetHomeDirectoryW
-        184   B6 0000E930 SymSetOptions
-        185   B7 000E0240 SymSetParentWindow
-        186   B8 000E0270 SymSetScopeFromAddr
-        187   B9 000E0280 SymSetScopeFromIndex
-        188   BA 0000DAC0 SymSetScopeFromInlineContext
-        189   BB 000E0340 SymSetSearchPath
-        190   BC 0000E380 SymSetSearchPathW
-        191   BD 000E86A0 SymSrvDeltaName
-        192   BE 000E8770 SymSrvDeltaNameW
-        193   BF 000E8920 SymSrvGetFileIndexInfo
-        194   C0 000E89F0 SymSrvGetFileIndexInfoW
-        195   C1 000E8B20 SymSrvGetFileIndexString
-        196   C2 000E8BE0 SymSrvGetFileIndexStringW
-        197   C3 000E8CB0 SymSrvGetFileIndexes
-        198   C4 000E8D20 SymSrvGetFileIndexesW
-        199   C5 000E8DE0 SymSrvGetSupplement
-        200   C6 000E8EA0 SymSrvGetSupplementW
-        201   C7 000E8FB0 SymSrvIsStore
-        202   C8 000E8FF0 SymSrvIsStoreW
-        203   C9 000E90E0 SymSrvStoreFile
-        204   CA 000E9180 SymSrvStoreFileW
-        205   CB 000E9240 SymSrvStoreSupplement
-        206   CC 000E9300 SymSrvStoreSupplementW
-        207   CD 000E0380 SymUnDName
-        208   CE 000E0380 SymUnDName64
-        209   CF 00009FD0 SymUnloadModule
-        210   D0 00009FD0 SymUnloadModule64
-        211   D1 000E03D0 UnDecorateSymbolName
-        212   D2 000E0460 UnDecorateSymbolNameW
-        213   D3 0000DFF0 WinDbgExtensionDllInit
-          4   D4 000CE2A0 _EFN_DumpImage
-        214   D5 000D2E10 block
-        215   D6 000D3010 chksym
-        216   D7 000E0510 dbghelp
-        217   D8 000D3210 dh
-        218   D9 000D3220 fptr
-        219   DA 000D32B0 homedir
-        220   DB 000D3410 inlinedbg
-        221   DC 000D3490 itoldyouso
-        222   DD 000D3690 lmi
-        223   DE 000D39C0 lminfo
-        224   DF 000D3C10 omap
-        225   E0 000D3E50 optdbgdump
-        226   E1 000D3FC0 optdbgdumpaddr
-        227   E2 000D4150 srcfiles
-        228   E3 000D42A0 stack_force_ebp
-        229   E4 000D44A0 stackdbg
-        230   E5 000D46C0 sym
-        231   E6 000D4840 symsrv
-        232   E7 000D48B0 vc7fpo
-
-  Summary
-
-       1F000 .data
-        1000 .didat
-        3000 .mrdata
-       10000 .pdata
-       48000 .rdata
-        5000 .reloc
-        1000 .rsrc
-      108000 .text
-Microsoft (R) COFF/PE Dumper Version 14.36.32538.0
-Copyright (C) Microsoft Corporation.  All rights reserved.
-
-
-Dump of file 10.0.10240\dhcpcsvc.dll
-
-File Type: DLL
-
-  Section contains the following exports for dhcpcsvc.DLL
-
-    00000000 characteristics
-    633AE20A time date stamp Mon Oct  3 06:22:18 2022
-        0.00 version
-           1 ordinal base
-          67 number of functions
-          67 number of names
-
-    ordinal hint RVA      name
-
-          1    0 000033E0 DhcpAcquireParameters
-          2    1 00003510 DhcpAcquireParametersByBroadcast
-          3    2 000026D0 DhcpCApiCleanup
-          4    3 00003640 DhcpCApiInitialize
-          5    4 00003660 DhcpClient_Generalize
-          6    5 00003830 DhcpDeRegisterConnectionStateNotification
-          7    6 00003930 DhcpDeRegisterOptions
-          8    7 00003940 DhcpDeRegisterParamChange
-          9    8 00003A80 DhcpDelPersistentRequestParams
-         10    9 00003DC0 DhcpEnableDhcp
-         11    A 00004080 DhcpEnableTracing
-         12    B 0000A490 DhcpEnumClasses
-         13    C 00001F90 DhcpEnumInterfaces
-         14    D 00004110 DhcpFallbackRefreshParams
-         15    E 000015C0 DhcpFreeEnumeratedInterfaces
-         16    F 00002280 DhcpFreeLeaseInfo
-         17   10 00001340 DhcpFreeLeaseInfoArray
-         18   11 00004240 DhcpFreeMem
-         19   12 00004270 DhcpGetClassId
-         20   13 000043F0 DhcpGetClientId
-         21   14 00004570 DhcpGetDhcpServicedConnections
-         22   15 000047B0 DhcpGetFallbackParams
-         23   16 00004890 DhcpGetNotificationStatus
-         24   17 00004BC0 DhcpGetOriginalSubnetMask
-         25   18 00004CA0 DhcpGetTraceArray
-         26   19 0001582C DhcpGlobalIsShuttingDown
-         27   1A 00015820 DhcpGlobalServiceSyncEvent
-         28   1B 00015818 DhcpGlobalTerminateEvent
-         29   1C 0000A680 DhcpHandlePnPEvent
-         30   1D 00001010 DhcpIsEnabled
-         31   1E 00005130 DhcpLeaseIpAddress
-         32   1F 00005170 DhcpLeaseIpAddressEx
-         33   20 0000A880 DhcpNotifyConfigChange
-         34   21 0000A8C0 DhcpNotifyConfigChangeEx
-         35   22 00005570 DhcpNotifyMediaReconnected
-         36   23 0000AA50 DhcpOpenGlobalEvent
-         37   24 000056A0 DhcpPersistentRequestParams
-         38   25 00002110 DhcpQueryLeaseInfo
-         39   26 00001C50 DhcpQueryLeaseInfoArray
-         40   27 00002030 DhcpQueryLeaseInfoEx
-         41   28 00005990 DhcpRegisterConnectionStateNotification
-         42   29 00005B60 DhcpRegisterOptions
-         43   2A 00005CD0 DhcpRegisterParamChange
-         44   2B 00006D30 DhcpReleaseIpAddressLease
-         45   2C 00006D50 DhcpReleaseIpAddressLeaseEx
-         46   2D 00007100 DhcpReleaseParameters
-         47   2E 00007230 DhcpRemoveDNSRegistrations
-         48   2F 00007330 DhcpRenewIpAddressLease
-         49   30 00007360 DhcpRenewIpAddressLeaseEx
-         50   31 00007750 DhcpRequestCachedParams
-         51   32 00007A90 DhcpRequestOptions
-         52   33 000017F0 DhcpRequestParams
-         53   34 00008050 DhcpSetClassId
-         54   35 00008260 DhcpSetClientId
-         55   36 00008430 DhcpSetFallbackParams
-         56   37 00008600 DhcpSetMSFTVendorSpecificOptions
-         57   38 000088D0 DhcpStaticRefreshParams
-         58   39 00008A10 DhcpUndoRequestParams
-         59   3A 00008A40 Dhcpv4CheckServerAvailability
-         60   3B 00008B60 Dhcpv4EnableDhcpEx
-         61   3C 00008C90 McastApiCleanup
-         62   3D 00008D50 McastApiStartup
-         63   3E 00008E40 McastEnumerateScopes
-         64   3F 000090B0 McastGenUID
-         65   40 00009220 McastReleaseAddress
-         66   41 00009470 McastRenewAddress
-         67   42 000097B0 McastRequestAddress
-
-  Summary
-
-        1000 .data
-        1000 .didat
-        1000 .pdata
-        8000 .rdata
-        1000 .reloc
-        1000 .rsrc
-        C000 .text
-Microsoft (R) COFF/PE Dumper Version 14.36.32538.0
-Copyright (C) Microsoft Corporation.  All rights reserved.
-
-
-Dump of file 10.0.10240\DWrite.dll
-
-File Type: DLL
-
-  Section contains the following exports for DWrite.dll
-
-    00000000 characteristics
-    621EE1CA time date stamp Tue Mar  1 19:17:30 2022
-        0.00 version
-           1 ordinal base
-           1 number of functions
-           1 number of names
-
-    ordinal hint RVA      name
-
-          1    0 0006A440 DWriteCreateFactory
-
-  Summary
-
-        8000 .data
-        1000 .didat
-       13000 .pdata
-       A9000 .rdata
-        2000 .reloc
-       3C000 .rsrc
-      153000 .text
-Microsoft (R) COFF/PE Dumper Version 14.36.32538.0
-Copyright (C) Microsoft Corporation.  All rights reserved.
-
-
-Dump of file 10.0.10240\IPHLPAPI.DLL
-
-File Type: DLL
-
-  Section contains the following exports for IPHLPAPI.DLL
-
-    00000000 characteristics
-    559F3036 time date stamp Thu Jul  9 19:38:46 2015
-        0.00 version
-           1 ordinal base
-         277 number of functions
-         277 number of names
-
-    ordinal hint RVA      name
-
-          1    0 0001E0D0 AddIPAddress
-          2    1 0001C5B0 AllocateAndGetInterfaceInfoFromStack
-          3    2 0001D5F0 AllocateAndGetIpAddrTableFromStack
-          4    3 0000B0C0 CancelIPChangeNotify
-          5    4 0000A280 CancelMibChangeNotify2
-          6    5 00022FE0 CloseCompartment
-          7    6 0001D620 CloseGetIPPhysicalInterfaceForDestination
-          8    7 000237D0 ConvertCompartmentGuidToId
-          9    8 00023860 ConvertCompartmentIdToGuid
-         10    9 0000A820 ConvertGuidToStringA
-         11    A 000086C0 ConvertGuidToStringW
-         12    B 00023960 ConvertInterfaceAliasToLuid
-         13    C 000036F0 ConvertInterfaceGuidToLuid
-         14    D 00003810 ConvertInterfaceIndexToLuid
-         15    E 0000C490 ConvertInterfaceLuidToAlias
-         16    F 000091B0 ConvertInterfaceLuidToGuid
-         17   10 00008640 ConvertInterfaceLuidToIndex
-         18   11 00023AF0 ConvertInterfaceLuidToNameA
-         19   12 00003D70 ConvertInterfaceLuidToNameW
-         20   13 00023BA0 ConvertInterfaceNameToLuidA
-         21   14 00004100 ConvertInterfaceNameToLuidW
-         22   15 00023C80 ConvertInterfacePhysicalAddressToLuid
-         23   16 00022DA0 ConvertIpv4MaskToLength
-         24   17 00001F80 ConvertLengthToIpv4Mask
-         25   18 0001C7B0 ConvertRemoteInterfaceAliasToLuid
-         26   19 0001C950 ConvertRemoteInterfaceGuidToLuid
-         27   1A 0001CAA0 ConvertRemoteInterfaceIndexToLuid
-         28   1B 0001CB10 ConvertRemoteInterfaceLuidToAlias
-         29   1C 0001CC50 ConvertRemoteInterfaceLuidToGuid
-         30   1D 0001CCD0 ConvertRemoteInterfaceLuidToIndex
-         31   1E 0001CD50 ConvertStringToGuidA
-         32   1F 0000ECA0 ConvertStringToGuidW
-         33   20 00023E00 ConvertStringToInterfacePhysicalAddress
-         34   21 00023F80 CreateAnycastIpAddressEntry
-         35   22 00022FF0 CreateCompartment
-         36   23 0001E220 CreateIpForwardEntry
-         37   24 00025180 CreateIpForwardEntry2
-         38   25 0001E230 CreateIpNetEntry
-         39   26 00025940 CreateIpNetEntry2
-         40   27 000209F0 CreatePersistentTcpPortReservation
-         41   28 00020A30 CreatePersistentUdpPortReservation
-         42   29 0001E500 CreateProxyArpEntry
-         43   2A 00026080 CreateSortedAddressPairs
-         44   2B 00023FA0 CreateUnicastIpAddressEntry
-         45   2C 00023FC0 DeleteAnycastIpAddressEntry
-         46   2D 00023170 DeleteCompartment
-         47   2E 0001E520 DeleteIPAddress
-         48   2F 0001E610 DeleteIpForwardEntry
-         49   30 000251A0 DeleteIpForwardEntry2
-         50   31 0001E6E0 DeleteIpNetEntry
-         51   32 00025960 DeleteIpNetEntry2
-         52   33 00020A70 DeletePersistentTcpPortReservation
-         53   34 00020AB0 DeletePersistentUdpPortReservation
-         54   35 0001E790 DeleteProxyArpEntry
-         55   36 00023FE0 DeleteUnicastIpAddressEntry
-         56   37 00010420 DisableMediaSense
-         57   38 0001E7B0 EnableRouter
-         58   39 0001E810 FlushIpNetTable
-         59   3A 00025980 FlushIpNetTable2
-         60   3B 000263A0 FlushIpPathTable
-         61   3C 0000A320 FreeMibTable
-         62   3D 0001CDE0 GetAdapterIndex
-         63   3E 0001CE70 GetAdapterOrderMap
-         64   3F 000028D0 GetAdaptersAddresses
-         65   40 00001DA0 GetAdaptersInfo
-         66   41 00024000 GetAnycastIpAddressEntry
-         67   42 00024020 GetAnycastIpAddressTable
-         68   43 00009000 GetBestInterface
-         69   44 00008FF0 GetBestInterfaceEx
-         70   45 0001E890 GetBestRoute
-         71   46 00009500 GetBestRoute2
-         72   47 000069D0 GetCurrentThreadCompartmentId
-         73   48 00003BC0 GetCurrentThreadCompartmentScope
-         74   49 0000B2B0 GetExtendedTcpTable
-         75   4A 0000C1A0 GetExtendedUdpTable
-         76   4B 0001CF90 GetFriendlyIfIndex
-         77   4C 0001EA30 GetIcmpStatistics
-         78   4D 0000EF90 GetIcmpStatisticsEx
-         79   4E 00008EC0 GetIfEntry
-         80   4F 000042E0 GetIfEntry2
-         81   50 000024D0 GetIfStackTable
-         82   51 0001CFA0 GetIfTable
-         83   52 00003880 GetIfTable2
-         84   53 00001610 GetIfTable2Ex
-         85   54 0001D150 GetInterfaceInfo
-         86   55 00026930 GetInvertedIfStackTable
-         87   56 0001EB50 GetIpAddrTable
-         88   57 0001C4E0 GetIpErrorString
-         89   58 000251C0 GetIpForwardEntry2
-         90   59 0001ED50 GetIpForwardTable
-         91   5A 0000AAD0 GetIpForwardTable2
-         92   5B 0000A260 GetIpInterfaceEntry
-         93   5C 0000AAF0 GetIpInterfaceTable
-         94   5D 0000A800 GetIpNetEntry2
-         95   5E 0001F0B0 GetIpNetTable
-         96   5F 00025A60 GetIpNetTable2
-         97   60 00026940 GetIpNetworkConnectionBandwidthEstimates
-         98   61 00026490 GetIpPathEntry
-         99   62 00026680 GetIpPathTable
-        100   63 0001F2E0 GetIpStatistics
-        101   64 00003980 GetIpStatisticsEx
-        102   65 000231C0 GetJobCompartmentId
-        103   66 00024040 GetMulticastIpAddressEntry
-        104   67 00024060 GetMulticastIpAddressTable
-        105   68 00023220 GetNetworkInformation
-        106   69 000011F0 GetNetworkParams
-        107   6A 0000EF00 GetNumberOfInterfaces
-        108   6B 0001BC90 GetOwnerModuleFromPidAndInfo
-        109   6C 00021490 GetOwnerModuleFromTcp6Entry
-        110   6D 000214D0 GetOwnerModuleFromTcpEntry
-        111   6E 000223D0 GetOwnerModuleFromUdp6Entry
-        112   6F 00022410 GetOwnerModuleFromUdpEntry
-        113   70 0001C370 GetPerAdapterInfo
-        114   71 0000B8E0 GetPerTcp6ConnectionEStats
-        115   72 00021510 GetPerTcp6ConnectionStats
-        116   73 0000BB20 GetPerTcpConnectionEStats
-        117   74 000215D0 GetPerTcpConnectionStats
-        118   75 0001FC70 GetRTTAndHopCount
-        119   76 000038A0 GetSessionCompartmentId
-        120   77 00021670 GetTcp6Table
-        121   78 000218C0 GetTcp6Table2
-        122   79 00021E30 GetTcpStatistics
-        123   7A 0000F0D0 GetTcpStatisticsEx
-        124   7B 00021E40 GetTcpTable
-        125   7C 00021E60 GetTcpTable2
-        126   7D 00026F80 GetTeredoPort
-        127   7E 00022450 GetUdp6Table
-        128   7F 000228C0 GetUdpStatistics
-        129   80 0000F210 GetUdpStatisticsEx
-        130   81 000228D0 GetUdpTable
-        131   82 0001F2F0 GetUniDirectionalAdapterInfo
-        132   83 0000A510 GetUnicastIpAddressEntry
-        133   84 000064E0 GetUnicastIpAddressTable
-        134   85 00022B40 GetWPAOACSupportLevel
-        135   86 0000AE90 Icmp6CreateFile
-        136   87 00001A50 Icmp6ParseReplies
-        137   88 000017A0 Icmp6SendEcho2
-        138   89 00001120 IcmpCloseHandle
-        139   8A 0001FE90 IcmpCreateFile
-        140   8B 000200E0 IcmpParseReplies
-        141   8C 00020130 IcmpSendEcho
-        142   8D 00020190 IcmpSendEcho2
-        143   8E 00020200 IcmpSendEcho2Ex
-        144   8F 00023310 InitializeCompartmentEntry
-        145   90 0000EE70 InitializeIpForwardEntry
-        146   91 00026A40 InitializeIpInterfaceEntry
-        147   92 00024080 InitializeUnicastIpAddressEntry
-        148   93 00026BC0 InternalCleanupPersistentStore
-        149   94 000241F0 InternalCreateAnycastIpAddressEntry
-        150   95 0001D740 InternalCreateIpForwardEntry
-        151   96 000253B0 InternalCreateIpForwardEntry2
-        152   97 0001D760 InternalCreateIpNetEntry
-        153   98 00025B90 InternalCreateIpNetEntry2
-        154   99 00024210 InternalCreateUnicastIpAddressEntry
-        155   9A 00024230 InternalDeleteAnycastIpAddressEntry
-        156   9B 0001D780 InternalDeleteIpForwardEntry
-        157   9C 000253D0 InternalDeleteIpForwardEntry2
-        158   9D 0001D790 InternalDeleteIpNetEntry
-        159   9E 00025BB0 InternalDeleteIpNetEntry2
-        160   9F 00024250 InternalDeleteUnicastIpAddressEntry
-        161   A0 00024270 InternalFindInterfaceByAddress
-        162   A1 00024360 InternalGetAnycastIpAddressEntry
-        163   A2 00024380 InternalGetAnycastIpAddressTable
-        164   A3 0001D7A0 InternalGetBoundTcp6EndpointTable
-        165   A4 0001D7E0 InternalGetBoundTcpEndpointTable
-        166   A5 00008830 InternalGetForwardIpTable2
-        167   A6 0000A900 InternalGetIPPhysicalInterfaceForDestination
-        168   A7 00004B90 InternalGetIfEntry2
-        169   A8 0001D970 InternalGetIfTable
-        170   A9 00026C70 InternalGetIfTable2
-        171   AA 0001D9B0 InternalGetIpAddrTable
-        172   AB 000253F0 InternalGetIpForwardEntry2
-        173   AC 0001D9F0 InternalGetIpForwardTable
-        174   AD 0000A0B0 InternalGetIpInterfaceEntry
-        175   AE 00009AE0 InternalGetIpInterfaceTable
-        176   AF 0000A600 InternalGetIpNetEntry2
-        177   B0 0001DA30 InternalGetIpNetTable
-        178   B1 00025BD0 InternalGetIpNetTable2
-        179   B2 000243A0 InternalGetMulticastIpAddressEntry
-        180   B3 000243C0 InternalGetMulticastIpAddressTable
-        181   B4 0000C5A0 InternalGetRtcSlotInformation
-        182   B5 0001DB50 InternalGetTcp6Table2
-        183   B6 0001DB90 InternalGetTcp6TableWithOwnerModule
-        184   B7 0001DBD0 InternalGetTcp6TableWithOwnerPid
-        185   B8 0001DC10 InternalGetTcpTable
-        186   B9 0001DC50 InternalGetTcpTable2
-        187   BA 0001DC90 InternalGetTcpTableEx
-        188   BB 0001DCD0 InternalGetTcpTableWithOwnerModule
-        189   BC 0001DD10 InternalGetTcpTableWithOwnerPid
-        190   BD 00003130 InternalGetTunnelPhysicalAdapter
-        191   BE 0001DD50 InternalGetUdp6TableWithOwnerModule
-        192   BF 0001DD90 InternalGetUdp6TableWithOwnerPid
-        193   C0 0001DDD0 InternalGetUdpTable
-        194   C1 0001DE10 InternalGetUdpTableEx
-        195   C2 0001DE50 InternalGetUdpTableWithOwnerModule
-        196   C3 0001DE90 InternalGetUdpTableWithOwnerPid
-        197   C4 000243E0 InternalGetUnicastIpAddressEntry
-        198   C5 000243F0 InternalGetUnicastIpAddressTable
-        199   C6 0001DED0 InternalIcmpCreateFileEx
-        200   C7 0001DF00 InternalSetIfEntry
-        201   C8 0001DF10 InternalSetIpForwardEntry
-        202   C9 00025670 InternalSetIpForwardEntry2
-        203   CA 00026C80 InternalSetIpInterfaceEntry
-        204   CB 0001DF30 InternalSetIpNetEntry
-        205   CC 00025E90 InternalSetIpNetEntry2
-        206   CD 0001DF50 InternalSetIpStats
-        207   CE 0001DF70 InternalSetTcpEntry
-        208   CF 00027000 InternalSetTeredoPort
-        209   D0 000246D0 InternalSetUnicastIpAddressEntry
-        210   D1 0001F410 IpReleaseAddress
-        211   D2 0001F460 IpRenewAddress
-        212   D3 00020BD0 LookupPersistentTcpPortReservation
-        213   D4 00020C10 LookupPersistentUdpPortReservation
-        214   D5 0001F890 NTPTimeToNTFileTime
-        215   D6 0001F920 NTTimeToNTPTime
-        216   D7 0001D360 NhGetGuidFromInterfaceName
-        217   D8 0001D390 NhGetInterfaceDescriptionFromGuid
-        218   D9 0000C430 NhGetInterfaceNameFromDeviceGuid
-        219   DA 0000C430 NhGetInterfaceNameFromGuid
-        220   DB 0001C5B0 NhpAllocateAndGetInterfaceInfoFromStack
-        221   DC 0000AE60 NotifyAddrChange
-        222   DD 000233D0 NotifyCompartmentChange
-        223   DE 00009870 NotifyIpInterfaceChange
-        224   DF 0001F4B0 NotifyRouteChange
-        225   E0 0000EB30 NotifyRouteChange2
-        226   E1 00024F40 NotifyStableUnicastIpAddressTable
-        227   E2 000270C0 NotifyTeredoPortChange
-        228   E3 00009AB0 NotifyUnicastIpAddressChange
-        229   E4 00023480 OpenCompartment
-        230   E5 0000F300 ParseNetworkString
-        231   E6 0001FC60 PfAddFiltersToInterface
-        232   E7 0001FC60 PfAddGlobalFilterToInterface
-        233   E8 0001FC60 PfBindInterfaceToIPAddress
-        234   E9 0001FC60 PfBindInterfaceToIndex
-        235   EA 0001FC60 PfCreateInterface
-        236   EB 0001FC60 PfDeleteInterface
-        237   EC 0001FC60 PfDeleteLog
-        238   ED 0001FC60 PfGetInterfaceStatistics
-        239   EE 0001FC60 PfMakeLog
-        240   EF 0001FC60 PfRebindFilters
-        241   F0 0001FC60 PfRemoveFilterHandles
-        242   F1 0001FC60 PfRemoveFiltersFromInterface
-        243   F2 0001FC60 PfRemoveGlobalFilterFromInterface
-        244   F3 0001FC60 PfSetLogBuffer
-        245   F4 0001FC60 PfTestPacket
-        246   F5 0001FC60 PfUnBindInterface
-        247   F6 0000ED00 ResolveIpNetEntry2
-        248   F7 0001F4E0 ResolveNeighbor
-        249   F8 00010420 RestoreMediaSense
-        250   F9 0001F4F0 SendARP
-        251   FA 0001DF80 SetAdapterIpAddress
-        252   FB 000235E0 SetCurrentThreadCompartmentId
-        253   FC 00009D60 SetCurrentThreadCompartmentScope
-        254   FD 0001D4B0 SetIfEntry
-        255   FE 0001F5D0 SetIpForwardEntry
-        256   FF 00025920 SetIpForwardEntry2
-        257  100 00026F60 SetIpInterfaceEntry
-        258  101 0001F5E0 SetIpNetEntry
-        259  102 00026060 SetIpNetEntry2
-        260  103 0001F5F0 SetIpStatistics
-        261  104 0001F600 SetIpStatisticsEx
-        262  105 0001F6E0 SetIpTTL
-        263  106 00023630 SetJobCompartmentId
-        264  107 00023690 SetNetworkInformation
-        265  108 0000B0F0 SetPerTcp6ConnectionEStats
-        266  109 000221B0 SetPerTcp6ConnectionStats
-        267  10A 0000B1E0 SetPerTcpConnectionEStats
-        268  10B 00022250 SetPerTcpConnectionStats
-        269  10C 00023770 SetSessionCompartmentId
-        270  10D 000222E0 SetTcpEntry
-        271  10E 00025160 SetUnicastIpAddressEntry
-        272  10F 0001F810 UnenableRouter
-        273  110 00020690 do_echo_rep
-        274  111 00020860 do_echo_req
-        275  112 00023EE0 if_indextoname
-        276  113 00023F30 if_nametoindex
-        277  114 000209B0 register_icmp
-
-  Summary
-
-        1000 .data
-        1000 .didat
-        2000 .pdata
-        A000 .rdata
-        1000 .reloc
-        1000 .rsrc
-       27000 .text
-Microsoft (R) COFF/PE Dumper Version 14.36.32538.0
-Copyright (C) Microsoft Corporation.  All rights reserved.
-
-
-Dump of file 10.0.10240\kernel32.dll
-
-File Type: DLL
-
-  Section contains the following exports for KERNEL32.dll
-
-    00000000 characteristics
-    64099EB2 time date stamp Thu Mar  9 00:54:10 2023
-        0.00 version
-           1 ordinal base
-        1596 number of functions
-        1596 number of names
-
-    ordinal hint RVA      name
-
-          1    0          AcquireSRWLockExclusive (forwarded to NTDLL.RtlAcquireSRWLockExclusive)
-          2    1          AcquireSRWLockShared (forwarded to NTDLL.RtlAcquireSRWLockShared)
-          3    2 00021980 ActivateActCtx
-          4    3 00019510 ActivateActCtxWorker
-          5    4 00024640 AddAtomA
-          6    5 00014870 AddAtomW
-          7    6 000640D0 AddConsoleAliasA
-          8    7 00064230 AddConsoleAliasW
-          9    8          AddDllDirectory (forwarded to api-ms-win-core-libraryloader-l1-1-0.AddDllDirectory)
-         10    9 00043200 AddIntegrityLabelToBoundaryDescriptor
-         11    A 00039410 AddLocalAlternateComputerNameA
-         12    B 00039470 AddLocalAlternateComputerNameW
-         13    C 000243C0 AddRefActCtx
-         14    D 0001DD10 AddRefActCtxWorker
-         15    E 00041F00 AddResourceAttributeAce
-         16    F 00020D10 AddSIDToBoundaryDescriptor
-         17   10 00041F10 AddScopedPolicyIDAce
-         18   11 0003F0C0 AddSecureMemoryCacheCallback
-         19   12          AddVectoredContinueHandler (forwarded to NTDLL.RtlAddVectoredContinueHandler)
-         20   13          AddVectoredExceptionHandler (forwarded to NTDLL.RtlAddVectoredExceptionHandler)
-         21   14 00018010 AdjustCalendarDate
-         22   15 00026A20 AllocConsole
-         23   16 00041F30 AllocateUserPhysicalPages
-         24   17 00041F20 AllocateUserPhysicalPagesNuma
-         25   18          AppXGetOSMaxVersionTested (forwarded to kernelbase.AppXGetOSMaxVersionTested)
-         26   19 0004E830 ApplicationRecoveryFinished
-         27   1A 0004E840 ApplicationRecoveryInProgress
-         28   1B 00020C00 AreFileApisANSI
-         29   1C 00016860 AssignProcessToJobObject
-         30   1D 00026B00 AttachConsole
-         31   1E 00037110 BackupRead
-         32   1F 00037FD0 BackupSeek
-         33   20 000382A0 BackupWrite
-         34   21 00041FA0 BaseCheckAppcompatCache
-         35   22 00041F40 BaseCheckAppcompatCacheEx
-         36   23 00023920 BaseCheckAppcompatCacheExWorker
-         37   24 00023920 BaseCheckAppcompatCacheWorker
-         38   25 00019F70 BaseCheckElevation
-         39   26 00041FB0 BaseCleanupAppcompatCacheSupport
-         40   27 00024D30 BaseCleanupAppcompatCacheSupportWorker
-         41   28 000487B0 BaseDestroyVDMEnvironment
-         42   29 00012240 BaseDllReadWriteIniFile
-         43   2A 00041FC0 BaseDumpAppcompatCache
-         44   2B 000271A0 BaseDumpAppcompatCacheWorker
-         45   2C 0001F160 BaseElevationPostProcessing
-         46   2D 00041FD0 BaseFlushAppcompatCache
-         47   2E 0006AD20 BaseFlushAppcompatCacheWorker
-         48   2F 0001DC40 BaseFormatObjectAttributes
-         49   30 000627D0 BaseFormatTimeOut
-         50   31 00023680 BaseFreeAppCompatDataForProcessWorker
-         51   32 0001FDB0 BaseGenerateAppCompatData
-         52   33 00041FE0 BaseGetNamedObjectDirectory
-         53   34 00041FF0 BaseInitAppcompatCacheSupport
-         54   35 00024D30 BaseInitAppcompatCacheSupportWorker
-         55   36 00023920 BaseIsAppcompatInfrastructureDisabled
-         56   37 00023920 BaseIsAppcompatInfrastructureDisabledWorker
-         57   38 000232D0 BaseIsDosApplication
-         58   39 0006ADB0 BaseQueryModuleData
-         59   3A 00020D50 BaseReadAppCompatDataForProcessWorker
-         60   3B 00015000 BaseSetLastNTError
-         61   3C 000110E0 BaseThreadInitThunk
-         62   3D 00042000 BaseUpdateAppcompatCache
-         63   3E 0006AD80 BaseUpdateAppcompatCacheWorker
-         64   3F 00048AC0 BaseUpdateVDMEntry
-         65   40 00062860 BaseVerifyUnicodeString
-         66   41 0003C960 BaseWriteErrorElevationRequiredEvent
-         67   42 00016B60 Basep8BitStringToDynamicUnicodeString
-         68   43 000628C0 BasepAllocateActivationContextActivationBlock
-         69   44 00062800 BasepAnsiStringToDynamicUnicodeString
-         70   45 0001B930 BasepAppContainerEnvironmentExtension
-         71   46 00023110 BasepAppXExtension
-         72   47 0001A7A0 BasepCheckAppCompat
-         73   48 0001F200 BasepCheckWebBladeHashes
-         74   49 0001B430 BasepCheckWinSaferRestrictions
-         75   4A 0000CFE0 BasepConstructSxsCreateProcessMessage
-         76   4B 0001D410 BasepCopyEncryption
-         77   4C 00062A30 BasepFreeActivationContextActivationBlock
-         78   4D 0001D810 BasepFreeAppCompatData
-         79   4E 0000B880 BasepGetAppCompatData
-         80   4F 0001C950 BasepGetComputerNameFromNtPath
-         81   50 0001A880 BasepGetExeArchType
-         82   51 0001D8A0 BasepIsProcessAllowed
-         83   52 00016450 BasepMapModuleHandle
-         84   53 00011630 BasepNotifyLoadStringResource
-         85   54 000239F0 BasepPostSuccessAppXExtension
-         86   55 00023150 BasepProcessInvalidImage
-         87   56 0000C2D0 BasepQueryAppCompat
-         88   57 000239E0 BasepReleaseAppXContext
-         89   58 0000A560 BasepReleaseSxsCreateProcessUtilityStruct
-         90   59 000219B0 BasepReportFault
-         91   5A 00022340 BasepSetFileEncryptionCompression
-         92   5B 00039210 Beep
-         93   5C 000544B0 BeginUpdateResourceA
-         94   5D 00054510 BeginUpdateResourceW
-         95   5E 00025A70 BindIoCompletionCallback
-         96   5F 0004C260 BuildCommDCBA
-         97   60 0004C290 BuildCommDCBAndTimeoutsA
-         98   61 0004C2C0 BuildCommDCBAndTimeoutsW
-         99   62 0004C330 BuildCommDCBW
-        100   63 0003F970 CallNamedPipeA
-        101   64 0003FA00 CallNamedPipeW
-        102   65 00023A00 CallbackMayRunLong
-        103   66 00026950 CalloutOnFiberStack
-        104   67 00040B30 CancelDeviceWakeupRequest
-        105   68 00023AC0 CancelIo
-        106   69 00022FA0 CancelIoEx
-        107   6A 00001420 CancelSynchronousIo
-        108   6B          CancelThreadpoolIo (forwarded to NTDLL.TpCancelAsyncIoOperation)
-        109   6C 0004EAC0 CancelTimerQueueTimer
-        110   6D 00026120 CancelWaitableTimer
-        111   6E          CeipIsOptedIn (forwarded to kernelbase.CeipIsOptedIn)
-        112   6F 00023AD0 ChangeTimerQueueTimer
-        113   70 0003DE80 CheckAllowDecryptedRemoteDestinationPolicy
-        114   71 00019E40 CheckElevation
-        115   72 0000C5F0 CheckElevationEnabled
-        116   73 00043230 CheckForReadOnlyResource
-        117   74 00023C30 CheckForReadOnlyResourceFilter
-        118   75 00040520 CheckNameLegalDOS8Dot3A
-        119   76 000405C0 CheckNameLegalDOS8Dot3W
-        120   77 00023CD0 CheckRemoteDebuggerPresent
-        121   78 00042010 CheckTokenCapability
-        122   79 00042020 CheckTokenMembershipEx
-        123   7A 00026800 ClearCommBreak
-        124   7B 00026810 ClearCommError
-        125   7C 00064B00 CloseConsoleHandle
-        126   7D 000260E0 CloseHandle
-        127   7E          ClosePackageInfo (forwarded to kernelbase.ClosePackageInfo)
-        128   7F 00024A20 ClosePrivateNamespace
-        129   80 00024D30 CloseProfileUserMapping
-        130   81          CloseState (forwarded to kernelbase.CloseState)
-        131   82          CloseThreadpool (forwarded to NTDLL.TpReleasePool)
-        132   83          CloseThreadpoolCleanupGroup (forwarded to NTDLL.TpReleaseCleanupGroup)
-        133   84          CloseThreadpoolCleanupGroupMembers (forwarded to NTDLL.TpReleaseCleanupGroupMembers)
-        134   85          CloseThreadpoolIo (forwarded to NTDLL.TpReleaseIoCompletion)
-        135   86          CloseThreadpoolTimer (forwarded to NTDLL.TpReleaseTimer)
-        136   87          CloseThreadpoolWait (forwarded to NTDLL.TpReleaseWait)
-        137   88          CloseThreadpoolWork (forwarded to NTDLL.TpReleaseWork)
-        138   89 00022270 CmdBatNotification
-        139   8A 00045F60 CommConfigDialogA
-        140   8B 00045FF0 CommConfigDialogW
-        141   8C 00054DC0 CompareCalendarDates
-        142   8D 000262F0 CompareFileTime
-        143   8E 000217C0 CompareStringA
-        144   8F 00016CA0 CompareStringEx
-        145   90 0001C380 CompareStringOrdinal
-        146   91 0001E160 CompareStringW
-        147   92 00023C20 ConnectNamedPipe
-        148   93 00064BD0 ConsoleMenuControl
-        149   94 00042030 ContinueDebugEvent
-        150   95 00054E70 ConvertCalDateTimeToSystemTime
-        151   96 00023B90 ConvertDefaultLocale
-        152   97 00026960 ConvertFiberToThread
-        153   98 00054F60 ConvertNLSDayOfWeekToWin32DayOfWeek
-        154   99 000182A0 ConvertSystemTimeToCalDateTime
-        155   9A 00026970 ConvertThreadToFiber
-        156   9B 00026980 ConvertThreadToFiberEx
-        157   9C 00042040 CopyContext
-        158   9D 00042050 CopyFile2
-        159   9E 0003DF50 CopyFileA
-        160   9F 0003DFE0 CopyFileExA
-        161   A0 000230F0 CopyFileExW
-        162   A1 0003E090 CopyFileTransactedA
-        163   A2 00025910 CopyFileTransactedW
-        164   A3 00026940 CopyFileW
-        165   A4 0003AA80 CopyLZFile
-        166   A5 00023FD0 CreateActCtxA
-        167   A6 000239D0 CreateActCtxW
-        168   A7 00008F00 CreateActCtxWWorker
-        169   A8 000433A0 CreateBoundaryDescriptorA
-        170   A9 00020D00 CreateBoundaryDescriptorW
-        171   AA 00026B10 CreateConsoleScreenBuffer
-        172   AB 00026300 CreateDirectoryA
-        173   AC 0003AE80 CreateDirectoryExA
-        174   AD 00042060 CreateDirectoryExW
-        175   AE 0003AF00 CreateDirectoryTransactedA
-        176   AF 0003AFA0 CreateDirectoryTransactedW
-        177   B0 00026310 CreateDirectoryW
-        178   B1 00026130 CreateEventA
-        179   B2 00026140 CreateEventExA
-        180   B3 00026150 CreateEventExW
-        181   B4 00026160 CreateEventW
-        182   B5 00026990 CreateFiber
-        183   B6 000269A0 CreateFiberEx
-        184   B7 00026320 CreateFile2
-        185   B8 00026330 CreateFileA
-        186   B9 00016890 CreateFileMappingA
-        187   BA          CreateFileMappingFromApp (forwarded to api-ms-win-core-memory-l1-1-1.CreateFileMappingFromApp)
-        188   BB 0003D000 CreateFileMappingNumaA
-        189   BC 00042070 CreateFileMappingNumaW
-        190   BD 0001E190 CreateFileMappingW
-        191   BE 0003E380 CreateFileTransactedA
-        192   BF 0003E440 CreateFileTransactedW
-        193   C0 00026340 CreateFileW
-        194   C1 00042080 CreateHardLinkA
-        195   C2 0004DF80 CreateHardLinkTransactedA
-        196   C3 0004E020 CreateHardLinkTransactedW
-        197   C4 00024CA0 CreateHardLinkW
-        198   C5 0001F1F0 CreateIoCompletionPort
-        199   C6 0004DA20 CreateJobObjectA
-        200   C7 0001DA20 CreateJobObjectW
-        201   C8 0004DA90 CreateJobSet
-        202   C9 00016950 CreateMailslotA
-        203   CA 000169C0 CreateMailslotW
-        204   CB 000230D0 CreateMemoryResourceNotification
-        205   CC 00026170 CreateMutexA
-        206   CD 00026180 CreateMutexExA
-        207   CE 00026190 CreateMutexExW
-        208   CF 000261A0 CreateMutexW
-        209   D0 0003FB90 CreateNamedPipeA
-        210   D1 00023890 CreateNamedPipeW
-        211   D2 00023100 CreatePipe
-        212   D3 00043400 CreatePrivateNamespaceA
-        213   D4 00023420 CreatePrivateNamespaceW
-        214   D5 0001DD60 CreateProcessA
-        215   D6 00042090 CreateProcessAsUserA
-        216   D7 000207C0 CreateProcessAsUserW
-        217   D8 00042100 CreateProcessInternalA
-        218   D9 00042180 CreateProcessInternalW
-        219   DA 0001E6D0 CreateProcessW
-        220   DB 00042200 CreateRemoteThread
-        221   DC          CreateRemoteThreadEx (forwarded to api-ms-win-core-processthreads-l1-1-0.CreateRemoteThreadEx)
-        222   DD 00016BC0 CreateSemaphoreA
-        223   DE 00016BF0 CreateSemaphoreExA
-        224   DF 000261B0 CreateSemaphoreExW
-        225   E0 000261C0 CreateSemaphoreW
-        226   E1 0003D280 CreateSymbolicLinkA
-        227   E2 0003D320 CreateSymbolicLinkTransactedA
-        228   E3 0003D3D0 CreateSymbolicLinkTransactedW
-        229   E4 00042250 CreateSymbolicLinkW
-        230   E5 0004D1B0 CreateTapePartition
-        231   E6 0001C4A0 CreateThread
-        232   E7 00023930 CreateThreadpool
-        233   E8 00023A80 CreateThreadpoolCleanupGroup
-        234   E9 00024850 CreateThreadpoolIo
-        235   EA 0001F8C0 CreateThreadpoolTimer
-        236   EB 000233D0 CreateThreadpoolWait
-        237   EC 00023010 CreateThreadpoolWork
-        238   ED 00023B70 CreateTimerQueue
-        239   EE 0001DD20 CreateTimerQueueTimer
-        240   EF 00027400 CreateToolhelp32Snapshot
-        241   F0 0004BF30 CreateUmsCompletionList
-        242   F1 0004BF60 CreateUmsThreadContext
-        243   F2 00024440 CreateWaitableTimerA
-        244   F3 00024470 CreateWaitableTimerExA
-        245   F4 000261D0 CreateWaitableTimerExW
-        246   F5 00023720 CreateWaitableTimerW
-        247   F6          CtrlRoutine (forwarded to kernelbase.CtrlRoutine)
-        248   F7 00021990 DeactivateActCtx
-        249   F8 00019560 DeactivateActCtxWorker
-        250   F9 00042270 DebugActiveProcess
-        251   FA 00042260 DebugActiveProcessStop
-        252   FB 00042280 DebugBreak
-        253   FC 0003AD50 DebugBreakProcess
-        254   FD 0003AD80 DebugSetProcessKillOnExit
-        255   FE          DecodePointer (forwarded to NTDLL.RtlDecodePointer)
-        256   FF          DecodeSystemPointer (forwarded to NTDLL.RtlDecodeSystemPointer)
-        257  100 0003C640 DefineDosDeviceA
-        258  101 00026350 DefineDosDeviceW
-        259  102 00042290 DelayLoadFailureHook
-        260  103 000147E0 DeleteAtom
-        261  104 00020CF0 DeleteBoundaryDescriptor
-        262  105          DeleteCriticalSection (forwarded to NTDLL.RtlDeleteCriticalSection)
-        263  106 000269B0 DeleteFiber
-        264  107 00026360 DeleteFileA
-        265  108 0003D480 DeleteFileTransactedA
-        266  109 000259C0 DeleteFileTransactedW
-        267  10A 00026370 DeleteFileW
-        268  10B          DeleteProcThreadAttributeList (forwarded to api-ms-win-core-processthreads-l1-1-0.DeleteProcThreadAttributeList)
-        269  10C 000422A0 DeleteSynchronizationBarrier
-        270  10D 00023AF0 DeleteTimerQueue
-        271  10E 00023BD0 DeleteTimerQueueEx
-        272  10F 0001F5E0 DeleteTimerQueueTimer
-        273  110 0004BF90 DeleteUmsCompletionList
-        274  111 0004BFC0 DeleteUmsThreadContext
-        275  112 0004A440 DeleteVolumeMountPointA
-        276  113 00062A80 DeleteVolumeMountPointW
-        277  114 0004BFF0 DequeueUmsCompletionListItems
-        278  115 00017060 DeviceIoControl
-        279  116 00022D40 DisableThreadLibraryCalls
-        280  117 0004EB40 DisableThreadProfiling
-        281  118          DisassociateCurrentThreadFromCallback (forwarded to NTDLL.TpDisassociateCallback)
-        282  119          DiscardVirtualMemory (forwarded to api-ms-win-core-memory-l1-1-2.DiscardVirtualMemory)
-        283  11A 000243F0 DisconnectNamedPipe
-        284  11B 0003A190 DnsHostnameToComputerNameA
-        285  11C 000422B0 DnsHostnameToComputerNameExW
-        286  11D 0001DF10 DnsHostnameToComputerNameW
-        287  11E 00014890 DosDateTimeToFileTime
-        288  11F 00041BB0 DosPathToSessionPathA
-        289  120 00041D80 DosPathToSessionPathW
-        290  121 00064B10 DuplicateConsoleHandle
-        291  122 0003E5C0 DuplicateEncryptionInfoFileExt
-        292  123 000260F0 DuplicateHandle
-        293  124 0004EB70 EnableThreadProfiling
-        294  125          EncodePointer (forwarded to NTDLL.RtlEncodePointer)
-        295  126          EncodeSystemPointer (forwarded to NTDLL.RtlEncodeSystemPointer)
-        296  127 00054720 EndUpdateResourceA
-        297  128 00054730 EndUpdateResourceW
-        298  129          EnterCriticalSection (forwarded to NTDLL.RtlEnterCriticalSection)
-        299  12A 000422C0 EnterSynchronizationBarrier
-        300  12B 0004C040 EnterUmsSchedulingMode
-        301  12C 000559D0 EnumCalendarInfoA
-        302  12D 00055A60 EnumCalendarInfoExA
-        303  12E 00021400 EnumCalendarInfoExEx
-        304  12F 000422D0 EnumCalendarInfoExW
-        305  130 000422E0 EnumCalendarInfoW
-        306  131 00055AF0 EnumDateFormatsA
-        307  132 00055B50 EnumDateFormatsExA
-        308  133 000422F0 EnumDateFormatsExEx
-        309  134 00042300 EnumDateFormatsExW
-        310  135 00042310 EnumDateFormatsW
-        311  136 00055BB0 EnumLanguageGroupLocalesA
-        312  137 00042320 EnumLanguageGroupLocalesW
-        313  138 0003F5F0 EnumResourceLanguagesA
-        314  139 00042330 EnumResourceLanguagesExA
-        315  13A 00042350 EnumResourceLanguagesExW
-        316  13B 00024D00 EnumResourceLanguagesW
-        317  13C 0003F620 EnumResourceNamesA
-        318  13D 00042370 EnumResourceNamesExA
-        319  13E 00042390 EnumResourceNamesExW
-        320  13F 000242A0 EnumResourceNamesW
-        321  140 0003F650 EnumResourceTypesA
-        322  141 000423B0 EnumResourceTypesExA
-        323  142 000423D0 EnumResourceTypesExW
-        324  143 0003F670 EnumResourceTypesW
-        325  144 00055BD0 EnumSystemCodePagesA
-        326  145 000423F0 EnumSystemCodePagesW
-        327  146 0003F0F0 EnumSystemFirmwareTables
-        328  147 0005EC90 EnumSystemGeoID
-        329  148 00055BE0 EnumSystemLanguageGroupsA
-        330  149 00024D90 EnumSystemLanguageGroupsW
-        331  14A 00042400 EnumSystemLocalesA
-        332  14B 00042410 EnumSystemLocalesEx
-        333  14C 00042420 EnumSystemLocalesW
-        334  14D 00055BF0 EnumTimeFormatsA
-        335  14E 00023A60 EnumTimeFormatsEx
-        336  14F 00042430 EnumTimeFormatsW
-        337  150 00055C60 EnumUILanguagesA
-        338  151 00024D60 EnumUILanguagesW
-        339  152 0003A270 EnumerateLocalComputerNamesA
-        340  153 0003A380 EnumerateLocalComputerNamesW
-        341  154 0004D210 EraseTape
-        342  155 00026820 EscapeCommFunction
-        343  156 0004C070 ExecuteUmsThread
-        344  157 0001F700 ExitProcess
-        345  158          ExitThread (forwarded to NTDLL.RtlExitUserThread)
-        346  159 00048BC0 ExitVDM
-        347  15A 00025B70 ExpandEnvironmentStringsA
-        348  15B 0001EC10 ExpandEnvironmentStringsW
-        349  15C 000642A0 ExpungeConsoleCommandHistoryA
-        350  15D 00064320 ExpungeConsoleCommandHistoryW
-        351  15E 00042440 FatalAppExitA
-        352  15F 00042450 FatalAppExitW
-        353  160 0001F700 FatalExit
-        354  161 00014DC0 FileTimeToDosDateTime
-        355  162 00026380 FileTimeToLocalFileTime
-        356  163 000267C0 FileTimeToSystemTime
-        357  164 00026B20 FillConsoleOutputAttribute
-        358  165 00026B30 FillConsoleOutputCharacterA
-        359  166 00026B40 FillConsoleOutputCharacterW
-        360  167 0001C4F0 FindActCtxSectionGuid
-        361  168 00014E80 FindActCtxSectionGuidWorker
-        362  169 0004E6F0 FindActCtxSectionStringA
-        363  16A 000230A0 FindActCtxSectionStringW
-        364  16B 00014670 FindActCtxSectionStringWWorker
-        365  16C 000147C0 FindAtomA
-        366  16D 00014C40 FindAtomW
-        367  16E 00026390 FindClose
-        368  16F 000263A0 FindCloseChangeNotification
-        369  170 000263B0 FindFirstChangeNotificationA
-        370  171 000263C0 FindFirstChangeNotificationW
-        371  172 000263D0 FindFirstFileA
-        372  173 000263E0 FindFirstFileExA
-        373  174 000263F0 FindFirstFileExW
-        374  175 0003C9B0 FindFirstFileNameTransactedW
-        375  176 00026400 FindFirstFileNameW
-        376  177 0003CA70 FindFirstFileTransactedA
-        377  178 0003CB40 FindFirstFileTransactedW
-        378  179 00026410 FindFirstFileW
-        379  17A 0003CC10 FindFirstStreamTransactedW
-        380  17B          FindFirstStreamW (forwarded to api-ms-win-core-file-l1-2-2.FindFirstStreamW)
-        381  17C 0004A480 FindFirstVolumeA
-        382  17D 0004A600 FindFirstVolumeMountPointA
-        383  17E 0004A7D0 FindFirstVolumeMountPointW
-        384  17F 0001E1E0 FindFirstVolumeW
-        385  180 00042460 FindNLSString
-        386  181 00018AB0 FindNLSStringEx
-        387  182 00026420 FindNextChangeNotification
-        388  183 00026430 FindNextFileA
-        389  184 00026440 FindNextFileNameW
-        390  185 00026450 FindNextFileW
-        391  186          FindNextStreamW (forwarded to api-ms-win-core-file-l1-2-2.FindNextStreamW)
-        392  187 0004A9F0 FindNextVolumeA
-        393  188 0004AB60 FindNextVolumeMountPointA
-        394  189 0004B1A0 FindNextVolumeMountPointW
-        395  18A 0001E380 FindNextVolumeW
-        396  18B          FindPackagesByPackageFamily (forwarded to kernelbase.FindPackagesByPackageFamily)
-        397  18C 00016270 FindResourceA
-        398  18D 00016290 FindResourceExA
-        399  18E 0001EEB0 FindResourceExW
-        400  18F 00020CE0 FindResourceW
-        401  190 00042470 FindStringOrdinal
-        402  191 000236C0 FindVolumeClose
-        403  192 0004B1B0 FindVolumeMountPointClose
-        404  193 00020C40 FlsAlloc
-        405  194 00022F60 FlsFree
-        406  195 00017050 FlsGetValue
-        407  196 0001E180 FlsSetValue
-        408  197 00026B50 FlushConsoleInputBuffer
-        409  198 00026460 FlushFileBuffers
-        410  199 0001C420 FlushInstructionCache
-        411  19A          FlushProcessWriteBuffers (forwarded to NTDLL.NtFlushProcessWriteBuffers)
-        412  19B 00023AE0 FlushViewOfFile
-        413  19C 00055C70 FoldStringA
-        414  19D 00042480 FoldStringW
-        415  19E          FormatApplicationUserModelId (forwarded to kernelbase.FormatApplicationUserModelId)
-        416  19F 00024340 FormatMessageA
-        417  1A0 0001F260 FormatMessageW
-        418  1A1 00026B60 FreeConsole
-        419  1A2 00021660 FreeEnvironmentStringsA
-        420  1A3 0001FD80 FreeEnvironmentStringsW
-        421  1A4 0001F380 FreeLibrary
-        422  1A5 00021930 FreeLibraryAndExitThread
-        423  1A6          FreeLibraryWhenCallbackReturns (forwarded to NTDLL.TpCallbackUnloadDllOnCompletion)
-        424  1A7 0004DAC0 FreeMemoryJobObject
-        425  1A8 00024A10 FreeResource
-        426  1A9 00042490 FreeUserPhysicalPages
-        427  1AA 00026B70 GenerateConsoleCtrlEvent
-        428  1AB 00019760 GetACP
-        429  1AC 0001F720 GetActiveProcessorCount
-        430  1AD 000013B0 GetActiveProcessorGroupCount
-        431  1AE 000424A0 GetAppContainerAce
-        432  1AF 00022F70 GetAppContainerNamedObjectPath
-        433  1B0 000424B0 GetApplicationRecoveryCallback
-        434  1B1 00020240 GetApplicationRecoveryCallbackWorker
-        435  1B2 000424C0 GetApplicationRestartSettings
-        436  1B3 000200F0 GetApplicationRestartSettingsWorker
-        437  1B4          GetApplicationUserModelId (forwarded to kernelbase.GetApplicationUserModelId)
-        438  1B5 0003B160 GetAtomNameA
-        439  1B6 00014340 GetAtomNameW
-        440  1B7 00048C50 GetBinaryType
-        441  1B8 00048C50 GetBinaryTypeA
-        442  1B9 00048CA0 GetBinaryTypeW
-        443  1BA 0001DE70 GetCPInfo
-        444  1BB 00055EE0 GetCPInfoExA
-        445  1BC 000424D0 GetCPInfoExW
-        446  1BD 000424E0 GetCachedSigningLevel
-        447  1BE 00054F90 GetCalendarDateFormat
-        448  1BF 000183E0 GetCalendarDateFormatEx
-        449  1C0 000181C0 GetCalendarDaysInMonth
-        450  1C1 00055240 GetCalendarDifferenceInDays
-        451  1C2 00055FB0 GetCalendarInfoA
-        452  1C3 000267D0 GetCalendarInfoEx
-        453  1C4 000267E0 GetCalendarInfoW
-        454  1C5 00055380 GetCalendarMonthsInYear
-        455  1C6 00017F50 GetCalendarSupportedDateRange
-        456  1C7 00055450 GetCalendarWeekNumber
-        457  1C8 0004E790 GetComPlusPackageInstallStatus
-        458  1C9 00026830 GetCommConfig
-        459  1CA 00026840 GetCommMask
-        460  1CB 00026850 GetCommModemStatus
-        461  1CC 00026860 GetCommProperties
-        462  1CD 00026870 GetCommState
-        463  1CE 00026880 GetCommTimeouts
-        464  1CF 00020AB0 GetCommandLineA
-        465  1D0 00020AC0 GetCommandLineW
-        466  1D1 000424F0 GetCompressedFileSizeA
-        467  1D2 0003D4D0 GetCompressedFileSizeTransactedA
-        468  1D3 0003D530 GetCompressedFileSizeTransactedW
-        469  1D4 00023A40 GetCompressedFileSizeW
-        470  1D5 0001CAD0 GetComputerNameA
-        471  1D6 00042500 GetComputerNameExA
-        472  1D7 000234D0 GetComputerNameExW
-        473  1D8 0001CC40 GetComputerNameW
-        474  1D9 00064330 GetConsoleAliasA
-        475  1DA 00064370 GetConsoleAliasExesA
-        476  1DB 00064400 GetConsoleAliasExesLengthA
-        477  1DC 00064460 GetConsoleAliasExesLengthW
-        478  1DD 00064470 GetConsoleAliasExesW
-        479  1DE 00064570 GetConsoleAliasW
-        480  1DF 000645C0 GetConsoleAliasesA
-        481  1E0 00064670 GetConsoleAliasesLengthA
-        482  1E1 00064710 GetConsoleAliasesLengthW
-        483  1E2 00064720 GetConsoleAliasesW
-        484  1E3 00026A30 GetConsoleCP
-        485  1E4 000650F0 GetConsoleCharType
-        486  1E5 00064730 GetConsoleCommandHistoryA
-        487  1E6 000647F0 GetConsoleCommandHistoryLengthA
-        488  1E7 00064890 GetConsoleCommandHistoryLengthW
-        489  1E8 000648A0 GetConsoleCommandHistoryW
-        490  1E9 00026B80 GetConsoleCursorInfo
-        491  1EA 00065150 GetConsoleCursorMode
-        492  1EB 00064C30 GetConsoleDisplayMode
-        493  1EC 00065440 GetConsoleFontInfo
-        494  1ED 000654E0 GetConsoleFontSize
-        495  1EE 00064C80 GetConsoleHardwareState
-        496  1EF 00065530 GetConsoleHistoryInfo
-        497  1F0          GetConsoleInputExeNameA (forwarded to kernelbase.GetConsoleInputExeNameA)
-        498  1F1          GetConsoleInputExeNameW (forwarded to kernelbase.GetConsoleInputExeNameW)
-        499  1F2 00064B60 GetConsoleInputWaitHandle
-        500  1F3 000655B0 GetConsoleKeyboardLayoutNameA
-        501  1F4 000655D0 GetConsoleKeyboardLayoutNameW
-        502  1F5 00026A40 GetConsoleMode
-        503  1F6 000651C0 GetConsoleNlsMode
-        504  1F7 000648B0 GetConsoleOriginalTitleA
-        505  1F8 000648D0 GetConsoleOriginalTitleW
-        506  1F9 00026A50 GetConsoleOutputCP
-        507  1FA 00065680 GetConsoleProcessList
-        508  1FB 00026B90 GetConsoleScreenBufferInfo
-        509  1FC 00026BA0 GetConsoleScreenBufferInfoEx
-        510  1FD 00065710 GetConsoleSelectionInfo
-        511  1FE 000648F0 GetConsoleTitleA
-        512  1FF 00026BB0 GetConsoleTitleW
-        513  200 00021110 GetConsoleWindow
-        514  201 000561E0 GetCurrencyFormatA
-        515  202 00042510 GetCurrencyFormatEx
-        516  203 00042520 GetCurrencyFormatW
-        517  204 000242D0 GetCurrentActCtx
-        518  205 0001B180 GetCurrentActCtxWorker
-        519  206          GetCurrentApplicationUserModelId (forwarded to kernelbase.GetCurrentApplicationUserModelId)
-        520  207 00065770 GetCurrentConsoleFont
-        521  208 00021090 GetCurrentConsoleFontEx
-        522  209 00023980 GetCurrentDirectoryA
-        523  20A 00021800 GetCurrentDirectoryW
-        524  20B          GetCurrentPackageFamilyName (forwarded to kernelbase.GetCurrentPackageFamilyName)
-        525  20C          GetCurrentPackageFullName (forwarded to kernelbase.GetCurrentPackageFullName)
-        526  20D          GetCurrentPackageId (forwarded to kernelbase.GetCurrentPackageId)
-        527  20E          GetCurrentPackageInfo (forwarded to kernelbase.GetCurrentPackageInfo)
-        528  20F          GetCurrentPackagePath (forwarded to kernelbase.GetCurrentPackagePath)
-        529  210 00018B10 GetCurrentProcess
-        530  211 00016D00 GetCurrentProcessId
-        531  212          GetCurrentProcessorNumber (forwarded to NTDLL.RtlGetCurrentProcessorNumber)
-        532  213          GetCurrentProcessorNumberEx (forwarded to NTDLL.RtlGetCurrentProcessorNumberEx)
-        533  214 00017100 GetCurrentThread
-        534  215 00016CC0 GetCurrentThreadId
-        535  216          GetCurrentThreadStackLimits (forwarded to api-ms-win-core-processthreads-l1-1-0.GetCurrentThreadStackLimits)
-        536  217 0004C0A0 GetCurrentUmsThread
-        537  218 00024630 GetDateFormatA
-        538  219 000244E0 GetDateFormatAWorker
-        539  21A 00042530 GetDateFormatEx
-        540  21B 000234E0 GetDateFormatW
-        541  21C 0000F2D0 GetDateFormatWWorker
-        542  21D 00046220 GetDefaultCommConfigA
-        543  21E 000462B0 GetDefaultCommConfigW
-        544  21F 00040B50 GetDevicePowerState
-        545  220 00026470 GetDiskFreeSpaceA
-        546  221 00026480 GetDiskFreeSpaceExA
-        547  222 00026490 GetDiskFreeSpaceExW
-        548  223 000264A0 GetDiskFreeSpaceW
-        549  224 0003F690 GetDllDirectoryA
-        550  225 00024200 GetDllDirectoryW
-        551  226 000264B0 GetDriveTypeA
-        552  227 000264C0 GetDriveTypeW
-        553  228 00056E40 GetDurationFormat
-        554  229 00042540 GetDurationFormatEx
-        555  22A 00023B20 GetDynamicTimeZoneInformation
-        556  22B 00023C60 GetEnabledXStateFeatures
-        557  22C 0003E6A0 GetEncryptedFileVersionExt
-        558  22D 00021650 GetEnvironmentStrings
-        559  22E 000267F0 GetEnvironmentStringsA
-        560  22F 0001FD70 GetEnvironmentStringsW
-        561  230 0001F590 GetEnvironmentVariableA
-        562  231 0001DD30 GetEnvironmentVariableW
-        563  232 00042550 GetEraNameCountedString
-        564  233 00023CF0 GetErrorMode
-        565  234 0001EC40 GetExitCodeProcess
-        566  235 00020CD0 GetExitCodeThread
-        567  236 00045410 GetExpandedNameA
-        568  237 00045510 GetExpandedNameW
-        569  238 000264D0 GetFileAttributesA
-        570  239 000264E0 GetFileAttributesExA
-        571  23A 000264F0 GetFileAttributesExW
-        572  23B 0003D5D0 GetFileAttributesTransactedA
-        573  23C 0003D630 GetFileAttributesTransactedW
-        574  23D 00026500 GetFileAttributesW
-        575  23E 0003CCD0 GetFileBandwidthReservation
-        576  23F 00026510 GetFileInformationByHandle
-        577  240 00023C00 GetFileInformationByHandleEx
-        578  241 00042560 GetFileMUIInfo
-        579  242 00022FC0 GetFileMUIPath
-        580  243 00026520 GetFileSize
-        581  244 00026530 GetFileSizeEx
-        582  245 00026540 GetFileTime
-        583  246 00026550 GetFileType
-        584  247 00026560 GetFinalPathNameByHandleA
-        585  248 00026570 GetFinalPathNameByHandleW
-        586  249 0003EDB0 GetFirmwareEnvironmentVariableA
-        587  24A 0003EDD0 GetFirmwareEnvironmentVariableExA
-        588  24B 00024AB0 GetFirmwareEnvironmentVariableExW
-        589  24C 00024A90 GetFirmwareEnvironmentVariableW
-        590  24D 000392A0 GetFirmwareType
-        591  24E 00026580 GetFullPathNameA
-        592  24F 0003AB90 GetFullPathNameTransactedA
-        593  250 0003AC50 GetFullPathNameTransactedW
-        594  251 00026590 GetFullPathNameW
-        595  252 00056590 GetGeoInfoA
-        596  253 00017120 GetGeoInfoW
-        597  254 00026100 GetHandleInformation
-        598  255 00042570 GetLargePageMinimum
-        599  256 00026BC0 GetLargestConsoleWindowSize
-        600  257 00016CF0 GetLastError
-        601  258 0001F1D0 GetLocalTime
-        602  259 0001EEA0 GetLocaleInfoA
-        603  25A 00020CB0 GetLocaleInfoEx
-        604  25B 00020BF0 GetLocaleInfoW
-        605  25C 00018BA0 GetLogicalDriveStringsA
-        606  25D 000265A0 GetLogicalDriveStringsW
-        607  25E 00018C60 GetLogicalDrives
-        608  25F 00021950 GetLogicalProcessorInformation
-        609  260          GetLogicalProcessorInformationEx (forwarded to api-ms-win-core-sysinfo-l1-1-0.GetLogicalProcessorInformationEx)
-        610  261 00063770 GetLongPathNameA
-        611  262 00048FD0 GetLongPathNameTransactedA
-        612  263 00049080 GetLongPathNameTransactedW
-        613  264 00017750 GetLongPathNameW
-        614  265 0003F4F0 GetMailslotInfo
-        615  266 00040DE0 GetMaximumProcessorCount
-        616  267 00024A30 GetMaximumProcessorGroupCount
-        617  268 00042580 GetMemoryErrorHandlingCapabilities
-        618  269 00021610 GetModuleFileNameA
-        619  26A 0001F490 GetModuleFileNameW
-        620  26B 0001EEC0 GetModuleHandleA
-        621  26C 00021960 GetModuleHandleExA
-        622  26D 0001FD10 GetModuleHandleExW
-        623  26E 0001EBA0 GetModuleHandleW
-        624  26F 00024D50 GetNLSVersion
-        625  270 00042590 GetNLSVersionEx
-        626  271 000425A0 GetNamedPipeAttribute
-        627  272 0003FC30 GetNamedPipeClientComputerNameA
-        628  273 000425B0 GetNamedPipeClientComputerNameW
-        629  274 0003FD60 GetNamedPipeClientProcessId
-        630  275 0003FDA0 GetNamedPipeClientSessionId
-        631  276 0003FDF0 GetNamedPipeHandleStateA
-        632  277 000425C0 GetNamedPipeHandleStateW
-        633  278          GetNamedPipeInfo (forwarded to api-ms-win-core-namedpipe-l1-2-1.GetNamedPipeInfo)
-        634  279 0003FF50 GetNamedPipeServerProcessId
-        635  27A 0003FF90 GetNamedPipeServerSessionId
-        636  27B 00023140 GetNativeSystemInfo
-        637  27C 0004C0D0 GetNextUmsListItem
-        638  27D 00049130 GetNextVDMCommand
-        639  27E 000401F0 GetNumaAvailableMemoryNode
-        640  27F 000258A0 GetNumaAvailableMemoryNodeEx
-        641  280 00023440 GetNumaHighestNodeNumber
-        642  281 00040200 GetNumaNodeNumberFromHandle
-        643  282 00040250 GetNumaNodeProcessorMask
-        644  283 00025B40 GetNumaNodeProcessorMaskEx
-        645  284 000251C0 GetNumaProcessorNode
-        646  285 00025210 GetNumaProcessorNodeEx
-        647  286 000402D0 GetNumaProximityNode
-        648  287 00040300 GetNumaProximityNodeEx
-        649  288 0001C520 GetNumberFormatA
-        650  289 000425D0 GetNumberFormatEx
-        651  28A 00001100 GetNumberFormatW
-        652  28B 000657E0 GetNumberOfConsoleFonts
-        653  28C 00026A60 GetNumberOfConsoleInputEvents
-        654  28D 00065830 GetNumberOfConsoleMouseButtons
-        655  28E 00025B50 GetOEMCP
-        656  28F 0001C3F0 GetOverlappedResult
-        657  290          GetOverlappedResultEx (forwarded to api-ms-win-core-io-l1-1-1.GetOverlappedResultEx)
-        658  291          GetPackageApplicationIds (forwarded to kernelbase.GetPackageApplicationIds)
-        659  292          GetPackageFamilyName (forwarded to kernelbase.GetPackageFamilyName)
-        660  293          GetPackageFullName (forwarded to kernelbase.GetPackageFullName)
-        661  294          GetPackageId (forwarded to kernelbase.GetPackageId)
-        662  295          GetPackageInfo (forwarded to kernelbase.GetPackageInfo)
-        663  296          GetPackagePath (forwarded to kernelbase.GetPackagePath)
-        664  297          GetPackagePathByFullName (forwarded to kernelbase.GetPackagePathByFullName)
-        665  298          GetPackagesByPackageFamily (forwarded to kernelbase.GetPackagesByPackageFamily)
-        666  299 00023C10 GetPhysicallyInstalledSystemMemory
-        667  29A 000237E0 GetPriorityClass
-        668  29B 000167E0 GetPrivateProfileIntA
-        669  29C 00016100 GetPrivateProfileIntW
-        670  29D 00024DC0 GetPrivateProfileSectionA
-        671  29E 0003BE80 GetPrivateProfileSectionNamesA
-        672  29F 0003BEB0 GetPrivateProfileSectionNamesW
-        673  2A0 00015FA0 GetPrivateProfileSectionW
-        674  2A1 000166C0 GetPrivateProfileStringA
-        675  2A2 000141D0 GetPrivateProfileStringW
-        676  2A3 0003BEE0 GetPrivateProfileStructA
-        677  2A4 0003C060 GetPrivateProfileStructW
-        678  2A5 0001B2C0 GetProcAddress
-        679  2A6 00019C90 GetProcessAffinityMask
-        680  2A7 00040E90 GetProcessDEPPolicy
-        681  2A8          GetProcessDefaultCpuSets (forwarded to api-ms-win-core-processthreads-l1-1-3.GetProcessDefaultCpuSets)
-        682  2A9 000425E0 GetProcessGroupAffinity
-        683  2AA 000425F0 GetProcessHandleCount
-        684  2AB 00018A20 GetProcessHeap
-        685  2AC 00042600 GetProcessHeaps
-        686  2AD 0001F1B0 GetProcessId
-        687  2AE 00023BF0 GetProcessIdOfThread
-        688  2AF 000260A0 GetProcessInformation
-        689  2B0 00023460 GetProcessIoCounters
-        690  2B1          GetProcessMitigationPolicy (forwarded to api-ms-win-core-processthreads-l1-1-1.GetProcessMitigationPolicy)
-        691  2B2 00042610 GetProcessPreferredUILanguages
-        692  2B3 00042620 GetProcessPriorityBoost
-        693  2B4 00042630 GetProcessShutdownParameters
-        694  2B5 000191F0 GetProcessTimes
-        695  2B6 00023C50 GetProcessVersion
-        696  2B7 0004EA70 GetProcessWorkingSetSize
-        697  2B8 00042640 GetProcessWorkingSetSizeEx
-        698  2B9          GetProcessorSystemCycleTime (forwarded to api-ms-win-core-sysinfo-l1-2-2.GetProcessorSystemCycleTime)
-        699  2BA 00023990 GetProductInfo
-        700  2BB 00016850 GetProfileIntA
-        701  2BC 00016260 GetProfileIntW
-        702  2BD 0003C210 GetProfileSectionA
-        703  2BE 00024CF0 GetProfileSectionW
-        704  2BF 0003C220 GetProfileStringA
-        705  2C0 0003C250 GetProfileStringW
-        706  2C1 00018B20 GetQueuedCompletionStatus
-        707  2C2 00001110 GetQueuedCompletionStatusEx
-        708  2C3 00049A90 GetShortPathNameA
-        709  2C4 000172C0 GetShortPathNameW
-        710  2C5          GetStagedPackagePathByFullName (forwarded to kernelbase.GetStagedPackagePathByFullName)
-        711  2C6 0001EF10 GetStartupInfoA
-        712  2C7 0001F570 GetStartupInfoW
-        713  2C8          GetStateFolder (forwarded to kernelbase.GetStateFolder)
-        714  2C9 0001EC30 GetStdHandle
-        715  2CA 00042650 GetStringScripts
-        716  2CB 00022B50 GetStringTypeA
-        717  2CC 00022B50 GetStringTypeExA
-        718  2CD 00024620 GetStringTypeExW
-        719  2CE 0001F510 GetStringTypeW
-        720  2CF          GetSystemAppDataKey (forwarded to kernelbase.GetSystemAppDataKey)
-        721  2D0          GetSystemCpuSetInformation (forwarded to api-ms-win-core-processthreads-l1-1-3.GetSystemCpuSetInformation)
-        722  2D1 00040EE0 GetSystemDEPPolicy
-        723  2D2 0001F4E0 GetSystemDefaultLCID
-        724  2D3 000236B0 GetSystemDefaultLangID
-        725  2D4 00042660 GetSystemDefaultLocaleName
-        726  2D5 00023630 GetSystemDefaultUILanguage
-        727  2D6 00021670 GetSystemDirectoryA
-        728  2D7 0001B210 GetSystemDirectoryW
-        729  2D8 00042670 GetSystemFileCacheSize
-        730  2D9 000239A0 GetSystemFirmwareTable
-        731  2DA 0001FD30 GetSystemInfo
-        732  2DB 0001C0B0 GetSystemPowerStatus
-        733  2DC 00042680 GetSystemPreferredUILanguages
-        734  2DD 00040F20 GetSystemRegistryQuota
-        735  2DE 0001B1C0 GetSystemTime
-        736  2DF 00022D50 GetSystemTimeAdjustment
-        737  2E0 00019D10 GetSystemTimeAsFileTime
-        738  2E1 000267B0 GetSystemTimePreciseAsFileTime
-        739  2E2 00025410 GetSystemTimes
-        740  2E3 00042690 GetSystemWindowsDirectoryA
-        741  2E4 00013D50 GetSystemWindowsDirectoryW
-        742  2E5 00026920 GetSystemWow64DirectoryA
-        743  2E6 00026930 GetSystemWow64DirectoryW
-        744  2E7 0004D250 GetTapeParameters
-        745  2E8 0004D2B0 GetTapePosition
-        746  2E9 0004D340 GetTapeStatus
-        747  2EA 000265B0 GetTempFileNameA
-        748  2EB 000265C0 GetTempFileNameW
-        749  2EC 000265D0 GetTempPathA
-        750  2ED 000265E0 GetTempPathW
-        751  2EE 000218C0 GetThreadContext
-        752  2EF 000426A0 GetThreadErrorMode
-        753  2F0 000426B0 GetThreadGroupAffinity
-        754  2F1 000426C0 GetThreadIOPendingFlag
-        755  2F2 00023620 GetThreadId
-        756  2F3 000426D0 GetThreadIdealProcessorEx
-        757  2F4 000260B0 GetThreadInformation
-        758  2F5 0001C410 GetThreadLocale
-        759  2F6 0001EE90 GetThreadPreferredUILanguages
-        760  2F7 0001B1D0 GetThreadPriority
-        761  2F8 000426E0 GetThreadPriorityBoost
-        762  2F9          GetThreadSelectedCpuSets (forwarded to api-ms-win-core-processthreads-l1-1-3.GetThreadSelectedCpuSets)
-        763  2FA 0003ADF0 GetThreadSelectorEntry
-        764  2FB 00019770 GetThreadTimes
-        765  2FC 00001430 GetThreadUILanguage
-        766  2FD 00016D30 GetTickCount
-        767  2FE 00018B30 GetTickCount64
-        768  2FF 000252C0 GetTimeFormatA
-        769  300 00024E50 GetTimeFormatAWorker
-        770  301 000426F0 GetTimeFormatEx
-        771  302 00023650 GetTimeFormatW
-        772  303 00012F00 GetTimeFormatWWorker
-        773  304 0001F500 GetTimeZoneInformation
-        774  305 00023CE0 GetTimeZoneInformationForYear
-        775  306 00042700 GetUILanguageInfo
-        776  307 0004C100 GetUmsCompletionListEvent
-        777  308 0004C130 GetUmsSystemThreadInformation
-        778  309 0001F270 GetUserDefaultLCID
-        779  30A 00024D70 GetUserDefaultLangID
-        780  30B 000230E0 GetUserDefaultLocaleName
-        781  30C 00023500 GetUserDefaultUILanguage
-        782  30D 00022B60 GetUserGeoID
-        783  30E 00023670 GetUserPreferredUILanguages
-        784  30F 00049CF0 GetVDMCurrentDirectories
-        785  310 00022910 GetVersion
-        786  311 00021910 GetVersionExA
-        787  312 0001B2B0 GetVersionExW
-        788  313 000265F0 GetVolumeInformationA
-        789  314 00026600 GetVolumeInformationByHandleW
-        790  315 00026610 GetVolumeInformationW
-        791  316 00025720 GetVolumeNameForVolumeMountPointA
-        792  317 00020930 GetVolumeNameForVolumeMountPointW
-        793  318 0004B210 GetVolumePathNameA
-        794  319 0000DE90 GetVolumePathNameW
-        795  31A 0004B3D0 GetVolumePathNamesForVolumeNameA
-        796  31B 0001E7A0 GetVolumePathNamesForVolumeNameW
-        797  31C 00024D80 GetWindowsDirectoryA
-        798  31D 00023450 GetWindowsDirectoryW
-        799  31E 0001F1E0 GetWriteWatch
-        800  31F 000239B0 GetXStateFeaturesMask
-        801  320 00016240 GlobalAddAtomA
-        802  321 0003B190 GlobalAddAtomExA
-        803  322 00014320 GlobalAddAtomExW
-        804  323 00014960 GlobalAddAtomW
-        805  324 0001C090 GlobalAlloc
-        806  325 0003F2B0 GlobalCompact
-        807  326 000147F0 GlobalDeleteAtom
-        808  327 0003B1B0 GlobalFindAtomA
-        809  328 00014C60 GlobalFindAtomW
-        810  329 0003F100 GlobalFix
-        811  32A 00022D60 GlobalFlags
-        812  32B 00018D90 GlobalFree
-        813  32C 0003B1D0 GlobalGetAtomNameA
-        814  32D 00014370 GlobalGetAtomNameW
-        815  32E 00021820 GlobalHandle
-        816  32F 00016EC0 GlobalLock
-        817  330 0001F280 GlobalMemoryStatus
-        818  331 000229A0 GlobalMemoryStatusEx
-        819  332 00018E00 GlobalReAlloc
-        820  333 00019630 GlobalSize
-        821  334 0003F120 GlobalUnWire
-        822  335 0003F130 GlobalUnfix
-        823  336 00016E00 GlobalUnlock
-        824  337 0003F150 GlobalWire
-        825  338 00044860 Heap32First
-        826  339 00044AB0 Heap32ListFirst
-        827  33A 00044BA0 Heap32ListNext
-        828  33B 00044C80 Heap32Next
-        829  33C          HeapAlloc (forwarded to NTDLL.RtlAllocateHeap)
-        830  33D 00042710 HeapCompact
-        831  33E 00021920 HeapCreate
-        832  33F 000239C0 HeapDestroy
-        833  340 00016CE0 HeapFree
-        834  341 00042720 HeapLock
-        835  342 00042730 HeapQueryInformation
-        836  343          HeapReAlloc (forwarded to NTDLL.RtlReAllocateHeap)
-        837  344 000218E0 HeapSetInformation
-        838  345          HeapSize (forwarded to NTDLL.RtlSizeHeap)
-        839  346 00042740 HeapSummary
-        840  347 00042750 HeapUnlock
-        841  348 0001DD50 HeapValidate
-        842  349 00042760 HeapWalk
-        843  34A 00025B60 IdnToAscii
-        844  34B 00042770 IdnToNameprepUnicode
-        845  34C 00042780 IdnToUnicode
-        846  34D 00024C30 InitAtomTable
-        847  34E          InitOnceBeginInitialize (forwarded to api-ms-win-core-synch-l1-1-0.InitOnceBeginInitialize)
-        848  34F          InitOnceComplete (forwarded to api-ms-win-core-synch-l1-1-0.InitOnceComplete)
-        849  350          InitOnceExecuteOnce (forwarded to api-ms-win-core-synch-l1-1-0.InitOnceExecuteOnce)
-        850  351          InitOnceInitialize (forwarded to NTDLL.RtlRunOnceInitialize)
-        851  352          InitializeConditionVariable (forwarded to NTDLL.RtlInitializeConditionVariable)
-        852  353 00023AB0 InitializeContext
-        853  354          InitializeCriticalSection (forwarded to NTDLL.RtlInitializeCriticalSection)
-        854  355 000261E0 InitializeCriticalSectionAndSpinCount
-        855  356 000261F0 InitializeCriticalSectionEx
-        856  357          InitializeProcThreadAttributeList (forwarded to api-ms-win-core-processthreads-l1-1-0.InitializeProcThreadAttributeList)
-        857  358          InitializeSListHead (forwarded to NTDLL.RtlInitializeSListHead)
-        858  359          InitializeSRWLock (forwarded to NTDLL.RtlInitializeSRWLock)
-        859  35A 00042790 InitializeSynchronizationBarrier
-        860  35B          InstallELAMCertificateInfo (forwarded to api-ms-win-core-sysinfo-l1-2-1.InstallELAMCertificateInfo)
-        861  35C          InterlockedFlushSList (forwarded to NTDLL.RtlInterlockedFlushSList)
-        862  35D          InterlockedPopEntrySList (forwarded to NTDLL.RtlInterlockedPopEntrySList)
-        863  35E          InterlockedPushEntrySList (forwarded to NTDLL.RtlInterlockedPushEntrySList)
-        864  35F          InterlockedPushListSList (forwarded to NTDLL.RtlInterlockedPushListSList)
-        865  360          InterlockedPushListSListEx (forwarded to NTDLL.RtlInterlockedPushListSListEx)
-        866  361 00065A40 InvalidateConsoleDIBits
-        867  362 00040FA0 IsBadCodePtr
-        868  363 00040FB0 IsBadHugeReadPtr
-        869  364 00040FC0 IsBadHugeWritePtr
-        870  365 00016FC0 IsBadReadPtr
-        871  366 00040FD0 IsBadStringPtrA
-        872  367 00041020 IsBadStringPtrW
-        873  368 00041080 IsBadWritePtr
-        874  369 00055750 IsCalendarLeapDay
-        875  36A 00055830 IsCalendarLeapMonth
-        876  36B 00055910 IsCalendarLeapYear
-        877  36C 00023D20 IsDBCSLeadByte
-        878  36D 000253F0 IsDBCSLeadByteEx
-        879  36E 00022900 IsDebuggerPresent
-        880  36F 000427A0 IsNLSDefinedString
-        881  370 00039320 IsNativeVhdBoot
-        882  371 000427B0 IsNormalizedString
-        883  372          IsProcessCritical (forwarded to api-ms-win-core-processthreads-l1-1-2.IsProcessCritical)
-        884  373 000427C0 IsProcessInJob
-        885  374 0001EC80 IsProcessorFeaturePresent
-        886  375 00040BA0 IsSystemResumeAutomatic
-        887  376 000427D0 IsThreadAFiber
-        888  377          IsThreadpoolTimerSet (forwarded to NTDLL.TpIsTimerSet)
-        889  378 00018620 IsValidCalDateTime
-        890  379 0001DF00 IsValidCodePage
-        891  37A 000427F0 IsValidLanguageGroup
-        892  37B 0001F4D0 IsValidLocale
-        893  37C 00042800 IsValidLocaleName
-        894  37D 00042810 IsValidNLSVersion
-        895  37E 0001F150 IsWow64Process
-        896  37F 00042820 K32EmptyWorkingSet
-        897  380 00042830 K32EnumDeviceDrivers
-        898  381 00042840 K32EnumPageFilesA
-        899  382 00042850 K32EnumPageFilesW
-        900  383 000238A0 K32EnumProcessModules
-        901  384 00042860 K32EnumProcessModulesEx
-        902  385 00001410 K32EnumProcesses
-        903  386 00042870 K32GetDeviceDriverBaseNameA
-        904  387 00042880 K32GetDeviceDriverBaseNameW
-        905  388 00042890 K32GetDeviceDriverFileNameA
-        906  389 000428A0 K32GetDeviceDriverFileNameW
-        907  38A 000428B0 K32GetMappedFileNameA
-        908  38B 000428C0 K32GetMappedFileNameW
-        909  38C 000428D0 K32GetModuleBaseNameA
-        910  38D 000428E0 K32GetModuleBaseNameW
-        911  38E 000428F0 K32GetModuleFileNameExA
-        912  38F 00042900 K32GetModuleFileNameExW
-        913  390 00023910 K32GetModuleInformation
-        914  391 00042910 K32GetPerformanceInfo
-        915  392 00042920 K32GetProcessImageFileNameA
-        916  393 0001B200 K32GetProcessImageFileNameW
-        917  394 00042930 K32GetProcessMemoryInfo
-        918  395 00042950 K32GetWsChanges
-        919  396 00042940 K32GetWsChangesEx
-        920  397 00042960 K32InitializeProcessForWsWatch
-        921  398 00042970 K32QueryWorkingSet
-        922  399 000234F0 K32QueryWorkingSetEx
-        923  39A 00023880 LCIDToLocaleName
-        924  39B 00042980 LCMapStringA
-        925  39C 00016C90 LCMapStringEx
-        926  39D 00019B80 LCMapStringW
-        927  39E 00045620 LZClose
-        928  39F 000456D0 LZCloseFile
-        929  3A0 0003AA90 LZCopy
-        930  3A1 00045780 LZCreateFileW
-        931  3A2 000271A0 LZDone
-        932  3A3 000458B0 LZInit
-        933  3A4 00045A40 LZOpenFileA
-        934  3A5 00045B30 LZOpenFileW
-        935  3A6 00045BD0 LZRead
-        936  3A7 00045E30 LZSeek
-        937  3A8 00024D30 LZStart
-        938  3A9          LeaveCriticalSection (forwarded to NTDLL.RtlLeaveCriticalSection)
-        939  3AA          LeaveCriticalSectionWhenCallbackReturns (forwarded to NTDLL.TpCallbackLeaveCriticalSectionOnCompletion)
-        940  3AB 00019790 LoadAppInitDlls
-        941  3AC 00022D30 LoadLibraryA
-        942  3AD 00020CC0 LoadLibraryExA
-        943  3AE 0001C0A0 LoadLibraryExW
-        944  3AF 0001F580 LoadLibraryW
-        945  3B0 00041110 LoadModule
-        946  3B1 000267A0 LoadPackagedLibrary
-        947  3B2 0001EC20 LoadResource
-        948  3B3 00042990 LoadStringBaseExW
-        949  3B4 0003F5D0 LoadStringBaseW
-        950  3B5 00019B90 LocalAlloc
-        951  3B6 0003F2B0 LocalCompact
-        952  3B7 00026620 LocalFileTimeToFileTime
-        953  3B8 0003F2D0 LocalFlags
-        954  3B9 00019BA0 LocalFree
-        955  3BA 0003F410 LocalHandle
-        956  3BB 00022F40 LocalLock
-        957  3BC 000237F0 LocalReAlloc
-        958  3BD 0003F2B0 LocalShrink
-        959  3BE 0001D2D0 LocalSize
-        960  3BF 00022F30 LocalUnlock
-        961  3C0 00022F50 LocaleNameToLCID
-        962  3C1 00023BA0 LocateXStateFeature
-        963  3C2 00026630 LockFile
-        964  3C3 00026640 LockFileEx
-        965  3C4 0001EED0 LockResource
-        966  3C5 000429B0 MapUserPhysicalPages
-        967  3C6 0004EA90 MapUserPhysicalPagesScatter
-        968  3C7 0001F140 MapViewOfFile
-        969  3C8 0001DEF0 MapViewOfFileEx
-        970  3C9 000429C0 MapViewOfFileExNuma
-        971  3CA          MapViewOfFileFromApp (forwarded to api-ms-win-core-memory-l1-1-1.MapViewOfFileFromApp)
-        972  3CB 00044EE0 Module32First
-        973  3CC 0001FBE0 Module32FirstW
-        974  3CD 00045000 Module32Next
-        975  3CE 0001B2E0 Module32NextW
-        976  3CF 0003D6F0 MoveFileA
-        977  3D0 0003D720 MoveFileExA
-        978  3D1 00023B80 MoveFileExW
-        979  3D2 0003D750 MoveFileTransactedA
-        980  3D3 00025680 MoveFileTransactedW
-        981  3D4 00021620 MoveFileW
-        982  3D5 0003D820 MoveFileWithProgressA
-        983  3D6 000429D0 MoveFileWithProgressW
-        984  3D7 00026790 MulDiv
-        985  3D8 00018A30 MultiByteToWideChar
-        986  3D9 000429E0 NeedCurrentDirectoryForExePathA
-        987  3DA 000429F0 NeedCurrentDirectoryForExePathW
-        988  3DB 000269D0 NlsCheckPolicy
-        989  3DC 00042A00 NlsEventDataDescCreate
-        990  3DD 000269E0 NlsGetCacheUpdateCount
-        991  3DE 000269F0 NlsUpdateLocale
-        992  3DF 00026A00 NlsUpdateSystemLocale
-        993  3E0 00042A10 NlsWriteEtwEvent
-        994  3E1 00042A20 NormalizeString
-        995  3E2 00042A30 NotifyMountMgr
-        996  3E3 00058A20 NotifyUILanguageChange
-        997  3E4 000415C0 NtVdm64CreateProcessInternalW
-        998  3E5 000238B0 OOBEComplete
-        999  3E6          OfferVirtualMemory (forwarded to api-ms-win-core-memory-l1-1-2.OfferVirtualMemory)
-       1000  3E7 00064B80 OpenConsoleW
-       1001  3E8 00042A40 OpenConsoleWStub
-       1002  3E9 00026200 OpenEventA
-       1003  3EA 00026210 OpenEventW
-       1004  3EB 0003E790 OpenFile
-       1005  3EC 00042A50 OpenFileById
-       1006  3ED 000247E0 OpenFileMappingA
-       1007  3EE 0001FBD0 OpenFileMappingW
-       1008  3EF 0004DAD0 OpenJobObjectA
-       1009  3F0 0004DB50 OpenJobObjectW
-       1010  3F1 00016B00 OpenMutexA
-       1011  3F2 00026220 OpenMutexW
-       1012  3F3          OpenPackageInfoByFullName (forwarded to kernelbase.OpenPackageInfoByFullName)
-       1013  3F4 00043470 OpenPrivateNamespaceA
-       1014  3F5 00024F90 OpenPrivateNamespaceW
-       1015  3F6 0001B170 OpenProcess
-       1016  3F7          OpenProcessToken (forwarded to api-ms-win-core-processthreads-l1-1-0.OpenProcessToken)
-       1017  3F8 00024D30 OpenProfileUserMapping
-       1018  3F9 000434D0 OpenSemaphoreA
-       1019  3FA 00026230 OpenSemaphoreW
-       1020  3FB          OpenState (forwarded to kernelbase.OpenState)
-       1021  3FC          OpenStateExplicit (forwarded to kernelbase.OpenStateExplicit)
-       1022  3FD 0001B1F0 OpenThread
-       1023  3FE          OpenThreadToken (forwarded to api-ms-win-core-processthreads-l1-1-0.OpenThreadToken)
-       1024  3FF 00043540 OpenWaitableTimerA
-       1025  400 00026240 OpenWaitableTimerW
-       1026  401 00022990 OutputDebugStringA
-       1027  402 0001B420 OutputDebugStringW
-       1028  403          PackageFamilyNameFromFullName (forwarded to kernelbase.PackageFamilyNameFromFullName)
-       1029  404          PackageFamilyNameFromId (forwarded to kernelbase.PackageFamilyNameFromId)
-       1030  405          PackageFullNameFromId (forwarded to kernelbase.PackageFullNameFromId)
-       1031  406          PackageIdFromFullName (forwarded to kernelbase.PackageIdFromFullName)
-       1032  407          PackageNameAndPublisherIdFromFamilyName (forwarded to kernelbase.PackageNameAndPublisherIdFromFamilyName)
-       1033  408          ParseApplicationUserModelId (forwarded to kernelbase.ParseApplicationUserModelId)
-       1034  409 00026A70 PeekConsoleInputA
-       1035  40A 00026BD0 PeekConsoleInputW
-       1036  40B 00025A60 PeekNamedPipe
-       1037  40C 0001E170 PostQueuedCompletionStatus
-       1038  40D 00021730 PowerClearRequest
-       1039  40E 0001F900 PowerCreateRequest
-       1040  40F 00016480 PowerSetRequest
-       1041  410          PrefetchVirtualMemory (forwarded to api-ms-win-core-memory-l1-1-1.PrefetchVirtualMemory)
-       1042  411 0004D370 PrepareTape
-       1043  412 00025400 PrivCopyFileExW
-       1044  413 0003D910 PrivMoveFileIdentityW
-       1045  414 00045120 Process32First
-       1046  415 00020990 Process32FirstW
-       1047  416 00045210 Process32Next
-       1048  417 0001C170 Process32NextW
-       1049  418 0001E6C0 ProcessIdToSessionId
-       1050  419 00042A60 PssCaptureSnapshot
-       1051  41A 00042A70 PssDuplicateSnapshot
-       1052  41B 00042A80 PssFreeSnapshot
-       1053  41C 00042A90 PssQuerySnapshot
-       1054  41D 00042AA0 PssWalkMarkerCreate
-       1055  41E 00042AB0 PssWalkMarkerFree
-       1056  41F 00042AC0 PssWalkMarkerGetPosition
-       1057  420 00042AD0 PssWalkMarkerRewind
-       1058  421 00042AE0 PssWalkMarkerSeek
-       1059  422 00042AD0 PssWalkMarkerSeekToBeginning
-       1060  423 00042AE0 PssWalkMarkerSetPosition
-       1061  424 00042AC0 PssWalkMarkerTell
-       1062  425 00042AF0 PssWalkSnapshot
-       1063  426 0001DCF0 PulseEvent
-       1064  427 00026890 PurgeComm
-       1065  428 00042B00 QueryActCtxSettingsW
-       1066  429 00014AC0 QueryActCtxSettingsWWorker
-       1067  42A 0001F400 QueryActCtxW
-       1068  42B 00014520 QueryActCtxWWorker
-       1069  42C          QueryDepthSList (forwarded to NTDLL.RtlQueryDepthSList)
-       1070  42D 0003C6D0 QueryDosDeviceA
-       1071  42E 00026650 QueryDosDeviceW
-       1072  42F 00023CB0 QueryFullProcessImageNameA
-       1073  430 000219A0 QueryFullProcessImageNameW
-       1074  431 0001FD90 QueryIdleProcessorCycleTime
-       1075  432 00042B10 QueryIdleProcessorCycleTimeEx
-       1076  433 00023520 QueryInformationJobObject
-       1077  434 0004DC00 QueryIoRateControlInformationJobObject
-       1078  435 00042B20 QueryMemoryResourceNotification
-       1079  436 00017110 QueryPerformanceCounter
-       1080  437 00019550 QueryPerformanceFrequency
-       1081  438 00042B30 QueryProcessAffinityUpdateMode
-       1082  439 0001FDA0 QueryProcessCycleTime
-       1083  43A          QueryProtectedPolicy (forwarded to api-ms-win-core-processthreads-l1-1-2.QueryProtectedPolicy)
-       1084  43B 0001B2A0 QueryThreadCycleTime
-       1085  43C 0004EBA0 QueryThreadProfiling
-       1086  43D 00042B40 QueryThreadpoolStackInformation
-       1087  43E 0004C1A0 QueryUmsThreadInformation
-       1088  43F 0001F4C0 QueryUnbiasedInterruptTime
-       1089  440 000207B0 QueueUserAPC
-       1090  441 00021900 QueueUserWorkItem
-       1091  442 0006AE70 QuirkGetData2Worker
-       1092  443 0006AF40 QuirkGetDataWorker
-       1093  444 0006B000 QuirkIsEnabled2Worker
-       1094  445 000194A0 QuirkIsEnabled3Worker
-       1095  446 00024350 QuirkIsEnabledForPackage2Worker
-       1096  447 000081A0 QuirkIsEnabledForPackage3Worker
-       1097  448 000082F0 QuirkIsEnabledForPackage4Worker
-       1098  449 00007CF0 QuirkIsEnabledForPackageWorker
-       1099  44A 0006B120 QuirkIsEnabledForProcessWorker
-       1100  44B 00007830 QuirkIsEnabledWorker
-       1101  44C 0001F390 RaiseException
-       1102  44D          RaiseFailFastException (forwarded to kernelbase.RaiseFailFastException)
-       1103  44E 000417C0 RaiseInvalid16BitExeError
-       1104  44F 00042B70 ReOpenFile
-       1105  450 00026A80 ReadConsoleA
-       1106  451 00026A90 ReadConsoleInputA
-       1107  452          ReadConsoleInputExA (forwarded to kernelbase.ReadConsoleInputExA)
-       1108  453          ReadConsoleInputExW (forwarded to kernelbase.ReadConsoleInputExW)
-       1109  454 00026AA0 ReadConsoleInputW
-       1110  455 00026BE0 ReadConsoleOutputA
-       1111  456 00026BF0 ReadConsoleOutputAttribute
-       1112  457 00026C00 ReadConsoleOutputCharacterA
-       1113  458 00026C10 ReadConsoleOutputCharacterW
-       1114  459 00026C20 ReadConsoleOutputW
-       1115  45A 00026AB0 ReadConsoleW
-       1116  45B 000252D0 ReadDirectoryChangesW
-       1117  45C 00026660 ReadFile
-       1118  45D 00026670 ReadFileEx
-       1119  45E 00026680 ReadFileScatter
-       1120  45F 0001C500 ReadProcessMemory
-       1121  460 0004EBD0 ReadThreadProfilingData
-       1122  461          ReclaimVirtualMemory (forwarded to api-ms-win-core-memory-l1-1-2.ReclaimVirtualMemory)
-       1123  462 00023510 RegCloseKey
-       1124  463 00042B80 RegCopyTreeW
-       1125  464 00042B90 RegCreateKeyExA
-       1126  465 000230B0 RegCreateKeyExW
-       1127  466 00042BA0 RegDeleteKeyExA
-       1128  467 00042BB0 RegDeleteKeyExW
-       1129  468 00042BC0 RegDeleteTreeA
-       1130  469 00042BD0 RegDeleteTreeW
-       1131  46A 00042BE0 RegDeleteValueA
-       1132  46B 00024C90 RegDeleteValueW
-       1133  46C 00042BF0 RegDisablePredefinedCacheEx
-       1134  46D 00042C00 RegEnumKeyExA
-       1135  46E 0001F3B0 RegEnumKeyExW
-       1136  46F 00042C50 RegEnumValueA
-       1137  470 00023050 RegEnumValueW
-       1138  471 00042CA0 RegFlushKey
-       1139  472 00042CB0 RegGetKeySecurity
-       1140  473 00042CC0 RegGetValueA
-       1141  474 00023700 RegGetValueW
-       1142  475 00042CD0 RegLoadKeyA
-       1143  476 00042CE0 RegLoadKeyW
-       1144  477 00042CF0 RegLoadMUIStringA
-       1145  478 00042D00 RegLoadMUIStringW
-       1146  479 00023640 RegNotifyChangeKeyValue
-       1147  47A 000243D0 RegOpenCurrentUser
-       1148  47B 00042D10 RegOpenKeyExA
-       1149  47C 0001F870 RegOpenKeyExW
-       1150  47D 00042D20 RegOpenUserClassesRoot
-       1151  47E 00042D30 RegQueryInfoKeyA
-       1152  47F 0001F410 RegQueryInfoKeyW
-       1153  480 00042DB0 RegQueryValueExA
-       1154  481 0001F4A0 RegQueryValueExW
-       1155  482 00042DC0 RegRestoreKeyA
-       1156  483 00042DD0 RegRestoreKeyW
-       1157  484 00042DE0 RegSaveKeyExA
-       1158  485 00042DF0 RegSaveKeyExW
-       1159  486 00042E00 RegSetKeySecurity
-       1160  487 00042E10 RegSetValueExA
-       1161  488 00023410 RegSetValueExW
-       1162  489 00042E20 RegUnLoadKeyA
-       1163  48A 00042E30 RegUnLoadKeyW
-       1164  48B 00023D80 RegisterApplicationRecoveryCallback
-       1165  48C 00016540 RegisterApplicationRestart
-       1166  48D 00042E40 RegisterBadMemoryNotification
-       1167  48E 00064DE0 RegisterConsoleIME
-       1168  48F 00065220 RegisterConsoleOS2
-       1169  490 00064CF0 RegisterConsoleVDM
-       1170  491 00021810 RegisterWaitForInputIdle
-       1171  492 0001DE80 RegisterWaitForSingleObject
-       1172  493 00042E50 RegisterWaitForSingleObjectEx
-       1173  494 000403B0 RegisterWaitUntilOOBECompleted
-       1174  495 0003F160 RegisterWowBaseHandlers
-       1175  496 0004A110 RegisterWowExec
-       1176  497 00022F20 ReleaseActCtx
-       1177  498 0001C940 ReleaseActCtxWorker
-       1178  499 00026250 ReleaseMutex
-       1179  49A          ReleaseMutexWhenCallbackReturns (forwarded to NTDLL.TpCallbackReleaseMutexOnCompletion)
-       1180  49B          ReleaseSRWLockExclusive (forwarded to NTDLL.RtlReleaseSRWLockExclusive)
-       1181  49C          ReleaseSRWLockShared (forwarded to NTDLL.RtlReleaseSRWLockShared)
-       1182  49D 00026260 ReleaseSemaphore
-       1183  49E          ReleaseSemaphoreWhenCallbackReturns (forwarded to NTDLL.TpCallbackReleaseSemaphoreOnCompletion)
-       1184  49F 00026690 RemoveDirectoryA
-       1185  4A0 0003B070 RemoveDirectoryTransactedA
-       1186  4A1 0003B0C0 RemoveDirectoryTransactedW
-       1187  4A2 000266A0 RemoveDirectoryW
-       1188  4A3          RemoveDllDirectory (forwarded to api-ms-win-core-libraryloader-l1-1-0.RemoveDllDirectory)
-       1189  4A4 0003A570 RemoveLocalAlternateComputerNameA
-       1190  4A5 0003A5D0 RemoveLocalAlternateComputerNameW
-       1191  4A6 0003F170 RemoveSecureMemoryCacheCallback
-       1192  4A7          RemoveVectoredContinueHandler (forwarded to NTDLL.RtlRemoveVectoredContinueHandler)
-       1193  4A8          RemoveVectoredExceptionHandler (forwarded to NTDLL.RtlRemoveVectoredExceptionHandler)
-       1194  4A9 00042E60 ReplaceFile
-       1195  4AA 0003EC90 ReplaceFileA
-       1196  4AB 00042E60 ReplaceFileW
-       1197  4AC 00041B40 ReplacePartitionUnit
-       1198  4AD 00040B30 RequestDeviceWakeup
-       1199  4AE 00040B30 RequestWakeupLatency
-       1200  4AF 00026270 ResetEvent
-       1201  4B0 000212C0 ResetWriteWatch
-       1202  4B1          ResolveDelayLoadedAPI (forwarded to NTDLL.LdrResolveDelayLoadedAPI)
-       1203  4B2          ResolveDelayLoadsFromDll (forwarded to NTDLL.LdrResolveDelayLoadsFromDll)
-       1204  4B3 00023A50 ResolveLocaleName
-       1205  4B4          RestoreLastError (forwarded to NTDLL.RtlRestoreLastWin32Error)
-       1206  4B5 0001FD20 ResumeThread
-       1207  4B6 000213F0 RtlAddFunctionTable
-       1208  4B7 00025EE0 RtlCaptureContext
-       1209  4B8 0001D890 RtlCaptureStackBackTrace
-       1210  4B9 00023870 RtlCompareMemory
-       1211  4BA 00042E70 RtlCopyMemory
-       1212  4BB 00021410 RtlDeleteFunctionTable
-       1213  4BC 00042E90 RtlFillMemory
-       1214  4BD 00042EC0 RtlInstallFunctionTableCallback
-       1215  4BE 0001F5D0 RtlLookupFunctionEntry
-       1216  4BF 00025F10 RtlMoveMemory
-       1217  4C0 0001F4F0 RtlPcToFileHeader
-       1218  4C1 00042ED0 RtlRaiseException
-       1219  4C2 00042EE0 RtlRestoreContext
-       1220  4C3 00042EF0 RtlUnwind
-       1221  4C4 0001E690 RtlUnwindEx
-       1222  4C5 00042F00 RtlVirtualUnwind
-       1223  4C6          RtlZeroMemory (forwarded to NTDLL.RtlZeroMemory)
-       1224  4C7 00026C30 ScrollConsoleScreenBufferA
-       1225  4C8 00026C40 ScrollConsoleScreenBufferW
-       1226  4C9 00042F50 SearchPathA
-       1227  4CA 00023A30 SearchPathW
-       1228  4CB 00023C70 SetCachedSigningLevel
-       1229  4CC 00056660 SetCalendarInfoA
-       1230  4CD 00042F60 SetCalendarInfoW
-       1231  4CE 0004E7E0 SetComPlusPackageInstallStatus
-       1232  4CF 000268A0 SetCommBreak
-       1233  4D0 000268B0 SetCommConfig
-       1234  4D1 000268C0 SetCommMask
-       1235  4D2 000268D0 SetCommState
-       1236  4D3 000268E0 SetCommTimeouts
-       1237  4D4 00042F70 SetComputerNameA
-       1238  4D5 00042F80 SetComputerNameEx2W
-       1239  4D6 00042F90 SetComputerNameExA
-       1240  4D7 00042FA0 SetComputerNameExW
-       1241  4D8 00042FB0 SetComputerNameW
-       1242  4D9 00026C50 SetConsoleActiveScreenBuffer
-       1243  4DA 00026C60 SetConsoleCP
-       1244  4DB 00026AC0 SetConsoleCtrlHandler
-       1245  4DC 00064D90 SetConsoleCursor
-       1246  4DD 00026C70 SetConsoleCursorInfo
-       1247  4DE 00065280 SetConsoleCursorMode
-       1248  4DF 00026C80 SetConsoleCursorPosition
-       1249  4E0 00064DE0 SetConsoleDisplayMode
-       1250  4E1 00065890 SetConsoleFont
-       1251  4E2 00064E00 SetConsoleHardwareState
-       1252  4E3 000658E0 SetConsoleHistoryInfo
-       1253  4E4 00065950 SetConsoleIcon
-       1254  4E5          SetConsoleInputExeNameA (forwarded to kernelbase.SetConsoleInputExeNameA)
-       1255  4E6          SetConsoleInputExeNameW (forwarded to kernelbase.SetConsoleInputExeNameW)
-       1256  4E7 00064E60 SetConsoleKeyShortcuts
-       1257  4E8 000652E0 SetConsoleLocalEUDC
-       1258  4E9 00024D30 SetConsoleMaximumWindowSize
-       1259  4EA 00064EF0 SetConsoleMenuClose
-       1260  4EB 00026AD0 SetConsoleMode
-       1261  4EC 00065390 SetConsoleNlsMode
-       1262  4ED 000649B0 SetConsoleNumberOfCommandsA
-       1263  4EE 00064A60 SetConsoleNumberOfCommandsW
-       1264  4EF 000653E0 SetConsoleOS2OemFormat
-       1265  4F0 00026C90 SetConsoleOutputCP
-       1266  4F1 00064F50 SetConsolePalette
-       1267  4F2 00026CA0 SetConsoleScreenBufferInfoEx
-       1268  4F3 00026CB0 SetConsoleScreenBufferSize
-       1269  4F4 00026CC0 SetConsoleTextAttribute
-       1270  4F5 00064A70 SetConsoleTitleA
-       1271  4F6 00026CD0 SetConsoleTitleW
-       1272  4F7 00026CE0 SetConsoleWindowInfo
-       1273  4F8          SetCriticalSectionSpinCount (forwarded to NTDLL.RtlSetCriticalSectionSpinCount)
-       1274  4F9 000659A0 SetCurrentConsoleFontEx
-       1275  4FA 00042FC0 SetCurrentDirectoryA
-       1276  4FB 00023BB0 SetCurrentDirectoryW
-       1277  4FC 00046900 SetDefaultCommConfigA
-       1278  4FD 00046990 SetDefaultCommConfigW
-       1279  4FE          SetDefaultDllDirectories (forwarded to api-ms-win-core-libraryloader-l1-1-0.SetDefaultDllDirectories)
-       1280  4FF 0003F810 SetDllDirectoryA
-       1281  500 00022E90 SetDllDirectoryW
-       1282  501 00042FD0 SetDynamicTimeZoneInformation
-       1283  502 000266B0 SetEndOfFile
-       1284  503 0004E9A0 SetEnvironmentStringsA
-       1285  504 00042FE0 SetEnvironmentStringsW
-       1286  505 0001F250 SetEnvironmentVariableA
-       1287  506 00022FF0 SetEnvironmentVariableW
-       1288  507 0001DD40 SetErrorMode
-       1289  508 00026280 SetEvent
-       1290  509          SetEventWhenCallbackReturns (forwarded to NTDLL.TpCallbackSetEventOnCompletion)
-       1291  50A 00042FF0 SetFileApisToANSI
-       1292  50B 00043000 SetFileApisToOEM
-       1293  50C 000266C0 SetFileAttributesA
-       1294  50D 0003DD60 SetFileAttributesTransactedA
-       1295  50E 0003DDB0 SetFileAttributesTransactedW
-       1296  50F 000266D0 SetFileAttributesW
-       1297  510 0003CD80 SetFileBandwidthReservation
-       1298  511 00020C50 SetFileCompletionNotificationModes
-       1299  512 000266E0 SetFileInformationByHandle
-       1300  513 00043010 SetFileIoOverlappedRange
-       1301  514 000266F0 SetFilePointer
-       1302  515 00026700 SetFilePointerEx
-       1303  516 0003CEA0 SetFileShortNameA
-       1304  517 0003CEE0 SetFileShortNameW
-       1305  518 00026710 SetFileTime
-       1306  519 00026720 SetFileValidData
-       1307  51A 0003EED0 SetFirmwareEnvironmentVariableA
-       1308  51B 0003EEF0 SetFirmwareEnvironmentVariableExA
-       1309  51C 0003EFE0 SetFirmwareEnvironmentVariableExW
-       1310  51D 0003F0A0 SetFirmwareEnvironmentVariableW
-       1311  51E 00023660 SetHandleCount
-       1312  51F 00026110 SetHandleInformation
-       1313  520 00021530 SetInformationJobObject
-       1314  521 0004DEB0 SetIoRateControlInformationJobObject
-       1315  522          SetLastConsoleEventActive (forwarded to kernelbase.SetLastConsoleEventActive)
-       1316  523 00016DF0 SetLastError
-       1317  524 0003A710 SetLocalPrimaryComputerNameA
-       1318  525 0003A770 SetLocalPrimaryComputerNameW
-       1319  526 00043020 SetLocalTime
-       1320  527 00056740 SetLocaleInfoA
-       1321  528 00043030 SetLocaleInfoW
-       1322  529 00022920 SetMailslotInfo
-       1323  52A 00040B30 SetMessageWaitingIndicator
-       1324  52B 0003FFD0 SetNamedPipeAttribute
-       1325  52C 000243E0 SetNamedPipeHandleState
-       1326  52D 00023000 SetPriorityClass
-       1327  52E 00041950 SetProcessAffinityMask
-       1328  52F 00025AA0 SetProcessAffinityUpdateMode
-       1329  530 00024380 SetProcessDEPPolicy
-       1330  531          SetProcessDefaultCpuSets (forwarded to api-ms-win-core-processthreads-l1-1-3.SetProcessDefaultCpuSets)
-       1331  532 000260C0 SetProcessInformation
-       1332  533          SetProcessMitigationPolicy (forwarded to api-ms-win-core-processthreads-l1-1-1.SetProcessMitigationPolicy)
-       1333  534 00043040 SetProcessPreferredUILanguages
-       1334  535 00023CA0 SetProcessPriorityBoost
-       1335  536 000236F0 SetProcessShutdownParameters
-       1336  537 00023BE0 SetProcessWorkingSetSize
-       1337  538 00043050 SetProcessWorkingSetSizeEx
-       1338  539          SetProtectedPolicy (forwarded to api-ms-win-core-processthreads-l1-1-2.SetProtectedPolicy)
-       1339  53A 0003F8C0 SetSearchPathMode
-       1340  53B 00021970 SetStdHandle
-       1341  53C 00043060 SetStdHandleEx
-       1342  53D 00043070 SetSystemFileCacheSize
-       1343  53E 00040BC0 SetSystemPowerState
-       1344  53F 00043080 SetSystemTime
-       1345  540 0003AD10 SetSystemTimeAdjustment
-       1346  541 0004D3B0 SetTapeParameters
-       1347  542 0004D400 SetTapePosition
-       1348  543 00043790 SetTermsrvAppInstallMode
-       1349  544 00016D50 SetThreadAffinityMask
-       1350  545 00023CC0 SetThreadContext
-       1351  546 0001D880 SetThreadErrorMode
-       1352  547 00024270 SetThreadExecutionState
-       1353  548 00043090 SetThreadGroupAffinity
-       1354  549 0001B290 SetThreadIdealProcessor
-       1355  54A 000430A0 SetThreadIdealProcessorEx
-       1356  54B 000260D0 SetThreadInformation
-       1357  54C 0001C430 SetThreadLocale
-       1358  54D 0001F530 SetThreadPreferredUILanguages
-       1359  54E 0001F1C0 SetThreadPriority
-       1360  54F 00024D40 SetThreadPriorityBoost
-       1361  550          SetThreadSelectedCpuSets (forwarded to api-ms-win-core-processthreads-l1-1-3.SetThreadSelectedCpuSets)
-       1362  551 000217B0 SetThreadStackGuarantee
-       1363  552          SetThreadToken (forwarded to api-ms-win-core-processthreads-l1-1-0.SetThreadToken)
-       1364  553 0001DD00 SetThreadUILanguage
-       1365  554 000430B0 SetThreadpoolStackInformation
-       1366  555          SetThreadpoolThreadMaximum (forwarded to NTDLL.TpSetPoolMaxThreads)
-       1367  556 00024B70 SetThreadpoolThreadMinimum
-       1368  557          SetThreadpoolTimer (forwarded to NTDLL.TpSetTimer)
-       1369  558          SetThreadpoolTimerEx (forwarded to NTDLL.TpSetTimerEx)
-       1370  559          SetThreadpoolWait (forwarded to NTDLL.TpSetWait)
-       1371  55A          SetThreadpoolWaitEx (forwarded to NTDLL.TpSetWaitEx)
-       1372  55B 000430E0 SetTimeZoneInformation
-       1373  55C 0004EAF0 SetTimerQueueTimer
-       1374  55D 0004C1E0 SetUmsThreadInformation
-       1375  55E 00021720 SetUnhandledExceptionFilter
-       1376  55F 0005F100 SetUserGeoID
-       1377  560 0004A170 SetVDMCurrentDirectories
-       1378  561 00040700 SetVolumeLabelA
-       1379  562 000407A0 SetVolumeLabelW
-       1380  563 0004B780 SetVolumeMountPointA
-       1381  564 0004B7F0 SetVolumeMountPointW
-       1382  565 000430F0 SetVolumeMountPointWStub
-       1383  566 00026290 SetWaitableTimer
-       1384  567          SetWaitableTimerEx (forwarded to api-ms-win-core-synch-l1-1-0.SetWaitableTimerEx)
-       1385  568 00023C80 SetXStateFeaturesMask
-       1386  569 000268F0 SetupComm
-       1387  56A 00064FB0 ShowConsoleCursor
-       1388  56B 00043100 SignalObjectAndWait
-       1389  56C 0001EEE0 SizeofResource
-       1390  56D 00019780 Sleep
-       1391  56E          SleepConditionVariableCS (forwarded to api-ms-win-core-synch-l1-1-0.SleepConditionVariableCS)
-       1392  56F          SleepConditionVariableSRW (forwarded to api-ms-win-core-synch-l1-1-0.SleepConditionVariableSRW)
-       1393  570 000262A0 SleepEx
-       1394  571 00023680 SortCloseHandle
-       1395  572 0000F700 SortGetHandle
-       1396  573          StartThreadpoolIo (forwarded to NTDLL.TpStartAsyncIoOperation)
-       1397  574          SubmitThreadpoolWork (forwarded to NTDLL.TpPostWork)
-       1398  575 00021710 SuspendThread
-       1399  576 000269C0 SwitchToFiber
-       1400  577 0001B1E0 SwitchToThread
-       1401  578 0001F520 SystemTimeToFileTime
-       1402  579 000230C0 SystemTimeToTzSpecificLocalTime
-       1403  57A          SystemTimeToTzSpecificLocalTimeEx (forwarded to api-ms-win-core-timezone-l1-1-0.SystemTimeToTzSpecificLocalTimeEx)
-       1404  57B 00023750 TerminateJobObject
-       1405  57C 00023710 TerminateProcess
-       1406  57D 000228F0 TerminateThread
-       1407  57E 00015160 TermsrvAppInstallMode
-       1408  57F 00012D50 TermsrvConvertSysRootToUserDir
-       1409  580 0001EBB0 TermsrvCreateRegEntry
-       1410  581 0001F540 TermsrvDeleteKey
-       1411  582 0001F880 TermsrvDeleteValue
-       1412  583 0001C2B0 TermsrvGetPreSetValue
-       1413  584 00024CB0 TermsrvGetWindowsDirectoryA
-       1414  585 00012D10 TermsrvGetWindowsDirectoryW
-       1415  586 00018A60 TermsrvOpenRegEntry
-       1416  587 0001E1A0 TermsrvOpenUserClasses
-       1417  588 00044730 TermsrvRestoreKey
-       1418  589 0001C440 TermsrvSetKeySecurity
-       1419  58A 0001C310 TermsrvSetValueKey
-       1420  58B 00014020 TermsrvSyncUserIniFileExt
-       1421  58C 00020B20 Thread32First
-       1422  58D 00018CB0 Thread32Next
-       1423  58E 0001E6B0 TlsAlloc
-       1424  58F 0001EEF0 TlsFree
-       1425  590 00016CB0 TlsGetValue
-       1426  591 00018A50 TlsSetValue
-       1427  592 00045300 Toolhelp32ReadProcessMemory
-       1428  593 00043110 TransactNamedPipe
-       1429  594 00026900 TransmitCommChar
-       1430  595          TryAcquireSRWLockExclusive (forwarded to NTDLL.RtlTryAcquireSRWLockExclusive)
-       1431  596          TryAcquireSRWLockShared (forwarded to NTDLL.RtlTryAcquireSRWLockShared)
-       1432  597          TryEnterCriticalSection (forwarded to NTDLL.RtlTryEnterCriticalSection)
-       1433  598 000234A0 TrySubmitThreadpoolCallback
-       1434  599 00024DA0 TzSpecificLocalTimeToSystemTime
-       1435  59A          TzSpecificLocalTimeToSystemTimeEx (forwarded to api-ms-win-core-timezone-l1-1-0.TzSpecificLocalTimeToSystemTimeEx)
-       1436  59B 0003F8F0 UTRegister
-       1437  59C 000271A0 UTUnRegister
-       1438  59D 0004C210 UmsThreadYield
-       1439  59E 00043120 UnhandledExceptionFilter
-       1440  59F 00026730 UnlockFile
-       1441  5A0 00026740 UnlockFileEx
-       1442  5A1 0001F4B0 UnmapViewOfFile
-       1443  5A2          UnmapViewOfFileEx (forwarded to api-ms-win-core-memory-l1-1-1.UnmapViewOfFileEx)
-       1444  5A3 00023D60 UnregisterApplicationRecoveryCallback
-       1445  5A4 000059A0 UnregisterApplicationRestart
-       1446  5A5 00043130 UnregisterBadMemoryNotification
-       1447  5A6 00064DE0 UnregisterConsoleIME
-       1448  5A7 00016500 UnregisterWait
-       1449  5A8 00023970 UnregisterWaitEx
-       1450  5A9 000404E0 UnregisterWaitUntilOOBECompleted
-       1451  5AA 00018680 UpdateCalendarDayOfWeek
-       1452  5AB          UpdateProcThreadAttribute (forwarded to api-ms-win-core-processthreads-l1-1-0.UpdateProcThreadAttribute)
-       1453  5AC 00054A20 UpdateResourceA
-       1454  5AD 00054BA0 UpdateResourceW
-       1455  5AE 00065A90 VDMConsoleOperation
-       1456  5AF 0004A420 VDMOperationStarted
-       1457  5B0 00023C90 VerLanguageNameA
-       1458  5B1 00023BC0 VerLanguageNameW
-       1459  5B2          VerSetConditionMask (forwarded to NTDLL.VerSetConditionMask)
-       1460  5B3 00023920 VerifyConsoleIoHandle
-       1461  5B4 00043140 VerifyScripts
-       1462  5B5 00019BB0 VerifyVersionInfoA
-       1463  5B6 00019C50 VerifyVersionInfoW
-       1464  5B7 0001C370 VirtualAlloc
-       1465  5B8 00023D00 VirtualAllocEx
-       1466  5B9 00024DB0 VirtualAllocExNuma
-       1467  5BA 0001C490 VirtualFree
-       1468  5BB 00023D10 VirtualFreeEx
-       1469  5BC 00043150 VirtualLock
-       1470  5BD 0001DEE0 VirtualProtect
-       1471  5BE 00043160 VirtualProtectEx
-       1472  5BF 0001E6A0 VirtualQuery
-       1473  5C0 00022FB0 VirtualQueryEx
-       1474  5C1 0001F3A0 VirtualUnlock
-       1475  5C2 00022330 WTSGetActiveConsoleSessionId
-       1476  5C3 00026910 WaitCommEvent
-       1477  5C4 00043170 WaitForDebugEvent
-       1478  5C5          WaitForDebugEventEx (forwarded to api-ms-win-core-debug-l1-1-2.WaitForDebugEventEx)
-       1479  5C6 000262B0 WaitForMultipleObjects
-       1480  5C7 000262C0 WaitForMultipleObjectsEx
-       1481  5C8 000262D0 WaitForSingleObject
-       1482  5C9 000262E0 WaitForSingleObjectEx
-       1483  5CA          WaitForThreadpoolIoCallbacks (forwarded to NTDLL.TpWaitForIoCompletion)
-       1484  5CB          WaitForThreadpoolTimerCallbacks (forwarded to NTDLL.TpWaitForTimer)
-       1485  5CC          WaitForThreadpoolWaitCallbacks (forwarded to NTDLL.TpWaitForWait)
-       1486  5CD          WaitForThreadpoolWorkCallbacks (forwarded to NTDLL.TpWaitForWork)
-       1487  5CE 000401A0 WaitNamedPipeA
-       1488  5CF 00043180 WaitNamedPipeW
-       1489  5D0          WakeAllConditionVariable (forwarded to NTDLL.RtlWakeAllConditionVariable)
-       1490  5D1          WakeConditionVariable (forwarded to NTDLL.RtlWakeConditionVariable)
-       1491  5D2 000203F0 WerGetFlags
-       1492  5D3 000203F0 WerGetFlagsWorker
-       1493  5D4 00022F90 WerRegisterFile
-       1494  5D5 00008720 WerRegisterFileWorker
-       1495  5D6 000218D0 WerRegisterMemoryBlock
-       1496  5D7 0000AFC0 WerRegisterMemoryBlockWorker
-       1497  5D8 00023430 WerRegisterRuntimeExceptionModule
-       1498  5D9 00007DF0 WerRegisterRuntimeExceptionModuleWorker
-       1499  5DA 00007820 WerSetFlags
-       1500  5DB 00007820 WerSetFlagsWorker
-       1501  5DC 00022F80 WerUnregisterFile
-       1502  5DD 00008710 WerUnregisterFileWorker
-       1503  5DE 000218F0 WerUnregisterMemoryBlock
-       1504  5DF 0000AB20 WerUnregisterMemoryBlockWorker
-       1505  5E0 00043190 WerUnregisterRuntimeExceptionModule
-       1506  5E1 0004E850 WerUnregisterRuntimeExceptionModuleWorker
-       1507  5E2 0004E8C0 WerpCleanupMessageMapping
-       1508  5E3 00067620 WerpGetDebugger
-       1509  5E4 0004E860 WerpInitiateRemoteRecovery
-       1510  5E5 00067C00 WerpLaunchAeDebug
-       1511  5E6 000431A0 WerpNotifyLoadStringResource
-       1512  5E7 0004E910 WerpNotifyLoadStringResourceEx
-       1513  5E8 0004E920 WerpNotifyLoadStringResourceWorker
-       1514  5E9 000431B0 WerpNotifyUseStringResource
-       1515  5EA 00025AB0 WerpNotifyUseStringResourceWorker
-       1516  5EB 0004E930 WerpStringLookup
-       1517  5EC 00016D20 WideCharToMultiByte
-       1518  5ED 00041990 WinExec
-       1519  5EE 000431C0 Wow64DisableWow64FsRedirection
-       1520  5EF 00023D30 Wow64EnableWow64FsRedirection
-       1521  5F0 00044790 Wow64GetThreadContext
-       1522  5F1 0003AE10 Wow64GetThreadSelectorEntry
-       1523  5F2 000431D0 Wow64RevertWow64FsRedirection
-       1524  5F3 000447C0 Wow64SetThreadContext
-       1525  5F4 000447F0 Wow64SuspendThread
-       1526  5F5 00026AE0 WriteConsoleA
-       1527  5F6 00026CF0 WriteConsoleInputA
-       1528  5F7 00064FF0 WriteConsoleInputVDMA
-       1529  5F8 00065070 WriteConsoleInputVDMW
-       1530  5F9 00026D00 WriteConsoleInputW
-       1531  5FA 00026D10 WriteConsoleOutputA
-       1532  5FB 00026D20 WriteConsoleOutputAttribute
-       1533  5FC 00026D30 WriteConsoleOutputCharacterA
-       1534  5FD 00026D40 WriteConsoleOutputCharacterW
-       1535  5FE 00026D50 WriteConsoleOutputW
-       1536  5FF 00026AF0 WriteConsoleW
-       1537  600 00026750 WriteFile
-       1538  601 00026760 WriteFileEx
-       1539  602 00026770 WriteFileGather
-       1540  603 0003C280 WritePrivateProfileSectionA
-       1541  604 00025420 WritePrivateProfileSectionW
-       1542  605 0003C2E0 WritePrivateProfileStringA
-       1543  606 00015100 WritePrivateProfileStringW
-       1544  607 0003C350 WritePrivateProfileStructA
-       1545  608 0003C4A0 WritePrivateProfileStructW
-       1546  609 0001EF00 WriteProcessMemory
-       1547  60A 0003C600 WriteProfileSectionA
-       1548  60B 0003C610 WriteProfileSectionW
-       1549  60C 0003C620 WriteProfileStringA
-       1550  60D 0003C630 WriteProfileStringW
-       1551  60E 0004D470 WriteTapemark
-       1552  60F 000431E0 ZombifyActCtx
-       1553  610 0004E6C0 ZombifyActCtxWorker
-       1554  611          __C_specific_handler (forwarded to NTDLL.__C_specific_handler)
-       1555  612          __chkstk (forwarded to NTDLL.__chkstk)
-       1556  613          __misaligned_access (forwarded to NTDLL.__misaligned_access)
-       1557  614 00018DD0 _hread
-       1558  615 0003F260 _hwrite
-       1559  616 0001D3F0 _lclose
-       1560  617 0003F190 _lcreat
-       1561  618 00018B70 _llseek
-       1562  619          _local_unwind (forwarded to NTDLL._local_unwind)
-       1563  61A 0003F1F0 _lopen
-       1564  61B 00018DD0 _lread
-       1565  61C 0003F260 _lwrite
-       1566  61D 000217D0 lstrcat
-       1567  61E 000217D0 lstrcatA
-       1568  61F 00024400 lstrcatW
-       1569  620 0001E730 lstrcmp
-       1570  621 0001E730 lstrcmpA
-       1571  622 0001C510 lstrcmpW
-       1572  623 0001C390 lstrcmpi
-       1573  624 0001C390 lstrcmpiA
-       1574  625 00018B60 lstrcmpiW
-       1575  626 0001F5A0 lstrcpy
-       1576  627 0001F5A0 lstrcpyA
-       1577  628 00021420 lstrcpyW
-       1578  629 000431F0 lstrcpyn
-       1579  62A 000431F0 lstrcpynA
-       1580  62B 00023A70 lstrcpynW
-       1581  62C 0001C400 lstrlen
-       1582  62D 0001C400 lstrlenA
-       1583  62E 00018A40 lstrlenW
-       1584  62F 000212D0 timeBeginPeriod
-       1585  630 0001F5F0 timeEndPeriod
-       1586  631 000242E0 timeGetDevCaps
-       1587  632 00044820 timeGetSystemTime
-       1588  633 0001E0C0 timeGetTime
-       1589  634 0001C510 uaw_lstrcmpW
-       1590  635 00018B60 uaw_lstrcmpiW
-       1591  636 00036BA0 uaw_lstrlenW
-       1592  637 00036BF0 uaw_wcschr
-       1593  638 00036C10 uaw_wcscpy
-       1594  639 00036C40 uaw_wcsicmp
-       1595  63A 00036C50 uaw_wcslen
-       1596  63B 00036C70 uaw_wcsrchr
-
-  Summary
-
-        1000 .data
-        1000 .didat
-        6000 .pdata
-       2F000 .rdata
-        1000 .reloc
-        1000 .rsrc
-       73000 .text
-Microsoft (R) COFF/PE Dumper Version 14.36.32538.0
-Copyright (C) Microsoft Corporation.  All rights reserved.
-
-
-Dump of file 10.0.10240\ntdll.dll
-
-File Type: DLL
-
-  Section contains the following exports for ntdll.dll
-
-    00000000 characteristics
-    64781AF1 time date stamp Wed May 31 21:13:37 2023
-        0.00 version
-           8 ordinal base
-        2224 number of functions
-        2223 number of names
-
-    ordinal hint RVA      name
-
-          9    0 0004F0D0 A_SHAFinal
-         10    1 0004F210 A_SHAInit
-         11    2 0004F250 A_SHAUpdate
-         12    3 00079380 AlpcAdjustCompletionListConcurrencyCount
-         13    4 00062D50 AlpcFreeCompletionListMessage
-         14    5 000CAC90 AlpcGetCompletionListLastMessageInformation
-         15    6 000CACB0 AlpcGetCompletionListMessageAttributes
-         16    7 0006AB50 AlpcGetHeaderSize
-         17    8 0006AB10 AlpcGetMessageAttribute
-         18    9 00034CB0 AlpcGetMessageFromCompletionList
-         19    A 00079020 AlpcGetOutstandingCompletionListMessageCount
-         20    B 0006AAB0 AlpcInitializeMessageAttribute
-         21    C 000779C0 AlpcMaxAllowedMessageLength
-         22    D 00078630 AlpcRegisterCompletionList
-         23    E 00064CF0 AlpcRegisterCompletionListWorkerThread
-         24    F 00078FE0 AlpcRundownCompletionList
-         25   10 00079000 AlpcUnregisterCompletionList
-         26   11 00064C80 AlpcUnregisterCompletionListWorkerThread
-         27   12 00021030 ApiSetQueryApiSetPresence
-         28   13 00008010 CsrAllocateCaptureBuffer
-         29   14 00007FD0 CsrAllocateMessagePointer
-         30   15 00007D90 CsrCaptureMessageBuffer
-         31   16 00007DF0 CsrCaptureMessageMultiUnicodeStringsInPlace
-         32   17 00007F10 CsrCaptureMessageString
-         33   18 000BADB0 CsrCaptureTimeout
-         34   19 00007C10 CsrClientCallServer
-         35   1A 00004320 CsrClientConnectToServer
-         36   1B 00007BE0 CsrFreeCaptureBuffer
-         37   1C 000BADD0 CsrGetProcessId
-         38   1D 000759D0 CsrIdentifyAlertableThread
-         39   1E 000C0F00 CsrSetPriorityClass
-         40   1F 000BADF0 CsrVerifyRegion
-         41   20 00094F40 DbgBreakPoint
-         42   21 00010000 DbgPrint
-         43   22 0000F9B0 DbgPrintEx
-         44   23 000CACF0 DbgPrintReturnControlC
-         45   24 000CAD40 DbgPrompt
-         46   25 000CAD80 DbgQueryDebugFilterState
-         47   26 000CAD90 DbgSetDebugFilterState
-         48   27 000BBF00 DbgUiConnectToDbg
-         49   28 000BBF70 DbgUiContinue
-         50   29 000BBFA0 DbgUiConvertStateChangeStructure
-         51   2A 000BBFB0 DbgUiConvertStateChangeStructureEx
-         52   2B 000BC250 DbgUiDebugActiveProcess
-         53   2C 000BC2B0 DbgUiGetThreadDebugObject
-         54   2D 000BC2D0 DbgUiIssueRemoteBreakin
-         55   2E 000BC340 DbgUiRemoteBreakin
-         56   2F 000BC3B0 DbgUiSetThreadDebugObject
-         57   30 000BC3D0 DbgUiStopDebugging
-         58   31 000BC3F0 DbgUiWaitStateChange
-         59   32 00094F50 DbgUserBreakPoint
-         60   33 000F3B40 EtwCreateTraceInstanceId
-         61   34 0000C140 EtwDeliverDataBlock
-         62   35 000F3BA0 EtwEnumerateProcessRegGuids
-         63   36 000639F0 EtwEventActivityIdControl
-         64   37 0000CD00 EtwEventEnabled
-         65   38 00075700 EtwEventProviderEnabled
-         66   39 000390B0 EtwEventRegister
-         67   3A 0000E180 EtwEventSetInformation
-         68   3B 0000E360 EtwEventUnregister
-         69   3C 0000F6B0 EtwEventWrite
-         70   3D 0000CDE0 EtwEventWriteEndScenario
-         71   3E 0000F660 EtwEventWriteEx
-         72   3F 0000F610 EtwEventWriteFull
-         73   40 00077810 EtwEventWriteNoRegistration
-         74   41 00081390 EtwEventWriteStartScenario
-         75   42 000F3CC0 EtwEventWriteString
-         76   43 0000F6F0 EtwEventWriteTransfer
-         77   44 00075790 EtwGetTraceEnableFlags
-         78   45 000757D0 EtwGetTraceEnableLevel
-         79   46 00074C20 EtwGetTraceLoggerHandle
-         80   47 0007EB10 EtwLogTraceEvent
-         81   48 00038930 EtwNotificationRegister
-         82   49 0000E370 EtwNotificationUnregister
-         83   4A 0000A160 EtwProcessPrivateLoggerRequest
-         84   4B 00081720 EtwRegisterSecurityProvider
-         85   4C 00069BE0 EtwRegisterTraceGuidsA
-         86   4D 00069C20 EtwRegisterTraceGuidsW
-         87   4E 00002A90 EtwReplyNotification
-         88   4F 0000EA20 EtwSendNotification
-         89   50 000F3EF0 EtwSetMark
-         90   51 000F3F20 EtwTraceEventInstance
-         91   52 0000E4E0 EtwTraceMessage
-         92   53 0000E510 EtwTraceMessageVa
-         93   54 0000E310 EtwUnregisterTraceGuids
-         94   55 0006DE30 EtwWriteUMSecurityEvent
-         95   56 00076080 EtwpCreateEtwThread
-         96   57 0000CAA0 EtwpGetCpuSpeed
-         97   58 000F4EB0 EvtIntReportAuthzEventAndSourceAsync
-         98   59 0000E5E0 EvtIntReportEventAndSourceAsync
-         99   5A 00094FF0 ExpInterlockedPopEntrySListEnd
-        100   5B 00094FE7 ExpInterlockedPopEntrySListFault
-        101   5C 00094FD7 ExpInterlockedPopEntrySListResume
-        102   5D 00095310 KiRaiseUserExceptionDispatcher
-        103   5E 00095150 KiUserApcDispatcher
-        104   5F 00095250 KiUserCallbackDispatcher
-        105   60 000952A0 KiUserExceptionDispatcher
-        106   61 00157320 KiUserInvertedFunctionTable
-        107   62 00073690 LdrAccessResource
-        108   63 00059690 LdrAddDllDirectory
-        109   64 0006AE70 LdrAddLoadAsDataTable
-        110   65 0007C880 LdrAddRefDll
-        111   66 000BAE40 LdrAppxHandleIntegrityFailure
-        112   67 0006F270 LdrDisableThreadCalloutsForDll
-        113   68 000CB040 LdrEnumResources
-        114   69 000754A0 LdrEnumerateLoadedModules
-        115   6A 000BC670 LdrFastFailInLoaderCallout
-        116   6B 00069A90 LdrFindEntryForAddress
-        117   6C 000CB310 LdrFindResourceDirectory_U
-        118   6D 00074A00 LdrFindResourceEx_U
-        119   6E 0006FE80 LdrFindResource_U
-        120   6F 00080390 LdrFlushAlternateResourceModules
-        121   70 00072060 LdrGetDllDirectory
-        122   71 0006C070 LdrGetDllFullName
-        123   72 00018950 LdrGetDllHandle
-        124   73 0006BD10 LdrGetDllHandleByMapping
-        125   74 0006CB20 LdrGetDllHandleByName
-        126   75 000185D0 LdrGetDllHandleEx
-        127   76 00036750 LdrGetDllPath
-        128   77 000BC6A0 LdrGetFailureData
-        129   78 000CB330 LdrGetFileNameFromLoadAsDataTable
-        130   79 00074080 LdrGetKnownDllSectionHandle
-        131   7A 00003560 LdrGetProcedureAddress
-        132   7B 00079CC0 LdrGetProcedureAddressEx
-        133   7C 00016020 LdrGetProcedureAddressForCaller
-        134   7D 000BDBA0 LdrInitShimEngineDynamic
-        135   7E 0006B9A0 LdrInitializeThunk
-        136   7F 00066340 LdrLoadAlternateResourceModule
-        137   80 0001C360 LdrLoadAlternateResourceModuleEx
-        138   81 0001AF60 LdrLoadDll
-        139   82 000086A0 LdrLockLoaderLock
-        140   83 000CBE70 LdrOpenImageFileOptionsKey
-        141   84 000778D0 LdrProcessInitializationComplete
-        142   85 000CBF60 LdrProcessRelocationBlock
-        143   86 000CBF90 LdrProcessRelocationBlockEx
-        144   87 00070D60 LdrQueryImageFileExecutionOptions
-        145   88 00070DA0 LdrQueryImageFileExecutionOptionsEx
-        146   89 000710F0 LdrQueryImageFileKeyOption
-        147   8A 000BC6B0 LdrQueryModuleServiceTags
-        148   8B 000BCCB0 LdrQueryOptionalDelayLoadedAPI
-        149   8C 00002FF0 LdrQueryProcessModuleInformation
-        150   8D 00078530 LdrRegisterDllNotification
-        151   8E 000C9170 LdrRemoveDllDirectory
-        152   8F 0006B320 LdrRemoveLoadAsDataTable
-        153   90 000CC450 LdrResFindResource
-        154   91 0006D940 LdrResFindResourceDirectory
-        155   92 00056B30 LdrResGetRCConfig
-        156   93 00080D20 LdrResRelease
-        157   94 0001AAA0 LdrResSearchResource
-        158   95 00016DF0 LdrResolveDelayLoadedAPI
-        159   96 000BCD90 LdrResolveDelayLoadsFromDll
-        160   97 0001A8A0 LdrRscIsTypeExist
-        161   98 000759D0 LdrSetAppCompatDllRedirectionCallback
-        162   99 00077980 LdrSetDefaultDllDirectories
-        163   9A 00001540 LdrSetDllDirectory
-        164   9B 00076DB0 LdrSetDllManifestProber
-        165   9C 000BCB30 LdrSetImplicitPathOptions
-        166   9D 00081760 LdrSetMUICacheType
-        167   9E 00044390 LdrShutdownProcess
-        168   9F 00021580 LdrShutdownThread
-        169   A0 000756F0 LdrStandardizeSystemPath
-        170   A1 00157290 LdrSystemDllInitBlock
-        171   A2 00043260 LdrUnloadAlternateResourceModule
-        172   A3 00043270 LdrUnloadAlternateResourceModuleEx
-        173   A4 00038190 LdrUnloadDll
-        174   A5 00070620 LdrUnlockLoaderLock
-        175   A6 000BCB90 LdrUnregisterDllNotification
-        176   A7 000BCC40 LdrVerifyImageMatchesChecksum
-        177   A8 0007ED70 LdrVerifyImageMatchesChecksumEx
-        178   A9 0001ADA0 LdrpResGetMappingSize
-        179   AA 00018C10 LdrpResGetResourceDirectory
-        180   AB 000F3910 MD4Final
-        181   AC 000F39E0 MD4Init
-        182   AD 000F3A10 MD4Update
-        183   AE 00062340 MD5Final
-        184   AF 000741E0 MD5Init
-        185   B0 00062410 MD5Update
-        186   B1 00144B42 NlsAnsiCodePage
-        187   B2 00144FA3 NlsMbCodePageTag
-        188   B3 00144FA2 NlsMbOemCodePageTag
-        189   B4 00093390 NtAcceptConnectPort
-        190   B5 00093370 NtAccessCheck
-        191   B6 00093600 NtAccessCheckAndAuditAlarm
-        192   B7 000939A0 NtAccessCheckByType
-        193   B8 00093900 NtAccessCheckByTypeAndAuditAlarm
-        194   B9 000939B0 NtAccessCheckByTypeResultList
-        195   BA 000939C0 NtAccessCheckByTypeResultListAndAuditAlarm
-        196   BB 000939D0 NtAccessCheckByTypeResultListAndAuditAlarmByHandle
-        197   BC 000937E0 NtAddAtom
-        198   BD 000939E0 NtAddAtomEx
-        199   BE 000939F0 NtAddBootEntry
-        200   BF 00093A00 NtAddDriverEntry
-        201   C0 00093A10 NtAdjustGroupsToken
-        202   C1 00093780 NtAdjustPrivilegesToken
-        203   C2 00093A20 NtAdjustTokenClaimsAndDeviceGroups
-        204   C3 00093A30 NtAlertResumeThread
-        205   C4 00093A40 NtAlertThread
-        206   C5 00093A50 NtAlertThreadByThreadId
-        207   C6 00093A60 NtAllocateLocallyUniqueId
-        208   C7 00093A70 NtAllocateReserveObject
-        209   C8 00093A80 NtAllocateUserPhysicalPages
-        210   C9 00093A90 NtAllocateUuids
-        211   CA 000934F0 NtAllocateVirtualMemory
-        212   CB 00093AA0 NtAlpcAcceptConnectPort
-        213   CC 00093AB0 NtAlpcCancelMessage
-        214   CD 00093AC0 NtAlpcConnectPort
-        215   CE 00093AD0 NtAlpcConnectPortEx
-        216   CF 00093AE0 NtAlpcCreatePort
-        217   D0 00093AF0 NtAlpcCreatePortSection
-        218   D1 00093B00 NtAlpcCreateResourceReserve
-        219   D2 00093B10 NtAlpcCreateSectionView
-        220   D3 00093B20 NtAlpcCreateSecurityContext
-        221   D4 00093B30 NtAlpcDeletePortSection
-        222   D5 00093B40 NtAlpcDeleteResourceReserve
-        223   D6 00093B50 NtAlpcDeleteSectionView
-        224   D7 00093B60 NtAlpcDeleteSecurityContext
-        225   D8 00093B70 NtAlpcDisconnectPort
-        226   D9 00093B80 NtAlpcImpersonateClientContainerOfPort
-        227   DA 00093B90 NtAlpcImpersonateClientOfPort
-        228   DB 00093BA0 NtAlpcOpenSenderProcess
-        229   DC 00093BB0 NtAlpcOpenSenderThread
-        230   DD 00093BC0 NtAlpcQueryInformation
-        231   DE 00093BD0 NtAlpcQueryInformationMessage
-        232   DF 00093BE0 NtAlpcRevokeSecurityContext
-        233   E0 00093BF0 NtAlpcSendWaitReceivePort
-        234   E1 00093C00 NtAlpcSetInformation
-        235   E2 00093830 NtApphelpCacheControl
-        236   E3 00093C10 NtAreMappedFilesTheSame
-        237   E4 00093C20 NtAssignProcessToJobObject
-        238   E5 00093C30 NtAssociateWaitCompletionPacket
-        239   E6 000933C0 NtCallbackReturn
-        240   E7 00093940 NtCancelIoFile
-        241   E8 00093C40 NtCancelIoFileEx
-        242   E9 00093C50 NtCancelSynchronousIoFile
-        243   EA 00093980 NtCancelTimer
-        244   EB 00093C60 NtCancelTimer2
-        245   EC 00093C70 NtCancelWaitCompletionPacket
-        246   ED 00093750 NtClearEvent
-        247   EE 00093460 NtClose
-        248   EF 00093720 NtCloseObjectAuditAlarm
-        249   F0 00093C80 NtCommitComplete
-        250   F1 00093C90 NtCommitEnlistment
-        251   F2 00093CA0 NtCommitTransaction
-        252   F3 00093CB0 NtCompactKeys
-        253   F4 00093CC0 NtCompareObjects
-        254   F5 00093CD0 NtCompareTokens
-        255   F6 00093CE0 NtCompleteConnectPort
-        256   F7 00093CF0 NtCompressKey
-        257   F8 00093D00 NtConnectPort
-        258   F9 000937A0 NtContinue
-        259   FA 00093D10 NtCreateDebugObject
-        260   FB 00093D20 NtCreateDirectoryObject
-        261   FC 00093D30 NtCreateDirectoryObjectEx
-        262   FD 00093D40 NtCreateEnlistment
-        263   FE 000937F0 NtCreateEvent
-        264   FF 00093D50 NtCreateEventPair
-        265  100 000938C0 NtCreateFile
-        266  101 00093D60 NtCreateIRTimer
-        267  102 00093D70 NtCreateIoCompletion
-        268  103 00093D80 NtCreateJobObject
-        269  104 00093D90 NtCreateJobSet
-        270  105 00093540 NtCreateKey
-        271  106 00093DA0 NtCreateKeyTransacted
-        272  107 00093DB0 NtCreateKeyedEvent
-        273  108 00093DC0 NtCreateLowBoxToken
-        274  109 00093DD0 NtCreateMailslotFile
-        275  10A 00093DE0 NtCreateMutant
-        276  10B 00093DF0 NtCreateNamedPipeFile
-        277  10C 00093E00 NtCreatePagingFile
-        278  10D 00093E10 NtCreatePartition
-        279  10E 00093E20 NtCreatePort
-        280  10F 00093E30 NtCreatePrivateNamespace
-        281  110 00093E40 NtCreateProcess
-        282  111 00093840 NtCreateProcessEx
-        283  112 00093E50 NtCreateProfile
-        284  113 00093E60 NtCreateProfileEx
-        285  114 00093E70 NtCreateResourceManager
-        286  115 00093810 NtCreateSection
-        287  116 00093E80 NtCreateSemaphore
-        288  117 00093E90 NtCreateSymbolicLinkObject
-        289  118 00093850 NtCreateThread
-        290  119 00093EA0 NtCreateThreadEx
-        291  11A 00093EB0 NtCreateTimer
-        292  11B 00093EC0 NtCreateTimer2
-        293  11C 00093ED0 NtCreateToken
-        294  11D 00093EE0 NtCreateTokenEx
-        295  11E 00093EF0 NtCreateTransaction
-        296  11F 00093F00 NtCreateTransactionManager
-        297  120 00093F10 NtCreateUserProcess
-        298  121 00093F20 NtCreateWaitCompletionPacket
-        299  122 00093F30 NtCreateWaitablePort
-        300  123 00093F40 NtCreateWnfStateName
-        301  124 00093F50 NtCreateWorkerFactory
-        302  125 00093F60 NtDebugActiveProcess
-        303  126 00093F70 NtDebugContinue
-        304  127 000936B0 NtDelayExecution
-        305  128 00093F80 NtDeleteAtom
-        306  129 00093F90 NtDeleteBootEntry
-        307  12A 00093FA0 NtDeleteDriverEntry
-        308  12B 00093FB0 NtDeleteFile
-        309  12C 00093FC0 NtDeleteKey
-        310  12D 00093FD0 NtDeleteObjectAuditAlarm
-        311  12E 00093FE0 NtDeletePrivateNamespace
-        312  12F 00093FF0 NtDeleteValueKey
-        313  130 00094000 NtDeleteWnfStateData
-        314  131 00094010 NtDeleteWnfStateName
-        315  132 000933E0 NtDeviceIoControlFile
-        316  133 00094020 NtDisableLastKnownGood
-        317  134 00094030 NtDisplayString
-        318  135 00094040 NtDrawText
-        319  136 00093730 NtDuplicateObject
-        320  137 00093790 NtDuplicateToken
-        321  138 00094050 NtEnableLastKnownGood
-        322  139 00094060 NtEnumerateBootEntries
-        323  13A 00094070 NtEnumerateDriverEntries
-        324  13B 00093690 NtEnumerateKey
-        325  13C 00094080 NtEnumerateSystemEnvironmentValuesEx
-        326  13D 00094090 NtEnumerateTransactionObject
-        327  13E 000934A0 NtEnumerateValueKey
-        328  13F 000940A0 NtExtendSection
-        329  140 000940B0 NtFilterBootOption
-        330  141 000940C0 NtFilterToken
-        331  142 000940D0 NtFilterTokenEx
-        332  143 000934B0 NtFindAtom
-        333  144 00093820 NtFlushBuffersFile
-        334  145 000940E0 NtFlushBuffersFileEx
-        335  146 000940F0 NtFlushInstallUILanguage
-        336  147 00094100 NtFlushInstructionCache
-        337  148 00094110 NtFlushKey
-        338  149 00094120 NtFlushProcessWriteBuffers
-        339  14A 00094130 NtFlushVirtualMemory
-        340  14B 00094140 NtFlushWriteBuffer
-        341  14C 00094150 NtFreeUserPhysicalPages
-        342  14D 00093550 NtFreeVirtualMemory
-        343  14E 00094160 NtFreezeRegistry
-        344  14F 00094170 NtFreezeTransactions
-        345  150 00093700 NtFsControlFile
-        346  151 00094180 NtGetCachedSigningLevel
-        347  152 00094190 NtGetCompleteWnfStateSubscription
-        348  153 000941A0 NtGetContextThread
-        349  154 000941B0 NtGetCurrentProcessorNumber
-        350  155 000941C0 NtGetCurrentProcessorNumberEx
-        351  156 000941D0 NtGetDevicePowerState
-        352  157 000941E0 NtGetMUIRegistryInfo
-        353  158 000941F0 NtGetNextProcess
-        354  159 00094200 NtGetNextThread
-        355  15A 00094210 NtGetNlsSectionPtr
-        356  15B 00094220 NtGetNotificationResourceManager
-        357  15C 000CE160 NtGetTickCount
-        358  15D 00094230 NtGetWriteWatch
-        359  15E 00094240 NtImpersonateAnonymousToken
-        360  15F 00093560 NtImpersonateClientOfPort
-        361  160 00094250 NtImpersonateThread
-        362  161 00094260 NtInitializeNlsFiles
-        363  162 00094270 NtInitializeRegistry
-        364  163 00094280 NtInitiatePowerAction
-        365  164 00093860 NtIsProcessInJob
-        366  165 00094290 NtIsSystemResumeAutomatic
-        367  166 000942A0 NtIsUILanguageComitted
-        368  167 000942B0 NtListenPort
-        369  168 000942C0 NtLoadDriver
-        370  169 000942D0 NtLoadKey
-        371  16A 000942E0 NtLoadKey2
-        372  16B 00094F00 NtLoadKey3
-        373  16C 000942F0 NtLoadKeyEx
-        374  16D 00094300 NtLockFile
-        375  16E 00094310 NtLockProductActivationKeys
-        376  16F 00094320 NtLockRegistryKey
-        377  170 00094330 NtLockVirtualMemory
-        378  171 00094340 NtMakePermanentObject
-        379  172 00094350 NtMakeTemporaryObject
-        380  173 00094360 NtManagePartition
-        381  174 00094370 NtMapCMFModule
-        382  175 00094380 NtMapUserPhysicalPages
-        383  176 000933A0 NtMapUserPhysicalPagesScatter
-        384  177 000935F0 NtMapViewOfSection
-        385  178 00094390 NtModifyBootEntry
-        386  179 000943A0 NtModifyDriverEntry
-        387  17A 000943B0 NtNotifyChangeDirectoryFile
-        388  17B 000943C0 NtNotifyChangeKey
-        389  17C 000943D0 NtNotifyChangeMultipleKeys
-        390  17D 000943E0 NtNotifyChangeSession
-        391  17E 000938F0 NtOpenDirectoryObject
-        392  17F 000943F0 NtOpenEnlistment
-        393  180 00093770 NtOpenEvent
-        394  181 00094400 NtOpenEventPair
-        395  182 000936A0 NtOpenFile
-        396  183 00094410 NtOpenIoCompletion
-        397  184 00094420 NtOpenJobObject
-        398  185 00093490 NtOpenKey
-        399  186 00094430 NtOpenKeyEx
-        400  187 00094440 NtOpenKeyTransacted
-        401  188 00094450 NtOpenKeyTransactedEx
-        402  189 00094460 NtOpenKeyedEvent
-        403  18A 00094470 NtOpenMutant
-        404  18B 00094480 NtOpenObjectAuditAlarm
-        405  18C 00094490 NtOpenPartition
-        406  18D 000944A0 NtOpenPrivateNamespace
-        407  18E 000935D0 NtOpenProcess
-        408  18F 000944B0 NtOpenProcessToken
-        409  190 00093670 NtOpenProcessTokenEx
-        410  191 000944C0 NtOpenResourceManager
-        411  192 000936E0 NtOpenSection
-        412  193 000944D0 NtOpenSemaphore
-        413  194 000944E0 NtOpenSession
-        414  195 000944F0 NtOpenSymbolicLinkObject
-        415  196 00094500 NtOpenThread
-        416  197 000935B0 NtOpenThreadToken
-        417  198 00093660 NtOpenThreadTokenEx
-        418  199 00094510 NtOpenTimer
-        419  19A 00094520 NtOpenTransaction
-        420  19B 00094530 NtOpenTransactionManager
-        421  19C 00094540 NtPlugPlayControl
-        422  19D 00093960 NtPowerInformation
-        423  19E 00094550 NtPrePrepareComplete
-        424  19F 00094560 NtPrePrepareEnlistment
-        425  1A0 00094570 NtPrepareComplete
-        426  1A1 00094580 NtPrepareEnlistment
-        427  1A2 00094590 NtPrivilegeCheck
-        428  1A3 000945A0 NtPrivilegeObjectAuditAlarm
-        429  1A4 000945B0 NtPrivilegedServiceAuditAlarm
-        430  1A5 000945C0 NtPropagationComplete
-        431  1A6 000945D0 NtPropagationFailed
-        432  1A7 00093870 NtProtectVirtualMemory
-        433  1A8 000945E0 NtPulseEvent
-        434  1A9 00093740 NtQueryAttributesFile
-        435  1AA 000945F0 NtQueryBootEntryOrder
-        436  1AB 00094600 NtQueryBootOptions
-        437  1AC 00094610 NtQueryDebugFilterState
-        438  1AD 000934C0 NtQueryDefaultLocale
-        439  1AE 000937B0 NtQueryDefaultUILanguage
-        440  1AF 000936C0 NtQueryDirectoryFile
-        441  1B0 00094620 NtQueryDirectoryObject
-        442  1B1 00094630 NtQueryDriverEntryOrder
-        443  1B2 00094640 NtQueryEaFile
-        444  1B3 000938D0 NtQueryEvent
-        445  1B4 00094650 NtQueryFullAttributesFile
-        446  1B5 00094660 NtQueryInformationAtom
-        447  1B6 00094670 NtQueryInformationEnlistment
-        448  1B7 00093480 NtQueryInformationFile
-        449  1B8 00094680 NtQueryInformationJobObject
-        450  1B9 00094690 NtQueryInformationPort
-        451  1BA 00093500 NtQueryInformationProcess
-        452  1BB 000946A0 NtQueryInformationResourceManager
-        453  1BC 000935C0 NtQueryInformationThread
-        454  1BD 00093580 NtQueryInformationToken
-        455  1BE 000946B0 NtQueryInformationTransaction
-        456  1BF 000946C0 NtQueryInformationTransactionManager
-        457  1C0 000946D0 NtQueryInformationWorkerFactory
-        458  1C1 000946E0 NtQueryInstallUILanguage
-        459  1C2 000946F0 NtQueryIntervalProfile
-        460  1C3 00094700 NtQueryIoCompletion
-        461  1C4 000934D0 NtQueryKey
-        462  1C5 00094710 NtQueryLicenseValue
-        463  1C6 00094720 NtQueryMultipleValueKey
-        464  1C7 00094730 NtQueryMutant
-        465  1C8 00093470 NtQueryObject
-        466  1C9 00094740 NtQueryOpenSubKeys
-        467  1CA 00094750 NtQueryOpenSubKeysEx
-        468  1CB 00093680 NtQueryPerformanceCounter
-        469  1CC 00094760 NtQueryPortInformationProcess
-        470  1CD 00094770 NtQueryQuotaInformationFile
-        471  1CE 00093880 NtQuerySection
-        472  1CF 00094780 NtQuerySecurityAttributesToken
-        473  1D0 00094790 NtQuerySecurityObject
-        474  1D1 000947A0 NtQuerySemaphore
-        475  1D2 000947B0 NtQuerySymbolicLinkObject
-        476  1D3 000947C0 NtQuerySystemEnvironmentValue
-        477  1D4 000947D0 NtQuerySystemEnvironmentValueEx
-        478  1D5 000936D0 NtQuerySystemInformation
-        479  1D6 000947E0 NtQuerySystemInformationEx
-        480  1D7 00093910 NtQuerySystemTime
-        481  1D8 000936F0 NtQueryTimer
-        482  1D9 000947F0 NtQueryTimerResolution
-        483  1DA 000934E0 NtQueryValueKey
-        484  1DB 000935A0 NtQueryVirtualMemory
-        485  1DC 00093800 NtQueryVolumeInformationFile
-        486  1DD 00094800 NtQueryWnfStateData
-        487  1DE 00094810 NtQueryWnfStateNameInformation
-        488  1DF 000937C0 NtQueueApcThread
-        489  1E0 00094820 NtQueueApcThreadEx
-        490  1E1 00094830 NtRaiseException
-        491  1E2 00094840 NtRaiseHardError
-        492  1E3 000933D0 NtReadFile
-        493  1E4 00093650 NtReadFileScatter
-        494  1E5 00094850 NtReadOnlyEnlistment
-        495  1E6 000938B0 NtReadRequestData
-        496  1E7 00093760 NtReadVirtualMemory
-        497  1E8 00094860 NtRecoverEnlistment
-        498  1E9 00094870 NtRecoverResourceManager
-        499  1EA 00094880 NtRecoverTransactionManager
-        500  1EB 00094890 NtRegisterProtocolAddressInformation
-        501  1EC 000948A0 NtRegisterThreadTerminatePort
-        502  1ED 000948B0 NtReleaseKeyedEvent
-        503  1EE 00093570 NtReleaseMutant
-        504  1EF 00093410 NtReleaseSemaphore
-        505  1F0 000948C0 NtReleaseWorkerFactoryWorker
-        506  1F1 00093400 NtRemoveIoCompletion
-        507  1F2 000948D0 NtRemoveIoCompletionEx
-        508  1F3 000948E0 NtRemoveProcessDebug
-        509  1F4 000948F0 NtRenameKey
-        510  1F5 00094900 NtRenameTransactionManager
-        511  1F6 00094910 NtReplaceKey
-        512  1F7 00094920 NtReplacePartitionUnit
-        513  1F8 00093430 NtReplyPort
-        514  1F9 00093420 NtReplyWaitReceivePort
-        515  1FA 00093620 NtReplyWaitReceivePortEx
-        516  1FB 00094930 NtReplyWaitReplyPort
-        517  1FC 00094940 NtRequestPort
-        518  1FD 00093590 NtRequestWaitReplyPort
-        519  1FE 00094950 NtResetEvent
-        520  1FF 00094960 NtResetWriteWatch
-        521  200 00094970 NtRestoreKey
-        522  201 00094980 NtResumeProcess
-        523  202 00093890 NtResumeThread
-        524  203 00094990 NtRevertContainerImpersonation
-        525  204 000949A0 NtRollbackComplete
-        526  205 000949B0 NtRollbackEnlistment
-        527  206 000949C0 NtRollbackTransaction
-        528  207 000949D0 NtRollforwardTransactionManager
-        529  208 000949E0 NtSaveKey
-        530  209 000949F0 NtSaveKeyEx
-        531  20A 00094A00 NtSaveMergedKeys
-        532  20B 00094A10 NtSecureConnectPort
-        533  20C 00094A20 NtSerializeBoot
-        534  20D 00094A30 NtSetBootEntryOrder
-        535  20E 00094A40 NtSetBootOptions
-        536  20F 00094A50 NtSetCachedSigningLevel
-        537  210 00094A60 NtSetContextThread
-        538  211 00094A70 NtSetDebugFilterState
-        539  212 00094A80 NtSetDefaultHardErrorPort
-        540  213 00094A90 NtSetDefaultLocale
-        541  214 00094AA0 NtSetDefaultUILanguage
-        542  215 00094AB0 NtSetDriverEntryOrder
-        543  216 00094AC0 NtSetEaFile
-        544  217 00093450 NtSetEvent
-        545  218 00093640 NtSetEventBoostPriority
-        546  219 00094AD0 NtSetHighEventPair
-        547  21A 00094AE0 NtSetHighWaitLowEventPair
-        548  21B 00094AF0 NtSetIRTimer
-        549  21C 00094B00 NtSetInformationDebugObject
-        550  21D 00094B10 NtSetInformationEnlistment
-        551  21E 000935E0 NtSetInformationFile
-        552  21F 00094B20 NtSetInformationJobObject
-        553  220 00094B30 NtSetInformationKey
-        554  221 00093930 NtSetInformationObject
-        555  222 00093530 NtSetInformationProcess
-        556  223 00094B40 NtSetInformationResourceManager
-        557  224 00094B50 NtSetInformationSymbolicLink
-        558  225 00093440 NtSetInformationThread
-        559  226 00094B60 NtSetInformationToken
-        560  227 00094B70 NtSetInformationTransaction
-        561  228 00094B80 NtSetInformationTransactionManager
-        562  229 00094B90 NtSetInformationVirtualMemory
-        563  22A 00094BA0 NtSetInformationWorkerFactory
-        564  22B 00094BB0 NtSetIntervalProfile
-        565  22C 00094BC0 NtSetIoCompletion
-        566  22D 00094BD0 NtSetIoCompletionEx
-        567  22E 00094BE0 NtSetLdtEntries
-        568  22F 00094BF0 NtSetLowEventPair
-        569  230 00094C00 NtSetLowWaitHighEventPair
-        570  231 00094C10 NtSetQuotaInformationFile
-        571  232 00094C20 NtSetSecurityObject
-        572  233 00094C30 NtSetSystemEnvironmentValue
-        573  234 00094C40 NtSetSystemEnvironmentValueEx
-        574  235 00094C50 NtSetSystemInformation
-        575  236 00094C60 NtSetSystemPowerState
-        576  237 00094C70 NtSetSystemTime
-        577  238 00094C80 NtSetThreadExecutionState
-        578  239 00093990 NtSetTimer
-        579  23A 00094C90 NtSetTimer2
-        580  23B 00094CA0 NtSetTimerEx
-        581  23C 00094CB0 NtSetTimerResolution
-        582  23D 00094CC0 NtSetUuidSeed
-        583  23E 00093970 NtSetValueKey
-        584  23F 00094CD0 NtSetVolumeInformationFile
-        585  240 00094CE0 NtSetWnfProcessNotificationEvent
-        586  241 00094CF0 NtShutdownSystem
-        587  242 00094D00 NtShutdownWorkerFactory
-        588  243 00094D10 NtSignalAndWaitForSingleObject
-        589  244 00094D20 NtSinglePhaseReject
-        590  245 00094D30 NtStartProfile
-        591  246 00094D40 NtStopProfile
-        592  247 00094D50 NtSubscribeWnfStateChange
-        593  248 00094D60 NtSuspendProcess
-        594  249 00094D70 NtSuspendThread
-        595  24A 00094D80 NtSystemDebugControl
-        596  24B 00094D90 NtTerminateJobObject
-        597  24C 00093630 NtTerminateProcess
-        598  24D 000938A0 NtTerminateThread
-        599  24E 00094DA0 NtTestAlert
-        600  24F 00094DB0 NtThawRegistry
-        601  250 00094DC0 NtThawTransactions
-        602  251 00094DD0 NtTraceControl
-        603  252 00093950 NtTraceEvent
-        604  253 00094DE0 NtTranslateFilePath
-        605  254 00094DF0 NtUmsThreadYield
-        606  255 00094E00 NtUnloadDriver
-        607  256 00094E10 NtUnloadKey
-        608  257 00094E20 NtUnloadKey2
-        609  258 00094E30 NtUnloadKeyEx
-        610  259 00094E40 NtUnlockFile
-        611  25A 00094E50 NtUnlockVirtualMemory
-        612  25B 00093610 NtUnmapViewOfSection
-        613  25C 00094E60 NtUnmapViewOfSectionEx
-        614  25D 00094E70 NtUnsubscribeWnfStateChange
-        615  25E 00094E80 NtUpdateWnfStateData
-        616  25F 00094E90 NtVdmControl
-        617  260 00094EA0 NtWaitForAlertByThreadId
-        618  261 00094EB0 NtWaitForDebugEvent
-        619  262 00094EC0 NtWaitForKeyedEvent
-        620  263 00093920 NtWaitForMultipleObjects
-        621  264 00093510 NtWaitForMultipleObjects32
-        622  265 000933B0 NtWaitForSingleObject
-        623  266 00094ED0 NtWaitForWorkViaWorkerFactory
-        624  267 00094EE0 NtWaitHighEventPair
-        625  268 00094EF0 NtWaitLowEventPair
-        626  269 00093380 NtWorkerFactoryWorkerReady
-        627  26A 000933F0 NtWriteFile
-        628  26B 00093520 NtWriteFileGather
-        629  26C 000938E0 NtWriteRequestData
-        630  26D 00093710 NtWriteVirtualMemory
-        631  26E 000937D0 NtYieldExecution
-        632  26F 00093060 NtdllDefWindowProc_A
-        633  270 00093070 NtdllDefWindowProc_W
-        634  271 00093120 NtdllDialogWndProc_A
-        635  272 00093130 NtdllDialogWndProc_W
-        636  273 000CE430 PfxFindPrefix
-        637  274 000CE510 PfxInitialize
-        638  275 000CE530 PfxInsertPrefix
-        639  276 000CE650 PfxRemovePrefix
-        640  277 00058B60 PssNtCaptureSnapshot
-        641  278 000833D0 PssNtDuplicateSnapshot
-        642  279 000F6620 PssNtFreeRemoteSnapshot
-        643  27A 000593C0 PssNtFreeSnapshot
-        644  27B 00083440 PssNtFreeWalkMarker
-        645  27C 00081EA0 PssNtQuerySnapshot
-        646  27D 00059530 PssNtValidateDescriptor
-        647  27E 000817F0 PssNtWalkSnapshot
-        648  27F 0007DED0 RtlAbortRXact
-        649  280 00063EB0 RtlAbsoluteToSelfRelativeSD
-        650  281 00038170 RtlAcquirePebLock
-        651  282 0006E1E0 RtlAcquirePrivilege
-        652  283 0006C4E0 RtlAcquireReleaseSRWLockExclusive
-        653  284 000618F0 RtlAcquireResourceExclusive
-        654  285 000617A0 RtlAcquireResourceShared
-        655  286 0002A1D0 RtlAcquireSRWLockExclusive
-        656  287 00030590 RtlAcquireSRWLockShared
-        657  288 000532D0 RtlActivateActivationContext
-        658  289 00053320 RtlActivateActivationContextEx
-        659  28A 00021A70 RtlActivateActivationContextUnsafeFast
-        660  28B 0001FAC0 RtlAddAccessAllowedAce
-        661  28C 00070BA0 RtlAddAccessAllowedAceEx
-        662  28D 00073900 RtlAddAccessAllowedObjectAce
-        663  28E 00078EC0 RtlAddAccessDeniedAce
-        664  28F 00078940 RtlAddAccessDeniedAceEx
-        665  290 00073850 RtlAddAccessDeniedObjectAce
-        666  291 00066920 RtlAddAce
-        667  292 00075B40 RtlAddActionToRXact
-        668  293 00051DA0 RtlAddAtomToAtomTable
-        669  294 00075BC0 RtlAddAttributeActionToRXact
-        670  295 00078360 RtlAddAuditAccessAce
-        671  296 00077340 RtlAddAuditAccessAceEx
-        672  297 000738A0 RtlAddAuditAccessObjectAce
-        673  298 000D0500 RtlAddCompoundAce
-        674  299 000723F0 RtlAddFunctionTable
-        675  29A 00062E80 RtlAddGrowableFunctionTable
-        676  29B 000D1E70 RtlAddIntegrityLabelToBoundaryDescriptor
-        677  29C 0004AA90 RtlAddMandatoryAce
-        678  29D 00080750 RtlAddProcessTrustLabelAce
-        679  29E 0003E5E0 RtlAddRefActivationContext
-        680  29F 000759D0 RtlAddRefMemoryStream
-        681  2A0 000D0670 RtlAddResourceAttributeAce
-        682  2A1 00052A80 RtlAddSIDToBoundaryDescriptor
-        683  2A2 000D09D0 RtlAddScopedPolicyIDAce
-        684  2A3 00083610 RtlAddVectoredContinueHandler
-        685  2A4 00066CB0 RtlAddVectoredExceptionHandler
-        686  2A5 00017410 RtlAddressInSectionTable
-        687  2A6 0006F080 RtlAdjustPrivilege
-        688  2A7 0006C960 RtlAllocateActivationContextStack
-        689  2A8 0004EFA0 RtlAllocateAndInitializeSid
-        690  2A9 000CE700 RtlAllocateAndInitializeSidEx
-        691  2AA 00052430 RtlAllocateHandle
-        692  2AB 0002EAB0 RtlAllocateHeap
-        693  2AC 000FD010 RtlAllocateMemoryBlockLookaside
-        694  2AD 000FD0F0 RtlAllocateMemoryZone
-        695  2AE 00076DD0 RtlAllocateWnfSerializationGroup
-        696  2AF 00023800 RtlAnsiCharToUnicodeChar
-        697  2B0 000D2500 RtlAnsiStringToUnicodeSize
-        698  2B1 00023710 RtlAnsiStringToUnicodeString
-        699  2B2 000D2560 RtlAppendAsciizToString
-        700  2B3 000BB960 RtlAppendPathElement
-        701  2B4 000D25D0 RtlAppendStringToString
-        702  2B5 0003FE70 RtlAppendUnicodeStringToString
-        703  2B6 0001F7D0 RtlAppendUnicodeToString
-        704  2B7 000C6C60 RtlApplicationVerifierStop
-        705  2B8 0007DDF0 RtlApplyRXact
-        706  2B9 0007DEA0 RtlApplyRXactNoFlush
-        707  2BA 000BB470 RtlAppxIsFileOwnedByTrustedInstaller
-        708  2BB 00071710 RtlAreAllAccessesGranted
-        709  2BC 000CE7D0 RtlAreAnyAccessesGranted
-        710  2BD 00077690 RtlAreBitsClear
-        711  2BE 00063950 RtlAreBitsSet
-        712  2BF 000D3800 RtlAssert
-        713  2C0 000745B0 RtlAvlInsertNodeEx
-        714  2C1 00074210 RtlAvlRemoveNode
-        715  2C2 000D3930 RtlBarrier
-        716  2C3 000D3A70 RtlBarrierForDelete
-        717  2C4 000F5FC0 RtlCancelTimer
-        718  2C5 0005D5A0 RtlCanonicalizeDomainName
-        719  2C6 0004A510 RtlCapabilityCheck
-        720  2C7 000953F0 RtlCaptureContext
-        721  2C8 00012600 RtlCaptureStackBackTrace
-        722  2C9 0006DAB0 RtlCharToInteger
-        723  2CA 0006C9F0 RtlCheckForOrphanedCriticalSections
-        724  2CB 0000CED0 RtlCheckPortableOperatingSystem
-        725  2CC 0000D540 RtlCheckRegistryKey
-        726  2CD 000C2C70 RtlCheckSandboxedToken
-        727  2CE 0004A810 RtlCheckTokenCapability
-        728  2CF 000CE7E0 RtlCheckTokenMembership
-        729  2D0 0004AC70 RtlCheckTokenMembershipEx
-        730  2D1 00047350 RtlCleanUpTEBLangLists
-        731  2D2 00058740 RtlClearAllBits
-        732  2D3 000D26A0 RtlClearBit
-        733  2D4 00056360 RtlClearBits
-        734  2D5 000C14B0 RtlCloneMemoryStream
-        735  2D6 000C23C0 RtlCloneUserProcess
-        736  2D7 000D7C10 RtlCmDecodeMemIoResource
-        737  2D8 000D7C80 RtlCmEncodeMemIoResource
-        738  2D9 000C3580 RtlCommitDebugInfo
-        739  2DA 000C14B0 RtlCommitMemoryStream
-        740  2DB 000789C0 RtlCompactHeap
-        741  2DC 000DB7F0 RtlCompareAltitudes
-        742  2DD 00095950 RtlCompareMemory
-        743  2DE 000959D0 RtlCompareMemoryUlong
-        744  2DF 0007FA20 RtlCompareString
-        745  2E0 00035550 RtlCompareUnicodeString
-        746  2E1 00035590 RtlCompareUnicodeStrings
-        747  2E2 000C26A0 RtlCompleteProcessCloning
-        748  2E3 0005B050 RtlCompressBuffer
-        749  2E4 0005D1D0 RtlComputeCrc32
-        750  2E5 000CA9B0 RtlComputeImportTableHash
-        751  2E6 000C1150 RtlComputePrivatizedDllName_U
-        752  2E7 000804F0 RtlConnectToSm
-        753  2E8 00071720 RtlConsoleMultiByteToUnicodeN
-        754  2E9 00074AA0 RtlContractHashTable
-        755  2EA 000455C0 RtlConvertDeviceFamilyInfoToString
-        756  2EB 00075A50 RtlConvertExclusiveToShared
-        757  2EC 000D4710 RtlConvertLCIDToString
-        758  2ED 000D0430 RtlConvertSRWLockExclusiveToShared
-        759  2EE 00061890 RtlConvertSharedToExclusive
-        760  2EF 0001FAF0 RtlConvertSidToUnicodeString
-        761  2F0 000C2FD0 RtlConvertToAutoInheritSecurityObject
-        762  2F1 000D26B0 RtlCopyBitMap
-        763  2F2 00066E30 RtlCopyContext
-        764  2F3 000DBC70 RtlCopyExtendedContext
-        765  2F4 0006C9E0 RtlCopyLuid
-        766  2F5 000CE800 RtlCopyLuidAndAttributesArray
-        767  2F6 00076F60 RtlCopyMappedMemory
-        768  2F7 00097C40 RtlCopyMemory
-        769  2F8 00095A00 RtlCopyMemoryNonTemporal
-        770  2F9 000C14B0 RtlCopyMemoryStreamTo
-        771  2FA 000C14B0 RtlCopyOutOfProcessMemoryStreamTo
-        772  2FB 00063C40 RtlCopySecurityDescriptor
-        773  2FC 0004E670 RtlCopySid
-        774  2FD 000CE830 RtlCopySidAndAttributesArray
-        775  2FE 00077640 RtlCopyString
-        776  2FF 0001FA40 RtlCopyUnicodeString
-        777  300 000DC3E0 RtlCrc32
-        778  301 000DC400 RtlCrc64
-        779  302 0004C940 RtlCreateAcl
-        780  303 00056410 RtlCreateActivationContext
-        781  304 0007FC10 RtlCreateAndSetSD
-        782  305 000789B0 RtlCreateAtomTable
-        783  306 000DC8C0 RtlCreateBootStatusDataFile
-        784  307 00076A30 RtlCreateBoundaryDescriptor
-        785  308 00045F30 RtlCreateEnvironment
-        786  309 00046570 RtlCreateEnvironmentEx
-        787  30A 00065460 RtlCreateHashTable
-        788  30B 000DBB90 RtlCreateHashTableEx
-        789  30C 00005330 RtlCreateHeap
-        790  30D 00072720 RtlCreateMemoryBlockLookaside
-        791  30E 000728F0 RtlCreateMemoryZone
-        792  30F 000C27B0 RtlCreateProcessParameters
-        793  310 00045F50 RtlCreateProcessParametersEx
-        794  311 000C15C0 RtlCreateProcessReflection
-        795  312 00052C80 RtlCreateQueryDebugBuffer
-        796  313 000D4050 RtlCreateRegistryKey
-        797  314 0004E5C0 RtlCreateSecurityDescriptor
-        798  315 0004EE80 RtlCreateServiceSid
-        799  316 0007F270 RtlCreateSystemVolumeInformationFolder
-        800  317 00003610 RtlCreateTagHeap
-        801  318 0007C410 RtlCreateTimer
-        802  319 0007A9C0 RtlCreateTimerQueue
-        803  31A 000DDC20 RtlCreateUmsCompletionList
-        804  31B 000DDD40 RtlCreateUmsThreadContext
-        805  31C 00020B50 RtlCreateUnicodeString
-        806  31D 00020C20 RtlCreateUnicodeStringFromAsciiz
-        807  31E 0007FF60 RtlCreateUserProcess
-        808  31F 000C2FE0 RtlCreateUserSecurityObject
-        809  320 00001780 RtlCreateUserStack
-        810  321 000760F0 RtlCreateUserThread
-        811  322 00052A90 RtlCreateVirtualAccountSid
-        812  323 0001EEE0 RtlCultureNameToLCID
-        813  324 000CD1A0 RtlCustomCPToUnicodeN
-        814  325 0005CB50 RtlCutoverTimeToSystemTime
-        815  326 000C3590 RtlDeCommitDebugInfo
-        816  327 000C2820 RtlDeNormalizeProcessParams
-        817  328 00063700 RtlDeactivateActivationContext
-        818  329 00023B70 RtlDeactivateActivationContextUnsafeFast
-        819  32A 000756F0 RtlDebugPrintTimes
-        820  32B 00065F20 RtlDecodePointer
-        821  32C 000C74B0 RtlDecodeRemotePointer
-        822  32D 000777E0 RtlDecodeSystemPointer
-        823  32E 0005A4C0 RtlDecompressBuffer
-        824  32F 0005A560 RtlDecompressBufferEx
-        825  330 000DB9F0 RtlDecompressFragment
-        826  331 00050950 RtlDefaultNpAcl
-        827  332 00061280 RtlDelete
-        828  333 0006EFA0 RtlDeleteAce
-        829  334 00051CA0 RtlDeleteAtomFromAtomTable
-        830  335 000D3BC0 RtlDeleteBarrier
-        831  336 00029F80 RtlDeleteBoundaryDescriptor
-        832  337 000081B0 RtlDeleteCriticalSection
-        833  338 00060D50 RtlDeleteElementGenericTable
-        834  339 000604B0 RtlDeleteElementGenericTableAvl
-        835  33A 00060750 RtlDeleteElementGenericTableAvlEx
-        836  33B 000701E0 RtlDeleteFunctionTable
-        837  33C 000706B0 RtlDeleteGrowableFunctionTable
-        838  33D 00077D20 RtlDeleteHashTable
-        839  33E 00061320 RtlDeleteNoSplay
-        840  33F 00081660 RtlDeleteRegistryValue
-        841  340 00008160 RtlDeleteResource
-        842  341 000705B0 RtlDeleteSecurityObject
-        843  342 0007C2C0 RtlDeleteTimer
-        844  343 000F5FD0 RtlDeleteTimerQueue
-        845  344 0007A630 RtlDeleteTimerQueueEx
-        846  345 000DDE50 RtlDeleteUmsCompletionList
-        847  346 000DDEB0 RtlDeleteUmsThreadContext
-        848  347 000DDF10 RtlDequeueUmsCompletionListItems
-        849  348 000DE880 RtlDeregisterSecureMemoryCacheCallback
-        850  349 0007A620 RtlDeregisterWait
-        851  34A 0007B3C0 RtlDeregisterWaitEx
-        852  34B 00050D00 RtlDeriveCapabilitySidsFromName
-        853  34C 000D1C10 RtlDestroyAtomTable
-        854  34D 00046550 RtlDestroyEnvironment
-        855  34E 00078E30 RtlDestroyHandleTable
-        856  34F 00004920 RtlDestroyHeap
-        857  350 00078870 RtlDestroyMemoryBlockLookaside
-        858  351 000788D0 RtlDestroyMemoryZone
-        859  352 00074990 RtlDestroyProcessParameters
-        860  353 00069220 RtlDestroyQueryDebugBuffer
-        861  354 00044990 RtlDetectHeapLeaks
-        862  355 00057720 RtlDetermineDosPathNameType_U
-        863  356 000BB660 RtlDisableThreadProfiling
-        864  357 00038910 RtlDllShutdownInProgress
-        865  358 0006CF30 RtlDnsHostNameToComputerName
-        866  359 00079060 RtlDoesFileExists_U
-        867  35A 00024620 RtlDosApplyFileIsolationRedirection_Ustr
-        868  35B 0006DB60 RtlDosPathNameToNtPathName_U
-        869  35C 0001BFF0 RtlDosPathNameToNtPathName_U_WithStatus
-        870  35D 0001BD70 RtlDosPathNameToRelativeNtPathName_U
-        871  35E 00025870 RtlDosPathNameToRelativeNtPathName_U_WithStatus
-        872  35F 00057510 RtlDosSearchPath_U
-        873  360 0005F890 RtlDosSearchPath_Ustr
-        874  361 000D2040 RtlDowncaseUnicodeChar
-        875  362 0006A620 RtlDowncaseUnicodeString
-        876  363 000C1F00 RtlDumpResource
-        877  364 0006B800 RtlDuplicateUnicodeString
-        878  365 000D1CF0 RtlEmptyAtomTable
-        879  366 000C1F50 RtlEnableEarlyCriticalSectionEventCreation
-        880  367 000BB6D0 RtlEnableThreadProfiling
-        881  368 00066DE0 RtlEncodePointer
-        882  369 000C7520 RtlEncodeRemotePointer
-        883  36A 00077D00 RtlEncodeSystemPointer
-        884  36B 00073640 RtlEndEnumerationHashTable
-        885  36C 000756F0 RtlEndStrongEnumerationHashTable
-        886  36D 000DBBA0 RtlEndWeakEnumerationHashTable
-        887  36E 00034F30 RtlEnterCriticalSection
-        888  36F 000DDFA0 RtlEnterUmsSchedulingMode
-        889  370 000D8080 RtlEnumProcessHeaps
-        890  371 00065360 RtlEnumerateEntryHashTable
-        891  372 00060CC0 RtlEnumerateGenericTable
-        892  373 00062270 RtlEnumerateGenericTableAvl
-        893  374 000DE620 RtlEnumerateGenericTableLikeADirectory
-        894  375 00061720 RtlEnumerateGenericTableWithoutSplaying
-        895  376 00062290 RtlEnumerateGenericTableWithoutSplayingAvl
-        896  377 0005D4E0 RtlEqualComputerName
-        897  378 0005D520 RtlEqualDomainName
-        898  379 000CE8F0 RtlEqualLuid
-        899  37A 0004D4E0 RtlEqualPrefixSid
-        900  37B 0004A430 RtlEqualSid
-        901  37C 00064E70 RtlEqualString
-        902  37D 00023CC0 RtlEqualUnicodeString
-        903  37E 000790C0 RtlEqualWnfChangeStamps
-        904  37F 00083480 RtlEraseUnicodeString
-        905  380 000DF690 RtlEthernetAddressToStringA
-        906  381 000DF8F0 RtlEthernetAddressToStringW
-        907  382 000DF960 RtlEthernetStringToAddressA
-        908  383 000DFAB0 RtlEthernetStringToAddressW
-        909  384 000DE080 RtlExecuteUmsThread
-        910  385 000442C0 RtlExitUserProcess
-        911  386 00009FA0 RtlExitUserThread
-        912  387 00038310 RtlExpandEnvironmentStrings
-        913  388 0000F480 RtlExpandEnvironmentStrings_U
-        914  389 00064FA0 RtlExpandHashTable
-        915  38A 000D1E80 RtlExtendMemoryBlockLookaside
-        916  38B 000D1EF0 RtlExtendMemoryZone
-        917  38C 000D28B0 RtlExtractBitMap
-        918  38D 00095B20 RtlFillMemory
-        919  38E 000756F0 RtlFinalReleaseOutOfProcessMemoryStream
-        920  38F 0004D7F0 RtlFindAceByType
-        921  390 000240F0 RtlFindActivationContextSectionGuid
-        922  391 00024ED0 RtlFindActivationContextSectionString
-        923  392 00026DA0 RtlFindCharInUnicodeString
-        924  393 00001010 RtlFindClearBits
-        925  394 00055DD0 RtlFindClearBitsAndSet
-        926  395 000D2A50 RtlFindClearRuns
-        927  396 000D7D70 RtlFindClosestEncodableLength
-        928  397 00059F40 RtlFindLastBackwardRunClear
-        929  398 00078220 RtlFindLeastSignificantBit
-        930  399 000D2D10 RtlFindLongestRunClear
-        931  39A 000655B0 RtlFindMessage
-        932  39B 00078340 RtlFindMostSignificantBit
-        933  39C 00003180 RtlFindNextForwardRunClear
-        934  39D 00081040 RtlFindSetBits
-        935  39E 000D2D50 RtlFindSetBitsAndClear
-        936  39F 000D20A0 RtlFindUnicodeSubstring
-        937  3A0 00094FC0 RtlFirstEntrySList
-        938  3A1 0001FF30 RtlFirstFreeAce
-        939  3A2 00055BF0 RtlFlsAlloc
-        940  3A3 00056230 RtlFlsFree
-        941  3A4 000094D0 RtlFlushHeaps
-        942  3A5 000DE940 RtlFlushSecureMemoryCache
-        943  3A6 0001F8D0 RtlFormatCurrentUserKeyPath
-        944  3A7 000DFBF0 RtlFormatMessage
-        945  3A8 00010330 RtlFormatMessageEx
-        946  3A9 00063620 RtlFreeActivationContextStack
-        947  3AA 00027180 RtlFreeAnsiString
-        948  3AB 00051C60 RtlFreeHandle
-        949  3AC 0002A900 RtlFreeHeap
-        950  3AD 000FD150 RtlFreeMemoryBlockLookaside
-        951  3AE 00076E70 RtlFreeOemString
-        952  3AF 0006D900 RtlFreeSid
-        953  3B0 000635E0 RtlFreeThreadActivationContextStack
-        954  3B1 00027180 RtlFreeUnicodeString
-        955  3B2 00002EB0 RtlFreeUserStack
-        956  3B3 000648E0 RtlGUIDFromString
-        957  3B4 000DFDF0 RtlGenerate8dot3Name
-        958  3B5 0006BB40 RtlGetAce
-        959  3B6 0003DA60 RtlGetActiveActivationContext
-        960  3B7 0003EB80 RtlGetAppContainerNamedObjectPath
-        961  3B8 000030B0 RtlGetAppContainerParent
-        962  3B9 0004A790 RtlGetAppContainerSidType
-        963  3BA 000D3CE0 RtlGetCallersAddress
-        964  3BB 00073720 RtlGetCompressionWorkSpaceSize
-        965  3BC 00070090 RtlGetControlSecurityDescriptor
-        966  3BD 00068600 RtlGetCriticalSectionRecursionCount
-        967  3BE 0006F630 RtlGetCurrentDirectory_U
-        968  3BF 0007EBA0 RtlGetCurrentPeb
-        969  3C0 00092F60 RtlGetCurrentProcessorNumber
-        970  3C1 00092F90 RtlGetCurrentProcessorNumberEx
-        971  3C2 00069F90 RtlGetCurrentTransaction
-        972  3C3 00061680 RtlGetCurrentUmsThread
-        973  3C4 0006C720 RtlGetDaclSecurityDescriptor
-        974  3C5 000456A0 RtlGetDeviceFamilyInfoEnum
-        975  3C6 00074AE0 RtlGetElementGenericTable
-        976  3C7 000DE750 RtlGetElementGenericTableAvl
-        977  3C8 000778B0 RtlGetEnabledExtendedFeatures
-        978  3C9 00076DF0 RtlGetExePath
-        979  3CA 000670B0 RtlGetExtendedContextLength
-        980  3CB 00077930 RtlGetExtendedFeaturesMask
-        981  3CC 000542E0 RtlGetFileMUIPath
-        982  3CD 000BC4E0 RtlGetFrame
-        983  3CE 00054A30 RtlGetFullPathName_U
-        984  3CF 0001BDA0 RtlGetFullPathName_UEx
-        985  3D0 0005FE20 RtlGetFullPathName_UstrEx
-        986  3D1 00079110 RtlGetFunctionTableListHead
-        987  3D2 000705E0 RtlGetGroupSecurityDescriptor
-        988  3D3 00052230 RtlGetIntegerAtom
-        989  3D4 000CE0A0 RtlGetInterruptTimePrecise
-        990  3D5 00078050 RtlGetLastNtStatus
-        991  3D6 00079040 RtlGetLastWin32Error
-        992  3D7 00061E70 RtlGetLengthWithoutLastFullDosOrNtPathElement
-        993  3D8 00062210 RtlGetLengthWithoutTrailingPathSeperators
-        994  3D9 00048C00 RtlGetLocaleFileMappingAddress
-        995  3DA 00077CF0 RtlGetLongestNtPathLength
-        996  3DB 000936D0 RtlGetNativeSystemInformation
-        997  3DC 00071470 RtlGetNextEntryHashTable
-        998  3DD 000DE220 RtlGetNextUmsListItem
-        999  3DE 000D4090 RtlGetNtGlobalFlags
-       1000  3DF 00042670 RtlGetNtProductType
-       1001  3E0 00074B80 RtlGetNtVersionNumbers
-       1002  3E1 0006F370 RtlGetOwnerSecurityDescriptor
-       1003  3E2 00049F00 RtlGetParentLocaleName
-       1004  3E3 0007EC00 RtlGetProcessHeaps
-       1005  3E4 000D4820 RtlGetProcessPreferredUILanguages
-       1006  3E5 00072990 RtlGetProductInfo
-       1007  3E6 0006EF40 RtlGetSaclSecurityDescriptor
-       1008  3E7 00075670 RtlGetSearchPath
-       1009  3E8 00075DA0 RtlGetSecurityDescriptorRMControl
-       1010  3E9 00078070 RtlGetSetBootStatusData
-       1011  3EA 0006BE50 RtlGetSystemPreferredUILanguages
-       1012  3EB 00059070 RtlGetSystemTimePrecise
-       1013  3EC 00072CC0 RtlGetThreadErrorMode
-       1014  3ED 000D4920 RtlGetThreadLangIdByIndex
-       1015  3EE 0001D130 RtlGetThreadPreferredUILanguages
-       1016  3EF 000D49F0 RtlGetUILanguageInfo
-       1017  3F0 000DE250 RtlGetUmsCompletionListEvent
-       1018  3F1 000BCCA0 RtlGetUnloadEventTrace
-       1019  3F2 00078F90 RtlGetUnloadEventTraceEx
-       1020  3F3 000578B0 RtlGetUserInfoHeap
-       1021  3F4 0006CBC0 RtlGetUserPreferredUILanguages
-       1022  3F5 00041EE0 RtlGetVersion
-       1023  3F6 000CAEC0 RtlGrowFunctionTable
-       1024  3F7 00026CA0 RtlHashUnicodeString
-       1025  3F8 000E0E80 RtlHeapTrkInitialize
-       1026  3F9 0006F260 RtlIdentifierAuthoritySid
-       1027  3FA 0005D4F0 RtlIdnToAscii
-       1028  3FB 000E2330 RtlIdnToNameprepUnicode
-       1029  3FC 0005E4D0 RtlIdnToUnicode
-       1030  3FD 00016860 RtlImageDirectoryEntryToData
-       1031  3FE 00016830 RtlImageNtHeader
-       1032  3FF 00015E10 RtlImageNtHeaderEx
-       1033  400 00017440 RtlImageRvaToSection
-       1034  401 000716A0 RtlImageRvaToVa
-       1035  402 0006E430 RtlImpersonateSelf
-       1036  403 0006E440 RtlImpersonateSelfEx
-       1037  404 0006A390 RtlInitAnsiString
-       1038  405 00020BE0 RtlInitAnsiStringEx
-       1039  406 000D3C10 RtlInitBarrier
-       1040  407 00077480 RtlInitCodePageTable
-       1041  408 00065170 RtlInitEnumerationHashTable
-       1042  409 000756F0 RtlInitMemoryStream
-       1043  40A 000CD410 RtlInitNlsTables
-       1044  40B 000756F0 RtlInitOutOfProcessMemoryStream
-       1045  40C 0006A390 RtlInitString
-       1046  40D 000D2630 RtlInitStringEx
-       1047  40E 000DBBB0 RtlInitStrongEnumerationHashTable
-       1048  40F 0001F140 RtlInitUnicodeString
-       1049  410 0001F880 RtlInitUnicodeStringEx
-       1050  411 000DBBF0 RtlInitWeakEnumerationHashTable
-       1051  412 000759D0 RtlInitializeAtomPackage
-       1052  413 0006C060 RtlInitializeBitMap
-       1053  414 00064CE0 RtlInitializeConditionVariable
-       1054  415 000E2370 RtlInitializeContext
-       1055  416 00060AC0 RtlInitializeCriticalSection
-       1056  417 000603B0 RtlInitializeCriticalSectionAndSpinCount
-       1057  418 00007900 RtlInitializeCriticalSectionEx
-       1058  419 00066F90 RtlInitializeExtendedContext
-       1059  41A 00073810 RtlInitializeGenericTable
-       1060  41B 00075D40 RtlInitializeGenericTableAvl
-       1061  41C 00072BB0 RtlInitializeHandleTable
-       1062  41D 00083790 RtlInitializeNtUserPfn
-       1063  41E 0007F0A0 RtlInitializeRXact
-       1064  41F 000076C0 RtlInitializeResource
-       1065  420 00065F80 RtlInitializeSListHead
-       1066  421 00064CE0 RtlInitializeSRWLock
-       1067  422 0004E850 RtlInitializeSid
-       1068  423 0004EE20 RtlInitializeSidEx
-       1069  424 00060DF0 RtlInsertElementGenericTable
-       1070  425 000604F0 RtlInsertElementGenericTableAvl
-       1071  426 00060E60 RtlInsertElementGenericTableFull
-       1072  427 00060560 RtlInsertElementGenericTableFullAvl
-       1073  428 000651E0 RtlInsertEntryHashTable
-       1074  429 00073E50 RtlInstallFunctionTableCallback
-       1075  42A 000D3D40 RtlInt64ToUnicodeString
-       1076  42B 000213F0 RtlIntegerToChar
-       1077  42C 000214F0 RtlIntegerToUnicodeString
-       1078  42D 0006E7A0 RtlInterlockedClearBitRun
-       1079  42E 00068430 RtlInterlockedFlushSList
-       1080  42F 00094FD0 RtlInterlockedPopEntrySList
-       1081  430 00060B50 RtlInterlockedPushEntrySList
-       1082  431 00095080 RtlInterlockedPushListSList
-       1083  432 000E2630 RtlInterlockedPushListSListEx
-       1084  433 000D3100 RtlInterlockedSetBitRun
-       1085  434 000D7E20 RtlIoDecodeMemIoResource
-       1086  435 000D7EC0 RtlIoEncodeMemIoResource
-       1087  436 000772C0 RtlIpv4AddressToStringA
-       1088  437 000DF700 RtlIpv4AddressToStringExA
-       1089  438 00071C40 RtlIpv4AddressToStringExW
-       1090  439 00071D10 RtlIpv4AddressToStringW
-       1091  43A 0006FCB0 RtlIpv4StringToAddressA
-       1092  43B 0006FC40 RtlIpv4StringToAddressExA
-       1093  43C 0005E180 RtlIpv4StringToAddressExW
-       1094  43D 0005E2C0 RtlIpv4StringToAddressW
-       1095  43E 0000FDD0 RtlIpv6AddressToStringA
-       1096  43F 000DF7C0 RtlIpv6AddressToStringExA
-       1097  440 0000F9F0 RtlIpv6AddressToStringExW
-       1098  441 0000FB40 RtlIpv6AddressToStringW
-       1099  442 00068090 RtlIpv6StringToAddressA
-       1100  443 00067FE0 RtlIpv6StringToAddressExA
-       1101  444 0005D7A0 RtlIpv6StringToAddressExW
-       1102  445 0005D920 RtlIpv6StringToAddressW
-       1103  446 000C9EB0 RtlIsActivationContextActive
-       1104  447 0004E6B0 RtlIsCapabilitySid
-       1105  448 000C1F80 RtlIsCriticalSectionLocked
-       1106  449 00040920 RtlIsCriticalSectionLockedByThread
-       1107  44A 000C28E0 RtlIsCurrentThreadAttachExempt
-       1108  44B 0006FF00 RtlIsDosDeviceName_U
-       1109  44C 00060D40 RtlIsGenericTableEmpty
-       1110  44D 000DE870 RtlIsGenericTableEmptyAvl
-       1111  44E 0004A170 RtlIsMultiSessionSku
-       1112  44F 000E2690 RtlIsNameInExpression
-       1113  450 000E0270 RtlIsNameLegalDOS8Dot3
-       1114  451 000E3F10 RtlIsNormalizedString
-       1115  452 00075AF0 RtlIsPackageSid
-       1116  453 00047B30 RtlIsParentOfChildAppContainer
-       1117  454 00071F20 RtlIsProcessorFeaturePresent
-       1118  455 0005A000 RtlIsTextUnicode
-       1119  456 00076D70 RtlIsThreadWithinLoaderCallout
-       1120  457 000CE910 RtlIsUntrustedObject
-       1121  458 00052370 RtlIsValidHandle
-       1122  459 00052330 RtlIsValidIndexHandle
-       1123  45A 000E0570 RtlIsValidLocaleName
-       1124  45B 0004E600 RtlIsValidProcessTrustLabelSid
-       1125  45C 00003020 RtlKnownExceptionFilter
-       1126  45D 0001EA10 RtlLCIDToCultureName
-       1127  45E 000D3DE0 RtlLargeIntegerToChar
-       1128  45F 0001F190 RtlLcidToLocaleName
-       1129  460 00034480 RtlLeaveCriticalSection
-       1130  461 0004F0B0 RtlLengthRequiredSid
-       1131  462 00066770 RtlLengthSecurityDescriptor
-       1132  463 00061700 RtlLengthSid
-       1133  464 0001F9E0 RtlLengthSidAsUnicodeString
-       1134  465 00066110 RtlLoadString
-       1135  466 000CE180 RtlLocalTimeToSystemTime
-       1136  467 0001F480 RtlLocaleNameToLcid
-       1137  468 000DBC90 RtlLocateExtendedFeature
-       1138  469 000756B0 RtlLocateLegacyContext
-       1139  46A 00078CF0 RtlLockBootStatusData
-       1140  46B 00077AD0 RtlLockCurrentThread
-       1141  46C 000271B0 RtlLockHeap
-       1142  46D 00074EE0 RtlLockMemoryBlockLookaside
-       1143  46E 000C14B0 RtlLockMemoryStreamRegion
-       1144  46F 00074F50 RtlLockMemoryZone
-       1145  470 000752B0 RtlLockModuleSection
-       1146  471 000E4780 RtlLogStackBackTrace
-       1147  472 00051FC0 RtlLookupAtomInAtomTable
-       1148  473 00060F80 RtlLookupElementGenericTable
-       1149  474 00060B60 RtlLookupElementGenericTableAvl
-       1150  475 000DE5D0 RtlLookupElementGenericTableFull
-       1151  476 00060470 RtlLookupElementGenericTableFullAvl
-       1152  477 00065270 RtlLookupEntryHashTable
-       1153  478 00014E40 RtlLookupFunctionEntry
-       1154  479 000CAFC0 RtlLookupFunctionTable
-       1155  47A 00063ED0 RtlMakeSelfRelativeSD
-       1156  47B 0004D5A0 RtlMapGenericMask
-       1157  47C 00079070 RtlMapSecurityErrorToNtStatus
-       1158  47D 00097C40 RtlMoveMemory
-       1159  47E 00068440 RtlMultiAppendUnicodeStringBuffer
-       1160  47F 00023880 RtlMultiByteToUnicodeN
-       1161  480 00077310 RtlMultiByteToUnicodeSize
-       1162  481 000D82F0 RtlMultipleAllocateHeap
-       1163  482 000D8370 RtlMultipleFreeHeap
-       1164  483 000C3060 RtlNewInstanceSecurityObject
-       1165  484 000C3170 RtlNewSecurityGrantedAccess
-       1166  485 00047BE0 RtlNewSecurityObject
-       1167  486 0004AC00 RtlNewSecurityObjectEx
-       1168  487 00048A00 RtlNewSecurityObjectWithMultipleInheritance
-       1169  488 000802F0 RtlNormalizeProcessParams
-       1170  489 0005EC40 RtlNormalizeString
-       1171  48A 000BBBC0 RtlNtPathNameToDosPathName
-       1172  48B 0000F0C0 RtlNtStatusToDosError
-       1173  48C 0006DB90 RtlNtStatusToDosErrorNoTeb
-       1174  48D 0010CB20 RtlNtdllName
-       1175  48E 00077680 RtlNumberGenericTableElements
-       1176  48F 00077040 RtlNumberGenericTableElementsAvl
-       1177  490 000D31C0 RtlNumberOfClearBits
-       1178  491 000D31E0 RtlNumberOfClearBitsInRange
-       1179  492 000D3210 RtlNumberOfSetBits
-       1180  493 000D33C0 RtlNumberOfSetBitsInRange
-       1181  494 00078DD0 RtlNumberOfSetBitsUlongPtr
-       1182  495 000D2500 RtlOemStringToUnicodeSize
-       1183  496 0006D030 RtlOemStringToUnicodeString
-       1184  497 0006D120 RtlOemToUnicodeN
-       1185  498 00049900 RtlOpenCurrentUser
-       1186  499 000E51D0 RtlOsDeploymentState
-       1187  49A 0007ED60 RtlOwnerAcesPresent
-       1188  49B 00018580 RtlPcToFileHeader
-       1189  49C 000D1DB0 RtlPinAtomInAtomTable
-       1190  49D 00063930 RtlPopFrame
-       1191  49E 00064DE0 RtlPrefixString
-       1192  49F 00062130 RtlPrefixUnicodeString
-       1193  4A0 000C2920 RtlPrepareForProcessCloning
-       1194  4A1 00044810 RtlProcessFlsData
-       1195  4A2 00005E30 RtlProtectHeap
-       1196  4A3 00072E70 RtlPublishWnfStateData
-       1197  4A4 00063340 RtlPushFrame
-       1198  4A5 00071510 RtlQueryActivationContextApplicationSettings
-       1199  4A6 000527A0 RtlQueryAtomInAtomTable
-       1200  4A7 000C1FA0 RtlQueryCriticalSectionOwner
-       1201  4A8 00064C70 RtlQueryDepthSList
-       1202  4A9 000D40B0 RtlQueryDynamicTimeZoneInformation
-       1203  4AA 000726E0 RtlQueryElevationFlags
-       1204  4AB 00035150 RtlQueryEnvironmentVariable
-       1205  4AC 00046840 RtlQueryEnvironmentVariable_U
-       1206  4AD 00078680 RtlQueryHeapInformation
-       1207  4AE 0006FBB0 RtlQueryInformationAcl
-       1208  4AF 0003DF30 RtlQueryInformationActivationContext
-       1209  4B0 00074B50 RtlQueryInformationActiveActivationContext
-       1210  4B1 000C14B0 RtlQueryInterfaceMemoryStream
-       1211  4B2 000CC1F0 RtlQueryModuleInformation
-       1212  4B3 00064510 RtlQueryPackageClaims
-       1213  4B4 00064450 RtlQueryPackageIdentity
-       1214  4B5 000644A0 RtlQueryPackageIdentityEx
-       1215  4B6 00059130 RtlQueryPerformanceCounter
-       1216  4B7 00065FB0 RtlQueryPerformanceFrequency
-       1217  4B8 000C35A0 RtlQueryProcessBackTraceInformation
-       1218  4B9 00068620 RtlQueryProcessDebugInformation
-       1219  4BA 000C3730 RtlQueryProcessHeapInformation
-       1220  4BB 000C3B10 RtlQueryProcessLockInformation
-       1221  4BC 00078970 RtlQueryProtectedPolicy
-       1222  4BD 000D40C0 RtlQueryRegistryValues
-       1223  4BE 0000D730 RtlQueryRegistryValuesEx
-       1224  4BF 00004FE0 RtlQueryResourcePolicy
-       1225  4C0 000C32B0 RtlQuerySecurityObject
-       1226  4C1 000D83E0 RtlQueryTagHeap
-       1227  4C2 000BB7D0 RtlQueryThreadProfiling
-       1228  4C3 0000CF90 RtlQueryTimeZoneInformation
-       1229  4C4 000DE2B0 RtlQueryUmsThreadInformation
-       1230  4C5 000713A0 RtlQueryUnbiasedInterruptTime
-       1231  4C6 000E55F0 RtlQueryValidationRunlevel
-       1232  4C7 00078260 RtlQueryWnfMetaNotification
-       1233  4C8 0006D830 RtlQueryWnfStateData
-       1234  4C9 00076E90 RtlQueryWnfStateDataWithExplicitScope
-       1235  4CA 000C6E80 RtlQueueApcWow64Thread
-       1236  4CB 0007BFA0 RtlQueueWorkItem
-       1237  4CC 00011EA0 RtlRaiseException
-       1238  4CD 00092D30 RtlRaiseStatus
-       1239  4CE 0006E120 RtlRandom
-       1240  4CF 0006E120 RtlRandomEx
-       1241  4D0 000277C0 RtlRbInsertNodeEx
-       1242  4D1 00027E20 RtlRbRemoveNode
-       1243  4D2 0002D790 RtlReAllocateHeap
-       1244  4D3 000C14B0 RtlReadMemoryStream
-       1245  4D4 000C14B0 RtlReadOutOfProcessMemoryStream
-       1246  4D5 000BB800 RtlReadThreadProfilingData
-       1247  4D6 000DE550 RtlRealPredecessor
-       1248  4D7 00061530 RtlRealSuccessor
-       1249  4D8 00076C70 RtlRegisterForWnfMetaNotification
-       1250  4D9 000DE9B0 RtlRegisterSecureMemoryCacheCallback
-       1251  4DA 00072280 RtlRegisterThreadWithCsrss
-       1252  4DB 0007B9A0 RtlRegisterWait
-       1253  4DC 0003D740 RtlReleaseActivationContext
-       1254  4DD 000759D0 RtlReleaseMemoryStream
-       1255  4DE 00035800 RtlReleasePath
-       1256  4DF 00038010 RtlReleasePebLock
-       1257  4E0 000770B0 RtlReleasePrivilege
-       1258  4E1 000542A0 RtlReleaseRelativeName
-       1259  4E2 000619F0 RtlReleaseResource
-       1260  4E3 000331E0 RtlReleaseSRWLockExclusive
-       1261  4E4 000304B0 RtlReleaseSRWLockShared
-       1262  4E5 000E24A0 RtlRemoteCall
-       1263  4E6 00070D00 RtlRemoveEntryHashTable
-       1264  4E7 0007FAD0 RtlRemovePrivileges
-       1265  4E8 000C4B50 RtlRemoveVectoredContinueHandler
-       1266  4E9 000758E0 RtlRemoveVectoredExceptionHandler
-       1267  4EA 000CEAA0 RtlReplaceSidInSd
-       1268  4EB 000C75D0 RtlReportException
-       1269  4EC 00044600 RtlReportSilentProcessExit
-       1270  4ED 000C7CE0 RtlReportSqmEscalation
-       1271  4EE 000D1E90 RtlResetMemoryBlockLookaside
-       1272  4EF 000D1FF0 RtlResetMemoryZone
-       1273  4F0 00083970 RtlResetNtUserPfn
-       1274  4F1 000CD480 RtlResetRtlTranslations
-       1275  4F2 000714B0 RtlRestoreContext
-       1276  4F3 0000F090 RtlRestoreLastWin32Error
-       1277  4F4 000839F0 RtlRetrieveNtUserPfn
-       1278  4F5 000C14B0 RtlRevertMemoryStream
-       1279  4F6 00077FF0 RtlRunDecodeUnicodeString
-       1280  4F7 00077A30 RtlRunEncodeUnicodeString
-       1281  4F8 00034B00 RtlRunOnceBeginInitialize
-       1282  4F9 0006C850 RtlRunOnceComplete
-       1283  4FA 00034BE0 RtlRunOnceExecuteOnce
-       1284  4FB 00064CE0 RtlRunOnceInitialize
-       1285  4FC 000736A0 RtlSecondsSince1970ToTime
-       1286  4FD 000CE1F0 RtlSecondsSince1980ToTime
-       1287  4FE 000C14B0 RtlSeekMemoryStream
-       1288  4FF 00063CF0 RtlSelfRelativeToAbsoluteSD
-       1289  500 00063AE0 RtlSelfRelativeToAbsoluteSD2
-       1290  501 00080680 RtlSendMsgToSm
-       1291  502 00072340 RtlSetAllBits
-       1292  503 000CEDC0 RtlSetAttributesSecurityDescriptor
-       1293  504 00067FD0 RtlSetBit
-       1294  505 00056120 RtlSetBits
-       1295  506 00075AA0 RtlSetControlSecurityDescriptor
-       1296  507 00069F40 RtlSetCriticalSectionSpinCount
-       1297  508 0006F750 RtlSetCurrentDirectory_U
-       1298  509 000787A0 RtlSetCurrentEnvironment
-       1299  50A 000641F0 RtlSetCurrentTransaction
-       1300  50B 0004AEF0 RtlSetDaclSecurityDescriptor
-       1301  50C 000D40F0 RtlSetDynamicTimeZoneInformation
-       1302  50D 00074E10 RtlSetEnvironmentStrings
-       1303  50E 00046900 RtlSetEnvironmentVar
-       1304  50F 000468B0 RtlSetEnvironmentVariable
-       1305  510 00077900 RtlSetExtendedFeaturesMask
-       1306  511 0004E500 RtlSetGroupSecurityDescriptor
-       1307  512 0006F3B0 RtlSetHeapInformation
-       1308  513 000D0C50 RtlSetInformationAcl
-       1309  514 0007E110 RtlSetIoCompletionCallback
-       1310  515 0000F090 RtlSetLastWin32Error
-       1311  516 0000F070 RtlSetLastWin32ErrorAndNtStatusFromNtStatus
-       1312  517 000C14B0 RtlSetMemoryStreamSize
-       1313  518 0004E560 RtlSetOwnerSecurityDescriptor
-       1314  519 000D4010 RtlSetPortableOperatingSystem
-       1315  51A 000C3DA0 RtlSetProcessDebugInformation
-       1316  51B 000815E0 RtlSetProcessIsCritical
-       1317  51C 0006ABB0 RtlSetProcessPreferredUILanguages
-       1318  51D 000E5310 RtlSetProtectedPolicy
-       1319  51E 0006E850 RtlSetSaclSecurityDescriptor
-       1320  51F 000598A0 RtlSetSearchPathMode
-       1321  520 00078240 RtlSetSecurityDescriptorRMControl
-       1322  521 00047BB0 RtlSetSecurityObject
-       1323  522 00047500 RtlSetSecurityObjectEx
-       1324  523 00045EC0 RtlSetThreadErrorMode
-       1325  524 00080310 RtlSetThreadIsCritical
-       1326  525 00076D90 RtlSetThreadPoolStartFunc
-       1327  526 0001C020 RtlSetThreadPreferredUILanguages
-       1328  527 0003C080 RtlSetThreadSubProcessTag
-       1329  528 000D4100 RtlSetTimeZoneInformation
-       1330  529 000F5FE0 RtlSetTimer
-       1331  52A 000DE360 RtlSetUmsThreadInformation
-       1332  52B 00066DC0 RtlSetUnhandledExceptionFilter
-       1333  52C 000D8670 RtlSetUserFlagsHeap
-       1334  52D 00057C60 RtlSetUserValueHeap
-       1335  52E 0004A190 RtlSidDominates
-       1336  52F 0004E470 RtlSidDominatesForTrust
-       1337  530 000CEDF0 RtlSidEqualLevel
-       1338  531 0006A570 RtlSidHashInitialize
-       1339  532 0006A9A0 RtlSidHashLookup
-       1340  533 000CEE80 RtlSidIsHigherLevel
-       1341  534 0002A380 RtlSizeHeap
-       1342  535 00065CB0 RtlSleepConditionVariableCS
-       1343  536 00065B30 RtlSleepConditionVariableSRW
-       1344  537 00061070 RtlSplay
-       1345  538 00072B50 RtlStartRXact
-       1346  539 000C14B0 RtlStatMemoryStream
-       1347  53A 000649E0 RtlStringFromGUID
-       1348  53B 000649F0 RtlStringFromGUIDEx
-       1349  53C 000DBC00 RtlStronglyEnumerateEntryHashTable
-       1350  53D 00065750 RtlSubAuthorityCountSid
-       1351  53E 00064C50 RtlSubAuthoritySid
-       1352  53F 0000A870 RtlSubscribeWnfStateChangeNotification
-       1353  540 00061500 RtlSubtreePredecessor
-       1354  541 000DE5A0 RtlSubtreeSuccessor
-       1355  542 00042010 RtlSwitchedVVI
-       1356  543 00071400 RtlSystemTimeToLocalTime
-       1357  544 00077400 RtlTestAndPublishWnfStateData
-       1358  545 000D3640 RtlTestBit
-       1359  546 000816D0 RtlTestProtectedAccess
-       1360  547 0005CCF0 RtlTimeFieldsToTime
-       1361  548 0006E560 RtlTimeToElapsedTimeFields
-       1362  549 0006E690 RtlTimeToSecondsSince1970
-       1363  54A 0006E650 RtlTimeToSecondsSince1980
-       1364  54B 0005CF00 RtlTimeToTimeFields
-       1365  54C 000E5A40 RtlTraceDatabaseAdd
-       1366  54D 000E5AC0 RtlTraceDatabaseCreate
-       1367  54E 000E5BF0 RtlTraceDatabaseDestroy
-       1368  54F 000E5C70 RtlTraceDatabaseEnumerate
-       1369  550 000E5D50 RtlTraceDatabaseFind
-       1370  551 000E5DD0 RtlTraceDatabaseLock
-       1371  552 000E5E00 RtlTraceDatabaseUnlock
-       1372  553 000E5E20 RtlTraceDatabaseValidate
-       1373  554 00008860 RtlTryAcquirePebLock
-       1374  555 0000BE80 RtlTryAcquireSRWLockExclusive
-       1375  556 00070830 RtlTryAcquireSRWLockShared
-       1376  557 000D0480 RtlTryConvertSRWLockSharedToExclusiveOrRelease
-       1377  558 00008880 RtlTryEnterCriticalSection
-       1378  559 0005C520 RtlUTF8ToUnicodeN
-       1379  55A 000DE3A0 RtlUmsThreadYield
-       1380  55B 000E3FF0 RtlUnhandledExceptionFilter
-       1381  55C 000E4010 RtlUnhandledExceptionFilter2
-       1382  55D 000D2530 RtlUnicodeStringToAnsiSize
-       1383  55E 00023E30 RtlUnicodeStringToAnsiString
-       1384  55F 000D2140 RtlUnicodeStringToCountedOemString
-       1385  560 0006A3D0 RtlUnicodeStringToInteger
-       1386  561 000D2530 RtlUnicodeStringToOemSize
-       1387  562 000630A0 RtlUnicodeStringToOemString
-       1388  563 000CD650 RtlUnicodeToCustomCPN
-       1389  564 00023F10 RtlUnicodeToMultiByteN
-       1390  565 0006FF30 RtlUnicodeToMultiByteSize
-       1391  566 00063170 RtlUnicodeToOemN
-       1392  567 00059980 RtlUnicodeToUTF8N
-       1393  568 00071ED0 RtlUniform
-       1394  569 00078EF0 RtlUnlockBootStatusData
-       1395  56A 00077B90 RtlUnlockCurrentThread
-       1396  56B 000330E0 RtlUnlockHeap
-       1397  56C 00075090 RtlUnlockMemoryBlockLookaside
-       1398  56D 000C14B0 RtlUnlockMemoryStreamRegion
-       1399  56E 000750F0 RtlUnlockMemoryZone
-       1400  56F 000753B0 RtlUnlockModuleSection
-       1401  570 0000B080 RtlUnsubscribeWnfNotificationWaitForCompletion
-       1402  571 0000AEE0 RtlUnsubscribeWnfNotificationWithCompletionCallback
-       1403  572 0000B0E0 RtlUnsubscribeWnfStateChangeNotification
-       1404  573 000E5180 RtlUnwind
-       1405  574 00014200 RtlUnwindEx
-       1406  575 000507F0 RtlUpcaseUnicodeChar
-       1407  576 00050850 RtlUpcaseUnicodeString
-       1408  577 000D2290 RtlUpcaseUnicodeStringToAnsiString
-       1409  578 000D23B0 RtlUpcaseUnicodeStringToCountedOemString
-       1410  579 0006CE30 RtlUpcaseUnicodeStringToOemString
-       1411  57A 000CD880 RtlUpcaseUnicodeToCustomCPN
-       1412  57B 0006F520 RtlUpcaseUnicodeToMultiByteN
-       1413  57C 0006D3A0 RtlUpcaseUnicodeToOemN
-       1414  57D 00044770 RtlUpdateClonedCriticalSection
-       1415  57E 00059670 RtlUpdateClonedSRWLock
-       1416  57F 0007A8D0 RtlUpdateTimer
-       1417  580 00064F10 RtlUpperChar
-       1418  581 000D2640 RtlUpperString
-       1419  582 00009F30 RtlUserThreadStart
-       1420  583 000200D0 RtlValidAcl
-       1421  584 000CBF10 RtlValidProcessProtection
-       1422  585 00069430 RtlValidRelativeSecurityDescriptor
-       1423  586 0001FF90 RtlValidSecurityDescriptor
-       1424  587 00020090 RtlValidSid
-       1425  588 000384A0 RtlValidateHeap
-       1426  589 000D87D0 RtlValidateProcessHeaps
-       1427  58A 0006B950 RtlValidateUnicodeString
-       1428  58B 00045350 RtlVerifyVersionInfo
-       1429  58C 00011740 RtlVirtualUnwind
-       1430  58D 00076B00 RtlWaitForWnfMetaNotification
-       1431  58E 00077FD0 RtlWaitOnAddress
-       1432  58F 00036540 RtlWakeAddressAll
-       1433  590 000E6170 RtlWakeAddressAllNoFence
-       1434  591 00003090 RtlWakeAddressSingle
-       1435  592 000E6180 RtlWakeAddressSingleNoFence
-       1436  593 00009A40 RtlWakeAllConditionVariable
-       1437  594 000634A0 RtlWakeConditionVariable
-       1438  595 000126A0 RtlWalkFrameChain
-       1439  596 000D8900 RtlWalkHeap
-       1440  597 000DBC60 RtlWeaklyEnumerateEntryHashTable
-       1441  598 00001C20 RtlWerpReportException
-       1442  599 000C8BD0 RtlWnfCompareChangeStamp
-       1443  59A 0000C5F0 RtlWnfDllUnloadCallback
-       1444  59B 000671B0 RtlWoW64GetCpuAreaInfo
-       1445  59C 00067130 RtlWoW64GetCurrentCpuArea
-       1446  59D 00078FC0 RtlWow64CallFunction64
-       1447  59E 00078FC0 RtlWow64EnableFsRedirection
-       1448  59F 00078FC0 RtlWow64EnableFsRedirectionEx
-       1449  5A0 000C6EA0 RtlWow64GetThreadContext
-       1450  5A1 000C6ED0 RtlWow64GetThreadSelectorEntry
-       1451  5A2 000C2A40 RtlWow64LogMessageInEventLogger
-       1452  5A3 000C7070 RtlWow64SetThreadContext
-       1453  5A4 000C7090 RtlWow64SuspendThread
-       1454  5A5 000C70A0 RtlWow64SuspendThreadEx
-       1455  5A6 000C14B0 RtlWriteMemoryStream
-       1456  5A7 0007EA40 RtlWriteRegistryValue
-       1457  5A8 000DCA80 RtlZeroHeap
-       1458  5A9 00095B50 RtlZeroMemory
-       1459  5AA 000C9BC0 RtlZombifyActivationContext
-       1460  5AB 00061DC0 RtlpApplyLengthFunction
-       1461  5AC 0000D1B0 RtlpCheckDynamicTimeZoneInformation
-       1462  5AD 000D5500 RtlpCleanupRegistryKeys
-       1463  5AE 000D0C90 RtlpConvertAbsoluteToRelativeSecurityAttribute
-       1464  5AF 000D5A20 RtlpConvertCultureNamesToLCIDs
-       1465  5B0 000D5C40 RtlpConvertLCIDsToCultureNames
-       1466  5B1 000D0FF0 RtlpConvertRelativeToAbsoluteSecurityAttribute
-       1467  5B2 0001DAD0 RtlpCreateProcessRegistryInfo
-       1468  5B3 00068550 RtlpEnsureBufferSize
-       1469  5B4 00095B71 RtlpExecuteUmsThread
-       1470  5B5 00147198 RtlpFreezeTimeBias
-       1471  5B6 000456B0 RtlpGetDeviceFamilyInfoEnum
-       1472  5B7 00074940 RtlpGetLCIDFromLangInfoNode
-       1473  5B8 00072DD0 RtlpGetNameFromLangInfoNode
-       1474  5B9 0001F6A0 RtlpGetSystemDefaultUILanguage
-       1475  5BA 000E6190 RtlpGetUserOrMachineUILanguage4NLS
-       1476  5BB 00048CA0 RtlpInitializeLangRegistryInfo
-       1477  5BC 00054F50 RtlpIsQualifiedLanguage
-       1478  5BD 00048A60 RtlpLoadMachineUIByPolicy
-       1479  5BE 000499E0 RtlpLoadUserUIByPolicy
-       1480  5BF 000025A0 RtlpMergeSecurityAttributeInformation
-       1481  5C0 00047980 RtlpMuiFreeLangRegistryInfo
-       1482  5C1 000E6FB0 RtlpMuiRegCreateRegistryInfo
-       1483  5C2 00048F20 RtlpMuiRegFreeRegistryInfo
-       1484  5C3 00048E30 RtlpMuiRegLoadRegistryInfo
-       1485  5C4 000C21A0 RtlpNotOwnerCriticalSection
-       1486  5C5 0007EB60 RtlpNtCreateKey
-       1487  5C6 000733D0 RtlpNtEnumerateSubKey
-       1488  5C7 000EA340 RtlpNtMakeTemporaryKey
-       1489  5C8 000735A0 RtlpNtOpenKey
-       1490  5C9 00071200 RtlpNtQueryValueKey
-       1491  5CA 0007EAE0 RtlpNtSetValueKey
-       1492  5CB 00048770 RtlpQueryDefaultUILanguage
-       1493  5CC 000C4160 RtlpQueryProcessDebugInformationFromWow64
-       1494  5CD 000E87D0 RtlpRefreshCachedUILanguage
-       1495  5CE 000D6730 RtlpSetInstallLanguage
-       1496  5CF 000D6E70 RtlpSetPreferredUILanguages
-       1497  5D0 000D6E70 RtlpSetUserPreferredUILanguages
-       1498  5D1 00095E96 RtlpUmsExecuteYieldThreadEnd
-       1499  5D2 00095DA3 RtlpUmsThreadYield
-       1500  5D3 000364F0 RtlpUnWaitCriticalSection
-       1501  5D4 00080A30 RtlpVerifyAndCommitUILanguageSettings
-       1502  5D5 000756F0 RtlpWaitForCriticalSection
-       1503  5D6 000D2500 RtlxAnsiStringToUnicodeSize
-       1504  5D7 000D2500 RtlxOemStringToUnicodeSize
-       1505  5D8 000D2530 RtlxUnicodeStringToAnsiSize
-       1506  5D9 000D2530 RtlxUnicodeStringToOemSize
-       1507  5DA 000F6320 SbExecuteProcedure
-       1508  5DB 00041A90 SbSelectProcedure
-       1509  5DC 000C81A0 ShipAssert
-       1510  5DD 000C82C0 ShipAssertGetBufferInfo
-       1511  5DE 000C82F0 ShipAssertMsgA
-       1512  5DF 000C82F0 ShipAssertMsgW
-       1513  5E0 0007A400 TpAllocAlpcCompletion
-       1514  5E1 0007AC20 TpAllocAlpcCompletionEx
-       1515  5E2 000734D0 TpAllocCleanupGroup
-       1516  5E3 0007AC50 TpAllocIoCompletion
-       1517  5E4 0007A430 TpAllocJobNotification
-       1518  5E5 0007B340 TpAllocPool
-       1519  5E6 0003C430 TpAllocTimer
-       1520  5E7 0007CBB0 TpAllocWait
-       1521  5E8 0003D920 TpAllocWork
-       1522  5E9 00079160 TpAlpcRegisterCompletionList
-       1523  5EA 00079120 TpAlpcUnregisterCompletionList
-       1524  5EB 000F59F0 TpCallbackDetectedUnrecoverableError
-       1525  5EC 00079230 TpCallbackIndependent
-       1526  5ED 00078F60 TpCallbackLeaveCriticalSectionOnCompletion
-       1527  5EE 0003BB00 TpCallbackMayRunLong
-       1528  5EF 000F5A20 TpCallbackReleaseMutexOnCompletion
-       1529  5F0 000F5A60 TpCallbackReleaseSemaphoreOnCompletion
-       1530  5F1 00061AF0 TpCallbackSendAlpcMessageOnCompletion
-       1531  5F2 00072B10 TpCallbackSendPendingAlpcMessage
-       1532  5F3 000782B0 TpCallbackSetEventOnCompletion
-       1533  5F4 000749C0 TpCallbackUnloadDllOnCompletion
-       1534  5F5 0006F300 TpCancelAsyncIoOperation
-       1535  5F6 00066710 TpCaptureCaller
-       1536  5F7 0000A000 TpCheckTerminateWorker
-       1537  5F8 000F5AA0 TpDbgDumpHeapUsage
-       1538  5F9 000756F0 TpDbgSetLogRoutine
-       1539  5FA 000782F0 TpDisablePoolCallbackChecks
-       1540  5FB 00074D90 TpDisassociateCallback
-       1541  5FC 0003CB90 TpIsTimerSet
-       1542  5FD 00027420 TpPostWork
-       1543  5FE 000F5690 TpQueryPoolStackInformation
-       1544  5FF 0007A7A0 TpReleaseAlpcCompletion
-       1545  600 000759E0 TpReleaseCleanupGroup
-       1546  601 0007D660 TpReleaseCleanupGroupMembers
-       1547  602 000725C0 TpReleaseIoCompletion
-       1548  603 0007A240 TpReleaseJobNotification
-       1549  604 00073AE0 TpReleasePool
-       1550  605 0003EAD0 TpReleaseTimer
-       1551  606 0007CEB0 TpReleaseWait
-       1552  607 0003C790 TpReleaseWork
-       1553  608 000F5700 TpSetDefaultPoolMaxThreads
-       1554  609 0007A040 TpSetDefaultPoolStackInformation
-       1555  60A 0007B270 TpSetPoolMaxThreads
-       1556  60B 000736D0 TpSetPoolMaxThreadsSoftLimit
-       1557  60C 00077520 TpSetPoolMinThreads
-       1558  60D 0007A160 TpSetPoolStackInformation
-       1559  60E 00078E60 TpSetPoolThreadBasePriority
-       1560  60F 0007B2E0 TpSetPoolWorkerThreadIdleTimeout
-       1561  610 0003CBD0 TpSetTimer
-       1562  611 0003CBE0 TpSetTimerEx
-       1563  612 0003C530 TpSetWait
-       1564  613 0003C5A0 TpSetWaitEx
-       1565  614 0007D460 TpSimpleTryPost
-       1566  615 0003C540 TpStartAsyncIoOperation
-       1567  616 0007C7B0 TpTimerOutstandingCallbackCount
-       1568  617 00065760 TpTrimPools
-       1569  618 0007A190 TpWaitForAlpcCompletion
-       1570  619 00076FD0 TpWaitForIoCompletion
-       1571  61A 0007A200 TpWaitForJobNotification
-       1572  61B 0007D140 TpWaitForTimer
-       1573  61C 0007D010 TpWaitForWait
-       1574  61D 0007D100 TpWaitForWork
-       1575  61E 000696D0 VerSetConditionMask
-       1576  61F 000C87D0 WerReportSQMEvent
-       1577  620 000756F0 WinSqmAddToAverageDWORD
-       1578  621 000756F0 WinSqmAddToStream
-       1579  622 000756F0 WinSqmAddToStreamEx
-       1580  623 000759D0 WinSqmCheckEscalationAddToStreamEx
-       1581  624 000759D0 WinSqmCheckEscalationSetDWORD
-       1582  625 000759D0 WinSqmCheckEscalationSetDWORD64
-       1583  626 000759D0 WinSqmCheckEscalationSetString
-       1584  627 00042FF0 WinSqmCommonDatapointDelete
-       1585  628 00042FF0 WinSqmCommonDatapointSetDWORD
-       1586  629 00042FF0 WinSqmCommonDatapointSetDWORD64
-       1587  62A 00042FF0 WinSqmCommonDatapointSetStreamEx
-       1588  62B 00042FF0 WinSqmCommonDatapointSetString
-       1589  62C 000756F0 WinSqmEndSession
-       1590  62D 000759D0 WinSqmEventEnabled
-       1591  62E 000759D0 WinSqmEventWrite
-       1592  62F 000759D0 WinSqmGetEscalationRuleStatus
-       1593  630 000C8BB0 WinSqmGetInstrumentationProperty
-       1594  631 000756F0 WinSqmIncrementDWORD
-       1595  632 000759D0 WinSqmIsOptedIn
-       1596  633 000759D0 WinSqmIsOptedInEx
-       1597  634 00042FF0 WinSqmIsSessionDisabled
-       1598  635 000756F0 WinSqmSetDWORD
-       1599  636 000756F0 WinSqmSetDWORD64
-       1600  637 00042FF0 WinSqmSetEscalationInfo
-       1601  638 000756F0 WinSqmSetIfMaxDWORD
-       1602  639 000756F0 WinSqmSetIfMinDWORD
-       1603  63A 000756F0 WinSqmSetString
-       1604  63B 00078FD0 WinSqmStartSession
-       1605  63C 00078FD0 WinSqmStartSessionForPartner
-       1606  63D 000759D0 WinSqmStartSqmOptinListener
-       1607  63E 00093390 ZwAcceptConnectPort
-       1608  63F 00093370 ZwAccessCheck
-       1609  640 00093600 ZwAccessCheckAndAuditAlarm
-       1610  641 000939A0 ZwAccessCheckByType
-       1611  642 00093900 ZwAccessCheckByTypeAndAuditAlarm
-       1612  643 000939B0 ZwAccessCheckByTypeResultList
-       1613  644 000939C0 ZwAccessCheckByTypeResultListAndAuditAlarm
-       1614  645 000939D0 ZwAccessCheckByTypeResultListAndAuditAlarmByHandle
-       1615  646 000937E0 ZwAddAtom
-       1616  647 000939E0 ZwAddAtomEx
-       1617  648 000939F0 ZwAddBootEntry
-       1618  649 00093A00 ZwAddDriverEntry
-       1619  64A 00093A10 ZwAdjustGroupsToken
-       1620  64B 00093780 ZwAdjustPrivilegesToken
-       1621  64C 00093A20 ZwAdjustTokenClaimsAndDeviceGroups
-       1622  64D 00093A30 ZwAlertResumeThread
-       1623  64E 00093A40 ZwAlertThread
-       1624  64F 00093A50 ZwAlertThreadByThreadId
-       1625  650 00093A60 ZwAllocateLocallyUniqueId
-       1626  651 00093A70 ZwAllocateReserveObject
-       1627  652 00093A80 ZwAllocateUserPhysicalPages
-       1628  653 00093A90 ZwAllocateUuids
-       1629  654 000934F0 ZwAllocateVirtualMemory
-       1630  655 00093AA0 ZwAlpcAcceptConnectPort
-       1631  656 00093AB0 ZwAlpcCancelMessage
-       1632  657 00093AC0 ZwAlpcConnectPort
-       1633  658 00093AD0 ZwAlpcConnectPortEx
-       1634  659 00093AE0 ZwAlpcCreatePort
-       1635  65A 00093AF0 ZwAlpcCreatePortSection
-       1636  65B 00093B00 ZwAlpcCreateResourceReserve
-       1637  65C 00093B10 ZwAlpcCreateSectionView
-       1638  65D 00093B20 ZwAlpcCreateSecurityContext
-       1639  65E 00093B30 ZwAlpcDeletePortSection
-       1640  65F 00093B40 ZwAlpcDeleteResourceReserve
-       1641  660 00093B50 ZwAlpcDeleteSectionView
-       1642  661 00093B60 ZwAlpcDeleteSecurityContext
-       1643  662 00093B70 ZwAlpcDisconnectPort
-       1644  663 00093B80 ZwAlpcImpersonateClientContainerOfPort
-       1645  664 00093B90 ZwAlpcImpersonateClientOfPort
-       1646  665 00093BA0 ZwAlpcOpenSenderProcess
-       1647  666 00093BB0 ZwAlpcOpenSenderThread
-       1648  667 00093BC0 ZwAlpcQueryInformation
-       1649  668 00093BD0 ZwAlpcQueryInformationMessage
-       1650  669 00093BE0 ZwAlpcRevokeSecurityContext
-       1651  66A 00093BF0 ZwAlpcSendWaitReceivePort
-       1652  66B 00093C00 ZwAlpcSetInformation
-       1653  66C 00093830 ZwApphelpCacheControl
-       1654  66D 00093C10 ZwAreMappedFilesTheSame
-       1655  66E 00093C20 ZwAssignProcessToJobObject
-       1656  66F 00093C30 ZwAssociateWaitCompletionPacket
-       1657  670 000933C0 ZwCallbackReturn
-       1658  671 00093940 ZwCancelIoFile
-       1659  672 00093C40 ZwCancelIoFileEx
-       1660  673 00093C50 ZwCancelSynchronousIoFile
-       1661  674 00093980 ZwCancelTimer
-       1662  675 00093C60 ZwCancelTimer2
-       1663  676 00093C70 ZwCancelWaitCompletionPacket
-       1664  677 00093750 ZwClearEvent
-       1665  678 00093460 ZwClose
-       1666  679 00093720 ZwCloseObjectAuditAlarm
-       1667  67A 00093C80 ZwCommitComplete
-       1668  67B 00093C90 ZwCommitEnlistment
-       1669  67C 00093CA0 ZwCommitTransaction
-       1670  67D 00093CB0 ZwCompactKeys
-       1671  67E 00093CC0 ZwCompareObjects
-       1672  67F 00093CD0 ZwCompareTokens
-       1673  680 00093CE0 ZwCompleteConnectPort
-       1674  681 00093CF0 ZwCompressKey
-       1675  682 00093D00 ZwConnectPort
-       1676  683 000937A0 ZwContinue
-       1677  684 00093D10 ZwCreateDebugObject
-       1678  685 00093D20 ZwCreateDirectoryObject
-       1679  686 00093D30 ZwCreateDirectoryObjectEx
-       1680  687 00093D40 ZwCreateEnlistment
-       1681  688 000937F0 ZwCreateEvent
-       1682  689 00093D50 ZwCreateEventPair
-       1683  68A 000938C0 ZwCreateFile
-       1684  68B 00093D60 ZwCreateIRTimer
-       1685  68C 00093D70 ZwCreateIoCompletion
-       1686  68D 00093D80 ZwCreateJobObject
-       1687  68E 00093D90 ZwCreateJobSet
-       1688  68F 00093540 ZwCreateKey
-       1689  690 00093DA0 ZwCreateKeyTransacted
-       1690  691 00093DB0 ZwCreateKeyedEvent
-       1691  692 00093DC0 ZwCreateLowBoxToken
-       1692  693 00093DD0 ZwCreateMailslotFile
-       1693  694 00093DE0 ZwCreateMutant
-       1694  695 00093DF0 ZwCreateNamedPipeFile
-       1695  696 00093E00 ZwCreatePagingFile
-       1696  697 00093E10 ZwCreatePartition
-       1697  698 00093E20 ZwCreatePort
-       1698  699 00093E30 ZwCreatePrivateNamespace
-       1699  69A 00093E40 ZwCreateProcess
-       1700  69B 00093840 ZwCreateProcessEx
-       1701  69C 00093E50 ZwCreateProfile
-       1702  69D 00093E60 ZwCreateProfileEx
-       1703  69E 00093E70 ZwCreateResourceManager
-       1704  69F 00093810 ZwCreateSection
-       1705  6A0 00093E80 ZwCreateSemaphore
-       1706  6A1 00093E90 ZwCreateSymbolicLinkObject
-       1707  6A2 00093850 ZwCreateThread
-       1708  6A3 00093EA0 ZwCreateThreadEx
-       1709  6A4 00093EB0 ZwCreateTimer
-       1710  6A5 00093EC0 ZwCreateTimer2
-       1711  6A6 00093ED0 ZwCreateToken
-       1712  6A7 00093EE0 ZwCreateTokenEx
-       1713  6A8 00093EF0 ZwCreateTransaction
-       1714  6A9 00093F00 ZwCreateTransactionManager
-       1715  6AA 00093F10 ZwCreateUserProcess
-       1716  6AB 00093F20 ZwCreateWaitCompletionPacket
-       1717  6AC 00093F30 ZwCreateWaitablePort
-       1718  6AD 00093F40 ZwCreateWnfStateName
-       1719  6AE 00093F50 ZwCreateWorkerFactory
-       1720  6AF 00093F60 ZwDebugActiveProcess
-       1721  6B0 00093F70 ZwDebugContinue
-       1722  6B1 000936B0 ZwDelayExecution
-       1723  6B2 00093F80 ZwDeleteAtom
-       1724  6B3 00093F90 ZwDeleteBootEntry
-       1725  6B4 00093FA0 ZwDeleteDriverEntry
-       1726  6B5 00093FB0 ZwDeleteFile
-       1727  6B6 00093FC0 ZwDeleteKey
-       1728  6B7 00093FD0 ZwDeleteObjectAuditAlarm
-       1729  6B8 00093FE0 ZwDeletePrivateNamespace
-       1730  6B9 00093FF0 ZwDeleteValueKey
-       1731  6BA 00094000 ZwDeleteWnfStateData
-       1732  6BB 00094010 ZwDeleteWnfStateName
-       1733  6BC 000933E0 ZwDeviceIoControlFile
-       1734  6BD 00094020 ZwDisableLastKnownGood
-       1735  6BE 00094030 ZwDisplayString
-       1736  6BF 00094040 ZwDrawText
-       1737  6C0 00093730 ZwDuplicateObject
-       1738  6C1 00093790 ZwDuplicateToken
-       1739  6C2 00094050 ZwEnableLastKnownGood
-       1740  6C3 00094060 ZwEnumerateBootEntries
-       1741  6C4 00094070 ZwEnumerateDriverEntries
-       1742  6C5 00093690 ZwEnumerateKey
-       1743  6C6 00094080 ZwEnumerateSystemEnvironmentValuesEx
-       1744  6C7 00094090 ZwEnumerateTransactionObject
-       1745  6C8 000934A0 ZwEnumerateValueKey
-       1746  6C9 000940A0 ZwExtendSection
-       1747  6CA 000940B0 ZwFilterBootOption
-       1748  6CB 000940C0 ZwFilterToken
-       1749  6CC 000940D0 ZwFilterTokenEx
-       1750  6CD 000934B0 ZwFindAtom
-       1751  6CE 00093820 ZwFlushBuffersFile
-       1752  6CF 000940E0 ZwFlushBuffersFileEx
-       1753  6D0 000940F0 ZwFlushInstallUILanguage
-       1754  6D1 00094100 ZwFlushInstructionCache
-       1755  6D2 00094110 ZwFlushKey
-       1756  6D3 00094120 ZwFlushProcessWriteBuffers
-       1757  6D4 00094130 ZwFlushVirtualMemory
-       1758  6D5 00094140 ZwFlushWriteBuffer
-       1759  6D6 00094150 ZwFreeUserPhysicalPages
-       1760  6D7 00093550 ZwFreeVirtualMemory
-       1761  6D8 00094160 ZwFreezeRegistry
-       1762  6D9 00094170 ZwFreezeTransactions
-       1763  6DA 00093700 ZwFsControlFile
-       1764  6DB 00094180 ZwGetCachedSigningLevel
-       1765  6DC 00094190 ZwGetCompleteWnfStateSubscription
-       1766  6DD 000941A0 ZwGetContextThread
-       1767  6DE 000941B0 ZwGetCurrentProcessorNumber
-       1768  6DF 000941C0 ZwGetCurrentProcessorNumberEx
-       1769  6E0 000941D0 ZwGetDevicePowerState
-       1770  6E1 000941E0 ZwGetMUIRegistryInfo
-       1771  6E2 000941F0 ZwGetNextProcess
-       1772  6E3 00094200 ZwGetNextThread
-       1773  6E4 00094210 ZwGetNlsSectionPtr
-       1774  6E5 00094220 ZwGetNotificationResourceManager
-       1775  6E6 00094230 ZwGetWriteWatch
-       1776  6E7 00094240 ZwImpersonateAnonymousToken
-       1777  6E8 00093560 ZwImpersonateClientOfPort
-       1778  6E9 00094250 ZwImpersonateThread
-       1779  6EA 00094260 ZwInitializeNlsFiles
-       1780  6EB 00094270 ZwInitializeRegistry
-       1781  6EC 00094280 ZwInitiatePowerAction
-       1782  6ED 00093860 ZwIsProcessInJob
-       1783  6EE 00094290 ZwIsSystemResumeAutomatic
-       1784  6EF 000942A0 ZwIsUILanguageComitted
-       1785  6F0 000942B0 ZwListenPort
-       1786  6F1 000942C0 ZwLoadDriver
-       1787  6F2 000942D0 ZwLoadKey
-       1788  6F3 000942E0 ZwLoadKey2
-       1789  6F4 00094F00 ZwLoadKey3
-       1790  6F5 000942F0 ZwLoadKeyEx
-       1791  6F6 00094300 ZwLockFile
-       1792  6F7 00094310 ZwLockProductActivationKeys
-       1793  6F8 00094320 ZwLockRegistryKey
-       1794  6F9 00094330 ZwLockVirtualMemory
-       1795  6FA 00094340 ZwMakePermanentObject
-       1796  6FB 00094350 ZwMakeTemporaryObject
-       1797  6FC 00094360 ZwManagePartition
-       1798  6FD 00094370 ZwMapCMFModule
-       1799  6FE 00094380 ZwMapUserPhysicalPages
-       1800  6FF 000933A0 ZwMapUserPhysicalPagesScatter
-       1801  700 000935F0 ZwMapViewOfSection
-       1802  701 00094390 ZwModifyBootEntry
-       1803  702 000943A0 ZwModifyDriverEntry
-       1804  703 000943B0 ZwNotifyChangeDirectoryFile
-       1805  704 000943C0 ZwNotifyChangeKey
-       1806  705 000943D0 ZwNotifyChangeMultipleKeys
-       1807  706 000943E0 ZwNotifyChangeSession
-       1808  707 000938F0 ZwOpenDirectoryObject
-       1809  708 000943F0 ZwOpenEnlistment
-       1810  709 00093770 ZwOpenEvent
-       1811  70A 00094400 ZwOpenEventPair
-       1812  70B 000936A0 ZwOpenFile
-       1813  70C 00094410 ZwOpenIoCompletion
-       1814  70D 00094420 ZwOpenJobObject
-       1815  70E 00093490 ZwOpenKey
-       1816  70F 00094430 ZwOpenKeyEx
-       1817  710 00094440 ZwOpenKeyTransacted
-       1818  711 00094450 ZwOpenKeyTransactedEx
-       1819  712 00094460 ZwOpenKeyedEvent
-       1820  713 00094470 ZwOpenMutant
-       1821  714 00094480 ZwOpenObjectAuditAlarm
-       1822  715 00094490 ZwOpenPartition
-       1823  716 000944A0 ZwOpenPrivateNamespace
-       1824  717 000935D0 ZwOpenProcess
-       1825  718 000944B0 ZwOpenProcessToken
-       1826  719 00093670 ZwOpenProcessTokenEx
-       1827  71A 000944C0 ZwOpenResourceManager
-       1828  71B 000936E0 ZwOpenSection
-       1829  71C 000944D0 ZwOpenSemaphore
-       1830  71D 000944E0 ZwOpenSession
-       1831  71E 000944F0 ZwOpenSymbolicLinkObject
-       1832  71F 00094500 ZwOpenThread
-       1833  720 000935B0 ZwOpenThreadToken
-       1834  721 00093660 ZwOpenThreadTokenEx
-       1835  722 00094510 ZwOpenTimer
-       1836  723 00094520 ZwOpenTransaction
-       1837  724 00094530 ZwOpenTransactionManager
-       1838  725 00094540 ZwPlugPlayControl
-       1839  726 00093960 ZwPowerInformation
-       1840  727 00094550 ZwPrePrepareComplete
-       1841  728 00094560 ZwPrePrepareEnlistment
-       1842  729 00094570 ZwPrepareComplete
-       1843  72A 00094580 ZwPrepareEnlistment
-       1844  72B 00094590 ZwPrivilegeCheck
-       1845  72C 000945A0 ZwPrivilegeObjectAuditAlarm
-       1846  72D 000945B0 ZwPrivilegedServiceAuditAlarm
-       1847  72E 000945C0 ZwPropagationComplete
-       1848  72F 000945D0 ZwPropagationFailed
-       1849  730 00093870 ZwProtectVirtualMemory
-       1850  731 000945E0 ZwPulseEvent
-       1851  732 00093740 ZwQueryAttributesFile
-       1852  733 000945F0 ZwQueryBootEntryOrder
-       1853  734 00094600 ZwQueryBootOptions
-       1854  735 00094610 ZwQueryDebugFilterState
-       1855  736 000934C0 ZwQueryDefaultLocale
-       1856  737 000937B0 ZwQueryDefaultUILanguage
-       1857  738 000936C0 ZwQueryDirectoryFile
-       1858  739 00094620 ZwQueryDirectoryObject
-       1859  73A 00094630 ZwQueryDriverEntryOrder
-       1860  73B 00094640 ZwQueryEaFile
-       1861  73C 000938D0 ZwQueryEvent
-       1862  73D 00094650 ZwQueryFullAttributesFile
-       1863  73E 00094660 ZwQueryInformationAtom
-       1864  73F 00094670 ZwQueryInformationEnlistment
-       1865  740 00093480 ZwQueryInformationFile
-       1866  741 00094680 ZwQueryInformationJobObject
-       1867  742 00094690 ZwQueryInformationPort
-       1868  743 00093500 ZwQueryInformationProcess
-       1869  744 000946A0 ZwQueryInformationResourceManager
-       1870  745 000935C0 ZwQueryInformationThread
-       1871  746 00093580 ZwQueryInformationToken
-       1872  747 000946B0 ZwQueryInformationTransaction
-       1873  748 000946C0 ZwQueryInformationTransactionManager
-       1874  749 000946D0 ZwQueryInformationWorkerFactory
-       1875  74A 000946E0 ZwQueryInstallUILanguage
-       1876  74B 000946F0 ZwQueryIntervalProfile
-       1877  74C 00094700 ZwQueryIoCompletion
-       1878  74D 000934D0 ZwQueryKey
-       1879  74E 00094710 ZwQueryLicenseValue
-       1880  74F 00094720 ZwQueryMultipleValueKey
-       1881  750 00094730 ZwQueryMutant
-       1882  751 00093470 ZwQueryObject
-       1883  752 00094740 ZwQueryOpenSubKeys
-       1884  753 00094750 ZwQueryOpenSubKeysEx
-       1885  754 00093680 ZwQueryPerformanceCounter
-       1886  755 00094760 ZwQueryPortInformationProcess
-       1887  756 00094770 ZwQueryQuotaInformationFile
-       1888  757 00093880 ZwQuerySection
-       1889  758 00094780 ZwQuerySecurityAttributesToken
-       1890  759 00094790 ZwQuerySecurityObject
-       1891  75A 000947A0 ZwQuerySemaphore
-       1892  75B 000947B0 ZwQuerySymbolicLinkObject
-       1893  75C 000947C0 ZwQuerySystemEnvironmentValue
-       1894  75D 000947D0 ZwQuerySystemEnvironmentValueEx
-       1895  75E 000936D0 ZwQuerySystemInformation
-       1896  75F 000947E0 ZwQuerySystemInformationEx
-       1897  760 00093910 ZwQuerySystemTime
-       1898  761 000936F0 ZwQueryTimer
-       1899  762 000947F0 ZwQueryTimerResolution
-       1900  763 000934E0 ZwQueryValueKey
-       1901  764 000935A0 ZwQueryVirtualMemory
-       1902  765 00093800 ZwQueryVolumeInformationFile
-       1903  766 00094800 ZwQueryWnfStateData
-       1904  767 00094810 ZwQueryWnfStateNameInformation
-       1905  768 000937C0 ZwQueueApcThread
-       1906  769 00094820 ZwQueueApcThreadEx
-       1907  76A 00094830 ZwRaiseException
-       1908  76B 00094840 ZwRaiseHardError
-       1909  76C 000933D0 ZwReadFile
-       1910  76D 00093650 ZwReadFileScatter
-       1911  76E 00094850 ZwReadOnlyEnlistment
-       1912  76F 000938B0 ZwReadRequestData
-       1913  770 00093760 ZwReadVirtualMemory
-       1914  771 00094860 ZwRecoverEnlistment
-       1915  772 00094870 ZwRecoverResourceManager
-       1916  773 00094880 ZwRecoverTransactionManager
-       1917  774 00094890 ZwRegisterProtocolAddressInformation
-       1918  775 000948A0 ZwRegisterThreadTerminatePort
-       1919  776 000948B0 ZwReleaseKeyedEvent
-       1920  777 00093570 ZwReleaseMutant
-       1921  778 00093410 ZwReleaseSemaphore
-       1922  779 000948C0 ZwReleaseWorkerFactoryWorker
-       1923  77A 00093400 ZwRemoveIoCompletion
-       1924  77B 000948D0 ZwRemoveIoCompletionEx
-       1925  77C 000948E0 ZwRemoveProcessDebug
-       1926  77D 000948F0 ZwRenameKey
-       1927  77E 00094900 ZwRenameTransactionManager
-       1928  77F 00094910 ZwReplaceKey
-       1929  780 00094920 ZwReplacePartitionUnit
-       1930  781 00093430 ZwReplyPort
-       1931  782 00093420 ZwReplyWaitReceivePort
-       1932  783 00093620 ZwReplyWaitReceivePortEx
-       1933  784 00094930 ZwReplyWaitReplyPort
-       1934  785 00094940 ZwRequestPort
-       1935  786 00093590 ZwRequestWaitReplyPort
-       1936  787 00094950 ZwResetEvent
-       1937  788 00094960 ZwResetWriteWatch
-       1938  789 00094970 ZwRestoreKey
-       1939  78A 00094980 ZwResumeProcess
-       1940  78B 00093890 ZwResumeThread
-       1941  78C 00094990 ZwRevertContainerImpersonation
-       1942  78D 000949A0 ZwRollbackComplete
-       1943  78E 000949B0 ZwRollbackEnlistment
-       1944  78F 000949C0 ZwRollbackTransaction
-       1945  790 000949D0 ZwRollforwardTransactionManager
-       1946  791 000949E0 ZwSaveKey
-       1947  792 000949F0 ZwSaveKeyEx
-       1948  793 00094A00 ZwSaveMergedKeys
-       1949  794 00094A10 ZwSecureConnectPort
-       1950  795 00094A20 ZwSerializeBoot
-       1951  796 00094A30 ZwSetBootEntryOrder
-       1952  797 00094A40 ZwSetBootOptions
-       1953  798 00094A50 ZwSetCachedSigningLevel
-       1954  799 00094A60 ZwSetContextThread
-       1955  79A 00094A70 ZwSetDebugFilterState
-       1956  79B 00094A80 ZwSetDefaultHardErrorPort
-       1957  79C 00094A90 ZwSetDefaultLocale
-       1958  79D 00094AA0 ZwSetDefaultUILanguage
-       1959  79E 00094AB0 ZwSetDriverEntryOrder
-       1960  79F 00094AC0 ZwSetEaFile
-       1961  7A0 00093450 ZwSetEvent
-       1962  7A1 00093640 ZwSetEventBoostPriority
-       1963  7A2 00094AD0 ZwSetHighEventPair
-       1964  7A3 00094AE0 ZwSetHighWaitLowEventPair
-       1965  7A4 00094AF0 ZwSetIRTimer
-       1966  7A5 00094B00 ZwSetInformationDebugObject
-       1967  7A6 00094B10 ZwSetInformationEnlistment
-       1968  7A7 000935E0 ZwSetInformationFile
-       1969  7A8 00094B20 ZwSetInformationJobObject
-       1970  7A9 00094B30 ZwSetInformationKey
-       1971  7AA 00093930 ZwSetInformationObject
-       1972  7AB 00093530 ZwSetInformationProcess
-       1973  7AC 00094B40 ZwSetInformationResourceManager
-       1974  7AD 00094B50 ZwSetInformationSymbolicLink
-       1975  7AE 00093440 ZwSetInformationThread
-       1976  7AF 00094B60 ZwSetInformationToken
-       1977  7B0 00094B70 ZwSetInformationTransaction
-       1978  7B1 00094B80 ZwSetInformationTransactionManager
-       1979  7B2 00094B90 ZwSetInformationVirtualMemory
-       1980  7B3 00094BA0 ZwSetInformationWorkerFactory
-       1981  7B4 00094BB0 ZwSetIntervalProfile
-       1982  7B5 00094BC0 ZwSetIoCompletion
-       1983  7B6 00094BD0 ZwSetIoCompletionEx
-       1984  7B7 00094BE0 ZwSetLdtEntries
-       1985  7B8 00094BF0 ZwSetLowEventPair
-       1986  7B9 00094C00 ZwSetLowWaitHighEventPair
-       1987  7BA 00094C10 ZwSetQuotaInformationFile
-       1988  7BB 00094C20 ZwSetSecurityObject
-       1989  7BC 00094C30 ZwSetSystemEnvironmentValue
-       1990  7BD 00094C40 ZwSetSystemEnvironmentValueEx
-       1991  7BE 00094C50 ZwSetSystemInformation
-       1992  7BF 00094C60 ZwSetSystemPowerState
-       1993  7C0 00094C70 ZwSetSystemTime
-       1994  7C1 00094C80 ZwSetThreadExecutionState
-       1995  7C2 00093990 ZwSetTimer
-       1996  7C3 00094C90 ZwSetTimer2
-       1997  7C4 00094CA0 ZwSetTimerEx
-       1998  7C5 00094CB0 ZwSetTimerResolution
-       1999  7C6 00094CC0 ZwSetUuidSeed
-       2000  7C7 00093970 ZwSetValueKey
-       2001  7C8 00094CD0 ZwSetVolumeInformationFile
-       2002  7C9 00094CE0 ZwSetWnfProcessNotificationEvent
-       2003  7CA 00094CF0 ZwShutdownSystem
-       2004  7CB 00094D00 ZwShutdownWorkerFactory
-       2005  7CC 00094D10 ZwSignalAndWaitForSingleObject
-       2006  7CD 00094D20 ZwSinglePhaseReject
-       2007  7CE 00094D30 ZwStartProfile
-       2008  7CF 00094D40 ZwStopProfile
-       2009  7D0 00094D50 ZwSubscribeWnfStateChange
-       2010  7D1 00094D60 ZwSuspendProcess
-       2011  7D2 00094D70 ZwSuspendThread
-       2012  7D3 00094D80 ZwSystemDebugControl
-       2013  7D4 00094D90 ZwTerminateJobObject
-       2014  7D5 00093630 ZwTerminateProcess
-       2015  7D6 000938A0 ZwTerminateThread
-       2016  7D7 00094DA0 ZwTestAlert
-       2017  7D8 00094DB0 ZwThawRegistry
-       2018  7D9 00094DC0 ZwThawTransactions
-       2019  7DA 00094DD0 ZwTraceControl
-       2020  7DB 00093950 ZwTraceEvent
-       2021  7DC 00094DE0 ZwTranslateFilePath
-       2022  7DD 00094DF0 ZwUmsThreadYield
-       2023  7DE 00094E00 ZwUnloadDriver
-       2024  7DF 00094E10 ZwUnloadKey
-       2025  7E0 00094E20 ZwUnloadKey2
-       2026  7E1 00094E30 ZwUnloadKeyEx
-       2027  7E2 00094E40 ZwUnlockFile
-       2028  7E3 00094E50 ZwUnlockVirtualMemory
-       2029  7E4 00093610 ZwUnmapViewOfSection
-       2030  7E5 00094E60 ZwUnmapViewOfSectionEx
-       2031  7E6 00094E70 ZwUnsubscribeWnfStateChange
-       2032  7E7 00094E80 ZwUpdateWnfStateData
-       2033  7E8 00094E90 ZwVdmControl
-       2034  7E9 00094EA0 ZwWaitForAlertByThreadId
-       2035  7EA 00094EB0 ZwWaitForDebugEvent
-       2036  7EB 00094EC0 ZwWaitForKeyedEvent
-       2037  7EC 00093920 ZwWaitForMultipleObjects
-       2038  7ED 00093510 ZwWaitForMultipleObjects32
-       2039  7EE 000933B0 ZwWaitForSingleObject
-       2040  7EF 00094ED0 ZwWaitForWorkViaWorkerFactory
-       2041  7F0 00094EE0 ZwWaitHighEventPair
-       2042  7F1 00094EF0 ZwWaitLowEventPair
-       2043  7F2 00093380 ZwWorkerFactoryWorkerReady
-       2044  7F3 000933F0 ZwWriteFile
-       2045  7F4 00093520 ZwWriteFileGather
-       2046  7F5 000938E0 ZwWriteRequestData
-       2047  7F6 00093710 ZwWriteVirtualMemory
-       2048  7F7 000937D0 ZwYieldExecution
-       2049  7F8 00083D50 __C_specific_handler
-       2050  7F9 00096080 __chkstk
-       2051  7FA 00083F10 __isascii
-       2052  7FB 00083F30 __iscsym
-       2053  7FC 00083F80 __iscsymf
-       2054  7FD 000756F0 __misaligned_access
-       2055  7FE 00083FC0 __toascii
-       2056  7FF 000841E0 _atoi64
-       2057  800 000748E0 _errno
-       2058  801 00140010 _fltused
-       2059  802 00084250 _i64toa
-       2060  803 0008DA60 _i64toa_s
-       2061  804 00084430 _i64tow
-       2062  805 0008DD50 _i64tow_s
-       2063  806 00084290 _itoa
-       2064  807 0008DA90 _itoa_s
-       2065  808 00084470 _itow
-       2066  809 0008DD80 _itow_s
-       2067  80A 00084600 _lfind
-       2068  80B 000846C0 _local_unwind
-       2069  80C 000842C0 _ltoa
-       2070  80D 0008DAC0 _ltoa_s
-       2071  80E 000844A0 _ltow
-       2072  80F 0008DDB0 _ltow_s
-       2073  810 0008E070 _makepath_s
-       2074  811 000846F0 _memccpy
-       2075  812 00084780 _memicmp
-       2076  813 00096DC0 _setjmp
-       2077  814 00096E80 _setjmpex
-       2078  815 000847A0 _snprintf
-       2079  816 0008E1B0 _snprintf_s
-       2080  817 0008E280 _snscanf_s
-       2081  818 00084850 _snwprintf
-       2082  819 0008E2C0 _snwprintf_s
-       2083  81A 0008E3A0 _snwscanf_s
-       2084  81B 00084930 _splitpath
-       2085  81C 0008E3E0 _splitpath_s
-       2086  81D 00084C80 _strcmpi
-       2087  81E 00084C80 _stricmp
-       2088  81F 00084C90 _strlwr
-       2089  820 00084CC0 _strlwr_s
-       2090  821 00084D80 _strnicmp
-       2091  822 0008E680 _strnset_s
-       2092  823 0008E710 _strset_s
-       2093  824 00084D90 _strupr
-       2094  825 00084DE0 _strupr_s
-       2095  826 00084E50 _swprintf
-       2096  827 000842F0 _ui64toa
-       2097  828 0008DAF0 _ui64toa_s
-       2098  829 000844D0 _ui64tow
-       2099  82A 0008DDE0 _ui64tow_s
-       2100  82B 00084350 _ultoa
-       2101  82C 0008DB10 _ultoa_s
-       2102  82D 000844F0 _ultow
-       2103  82E 0008DE00 _ultow_s
-       2104  82F 00084F10 _vscwprintf
-       2105  830 00085080 _vsnprintf
-       2106  831 0008E1E0 _vsnprintf_s
-       2107  832 00085150 _vsnwprintf
-       2108  833 0008E2F0 _vsnwprintf_s
-       2109  834 00084FC0 _vswprintf
-       2110  835 00085250 _wcsicmp
-       2111  836 000852A0 _wcslwr
-       2112  837 000852F0 _wcslwr_s
-       2113  838 00085370 _wcsnicmp
-       2114  839 000853D0 _wcsnset_s
-       2115  83A 00085460 _wcsset_s
-       2116  83B 000854C0 _wcstoi64
-       2117  83C 000854F0 _wcstoui64
-       2118  83D 00085790 _wcsupr
-       2119  83E 000857D0 _wcsupr_s
-       2120  83F 0008E770 _wmakepath_s
-       2121  840 0008E8E0 _wsplitpath_s
-       2122  841 00085850 _wtoi
-       2123  842 00085880 _wtoi64
-       2124  843 000858A0 _wtol
-       2125  844 000858C0 abs
-       2126  845 000858D0 atan
-       2127  846 00085B40 atan2
-       2128  847 00084200 atoi
-       2129  848 00084230 atol
-       2130  849 00086310 bsearch
-       2131  84A 00086420 ceil
-       2132  84B 00086540 cos
-       2133  84C 00086E50 fabs
-       2134  84D 00086F40 floor
-       2135  84E 00083FD0 isalnum
-       2136  84F 00084000 isalpha
-       2137  850 00084030 iscntrl
-       2138  851 00084060 isdigit
-       2139  852 00084090 isgraph
-       2140  853 000840C0 islower
-       2141  854 000840F0 isprint
-       2142  855 00084120 ispunct
-       2143  856 00084150 isspace
-       2144  857 00084180 isupper
-       2145  858 00087070 iswalnum
-       2146  859 00087080 iswalpha
-       2147  85A 00087090 iswascii
-       2148  85B 00087140 iswctype
-       2149  85C 000870B0 iswdigit
-       2150  85D 000870C0 iswgraph
-       2151  85E 000870D0 iswlower
-       2152  85F 000870E0 iswprint
-       2153  860 000870F0 iswspace
-       2154  861 00087100 iswxdigit
-       2155  862 000841B0 isxdigit
-       2156  863 000858C0 labs
-       2157  864 00087170 log
-       2158  865 00087460 longjmp
-       2159  866 00087490 mbstowcs
-       2160  867 00087560 memchr
-       2161  868 00087590 memcmp
-       2162  869 00097C40 memcpy
-       2163  86A 0008EBA0 memcpy_s
-       2164  86B 00097C40 memmove
-       2165  86C 0008EC50 memmove_s
-       2166  86D 00097F80 memset
-       2167  86E 00096F20 pow
-       2168  86F 00087670 qsort
-       2169  870 00087A70 qsort_s
-       2170  871 00086960 sin
-       2171  872 00087EA0 sprintf
-       2172  873 0008ECD0 sprintf_s
-       2173  874 00087F40 sqrt
-       2174  875 00088050 sscanf
-       2175  876 0008ED50 sscanf_s
-       2176  877 00088140 strcat
-       2177  878 0008EDB0 strcat_s
-       2178  879 000882A0 strchr
-       2179  87A 000882D0 strcmp
-       2180  87B 000881E0 strcpy
-       2181  87C 0008EE50 strcpy_s
-       2182  87D 00088390 strcspn
-       2183  87E 00088440 strlen
-       2184  87F 00088500 strncat
-       2185  880 0008EEE0 strncat_s
-       2186  881 000886B0 strncmp
-       2187  882 00088780 strncpy
-       2188  883 0008EFE0 strncpy_s
-       2189  884 000888F0 strnlen
-       2190  885 00088910 strpbrk
-       2191  886 000889C0 strrchr
-       2192  887 000889F0 strspn
-       2193  888 00088AC0 strstr
-       2194  889 0008F0D0 strtok_s
-       2195  88A 00088D60 strtol
-       2196  88B 00088DC0 strtoul
-       2197  88C 00084E50 swprintf
-       2198  88D 0008F1F0 swprintf_s
-       2199  88E 0008F280 swscanf_s
-       2200  88F 00088E00 tan
-       2201  890 000892B0 tolower
-       2202  891 000892F0 toupper
-       2203  892 00089360 towlower
-       2204  893 00089390 towupper
-       2205  894 000CADA0 vDbgPrintEx
-       2206  895 000CADD0 vDbgPrintExWithPrefix
-       2207  896 00089420 vsprintf
-       2208  897 0008ED00 vsprintf_s
-       2209  898 0008F220 vswprintf_s
-       2210  899 00089440 wcscat
-       2211  89A 0008F2E0 wcscat_s
-       2212  89B 000894B0 wcschr
-       2213  89C 000894E0 wcscmp
-       2214  89D 00089480 wcscpy
-       2215  89E 0008F390 wcscpy_s
-       2216  89F 00089520 wcscspn
-       2217  8A0 00089570 wcslen
-       2218  8A1 00089590 wcsncat
-       2219  8A2 0008F420 wcsncat_s
-       2220  8A3 000895E0 wcsncmp
-       2221  8A4 00089620 wcsncpy
-       2222  8A5 0008F530 wcsncpy_s
-       2223  8A6 00089670 wcsnlen
-       2224  8A7 000896A0 wcspbrk
-       2225  8A8 000896F0 wcsrchr
-       2226  8A9 00089730 wcsspn
-       2227  8AA 00089780 wcsstr
-       2228  8AB 0008F640 wcstok_s
-       2229  8AC 00089A00 wcstol
-       2230  8AD 00089AA0 wcstombs
-       2231  8AE 00089A60 wcstoul
-          8      00077370 [NONAME]
-
-  Summary
-
-        9000 .data
-        4000 .mrdata
-        E000 .pdata
-       42000 .rdata
-        1000 .reloc
-       66000 .rsrc
-       FC000 .text
-        1000 RT
-Microsoft (R) COFF/PE Dumper Version 14.36.32538.0
-Copyright (C) Microsoft Corporation.  All rights reserved.
-
-
-Dump of file 10.0.10240\oleaut32.dll
-
-File Type: DLL
-
-  Section contains the following exports for OLEAUT32.dll
-
-    00000000 characteristics
-    64A473E2 time date stamp Tue Jul  4 12:32:50 2023
-        0.00 version
-           2 ordinal base
-         499 number of functions
-         425 number of names
-
-    ordinal hint RVA      name
-
-        286    0 0001AD60 BSTR_UserFree
-        144    1 0001AD50 BSTR_UserFree64
-        284    2 00018470 BSTR_UserMarshal
-        145    3 00014450 BSTR_UserMarshal64
-        283    4 00014110 BSTR_UserSize
-        151    5 000144E0 BSTR_UserSize64
-        285    6 000179C0 BSTR_UserUnmarshal
-        300    7 00016FE0 BSTR_UserUnmarshal64
-        414    8 00055710 BstrFromVector
-        171    9 000477E0 ClearCustData
-         31    A 000583F0 CreateDispTypeInfo
-        202    B 00020080 CreateErrorInfo
-         32    C 00058850 CreateStdDispatch
-        160    D 0002E900 CreateTypeLib
-        180    E 0001E980 CreateTypeLib2
-        146    F 00006D90 DispCallFunc
-         29   10 0001B960 DispGetIDsOfNames
-         28   11 00058860 DispGetParam
-         30   12 000040A0 DispInvoke
-        301   13 0001BD80 DllCanUnloadNow
-        302   14 00011C10 DllGetClassObject
-        320   15 00058F20 DllRegisterServer
-        321   16 00059220 DllUnregisterServer
-         14   17 0001EB40 DosDateTimeToVariantTime
-         35   18 0001BED0 GetActiveObject
-        332   19 00059740 GetAltMonthNames
-        200   1A 00020090 GetErrorInfo
-        322   1B 0005E670 GetRecordInfoFromGuids
-        323   1C 0005E7F0 GetRecordInfoFromTypeInfo
-        326   1D 0002F870 GetVarConversionLocaleSetting
-        445   1E          HWND_UserFree (forwarded to COMBASE.HWND_UserFree)
-        449   1F          HWND_UserFree64 (forwarded to COMBASE.HWND_UserFree64)
-        446   20          HWND_UserMarshal (forwarded to COMBASE.HWND_UserMarshal)
-        450   21          HWND_UserMarshal64 (forwarded to COMBASE.HWND_UserMarshal64)
-        447   22          HWND_UserSize (forwarded to COMBASE.HWND_UserSize)
-        451   23          HWND_UserSize64 (forwarded to COMBASE.HWND_UserSize64)
-        448   24          HWND_UserUnmarshal (forwarded to COMBASE.HWND_UserUnmarshal)
-        452   25          HWND_UserUnmarshal64 (forwarded to COMBASE.HWND_UserUnmarshal64)
-        165   26 0001BCC0 LHashValOfNameSys
-        166   27 000110A0 LHashValOfNameSysA
-        296   28 00015430 LPSAFEARRAY_Marshal
-        295   29 00015110 LPSAFEARRAY_Size
-        297   2A 00016620 LPSAFEARRAY_Unmarshal
-        294   2B 0001AC60 LPSAFEARRAY_UserFree
-        324   2C 000554C0 LPSAFEARRAY_UserFree64
-        292   2D 00018510 LPSAFEARRAY_UserMarshal
-        328   2E 000199A0 LPSAFEARRAY_UserMarshal64
-        291   2F 00018520 LPSAFEARRAY_UserSize
-        350   30 0001A100 LPSAFEARRAY_UserSize64
-        293   31 00018500 LPSAFEARRAY_UserUnmarshal
-        351   32 00018CA0 LPSAFEARRAY_UserUnmarshal64
-        162   33 00004DC0 LoadRegTypeLib
-        161   34 0001BD90 LoadTypeLib
-        183   35 000111C0 LoadTypeLibEx
-        500   36 00014220 OACleanup
-        352   37 0001E980 OACreateTypeLib2
-        170   38 00031850 OaBuildVersion
-        444   39 0002F8A0 OaEnablePerUserTLibRegistration
-        420   3A 0001BF20 OleCreateFontIndirect
-        419   3B 00002860 OleCreatePictureIndirect
-        417   3C 0005F4A0 OleCreatePropertyFrame
-        416   3D 0005F500 OleCreatePropertyFrameIndirect
-        415   3E 0005F540 OleIconToCursor
-        418   3F 0005F590 OleLoadPicture
-        401   40 0005F5C0 OleLoadPictureEx
-        422   41 0005F650 OleLoadPictureFile
-        402   42 0005F690 OleLoadPictureFileEx
-        424   43 0005F710 OleLoadPicturePath
-        423   44 0005F790 OleSavePictureFile
-        421   45 0001BDA0 OleTranslateColor
-        164   46 00030DA0 QueryPathOfRegTypeLib
-         33   47 000592E0 RegisterActiveObject
-        163   48 00030EA0 RegisterTypeLib
-        442   49 00030F50 RegisterTypeLibForUser
-         34   4A 00059340 RevokeActiveObject
-         23   4B 000183D0 SafeArrayAccessData
-        353   4C 0005FA20 SafeArrayAddRef
-         37   4D 0000D050 SafeArrayAllocData
-         36   4E 00014030 SafeArrayAllocDescriptor
-         41   4F 0000D130 SafeArrayAllocDescriptorEx
-         27   50 00010D70 SafeArrayCopy
-        412   51 00010E70 SafeArrayCopyData
-         15   52 0000CF90 SafeArrayCreate
-         42   53 0005FAA0 SafeArrayCreateEx
-        411   54 0000C850 SafeArrayCreateVector
-         43   55 0005FBE0 SafeArrayCreateVectorEx
-         16   56 0000CBD0 SafeArrayDestroy
-         39   57 0005FEB0 SafeArrayDestroyData
-         38   58 0001BBC0 SafeArrayDestroyDescriptor
-         17   59 0001AB20 SafeArrayGetDim
-         25   5A 0001A4E0 SafeArrayGetElement
-         18   5B 0001B500 SafeArrayGetElemsize
-         67   5C 0005FD70 SafeArrayGetIID
-         20   5D 0001A710 SafeArrayGetLBound
-         45   5E 0005FDA0 SafeArrayGetRecordInfo
-         19   5F 0001A440 SafeArrayGetUBound
-         77   60 0001A6C0 SafeArrayGetVartype
-         21   61 00011070 SafeArrayLock
-        148   62 0001A620 SafeArrayPtrOfIndex
-         26   63 0000D360 SafeArrayPutElement
-         40   64 0001B520 SafeArrayRedim
-        354   65 0005FE00 SafeArrayReleaseData
-        355   66 0005FE10 SafeArrayReleaseDescriptor
-         57   67 0001B880 SafeArraySetIID
-         44   68 0005FE20 SafeArraySetRecordInfo
-         24   69 0001A4B0 SafeArrayUnaccessData
-         22   6A 00011040 SafeArrayUnlock
-        201   6B 000200A0 SetErrorInfo
-        327   6C 0002F8C0 SetOaNoCache
-        325   6D 0002F8E0 SetVarConversionLocaleSetting
-        356   6E 00060020 SysAddRefString
-          2   6F 00009F10 SysAllocString
-        150   70 0000BEC0 SysAllocStringByteLen
-          4   71 0000C280 SysAllocStringLen
-          6   72 0000BF80 SysFreeString
-          3   73 00001B00 SysReAllocString
-          5   74 000181F0 SysReAllocStringLen
-        357   75 00060030 SysReleaseString
-        149   76 00014190 SysStringByteLen
-          7   77 0001AB00 SysStringLen
-        184   78 000050F0 SystemTimeToVariantTime
-        186   79 0002F1B0 UnRegisterTypeLib
-        443   7A 0002F240 UnRegisterTypeLibForUser
-        290   7B 0001AB70 VARIANT_UserFree
-        358   7C 0001AB60 VARIANT_UserFree64
-        288   7D 00018530 VARIANT_UserMarshal
-        359   7E 000195C0 VARIANT_UserMarshal64
-        287   7F 00018950 VARIANT_UserSize
-        380   80 00019E10 VARIANT_UserSize64
-        289   81 00017130 VARIANT_UserUnmarshal
-        381   82 00015930 VARIANT_UserUnmarshal64
-        168   83 0004E820 VarAbs
-        141   84 0004F620 VarAdd
-        142   85 00051EA0 VarAnd
-        124   86 000559E0 VarBoolFromCy
-        123   87 00055A00 VarBoolFromDate
-        236   88 00060060 VarBoolFromDec
-        126   89 00055A10 VarBoolFromDisp
-        233   8A 00055A60 VarBoolFromI1
-        119   8B 00055A70 VarBoolFromI2
-        120   8C 00055AF0 VarBoolFromI4
-        370   8D 00055A90 VarBoolFromI8
-        121   8E 00055AB0 VarBoolFromR4
-        122   8F 00055AD0 VarBoolFromR8
-        125   90 00004930 VarBoolFromStr
-        118   91 00055A60 VarBoolFromUI1
-        234   92 00055A70 VarBoolFromUI2
-        235   93 00055AF0 VarBoolFromUI4
-        371   94 00055A90 VarBoolFromUI8
-        313   95 0001B280 VarBstrCat
-        314   96 0001B330 VarBstrCmp
-        116   97 000048C0 VarBstrFromBool
-        113   98 00055B00 VarBstrFromCy
-        114   99 0001BFC0 VarBstrFromDate
-        232   9A 00001400 VarBstrFromDec
-        115   9B 00055ED0 VarBstrFromDisp
-        229   9C 00055F20 VarBstrFromI1
-        109   9D 00055F30 VarBstrFromI2
-        110   9E 00055FE0 VarBstrFromI4
-        368   9F 00056090 VarBstrFromI8
-        111   A0 00056150 VarBstrFromR4
-        112   A1 000056B0 VarBstrFromR8
-        108   A2 00056280 VarBstrFromUI1
-        230   A3 00056290 VarBstrFromUI2
-        231   A4 00004B40 VarBstrFromUI4
-        369   A5 00004110 VarBstrFromUI8
-        318   A6 00050010 VarCat
-        176   A7 0001AD90 VarCmp
-        306   A8 00052AF0 VarCyAbs
-        299   A9 00052B30 VarCyAdd
-        311   AA 00052B70 VarCyCmp
-        312   AB 00052B90 VarCyCmpR8
-        307   AC 00052BF0 VarCyFix
-        106   AD 00064430 VarCyFromBool
-        103   AE 00064480 VarCyFromDate
-        228   AF 00060090 VarCyFromDec
-        105   B0 000562A0 VarCyFromDisp
-        225   B1 000562F0 VarCyFromI1
-         99   B2 00064430 VarCyFromI2
-        100   B3 00064450 VarCyFromI4
-        366   B4 000646A0 VarCyFromI8
-        101   B5 00064470 VarCyFromR4
-        102   B6 00064480 VarCyFromR8
-        104   B7 00056310 VarCyFromStr
-         98   B8 000563A0 VarCyFromUI1
-        226   B9 000563C0 VarCyFromUI2
-        227   BA 000563E0 VarCyFromUI4
-        367   BB 00056400 VarCyFromUI8
-        308   BC 00052C30 VarCyInt
-        303   BD 00052CA0 VarCyMul
-        304   BE 00052E10 VarCyMulI4
-        329   BF 000500E0 VarCyMulI8
-        309   C0 00052E90 VarCyNeg
-        310   C1 0004EA80 VarCyRound
-        305   C2 00052EC0 VarCySub
-         96   C3 00056FD0 VarDateFromBool
-         93   C4 00056420 VarDateFromCy
-        224   C5 000603C0 VarDateFromDec
-         95   C6 00056460 VarDateFromDisp
-        221   C7 000564C0 VarDateFromI1
-         89   C8 00056FD0 VarDateFromI2
-         90   C9 00056500 VarDateFromI4
-        364   CA 00056540 VarDateFromI8
-         91   CB 00056580 VarDateFromR4
-         92   CC 000565B0 VarDateFromR8
-         94   CD 00063B90 VarDateFromStr
-         88   CE 00057050 VarDateFromUI1
-        222   CF 000565E0 VarDateFromUI2
-        223   D0 00056620 VarDateFromUI4
-        365   D1 00056660 VarDateFromUI8
-        330   D2 00006160 VarDateFromUdate
-        319   D3 00006180 VarDateFromUdateEx
-        182   D4 00053490 VarDecAbs
-        177   D5 000534C0 VarDecAdd
-        204   D6 000022C0 VarDecCmp
-        298   D7 00052A30 VarDecCmpR8
-        178   D8 000534D0 VarDecDiv
-        187   D9 00053B10 VarDecFix
-        199   DA 00060420 VarDecFromBool
-        196   DB 00060450 VarDecFromCy
-        195   DC 00060480 VarDecFromDate
-        198   DD 00060490 VarDecFromDisp
-        241   DE 000604F0 VarDecFromI1
-        191   DF 00060520 VarDecFromI2
-        192   E0 00002830 VarDecFromI4
-        374   E1 00060560 VarDecFromI8
-        193   E2 00001970 VarDecFromR4
-        194   E3 00001620 VarDecFromR8
-        197   E4 000605B0 VarDecFromStr
-        190   E5 00060640 VarDecFromUI1
-        242   E6 00060660 VarDecFromUI2
-        243   E7 00060680 VarDecFromUI4
-        375   E8 000606A0 VarDecFromUI8
-        188   E9 00053B30 VarDecInt
-        179   EA 00053B70 VarDecMul
-        189   EB 00053DE0 VarDecNeg
-        203   EC 000017A0 VarDecRound
-        181   ED 00053E10 VarDecSub
-        143   EE 00050150 VarDiv
-        152   EF 00052030 VarEqv
-        169   F0 0004EB00 VarFix
-         87   F1 00065C50 VarFormat
-        127   F2 00065D40 VarFormatCurrency
-         97   F3 00065E60 VarFormatDateTime
-        139   F4 00065EE0 VarFormatFromTokens
-        107   F5 00067F50 VarFormatNumber
-        117   F6 00068060 VarFormatPercent
-        253   F7 000566A0 VarI1FromBool
-        250   F8 000566B0 VarI1FromCy
-        249   F9 000566E0 VarI1FromDate
-        256   FA 000606C0 VarI1FromDec
-        252   FB 000566F0 VarI1FromDisp
-        245   FC 00056740 VarI1FromI2
-        246   FD 00056770 VarI1FromI4
-        376   FE 00056790 VarI1FromI8
-        247   FF 000567B0 VarI1FromR4
-        248  100 000567C0 VarI1FromR8
-        251  101 00056800 VarI1FromStr
-        244  102 00056830 VarI1FromUI1
-        254  103 00056850 VarI1FromUI2
-        255  104 00056870 VarI1FromUI4
-        377  105 00056890 VarI1FromUI8
-         56  106 00057250 VarI2FromBool
-         52  107 00064580 VarI2FromCy
-         53  108 000568B0 VarI2FromDate
-        208  109 00060740 VarI2FromDec
-         55  10A 000568C0 VarI2FromDisp
-        205  10B 00056910 VarI2FromI1
-         49  10C 00056920 VarI2FromI4
-        346  10D 00056940 VarI2FromI8
-         50  10E 00056970 VarI2FromR4
-         51  10F 00056980 VarI2FromR8
-         54  110 0001EA10 VarI2FromStr
-         48  111 000573A0 VarI2FromUI1
-        206  112 000569C0 VarI2FromUI2
-        207  113 000569E0 VarI2FromUI4
-        347  114 00056A00 VarI2FromUI8
-         66  115 00056A20 VarI4FromBool
-         62  116 000645D0 VarI4FromCy
-         63  117 00056A30 VarI4FromDate
-        212  118 000607C0 VarI4FromDec
-         65  119 00056A40 VarI4FromDisp
-        209  11A 00056A90 VarI4FromI1
-         59  11B 00056A20 VarI4FromI2
-        348  11C 00056AA0 VarI4FromI8
-         60  11D 00056AD0 VarI4FromR4
-         61  11E 000018F0 VarI4FromR8
-         64  11F 000055D0 VarI4FromStr
-         58  120 000574F0 VarI4FromUI1
-        210  121 00056AE0 VarI4FromUI2
-        211  122 00056B00 VarI4FromUI4
-        349  123 00056B20 VarI4FromUI8
-        341  124 00056B40 VarI8FromBool
-        337  125 000646E0 VarI8FromCy
-        338  126 00056B50 VarI8FromDate
-        345  127 00060840 VarI8FromDec
-        340  128 00056B60 VarI8FromDisp
-        342  129 00056BB0 VarI8FromI1
-        334  12A 00056B40 VarI8FromI2
-        335  12B 00056BC0 VarI8FromR4
-        336  12C 00056BD0 VarI8FromR8
-        339  12D 00056C10 VarI8FromStr
-        333  12E 00057650 VarI8FromUI1
-        343  12F 00056D70 VarI8FromUI2
-        344  130 00056D80 VarI8FromUI4
-        427  131 00056D90 VarI8FromUI8
-        153  132 00052060 VarIdiv
-        154  133 00052220 VarImp
-        172  134 0004ECF0 VarInt
-        155  135 00052310 VarMod
-        129  136 00068150 VarMonthName
-        156  137 000507E0 VarMul
-        173  138 0004EEC0 VarNeg
-        174  139 00052490 VarNot
-         47  13A 000067C0 VarNumFromParseNum
-        157  13B 00052530 VarOr
-         46  13C 00005990 VarParseNumFromStr
-        158  13D 000510C0 VarPow
-        316  13E 00052AA0 VarR4CmpR8
-         76  13F 00056E50 VarR4FromBool
-         72  140 00064650 VarR4FromCy
-         73  141 00056DC0 VarR4FromDate
-        216  142 000608E0 VarR4FromDec
-         75  143 00056DD0 VarR4FromDisp
-        213  144 00056E30 VarR4FromI1
-         69  145 00056E50 VarR4FromI2
-         70  146 00056E70 VarR4FromI4
-        360  147 00056E90 VarR4FromI8
-         71  148 000028C0 VarR4FromR8
-         74  149 00002100 VarR4FromStr
-         68  14A 00056EB0 VarR4FromUI1
-        214  14B 00056ED0 VarR4FromUI2
-        215  14C 00056EF0 VarR4FromUI4
-        361  14D 00056F10 VarR4FromUI8
-         86  14E 00056FD0 VarR8FromBool
-         82  14F 00064680 VarR8FromCy
-         83  150 00056F40 VarR8FromDate
-        220  151 00060930 VarR8FromDec
-         85  152 00056F50 VarR8FromDisp
-        217  153 00056FB0 VarR8FromI1
-         79  154 00056FD0 VarR8FromI2
-         80  155 00056FF0 VarR8FromI4
-        362  156 00057010 VarR8FromI8
-         81  157 00057030 VarR8FromR4
-         84  158 00005540 VarR8FromStr
-         78  159 00057050 VarR8FromUI1
-        218  15A 00057070 VarR8FromUI2
-        219  15B 00057090 VarR8FromUI4
-        363  15C 000570B0 VarR8FromUI8
-        315  15D 00051230 VarR8Pow
-        317  15E 0004F160 VarR8Round
-        175  15F 0004F250 VarRound
-        159  160 000512F0 VarSub
-        140  161 00068220 VarTokenizeFormatString
-        138  162 000566A0 VarUI1FromBool
-        134  163 000570E0 VarUI1FromCy
-        135  164 00057110 VarUI1FromDate
-        240  165 000609C0 VarUI1FromDec
-        137  166 00057120 VarUI1FromDisp
-        237  167 00057170 VarUI1FromI1
-        130  168 00057190 VarUI1FromI2
-        131  169 00001E90 VarUI1FromI4
-        372  16A 00057230 VarUI1FromI8
-        132  16B 000571B0 VarUI1FromR4
-        133  16C 000571C0 VarUI1FromR8
-        136  16D 00057200 VarUI1FromStr
-        238  16E 00057190 VarUI1FromUI2
-        239  16F 00001E90 VarUI1FromUI4
-        373  170 00057230 VarUI1FromUI8
-        266  171 00057250 VarUI2FromBool
-        263  172 00057260 VarUI2FromCy
-        262  173 00057290 VarUI2FromDate
-        269  174 00060A40 VarUI2FromDec
-        265  175 000572A0 VarUI2FromDisp
-        267  176 000572F0 VarUI2FromI1
-        258  177 00057310 VarUI2FromI2
-        259  178 00005520 VarUI2FromI4
-        378  179 00057330 VarUI2FromI8
-        260  17A 00057350 VarUI2FromR4
-        261  17B 00057360 VarUI2FromR8
-        264  17C 000054F0 VarUI2FromStr
-        257  17D 000573A0 VarUI2FromUI1
-        268  17E 00005520 VarUI2FromUI4
-        379  17F 00057330 VarUI2FromUI8
-        279  180 00056A20 VarUI4FromBool
-        276  181 000573B0 VarUI4FromCy
-        275  182 000573E0 VarUI4FromDate
-        282  183 000027D0 VarUI4FromDec
-        278  184 000573F0 VarUI4FromDisp
-        280  185 00057440 VarUI4FromI1
-        271  186 00057460 VarUI4FromI2
-        272  187 00057480 VarUI4FromI4
-        425  188 00001E70 VarUI4FromI8
-        273  189 000574A0 VarUI4FromR4
-        274  18A 000574B0 VarUI4FromR8
-        277  18B 00004FA0 VarUI4FromStr
-        270  18C 000574F0 VarUI4FromUI1
-        281  18D 00057500 VarUI4FromUI2
-        426  18E 00001E70 VarUI4FromUI8
-        437  18F 00056B40 VarUI8FromBool
-        433  190 00057510 VarUI8FromCy
-        434  191 00057540 VarUI8FromDate
-        441  192 00060AC0 VarUI8FromDec
-        436  193 00057550 VarUI8FromDisp
-        438  194 000575A0 VarUI8FromI1
-        430  195 000575C0 VarUI8FromI2
-        428  196 000575E0 VarUI8FromI8
-        431  197 00057600 VarUI8FromR4
-        432  198 00057610 VarUI8FromR8
-        435  199 00004280 VarUI8FromStr
-        429  19A 00057650 VarUI8FromUI1
-        439  19B 00056D70 VarUI8FromUI2
-        440  19C 00056D80 VarUI8FromUI4
-        331  19D 00006470 VarUdateFromDate
-        128  19E 000684A0 VarWeekdayName
-        167  19F 000526D0 VarXor
-         12  1A0 00006CA0 VariantChangeType
-        147  1A1 00009FF0 VariantChangeTypeEx
-          9  1A2 0008C680 VariantClear
-         10  1A3 0008C810 VariantCopy
-         11  1A4 0008C6D0 VariantCopyInd
-          8  1A5 0008C660 VariantInit
-         13  1A6 00059230 VariantTimeToDosDateTime
-        185  1A7 00005030 VariantTimeToSystemTime
-        413  1A8 00002240 VectorFromBstr
-
-  Summary
-
-        3000 .data
-        1000 .didat
-        9000 .pdata
-       24000 .rdata
-        3000 .reloc
-        1000 .rsrc
-       8C000 .text
-Microsoft (R) COFF/PE Dumper Version 14.36.32538.0
-Copyright (C) Microsoft Corporation.  All rights reserved.
-
-
-Dump of file 10.0.10240\secur32.dll
-
-File Type: DLL
-
-  Section contains the following exports for Secur32.dll
-
-    00000000 characteristics
-    559F300C time date stamp Thu Jul  9 19:38:04 2015
-        0.00 version
-           1 ordinal base
-         101 number of functions
-         101 number of names
-
-    ordinal hint RVA      name
-
-          4    0          AcceptSecurityContext (forwarded to SSPICLI.AcceptSecurityContext)
-          5    1          AcquireCredentialsHandleA (forwarded to SSPICLI.AcquireCredentialsHandleA)
-          6    2          AcquireCredentialsHandleW (forwarded to SSPICLI.AcquireCredentialsHandleW)
-          7    3          AddCredentialsA (forwarded to SSPICLI.AddCredentialsA)
-          8    4          AddCredentialsW (forwarded to SSPICLI.AddCredentialsW)
-          9    5          AddSecurityPackageA (forwarded to SSPICLI.AddSecurityPackageA)
-         10    6          AddSecurityPackageW (forwarded to SSPICLI.AddSecurityPackageW)
-         11    7          ApplyControlToken (forwarded to SSPICLI.ApplyControlToken)
-         12    8          ChangeAccountPasswordA (forwarded to SSPICLI.ChangeAccountPasswordA)
-         13    9          ChangeAccountPasswordW (forwarded to SSPICLI.ChangeAccountPasswordW)
-          1    A 00002000 CloseLsaPerformanceData
-          2    B 00001B00 CollectLsaPerformanceData
-         14    C          CompleteAuthToken (forwarded to SSPICLI.CompleteAuthToken)
-         15    D          CredMarshalTargetInfo (forwarded to SSPICLI.CredMarshalTargetInfo)
-         16    E          CredUnmarshalTargetInfo (forwarded to SSPICLI.CredUnmarshalTargetInfo)
-         17    F          DecryptMessage (forwarded to SSPICLI.DecryptMessage)
-         18   10          DeleteSecurityContext (forwarded to SSPICLI.DeleteSecurityContext)
-         19   11          DeleteSecurityPackageA (forwarded to SSPICLI.DeleteSecurityPackageA)
-         20   12          DeleteSecurityPackageW (forwarded to SSPICLI.DeleteSecurityPackageW)
-         21   13          EncryptMessage (forwarded to SSPICLI.EncryptMessage)
-         22   14          EnumerateSecurityPackagesA (forwarded to SSPICLI.EnumerateSecurityPackagesA)
-         23   15          EnumerateSecurityPackagesW (forwarded to SSPICLI.EnumerateSecurityPackagesW)
-         24   16          ExportSecurityContext (forwarded to SSPICLI.ExportSecurityContext)
-         25   17          FreeContextBuffer (forwarded to SSPICLI.FreeContextBuffer)
-         26   18          FreeCredentialsHandle (forwarded to SSPICLI.FreeCredentialsHandle)
-         27   19 000036A0 GetComputerObjectNameA
-         28   1A 00001080 GetComputerObjectNameW
-         29   1B          GetSecurityUserInfo (forwarded to SSPICLI.GetSecurityUserInfo)
-         30   1C          GetUserNameExA (forwarded to SSPICLI.GetUserNameExA)
-         31   1D          GetUserNameExW (forwarded to SSPICLI.GetUserNameExW)
-         32   1E          ImpersonateSecurityContext (forwarded to SSPICLI.ImpersonateSecurityContext)
-         33   1F          ImportSecurityContextA (forwarded to SSPICLI.ImportSecurityContextA)
-         34   20          ImportSecurityContextW (forwarded to SSPICLI.ImportSecurityContextW)
-         35   21          InitSecurityInterfaceA (forwarded to SSPICLI.InitSecurityInterfaceA)
-         36   22          InitSecurityInterfaceW (forwarded to SSPICLI.InitSecurityInterfaceW)
-         37   23          InitializeSecurityContextA (forwarded to SSPICLI.InitializeSecurityContextA)
-         38   24          InitializeSecurityContextW (forwarded to SSPICLI.InitializeSecurityContextW)
-         39   25          LsaCallAuthenticationPackage (forwarded to SSPICLI.LsaCallAuthenticationPackage)
-         40   26          LsaConnectUntrusted (forwarded to SSPICLI.LsaConnectUntrusted)
-         41   27          LsaDeregisterLogonProcess (forwarded to SSPICLI.LsaDeregisterLogonProcess)
-         42   28          LsaEnumerateLogonSessions (forwarded to SSPICLI.LsaEnumerateLogonSessions)
-         43   29          LsaFreeReturnBuffer (forwarded to SSPICLI.LsaFreeReturnBuffer)
-         44   2A          LsaGetLogonSessionData (forwarded to SSPICLI.LsaGetLogonSessionData)
-         45   2B          LsaLogonUser (forwarded to SSPICLI.LsaLogonUser)
-         46   2C          LsaLookupAuthenticationPackage (forwarded to SSPICLI.LsaLookupAuthenticationPackage)
-         47   2D          LsaRegisterLogonProcess (forwarded to SSPICLI.LsaRegisterLogonProcess)
-         48   2E          LsaRegisterPolicyChangeNotification (forwarded to SSPICLI.LsaRegisterPolicyChangeNotification)
-         49   2F          LsaUnregisterPolicyChangeNotification (forwarded to SSPICLI.LsaUnregisterPolicyChangeNotification)
-         50   30          MakeSignature (forwarded to SSPICLI.MakeSignature)
-          3   31 00001EF0 OpenLsaPerformanceData
-         51   32          QueryContextAttributesA (forwarded to SSPICLI.QueryContextAttributesA)
-         52   33          QueryContextAttributesW (forwarded to SSPICLI.QueryContextAttributesW)
-         53   34          QueryCredentialsAttributesA (forwarded to SSPICLI.QueryCredentialsAttributesA)
-         54   35          QueryCredentialsAttributesW (forwarded to SSPICLI.QueryCredentialsAttributesW)
-         55   36          QuerySecurityContextToken (forwarded to SSPICLI.QuerySecurityContextToken)
-         56   37          QuerySecurityPackageInfoA (forwarded to SSPICLI.QuerySecurityPackageInfoA)
-         57   38          QuerySecurityPackageInfoW (forwarded to SSPICLI.QuerySecurityPackageInfoW)
-         58   39          RevertSecurityContext (forwarded to SSPICLI.RevertSecurityContext)
-         59   3A          SaslAcceptSecurityContext (forwarded to SSPICLI.SaslAcceptSecurityContext)
-         60   3B          SaslEnumerateProfilesA (forwarded to SSPICLI.SaslEnumerateProfilesA)
-         61   3C          SaslEnumerateProfilesW (forwarded to SSPICLI.SaslEnumerateProfilesW)
-         62   3D          SaslGetContextOption (forwarded to SSPICLI.SaslGetContextOption)
-         63   3E          SaslGetProfilePackageA (forwarded to SSPICLI.SaslGetProfilePackageA)
-         64   3F          SaslGetProfilePackageW (forwarded to SSPICLI.SaslGetProfilePackageW)
-         65   40          SaslIdentifyPackageA (forwarded to SSPICLI.SaslIdentifyPackageA)
-         66   41          SaslIdentifyPackageW (forwarded to SSPICLI.SaslIdentifyPackageW)
-         67   42          SaslInitializeSecurityContextA (forwarded to SSPICLI.SaslInitializeSecurityContextA)
-         68   43          SaslInitializeSecurityContextW (forwarded to SSPICLI.SaslInitializeSecurityContextW)
-         69   44          SaslSetContextOption (forwarded to SSPICLI.SaslSetContextOption)
-         70   45          SealMessage (forwarded to SSPICLI.SealMessage)
-         71   46          SeciAllocateAndSetCallFlags (forwarded to SSPICLI.SeciAllocateAndSetCallFlags)
-         72   47          SeciAllocateAndSetIPAddress (forwarded to SSPICLI.SeciAllocateAndSetIPAddress)
-         73   48          SeciFreeCallContext (forwarded to SSPICLI.SeciFreeCallContext)
-         74   49 000024C0 SecpFreeMemory
-         75   4A 000013E0 SecpTranslateName
-         76   4B 00002070 SecpTranslateNameEx
-         77   4C          SetContextAttributesA (forwarded to SSPICLI.SetContextAttributesA)
-         78   4D          SetContextAttributesW (forwarded to SSPICLI.SetContextAttributesW)
-         79   4E          SetCredentialsAttributesA (forwarded to SSPICLI.SetCredentialsAttributesA)
-         80   4F          SetCredentialsAttributesW (forwarded to SSPICLI.SetCredentialsAttributesW)
-         81   50          SspiCompareAuthIdentities (forwarded to SSPICLI.SspiCompareAuthIdentities)
-         82   51          SspiCopyAuthIdentity (forwarded to SSPICLI.SspiCopyAuthIdentity)
-         83   52          SspiDecryptAuthIdentity (forwarded to SSPICLI.SspiDecryptAuthIdentity)
-         84   53          SspiEncodeAuthIdentityAsStrings (forwarded to SSPICLI.SspiEncodeAuthIdentityAsStrings)
-         85   54          SspiEncodeStringsAsAuthIdentity (forwarded to SSPICLI.SspiEncodeStringsAsAuthIdentity)
-         86   55          SspiEncryptAuthIdentity (forwarded to SSPICLI.SspiEncryptAuthIdentity)
-         87   56          SspiExcludePackage (forwarded to SSPICLI.SspiExcludePackage)
-         88   57          SspiFreeAuthIdentity (forwarded to SSPICLI.SspiFreeAuthIdentity)
-         89   58          SspiGetTargetHostName (forwarded to SSPICLI.SspiGetTargetHostName)
-         90   59          SspiIsAuthIdentityEncrypted (forwarded to SSPICLI.SspiIsAuthIdentityEncrypted)
-         91   5A          SspiLocalFree (forwarded to SSPICLI.SspiLocalFree)
-         92   5B          SspiMarshalAuthIdentity (forwarded to SSPICLI.SspiMarshalAuthIdentity)
-         93   5C          SspiPrepareForCredRead (forwarded to SSPICLI.SspiPrepareForCredRead)
-         94   5D          SspiPrepareForCredWrite (forwarded to SSPICLI.SspiPrepareForCredWrite)
-         95   5E          SspiUnmarshalAuthIdentity (forwarded to SSPICLI.SspiUnmarshalAuthIdentity)
-         96   5F          SspiValidateAuthIdentity (forwarded to SSPICLI.SspiValidateAuthIdentity)
-         97   60          SspiZeroAuthIdentity (forwarded to SSPICLI.SspiZeroAuthIdentity)
-         98   61 000037D0 TranslateNameA
-         99   62 00003950 TranslateNameW
-        100   63          UnsealMessage (forwarded to SSPICLI.UnsealMessage)
-        101   64          VerifySignature (forwarded to SSPICLI.VerifySignature)
-
-  Summary
-
-        1000 .data
-        1000 .didat
-        1000 .pdata
-        3000 .rdata
-        1000 .reloc
-        1000 .rsrc
-        3000 .text
-Microsoft (R) COFF/PE Dumper Version 14.36.32538.0
-Copyright (C) Microsoft Corporation.  All rights reserved.
-
-
-Dump of file 10.0.10240\userenv.dll
-
-File Type: DLL
-
-  Section contains the following exports for USERENV.dll
-
-    00000000 characteristics
-    5F73FC88 time date stamp Tue Sep 29 20:33:28 2020
-        0.00 version
-         104 ordinal base
-         116 number of functions
-          59 number of names
-
-    ordinal hint RVA      name
-
-        106    0 0000E2E0 AreThereVisibleLogoffScripts
-        107    1 0000E2F0 AreThereVisibleShutdownScripts
-        108    2 00001140 CreateAppContainerProfile
-        109    3 00003270 CreateEnvironmentBlock
-        110    4 0000ED60 CreateProfile
-        111    5 000010F0 DeleteAppContainerProfile
-        112    6 0000FD20 DeleteProfileA
-        113    7 0000F220 DeleteProfileW
-        114    8 000032C0 DeriveAppContainerSidFromAppContainerName
-        115    9 000010A0 DeriveRestrictedAppContainerSidFromAppContainerSidAndRestrictedName
-        116    A 00003240 DestroyEnvironmentBlock
-        117    B 000031C0 DllCanUnloadNow
-        118    C 00003090 DllGetClassObject
-        119    D 000107E0 DllRegisterServer
-        120    E 00010820 DllUnregisterServer
-        121    F 000033E0 EnterCriticalPolicySection
-        123   10 0000FE30 ExpandEnvironmentStringsForUserA
-        124   11 00003190 ExpandEnvironmentStringsForUserW
-        125   12 0000E300 ForceSyncFgPolicy
-        126   13 0000E310 FreeGPOListA
-        127   14 0000E320 FreeGPOListW
-        128   15 0000E330 GenerateGPNotification
-        129   16 0000FF50 GetAllUsersProfileDirectoryA
-        130   17 000100B0 GetAllUsersProfileDirectoryW
-        131   18 00002FE0 GetAppContainerFolderPath
-        132   19 00003120 GetAppContainerRegistryLocation
-        133   1A 0000E340 GetAppliedGPOListA
-        134   1B 0000E350 GetAppliedGPOListW
-        136   1C 000100D0 GetDefaultUserProfileDirectoryA
-        138   1D 00010230 GetDefaultUserProfileDirectoryW
-        140   1E 0000E360 GetGPOListA
-        141   1F 0000E370 GetGPOListW
-        142   20 0000E380 GetNextFgPolicyRefreshInfo
-        143   21 0000E390 GetPreviousFgPolicyRefreshInfo
-        144   22 00002810 GetProfileType
-        145   23 00010250 GetProfilesDirectoryA
-        146   24 000033A0 GetProfilesDirectoryW
-        147   25 000103B0 GetUserProfileDirectoryA
-        148   26 000013A0 GetUserProfileDirectoryW
-        149   27 0000E3A0 HasPolicyForegroundProcessingCompleted
-        150   28 000033D0 LeaveCriticalPolicySection
-        151   29 0000F6B0 LoadProfileExtender
-        152   2A 00010520 LoadUserProfileA
-        153   2B 00001820 LoadUserProfileW
-        154   2C 0000E800 ProcessGroupPolicyCompleted
-        155   2D 0000E850 ProcessGroupPolicyCompletedEx
-        156   2E 0000E3B0 RefreshPolicy
-        157   2F 0000E3C0 RefreshPolicyEx
-        158   30 00003380 RegisterGPNotification
-        159   31 0000E8B0 RsopAccessCheckByType
-        160   32 0000E970 RsopFileAccessCheck
-        105   33 0000E2D0 RsopLoggingEnabled
-        161   34 0000E9E0 RsopResetPolicySettingStatus
-        162   35 0000EA30 RsopSetPolicySettingStatus
-        163   36 00003390 UnloadProfileExtender
-        164   37 000016D0 UnloadUserProfile
-        165   38 000033C0 UnregisterGPNotification
-        166   39 0000E3D0 WaitForMachinePolicyForegroundProcessing
-        167   3A 0000E3E0 WaitForUserPolicyForegroundProcessing
-        104      0000E6D0 [NONAME]
-        122      0000E710 [NONAME]
-        135      000113E0 [NONAME]
-        137      0000E5B0 [NONAME]
-        139      0000E610 [NONAME]
-        175      000111C0 [NONAME]
-        202      0000D5C0 [NONAME]
-        203      0000D190 [NONAME]
-        206      0000E580 [NONAME]
-        207      000059C0 [NONAME]
-        208      0000F7B0 [NONAME]
-        209      00003690 [NONAME]
-        210      0000EAA0 [NONAME]
-        211      0000E7C0 [NONAME]
-        212      00003300 [NONAME]
-        213      00001100 [NONAME]
-        214      000034D0 [NONAME]
-        217      000015F0 [NONAME]
-        218      0000E770 [NONAME]
-        219      0000D840 [NONAME]
-
-  Summary
-
-        1000 .data
-        1000 .didat
-        1000 .pdata
-        7000 .rdata
-        1000 .reloc
-        3000 .rsrc
-       11000 .text
-Microsoft (R) COFF/PE Dumper Version 14.36.32538.0
-Copyright (C) Microsoft Corporation.  All rights reserved.
-
-
-Dump of file 10.0.10240\version.dll
-
-File Type: DLL
-
-  Section contains the following exports for VERSION.dll
-
-    00000000 characteristics
-    559F3095 time date stamp Thu Jul  9 19:40:21 2015
-        0.00 version
-           1 ordinal base
-          17 number of functions
-          17 number of names
-
-    ordinal hint RVA      name
-
-          1    0 00001DB0 GetFileVersionInfoA
-          2    1 00002160 GetFileVersionInfoByHandle
-          3    2 00001DC0 GetFileVersionInfoExA
-          4    3 00001040 GetFileVersionInfoExW
-          5    4 00001010 GetFileVersionInfoSizeA
-          6    5 00001DD0 GetFileVersionInfoSizeExA
-          7    6 00001050 GetFileVersionInfoSizeExW
-          8    7 00001060 GetFileVersionInfoSizeW
-          9    8 00001070 GetFileVersionInfoW
-         10    9 00001DE0 VerFindFileA
-         11    A 00002330 VerFindFileW
-         12    B 00001DF0 VerInstallFileA
-         13    C 00003020 VerInstallFileW
-         14    D          VerLanguageNameA (forwarded to KERNEL32.VerLanguageNameA)
-         15    E          VerLanguageNameW (forwarded to KERNEL32.VerLanguageNameW)
-         16    F 00001020 VerQueryValueA
-         17   10 00001030 VerQueryValueW
-
-  Summary
-
-        1000 .data
-        1000 .pdata
-        2000 .rdata
-        1000 .reloc
-        1000 .rsrc
-        3000 .text
-Microsoft (R) COFF/PE Dumper Version 14.36.32538.0
-Copyright (C) Microsoft Corporation.  All rights reserved.
-
-
-Dump of file 10.0.10240\winhttp.dll
-
-File Type: DLL
-
-  Section contains the following exports for WINHTTP.dll
-
-    00000000 characteristics
-    5C5A3D83 time date stamp Tue Feb  5 17:50:59 2019
-        0.00 version
-           1 ordinal base
-          54 number of functions
-          54 number of names
-
-    ordinal hint RVA      name
-
-          1    0 00073EA0 DllCanUnloadNow
-          2    1 00073EC0 DllGetClassObject
-          3    2 00067080 Private1
-          4    3 000371B0 SvchostPushServiceGlobals
-          5    4 00017360 WinHttpAddRequestHeaders
-          6    5 000371C0 WinHttpAutoProxySvcMain
-          7    6 00041C80 WinHttpCheckPlatform
-          8    7 00015860 WinHttpCloseHandle
-          9    8 00019550 WinHttpConnect
-         10    9 00069590 WinHttpConnectionDeleteProxyInfo
-         11    A 00069610 WinHttpConnectionFreeNameList
-         12    B 00069660 WinHttpConnectionFreeProxyInfo
-         13    C 000696B0 WinHttpConnectionFreeProxyList
-         14    D 00069700 WinHttpConnectionGetNameList
-         15    E 00069760 WinHttpConnectionGetProxyInfo
-         16    F 000697C0 WinHttpConnectionGetProxyList
-         17   10 00069820 WinHttpConnectionSetProxyInfo
-         18   11 00007530 WinHttpCrackUrl
-         19   12 00024CA0 WinHttpCreateProxyResolver
-         20   13 00006CA0 WinHttpCreateUrl
-         21   14 0006A4D0 WinHttpDetectAutoProxyConfigUrl
-         22   15 000305A0 WinHttpFreeProxyResult
-         23   16 00025DE0 WinHttpGetDefaultProxyConfiguration
-         24   17 000255D0 WinHttpGetIEProxyConfigForCurrentUser
-         25   18 00024330 WinHttpGetProxyForUrl
-         26   19 00024ED0 WinHttpGetProxyForUrlEx
-         27   1A 0006A730 WinHttpGetProxyResult
-         28   1B 0006A8A0 WinHttpGetTunnelSocket
-         29   1C 0001BC40 WinHttpOpen
-         30   1D 00019C10 WinHttpOpenRequest
-         31   1E 00068410 WinHttpProbeConnectivity
-         32   1F 0006AE90 WinHttpQueryAuthSchemes
-         33   20 000268D0 WinHttpQueryDataAvailable
-         34   21 00016D90 WinHttpQueryHeaders
-         35   22 00001900 WinHttpQueryOption
-         36   23 00014200 WinHttpReadData
-         37   24 00018C80 WinHttpReceiveResponse
-         38   25 000352A0 WinHttpResetAutoProxy
-         39   26 00068480 WinHttpSaveProxyCredentials
-         40   27 00018330 WinHttpSendRequest
-         41   28 0006B070 WinHttpSetCredentials
-         42   29 00069090 WinHttpSetDefaultProxyConfiguration
-         43   2A 00017A20 WinHttpSetOption
-         44   2B 00017D90 WinHttpSetStatusCallback
-         45   2C 0001C2F0 WinHttpSetTimeouts
-         46   2D 000252C0 WinHttpTimeFromSystemTime
-         47   2E 00033080 WinHttpTimeToSystemTime
-         48   2F 00076B10 WinHttpWebSocketClose
-         49   30 00076F30 WinHttpWebSocketCompleteUpgrade
-         50   31 00076C10 WinHttpWebSocketQueryCloseStatus
-         51   32 00077950 WinHttpWebSocketReceive
-         52   33 000780C0 WinHttpWebSocketSend
-         53   34 000784F0 WinHttpWebSocketShutdown
-         54   35 00016180 WinHttpWriteData
-
-  Summary
-
-        2000 .data
-        1000 .didat
-        9000 .pdata
-       21000 .rdata
-        1000 .reloc
-        5000 .rsrc
-       9C000 .text
-        6000 .wpp_sf
-Microsoft (R) COFF/PE Dumper Version 14.36.32538.0
-Copyright (C) Microsoft Corporation.  All rights reserved.
-
-
-Dump of file 10.0.10240\winmm.dll
-
-File Type: DLL
-
-  Section contains the following exports for WINMM.dll
-
-    00000000 characteristics
-    5A978C09 time date stamp Wed Feb 28 21:13:45 2018
-        0.00 version
-           2 ordinal base
-         181 number of functions
-         180 number of names
-
-    ordinal hint RVA      name
-
-          4    0 00005B60 CloseDriver
-          5    1 00005B70 DefDriverProc
-          6    2 00005B80 DriverCallback
-          7    3 00005B90 DrvGetModuleHandle
-          8    4 00005BA0 GetDriverModuleHandle
-          9    5 00005BC0 OpenDriver
-         10    6 00005BB0 PlaySound
-         11    7 0000E930 PlaySoundA
-         12    8 00001900 PlaySoundW
-         13    9 00005BD0 SendDriverMessage
-         14    A 0000FCF0 WOWAppExit
-         15    B 00005BE0 auxGetDevCapsA
-         16    C 00005BF0 auxGetDevCapsW
-         17    D 00005C00 auxGetNumDevs
-         18    E 00005C10 auxGetVolume
-         19    F 00005C20 auxOutMessage
-         20   10 00005C30 auxSetVolume
-         21   11 00005C40 joyConfigChanged
-         22   12 00005C50 joyGetDevCapsA
-         23   13 00005C60 joyGetDevCapsW
-         24   14 00005C70 joyGetNumDevs
-         25   15 00005C90 joyGetPos
-         26   16 00005C80 joyGetPosEx
-         27   17 00005CA0 joyGetThreshold
-         28   18 00005CB0 joyReleaseCapture
-         29   19 00005CC0 joySetCapture
-         30   1A 00005CD0 joySetThreshold
-         31   1B 0000C200 mciDriverNotify
-         32   1C 0000C220 mciDriverYield
-          3   1D 00006EA0 mciExecute
-         33   1E 0000A130 mciFreeCommandResource
-         34   1F 0000C690 mciGetCreatorTask
-         35   20 0000C700 mciGetDeviceIDA
-         36   21 0000C750 mciGetDeviceIDFromElementIDA
-         37   22 0000C7A0 mciGetDeviceIDFromElementIDW
-         38   23 0000C8A0 mciGetDeviceIDW
-         39   24 0000C8D0 mciGetDriverData
-         40   25 00008370 mciGetErrorStringA
-         41   26 00008490 mciGetErrorStringW
-         42   27 0000C970 mciGetYieldProc
-         43   28 0000A320 mciLoadCommandResource
-         44   29 00008790 mciSendCommandA
-         45   2A 00009020 mciSendCommandW
-         46   2B 00009150 mciSendStringA
-         47   2C 00009360 mciSendStringW
-         48   2D 0000CF60 mciSetDriverData
-         49   2E 0000D010 mciSetYieldProc
-         50   2F 00005CE0 midiConnect
-         51   30 00005CF0 midiDisconnect
-         52   31 00005D00 midiInAddBuffer
-         53   32 00005D10 midiInClose
-         54   33 00005D20 midiInGetDevCapsA
-         55   34 00005D30 midiInGetDevCapsW
-         56   35 00005D40 midiInGetErrorTextA
-         57   36 00005D50 midiInGetErrorTextW
-         58   37 00005D60 midiInGetID
-         59   38 00005D70 midiInGetNumDevs
-         60   39 00005D80 midiInMessage
-         61   3A 00005D90 midiInOpen
-         62   3B 00005DA0 midiInPrepareHeader
-         63   3C 00005DB0 midiInReset
-         64   3D 00005DC0 midiInStart
-         65   3E 00005DD0 midiInStop
-         66   3F 00005DE0 midiInUnprepareHeader
-         67   40 00005DF0 midiOutCacheDrumPatches
-         68   41 00005E00 midiOutCachePatches
-         69   42 00005E10 midiOutClose
-         70   43 00005E20 midiOutGetDevCapsA
-         71   44 00005E30 midiOutGetDevCapsW
-         72   45 00005E40 midiOutGetErrorTextA
-         73   46 00005E50 midiOutGetErrorTextW
-         74   47 00005E60 midiOutGetID
-         75   48 00005E70 midiOutGetNumDevs
-         76   49 00005E80 midiOutGetVolume
-         77   4A 00005E90 midiOutLongMsg
-         78   4B 00005EA0 midiOutMessage
-         79   4C 00005EB0 midiOutOpen
-         80   4D 00005EC0 midiOutPrepareHeader
-         81   4E 00005ED0 midiOutReset
-         82   4F 00005EE0 midiOutSetVolume
-         83   50 00005EF0 midiOutShortMsg
-         84   51 00005F00 midiOutUnprepareHeader
-         85   52 00005F10 midiStreamClose
-         86   53 00005F20 midiStreamOpen
-         87   54 00005F30 midiStreamOut
-         88   55 00005F40 midiStreamPause
-         89   56 00005F50 midiStreamPosition
-         90   57 00005F60 midiStreamProperty
-         91   58 00005F70 midiStreamRestart
-         92   59 00005F80 midiStreamStop
-         93   5A 00005F90 mixerClose
-         94   5B 00005FA0 mixerGetControlDetailsA
-         95   5C 00005FB0 mixerGetControlDetailsW
-         96   5D 00005FC0 mixerGetDevCapsA
-         97   5E 00005FD0 mixerGetDevCapsW
-         98   5F 00005FE0 mixerGetID
-         99   60 00005FF0 mixerGetLineControlsA
-        100   61 00006000 mixerGetLineControlsW
-        101   62 00006010 mixerGetLineInfoA
-        102   63 00006020 mixerGetLineInfoW
-        103   64 00006030 mixerGetNumDevs
-        104   65 00006040 mixerMessage
-        105   66 00006050 mixerOpen
-        106   67 00006060 mixerSetControlDetails
-        107   68 00006070 mmDrvInstall
-        108   69 00006080 mmGetCurrentTask
-        109   6A 00006090 mmTaskBlock
-        110   6B 000060A0 mmTaskCreate
-        111   6C 000060B0 mmTaskSignal
-        112   6D 000060C0 mmTaskYield
-        113   6E 000060D0 mmioAdvance
-        114   6F 000060E0 mmioAscend
-        115   70 000060F0 mmioClose
-        116   71 00006100 mmioCreateChunk
-        117   72 00006110 mmioDescend
-        118   73 00006120 mmioFlush
-        119   74 00006130 mmioGetInfo
-        120   75 00006140 mmioInstallIOProcA
-        121   76 00006150 mmioInstallIOProcW
-        122   77 00006160 mmioOpenA
-        123   78 00006170 mmioOpenW
-        124   79 00006180 mmioRead
-        125   7A 00006190 mmioRenameA
-        126   7B 000061A0 mmioRenameW
-        127   7C 000061B0 mmioSeek
-        128   7D 000061C0 mmioSendMessage
-        129   7E 000061D0 mmioSetBuffer
-        130   7F 000061E0 mmioSetInfo
-        131   80 000061F0 mmioStringToFOURCCA
-        132   81 00006200 mmioStringToFOURCCW
-        133   82 00006210 mmioWrite
-        134   83 0000FEC0 mmsystemGetVersion
-        135   84 0000EE00 sndPlaySoundA
-        136   85 0000EE10 sndPlaySoundW
-        137   86 00003070 timeBeginPeriod
-        138   87 00003080 timeEndPeriod
-        139   88 00006220 timeGetDevCaps
-        140   89 00006230 timeGetSystemTime
-        141   8A 000030A0 timeGetTime
-        142   8B 00002F70 timeKillEvent
-        143   8C 00002B80 timeSetEvent
-        144   8D 00006240 waveInAddBuffer
-        145   8E 00006250 waveInClose
-        146   8F 00006260 waveInGetDevCapsA
-        147   90 00006270 waveInGetDevCapsW
-        148   91 00006280 waveInGetErrorTextA
-        149   92 00006290 waveInGetErrorTextW
-        150   93 000062A0 waveInGetID
-        151   94 000062B0 waveInGetNumDevs
-        152   95 000062C0 waveInGetPosition
-        153   96 000062D0 waveInMessage
-        154   97 000062E0 waveInOpen
-        155   98 000062F0 waveInPrepareHeader
-        156   99 00006300 waveInReset
-        157   9A 00006310 waveInStart
-        158   9B 00006320 waveInStop
-        159   9C 00006330 waveInUnprepareHeader
-        160   9D 00006340 waveOutBreakLoop
-        161   9E 00006350 waveOutClose
-        162   9F 00006360 waveOutGetDevCapsA
-        163   A0 00006370 waveOutGetDevCapsW
-        164   A1 00006380 waveOutGetErrorTextA
-        165   A2 00006390 waveOutGetErrorTextW
-        166   A3 000063A0 waveOutGetID
-        167   A4 000063B0 waveOutGetNumDevs
-        168   A5 000063C0 waveOutGetPitch
-        169   A6 000063D0 waveOutGetPlaybackRate
-        170   A7 000063E0 waveOutGetPosition
-        171   A8 000063F0 waveOutGetVolume
-        172   A9 00006400 waveOutMessage
-        173   AA 00006410 waveOutOpen
-        174   AB 00006420 waveOutPause
-        175   AC 00006430 waveOutPrepareHeader
-        176   AD 00006440 waveOutReset
-        177   AE 00006450 waveOutRestart
-        178   AF 00006460 waveOutSetPitch
-        179   B0 00006470 waveOutSetPlaybackRate
-        180   B1 00006480 waveOutSetVolume
-        181   B2 00006490 waveOutUnprepareHeader
-        182   B3 000064A0 waveOutWrite
-          2      00005BB0 [NONAME]
-
-  Summary
-
-        2000 .data
-        1000 .didat
-        1000 .guids
-        1000 .pdata
-        7000 .rdata
-        1000 .reloc
-        5000 .rsrc
-       10000 .text
-Microsoft (R) COFF/PE Dumper Version 14.36.32538.0
-Copyright (C) Microsoft Corporation.  All rights reserved.
-
-
-Dump of file 10.0.10240\winspool.drv
-
-File Type: DLL
-
-  Section contains the following exports for WINSPOOL.DRV
-
-    00000000 characteristics
-    64098C2B time date stamp Wed Mar  8 23:35:07 2023
-        0.00 version
-         100 ordinal base
-         269 number of functions
-         197 number of names
-
-    ordinal hint RVA      name
-
-        101    0 00018F90 ADVANCEDSETUPDIALOG
-        116    1 00024150 AbortPrinter
-        117    2 0001A2C0 AddFormA
-        118    3 000243A0 AddFormW
-        119    4 0001A390 AddJobA
-        120    5 00024570 AddJobW
-        121    6 0001A430 AddMonitorA
-        122    7 00024990 AddMonitorW
-        123    8 0001A610 AddPortA
-        124    9 0001A6C0 AddPortExA
-        125    A 00024BC0 AddPortExW
-        126    B 00024CC0 AddPortW
-        127    C 0001A8A0 AddPrintProcessorA
-        128    D 00024D20 AddPrintProcessorW
-        129    E 0001A9D0 AddPrintProvidorA
-        130    F 00024E80 AddPrintProvidorW
-        131   10 0001AAF0 AddPrinterA
-        132   11 0001AC00 AddPrinterConnection2A
-        133   12 00037B40 AddPrinterConnection2W
-        134   13 0001AC20 AddPrinterConnectionA
-        135   14 00037DF0 AddPrinterConnectionW
-        136   15 0001AC80 AddPrinterDriverA
-        137   16 0001ACE0 AddPrinterDriverExA
-        138   17 00025000 AddPrinterDriverExW
-        139   18 00025750 AddPrinterDriverW
-        140   19 0000EE60 AddPrinterW
-        141   1A 0001AF00 AdvancedDocumentPropertiesA
-        142   1B 000257B0 AdvancedDocumentPropertiesW
-        102   1C 00018F90 AdvancedSetupDialog
-        143   1D 00003080 ClosePrinter
-        144   1E 00025850 CloseSpoolFileHandle
-        145   1F 00025990 CommitSpoolData
-        146   20 0001B0E0 ConfigurePortA
-        147   21 00025B30 ConfigurePortW
-        148   22 00026210 ConnectToPrinterDlg
-        103   23 00019540 ConvertAnsiDevModeToUnicodeDevmode
-        104   24 00019600 ConvertUnicodeDevModeToAnsiDevmode
-        149   25 000388C0 CorePrinterDriverInstalledA
-        150   26 000389B0 CorePrinterDriverInstalledW
-        151   27 000384A0 CreatePrintAsyncNotifyChannel
-        152   28 00026490 CreatePrinterIC
-        153   29 0001B9F0 DEVICECAPABILITIES
-        105   2A 000198B0 DEVICEMODE
-        154   2B 0001B190 DeleteFormA
-        155   2C 00026640 DeleteFormW
-        156   2D 00039880 DeleteJobNamedProperty
-        157   2E 0001B200 DeleteMonitorA
-        158   2F 000267F0 DeleteMonitorW
-        159   30 0001B390 DeletePortA
-        160   31 000269D0 DeletePortW
-        161   32 0001B440 DeletePrintProcessorA
-        162   33 00026A30 DeletePrintProcessorW
-        163   34 0001B530 DeletePrintProvidorA
-        164   35 00026B70 DeletePrintProvidorW
-        165   36 0000EB60 DeletePrinter
-        166   37 0001B610 DeletePrinterConnectionA
-        167   38 00037E40 DeletePrinterConnectionW
-        168   39 0001B670 DeletePrinterDataA
-        169   3A 0001B6F0 DeletePrinterDataExA
-        170   3B 00026C90 DeletePrinterDataExW
-        171   3C 00026E20 DeletePrinterDataW
-        172   3D 0001B7A0 DeletePrinterDriverA
-        173   3E 0001B880 DeletePrinterDriverExA
-        174   3F 00026FA0 DeletePrinterDriverExW
-        175   40 00038B50 DeletePrinterDriverPackageA
-        176   41 00038C30 DeletePrinterDriverPackageW
-        177   42 00027100 DeletePrinterDriverW
-        178   43 00027240 DeletePrinterIC
-        179   44 0001B970 DeletePrinterKeyA
-        180   45 00027350 DeletePrinterKeyW
-        181   46 000274D0 DevQueryPrint
-        182   47 00027620 DevQueryPrintEx
-        183   48 0001B9F0 DeviceCapabilities
-        184   49 0001B9F0 DeviceCapabilitiesA
-        185   4A 00027760 DeviceCapabilitiesW
-        106   4B 000198B0 DeviceMode
-        186   4C 0002B900 DevicePropertySheets
-        107   4D 00005EE0 DocumentEvent
-        187   4E 0001BD00 DocumentPropertiesA
-        188   4F 0000B780 DocumentPropertiesW
-        189   50 0000BC70 DocumentPropertySheets
-        190   51 0001CCF0 EXTDEVICEMODE
-        191   52 000053F0 EndDocPrinter
-        192   53 000057F0 EndPagePrinter
-        193   54 0001BE80 EnumFormsA
-        194   55 00005940 EnumFormsW
-        195   56 00039A10 EnumJobNamedProperties
-        196   57 0001BF70 EnumJobsA
-        197   58 000063C0 EnumJobsW
-        198   59 0001C100 EnumMonitorsA
-        199   5A 000277D0 EnumMonitorsW
-        200   5B 0001C2E0 EnumPortsA
-        225   5C 0000ED10 EnumPortsW
-        232   5D 0001C3F0 EnumPrintProcessorDatatypesA
-        235   5E 00027AA0 EnumPrintProcessorDatatypesW
-        236   5F 0001C510 EnumPrintProcessorsA
-        237   60 00027C30 EnumPrintProcessorsW
-        238   61 0001C630 EnumPrinterDataA
-        239   62 0001C730 EnumPrinterDataExA
-        240   63 00027DE0 EnumPrinterDataExW
-        241   64 00028010 EnumPrinterDataW
-        242   65 0001C840 EnumPrinterDriversA
-        243   66 0000DFA0 EnumPrinterDriversW
-        244   67 0001CA50 EnumPrinterKeyA
-        245   68 00028260 EnumPrinterKeyW
-        246   69 0001CB90 EnumPrintersA
-        247   6A 0000B5E0 EnumPrintersW
-        248   6B 0001CCF0 ExtDeviceMode
-        249   6C 0000DAC0 FindClosePrinterChangeNotification
-        263   6D 0000AD70 FindFirstPrinterChangeNotification
-        264   6E 0000BA60 FindNextPrinterChangeNotification
-        265   6F 000284A0 FlushPrinter
-        266   70 00039CD0 FreePrintNamedPropertyArray
-        267   71 00039DB0 FreePrintPropertyValue
-        268   72 0000DD10 FreePrinterNotifyInfo
-        269   73 00038DA0 GetCorePrinterDriversA
-        270   74 00039000 GetCorePrinterDriversW
-        201   75 0001D030 GetDefaultPrinterA
-        203   76 0000D130 GetDefaultPrinterW
-        271   77 0001D0E0 GetFormA
-        272   78 0000A320 GetFormW
-        273   79 0001D1C0 GetJobA
-        274   7A 00039E40 GetJobNamedPropertyValue
-        275   7B 00028850 GetJobW
-        276   7C 000294F0 GetPrintExecutionData
-        277   7D 000295A0 GetPrintOutputInfo
-        278   7E 0001D2E0 GetPrintProcessorDirectoryA
-        279   7F 00029980 GetPrintProcessorDirectoryW
-        280   80 0001D3D0 GetPrinterA
-        281   81 0001D530 GetPrinterDataA
-        282   82 0001D860 GetPrinterDataExA
-        283   83 0000E9B0 GetPrinterDataExW
-        284   84 00003A50 GetPrinterDataW
-        285   85 0001AC00 GetPrinterDriver2A
-        286   86 00029B20 GetPrinterDriver2W
-        287   87 00009FE0 GetPrinterDriverA
-        288   88 0001DC10 GetPrinterDriverDirectoryA
-        289   89 000115A0 GetPrinterDriverDirectoryW
-        290   8A 000391E0 GetPrinterDriverPackagePathA
-        291   8B 000393D0 GetPrinterDriverPackagePathW
-        292   8C 0000C990 GetPrinterDriverW
-        293   8D 0000C390 GetPrinterW
-        294   8E 00029B30 GetSpoolFileHandle
-        295   8F 00039590 InstallPrinterDriverFromPackageA
-        296   90 000110B0 InstallPrinterDriverFromPackageW
-        297   91 0001DD00 IsValidDevmodeA
-        298   92 00009F50 IsValidDevmodeW
-        299   93 0001AC00 OpenPrinter2A
-        300   94 000032A0 OpenPrinter2W
-        301   95 0001DD50 OpenPrinterA
-        302   96 00003240 OpenPrinterW
-        108   97 0003BA20 PerfClose
-        109   98 0003BA30 PerfCollect
-        110   99 0003BB70 PerfOpen
-        303   9A 0002A380 PlayGdiScriptOnPrinterIC
-        304   9B 0001DE60 PrinterMessageBoxA
-        305   9C 0002A4B0 PrinterMessageBoxW
-        306   9D 0002A4C0 PrinterProperties
-        111   9E 00022570 QueryColorProfile
-        112   9F 00022740 QueryRemoteFonts
-        113   A0 00022870 QuerySpoolMode
-        307   A1 00005B90 ReadPrinter
-        308   A2 00007DC0 RegisterForPrintAsyncNotifications
-        309   A3 00038700 ReportJobProcessingProgress
-        310   A4 0001E050 ResetPrinterA
-        311   A5 00006610 ResetPrinterW
-        312   A6 0002A500 ScheduleJob
-        313   A7 00005D40 SeekPrinter
-        202   A8 0001E130 SetDefaultPrinterA
-        204   A9 0000F970 SetDefaultPrinterW
-        314   AA 0001E190 SetFormA
-        315   AB 0002A8B0 SetFormW
-        316   AC 0001E290 SetJobA
-        317   AD 000051D0 SetJobNamedProperty
-        318   AE 0002AA90 SetJobW
-        319   AF 0001E410 SetPortA
-        320   B0 0002AD50 SetPortW
-        321   B1 0001E520 SetPrinterA
-        322   B2 0001E790 SetPrinterDataA
-        323   B3 0001E890 SetPrinterDataExA
-        324   B4 0002AEC0 SetPrinterDataExW
-        325   B5 0000E880 SetPrinterDataW
-        326   B6 0000E270 SetPrinterW
-        327   B7 0002B0A0 SplDriverUnloadComplete
-        114   B8 000234E0 SpoolerDevQueryPrintW
-        328   B9 000113D0 SpoolerPrinterEvent
-        329   BA 0001E9D0 StartDocDlgA
-        115   BB 00023860 StartDocDlgW
-        330   BC 0001EBA0 StartDocPrinterA
-        331   BD 00006AB0 StartDocPrinterW
-        332   BE 00005610 StartPagePrinter
-        333   BF 00007EF0 UnRegisterForPrintAsyncNotifications
-        334   C0 000396C0 UploadPrinterDriverPackageA
-        335   C1 00010DC0 UploadPrinterDriverPackageW
-        336   C2 0002E070 WaitForPrinterChange
-        337   C3 00006B50 WritePrinter
-        339   C4 0002B620 XcvDataW
-        100      00028430 [NONAME]
-        205      0000A960 [NONAME]
-        206      0001A500 [NONAME]
-        207      00024AF0 [NONAME]
-        208      0001B2E0 [NONAME]
-        209      00026930 [NONAME]
-        210      0001C210 [NONAME]
-        211      00027980 [NONAME]
-        212      0000C180 [NONAME]
-        213      0000C270 [NONAME]
-        214      0000C090 [NONAME]
-        215      00011750 [NONAME]
-        216      0001DF30 [NONAME]
-        217      00031FC0 [NONAME]
-        218      0000A7C0 [NONAME]
-        219      00021EB0 [NONAME]
-        220      00021C30 [NONAME]
-        221      00021710 [NONAME]
-        222      0000E170 [NONAME]
-        223      0002C6F0 [NONAME]
-        224      00028450 [NONAME]
-        226      00013750 [NONAME]
-        227      00036600 [NONAME]
-        228      000365F0 [NONAME]
-        229      00021840 [NONAME]
-        230      00021D60 [NONAME]
-        231      00021FE0 [NONAME]
-        233      00019B70 [NONAME]
-        234      00020840 [NONAME]
-        250      000371B0 [NONAME]
-        251      00007F60 [NONAME]
-        252      00020100 [NONAME]
-        253      00002CC0 [NONAME]
-        254      00002C60 [NONAME]
-        255      000202C0 [NONAME]
-        256      0000AA00 [NONAME]
-        257      0002EED0 [NONAME]
-        258      0003B5E0 [NONAME]
-        259      0003B720 [NONAME]
-        260      0003B500 [NONAME]
-        261      00029C90 [NONAME]
-        262      0002A220 [NONAME]
-        338      0002EC90 [NONAME]
-        368      00038210 [NONAME]
-
-  Summary
-
-        2000 .data
-        1000 .didat
-        5000 .pdata
-       1E000 .rdata
-        1000 .reloc
-       16000 .rsrc
-       48000 .text
-Microsoft (R) COFF/PE Dumper Version 14.36.32538.0
-Copyright (C) Microsoft Corporation.  All rights reserved.
-
-
-Dump of file 10.0.10240\wintrust.dll
-
-File Type: DLL
-
-  Section contains the following exports for WINTRUST.dll
-
-    00000000 characteristics
-    644C9A48 time date stamp Fri Apr 28 21:17:12 2023
-        0.00 version
-           1 ordinal base
-         148 number of functions
-         148 number of names
-
-    ordinal hint RVA      name
-
-         12    0 0002D2B0 AddPersonalTrustDBPages
-         13    1 0001ABA0 CatalogCompactHashDatabase
-          1    2 00027180 ComputeFirstPageHash
-         14    3 0002DD00 ConfigCiFinalPolicy
-         15    4 00018AC0 CryptCATAdminAcquireContext
-         16    5 00007020 CryptCATAdminAcquireContext2
-         17    6 00027E60 CryptCATAdminAddCatalog
-         18    7 000070D0 CryptCATAdminCalcHashFromFileHandle
-         19    8 00006FD0 CryptCATAdminCalcHashFromFileHandle2
-         20    9 00016C70 CryptCATAdminEnumCatalogFromHash
-         21    A 00028150 CryptCATAdminPauseServiceForBackup
-         22    B 00018750 CryptCATAdminReleaseCatalogContext
-         23    C 00014220 CryptCATAdminReleaseContext
-         24    D 00028190 CryptCATAdminRemoveCatalog
-         25    E 000281E0 CryptCATAdminResolveCatalogPath
-         26    F 00017D70 CryptCATAllocSortedMemberInfo
-         27   10 00004520 CryptCATCDFClose
-         28   11 00028490 CryptCATCDFEnumAttributes
-         29   12 00003B40 CryptCATCDFEnumAttributesWithCDFTag
-         30   13 000021B0 CryptCATCDFEnumCatAttributes
-         31   14 000284B0 CryptCATCDFEnumMembers
-         32   15 00028510 CryptCATCDFEnumMembersByCDFTag
-         33   16 000023D0 CryptCATCDFEnumMembersByCDFTagEx
-         34   17 00002B20 CryptCATCDFOpen
-         35   18 00018680 CryptCATCatalogInfoFromContext
-         36   19 0000E280 CryptCATClose
-         37   1A 00015770 CryptCATEnumerateAttr
-         38   1B 00015670 CryptCATEnumerateCatAttr
-         39   1C 000278F0 CryptCATEnumerateMember
-         40   1D 00018A40 CryptCATFreeSortedMemberInfo
-         41   1E 000156E0 CryptCATGetAttrInfo
-         42   1F 000155F0 CryptCATGetCatAttrInfo
-         43   20 000279F0 CryptCATGetMemberInfo
-         44   21 00014A80 CryptCATHandleFromStore
-         45   22 00013B70 CryptCATOpen
-         46   23 00027AE0 CryptCATPersistStore
-         47   24 00027B20 CryptCATPutAttrInfo
-         48   25 000038C0 CryptCATPutCatAttrInfo
-         49   26 00003580 CryptCATPutMemberInfo
-         50   27 00014A80 CryptCATStoreFromHandle
-          2   28 000278B0 CryptCATVerifyMember
-         51   29 0000F150 CryptSIPCreateIndirectData
-         52   2A 0000EFF0 CryptSIPGetCaps
-          3   2B 00029050 CryptSIPGetInfo
-          4   2C 00029040 CryptSIPGetRegWorkingFlags
-         53   2D 00029090 CryptSIPGetSealedDigest
-         54   2E 0000E650 CryptSIPGetSignedDataMsg
-         55   2F 00001FF0 CryptSIPPutSignedDataMsg
-         56   30 00001F40 CryptSIPRemoveSignedDataMsg
-         57   31 0000EE60 CryptSIPVerifyIndirectData
-         58   32 00023160 DllRegisterServer
-         59   33 000231C0 DllUnregisterServer
-         60   34 000151A0 DriverCleanupPolicy
-         61   35 00014D60 DriverFinalPolicy
-         62   36 000152A0 DriverInitializePolicy
-         63   37 0002F900 FindCertsByIssuer
-          5   38 0002C530 GenericChainCertificateTrust
-          6   39 0002C860 GenericChainFinalProv
-         64   3A 0002E310 GetAuthenticodeSha256Hash
-          7   3B 00006A00 HTTPSCertificateTrust
-         65   3C 000068E0 HTTPSFinalProv
-         66   3D 00028740 IsCatalogFile
-         67   3E 00013D90 MsCatConstructHashTag
-         68   3F 00028950 MsCatFreeHashTag
-         69   40 0002FCC0 OfficeCleanupPolicy
-         70   41 0002FCC0 OfficeInitializePolicy
-         71   42 0002D2D0 OpenPersonalTrustDBDialog
-         72   43 0002D2E0 OpenPersonalTrustDBDialogEx
-         73   44 0000CA60 SoftpubAuthenticode
-         74   45 000149D0 SoftpubCheckCert
-         75   46 0000B070 SoftpubCleanup
-          8   47 0002D020 SoftpubDefCertInit
-         76   48 0002FF70 SoftpubDllRegisterServer
-         77   49 000301E0 SoftpubDllUnregisterServer
-         78   4A 00030DE0 SoftpubDumpStructure
-          9   4B 0002D120 SoftpubFreeDefUsageCallData
-         79   4C 0000AEE0 SoftpubInitialize
-         10   4D 0002D170 SoftpubLoadDefUsageCallData
-         80   4E 0000A2B0 SoftpubLoadMessage
-         81   4F 00009C80 SoftpubLoadSignature
-         82   50 0000D7F0 TrustDecode
-         83   51 000254E0 TrustFindIssuerCertificate
-         84   52 000256D0 TrustFreeDecode
-         85   53 00025700 TrustIsCertificateSelfSigned
-         86   54 00025780 TrustOpenStores
-         87   55 00005E00 WTGetSignatureInfo
-         88   56 00026160 WTHelperCertCheckValidSignature
-         11   57 00022E40 WTHelperCertFindIssuerCertificate
-         89   58 00022E80 WTHelperCertIsSelfSigned
-         90   59 00026180 WTHelperCheckCertUsage
-         91   5A 000262C0 WTHelperGetAgencyInfo
-         92   5B 000263A0 WTHelperGetFileHandle
-         93   5C 00025F30 WTHelperGetFileHash
-         94   5D 000263D0 WTHelperGetFileName
-         95   5E 00026460 WTHelperGetKnownUsages
-         96   5F 00006DF0 WTHelperGetProvCertFromChain
-         97   60 000154A0 WTHelperGetProvPrivateDataFromChain
-         98   61 0000DC00 WTHelperGetProvSignerFromChain
-         99   62 00026500 WTHelperIsChainedToMicrosoft
-        100   63 00026680 WTHelperIsChainedToMicrosoftFromStateData
-        101   64 00026750 WTHelperIsInRootStore
-        102   65 00026850 WTHelperOpenKnownStores
-        103   66 00014A80 WTHelperProvDataFromStateData
-        104   67 00017FC0 WVTAsn1CatMemberInfo2Decode
-        105   68 000040B0 WVTAsn1CatMemberInfo2Encode
-        106   69 000237E0 WVTAsn1CatMemberInfoDecode
-        107   6A 000238B0 WVTAsn1CatMemberInfoEncode
-        108   6B 00018070 WVTAsn1CatNameValueDecode
-        109   6C 00003D50 WVTAsn1CatNameValueEncode
-        110   6D 00023910 WVTAsn1IntentToSealAttributeDecode
-        111   6E 000239B0 WVTAsn1IntentToSealAttributeEncode
-        112   6F 000239F0 WVTAsn1SealingSignatureAttributeDecode
-        113   70 00023AD0 WVTAsn1SealingSignatureAttributeEncode
-        114   71 00023B90 WVTAsn1SealingTimestampAttributeDecode
-        115   72 00023C70 WVTAsn1SealingTimestampAttributeEncode
-        116   73 00023CD0 WVTAsn1SpcFinancialCriteriaInfoDecode
-        117   74 00023D80 WVTAsn1SpcFinancialCriteriaInfoEncode
-        118   75 00012670 WVTAsn1SpcIndirectDataContentDecode
-        119   76 00003DC0 WVTAsn1SpcIndirectDataContentEncode
-        120   77 00023DC0 WVTAsn1SpcLinkDecode
-        121   78 00004150 WVTAsn1SpcLinkEncode
-        122   79 00023EA0 WVTAsn1SpcMinimalCriteriaInfoDecode
-        123   7A 00023F50 WVTAsn1SpcMinimalCriteriaInfoEncode
-        124   7B 000134F0 WVTAsn1SpcPeImageDataDecode
-        125   7C 00012B40 WVTAsn1SpcPeImageDataEncode
-        126   7D 00005450 WVTAsn1SpcSigInfoDecode
-        127   7E 00004020 WVTAsn1SpcSigInfoEncode
-        128   7F 00023F80 WVTAsn1SpcSpAgencyInfoDecode
-        129   80 00024210 WVTAsn1SpcSpAgencyInfoEncode
-        130   81 00013220 WVTAsn1SpcSpOpusInfoDecode
-        131   82 00003F60 WVTAsn1SpcSpOpusInfoEncode
-        132   83 000243C0 WVTAsn1SpcStatementTypeDecode
-        133   84 00003EA0 WVTAsn1SpcStatementTypeEncode
-        134   85 000089C0 WinVerifyTrust
-        135   86 00026020 WinVerifyTrustEx
-        136   87 000244F0 WintrustAddActionID
-        137   88 000258C0 WintrustAddDefaultForUsage
-        138   89 0000C0B0 WintrustCertificateTrust
-        139   8A 00025B40 WintrustGetDefaultForUsage
-        140   8B 00024A60 WintrustGetRegPolicyFlags
-        141   8C 00018240 WintrustLoadFunctionPointers
-        142   8D 000246D0 WintrustRemoveActionID
-        143   8E 00029ED0 WintrustSetDefaultIncludePEPageHashes
-        144   8F 00024B00 WintrustSetRegPolicyFlags
-        145   90 0000B070 mscat32DllRegisterServer
-        146   91 0000B070 mscat32DllUnregisterServer
-        147   92 00029180 mssip32DllRegisterServer
-        148   93 000293A0 mssip32DllUnregisterServer
-
-  Summary
-
-        1000 .data
-        1000 .didat
-        4000 .pdata
-       13000 .rdata
-        1000 .reloc
-        2000 .rsrc
-       37000 .text
-Microsoft (R) COFF/PE Dumper Version 14.36.32538.0
-Copyright (C) Microsoft Corporation.  All rights reserved.
-
-
-Dump of file 10.0.10240\ws2_32.dll
-
-File Type: DLL
-
-  Section contains the following exports for WS2_32.dll
-
-    00000000 characteristics
-    57490AC3 time date stamp Fri May 27 20:04:35 2016
-        0.00 version
-           1 ordinal base
-         500 number of functions
-         195 number of names
-
-    ordinal hint RVA      name
-
-         25    0 00001A60 FreeAddrInfoEx
-         26    1 00001A60 FreeAddrInfoExW
-         27    2 00014AA0 FreeAddrInfoW
-         28    3 00025250 GetAddrInfoExA
-         29    4 000167C0 GetAddrInfoExCancel
-         30    5 00014B20 GetAddrInfoExOverlappedResult
-         31    6 00013590 GetAddrInfoExW
-         32    7 00010350 GetAddrInfoW
-         33    8 00017B00 GetHostNameW
-         34    9 00012F20 GetNameInfoW
-         35    A 000179F0 InetNtopW
-         36    B 00024640 InetPtonW
-         37    C 00025430 SetAddrInfoExA
-         38    D 000255B0 SetAddrInfoExW
-        500    E 00018450 WEP
-         39    F 00037070 WPUCompleteOverlappedRequest
-         40   10 000173D0 WPUGetProviderPathEx
-         41   11 00014140 WSAAccept
-         42   12 00014560 WSAAddressToStringA
-         43   13 00012400 WSAAddressToStringW
-         44   14 00039A60 WSAAdvertiseProvider
-        102   15 00029E40 WSAAsyncGetHostByAddr
-        103   16 00029F70 WSAAsyncGetHostByName
-        105   17 0002A0C0 WSAAsyncGetProtoByName
-        104   18 0002A210 WSAAsyncGetProtoByNumber
-        107   19 0002A310 WSAAsyncGetServByName
-        106   1A 0002A470 WSAAsyncGetServByPort
-        101   1B 00015350 WSAAsyncSelect
-        108   1C 0002A580 WSACancelAsyncRequest
-        113   1D 000285E0 WSACancelBlockingCall
-        116   1E 000142E0 WSACleanup
-         45   1F 00001740 WSACloseEvent
-         46   20 00015E70 WSAConnect
-         47   21 00035880 WSAConnectByList
-         48   22 00036170 WSAConnectByNameA
-         49   23 000363B0 WSAConnectByNameW
-         50   24 00001790 WSACreateEvent
-         58   25 000292A0 WSADuplicateSocketA
-         59   26 00029330 WSADuplicateSocketW
-         60   27 000321E0 WSAEnumNameSpaceProvidersA
-         61   28 00032280 WSAEnumNameSpaceProvidersExA
-         62   29 00032320 WSAEnumNameSpaceProvidersExW
-         63   2A 00003FB0 WSAEnumNameSpaceProvidersW
-         64   2B 00011B60 WSAEnumNetworkEvents
-         65   2C 0003D8C0 WSAEnumProtocolsA
-         66   2D 00016950 WSAEnumProtocolsW
-         67   2E 00011970 WSAEventSelect
-        111   2F 00001730 WSAGetLastError
-         68   30 00014440 WSAGetOverlappedResult
-         69   31 00030E10 WSAGetQOSByName
-         70   32 000323C0 WSAGetServiceClassInfoA
-         71   33 000324B0 WSAGetServiceClassInfoW
-         72   34 00032640 WSAGetServiceClassNameByClassIdA
-         73   35 00032950 WSAGetServiceClassNameByClassIdW
-         74   36 000246D0 WSAHtonl
-         75   37 00024800 WSAHtons
-         76   38 00032C30 WSAInstallServiceClassA
-         77   39 00032CF0 WSAInstallServiceClassW
-         78   3A 000113F0 WSAIoctl
-        114   3B 00028670 WSAIsBlocking
-         79   3C 00036E00 WSAJoinLeaf
-         80   3D 00032E50 WSALookupServiceBeginA
-         81   3E 0000BB50 WSALookupServiceBeginW
-         82   3F 0000B720 WSALookupServiceEnd
-         83   40 00032F60 WSALookupServiceNextA
-         84   41 0000C9B0 WSALookupServiceNextW
-         85   42 00033180 WSANSPIoctl
-         86   43 00024920 WSANtohl
-         87   44 00024A50 WSANtohs
-         88   45 00033EE0 WSAPoll
-         89   46 00039C00 WSAProviderCompleteAsyncCall
-         90   47 00016AA0 WSAProviderConfigChange
-         91   48 0000FDE0 WSARecv
-         92   49 00031BC0 WSARecvDisconnect
-         93   4A 00017760 WSARecvFrom
-         94   4B 000332B0 WSARemoveServiceClass
-         95   4C 00016380 WSAResetEvent
-         96   4D 0000F6E0 WSASend
-         97   4E 000341C0 WSASendDisconnect
-         98   4F 00011CE0 WSASendMsg
-         99   50 00034290 WSASendTo
-        109   51 00028710 WSASetBlockingHook
-        100   52 00016A50 WSASetEvent
-        112   53 000025F0 WSASetLastError
-        117   54 00033410 WSASetServiceA
-        118   55 000334D0 WSASetServiceW
-        119   56 000168D0 WSASocketA
-        120   57 00010C50 WSASocketW
-        115   58 000035B0 WSAStartup
-        121   59 000150A0 WSAStringToAddressA
-        122   5A 00014CD0 WSAStringToAddressW
-        123   5B 00039DB0 WSAUnadvertiseProvider
-        110   5C 000287D0 WSAUnhookBlockingHook
-        124   5D 00001A50 WSAWaitForMultipleEvents
-         24   5E 00037340 WSApSetPostRoutine
-        125   5F 0003DD60 WSCDeinstallProvider
-        126   60 0003FCC0 WSCDeinstallProvider32
-        127   61 0003DD90 WSCDeinstallProviderEx
-        128   62 0003FED0 WSCEnableNSProvider
-        129   63 00040750 WSCEnableNSProvider32
-        130   64 000336A0 WSCEnumNameSpaceProviders32
-        131   65 000337F0 WSCEnumNameSpaceProvidersEx32
-        132   66 00002B30 WSCEnumProtocols
-        133   67 0003DA70 WSCEnumProtocols32
-        134   68 00003050 WSCEnumProtocolsEx
-        135   69 0003DFE0 WSCGetApplicationCategory
-        136   6A 0003E030 WSCGetApplicationCategoryEx
-        137   6B 0003E3A0 WSCGetProviderInfo
-        138   6C 0003FCF0 WSCGetProviderInfo32
-        139   6D 00017D40 WSCGetProviderPath
-        140   6E 0003DAA0 WSCGetProviderPath32
-        141   6F 00040040 WSCInstallNameSpace
-        142   70 000408B0 WSCInstallNameSpace32
-        143   71 00040090 WSCInstallNameSpaceEx
-        144   72 000400E0 WSCInstallNameSpaceEx2
-        145   73 00040900 WSCInstallNameSpaceEx32
-        146   74 0003E660 WSCInstallProvider
-        147   75 0003FD30 WSCInstallProvider64_32
-        148   76 0002D470 WSCInstallProviderAndChains64_32
-        149   77 0003E6B0 WSCInstallProviderEx
-        150   78 0003F0C0 WSCSetApplicationCategory
-        152   79 0003F120 WSCSetApplicationCategoryEx
-        153   7A 0003F5C0 WSCSetProviderInfo
-        154   7B 0003FD80 WSCSetProviderInfo32
-        155   7C 00040390 WSCUnInstallNameSpace
-        156   7D 00040950 WSCUnInstallNameSpace32
-        157   7E 000403C0 WSCUnInstallNameSpaceEx2
-        158   7F 0003F850 WSCUpdateProvider
-        159   80 0003FDC0 WSCUpdateProvider32
-        160   81 0003F890 WSCUpdateProviderEx
-        161   82 00040570 WSCWriteNameSpaceOrder
-        162   83 00040980 WSCWriteNameSpaceOrder32
-        163   84 0003FA70 WSCWriteProviderOrder
-        164   85 0003FE00 WSCWriteProviderOrder32
-        165   86 0003FAA0 WSCWriteProviderOrderEx
-        166   87 00002810 WahCloseApcHelper
-        167   88 0003C150 WahCloseHandleHelper
-        168   89 0003CD20 WahCloseNotificationHandleHelper
-        169   8A 0003C1A0 WahCloseSocketHandle
-        170   8B 00012B50 WahCloseThread
-        171   8C 0003C210 WahCompleteRequest
-        172   8D 000032D0 WahCreateHandleContextTable
-        173   8E 00016D30 WahCreateNotificationHandle
-        174   8F 0003C300 WahCreateSocketHandle
-        175   90 00015E00 WahDestroyHandleContextTable
-        176   91 0003C4F0 WahDisableNonIFSHandleSupport
-        177   92 0003C5E0 WahEnableNonIFSHandleSupport
-        178   93 00001960 WahEnumerateHandleContexts
-        179   94 00015690 WahInsertHandleContext
-        180   95 0003CD60 WahNotifyAllProcesses
-        181   96 00003570 WahOpenApcHelper
-        182   97 00012AC0 WahOpenCurrentThread
-        183   98 0003C7D0 WahOpenHandleHelper
-        184   99 00016A60 WahOpenNotificationHandleHelper
-        185   9A 0003B8B0 WahQueueUserApc
-        186   9B 00001300 WahReferenceContextByHandle
-        187   9C 00001380 WahRemoveHandleContext
-        188   9D 00016C00 WahWaitForNotification
-        189   9E 0003CFA0 WahWriteLSPEvent
-        151   9F 00001030 __WSAFDIsSet
-          1   A0 000142C0 accept
-          2   A1 00012130 bind
-          3   A2 0000F2B0 closesocket
-          4   A3 00011E50 connect
-        190   A4 00014AA0 freeaddrinfo
-        191   A5 00012BC0 getaddrinfo
-         51   A6 0002A620 gethostbyaddr
-         52   A7 0002A7E0 gethostbyname
-         57   A8 0002A9B0 gethostname
-        192   A9 000130D0 getnameinfo
-          5   AA 000149C0 getpeername
-         53   AB 000297C0 getprotobyname
-         54   AC 00029930 getprotobynumber
-         55   AD 0002AB80 getservbyname
-         56   AE 0002ADA0 getservbyport
-          6   AF 00012660 getsockname
-          7   B0 00001170 getsockopt
-          8   B1 00001700 htonl
-          9   B2 00001770 htons
-         11   B3 00002100 inet_addr
-         12   B4 00001CF0 inet_ntoa
-        193   B5 00024B70 inet_ntop
-        194   B6 00024BF0 inet_pton
-         10   B7 000116B0 ioctlsocket
-         13   B8 00014FF0 listen
-         14   B9 00001700 ntohl
-         15   BA 00001770 ntohs
-         16   BB 0000F940 recv
-         17   BC 00015F80 recvfrom
-         18   BD 00010040 select
-         19   BE 0000F4B0 send
-         20   BF 00012280 sendto
-         21   C0 0000FBA0 setsockopt
-         22   C1 00013280 shutdown
-         23   C2 00010B00 socket
-
-  Summary
-
-        1000 .data
-        1000 .didat
-        4000 .pdata
-        D000 .rdata
-        1000 .reloc
-       11000 .rsrc
-       43000 .text
diff --git a/chrome/updater/app/server/win/com_classes_legacy.cc b/chrome/updater/app/server/win/com_classes_legacy.cc
index c9ca706..a2e95fd5 100644
--- a/chrome/updater/app/server/win/com_classes_legacy.cc
+++ b/chrome/updater/app/server/win/com_classes_legacy.cc
@@ -72,28 +72,23 @@
   return {};
 }
 
-template <typename T>
-std::string GetStringFromValue(const T& value) {
+std::string GetStringFromValue(const std::string& value) {
   return value;
 }
 
-template <>
 std::string GetStringFromValue(const int& value) {
   return base::NumberToString(value);
 }
 
-template <>
 std::string GetStringFromValue(const bool& value) {
   return value ? "true" : "false";
 }
 
-template <>
 std::string GetStringFromValue(const updater::UpdatesSuppressedTimes& value) {
   return base::StringPrintf("%d, %d, %d", value.start_hour_,
                             value.start_minute_, value.duration_minute_);
 }
 
-template <>
 std::string GetStringFromValue(const std::vector<std::string>& value) {
   return base::JoinString(value, ";");
 }
diff --git a/chrome/updater/test/integration_tests.cc b/chrome/updater/test/integration_tests.cc
index bc83769..9f852d2 100644
--- a/chrome/updater/test/integration_tests.cc
+++ b/chrome/updater/test/integration_tests.cc
@@ -1444,13 +1444,7 @@
 #endif
 #endif
 
-// TODO(crbug.com/1488344): Re-enable this test.
-#if BUILDFLAG(IS_WIN) && defined(ADDRESS_SANITIZER)
-#define MAYBE_UpdateServiceStress DISABLED_UpdateServiceStress
-#else
-#define MAYBE_UpdateServiceStress UpdateServiceStress
-#endif  // BUILDFLAG(IS_WIN) && defined(ADDRESS_SANITIZER)
-TEST_F(IntegrationTest, MAYBE_UpdateServiceStress) {
+TEST_F(IntegrationTest, UpdateServiceStress) {
   ASSERT_NO_FATAL_FAILURE(Install());
   ASSERT_NO_FATAL_FAILURE(ExpectInstalled());
   ASSERT_NO_FATAL_FAILURE(StressUpdateService());
diff --git a/clank b/clank
index 5c5f938..cb7ce7f 160000
--- a/clank
+++ b/clank
@@ -1 +1 @@
-Subproject commit 5c5f938d64e779438a837a026ff3234e7050b392
+Subproject commit cb7ce7fd96470a676aa91a7f942323c10f78da2f
diff --git a/components/BUILD.gn b/components/BUILD.gn
index e971632..3fb7396 100644
--- a/components/BUILD.gn
+++ b/components/BUILD.gn
@@ -410,6 +410,7 @@
       "//components/captive_portal/content:unit_tests",
       "//components/cast_receiver:unit_tests",
       "//components/cast_streaming:unit_tests",
+      "//components/certificate_transparency:unit_tests",
       "//components/content_capture/browser:unit_tests",
       "//components/content_relationship_verification:unit_tests",
       "//components/contextual_search/core/browser:unit_tests",
@@ -521,7 +522,6 @@
     deps += [
       "//components/background_sync:unit_tests",
       "//components/blocked_content:unit_tests",
-      "//components/certificate_transparency:unit_tests",
       "//components/content_settings/browser:unit_tests",
       "//components/content_settings/browser/ui:unit_tests",
       "//components/feed/core/v2:core_unit_tests",
diff --git a/components/certificate_transparency/BUILD.gn b/components/certificate_transparency/BUILD.gn
index e8c5d80..eb1e1588 100644
--- a/components/certificate_transparency/BUILD.gn
+++ b/components/certificate_transparency/BUILD.gn
@@ -58,4 +58,8 @@
     "//testing/gmock",
     "//testing/gtest",
   ]
+
+  if (is_ios) {
+    deps += [ "//net:net_test_bundle_data" ]
+  }
 }
diff --git a/components/color/DEPS b/components/color/DEPS
index 6cda140..76ade98a 100644
--- a/components/color/DEPS
+++ b/components/color/DEPS
@@ -1,5 +1,5 @@
 include_rules = [
-  "+components/eye_dropper",
+  "+components/eye_dropper/color_mixer.h",
   "+third_party/skia/include",
   "+ui/color",
 ]
diff --git a/components/exo/shell_surface_base.cc b/components/exo/shell_surface_base.cc
index 90b6917..c8b3b3c 100644
--- a/components/exo/shell_surface_base.cc
+++ b/components/exo/shell_surface_base.cc
@@ -1469,7 +1469,7 @@
   if (window == parent_)
     SetParentInternal(nullptr);
   window->RemoveObserver(this);
-  if (widget_ && window == widget_->GetNativeWindow() && root_surface()) {
+  if (IsShellSurfaceWindow(window) && root_surface()) {
     root_surface()->ThrottleFrameRate(false);
   }
 }
@@ -1477,19 +1477,21 @@
 void ShellSurfaceBase::OnWindowPropertyChanged(aura::Window* window,
                                                const void* key,
                                                intptr_t old_value) {
-  if (IsShellSurfaceWindow(window)) {
-    if (key == aura::client::kSkipImeProcessing) {
-      SetSkipImeProcessingToDescendentSurfaces(
-          window, window->GetProperty(aura::client::kSkipImeProcessing));
-    } else if (key == chromeos::kFrameRestoreLookKey) {
-      root_surface()->SetFrameLocked(
-          window->GetProperty(chromeos::kFrameRestoreLookKey));
-    } else if (key == aura::client::kWindowWorkspaceKey) {
-      root_surface()->OnDeskChanged(GetWindowDeskStateChanged(window));
-    } else if (key == ash::kFrameRateThrottleKey) {
-      root_surface()->ThrottleFrameRate(
-          window->GetProperty(ash::kFrameRateThrottleKey));
-    }
+  if (!IsShellSurfaceWindow(window) || !root_surface()) {
+    return;
+  }
+
+  if (key == aura::client::kSkipImeProcessing) {
+    SetSkipImeProcessingToDescendentSurfaces(
+        window, window->GetProperty(aura::client::kSkipImeProcessing));
+  } else if (key == chromeos::kFrameRestoreLookKey) {
+    root_surface()->SetFrameLocked(
+        window->GetProperty(chromeos::kFrameRestoreLookKey));
+  } else if (key == aura::client::kWindowWorkspaceKey) {
+    root_surface()->OnDeskChanged(GetWindowDeskStateChanged(window));
+  } else if (key == ash::kFrameRateThrottleKey) {
+    root_surface()->ThrottleFrameRate(
+        window->GetProperty(ash::kFrameRateThrottleKey));
   }
 }
 
@@ -1502,7 +1504,7 @@
 
 void ShellSurfaceBase::OnWindowParentChanged(aura::Window* window,
                                              aura::Window* parent) {
-  if (!IsShellSurfaceWindow(window)) {
+  if (!IsShellSurfaceWindow(window) || !root_surface()) {
     return;
   }
   root_surface()->OnDeskChanged(GetWindowDeskStateChanged(window));
diff --git a/components/exo/shell_surface_unittest.cc b/components/exo/shell_surface_unittest.cc
index 9ff6f47..6725c56 100644
--- a/components/exo/shell_surface_unittest.cc
+++ b/components/exo/shell_surface_unittest.cc
@@ -7,12 +7,14 @@
 #include <sstream>
 #include <vector>
 
-#include "ash/constants/ash_constants.h"
+#include "ash/constants/app_types.h"
 #include "ash/frame/non_client_frame_view_ash.h"
 #include "ash/public/cpp/test/shell_test_api.h"
 #include "ash/public/cpp/window_properties.h"
 #include "ash/shell.h"
 #include "ash/test/test_widget_builder.h"
+#include "ash/wm/overview/overview_controller.h"
+#include "ash/wm/overview/overview_test_util.h"
 #include "ash/wm/resize_shadow.h"
 #include "ash/wm/resize_shadow_controller.h"
 #include "ash/wm/window_state.h"
@@ -4070,4 +4072,36 @@
   popup_shell_surface.reset();
 }
 
+TEST_F(ShellSurfaceTest, WindowPropertyChangedNotificationWithoutRootSurface) {
+  // Test OnWindowPropertyChanged() notification on a ShellSurface, whose root
+  // surface has gone.
+
+  auto* overview_controller = ash::Shell::Get()->overview_controller();
+
+  std::unique_ptr<ShellSurface> shell_surface =
+      test::ShellSurfaceBuilder({256, 256})
+          .SetAppType(ash::AppType::LACROS)
+          .BuildShellSurface();
+
+  std::unique_ptr<ShellSurface> shell_surface1 =
+      test::ShellSurfaceBuilder({256, 256})
+          .SetAppType(ash::AppType::LACROS)
+          .BuildShellSurface();
+
+  overview_controller->StartOverview(ash::OverviewStartAction::kTests);
+  ash::WaitForOverviewEnterAnimation();
+
+  test::ShellSurfaceBuilder::DestroyRootSurface(shell_surface1.get());
+
+  // Destroying `shell_surface` will close its aura window, causing update of
+  // frame throttling in the overview mode for the remaining Lacros window(s).
+  // In this case, the remaining window is associated with `shell_surface1`. It
+  // receives OnWindowPropertyChanged() notification with
+  // ash::kFrameRateThrottleKey key. The root surface of `shell_surface1` has
+  // gone at this point. Verify that it doesn't cause crash.
+  shell_surface.reset();
+
+  overview_controller->EndOverview(ash::OverviewEndAction::kTests);
+}
+
 }  // namespace exo
diff --git a/components/exo/test/shell_surface_builder.cc b/components/exo/test/shell_surface_builder.cc
index d6735211..1ae4a1f 100644
--- a/components/exo/test/shell_surface_builder.cc
+++ b/components/exo/test/shell_surface_builder.cc
@@ -229,6 +229,12 @@
   return *this;
 }
 
+ShellSurfaceBuilder& ShellSurfaceBuilder::SetAppType(ash::AppType app_type) {
+  DCHECK(!built_);
+  app_type_ = app_type;
+  return *this;
+}
+
 ShellSurfaceBuilder& ShellSurfaceBuilder::SetParent(ShellSurface* parent) {
   DCHECK(!built_);
   parent_shell_surface_ = parent;
@@ -378,6 +384,11 @@
 
   SetCommonPropertiesAndCommitIfNecessary(shell_surface.get());
 
+  // The widget becomes available after the first commit.
+  if (shell_surface->GetWidget() && app_type_ != ash::AppType::NON_APP) {
+    shell_surface->GetWidget()->GetNativeWindow()->SetProperty(
+        aura::client::kAppType, static_cast<int>(app_type_));
+  }
   return shell_surface;
 }
 
@@ -444,6 +455,9 @@
 
   // The widget becomes available after the first commit.
   if (shell_surface->GetWidget()) {
+    CHECK(app_type_ == ash::AppType::NON_APP ||
+          app_type_ == ash::AppType::ARC_APP)
+        << "Incompatible app type is set for ClientControlledShellSurface.";
     shell_surface->GetWidget()->GetNativeWindow()->SetProperty(
         aura::client::kAppType, static_cast<int>(ash::AppType::ARC_APP));
   }
diff --git a/components/exo/test/shell_surface_builder.h b/components/exo/test/shell_surface_builder.h
index 16d0026d..56cfcd1 100644
--- a/components/exo/test/shell_surface_builder.h
+++ b/components/exo/test/shell_surface_builder.h
@@ -7,12 +7,12 @@
 
 #include <memory>
 
+#include "ash/constants/app_types.h"
 #include "base/memory/raw_ptr.h"
 #include "cc/base/region.h"
 #include "components/exo/client_controlled_shell_surface.h"
 #include "components/exo/shell_surface.h"
 #include "third_party/abseil-cpp/absl/types/optional.h"
-#include "ui/base/class_property.h"
 #include "ui/gfx/buffer_types.h"
 #include "ui/gfx/geometry/rect.h"
 #include "ui/gfx/geometry/size.h"
@@ -57,6 +57,7 @@
   ShellSurfaceBuilder& SetDisableMovement();
   ShellSurfaceBuilder& SetCentered();
   ShellSurfaceBuilder& SetSecurityDelegate(SecurityDelegate* security_delegate);
+  ShellSurfaceBuilder& SetAppType(ash::AppType app_type);
 
   // Sets parameters defined in ShellSurface.
   ShellSurfaceBuilder& SetParent(ShellSurface* shell_surface);
@@ -103,6 +104,7 @@
   absl::optional<cc::Region> input_region_;
   absl::optional<SurfaceFrameType> type_;
   raw_ptr<SecurityDelegate, ExperimentalAsh> security_delegate_ = nullptr;
+  ash::AppType app_type_ = ash::AppType::NON_APP;
   std::string application_id_;
   bool use_system_modal_container_ = false;
   bool system_modal_ = false;
diff --git a/components/eye_dropper/DEPS b/components/eye_dropper/DEPS
index 226aada8..91db99c1 100644
--- a/components/eye_dropper/DEPS
+++ b/components/eye_dropper/DEPS
@@ -1,5 +1,5 @@
 include_rules = [
-  "+components/color",
+  "+components/color/color_id.h",
   "+content/public/browser",
   "+third_party/skia",
   "+third_party/webrtc",
diff --git a/components/feature_engagement/public/feature_configurations.cc b/components/feature_engagement/public/feature_configurations.cc
index c3ba666..c398206faf 100644
--- a/components/feature_engagement/public/feature_configurations.cc
+++ b/components/feature_engagement/public/feature_configurations.cc
@@ -133,6 +133,20 @@
     return config;
   }
 
+  if (kIPHGMCLocalMediaCastingFeature.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;
+    config->trigger = EventConfig("gmc_local_media_cast_iph_trigger",
+                                  Comparator(EQUAL, 0), 180, 180);
+    config->used = EventConfig("media_route_started_from_gmc",
+                               Comparator(EQUAL, 0), 180, 180);
+
+    return config;
+  }
+
   if (kIPHDesktopSharedHighlightingFeature.name == feature->name) {
     // A config that allows the shared highlighting desktop IPH to be shown
     // when a user receives a highlight:
diff --git a/components/feature_engagement/public/feature_constants.cc b/components/feature_engagement/public/feature_constants.cc
index daaccbad..81932be 100644
--- a/components/feature_engagement/public/feature_constants.cc
+++ b/components/feature_engagement/public/feature_constants.cc
@@ -58,6 +58,9 @@
 BASE_FEATURE(kIPHGMCCastStartStopFeature,
              "IPH_GMCCastStartStop",
              base::FEATURE_ENABLED_BY_DEFAULT);
+BASE_FEATURE(kIPHGMCLocalMediaCastingFeature,
+             "IPH_GMCLocalMediaCasting",
+             base::FEATURE_ENABLED_BY_DEFAULT);
 BASE_FEATURE(kIPHHighEfficiencyModeFeature,
              "IPH_HighEfficiencyMode",
              base::FEATURE_ENABLED_BY_DEFAULT);
diff --git a/components/feature_engagement/public/feature_constants.h b/components/feature_engagement/public/feature_constants.h
index 273deb6..ce2c1bd6 100644
--- a/components/feature_engagement/public/feature_constants.h
+++ b/components/feature_engagement/public/feature_constants.h
@@ -37,6 +37,7 @@
 BASE_DECLARE_FEATURE(kIPHExtensionsRequestAccessButtonFeature);
 BASE_DECLARE_FEATURE(kIPHFocusHelpBubbleScreenReaderPromoFeature);
 BASE_DECLARE_FEATURE(kIPHGMCCastStartStopFeature);
+BASE_DECLARE_FEATURE(kIPHGMCLocalMediaCastingFeature);
 BASE_DECLARE_FEATURE(kIPHHighEfficiencyModeFeature);
 BASE_DECLARE_FEATURE(kIPHLiveCaptionFeature);
 BASE_DECLARE_FEATURE(kIPHTabAudioMutingFeature);
diff --git a/components/feature_engagement/public/feature_list.cc b/components/feature_engagement/public/feature_list.cc
index f2afe98..2316f21e 100644
--- a/components/feature_engagement/public/feature_list.cc
+++ b/components/feature_engagement/public/feature_list.cc
@@ -154,6 +154,7 @@
     &kIPHExtensionsRequestAccessButtonFeature,
     &kIPHFocusHelpBubbleScreenReaderPromoFeature,
     &kIPHGMCCastStartStopFeature,
+    &kIPHGMCLocalMediaCastingFeature,
     &kIPHHighEfficiencyModeFeature,
     &kIPHLiveCaptionFeature,
     &kIPHTabAudioMutingFeature,
diff --git a/components/feature_engagement/public/feature_list.h b/components/feature_engagement/public/feature_list.h
index c25efe7f..ee4783e 100644
--- a/components/feature_engagement/public/feature_list.h
+++ b/components/feature_engagement/public/feature_list.h
@@ -282,6 +282,8 @@
                        "IPH_ExtensionsRequestAccessButton");
 DEFINE_VARIATION_PARAM(kIPHGlobalMediaControls, "IPH_GlobalMediaControls");
 DEFINE_VARIATION_PARAM(kIPHGMCCastStartStopFeature, "IPH_GMCCastStartStop");
+DEFINE_VARIATION_PARAM(kIPHGMCLocalMediaCastingFeature,
+                       "IPH_GMCLocalMediaCasting");
 DEFINE_VARIATION_PARAM(kIPHHighEfficiencyModeFeature, "IPH_HighEfficiencyMode");
 DEFINE_VARIATION_PARAM(kIPHLiveCaption, "IPH_LiveCaption");
 DEFINE_VARIATION_PARAM(kIPHPasswordsAccountStorageFeature,
@@ -560,6 +562,7 @@
         VARIATION_ENTRY(kIPHFocusModeFeature),
         VARIATION_ENTRY(kIPHGlobalMediaControls),
         VARIATION_ENTRY(kIPHGMCCastStartStopFeature),
+        VARIATION_ENTRY(kIPHGMCLocalMediaCastingFeature),
         VARIATION_ENTRY(kIPHHighEfficiencyModeFeature),
         VARIATION_ENTRY(kIPHLiveCaption),
         VARIATION_ENTRY(kIPHPasswordsAccountStorageFeature),
diff --git a/components/media_router/browser/media_router_metrics.cc b/components/media_router/browser/media_router_metrics.cc
index d8e87eb..e3ad1db 100644
--- a/components/media_router/browser/media_router_metrics.cc
+++ b/components/media_router/browser/media_router_metrics.cc
@@ -75,8 +75,6 @@
 MediaRouterMetrics::~MediaRouterMetrics() = default;
 
 // static
-const char MediaRouterMetrics::kHistogramCloseLatency[] =
-    "MediaRouter.Ui.Action.CloseLatency";
 const char MediaRouterMetrics::kHistogramIconClickLocation[] =
     "MediaRouter.Icon.Click.Location";
 const char MediaRouterMetrics::kHistogramMediaRouterFileFormat[] =
@@ -87,22 +85,12 @@
     "MediaRouter.Sink.SelectedType";
 const char MediaRouterMetrics::kHistogramPresentationUrlType[] =
     "MediaRouter.PresentationRequest.AvailabilityUrlType";
-const char MediaRouterMetrics::kHistogramStartLocalLatency[] =
-    "MediaRouter.Ui.Action.StartLocal.Latency";
-const char MediaRouterMetrics::kHistogramStartLocalPosition[] =
-    "MediaRouter.Ui.Action.StartLocalPosition";
-const char MediaRouterMetrics::kHistogramStartLocalSessionSuccessful[] =
-    "MediaRouter.Ui.Action.StartLocalSessionSuccessful";
-const char MediaRouterMetrics::kHistogramStopRoute[] =
-    "MediaRouter.Ui.Action.StopRoute";
 const char MediaRouterMetrics::kHistogramUiDeviceCount[] =
     "MediaRouter.Ui.Device.Count";
 const char MediaRouterMetrics::kHistogramUiDialogIconStateAtOpen[] =
     "MediaRouter.Ui.Dialog.IconStateAtOpen";
 const char MediaRouterMetrics::kHistogramUiDialogLoadedWithData[] =
     "MediaRouter.Ui.Dialog.LoadedWithData";
-const char MediaRouterMetrics::kHistogramUiDialogPaint[] =
-    "MediaRouter.Ui.Dialog.Paint";
 const char MediaRouterMetrics::kHistogramUiAndroidDialogType[] =
     "MediaRouter.Ui.Android.DialogType";
 const char MediaRouterMetrics::kHistogramUiAndroidDialogAction[] =
@@ -127,24 +115,12 @@
 }
 
 // static
-void MediaRouterMetrics::RecordMediaRouterDialogPaint(
-    const base::TimeDelta& delta) {
-  UMA_HISTOGRAM_TIMES(kHistogramUiDialogPaint, delta);
-}
-
-// static
 void MediaRouterMetrics::RecordMediaRouterDialogLoaded(
     const base::TimeDelta& delta) {
   UMA_HISTOGRAM_TIMES(kHistogramUiDialogLoadedWithData, delta);
 }
 
 // static
-void MediaRouterMetrics::RecordCloseDialogLatency(
-    const base::TimeDelta& delta) {
-  UMA_HISTOGRAM_TIMES(kHistogramCloseLatency, delta);
-}
-
-// static
 void MediaRouterMetrics::RecordMediaRouterFileFormat(
     const media::container_names::MediaContainerName format) {
   base::UmaHistogramEnumeration(
@@ -191,34 +167,6 @@
 }
 
 // static
-void MediaRouterMetrics::RecordStartRouteDeviceIndex(int index) {
-  base::UmaHistogramSparse(kHistogramStartLocalPosition, std::min(index, 100));
-}
-
-// static
-void MediaRouterMetrics::RecordStartLocalSessionLatency(
-    const base::TimeDelta& delta) {
-  UMA_HISTOGRAM_TIMES(kHistogramStartLocalLatency, delta);
-}
-
-// static
-void MediaRouterMetrics::RecordStartLocalSessionSuccessful(bool success) {
-  UMA_HISTOGRAM_BOOLEAN(kHistogramStartLocalSessionSuccessful, success);
-}
-
-// static
-void MediaRouterMetrics::RecordStopLocalRoute() {
-  // Local routes have the enum value 0.
-  UMA_HISTOGRAM_BOOLEAN(kHistogramStopRoute, 0);
-}
-
-// static
-void MediaRouterMetrics::RecordStopRemoteRoute() {
-  // Remote routes have the enum value 1.
-  UMA_HISTOGRAM_BOOLEAN(kHistogramStopRoute, 1);
-}
-
-// static
 void MediaRouterMetrics::RecordIconStateAtDialogOpen(bool is_pinned) {
   UMA_HISTOGRAM_BOOLEAN(kHistogramUiDialogIconStateAtOpen, is_pinned);
 }
diff --git a/components/media_router/browser/media_router_metrics.h b/components/media_router/browser/media_router_metrics.h
index 1824078..dd88cf7 100644
--- a/components/media_router/browser/media_router_metrics.h
+++ b/components/media_router/browser/media_router_metrics.h
@@ -134,21 +134,15 @@
   ~MediaRouterMetrics();
 
   // UMA histogram names.
-  static const char kHistogramCloseLatency[];
   static const char kHistogramIconClickLocation[];
   static const char kHistogramMediaRouterFileFormat[];
   static const char kHistogramMediaRouterFileSize[];
   static const char kHistogramMediaSinkType[];
   static const char kHistogramPresentationUrlType[];
-  static const char kHistogramStartLocalLatency[];
-  static const char kHistogramStartLocalPosition[];
-  static const char kHistogramStartLocalSessionSuccessful[];
-  static const char kHistogramStopRoute[];
   static const char kHistogramUiDeviceCount[];
   static const char kHistogramUiDialogActivationLocationAndCastMode[];
   static const char kHistogramUiDialogIconStateAtOpen[];
   static const char kHistogramUiDialogLoadedWithData[];
-  static const char kHistogramUiDialogPaint[];
   static const char kHistogramUiFirstAction[];
   static const char kHistogramUiIconStateAtInit[];
   static const char kHistogramUiAndroidDialogType[];
@@ -164,19 +158,10 @@
   static void RecordMediaRouterDialogActivationLocation(
       MediaRouterDialogActivationLocation activation_location);
 
-  // Records the duration it takes for the Media Router dialog to open and
-  // finish painting after a user clicks to open the dialog.
-  static void RecordMediaRouterDialogPaint(const base::TimeDelta& delta);
-
   // Records the duration it takes for the Media Router dialog to load its
   // initial data after a user clicks to open the dialog.
   static void RecordMediaRouterDialogLoaded(const base::TimeDelta& delta);
 
-  // Records the duration it takes from the user opening the Media Router dialog
-  // to the user closing the dialog. This is only called if closing the dialog
-  // is the first action the user takes.
-  static void RecordCloseDialogLatency(const base::TimeDelta& delta);
-
   // Records the format of a cast file.
   static void RecordMediaRouterFileFormat(
       media::container_names::MediaContainerName format);
@@ -201,18 +186,9 @@
   // devices list. The index starts at 0.
   static void RecordStartRouteDeviceIndex(int index);
 
-  // Records the time it takes from the Media Router dialog showing at least one
-  // device to the user starting to cast. This is called only if casting is the
-  // first action taken by the user, aside from selecting the sink to cast to.
-  static void RecordStartLocalSessionLatency(const base::TimeDelta& delta);
-
   // Records whether or not an attempt to start casting was successful.
   static void RecordStartLocalSessionSuccessful(bool success);
 
-  // Records the user stopping a route in the UI.
-  static void RecordStopLocalRoute();
-  static void RecordStopRemoteRoute();
-
   // Records whether the toolbar icon is pinned by the user pref / admin policy.
   // Recorded whenever the Cast dialog is opened.
   static void RecordIconStateAtDialogOpen(bool is_pinned);
diff --git a/components/media_router/browser/media_router_metrics_unittest.cc b/components/media_router/browser/media_router_metrics_unittest.cc
index 0eeef8d..f536239 100644
--- a/components/media_router/browser/media_router_metrics_unittest.cc
+++ b/components/media_router/browser/media_router_metrics_unittest.cc
@@ -132,24 +132,12 @@
                   Bucket(static_cast<int>(activation_location2), 1)));
 }
 
-TEST(MediaRouterMetricsTest, RecordMediaRouterDialogPaint) {
-  TestRecordTimeDeltaMetric(
-      base::BindRepeating(&MediaRouterMetrics::RecordMediaRouterDialogPaint),
-      MediaRouterMetrics::kHistogramUiDialogPaint);
-}
-
 TEST(MediaRouterMetricsTest, RecordMediaRouterDialogLoaded) {
   TestRecordTimeDeltaMetric(
       base::BindRepeating(&MediaRouterMetrics::RecordMediaRouterDialogLoaded),
       MediaRouterMetrics::kHistogramUiDialogLoadedWithData);
 }
 
-TEST(MediaRouterMetricsTest, RecordCloseDialogLatency) {
-  TestRecordTimeDeltaMetric(
-      base::BindRepeating(&MediaRouterMetrics::RecordCloseDialogLatency),
-      MediaRouterMetrics::kHistogramCloseLatency);
-}
-
 TEST(MediaRouterMetricsTest, RecordPresentationUrlType) {
   base::HistogramTester tester;
 
@@ -209,46 +197,6 @@
               ElementsAre(Bucket(0, 1), Bucket(30, 1)));
 }
 
-TEST(MediaRouterMetricsTest, RecordStartRouteDeviceIndex) {
-  base::HistogramTester tester;
-  tester.ExpectTotalCount(MediaRouterMetrics::kHistogramStartLocalPosition, 0);
-
-  MediaRouterMetrics::RecordStartRouteDeviceIndex(30);
-  MediaRouterMetrics::RecordStartRouteDeviceIndex(0);
-
-  tester.ExpectTotalCount(MediaRouterMetrics::kHistogramStartLocalPosition, 2);
-  EXPECT_THAT(
-      tester.GetAllSamples(MediaRouterMetrics::kHistogramStartLocalPosition),
-      ElementsAre(Bucket(0, 1), Bucket(30, 1)));
-}
-
-TEST(MediaRouterMetricsTest, RecordStartLocalSessionLatency) {
-  TestRecordTimeDeltaMetric(
-      base::BindRepeating(&MediaRouterMetrics::RecordStartLocalSessionLatency),
-      MediaRouterMetrics::kHistogramStartLocalLatency);
-}
-
-TEST(MediaRouterMetricsTest, RecordStartLocalSessionSuccessful) {
-  TestRecordBooleanMetric(
-      base::BindRepeating(
-          &MediaRouterMetrics::RecordStartLocalSessionSuccessful),
-      MediaRouterMetrics::kHistogramStartLocalSessionSuccessful);
-}
-
-TEST(MediaRouterMetricsTest, RecordStopRoute) {
-  base::HistogramTester tester;
-  tester.ExpectTotalCount(MediaRouterMetrics::kHistogramStopRoute, 0);
-
-  MediaRouterMetrics::RecordStopLocalRoute();
-  MediaRouterMetrics::RecordStopRemoteRoute();
-  MediaRouterMetrics::RecordStopLocalRoute();
-
-  tester.ExpectTotalCount(MediaRouterMetrics::kHistogramStopRoute, 3);
-  EXPECT_THAT(tester.GetAllSamples(MediaRouterMetrics::kHistogramStopRoute),
-              ElementsAre(Bucket(/* Local route */ 0, 2),
-                          Bucket(/* Remote route */ 1, 1)));
-}
-
 TEST(MediaRouterMetricsTest, RecordIconStateAtDialogOpen) {
   TestRecordBooleanMetric(
       base::BindRepeating(&MediaRouterMetrics::RecordIconStateAtDialogOpen),
diff --git a/components/media_router/common/media_source.h b/components/media_router/common/media_source.h
index 44db1070..797b1a7 100644
--- a/components/media_router/common/media_source.h
+++ b/components/media_router/common/media_source.h
@@ -159,7 +159,7 @@
   // used for MediaDialogView to associate the local media session notification
   // with a Reote Playback MediaRoute so that users can control Remote Playback
   // session from GMC.
-  // TODO(crrev.com/c/1491212): remove the `tab_id` field from the MediaSource
+  // TODO(crbug.com/1491212): remove the `tab_id` field from the MediaSource
   // and use the MVC model in GMC to handle Remote Playback UI presentation
   // logic.
   void AppendTabIdToRemotePlaybackUrlQuery(int tab_id);
diff --git a/components/no_state_prefetch/browser/no_state_prefetch_processor_impl_unittest.cc b/components/no_state_prefetch/browser/no_state_prefetch_processor_impl_unittest.cc
index 51d7c6d..e26ce81b 100644
--- a/components/no_state_prefetch/browser/no_state_prefetch_processor_impl_unittest.cc
+++ b/components/no_state_prefetch/browser/no_state_prefetch_processor_impl_unittest.cc
@@ -4,6 +4,7 @@
 
 #include "components/no_state_prefetch/browser/no_state_prefetch_processor_impl.h"
 
+#include "base/functional/callback_helpers.h"
 #include "base/memory/raw_ptr.h"
 #include "base/run_loop.h"
 #include "base/test/bind.h"
@@ -171,6 +172,9 @@
   remote->Start(std::move(attributes2));
   remote.FlushForTesting();
   EXPECT_EQ(bad_message_error, "NSPPI_START_TWICE");
+  // Clean up error handler, to avoid causing other tests run in the same
+  // process from crashing.
+  mojo::SetDefaultProcessErrorHandler(base::NullCallback());
 }
 
 TEST_F(NoStatePrefetchProcessorImplTest, Cancel) {
diff --git a/components/optimization_guide/core/aium/COMMON_METADATA b/components/optimization_guide/core/aium/COMMON_METADATA
deleted file mode 100644
index 42a428e..0000000
--- a/components/optimization_guide/core/aium/COMMON_METADATA
+++ /dev/null
@@ -1,3 +0,0 @@
-monorail {
-  component: "Internals>AI User Metrics"
-}
diff --git a/components/optimization_guide/core/aium/DIR_METADATA b/components/optimization_guide/core/aium/DIR_METADATA
deleted file mode 100644
index e6e383d4..0000000
--- a/components/optimization_guide/core/aium/DIR_METADATA
+++ /dev/null
@@ -1 +0,0 @@
-mixins: "//components/optimization_guide/core/aium/COMMON_METADATA"
\ No newline at end of file
diff --git a/components/optimization_guide/core/model_quality/COMMON_METADATA b/components/optimization_guide/core/model_quality/COMMON_METADATA
new file mode 100644
index 0000000..20f1a043
--- /dev/null
+++ b/components/optimization_guide/core/model_quality/COMMON_METADATA
@@ -0,0 +1,3 @@
+monorail {
+  component: "Internals>AI Model Quality"
+}
diff --git a/components/optimization_guide/core/model_quality/DIR_METADATA b/components/optimization_guide/core/model_quality/DIR_METADATA
new file mode 100644
index 0000000..0468e920
--- /dev/null
+++ b/components/optimization_guide/core/model_quality/DIR_METADATA
@@ -0,0 +1 @@
+mixins: "//components/optimization_guide/core/model_quality/COMMON_METADATA"
\ No newline at end of file
diff --git a/components/optimization_guide/core/aium/OWNERS b/components/optimization_guide/core/model_quality/OWNERS
similarity index 100%
rename from components/optimization_guide/core/aium/OWNERS
rename to components/optimization_guide/core/model_quality/OWNERS
diff --git a/components/optimization_guide/proto/BUILD.gn b/components/optimization_guide/proto/BUILD.gn
index 47d5db18..d1ffe20 100644
--- a/components/optimization_guide/proto/BUILD.gn
+++ b/components/optimization_guide/proto/BUILD.gn
@@ -11,8 +11,6 @@
 proto_library("optimization_guide_proto") {
   proto_in_dir = "//"
   sources = [
-    "aium_metadata.proto",
-    "aium_service.proto",
     "autocomplete_scoring_model_metadata.proto",
     "client_side_phishing_model_metadata.proto",
     "common_types.proto",
@@ -21,6 +19,8 @@
     "hints.proto",
     "loading_predictor_metadata.proto",
     "model_execution.proto",
+    "model_quality_metadata.proto",
+    "model_quality_service.proto",
     "models.proto",
     "on_device_tail_suggest_model_metadata.proto",
     "page_entities_metadata.proto",
diff --git a/components/optimization_guide/proto/aium_metadata.proto b/components/optimization_guide/proto/model_quality_metadata.proto
similarity index 100%
rename from components/optimization_guide/proto/aium_metadata.proto
rename to components/optimization_guide/proto/model_quality_metadata.proto
diff --git a/components/optimization_guide/proto/aium_service.proto b/components/optimization_guide/proto/model_quality_service.proto
similarity index 86%
rename from components/optimization_guide/proto/aium_service.proto
rename to components/optimization_guide/proto/model_quality_service.proto
index f5aa260..e260b2a 100644
--- a/components/optimization_guide/proto/aium_service.proto
+++ b/components/optimization_guide/proto/model_quality_service.proto
@@ -7,14 +7,14 @@
 option optimize_for = LITE_RUNTIME;
 option java_package = "org.chromium.components.optimization_guide.proto";
 
-option java_outer_classname = "AIUMServiceProto";
+option java_outer_classname = "ModelQualityServiceProto";
 
 package optimization_guide.proto;
 
-import "components/optimization_guide/proto/aium_metadata.proto";
+import "components/optimization_guide/proto/model_quality_metadata.proto";
 import "components/optimization_guide/proto/features/default_feature_ai_logging_data.proto";
 
-// A request to send AI data logs to the server.
+// A request to send AI data logs to the model quality server.
 message LogAiDataRequest {
   // Metadata for various AiLoggingData logs that can be batched.
   BatchedLoggingMetadata batched_metadata = 1;
diff --git a/components/password_manager/core/browser/password_generation_manager.cc b/components/password_manager/core/browser/password_generation_manager.cc
index c27c2a9..2a3bb9f 100644
--- a/components/password_manager/core/browser/password_generation_manager.cc
+++ b/components/password_manager/core/browser/password_generation_manager.cc
@@ -384,6 +384,7 @@
   }
   form_saver->UpdateReplace(generated, matches, old_password,
                             presaved_.value() /* old_primary_key */);
+  presaved_ = std::move(generated);
 }
 
 void PasswordGenerationManager::OnPresaveBubbleResult(
diff --git a/components/password_manager/core/browser/password_manager.cc b/components/password_manager/core/browser/password_manager.cc
index b2e6dc0..e62f096e 100644
--- a/components/password_manager/core/browser/password_manager.cc
+++ b/components/password_manager/core/browser/password_manager.cc
@@ -1151,8 +1151,9 @@
           submitted_manager->Clone());
     }
 
-    if (submitted_manager->HasGeneratedPassword())
+    if (submitted_manager->HasGeneratedPassword()) {
       client_->AutomaticPasswordSave(MoveOwnedSubmittedManager());
+    }
   }
   ResetSubmittedManager();
 }
diff --git a/components/safe_browsing/core/common/proto/csd.proto b/components/safe_browsing/core/common/proto/csd.proto
index b450142..d61dd07 100644
--- a/components/safe_browsing/core/common/proto/csd.proto
+++ b/components/safe_browsing/core/common/proto/csd.proto
@@ -993,6 +993,8 @@
     // Note: Version 1 can have inconsistent behavior because it uses
     // indeterminate UI strings (can be changed by a client-side feature flag).
     // Version 2: Client-side UI string/icon updates. Supported in M117.
+    // Version 3: Client-side UI string update for suspicious archive warnings.
+    // Supported in M120.
     optional int32 version = 1;
   }
   optional TailoredInfo tailored_info = 86;
diff --git a/components/signin/public/identity_manager/access_token_constants.cc b/components/signin/public/identity_manager/access_token_constants.cc
index d32bbf3d..b11ff6b 100644
--- a/components/signin/public/identity_manager/access_token_constants.cc
+++ b/components/signin/public/identity_manager/access_token_constants.cc
@@ -79,6 +79,10 @@
       // Required by supervision features that verify parent password.
       GaiaConstants::kAccountsReauthOAuth2Scope,
 
+      // Used by desktop Chrome to talk to passkey enclaves when using Google
+      // Password Manager.
+      GaiaConstants::kPasskeysEnclaveOAuth2Scope,
+
     // Required by ChromeOS only.
 #if BUILDFLAG(IS_CHROMEOS_ASH)
       GaiaConstants::kAssistantOAuth2Scope,
diff --git a/components/viz/service/display/renderer_pixeltest.cc b/components/viz/service/display/renderer_pixeltest.cc
index 2fe6033..d3512fe 100644
--- a/components/viz/service/display/renderer_pixeltest.cc
+++ b/components/viz/service/display/renderer_pixeltest.cc
@@ -5782,7 +5782,7 @@
     gfx::ColorTransform::Options options;
     options.tone_map_pq_and_hlg_to_dst = true;
     gfx::ColorTransform::RuntimeOptions runtime_options;
-    runtime_options.sdr_max_luminance_nits =
+    runtime_options.dst_sdr_max_luminance_nits =
         gfx::ColorSpace::kDefaultSDRWhiteLevel;
     std::unique_ptr<gfx::ColorTransform> transform =
         gfx::ColorTransform::NewColorTransform(this->src_color_space_,
diff --git a/content/browser/media/media_interface_proxy.cc b/content/browser/media/media_interface_proxy.cc
index 346bef12..98e5fad 100644
--- a/content/browser/media/media_interface_proxy.cc
+++ b/content/browser/media/media_interface_proxy.cc
@@ -183,7 +183,7 @@
           static_cast<StoragePartitionImpl*>(
               render_frame_host_->GetStoragePartition())
               ->GetCdmStorageManager();
-      DCHECK(cdm_storage_manager);
+
       cdm_storage_manager->OpenCdmStorage(
           CdmStorageBindingContext(storage_key, cdm_type_),
           std::move(receiver));
@@ -192,7 +192,6 @@
           static_cast<StoragePartitionImpl*>(
               render_frame_host_->GetStoragePartition())
               ->GetMediaLicenseManager();
-      DCHECK(media_license_manager);
 
       media_license_manager->OpenCdmStorage(
           CdmStorageBindingContext(storage_key, cdm_type_),
diff --git a/content/browser/memory_pressure/user_level_memory_pressure_signal_generator.cc b/content/browser/memory_pressure/user_level_memory_pressure_signal_generator.cc
index dd19e32..a90e7b4d 100644
--- a/content/browser/memory_pressure/user_level_memory_pressure_signal_generator.cc
+++ b/content/browser/memory_pressure/user_level_memory_pressure_signal_generator.cc
@@ -39,6 +39,13 @@
 constexpr base::TimeDelta kDefaultMeasurementInterval = base::Seconds(1);
 
 // Time interval between measuring total private memory footprint.
+base::TimeDelta MeasurementIntervalFor3GbDevices() {
+  static const base::FeatureParam<base::TimeDelta> kMeasurementInterval{
+      &content::features::kUserLevelMemoryPressureSignalOn3GbDevices,
+      "measurement_interval", kDefaultMeasurementInterval};
+  return kMeasurementInterval.Get();
+}
+
 base::TimeDelta MeasurementIntervalFor4GbDevices() {
   static const base::FeatureParam<base::TimeDelta> kMeasurementInterval{
       &content::features::kUserLevelMemoryPressureSignalOn4GbDevices,
@@ -53,6 +60,18 @@
   return kMeasurementInterval.Get();
 }
 
+// The memory threshold: 738 was selected at around the 99th percentile of
+// the Memory.Total.PrivateMemoryFootprint reported by Android devices whose
+// system memory were 3GB.
+constexpr size_t kMemoryThresholdMBOf3GbDevices = 738;
+
+uint64_t MemoryThresholdParamFor3GbDevices() {
+  static const base::FeatureParam<int> kMemoryThresholdParam{
+      &content::features::kUserLevelMemoryPressureSignalOn3GbDevices,
+      "memory_threshold_mb", kMemoryThresholdMBOf3GbDevices};
+  return base::as_unsigned(kMemoryThresholdParam.Get()) * k1MB;
+}
+
 // The memory threshold: 458 was selected at around the 99th percentile of
 // the Memory.Total.PrivateMemoryFootprint reported by Android devices whose
 // system memory were 4GB.
@@ -81,6 +100,13 @@
 
 // static
 void UserLevelMemoryPressureSignalGenerator::Initialize() {
+  if (content::features::IsUserLevelMemoryPressureSignalEnabledOn3GbDevices()) {
+    UserLevelMemoryPressureSignalGenerator::Get().Start(
+        MemoryThresholdParamFor3GbDevices(), MeasurementIntervalFor3GbDevices(),
+        content::features::MinUserMemoryPressureIntervalOn3GbDevices());
+    return;
+  }
+
   if (content::features::IsUserLevelMemoryPressureSignalEnabledOn4GbDevices()) {
     UserLevelMemoryPressureSignalGenerator::Get().Start(
         MemoryThresholdParamFor4GbDevices(), MeasurementIntervalFor4GbDevices(),
diff --git a/content/browser/renderer_host/render_frame_host_impl.h b/content/browser/renderer_host/render_frame_host_impl.h
index 12df0cc..96a1cfab 100644
--- a/content/browser/renderer_host/render_frame_host_impl.h
+++ b/content/browser/renderer_host/render_frame_host_impl.h
@@ -3257,6 +3257,8 @@
       NavigationSuddenTerminationDisablerTypeRecordUmaActivation);
   FRIEND_TEST_ALL_PREFIXES(NavigationRequestTest, SharedStorageWritable);
   FRIEND_TEST_ALL_PREFIXES(WebContentsImplBrowserTest, SetTitleOnUnload);
+  FRIEND_TEST_ALL_PREFIXES(SitePerProcessBrowserTest,
+                           DetachedIframeUnloadHandlerABCB);
 
   class SubresourceLoaderFactoriesConfig;
 
diff --git a/content/browser/resources/histograms/histograms_internals.ts b/content/browser/resources/histograms/histograms_internals.ts
index 80ef9e4..e9960fc 100644
--- a/content/browser/resources/histograms/histograms_internals.ts
+++ b/content/browser/resources/histograms/histograms_internals.ts
@@ -260,11 +260,6 @@
   getRequiredElement('stop').onclick = stopMonitoring;
   getRequiredElement('subprocess_checkbox').onclick = requestHistograms;
 
-  // Enable calling generateHistogramsAsText() from
-  // histograms_internals_ui_browsertest.js for testing purposes.
-  // Enable accessing monitoring mode status from
-  // histograms_internals_ui_browsertest.js for testing purposes.
-  Object.assign(window, {generateHistogramsAsText, monitoringStopped});
   requestHistograms();
 });
 
diff --git a/content/browser/site_per_process_unload_browsertest.cc b/content/browser/site_per_process_unload_browsertest.cc
index f8131fd..358eea0 100644
--- a/content/browser/site_per_process_unload_browsertest.cc
+++ b/content/browser/site_per_process_unload_browsertest.cc
@@ -905,15 +905,18 @@
   // 1) Navigate to a(b(c(b)))
   EXPECT_TRUE(NavigateToURL(shell(), initial_url));
   FrameTreeNode* root = web_contents()->GetPrimaryFrameTree().root();
-  RenderFrameHostImpl* rfh_a = root->current_frame_host();
-  RenderFrameHostImpl* rfh_b1 = rfh_a->child_at(0)->current_frame_host();
-  RenderFrameHostImpl* rfh_c = rfh_b1->child_at(0)->current_frame_host();
-  RenderFrameHostImpl* rfh_b2 = rfh_c->child_at(0)->current_frame_host();
+  RenderFrameHostImplWrapper rfh_a(root->current_frame_host());
+  RenderFrameHostImplWrapper rfh_b1(rfh_a->child_at(0)->current_frame_host());
+  RenderFrameHostImplWrapper rfh_c(rfh_b1->child_at(0)->current_frame_host());
+  RenderFrameHostImplWrapper rfh_b2(rfh_c->child_at(0)->current_frame_host());
 
   // 2) Add unload handlers on B1, B2 and C.
   UnloadPrint(rfh_b1->frame_tree_node(), "B1");
+  rfh_b1->DisableUnloadTimerForTesting();
   UnloadPrint(rfh_b2->frame_tree_node(), "B2");
+  rfh_b2->DisableUnloadTimerForTesting();
   UnloadPrint(rfh_c->frame_tree_node(), "C");
+  rfh_c->DisableUnloadTimerForTesting();
 
   DOMMessageQueue dom_message_queue(web_contents());
   RenderProcessHostWatcher shutdown_B(
diff --git a/content/browser/storage_partition_impl.cc b/content/browser/storage_partition_impl.cc
index a0db93b3..af14b29 100644
--- a/content/browser/storage_partition_impl.cc
+++ b/content/browser/storage_partition_impl.cc
@@ -1902,11 +1902,7 @@
 }
 
 CdmStorageManager* StoragePartitionImpl::GetCdmStorageManager() {
-  if (base::FeatureList::IsEnabled(features::kCdmStorageDatabase)) {
-    CHECK(cdm_storage_manager_);
     return cdm_storage_manager_.get();
-  }
-  return nullptr;
 }
 #endif  // BUILDFLAG(ENABLE_LIBRARY_CDMS)
 
diff --git a/content/common/user_level_memory_pressure_signal_features.cc b/content/common/user_level_memory_pressure_signal_features.cc
index ecb8bcc..1a81ce2 100644
--- a/content/common/user_level_memory_pressure_signal_features.cc
+++ b/content/common/user_level_memory_pressure_signal_features.cc
@@ -16,8 +16,6 @@
 
 namespace {
 
-constexpr uint64_t k1MB = 1024ull * 1024;
-constexpr uint64_t k1GB = 1024ull * k1MB;
 constexpr base::TimeDelta kDefaultMinimumInterval = base::Minutes(10);
 
 // Each renderer does not generate memory pressure signals until the interval
@@ -33,7 +31,13 @@
 }  // namespace
 
 // Monitor total private memory footprint and dispatch memory pressure signal
-// if the value exceeds the pre-defined threshold. (for Android 4GB devices)
+// if the value exceeds the pre-defined threshold.
+
+// (for Android 3GB devices)
+BASE_FEATURE(kUserLevelMemoryPressureSignalOn3GbDevices,
+             "UserLevelMemoryPressureSignalOn3GbDevices",
+             base::FEATURE_DISABLED_BY_DEFAULT);
+// (for Android 4GB devices)
 BASE_FEATURE(kUserLevelMemoryPressureSignalOn4GbDevices,
              "UserLevelMemoryPressureSignalOn4GbDevices",
              base::FEATURE_ENABLED_BY_DEFAULT);
@@ -42,26 +46,38 @@
              "UserLevelMemoryPressureSignalOn6GbDevices",
              base::FEATURE_ENABLED_BY_DEFAULT);
 
+bool IsUserLevelMemoryPressureSignalEnabledOn3GbDevices() {
+  static bool s_enabled =
+      base::SysInfo::IsAndroid3GbDevice() &&
+      base::FeatureList::IsEnabled(kUserLevelMemoryPressureSignalOn3GbDevices);
+  return s_enabled;
+}
+
 bool IsUserLevelMemoryPressureSignalEnabledOn4GbDevices() {
   // Because of Android carveouts, AmountOfPhysicalMemory() returns smaller
   // than the actual memory size, So we will use a small lowerbound than 4GB
   // to discriminate real 4GB devices from lower memory ones.
   static bool s_enabled =
-      (3 * k1GB + 200 * k1MB <= base::SysInfo::AmountOfPhysicalMemory() &&
-       base::SysInfo::AmountOfPhysicalMemory() <= 4 * k1GB) &&
+      base::SysInfo::IsAndroid4GbDevice() &&
       base::FeatureList::IsEnabled(kUserLevelMemoryPressureSignalOn4GbDevices);
   return s_enabled;
 }
 
 bool IsUserLevelMemoryPressureSignalEnabledOn6GbDevices() {
   static bool s_enabled =
-      (4 * k1GB < base::SysInfo::AmountOfPhysicalMemory() &&
-       base::SysInfo::AmountOfPhysicalMemory() <= 6 * k1GB) &&
+      base::SysInfo::IsAndroid6GbDevice() &&
       base::FeatureList::IsEnabled(kUserLevelMemoryPressureSignalOn6GbDevices);
   return s_enabled;
 }
 
 // Minimum time interval between generated memory pressure signals.
+base::TimeDelta MinUserMemoryPressureIntervalOn3GbDevices() {
+  static const base::FeatureParam<base::TimeDelta> kMinimumInterval{
+      &kUserLevelMemoryPressureSignalOn3GbDevices, "minimum_interval",
+      kDefaultMinimumInterval};
+  return kMinimumInterval.Get();
+}
+
 base::TimeDelta MinUserMemoryPressureIntervalOn4GbDevices() {
   static const base::FeatureParam<base::TimeDelta> kMinimumInterval{
       &kUserLevelMemoryPressureSignalOn4GbDevices, "minimum_interval",
@@ -76,6 +92,13 @@
   return kMinimumInterval.Get();
 }
 
+base::TimeDelta InertIntervalFor3GbDevices() {
+  static const base::FeatureParam<base::TimeDelta> kInertInterval{
+      &features::kUserLevelMemoryPressureSignalOn3GbDevices,
+      "inert_interval_after_loading", kDefaultInertInterval};
+  return kInertInterval.Get();
+}
+
 base::TimeDelta InertIntervalFor4GbDevices() {
   static const base::FeatureParam<base::TimeDelta> kInertInterval{
       &features::kUserLevelMemoryPressureSignalOn4GbDevices,
diff --git a/content/common/user_level_memory_pressure_signal_features.h b/content/common/user_level_memory_pressure_signal_features.h
index 5b90a7e..3800445 100644
--- a/content/common/user_level_memory_pressure_signal_features.h
+++ b/content/common/user_level_memory_pressure_signal_features.h
@@ -14,16 +14,20 @@
 
 namespace content::features {
 
+CONTENT_EXPORT BASE_DECLARE_FEATURE(kUserLevelMemoryPressureSignalOn3GbDevices);
 CONTENT_EXPORT BASE_DECLARE_FEATURE(kUserLevelMemoryPressureSignalOn4GbDevices);
 CONTENT_EXPORT BASE_DECLARE_FEATURE(kUserLevelMemoryPressureSignalOn6GbDevices);
 
 // Helper functions for UserLevelMemoryPressureSignal features.
+CONTENT_EXPORT bool IsUserLevelMemoryPressureSignalEnabledOn3GbDevices();
 CONTENT_EXPORT bool IsUserLevelMemoryPressureSignalEnabledOn4GbDevices();
 CONTENT_EXPORT bool IsUserLevelMemoryPressureSignalEnabledOn6GbDevices();
 
+CONTENT_EXPORT base::TimeDelta InertIntervalFor3GbDevices();
 CONTENT_EXPORT base::TimeDelta InertIntervalFor4GbDevices();
 CONTENT_EXPORT base::TimeDelta InertIntervalFor6GbDevices();
 
+CONTENT_EXPORT base::TimeDelta MinUserMemoryPressureIntervalOn3GbDevices();
 CONTENT_EXPORT base::TimeDelta MinUserMemoryPressureIntervalOn4GbDevices();
 CONTENT_EXPORT base::TimeDelta MinUserMemoryPressureIntervalOn6GbDevices();
 
diff --git a/content/renderer/renderer_blink_platform_impl.cc b/content/renderer/renderer_blink_platform_impl.cc
index 20564e4f..55c98b48 100644
--- a/content/renderer/renderer_blink_platform_impl.cc
+++ b/content/renderer/renderer_blink_platform_impl.cc
@@ -1011,12 +1011,18 @@
 }
 
 bool RendererBlinkPlatformImpl::IsUserLevelMemoryPressureSignalEnabled() {
-  return features::IsUserLevelMemoryPressureSignalEnabledOn4GbDevices() ||
+  return features::IsUserLevelMemoryPressureSignalEnabledOn3GbDevices() ||
+         features::IsUserLevelMemoryPressureSignalEnabledOn4GbDevices() ||
          features::IsUserLevelMemoryPressureSignalEnabledOn6GbDevices();
 }
 
 std::pair<base::TimeDelta, base::TimeDelta> RendererBlinkPlatformImpl::
     InertAndMinimumIntervalOfUserLevelMemoryPressureSignal() {
+  if (features::IsUserLevelMemoryPressureSignalEnabledOn3GbDevices()) {
+    return std::make_pair(
+        features::InertIntervalFor3GbDevices(),
+        features::MinUserMemoryPressureIntervalOn3GbDevices());
+  }
   if (features::IsUserLevelMemoryPressureSignalEnabledOn4GbDevices()) {
     return std::make_pair(
         features::InertIntervalFor4GbDevices(),
diff --git a/content/test/data/interest_group/bidding_argument_validator.js b/content/test/data/interest_group/bidding_argument_validator.js
index 0ac3bae9..6ef266b 100644
--- a/content/test/data/interest_group/bidding_argument_validator.js
+++ b/content/test/data/interest_group/bidding_argument_validator.js
@@ -213,7 +213,13 @@
     if (browserSignals.prevWinsMs.length !== 0)
       throw 'Wrong prevWinsMs ' + JSON.stringify(browserSignals.prevWinsMs);
   } else {
-    if (Object.keys(browserSignals).length !== 14) {
+    // FledgePassKAnonStatusToReportWin feature adds a new parameter
+    // KAnonStatus to reportWin(), which is under a Finch trial for some enabled
+    // tests.
+    // TODO(xtlsheep): Check length only equals to 15 after
+    // FledgePassKAnonStatusToReportWin is completely turned on.
+    if (Object.keys(browserSignals).length !== 14 &&
+        Object.keys(browserSignals).length !== 15) {
       throw 'Wrong number of browser signals fields ' +
           JSON.stringify(browserSignals);
     }
diff --git a/content/test/data/interest_group/component_auction_bidding_argument_validator.js b/content/test/data/interest_group/component_auction_bidding_argument_validator.js
index 2ea02c0..20d6a88d 100644
--- a/content/test/data/interest_group/component_auction_bidding_argument_validator.js
+++ b/content/test/data/interest_group/component_auction_bidding_argument_validator.js
@@ -193,7 +193,13 @@
     if (browserSignals.prevWinsMs.length !== 0)
       throw 'Wrong prevWinsMs ' + JSON.stringify(browserSignals.prevWinsMs);
   } else {
-    if (Object.keys(browserSignals).length !== 15) {
+    // FledgePassKAnonStatusToReportWin feature adds a new parameter
+    // KAnonStatus to reportWin(), which is under a Finch trial for some enabled
+    // tests.
+    // TODO(xtlsheep): Check length only equals to 16 after
+    // FledgePassKAnonStatusToReportWin is completely turned on.
+    if (Object.keys(browserSignals).length !== 15 &&
+        Object.keys(browserSignals).length !== 16) {
       throw 'Wrong number of browser signals fields ' +
           JSON.stringify(browserSignals);
     }
diff --git a/content/test/gpu/gpu_tests/test_expectations/expected_color_expectations.txt b/content/test/gpu/gpu_tests/test_expectations/expected_color_expectations.txt
index 97d55db..6fc54b3 100644
--- a/content/test/gpu/gpu_tests/test_expectations/expected_color_expectations.txt
+++ b/content/test/gpu/gpu_tests/test_expectations/expected_color_expectations.txt
@@ -107,7 +107,7 @@
 crbug.com/1382332 [ angle-disabled chromeos chromeos-board-amd64-generic cros-chrome no-passthrough target-cpu-64 ] ExpectedColor_MediaRecorderFromVideoElementWithOoprCanvasDisabled [ Failure ]
 crbug.com/1382332 [ android-chromium android-s android-sm-a135m angle-disabled arm no-clang-coverage no-passthrough renderer-skia-gl target-cpu-32 ] ExpectedColor_MediaRecorderFromVideoElementWithOoprCanvasDisabled [ Failure ]
 crbug.com/1382332 [ android-nexus-5x android angle-disabled no-clang-coverage no-passthrough qualcomm renderer-skia-gl target-cpu-64 ] ExpectedColor_MediaRecorderFromVideoElementWithOoprCanvasDisabled [ Failure ]
-crbug.com/1382332 [ fuchsia ] ExpectedColor_MediaRecorderFromVideoElementWithOoprCanvasDisabled [ Failure ]
+crbug.com/1382332 [ angle-vulkan arm fuchsia no-clang-coverage ] ExpectedColor_MediaRecorderFromVideoElementWithOoprCanvasDisabled [ Failure ]
 
 crbug.com/1302427 [ clang-coverage fuchsia fuchsia-board-qemu-x64 ] ExpectedColor_MediaRecorderFrom2DCanvas [ Failure ]
 
diff --git a/google_apis/gaia/gaia_constants.cc b/google_apis/gaia/gaia_constants.cc
index ca2fcce2..d326ec6 100644
--- a/google_apis/gaia/gaia_constants.cc
+++ b/google_apis/gaia/gaia_constants.cc
@@ -177,6 +177,10 @@
 const char kCalendarReadOnlyOAuth2Scope[] =
     "https://www.googleapis.com/auth/calendar.readonly";
 
+// OAuth 2 scope for Google Password Manager passkey enclaves.
+const char kPasskeysEnclaveOAuth2Scope[] =
+  "https://www.googleapis.com/auth/secureidentity.action";
+
 // OAuth 2 scopes for Google Tasks API.
 const char kTasksReadOnlyOAuth2Scope[] =
     "https://www.googleapis.com/auth/tasks.readonly";
diff --git a/google_apis/gaia/gaia_constants.h b/google_apis/gaia/gaia_constants.h
index 30402e3..70a525e 100644
--- a/google_apis/gaia/gaia_constants.h
+++ b/google_apis/gaia/gaia_constants.h
@@ -74,6 +74,7 @@
 COMPONENT_EXPORT(GOOGLE_APIS) extern const char kFeedOAuth2Scope[];
 COMPONENT_EXPORT(GOOGLE_APIS) extern const char kKAnonymityServiceOAuth2Scope[];
 COMPONENT_EXPORT(GOOGLE_APIS) extern const char kCalendarReadOnlyOAuth2Scope[];
+COMPONENT_EXPORT(GOOGLE_APIS) extern const char kPasskeysEnclaveOAuth2Scope[];
 
 // OAuth 2 scopes for Google Tasks API.
 // https://developers.google.com/identity/protocols/oauth2/scopes#tasks
diff --git a/gpu/command_buffer/service/dawn_context_provider.cc b/gpu/command_buffer/service/dawn_context_provider.cc
index d274320..bd917830 100644
--- a/gpu/command_buffer/service/dawn_context_provider.cc
+++ b/gpu/command_buffer/service/dawn_context_provider.cc
@@ -225,13 +225,8 @@
   wgpu::DawnTogglesDescriptor toggles_desc;
   toggles_desc.enabledToggles = enabled_toggles.data();
   toggles_desc.disabledToggles = disabled_toggles.data();
-#ifdef WGPU_BREAKING_CHANGE_COUNT_RENAME
   toggles_desc.enabledToggleCount = enabled_toggles.size();
   toggles_desc.disabledToggleCount = disabled_toggles.size();
-#else
-  toggles_desc.enabledTogglesCount = enabled_toggles.size();
-  toggles_desc.disabledTogglesCount = disabled_toggles.size();
-#endif
 
   wgpu::DeviceDescriptor descriptor;
   descriptor.nextInChain = &toggles_desc;
@@ -292,11 +287,7 @@
   }
 
   descriptor.requiredFeatures = features.data();
-#ifdef WGPU_BREAKING_CHANGE_COUNT_RENAME
   descriptor.requiredFeatureCount = std::size(features);
-#else
-  descriptor.requiredFeaturesCount = std::size(features);
-#endif
 
   wgpu::Device device = adapter.CreateDevice(&descriptor);
   if (!device) {
diff --git a/gpu/command_buffer/service/dawn_instance.cc b/gpu/command_buffer/service/dawn_instance.cc
index ef6d964..4dc95bc 100644
--- a/gpu/command_buffer/service/dawn_instance.cc
+++ b/gpu/command_buffer/service/dawn_instance.cc
@@ -60,20 +60,10 @@
   }
 
   wgpu::DawnTogglesDescriptor dawn_toggle_desc;
-#ifdef WGPU_BREAKING_CHANGE_COUNT_RENAME
   dawn_toggle_desc.enabledToggleCount = require_instance_enabled_toggles.size();
-#else
-  dawn_toggle_desc.enabledTogglesCount =
-      require_instance_enabled_toggles.size();
-#endif
   dawn_toggle_desc.enabledToggles = require_instance_enabled_toggles.data();
-#ifdef WGPU_BREAKING_CHANGE_COUNT_RENAME
   dawn_toggle_desc.disabledToggleCount =
       require_instance_disabled_toggles.size();
-#else
-  dawn_toggle_desc.disabledTogglesCount =
-      require_instance_disabled_toggles.size();
-#endif
   dawn_toggle_desc.disabledToggles = require_instance_disabled_toggles.data();
 
   dawn::native::DawnInstanceDescriptor dawn_instance_desc;
diff --git a/gpu/command_buffer/service/shared_image/d3d_image_backing_factory_unittest.cc b/gpu/command_buffer/service/shared_image/d3d_image_backing_factory_unittest.cc
index da5a4df2..2b37648 100644
--- a/gpu/command_buffer/service/shared_image/d3d_image_backing_factory_unittest.cc
+++ b/gpu/command_buffer/service/shared_image/d3d_image_backing_factory_unittest.cc
@@ -644,11 +644,7 @@
   // internal methods that would need specific usages.
   wgpu::FeatureName dawn_internal_usage = wgpu::FeatureName::DawnInternalUsages;
   wgpu::DeviceDescriptor device_descriptor;
-#ifdef WGPU_BREAKING_CHANGE_COUNT_RENAME
   device_descriptor.requiredFeatureCount = 1;
-#else
-  device_descriptor.requiredFeaturesCount = 1;
-#endif
   device_descriptor.requiredFeatures = &dawn_internal_usage;
 
   wgpu::Device device =
@@ -837,11 +833,7 @@
   // internal methods that would need specific usages.
   wgpu::FeatureName dawn_internal_usage = wgpu::FeatureName::DawnInternalUsages;
   wgpu::DeviceDescriptor device_descriptor;
-#ifdef WGPU_BREAKING_CHANGE_COUNT_RENAME
   device_descriptor.requiredFeatureCount = 1;
-#else
-  device_descriptor.requiredFeaturesCount = 1;
-#endif
   device_descriptor.requiredFeatures = &dawn_internal_usage;
 
   wgpu::Device device =
@@ -1002,11 +994,7 @@
   // internal methods that would need specific usages.
   wgpu::FeatureName dawn_internal_usage = wgpu::FeatureName::DawnInternalUsages;
   wgpu::DeviceDescriptor device_descriptor;
-#ifdef WGPU_BREAKING_CHANGE_COUNT_RENAME
   device_descriptor.requiredFeatureCount = 1;
-#else
-  device_descriptor.requiredFeaturesCount = 1;
-#endif
   device_descriptor.requiredFeatures = &dawn_internal_usage;
 
   wgpu::Device device =
@@ -1092,11 +1080,7 @@
   // internal methods that would need specific usages.
   wgpu::FeatureName dawn_internal_usage = wgpu::FeatureName::DawnInternalUsages;
   wgpu::DeviceDescriptor device_descriptor;
-#ifdef WGPU_BREAKING_CHANGE_COUNT_RENAME
   device_descriptor.requiredFeatureCount = 1;
-#else
-  device_descriptor.requiredFeaturesCount = 1;
-#endif
   device_descriptor.requiredFeatures = &dawn_internal_usage;
 
   wgpu::Device device =
@@ -1357,11 +1341,7 @@
   // internal methods that would need specific usages.
   wgpu::FeatureName dawn_internal_usage = wgpu::FeatureName::DawnInternalUsages;
   wgpu::DeviceDescriptor device_descriptor;
-#ifdef WGPU_BREAKING_CHANGE_COUNT_RENAME
   device_descriptor.requiredFeatureCount = 1;
-#else
-  device_descriptor.requiredFeaturesCount = 1;
-#endif
   device_descriptor.requiredFeatures = &dawn_internal_usage;
 
   wgpu::Device device =
@@ -1485,11 +1465,7 @@
   // internal methods that would need specific usages.
   wgpu::FeatureName dawn_internal_usage = wgpu::FeatureName::DawnInternalUsages;
   wgpu::DeviceDescriptor device_descriptor;
-#ifdef WGPU_BREAKING_CHANGE_COUNT_RENAME
   device_descriptor.requiredFeatureCount = 1;
-#else
-  device_descriptor.requiredFeaturesCount = 1;
-#endif
   device_descriptor.requiredFeatures = &dawn_internal_usage;
 
   wgpu::Device device =
diff --git a/gpu/command_buffer/service/shared_image/egl_image_backing_factory_unittest.cc b/gpu/command_buffer/service/shared_image/egl_image_backing_factory_unittest.cc
index aa18c1f..548b27b 100644
--- a/gpu/command_buffer/service/shared_image/egl_image_backing_factory_unittest.cc
+++ b/gpu/command_buffer/service/shared_image/egl_image_backing_factory_unittest.cc
@@ -426,11 +426,7 @@
   // internal methods that would need specific usages.
   wgpu::FeatureName dawn_internal_usage = wgpu::FeatureName::DawnInternalUsages;
   wgpu::DeviceDescriptor device_descriptor;
-#ifdef WGPU_BREAKING_CHANGE_COUNT_RENAME
   device_descriptor.requiredFeatureCount = 1;
-#else
-  device_descriptor.requiredFeaturesCount = 1;
-#endif
   device_descriptor.requiredFeatures = &dawn_internal_usage;
 
   wgpu::Device device =
diff --git a/gpu/command_buffer/service/shared_image/external_vk_image_backing_factory_unittest.cc b/gpu/command_buffer/service/shared_image/external_vk_image_backing_factory_unittest.cc
index af4df7a8..adb3d2b 100644
--- a/gpu/command_buffer/service/shared_image/external_vk_image_backing_factory_unittest.cc
+++ b/gpu/command_buffer/service/shared_image/external_vk_image_backing_factory_unittest.cc
@@ -88,11 +88,7 @@
     wgpu::FeatureName dawn_internal_usage =
         wgpu::FeatureName::DawnInternalUsages;
     wgpu::DeviceDescriptor device_descriptor;
-#ifdef WGPU_BREAKING_CHANGE_COUNT_RENAME
     device_descriptor.requiredFeatureCount = 1;
-#else
-    device_descriptor.requiredFeaturesCount = 1;
-#endif
     device_descriptor.requiredFeatures = &dawn_internal_usage;
 
     dawn_device_ =
diff --git a/gpu/command_buffer/service/shared_image/iosurface_image_backing_factory_unittest.cc b/gpu/command_buffer/service/shared_image/iosurface_image_backing_factory_unittest.cc
index 9723bcc..b4d783d 100644
--- a/gpu/command_buffer/service/shared_image/iosurface_image_backing_factory_unittest.cc
+++ b/gpu/command_buffer/service/shared_image/iosurface_image_backing_factory_unittest.cc
@@ -196,11 +196,7 @@
 
     wgpu::DawnTogglesDescriptor adapter_toggles_desc;
     adapter_toggles_desc.enabledToggles = adapter_enabled_toggles.data();
-#ifdef WGPU_BREAKING_CHANGE_COUNT_RENAME
     adapter_toggles_desc.enabledToggleCount = adapter_enabled_toggles.size();
-#else
-    adapter_toggles_desc.enabledTogglesCount = adapter_enabled_toggles.size();
-#endif
     adapter_options.nextInChain = &adapter_toggles_desc;
 
     std::vector<dawn::native::Adapter> adapters =
@@ -224,11 +220,7 @@
     // internal methods that would need specific usages.
     features.push_back(wgpu::FeatureName::DawnInternalUsages);
     wgpu::DeviceDescriptor device_descriptor;
-#ifdef WGPU_BREAKING_CHANGE_COUNT_RENAME
     device_descriptor.requiredFeatureCount = features.size();
-#else
-    device_descriptor.requiredFeaturesCount = features.size();
-#endif
     device_descriptor.requiredFeatures = features.data();
 
     wgpu::Device device = adapter.CreateDevice(&device_descriptor);
diff --git a/gpu/command_buffer/service/webgpu_decoder_impl.cc b/gpu/command_buffer/service/webgpu_decoder_impl.cc
index e41f296..ee0ed66 100644
--- a/gpu/command_buffer/service/webgpu_decoder_impl.cc
+++ b/gpu/command_buffer/service/webgpu_decoder_impl.cc
@@ -1309,13 +1309,8 @@
 
   std::vector<wgpu::FeatureName> required_features;
 
-#ifdef WGPU_BREAKING_CHANGE_COUNT_RENAME
   if (desc.requiredFeatureCount) {
     size_t requiredFeatureCount = desc.requiredFeatureCount;
-#else
-  if (desc.requiredFeaturesCount) {
-    size_t requiredFeatureCount = desc.requiredFeaturesCount;
-#endif
     required_features = {
         desc.requiredFeatures,
         desc.requiredFeatures + requiredFeatureCount,
@@ -1352,11 +1347,7 @@
 #endif
 
   desc.requiredFeatures = required_features.data();
-#ifdef WGPU_BREAKING_CHANGE_COUNT_RENAME
   desc.requiredFeatureCount = required_features.size();
-#else
-  desc.requiredFeaturesCount = required_features.size();
-#endif
 
   // If a new toggle is added here, GetDawnTogglesForWebGPU() which collects
   // info for about:gpu should be updated as well.
@@ -1386,21 +1377,11 @@
     require_device_disabled_toggles.push_back(toggles.c_str());
   }
   dawn_device_toggles.enabledToggles = require_device_enabled_toggles.data();
-#ifdef WGPU_BREAKING_CHANGE_COUNT_RENAME
   dawn_device_toggles.enabledToggleCount =
       require_device_enabled_toggles.size();
-#else
-  dawn_device_toggles.enabledTogglesCount =
-      require_device_enabled_toggles.size();
-#endif
   dawn_device_toggles.disabledToggles = require_device_disabled_toggles.data();
-#ifdef WGPU_BREAKING_CHANGE_COUNT_RENAME
   dawn_device_toggles.disabledToggleCount =
       require_device_disabled_toggles.size();
-#else
-  dawn_device_toggles.disabledTogglesCount =
-      require_device_disabled_toggles.size();
-#endif
   ChainStruct(desc, &dawn_device_toggles);
 
   // Dawn caching isolation key information needs to be passed per device. If an
@@ -1468,15 +1449,9 @@
       label = device_label_.c_str();
     }
     if (desc.requiredFeatures) {
-#ifdef WGPU_BREAKING_CHANGE_COUNT_RENAME
       required_features_ = std::vector<WGPUFeatureName>(
           desc.requiredFeatures,
           desc.requiredFeatures + desc.requiredFeatureCount);
-#else
-      required_features_ = std::vector<WGPUFeatureName>(
-          desc.requiredFeatures,
-          desc.requiredFeatures + desc.requiredFeaturesCount);
-#endif
       requiredFeatures = required_features_.data();
     }
     if (desc.requiredLimits) {
@@ -1591,22 +1566,12 @@
     require_adapter_disabled_toggles.push_back(toggles.c_str());
   }
   dawn_adapter_toggles.enabledToggles = require_adapter_enabled_toggles.data();
-#ifdef WGPU_BREAKING_CHANGE_COUNT_RENAME
   dawn_adapter_toggles.enabledToggleCount =
       require_adapter_enabled_toggles.size();
-#else
-  dawn_adapter_toggles.enabledTogglesCount =
-      require_adapter_enabled_toggles.size();
-#endif
   dawn_adapter_toggles.disabledToggles =
       require_adapter_disabled_toggles.data();
-#ifdef WGPU_BREAKING_CHANGE_COUNT_RENAME
   dawn_adapter_toggles.disabledToggleCount =
       require_adapter_disabled_toggles.size();
-#else
-  dawn_adapter_toggles.disabledTogglesCount =
-      require_adapter_disabled_toggles.size();
-#endif
   ChainStruct(adapter_options, &dawn_adapter_toggles);
 
 #if BUILDFLAG(IS_WIN)
diff --git a/gpu/command_buffer/tests/webgpu_test.cc b/gpu/command_buffer/tests/webgpu_test.cc
index c2e4389..0f875b2f 100644
--- a/gpu/command_buffer/tests/webgpu_test.cc
+++ b/gpu/command_buffer/tests/webgpu_test.cc
@@ -416,11 +416,7 @@
 
   DCHECK(adapter_);
   wgpu::DeviceDescriptor device_desc = {};
-#ifdef WGPU_BREAKING_CHANGE_COUNT_RENAME
   device_desc.requiredFeatureCount = 1;
-#else
-  device_desc.requiredFeaturesCount = 1;
-#endif
   device_desc.requiredFeatures = &invalid_feature;
 
   adapter_.RequestDevice(&device_desc, callback->UnboundCallback(),
diff --git "a/infra/config/generated/builders/ci/Android arm64 Builder \050dbg\051/properties.json" "b/infra/config/generated/builders/ci/Android arm64 Builder \050dbg\051/properties.json"
index b1e0d8f..bce0bd9 100644
--- "a/infra/config/generated/builders/ci/Android arm64 Builder \050dbg\051/properties.json"
+++ "b/infra/config/generated/builders/ci/Android arm64 Builder \050dbg\051/properties.json"
@@ -112,41 +112,6 @@
           {
             "builder_id": {
               "bucket": "ci",
-              "builder": "Nougat Phone Tester",
-              "project": "chromium"
-            },
-            "builder_spec": {
-              "build_gs_bucket": "chromium-android-archive",
-              "builder_group": "chromium.android",
-              "execution_mode": "TEST",
-              "legacy_android_config": {
-                "config": "main_builder_mb"
-              },
-              "legacy_chromium_config": {
-                "apply_configs": [
-                  "download_xr_test_apks"
-                ],
-                "build_config": "Debug",
-                "config": "android",
-                "target_bits": 64,
-                "target_platform": "android"
-              },
-              "legacy_gclient_config": {
-                "apply_configs": [
-                  "android"
-                ],
-                "config": "chromium"
-              },
-              "parent": {
-                "bucket": "ci",
-                "builder": "Android arm64 Builder (dbg)",
-                "project": "chromium"
-              }
-            }
-          },
-          {
-            "builder_id": {
-              "bucket": "ci",
               "builder": "Oreo Phone Tester",
               "project": "chromium"
             },
@@ -236,11 +201,6 @@
         },
         {
           "bucket": "ci",
-          "builder": "Nougat Phone Tester",
-          "project": "chromium"
-        },
-        {
-          "bucket": "ci",
           "builder": "Oreo Phone Tester",
           "project": "chromium"
         },
@@ -270,10 +230,6 @@
         {
           "builder": "android_arm64_dbg_recipe",
           "group": "tryserver.chromium.android"
-        },
-        {
-          "builder": "try-nougat-phone-tester",
-          "group": "tryserver.chromium.android"
         }
       ]
     }
diff --git a/infra/config/generated/builders/ci/Nougat Phone Tester/properties.json b/infra/config/generated/builders/ci/Nougat Phone Tester/properties.json
deleted file mode 100644
index 0b73306..0000000
--- a/infra/config/generated/builders/ci/Nougat Phone Tester/properties.json
+++ /dev/null
@@ -1,104 +0,0 @@
-{
-  "$build/chromium_tests_builder_config": {
-    "builder_config": {
-      "builder_db": {
-        "entries": [
-          {
-            "builder_id": {
-              "bucket": "ci",
-              "builder": "Android arm64 Builder (dbg)",
-              "project": "chromium"
-            },
-            "builder_spec": {
-              "build_gs_bucket": "chromium-android-archive",
-              "builder_group": "chromium.android",
-              "execution_mode": "COMPILE_AND_TEST",
-              "legacy_android_config": {
-                "config": "main_builder_mb"
-              },
-              "legacy_chromium_config": {
-                "apply_configs": [
-                  "download_xr_test_apks"
-                ],
-                "build_config": "Debug",
-                "config": "android",
-                "target_bits": 64,
-                "target_platform": "android"
-              },
-              "legacy_gclient_config": {
-                "apply_configs": [
-                  "android"
-                ],
-                "config": "chromium"
-              }
-            }
-          },
-          {
-            "builder_id": {
-              "bucket": "ci",
-              "builder": "Nougat Phone Tester",
-              "project": "chromium"
-            },
-            "builder_spec": {
-              "build_gs_bucket": "chromium-android-archive",
-              "builder_group": "chromium.android",
-              "execution_mode": "TEST",
-              "legacy_android_config": {
-                "config": "main_builder_mb"
-              },
-              "legacy_chromium_config": {
-                "apply_configs": [
-                  "download_xr_test_apks"
-                ],
-                "build_config": "Debug",
-                "config": "android",
-                "target_bits": 64,
-                "target_platform": "android"
-              },
-              "legacy_gclient_config": {
-                "apply_configs": [
-                  "android"
-                ],
-                "config": "chromium"
-              },
-              "parent": {
-                "bucket": "ci",
-                "builder": "Android arm64 Builder (dbg)",
-                "project": "chromium"
-              }
-            }
-          }
-        ]
-      },
-      "builder_ids": [
-        {
-          "bucket": "ci",
-          "builder": "Nougat Phone Tester",
-          "project": "chromium"
-        }
-      ],
-      "mirroring_builder_group_and_names": [
-        {
-          "builder": "android_arm64_dbg_recipe",
-          "group": "tryserver.chromium.android"
-        },
-        {
-          "builder": "try-nougat-phone-tester",
-          "group": "tryserver.chromium.android"
-        }
-      ]
-    }
-  },
-  "$recipe_engine/resultdb/test_presentation": {
-    "column_keys": [],
-    "grouping_keys": [
-      "status",
-      "v.test_suite"
-    ]
-  },
-  "builder_group": "chromium.android",
-  "recipe": "chromium",
-  "sheriff_rotations": [
-    "android"
-  ]
-}
\ No newline at end of file
diff --git a/infra/config/generated/builders/try/android_arm64_dbg_recipe/properties.json b/infra/config/generated/builders/try/android_arm64_dbg_recipe/properties.json
index 154136e..8055d70 100644
--- a/infra/config/generated/builders/try/android_arm64_dbg_recipe/properties.json
+++ b/infra/config/generated/builders/try/android_arm64_dbg_recipe/properties.json
@@ -112,41 +112,6 @@
           {
             "builder_id": {
               "bucket": "ci",
-              "builder": "Nougat Phone Tester",
-              "project": "chromium"
-            },
-            "builder_spec": {
-              "build_gs_bucket": "chromium-android-archive",
-              "builder_group": "chromium.android",
-              "execution_mode": "TEST",
-              "legacy_android_config": {
-                "config": "main_builder_mb"
-              },
-              "legacy_chromium_config": {
-                "apply_configs": [
-                  "download_xr_test_apks"
-                ],
-                "build_config": "Debug",
-                "config": "android",
-                "target_bits": 64,
-                "target_platform": "android"
-              },
-              "legacy_gclient_config": {
-                "apply_configs": [
-                  "android"
-                ],
-                "config": "chromium"
-              },
-              "parent": {
-                "bucket": "ci",
-                "builder": "Android arm64 Builder (dbg)",
-                "project": "chromium"
-              }
-            }
-          },
-          {
-            "builder_id": {
-              "bucket": "ci",
               "builder": "Oreo Phone Tester",
               "project": "chromium"
             },
@@ -236,11 +201,6 @@
         },
         {
           "bucket": "ci",
-          "builder": "Nougat Phone Tester",
-          "project": "chromium"
-        },
-        {
-          "bucket": "ci",
           "builder": "Oreo Phone Tester",
           "project": "chromium"
         },
diff --git a/infra/config/generated/builders/try/try-nougat-phone-tester/properties.json b/infra/config/generated/builders/try/try-nougat-phone-tester/properties.json
deleted file mode 100644
index f334e5c..0000000
--- a/infra/config/generated/builders/try/try-nougat-phone-tester/properties.json
+++ /dev/null
@@ -1,104 +0,0 @@
-{
-  "$build/chromium_tests_builder_config": {
-    "builder_config": {
-      "builder_db": {
-        "entries": [
-          {
-            "builder_id": {
-              "bucket": "ci",
-              "builder": "Android arm64 Builder (dbg)",
-              "project": "chromium"
-            },
-            "builder_spec": {
-              "build_gs_bucket": "chromium-android-archive",
-              "builder_group": "chromium.android",
-              "execution_mode": "COMPILE_AND_TEST",
-              "legacy_android_config": {
-                "config": "main_builder_mb"
-              },
-              "legacy_chromium_config": {
-                "apply_configs": [
-                  "download_xr_test_apks"
-                ],
-                "build_config": "Debug",
-                "config": "android",
-                "target_bits": 64,
-                "target_platform": "android"
-              },
-              "legacy_gclient_config": {
-                "apply_configs": [
-                  "android"
-                ],
-                "config": "chromium"
-              }
-            }
-          },
-          {
-            "builder_id": {
-              "bucket": "ci",
-              "builder": "Nougat Phone Tester",
-              "project": "chromium"
-            },
-            "builder_spec": {
-              "build_gs_bucket": "chromium-android-archive",
-              "builder_group": "chromium.android",
-              "execution_mode": "TEST",
-              "legacy_android_config": {
-                "config": "main_builder_mb"
-              },
-              "legacy_chromium_config": {
-                "apply_configs": [
-                  "download_xr_test_apks"
-                ],
-                "build_config": "Debug",
-                "config": "android",
-                "target_bits": 64,
-                "target_platform": "android"
-              },
-              "legacy_gclient_config": {
-                "apply_configs": [
-                  "android"
-                ],
-                "config": "chromium"
-              },
-              "parent": {
-                "bucket": "ci",
-                "builder": "Android arm64 Builder (dbg)",
-                "project": "chromium"
-              }
-            }
-          }
-        ]
-      },
-      "builder_ids": [
-        {
-          "bucket": "ci",
-          "builder": "Android arm64 Builder (dbg)",
-          "project": "chromium"
-        }
-      ],
-      "builder_ids_in_scope_for_testing": [
-        {
-          "bucket": "ci",
-          "builder": "Nougat Phone Tester",
-          "project": "chromium"
-        }
-      ]
-    }
-  },
-  "$build/reclient": {
-    "instance": "rbe-chromium-untrusted",
-    "jobs": 500,
-    "metrics_project": "chromium-reclient-metrics",
-    "scandeps_server": true
-  },
-  "$recipe_engine/resultdb/test_presentation": {
-    "column_keys": [],
-    "grouping_keys": [
-      "status",
-      "v.test_suite"
-    ]
-  },
-  "builder_group": "tryserver.chromium.android",
-  "recipe": "chromium_trybot"
-}
\ No newline at end of file
diff --git a/infra/config/generated/health-specs/health-specs.json b/infra/config/generated/health-specs/health-specs.json
index 994eb5d0..b3215ad5 100644
--- a/infra/config/generated/health-specs/health-specs.json
+++ b/infra/config/generated/health-specs/health-specs.json
@@ -324,9 +324,6 @@
       "Mac13 Tests (dbg)": {
         "_default": "_default"
       },
-      "Nougat Phone Tester": {
-        "_default": "_default"
-      },
       "Oreo Phone Tester": {
         "_default": "_default"
       },
diff --git a/infra/config/generated/luci/commit-queue.cfg b/infra/config/generated/luci/commit-queue.cfg
index af8c154..f048e1c 100644
--- a/infra/config/generated/luci/commit-queue.cfg
+++ b/infra/config/generated/luci/commit-queue.cfg
@@ -4610,10 +4610,6 @@
         includable_only: true
       }
       builders {
-        name: "chromium/try/try-nougat-phone-tester"
-        includable_only: true
-      }
-      builders {
         name: "chromium/try/win-angle-chromium-x64-try"
         includable_only: true
       }
diff --git a/infra/config/generated/luci/cr-buildbucket.cfg b/infra/config/generated/luci/cr-buildbucket.cfg
index 15904ae4..80e6d4e 100644
--- a/infra/config/generated/luci/cr-buildbucket.cfg
+++ b/infra/config/generated/luci/cr-buildbucket.cfg
@@ -1975,7 +1975,7 @@
           use_invocation_timestamp: true
         }
       }
-      description_html: "This builder is mirrored by any of the following try builders:<br/><ul><li><a href=\"https://ci.chromium.org/p/chromium/builders/try/android-oreo-arm64-dbg\">android-oreo-arm64-dbg</a></li><li><a href=\"https://ci.chromium.org/p/chromium/builders/try/android-pie-arm64-dbg\">android-pie-arm64-dbg</a></li><li><a href=\"https://ci.chromium.org/p/chromium/builders/try/android-webview-oreo-arm64-dbg\">android-webview-oreo-arm64-dbg</a></li><li><a href=\"https://ci.chromium.org/p/chromium/builders/try/android-webview-pie-arm64-dbg\">android-webview-pie-arm64-dbg</a></li><li><a href=\"https://ci.chromium.org/p/chromium/builders/try/android_arm64_dbg_recipe\">android_arm64_dbg_recipe</a></li><li><a href=\"https://ci.chromium.org/p/chromium/builders/try/try-nougat-phone-tester\">try-nougat-phone-tester</a></li></ul>"
+      description_html: "This builder is mirrored by any of the following try builders:<br/><ul><li><a href=\"https://ci.chromium.org/p/chromium/builders/try/android-oreo-arm64-dbg\">android-oreo-arm64-dbg</a></li><li><a href=\"https://ci.chromium.org/p/chromium/builders/try/android-pie-arm64-dbg\">android-pie-arm64-dbg</a></li><li><a href=\"https://ci.chromium.org/p/chromium/builders/try/android-webview-oreo-arm64-dbg\">android-webview-oreo-arm64-dbg</a></li><li><a href=\"https://ci.chromium.org/p/chromium/builders/try/android-webview-pie-arm64-dbg\">android-webview-pie-arm64-dbg</a></li><li><a href=\"https://ci.chromium.org/p/chromium/builders/try/android_arm64_dbg_recipe\">android_arm64_dbg_recipe</a></li></ul>"
       shadow_builder_adjustments {
         service_account: "chromium-try-builder@chops-service-accounts.iam.gserviceaccount.com"
         pool: "luci.chromium.try"
@@ -19457,101 +19457,6 @@
       }
     }
     builders {
-      name: "Nougat Phone Tester"
-      swarming_host: "chromium-swarm.appspot.com"
-      dimensions: "builderless:1"
-      dimensions: "cores:8"
-      dimensions: "cpu:x86-64"
-      dimensions: "free_space:standard"
-      dimensions: "os:Ubuntu-22.04"
-      dimensions: "pool:luci.chromium.ci"
-      dimensions: "ssd:0"
-      exe {
-        cipd_package: "infra/chromium/bootstrapper/${platform}"
-        cipd_version: "latest"
-        cmd: "bootstrapper"
-      }
-      properties:
-        '{'
-        '  "$bootstrap/exe": {'
-        '    "exe": {'
-        '      "cipd_package": "infra/recipe_bundles/chromium.googlesource.com/chromium/tools/build",'
-        '      "cipd_version": "refs/heads/main",'
-        '      "cmd": ['
-        '        "luciexe"'
-        '      ]'
-        '    }'
-        '  },'
-        '  "$bootstrap/properties": {'
-        '    "properties_file": "infra/config/generated/builders/ci/Nougat Phone Tester/properties.json",'
-        '    "top_level_project": {'
-        '      "ref": "refs/heads/main",'
-        '      "repo": {'
-        '        "host": "chromium.googlesource.com",'
-        '        "project": "chromium/src"'
-        '      }'
-        '    }'
-        '  },'
-        '  "builder_group": "chromium.android",'
-        '  "led_builder_is_bootstrapped": true,'
-        '  "recipe": "chromium",'
-        '  "sheriff_rotations": ['
-        '    "android"'
-        '  ]'
-        '}'
-      execution_timeout_secs: 10800
-      build_numbers: YES
-      service_account: "chromium-ci-builder@chops-service-accounts.iam.gserviceaccount.com"
-      experiments {
-        key: "chromium_swarming.expose_merge_script_failures"
-        value: 100
-      }
-      experiments {
-        key: "luci.recipes.use_python3"
-        value: 100
-      }
-      resultdb {
-        enable: true
-        bq_exports {
-          project: "chrome-luci-data"
-          dataset: "chromium"
-          table: "ci_test_results"
-          test_results {}
-        }
-        bq_exports {
-          project: "chrome-luci-data"
-          dataset: "chromium"
-          table: "gpu_ci_test_results"
-          test_results {
-            predicate {
-              test_id_regexp: "ninja://chrome/test:telemetry_gpu_integration_test[^/]*/.+"
-            }
-          }
-        }
-        bq_exports {
-          project: "chrome-luci-data"
-          dataset: "chromium"
-          table: "blink_web_tests_ci_test_results"
-          test_results {
-            predicate {
-              test_id_regexp: "(ninja://[^/]*blink_web_tests/.+)|(ninja://[^/]*_wpt_tests/.+)"
-            }
-          }
-        }
-        history_options {
-          use_invocation_timestamp: true
-        }
-      }
-      description_html: "This builder is mirrored by any of the following try builders:<br/><ul><li><a href=\"https://ci.chromium.org/p/chromium/builders/try/try-nougat-phone-tester\">try-nougat-phone-tester</a></li><li><a href=\"https://ci.chromium.org/p/chromium/builders/try/android_arm64_dbg_recipe\">android_arm64_dbg_recipe</a></li></ul>"
-      shadow_builder_adjustments {
-        service_account: "chromium-try-builder@chops-service-accounts.iam.gserviceaccount.com"
-        pool: "luci.chromium.try"
-        dimensions: "free_space:"
-        dimensions: "pool:luci.chromium.try"
-      }
-      contact_team_email: "clank-engprod@google.com"
-    }
-    builders {
       name: "Oreo Phone Tester"
       swarming_host: "chromium-swarm.appspot.com"
       dimensions: "builderless:1"
@@ -97062,97 +96967,6 @@
       }
     }
     builders {
-      name: "try-nougat-phone-tester"
-      swarming_host: "chromium-swarm.appspot.com"
-      dimensions: "builderless:1"
-      dimensions: "cores:8"
-      dimensions: "cpu:x86-64"
-      dimensions: "os:Ubuntu-22.04"
-      dimensions: "pool:luci.chromium.try"
-      dimensions: "ssd:0"
-      exe {
-        cipd_package: "infra/chromium/bootstrapper/${platform}"
-        cipd_version: "latest"
-        cmd: "bootstrapper"
-      }
-      properties:
-        '{'
-        '  "$bootstrap/exe": {'
-        '    "exe": {'
-        '      "cipd_package": "infra/recipe_bundles/chromium.googlesource.com/chromium/tools/build",'
-        '      "cipd_version": "refs/heads/main",'
-        '      "cmd": ['
-        '        "luciexe"'
-        '      ]'
-        '    }'
-        '  },'
-        '  "$bootstrap/properties": {'
-        '    "properties_file": "infra/config/generated/builders/try/try-nougat-phone-tester/properties.json",'
-        '    "top_level_project": {'
-        '      "ref": "refs/heads/main",'
-        '      "repo": {'
-        '        "host": "chromium.googlesource.com",'
-        '        "project": "chromium/src"'
-        '      }'
-        '    }'
-        '  },'
-        '  "builder_group": "tryserver.chromium.android",'
-        '  "led_builder_is_bootstrapped": true,'
-        '  "recipe": "chromium_trybot"'
-        '}'
-      execution_timeout_secs: 14400
-      expiration_secs: 7200
-      grace_period {
-        seconds: 120
-      }
-      build_numbers: YES
-      service_account: "chromium-try-builder@chops-service-accounts.iam.gserviceaccount.com"
-      task_template_canary_percentage {
-        value: 5
-      }
-      experiments {
-        key: "chromium_swarming.expose_merge_script_failures"
-        value: 100
-      }
-      experiments {
-        key: "luci.recipes.use_python3"
-        value: 100
-      }
-      resultdb {
-        enable: true
-        bq_exports {
-          project: "chrome-luci-data"
-          dataset: "chromium"
-          table: "try_test_results"
-          test_results {}
-        }
-        bq_exports {
-          project: "chrome-luci-data"
-          dataset: "chromium"
-          table: "gpu_try_test_results"
-          test_results {
-            predicate {
-              test_id_regexp: "ninja://chrome/test:telemetry_gpu_integration_test[^/]*/.+"
-            }
-          }
-        }
-        bq_exports {
-          project: "chrome-luci-data"
-          dataset: "chromium"
-          table: "blink_web_tests_try_test_results"
-          test_results {
-            predicate {
-              test_id_regexp: "(ninja://[^/]*blink_web_tests/.+)|(ninja://[^/]*_wpt_tests/.+)"
-            }
-          }
-        }
-        history_options {
-          use_invocation_timestamp: true
-        }
-      }
-      description_html: "This builder mirrors the following CI builders:<br/><ul><li><a href=\"https://ci.chromium.org/p/chromium/builders/ci/Android arm64 Builder (dbg)\">Android arm64 Builder (dbg)</a></li><li><a href=\"https://ci.chromium.org/p/chromium/builders/ci/Nougat Phone Tester\">Nougat Phone Tester</a></li></ul>"
-    }
-    builders {
       name: "win-angle-chromium-x64-try"
       swarming_host: "chromium-swarm.appspot.com"
       dimensions: "builder:win-angle-chromium-x64-try"
@@ -97354,7 +97168,7 @@
           use_invocation_timestamp: true
         }
       }
-      description_html: "This builder mirrors the following CI builders:<br/><ul><li><a href=\"https://ci.chromium.org/p/chromium/builders/ci/win10-angle-chromium-x64-intel\">win10-angle-chromium-x64-intel</a></li><li><a href=\"https://ci.chromium.org/p/chromium/builders/ci/win10-angle-chromium-x64-nvidia\">win10-angle-chromium-x64-nvidia</a></li><li><a href=\"https://ci.chromium.org/p/chromium/builders/ci/win-angle-chromium-x64-builder\">win-angle-chromium-x64-builder</a></li></ul>"
+      description_html: "This builder mirrors the following CI builders:<br/><ul><li><a href=\"https://ci.chromium.org/p/chromium/builders/ci/win-angle-chromium-x64-builder\">win-angle-chromium-x64-builder</a></li><li><a href=\"https://ci.chromium.org/p/chromium/builders/ci/win10-angle-chromium-x64-intel\">win10-angle-chromium-x64-intel</a></li><li><a href=\"https://ci.chromium.org/p/chromium/builders/ci/win10-angle-chromium-x64-nvidia\">win10-angle-chromium-x64-nvidia</a></li></ul>"
     }
     builders {
       name: "win-angle-chromium-x86-try"
diff --git a/infra/config/generated/luci/luci-milo.cfg b/infra/config/generated/luci/luci-milo.cfg
index e5c7ecd..c02904c 100644
--- a/infra/config/generated/luci/luci-milo.cfg
+++ b/infra/config/generated/luci/luci-milo.cfg
@@ -1603,11 +1603,6 @@
     short_name: "x86"
   }
   builders {
-    name: "buildbucket/luci.chromium.ci/Nougat Phone Tester"
-    category: "chromium.android|tester|phone"
-    short_name: "N"
-  }
-  builders {
     name: "buildbucket/luci.chromium.ci/Oreo Phone Tester"
     category: "chromium.android|tester|phone"
     short_name: "O"
@@ -5059,11 +5054,6 @@
     short_name: "size"
   }
   builders {
-    name: "buildbucket/luci.chromium.ci/Nougat Phone Tester"
-    category: "tester|phone"
-    short_name: "N"
-  }
-  builders {
     name: "buildbucket/luci.chromium.ci/Oreo Phone Tester"
     category: "tester|phone"
     short_name: "O"
@@ -18513,9 +18503,6 @@
     name: "buildbucket/luci.chromium.try/tricium-simple"
   }
   builders {
-    name: "buildbucket/luci.chromium.try/try-nougat-phone-tester"
-  }
-  builders {
     name: "buildbucket/luci.chromium.try/win-angle-chromium-x64-try"
   }
   builders {
@@ -19006,9 +18993,6 @@
   builders {
     name: "buildbucket/luci.chromium.try/gpu-try-android-m-nexus-5x-64"
   }
-  builders {
-    name: "buildbucket/luci.chromium.try/try-nougat-phone-tester"
-  }
   builder_view_only: true
 }
 consoles {
diff --git a/infra/config/generated/luci/luci-scheduler.cfg b/infra/config/generated/luci/luci-scheduler.cfg
index 693ab2c..e13b3d2 100644
--- a/infra/config/generated/luci/luci-scheduler.cfg
+++ b/infra/config/generated/luci/luci-scheduler.cfg
@@ -2152,15 +2152,6 @@
   }
 }
 job {
-  id: "Nougat Phone Tester"
-  realm: "ci"
-  buildbucket {
-    server: "cr-buildbucket.appspot.com"
-    bucket: "ci"
-    builder: "Nougat Phone Tester"
-  }
-}
-job {
   id: "Oreo Phone Tester"
   realm: "ci"
   buildbucket {
@@ -4602,7 +4593,7 @@
 job {
   id: "linux-3p-licenses"
   realm: "ci"
-  schedule: "15 22 * * *"
+  schedule: "15 22 * * 1"
   buildbucket {
     server: "cr-buildbucket.appspot.com"
     bucket: "ci"
@@ -5831,7 +5822,7 @@
 job {
   id: "win-3p-licenses"
   realm: "ci"
-  schedule: "15 22 * * *"
+  schedule: "15 22 * * 1"
   buildbucket {
     server: "cr-buildbucket.appspot.com"
     bucket: "ci"
diff --git a/infra/config/generated/luci/realms.cfg b/infra/config/generated/luci/realms.cfg
index 6033461..da085ed 100644
--- a/infra/config/generated/luci/realms.cfg
+++ b/infra/config/generated/luci/realms.cfg
@@ -155,7 +155,6 @@
         values: "Mac12 Tests"
         values: "Mac13 Tests"
         values: "Mac13 Tests (dbg)"
-        values: "Nougat Phone Tester"
         values: "Oreo Phone Tester"
         values: "WebKit Win10"
         values: "Win10 Tests x64"
diff --git a/infra/config/generated/sheriff-rotations/android.txt b/infra/config/generated/sheriff-rotations/android.txt
index 668c085..76dc0b7 100644
--- a/infra/config/generated/sheriff-rotations/android.txt
+++ b/infra/config/generated/sheriff-rotations/android.txt
@@ -10,7 +10,6 @@
 ci/Cast Android (dbg)
 ci/Deterministic Android
 ci/Deterministic Android (dbg)
-ci/Nougat Phone Tester
 ci/android-10-arm64-rel
 ci/android-12-x64-rel
 ci/android-12l-x64-dbg-tests
diff --git a/infra/config/generated/testing/test_suites.pyl b/infra/config/generated/testing/test_suites.pyl
index 78866cd..5a94335 100644
--- a/infra/config/generated/testing/test_suites.pyl
+++ b/infra/config/generated/testing/test_suites.pyl
@@ -5757,13 +5757,6 @@
       'vr_platform_specific_chromium_gtests',
     ],
 
-    'android_nougat_gtests': [
-      'android_ar_gtests',
-      'android_ddready_vr_gtests',
-      'android_monochrome_smoke_tests',
-      'android_smoke_tests',
-    ],
-
     'android_oreo_emulator_gtests': [
       'android_emulator_specific_chrome_public_tests',
       'android_monochrome_smoke_tests',
diff --git a/infra/config/generated/testing/variants.pyl b/infra/config/generated/testing/variants.pyl
index 21dd8f8f..42b52f2 100644
--- a/infra/config/generated/testing/variants.pyl
+++ b/infra/config/generated/testing/variants.pyl
@@ -70,16 +70,16 @@
   },
   'LACROS_VERSION_SKEW_CANARY': {
     'identifier': 'Lacros version skew testing ash canary',
-    'description': 'Run with ash-chrome version 120.0.6059.0',
+    'description': 'Run with ash-chrome version 120.0.6060.0',
     'args': [
-      '--ash-chrome-path-override=../../lacros_version_skew_tests_v120.0.6059.0/test_ash_chrome',
+      '--ash-chrome-path-override=../../lacros_version_skew_tests_v120.0.6060.0/test_ash_chrome',
     ],
     'swarming': {
       'cipd_packages': [
         {
           'cipd_package': 'chromium/testing/linux-ash-chromium/x86_64/ash.zip',
-          'location': 'lacros_version_skew_tests_v120.0.6059.0',
-          'revision': 'version:120.0.6059.0',
+          'location': 'lacros_version_skew_tests_v120.0.6060.0',
+          'revision': 'version:120.0.6060.0',
         },
       ],
     },
diff --git a/infra/config/lib/builder_health_indicators.star b/infra/config/lib/builder_health_indicators.star
index 6f13bde..c2cda75 100644
--- a/infra/config/lib/builder_health_indicators.star
+++ b/infra/config/lib/builder_health_indicators.star
@@ -867,7 +867,6 @@
         "tricium-metrics-analysis",
         "tricium-oilpan-analysis",
         "tricium-simple",
-        "try-nougat-phone-tester",
         "win-angle-chromium-x64-try",
         "win-angle-chromium-x86-try",
         "win-annotator-rel",
diff --git a/infra/config/subprojects/chromium/ci/checks.star b/infra/config/subprojects/chromium/ci/checks.star
index 2c5ed98..5b96815 100644
--- a/infra/config/subprojects/chromium/ci/checks.star
+++ b/infra/config/subprojects/chromium/ci/checks.star
@@ -68,7 +68,7 @@
     name = "linux-3p-licenses",
     description_html = "Daily scan for third party license errors.",
     executable = "recipe:chromium_licenses/scan",
-    schedule = "15 22 * * *",  # 10:15pm UTC / 8:15am AEST / 1:15am PST
+    schedule = "15 22 * * 1",  # 10:15pm UTC / 8:15am AEST / 1:15am PST
     triggered_by = None,
     os = os.LINUX_DEFAULT,
     console_view_entry = consoles.console_view_entry(
@@ -85,7 +85,7 @@
     name = "win-3p-licenses",
     description_html = "Daily scan for third party license errors.",
     executable = "recipe:chromium_licenses/scan",
-    schedule = "15 22 * * *",  # 10:15pm UTC / 8:15am AEST / 1:15am PST
+    schedule = "15 22 * * 1",  # Once a week 10:15pm UTC / 8:15am AEST / 1:15am PST
     triggered_by = None,
     builderless = True,
     os = os.WINDOWS_DEFAULT,
diff --git a/infra/config/subprojects/chromium/ci/chromium.android.star b/infra/config/subprojects/chromium/ci/chromium.android.star
index d3c9f57..30147e22 100644
--- a/infra/config/subprojects/chromium/ci/chromium.android.star
+++ b/infra/config/subprojects/chromium/ci/chromium.android.star
@@ -479,40 +479,6 @@
 )
 
 ci.thin_tester(
-    name = "Nougat Phone Tester",
-    branch_selector = branches.selector.ANDROID_BRANCHES,
-    triggered_by = ["ci/Android arm64 Builder (dbg)"],
-    builder_spec = builder_config.builder_spec(
-        execution_mode = builder_config.execution_mode.TEST,
-        gclient_config = builder_config.gclient_config(
-            config = "chromium",
-            apply_configs = [
-                "android",
-            ],
-        ),
-        chromium_config = builder_config.chromium_config(
-            config = "android",
-            apply_configs = [
-                "download_xr_test_apks",
-            ],
-            build_config = builder_config.build_config.DEBUG,
-            target_bits = 64,
-            target_platform = builder_config.target_platform.ANDROID,
-        ),
-        android_config = builder_config.android_config(
-            config = "main_builder_mb",
-        ),
-        build_gs_bucket = "chromium-android-archive",
-    ),
-    console_view_entry = consoles.console_view_entry(
-        category = "tester|phone",
-        short_name = "N",
-    ),
-    cq_mirrors_console_view = "mirrors",
-    contact_team_email = "clank-engprod@google.com",
-)
-
-ci.thin_tester(
     name = "Oreo Phone Tester",
     branch_selector = branches.selector.ANDROID_BRANCHES,
     triggered_by = ["ci/Android arm64 Builder (dbg)"],
diff --git a/infra/config/subprojects/chromium/try/tryserver.chromium.android.star b/infra/config/subprojects/chromium/try/tryserver.chromium.android.star
index 8428123..6ffa94f 100644
--- a/infra/config/subprojects/chromium/try/tryserver.chromium.android.star
+++ b/infra/config/subprojects/chromium/try/tryserver.chromium.android.star
@@ -789,15 +789,6 @@
     tryjob = try_.job(),
 )
 
-try_.builder(
-    name = "try-nougat-phone-tester",
-    branch_selector = branches.selector.ANDROID_BRANCHES,
-    mirrors = [
-        "ci/Android arm64 Builder (dbg)",
-        "ci/Nougat Phone Tester",
-    ],
-)
-
 try_.gpu.optional_tests_builder(
     name = "android_optional_gpu_tests_rel",
     branch_selector = branches.selector.ANDROID_BRANCHES,
diff --git a/infra/config/targets/compound_suites.star b/infra/config/targets/compound_suites.star
index 3b75aa8..21f61ff 100644
--- a/infra/config/targets/compound_suites.star
+++ b/infra/config/targets/compound_suites.star
@@ -42,16 +42,6 @@
 )
 
 targets.legacy_compound_suite(
-    name = "android_nougat_gtests",
-    basic_suites = [
-        "android_ar_gtests",
-        "android_ddready_vr_gtests",
-        "android_monochrome_smoke_tests",
-        "android_smoke_tests",
-    ],
-)
-
-targets.legacy_compound_suite(
     name = "android_oreo_emulator_gtests",
     basic_suites = [
         "android_emulator_specific_chrome_public_tests",
diff --git a/infra/config/targets/lacros-version-skew-variants.json b/infra/config/targets/lacros-version-skew-variants.json
index 7c398e17..09cfd02 100644
--- a/infra/config/targets/lacros-version-skew-variants.json
+++ b/infra/config/targets/lacros-version-skew-variants.json
@@ -1,16 +1,16 @@
 {
   "LACROS_VERSION_SKEW_CANARY": {
     "args": [
-      "--ash-chrome-path-override=../../lacros_version_skew_tests_v120.0.6059.0/test_ash_chrome"
+      "--ash-chrome-path-override=../../lacros_version_skew_tests_v120.0.6060.0/test_ash_chrome"
     ],
-    "description": "Run with ash-chrome version 120.0.6059.0",
+    "description": "Run with ash-chrome version 120.0.6060.0",
     "identifier": "Lacros version skew testing ash canary",
     "swarming": {
       "cipd_packages": [
         {
           "cipd_package": "chromium/testing/linux-ash-chromium/x86_64/ash.zip",
-          "location": "lacros_version_skew_tests_v120.0.6059.0",
-          "revision": "version:120.0.6059.0"
+          "location": "lacros_version_skew_tests_v120.0.6060.0",
+          "revision": "version:120.0.6060.0"
         }
       ]
     }
diff --git a/internal b/internal
index f11a7d3..c4e9cf1 160000
--- a/internal
+++ b/internal
@@ -1 +1 @@
-Subproject commit f11a7d33a9d0c660a8c3b3b2fca966b25c575b3e
+Subproject commit c4e9cf1cc0de2e6de21aca6876facddd3ea450a1
diff --git a/ios/chrome/browser/ui/authentication/signin_matchers.h b/ios/chrome/browser/ui/authentication/signin_matchers.h
index e712156..a4de81b5 100644
--- a/ios/chrome/browser/ui/authentication/signin_matchers.h
+++ b/ios/chrome/browser/ui/authentication/signin_matchers.h
@@ -34,9 +34,6 @@
 id<GREYMatcher> GoogleSyncSettingsButton();
 
 // Matcher for the upgrade sign-in promo.
-id<GREYMatcher> UpgradeSigninPromoMatcher();
-
-// Matcher for the upgrade sign-in promo.
 id<GREYMatcher> SigninScreenPromoMatcher();
 
 // Matcher for the secondary button ("No Thanks") in the history opt-in screen.
diff --git a/ios/chrome/browser/ui/authentication/signin_matchers.mm b/ios/chrome/browser/ui/authentication/signin_matchers.mm
index 664c087e..77465f1 100644
--- a/ios/chrome/browser/ui/authentication/signin_matchers.mm
+++ b/ios/chrome/browser/ui/authentication/signin_matchers.mm
@@ -50,10 +50,6 @@
                     grey_sufficientlyVisible(), nil);
 }
 
-id<GREYMatcher> UpgradeSigninPromoMatcher() {
-  return SigninScreenPromoMatcher();
-}
-
 id<GREYMatcher> SigninScreenPromoMatcher() {
   return grey_accessibilityID(
       first_run::kFirstRunSignInScreenAccessibilityIdentifier);
diff --git a/ios/chrome/browser/ui/popup_menu/overflow_menu/BUILD.gn b/ios/chrome/browser/ui/popup_menu/overflow_menu/BUILD.gn
index 26d41334..c3c9183c 100644
--- a/ios/chrome/browser/ui/popup_menu/overflow_menu/BUILD.gn
+++ b/ios/chrome/browser/ui/popup_menu/overflow_menu/BUILD.gn
@@ -215,6 +215,7 @@
     "//ios/chrome/browser/ui/popup_menu/overflow_menu:feature_flags",
     "//ios/chrome/browser/ui/popup_menu/overflow_menu/destination_usage_history",
     "//ios/chrome/browser/ui/toolbar/test",
+    "//ios/chrome/browser/ui/whats_new:constants",
     "//ios/chrome/browser/ui/whats_new:util",
     "//ios/chrome/browser/web/font_size",
     "//ios/chrome/test:test_support",
diff --git a/ios/chrome/browser/ui/popup_menu/overflow_menu/overflow_menu_mediator_unittest.mm b/ios/chrome/browser/ui/popup_menu/overflow_menu/overflow_menu_mediator_unittest.mm
index 379df51a..e530801 100644
--- a/ios/chrome/browser/ui/popup_menu/overflow_menu/overflow_menu_mediator_unittest.mm
+++ b/ios/chrome/browser/ui/popup_menu/overflow_menu/overflow_menu_mediator_unittest.mm
@@ -75,6 +75,7 @@
 #import "ios/chrome/browser/ui/popup_menu/overflow_menu/overflow_menu_swift.h"
 #import "ios/chrome/browser/ui/popup_menu/popup_menu_constants.h"
 #import "ios/chrome/browser/ui/toolbar/test/toolbar_test_navigation_manager.h"
+#import "ios/chrome/browser/ui/whats_new/constants.h"
 #import "ios/chrome/browser/ui/whats_new/whats_new_util.h"
 #import "ios/chrome/browser/web/font_size/font_size_java_script_feature.h"
 #import "ios/chrome/browser/web/font_size/font_size_tab_helper.h"
diff --git a/ios/chrome/browser/ui/whats_new/promo/BUILD.gn b/ios/chrome/browser/ui/whats_new/promo/BUILD.gn
index 0cf57bc2..3b75872 100644
--- a/ios/chrome/browser/ui/whats_new/promo/BUILD.gn
+++ b/ios/chrome/browser/ui/whats_new/promo/BUILD.gn
@@ -44,6 +44,7 @@
     "//ios/chrome/browser/shared/model/browser/test:test_support",
     "//ios/chrome/browser/shared/model/browser_state:test_support",
     "//ios/chrome/browser/shared/model/prefs:pref_names",
+    "//ios/chrome/browser/ui/whats_new:constants",
     "//ios/chrome/browser/ui/whats_new:util",
     "//third_party/ocmock",
   ]
diff --git a/ios/chrome/browser/ui/whats_new/promo/whats_new_scene_agent_unittest.mm b/ios/chrome/browser/ui/whats_new/promo/whats_new_scene_agent_unittest.mm
index 1e52779..69441e7 100644
--- a/ios/chrome/browser/ui/whats_new/promo/whats_new_scene_agent_unittest.mm
+++ b/ios/chrome/browser/ui/whats_new/promo/whats_new_scene_agent_unittest.mm
@@ -16,6 +16,7 @@
 #import "ios/chrome/browser/shared/model/browser/browser.h"
 #import "ios/chrome/browser/shared/model/browser/test/test_browser.h"
 #import "ios/chrome/browser/shared/model/browser_state/test_chrome_browser_state.h"
+#import "ios/chrome/browser/ui/whats_new/constants.h"
 #import "ios/chrome/browser/ui/whats_new/whats_new_util.h"
 #import "testing/platform_test.h"
 #import "third_party/ocmock/OCMock/OCMock.h"
diff --git a/ios/chrome/browser/ui/whats_new/whats_new_util.h b/ios/chrome/browser/ui/whats_new/whats_new_util.h
index d48b54a..61340a8 100644
--- a/ios/chrome/browser/ui/whats_new/whats_new_util.h
+++ b/ios/chrome/browser/ui/whats_new/whats_new_util.h
@@ -14,31 +14,6 @@
 // Feature flag that enables version 2 of What's New.
 BASE_DECLARE_FEATURE(kWhatsNewIOSM116);
 
-// Key to store whether the What's New promo has been register.
-extern NSString* const kWhatsNewPromoRegistrationKey;
-
-// Key to store whether the What's New m116 promo has been register.
-extern NSString* const kWhatsNewM116PromoRegistrationKey;
-
-// Key to store the date of FRE.
-extern NSString* const kWhatsNewDaysAfterFre;
-
-// Key to store the date of FRE for What's New M116.
-extern NSString* const kWhatsNewM116DaysAfterFre;
-
-// Key to store the number of launches after FRE.
-extern NSString* const kWhatsNewLaunchesAfterFre;
-
-// Key to store the number of launches after FRE for What's New M116.
-extern NSString* const kWhatsNewM116LaunchesAfterFre;
-
-// Key to store whether a user interacted with What's New from the overflow
-// menu.
-extern NSString* const kWhatsNewUsageEntryKey;
-
-// Key to store whether a user interacted with What's New M116.
-extern NSString* const kWhatsNewM116UsageEntryKey;
-
 // Returns whether What's New was used in the overflow menu. This is used to
 // decide on the location of the What's New entry point in the overflow menu.
 bool WasWhatsNewUsed();
diff --git a/net/base/features.cc b/net/base/features.cc
index 875ecc6a..4b7a07b 100644
--- a/net/base/features.cc
+++ b/net/base/features.cc
@@ -489,4 +489,6 @@
              "SpdyHeadersToHttpResponseVerifyCorrectness",
              base::FEATURE_DISABLED_BY_DEFAULT);
 
+BASE_FEATURE(kReceiveEcn, "ReceiveEcn", base::FEATURE_DISABLED_BY_DEFAULT);
+
 }  // namespace net::features
diff --git a/net/base/features.h b/net/base/features.h
index 7f57700..3e16ef3f 100644
--- a/net/base/features.h
+++ b/net/base/features.h
@@ -485,6 +485,9 @@
 // for two weeks on Dev.
 NET_EXPORT BASE_DECLARE_FEATURE(kSpdyHeadersToHttpResponseVerifyCorrectness);
 
+// Enables receiving ECN bit by sockets in Chrome.
+NET_EXPORT BASE_DECLARE_FEATURE(kReceiveEcn);
+
 }  // namespace net::features
 
 #endif  // NET_BASE_FEATURES_H_
diff --git a/net/dns/address_sorter_posix_unittest.cc b/net/dns/address_sorter_posix_unittest.cc
index a4383aef..8cfc5cc6 100644
--- a/net/dns/address_sorter_posix_unittest.cc
+++ b/net/dns/address_sorter_posix_unittest.cc
@@ -68,6 +68,7 @@
   int SetReceiveBufferSize(int32_t) override { return OK; }
   int SetSendBufferSize(int32_t) override { return OK; }
   int SetDoNotFragment() override { return OK; }
+  int SetRecvEcn() override { return OK; }
 
   void Close() override {}
   int GetPeerAddress(IPEndPoint* address) const override {
diff --git a/net/dns/fuzzed_host_resolver_util.cc b/net/dns/fuzzed_host_resolver_util.cc
index 0593fe7..575f442 100644
--- a/net/dns/fuzzed_host_resolver_util.cc
+++ b/net/dns/fuzzed_host_resolver_util.cc
@@ -304,6 +304,7 @@
   }
   void UseNonBlockingIO() override {}
   int SetDoNotFragment() override { return OK; }
+  int SetRecvEcn() override { return OK; }
   void SetMsgConfirm(bool confirm) override {}
   const NetLogWithSource& NetLog() const override { return net_log_; }
 
diff --git a/net/dns/mock_mdns_socket_factory.h b/net/dns/mock_mdns_socket_factory.h
index a9f3e45..7e5f721 100644
--- a/net/dns/mock_mdns_socket_factory.h
+++ b/net/dns/mock_mdns_socket_factory.h
@@ -48,6 +48,7 @@
   MOCK_METHOD1(SetReceiveBufferSize, int(int32_t size));
   MOCK_METHOD1(SetSendBufferSize, int(int32_t size));
   MOCK_METHOD0(SetDoNotFragment, int());
+  MOCK_METHOD0(SetRecvEcn, int());
   MOCK_METHOD1(SetMsgConfirm, void(bool confirm));
 
   MOCK_METHOD0(Close, void());
diff --git a/net/quic/quic_stream_factory.cc b/net/quic/quic_stream_factory.cc
index deebc81..ad25d8e 100644
--- a/net/quic/quic_stream_factory.cc
+++ b/net/quic/quic_stream_factory.cc
@@ -1446,6 +1446,15 @@
     return;
   }
 
+  if (base::FeatureList::IsEnabled(net::features::kReceiveEcn)) {
+    rv = socket->SetRecvEcn();
+    if (rv != OK) {
+      OnFinishConnectAndConfigureSocketError(
+          std::move(callback), CREATION_ERROR_SETTING_RECEIVE_ECN, rv);
+      return;
+    }
+  }
+
   // Set a buffer large enough to contain the initial CWND's worth of packet
   // to work around the problem with CHLO packets being sent out with the
   // wrong encryption level, when the send buffer is full.
@@ -1530,6 +1539,14 @@
     return rv;
   }
 
+  if (base::FeatureList::IsEnabled(net::features::kReceiveEcn)) {
+    rv = socket->SetRecvEcn();
+    if (rv != OK) {
+      HistogramCreateSessionFailure(CREATION_ERROR_SETTING_RECEIVE_ECN);
+      return rv;
+    }
+  }
+
   // Set a buffer large enough to contain the initial CWND's worth of packet
   // to work around the problem with CHLO packets being sent out with the
   // wrong encryption level, when the send buffer is full.
diff --git a/net/quic/quic_stream_factory.h b/net/quic/quic_stream_factory.h
index e5f21227..0eba4fc 100644
--- a/net/quic/quic_stream_factory.h
+++ b/net/quic/quic_stream_factory.h
@@ -118,6 +118,7 @@
   CREATION_ERROR_SETTING_RECEIVE_BUFFER,
   CREATION_ERROR_SETTING_SEND_BUFFER,
   CREATION_ERROR_SETTING_DO_NOT_FRAGMENT,
+  CREATION_ERROR_SETTING_RECEIVE_ECN,
   CREATION_ERROR_MAX
 };
 
diff --git a/net/socket/datagram_socket.h b/net/socket/datagram_socket.h
index acb99121..8961f7c 100644
--- a/net/socket/datagram_socket.h
+++ b/net/socket/datagram_socket.h
@@ -45,6 +45,10 @@
   // return ERR_IO_PENDING.
   virtual int SetDoNotFragment() = 0;
 
+  // Requests that packets received by this socket have the ECN bit set. Returns
+  // a network error code if there was a problem.
+  virtual int SetRecvEcn() = 0;
+
   // If |confirm| is true, then the MSG_CONFIRM flag will be passed to
   // subsequent writes if it's supported by the platform.
   virtual void SetMsgConfirm(bool confirm) = 0;
diff --git a/net/socket/fuzzed_datagram_client_socket.cc b/net/socket/fuzzed_datagram_client_socket.cc
index 9241162..cefc828 100644
--- a/net/socket/fuzzed_datagram_client_socket.cc
+++ b/net/socket/fuzzed_datagram_client_socket.cc
@@ -214,6 +214,10 @@
   return OK;
 }
 
+int FuzzedDatagramClientSocket::SetRecvEcn() {
+  return OK;
+}
+
 void FuzzedDatagramClientSocket::OnReadComplete(
     net::CompletionOnceCallback callback,
     int result) {
diff --git a/net/socket/fuzzed_datagram_client_socket.h b/net/socket/fuzzed_datagram_client_socket.h
index 4b3ec16..162e16e6 100644
--- a/net/socket/fuzzed_datagram_client_socket.h
+++ b/net/socket/fuzzed_datagram_client_socket.h
@@ -72,6 +72,7 @@
   int SetReceiveBufferSize(int32_t size) override;
   int SetSendBufferSize(int32_t size) override;
   int SetDoNotFragment() override;
+  int SetRecvEcn() override;
   void SetMsgConfirm(bool confirm) override {}
 
  private:
diff --git a/net/socket/socket_test_util.cc b/net/socket/socket_test_util.cc
index acaf586..c1ed44d 100644
--- a/net/socket/socket_test_util.cc
+++ b/net/socket/socket_test_util.cc
@@ -1577,6 +1577,10 @@
   return OK;
 }
 
+int MockUDPClientSocket::SetRecvEcn() {
+  return OK;
+}
+
 void MockUDPClientSocket::Close() {
   connected_ = false;
 }
diff --git a/net/socket/socket_test_util.h b/net/socket/socket_test_util.h
index 5119e66..e3edda3 100644
--- a/net/socket/socket_test_util.h
+++ b/net/socket/socket_test_util.h
@@ -976,6 +976,7 @@
   int SetReceiveBufferSize(int32_t size) override;
   int SetSendBufferSize(int32_t size) override;
   int SetDoNotFragment() override;
+  int SetRecvEcn() override;
 
   // DatagramSocket implementation.
   void Close() override;
diff --git a/net/socket/ssl_client_socket_impl.cc b/net/socket/ssl_client_socket_impl.cc
index 90fe67f..19db6d7 100644
--- a/net/socket/ssl_client_socket_impl.cc
+++ b/net/socket/ssl_client_socket_impl.cc
@@ -21,7 +21,6 @@
 #include "base/location.h"
 #include "base/memory/singleton.h"
 #include "base/metrics/field_trial.h"
-#include "base/metrics/field_trial_params.h"
 #include "base/metrics/histogram_functions.h"
 #include "base/metrics/histogram_macros.h"
 #include "base/notreached.h"
@@ -31,6 +30,7 @@
 #include "base/task/sequenced_task_runner.h"
 #include "base/values.h"
 #include "build/build_config.h"
+#include "components/miracle_parameter/common/public/miracle_parameter.h"
 #include "crypto/ec_private_key.h"
 #include "crypto/openssl_util.h"
 #include "net/base/features.h"
@@ -86,10 +86,10 @@
              base::FEATURE_ENABLED_BY_DEFAULT);
 
 // Default size of the internal BoringSSL buffers.
-constexpr base::FeatureParam<int> kDefaultOpenSSLBufferSize(
-    &kDefaultOpenSSLBufferSizeFeature,
-    "DefaultOpenSSLBufferSize",
-    17 * 1024);
+MIRACLE_PARAMETER_FOR_INT(GetDefaultOpenSSLBufferSize,
+                          kDefaultOpenSSLBufferSizeFeature,
+                          "DefaultOpenSSLBufferSize",
+                          17 * 1024)
 
 base::Value::Dict NetLogPrivateKeyOperationParams(uint16_t algorithm,
                                                   SSLPrivateKey* key) {
@@ -778,7 +778,7 @@
       SSL_set_session(ssl_.get(), session.get());
   }
 
-  const int kBufferSize = kDefaultOpenSSLBufferSize.Get();
+  const int kBufferSize = GetDefaultOpenSSLBufferSize();
   transport_adapter_ = std::make_unique<SocketBIOAdapter>(
       stream_socket_.get(), kBufferSize, kBufferSize, this);
   BIO* transport_bio = transport_adapter_->bio();
diff --git a/net/socket/udp_client_socket.cc b/net/socket/udp_client_socket.cc
index f182f88..40690322 100644
--- a/net/socket/udp_client_socket.cc
+++ b/net/socket/udp_client_socket.cc
@@ -221,6 +221,10 @@
   return socket_.SetDoNotFragment();
 }
 
+int UDPClientSocket::SetRecvEcn() {
+  return socket_.SetRecvEcn();
+}
+
 void UDPClientSocket::SetMsgConfirm(bool confirm) {
   socket_.SetMsgConfirm(confirm);
 }
diff --git a/net/socket/udp_client_socket.h b/net/socket/udp_client_socket.h
index 0673c3a..503dbd6 100644
--- a/net/socket/udp_client_socket.h
+++ b/net/socket/udp_client_socket.h
@@ -72,6 +72,7 @@
   int SetReceiveBufferSize(int32_t size) override;
   int SetSendBufferSize(int32_t size) override;
   int SetDoNotFragment() override;
+  int SetRecvEcn() override;
   void SetMsgConfirm(bool confirm) override;
   const NetLogWithSource& NetLog() const override;
   void EnableRecvOptimization() override;
diff --git a/net/socket/udp_server_socket.cc b/net/socket/udp_server_socket.cc
index 0e8715d5..1520411b 100644
--- a/net/socket/udp_server_socket.cc
+++ b/net/socket/udp_server_socket.cc
@@ -75,6 +75,10 @@
   return socket_.SetDoNotFragment();
 }
 
+int UDPServerSocket::SetRecvEcn() {
+  return socket_.SetRecvEcn();
+}
+
 void UDPServerSocket::SetMsgConfirm(bool confirm) {
   return socket_.SetMsgConfirm(confirm);
 }
diff --git a/net/socket/udp_server_socket.h b/net/socket/udp_server_socket.h
index fb7ca9c..f93c84af 100644
--- a/net/socket/udp_server_socket.h
+++ b/net/socket/udp_server_socket.h
@@ -42,6 +42,7 @@
   int SetReceiveBufferSize(int32_t size) override;
   int SetSendBufferSize(int32_t size) override;
   int SetDoNotFragment() override;
+  int SetRecvEcn() override;
   void SetMsgConfirm(bool confirm) override;
   void Close() override;
   int GetPeerAddress(IPEndPoint* address) const override;
diff --git a/net/socket/udp_socket_posix.cc b/net/socket/udp_socket_posix.cc
index 21cd1c8..02000d88 100644
--- a/net/socket/udp_socket_posix.cc
+++ b/net/socket/udp_socket_posix.cc
@@ -590,6 +590,21 @@
 #endif
 }
 
+int UDPSocketPosix::SetRecvEcn() {
+  DCHECK_NE(socket_, kInvalidSocket);
+  DCHECK_CALLED_ON_VALID_THREAD(thread_checker_);
+
+  int rv;
+  unsigned int ecn = 1;
+  if (addr_family_ == AF_INET6) {
+    rv = setsockopt(socket_, IPPROTO_IPV6, IPV6_RECVTCLASS, &ecn, sizeof(ecn));
+  } else {
+    DCHECK_EQ(addr_family_, AF_INET);
+    rv = setsockopt(socket_, IPPROTO_IP, IP_RECVTOS, &ecn, sizeof(ecn));
+  }
+  return rv == 0 ? OK : MapSystemError(errno);
+}
+
 void UDPSocketPosix::SetMsgConfirm(bool confirm) {
 #if !BUILDFLAG(IS_APPLE)
   if (confirm) {
diff --git a/net/socket/udp_socket_posix.h b/net/socket/udp_socket_posix.h
index a0cb1e2..08a9fc75 100644
--- a/net/socket/udp_socket_posix.h
+++ b/net/socket/udp_socket_posix.h
@@ -173,6 +173,10 @@
   // return ERR_IO_PENDING.
   int SetDoNotFragment();
 
+  // Requests that packets received by this socket have the ECN bit set. Returns
+  // a network error code if there was a problem.
+  int SetRecvEcn();
+
   // If |confirm| is true, then the MSG_CONFIRM flag will be passed to
   // subsequent writes if it's supported by the platform.
   void SetMsgConfirm(bool confirm);
diff --git a/net/socket/udp_socket_win.cc b/net/socket/udp_socket_win.cc
index 32926a0..deb0561d 100644
--- a/net/socket/udp_socket_win.cc
+++ b/net/socket/udp_socket_win.cc
@@ -589,6 +589,23 @@
   return rv == 0 ? OK : MapSystemError(WSAGetLastError());
 }
 
+int UDPSocketWin::SetRecvEcn() {
+  DCHECK_NE(socket_, INVALID_SOCKET);
+  DCHECK_CALLED_ON_VALID_THREAD(thread_checker_);
+
+  int rv;
+  unsigned int ecn = 1;
+  if (addr_family_ == AF_INET6) {
+    rv = setsockopt(socket_, IPPROTO_IPV6, IPV6_RECVTCLASS,
+                    reinterpret_cast<const char*>(&ecn), sizeof(ecn));
+  } else {
+    DCHECK_EQ(addr_family_, AF_INET);
+    rv = setsockopt(socket_, IPPROTO_IP, IP_RECVTOS,
+                    reinterpret_cast<const char*>(&ecn), sizeof(ecn));
+  }
+  return rv == 0 ? OK : MapSystemError(WSAGetLastError());
+}
+
 void UDPSocketWin::SetMsgConfirm(bool confirm) {}
 
 int UDPSocketWin::AllowAddressReuse() {
diff --git a/net/socket/udp_socket_win.h b/net/socket/udp_socket_win.h
index dd27752..2069bd53 100644
--- a/net/socket/udp_socket_win.h
+++ b/net/socket/udp_socket_win.h
@@ -262,6 +262,10 @@
   // return ERR_IO_PENDING.
   int SetDoNotFragment();
 
+  // Requests that packets received by this socket have the ECN bit set. Returns
+  // a network error code if there was a problem.
+  int SetRecvEcn();
+
   // This is a no-op on Windows.
   void SetMsgConfirm(bool confirm);
 
diff --git a/services/accessibility/fake_service_client.cc b/services/accessibility/fake_service_client.cc
index 5787499..777ae05 100644
--- a/services/accessibility/fake_service_client.cc
+++ b/services/accessibility/fake_service_client.cc
@@ -106,6 +106,12 @@
   std::move(callback).Run(std::move(voices));
 }
 
+void FakeServiceClient::DarkenScreen(bool darken) {
+  if (darken_screen_callback_) {
+    darken_screen_callback_.Run(darken);
+  }
+}
+
 void FakeServiceClient::SetFocusRings(
     std::vector<mojom::FocusRingInfoPtr> focus_rings,
     mojom::AssistiveTechnologyType at_type) {
@@ -150,6 +156,11 @@
   tts_utterance_client_->OnEvent(std::move(tts_event));
 }
 
+void FakeServiceClient::SetDarkenScreenCallback(
+    base::RepeatingCallback<void(bool darken)> callback) {
+  darken_screen_callback_ = std::move(callback);
+}
+
 void FakeServiceClient::SetFocusRingsCallback(
     base::RepeatingCallback<void()> callback) {
   focus_rings_callback_ = std::move(callback);
diff --git a/services/accessibility/fake_service_client.h b/services/accessibility/fake_service_client.h
index 945ccad..6974985 100644
--- a/services/accessibility/fake_service_client.h
+++ b/services/accessibility/fake_service_client.h
@@ -63,6 +63,7 @@
   void GetVoices(GetVoicesCallback callback) override;
 
   // ax::mojom::UserInterface:
+  void DarkenScreen(bool darken) override;
   void SetFocusRings(std::vector<ax::mojom::FocusRingInfoPtr> focus_rings,
                      ax::mojom::AssistiveTechnologyType at_type) override;
   void SetHighlights(const std::vector<gfx::Rect>& rects,
@@ -82,6 +83,8 @@
   void SendTtsUtteranceEvent(mojom::TtsEventPtr tts_event);
 
   bool UserInterfaceIsBound() const;
+  void SetDarkenScreenCallback(
+      base::RepeatingCallback<void(bool darken)> callback);
   void SetFocusRingsCallback(base::RepeatingCallback<void()> callback);
   const std::vector<ax::mojom::FocusRingInfoPtr>& GetFocusRingsForType(
       mojom::AssistiveTechnologyType type) const;
@@ -105,6 +108,7 @@
   mojo::ReceiverSet<mojom::Tts> tts_receivers_;
   mojo::Remote<ax::mojom::TtsUtteranceClient> tts_utterance_client_;
 
+  base::RepeatingCallback<void(bool darken)> darken_screen_callback_;
   base::RepeatingCallback<void()> focus_rings_callback_;
   mojo::ReceiverSet<mojom::UserInterface> ux_receivers_;
   std::map<mojom::AssistiveTechnologyType,
diff --git a/services/accessibility/features/atp_js_api_test.cc b/services/accessibility/features/atp_js_api_test.cc
index 3a0007b..5a9dda8 100644
--- a/services/accessibility/features/atp_js_api_test.cc
+++ b/services/accessibility/features/atp_js_api_test.cc
@@ -426,6 +426,19 @@
   }
 };
 
+TEST_F(AccessibilityPrivateJSApiTest, DarkenScreen) {
+  base::RunLoop waiter;
+  client_->SetDarkenScreenCallback(
+      base::BindLambdaForTesting([&waiter](bool darken) {
+        waiter.Quit();
+        ASSERT_EQ(darken, true);
+      }));
+  ExecuteJS(R"JS(
+    chrome.accessibilityPrivate.darkenScreen(true);
+  )JS");
+  waiter.Run();
+}
+
 TEST_F(AccessibilityPrivateJSApiTest, SetFocusRings) {
   base::RunLoop waiter;
   client_->SetFocusRingsCallback(base::BindLambdaForTesting([&waiter, this]() {
diff --git a/services/accessibility/features/javascript/accessibility_private.js b/services/accessibility/features/javascript/accessibility_private.js
index 187cff1..30d8a52 100644
--- a/services/accessibility/features/javascript/accessibility_private.js
+++ b/services/accessibility/features/javascript/accessibility_private.js
@@ -45,6 +45,14 @@
   }
 
   /**
+   * Darkens or undarkens the screen.
+   * @param {boolean} darken
+   */
+  darkenScreen(darken) {
+    this.userInterfaceRemote_.darkenScreen(darken);
+  }
+
+  /**
    * Sets the given accessibility focus rings for this extension.
    * @param {!Array<!chrome.accessibilityPrivate.FocusRingInfo>} focusRings
    *     Array of focus rings to draw.
diff --git a/services/accessibility/public/mojom/user_interface.mojom b/services/accessibility/public/mojom/user_interface.mojom
index 91c36ad7..652e41d 100644
--- a/services/accessibility/public/mojom/user_interface.mojom
+++ b/services/accessibility/public/mojom/user_interface.mojom
@@ -52,6 +52,10 @@
 // Provides control over the user interface. Implemented in the main OS
 // browser process and called from Accessibility Service javascript in V8.
 interface UserInterface {
+    // Darkens or undarkens the screen - true to darken screen, false to
+    // undarken screen.
+    DarkenScreen(bool darken);
+
     // Sets the given accessibility focus rings for the given `at_type`
     // or clears them if the list is empty.
     // TODO(b/293348920): Cleanup after migration: pass a map of id to
@@ -62,4 +66,4 @@
 
     // Sets the bounds and color of the accessibility highlight.
     SetHighlights(array<gfx.mojom.Rect> rects, skia.mojom.SkColor color);
-};
\ No newline at end of file
+};
diff --git a/services/network/brokered_udp_client_socket.cc b/services/network/brokered_udp_client_socket.cc
index e88d3ae4..b9223c8a 100644
--- a/services/network/brokered_udp_client_socket.cc
+++ b/services/network/brokered_udp_client_socket.cc
@@ -326,6 +326,12 @@
   return socket_->SetDoNotFragment();
 }
 
+int BrokeredUdpClientSocket::SetRecvEcn() {
+  DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
+  DCHECK(socket_);
+  return socket_->SetRecvEcn();
+}
+
 void BrokeredUdpClientSocket::SetMsgConfirm(bool confirm) {
   DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
   set_msg_confirm_ = confirm;
diff --git a/services/network/brokered_udp_client_socket.h b/services/network/brokered_udp_client_socket.h
index e7ac5464..1531444 100644
--- a/services/network/brokered_udp_client_socket.h
+++ b/services/network/brokered_udp_client_socket.h
@@ -99,6 +99,7 @@
   int SetReceiveBufferSize(int32_t size) override;
   int SetSendBufferSize(int32_t size) override;
   int SetDoNotFragment() override;
+  int SetRecvEcn() override;
   void SetMsgConfirm(bool confirm) override;
   const net::NetLogWithSource& NetLog() const override;
 
diff --git a/services/network/p2p/socket_udp_unittest.cc b/services/network/p2p/socket_udp_unittest.cc
index 8f7d6812..9d9c389 100644
--- a/services/network/p2p/socket_udp_unittest.cc
+++ b/services/network/p2p/socket_udp_unittest.cc
@@ -149,6 +149,8 @@
 
   int SetDoNotFragment() override { return net::OK; }
 
+  int SetRecvEcn() override { return net::OK; }
+
   void SetMsgConfirm(bool confirm) override {}
 
   void ReceivePacket(const net::IPEndPoint& address,
diff --git a/services/network/proxy_auto_config_library_unittest.cc b/services/network/proxy_auto_config_library_unittest.cc
index 2530c6b..a3e0e90 100644
--- a/services/network/proxy_auto_config_library_unittest.cc
+++ b/services/network/proxy_auto_config_library_unittest.cc
@@ -184,6 +184,10 @@
     ADD_FAILURE() << "Called SetDoNotFragment()";
     return net::ERR_UNEXPECTED;
   }
+  int SetRecvEcn() override {
+    ADD_FAILURE() << "Called SetRecvEcn()";
+    return net::ERR_UNEXPECTED;
+  }
   void SetMsgConfirm(bool confirm) override {
     ADD_FAILURE() << "Called SetMsgConfirm()";
   }
diff --git a/services/network/public/cpp/features.gni b/services/network/public/cpp/features.gni
index b806e84..c160589b 100644
--- a/services/network/public/cpp/features.gni
+++ b/services/network/public/cpp/features.gni
@@ -6,7 +6,7 @@
 
 declare_args() {
   # Certificate transparency is not supported on iOS.
-  is_ct_supported = !is_ios
+  is_ct_supported = use_blink
 
   # Controls whether P2P is exposed by the network service.
   # Optional to reduce avoid having Chrome on iOS depends on
diff --git a/testing/buildbot/chromium.android.json b/testing/buildbot/chromium.android.json
index e5d07b8..564a2a8 100644
--- a/testing/buildbot/chromium.android.json
+++ b/testing/buildbot/chromium.android.json
@@ -894,287 +894,6 @@
       }
     ]
   },
-  "Nougat Phone Tester": {
-    "gtest_tests": [
-      {
-        "args": [
-          "--gs-results-bucket=chromium-result-details",
-          "--recover-devices"
-        ],
-        "merge": {
-          "args": [
-            "--bucket",
-            "chromium-result-details",
-            "--test-name",
-            "chrome_public_smoke_test"
-          ],
-          "script": "//build/android/pylib/results/presentation/test_results_presentation.py"
-        },
-        "name": "chrome_public_smoke_test",
-        "resultdb": {
-          "enable": true,
-          "has_native_resultdb_integration": true
-        },
-        "swarming": {
-          "dimensions": {
-            "android_devices": "1",
-            "device_os": "NMF26U",
-            "device_os_type": "userdebug",
-            "device_type": "marlin",
-            "os": "Android"
-          },
-          "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com"
-        },
-        "test": "chrome_public_smoke_test",
-        "test_id_prefix": "ninja://chrome/android:chrome_public_smoke_test/"
-      },
-      {
-        "args": [
-          "--shared-prefs-file=//chrome/android/shared_preference_files/test/vr_cardboard_skipdon_setupcomplete.json",
-          "--gs-results-bucket=chromium-result-details",
-          "--recover-devices",
-          "--remove-system-package=com.google.vr.vrcore",
-          "--additional-apk=//third_party/gvr-android-sdk/test-apks/vr_services/vr_services_current.apk"
-        ],
-        "merge": {
-          "args": [
-            "--bucket",
-            "chromium-result-details",
-            "--test-name",
-            "chrome_public_test_vr_apk-ddready-cardboard"
-          ],
-          "script": "//build/android/pylib/results/presentation/test_results_presentation.py"
-        },
-        "name": "chrome_public_test_vr_apk-ddready-cardboard",
-        "resultdb": {
-          "enable": true,
-          "has_native_resultdb_integration": true
-        },
-        "swarming": {
-          "dimensions": {
-            "android_devices": "1",
-            "device_os": "NMF26U",
-            "device_os_type": "userdebug",
-            "device_type": "marlin",
-            "os": "Android"
-          },
-          "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com",
-          "shards": 2
-        },
-        "test": "chrome_public_test_vr_apk",
-        "test_id_prefix": "ninja://chrome/android:chrome_public_test_vr_apk/"
-      },
-      {
-        "args": [
-          "--shared-prefs-file=//chrome/android/shared_preference_files/test/vr_ddview_skipdon_setupcomplete.json",
-          "--additional-apk=//third_party/gvr-android-sdk/test-apks/vr_keyboard/vr_keyboard_current.apk",
-          "--gs-results-bucket=chromium-result-details",
-          "--recover-devices",
-          "--git-revision=${got_revision}",
-          "--remove-system-package=com.google.vr.vrcore",
-          "--additional-apk=//third_party/gvr-android-sdk/test-apks/vr_services/vr_services_current.apk"
-        ],
-        "merge": {
-          "args": [
-            "--bucket",
-            "chromium-result-details",
-            "--test-name",
-            "chrome_public_test_vr_apk-ddready-ddview"
-          ],
-          "script": "//build/android/pylib/results/presentation/test_results_presentation.py"
-        },
-        "name": "chrome_public_test_vr_apk-ddready-ddview",
-        "precommit_args": [
-          "--gerrit-issue=${patch_issue}",
-          "--gerrit-patchset=${patch_set}",
-          "--buildbucket-id=${buildbucket_build_id}"
-        ],
-        "resultdb": {
-          "enable": true,
-          "has_native_resultdb_integration": true
-        },
-        "swarming": {
-          "dimensions": {
-            "android_devices": "1",
-            "device_os": "NMF26U",
-            "device_os_type": "userdebug",
-            "device_type": "marlin",
-            "os": "Android"
-          },
-          "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com",
-          "shards": 4
-        },
-        "test": "chrome_public_test_vr_apk",
-        "test_id_prefix": "ninja://chrome/android:chrome_public_test_vr_apk/"
-      },
-      {
-        "args": [
-          "--shared-prefs-file=//chrome/android/shared_preference_files/test/vr_ddview_don_setupcomplete.json",
-          "--additional-apk=//third_party/gvr-android-sdk/test-apks/vr_keyboard/vr_keyboard_current.apk",
-          "--annotation=Restriction=VR_DON_Enabled",
-          "--vr-don-enabled",
-          "--gs-results-bucket=chromium-result-details",
-          "--recover-devices",
-          "--remove-system-package=com.google.vr.vrcore",
-          "--additional-apk=//third_party/gvr-android-sdk/test-apks/vr_services/vr_services_current.apk"
-        ],
-        "merge": {
-          "args": [
-            "--bucket",
-            "chromium-result-details",
-            "--test-name",
-            "chrome_public_test_vr_apk-ddready-don-enabled"
-          ],
-          "script": "//build/android/pylib/results/presentation/test_results_presentation.py"
-        },
-        "name": "chrome_public_test_vr_apk-ddready-don-enabled",
-        "resultdb": {
-          "enable": true,
-          "has_native_resultdb_integration": true
-        },
-        "swarming": {
-          "dimensions": {
-            "android_devices": "1",
-            "device_os": "NMF26U",
-            "device_os_type": "userdebug",
-            "device_type": "marlin",
-            "os": "Android"
-          },
-          "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com"
-        },
-        "test": "chrome_public_test_vr_apk",
-        "test_id_prefix": "ninja://chrome/android:chrome_public_test_vr_apk/"
-      },
-      {
-        "args": [
-          "--gs-results-bucket=chromium-result-details",
-          "--recover-devices"
-        ],
-        "merge": {
-          "args": [
-            "--bucket",
-            "chromium-result-details",
-            "--test-name",
-            "monochrome_public_bundle_smoke_test"
-          ],
-          "script": "//build/android/pylib/results/presentation/test_results_presentation.py"
-        },
-        "name": "monochrome_public_bundle_smoke_test",
-        "resultdb": {
-          "enable": true,
-          "has_native_resultdb_integration": true
-        },
-        "swarming": {
-          "dimensions": {
-            "android_devices": "1",
-            "device_os": "NMF26U",
-            "device_os_type": "userdebug",
-            "device_type": "marlin",
-            "os": "Android"
-          },
-          "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com"
-        },
-        "test": "monochrome_public_bundle_smoke_test",
-        "test_id_prefix": "ninja://chrome/android:monochrome_public_bundle_smoke_test/"
-      },
-      {
-        "args": [
-          "--gs-results-bucket=chromium-result-details",
-          "--recover-devices"
-        ],
-        "merge": {
-          "args": [
-            "--bucket",
-            "chromium-result-details",
-            "--test-name",
-            "monochrome_public_smoke_test"
-          ],
-          "script": "//build/android/pylib/results/presentation/test_results_presentation.py"
-        },
-        "name": "monochrome_public_smoke_test",
-        "resultdb": {
-          "enable": true,
-          "has_native_resultdb_integration": true
-        },
-        "swarming": {
-          "dimensions": {
-            "android_devices": "1",
-            "device_os": "NMF26U",
-            "device_os_type": "userdebug",
-            "device_type": "marlin",
-            "os": "Android"
-          },
-          "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com"
-        },
-        "test": "monochrome_public_smoke_test",
-        "test_id_prefix": "ninja://chrome/android:monochrome_public_smoke_test/"
-      },
-      {
-        "args": [
-          "--gs-results-bucket=chromium-result-details",
-          "--recover-devices"
-        ],
-        "merge": {
-          "args": [
-            "--bucket",
-            "chromium-result-details",
-            "--test-name",
-            "monochrome_public_test_ar_apk"
-          ],
-          "script": "//build/android/pylib/results/presentation/test_results_presentation.py"
-        },
-        "name": "monochrome_public_test_ar_apk",
-        "resultdb": {
-          "enable": true,
-          "has_native_resultdb_integration": true
-        },
-        "swarming": {
-          "dimensions": {
-            "android_devices": "1",
-            "device_os": "NMF26U",
-            "device_os_type": "userdebug",
-            "device_type": "marlin",
-            "os": "Android"
-          },
-          "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com"
-        },
-        "test": "monochrome_public_test_ar_apk",
-        "test_id_prefix": "ninja://chrome/android:monochrome_public_test_ar_apk/"
-      },
-      {
-        "args": [
-          "--gs-results-bucket=chromium-result-details",
-          "--recover-devices"
-        ],
-        "merge": {
-          "args": [
-            "--bucket",
-            "chromium-result-details",
-            "--test-name",
-            "vr_android_unittests"
-          ],
-          "script": "//build/android/pylib/results/presentation/test_results_presentation.py"
-        },
-        "name": "vr_android_unittests",
-        "resultdb": {
-          "enable": true,
-          "has_native_resultdb_integration": true
-        },
-        "swarming": {
-          "dimensions": {
-            "android_devices": "1",
-            "device_os": "NMF26U",
-            "device_os_type": "userdebug",
-            "device_type": "marlin",
-            "os": "Android"
-          },
-          "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com"
-        },
-        "test": "vr_android_unittests",
-        "test_id_prefix": "ninja://chrome/browser/android/vr:vr_android_unittests/"
-      }
-    ]
-  },
   "Oreo Phone Tester": {
     "gtest_tests": [
       {
diff --git a/testing/buildbot/chromium.chromiumos.json b/testing/buildbot/chromium.chromiumos.json
index 0715f82..f97c44719 100644
--- a/testing/buildbot/chromium.chromiumos.json
+++ b/testing/buildbot/chromium.chromiumos.json
@@ -5069,9 +5069,9 @@
       {
         "args": [
           "--test-launcher-filter-file=../../testing/buildbot/filters/linux-lacros.interactive_ui_tests.skew.filter",
-          "--ash-chrome-path-override=../../lacros_version_skew_tests_v120.0.6059.0/test_ash_chrome"
+          "--ash-chrome-path-override=../../lacros_version_skew_tests_v120.0.6060.0/test_ash_chrome"
         ],
-        "description": "Run with ash-chrome version 120.0.6059.0",
+        "description": "Run with ash-chrome version 120.0.6060.0",
         "isolate_profile_data": true,
         "merge": {
           "script": "//testing/merge_scripts/standard_gtest_merge.py"
@@ -5081,8 +5081,8 @@
           "cipd_packages": [
             {
               "cipd_package": "chromium/testing/linux-ash-chromium/x86_64/ash.zip",
-              "location": "lacros_version_skew_tests_v120.0.6059.0",
-              "revision": "version:120.0.6059.0"
+              "location": "lacros_version_skew_tests_v120.0.6060.0",
+              "revision": "version:120.0.6060.0"
             }
           ],
           "dimensions": {
@@ -5219,9 +5219,9 @@
       {
         "args": [
           "--test-launcher-filter-file=../../testing/buildbot/filters/linux-lacros.lacros_chrome_browsertests.skew.filter",
-          "--ash-chrome-path-override=../../lacros_version_skew_tests_v120.0.6059.0/test_ash_chrome"
+          "--ash-chrome-path-override=../../lacros_version_skew_tests_v120.0.6060.0/test_ash_chrome"
         ],
-        "description": "Run with ash-chrome version 120.0.6059.0",
+        "description": "Run with ash-chrome version 120.0.6060.0",
         "isolate_profile_data": true,
         "merge": {
           "script": "//testing/merge_scripts/standard_gtest_merge.py"
@@ -5231,8 +5231,8 @@
           "cipd_packages": [
             {
               "cipd_package": "chromium/testing/linux-ash-chromium/x86_64/ash.zip",
-              "location": "lacros_version_skew_tests_v120.0.6059.0",
-              "revision": "version:120.0.6059.0"
+              "location": "lacros_version_skew_tests_v120.0.6060.0",
+              "revision": "version:120.0.6060.0"
             }
           ],
           "dimensions": {
diff --git a/testing/buildbot/chromium.coverage.json b/testing/buildbot/chromium.coverage.json
index 5d95e70..5ae5fb20 100644
--- a/testing/buildbot/chromium.coverage.json
+++ b/testing/buildbot/chromium.coverage.json
@@ -25449,9 +25449,9 @@
       {
         "args": [
           "--test-launcher-filter-file=../../testing/buildbot/filters/linux-lacros.interactive_ui_tests.skew.filter",
-          "--ash-chrome-path-override=../../lacros_version_skew_tests_v120.0.6059.0/test_ash_chrome"
+          "--ash-chrome-path-override=../../lacros_version_skew_tests_v120.0.6060.0/test_ash_chrome"
         ],
-        "description": "Run with ash-chrome version 120.0.6059.0",
+        "description": "Run with ash-chrome version 120.0.6060.0",
         "isolate_profile_data": true,
         "merge": {
           "script": "//testing/merge_scripts/standard_gtest_merge.py"
@@ -25461,8 +25461,8 @@
           "cipd_packages": [
             {
               "cipd_package": "chromium/testing/linux-ash-chromium/x86_64/ash.zip",
-              "location": "lacros_version_skew_tests_v120.0.6059.0",
-              "revision": "version:120.0.6059.0"
+              "location": "lacros_version_skew_tests_v120.0.6060.0",
+              "revision": "version:120.0.6060.0"
             }
           ],
           "dimensions": {
@@ -25599,9 +25599,9 @@
       {
         "args": [
           "--test-launcher-filter-file=../../testing/buildbot/filters/linux-lacros.lacros_chrome_browsertests.skew.filter",
-          "--ash-chrome-path-override=../../lacros_version_skew_tests_v120.0.6059.0/test_ash_chrome"
+          "--ash-chrome-path-override=../../lacros_version_skew_tests_v120.0.6060.0/test_ash_chrome"
         ],
-        "description": "Run with ash-chrome version 120.0.6059.0",
+        "description": "Run with ash-chrome version 120.0.6060.0",
         "isolate_profile_data": true,
         "merge": {
           "script": "//testing/merge_scripts/standard_gtest_merge.py"
@@ -25611,8 +25611,8 @@
           "cipd_packages": [
             {
               "cipd_package": "chromium/testing/linux-ash-chromium/x86_64/ash.zip",
-              "location": "lacros_version_skew_tests_v120.0.6059.0",
-              "revision": "version:120.0.6059.0"
+              "location": "lacros_version_skew_tests_v120.0.6060.0",
+              "revision": "version:120.0.6060.0"
             }
           ],
           "dimensions": {
diff --git a/testing/buildbot/chromium.fyi.json b/testing/buildbot/chromium.fyi.json
index 4ee18fa..326afd4 100644
--- a/testing/buildbot/chromium.fyi.json
+++ b/testing/buildbot/chromium.fyi.json
@@ -43527,9 +43527,9 @@
       {
         "args": [
           "--test-launcher-filter-file=../../testing/buildbot/filters/linux-lacros.interactive_ui_tests.skew.filter",
-          "--ash-chrome-path-override=../../lacros_version_skew_tests_v120.0.6059.0/test_ash_chrome"
+          "--ash-chrome-path-override=../../lacros_version_skew_tests_v120.0.6060.0/test_ash_chrome"
         ],
-        "description": "Run with ash-chrome version 120.0.6059.0",
+        "description": "Run with ash-chrome version 120.0.6060.0",
         "merge": {
           "script": "//testing/merge_scripts/standard_gtest_merge.py"
         },
@@ -43538,8 +43538,8 @@
           "cipd_packages": [
             {
               "cipd_package": "chromium/testing/linux-ash-chromium/x86_64/ash.zip",
-              "location": "lacros_version_skew_tests_v120.0.6059.0",
-              "revision": "version:120.0.6059.0"
+              "location": "lacros_version_skew_tests_v120.0.6060.0",
+              "revision": "version:120.0.6060.0"
             }
           ],
           "dimensions": {
@@ -43677,9 +43677,9 @@
       {
         "args": [
           "--test-launcher-filter-file=../../testing/buildbot/filters/linux-lacros.lacros_chrome_browsertests.skew.filter",
-          "--ash-chrome-path-override=../../lacros_version_skew_tests_v120.0.6059.0/test_ash_chrome"
+          "--ash-chrome-path-override=../../lacros_version_skew_tests_v120.0.6060.0/test_ash_chrome"
         ],
-        "description": "Run with ash-chrome version 120.0.6059.0",
+        "description": "Run with ash-chrome version 120.0.6060.0",
         "merge": {
           "script": "//testing/merge_scripts/standard_gtest_merge.py"
         },
@@ -43688,8 +43688,8 @@
           "cipd_packages": [
             {
               "cipd_package": "chromium/testing/linux-ash-chromium/x86_64/ash.zip",
-              "location": "lacros_version_skew_tests_v120.0.6059.0",
-              "revision": "version:120.0.6059.0"
+              "location": "lacros_version_skew_tests_v120.0.6060.0",
+              "revision": "version:120.0.6060.0"
             }
           ],
           "dimensions": {
@@ -45001,9 +45001,9 @@
       {
         "args": [
           "--test-launcher-filter-file=../../testing/buildbot/filters/linux-lacros.interactive_ui_tests.skew.filter",
-          "--ash-chrome-path-override=../../lacros_version_skew_tests_v120.0.6059.0/test_ash_chrome"
+          "--ash-chrome-path-override=../../lacros_version_skew_tests_v120.0.6060.0/test_ash_chrome"
         ],
-        "description": "Run with ash-chrome version 120.0.6059.0",
+        "description": "Run with ash-chrome version 120.0.6060.0",
         "merge": {
           "script": "//testing/merge_scripts/standard_gtest_merge.py"
         },
@@ -45012,8 +45012,8 @@
           "cipd_packages": [
             {
               "cipd_package": "chromium/testing/linux-ash-chromium/x86_64/ash.zip",
-              "location": "lacros_version_skew_tests_v120.0.6059.0",
-              "revision": "version:120.0.6059.0"
+              "location": "lacros_version_skew_tests_v120.0.6060.0",
+              "revision": "version:120.0.6060.0"
             }
           ],
           "dimensions": {
@@ -45151,9 +45151,9 @@
       {
         "args": [
           "--test-launcher-filter-file=../../testing/buildbot/filters/linux-lacros.lacros_chrome_browsertests.skew.filter",
-          "--ash-chrome-path-override=../../lacros_version_skew_tests_v120.0.6059.0/test_ash_chrome"
+          "--ash-chrome-path-override=../../lacros_version_skew_tests_v120.0.6060.0/test_ash_chrome"
         ],
-        "description": "Run with ash-chrome version 120.0.6059.0",
+        "description": "Run with ash-chrome version 120.0.6060.0",
         "merge": {
           "script": "//testing/merge_scripts/standard_gtest_merge.py"
         },
@@ -45162,8 +45162,8 @@
           "cipd_packages": [
             {
               "cipd_package": "chromium/testing/linux-ash-chromium/x86_64/ash.zip",
-              "location": "lacros_version_skew_tests_v120.0.6059.0",
-              "revision": "version:120.0.6059.0"
+              "location": "lacros_version_skew_tests_v120.0.6060.0",
+              "revision": "version:120.0.6060.0"
             }
           ],
           "dimensions": {
@@ -45861,9 +45861,9 @@
       {
         "args": [
           "--test-launcher-filter-file=../../testing/buildbot/filters/linux-lacros.interactive_ui_tests.skew.filter",
-          "--ash-chrome-path-override=../../lacros_version_skew_tests_v120.0.6059.0/test_ash_chrome"
+          "--ash-chrome-path-override=../../lacros_version_skew_tests_v120.0.6060.0/test_ash_chrome"
         ],
-        "description": "Run with ash-chrome version 120.0.6059.0",
+        "description": "Run with ash-chrome version 120.0.6060.0",
         "merge": {
           "script": "//testing/merge_scripts/standard_gtest_merge.py"
         },
@@ -45872,8 +45872,8 @@
           "cipd_packages": [
             {
               "cipd_package": "chromium/testing/linux-ash-chromium/x86_64/ash.zip",
-              "location": "lacros_version_skew_tests_v120.0.6059.0",
-              "revision": "version:120.0.6059.0"
+              "location": "lacros_version_skew_tests_v120.0.6060.0",
+              "revision": "version:120.0.6060.0"
             }
           ],
           "dimensions": {
diff --git a/testing/buildbot/chromium.memory.json b/testing/buildbot/chromium.memory.json
index 2bac6b3..1554cb0e 100644
--- a/testing/buildbot/chromium.memory.json
+++ b/testing/buildbot/chromium.memory.json
@@ -16364,12 +16364,12 @@
       {
         "args": [
           "--test-launcher-filter-file=../../testing/buildbot/filters/linux-lacros.interactive_ui_tests.skew.filter",
-          "--ash-chrome-path-override=../../lacros_version_skew_tests_v120.0.6059.0/test_ash_chrome",
+          "--ash-chrome-path-override=../../lacros_version_skew_tests_v120.0.6060.0/test_ash_chrome",
           "--test-launcher-print-test-stdio=always",
           "--combine-ash-logs-on-bots",
           "--asan-symbolize-output"
         ],
-        "description": "Run with ash-chrome version 120.0.6059.0",
+        "description": "Run with ash-chrome version 120.0.6060.0",
         "isolate_profile_data": true,
         "merge": {
           "script": "//testing/merge_scripts/standard_gtest_merge.py"
@@ -16379,8 +16379,8 @@
           "cipd_packages": [
             {
               "cipd_package": "chromium/testing/linux-ash-chromium/x86_64/ash.zip",
-              "location": "lacros_version_skew_tests_v120.0.6059.0",
-              "revision": "version:120.0.6059.0"
+              "location": "lacros_version_skew_tests_v120.0.6060.0",
+              "revision": "version:120.0.6060.0"
             }
           ],
           "dimensions": {
@@ -16534,12 +16534,12 @@
       {
         "args": [
           "--test-launcher-filter-file=../../testing/buildbot/filters/linux-lacros.lacros_chrome_browsertests.skew.filter",
-          "--ash-chrome-path-override=../../lacros_version_skew_tests_v120.0.6059.0/test_ash_chrome",
+          "--ash-chrome-path-override=../../lacros_version_skew_tests_v120.0.6060.0/test_ash_chrome",
           "--test-launcher-print-test-stdio=always",
           "--combine-ash-logs-on-bots",
           "--asan-symbolize-output"
         ],
-        "description": "Run with ash-chrome version 120.0.6059.0",
+        "description": "Run with ash-chrome version 120.0.6060.0",
         "isolate_profile_data": true,
         "merge": {
           "script": "//testing/merge_scripts/standard_gtest_merge.py"
@@ -16549,8 +16549,8 @@
           "cipd_packages": [
             {
               "cipd_package": "chromium/testing/linux-ash-chromium/x86_64/ash.zip",
-              "location": "lacros_version_skew_tests_v120.0.6059.0",
-              "revision": "version:120.0.6059.0"
+              "location": "lacros_version_skew_tests_v120.0.6060.0",
+              "revision": "version:120.0.6060.0"
             }
           ],
           "dimensions": {
diff --git a/testing/buildbot/test_suite_exceptions.pyl b/testing/buildbot/test_suite_exceptions.pyl
index e5e7139..cf35b13 100644
--- a/testing/buildbot/test_suite_exceptions.pyl
+++ b/testing/buildbot/test_suite_exceptions.pyl
@@ -3701,7 +3701,6 @@
       'android-pie-arm64-rel',
       'android-pie-x86-rel',
       'android-11-x86-rel',
-      'Nougat Phone Tester',
       'ToTAndroid'
     ]
   },
diff --git a/testing/buildbot/test_suites.pyl b/testing/buildbot/test_suites.pyl
index 78866cd..5a94335 100644
--- a/testing/buildbot/test_suites.pyl
+++ b/testing/buildbot/test_suites.pyl
@@ -5757,13 +5757,6 @@
       'vr_platform_specific_chromium_gtests',
     ],
 
-    'android_nougat_gtests': [
-      'android_ar_gtests',
-      'android_ddready_vr_gtests',
-      'android_monochrome_smoke_tests',
-      'android_smoke_tests',
-    ],
-
     'android_oreo_emulator_gtests': [
       'android_emulator_specific_chrome_public_tests',
       'android_monochrome_smoke_tests',
diff --git a/testing/buildbot/variants.pyl b/testing/buildbot/variants.pyl
index 21dd8f8f..42b52f2 100644
--- a/testing/buildbot/variants.pyl
+++ b/testing/buildbot/variants.pyl
@@ -70,16 +70,16 @@
   },
   'LACROS_VERSION_SKEW_CANARY': {
     'identifier': 'Lacros version skew testing ash canary',
-    'description': 'Run with ash-chrome version 120.0.6059.0',
+    'description': 'Run with ash-chrome version 120.0.6060.0',
     'args': [
-      '--ash-chrome-path-override=../../lacros_version_skew_tests_v120.0.6059.0/test_ash_chrome',
+      '--ash-chrome-path-override=../../lacros_version_skew_tests_v120.0.6060.0/test_ash_chrome',
     ],
     'swarming': {
       'cipd_packages': [
         {
           'cipd_package': 'chromium/testing/linux-ash-chromium/x86_64/ash.zip',
-          'location': 'lacros_version_skew_tests_v120.0.6059.0',
-          'revision': 'version:120.0.6059.0',
+          'location': 'lacros_version_skew_tests_v120.0.6060.0',
+          'revision': 'version:120.0.6060.0',
         },
       ],
     },
diff --git a/testing/buildbot/waterfalls.pyl b/testing/buildbot/waterfalls.pyl
index 2c4eed7..e0d169d 100644
--- a/testing/buildbot/waterfalls.pyl
+++ b/testing/buildbot/waterfalls.pyl
@@ -636,24 +636,6 @@
           'junit_tests': 'cast_junit_tests',
         },
       },
-      'Nougat Phone Tester': {
-        'test_suites': {
-          'gtest_tests': 'android_nougat_gtests',
-        },
-        'mixins': [
-          'has_native_resultdb_integration'
-        ],
-        'swarming': {
-          'dimensions': {
-            'android_devices': '1',
-            'device_os': 'NMF26U',
-            'device_type': 'marlin',
-            'os': 'Android',
-          },
-        },
-        'skip_output_links': True,
-        'os_type': 'android',
-      },
       'Oreo Phone Tester': {
         'os_type': 'android',
         'test_suites': {
diff --git a/testing/variations/fieldtrial_testing_config.json b/testing/variations/fieldtrial_testing_config.json
index 2113319..3761b4c 100644
--- a/testing/variations/fieldtrial_testing_config.json
+++ b/testing/variations/fieldtrial_testing_config.json
@@ -13423,6 +13423,26 @@
             ]
         }
     ],
+    "ProtectedAudiencesPassKanonStatusToReportWinStudy": [
+        {
+            "platforms": [
+                "android",
+                "chromeos",
+                "chromeos_lacros",
+                "linux",
+                "mac",
+                "windows"
+            ],
+            "experiments": [
+                {
+                    "name": "Enabled",
+                    "enable_features": [
+                        "FledgePassKAnonStatusToReportWin"
+                    ]
+                }
+            ]
+        }
+    ],
     "PushMessagingDisallowSenderIDs": [
         {
             "platforms": [
diff --git a/third_party/blink/renderer/core/editing/frame_selection.cc b/third_party/blink/renderer/core/editing/frame_selection.cc
index 0ba41d4..b22d99c 100644
--- a/third_party/blink/renderer/core/editing/frame_selection.cc
+++ b/third_party/blink/renderer/core/editing/frame_selection.cc
@@ -268,7 +268,7 @@
   is_directional_ = options.IsDirectional();
   should_shrink_next_tap_ = options.ShouldShrinkNextTap();
   is_handle_visible_ = should_show_handle;
-  ScheduleVisualUpdateForVisualOverflowIfNeeded();
+  ScheduleVisualUpdateForPaintInvalidationIfNeeded();
 
   frame_->GetEditor().RespondToChangedSelection();
   DCHECK_EQ(current_document, GetDocument());
@@ -476,7 +476,7 @@
   if (set_selection_by == SetSelectionBy::kUser)
     granularity_ = TextGranularity::kCharacter;
 
-  ScheduleVisualUpdateForVisualOverflowIfNeeded();
+  ScheduleVisualUpdateForPaintInvalidationIfNeeded();
 
   return true;
 }
@@ -1165,9 +1165,9 @@
     page->Animator().ScheduleVisualUpdate(&frame_->LocalFrameRoot());
 }
 
-void FrameSelection::ScheduleVisualUpdateForVisualOverflowIfNeeded() const {
+void FrameSelection::ScheduleVisualUpdateForPaintInvalidationIfNeeded() const {
   if (LocalFrameView* frame_view = frame_->View())
-    frame_view->ScheduleVisualUpdateForVisualOverflowIfNeeded();
+    frame_view->ScheduleVisualUpdateForPaintInvalidationIfNeeded();
 }
 
 bool FrameSelection::SelectWordAroundCaret() {
diff --git a/third_party/blink/renderer/core/editing/frame_selection.h b/third_party/blink/renderer/core/editing/frame_selection.h
index c2dccc7..af2a589 100644
--- a/third_party/blink/renderer/core/editing/frame_selection.h
+++ b/third_party/blink/renderer/core/editing/frame_selection.h
@@ -226,7 +226,7 @@
   void CommitAppearanceIfNeeded();
   void SetCaretEnabled(bool caret_is_visible);
   void ScheduleVisualUpdate() const;
-  void ScheduleVisualUpdateForVisualOverflowIfNeeded() const;
+  void ScheduleVisualUpdateForPaintInvalidationIfNeeded() const;
 
   // Paint invalidation methods delegating to FrameCaret.
   void LayoutBlockWillBeDestroyed(const LayoutBlock&);
diff --git a/third_party/blink/renderer/core/frame/local_frame_view.cc b/third_party/blink/renderer/core/frame/local_frame_view.cc
index 50ea9cb..7a2797f 100644
--- a/third_party/blink/renderer/core/frame/local_frame_view.cc
+++ b/third_party/blink/renderer/core/frame/local_frame_view.cc
@@ -2550,8 +2550,8 @@
         }
       }
 
-      frame_view.GetLayoutView()->CommitPendingSelection();
       frame_view.GetLayoutView()->Layer()->UpdateDescendantDependentFlags();
+      frame_view.GetLayoutView()->CommitPendingSelection();
     });
 #if DCHECK_IS_ON()
     SetIsUpdatingDescendantDependentFlags(false);
diff --git a/third_party/blink/renderer/core/intersection_observer/intersection_geometry.cc b/third_party/blink/renderer/core/intersection_observer/intersection_geometry.cc
index 0ad721d9..620c9a14 100644
--- a/third_party/blink/renderer/core/intersection_observer/intersection_geometry.cc
+++ b/third_party/blink/renderer/core/intersection_observer/intersection_geometry.cc
@@ -675,7 +675,7 @@
         intersection_rect.Move(scroll_offset);
         unclipped_intersection_rect.Move(scroll_offset);
       }
-      LayoutRect root_clip_rect = root_rect.ToLayoutRect();
+      DeprecatedLayoutRect root_clip_rect = root_rect.ToLayoutRect();
       // TODO(szager): This flipping seems incorrect because root_rect is
       // already physical.
       local_ancestor->DeprecatedFlipForWritingMode(root_clip_rect);
diff --git a/third_party/blink/renderer/core/layout/geometry/logical_rect.h b/third_party/blink/renderer/core/layout/geometry/logical_rect.h
index 60006d779..e9c6e40 100644
--- a/third_party/blink/renderer/core/layout/geometry/logical_rect.h
+++ b/third_party/blink/renderer/core/layout/geometry/logical_rect.h
@@ -12,8 +12,6 @@
 
 namespace blink {
 
-class LayoutRect;
-
 // LogicalRect is the position and size of a rect (typically a fragment)
 // relative to the parent in the logical coordinate system.
 // For more information about physical and logical coordinate systems, see:
@@ -39,12 +37,11 @@
                         int block_offset,
                         int inline_size,
                         int block_size);
-
-  constexpr explicit LogicalRect(const LayoutRect& source)
+  constexpr explicit LogicalRect(const DeprecatedLayoutRect& source)
       : LogicalRect({source.X(), source.Y()},
                     {source.Width(), source.Height()}) {}
 
-  constexpr LayoutRect ToLayoutRect() const {
+  constexpr DeprecatedLayoutRect ToLayoutRect() const {
     return {offset.inline_offset, offset.block_offset, size.inline_size,
             size.block_size};
   }
diff --git a/third_party/blink/renderer/core/layout/geometry/physical_rect.h b/third_party/blink/renderer/core/layout/geometry/physical_rect.h
index 48e36784..907cca6 100644
--- a/third_party/blink/renderer/core/layout/geometry/physical_rect.h
+++ b/third_party/blink/renderer/core/layout/geometry/physical_rect.h
@@ -176,10 +176,11 @@
 
   // Conversions from/to existing code. New code prefers type safety for
   // logical/physical distinctions.
-  constexpr explicit PhysicalRect(const LayoutRect& r)
+  constexpr explicit PhysicalRect(const DeprecatedLayoutRect& r)
       : offset(r.X(), r.Y()), size(r.Width(), r.Height()) {}
-  constexpr LayoutRect ToLayoutRect() const {
-    return LayoutRect(offset.left, offset.top, size.width, size.height);
+  constexpr DeprecatedLayoutRect ToLayoutRect() const {
+    return DeprecatedLayoutRect(offset.left, offset.top, size.width,
+                                size.height);
   }
 
   constexpr explicit operator gfx::RectF() const {
diff --git a/third_party/blink/renderer/core/layout/layout_block.cc b/third_party/blink/renderer/core/layout/layout_block.cc
index 148bd693..a7064bd 100644
--- a/third_party/blink/renderer/core/layout/layout_block.cc
+++ b/third_party/blink/renderer/core/layout/layout_block.cc
@@ -693,7 +693,7 @@
     }
     return CreateWritingModeConverter().ToPhysical(caret_rect);
   }
-  LayoutRect caret_rect;
+  DeprecatedLayoutRect caret_rect;
   if (is_horizontal) {
     caret_rect =
         LocalCaretRectForEmptyElement(Size().width, TextIndentOffset());
diff --git a/third_party/blink/renderer/core/layout/layout_box.cc b/third_party/blink/renderer/core/layout/layout_box.cc
index bf8f4b4..28d2819 100644
--- a/third_party/blink/renderer/core/layout/layout_box.cc
+++ b/third_party/blink/renderer/core/layout/layout_box.cc
@@ -130,7 +130,7 @@
 static const unsigned kBackgroundObscurationTestMaxDepth = 4;
 
 struct SameSizeAsLayoutBox : public LayoutBoxModelObject {
-  LayoutRect frame_rect;
+  DeprecatedLayoutRect frame_rect;
   PhysicalSize previous_size;
   NGPhysicalBoxStrut margin_box_outsets;
   MinMaxSizes intrinsic_logical_widths;
diff --git a/third_party/blink/renderer/core/layout/layout_box.h b/third_party/blink/renderer/core/layout/layout_box.h
index 975aa97a..3e570e2 100644
--- a/third_party/blink/renderer/core/layout/layout_box.h
+++ b/third_party/blink/renderer/core/layout/layout_box.h
@@ -1061,7 +1061,7 @@
   // Inherit other flipping methods from LayoutObject.
   using LayoutObject::FlipForWritingMode;
 
-  void DeprecatedFlipForWritingMode(LayoutRect& rect) const {
+  void DeprecatedFlipForWritingMode(DeprecatedLayoutRect& rect) const {
     NOT_DESTROYED();
     if (LIKELY(!HasFlippedBlocksWritingMode()))
       return;
diff --git a/third_party/blink/renderer/core/layout/layout_box_model_object.cc b/third_party/blink/renderer/core/layout/layout_box_model_object.cc
index 6580aaa..72049403 100644
--- a/third_party/blink/renderer/core/layout/layout_box_model_object.cc
+++ b/third_party/blink/renderer/core/layout/layout_box_model_object.cc
@@ -754,7 +754,7 @@
   return ContainingBlock()->AvailableLogicalWidth();
 }
 
-LayoutRect LayoutBoxModelObject::LocalCaretRectForEmptyElement(
+DeprecatedLayoutRect LayoutBoxModelObject::LocalCaretRectForEmptyElement(
     LayoutUnit width,
     LayoutUnit text_indent_offset) const {
   NOT_DESTROYED();
@@ -836,12 +836,12 @@
   if (RuntimeEnabledFeatures::EmptyCaretInVerticalEnabled()) {
     LayoutUnit block_start = border_padding.block_start + (vertical_space / 2);
     // Returns a logical box.
-    return LayoutRect(x, block_start, caret_width, height);
+    return DeprecatedLayoutRect(x, block_start, caret_width, height);
   }
   LayoutUnit y = PaddingTop() + BorderTop() + (vertical_space / 2);
   return current_style.IsHorizontalWritingMode()
-             ? LayoutRect(x, y, caret_width, height)
-             : LayoutRect(y, x, height, caret_width);
+             ? DeprecatedLayoutRect(x, y, caret_width, height)
+             : DeprecatedLayoutRect(y, x, height, caret_width);
 }
 
 void LayoutBoxModelObject::MoveChildTo(
diff --git a/third_party/blink/renderer/core/layout/layout_box_model_object.h b/third_party/blink/renderer/core/layout/layout_box_model_object.h
index 7549cf6..b8ab794 100644
--- a/third_party/blink/renderer/core/layout/layout_box_model_object.h
+++ b/third_party/blink/renderer/core/layout/layout_box_model_object.h
@@ -411,8 +411,9 @@
 
   // This returns a logical rectangle.
   // TODO(crbug.com/1229581): Change it to LogicalRect.
-  LayoutRect LocalCaretRectForEmptyElement(LayoutUnit width,
-                                           LayoutUnit text_indent_offset) const;
+  DeprecatedLayoutRect LocalCaretRectForEmptyElement(
+      LayoutUnit width,
+      LayoutUnit text_indent_offset) const;
 
   void AddOutlineRectsForDescendant(const LayoutObject& descendant,
                                     OutlineRectCollector&,
diff --git a/third_party/blink/renderer/core/layout/layout_inline.cc b/third_party/blink/renderer/core/layout/layout_inline.cc
index 1a7fc59..0a5842a7 100644
--- a/third_party/blink/renderer/core/layout/layout_inline.cc
+++ b/third_party/blink/renderer/core/layout/layout_inline.cc
@@ -272,7 +272,7 @@
   LayoutUnit inline_size = RuntimeEnabledFeatures::EmptyCaretInVerticalEnabled()
                                ? BorderAndPaddingLogicalWidth()
                                : BorderAndPaddingWidth();
-  LayoutRect caret_rect =
+  DeprecatedLayoutRect caret_rect =
       LocalCaretRectForEmptyElement(inline_size, LayoutUnit());
 
   if (IsInLayoutNGInlineFormattingContext()) {
diff --git a/third_party/blink/renderer/core/layout/layout_object.cc b/third_party/blink/renderer/core/layout/layout_object.cc
index 3792140..90cead2 100644
--- a/third_party/blink/renderer/core/layout/layout_object.cc
+++ b/third_party/blink/renderer/core/layout/layout_object.cc
@@ -4561,9 +4561,6 @@
   NOT_DESTROYED();
   bitfields_.SetShouldInvalidateSelection(true);
   SetShouldCheckForPaintInvalidation();
-  if (GetSelectionStyle()) {
-    InvalidateVisualOverflow();
-  }
 }
 
 void LayoutObject::SetShouldDoFullPaintInvalidation(
diff --git a/third_party/blink/renderer/core/layout/layout_object.h b/third_party/blink/renderer/core/layout/layout_object.h
index 7a590a59..3e5207ea 100644
--- a/third_party/blink/renderer/core/layout/layout_object.h
+++ b/third_party/blink/renderer/core/layout/layout_object.h
@@ -1469,7 +1469,7 @@
   // For non-boxes, for better performance, the caller can prepare
   // |block_for_flipping| (= ContainingBlock()) if it will loop through many
   // rects/points to flip to avoid the cost of repeated ContainingBlock() calls.
-  [[nodiscard]] LayoutRect FlipForWritingMode(
+  [[nodiscard]] DeprecatedLayoutRect FlipForWritingMode(
       const PhysicalRect& r,
       const LayoutBox* box_for_flipping = nullptr) const {
     NOT_DESTROYED();
@@ -1479,7 +1479,7 @@
             r.Y(), r.Width(), r.Height()};
   }
   [[nodiscard]] PhysicalRect FlipForWritingMode(
-      const LayoutRect& r,
+      const DeprecatedLayoutRect& r,
       const LayoutBox* box_for_flipping = nullptr) const {
     NOT_DESTROYED();
     if (LIKELY(!HasFlippedBlocksWritingMode()))
diff --git a/third_party/blink/renderer/core/layout/layout_text.cc b/third_party/blink/renderer/core/layout/layout_text.cc
index 65653496..cabb712 100644
--- a/third_party/blink/renderer/core/layout/layout_text.cc
+++ b/third_party/blink/renderer/core/layout/layout_text.cc
@@ -662,7 +662,7 @@
       UNLIKELY(HasFlippedBlocksWritingMode()) ? ContainingBlock() : nullptr;
   CollectLineBoxRects(
       [this, &result, block_for_flipping](const PhysicalRect& r) {
-        LayoutRect rect = FlipForWritingMode(r, block_for_flipping);
+        DeprecatedLayoutRect rect = FlipForWritingMode(r, block_for_flipping);
         result.Union(gfx::RectF(rect));
       },
       kClipToEllipsis);
@@ -1133,7 +1133,7 @@
   const unsigned start_pos = selection_status.start;
   const unsigned end_pos = selection_status.end;
   DCHECK_LE(start_pos, end_pos);
-  LayoutRect rect;
+  DeprecatedLayoutRect rect;
   return FlipForWritingMode(rect);
 }
 
diff --git a/third_party/blink/renderer/core/layout/layout_text_combine.cc b/third_party/blink/renderer/core/layout/layout_text_combine.cc
index f394736e..2c2564a 100644
--- a/third_party/blink/renderer/core/layout/layout_text_combine.cc
+++ b/third_party/blink/renderer/core/layout/layout_text_combine.cc
@@ -14,6 +14,7 @@
 #include "third_party/blink/renderer/core/layout/ng/inline/ng_inline_node_data.h"
 #include "third_party/blink/renderer/core/layout/ng/ng_ink_overflow.h"
 #include "third_party/blink/renderer/core/layout/ng/ng_physical_box_fragment.h"
+#include "third_party/blink/renderer/core/paint/line_relative_rect.h"
 #include "third_party/blink/renderer/core/paint/ng/ng_inline_paint_context.h"
 #include "third_party/blink/renderer/platform/fonts/font.h"
 #include "third_party/blink/renderer/platform/fonts/font_description.h"
@@ -207,20 +208,16 @@
   return scale_x_.has_value() || UsingSyntheticOblique();
 }
 
-PhysicalRect LayoutTextCombine::ComputeTextFrameRect(
+LineRelativeRect LayoutTextCombine::ComputeTextFrameRect(
     const PhysicalOffset paint_offset) const {
   const ComputedStyle& style = Parent()->StyleRef();
   DCHECK(style.GetFont().GetFontDescription().IsVerticalBaseline());
 
-  // Because we rotate the GraphicsContext to match the logical direction,
-  // transpose the |text_frame_rect| to match to it.
-  // See also |NGTextFragmentPainter::Paint()|
   const LayoutUnit one_em = style.ComputedFontSizeAsFixed();
   const FontHeight text_metrics = style.GetFontHeight();
   const LayoutUnit line_height = text_metrics.LineHeight();
-  return PhysicalRect(PhysicalOffset(LayoutUnit(paint_offset.left),
-                                     LayoutUnit(paint_offset.top)),
-                      PhysicalSize(one_em, line_height));
+  return {LineRelativeOffset::CreateFromBoxOrigin(paint_offset),
+          LogicalSize(one_em, line_height)};
 }
 
 PhysicalRect LayoutTextCombine::RecalcContentsInkOverflow(
@@ -228,8 +225,16 @@
   const ComputedStyle& style = Parent()->StyleRef();
   DCHECK(style.GetFont().GetFontDescription().IsVerticalBaseline());
 
-  // Note: |text_rect| and |ink_overflow| are in logical direction.
-  const PhysicalRect text_rect = ComputeTextFrameRect(PhysicalOffset());
+  const LineRelativeRect line_relative_text_rect =
+      ComputeTextFrameRect(PhysicalOffset());
+
+  // Note: |text_rect| and |ink_overflow| are both in logical direction.
+  // It is unusual for a PhysicalRect to be in a logical direction, typically
+  // a LineRelativeRect will be used instead, but the TextCombine case
+  // requires it.
+  const PhysicalRect text_rect{
+      PhysicalOffset(), PhysicalSize{line_relative_text_rect.size.inline_size,
+                                     line_relative_text_rect.size.block_size}};
   LogicalRect ink_overflow(text_rect.offset.left, text_rect.offset.top,
                            text_rect.size.width, text_rect.size.height);
 
diff --git a/third_party/blink/renderer/core/layout/layout_text_combine.h b/third_party/blink/renderer/core/layout/layout_text_combine.h
index 680dfd6..89cb1b4 100644
--- a/third_party/blink/renderer/core/layout/layout_text_combine.h
+++ b/third_party/blink/renderer/core/layout/layout_text_combine.h
@@ -8,6 +8,7 @@
 #include "third_party/abseil-cpp/absl/types/optional.h"
 #include "third_party/blink/renderer/core/core_export.h"
 #include "third_party/blink/renderer/core/layout/ng/layout_ng_block_flow.h"
+#include "third_party/blink/renderer/core/paint/line_relative_rect.h"
 
 namespace blink {
 
@@ -87,7 +88,8 @@
   bool NeedsAffineTransformInPaint() const;
 
   // Returns text frame rect, in logical direction, used with text painters.
-  PhysicalRect ComputeTextFrameRect(const PhysicalOffset paint_offset) const;
+  LineRelativeRect ComputeTextFrameRect(
+      const PhysicalOffset paint_offset) const;
 
   // Returns visual rect for painting emphasis mark and text decoration for
   // |NGBoxFragmentPainter|.
diff --git a/third_party/blink/renderer/core/layout/ng/ng_ink_overflow.cc b/third_party/blink/renderer/core/layout/ng/ng_ink_overflow.cc
index ec1c0d4..6878cfa 100644
--- a/third_party/blink/renderer/core/layout/ng/ng_ink_overflow.cc
+++ b/third_party/blink/renderer/core/layout/ng/ng_ink_overflow.cc
@@ -548,17 +548,6 @@
         style, scaled_font, container_offset, ink_overflow, inline_context);
   }
 
-  // Text decorations due to selection
-  if (UNLIKELY(cursor.Current().GetLayoutObject()->IsSelected())) {
-    const ComputedStyle* selection_style = style.HighlightData().Selection();
-    if (selection_style && selection_style->HasAppliedTextDecorations()) {
-      LogicalRect selection_bound = ComputeAppliedDecorationOverflow(
-          *selection_style, scaled_font, container_offset, ink_overflow,
-          inline_context);
-      accumulated_bound.Unite(selection_bound);
-    }
-  }
-
   bool do_highlights =
       RuntimeEnabledFeatures::HighlightOverlayPaintingEnabled();
   bool do_spelling_grammar =
@@ -635,7 +624,8 @@
   // so use it as a proxy for determining minimum thickness.
   const MinimumThickness1 kMinimumThicknessIsOne(!decoration_override);
   TextDecorationInfo decoration_info(
-      offset_in_container, ink_overflow.size.inline_size, style, inline_context,
+      LineRelativeOffset::CreateFromBoxOrigin(offset_in_container),
+      ink_overflow.size.inline_size, style, inline_context,
       /* selection_text_decoration */ absl::nullopt, decoration_override,
       &scaled_font, kMinimumThicknessIsOne);
   NGTextDecorationOffset decoration_offset(style);
diff --git a/third_party/blink/renderer/core/layout/shapes/shape.cc b/third_party/blink/renderer/core/layout/shapes/shape.cc
index 57640e0..d5d99b39 100644
--- a/third_party/blink/renderer/core/layout/shapes/shape.cc
+++ b/third_party/blink/renderer/core/layout/shapes/shape.cc
@@ -313,8 +313,8 @@
 std::unique_ptr<Shape> Shape::CreateRasterShape(
     Image* image,
     float threshold,
-    const LayoutRect& image_r,
-    const LayoutRect& margin_r,
+    const DeprecatedLayoutRect& image_r,
+    const DeprecatedLayoutRect& margin_r,
     WritingMode writing_mode,
     float margin,
     RespectImageOrientationEnum respect_orientation) {
diff --git a/third_party/blink/renderer/core/layout/shapes/shape.h b/third_party/blink/renderer/core/layout/shapes/shape.h
index 33712b4..f7db24a9 100644
--- a/third_party/blink/renderer/core/layout/shapes/shape.h
+++ b/third_party/blink/renderer/core/layout/shapes/shape.h
@@ -82,13 +82,14 @@
                                             const LogicalSize& logical_box_size,
                                             WritingMode,
                                             float margin);
-  static std::unique_ptr<Shape> CreateRasterShape(Image*,
-                                                  float threshold,
-                                                  const LayoutRect& image_rect,
-                                                  const LayoutRect& margin_rect,
-                                                  WritingMode,
-                                                  float margin,
-                                                  RespectImageOrientationEnum);
+  static std::unique_ptr<Shape> CreateRasterShape(
+      Image*,
+      float threshold,
+      const DeprecatedLayoutRect& image_rect,
+      const DeprecatedLayoutRect& margin_rect,
+      WritingMode,
+      float margin,
+      RespectImageOrientationEnum);
   static std::unique_ptr<Shape> CreateLayoutBoxShape(const FloatRoundedRect&,
                                                      WritingMode,
                                                      float margin);
diff --git a/third_party/blink/renderer/core/layout/shapes/shape_outside_info.cc b/third_party/blink/renderer/core/layout/shapes/shape_outside_info.cc
index 97e8988c..f61bf35 100644
--- a/third_party/blink/renderer/core/layout/shapes/shape_outside_info.cc
+++ b/third_party/blink/renderer/core/layout/shapes/shape_outside_info.cc
@@ -183,11 +183,12 @@
 
   const LogicalRect& margin_rect =
       GetShapeImageMarginRect(*layout_box_, reference_box_logical_size_);
-  const LayoutRect& image_rect = (layout_box_->IsLayoutImage())
-                                     ? To<LayoutImage>(layout_box_.Get())
-                                           ->ReplacedContentRect()
-                                           .ToLayoutRect()
-                                     : LayoutRect(LayoutPoint(), image_size);
+  const DeprecatedLayoutRect& image_rect =
+      (layout_box_->IsLayoutImage())
+          ? To<LayoutImage>(layout_box_.Get())
+                ->ReplacedContentRect()
+                .ToLayoutRect()
+          : DeprecatedLayoutRect(LayoutPoint(), image_size);
 
   scoped_refptr<Image> image =
       style_image->GetImage(*layout_box_, layout_box_->GetDocument(),
diff --git a/third_party/blink/renderer/core/paint/build.gni b/third_party/blink/renderer/core/paint/build.gni
index 89a33fe..0b022cc 100644
--- a/third_party/blink/renderer/core/paint/build.gni
+++ b/third_party/blink/renderer/core/paint/build.gni
@@ -56,6 +56,7 @@
   "fragment_data_iterator.h",
   "frame_painter.cc",
   "frame_painter.h",
+  "line_relative_rect.h",
   "hit_testing_transform_state.cc",
   "hit_testing_transform_state.h",
   "html_canvas_painter.cc",
@@ -232,6 +233,7 @@
   "fragment_data_test.cc",
   "html_canvas_painter_test.cc",
   "image_painter_test.cc",
+  "line_relative_rect_test.cc",
   "link_highlight_impl_test.cc",
   "ng/ng_box_fragment_painter_test.cc",
   "ng/ng_highlight_overlay_test.cc",
diff --git a/third_party/blink/renderer/core/paint/document_marker_painter.cc b/third_party/blink/renderer/core/paint/document_marker_painter.cc
index 2e1f7e2..fe95a51 100644
--- a/third_party/blink/renderer/core/paint/document_marker_painter.cc
+++ b/third_party/blink/renderer/core/paint/document_marker_painter.cc
@@ -11,6 +11,7 @@
 #include "third_party/blink/renderer/core/highlight/highlight_style_utils.h"
 #include "third_party/blink/renderer/core/layout/geometry/physical_rect.h"
 #include "third_party/blink/renderer/core/layout/layout_theme.h"
+#include "third_party/blink/renderer/core/paint/line_relative_rect.h"
 #include "third_party/blink/renderer/core/paint/paint_auto_dark_mode.h"
 #include "third_party/blink/renderer/core/paint/paint_info.h"
 #include "third_party/blink/renderer/core/paint/text_paint_style.h"
@@ -140,12 +141,12 @@
     const StyleableMarker& marker,
     const ComputedStyle& style,
     const Document& document,
-    const gfx::RectF& marker_rect,
+    const LineRelativeRect& marker_rect,
     LayoutUnit logical_height,
     bool in_dark_mode) {
   // start of line to draw, relative to box_origin.X()
-  LayoutUnit start = LayoutUnit(marker_rect.x());
-  LayoutUnit width = LayoutUnit(marker_rect.width());
+  LayoutUnit start = LayoutUnit(marker_rect.LineLeft());
+  LayoutUnit width = LayoutUnit(marker_rect.InlineSize());
 
   // We need to have some space between underlines of subsequent clauses,
   // because some input methods do not use different underline styles for those.
@@ -224,7 +225,7 @@
     const PhysicalOffset& box_origin,
     const ComputedStyle& style,
     DocumentMarker::MarkerType marker_type,
-    const PhysicalRect& local_rect,
+    const LineRelativeRect& local_rect,
     absl::optional<Color> custom_marker_color) {
   // IMPORTANT: The misspelling underline is not considered when calculating the
   // text bounds, so we have to make sure to fit within those bounds.  This
@@ -240,13 +241,13 @@
   const SimpleFontData* font_data = style.GetFont().PrimaryFont();
   DCHECK(font_data);
   int baseline = font_data->GetFontMetrics().Ascent();
-  int available_height = (local_rect.Height() - baseline).ToInt();
+  int available_height = (local_rect.BlockSize() - baseline).ToInt();
   int underline_offset;
   if (available_height <= line_thickness + 2 * zoom) {
     // Place the underline at the very bottom of the text in small/medium fonts.
     // The underline will overlap with the bottom of the text if
     // available_height is smaller than line_thickness.
-    underline_offset = (local_rect.Height() - line_thickness).ToInt();
+    underline_offset = (local_rect.BlockSize() - line_thickness).ToInt();
   } else {
     // In larger fonts, though, place the underline up near the baseline to
     // prevent a big gap.
@@ -267,10 +268,11 @@
                            ? spelling_marker
                            : grammar_marker;
 
-  DrawDocumentMarker(paint_info.context,
-                     gfx::PointF((box_origin.left + local_rect.X()).ToFloat(),
-                                 (box_origin.top + underline_offset).ToFloat()),
-                     local_rect.Width().ToFloat(), zoom, marker);
+  DrawDocumentMarker(
+      paint_info.context,
+      gfx::PointF((box_origin.left + local_rect.LineLeft()).ToFloat(),
+                  (box_origin.top + underline_offset).ToFloat()),
+      local_rect.InlineSize().ToFloat(), zoom, marker);
 }
 
 TextPaintStyle DocumentMarkerPainter::ComputeTextPaintStyleFrom(
diff --git a/third_party/blink/renderer/core/paint/document_marker_painter.h b/third_party/blink/renderer/core/paint/document_marker_painter.h
index 9586c7f..516e105 100644
--- a/third_party/blink/renderer/core/paint/document_marker_painter.h
+++ b/third_party/blink/renderer/core/paint/document_marker_painter.h
@@ -9,10 +9,6 @@
 #include "third_party/blink/renderer/platform/graphics/color.h"
 #include "third_party/blink/renderer/platform/wtf/allocator/allocator.h"
 
-namespace gfx {
-class RectF;
-}
-
 namespace blink {
 
 class ComputedStyle;
@@ -21,9 +17,9 @@
 class LayoutUnit;
 class Node;
 class StyleableMarker;
+struct LineRelativeRect;
 struct PaintInfo;
 struct PhysicalOffset;
-struct PhysicalRect;
 struct TextPaintStyle;
 
 // Document marker painter for both LayoutNG and legacy layout.
@@ -38,7 +34,7 @@
                                             const StyleableMarker& marker,
                                             const ComputedStyle& style,
                                             const Document& document,
-                                            const gfx::RectF& marker_rect,
+                                            const LineRelativeRect& marker_rect,
                                             LayoutUnit logical_height,
                                             bool in_dark_mode);
   static void PaintDocumentMarker(
@@ -46,7 +42,7 @@
       const PhysicalOffset& box_origin,
       const ComputedStyle& style,
       DocumentMarker::MarkerType marker_type,
-      const PhysicalRect& local_rect,
+      const LineRelativeRect& local_rect,
       absl::optional<Color> custom_marker_color = absl::nullopt);
   static TextPaintStyle ComputeTextPaintStyleFrom(const Document& document,
                                                   Node* node,
diff --git a/third_party/blink/renderer/core/paint/line_relative_rect.h b/third_party/blink/renderer/core/paint/line_relative_rect.h
new file mode 100644
index 0000000..02fac7c
--- /dev/null
+++ b/third_party/blink/renderer/core/paint/line_relative_rect.h
@@ -0,0 +1,240 @@
+// 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_LINE_RELATIVE_RECT_H_
+#define THIRD_PARTY_BLINK_RENDERER_CORE_PAINT_LINE_RELATIVE_RECT_H_
+
+#include "third_party/abseil-cpp/absl/types/optional.h"
+#include "third_party/blink/renderer/core/core_export.h"
+#include "third_party/blink/renderer/core/layout/geometry/logical_size.h"
+#include "third_party/blink/renderer/core/layout/geometry/physical_rect.h"
+#include "third_party/blink/renderer/core/layout/geometry/physical_size.h"
+#include "third_party/blink/renderer/platform/geometry/layout_unit.h"
+#include "third_party/blink/renderer/platform/transforms/affine_transform.h"
+#include "ui/gfx/geometry/rect_f.h"
+
+namespace blink {
+
+// Type-safe geometry for line-relative coordinate spaces.
+//
+// When painting text fragments in a vertical writing mode (where ‘writing-mode’
+// is vertical or sideways), we rotate the canvas into a line-relative
+// coordinate space, where +x is line-right and +y is line-under.
+//
+// Paint ops done while rotated (like text and text decorations) need
+// coordinates in this rotated space, but ops done outside of these rotations
+// (like selection backgrounds) need coordinates in the original physical space.
+//
+// Note that the bi-orientational transform for upright typesetting (see
+// ‘text-orientation’) is handled by the lower-level text painting code with a
+// nested rotation (CanvasRotationInVertical), which can be ignored at the
+// painter level.
+
+// 2D point or vector in line-relative space (physical space rotated for
+// ‘writing-mode’), like gfx::PointF or gfx::Vector2dF but in fixed-point
+// coordinates (LayoutUnit).
+struct CORE_EXPORT LineRelativeOffset {
+  LayoutUnit line_left;
+  LayoutUnit line_over;
+
+  LineRelativeOffset(LayoutUnit line_left, LayoutUnit line_over)
+      : line_left(line_left), line_over(line_over) {}
+
+  // Map a physical offset of a line box to line-relative space, by reusing the
+  // offset coordinates (physical top-left). Line-relative space is defined such
+  // that the origin of the line box is the same in both the line relative
+  // coordinate system and the physical coordinate system, regardless of the
+  // writing flow.
+  static LineRelativeOffset CreateFromBoxOrigin(const PhysicalOffset& origin) {
+    return {origin.left, origin.top};
+  }
+
+  constexpr explicit operator gfx::PointF() const {
+    return {line_left, line_over};
+  }
+  LineRelativeOffset operator+(const LineRelativeOffset& other) const {
+    return {line_left + other.line_left, line_over + other.line_over};
+  }
+};
+
+// TODO(crbug.com/962299): These functions should upgraded to force correct
+// pixel snapping in a type-safe way.
+inline gfx::Point ToRoundedPoint(const LineRelativeOffset& o) {
+  return {o.line_left.Round(), o.line_over.Round()};
+}
+
+// 2D rect in line-relative space (physical space rotated for ‘writing-mode’),
+// like gfx::RectF but in fixed-point coordinates (LayoutUnit).
+struct CORE_EXPORT LineRelativeRect {
+  LineRelativeOffset offset;
+  LogicalSize size;
+
+  static LineRelativeRect EnclosingRect(const gfx::RectF& rect) {
+    LineRelativeOffset offset{LayoutUnit::FromFloatFloor(rect.x()),
+                              LayoutUnit::FromFloatFloor(rect.y())};
+    LogicalSize size{
+        LayoutUnit::FromFloatCeil(rect.right()) - offset.line_left,
+        LayoutUnit::FromFloatCeil(rect.bottom()) - offset.line_over};
+    return {offset, size};
+  }
+
+  // Map a physical rect line box to line-relative space, by reusing the offset
+  // coordinates and (if not horizontal) swapping width and height.
+  //
+  // To explain why this shortcut is correct (for the line box only: during
+  // paint ops, the line box is specifically rotated such that the top left
+  // corner of the box before and after rotation has the same x, y coordinate):
+  // When the direction is clockwise (kVertical* and kSidewaysRl), the
+  // line-left-under (line-right-over) corner moves to the top-left corner [A],
+  // while the line-left-over corner moves to the top-right (bottom-left) corner
+  // [B].
+  //
+  // In both cases, the rotation is around some arbitrary third point [C], but
+  // the coordinates of [B] in rotated space are the same as the coordinates of
+  // [A] in physical space, which means that the line box can be mapped between
+  // these spaces by swapping width and height only.
+  //
+  //      clockwise            counter-clockwise
+  //
+  //  [A]   ooooo    [B]       [A]  °o   o°
+  //       O°   °O                    °O°
+  //    oooOOoooOO               °°°°°°°°°°
+  //          [C]
+  //       o°°°°°°                   o   o
+  //       °o                       O     O
+  //       °°°°°°°                  °OoooO°
+  //       o     o                        O
+  //       OoooooO  o            °  O°°°°°O       [C]
+  //       O                        °     °
+  //                                ooooooo
+  //       oO°°°Oo                       °o
+  //       O     O                  oooooo°
+  //        °   °
+  //       oooooooooo               OO°°°OO°°°
+  //         oOo                    Oo   oO
+  //       o°   °o             [B]   °°°°°
+  //
+  static LineRelativeRect CreateFromLineBox(const PhysicalRect& rect,
+                                            bool is_horizontal) {
+    return {LineRelativeOffset::CreateFromBoxOrigin(rect.offset),
+            LogicalSize{is_horizontal ? rect.size.width : rect.size.height,
+                        is_horizontal ? rect.size.height : rect.size.width}};
+  }
+
+  // Map a physical rect that may be line box or contained text fragment
+  // to line-relative space, by mapping it through the inverse of the given
+  // rotation matrix (see ComputeRelativeToPhysicalTransform).
+  static LineRelativeRect Create(
+      const PhysicalRect& rect,
+      const absl::optional<AffineTransform>& rotation) {
+    if (!rotation || rotation == AffineTransform()) {
+      return {{rect.offset.left, rect.offset.top},
+              {rect.size.width, rect.size.height}};
+    }
+    return EnclosingRect(rotation->Inverse().MapRect(gfx::RectF{rect}));
+  }
+
+  constexpr explicit operator gfx::RectF() const {
+    return {offset.line_left, offset.line_over, size.inline_size,
+            size.block_size};
+  }
+  LineRelativeRect operator+(const LineRelativeOffset& other) const {
+    return {offset + other, size};
+  }
+
+  constexpr LayoutUnit LineLeft() const { return offset.line_left; }
+  constexpr LayoutUnit LineOver() const { return offset.line_over; }
+  constexpr LayoutUnit InlineSize() const { return size.inline_size; }
+  constexpr LayoutUnit BlockSize() const { return size.block_size; }
+
+  void Move(const LineRelativeOffset& other) {
+    offset.line_left += other.line_left;
+    offset.line_over += other.line_over;
+  }
+
+  // TODO(crbug.com/962299): These functions should upgraded to force correct
+  // pixel snapping in a type-safe way.
+  gfx::Point PixelSnappedOffset() const { return ToRoundedPoint(offset); }
+  int PixelSnappedInlineSize() const {
+    return SnapSizeToPixel(size.inline_size, offset.line_left);
+  }
+  int PixelSnappedBlockSize() const {
+    return SnapSizeToPixel(size.block_size, offset.line_over);
+  }
+  gfx::Size PixelSnappedSize() const {
+    return {PixelSnappedInlineSize(), PixelSnappedBlockSize()};
+  }
+
+  // Returns the transformation that would rotate the canvas in the appropriate
+  // direction for a vertical writing mode, while keeping the physical top-left
+  // corner of the given line box in the same place (changing the coordinate
+  // while keeping the box in the same place on the page).
+  AffineTransform ComputeRelativeToPhysicalTransform(
+      WritingMode writing_mode) const {
+    if (writing_mode == WritingMode::kHorizontalTb) {
+      return AffineTransform();
+    }
+
+    // Constructing the matrix: consider the kVertical* case.
+    //
+    //      kVerticalRl
+    //      kVerticalLr
+    //      kSidewaysRl           kSidewaysLr
+    //
+    //  [A]   ooooo              [A]  °o   o°
+    //       O°   °O                    °O°
+    //    oooOOoooOO               °°°°°°°°°°
+    //
+    //       o°°°°°°                   o   o
+    //       °o                       O     O
+    //       °°°°°°°                  °OoooO°
+    //       o     o                        O
+    //       OoooooO  o            °  O°°°°°O
+    //       O                        °     °
+    //                                ooooooo
+    //       oO°°°Oo                       °o
+    //       O     O                  oooooo°
+    //        °   °
+    //       oooooooooo               OO°°°OO°°°
+    //         oOo                    Oo   oO
+    //       o°   °o                   °°°°°
+    //
+    // For kVerticalRl, the line relative coordinate system has the inline
+    // direction running down the page and the block direction running left on
+    // the page. The physical space has x running right on the page and y
+    // running down. To align the inline direction with x and the block
+    // direction with y, we need the rotation of:
+    //   0 -1
+    //   1  0
+    // rotates the inline directions to physical directions.
+    // The point A is at [x,y] in the physical coordinate system, and
+    // [x, y + height] in the line relative space. Note that height is
+    // the block direction in line relative space, and the given rect is
+    // already line relative.
+    // When [x, y + height] is rotated by the matrix above, a translation of
+    // [x + y + height, y - x] is required to place it at [x,y].
+    //
+    // For the sideways cases, the rotation is
+    //   0 1
+    //  -1 0
+    // A is at [x,y] in physical and [x + width, y] in the line relative space.
+
+    return writing_mode != WritingMode::kSidewaysLr
+               ? AffineTransform(0, 1, -1, 0,
+                                 LineLeft() + LineOver() + BlockSize(),
+                                 LineOver() - LineLeft())
+               : AffineTransform(0, -1, 1, 0, LineLeft() - LineOver(),
+                                 LineLeft() + LineOver() + InlineSize());
+  }
+};
+
+// TODO(crbug.com/962299): These functions should upgraded to force correct
+// pixel snapping in a type-safe way.
+inline gfx::Rect ToPixelSnappedRect(const LineRelativeRect& r) {
+  return {r.PixelSnappedOffset(), r.PixelSnappedSize()};
+}
+
+}  // namespace blink
+
+#endif  // THIRD_PARTY_BLINK_RENDERER_CORE_PAINT_LINE_RELATIVE_RECT_H_
diff --git a/third_party/blink/renderer/core/paint/line_relative_rect_test.cc b/third_party/blink/renderer/core/paint/line_relative_rect_test.cc
new file mode 100644
index 0000000..991069b
--- /dev/null
+++ b/third_party/blink/renderer/core/paint/line_relative_rect_test.cc
@@ -0,0 +1,193 @@
+// 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/line_relative_rect.h"
+#include "third_party/blink/renderer/core/layout/geometry/physical_rect.h"
+
+#include "testing/gtest/include/gtest/gtest.h"
+#include "third_party/blink/renderer/core/testing/core_unit_test_helper.h"
+
+namespace blink {
+
+class LineRelativeRectTest : public testing::Test {};
+
+TEST(LineRelativeRectTest, EnclosingRect) {
+  gfx::RectF r(1000, 10000, 10, 100);
+  LineRelativeRect lor = LineRelativeRect::EnclosingRect(r);
+  EXPECT_EQ(lor.offset.line_left, 1000) << "offset X";
+  EXPECT_EQ(lor.offset.line_over, 10000) << "offset Y";
+  EXPECT_EQ(lor.size.inline_size, 10) << "inline size";
+  EXPECT_EQ(lor.size.block_size, 100) << "block size";
+
+  // All values are clamped to 1/64, enclosing the rect.
+  gfx::RectF r2(1000.005625, 10000.005625, 10.005625, 100.005625);
+  LineRelativeRect lor2 = LineRelativeRect::EnclosingRect(r2);
+  EXPECT_EQ(lor2.offset.line_left, 1000) << "offset X clamped to 0";
+  EXPECT_EQ(lor2.offset.line_over, 10000) << "offset Y clamped to 0";
+  EXPECT_EQ(lor2.size.inline_size, LayoutUnit(10.015625))
+      << "inline size clamped to 20 and 1/64";
+  EXPECT_EQ(lor2.size.block_size, LayoutUnit(100.015625))
+      << "block size clamped to 30 and 1/64";
+}
+
+TEST(LineRelativeRectTest, CreateFromLineBox) {
+  PhysicalRect r(1000, 10000, 10, 100);
+  LineRelativeRect lor = LineRelativeRect::CreateFromLineBox(r, true);
+  EXPECT_EQ(lor.offset.line_left, 1000) << "offset X, no rotation";
+  EXPECT_EQ(lor.offset.line_over, 10000) << "offset Y, no rotation";
+  EXPECT_EQ(lor.size.inline_size, 10) << "inline size, no rotation";
+  EXPECT_EQ(lor.size.block_size, 100) << "block size, no rotation";
+
+  LineRelativeRect lor_veritcal = LineRelativeRect::CreateFromLineBox(r, false);
+  EXPECT_EQ(lor_veritcal.offset.line_left, 1000) << "offset X, with rotation";
+  EXPECT_EQ(lor_veritcal.offset.line_over, 10000) << "offset Y, with rotation";
+  EXPECT_EQ(lor_veritcal.size.inline_size, 100) << "inline size, with rotation";
+  EXPECT_EQ(lor_veritcal.size.block_size, 10) << "block size, with rotation";
+}
+
+TEST(LineRelativeRectTest, ComputeRelativeToPhysicalTransformAtOrigin) {
+  LineRelativeRect r_origin = {{LayoutUnit(), LayoutUnit()},
+                               {LayoutUnit(20), LayoutUnit(30)}};
+
+  WritingMode writing_mode = WritingMode::kHorizontalTb;
+  absl::optional<AffineTransform> rotation =
+      r_origin.ComputeRelativeToPhysicalTransform(writing_mode);
+  EXPECT_EQ(rotation, AffineTransform());
+
+  writing_mode = WritingMode::kVerticalRl;
+  rotation = r_origin.ComputeRelativeToPhysicalTransform(writing_mode);
+  EXPECT_EQ(rotation, AffineTransform(0, 1, -1, 0, 30, 0)) << "kVerticalRl";
+
+  writing_mode = WritingMode::kSidewaysLr;
+  rotation = r_origin.ComputeRelativeToPhysicalTransform(writing_mode);
+  EXPECT_EQ(rotation, AffineTransform(0, -1, 1, 0, 0, 20)) << "kSidewaysLr";
+}
+
+TEST(LineRelativeRectTest, ComputeRelativeToPhysicalTransformNotAtOrigin) {
+  LineRelativeRect r_origin = {{LayoutUnit(1000), LayoutUnit(10000)},
+                               {LayoutUnit(10), LayoutUnit(100)}};
+
+  WritingMode writing_mode = WritingMode::kHorizontalTb;
+  absl::optional<AffineTransform> rotation =
+      r_origin.ComputeRelativeToPhysicalTransform(writing_mode);
+  EXPECT_EQ(rotation, AffineTransform());
+
+  writing_mode = WritingMode::kVerticalRl;
+  rotation = r_origin.ComputeRelativeToPhysicalTransform(writing_mode);
+  EXPECT_EQ(rotation, AffineTransform(0, 1, -1, 0, 11100, 9000))
+      << "kVerticalRl";
+
+  writing_mode = WritingMode::kSidewaysLr;
+  rotation = r_origin.ComputeRelativeToPhysicalTransform(writing_mode);
+  EXPECT_EQ(rotation, AffineTransform(0, -1, 1, 0, -9000, 11010))
+      << "kSidewaysLr";
+}
+
+TEST(LineRelativeRectTest, Create_kHorizontalTB) {
+  PhysicalRect r(1000, 10000, 10, 100);
+
+  const WritingMode writing_mode = WritingMode::kHorizontalTb;
+  const bool is_horizontal = IsHorizontalWritingMode(writing_mode);
+
+  const LineRelativeRect rotated_box =
+      LineRelativeRect::CreateFromLineBox(r, is_horizontal);
+  absl::optional<AffineTransform> rotation =
+      rotated_box.ComputeRelativeToPhysicalTransform(writing_mode);
+
+  EXPECT_EQ(rotation, AffineTransform());
+
+  // First half of original box r
+  PhysicalRect highlight(1000, 10000, 5, 100);
+  LineRelativeRect rotated = LineRelativeRect::Create(highlight, rotation);
+  EXPECT_EQ(rotated.offset.line_left, 1000) << "first half x, no rotation";
+  EXPECT_EQ(rotated.offset.line_over, 10000) << "first half y, no rotation";
+  EXPECT_EQ(rotated.size.inline_size, 5)
+      << "first half inline_size, no rotation";
+  EXPECT_EQ(rotated.size.block_size, 100)
+      << "first half block_size, no rotation";
+
+  // Second half of original box r
+  PhysicalRect highlight2(1005, 10000, 5, 100);
+  LineRelativeRect rotated2 = LineRelativeRect::Create(highlight2, rotation);
+  EXPECT_EQ(rotated2.offset.line_left, 1005) << "second half x, no rotation";
+  EXPECT_EQ(rotated2.offset.line_over, 10000) << "second half y, no rotation";
+  EXPECT_EQ(rotated2.size.inline_size, 5)
+      << "second half inline_size, no rotation";
+  EXPECT_EQ(rotated2.size.block_size, 100)
+      << "second half block_size, no rotation";
+}
+
+TEST(LineRelativeRectTest, Create_kSidewaysLr) {
+  PhysicalRect r(1000, 10000, 10, 100);
+
+  const WritingMode writing_mode = WritingMode::kSidewaysLr;
+  const bool is_horizontal = IsHorizontalWritingMode(writing_mode);
+  EXPECT_FALSE(is_horizontal);
+  const LineRelativeRect rotated_box =
+      LineRelativeRect::CreateFromLineBox(r, is_horizontal);
+  absl::optional<AffineTransform> rotation =
+      rotated_box.ComputeRelativeToPhysicalTransform(writing_mode);
+
+  // AffineTransform ("translation(-9000,11100), scale(1,1), angle(-90deg),
+  // skewxy(0)")
+  EXPECT_EQ(rotation, AffineTransform(0, -1, 1, 0, -9000, 11100));
+
+  // Top half of original box r
+  PhysicalRect highlight(1000, 10000, 10, 50);
+  LineRelativeRect rotated = LineRelativeRect::Create(highlight, rotation);
+  EXPECT_EQ(rotated.offset.line_left, 1050) << "Top half, x";
+  EXPECT_EQ(rotated.offset.line_over, 10000) << "Top half, y";
+  EXPECT_EQ(rotated.size.inline_size, 50) << "Top half, inline_size";
+  EXPECT_EQ(rotated.size.block_size, 10) << "Top half, block_size";
+
+  // Bottom half of original box r
+  PhysicalRect highlight2(1000, 10050, 10, 50);
+  LineRelativeRect rotated2 = LineRelativeRect::Create(highlight2, rotation);
+  EXPECT_EQ(rotated2.offset.line_left, 1000) << "Bottom half, x";
+  EXPECT_EQ(rotated2.offset.line_over, 10000) << "Bottom half, y";
+  EXPECT_EQ(rotated2.size.inline_size, 50) << "Bottom half, inline_size";
+  EXPECT_EQ(rotated2.size.block_size, 10) << "Bottom half, block_size";
+
+  // The whole thing.
+  PhysicalRect highlight3(1000, 10000, 10, 100);
+  LineRelativeRect rotated3 = LineRelativeRect::Create(highlight3, rotation);
+  EXPECT_EQ(rotated3.offset.line_left, 1000) << "whole box, x";
+  EXPECT_EQ(rotated3.offset.line_over, 10000) << "whole box, y";
+  EXPECT_EQ(rotated3.size.inline_size, 100) << "whole box, inline_size";
+  EXPECT_EQ(rotated3.size.block_size, 10) << "whole box, block_size";
+}
+
+TEST(LineRelativeRectTest, Create_kVerticalRl) {
+  PhysicalRect r(1000, 10000, 10, 100);
+
+  const WritingMode writing_mode = WritingMode::kVerticalRl;
+  const bool is_horizontal = IsHorizontalWritingMode(writing_mode);
+  EXPECT_FALSE(is_horizontal);
+  const LineRelativeRect rotated_box =
+      LineRelativeRect::CreateFromLineBox(r, is_horizontal);
+  absl::optional<AffineTransform> rotation =
+      rotated_box.ComputeRelativeToPhysicalTransform(writing_mode);
+
+  // AffineTransform ("translation(11010,9000), scale(1,1), angle(90deg),
+  // skewxy(0)")
+  EXPECT_EQ(rotation, AffineTransform(0, 1, -1, 0, 11010, 9000));
+
+  // Top half of original box r
+  PhysicalRect highlight(1000, 10000, 10, 50);
+  LineRelativeRect rotated = LineRelativeRect::Create(highlight, rotation);
+  EXPECT_EQ(rotated.offset.line_left, 1000) << "top half, x";
+  EXPECT_EQ(rotated.offset.line_over, 10000) << "top half, y";
+  EXPECT_EQ(rotated.size.inline_size, 50) << "top half, inline_size";
+  EXPECT_EQ(rotated.size.block_size, 10) << "top half, block_size";
+
+  // Bottom half of original box r
+  PhysicalRect highlight2(1000, 10050, 10, 50);
+  LineRelativeRect rotated2 = LineRelativeRect::Create(highlight2, rotation);
+  EXPECT_EQ(rotated2.offset.line_left, 1050) << "bottom half, x";
+  EXPECT_EQ(rotated2.offset.line_over, 10000) << "bottom half, y";
+  EXPECT_EQ(rotated2.size.inline_size, 50) << "bottom half, inline_size";
+  EXPECT_EQ(rotated2.size.block_size, 10) << "bottom half, block_size";
+}
+
+}  // namespace blink
diff --git a/third_party/blink/renderer/core/paint/ng/ng_highlight_painter.cc b/third_party/blink/renderer/core/paint/ng/ng_highlight_painter.cc
index 4f7fc024..0ed8ded 100644
--- a/third_party/blink/renderer/core/paint/ng/ng_highlight_painter.cc
+++ b/third_party/blink/renderer/core/paint/ng/ng_highlight_painter.cc
@@ -20,6 +20,7 @@
 #include "third_party/blink/renderer/core/layout/ng/inline/ng_inline_cursor.h"
 #include "third_party/blink/renderer/core/layout/svg/layout_svg_inline_text.h"
 #include "third_party/blink/renderer/core/paint/document_marker_painter.h"
+#include "third_party/blink/renderer/core/paint/line_relative_rect.h"
 #include "third_party/blink/renderer/core/paint/ng/ng_highlight_overlay.h"
 #include "third_party/blink/renderer/core/paint/ng/ng_text_decoration_painter.h"
 #include "third_party/blink/renderer/core/paint/ng/ng_text_painter.h"
@@ -156,16 +157,17 @@
   const unsigned text_length_;
 };
 
-PhysicalRect MarkerRectForForeground(const NGFragmentItem& text_fragment,
-                                     StringView text,
-                                     unsigned start_offset,
-                                     unsigned end_offset) {
+LineRelativeRect LineRelativeLocalRect(const NGFragmentItem& text_fragment,
+                                       StringView text,
+                                       unsigned start_offset,
+                                       unsigned end_offset) {
   LayoutUnit start_position, end_position;
   std::tie(start_position, end_position) =
       text_fragment.LineLeftAndRightForOffsets(text, start_offset, end_offset);
 
   const LayoutUnit height = text_fragment.InkOverflow().Height();
-  return {start_position, LayoutUnit(), end_position - start_position, height};
+  return {{start_position, LayoutUnit()},
+          {end_position - start_position, height}};
 }
 
 void PaintRect(GraphicsContext& context,
@@ -361,18 +363,6 @@
   return false;
 }
 
-HighlightLayerType LayerFor(DocumentMarker::MarkerType type) {
-  switch (type) {
-    case DocumentMarker::kSpelling:
-      return HighlightLayerType::kSpelling;
-    case DocumentMarker::kGrammar:
-      return HighlightLayerType::kGrammar;
-    default:
-      NOTREACHED();
-      return {};
-  }
-}
-
 }  // namespace
 
 NGHighlightPainter::SelectionPaintState::SelectionPaintState(
@@ -417,23 +407,20 @@
     PhysicalRect physical =
         containing_block_.CurrentLocalSelectionRectForText(selection_status_);
     physical.offset += box_offset_;
-    PhysicalRect rotated = writing_mode_rotation_
-                               ? PhysicalRect::EnclosingRect(
-                                     writing_mode_rotation_->Inverse().MapRect(
-                                         gfx::RectF(physical)))
-                               : physical;
+    LineRelativeRect rotated =
+        LineRelativeRect::Create(physical, writing_mode_rotation_);
     selection_rect_.emplace(SelectionRect{physical, rotated});
   }
 }
 
 const PhysicalRect&
-NGHighlightPainter::SelectionPaintState::RectInPhysicalSpace() {
+NGHighlightPainter::SelectionPaintState::PhysicalSelectionRect() {
   ComputeSelectionRectIfNeeded();
   return selection_rect_->physical;
 }
 
-const PhysicalRect&
-NGHighlightPainter::SelectionPaintState::RectInWritingModeSpace() {
+const LineRelativeRect&
+NGHighlightPainter::SelectionPaintState::LineRelativeSelectionRect() {
   ComputeSelectionRectIfNeeded();
   return selection_rect_->rotated;
 }
@@ -453,7 +440,7 @@
       PaintAutoDarkMode(style, DarkModeFilter::ElementRole::kSelection));
 
   if (!rotation) {
-    PaintRect(context, RectInPhysicalSpace(), color, auto_dark_mode);
+    PaintRect(context, PhysicalSelectionRect(), color, auto_dark_mode);
     return;
   }
 
@@ -463,7 +450,7 @@
   // fix this, we undo the transformation temporarily, then use the original
   // physical coordinates (before MapSelectionRectIntoRotatedSpace).
   context.ConcatCTM(rotation->Inverse());
-  PaintRect(context, RectInPhysicalSpace(), color, auto_dark_mode);
+  PaintRect(context, PhysicalSelectionRect(), color, auto_dark_mode);
   context.ConcatCTM(*rotation);
 }
 
@@ -477,7 +464,7 @@
     const AutoDarkMode& auto_dark_mode) {
   text_painter.PaintSelectedText(fragment_paint_info, selection_status_.start,
                                  selection_status_.end, length, text_style,
-                                 selection_style_, RectInWritingModeSpace(),
+                                 selection_style_, LineRelativeSelectionRect(),
                                  node_id, auto_dark_mode);
 }
 
@@ -698,8 +685,8 @@
           DocumentMarkerPainter::PaintStyleableMarkerUnderline(
               paint_info_.context, box_origin_, styleable_marker,
               originating_style_, node_->GetDocument(),
-              gfx::RectF(MarkerRectForForeground(
-                  fragment_item_, text, paint_start_offset, paint_end_offset)),
+              LineRelativeLocalRect(fragment_item_, text, paint_start_offset,
+                                    paint_end_offset),
               LayoutUnit(font_data->GetFontMetrics().Height()),
               fragment_item_.GetNode()->GetDocument().InDarkMode());
         }
@@ -842,8 +829,8 @@
       !RuntimeEnabledFeatures::CSSPaintingForSpellingGrammarErrorsEnabled()) {
     return DocumentMarkerPainter::PaintDocumentMarker(
         paint_info_, box_origin_, originating_style_, type,
-        MarkerRectForForeground(fragment_item_, text, paint_start_offset,
-                                paint_end_offset),
+        LineRelativeLocalRect(fragment_item_, text, paint_start_offset,
+                              paint_end_offset),
         HighlightStyleUtils::HighlightTextDecorationColor(
             layout_object_->GetDocument(), originating_style_, node_,
             originating_text_style_.current_color, PseudoFor(type)));
@@ -895,8 +882,7 @@
   // the decoration have the same range, so we can use the same rect for both
   // clipping the canvas and painting the decoration.
   const HighlightRange range{paint_start_offset, paint_end_offset};
-  const HighlightPart part{HighlightLayer{LayerFor(marker_type)}, range};
-  const PhysicalRect rect = RectInWritingModeSpace(range);
+  const LineRelativeRect rect = LineRelativeWorldRect(range);
 
   absl::optional<TextDecorationInfo> decoration_info{};
   decoration_painter_.UpdateDecorationInfo(decoration_info, style, rect,
@@ -1108,14 +1094,15 @@
   }
 }
 
-PhysicalRect NGHighlightPainter::RectInWritingModeSpace(
+LineRelativeRect NGHighlightPainter::LineRelativeWorldRect(
     const NGHighlightOverlay::HighlightRange& range) {
   const StringView text = cursor_.CurrentText();
-  return MarkerRectForForeground(fragment_item_, text, range.from, range.to) +
-         box_origin_;
+  return LineRelativeLocalRect(fragment_item_, text, range.from, range.to) +
+         LineRelativeOffset::CreateFromBoxOrigin(box_origin_);
 }
 
-void NGHighlightPainter::ClipToPartDecorations(const PhysicalRect& part_rect) {
+void NGHighlightPainter::ClipToPartDecorations(
+    const LineRelativeRect& part_rect) {
   gfx::RectF clip_rect{part_rect};
 
   // Whether it’s best to clip to selection rect on both axes or only inline
@@ -1174,11 +1161,11 @@
 
     // Paint the decoration over the range of the originating fragment or active
     // highlight, but clip it to the range of the part.
-    const PhysicalRect decoration_rect =
-        RectInWritingModeSpace(decoration.range);
-    const PhysicalRect part_rect = part.range != decoration.range
-                                       ? RectInWritingModeSpace(part.range)
-                                       : decoration_rect;
+    const LineRelativeRect decoration_rect =
+        LineRelativeWorldRect(decoration.range);
+    const LineRelativeRect part_rect = part.range != decoration.range
+                                           ? LineRelativeWorldRect(part.range)
+                                           : decoration_rect;
 
     absl::optional<TextDecorationInfo> decoration_info{};
     decoration_painter_.UpdateDecorationInfo(
@@ -1239,11 +1226,11 @@
 
     // Paint the decoration over the range of the originating fragment or active
     // highlight, but clip it to the range of the part.
-    const PhysicalRect decoration_rect =
-        RectInWritingModeSpace(decoration.range);
-    const PhysicalRect part_rect = part.range != decoration.range
-                                       ? RectInWritingModeSpace(part.range)
-                                       : decoration_rect;
+    const LineRelativeRect decoration_rect =
+        LineRelativeWorldRect(decoration.range);
+    const LineRelativeRect part_rect = part.range != decoration.range
+                                           ? LineRelativeWorldRect(part.range)
+                                           : decoration_rect;
 
     absl::optional<TextDecorationInfo> decoration_info{};
     decoration_painter_.UpdateDecorationInfo(
@@ -1281,7 +1268,7 @@
     return;
 
   const StringView text = cursor_.CurrentText();
-  absl::optional<PhysicalRect> marker_rect{};
+  absl::optional<LineRelativeRect> marker_rect;
 
   for (const HighlightDecoration& decoration : part.decorations) {
     switch (decoration.layer.type) {
@@ -1299,8 +1286,8 @@
         }
 
         if (!marker_rect) {
-          marker_rect = MarkerRectForForeground(fragment_item_, text,
-                                                part.range.from, part.range.to);
+          marker_rect = LineRelativeLocalRect(fragment_item_, text,
+                                              part.range.from, part.range.to);
         }
 
         DocumentMarkerPainter::PaintDocumentMarker(
@@ -1349,9 +1336,9 @@
         document, originating_style_, node_, pseudo, text_style, paint_info_,
         pseudo_argument);
   }
-  PhysicalRect decoration_rect =
-      fragment_item_.LocalRect(text, paint_start_offset, paint_end_offset);
-  decoration_rect.Move(PhysicalOffset(box_origin_));
+  LineRelativeRect decoration_rect = LineRelativeLocalRect(
+      fragment_item_, text, paint_start_offset, paint_end_offset);
+  decoration_rect.Move(LineRelativeOffset::CreateFromBoxOrigin(box_origin_));
   NGTextDecorationPainter decoration_painter(
       text_painter_, fragment_item_, paint_info_,
       pseudo_style ? *pseudo_style : originating_style_, text_style,
diff --git a/third_party/blink/renderer/core/paint/ng/ng_highlight_painter.h b/third_party/blink/renderer/core/paint/ng/ng_highlight_painter.h
index 68f66c3..8b48199 100644
--- a/third_party/blink/renderer/core/paint/ng/ng_highlight_painter.h
+++ b/third_party/blink/renderer/core/paint/ng/ng_highlight_painter.h
@@ -12,6 +12,7 @@
 #include "third_party/blink/renderer/core/editing/markers/highlight_pseudo_marker.h"
 #include "third_party/blink/renderer/core/layout/geometry/physical_rect.h"
 #include "third_party/blink/renderer/core/layout/selection_state.h"
+#include "third_party/blink/renderer/core/paint/line_relative_rect.h"
 #include "third_party/blink/renderer/core/paint/ng/ng_highlight_overlay.h"
 #include "third_party/blink/renderer/core/paint/text_decoration_info.h"
 #include "third_party/blink/renderer/core/paint/text_paint_style.h"
@@ -78,8 +79,8 @@
     // need to rotate the canvas into a line-relative coordinate space. Paint
     // ops done while rotated need coordinates in this rotated space, but ops
     // done outside of these rotations need the original physical rect.
-    const PhysicalRect& RectInPhysicalSpace();
-    const PhysicalRect& RectInWritingModeSpace();
+    const PhysicalRect& PhysicalSelectionRect();
+    const LineRelativeRect& LineRelativeSelectionRect();
 
     void PaintSelectionBackground(
         GraphicsContext& context,
@@ -106,7 +107,7 @@
    private:
     struct SelectionRect {
       PhysicalRect physical;
-      PhysicalRect rotated;
+      LineRelativeRect rotated;
       STACK_ALLOCATED();
     };
 
@@ -246,9 +247,9 @@
       const ComputedStyle& style,
       const TextPaintStyle& text_style,
       const AppliedTextDecoration* decoration_override);
-  PhysicalRect RectInWritingModeSpace(
+  LineRelativeRect LineRelativeWorldRect(
       const NGHighlightOverlay::HighlightRange&);
-  void ClipToPartDecorations(const PhysicalRect&);
+  void ClipToPartDecorations(const LineRelativeRect&);
   void PaintDecorationsExceptLineThrough(
       const NGHighlightOverlay::HighlightPart&);
   void PaintDecorationsExceptLineThrough(
diff --git a/third_party/blink/renderer/core/paint/ng/ng_highlight_painter_test.cc b/third_party/blink/renderer/core/paint/ng/ng_highlight_painter_test.cc
index 1bda56e6c..1168161 100644
--- a/third_party/blink/renderer/core/paint/ng/ng_highlight_painter_test.cc
+++ b/third_party/blink/renderer/core/paint/ng/ng_highlight_painter_test.cc
@@ -3,6 +3,7 @@
 // found in the LICENSE file.
 
 #include "third_party/blink/renderer/core/paint/ng/ng_highlight_painter.h"
+#include "third_party/blink/renderer/core/paint/line_relative_rect.h"
 
 #include "testing/gtest/include/gtest/gtest.h"
 #include "third_party/blink/renderer/core/editing/markers/document_marker_controller.h"
@@ -70,13 +71,15 @@
                                        text_item.GetLayoutObject()->GetNode(),
                                        paint_info, text_style);
     }
-
-    NGTextPainter text_painter(graphics_context, text_item.ScaledFont(), rect,
-                               physical_offset, physical_rect, &inline_context,
-                               true);
+    LineRelativeRect rotated_rect =
+        LineRelativeRect::CreateFromLineBox(physical_rect, true);
+    NGTextPainter text_painter(
+        graphics_context, text_item.ScaledFont(), rect,
+        LineRelativeOffset::CreateFromBoxOrigin(physical_offset), rotated_rect,
+        &inline_context, true);
     NGTextDecorationPainter decoration_painter(text_painter, text_item,
                                                paint_info, style, text_style,
-                                               physical_rect, selection);
+                                               rotated_rect, selection);
     NGHighlightPainter highlight_painter(
         cursor.Current()->TextPaintInfo(cursor.Items()), text_painter,
         decoration_painter, paint_info, cursor, text_item, {}, physical_offset,
diff --git a/third_party/blink/renderer/core/paint/ng/ng_text_combine_painter.cc b/third_party/blink/renderer/core/paint/ng/ng_text_combine_painter.cc
index 75466bb..0098b6c8 100644
--- a/third_party/blink/renderer/core/paint/ng/ng_text_combine_painter.cc
+++ b/third_party/blink/renderer/core/paint/ng/ng_text_combine_painter.cc
@@ -16,9 +16,10 @@
 
 namespace blink {
 
-NGTextCombinePainter::NGTextCombinePainter(GraphicsContext& context,
-                                           const ComputedStyle& style,
-                                           const PhysicalRect& text_frame_rect)
+NGTextCombinePainter::NGTextCombinePainter(
+    GraphicsContext& context,
+    const ComputedStyle& style,
+    const LineRelativeRect& text_frame_rect)
     : NGTextPainterBase(context,
                         style.GetFont(),
                         text_frame_rect.offset,
@@ -58,13 +59,14 @@
       style.GetTextEmphasisMark() != TextEmphasisMark::kNone;
   DCHECK(has_text_decoration | has_emphasis_mark);
 
-  const PhysicalRect& text_frame_rect =
+  const LineRelativeRect& text_frame_rect =
       text_combine.ComputeTextFrameRect(paint_offset);
 
   // To match the logical direction
   GraphicsContextStateSaver state_saver(paint_info.context);
   paint_info.context.ConcatCTM(
-      TextPainterBase::Rotation(text_frame_rect, style.GetWritingMode()));
+      text_frame_rect.ComputeRelativeToPhysicalTransform(
+          style.GetWritingMode()));
 
   NGTextCombinePainter text_painter(paint_info.context, style, text_frame_rect);
   const TextPaintStyle text_style = TextPainterBase::TextPaintingStyle(
@@ -97,7 +99,7 @@
   // Setup arguments for painting text decorations
   const absl::optional<AppliedTextDecoration> selection_text_decoration;
   TextDecorationInfo decoration_info(
-      text_frame_rect_.offset, text_frame_rect_.size.width, style_,
+      text_frame_rect_.offset, text_frame_rect_.size.inline_size, style_,
       /* inline_context */ nullptr, selection_text_decoration);
 
   const NGTextDecorationOffset decoration_offset(style_);
@@ -131,8 +133,9 @@
   const auto font_ascent = font_data->GetFontMetrics().Ascent();
   const TextRun placeholder_text_run(&kIdeographicFullStopCharacter, 1);
   const gfx::PointF emphasis_mark_text_origin(
-      text_frame_rect_.X().ToFloat(),
-      text_frame_rect_.Y().ToFloat() + font_ascent + emphasis_mark_offset_);
+      text_frame_rect_.LineLeft().ToFloat(),
+      text_frame_rect_.LineOver().ToFloat() + font_ascent +
+          emphasis_mark_offset_);
   const TextRunPaintInfo text_run_paint_info(placeholder_text_run);
   graphics_context_.DrawEmphasisMarks(
       emphasis_mark_font, text_run_paint_info, emphasis_mark_,
diff --git a/third_party/blink/renderer/core/paint/ng/ng_text_combine_painter.h b/third_party/blink/renderer/core/paint/ng/ng_text_combine_painter.h
index 0c4060d..3123442 100644
--- a/third_party/blink/renderer/core/paint/ng/ng_text_combine_painter.h
+++ b/third_party/blink/renderer/core/paint/ng/ng_text_combine_painter.h
@@ -11,6 +11,7 @@
 
 class ComputedStyle;
 class LayoutTextCombine;
+struct LineRelativeRect;
 
 // The painter for painting text decorations and emphasis marks for
 // LayoutNGTextCombine.
@@ -18,7 +19,7 @@
  public:
   NGTextCombinePainter(GraphicsContext& context,
                        const ComputedStyle& style,
-                       const PhysicalRect& text_frame_rect);
+                       const LineRelativeRect& text_frame_rect);
   ~NGTextCombinePainter();
 
   static void Paint(const PaintInfo& paint_info,
diff --git a/third_party/blink/renderer/core/paint/ng/ng_text_decoration_painter.cc b/third_party/blink/renderer/core/paint/ng/ng_text_decoration_painter.cc
index 5ab9574..92d7e9a 100644
--- a/third_party/blink/renderer/core/paint/ng/ng_text_decoration_painter.cc
+++ b/third_party/blink/renderer/core/paint/ng/ng_text_decoration_painter.cc
@@ -19,7 +19,7 @@
     const PaintInfo& paint_info,
     const ComputedStyle& style,
     const TextPaintStyle& text_style,
-    const PhysicalRect& decoration_rect,
+    const LineRelativeRect& decoration_rect,
     NGHighlightPainter::SelectionPaintState* selection)
     : text_painter_(text_painter),
       text_item_(text_item),
@@ -38,7 +38,7 @@
 void NGTextDecorationPainter::UpdateDecorationInfo(
     absl::optional<TextDecorationInfo>& result,
     const ComputedStyle& style,
-    absl::optional<PhysicalRect> decoration_rect_override,
+    absl::optional<LineRelativeRect> decoration_rect_override,
     const AppliedTextDecoration* decoration_override) {
   result.reset();
 
@@ -66,7 +66,7 @@
     // Adjust the origin of the decoration because
     // NGTextPainter::PaintDecorationsExceptLineThrough() will change the
     // scaling of the GraphicsContext.
-    LayoutUnit top = decoration_rect_.offset.top;
+    LayoutUnit top = decoration_rect_.offset.line_over;
     // In svg/text/text-decorations-in-scaled-pattern.svg, the size of
     // ScaledFont() is zero, and the top position is unreliable. So we
     // adjust the baseline position, then shift it for scaled_font.
@@ -74,16 +74,16 @@
         text_item_.ScaledFont().PrimaryFont()->GetFontMetrics().FixedAscent();
     top *= scaling_factor / text_item_.SvgScalingFactor();
     top -= scaled_font.PrimaryFont()->GetFontMetrics().FixedAscent();
-    result.emplace(PhysicalOffset(decoration_rect_.offset.left, top),
-                   decoration_rect_.Width(), style,
+    result.emplace(LineRelativeOffset{decoration_rect_.offset.line_left, top},
+                   decoration_rect_.InlineSize(), style,
                    text_painter_.InlineContext(),
                    effective_selection_decoration, decoration_override,
                    &scaled_font, MinimumThickness1(false), scaling_factor);
   } else {
-    PhysicalRect decoration_rect =
+    LineRelativeRect decoration_rect =
         decoration_rect_override.value_or(decoration_rect_);
     result.emplace(
-        decoration_rect.offset, decoration_rect.Width(), style,
+        decoration_rect.offset, decoration_rect.InlineSize(), style,
         text_painter_.InlineContext(), effective_selection_decoration,
         decoration_override, &text_item_.ScaledFont(),
         MinimumThickness1(text_item_.Type() != NGFragmentItem::kSvgText));
@@ -98,7 +98,7 @@
   clip_rect_.reset();
 
   if (decoration_info_ && UNLIKELY(selection_)) {
-    clip_rect_.emplace(selection_->RectInWritingModeSpace());
+    clip_rect_.emplace(selection_->LineRelativeSelectionRect());
 
     // Whether it’s best to clip to selection rect on both axes or only inline
     // depends on the situation, but the latter can improve the appearance of
diff --git a/third_party/blink/renderer/core/paint/ng/ng_text_decoration_painter.h b/third_party/blink/renderer/core/paint/ng/ng_text_decoration_painter.h
index 26a152b..13e52a8 100644
--- a/third_party/blink/renderer/core/paint/ng/ng_text_decoration_painter.h
+++ b/third_party/blink/renderer/core/paint/ng/ng_text_decoration_painter.h
@@ -16,8 +16,8 @@
 class GraphicsContextStateSaver;
 class NGFragmentItem;
 class NGTextPainter;
+struct LineRelativeRect;
 struct PaintInfo;
-struct PhysicalRect;
 struct TextPaintStyle;
 
 // NGTextFragmentPainter helper that paints text-decoration.
@@ -41,7 +41,7 @@
       const PaintInfo& paint_info,
       const ComputedStyle& style,
       const TextPaintStyle& text_style,
-      const PhysicalRect& decoration_rect,
+      const LineRelativeRect& decoration_rect,
       NGHighlightPainter::SelectionPaintState* selection);
   ~NGTextDecorationPainter();
 
@@ -49,7 +49,7 @@
   // that need to be painted, or nullopt if decorations should not be painted.
   void UpdateDecorationInfo(absl::optional<TextDecorationInfo>&,
                             const ComputedStyle&,
-                            absl::optional<PhysicalRect> = {},
+                            absl::optional<LineRelativeRect> = {},
                             const AppliedTextDecoration* = nullptr);
 
   enum Phase { kOriginating, kSelection };
@@ -66,7 +66,7 @@
   const PaintInfo& paint_info_;
   const ComputedStyle& style_;
   const TextPaintStyle& text_style_;
-  const PhysicalRect& decoration_rect_;
+  const LineRelativeRect& decoration_rect_;
   NGHighlightPainter::SelectionPaintState* selection_;
 
   Step step_;
diff --git a/third_party/blink/renderer/core/paint/ng/ng_text_fragment_painter.cc b/third_party/blink/renderer/core/paint/ng/ng_text_fragment_painter.cc
index db6918b..381b5f3 100644
--- a/third_party/blink/renderer/core/paint/ng/ng_text_fragment_painter.cc
+++ b/third_party/blink/renderer/core/paint/ng/ng_text_fragment_painter.cc
@@ -24,6 +24,7 @@
 #include "third_party/blink/renderer/core/mobile_metrics/mobile_friendliness_checker.h"
 #include "third_party/blink/renderer/core/paint/box_model_object_painter.h"
 #include "third_party/blink/renderer/core/paint/document_marker_painter.h"
+#include "third_party/blink/renderer/core/paint/line_relative_rect.h"
 #include "third_party/blink/renderer/core/paint/ng/ng_highlight_painter.h"
 #include "third_party/blink/renderer/core/paint/ng/ng_inline_paint_context.h"
 #include "third_party/blink/renderer/core/paint/ng/ng_text_decoration_painter.h"
@@ -57,10 +58,10 @@
   return *cursor.Current().GetDisplayItemClient();
 }
 
-inline PhysicalRect BoxInPhysicalSpace(const NGInlineCursor& cursor,
-                                       const PhysicalOffset& paint_offset,
-                                       const PhysicalOffset& parent_offset,
-                                       const LayoutTextCombine* text_combine) {
+inline PhysicalRect PhysicalBoxRect(const NGInlineCursor& cursor,
+                                    const PhysicalOffset& paint_offset,
+                                    const PhysicalOffset& parent_offset,
+                                    const LayoutTextCombine* text_combine) {
   PhysicalRect box_rect;
   if (const auto* svg_data = cursor.CurrentItem()->SvgFragmentData()) {
     box_rect = PhysicalRect::FastAndLossyFromRectF(svg_data->rect);
@@ -86,14 +87,6 @@
   return box_rect;
 }
 
-inline PhysicalRect BoxInWritingModeSpace(const PhysicalRect& physical_box,
-                                          bool is_horizontal) {
-  PhysicalRect result = physical_box;
-  if (!is_horizontal)
-    result.size = PhysicalSize(result.Height(), result.Width());
-  return result;
-}
-
 inline const NGInlineCursor& InlineCursorForBlockFlow(
     const NGInlineCursor& cursor,
     absl::optional<NGInlineCursor>* storage) {
@@ -275,7 +268,7 @@
   const auto* const text_combine =
       DynamicTo<LayoutTextCombine>(layout_object->Parent());
   const PhysicalRect physical_box =
-      BoxInPhysicalSpace(cursor_, paint_offset, parent_offset_, text_combine);
+      PhysicalBoxRect(cursor_, paint_offset, parent_offset_, text_combine);
 #if DCHECK_IS_ON()
   if (UNLIKELY(text_combine))
     LayoutTextCombine::AssertStyleIsValid(style);
@@ -293,10 +286,12 @@
   absl::optional<AffineTransform> rotation;
   const WritingMode writing_mode = style.GetWritingMode();
   const bool is_horizontal = IsHorizontalWritingMode(writing_mode);
-  const PhysicalRect rotated_box =
-      BoxInWritingModeSpace(physical_box, is_horizontal);
-  if (!is_horizontal)
-    rotation.emplace(TextPainterBase::Rotation(rotated_box, writing_mode));
+  const LineRelativeRect rotated_box =
+      LineRelativeRect::CreateFromLineBox(physical_box, is_horizontal);
+  if (!is_horizontal) {
+    rotation.emplace(
+        rotated_box.ComputeRelativeToPhysicalTransform(writing_mode));
+  }
 
   // Determine whether or not we're selected.
   NGHighlightPainter::SelectionPaintState* selection = nullptr;
@@ -355,7 +350,7 @@
             selection_for_bounds_recording->State())) {
       selection_recorder.emplace(
           selection_for_bounds_recording->State(),
-          selection_for_bounds_recording->RectInPhysicalSpace(),
+          selection_for_bounds_recording->PhysicalSelectionRect(),
           paint_info.context.GetPaintController(),
           cursor_.Current().ResolvedDirection(), style.GetWritingMode(),
           *cursor_.Current().GetLayoutObject());
@@ -412,14 +407,14 @@
       paint_info.phase != PaintPhase::kTextClip && !is_printing;
   GraphicsContextStateSaver state_saver(context, /*save_and_restore=*/false);
   const int ascent = font_data ? font_data->GetFontMetrics().Ascent() : 0;
-  PhysicalOffset text_origin(
+  LineRelativeOffset text_origin{
       physical_box.offset.left,
       UNLIKELY(text_combine)
           ? text_combine->AdjustTextTopForPaint(physical_box.offset.top)
-          : physical_box.offset.top + ascent);
+          : physical_box.offset.top + ascent};
 
   NGTextPainter text_painter(context, font, visual_rect, text_origin,
-                             physical_box, inline_context_, is_horizontal);
+                             rotated_box, inline_context_, is_horizontal);
   NGTextDecorationPainter decoration_painter(text_painter, text_item,
                                              paint_info, style, text_style,
                                              rotated_box, selection);
@@ -477,7 +472,7 @@
 
   if (UNLIKELY(highlight_painter.Selection())) {
     PhysicalRect physical_selection =
-        highlight_painter.Selection()->RectInPhysicalSpace();
+        highlight_painter.Selection()->PhysicalSelectionRect();
     if (scaling_factor != 1.0f) {
       physical_selection.offset.Scale(1 / scaling_factor);
       physical_selection.size.Scale(1 / scaling_factor);
diff --git a/third_party/blink/renderer/core/paint/ng/ng_text_painter.cc b/third_party/blink/renderer/core/paint/ng/ng_text_painter.cc
index f3eda760..129f5a42 100644
--- a/third_party/blink/renderer/core/paint/ng/ng_text_painter.cc
+++ b/third_party/blink/renderer/core/paint/ng/ng_text_painter.cc
@@ -206,7 +206,7 @@
     unsigned length,
     const TextPaintStyle& text_style,
     const TextPaintStyle& selection_style,
-    const PhysicalRect& selection_rect,
+    const LineRelativeRect& selection_rect,
     DOMNodeId node_id,
     const AutoDarkMode& auto_dark_mode) {
   if (!fragment_paint_info.shape_result)
diff --git a/third_party/blink/renderer/core/paint/ng/ng_text_painter.h b/third_party/blink/renderer/core/paint/ng/ng_text_painter.h
index 5592fa07..ea4caa924 100644
--- a/third_party/blink/renderer/core/paint/ng/ng_text_painter.h
+++ b/third_party/blink/renderer/core/paint/ng/ng_text_painter.h
@@ -7,6 +7,7 @@
 
 #include "third_party/blink/renderer/core/core_export.h"
 #include "third_party/blink/renderer/core/layout/ng/ng_style_variant.h"
+#include "third_party/blink/renderer/core/paint/line_relative_rect.h"
 #include "third_party/blink/renderer/core/paint/ng/ng_text_painter_base.h"
 #include "third_party/blink/renderer/platform/fonts/ng_text_fragment_paint_info.h"
 #include "third_party/blink/renderer/platform/graphics/dom_node_id.h"
@@ -67,8 +68,8 @@
   NGTextPainter(GraphicsContext& context,
                 const Font& font,
                 const gfx::Rect& visual_rect,
-                const PhysicalOffset& text_origin,
-                const PhysicalRect& text_frame_rect,
+                const LineRelativeOffset& text_origin,
+                const LineRelativeRect& text_frame_rect,
                 NGInlinePaintContext* inline_context,
                 bool horizontal)
       : NGTextPainterBase(context,
@@ -95,7 +96,7 @@
                          unsigned truncation_point,
                          const TextPaintStyle& text_style,
                          const TextPaintStyle& selection_style,
-                         const PhysicalRect& selection_rect,
+                         const LineRelativeRect& selection_rect,
                          DOMNodeId node_id,
                          const AutoDarkMode& auto_dark_mode);
 
diff --git a/third_party/blink/renderer/core/paint/ng/ng_text_painter_base.h b/third_party/blink/renderer/core/paint/ng/ng_text_painter_base.h
index d7f53a1..bc380f4 100644
--- a/third_party/blink/renderer/core/paint/ng/ng_text_painter_base.h
+++ b/third_party/blink/renderer/core/paint/ng/ng_text_painter_base.h
@@ -18,10 +18,10 @@
 class NGInlinePaintContext;
 class NGTextDecorationOffset;
 class TextDecorationInfo;
+struct LineRelativeOffset;
+struct LineRelativeRect;
 struct NGTextFragmentPaintInfo;
 struct PaintInfo;
-struct PhysicalOffset;
-struct PhysicalRect;
 struct TextPaintStyle;
 
 // LayoutNG-specific base class for text painting. Augments TextPainterBase with
@@ -32,8 +32,8 @@
  public:
   NGTextPainterBase(GraphicsContext& context,
                     const Font& font,
-                    const PhysicalOffset& text_origin,
-                    const PhysicalRect& text_frame_rect,
+                    const LineRelativeOffset& text_origin,
+                    const LineRelativeRect& text_frame_rect,
                     NGInlinePaintContext* inline_context,
                     bool horizontal)
       : TextPainterBase(context,
diff --git a/third_party/blink/renderer/core/paint/text_decoration_info.cc b/third_party/blink/renderer/core/paint/text_decoration_info.cc
index 530a3bec..3c12404 100644
--- a/third_party/blink/renderer/core/paint/text_decoration_info.cc
+++ b/third_party/blink/renderer/core/paint/text_decoration_info.cc
@@ -264,7 +264,7 @@
 }  // anonymous namespace
 
 TextDecorationInfo::TextDecorationInfo(
-    PhysicalOffset local_origin,
+    LineRelativeOffset local_origin,
     LayoutUnit width,
     const ComputedStyle& target_style,
     const NGInlinePaintContext* inline_context,
@@ -454,7 +454,7 @@
   const LayoutUnit decorating_box_paint_offset =
       decorating_box_->ContentOffsetInContainer().top +
       inline_context_->PaintOffset().top;
-  return decorating_box_paint_offset - local_origin_.top;
+  return decorating_box_paint_offset - local_origin_.line_over;
 }
 
 void TextDecorationInfo::SetUnderlineLineData(
diff --git a/third_party/blink/renderer/core/paint/text_decoration_info.h b/third_party/blink/renderer/core/paint/text_decoration_info.h
index 24fc700..4ad87844 100644
--- a/third_party/blink/renderer/core/paint/text_decoration_info.h
+++ b/third_party/blink/renderer/core/paint/text_decoration_info.h
@@ -10,6 +10,7 @@
 #include "third_party/abseil-cpp/absl/types/optional.h"
 #include "third_party/blink/renderer/core/core_export.h"
 #include "third_party/blink/renderer/core/layout/geometry/physical_offset.h"
+#include "third_party/blink/renderer/core/paint/line_relative_rect.h"
 #include "third_party/blink/renderer/core/paint/text_paint_style.h"
 #include "third_party/blink/renderer/core/style/applied_text_decoration.h"
 #include "third_party/blink/renderer/core/style/computed_style_constants.h"
@@ -46,7 +47,7 @@
 
  public:
   TextDecorationInfo(
-      PhysicalOffset local_origin,
+      LineRelativeOffset local_origin,
       LayoutUnit width,
       const ComputedStyle& target_style,
       const NGInlinePaintContext* inline_context,
@@ -114,7 +115,7 @@
   // text works as a resource.
   float ScalingFactor() const { return scaling_factor_; }
   float InkSkipClipUpper(float bounds_upper) const {
-    return -TargetAscent() + bounds_upper - local_origin_.top.ToFloat();
+    return -TargetAscent() + bounds_upper - local_origin_.line_over.ToFloat();
   }
 
   // |SetDecorationIndex| may change the results of these methods.
@@ -192,7 +193,7 @@
   const Font* const font_override_ = nullptr;
 
   // Geometry of the target text/box.
-  const PhysicalOffset local_origin_;
+  const LineRelativeOffset local_origin_;
   const LayoutUnit width_;
 
   // Cached properties for the current |decoration_index_|.
diff --git a/third_party/blink/renderer/core/paint/text_painter_base.cc b/third_party/blink/renderer/core/paint/text_painter_base.cc
index 024583e..1114b74 100644
--- a/third_party/blink/renderer/core/paint/text_painter_base.cc
+++ b/third_party/blink/renderer/core/paint/text_painter_base.cc
@@ -23,8 +23,8 @@
 
 TextPainterBase::TextPainterBase(GraphicsContext& context,
                                  const Font& font,
-                                 const PhysicalOffset& text_origin,
-                                 const PhysicalRect& text_frame_rect,
+                                 const LineRelativeOffset& text_origin,
+                                 const LineRelativeRect& text_frame_rect,
                                  NGInlinePaintContext* inline_context,
                                  bool horizontal)
     : inline_context_(inline_context),
@@ -240,5 +240,4 @@
     }
   }
 }
-
 }  // namespace blink
diff --git a/third_party/blink/renderer/core/paint/text_painter_base.h b/third_party/blink/renderer/core/paint/text_painter_base.h
index 4a0e038..c00b1cbd 100644
--- a/third_party/blink/renderer/core/paint/text_painter_base.h
+++ b/third_party/blink/renderer/core/paint/text_painter_base.h
@@ -9,6 +9,7 @@
 #include "third_party/blink/renderer/core/core_export.h"
 #include "third_party/blink/renderer/core/layout/geometry/physical_rect.h"
 #include "third_party/blink/renderer/core/paint/applied_decoration_painter.h"
+#include "third_party/blink/renderer/core/paint/line_relative_rect.h"
 #include "third_party/blink/renderer/core/paint/paint_info.h"
 #include "third_party/blink/renderer/core/paint/text_decoration_info.h"
 #include "third_party/blink/renderer/core/paint/text_paint_style.h"
@@ -50,8 +51,8 @@
  public:
   TextPainterBase(GraphicsContext&,
                   const Font&,
-                  const PhysicalOffset& text_origin,
-                  const PhysicalRect& text_frame_rect,
+                  const LineRelativeOffset& text_origin,
+                  const LineRelativeRect& text_frame_rect,
                   NGInlinePaintContext* inline_context,
                   bool horizontal);
   ~TextPainterBase();
@@ -110,46 +111,14 @@
   NGInlinePaintContext* inline_context_ = nullptr;
   GraphicsContext& graphics_context_;
   const Font& font_;
-  const PhysicalOffset text_origin_;
-  const PhysicalRect text_frame_rect_;
+  const LineRelativeOffset text_origin_;
+  const LineRelativeRect text_frame_rect_;
   AtomicString emphasis_mark_;
   int emphasis_mark_offset_ = 0;
   int ellipsis_offset_ = 0;
   const bool horizontal_;
 };
 
-inline AffineTransform TextPainterBase::Rotation(
-    const PhysicalRect& box_rect,
-    RotationDirection rotation_direction) {
-  // Why this matrix is correct: consider the case of a clockwise rotation.
-
-  // Let the corner points that define |boxRect| be ABCD, where A is top-left
-  // and B is bottom-left.
-
-  // 1. We want B to end up at the same pixel position after rotation as A is
-  //    before rotation.
-  // 2. Before rotation, B is at (x(), maxY())
-  // 3. Rotating clockwise by 90 degrees places B at the coordinates
-  //    (-maxY(), x()).
-  // 4. Point A before rotation is at (x(), y())
-  // 5. Therefore the translation from (3) to (4) is (x(), y()) - (-maxY(), x())
-  //    = (x() + maxY(), y() - x())
-
-  // A similar argument derives the counter-clockwise case.
-  return rotation_direction == kClockwise
-             ? AffineTransform(0, 1, -1, 0, box_rect.X() + box_rect.Bottom(),
-                               box_rect.Y() - box_rect.X())
-             : AffineTransform(0, -1, 1, 0, box_rect.X() - box_rect.Y(),
-                               box_rect.X() + box_rect.Bottom());
-}
-
-inline AffineTransform TextPainterBase::Rotation(const PhysicalRect& box_rect,
-                                                 WritingMode writing_mode) {
-  return Rotation(box_rect, writing_mode != WritingMode::kSidewaysLr
-                                ? TextPainterBase::kClockwise
-                                : TextPainterBase::kCounterclockwise);
-}
-
 }  // namespace blink
 
 #endif  // THIRD_PARTY_BLINK_RENDERER_CORE_PAINT_TEXT_PAINTER_BASE_H_
diff --git a/third_party/blink/renderer/core/scroll/scroll_animator_test.cc b/third_party/blink/renderer/core/scroll/scroll_animator_test.cc
index d03877f..a73b5428 100644
--- a/third_party/blink/renderer/core/scroll/scroll_animator_test.cc
+++ b/third_party/blink/renderer/core/scroll/scroll_animator_test.cc
@@ -71,7 +71,6 @@
         min_offset_(min_offset),
         max_offset_(max_offset) {}
 
-  MOCK_CONST_METHOD0(VisualRectForScrollbarParts, LayoutRect());
   MOCK_CONST_METHOD0(IsActive, bool());
   MOCK_CONST_METHOD0(IsThrottled, bool());
   MOCK_CONST_METHOD1(ScrollSize, int(ScrollbarOrientation));
diff --git a/third_party/blink/renderer/core/scroll/scrollbar_test_suite.h b/third_party/blink/renderer/core/scroll/scrollbar_test_suite.h
index c52a3ea..885b6f0 100644
--- a/third_party/blink/renderer/core/scroll/scrollbar_test_suite.h
+++ b/third_party/blink/renderer/core/scroll/scrollbar_test_suite.h
@@ -66,7 +66,6 @@
         maximum_scroll_offset_(offset),
         chrome_client_(MakeGarbageCollected<MockPlatformChromeClient>()) {}
 
-  MOCK_CONST_METHOD0(VisualRectForScrollbarParts, LayoutRect());
   MOCK_CONST_METHOD0(IsActive, bool());
   MOCK_CONST_METHOD0(IsThrottled, bool());
   MOCK_CONST_METHOD1(ScrollSize, int(ScrollbarOrientation));
diff --git a/third_party/blink/renderer/modules/canvas/canvas2d/canvas_path.cc b/third_party/blink/renderer/modules/canvas/canvas2d/canvas_path.cc
index a1403ce89..25e1a9d 100644
--- a/third_party/blink/renderer/modules/canvas/canvas2d/canvas_path.cc
+++ b/third_party/blink/renderer/modules/canvas/canvas2d/canvas_path.cc
@@ -46,6 +46,7 @@
 #include "ui/gfx/geometry/rect_f.h"
 
 namespace blink {
+float const kErrorRange = 0.01;
 
 void CanvasPath::closePath() {
   if (UNLIKELY(IsEmpty())) {
@@ -503,6 +504,17 @@
   CanonicalizeAngle(&start_angle, &end_angle);
   float adjusted_end_angle =
       AdjustEndAngle(start_angle, end_angle, anticlockwise);
+
+  // If the ellipse has a radius of zero and it's closed, this path should be
+  // ignored from drawing.
+  if (!path_.HasCurrentPoint() ||
+      (path_.HasCurrentPoint() && path_.CurrentPoint().x() == x &&
+       path_.CurrentPoint().y() == y)) {
+    if (!radius_x && !radius_y &&
+        abs(adjusted_end_angle - start_angle - kTwoPiFloat) <= kErrorRange) {
+      return;
+    }
+  }
   if (UNLIKELY(!radius_x || !radius_y || start_angle == adjusted_end_angle)) {
     // The ellipse is empty but we still need to draw the connecting line to
     // start point.
diff --git a/third_party/blink/renderer/modules/ml/webnn/ml_graph_test.cc b/third_party/blink/renderer/modules/ml/webnn/ml_graph_test.cc
index 52c6be42..362e531 100644
--- a/third_party/blink/renderer/modules/ml/webnn/ml_graph_test.cc
+++ b/third_party/blink/renderer/modules/ml/webnn/ml_graph_test.cc
@@ -9,6 +9,7 @@
 #include "third_party/blink/renderer/bindings/modules/v8/v8_ml_leaky_relu_options.h"
 #include "third_party/blink/renderer/bindings/modules/v8/v8_ml_pad_options.h"
 #include "third_party/blink/renderer/bindings/modules/v8/v8_ml_pool_2d_options.h"
+#include "third_party/blink/renderer/bindings/modules/v8/v8_ml_reduce_options.h"
 #include "third_party/blink/renderer/bindings/modules/v8/v8_ml_split_options.h"
 #include "third_party/blink/renderer/bindings/modules/v8/v8_ml_transpose_options.h"
 #include "third_party/blink/renderer/modules/ml/webnn/ml_graph_builder.h"
@@ -489,6 +490,62 @@
 }
 
 template <typename T>
+struct ReduceTester {
+  ReduceKind kind;
+  OperandInfo<T> input;
+  Vector<T> expected;
+
+  void Test(MLGraphTest& helper,
+            V8TestingScope& scope,
+            MLReduceOptions* options = MLReduceOptions::Create()) {
+    auto* builder = CreateMLGraphBuilder(scope.GetExecutionContext());
+    auto* input_operand = BuildInput(builder, "input", input.dimensions,
+                                     input.type, scope.GetExceptionState());
+    auto* output_operand =
+        BuildReduce(scope, builder, kind, input_operand, options);
+    auto [graph, build_exception] =
+        helper.BuildGraph(scope, builder, {{"output", output_operand}});
+    EXPECT_NE(graph, nullptr);
+
+    MLNamedArrayBufferViews inputs(
+        {{"input",
+          CreateArrayBufferViewForOperand(input_operand, input.values)}});
+    MLNamedArrayBufferViews outputs(
+        {{"output", CreateArrayBufferViewForOperand(output_operand)}});
+    auto* compute_exception =
+        helper.ComputeGraph(scope, graph, inputs, outputs);
+    EXPECT_EQ(compute_exception, nullptr);
+    auto results = GetArrayBufferViewValues<T>(outputs[0].second);
+    EXPECT_EQ(results, expected);
+  }
+};
+
+TEST_P(MLGraphTest, ReduceTest) {
+  V8TestingScope scope;
+  {
+    // Test reduceMean operator with default options.
+    auto* options = MLReduceOptions::Create();
+    ReduceTester<float>{.kind = ReduceKind::kMean,
+                        .input = {.type = V8MLOperandType::Enum::kFloat32,
+                                  .dimensions = {1, 2, 2, 1},
+                                  .values = {1.0, 2.0, 3.0, 4.0}},
+                        .expected = {2.5}}
+        .Test(*this, scope, options);
+  }
+  {
+    // Test reduceMean operator with axes = {1}.
+    auto* options = MLReduceOptions::Create();
+    options->setAxes({1});
+    ReduceTester<float>{.kind = ReduceKind::kMean,
+                        .input = {.type = V8MLOperandType::Enum::kFloat32,
+                                  .dimensions = {2, 2},
+                                  .values = {1.0, 2.0, 3.0, 4.0}},
+                        .expected = {1.5, 3.5}}
+        .Test(*this, scope, options);
+  }
+}
+
+template <typename T>
 struct Resample2dTester {
   OperandInfo<T> input;
   Vector<T> expected;
diff --git a/third_party/blink/renderer/modules/ml/webnn/ml_graph_xnnpack.cc b/third_party/blink/renderer/modules/ml/webnn/ml_graph_xnnpack.cc
index 9ea0a1f..674209e 100644
--- a/third_party/blink/renderer/modules/ml/webnn/ml_graph_xnnpack.cc
+++ b/third_party/blink/renderer/modules/ml/webnn/ml_graph_xnnpack.cc
@@ -26,6 +26,7 @@
 #include "third_party/blink/renderer/bindings/modules/v8/v8_ml_leaky_relu_options.h"
 #include "third_party/blink/renderer/bindings/modules/v8/v8_ml_pad_options.h"
 #include "third_party/blink/renderer/bindings/modules/v8/v8_ml_pool_2d_options.h"
+#include "third_party/blink/renderer/bindings/modules/v8/v8_ml_reduce_options.h"
 #include "third_party/blink/renderer/bindings/modules/v8/v8_ml_resample_2d_options.h"
 #include "third_party/blink/renderer/bindings/modules/v8/v8_ml_split_options.h"
 #include "third_party/blink/renderer/bindings/modules/v8/v8_ml_transpose_options.h"
@@ -1334,6 +1335,51 @@
   return xnn_status_success;
 }
 
+xnn_status DefineXnnNodeForReduce(xnn_subgraph_t subgraph,
+                                  const MLOperator* reduce,
+                                  const OperandValueIdMap& operand_value_id_map,
+                                  String& error_message) {
+  const uint32_t input_id =
+      GetOperatorInputValueId(reduce, operand_value_id_map);
+  const uint32_t output_id =
+      GetOperatorOutputValueId(reduce, operand_value_id_map);
+
+  const MLReduceOptions* options =
+      static_cast<const MLReduceOptions*>(reduce->Options());
+  const auto* input = reduce->Inputs()[0].Get();
+  CHECK(input);
+  const auto input_rank = input->Dimensions().size();
+  Vector<uint32_t> default_axes(input_rank);
+  for (wtf_size_t i = 0; i < input_rank; i++) {
+    default_axes[i] = i;
+  }
+  const Vector<uint32_t> axes = options->getAxesOr(std::move(default_axes));
+  Vector<size_t> reduction_axes(axes.size());
+  base::ranges::transform(axes, reduction_axes.begin(), [](uint32_t value) {
+    return base::checked_cast<size_t>(value);
+  });
+
+  if (options->keepDimensions()) {
+    error_message = "XNNPACK can't support keep dimensions.";
+    return xnn_status_unsupported_parameter;
+  }
+  const uint32_t flags = 0;
+  switch (reduce->Kind()) {
+    case MLOperator::OperatorKind::kReduceMean: {
+      XNN_CHECK_STATUS_AND_SET_ERROR_MESSAGE(xnn_define_static_mean(
+          subgraph, reduction_axes.size(), reduction_axes.data(), input_id,
+          output_id, flags));
+      break;
+    }
+    default: {
+      // Because this method only supports reduceMean currently, it should
+      // already throw unsupported error for other operators.
+      NOTREACHED_NORETURN();
+    }
+  }
+  return xnn_status_success;
+}
+
 xnn_status DefineXnnNodeForRelu(xnn_subgraph_t subgraph,
                                 const MLOperator* relu,
                                 const OperandValueIdMap& operand_value_id_map,
@@ -1730,6 +1776,11 @@
       XNN_CHECK_STATUS(DefineXnnNodeForPRelu(
           subgraph, ml_operator, operand_value_id_map, error_message));
       break;
+      // Define XNNPACK Node for reduction operators.
+    case MLOperator::OperatorKind::kReduceMean:
+      XNN_CHECK_STATUS(DefineXnnNodeForReduce(
+          subgraph, ml_operator, operand_value_id_map, error_message));
+      break;
     case MLOperator::OperatorKind::kRelu:
       XNN_CHECK_STATUS(DefineXnnNodeForRelu(
           subgraph, ml_operator, operand_value_id_map, error_message));
diff --git a/third_party/blink/renderer/modules/webgl/webgl_rendering_context_base.cc b/third_party/blink/renderer/modules/webgl/webgl_rendering_context_base.cc
index 7c6326de..45d0a1e8 100644
--- a/third_party/blink/renderer/modules/webgl/webgl_rendering_context_base.cc
+++ b/third_party/blink/renderer/modules/webgl/webgl_rendering_context_base.cc
@@ -1189,8 +1189,6 @@
       task_runner_(task_runner),
       num_gl_errors_to_console_allowed_(kMaxGLErrorsAllowedToConsole),
       context_type_(context_type),
-      program_completion_queries_(
-          base::LRUCache<WebGLProgram*, GLuint>::NO_AUTO_EVICT),
       number_of_user_allocated_multisampled_renderbuffers_(0) {
   DCHECK(context_provider);
 
@@ -9005,6 +9003,8 @@
   visitor->Trace(texture_units_);
   visitor->Trace(extensions_);
   visitor->Trace(make_xr_compatible_resolver_);
+  visitor->Trace(program_completion_query_list_);
+  visitor->Trace(program_completion_query_map_);
   CanvasRenderingContext::Trace(visitor);
 }
 
@@ -9059,33 +9059,45 @@
 
 void WebGLRenderingContextBase::addProgramCompletionQuery(WebGLProgram* program,
                                                           GLuint query) {
-  auto old_query = program_completion_queries_.Get(program);
-  if (old_query != program_completion_queries_.end()) {
-    ContextGL()->DeleteQueriesEXT(1, &old_query->second);
+  auto old_query = program_completion_query_map_.find(program);
+  if (old_query != program_completion_query_map_.end()) {
+    ContextGL()->DeleteQueriesEXT(1, &old_query->value);
+    // If this program's been inserted into the map already, then it
+    // exists in the list, too. Clear it out from there so that its
+    // new addition doesn't introduce a duplicate.
+    wtf_size_t old_index = program_completion_query_list_.Find(program);
+    DCHECK_NE(old_index, WTF::kNotFound);
+    program_completion_query_list_.EraseAt(old_index);
   }
-  program_completion_queries_.Put(program, query);
-  if (program_completion_queries_.size() > kMaxProgramCompletionQueries) {
-    auto oldest = program_completion_queries_.rbegin();
-    ContextGL()->DeleteQueriesEXT(1, &oldest->second);
-    program_completion_queries_.Erase(oldest);
+  program_completion_query_map_.Set(program, query);
+  program_completion_query_list_.push_back(program);
+  if (program_completion_query_map_.size() > kMaxProgramCompletionQueries) {
+    DCHECK_GT(program_completion_query_list_.size(), 0u);
+    WebGLProgram* program_to_remove = program_completion_query_list_[0];
+    auto program_iter = program_completion_query_map_.find(program_to_remove);
+    DCHECK_NE(program_iter, program_completion_query_map_.end());
+    ContextGL()->DeleteQueriesEXT(1, &program_iter->value);
+    program_completion_query_map_.erase(program_iter);
+    program_completion_query_list_.EraseAt(0);
   }
 }
 
 void WebGLRenderingContextBase::clearProgramCompletionQueries() {
-  for (auto query : program_completion_queries_) {
-    ContextGL()->DeleteQueriesEXT(1, &query.second);
+  for (auto iter : program_completion_query_map_) {
+    ContextGL()->DeleteQueriesEXT(1, &iter.value);
   }
-  program_completion_queries_.Clear();
+  program_completion_query_map_.clear();
+  program_completion_query_list_.clear();
 }
 
 bool WebGLRenderingContextBase::checkProgramCompletionQueryAvailable(
     WebGLProgram* program,
     bool* completed) {
   GLuint id = 0;
-  auto found = program_completion_queries_.Get(program);
-  if (found != program_completion_queries_.end()) {
-    id = found->second;
-    GLuint available;
+  auto found = program_completion_query_map_.find(program);
+  if (found != program_completion_query_map_.end()) {
+    id = found->value;
+    GLuint available = 0;
     ContextGL()->GetQueryObjectuivEXT(id, GL_QUERY_RESULT_AVAILABLE,
                                       &available);
     if (available) {
diff --git a/third_party/blink/renderer/modules/webgl/webgl_rendering_context_base.h b/third_party/blink/renderer/modules/webgl/webgl_rendering_context_base.h
index 771f4dc0..156224f3 100644
--- a/third_party/blink/renderer/modules/webgl/webgl_rendering_context_base.h
+++ b/third_party/blink/renderer/modules/webgl/webgl_rendering_context_base.h
@@ -29,7 +29,6 @@
 #include <memory>
 
 #include "base/check_op.h"
-#include "base/containers/lru_cache.h"
 #include "base/memory/raw_ptr_exclusion.h"
 #include "base/numerics/checked_math.h"
 #include "base/task/single_thread_task_runner.h"
@@ -58,6 +57,8 @@
 #include "third_party/blink/renderer/platform/graphics/gpu/drawing_buffer.h"
 #include "third_party/blink/renderer/platform/graphics/gpu/extensions_3d_util.h"
 #include "third_party/blink/renderer/platform/graphics/gpu/webgl_image_conversion.h"
+#include "third_party/blink/renderer/platform/heap/collection_support/heap_hash_map.h"
+#include "third_party/blink/renderer/platform/heap/collection_support/heap_vector.h"
 #include "third_party/blink/renderer/platform/scheduler/public/frame_or_worker_scheduler.h"
 #include "third_party/blink/renderer/platform/timer.h"
 #include "third_party/blink/renderer/platform/wtf/text/wtf_string.h"
@@ -2000,7 +2001,13 @@
   bool checkProgramCompletionQueryAvailable(WebGLProgram* program,
                                             bool* completed);
   static constexpr unsigned int kMaxProgramCompletionQueries = 128u;
-  base::LRUCache<WebGLProgram*, GLuint> program_completion_queries_;
+
+  // Support for KHR_parallel_shader_compile.
+  //
+  // TODO(crbug.com/1474141): once a HeapLinkedHashMap is available,
+  // convert these two fields to use that instead.
+  HeapVector<Member<WebGLProgram>> program_completion_query_list_;
+  HeapHashMap<Member<WebGLProgram>, GLuint> program_completion_query_map_;
 
   int number_of_user_allocated_multisampled_renderbuffers_;
 
diff --git a/third_party/blink/renderer/modules/webgpu/gpu_adapter.cc b/third_party/blink/renderer/modules/webgpu/gpu_adapter.cc
index c4a6abc..889815a 100644
--- a/third_party/blink/renderer/modules/webgpu/gpu_adapter.cc
+++ b/third_party/blink/renderer/modules/webgpu/gpu_adapter.cc
@@ -277,11 +277,7 @@
     required_features.AppendRange(required_features_set.begin(),
                                   required_features_set.end());
     dawn_desc.requiredFeatures = required_features.data();
-#ifdef WGPU_BREAKING_CHANGE_COUNT_RENAME
     dawn_desc.requiredFeatureCount = required_features.size();
-#else
-    dawn_desc.requiredFeaturesCount = required_features.size();
-#endif
   }
 
   auto* callback = BindWGPUOnceCallback(
diff --git a/third_party/blink/renderer/modules/webgpu/gpu_query_set.cc b/third_party/blink/renderer/modules/webgpu/gpu_query_set.cc
index f75afb0..5cc4980 100644
--- a/third_party/blink/renderer/modules/webgpu/gpu_query_set.cc
+++ b/third_party/blink/renderer/modules/webgpu/gpu_query_set.cc
@@ -27,12 +27,7 @@
     pipeline_statistics = AsDawnEnum<WGPUPipelineStatisticName>(
         webgpu_desc->pipelineStatistics());
     dawn_desc.pipelineStatistics = pipeline_statistics.get();
-#ifdef WGPU_BREAKING_CHANGE_COUNT_RENAME
     dawn_desc.pipelineStatisticCount = webgpu_desc->pipelineStatistics().size();
-#else
-    dawn_desc.pipelineStatisticsCount =
-        webgpu_desc->pipelineStatistics().size();
-#endif
   }
 
   std::string label;
diff --git a/third_party/blink/renderer/modules/webgpu/gpu_render_bundle_encoder.cc b/third_party/blink/renderer/modules/webgpu/gpu_render_bundle_encoder.cc
index e7724de..c1a62f6 100644
--- a/third_party/blink/renderer/modules/webgpu/gpu_render_bundle_encoder.cc
+++ b/third_party/blink/renderer/modules/webgpu/gpu_render_bundle_encoder.cc
@@ -47,11 +47,7 @@
   std::string label;
   WGPURenderBundleEncoderDescriptor dawn_desc = {};
   dawn_desc.nextInChain = nullptr;
-#ifdef WGPU_BREAKING_CHANGE_COUNT_RENAME
   dawn_desc.colorFormatCount = color_formats_count;
-#else
-  dawn_desc.colorFormatsCount = color_formats_count;
-#endif
   dawn_desc.colorFormats = color_formats.get();
   dawn_desc.depthStencilFormat = depth_stencil_format;
   dawn_desc.sampleCount = webgpu_desc->sampleCount();
diff --git a/third_party/blink/renderer/platform/geometry/layout_rect.cc b/third_party/blink/renderer/platform/geometry/layout_rect.cc
index ecdc6b2..4d3ee01 100644
--- a/third_party/blink/renderer/platform/geometry/layout_rect.cc
+++ b/third_party/blink/renderer/platform/geometry/layout_rect.cc
@@ -30,143 +30,19 @@
 
 #include "third_party/blink/renderer/platform/geometry/layout_rect.h"
 
-#include <stdio.h>
-#include <algorithm>
 #include "third_party/blink/renderer/platform/geometry/layout_unit.h"
-#include "third_party/blink/renderer/platform/wtf/text/text_stream.h"
 #include "third_party/blink/renderer/platform/wtf/text/wtf_string.h"
-#include "ui/gfx/geometry/rect_f.h"
 
 namespace blink {
 
-bool LayoutRect::Intersects(const LayoutRect& other) const {
-  // Checking emptiness handles negative widths as well as zero.
-  return !IsEmpty() && !other.IsEmpty() && X() < other.MaxX() &&
-         other.X() < MaxX() && Y() < other.MaxY() && other.Y() < MaxY();
-}
-
-bool LayoutRect::Contains(const LayoutRect& other) const {
-  return X() <= other.X() && MaxX() >= other.MaxX() && Y() <= other.Y() &&
-         MaxY() >= other.MaxY();
-}
-
-void LayoutRect::Intersect(const LayoutRect& other) {
-  LayoutPoint new_location(std::max(X(), other.X()), std::max(Y(), other.Y()));
-  LayoutPoint new_max_point(std::min(MaxX(), other.MaxX()),
-                            std::min(MaxY(), other.MaxY()));
-
-  // Return a clean empty rectangle for non-intersecting cases.
-  if (new_location.X() >= new_max_point.X() ||
-      new_location.Y() >= new_max_point.Y()) {
-    new_location = LayoutPoint();
-    new_max_point = LayoutPoint();
-  }
-
-  location_ = new_location;
-  size_ = new_max_point - new_location;
-}
-
-bool LayoutRect::InclusiveIntersect(const LayoutRect& other) {
-  LayoutPoint new_location(std::max(X(), other.X()), std::max(Y(), other.Y()));
-  LayoutPoint new_max_point(std::min(MaxX(), other.MaxX()),
-                            std::min(MaxY(), other.MaxY()));
-
-  if (new_location.X() > new_max_point.X() ||
-      new_location.Y() > new_max_point.Y()) {
-    *this = LayoutRect();
-    return false;
-  }
-
-  location_ = new_location;
-  size_ = new_max_point - new_location;
-  return true;
-}
-
-bool LayoutRect::IntersectsInclusively(const LayoutRect& other) {
-  // TODO(pdr): How should negative widths or heights be handled?
-  return X() <= other.MaxX() && other.X() <= MaxX() && Y() <= other.MaxY() &&
-         other.Y() <= MaxY();
-}
-
-void LayoutRect::Unite(const LayoutRect& other) {
-  // Handle empty special cases first.
-  if (other.IsEmpty())
-    return;
-  if (IsEmpty()) {
-    *this = other;
-    return;
-  }
-
-  UniteEvenIfEmpty(other);
-}
-
-void LayoutRect::UniteIfNonZero(const LayoutRect& other) {
-  // Handle empty special cases first.
-  if (!other.Width() && !other.Height())
-    return;
-  if (!Width() && !Height()) {
-    *this = other;
-    return;
-  }
-
-  UniteEvenIfEmpty(other);
-}
-
-void LayoutRect::UniteEvenIfEmpty(const LayoutRect& other) {
-  LayoutPoint new_location(std::min(X(), other.X()), std::min(Y(), other.Y()));
-  LayoutPoint new_max_point(std::max(MaxX(), other.MaxX()),
-                            std::max(MaxY(), other.MaxY()));
-
-  size_ = new_max_point - new_location;
-  location_ = new_max_point - size_;
-}
-
-void LayoutRect::Scale(float s) {
-  location_.Scale(s, s);
-  size_.Scale(s);
-}
-
-void LayoutRect::Scale(float x_axis_scale, float y_axis_scale) {
-  location_.Scale(x_axis_scale, y_axis_scale);
-  size_.Scale(x_axis_scale, y_axis_scale);
-}
-
-LayoutRect UnionRect(const Vector<LayoutRect>& rects) {
-  LayoutRect result;
-
-  for (const LayoutRect& rect : rects)
-    result.Unite(rect);
-
-  return result;
-}
-
-LayoutRect UnionRectEvenIfEmpty(const Vector<LayoutRect>& rects) {
-  wtf_size_t count = rects.size();
-  if (!count)
-    return LayoutRect();
-
-  LayoutRect result = rects[0];
-  for (wtf_size_t i = 1; i < count; ++i)
-    result.UniteEvenIfEmpty(rects[i]);
-
-  return result;
-}
-
-std::ostream& operator<<(std::ostream& ostream, const LayoutRect& rect) {
+std::ostream& operator<<(std::ostream& ostream,
+                         const DeprecatedLayoutRect& rect) {
   return ostream << rect.ToString();
 }
 
-String LayoutRect::ToString() const {
+String DeprecatedLayoutRect::ToString() const {
   return String::Format("%s %s", Location().ToString().Ascii().c_str(),
-                        Size().ToString().Ascii().c_str());
-}
-
-WTF::TextStream& operator<<(WTF::TextStream& ts, const LayoutRect& r) {
-  ts << "at (" << WTF::TextStream::FormatNumberRespectingIntegers(r.X());
-  ts << "," << WTF::TextStream::FormatNumberRespectingIntegers(r.Y());
-  ts << ") size " << WTF::TextStream::FormatNumberRespectingIntegers(r.Width());
-  ts << "x" << WTF::TextStream::FormatNumberRespectingIntegers(r.Height());
-  return ts;
+                        size_.ToString().Ascii().c_str());
 }
 
 }  // namespace blink
diff --git a/third_party/blink/renderer/platform/geometry/layout_rect.h b/third_party/blink/renderer/platform/geometry/layout_rect.h
index 7885af19..e42f045d 100644
--- a/third_party/blink/renderer/platform/geometry/layout_rect.h
+++ b/third_party/blink/renderer/platform/geometry/layout_rect.h
@@ -43,32 +43,24 @@
 
 namespace blink {
 
-class PLATFORM_EXPORT LayoutRect {
+// This class is deprecated. Use PhysicalRect or LogicalRect instead.
+class PLATFORM_EXPORT DeprecatedLayoutRect {
   DISALLOW_NEW();
 
  public:
-  constexpr LayoutRect() = default;
-  constexpr LayoutRect(const LayoutPoint& location,
-                       const DeprecatedLayoutSize& size)
+  constexpr DeprecatedLayoutRect() = default;
+  constexpr DeprecatedLayoutRect(const LayoutPoint& location,
+                                 const DeprecatedLayoutSize& size)
       : location_(location), size_(size) {}
-  constexpr LayoutRect(LayoutUnit x,
-                       LayoutUnit y,
-                       LayoutUnit width,
-                       LayoutUnit height)
+  constexpr DeprecatedLayoutRect(LayoutUnit x,
+                                 LayoutUnit y,
+                                 LayoutUnit width,
+                                 LayoutUnit height)
       : location_(LayoutPoint(x, y)),
         size_(DeprecatedLayoutSize(width, height)) {}
-  constexpr LayoutRect(int x, int y, int width, int height)
+  constexpr DeprecatedLayoutRect(int x, int y, int width, int height)
       : location_(LayoutPoint(x, y)),
         size_(DeprecatedLayoutSize(width, height)) {}
-  constexpr LayoutRect(const gfx::Point& location, const gfx::Size& size)
-      : location_(location), size_(size) {}
-  constexpr explicit LayoutRect(const gfx::Rect& rect)
-      : location_(rect.origin()), size_(rect.size()) {}
-
-  // Don't do these implicitly since they are lossy.
-  constexpr explicit LayoutRect(const gfx::RectF& r)
-      : location_(r.origin()), size_(r.size()) {}
-
   constexpr explicit operator gfx::RectF() const {
     return gfx::RectF(X(), Y(), Width(), Height());
   }
@@ -76,18 +68,9 @@
   // This is deleted to avoid unwanted lossy conversion from float or double to
   // LayoutUnit or int. Use explicit LayoutUnit constructor for each parameter
   // instead.
-  LayoutRect(double, double, double, double) = delete;
+  DeprecatedLayoutRect(double, double, double, double) = delete;
 
   constexpr LayoutPoint Location() const { return location_; }
-  constexpr DeprecatedLayoutSize Size() const { return size_; }
-
-  gfx::Point PixelSnappedLocation() const { return ToRoundedPoint(location_); }
-  gfx::Size PixelSnappedSize() const {
-    return gfx::Size(SnapSizeToPixel(size_.Width(), location_.X()),
-                     SnapSizeToPixel(size_.Height(), location_.Y()));
-  }
-
-  void SetLocation(const LayoutPoint& location) { location_ = location; }
 
   ALWAYS_INLINE constexpr LayoutUnit X() const { return location_.X(); }
   ALWAYS_INLINE constexpr LayoutUnit Y() const { return location_.Y(); }
@@ -96,164 +79,9 @@
   constexpr LayoutUnit Width() const { return size_.Width(); }
   constexpr LayoutUnit Height() const { return size_.Height(); }
 
-  int PixelSnappedWidth() const { return SnapSizeToPixel(Width(), X()); }
-  int PixelSnappedHeight() const { return SnapSizeToPixel(Height(), Y()); }
-
-  void SetX(LayoutUnit x) { location_.SetX(x); }
-  void SetY(LayoutUnit y) { location_.SetY(y); }
-  void SetWidth(LayoutUnit width) { size_.SetWidth(width); }
-  void SetHeight(LayoutUnit height) { size_.SetHeight(height); }
-
-  ALWAYS_INLINE constexpr bool IsEmpty() const { return size_.IsEmpty(); }
-
-  // NOTE: The result is rounded to integer values, and thus may be not the
-  // exact center point.
-  LayoutPoint Center() const {
-    return LayoutPoint(X() + Width() / 2, Y() + Height() / 2);
-  }
-
-  void Move(const DeprecatedLayoutSize& size) { location_ += size; }
-  void Move(const gfx::Vector2d& offset) {
-    location_.Move(LayoutUnit(offset.x()), LayoutUnit(offset.y()));
-  }
   void MoveBy(const LayoutPoint& offset) {
     location_.Move(offset.X(), offset.Y());
   }
-  void Move(LayoutUnit dx, LayoutUnit dy) { location_.Move(dx, dy); }
-  void Move(int dx, int dy) { location_.Move(LayoutUnit(dx), LayoutUnit(dy)); }
-
-  void Expand(const DeprecatedLayoutSize& size) { size_ += size; }
-  void Expand(LayoutUnit dw, LayoutUnit dh) { size_.Expand(dw, dh); }
-  void ExpandEdges(LayoutUnit top,
-                   LayoutUnit right,
-                   LayoutUnit bottom,
-                   LayoutUnit left) {
-    location_.Move(-left, -top);
-    size_.Expand(left + right, top + bottom);
-  }
-  void Contract(LayoutUnit dw, LayoutUnit dh) { size_.Expand(-dw, -dh); }
-  void Contract(int dw, int dh) { size_.Expand(-dw, -dh); }
-  void ContractEdges(LayoutUnit top,
-                     LayoutUnit right,
-                     LayoutUnit bottom,
-                     LayoutUnit left) {
-    location_.Move(left, top);
-    size_.Shrink(left + right, top + bottom);
-  }
-
-  void ShiftXEdgeTo(LayoutUnit edge) {
-    LayoutUnit delta = edge - X();
-    SetX(edge);
-    SetWidth((Width() - delta).ClampNegativeToZero());
-  }
-  void ShiftMaxXEdgeTo(LayoutUnit edge) {
-    LayoutUnit delta = edge - MaxX();
-    SetWidth((Width() + delta).ClampNegativeToZero());
-  }
-  void ShiftYEdgeTo(LayoutUnit edge) {
-    LayoutUnit delta = edge - Y();
-    SetY(edge);
-    SetHeight((Height() - delta).ClampNegativeToZero());
-  }
-  void ShiftMaxYEdgeTo(LayoutUnit edge) {
-    LayoutUnit delta = edge - MaxY();
-    SetHeight((Height() + delta).ClampNegativeToZero());
-  }
-
-  // Typically top left.
-  constexpr LayoutPoint MinXMinYCorner() const { return location_; }
-
-  // Typically top right.
-  LayoutPoint MaxXMinYCorner() const {
-    return LayoutPoint(location_.X() + size_.Width(), location_.Y());
-  }
-
-  // Typically bottom left.
-  LayoutPoint MinXMaxYCorner() const {
-    return LayoutPoint(location_.X(), location_.Y() + size_.Height());
-  }
-
-  // Typically bottom right.
-  LayoutPoint MaxXMaxYCorner() const {
-    return LayoutPoint(location_.X() + size_.Width(),
-                       location_.Y() + size_.Height());
-  }
-
-  [[nodiscard]] bool Intersects(const LayoutRect&) const;
-  bool Contains(const LayoutRect&) const;
-
-  // This checks to see if the rect contains x,y in the traditional sense.
-  // Equivalent to checking if the rect contains a 1x1 rect below and to the
-  // right of (px,py).
-  bool Contains(LayoutUnit px, LayoutUnit py) const {
-    return px >= X() && px < MaxX() && py >= Y() && py < MaxY();
-  }
-  bool Contains(const LayoutPoint& point) const {
-    return Contains(point.X(), point.Y());
-  }
-
-  // Whether all edges of the rect are at full-pixel boundaries.
-  // i.e.: ToEnclosingRect(this)) == this
-  bool EdgesOnPixelBoundaries() const {
-    return !location_.X().HasFraction() && !location_.Y().HasFraction() &&
-           !size_.Width().HasFraction() && !size_.Height().HasFraction();
-  }
-
-  // Expand each edge outwards to the next full-pixel boundary.
-  // i.e.: this = LayoutRect(ToEnclosingRect(this))
-  void ExpandEdgesToPixelBoundaries() {
-    int x = X().Floor();
-    int y = Y().Floor();
-    int max_x = MaxX().Ceil();
-    int max_y = MaxY().Ceil();
-    location_.SetX(LayoutUnit(x));
-    location_.SetY(LayoutUnit(y));
-    size_.SetWidth(LayoutUnit(max_x - x));
-    size_.SetHeight(LayoutUnit(max_y - y));
-  }
-
-  void Intersect(const LayoutRect&);
-  void Unite(const LayoutRect&);
-  void UniteIfNonZero(const LayoutRect&);
-
-  // Set this rect to be the intersection of itself and the argument rect
-  // using edge-inclusive geometry.  If the two rectangles overlap but the
-  // overlap region is zero-area (either because one of the two rectangles
-  // is zero-area, or because the rectangles overlap at an edge or a corner),
-  // the result is the zero-area intersection.  The return value indicates
-  // whether the two rectangle actually have an intersection, since checking
-  // the result for isEmpty() is not conclusive.
-  bool InclusiveIntersect(const LayoutRect&);
-
-  // Similar to |Intersects| but inclusive (see also: |InclusiveIntersect|).
-  // For example, (0,0 10x10) would inclusively intersect (10,10 0x0) even
-  // though the intersection has zero area and |Intersects| would be false.
-  bool IntersectsInclusively(const LayoutRect&);
-
-  // Besides non-empty rects, this method also unites empty rects (as points or
-  // line segments).  For example, union of (100, 100, 0x0) and (200, 200, 50x0)
-  // is (100, 100, 150x100).
-  void UniteEvenIfEmpty(const LayoutRect&);
-
-  void InflateX(LayoutUnit dx) {
-    location_.SetX(location_.X() - dx);
-    size_.SetWidth(size_.Width() + dx + dx);
-  }
-  void InflateY(LayoutUnit dy) {
-    location_.SetY(location_.Y() - dy);
-    size_.SetHeight(size_.Height() + dy + dy);
-  }
-  void Inflate(LayoutUnit d) {
-    InflateX(d);
-    InflateY(d);
-  }
-  void Inflate(int d) { Inflate(LayoutUnit(d)); }
-  void Scale(float s);
-  void Scale(float x_axis_scale, float y_axis_scale);
-
-  LayoutRect TransposedRect() const {
-    return LayoutRect(location_.TransposedPoint(), size_.TransposedSize());
-  }
 
   String ToString() const;
 
@@ -262,66 +90,14 @@
   DeprecatedLayoutSize size_;
 };
 
-inline LayoutRect Intersection(const LayoutRect& a, const LayoutRect& b) {
-  LayoutRect c = a;
-  c.Intersect(b);
-  return c;
-}
-
-inline LayoutRect UnionRect(const LayoutRect& a, const LayoutRect& b) {
-  LayoutRect c = a;
-  c.Unite(b);
-  return c;
-}
-
-PLATFORM_EXPORT LayoutRect UnionRect(const Vector<LayoutRect>&);
-
-inline LayoutRect UnionRectEvenIfEmpty(const LayoutRect& a,
-                                       const LayoutRect& b) {
-  LayoutRect c = a;
-  c.UniteEvenIfEmpty(b);
-  return c;
-}
-
-PLATFORM_EXPORT LayoutRect UnionRectEvenIfEmpty(const Vector<LayoutRect>&);
-
-ALWAYS_INLINE constexpr bool operator==(const LayoutRect& a,
-                                        const LayoutRect& b) {
-  return a.Location() == b.Location() && a.Size() == b.Size();
-}
-
-constexpr bool operator!=(const LayoutRect& a, const LayoutRect& b) {
-  return !(a == b);
-}
-
-inline gfx::Rect ToPixelSnappedRect(const LayoutRect& rect) {
+inline gfx::Rect ToPixelSnappedRect(const DeprecatedLayoutRect& rect) {
   return gfx::Rect(ToRoundedPoint(rect.Location()),
                    gfx::Size(SnapSizeToPixel(rect.Width(), rect.X()),
                              SnapSizeToPixel(rect.Height(), rect.Y())));
 }
 
-inline gfx::Rect ToEnclosingRect(const LayoutRect& rect) {
-  gfx::Point location = ToFlooredPoint(rect.MinXMinYCorner());
-  gfx::Point max_point = ToCeiledPoint(rect.MaxXMaxYCorner());
-  // Because the range of LayoutUnit is much smaller than int, the following
-  // '-' operations can never overflow, so no clamping is needed.
-  // TODO(1261553): We can have a special version of gfx::Rect constructor that
-  // skips internal clamping to improve performance.
-  return gfx::Rect(location.x(), location.y(), max_point.x() - location.x(),
-                   max_point.y() - location.y());
-}
-
-inline LayoutRect EnclosingLayoutRect(const gfx::RectF& rect) {
-  LayoutUnit x = LayoutUnit::FromFloatFloor(rect.x());
-  LayoutUnit y = LayoutUnit::FromFloatFloor(rect.y());
-  LayoutUnit max_x = LayoutUnit::FromFloatCeil(rect.right());
-  LayoutUnit max_y = LayoutUnit::FromFloatCeil(rect.bottom());
-  return LayoutRect(x, y, max_x - x, max_y - y);
-}
-
-PLATFORM_EXPORT std::ostream& operator<<(std::ostream&, const LayoutRect&);
-PLATFORM_EXPORT WTF::TextStream& operator<<(WTF::TextStream&,
-                                            const LayoutRect&);
+PLATFORM_EXPORT std::ostream& operator<<(std::ostream&,
+                                         const DeprecatedLayoutRect&);
 
 }  // namespace blink
 
diff --git a/third_party/blink/renderer/platform/geometry/layout_rect_test.cc b/third_party/blink/renderer/platform/geometry/layout_rect_test.cc
index 6887592..ea69435 100644
--- a/third_party/blink/renderer/platform/geometry/layout_rect_test.cc
+++ b/third_party/blink/renderer/platform/geometry/layout_rect_test.cc
@@ -10,288 +10,16 @@
 
 namespace blink {
 
-TEST(LayoutRectTest, ToString) {
-  LayoutRect empty_rect = LayoutRect();
+TEST(DeprecatedLayoutRectTest, ToString) {
+  DeprecatedLayoutRect empty_rect = DeprecatedLayoutRect();
   EXPECT_EQ("0,0 0x0", empty_rect.ToString());
 
-  LayoutRect rect(1, 2, 3, 4);
+  DeprecatedLayoutRect rect(1, 2, 3, 4);
   EXPECT_EQ("1,2 3x4", rect.ToString());
 
-  LayoutRect granular_rect(LayoutUnit(1.6f), LayoutUnit(2.7f), LayoutUnit(3.8f),
-                           LayoutUnit(4.9f));
+  DeprecatedLayoutRect granular_rect(LayoutUnit(1.6f), LayoutUnit(2.7f),
+                                     LayoutUnit(3.8f), LayoutUnit(4.9f));
   EXPECT_EQ("1.59375,2.6875 3.796875x4.890625", granular_rect.ToString());
 }
 
-TEST(LayoutRectTest, InclusiveIntersect) {
-  LayoutRect rect(11, 12, 0, 0);
-  EXPECT_TRUE(rect.InclusiveIntersect(LayoutRect(11, 12, 13, 14)));
-  EXPECT_EQ(rect, LayoutRect(11, 12, 0, 0));
-
-  rect = LayoutRect(11, 12, 13, 14);
-  EXPECT_TRUE(rect.InclusiveIntersect(LayoutRect(24, 8, 0, 7)));
-  EXPECT_EQ(rect, LayoutRect(24, 12, 0, 3));
-
-  rect = LayoutRect(11, 12, 13, 14);
-  EXPECT_TRUE(rect.InclusiveIntersect(LayoutRect(9, 15, 4, 0)));
-  EXPECT_EQ(rect, LayoutRect(11, 15, 2, 0));
-
-  rect = LayoutRect(11, 12, 0, 14);
-  EXPECT_FALSE(rect.InclusiveIntersect(LayoutRect(12, 13, 15, 16)));
-  EXPECT_EQ(rect, LayoutRect());
-}
-
-TEST(LayoutRectTest, IntersectsInclusively) {
-  LayoutRect a(11, 12, 0, 0);
-  LayoutRect b(11, 12, 13, 14);
-  // An empty rect can have inclusive intersection.
-  EXPECT_TRUE(a.IntersectsInclusively(b));
-  EXPECT_TRUE(b.IntersectsInclusively(a));
-
-  a = LayoutRect(11, 12, 13, 14);
-  b = LayoutRect(24, 8, 0, 7);
-  // Intersecting left side is sufficient for inclusive intersection.
-  EXPECT_TRUE(a.IntersectsInclusively(b));
-  EXPECT_TRUE(b.IntersectsInclusively(a));
-
-  a = LayoutRect(11, 12, 13, 14);
-  b = LayoutRect(0, 26, 13, 8);
-  // Intersecting bottom side is sufficient for inclusive intersection.
-  EXPECT_TRUE(a.IntersectsInclusively(b));
-  EXPECT_TRUE(b.IntersectsInclusively(a));
-
-  a = LayoutRect(11, 12, 0, 0);
-  b = LayoutRect(11, 12, 0, 0);
-  // Two empty rects can intersect inclusively.
-  EXPECT_TRUE(a.IntersectsInclusively(b));
-  EXPECT_TRUE(b.IntersectsInclusively(a));
-
-  a = LayoutRect(10, 10, 10, 10);
-  b = LayoutRect(20, 20, 10, 10);
-  // Two rects can intersect inclusively at a single point.
-  EXPECT_TRUE(a.IntersectsInclusively(b));
-  EXPECT_TRUE(b.IntersectsInclusively(a));
-
-  a = LayoutRect(11, 12, 0, 0);
-  b = LayoutRect(20, 21, 0, 0);
-  // Two empty rects that do not touch do not intersect.
-  EXPECT_FALSE(a.IntersectsInclusively(b));
-  EXPECT_FALSE(b.IntersectsInclusively(a));
-
-  a = LayoutRect(11, 12, 5, 5);
-  b = LayoutRect(20, 21, 0, 0);
-  // A rect that does not touch a point does not intersect.
-  EXPECT_FALSE(a.IntersectsInclusively(b));
-  EXPECT_FALSE(b.IntersectsInclusively(a));
-}
-
-TEST(LayoutRectTest, ToEnclosingRect) {
-  LayoutUnit small;
-  small.SetRawValue(1);
-  LayoutRect small_dimensions_rect(LayoutUnit(42.5f), LayoutUnit(84.5f), small,
-                                   small);
-  EXPECT_EQ(gfx::Rect(42, 84, 1, 1), ToEnclosingRect(small_dimensions_rect));
-
-  LayoutRect integral_rect(gfx::Rect(100, 150, 200, 350));
-  EXPECT_EQ(gfx::Rect(100, 150, 200, 350), ToEnclosingRect(integral_rect));
-
-  LayoutRect fractional_pos_rect(LayoutUnit(100.6f), LayoutUnit(150.8f),
-                                 LayoutUnit(200), LayoutUnit(350));
-  EXPECT_EQ(gfx::Rect(100, 150, 201, 351),
-            ToEnclosingRect(fractional_pos_rect));
-
-  LayoutRect fractional_dimensions_rect(LayoutUnit(100), LayoutUnit(150),
-                                        LayoutUnit(200.6f), LayoutUnit(350.4f));
-  EXPECT_EQ(gfx::Rect(100, 150, 201, 351),
-            ToEnclosingRect(fractional_dimensions_rect));
-
-  LayoutRect fractional_both_rect1(LayoutUnit(100.6f), LayoutUnit(150.8f),
-                                   LayoutUnit(200.4f), LayoutUnit(350.2f));
-  EXPECT_EQ(gfx::Rect(100, 150, 201, 351),
-            ToEnclosingRect(fractional_both_rect1));
-
-  LayoutRect fractional_both_rect2(LayoutUnit(100.5f), LayoutUnit(150.7f),
-                                   LayoutUnit(200.3f), LayoutUnit(350.3f));
-  EXPECT_EQ(gfx::Rect(100, 150, 201, 351),
-            ToEnclosingRect(fractional_both_rect2));
-
-  LayoutRect fractional_both_rect3(LayoutUnit(100.3f), LayoutUnit(150.2f),
-                                   LayoutUnit(200.8f), LayoutUnit(350.9f));
-  EXPECT_EQ(gfx::Rect(100, 150, 202, 352),
-            ToEnclosingRect(fractional_both_rect3));
-
-  LayoutRect fractional_negpos_rect1(LayoutUnit(-100.4f), LayoutUnit(-150.8f),
-                                     LayoutUnit(200), LayoutUnit(350));
-  EXPECT_EQ(gfx::Rect(-101, -151, 201, 351),
-            ToEnclosingRect(fractional_negpos_rect1));
-
-  LayoutRect fractional_negpos_rect2(LayoutUnit(-100.5f), LayoutUnit(-150.7f),
-                                     LayoutUnit(199.4f), LayoutUnit(350.3f));
-  EXPECT_EQ(gfx::Rect(-101, -151, 200, 351),
-            ToEnclosingRect(fractional_negpos_rect2));
-
-  LayoutRect fractional_negpos_rect3(LayoutUnit(-100.3f), LayoutUnit(-150.2f),
-                                     LayoutUnit(199.6f), LayoutUnit(350.3f));
-  EXPECT_EQ(gfx::Rect(-101, -151, 201, 352),
-            ToEnclosingRect(fractional_negpos_rect3));
-}
-
-TEST(LayoutRectTest, EdgesOnPixelBoundaries) {
-  EXPECT_TRUE(LayoutRect().EdgesOnPixelBoundaries());
-  EXPECT_TRUE(
-      LayoutRect(LayoutUnit(1), LayoutUnit(1), LayoutUnit(1), LayoutUnit(1))
-          .EdgesOnPixelBoundaries());
-  EXPECT_TRUE(
-      LayoutRect(LayoutUnit(1), LayoutUnit(-1), LayoutUnit(1), LayoutUnit(1))
-          .EdgesOnPixelBoundaries());
-  EXPECT_TRUE(
-      LayoutRect(LayoutUnit(-1), LayoutUnit(10), LayoutUnit(10), LayoutUnit(0))
-          .EdgesOnPixelBoundaries());
-  EXPECT_TRUE(
-      LayoutRect(LayoutUnit(-5), LayoutUnit(-7), LayoutUnit(10), LayoutUnit(7))
-          .EdgesOnPixelBoundaries());
-  EXPECT_TRUE(
-      LayoutRect(LayoutUnit(10), LayoutUnit(5), LayoutUnit(-2), LayoutUnit(-3))
-          .EdgesOnPixelBoundaries());
-  EXPECT_TRUE(
-      LayoutRect(LayoutUnit(1.0f), LayoutUnit(5), LayoutUnit(10), LayoutUnit(3))
-          .EdgesOnPixelBoundaries());
-
-  EXPECT_FALSE(
-      LayoutRect(LayoutUnit(9.3f), LayoutUnit(5), LayoutUnit(10), LayoutUnit(3))
-          .EdgesOnPixelBoundaries());
-  EXPECT_FALSE(
-      LayoutRect(LayoutUnit(0.5f), LayoutUnit(5), LayoutUnit(10), LayoutUnit(3))
-          .EdgesOnPixelBoundaries());
-  EXPECT_FALSE(LayoutRect(LayoutUnit(-0.5f), LayoutUnit(-5), LayoutUnit(10),
-                          LayoutUnit(3))
-                   .EdgesOnPixelBoundaries());
-  EXPECT_FALSE(LayoutRect(LayoutUnit(-0.5f), LayoutUnit(-2), LayoutUnit(10),
-                          LayoutUnit(3))
-                   .EdgesOnPixelBoundaries());
-  EXPECT_FALSE(LayoutRect(LayoutUnit(-0.5f), LayoutUnit(5.1f), LayoutUnit(10),
-                          LayoutUnit(3))
-                   .EdgesOnPixelBoundaries());
-  EXPECT_FALSE(
-      LayoutRect(LayoutUnit(3), LayoutUnit(5.1f), LayoutUnit(10), LayoutUnit(3))
-          .EdgesOnPixelBoundaries());
-  EXPECT_FALSE(
-      LayoutRect(LayoutUnit(3), LayoutUnit(5), LayoutUnit(10.2f), LayoutUnit(3))
-          .EdgesOnPixelBoundaries());
-  EXPECT_FALSE(
-      LayoutRect(LayoutUnit(3), LayoutUnit(5), LayoutUnit(10), LayoutUnit(0.3f))
-          .EdgesOnPixelBoundaries());
-}
-
-TEST(LayoutRectTest, ExpandEdgesToPixelBoundaries) {
-  LayoutUnit small;
-  small.SetRawValue(1);
-  LayoutRect small_dimensions_rect(LayoutUnit(42.5f), LayoutUnit(84.5f), small,
-                                   small);
-  small_dimensions_rect.ExpandEdgesToPixelBoundaries();
-  EXPECT_EQ(LayoutRect(gfx::Rect(42, 84, 1, 1)), small_dimensions_rect);
-
-  LayoutRect integral_rect(gfx::Rect(100, 150, 200, 350));
-  integral_rect.ExpandEdgesToPixelBoundaries();
-  EXPECT_EQ(LayoutRect(gfx::Rect(100, 150, 200, 350)), integral_rect);
-
-  LayoutRect fractional_pos_rect(LayoutUnit(100.6f), LayoutUnit(150.8f),
-                                 LayoutUnit(200), LayoutUnit(350));
-  fractional_pos_rect.ExpandEdgesToPixelBoundaries();
-  EXPECT_EQ(LayoutRect(gfx::Rect(100, 150, 201, 351)), fractional_pos_rect);
-
-  LayoutRect fractional_dimensions_rect(LayoutUnit(100), LayoutUnit(150),
-                                        LayoutUnit(200.6f), LayoutUnit(350.4f));
-  fractional_dimensions_rect.ExpandEdgesToPixelBoundaries();
-  EXPECT_EQ(LayoutRect(gfx::Rect(100, 150, 201, 351)),
-            fractional_dimensions_rect);
-
-  LayoutRect fractional_both_rect1(LayoutUnit(100.6f), LayoutUnit(150.8f),
-                                   LayoutUnit(200.4f), LayoutUnit(350.2f));
-  fractional_both_rect1.ExpandEdgesToPixelBoundaries();
-  EXPECT_EQ(LayoutRect(gfx::Rect(100, 150, 201, 351)), fractional_both_rect1);
-
-  LayoutRect fractional_both_rect2(LayoutUnit(100.5f), LayoutUnit(150.7f),
-                                   LayoutUnit(200.3f), LayoutUnit(350.3f));
-  fractional_both_rect2.ExpandEdgesToPixelBoundaries();
-  EXPECT_EQ(LayoutRect(gfx::Rect(100, 150, 201, 351)), fractional_both_rect2);
-
-  LayoutRect fractional_both_rect3(LayoutUnit(100.3f), LayoutUnit(150.2f),
-                                   LayoutUnit(200.8f), LayoutUnit(350.9f));
-  fractional_both_rect3.ExpandEdgesToPixelBoundaries();
-  EXPECT_EQ(LayoutRect(gfx::Rect(100, 150, 202, 352)), fractional_both_rect3);
-
-  LayoutRect fractional_negpos_rect1(LayoutUnit(-100.4f), LayoutUnit(-150.8f),
-                                     LayoutUnit(200), LayoutUnit(350));
-  fractional_negpos_rect1.ExpandEdgesToPixelBoundaries();
-  EXPECT_EQ(LayoutRect(gfx::Rect(-101, -151, 201, 351)),
-            fractional_negpos_rect1);
-
-  LayoutRect fractional_negpos_rect2(LayoutUnit(-100.5f), LayoutUnit(-150.7f),
-                                     LayoutUnit(199.4f), LayoutUnit(350.3f));
-  fractional_negpos_rect2.ExpandEdgesToPixelBoundaries();
-  EXPECT_EQ(LayoutRect(gfx::Rect(-101, -151, 200, 351)),
-            fractional_negpos_rect2);
-
-  LayoutRect fractional_negpos_rect3(LayoutUnit(-100.3f), LayoutUnit(-150.2f),
-                                     LayoutUnit(199.6f), LayoutUnit(350.3f));
-  fractional_negpos_rect3.ExpandEdgesToPixelBoundaries();
-  EXPECT_EQ(LayoutRect(gfx::Rect(-101, -151, 201, 352)),
-            fractional_negpos_rect3);
-}
-
-struct LayoutRectUniteTestData {
-  const char* test_case;
-  LayoutRect a;
-  LayoutRect b;
-  LayoutRect expected;
-} layout_rect_unite_test_data[] = {
-    {"empty", {}, {}, {}},
-    {"a empty", {}, {1, 2, 3, 4}, {1, 2, 3, 4}},
-    {"b empty", {1, 2, 3, 4}, {}, {1, 2, 3, 4}},
-    {"a larger", {100, 50, 300, 200}, {200, 50, 200, 200}, {100, 50, 300, 200}},
-    {"b larger", {200, 50, 200, 200}, {100, 50, 300, 200}, {100, 50, 300, 200}},
-    {"saturated width",
-     {-1000, 0, 200, 200},
-     {33554402, 500, 30, 100},
-     {0, 0, 99999999, 600}},
-    {"saturated height",
-     {0, -1000, 200, 200},
-     {0, 33554402, 100, 30},
-     {0, 0, 200, 99999999}},
-};
-
-std::ostream& operator<<(std::ostream& os,
-                         const LayoutRectUniteTestData& data) {
-  return os << "Unite " << data.test_case;
-}
-
-class LayoutRectUniteTest
-    : public testing::Test,
-      public testing::WithParamInterface<LayoutRectUniteTestData> {};
-
-INSTANTIATE_TEST_SUITE_P(LayoutRectTest,
-                         LayoutRectUniteTest,
-                         testing::ValuesIn(layout_rect_unite_test_data));
-
-TEST_P(LayoutRectUniteTest, Data) {
-  const auto& data = GetParam();
-  LayoutRect actual = data.a;
-  actual.Unite(data.b);
-
-  LayoutRect expected = data.expected;
-  constexpr int kExtraForSaturation = 2000;
-  // On arm, you cannot actually get the true saturated value just by
-  // setting via LayoutUnit constructor. Instead, add to the expected
-  // value to actually get a saturated expectation (which is what happens in
-  // the Unite operation).
-  if (data.expected.Width() == GetMaxSaturatedSetResultForTesting()) {
-    expected.Expand(DeprecatedLayoutSize(kExtraForSaturation, 0));
-  }
-
-  if (data.expected.Height() == GetMaxSaturatedSetResultForTesting()) {
-    expected.Expand(DeprecatedLayoutSize(0, kExtraForSaturation));
-  }
-  EXPECT_EQ(expected, actual);
-}
-
 }  // namespace blink
diff --git a/third_party/blink/web_tests/TestExpectations b/third_party/blink/web_tests/TestExpectations
index 3d60f632..34720016 100644
--- a/third_party/blink/web_tests/TestExpectations
+++ b/third_party/blink/web_tests/TestExpectations
@@ -2695,9 +2695,9 @@
 crbug.com/626703 external/wpt/css/css-fonts/parsing/font-variant-invalid.html [ Crash ]
 
 # Marking sending-related tests as failed until refactoring CLs are submitted.
-crbug.com/1465781 virtual/fetch-later/external/wpt/fetch/fetch-later/send-on-deactivate.tentative.https.window.html [ Failure ]
-crbug.com/1465781 virtual/fetch-later/external/wpt/fetch/fetch-later/send-on-discard.tentative.https.window.html [ Failure ]
-crbug.com/1465781 virtual/fetch-later/external/wpt/fetch/fetch-later/timeout.tentative.https.window.html [ Failure ]
+crbug.com/1465781 virtual/fetch-later/external/wpt/fetch/fetch-later/send-on-deactivate.tentative.https.window.html [ Failure Timeout ]
+crbug.com/1465781 virtual/fetch-later/external/wpt/fetch/fetch-later/send-on-discard.tentative.https.window.html [ Failure Timeout ]
+crbug.com/1465781 virtual/fetch-later/external/wpt/fetch/fetch-later/timeout.tentative.https.window.html [ Failure Timeout ]
 
 # These tests generate baselines whose names are too long.
 crbug.com/626703 [ Mac ] virtual/webcodecs-without-task-runner-with-custom-deleter/external/wpt/webcodecs/videoDecoder-codec-specific.https.any.html?h265_annexb [ Failure ]
@@ -6795,4 +6795,4 @@
 # Gardener 2023-10-10
 crbug.com/1491468 [ Linux ] external/wpt/html/semantics/popovers/popover-light-dismiss.html [ Failure Pass ]
 
-crbug.com/1491468 [ Linux ] virtual/popover-hint-disabled/external/wpt/html/semantics/popovers/popover-light-dismiss.html [ Failure Pass ]
\ No newline at end of file
+crbug.com/1491468 [ Linux ] virtual/popover-hint-disabled/external/wpt/html/semantics/popovers/popover-light-dismiss.html [ Failure Pass ]
diff --git a/third_party/blink/web_tests/external/wpt/css/css-text-decor/invalidation/reference/selection-pseudo-with-decoration-invalidation-001-ref.html b/third_party/blink/web_tests/external/wpt/css/css-text-decor/invalidation/reference/selection-pseudo-with-decoration-invalidation-001-ref.html
deleted file mode 100644
index 7bbe11d..0000000
--- a/third_party/blink/web_tests/external/wpt/css/css-text-decor/invalidation/reference/selection-pseudo-with-decoration-invalidation-001-ref.html
+++ /dev/null
@@ -1,48 +0,0 @@
-<!DOCTYPE html>
-<html>
-<head>
-<title>CSS Text Decoration Test: Invalidation of text decorations in css-pseudo ::selection - reference</title>
-<link rel="help" href="https://drafts.csswg.org/css-text-decor-4/">
-<link rel="help" href="https://drafts.csswg.org/css-pseudo-4/">
-<link rel="author" title="Stephen Chenney" href="mailto:schenney@chromium.org">
-<style>
-    div {
-        display: block;
-        margin-top: 30px;
-        margin-bottom: 30px;
-        will-change: transform;
-    }
-
-    ::selection {
-        background: yellow;
-        color: currentColor;
-    }
-
-    .decorated {
-        text-decoration-line: underline overline;
-        text-decoration-style: wavy;
-        text-decoration-color: green;
-        text-decoration-thickness: 5px;
-    }
-</style>
-</head>
-<body>
-<div>
-There should be no sign of decorations when the test completes.
-</div>
-<div id="bottom-decorated-div" class="decorated">
-There should be decorations when the test completes.
-</div>
-</body>
-<script>
-function selectByID(id) {
-  const selection = window.getSelection();
-  const node = document.getElementById(id);
-  const range = document.createRange();
-  range.selectNodeContents(node);
-  selection.addRange(range);
-}
-
-selectByID("bottom-decorated-div");
-</script>
-</html>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-text-decor/invalidation/reference/selection-pseudo-with-decoration-invalidation-002-ref.html b/third_party/blink/web_tests/external/wpt/css/css-text-decor/invalidation/reference/selection-pseudo-with-decoration-invalidation-002-ref.html
deleted file mode 100644
index 59351f8..0000000
--- a/third_party/blink/web_tests/external/wpt/css/css-text-decor/invalidation/reference/selection-pseudo-with-decoration-invalidation-002-ref.html
+++ /dev/null
@@ -1,39 +0,0 @@
-<!DOCTYPE html>
-<html>
-<head>
-<title>CSS Text Decoration Test: Invalidation of text decorations in css-pseudo ::selection</title>
-<style>
-    div {
-        display: block;
-        margin-top: 10px;
-        margin-bottom: 10px;
-        line-height: 20px;
-        will-change: transform;
-        text-decoration-line: underline;
-        text-decoration-style: line;
-        text-decoration-thickness: 1px;
-        text-underline-offset: 10px;
-    }
-    ::selection {
-        background: yellow;
-        color: currentColor;
-    }
-</style>
-</head>
-<body>
-<div>
-This is one line of text, with an image underneath.
-</div>
-<image src="../../../support/60x60-green.png"/>
-<div>
-And another line of text.
-</div>
-</body>
-<script>
-  const selection = window.getSelection();
-  const node = document.getElementsByTagName("body")[0];
-  let range = document.createRange();
-  range.selectNodeContents(node);
-  selection.addRange(range);
-</script>
-</html>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-text-decor/invalidation/selection-pseudo-with-decoration-invalidation-001.html b/third_party/blink/web_tests/external/wpt/css/css-text-decor/invalidation/selection-pseudo-with-decoration-invalidation-001.html
deleted file mode 100644
index a2dfbb3..0000000
--- a/third_party/blink/web_tests/external/wpt/css/css-text-decor/invalidation/selection-pseudo-with-decoration-invalidation-001.html
+++ /dev/null
@@ -1,59 +0,0 @@
-<!DOCTYPE html>
-<html class="reftest-wait">
-<head>
-<title>CSS Text Decoration Test: Invalidation of text decorations in css-pseudo ::selection</title>
-<link rel="help" href="https://drafts.csswg.org/css-text-decor-4/">
-<link rel="help" href="https://drafts.csswg.org/css-pseudo-4/">
-<meta name="assert" content="text-decorations should be correctly invalidated on selection change.">
-<link rel="author" title="Stephen Chenney" href="mailto:schenney@chromium.org">
-<link rel="match" href="reference/selection-pseudo-with-decoration-invalidation-001-ref.html">
-<style>
-    div {
-        display: block;
-        margin-top: 30px;
-        margin-bottom: 30px;
-        will-change: transform;
-    }
-    ::selection {
-        background: yellow;
-        color: currentColor;
-        text-decoration-line: underline overline;
-        text-decoration-style: wavy;
-        text-decoration-color: black;
-        text-decoration-thickness: 5px;
-    }
-</style>
-<script src="/common/reftest-wait.js"></script>
-<script src="/common/rendering-utils.js"></script>
-</head>
-<body>
-<div id="top-decorated-div">
-There should be no sign of decorations when the test completes.
-</div>
-<div id="bottom-decorated-div">
-There should be decorations when the test completes.
-</div>
-</body>
-<script>
-
-function selectByID(id) {
-  const selection = window.getSelection();
-  const node = document.getElementById(id);
-  const range = document.createRange();
-  range.selectNodeContents(node);
-  selection.addRange(range);
-}
-
-selectByID("top-decorated-div");
-
-async function runTest() {
-  const selection = window.getSelection();
-  selection.removeAllRanges();
-  selectByID("bottom-decorated-div");
-  takeScreenshot();
-}
-onload = () => {
-  waitForAtLeastOneFrame().then(() => { runTest() });
-}
-</script>
-</html>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-text-decor/invalidation/selection-pseudo-with-decoration-invalidation-002.html b/third_party/blink/web_tests/external/wpt/css/css-text-decor/invalidation/selection-pseudo-with-decoration-invalidation-002.html
deleted file mode 100644
index 2abe8c62..0000000
--- a/third_party/blink/web_tests/external/wpt/css/css-text-decor/invalidation/selection-pseudo-with-decoration-invalidation-002.html
+++ /dev/null
@@ -1,53 +0,0 @@
-<!DOCTYPE html>
-<html class="reftest-wait">
-<head>
-<title>CSS Text Decoration Test: Invalidation of text decorations in css-pseudo ::selection</title>
-<link rel="help" href="https://drafts.csswg.org/css-text-decor-4/">
-<link rel="help" href="https://drafts.csswg.org/css-pseudo-4/">
-<meta name="assert" content="text-decorations should be correctly invalidated on selection change.">
-<link rel="author" title="Stephen Chenney" href="mailto:schenney@chromium.org">
-<link rel="match" href="reference/selection-pseudo-with-decoration-invalidation-002-ref.html">
-<style>
-    div {
-        display: block;
-        margin-top: 10px;
-        margin-bottom: 10px;
-        line-height: 20px;
-        will-change: transform;
-    }
-    ::selection {
-        background: yellow;
-        color: currentColor;
-        text-decoration-line: underline;
-        text-decoration-style: line;
-        text-decoration-thickness: 1px;
-        text-underline-offset: 10px;
-    }
-</style>
-<script src="/common/reftest-wait.js"></script>
-<script src="/common/rendering-utils.js"></script>
-</head>
-<body>
-<div>
-This is one line of text, with an image underneath.
-</div>
-<image src="../../support/60x60-green.png"/>
-<div>
-And another line of text.
-</div>
-</body>
-<script>
-async function runTest() {
-  const selection = window.getSelection();
-  const node = document.getElementsByTagName("body")[0];
-  let range = document.createRange();
-  range.selectNodeContents(node);
-  selection.addRange(range);
-  waitForAtLeastOneFrame().then(() => { takeScreenshot() });
-}
-
-onload = () => {
-  waitForAtLeastOneFrame().then(() => { runTest() });
-}
-</script>
-</html>
diff --git a/third_party/blink/web_tests/external/wpt/html/canvas/element/path-objects/2d.path.stroke.prune.ellipse.html b/third_party/blink/web_tests/external/wpt/html/canvas/element/path-objects/2d.path.stroke.prune.ellipse.html
new file mode 100644
index 0000000..d5550793
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/html/canvas/element/path-objects/2d.path.stroke.prune.ellipse.html
@@ -0,0 +1,38 @@
+<!DOCTYPE html>
+<!-- DO NOT EDIT! This test has been generated by /html/canvas/tools/gentest.py. -->
+<title>Canvas test: 2d.path.stroke.prune.ellipse</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/html/canvas/resources/canvas-tests.js"></script>
+<link rel="stylesheet" href="/html/canvas/resources/canvas-tests.css">
+<body class="show_output">
+
+<h1>2d.path.stroke.prune.ellipse</h1>
+<p class="desc">Zero-length full ellipse are removed before stroking with miters</p>
+
+
+<p class="output">Actual output:</p>
+<canvas id="c" class="output" width="100" height="50"><p class="fallback">FAIL (fallback content)</p></canvas>
+<p class="output expectedtext">Expected output:<p><img src="/images/green-100x50.png" class="output expected" id="expected" alt="">
+<ul id="d"></ul>
+<script>
+var t = async_test("Zero-length full ellipse are removed before stroking with miters");
+_addTest(function(canvas, ctx) {
+
+  ctx.fillStyle = '#0f0';
+  ctx.fillRect(0, 0, 100, 50);
+
+  ctx.strokeStyle = '#f00';
+  ctx.lineWidth = 100;
+  ctx.lineCap = 'round';
+  ctx.lineJoin = 'round';
+
+  ctx.beginPath();
+  ctx.ellipse(25, 25, 0, 0, 0, 0, 2 * Math.PI);
+  ctx.stroke();
+
+  _assertPixel(canvas, 50,25, 0,255,0,255);
+
+});
+</script>
+
diff --git a/third_party/blink/web_tests/external/wpt/html/canvas/offscreen/path-objects/2d.path.stroke.prune.ellipse.html b/third_party/blink/web_tests/external/wpt/html/canvas/offscreen/path-objects/2d.path.stroke.prune.ellipse.html
new file mode 100644
index 0000000..5eea854
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/html/canvas/offscreen/path-objects/2d.path.stroke.prune.ellipse.html
@@ -0,0 +1,39 @@
+<!DOCTYPE html>
+<!-- DO NOT EDIT! This test has been generated by /html/canvas/tools/gentest.py. -->
+<title>OffscreenCanvas test: 2d.path.stroke.prune.ellipse</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/html/canvas/resources/canvas-tests.js"></script>
+
+<h1>2d.path.stroke.prune.ellipse</h1>
+<p class="desc">Zero-length full ellipse are removed before stroking with miters</p>
+
+
+<script>
+var t = async_test("Zero-length full ellipse are removed before stroking with miters");
+var t_pass = t.done.bind(t);
+var t_fail = t.step_func(function(reason) {
+    throw reason;
+});
+t.step(function() {
+
+  var canvas = new OffscreenCanvas(100, 50);
+  var ctx = canvas.getContext('2d');
+
+  ctx.fillStyle = '#0f0';
+  ctx.fillRect(0, 0, 100, 50);
+
+  ctx.strokeStyle = '#f00';
+  ctx.lineWidth = 100;
+  ctx.lineCap = 'round';
+  ctx.lineJoin = 'round';
+
+  ctx.beginPath();
+  ctx.ellipse(25, 25, 0, 0, 0, 0, 2 * Math.PI);
+  ctx.stroke();
+
+  _assertPixel(canvas, 50,25, 0,255,0,255);
+  t.done();
+
+});
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/html/canvas/offscreen/path-objects/2d.path.stroke.prune.ellipse.worker.js b/third_party/blink/web_tests/external/wpt/html/canvas/offscreen/path-objects/2d.path.stroke.prune.ellipse.worker.js
new file mode 100644
index 0000000..a1fbabd
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/html/canvas/offscreen/path-objects/2d.path.stroke.prune.ellipse.worker.js
@@ -0,0 +1,34 @@
+// DO NOT EDIT! This test has been generated by /html/canvas/tools/gentest.py.
+// OffscreenCanvas test in a worker:2d.path.stroke.prune.ellipse
+// Description:Zero-length full ellipse are removed before stroking with miters
+// Note:
+
+importScripts("/resources/testharness.js");
+importScripts("/html/canvas/resources/canvas-tests.js");
+
+var t = async_test("Zero-length full ellipse are removed before stroking with miters");
+var t_pass = t.done.bind(t);
+var t_fail = t.step_func(function(reason) {
+    throw reason;
+});
+t.step(function() {
+
+  var canvas = new OffscreenCanvas(100, 50);
+  var ctx = canvas.getContext('2d');
+
+  ctx.fillStyle = '#0f0';
+  ctx.fillRect(0, 0, 100, 50);
+
+  ctx.strokeStyle = '#f00';
+  ctx.lineWidth = 100;
+  ctx.lineCap = 'round';
+  ctx.lineJoin = 'round';
+
+  ctx.beginPath();
+  ctx.ellipse(25, 25, 0, 0, 0, 0, 2 * Math.PI);
+  ctx.stroke();
+
+  _assertPixel(canvas, 50,25, 0,255,0,255);
+  t.done();
+});
+done();
diff --git a/third_party/blink/web_tests/external/wpt/html/canvas/tools/yaml-new/path-objects.yaml b/third_party/blink/web_tests/external/wpt/html/canvas/tools/yaml-new/path-objects.yaml
index eec142c..fab92b9 100644
--- a/third_party/blink/web_tests/external/wpt/html/canvas/tools/yaml-new/path-objects.yaml
+++ b/third_party/blink/web_tests/external/wpt/html/canvas/tools/yaml-new/path-objects.yaml
@@ -2853,6 +2853,23 @@
     @assert pixel 50,25 == 0,255,0,255;
   expected: green
 
+- name: 2d.path.stroke.prune.ellipse
+  desc: Zero-length full ellipse are removed before stroking with miters
+  code: |
+    ctx.fillStyle = '#0f0';
+    ctx.fillRect(0, 0, 100, 50);
+
+    ctx.strokeStyle = '#f00';
+    ctx.lineWidth = 100;
+    ctx.lineCap = 'round';
+    ctx.lineJoin = 'round';
+
+    ctx.beginPath();
+    ctx.ellipse(25, 25, 0, 0, 0, 0, 2 * Math.PI);
+    ctx.stroke();
+
+    @assert pixel 50,25 == 0,255,0,255;
+  expected: green
 
 - name: 2d.path.transformation.basic
   code: |
diff --git a/third_party/blink/web_tests/external/wpt/html/infrastructure/urls/base-url/document-base-url-changes-about-srcdoc-2.https.html b/third_party/blink/web_tests/external/wpt/html/infrastructure/urls/base-url/document-base-url-changes-about-srcdoc-2.https.html
index 14e712ce..dab8d21 100644
--- a/third_party/blink/web_tests/external/wpt/html/infrastructure/urls/base-url/document-base-url-changes-about-srcdoc-2.https.html
+++ b/third_party/blink/web_tests/external/wpt/html/infrastructure/urls/base-url/document-base-url-changes-about-srcdoc-2.https.html
@@ -3,16 +3,20 @@
 <script src="/resources/testharnessreport.js"></script>
 <script src="/common/get-host-info.sub.js"></script>
 
+<iframe src='about:blank'></iframe>
+
 <script>
 // If document.open's behavior is modified to remove the url-rewriting behavior,
 // then this test can be deleted (https://github.com/whatwg/html/issues/3989).
 setup({ explicit_done: true });
 
+// This function is called by directly by the child iframe (above), with the
+// child iframe's document. The child iframe's document contains an about:srcdoc iframe.
 window.start = childDocument => {
   const grandchildDocument =
     childDocument.getElementById('foo').contentDocument;
 
-  test(t => {
+  test(() => {
     assert_equals(childDocument.URL, 'about:blank',
       'Child document starting URL');
     assert_equals(grandchildDocument.URL, 'about:srcdoc',
@@ -45,27 +49,19 @@
 
   done();
 };
-</script>
 
-<iframe src='about:blank'></iframe>
+let subframe_doc = document.querySelector('iframe').contentDocument;
+subframe_doc.body.innerHTML = '<iframe srcdoc="foo" id="foo"></iframe>';
+promise_test(async t => {
+  const grandchildIframe = subframe_doc.querySelector('iframe');
+  await new Promise(resolve => {
+    grandchildIframe.onload = resolve;
+  });
 
-<script>
-  window.onload = () => {
-    let subframe_doc = document.querySelector('iframe').contentDocument;
-    subframe_doc.body.innerHTML = '<iframe srcdoc="foo" id="foo"></iframe>';
-    promise_test((test) => {
-      return new Promise(async resolve => {
-      // We need a timeout since the srcdoc frame takes time to setup and
-      // doesn't fire a loadstop.
-      test.step_timeout(resolve, 100);
-      }).then(() => {
-        assert_equals(
-            subframe_doc.getElementById('foo').contentDocument.URL,
-            'about:srcdoc');
-        let script = subframe_doc.createElement('script');
-        script.innerHTML = 'parent.start(document);';
-        subframe_doc.body.appendChild(script);
-      });
-    }, "wrapper promise test for timeout.");
-  };
+  assert_equals(grandchildIframe.contentDocument.URL, 'about:srcdoc');
+
+  let script = subframe_doc.createElement('script');
+  script.innerHTML = 'parent.start(document);';
+  subframe_doc.body.appendChild(script);
+}, "wrapper promise test for timeout.");
 </script>
diff --git a/third_party/blink/web_tests/external/wpt/html/semantics/popovers/popover-focus-2.html.ini b/third_party/blink/web_tests/external/wpt/html/semantics/popovers/popover-focus-2.html.ini
index 919edc7d..86621d6 100644
--- a/third_party/blink/web_tests/external/wpt/html/semantics/popovers/popover-focus-2.html.ini
+++ b/third_party/blink/web_tests/external/wpt/html/semantics/popovers/popover-focus-2.html.ini
@@ -1,6 +1,5 @@
 [popover-focus-2.html]
   expected:
-    if (product == "content_shell") and (os == "mac") and (port == "mac13-arm64") and (virtual_suite == "popover-hint-disabled"): OK
     if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): OK
     if (product == "content_shell") and (os == "mac") and (port == "mac11-arm64"): OK
     if (product == "content_shell") and (os == "win"): OK
diff --git a/third_party/blink/web_tests/external/wpt/selection/contenteditable/modifying-selection-with-non-primary-mouse-button.tentative.html.ini b/third_party/blink/web_tests/external/wpt/selection/contenteditable/modifying-selection-with-non-primary-mouse-button.tentative.html.ini
index 6818fca..36e555cf 100644
--- a/third_party/blink/web_tests/external/wpt/selection/contenteditable/modifying-selection-with-non-primary-mouse-button.tentative.html.ini
+++ b/third_party/blink/web_tests/external/wpt/selection/contenteditable/modifying-selection-with-non-primary-mouse-button.tentative.html.ini
@@ -1,13 +1,11 @@
 [modifying-selection-with-non-primary-mouse-button.tentative.html?middle]
   [Shift + middle click in a link shouldn't extend the selection]
     expected:
-      if (product == "content_shell") and (os == "mac") and (port == "mac10.15"): PASS
       if product == "chrome": PASS
       FAIL
 
   [Shift + middle click should extend the selection]
     expected:
-      if (product == "content_shell") and (os == "mac") and (port == "mac10.15"): PASS
       if product == "chrome": PASS
       FAIL
 
@@ -15,12 +13,10 @@
 [modifying-selection-with-non-primary-mouse-button.tentative.html?secondary]
   [Shift + secondary click in a link shouldn't extend the selection]
     expected:
-      if (product == "content_shell") and (os == "mac") and (port == "mac10.15"): PASS
       if product == "chrome": PASS
       FAIL
 
   [Shift + secondary click should extend the selection]
     expected:
-      if (product == "content_shell") and (os == "mac") and (port == "mac10.15"): PASS
       if product == "chrome": PASS
       FAIL
diff --git a/third_party/blink/web_tests/http/tests/inspector-protocol/shared-storage/debugger-pause-on-first-script-expected.txt b/third_party/blink/web_tests/http/tests/inspector-protocol/shared-storage/debugger-pause-on-first-script-expected.txt
index 0fd9370..0642dc4 100644
--- a/third_party/blink/web_tests/http/tests/inspector-protocol/shared-storage/debugger-pause-on-first-script-expected.txt
+++ b/third_party/blink/web_tests/http/tests/inspector-protocol/shared-storage/debugger-pause-on-first-script-expected.txt
@@ -12,6 +12,7 @@
     }
     waitingForDebugger : true
 }
-Paused at http://127.0.0.1:8000/inspector-protocol/shared-storage/resources/module.js:0:0
+Paused at http://127.0.0.1:8000/inspector-protocol/shared-storage/resources/module.js:0:0 (function location)
+Paused at http://127.0.0.1:8000/inspector-protocol/shared-storage/resources/module.js:4:16 (location)
 [WORKLET]: loaded module, test token: 42
 
diff --git a/third_party/blink/web_tests/http/tests/inspector-protocol/shared-storage/debugger-pause-on-first-script.js b/third_party/blink/web_tests/http/tests/inspector-protocol/shared-storage/debugger-pause-on-first-script.js
index 5b5d3ba2..aa8e3ac 100644
--- a/third_party/blink/web_tests/http/tests/inspector-protocol/shared-storage/debugger-pause-on-first-script.js
+++ b/third_party/blink/web_tests/http/tests/inspector-protocol/shared-storage/debugger-pause-on-first-script.js
@@ -30,8 +30,10 @@
 
   const paused = (await wp.Debugger.oncePaused()).params;
 
-  const location = paused.callFrames[0].functionLocation;
-  testRunner.log(`Paused at ${scripts.get(location.scriptId) ?? '<unknown>'}:${location.lineNumber}:${location.columnNumber}`);
+  const function_location = paused.callFrames[0].functionLocation;
+  const location = paused.callFrames[0].location;
+  testRunner.log(`Paused at ${scripts.get(function_location.scriptId) ?? '<unknown>'}:${function_location.lineNumber}:${function_location.columnNumber} (function location)`);
+  testRunner.log(`Paused at ${scripts.get(location.scriptId) ?? '<unknown>'}:${location.lineNumber}:${location.columnNumber} (location)`);
   worklet_session.evaluate(`testToken = 42;`);
   wp.Debugger.resume();
 
diff --git a/third_party/blink/web_tests/http/tests/inspector-protocol/shared-storage/resources/module.js b/third_party/blink/web_tests/http/tests/inspector-protocol/shared-storage/resources/module.js
index 475aa67..418619fd 100644
--- a/third_party/blink/web_tests/http/tests/inspector-protocol/shared-storage/resources/module.js
+++ b/third_party/blink/web_tests/http/tests/inspector-protocol/shared-storage/resources/module.js
@@ -1,10 +1,10 @@
-console.log(`loaded module, test token: ${typeof(testToken) === 'undefined' ? '<undefined>' : testToken}`);
-var globalVar = 0;
-
 class EmptyOperation {
   async run(data) {}
 }
 
+/* dummy text */console.log(`loaded module, test token: ${typeof(testToken) === 'undefined' ? '<undefined>' : testToken}`);
+var globalVar = 0;
+
 class SetGlobalVarAndPauseOnDebuggerOperation {
   async run(data) {
     if (data && data.hasOwnProperty('setGlobalVarTo')) {
diff --git a/third_party/blink/web_tests/platform/fuchsia/external/wpt/webnn/reduction.https.any-expected.txt b/third_party/blink/web_tests/platform/fuchsia/external/wpt/webnn/reduction.https.any-expected.txt
new file mode 100644
index 0000000..ec60fed
--- /dev/null
+++ b/third_party/blink/web_tests/platform/fuchsia/external/wpt/webnn/reduction.https.any-expected.txt
@@ -0,0 +1,153 @@
+This is a testharness.js-based test.
+Found 149 tests; 11 PASS, 138 FAIL, 0 TIMEOUT, 0 NOTRUN.
+FAIL reduceL1 float32 1D tensor all positive default options / async promise_test: Unhandled rejection with value: object "TypeError: builder[operationName] is not a function"
+FAIL reduceL1 float32 1D tensor all negative default options / async promise_test: Unhandled rejection with value: object "TypeError: builder[operationName] is not a function"
+FAIL reduceL1 float32 1D tensor all positive integers default options / async promise_test: Unhandled rejection with value: object "TypeError: builder[operationName] is not a function"
+FAIL reduceL1 float32 1D tensor all negative integers default options / async promise_test: Unhandled rejection with value: object "TypeError: builder[operationName] is not a function"
+FAIL reduceL1 float32 2D tensor default options / async promise_test: Unhandled rejection with value: object "TypeError: builder[operationName] is not a function"
+FAIL reduceL1 float32 3D tensor default options / async promise_test: Unhandled rejection with value: object "TypeError: builder[operationName] is not a function"
+FAIL reduceL1 float32 4D tensor default options / async promise_test: Unhandled rejection with value: object "TypeError: builder[operationName] is not a function"
+FAIL reduceL1 float32 5D tensor default options / async promise_test: Unhandled rejection with value: object "TypeError: builder[operationName] is not a function"
+FAIL reduceL1 float32 3D tensor options.axes / async promise_test: Unhandled rejection with value: object "TypeError: builder[operationName] is not a function"
+FAIL reduceL1 float32 4D tensor options.axes / async promise_test: Unhandled rejection with value: object "TypeError: builder[operationName] is not a function"
+FAIL reduceL1 float32 3D tensor options.keepDimensions=false / async promise_test: Unhandled rejection with value: object "TypeError: builder[operationName] is not a function"
+FAIL reduceL1 float32 3D tensor options.keepDimensions=true / async promise_test: Unhandled rejection with value: object "TypeError: builder[operationName] is not a function"
+FAIL reduceL1 float32 4D tensor options.keepDimensions=false / async promise_test: Unhandled rejection with value: object "TypeError: builder[operationName] is not a function"
+FAIL reduceL1 float32 4D tensor options.keepDimensions=true / async promise_test: Unhandled rejection with value: object "TypeError: builder[operationName] is not a function"
+FAIL reduceL1 float32 4D tensor options.axes with options.keepDimensions=false / async promise_test: Unhandled rejection with value: object "TypeError: builder[operationName] is not a function"
+FAIL reduceL1 float32 4D tensor options.axes with options.keepDimensions=true / async promise_test: Unhandled rejection with value: object "TypeError: builder[operationName] is not a function"
+FAIL reduceL2 float32 1D tensor all positive default options / async promise_test: Unhandled rejection with value: object "TypeError: builder[operationName] is not a function"
+FAIL reduceL2 float32 1D tensor all negative default options / async promise_test: Unhandled rejection with value: object "TypeError: builder[operationName] is not a function"
+FAIL reduceL2 float32 1D tensor all positive integers default options / async promise_test: Unhandled rejection with value: object "TypeError: builder[operationName] is not a function"
+FAIL reduceL2 float32 1D tensor all negative integers default options / async promise_test: Unhandled rejection with value: object "TypeError: builder[operationName] is not a function"
+FAIL reduceL2 float32 2D tensor default options / async promise_test: Unhandled rejection with value: object "TypeError: builder[operationName] is not a function"
+FAIL reduceL2 float32 3D tensor default options / async promise_test: Unhandled rejection with value: object "TypeError: builder[operationName] is not a function"
+FAIL reduceL2 float32 4D tensor default options / async promise_test: Unhandled rejection with value: object "TypeError: builder[operationName] is not a function"
+FAIL reduceL2 float32 5D tensor default options / async promise_test: Unhandled rejection with value: object "TypeError: builder[operationName] is not a function"
+FAIL reduceL2 float32 3D tensor options.axes / async promise_test: Unhandled rejection with value: object "TypeError: builder[operationName] is not a function"
+FAIL reduceL2 float32 4D tensor options.axes / async promise_test: Unhandled rejection with value: object "TypeError: builder[operationName] is not a function"
+FAIL reduceL2 float32 3D tensor options.keepDimensions=false / async promise_test: Unhandled rejection with value: object "TypeError: builder[operationName] is not a function"
+FAIL reduceL2 float32 3D tensor options.keepDimensions=true / async promise_test: Unhandled rejection with value: object "TypeError: builder[operationName] is not a function"
+FAIL reduceL2 float32 4D tensor options.keepDimensions=false / async promise_test: Unhandled rejection with value: object "TypeError: builder[operationName] is not a function"
+FAIL reduceL2 float32 4D tensor options.keepDimensions=true / async promise_test: Unhandled rejection with value: object "TypeError: builder[operationName] is not a function"
+FAIL reduceL2 float32 4D tensor options.axes with options.keepDimensions=false / async promise_test: Unhandled rejection with value: object "TypeError: builder[operationName] is not a function"
+FAIL reduceL2 float32 4D tensor options.axes with options.keepDimensions=true / async promise_test: Unhandled rejection with value: object "TypeError: builder[operationName] is not a function"
+FAIL reduceLogSum float32 1D tensor all non-negative default options / async promise_test: Unhandled rejection with value: object "TypeError: builder[operationName] is not a function"
+FAIL reduceLogSum float32 1D tensor all non-negative integers default options / async promise_test: Unhandled rejection with value: object "TypeError: builder[operationName] is not a function"
+FAIL reduceLogSum float32 2D tensor default options / async promise_test: Unhandled rejection with value: object "TypeError: builder[operationName] is not a function"
+FAIL reduceLogSum float32 3D tensor default options / async promise_test: Unhandled rejection with value: object "TypeError: builder[operationName] is not a function"
+FAIL reduceLogSum float32 4D tensor default options / async promise_test: Unhandled rejection with value: object "TypeError: builder[operationName] is not a function"
+FAIL reduceLogSum float32 5D tensor default options / async promise_test: Unhandled rejection with value: object "TypeError: builder[operationName] is not a function"
+FAIL reduceLogSum float32 3D tensor options.axes / async promise_test: Unhandled rejection with value: object "TypeError: builder[operationName] is not a function"
+FAIL reduceLogSum float32 4D tensor options.axes / async promise_test: Unhandled rejection with value: object "TypeError: builder[operationName] is not a function"
+FAIL reduceLogSum float32 3D tensor options.keepDimensions=false / async promise_test: Unhandled rejection with value: object "TypeError: builder[operationName] is not a function"
+FAIL reduceLogSum float32 3D tensor options.keepDimensions=true / async promise_test: Unhandled rejection with value: object "TypeError: builder[operationName] is not a function"
+FAIL reduceLogSum float32 4D tensor options.keepDimensions=false / async promise_test: Unhandled rejection with value: object "TypeError: builder[operationName] is not a function"
+FAIL reduceLogSum float32 4D tensor options.keepDimensions=true / async promise_test: Unhandled rejection with value: object "TypeError: builder[operationName] is not a function"
+FAIL reduceLogSum float32 4D tensor options.axes with options.keepDimensions=false / async promise_test: Unhandled rejection with value: object "TypeError: builder[operationName] is not a function"
+FAIL reduceLogSum float32 4D tensor options.axes with options.keepDimensions=true / async promise_test: Unhandled rejection with value: object "TypeError: builder[operationName] is not a function"
+FAIL reduceLogSumExp float32 1D tensor all positive default options / async promise_test: Unhandled rejection with value: object "TypeError: builder[operationName] is not a function"
+FAIL reduceLogSumExp float32 1D tensor all negative default options / async promise_test: Unhandled rejection with value: object "TypeError: builder[operationName] is not a function"
+FAIL reduceLogSumExp float32 1D tensor all positive integers default options / async promise_test: Unhandled rejection with value: object "TypeError: builder[operationName] is not a function"
+FAIL reduceLogSumExp float32 1D tensor all negative integers default options / async promise_test: Unhandled rejection with value: object "TypeError: builder[operationName] is not a function"
+FAIL reduceLogSumExp float32 2D tensor default options / async promise_test: Unhandled rejection with value: object "TypeError: builder[operationName] is not a function"
+FAIL reduceLogSumExp float32 3D tensor default options / async promise_test: Unhandled rejection with value: object "TypeError: builder[operationName] is not a function"
+FAIL reduceLogSumExp float32 4D tensor default options / async promise_test: Unhandled rejection with value: object "TypeError: builder[operationName] is not a function"
+FAIL reduceLogSumExp float32 5D tensor default options / async promise_test: Unhandled rejection with value: object "TypeError: builder[operationName] is not a function"
+FAIL reduceLogSumExp float32 3D tensor options.axes / async promise_test: Unhandled rejection with value: object "TypeError: builder[operationName] is not a function"
+FAIL reduceLogSumExp float32 4D tensor options.axes / async promise_test: Unhandled rejection with value: object "TypeError: builder[operationName] is not a function"
+FAIL reduceLogSumExp float32 3D tensor options.keepDimensions=false / async promise_test: Unhandled rejection with value: object "TypeError: builder[operationName] is not a function"
+FAIL reduceLogSumExp float32 3D tensor options.keepDimensions=true / async promise_test: Unhandled rejection with value: object "TypeError: builder[operationName] is not a function"
+FAIL reduceLogSumExp float32 4D tensor options.keepDimensions=false / async promise_test: Unhandled rejection with value: object "TypeError: builder[operationName] is not a function"
+FAIL reduceLogSumExp float32 4D tensor options.keepDimensions=true / async promise_test: Unhandled rejection with value: object "TypeError: builder[operationName] is not a function"
+FAIL reduceLogSumExp float32 4D tensor options.axes with options.keepDimensions=false / async promise_test: Unhandled rejection with value: object "TypeError: builder[operationName] is not a function"
+FAIL reduceLogSumExp float32 4D tensor options.axes with options.keepDimensions=true / async promise_test: Unhandled rejection with value: object "TypeError: builder[operationName] is not a function"
+FAIL reduceMax float32 1D tensor default options / async promise_test: Unhandled rejection with value: object "TypeError: builder[operationName] is not a function"
+FAIL reduceMax float32 2D tensor default options / async promise_test: Unhandled rejection with value: object "TypeError: builder[operationName] is not a function"
+FAIL reduceMax float32 3D tensor default options / async promise_test: Unhandled rejection with value: object "TypeError: builder[operationName] is not a function"
+FAIL reduceMax float32 4D tensor default options / async promise_test: Unhandled rejection with value: object "TypeError: builder[operationName] is not a function"
+FAIL reduceMax float32 5D tensor default options / async promise_test: Unhandled rejection with value: object "TypeError: builder[operationName] is not a function"
+FAIL reduceMax float32 3D tensor options.axes / async promise_test: Unhandled rejection with value: object "TypeError: builder[operationName] is not a function"
+FAIL reduceMax float32 4D tensor options.axes / async promise_test: Unhandled rejection with value: object "TypeError: builder[operationName] is not a function"
+FAIL reduceMax float32 3D tensor options.keepDimensions=false / async promise_test: Unhandled rejection with value: object "TypeError: builder[operationName] is not a function"
+FAIL reduceMax float32 3D tensor options.keepDimensions=true / async promise_test: Unhandled rejection with value: object "TypeError: builder[operationName] is not a function"
+FAIL reduceMax float32 4D tensor options.keepDimensions=false / async promise_test: Unhandled rejection with value: object "TypeError: builder[operationName] is not a function"
+FAIL reduceMax float32 4D tensor options.keepDimensions=true / async promise_test: Unhandled rejection with value: object "TypeError: builder[operationName] is not a function"
+FAIL reduceMax float32 4D tensor options.axes with options.keepDimensions=false / async promise_test: Unhandled rejection with value: object "TypeError: builder[operationName] is not a function"
+FAIL reduceMax float32 4D tensor options.axes with options.keepDimensions=true / async promise_test: Unhandled rejection with value: object "TypeError: builder[operationName] is not a function"
+PASS reduceMean float32 1D tensor all positive default options / async
+PASS reduceMean float32 1D tensor all negative default options / async
+PASS reduceMean float32 1D tensor all positive integers default options / async
+PASS reduceMean float32 1D tensor all negative integers default options / async
+PASS reduceMean float32 2D tensor default options / async
+PASS reduceMean float32 3D tensor default options / async
+PASS reduceMean float32 4D tensor default options / async
+PASS reduceMean float32 5D tensor default options / async
+PASS reduceMean float32 3D tensor options.axes / async
+FAIL reduceMean float32 4D tensor options.axes / async promise_test: Unhandled rejection with value: object "DataError: Failed to call xnn_define_static_mean( subgraph, reduction_axes.size(), reduction_axes.data(), input_id, output_id, flags): xnn_status_invalid_parameter."
+PASS reduceMean float32 3D tensor options.keepDimensions=false / async
+FAIL reduceMean float32 3D tensor options.keepDimensions=true / async promise_test: Unhandled rejection with value: object "NotSupportedError: XNNPACK can't support keep dimensions."
+PASS reduceMean float32 4D tensor options.keepDimensions=false / async
+FAIL reduceMean float32 4D tensor options.keepDimensions=true / async promise_test: Unhandled rejection with value: object "NotSupportedError: XNNPACK can't support keep dimensions."
+FAIL reduceMean float32 4D tensor options.axes with options.keepDimensions=false / async promise_test: Unhandled rejection with value: object "DataError: Failed to call xnn_define_static_mean( subgraph, reduction_axes.size(), reduction_axes.data(), input_id, output_id, flags): xnn_status_invalid_parameter."
+FAIL reduceMean float32 4D tensor options.axes with options.keepDimensions=true / async promise_test: Unhandled rejection with value: object "DataError: Failed to call xnn_define_static_mean( subgraph, reduction_axes.size(), reduction_axes.data(), input_id, output_id, flags): xnn_status_invalid_parameter."
+FAIL reduceMin float32 1D tensor default options / async promise_test: Unhandled rejection with value: object "TypeError: builder[operationName] is not a function"
+FAIL reduceMin float32 2D tensor default options / async promise_test: Unhandled rejection with value: object "TypeError: builder[operationName] is not a function"
+FAIL reduceMin float32 3D tensor default options / async promise_test: Unhandled rejection with value: object "TypeError: builder[operationName] is not a function"
+FAIL reduceMin float32 4D tensor default options / async promise_test: Unhandled rejection with value: object "TypeError: builder[operationName] is not a function"
+FAIL reduceMin float32 5D tensor default options / async promise_test: Unhandled rejection with value: object "TypeError: builder[operationName] is not a function"
+FAIL reduceMin float32 3D tensor options.axes / async promise_test: Unhandled rejection with value: object "TypeError: builder[operationName] is not a function"
+FAIL reduceMin float32 4D tensor options.axes / async promise_test: Unhandled rejection with value: object "TypeError: builder[operationName] is not a function"
+FAIL reduceMin float32 3D tensor options.keepDimensions=false / async promise_test: Unhandled rejection with value: object "TypeError: builder[operationName] is not a function"
+FAIL reduceMin float32 3D tensor options.keepDimensions=true / async promise_test: Unhandled rejection with value: object "TypeError: builder[operationName] is not a function"
+FAIL reduceMin float32 4D tensor options.keepDimensions=false / async promise_test: Unhandled rejection with value: object "TypeError: builder[operationName] is not a function"
+FAIL reduceMin float32 4D tensor options.keepDimensions=true / async promise_test: Unhandled rejection with value: object "TypeError: builder[operationName] is not a function"
+FAIL reduceMin float32 4D tensor options.axes with options.keepDimensions=false / async promise_test: Unhandled rejection with value: object "TypeError: builder[operationName] is not a function"
+FAIL reduceMin float32 4D tensor options.axes with options.keepDimensions=true / async promise_test: Unhandled rejection with value: object "TypeError: builder[operationName] is not a function"
+FAIL reduceProduct float32 1D tensor default options / async promise_test: Unhandled rejection with value: object "TypeError: builder[operationName] is not a function"
+FAIL reduceProduct float32 2D tensor default options / async promise_test: Unhandled rejection with value: object "TypeError: builder[operationName] is not a function"
+FAIL reduceProduct float32 3D tensor default options / async promise_test: Unhandled rejection with value: object "TypeError: builder[operationName] is not a function"
+FAIL reduceProduct float32 4D tensor default options / async promise_test: Unhandled rejection with value: object "TypeError: builder[operationName] is not a function"
+FAIL reduceProduct float32 5D tensor default options / async promise_test: Unhandled rejection with value: object "TypeError: builder[operationName] is not a function"
+FAIL reduceProduct float32 3D tensor options.axes / async promise_test: Unhandled rejection with value: object "TypeError: builder[operationName] is not a function"
+FAIL reduceProduct float32 4D tensor options.axes / async promise_test: Unhandled rejection with value: object "TypeError: builder[operationName] is not a function"
+FAIL reduceProduct float32 3D tensor options.keepDimensions=false / async promise_test: Unhandled rejection with value: object "TypeError: builder[operationName] is not a function"
+FAIL reduceProduct float32 3D tensor options.keepDimensions=true / async promise_test: Unhandled rejection with value: object "TypeError: builder[operationName] is not a function"
+FAIL reduceProduct float32 4D tensor options.keepDimensions=false / async promise_test: Unhandled rejection with value: object "TypeError: builder[operationName] is not a function"
+FAIL reduceProduct float32 4D tensor options.keepDimensions=true / async promise_test: Unhandled rejection with value: object "TypeError: builder[operationName] is not a function"
+FAIL reduceProduct float32 4D tensor options.axes with options.keepDimensions=false / async promise_test: Unhandled rejection with value: object "TypeError: builder[operationName] is not a function"
+FAIL reduceProduct float32 4D tensor options.axes with options.keepDimensions=true / async promise_test: Unhandled rejection with value: object "TypeError: builder[operationName] is not a function"
+FAIL reduceSum float32 1D tensor all positive default options / async promise_test: Unhandled rejection with value: object "NotSupportedError: The operator (reduceSum) is not supported."
+FAIL reduceSum float32 1D tensor all negative default options / async promise_test: Unhandled rejection with value: object "NotSupportedError: The operator (reduceSum) is not supported."
+FAIL reduceSum float32 1D tensor all positive integers default options / async promise_test: Unhandled rejection with value: object "NotSupportedError: The operator (reduceSum) is not supported."
+FAIL reduceSum float32 1D tensor all negative integers default options / async promise_test: Unhandled rejection with value: object "NotSupportedError: The operator (reduceSum) is not supported."
+FAIL reduceSum float32 2D tensor default options / async promise_test: Unhandled rejection with value: object "NotSupportedError: The operator (reduceSum) is not supported."
+FAIL reduceSum float32 3D tensor default options / async promise_test: Unhandled rejection with value: object "NotSupportedError: The operator (reduceSum) is not supported."
+FAIL reduceSum float32 4D tensor default options / async promise_test: Unhandled rejection with value: object "NotSupportedError: The operator (reduceSum) is not supported."
+FAIL reduceSum float32 5D tensor default options / async promise_test: Unhandled rejection with value: object "NotSupportedError: The operator (reduceSum) is not supported."
+FAIL reduceSum float32 3D tensor options.axes / async promise_test: Unhandled rejection with value: object "NotSupportedError: The operator (reduceSum) is not supported."
+FAIL reduceSum float32 4D tensor options.axes / async promise_test: Unhandled rejection with value: object "NotSupportedError: The operator (reduceSum) is not supported."
+FAIL reduceSum float32 3D tensor options.keepDimensions=false / async promise_test: Unhandled rejection with value: object "NotSupportedError: The operator (reduceSum) is not supported."
+FAIL reduceSum float32 3D tensor options.keepDimensions=true / async promise_test: Unhandled rejection with value: object "NotSupportedError: XNNPACK can't support keep dimensions."
+FAIL reduceSum float32 4D tensor options.keepDimensions=false / async promise_test: Unhandled rejection with value: object "NotSupportedError: The operator (reduceSum) is not supported."
+FAIL reduceSum float32 4D tensor options.keepDimensions=true / async promise_test: Unhandled rejection with value: object "NotSupportedError: XNNPACK can't support keep dimensions."
+FAIL reduceSum float32 4D tensor options.axes with options.keepDimensions=false / async promise_test: Unhandled rejection with value: object "NotSupportedError: The operator (reduceSum) is not supported."
+FAIL reduceSum float32 4D tensor options.axes with options.keepDimensions=true / async promise_test: Unhandled rejection with value: object "NotSupportedError: The operator (reduceSum) is not supported."
+FAIL reduceSumSquare float32 1D tensor all positive default options / async promise_test: Unhandled rejection with value: object "TypeError: builder[operationName] is not a function"
+FAIL reduceSumSquare float32 1D tensor all negative default options / async promise_test: Unhandled rejection with value: object "TypeError: builder[operationName] is not a function"
+FAIL reduceSumSquare float32 1D tensor all positive integers default options / async promise_test: Unhandled rejection with value: object "TypeError: builder[operationName] is not a function"
+FAIL reduceSumSquare float32 1D tensor all negative integers default options / async promise_test: Unhandled rejection with value: object "TypeError: builder[operationName] is not a function"
+FAIL reduceSumSquare float32 2D tensor default options / async promise_test: Unhandled rejection with value: object "TypeError: builder[operationName] is not a function"
+FAIL reduceSumSquare float32 3D tensor default options / async promise_test: Unhandled rejection with value: object "TypeError: builder[operationName] is not a function"
+FAIL reduceSumSquare float32 4D tensor default options / async promise_test: Unhandled rejection with value: object "TypeError: builder[operationName] is not a function"
+FAIL reduceSumSquare float32 5D tensor default options / async promise_test: Unhandled rejection with value: object "TypeError: builder[operationName] is not a function"
+FAIL reduceSumSquare float32 3D tensor options.axes / async promise_test: Unhandled rejection with value: object "TypeError: builder[operationName] is not a function"
+FAIL reduceSumSquare float32 4D tensor options.axes / async promise_test: Unhandled rejection with value: object "TypeError: builder[operationName] is not a function"
+FAIL reduceSumSquare float32 3D tensor options.keepDimensions=false / async promise_test: Unhandled rejection with value: object "TypeError: builder[operationName] is not a function"
+FAIL reduceSumSquare float32 3D tensor options.keepDimensions=true / async promise_test: Unhandled rejection with value: object "TypeError: builder[operationName] is not a function"
+FAIL reduceSumSquare float32 4D tensor options.keepDimensions=false / async promise_test: Unhandled rejection with value: object "TypeError: builder[operationName] is not a function"
+FAIL reduceSumSquare float32 4D tensor options.keepDimensions=true / async promise_test: Unhandled rejection with value: object "TypeError: builder[operationName] is not a function"
+FAIL reduceSumSquare float32 4D tensor options.axes with options.keepDimensions=false / async promise_test: Unhandled rejection with value: object "TypeError: builder[operationName] is not a function"
+FAIL reduceSumSquare float32 4D tensor options.axes with options.keepDimensions=true / async promise_test: Unhandled rejection with value: object "TypeError: builder[operationName] is not a function"
+Harness: the test ran to completion.
+
diff --git a/third_party/blink/web_tests/platform/fuchsia/external/wpt/webnn/reduction.https.any.worker-expected.txt b/third_party/blink/web_tests/platform/fuchsia/external/wpt/webnn/reduction.https.any.worker-expected.txt
new file mode 100644
index 0000000..5d6aa3b
--- /dev/null
+++ b/third_party/blink/web_tests/platform/fuchsia/external/wpt/webnn/reduction.https.any.worker-expected.txt
@@ -0,0 +1,302 @@
+This is a testharness.js-based test.
+Found 298 tests; 11 PASS, 287 FAIL, 0 TIMEOUT, 0 NOTRUN.
+FAIL reduceL1 float32 1D tensor all positive default options / sync builder[operationName] is not a function
+FAIL reduceL1 float32 1D tensor all negative default options / sync builder[operationName] is not a function
+FAIL reduceL1 float32 1D tensor all positive integers default options / sync builder[operationName] is not a function
+FAIL reduceL1 float32 1D tensor all negative integers default options / sync builder[operationName] is not a function
+FAIL reduceL1 float32 2D tensor default options / sync builder[operationName] is not a function
+FAIL reduceL1 float32 3D tensor default options / sync builder[operationName] is not a function
+FAIL reduceL1 float32 4D tensor default options / sync builder[operationName] is not a function
+FAIL reduceL1 float32 5D tensor default options / sync builder[operationName] is not a function
+FAIL reduceL1 float32 3D tensor options.axes / sync builder[operationName] is not a function
+FAIL reduceL1 float32 4D tensor options.axes / sync builder[operationName] is not a function
+FAIL reduceL1 float32 3D tensor options.keepDimensions=false / sync builder[operationName] is not a function
+FAIL reduceL1 float32 3D tensor options.keepDimensions=true / sync builder[operationName] is not a function
+FAIL reduceL1 float32 4D tensor options.keepDimensions=false / sync builder[operationName] is not a function
+FAIL reduceL1 float32 4D tensor options.keepDimensions=true / sync builder[operationName] is not a function
+FAIL reduceL1 float32 4D tensor options.axes with options.keepDimensions=false / sync builder[operationName] is not a function
+FAIL reduceL1 float32 4D tensor options.axes with options.keepDimensions=true / sync builder[operationName] is not a function
+FAIL reduceL2 float32 1D tensor all positive default options / sync builder[operationName] is not a function
+FAIL reduceL2 float32 1D tensor all negative default options / sync builder[operationName] is not a function
+FAIL reduceL2 float32 1D tensor all positive integers default options / sync builder[operationName] is not a function
+FAIL reduceL2 float32 1D tensor all negative integers default options / sync builder[operationName] is not a function
+FAIL reduceL2 float32 2D tensor default options / sync builder[operationName] is not a function
+FAIL reduceL2 float32 3D tensor default options / sync builder[operationName] is not a function
+FAIL reduceL2 float32 4D tensor default options / sync builder[operationName] is not a function
+FAIL reduceL2 float32 5D tensor default options / sync builder[operationName] is not a function
+FAIL reduceL2 float32 3D tensor options.axes / sync builder[operationName] is not a function
+FAIL reduceL2 float32 4D tensor options.axes / sync builder[operationName] is not a function
+FAIL reduceL2 float32 3D tensor options.keepDimensions=false / sync builder[operationName] is not a function
+FAIL reduceL2 float32 3D tensor options.keepDimensions=true / sync builder[operationName] is not a function
+FAIL reduceL2 float32 4D tensor options.keepDimensions=false / sync builder[operationName] is not a function
+FAIL reduceL2 float32 4D tensor options.keepDimensions=true / sync builder[operationName] is not a function
+FAIL reduceL2 float32 4D tensor options.axes with options.keepDimensions=false / sync builder[operationName] is not a function
+FAIL reduceL2 float32 4D tensor options.axes with options.keepDimensions=true / sync builder[operationName] is not a function
+FAIL reduceLogSum float32 1D tensor all non-negative default options / sync builder[operationName] is not a function
+FAIL reduceLogSum float32 1D tensor all non-negative integers default options / sync builder[operationName] is not a function
+FAIL reduceLogSum float32 2D tensor default options / sync builder[operationName] is not a function
+FAIL reduceLogSum float32 3D tensor default options / sync builder[operationName] is not a function
+FAIL reduceLogSum float32 4D tensor default options / sync builder[operationName] is not a function
+FAIL reduceLogSum float32 5D tensor default options / sync builder[operationName] is not a function
+FAIL reduceLogSum float32 3D tensor options.axes / sync builder[operationName] is not a function
+FAIL reduceLogSum float32 4D tensor options.axes / sync builder[operationName] is not a function
+FAIL reduceLogSum float32 3D tensor options.keepDimensions=false / sync builder[operationName] is not a function
+FAIL reduceLogSum float32 3D tensor options.keepDimensions=true / sync builder[operationName] is not a function
+FAIL reduceLogSum float32 4D tensor options.keepDimensions=false / sync builder[operationName] is not a function
+FAIL reduceLogSum float32 4D tensor options.keepDimensions=true / sync builder[operationName] is not a function
+FAIL reduceLogSum float32 4D tensor options.axes with options.keepDimensions=false / sync builder[operationName] is not a function
+FAIL reduceLogSum float32 4D tensor options.axes with options.keepDimensions=true / sync builder[operationName] is not a function
+FAIL reduceLogSumExp float32 1D tensor all positive default options / sync builder[operationName] is not a function
+FAIL reduceLogSumExp float32 1D tensor all negative default options / sync builder[operationName] is not a function
+FAIL reduceLogSumExp float32 1D tensor all positive integers default options / sync builder[operationName] is not a function
+FAIL reduceLogSumExp float32 1D tensor all negative integers default options / sync builder[operationName] is not a function
+FAIL reduceLogSumExp float32 2D tensor default options / sync builder[operationName] is not a function
+FAIL reduceLogSumExp float32 3D tensor default options / sync builder[operationName] is not a function
+FAIL reduceLogSumExp float32 4D tensor default options / sync builder[operationName] is not a function
+FAIL reduceLogSumExp float32 5D tensor default options / sync builder[operationName] is not a function
+FAIL reduceLogSumExp float32 3D tensor options.axes / sync builder[operationName] is not a function
+FAIL reduceLogSumExp float32 4D tensor options.axes / sync builder[operationName] is not a function
+FAIL reduceLogSumExp float32 3D tensor options.keepDimensions=false / sync builder[operationName] is not a function
+FAIL reduceLogSumExp float32 3D tensor options.keepDimensions=true / sync builder[operationName] is not a function
+FAIL reduceLogSumExp float32 4D tensor options.keepDimensions=false / sync builder[operationName] is not a function
+FAIL reduceLogSumExp float32 4D tensor options.keepDimensions=true / sync builder[operationName] is not a function
+FAIL reduceLogSumExp float32 4D tensor options.axes with options.keepDimensions=false / sync builder[operationName] is not a function
+FAIL reduceLogSumExp float32 4D tensor options.axes with options.keepDimensions=true / sync builder[operationName] is not a function
+FAIL reduceMax float32 1D tensor default options / sync builder[operationName] is not a function
+FAIL reduceMax float32 2D tensor default options / sync builder[operationName] is not a function
+FAIL reduceMax float32 3D tensor default options / sync builder[operationName] is not a function
+FAIL reduceMax float32 4D tensor default options / sync builder[operationName] is not a function
+FAIL reduceMax float32 5D tensor default options / sync builder[operationName] is not a function
+FAIL reduceMax float32 3D tensor options.axes / sync builder[operationName] is not a function
+FAIL reduceMax float32 4D tensor options.axes / sync builder[operationName] is not a function
+FAIL reduceMax float32 3D tensor options.keepDimensions=false / sync builder[operationName] is not a function
+FAIL reduceMax float32 3D tensor options.keepDimensions=true / sync builder[operationName] is not a function
+FAIL reduceMax float32 4D tensor options.keepDimensions=false / sync builder[operationName] is not a function
+FAIL reduceMax float32 4D tensor options.keepDimensions=true / sync builder[operationName] is not a function
+FAIL reduceMax float32 4D tensor options.axes with options.keepDimensions=false / sync builder[operationName] is not a function
+FAIL reduceMax float32 4D tensor options.axes with options.keepDimensions=true / sync builder[operationName] is not a function
+PASS reduceMean float32 1D tensor all positive default options / sync
+PASS reduceMean float32 1D tensor all negative default options / sync
+PASS reduceMean float32 1D tensor all positive integers default options / sync
+PASS reduceMean float32 1D tensor all negative integers default options / sync
+PASS reduceMean float32 2D tensor default options / sync
+PASS reduceMean float32 3D tensor default options / sync
+PASS reduceMean float32 4D tensor default options / sync
+PASS reduceMean float32 5D tensor default options / sync
+PASS reduceMean float32 3D tensor options.axes / sync
+FAIL reduceMean float32 4D tensor options.axes / sync Failed to execute 'buildSync' on 'MLGraphBuilder': Failed to call xnn_define_static_mean( subgraph, reduction_axes.size(), reduction_axes.data(), input_id, output_id, flags): xnn_status_invalid_parameter.
+PASS reduceMean float32 3D tensor options.keepDimensions=false / sync
+FAIL reduceMean float32 3D tensor options.keepDimensions=true / sync Failed to execute 'buildSync' on 'MLGraphBuilder': XNNPACK can't support keep dimensions.
+PASS reduceMean float32 4D tensor options.keepDimensions=false / sync
+FAIL reduceMean float32 4D tensor options.keepDimensions=true / sync Failed to execute 'buildSync' on 'MLGraphBuilder': XNNPACK can't support keep dimensions.
+FAIL reduceMean float32 4D tensor options.axes with options.keepDimensions=false / sync Failed to execute 'buildSync' on 'MLGraphBuilder': Failed to call xnn_define_static_mean( subgraph, reduction_axes.size(), reduction_axes.data(), input_id, output_id, flags): xnn_status_invalid_parameter.
+FAIL reduceMean float32 4D tensor options.axes with options.keepDimensions=true / sync Failed to execute 'buildSync' on 'MLGraphBuilder': Failed to call xnn_define_static_mean( subgraph, reduction_axes.size(), reduction_axes.data(), input_id, output_id, flags): xnn_status_invalid_parameter.
+FAIL reduceMin float32 1D tensor default options / sync builder[operationName] is not a function
+FAIL reduceMin float32 2D tensor default options / sync builder[operationName] is not a function
+FAIL reduceMin float32 3D tensor default options / sync builder[operationName] is not a function
+FAIL reduceMin float32 4D tensor default options / sync builder[operationName] is not a function
+FAIL reduceMin float32 5D tensor default options / sync builder[operationName] is not a function
+FAIL reduceMin float32 3D tensor options.axes / sync builder[operationName] is not a function
+FAIL reduceMin float32 4D tensor options.axes / sync builder[operationName] is not a function
+FAIL reduceMin float32 3D tensor options.keepDimensions=false / sync builder[operationName] is not a function
+FAIL reduceMin float32 3D tensor options.keepDimensions=true / sync builder[operationName] is not a function
+FAIL reduceMin float32 4D tensor options.keepDimensions=false / sync builder[operationName] is not a function
+FAIL reduceMin float32 4D tensor options.keepDimensions=true / sync builder[operationName] is not a function
+FAIL reduceMin float32 4D tensor options.axes with options.keepDimensions=false / sync builder[operationName] is not a function
+FAIL reduceMin float32 4D tensor options.axes with options.keepDimensions=true / sync builder[operationName] is not a function
+FAIL reduceProduct float32 1D tensor default options / sync builder[operationName] is not a function
+FAIL reduceProduct float32 2D tensor default options / sync builder[operationName] is not a function
+FAIL reduceProduct float32 3D tensor default options / sync builder[operationName] is not a function
+FAIL reduceProduct float32 4D tensor default options / sync builder[operationName] is not a function
+FAIL reduceProduct float32 5D tensor default options / sync builder[operationName] is not a function
+FAIL reduceProduct float32 3D tensor options.axes / sync builder[operationName] is not a function
+FAIL reduceProduct float32 4D tensor options.axes / sync builder[operationName] is not a function
+FAIL reduceProduct float32 3D tensor options.keepDimensions=false / sync builder[operationName] is not a function
+FAIL reduceProduct float32 3D tensor options.keepDimensions=true / sync builder[operationName] is not a function
+FAIL reduceProduct float32 4D tensor options.keepDimensions=false / sync builder[operationName] is not a function
+FAIL reduceProduct float32 4D tensor options.keepDimensions=true / sync builder[operationName] is not a function
+FAIL reduceProduct float32 4D tensor options.axes with options.keepDimensions=false / sync builder[operationName] is not a function
+FAIL reduceProduct float32 4D tensor options.axes with options.keepDimensions=true / sync builder[operationName] is not a function
+FAIL reduceSum float32 1D tensor all positive default options / sync Failed to execute 'buildSync' on 'MLGraphBuilder': The operator (reduceSum) is not supported.
+FAIL reduceSum float32 1D tensor all negative default options / sync Failed to execute 'buildSync' on 'MLGraphBuilder': The operator (reduceSum) is not supported.
+FAIL reduceSum float32 1D tensor all positive integers default options / sync Failed to execute 'buildSync' on 'MLGraphBuilder': The operator (reduceSum) is not supported.
+FAIL reduceSum float32 1D tensor all negative integers default options / sync Failed to execute 'buildSync' on 'MLGraphBuilder': The operator (reduceSum) is not supported.
+FAIL reduceSum float32 2D tensor default options / sync Failed to execute 'buildSync' on 'MLGraphBuilder': The operator (reduceSum) is not supported.
+FAIL reduceSum float32 3D tensor default options / sync Failed to execute 'buildSync' on 'MLGraphBuilder': The operator (reduceSum) is not supported.
+FAIL reduceSum float32 4D tensor default options / sync Failed to execute 'buildSync' on 'MLGraphBuilder': The operator (reduceSum) is not supported.
+FAIL reduceSum float32 5D tensor default options / sync Failed to execute 'buildSync' on 'MLGraphBuilder': The operator (reduceSum) is not supported.
+FAIL reduceSum float32 3D tensor options.axes / sync Failed to execute 'buildSync' on 'MLGraphBuilder': The operator (reduceSum) is not supported.
+FAIL reduceSum float32 4D tensor options.axes / sync Failed to execute 'buildSync' on 'MLGraphBuilder': The operator (reduceSum) is not supported.
+FAIL reduceSum float32 3D tensor options.keepDimensions=false / sync Failed to execute 'buildSync' on 'MLGraphBuilder': The operator (reduceSum) is not supported.
+FAIL reduceSum float32 3D tensor options.keepDimensions=true / sync Failed to execute 'buildSync' on 'MLGraphBuilder': XNNPACK can't support keep dimensions.
+FAIL reduceSum float32 4D tensor options.keepDimensions=false / sync Failed to execute 'buildSync' on 'MLGraphBuilder': The operator (reduceSum) is not supported.
+FAIL reduceSum float32 4D tensor options.keepDimensions=true / sync Failed to execute 'buildSync' on 'MLGraphBuilder': XNNPACK can't support keep dimensions.
+FAIL reduceSum float32 4D tensor options.axes with options.keepDimensions=false / sync Failed to execute 'buildSync' on 'MLGraphBuilder': The operator (reduceSum) is not supported.
+FAIL reduceSum float32 4D tensor options.axes with options.keepDimensions=true / sync Failed to execute 'buildSync' on 'MLGraphBuilder': The operator (reduceSum) is not supported.
+FAIL reduceSumSquare float32 1D tensor all positive default options / sync builder[operationName] is not a function
+FAIL reduceSumSquare float32 1D tensor all negative default options / sync builder[operationName] is not a function
+FAIL reduceSumSquare float32 1D tensor all positive integers default options / sync builder[operationName] is not a function
+FAIL reduceSumSquare float32 1D tensor all negative integers default options / sync builder[operationName] is not a function
+FAIL reduceSumSquare float32 2D tensor default options / sync builder[operationName] is not a function
+FAIL reduceSumSquare float32 3D tensor default options / sync builder[operationName] is not a function
+FAIL reduceSumSquare float32 4D tensor default options / sync builder[operationName] is not a function
+FAIL reduceSumSquare float32 5D tensor default options / sync builder[operationName] is not a function
+FAIL reduceSumSquare float32 3D tensor options.axes / sync builder[operationName] is not a function
+FAIL reduceSumSquare float32 4D tensor options.axes / sync builder[operationName] is not a function
+FAIL reduceSumSquare float32 3D tensor options.keepDimensions=false / sync builder[operationName] is not a function
+FAIL reduceSumSquare float32 3D tensor options.keepDimensions=true / sync builder[operationName] is not a function
+FAIL reduceSumSquare float32 4D tensor options.keepDimensions=false / sync builder[operationName] is not a function
+FAIL reduceSumSquare float32 4D tensor options.keepDimensions=true / sync builder[operationName] is not a function
+FAIL reduceSumSquare float32 4D tensor options.axes with options.keepDimensions=false / sync builder[operationName] is not a function
+FAIL reduceSumSquare float32 4D tensor options.axes with options.keepDimensions=true / sync builder[operationName] is not a function
+FAIL reduceL1 float32 1D tensor all positive default options / async promise_test: Unhandled rejection with value: object "TypeError: builder[operationName] is not a function"
+FAIL reduceL1 float32 1D tensor all negative default options / async promise_test: Unhandled rejection with value: object "TypeError: builder[operationName] is not a function"
+FAIL reduceL1 float32 1D tensor all positive integers default options / async promise_test: Unhandled rejection with value: object "TypeError: builder[operationName] is not a function"
+FAIL reduceL1 float32 1D tensor all negative integers default options / async promise_test: Unhandled rejection with value: object "TypeError: builder[operationName] is not a function"
+FAIL reduceL1 float32 2D tensor default options / async promise_test: Unhandled rejection with value: object "TypeError: builder[operationName] is not a function"
+FAIL reduceL1 float32 3D tensor default options / async promise_test: Unhandled rejection with value: object "TypeError: builder[operationName] is not a function"
+FAIL reduceL1 float32 4D tensor default options / async promise_test: Unhandled rejection with value: object "TypeError: builder[operationName] is not a function"
+FAIL reduceL1 float32 5D tensor default options / async promise_test: Unhandled rejection with value: object "TypeError: builder[operationName] is not a function"
+FAIL reduceL1 float32 3D tensor options.axes / async promise_test: Unhandled rejection with value: object "TypeError: builder[operationName] is not a function"
+FAIL reduceL1 float32 4D tensor options.axes / async promise_test: Unhandled rejection with value: object "TypeError: builder[operationName] is not a function"
+FAIL reduceL1 float32 3D tensor options.keepDimensions=false / async promise_test: Unhandled rejection with value: object "TypeError: builder[operationName] is not a function"
+FAIL reduceL1 float32 3D tensor options.keepDimensions=true / async promise_test: Unhandled rejection with value: object "TypeError: builder[operationName] is not a function"
+FAIL reduceL1 float32 4D tensor options.keepDimensions=false / async promise_test: Unhandled rejection with value: object "TypeError: builder[operationName] is not a function"
+FAIL reduceL1 float32 4D tensor options.keepDimensions=true / async promise_test: Unhandled rejection with value: object "TypeError: builder[operationName] is not a function"
+FAIL reduceL1 float32 4D tensor options.axes with options.keepDimensions=false / async promise_test: Unhandled rejection with value: object "TypeError: builder[operationName] is not a function"
+FAIL reduceL1 float32 4D tensor options.axes with options.keepDimensions=true / async promise_test: Unhandled rejection with value: object "TypeError: builder[operationName] is not a function"
+FAIL reduceL2 float32 1D tensor all positive default options / async promise_test: Unhandled rejection with value: object "TypeError: builder[operationName] is not a function"
+FAIL reduceL2 float32 1D tensor all negative default options / async promise_test: Unhandled rejection with value: object "TypeError: builder[operationName] is not a function"
+FAIL reduceL2 float32 1D tensor all positive integers default options / async promise_test: Unhandled rejection with value: object "TypeError: builder[operationName] is not a function"
+FAIL reduceL2 float32 1D tensor all negative integers default options / async promise_test: Unhandled rejection with value: object "TypeError: builder[operationName] is not a function"
+FAIL reduceL2 float32 2D tensor default options / async promise_test: Unhandled rejection with value: object "TypeError: builder[operationName] is not a function"
+FAIL reduceL2 float32 3D tensor default options / async promise_test: Unhandled rejection with value: object "TypeError: builder[operationName] is not a function"
+FAIL reduceL2 float32 4D tensor default options / async promise_test: Unhandled rejection with value: object "TypeError: builder[operationName] is not a function"
+FAIL reduceL2 float32 5D tensor default options / async promise_test: Unhandled rejection with value: object "TypeError: builder[operationName] is not a function"
+FAIL reduceL2 float32 3D tensor options.axes / async promise_test: Unhandled rejection with value: object "TypeError: builder[operationName] is not a function"
+FAIL reduceL2 float32 4D tensor options.axes / async promise_test: Unhandled rejection with value: object "TypeError: builder[operationName] is not a function"
+FAIL reduceL2 float32 3D tensor options.keepDimensions=false / async promise_test: Unhandled rejection with value: object "TypeError: builder[operationName] is not a function"
+FAIL reduceL2 float32 3D tensor options.keepDimensions=true / async promise_test: Unhandled rejection with value: object "TypeError: builder[operationName] is not a function"
+FAIL reduceL2 float32 4D tensor options.keepDimensions=false / async promise_test: Unhandled rejection with value: object "TypeError: builder[operationName] is not a function"
+FAIL reduceL2 float32 4D tensor options.keepDimensions=true / async promise_test: Unhandled rejection with value: object "TypeError: builder[operationName] is not a function"
+FAIL reduceL2 float32 4D tensor options.axes with options.keepDimensions=false / async promise_test: Unhandled rejection with value: object "TypeError: builder[operationName] is not a function"
+FAIL reduceL2 float32 4D tensor options.axes with options.keepDimensions=true / async promise_test: Unhandled rejection with value: object "TypeError: builder[operationName] is not a function"
+FAIL reduceLogSum float32 1D tensor all non-negative default options / async promise_test: Unhandled rejection with value: object "TypeError: builder[operationName] is not a function"
+FAIL reduceLogSum float32 1D tensor all non-negative integers default options / async promise_test: Unhandled rejection with value: object "TypeError: builder[operationName] is not a function"
+FAIL reduceLogSum float32 2D tensor default options / async promise_test: Unhandled rejection with value: object "TypeError: builder[operationName] is not a function"
+FAIL reduceLogSum float32 3D tensor default options / async promise_test: Unhandled rejection with value: object "TypeError: builder[operationName] is not a function"
+FAIL reduceLogSum float32 4D tensor default options / async promise_test: Unhandled rejection with value: object "TypeError: builder[operationName] is not a function"
+FAIL reduceLogSum float32 5D tensor default options / async promise_test: Unhandled rejection with value: object "TypeError: builder[operationName] is not a function"
+FAIL reduceLogSum float32 3D tensor options.axes / async promise_test: Unhandled rejection with value: object "TypeError: builder[operationName] is not a function"
+FAIL reduceLogSum float32 4D tensor options.axes / async promise_test: Unhandled rejection with value: object "TypeError: builder[operationName] is not a function"
+FAIL reduceLogSum float32 3D tensor options.keepDimensions=false / async promise_test: Unhandled rejection with value: object "TypeError: builder[operationName] is not a function"
+FAIL reduceLogSum float32 3D tensor options.keepDimensions=true / async promise_test: Unhandled rejection with value: object "TypeError: builder[operationName] is not a function"
+FAIL reduceLogSum float32 4D tensor options.keepDimensions=false / async promise_test: Unhandled rejection with value: object "TypeError: builder[operationName] is not a function"
+FAIL reduceLogSum float32 4D tensor options.keepDimensions=true / async promise_test: Unhandled rejection with value: object "TypeError: builder[operationName] is not a function"
+FAIL reduceLogSum float32 4D tensor options.axes with options.keepDimensions=false / async promise_test: Unhandled rejection with value: object "TypeError: builder[operationName] is not a function"
+FAIL reduceLogSum float32 4D tensor options.axes with options.keepDimensions=true / async promise_test: Unhandled rejection with value: object "TypeError: builder[operationName] is not a function"
+FAIL reduceLogSumExp float32 1D tensor all positive default options / async promise_test: Unhandled rejection with value: object "TypeError: builder[operationName] is not a function"
+FAIL reduceLogSumExp float32 1D tensor all negative default options / async promise_test: Unhandled rejection with value: object "TypeError: builder[operationName] is not a function"
+FAIL reduceLogSumExp float32 1D tensor all positive integers default options / async promise_test: Unhandled rejection with value: object "TypeError: builder[operationName] is not a function"
+FAIL reduceLogSumExp float32 1D tensor all negative integers default options / async promise_test: Unhandled rejection with value: object "TypeError: builder[operationName] is not a function"
+FAIL reduceLogSumExp float32 2D tensor default options / async promise_test: Unhandled rejection with value: object "TypeError: builder[operationName] is not a function"
+FAIL reduceLogSumExp float32 3D tensor default options / async promise_test: Unhandled rejection with value: object "TypeError: builder[operationName] is not a function"
+FAIL reduceLogSumExp float32 4D tensor default options / async promise_test: Unhandled rejection with value: object "TypeError: builder[operationName] is not a function"
+FAIL reduceLogSumExp float32 5D tensor default options / async promise_test: Unhandled rejection with value: object "TypeError: builder[operationName] is not a function"
+FAIL reduceLogSumExp float32 3D tensor options.axes / async promise_test: Unhandled rejection with value: object "TypeError: builder[operationName] is not a function"
+FAIL reduceLogSumExp float32 4D tensor options.axes / async promise_test: Unhandled rejection with value: object "TypeError: builder[operationName] is not a function"
+FAIL reduceLogSumExp float32 3D tensor options.keepDimensions=false / async promise_test: Unhandled rejection with value: object "TypeError: builder[operationName] is not a function"
+FAIL reduceLogSumExp float32 3D tensor options.keepDimensions=true / async promise_test: Unhandled rejection with value: object "TypeError: builder[operationName] is not a function"
+FAIL reduceLogSumExp float32 4D tensor options.keepDimensions=false / async promise_test: Unhandled rejection with value: object "TypeError: builder[operationName] is not a function"
+FAIL reduceLogSumExp float32 4D tensor options.keepDimensions=true / async promise_test: Unhandled rejection with value: object "TypeError: builder[operationName] is not a function"
+FAIL reduceLogSumExp float32 4D tensor options.axes with options.keepDimensions=false / async promise_test: Unhandled rejection with value: object "TypeError: builder[operationName] is not a function"
+FAIL reduceLogSumExp float32 4D tensor options.axes with options.keepDimensions=true / async promise_test: Unhandled rejection with value: object "TypeError: builder[operationName] is not a function"
+FAIL reduceMax float32 1D tensor default options / async promise_test: Unhandled rejection with value: object "TypeError: builder[operationName] is not a function"
+FAIL reduceMax float32 2D tensor default options / async promise_test: Unhandled rejection with value: object "TypeError: builder[operationName] is not a function"
+FAIL reduceMax float32 3D tensor default options / async promise_test: Unhandled rejection with value: object "TypeError: builder[operationName] is not a function"
+FAIL reduceMax float32 4D tensor default options / async promise_test: Unhandled rejection with value: object "TypeError: builder[operationName] is not a function"
+FAIL reduceMax float32 5D tensor default options / async promise_test: Unhandled rejection with value: object "TypeError: builder[operationName] is not a function"
+FAIL reduceMax float32 3D tensor options.axes / async promise_test: Unhandled rejection with value: object "TypeError: builder[operationName] is not a function"
+FAIL reduceMax float32 4D tensor options.axes / async promise_test: Unhandled rejection with value: object "TypeError: builder[operationName] is not a function"
+FAIL reduceMax float32 3D tensor options.keepDimensions=false / async promise_test: Unhandled rejection with value: object "TypeError: builder[operationName] is not a function"
+FAIL reduceMax float32 3D tensor options.keepDimensions=true / async promise_test: Unhandled rejection with value: object "TypeError: builder[operationName] is not a function"
+FAIL reduceMax float32 4D tensor options.keepDimensions=false / async promise_test: Unhandled rejection with value: object "TypeError: builder[operationName] is not a function"
+FAIL reduceMax float32 4D tensor options.keepDimensions=true / async promise_test: Unhandled rejection with value: object "TypeError: builder[operationName] is not a function"
+FAIL reduceMax float32 4D tensor options.axes with options.keepDimensions=false / async promise_test: Unhandled rejection with value: object "TypeError: builder[operationName] is not a function"
+FAIL reduceMax float32 4D tensor options.axes with options.keepDimensions=true / async promise_test: Unhandled rejection with value: object "TypeError: builder[operationName] is not a function"
+FAIL reduceMean float32 1D tensor all positive default options / async promise_test: Unhandled rejection with value: object "TypeError: builder.build is not a function"
+FAIL reduceMean float32 1D tensor all negative default options / async promise_test: Unhandled rejection with value: object "TypeError: builder.build is not a function"
+FAIL reduceMean float32 1D tensor all positive integers default options / async promise_test: Unhandled rejection with value: object "TypeError: builder.build is not a function"
+FAIL reduceMean float32 1D tensor all negative integers default options / async promise_test: Unhandled rejection with value: object "TypeError: builder.build is not a function"
+FAIL reduceMean float32 2D tensor default options / async promise_test: Unhandled rejection with value: object "TypeError: builder.build is not a function"
+FAIL reduceMean float32 3D tensor default options / async promise_test: Unhandled rejection with value: object "TypeError: builder.build is not a function"
+FAIL reduceMean float32 4D tensor default options / async promise_test: Unhandled rejection with value: object "TypeError: builder.build is not a function"
+FAIL reduceMean float32 5D tensor default options / async promise_test: Unhandled rejection with value: object "TypeError: builder.build is not a function"
+FAIL reduceMean float32 3D tensor options.axes / async promise_test: Unhandled rejection with value: object "TypeError: builder.build is not a function"
+FAIL reduceMean float32 4D tensor options.axes / async promise_test: Unhandled rejection with value: object "TypeError: builder.build is not a function"
+FAIL reduceMean float32 3D tensor options.keepDimensions=false / async promise_test: Unhandled rejection with value: object "TypeError: builder.build is not a function"
+FAIL reduceMean float32 3D tensor options.keepDimensions=true / async promise_test: Unhandled rejection with value: object "TypeError: builder.build is not a function"
+FAIL reduceMean float32 4D tensor options.keepDimensions=false / async promise_test: Unhandled rejection with value: object "TypeError: builder.build is not a function"
+FAIL reduceMean float32 4D tensor options.keepDimensions=true / async promise_test: Unhandled rejection with value: object "TypeError: builder.build is not a function"
+FAIL reduceMean float32 4D tensor options.axes with options.keepDimensions=false / async promise_test: Unhandled rejection with value: object "TypeError: builder.build is not a function"
+FAIL reduceMean float32 4D tensor options.axes with options.keepDimensions=true / async promise_test: Unhandled rejection with value: object "TypeError: builder.build is not a function"
+FAIL reduceMin float32 1D tensor default options / async promise_test: Unhandled rejection with value: object "TypeError: builder[operationName] is not a function"
+FAIL reduceMin float32 2D tensor default options / async promise_test: Unhandled rejection with value: object "TypeError: builder[operationName] is not a function"
+FAIL reduceMin float32 3D tensor default options / async promise_test: Unhandled rejection with value: object "TypeError: builder[operationName] is not a function"
+FAIL reduceMin float32 4D tensor default options / async promise_test: Unhandled rejection with value: object "TypeError: builder[operationName] is not a function"
+FAIL reduceMin float32 5D tensor default options / async promise_test: Unhandled rejection with value: object "TypeError: builder[operationName] is not a function"
+FAIL reduceMin float32 3D tensor options.axes / async promise_test: Unhandled rejection with value: object "TypeError: builder[operationName] is not a function"
+FAIL reduceMin float32 4D tensor options.axes / async promise_test: Unhandled rejection with value: object "TypeError: builder[operationName] is not a function"
+FAIL reduceMin float32 3D tensor options.keepDimensions=false / async promise_test: Unhandled rejection with value: object "TypeError: builder[operationName] is not a function"
+FAIL reduceMin float32 3D tensor options.keepDimensions=true / async promise_test: Unhandled rejection with value: object "TypeError: builder[operationName] is not a function"
+FAIL reduceMin float32 4D tensor options.keepDimensions=false / async promise_test: Unhandled rejection with value: object "TypeError: builder[operationName] is not a function"
+FAIL reduceMin float32 4D tensor options.keepDimensions=true / async promise_test: Unhandled rejection with value: object "TypeError: builder[operationName] is not a function"
+FAIL reduceMin float32 4D tensor options.axes with options.keepDimensions=false / async promise_test: Unhandled rejection with value: object "TypeError: builder[operationName] is not a function"
+FAIL reduceMin float32 4D tensor options.axes with options.keepDimensions=true / async promise_test: Unhandled rejection with value: object "TypeError: builder[operationName] is not a function"
+FAIL reduceProduct float32 1D tensor default options / async promise_test: Unhandled rejection with value: object "TypeError: builder[operationName] is not a function"
+FAIL reduceProduct float32 2D tensor default options / async promise_test: Unhandled rejection with value: object "TypeError: builder[operationName] is not a function"
+FAIL reduceProduct float32 3D tensor default options / async promise_test: Unhandled rejection with value: object "TypeError: builder[operationName] is not a function"
+FAIL reduceProduct float32 4D tensor default options / async promise_test: Unhandled rejection with value: object "TypeError: builder[operationName] is not a function"
+FAIL reduceProduct float32 5D tensor default options / async promise_test: Unhandled rejection with value: object "TypeError: builder[operationName] is not a function"
+FAIL reduceProduct float32 3D tensor options.axes / async promise_test: Unhandled rejection with value: object "TypeError: builder[operationName] is not a function"
+FAIL reduceProduct float32 4D tensor options.axes / async promise_test: Unhandled rejection with value: object "TypeError: builder[operationName] is not a function"
+FAIL reduceProduct float32 3D tensor options.keepDimensions=false / async promise_test: Unhandled rejection with value: object "TypeError: builder[operationName] is not a function"
+FAIL reduceProduct float32 3D tensor options.keepDimensions=true / async promise_test: Unhandled rejection with value: object "TypeError: builder[operationName] is not a function"
+FAIL reduceProduct float32 4D tensor options.keepDimensions=false / async promise_test: Unhandled rejection with value: object "TypeError: builder[operationName] is not a function"
+FAIL reduceProduct float32 4D tensor options.keepDimensions=true / async promise_test: Unhandled rejection with value: object "TypeError: builder[operationName] is not a function"
+FAIL reduceProduct float32 4D tensor options.axes with options.keepDimensions=false / async promise_test: Unhandled rejection with value: object "TypeError: builder[operationName] is not a function"
+FAIL reduceProduct float32 4D tensor options.axes with options.keepDimensions=true / async promise_test: Unhandled rejection with value: object "TypeError: builder[operationName] is not a function"
+FAIL reduceSum float32 1D tensor all positive default options / async promise_test: Unhandled rejection with value: object "TypeError: builder.build is not a function"
+FAIL reduceSum float32 1D tensor all negative default options / async promise_test: Unhandled rejection with value: object "TypeError: builder.build is not a function"
+FAIL reduceSum float32 1D tensor all positive integers default options / async promise_test: Unhandled rejection with value: object "TypeError: builder.build is not a function"
+FAIL reduceSum float32 1D tensor all negative integers default options / async promise_test: Unhandled rejection with value: object "TypeError: builder.build is not a function"
+FAIL reduceSum float32 2D tensor default options / async promise_test: Unhandled rejection with value: object "TypeError: builder.build is not a function"
+FAIL reduceSum float32 3D tensor default options / async promise_test: Unhandled rejection with value: object "TypeError: builder.build is not a function"
+FAIL reduceSum float32 4D tensor default options / async promise_test: Unhandled rejection with value: object "TypeError: builder.build is not a function"
+FAIL reduceSum float32 5D tensor default options / async promise_test: Unhandled rejection with value: object "TypeError: builder.build is not a function"
+FAIL reduceSum float32 3D tensor options.axes / async promise_test: Unhandled rejection with value: object "TypeError: builder.build is not a function"
+FAIL reduceSum float32 4D tensor options.axes / async promise_test: Unhandled rejection with value: object "TypeError: builder.build is not a function"
+FAIL reduceSum float32 3D tensor options.keepDimensions=false / async promise_test: Unhandled rejection with value: object "TypeError: builder.build is not a function"
+FAIL reduceSum float32 3D tensor options.keepDimensions=true / async promise_test: Unhandled rejection with value: object "TypeError: builder.build is not a function"
+FAIL reduceSum float32 4D tensor options.keepDimensions=false / async promise_test: Unhandled rejection with value: object "TypeError: builder.build is not a function"
+FAIL reduceSum float32 4D tensor options.keepDimensions=true / async promise_test: Unhandled rejection with value: object "TypeError: builder.build is not a function"
+FAIL reduceSum float32 4D tensor options.axes with options.keepDimensions=false / async promise_test: Unhandled rejection with value: object "TypeError: builder.build is not a function"
+FAIL reduceSum float32 4D tensor options.axes with options.keepDimensions=true / async promise_test: Unhandled rejection with value: object "TypeError: builder.build is not a function"
+FAIL reduceSumSquare float32 1D tensor all positive default options / async promise_test: Unhandled rejection with value: object "TypeError: builder[operationName] is not a function"
+FAIL reduceSumSquare float32 1D tensor all negative default options / async promise_test: Unhandled rejection with value: object "TypeError: builder[operationName] is not a function"
+FAIL reduceSumSquare float32 1D tensor all positive integers default options / async promise_test: Unhandled rejection with value: object "TypeError: builder[operationName] is not a function"
+FAIL reduceSumSquare float32 1D tensor all negative integers default options / async promise_test: Unhandled rejection with value: object "TypeError: builder[operationName] is not a function"
+FAIL reduceSumSquare float32 2D tensor default options / async promise_test: Unhandled rejection with value: object "TypeError: builder[operationName] is not a function"
+FAIL reduceSumSquare float32 3D tensor default options / async promise_test: Unhandled rejection with value: object "TypeError: builder[operationName] is not a function"
+FAIL reduceSumSquare float32 4D tensor default options / async promise_test: Unhandled rejection with value: object "TypeError: builder[operationName] is not a function"
+FAIL reduceSumSquare float32 5D tensor default options / async promise_test: Unhandled rejection with value: object "TypeError: builder[operationName] is not a function"
+FAIL reduceSumSquare float32 3D tensor options.axes / async promise_test: Unhandled rejection with value: object "TypeError: builder[operationName] is not a function"
+FAIL reduceSumSquare float32 4D tensor options.axes / async promise_test: Unhandled rejection with value: object "TypeError: builder[operationName] is not a function"
+FAIL reduceSumSquare float32 3D tensor options.keepDimensions=false / async promise_test: Unhandled rejection with value: object "TypeError: builder[operationName] is not a function"
+FAIL reduceSumSquare float32 3D tensor options.keepDimensions=true / async promise_test: Unhandled rejection with value: object "TypeError: builder[operationName] is not a function"
+FAIL reduceSumSquare float32 4D tensor options.keepDimensions=false / async promise_test: Unhandled rejection with value: object "TypeError: builder[operationName] is not a function"
+FAIL reduceSumSquare float32 4D tensor options.keepDimensions=true / async promise_test: Unhandled rejection with value: object "TypeError: builder[operationName] is not a function"
+FAIL reduceSumSquare float32 4D tensor options.axes with options.keepDimensions=false / async promise_test: Unhandled rejection with value: object "TypeError: builder[operationName] is not a function"
+FAIL reduceSumSquare float32 4D tensor options.axes with options.keepDimensions=true / async promise_test: Unhandled rejection with value: object "TypeError: builder[operationName] is not a function"
+Harness: the test ran to completion.
+
diff --git a/third_party/blink/web_tests/platform/win/external/wpt/webnn/reduction.https.any-expected.txt b/third_party/blink/web_tests/platform/win/external/wpt/webnn/reduction.https.any-expected.txt
index 79568fc..2b49539 100644
--- a/third_party/blink/web_tests/platform/win/external/wpt/webnn/reduction.https.any-expected.txt
+++ b/third_party/blink/web_tests/platform/win/external/wpt/webnn/reduction.https.any-expected.txt
@@ -1,5 +1,5 @@
 This is a testharness.js-based test.
-Found 149 tests; 0 PASS, 149 FAIL, 0 TIMEOUT, 0 NOTRUN.
+Found 149 tests; 11 PASS, 138 FAIL, 0 TIMEOUT, 0 NOTRUN.
 FAIL reduceL1 float32 1D tensor all positive default options / async promise_test: Unhandled rejection with value: object "TypeError: builder[operationName] is not a function"
 FAIL reduceL1 float32 1D tensor all negative default options / async promise_test: Unhandled rejection with value: object "TypeError: builder[operationName] is not a function"
 FAIL reduceL1 float32 1D tensor all positive integers default options / async promise_test: Unhandled rejection with value: object "TypeError: builder[operationName] is not a function"
@@ -75,22 +75,22 @@
 FAIL reduceMax float32 4D tensor options.keepDimensions=true / async promise_test: Unhandled rejection with value: object "TypeError: builder[operationName] is not a function"
 FAIL reduceMax float32 4D tensor options.axes with options.keepDimensions=false / async promise_test: Unhandled rejection with value: object "TypeError: builder[operationName] is not a function"
 FAIL reduceMax float32 4D tensor options.axes with options.keepDimensions=true / async promise_test: Unhandled rejection with value: object "TypeError: builder[operationName] is not a function"
-FAIL reduceMean float32 1D tensor all positive default options / async promise_test: Unhandled rejection with value: object "NotSupportedError: The operator (reduceMean) is not supported."
-FAIL reduceMean float32 1D tensor all negative default options / async promise_test: Unhandled rejection with value: object "NotSupportedError: The operator (reduceMean) is not supported."
-FAIL reduceMean float32 1D tensor all positive integers default options / async promise_test: Unhandled rejection with value: object "NotSupportedError: The operator (reduceMean) is not supported."
-FAIL reduceMean float32 1D tensor all negative integers default options / async promise_test: Unhandled rejection with value: object "NotSupportedError: The operator (reduceMean) is not supported."
-FAIL reduceMean float32 2D tensor default options / async promise_test: Unhandled rejection with value: object "NotSupportedError: The operator (reduceMean) is not supported."
-FAIL reduceMean float32 3D tensor default options / async promise_test: Unhandled rejection with value: object "NotSupportedError: The operator (reduceMean) is not supported."
-FAIL reduceMean float32 4D tensor default options / async promise_test: Unhandled rejection with value: object "NotSupportedError: The operator (reduceMean) is not supported."
-FAIL reduceMean float32 5D tensor default options / async promise_test: Unhandled rejection with value: object "NotSupportedError: The operator (reduceMean) is not supported."
-FAIL reduceMean float32 3D tensor options.axes / async promise_test: Unhandled rejection with value: object "NotSupportedError: The operator (reduceMean) is not supported."
-FAIL reduceMean float32 4D tensor options.axes / async promise_test: Unhandled rejection with value: object "NotSupportedError: The operator (reduceMean) is not supported."
-FAIL reduceMean float32 3D tensor options.keepDimensions=false / async promise_test: Unhandled rejection with value: object "NotSupportedError: The operator (reduceMean) is not supported."
-FAIL reduceMean float32 3D tensor options.keepDimensions=true / async promise_test: Unhandled rejection with value: object "NotSupportedError: The operator (reduceMean) is not supported."
-FAIL reduceMean float32 4D tensor options.keepDimensions=false / async promise_test: Unhandled rejection with value: object "NotSupportedError: The operator (reduceMean) is not supported."
-FAIL reduceMean float32 4D tensor options.keepDimensions=true / async promise_test: Unhandled rejection with value: object "NotSupportedError: The operator (reduceMean) is not supported."
-FAIL reduceMean float32 4D tensor options.axes with options.keepDimensions=false / async promise_test: Unhandled rejection with value: object "NotSupportedError: The operator (reduceMean) is not supported."
-FAIL reduceMean float32 4D tensor options.axes with options.keepDimensions=true / async promise_test: Unhandled rejection with value: object "NotSupportedError: The operator (reduceMean) is not supported."
+PASS reduceMean float32 1D tensor all positive default options / async
+PASS reduceMean float32 1D tensor all negative default options / async
+PASS reduceMean float32 1D tensor all positive integers default options / async
+PASS reduceMean float32 1D tensor all negative integers default options / async
+PASS reduceMean float32 2D tensor default options / async
+PASS reduceMean float32 3D tensor default options / async
+PASS reduceMean float32 4D tensor default options / async
+PASS reduceMean float32 5D tensor default options / async
+PASS reduceMean float32 3D tensor options.axes / async
+FAIL reduceMean float32 4D tensor options.axes / async promise_test: Unhandled rejection with value: object "DataError: Failed to call xnn_define_static_mean( subgraph, reduction_axes.size(), reduction_axes.data(), input_id, output_id, flags): xnn_status_invalid_parameter."
+PASS reduceMean float32 3D tensor options.keepDimensions=false / async
+FAIL reduceMean float32 3D tensor options.keepDimensions=true / async promise_test: Unhandled rejection with value: object "NotSupportedError: XNNPACK can't support keep dimensions."
+PASS reduceMean float32 4D tensor options.keepDimensions=false / async
+FAIL reduceMean float32 4D tensor options.keepDimensions=true / async promise_test: Unhandled rejection with value: object "NotSupportedError: XNNPACK can't support keep dimensions."
+FAIL reduceMean float32 4D tensor options.axes with options.keepDimensions=false / async promise_test: Unhandled rejection with value: object "DataError: Failed to call xnn_define_static_mean( subgraph, reduction_axes.size(), reduction_axes.data(), input_id, output_id, flags): xnn_status_invalid_parameter."
+FAIL reduceMean float32 4D tensor options.axes with options.keepDimensions=true / async promise_test: Unhandled rejection with value: object "DataError: Failed to call xnn_define_static_mean( subgraph, reduction_axes.size(), reduction_axes.data(), input_id, output_id, flags): xnn_status_invalid_parameter."
 FAIL reduceMin float32 1D tensor default options / async promise_test: Unhandled rejection with value: object "TypeError: builder[operationName] is not a function"
 FAIL reduceMin float32 2D tensor default options / async promise_test: Unhandled rejection with value: object "TypeError: builder[operationName] is not a function"
 FAIL reduceMin float32 3D tensor default options / async promise_test: Unhandled rejection with value: object "TypeError: builder[operationName] is not a function"
diff --git a/third_party/blink/web_tests/platform/win/external/wpt/webnn/reduction.https.any.worker-expected.txt b/third_party/blink/web_tests/platform/win/external/wpt/webnn/reduction.https.any.worker-expected.txt
index 82ce802..4596de3 100644
--- a/third_party/blink/web_tests/platform/win/external/wpt/webnn/reduction.https.any.worker-expected.txt
+++ b/third_party/blink/web_tests/platform/win/external/wpt/webnn/reduction.https.any.worker-expected.txt
@@ -1,5 +1,5 @@
 This is a testharness.js-based test.
-Found 298 tests; 0 PASS, 298 FAIL, 0 TIMEOUT, 0 NOTRUN.
+Found 298 tests; 11 PASS, 287 FAIL, 0 TIMEOUT, 0 NOTRUN.
 FAIL reduceL1 float32 1D tensor all positive default options / sync builder[operationName] is not a function
 FAIL reduceL1 float32 1D tensor all negative default options / sync builder[operationName] is not a function
 FAIL reduceL1 float32 1D tensor all positive integers default options / sync builder[operationName] is not a function
@@ -75,22 +75,22 @@
 FAIL reduceMax float32 4D tensor options.keepDimensions=true / sync builder[operationName] is not a function
 FAIL reduceMax float32 4D tensor options.axes with options.keepDimensions=false / sync builder[operationName] is not a function
 FAIL reduceMax float32 4D tensor options.axes with options.keepDimensions=true / sync builder[operationName] is not a function
-FAIL reduceMean float32 1D tensor all positive default options / sync Failed to execute 'buildSync' on 'MLGraphBuilder': The operator (reduceMean) is not supported.
-FAIL reduceMean float32 1D tensor all negative default options / sync Failed to execute 'buildSync' on 'MLGraphBuilder': The operator (reduceMean) is not supported.
-FAIL reduceMean float32 1D tensor all positive integers default options / sync Failed to execute 'buildSync' on 'MLGraphBuilder': The operator (reduceMean) is not supported.
-FAIL reduceMean float32 1D tensor all negative integers default options / sync Failed to execute 'buildSync' on 'MLGraphBuilder': The operator (reduceMean) is not supported.
-FAIL reduceMean float32 2D tensor default options / sync Failed to execute 'buildSync' on 'MLGraphBuilder': The operator (reduceMean) is not supported.
-FAIL reduceMean float32 3D tensor default options / sync Failed to execute 'buildSync' on 'MLGraphBuilder': The operator (reduceMean) is not supported.
-FAIL reduceMean float32 4D tensor default options / sync Failed to execute 'buildSync' on 'MLGraphBuilder': The operator (reduceMean) is not supported.
-FAIL reduceMean float32 5D tensor default options / sync Failed to execute 'buildSync' on 'MLGraphBuilder': The operator (reduceMean) is not supported.
-FAIL reduceMean float32 3D tensor options.axes / sync Failed to execute 'buildSync' on 'MLGraphBuilder': The operator (reduceMean) is not supported.
-FAIL reduceMean float32 4D tensor options.axes / sync Failed to execute 'buildSync' on 'MLGraphBuilder': The operator (reduceMean) is not supported.
-FAIL reduceMean float32 3D tensor options.keepDimensions=false / sync Failed to execute 'buildSync' on 'MLGraphBuilder': The operator (reduceMean) is not supported.
-FAIL reduceMean float32 3D tensor options.keepDimensions=true / sync Failed to execute 'buildSync' on 'MLGraphBuilder': The operator (reduceMean) is not supported.
-FAIL reduceMean float32 4D tensor options.keepDimensions=false / sync Failed to execute 'buildSync' on 'MLGraphBuilder': The operator (reduceMean) is not supported.
-FAIL reduceMean float32 4D tensor options.keepDimensions=true / sync Failed to execute 'buildSync' on 'MLGraphBuilder': The operator (reduceMean) is not supported.
-FAIL reduceMean float32 4D tensor options.axes with options.keepDimensions=false / sync Failed to execute 'buildSync' on 'MLGraphBuilder': The operator (reduceMean) is not supported.
-FAIL reduceMean float32 4D tensor options.axes with options.keepDimensions=true / sync Failed to execute 'buildSync' on 'MLGraphBuilder': The operator (reduceMean) is not supported.
+PASS reduceMean float32 1D tensor all positive default options / sync
+PASS reduceMean float32 1D tensor all negative default options / sync
+PASS reduceMean float32 1D tensor all positive integers default options / sync
+PASS reduceMean float32 1D tensor all negative integers default options / sync
+PASS reduceMean float32 2D tensor default options / sync
+PASS reduceMean float32 3D tensor default options / sync
+PASS reduceMean float32 4D tensor default options / sync
+PASS reduceMean float32 5D tensor default options / sync
+PASS reduceMean float32 3D tensor options.axes / sync
+FAIL reduceMean float32 4D tensor options.axes / sync Failed to execute 'buildSync' on 'MLGraphBuilder': Failed to call xnn_define_static_mean( subgraph, reduction_axes.size(), reduction_axes.data(), input_id, output_id, flags): xnn_status_invalid_parameter.
+PASS reduceMean float32 3D tensor options.keepDimensions=false / sync
+FAIL reduceMean float32 3D tensor options.keepDimensions=true / sync Failed to execute 'buildSync' on 'MLGraphBuilder': XNNPACK can't support keep dimensions.
+PASS reduceMean float32 4D tensor options.keepDimensions=false / sync
+FAIL reduceMean float32 4D tensor options.keepDimensions=true / sync Failed to execute 'buildSync' on 'MLGraphBuilder': XNNPACK can't support keep dimensions.
+FAIL reduceMean float32 4D tensor options.axes with options.keepDimensions=false / sync Failed to execute 'buildSync' on 'MLGraphBuilder': Failed to call xnn_define_static_mean( subgraph, reduction_axes.size(), reduction_axes.data(), input_id, output_id, flags): xnn_status_invalid_parameter.
+FAIL reduceMean float32 4D tensor options.axes with options.keepDimensions=true / sync Failed to execute 'buildSync' on 'MLGraphBuilder': Failed to call xnn_define_static_mean( subgraph, reduction_axes.size(), reduction_axes.data(), input_id, output_id, flags): xnn_status_invalid_parameter.
 FAIL reduceMin float32 1D tensor default options / sync builder[operationName] is not a function
 FAIL reduceMin float32 2D tensor default options / sync builder[operationName] is not a function
 FAIL reduceMin float32 3D tensor default options / sync builder[operationName] is not a function
diff --git a/third_party/closure_compiler/externs/accessibility_private.js b/third_party/closure_compiler/externs/accessibility_private.js
index 9385251b..39eeb09e 100644
--- a/third_party/closure_compiler/externs/accessibility_private.js
+++ b/third_party/closure_compiler/externs/accessibility_private.js
@@ -475,9 +475,9 @@
 
 /**
  * Darkens or undarkens the screen.
- * @param {boolean} enabled True to darken screen; false to undarken screen.
+ * @param {boolean} darken True to darken screen; false to undarken screen.
  */
-chrome.accessibilityPrivate.darkenScreen = function(enabled) {};
+chrome.accessibilityPrivate.darkenScreen = function(darken) {};
 
 /**
  * When enabled, forwards key events to the Switch Access extension
diff --git a/third_party/dawn b/third_party/dawn
index 174c42e..3cd439b 160000
--- a/third_party/dawn
+++ b/third_party/dawn
@@ -1 +1 @@
-Subproject commit 174c42e551ba1b82747056cb7fc2b9722082d0d4
+Subproject commit 3cd439bfaf464c0ea5ab2d669febda4bc5651e0a
diff --git a/third_party/depot_tools b/third_party/depot_tools
index 4566632..aabd869 160000
--- a/third_party/depot_tools
+++ b/third_party/depot_tools
@@ -1 +1 @@
-Subproject commit 456663282214a9b81f7299908f67d03beeb63845
+Subproject commit aabd869daf9956514eba5f57d92da166f993ca47
diff --git a/third_party/devtools-frontend-internal b/third_party/devtools-frontend-internal
index 5fde161..e892097 160000
--- a/third_party/devtools-frontend-internal
+++ b/third_party/devtools-frontend-internal
@@ -1 +1 @@
-Subproject commit 5fde161dd4df5e1bc613121743ca9a6f92e1acf8
+Subproject commit e892097f7c37eb2144577fadb1a390fc0ce3f8e4
diff --git a/third_party/devtools-frontend/src b/third_party/devtools-frontend/src
index 4ef9c73..a4cc1be 160000
--- a/third_party/devtools-frontend/src
+++ b/third_party/devtools-frontend/src
@@ -1 +1 @@
-Subproject commit 4ef9c73c536379ce499e8771304ef3f999fc86b6
+Subproject commit a4cc1be16a5fecf8333afbb0a8bbbd70e09bdd94
diff --git a/third_party/icu b/third_party/icu
index 985b9a6..995db88 160000
--- a/third_party/icu
+++ b/third_party/icu
@@ -1 +1 @@
-Subproject commit 985b9a6f70e13f3db741fed121e4dcc3046ad494
+Subproject commit 995db880cff28a8b5d3a9978acd1b7cab9885edd
diff --git a/third_party/node/node.gni b/third_party/node/node.gni
index 7b81117..bb7111af 100644
--- a/third_party/node/node.gni
+++ b/third_party/node/node.gni
@@ -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/toolchain/rbe.gni")
+import("//build/toolchain/siso.gni")
+
 template("node") {
   action(target_name) {
     forward_variables_from(invoker, "*", TESTONLY_AND_VISIBILITY)
@@ -14,14 +17,32 @@
       "//third_party/node/node_modules.tar.gz.sha1",
     ]
 
-    if (is_linux || is_chromeos) {
-      inputs += [ "//third_party/node/linux/node-linux-x64.tar.gz.sha1" ]
+    # When use_remoteexec=true or use_siso=true, node actions run on remote
+    # Linux worker. So it should include linux node binary in inputs.
+    if (is_linux || is_chromeos || use_remoteexec || use_siso) {
+      inputs += [
+        "//third_party/node/linux/node-linux-x64.tar.gz.sha1",
+        "//third_party/node/linux/node-linux-x64/bin/node",
+      ]
     }
-    if (is_win) {
-      inputs += [ "//third_party/node/win/node.exe.sha1" ]
+    if (is_win && host_os == "win") {
+      inputs += [
+        "//third_party/node/win/node.exe",
+        "//third_party/node/win/node.exe.sha1",
+      ]
     }
-    if (is_mac) {
-      inputs += [ "//third_party/node/mac/node-darwin-x64.tar.gz.sha1" ]
+    if (is_mac && host_os == "mac") {
+      if (host_cpu == "arm64") {
+        inputs += [
+          "//third_party/node/mac/node-darwin-arm64.tar.gz.sha1",
+          "//third_party/node/mac/node-darwin-arm64/bin/node",
+        ]
+      } else {
+        inputs += [
+          "//third_party/node/mac/node-darwin-x64.tar.gz.sha1",
+          "//third_party/node/mac/node-darwin-x64/bin/node",
+        ]
+      }
     }
   }
 }
diff --git a/third_party/openscreen/src b/third_party/openscreen/src
index cba24a9..d0b32ca 160000
--- a/third_party/openscreen/src
+++ b/third_party/openscreen/src
@@ -1 +1 @@
-Subproject commit cba24a91356b6d7d2930797541168ff6e0d17885
+Subproject commit d0b32cadd6ddc94646047ee93aff43db2470f9c0
diff --git a/third_party/skia b/third_party/skia
index b72fe6f..c5f8c24 160000
--- a/third_party/skia
+++ b/third_party/skia
@@ -1 +1 @@
-Subproject commit b72fe6f76c61be2fd9cf6878f6e3defd44960af8
+Subproject commit c5f8c24606eadfdf5ddf1741c6bd4bbeb34e0214
diff --git a/third_party/vulkan-deps b/third_party/vulkan-deps
index be2755d..b0fb86c 160000
--- a/third_party/vulkan-deps
+++ b/third_party/vulkan-deps
@@ -1 +1 @@
-Subproject commit be2755d4d1097be1c7efa48b4c75d2abfc689205
+Subproject commit b0fb86c92b69af3d19421199c5d8f3b6dda018e0
diff --git a/third_party/webrtc b/third_party/webrtc
index 7569116..cedabf3 160000
--- a/third_party/webrtc
+++ b/third_party/webrtc
@@ -1 +1 @@
-Subproject commit 756911644f7c82cedc9230dd626e24053b9a50c4
+Subproject commit cedabf3e2ee01939dcef2fef18c1be8515b09ecd
diff --git a/tools/mb/mb_config.pyl b/tools/mb/mb_config.pyl
index 3c0cf68..a98d847 100644
--- a/tools/mb/mb_config.pyl
+++ b/tools/mb/mb_config.pyl
@@ -1128,7 +1128,6 @@
       'gpu-fyi-try-android-r-pixel-4-32': 'gpu_tests_android_release_trybot_reclient',
       'gpu-try-android-m-nexus-5x-64': 'gpu_tests_android_release_trybot_arm64_reclient',
       'linux_android_dbg_ng': 'android_debug_bot',
-      'try-nougat-phone-tester': 'android_debug_trybot_arm64_reclient',
     },
 
     'tryserver.chromium.angle': {
diff --git a/tools/mb/mb_config_expectations/tryserver.chromium.android.json b/tools/mb/mb_config_expectations/tryserver.chromium.android.json
index 2b9a83a..2fd5d557 100644
--- a/tools/mb/mb_config_expectations/tryserver.chromium.android.json
+++ b/tools/mb/mb_config_expectations/tryserver.chromium.android.json
@@ -1651,19 +1651,5 @@
       "target_os": "android",
       "use_goma": true
     }
-  },
-  "try-nougat-phone-tester": {
-    "gn_args": {
-      "debuggable_apks": false,
-      "ffmpeg_branding": "Chrome",
-      "is_component_build": true,
-      "is_debug": true,
-      "proprietary_codecs": true,
-      "symbol_level": 1,
-      "target_cpu": "arm64",
-      "target_os": "android",
-      "use_dummy_lastchange": true,
-      "use_remoteexec": true
-    }
   }
 }
\ No newline at end of file
diff --git a/tools/metrics/actions/actions.xml b/tools/metrics/actions/actions.xml
index 1744217d..068ce9b8 100644
--- a/tools/metrics/actions/actions.xml
+++ b/tools/metrics/actions/actions.xml
@@ -39516,6 +39516,8 @@
   <suffix name="GMCCastStartStop" label="For GMCCastStartStop feature."/>
   <suffix name="GMCCastStartStopFeature"
       label="For Global Media Controls Cast start and stop feature."/>
+  <suffix name="GMCLocalMediaCastingFeature"
+      label="For GMC local media cast start feature."/>
   <suffix name="GoogleOneOfferNotification"
       label="For google one offer notification feature."/>
   <suffix name="HighEfficiencyInfoMode"
diff --git a/tools/metrics/histograms/enums.xml b/tools/metrics/histograms/enums.xml
index 6a93437..243594e3 100644
--- a/tools/metrics/histograms/enums.xml
+++ b/tools/metrics/histograms/enums.xml
@@ -72097,10 +72097,6 @@
   <int value="2" label="Android Tv"/>
 </enum>
 
-<enum name="MediaRouterSinkPositionLabel">
-  <int value="100" label="100+"/>
-</enum>
-
 <enum name="MediaRouterSourceTypes">
   <int value="1" label="App"/>
   <int value="2" label="Tab"/>
@@ -110747,21 +110743,6 @@
   </int>
 </enum>
 
-<enum name="V8SourceMapReference">
-  <int value="0" label="None">The script did not specify a source map</int>
-  <int value="1" label="HTTP">
-    The source map was specified via &quot;SourceMap&quot; HTTP header
-  </int>
-  <int value="2" label="HashSignComment">
-    The source map was specified via hash sign prefixed sourceMappingURL magic
-    comment
-  </int>
-  <int value="3" label="AtSignComment">
-    The source map was specified via atsgin prefixed sourceMappingURL magic
-    comment
-  </int>
-</enum>
-
 <enum name="VaapiFunctions">
   <int value="0" label="vaBeginPicture()"/>
   <int value="1" label="vaCreateBuffer()"/>
diff --git a/tools/metrics/histograms/metadata/feature_engagement/histograms.xml b/tools/metrics/histograms/metadata/feature_engagement/histograms.xml
index 37bc12a..8a8e581 100644
--- a/tools/metrics/histograms/metadata/feature_engagement/histograms.xml
+++ b/tools/metrics/histograms/metadata/feature_engagement/histograms.xml
@@ -179,6 +179,8 @@
   <variant name="IPH_GlobalMediaControls" summary="the Global Media Controls"/>
   <variant name="IPH_GMCCastStartStop"
       summary="Cast start stop in the Zenith dialog"/>
+  <variant name="IPH_GMCLocalMediaCasting"
+      summary="Local media cast start in GMC"/>
   <variant name="IPH_GoogleOneOfferNotification"
       summary="show google one offer notification with a visit to Google
                Drive or Google Photo"/>
diff --git a/tools/metrics/histograms/metadata/image/histograms.xml b/tools/metrics/histograms/metadata/image/histograms.xml
index 855a06cd9..7e21abb6 100644
--- a/tools/metrics/histograms/metadata/image/histograms.xml
+++ b/tools/metrics/histograms/metadata/image/histograms.xml
@@ -43,6 +43,9 @@
 </variants>
 
 <variants name="ImageFetcherClients">
+  <variant name=".AlmanacIcons"
+      summary="Downloads app icons for clients of the Almanac Server to
+               display."/>
   <variant name=".AnswerSuggestions"
       summary="Showing cache patterns only for AnswerSuggestions (valid until
                M117)."/>
diff --git a/tools/metrics/histograms/metadata/media/histograms.xml b/tools/metrics/histograms/metadata/media/histograms.xml
index 297d6a2..7ee53af8 100644
--- a/tools/metrics/histograms/metadata/media/histograms.xml
+++ b/tools/metrics/histograms/metadata/media/histograms.xml
@@ -6926,7 +6926,7 @@
 </histogram>
 
 <histogram name="MediaRouter.CastStreaming.Audio.PlaybackOnReceiver"
-    enum="Boolean" expires_after="2023-11-12">
+    enum="Boolean" expires_after="2024-04-01">
   <owner>takumif@chromium.org</owner>
   <owner>muyaoxu@google.com</owner>
   <owner>openscreen-eng@google.com</owner>
@@ -7321,42 +7321,6 @@
   </summary>
 </histogram>
 
-<histogram name="MediaRouter.Ui.Action.CloseLatency" units="ms"
-    expires_after="2023-11-12">
-  <owner>takumif@chromium.org</owner>
-  <owner>openscreen-eng@google.com</owner>
-  <summary>
-    Duration in milliseconds taken from the user opening the Media Router dialog
-    to the user closing the dialog. This is only recorded if closing the dialog
-    is the first action the user takes.
-  </summary>
-</histogram>
-
-<histogram name="MediaRouter.Ui.Action.StartLocal.Latency" units="ms"
-    expires_after="2023-11-12">
-  <owner>takumif@chromium.org</owner>
-  <owner>openscreen-eng@google.com</owner>
-  <summary>
-    Duration in milliseconds taken from the Media Router dialog showing the sink
-    list and being populated with at least one device to the user selecting a
-    device immediately after to create a new route.
-  </summary>
-</histogram>
-
-<histogram name="MediaRouter.Ui.Action.StartLocalPosition"
-    enum="MediaRouterSinkPositionLabel" expires_after="2023-11-12">
-  <owner>takumif@chromium.org</owner>
-  <owner>openscreen-eng@google.com</owner>
-  <summary>The index of the sink that was selected in the sink list.</summary>
-</histogram>
-
-<histogram name="MediaRouter.Ui.Action.StopRoute" enum="MediaRouteType"
-    expires_after="2023-11-12">
-  <owner>takumif@chromium.org</owner>
-  <owner>openscreen-eng@google.com</owner>
-  <summary>The number of times a user stops different types of routes.</summary>
-</histogram>
-
 <histogram name="MediaRouter.Ui.Android.DialogAction"
     enum="MediaRouterAndroidDialogAction" expires_after="2024-05-01">
   <owner>muyaoxu@google.com</owner>
@@ -7423,16 +7387,6 @@
   </summary>
 </histogram>
 
-<histogram name="MediaRouter.Ui.Dialog.Paint" units="ms"
-    expires_after="2023-11-12">
-  <owner>takumif@chromium.org</owner>
-  <owner>openscreen-eng@google.com</owner>
-  <summary>
-    Duration in milliseconds taken from a user click to open the Media Router
-    dialog to the initial paint.
-  </summary>
-</histogram>
-
 <histogram name="MediaRouter.WiredDisplay.AvailableDevicesCount" units="units"
     expires_after="2024-02-25">
   <owner>takumif@chromium.org</owner>
diff --git a/tools/metrics/histograms/metadata/v8/histograms.xml b/tools/metrics/histograms/metadata/v8/histograms.xml
index 8082f1d2..b111e8e 100644
--- a/tools/metrics/histograms/metadata/v8/histograms.xml
+++ b/tools/metrics/histograms/metadata/v8/histograms.xml
@@ -1395,19 +1395,6 @@
   </summary>
 </histogram>
 
-<histogram name="V8.SourceMapReference" enum="V8SourceMapReference"
-    expires_after="2024-06-30">
-  <owner>szuend@chromium.org</owner>
-  <owner>bmeurer@chromium.org</owner>
-  <summary>
-    Each time a script is parsed we report how the source map for that script is
-    specified.
-
-    This histogram does not care whether a source map is actually publicly
-    available or if it's specified inline as a data URL.
-  </summary>
-</histogram>
-
 <histogram name="V8.TurboFan1KTicks" units="1000 ticks"
     expires_after="2023-06-30">
   <owner>tebbi@chromium.org</owner>
diff --git a/tools/traffic_annotation/summary/annotations.xml b/tools/traffic_annotation/summary/annotations.xml
index a4b51f1..3aea825 100644
--- a/tools/traffic_annotation/summary/annotations.xml
+++ b/tools/traffic_annotation/summary/annotations.xml
@@ -436,4 +436,5 @@
  <item id="plus_address_reservation" added_in_milestone="119" content_hash_code="02835001" os_list="linux,windows,android,chromeos" file_path="components/plus_addresses/plus_address_client.cc" />
  <item id="plus_address_confirmation" added_in_milestone="119" content_hash_code="04783158" os_list="linux,windows,android,chromeos" file_path="components/plus_addresses/plus_address_client.cc" />
  <item id="customize_chrome_page_handler" added_in_milestone="120" content_hash_code="003c50db" os_list="linux,windows,chromeos" file_path="chrome/browser/ui/webui/side_panel/customize_chrome/customize_chrome_page_handler.cc" />
+ <item id="almanac_icon_cache" added_in_milestone="120" content_hash_code="04ca8028" os_list="chromeos" file_path="chrome/browser/apps/almanac_api_client/almanac_icon_cache.cc" />
 </annotations>
diff --git a/tools/traffic_annotation/summary/grouping.xml b/tools/traffic_annotation/summary/grouping.xml
index 3924f4b..fc5b030 100644
--- a/tools/traffic_annotation/summary/grouping.xml
+++ b/tools/traffic_annotation/summary/grouping.xml
@@ -292,6 +292,7 @@
       <annotation id="almanac_launcher_app"/>
       <annotation id="ip_protection_service_get_proxy_config"/>
       <annotation id="customize_chrome_page_handler"/>
+      <annotation id="almanac_icon_cache"/>
     </sender>
   </group>
   <group name="Admin Features" hidden="true">
diff --git a/ui/accessibility/extensions/BUILD.gn b/ui/accessibility/extensions/BUILD.gn
index bdc488e..7a33b9cf 100644
--- a/ui/accessibility/extensions/BUILD.gn
+++ b/ui/accessibility/extensions/BUILD.gn
@@ -3,10 +3,13 @@
 # found in the LICENSE file.
 
 import("//build/config/chromeos/ui_mode.gni")
-import("//chrome/test/base/js2gtest.gni")
 import("//testing/test.gni")
 import("//tools/grit/grit_rule.gni")
 
+if (is_chromeos_ash) {
+  import("//chrome/test/base/js2gtest.gni")
+}
+
 group("extensions") {
   deps = [
     ":caretbrowsing",
diff --git a/ui/accessibility/extensions/chromevoxclassic/BUILD.gn b/ui/accessibility/extensions/chromevoxclassic/BUILD.gn
index ae655d0..a70c936 100644
--- a/ui/accessibility/extensions/chromevoxclassic/BUILD.gn
+++ b/ui/accessibility/extensions/chromevoxclassic/BUILD.gn
@@ -8,11 +8,14 @@
 import(
     "//chrome/browser/resources/chromeos/accessibility/tools/run_jsbundler.gni")
 import("//chrome/common/features.gni")
-import("//chrome/test/base/js2gtest.gni")
 import("//testing/test.gni")
 import("//third_party/closure_compiler/compile_js.gni")
 import("//third_party/liblouis/liblouis_library.gni")
 
+if (is_chromeos_ash) {
+  import("//chrome/test/base/js2gtest.gni")
+}
+
 closure_library_dir =
     "//third_party/chromevox/third_party/closure-library/closure/goog"
 
diff --git a/ui/aura/test/aura_test_helper.cc b/ui/aura/test/aura_test_helper.cc
index 5997d588..482c631d 100644
--- a/ui/aura/test/aura_test_helper.cc
+++ b/ui/aura/test/aura_test_helper.cc
@@ -68,6 +68,7 @@
 #endif
 
 #if BUILDFLAG(IS_OZONE) && BUILDFLAG(IS_CHROMEOS_ASH)
+  // TODO(b/304625912): Native events should be enabled for Crosier.
   ui::DisableNativeUiEventDispatchForTest();
 #endif
 
diff --git a/ui/aura/window_tree_host_platform.cc b/ui/aura/window_tree_host_platform.cc
index fd4a560..a02ffb5f 100644
--- a/ui/aura/window_tree_host_platform.cc
+++ b/ui/aura/window_tree_host_platform.cc
@@ -32,6 +32,7 @@
 
 #if BUILDFLAG(IS_OZONE)
 #include "ui/events/keycodes/dom/dom_keyboard_layout_map.h"
+#include "ui/events/ozone/events_ozone.h"
 #include "ui/ozone/public/ozone_platform.h"
 #endif
 
@@ -119,6 +120,11 @@
 }
 
 void WindowTreeHostPlatform::SetCapture() {
+#if BUILDFLAG(IS_OZONE)
+  if (ui::IsNativeUiEventDispatchDisabled()) {
+    return;
+  }
+#endif
   platform_window_->SetCapture();
 }
 
@@ -175,6 +181,13 @@
 
 void WindowTreeHostPlatform::MoveCursorToScreenLocationInPixels(
     const gfx::Point& location_in_pixels) {
+#if BUILDFLAG(IS_OZONE)
+  if (ui::IsNativeUiEventDispatchDisabled()) {
+    // Unit tests should not test or rely on the native cursor position because
+    // it is shared between multiple tests.
+    return;
+  }
+#endif
   platform_window_->MoveCursorTo(location_in_pixels);
 }
 
diff --git a/ui/events/ozone/events_ozone.cc b/ui/events/ozone/events_ozone.cc
index 411e8ca..f1c11c8 100644
--- a/ui/events/ozone/events_ozone.cc
+++ b/ui/events/ozone/events_ozone.cc
@@ -59,10 +59,14 @@
   return handled;
 }
 
-EVENTS_EXPORT void DisableNativeUiEventDispatchForTest() {
+void DisableNativeUiEventDispatchForTest() {
   dispatch_disabled = true;
 }
 
+bool IsNativeUiEventDispatchDisabled() {
+  return dispatch_disabled;
+}
+
 void SetKeyboardImeFlagProperty(KeyEvent::Properties* properties,
                                 uint8_t flags) {
   properties->emplace(kPropertyKeyboardImeFlag, std::vector<uint8_t>{flags});
diff --git a/ui/events/ozone/events_ozone.h b/ui/events/ozone/events_ozone.h
index 7e26a549..df7a93f 100644
--- a/ui/events/ozone/events_ozone.h
+++ b/ui/events/ozone/events_ozone.h
@@ -36,7 +36,10 @@
     const PlatformEvent& native_event,
     base::OnceCallback<void(ui::Event*)> callback);
 
+// Disable native level event handling including dispatch,
+// capture or mouse movements for tests.
 EVENTS_EXPORT void DisableNativeUiEventDispatchForTest();
+EVENTS_EXPORT bool IsNativeUiEventDispatchDisabled();
 
 // Event::Properties constants for IBus-GTK and fcitx-GTK.
 // Both of them in async mode use gtk-specific XKeyEvent::state bits 24 and 25.
diff --git a/ui/file_manager/file_manager/foreground/js/directory_model.js b/ui/file_manager/file_manager/foreground/js/directory_model.js
index db6c40d..7fc0b0c 100644
--- a/ui/file_manager/file_manager/foreground/js/directory_model.js
+++ b/ui/file_manager/file_manager/foreground/js/directory_model.js
@@ -518,6 +518,9 @@
    * @private
    */
   onStateVolumeChanged_(state) {
+    if (!state.currentDirectory) {
+      return;
+    }
     for (const volume of Object.values(state.volumes)) {
       // Navigate out of ODFS if it got disabled and the current directory is
       // under ODFS.
diff --git a/ui/file_manager/integration_tests/file_manager/directory_tree.js b/ui/file_manager/integration_tests/file_manager/directory_tree.js
index fa0fe2e..6071be1 100644
--- a/ui/file_manager/integration_tests/file_manager/directory_tree.js
+++ b/ui/file_manager/integration_tests/file_manager/directory_tree.js
@@ -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 {addEntries, ENTRIES, EntryType, RootPath, sendTestMessage, TestEntryInfo} from '../test_util.js';
+import {addEntries, ENTRIES, EntryType, getCaller, pending, repeatUntil, RootPath, sendTestMessage, TestEntryInfo} from '../test_util.js';
 import {testcase} from '../testcase.js';
 
 import {remoteCall, setupAndWaitUntilReady} from './background.js';
@@ -160,7 +160,7 @@
       appId, directoryTree.rootSelector, ['scrollLeft']);
   chrome.test.assertTrue(original.scrollLeft === 0);
 
-  // Shrink the tree to 50px. TODO(files-ng): consider using 150px?
+  // Shrink the tree to 50px.
   await remoteCall.callRemoteTestUtil(
       'setElementStyles', appId,
       [directoryTree.containerSelector, {width: '50px'}]);
@@ -170,10 +170,14 @@
       'setScrollLeft', appId, [directoryTree.rootSelector, 100]);
 
   // Check: the directory tree should not be horizontally scrolled.
-  const scrolled = await remoteCall.waitForElementStyles(
-      appId, directoryTree.rootSelector, ['scrollLeft']);
-  const noScrollLeft = scrolled.scrollLeft === 0;
-  chrome.test.assertTrue(noScrollLeft, 'Tree should not scroll left');
+  const caller = getCaller();
+  await repeatUntil(async () => {
+    const scrolled = await remoteCall.waitForElementStyles(
+        appId, directoryTree.rootSelector, ['scrollLeft']);
+    if (scrolled.scrollLeft !== 0) {
+      return pending(caller, 'Tree should not scroll left');
+    }
+  });
 };
 
 /**
diff --git a/ui/file_manager/integration_tests/file_manager/file_display.js b/ui/file_manager/integration_tests/file_manager/file_display.js
index 9d5926c..6561dc4 100644
--- a/ui/file_manager/integration_tests/file_manager/file_display.js
+++ b/ui/file_manager/integration_tests/file_manager/file_display.js
@@ -133,7 +133,10 @@
   const appId = await setupAndWaitUntilReady(RootPath.DRIVE, [], driveFiles);
 
   // Retrieve all file list entries that could be rendered 'offline'.
-  const offlineEntry = '#file-list .table-row.file.dim-offline';
+  // Use "first-child" here because opacity for offline only applies on the
+  // children elements.
+  const offlineEntry =
+      '#file-list .table-row.file.dim-offline > div:first-child';
   let elements = await remoteCall.callRemoteTestUtil(
       'queryAllElements', appId, [offlineEntry, ['opacity']]);
 
@@ -145,7 +148,10 @@
   chrome.test.assertEq('0.38', elements[0].styles.opacity);
 
   // Retrieve file entries that are 'available offline' (not dimmed).
-  const availableEntry = '#file-list .table-row:not(.dim-offline)';
+  // Use "first-child" here because opacity for offline only applies on the
+  // children elements.
+  const availableEntry =
+      '#file-list .table-row:not(.dim-offline) > div:first-child';
   elements = await remoteCall.callRemoteTestUtil(
       'queryAllElements', appId, [availableEntry, ['opacity']]);
 
diff --git a/ui/file_manager/integration_tests/test_util.js b/ui/file_manager/integration_tests/test_util.js
index 085dffe5..56309da 100644
--- a/ui/file_manager/integration_tests/test_util.js
+++ b/ui/file_manager/integration_tests/test_util.js
@@ -115,11 +115,11 @@
  *     it's the return of getCaller() function.
  * @param {string} message Pending reason including %s, %d, or %j markers. %j
  *     format an object as JSON.
- * @param {...*} var_args Values to be assigined to %x markers.
+ * @param {...*} _var_args Values to be assigined to %x markers.
  * @return {Object} Object which returns true for the expression: obj instanceof
  *     pending.
  */
-export function pending(caller, message, var_args) {
+export function pending(caller, message, ..._var_args) {
   // |index| is used to ignore caller and message arguments subsisting markers
   // (%s, %d and %j) within message with the remaining |arguments|.
   let index = 2;
diff --git a/ui/gfx/color_conversion_sk_filter_cache.cc b/ui/gfx/color_conversion_sk_filter_cache.cc
index 23bb7a5b..c2e1068 100644
--- a/ui/gfx/color_conversion_sk_filter_cache.cc
+++ b/ui/gfx/color_conversion_sk_filter_cache.cc
@@ -89,7 +89,7 @@
     const Key& other) const {
   return src == other.src && src_bit_depth == other.src_bit_depth &&
          dst == other.dst &&
-         sdr_max_luminance_nits == other.sdr_max_luminance_nits;
+         dst_sdr_max_luminance_nits == other.dst_sdr_max_luminance_nits;
 }
 
 bool ColorConversionSkFilterCache::Key::operator!=(const Key& other) const {
@@ -97,19 +97,19 @@
 }
 
 bool ColorConversionSkFilterCache::Key::operator<(const Key& other) const {
-  return std::tie(src, src_bit_depth, dst, sdr_max_luminance_nits) <
+  return std::tie(src, src_bit_depth, dst, dst_sdr_max_luminance_nits) <
          std::tie(other.src, other.src_bit_depth, other.dst,
-                  other.sdr_max_luminance_nits);
+                  other.dst_sdr_max_luminance_nits);
 }
 
 ColorConversionSkFilterCache::Key::Key(const gfx::ColorSpace& src,
                                        uint32_t src_bit_depth,
                                        const gfx::ColorSpace& dst,
-                                       float sdr_max_luminance_nits)
+                                       float dst_sdr_max_luminance_nits)
     : src(src),
       src_bit_depth(src_bit_depth),
       dst(dst),
-      sdr_max_luminance_nits(sdr_max_luminance_nits) {}
+      dst_sdr_max_luminance_nits(dst_sdr_max_luminance_nits) {}
 
 ColorConversionSkFilterCache::Value::Value() = default;
 
@@ -132,7 +132,7 @@
     float resource_multiplier,
     absl::optional<uint32_t> src_bit_depth,
     absl::optional<gfx::HDRMetadata> src_hdr_metadata,
-    float sdr_max_luminance_nits,
+    float dst_sdr_max_luminance_nits,
     float dst_max_luminance_relative) {
   // Set unused parameters to bogus values, so that they do not result in
   // different keys for the same conversion.
@@ -143,14 +143,15 @@
     src_hdr_metadata = absl::nullopt;
     dst_max_luminance_relative = 0;
 
-    // If neither source nor destination will use `sdr_max_luminance_nits`, then
-    // set it to a nonsense value.
+    // If neither source nor destination will use `dst_sdr_max_luminance_nits`,
+    // then set it to a nonsense value.
     if (!dst.IsAffectedBySDRWhiteLevel() && !src.IsAffectedBySDRWhiteLevel()) {
-      sdr_max_luminance_nits = 0;
+      dst_sdr_max_luminance_nits = 0;
     }
   }
 
-  const Key key(src, src_bit_depth.value_or(0), dst, sdr_max_luminance_nits);
+  const Key key(src, src_bit_depth.value_or(0), dst,
+                dst_sdr_max_luminance_nits);
   Value& value = cache_[key];
 
   if (!value.effect) {
@@ -166,8 +167,8 @@
   gfx::ColorTransform::RuntimeOptions options;
   options.offset = resource_offset;
   options.multiplier = resource_multiplier;
-  options.sdr_max_luminance_nits = sdr_max_luminance_nits;
   options.src_hdr_metadata = src_hdr_metadata;
+  options.dst_sdr_max_luminance_nits = dst_sdr_max_luminance_nits;
   options.dst_max_luminance_relative = dst_max_luminance_relative;
   return value.effect->makeColorFilter(
       value.transform->GetSkShaderUniforms(options));
@@ -264,7 +265,7 @@
 sk_sp<SkImage> ColorConversionSkFilterCache::ApplyToneCurve(
     sk_sp<SkImage> image,
     absl::optional<HDRMetadata> src_hdr_metadata,
-    float sdr_max_luminance_nits,
+    float dst_sdr_max_luminance_nits,
     float dst_max_luminance_relative,
     GrDirectContext* gr_context,
     skgpu::graphite::Recorder* graphite_recorder) {
@@ -292,7 +293,7 @@
       Get(image_color_space, target_color_space,
           /*resource_offset=*/0, /*resource_multiplier=*/1,
           /*src_bit_depth=*/absl::nullopt, src_hdr_metadata,
-          sdr_max_luminance_nits, dst_max_luminance_relative);
+          dst_sdr_max_luminance_nits, dst_max_luminance_relative);
   SkPaint paint;
   paint.setBlendMode(SkBlendMode::kSrc);
   paint.setColorFilter(filter);
diff --git a/ui/gfx/color_conversion_sk_filter_cache.h b/ui/gfx/color_conversion_sk_filter_cache.h
index f1c61ca..0beab20 100644
--- a/ui/gfx/color_conversion_sk_filter_cache.h
+++ b/ui/gfx/color_conversion_sk_filter_cache.h
@@ -39,7 +39,7 @@
   // `src` maybe specified in `src_bit_depth` (relevant only for YUV to RGB
   // conversion). The filter also applies the offset `src_resource_offset` and
   // then scales by `src_resource_multiplier`. Apply tone mapping of `src` is
-  // HLG or PQ, using `sdr_max_luminance_nits`, `src_hdr_metadata`, and
+  // HLG or PQ, using `src_hdr_metadata`, `dst_sdr_max_luminance_nits`, and
   // `dst_max_luminance_relative` as parameters.
   sk_sp<SkColorFilter> Get(const gfx::ColorSpace& src,
                            const gfx::ColorSpace& dst,
@@ -47,18 +47,18 @@
                            float resource_multiplier,
                            absl::optional<uint32_t> src_bit_depth,
                            absl::optional<gfx::HDRMetadata> src_hdr_metadata,
-                           float sdr_max_luminance_nits,
+                           float dst_sdr_max_luminance_nits,
                            float dst_max_luminance_relative);
 
   // Return if ApplyToneCurve can be called on `image`.
   static bool UseToneCurve(sk_sp<SkImage> image);
 
-  // Perform global tone mapping on `image`, using `sdr_max_luminance_nits`,
+  // Perform global tone mapping on `image`, using `dst_sdr_max_luminance_nits`,
   // `dst_max_luminance_relative`, and `src_hdr_metadata`. The resulting image
   // will be in Rec2020 linear space, and will not have mipmaps.
   sk_sp<SkImage> ApplyToneCurve(sk_sp<SkImage> image,
                                 absl::optional<HDRMetadata> src_hdr_metadata,
-                                float sdr_max_luminance_nits,
+                                float dst_sdr_max_luminance_nits,
                                 float dst_max_luminance_relative,
                                 GrDirectContext* gr_context,
                                 skgpu::graphite::Recorder* graphite_recorder);
@@ -83,12 +83,12 @@
     Key(const gfx::ColorSpace& src,
         uint32_t src_bit_depth,
         const gfx::ColorSpace& dst,
-        float sdr_max_luminance_nits);
+        float dst_sdr_max_luminance_nits);
 
     gfx::ColorSpace src;
     uint32_t src_bit_depth = 0;
     gfx::ColorSpace dst;
-    float sdr_max_luminance_nits = 0.f;
+    float dst_sdr_max_luminance_nits = 0.f;
 
     bool operator==(const Key& other) const;
     bool operator!=(const Key& other) const;
diff --git a/ui/gfx/color_transform.cc b/ui/gfx/color_transform.cc
index 5c1aa353..b58d600 100644
--- a/ui/gfx/color_transform.cc
+++ b/ui/gfx/color_transform.cc
@@ -62,7 +62,7 @@
 struct SkShaderUniforms {
   float offset = 0.f;
   float multiplier = 0.f;
-  float sdr_max_luminance_nits = ColorSpace::kDefaultSDRWhiteLevel;
+  float dst_sdr_max_luminance_nits = ColorSpace::kDefaultSDRWhiteLevel;
   float pq_tonemap_a = 1.f;
   float pq_tonemap_b = 1.f;
   float hlg_ootf_gamma_minus_one = 0.f;
@@ -920,7 +920,7 @@
       const gfx::ColorTransform::RuntimeOptions& options,
       float& gamma_minus_one) {
     const float dst_max_luminance_nits =
-        options.sdr_max_luminance_nits * options.dst_max_luminance_relative;
+        options.dst_sdr_max_luminance_nits * options.dst_max_luminance_relative;
     gamma_minus_one =
         1.2f +
         0.42f * logf(dst_max_luminance_nits / kHLGRefMaxLumNits) / logf(10.f) -
@@ -1012,7 +1012,7 @@
     if (IsHlgPqSdrRelative()) {
       return src_max_lum_nits / ColorSpace::kDefaultSDRWhiteLevel;
     }
-    return src_max_lum_nits / options.sdr_max_luminance_nits;
+    return src_max_lum_nits / options.dst_sdr_max_luminance_nits;
   }
   // Computes the constants used by the tone mapping algorithm described in
   // https://colab.research.google.com/drive/1hI10nq6L6ru_UFvz7-f7xQaQp0qarz_K
@@ -1036,8 +1036,10 @@
 
 // Converts from nits-relative (where 1.0 is `unity_nits` nits) to SDR-relative
 // (where 1.0 is SDR white). If `use_default_sdr_white` is true then use 203
-// nits for SDR white, otherwise use `RuntimeOptions::sdr_max_luminance_nits`
-// for SDR white.
+// nits for SDR white, otherwise use
+// `RuntimeOptions::dst_sdr_max_luminance_nits` for SDR white.
+// TODO(https://crbug.com/1421266, https://crbug.com/1483235): Use source HDR
+// metadata for this conversion.
 class ColorTransformNitsToSdrRelative : public ColorTransformStep {
  public:
   ColorTransformNitsToSdrRelative(float unity_nits, bool use_default_sdr_white)
@@ -1050,7 +1052,7 @@
                  const ColorTransform::RuntimeOptions& options) const override {
     const float sdr_white_nits = use_default_sdr_white_
                                      ? ColorSpace::kDefaultSDRWhiteLevel
-                                     : options.sdr_max_luminance_nits;
+                                     : options.dst_sdr_max_luminance_nits;
     const float factor = unity_nits_ / sdr_white_nits;
     for (size_t i = 0; i < num; i++) {
       color[i].Scale(factor);
@@ -1061,12 +1063,12 @@
     if (use_default_sdr_white_) {
       *src << ColorSpace::kDefaultSDRWhiteLevel << ";";
     } else {
-      *src << "sdr_max_luminance_nits;\n";
+      *src << "dst_sdr_max_luminance_nits;\n";
     }
   }
   void SetShaderUniforms(const ColorTransform::RuntimeOptions& options,
                          SkShaderUniforms* uniforms) const override {
-    uniforms->sdr_max_luminance_nits = options.sdr_max_luminance_nits;
+    uniforms->dst_sdr_max_luminance_nits = options.dst_sdr_max_luminance_nits;
   }
 
  private:
@@ -1075,8 +1077,8 @@
 };
 
 // Converts from SDR-relative (where 1.0 is SDR white) to nits-relative (where
-// 1.0 is `unity_nits` nits). Use `RuntimeOptions::sdr_max_luminance_nits` for
-// the number of nits of SDR white.
+// 1.0 is `unity_nits` nits). Use `RuntimeOptions::dst_sdr_max_luminance_nits`
+// for the number of nits of SDR white.
 class ColorTransformSdrToNitsRelative : public ColorTransformStep {
  public:
   explicit ColorTransformSdrToNitsRelative(float unity_nits)
@@ -1086,18 +1088,18 @@
   void Transform(ColorTransform::TriStim* color,
                  size_t num,
                  const ColorTransform::RuntimeOptions& options) const override {
-    const float factor = options.sdr_max_luminance_nits / unity_nits_;
+    const float factor = options.dst_sdr_max_luminance_nits / unity_nits_;
     for (size_t i = 0; i < num; i++) {
       color[i].Scale(factor);
     }
   }
   void AppendSkShaderSource(std::stringstream* src) const override {
-    *src << "  color.rgb *= (sdr_max_luminance_nits / " << unity_nits_
+    *src << "  color.rgb *= (dst_sdr_max_luminance_nits / " << unity_nits_
          << ");\n";
   }
   void SetShaderUniforms(const ColorTransform::RuntimeOptions& options,
                          SkShaderUniforms* uniforms) const override {
-    uniforms->sdr_max_luminance_nits = options.sdr_max_luminance_nits;
+    uniforms->dst_sdr_max_luminance_nits = options.dst_sdr_max_luminance_nits;
   }
 
  private:
@@ -1327,7 +1329,7 @@
 
   src << "uniform half offset;\n"
       << "uniform half multiplier;\n"
-      << "uniform half sdr_max_luminance_nits;\n"
+      << "uniform half dst_sdr_max_luminance_nits;\n"
       << "uniform half pq_tonemap_a;\n"
       << "uniform half pq_tonemap_b;\n"
       << "uniform half hlg_ootf_gamma_minus_one;\n"
diff --git a/ui/gfx/color_transform.h b/ui/gfx/color_transform.h
index 9fff8de..ec6d54d 100644
--- a/ui/gfx/color_transform.h
+++ b/ui/gfx/color_transform.h
@@ -46,15 +46,15 @@
     float offset = 0.f;
     float multiplier = 1.f;
 
-    // Used for interpreting color spaces whose definition depends on an SDR
-    // white point and for tone mapping.
-    float sdr_max_luminance_nits = ColorSpace::kDefaultSDRWhiteLevel;
-
     // Used for tone mapping PQ sources.
     absl::optional<gfx::HDRMetadata> src_hdr_metadata;
 
+    // Used for interpreting color spaces whose definition depends on an SDR
+    // white point and for tone mapping.
+    float dst_sdr_max_luminance_nits = ColorSpace::kDefaultSDRWhiteLevel;
+
     // The maximum luminance value for the destination, as a multiple of
-    // `sdr_max_luminance_nits` (so this is 1 for SDR displays).
+    // `dst_sdr_max_luminance_nits` (so this is 1 for SDR displays).
     float dst_max_luminance_relative = 1.f;
   };
 
diff --git a/ui/gfx/color_transform_unittest.cc b/ui/gfx/color_transform_unittest.cc
index 1404c9d..097d5ea 100644
--- a/ui/gfx/color_transform_unittest.cc
+++ b/ui/gfx/color_transform_unittest.cc
@@ -656,7 +656,7 @@
 
     ColorTransform::Options options;
     ColorTransform::RuntimeOptions runtime_options;
-    runtime_options.sdr_max_luminance_nits = kSdrWhite;
+    runtime_options.dst_sdr_max_luminance_nits = kSdrWhite;
 
     std::unique_ptr<ColorTransform> xform(
         ColorTransform::NewColorTransform(src_srgb, dst, options));
@@ -676,7 +676,7 @@
     ColorTransform::Options options;
     ColorTransform::RuntimeOptions runtime_options;
     options.tone_map_pq_and_hlg_to_dst = true;
-    runtime_options.sdr_max_luminance_nits = kSdrWhite;
+    runtime_options.dst_sdr_max_luminance_nits = kSdrWhite;
     runtime_options.dst_max_luminance_relative = kDstMaxLumRel;
 
     std::unique_ptr<ColorTransform> xform(
@@ -701,7 +701,7 @@
 
     ColorTransform::Options options;
     ColorTransform::RuntimeOptions runtime_options;
-    runtime_options.sdr_max_luminance_nits = kSdrWhite;
+    runtime_options.dst_sdr_max_luminance_nits = kSdrWhite;
 
     std::unique_ptr<ColorTransform> xform(
         ColorTransform::NewColorTransform(src_hlg, dst, options));
@@ -727,7 +727,7 @@
     ColorTransform::Options options;
     ColorTransform::RuntimeOptions runtime_options;
     options.tone_map_pq_and_hlg_to_dst = true;
-    runtime_options.sdr_max_luminance_nits = kSdrWhite;
+    runtime_options.dst_sdr_max_luminance_nits = kSdrWhite;
     runtime_options.dst_max_luminance_relative = kDstMaxLumRel;
 
     std::unique_ptr<ColorTransform> xform(
@@ -768,7 +768,7 @@
     ColorTransform::RuntimeOptions runtime_options;
     constexpr float kSdrWhite = 100.f;
     constexpr float kDstMaxLumRel = 2.f;
-    runtime_options.sdr_max_luminance_nits = kSdrWhite;
+    runtime_options.dst_sdr_max_luminance_nits = kSdrWhite;
     runtime_options.dst_max_luminance_relative = kDstMaxLumRel;
 
     ColorTransform::TriStim val(1.f, 1.f, 1.f);
@@ -781,7 +781,7 @@
     ColorTransform::RuntimeOptions runtime_options;
     constexpr float kSdrWhite = 250.f;
     constexpr float kDstMaxLumRel = 6.f;
-    runtime_options.sdr_max_luminance_nits = kSdrWhite;
+    runtime_options.dst_sdr_max_luminance_nits = kSdrWhite;
     runtime_options.dst_max_luminance_relative = kDstMaxLumRel;
 
     ColorTransform::TriStim val(1.f, 1.f, 1.f);
@@ -807,7 +807,7 @@
   ColorTransform::RuntimeOptions runtime_options;
   constexpr float kSdrWhite = 100.f;
   constexpr float kDstMaxLumRel = 2.f;
-  runtime_options.sdr_max_luminance_nits = kSdrWhite;
+  runtime_options.dst_sdr_max_luminance_nits = kSdrWhite;
   runtime_options.dst_max_luminance_relative = kDstMaxLumRel;
 
   // HLG 75% will match 203 nits.
@@ -844,7 +844,7 @@
     ColorTransform::RuntimeOptions runtime_options;
     constexpr float kSdrWhite = 100.f;
     constexpr float kDstMaxLumRel = 2.f;
-    runtime_options.sdr_max_luminance_nits = kSdrWhite;
+    runtime_options.dst_sdr_max_luminance_nits = kSdrWhite;
     runtime_options.dst_max_luminance_relative = kDstMaxLumRel;
 
     ColorTransform::TriStim val(1.f, 1.f, 1.f);
@@ -857,7 +857,7 @@
     ColorTransform::RuntimeOptions runtime_options;
     constexpr float kSdrWhite = 250.f;
     constexpr float kDstMaxLumRel = 6.f;
-    runtime_options.sdr_max_luminance_nits = kSdrWhite;
+    runtime_options.dst_sdr_max_luminance_nits = kSdrWhite;
     runtime_options.dst_max_luminance_relative = kDstMaxLumRel;
 
     ColorTransform::TriStim val(1.f, 1.f, 1.f);
@@ -883,7 +883,7 @@
   ColorTransform::RuntimeOptions runtime_options;
   constexpr float kSdrWhite = 100.f;
   constexpr float kDstMaxLumRel = 2.f;
-  runtime_options.sdr_max_luminance_nits = kSdrWhite;
+  runtime_options.dst_sdr_max_luminance_nits = kSdrWhite;
   runtime_options.dst_max_luminance_relative = kDstMaxLumRel;
 
   // HLG 75% will match 203 nits.
@@ -922,7 +922,7 @@
     ColorTransform::RuntimeOptions runtime_options;
     constexpr float kSdrWhite = 100.f;
     constexpr float kDstMaxLumRel = 2.f;
-    runtime_options.sdr_max_luminance_nits = kSdrWhite;
+    runtime_options.dst_sdr_max_luminance_nits = kSdrWhite;
     runtime_options.dst_max_luminance_relative = kDstMaxLumRel;
 
     ColorTransform::TriStim val(1.f, 1.f, 1.f);
@@ -936,7 +936,7 @@
     ColorTransform::RuntimeOptions runtime_options;
     constexpr float kSdrWhite = 100.f;
     constexpr float kDstMaxLumRel = 2.f;
-    runtime_options.sdr_max_luminance_nits = kSdrWhite;
+    runtime_options.dst_sdr_max_luminance_nits = kSdrWhite;
     runtime_options.dst_max_luminance_relative = kDstMaxLumRel;
     runtime_options.src_hdr_metadata =
         HDRMetadata(HdrMetadataCta861_3(1000.f, 100.f));
@@ -951,7 +951,7 @@
     ColorTransform::RuntimeOptions runtime_options;
     constexpr float kSdrWhite = 90.f;
     constexpr float kDstMaxLumRel = 51.f;
-    runtime_options.sdr_max_luminance_nits = kSdrWhite;
+    runtime_options.dst_sdr_max_luminance_nits = kSdrWhite;
     runtime_options.dst_max_luminance_relative = kDstMaxLumRel;
 
     ColorTransform::TriStim val(1.f, 1.f, 1.f);
@@ -966,7 +966,7 @@
     ColorTransform::RuntimeOptions runtime_options;
     constexpr float kSdrWhite = 100.f;
     constexpr float kDstMaxLumRel = 6.f;
-    runtime_options.sdr_max_luminance_nits = kSdrWhite;
+    runtime_options.dst_sdr_max_luminance_nits = kSdrWhite;
     runtime_options.dst_max_luminance_relative = kDstMaxLumRel;
     runtime_options.src_hdr_metadata =
         HDRMetadata(HdrMetadataCta861_3(1000.f, 100.f));
@@ -997,7 +997,7 @@
     const ColorSpace hdr10 = ColorSpace::CreateHDR10();
     ColorTransform::Options options;
     ColorTransform::RuntimeOptions runtime_options;
-    runtime_options.sdr_max_luminance_nits = nits[i];
+    runtime_options.dst_sdr_max_luminance_nits = nits[i];
 
     // Transform to the same color space, but with the LINEAR_HDR transfer
     // function.
@@ -1062,7 +1062,7 @@
     const ColorSpace hlg = ColorSpace::CreateHLG();
     ColorTransform::Options options;
     ColorTransform::RuntimeOptions runtime_options;
-    runtime_options.sdr_max_luminance_nits = nits[i];
+    runtime_options.dst_sdr_max_luminance_nits = nits[i];
 
     // Transform to the same color space, but with the LINEAR_HDR transfer
     // function.
diff --git a/ui/gfx/linux/gbm_wrapper.cc b/ui/gfx/linux/gbm_wrapper.cc
index c1bf39fc..5fa6feb 100644
--- a/ui/gfx/linux/gbm_wrapper.cc
+++ b/ui/gfx/linux/gbm_wrapper.cc
@@ -72,10 +72,9 @@
   // anyways
   if (ret) {
     ret = drmPrimeHandleToFD(dev_fd, plane_handle, DRM_CLOEXEC, &fd);
-    return base::ScopedFD();
   }
 
-  return base::ScopedFD(fd);
+  return ret ? base::ScopedFD() : base::ScopedFD(fd);
 #endif
 }
 
diff --git a/ui/ozone/platform/wayland/host/wayland_buffer_manager_connector.cc b/ui/ozone/platform/wayland/host/wayland_buffer_manager_connector.cc
index 6b21b02..63c674b 100644
--- a/ui/ozone/platform/wayland/host/wayland_buffer_manager_connector.cc
+++ b/ui/ozone/platform/wayland/host/wayland_buffer_manager_connector.cc
@@ -45,6 +45,9 @@
   // all bug fix ids are ready before initializing WaylandBufferManagerGpu. If
   // bug fix ids are already ready, it immediately calls OnAllBugFixesSent
   // synchronously.
+  // TODO(crbug.com/1487446): This always runs synchronously now due to the
+  // temporal solution for avoiding the race condition. It may return empty bug
+  // fix ids while there are ids sent from Ash.
   buffer_manager_host_->WaitForAllBugFixIds(
       base::BindOnce(&WaylandBufferManagerConnector::OnAllBugFixesSent,
                      weak_factory_.GetWeakPtr()));
diff --git a/ui/ozone/platform/wayland/host/wayland_buffer_manager_host.cc b/ui/ozone/platform/wayland/host/wayland_buffer_manager_host.cc
index 2ac3e89..96f6cd2 100644
--- a/ui/ozone/platform/wayland/host/wayland_buffer_manager_host.cc
+++ b/ui/ozone/platform/wayland/host/wayland_buffer_manager_host.cc
@@ -14,6 +14,7 @@
 
 #include "base/functional/bind.h"
 #include "base/i18n/number_formatting.h"
+#include "base/logging.h"
 #include "base/posix/eintr_wrapper.h"
 #include "base/strings/strcat.h"
 #include "base/strings/utf_string_conversions.h"
@@ -127,6 +128,10 @@
 
 void WaylandBufferManagerHost::OnAllBugFixesSent(
     std::vector<uint32_t> bug_fix_ids) {
+  // TODO(crbug.com/1487446): Currently, we immediately call the callback when
+  // it's passed regardless of bug fix ids readiness, so it always falls into
+  // `all_bug_fixes_sent_callback_.is_null()` condition.
+
   // If `all_bug_fixes_sent_callback_` is not registered yet, `bug_fix_ids`
   // should be obtained by WaitBugFixIds call later.
   if (all_bug_fixes_sent_callback_.is_null()) {
@@ -155,9 +160,15 @@
     return;
   }
 
-  // If bug_fix_ids is not yet ready, wait until OnAllBugFixesSent is notified.
-  CHECK(all_bug_fixes_sent_callback_.is_null());
-  all_bug_fixes_sent_callback_ = std::move(callback);
+  // If bug fix ids are not yet ready, immediately call `callback` with empty
+  // list of bug fix ids to avoid delaying WaylandBufferManagerGpu
+  // initialization long enough to cause race condition on GPU setup. We should
+  // wait bug fix ids when the race condition will be fixed.
+  // TODO(crbug.com/1487446): Store `callback` to `all_bug_fixes_sent_callback_`
+  // and wait calling it until the bug fix ids are ready.
+  LOG(WARNING) << "Bug fix ids are not yet ready for WaylandBufferManagerGpu "
+               << "initialization. See crbug.com/1487446 for more details.";
+  std::move(callback).Run(std::vector<uint32_t>());
 }
 
 wl::BufferFormatsWithModifiersMap
diff --git a/ui/ozone/platform/wayland/host/wayland_zaura_shell_unittest.cc b/ui/ozone/platform/wayland/host/wayland_zaura_shell_unittest.cc
index 66deb47..0e9cff2 100644
--- a/ui/ozone/platform/wayland/host/wayland_zaura_shell_unittest.cc
+++ b/ui/ozone/platform/wayland/host/wayland_zaura_shell_unittest.cc
@@ -55,7 +55,9 @@
   ASSERT_FALSE(connection_->zaura_shell()->compositor_version().IsValid());
 }
 
-TEST_F(WaylandZAuraShellTest, AllBugFixesSent) {
+// TODO(crbug.com/1487446): Disabled now since the bug fix ids feature is
+// partially disabled now until the race condition got resolved.
+TEST_F(WaylandZAuraShellTest, DISABLED_AllBugFixesSent) {
   connection_->zaura_shell()->ResetBugFixesStatusForTesting();
 
   ASSERT_FALSE(connection_->zaura_shell()->HasBugFix(1));
diff --git a/ui/ozone/platform/x11/x11_window.cc b/ui/ozone/platform/x11/x11_window.cc
index 91d5863a..87aa663 100644
--- a/ui/ozone/platform/x11/x11_window.cc
+++ b/ui/ozone/platform/x11/x11_window.cc
@@ -2004,8 +2004,14 @@
   if (had_pointer_grab_ && !has_pointer_grab_)
     OnXWindowLostPointerGrab();
 
+#if BUILDFLAG(IS_CHROMEOS_ASH)
+  bool had_pointer_capture = had_pointer_grab_;
+  bool has_pointer_capture = has_pointer_grab_;
+#else
+  // TODO(crbug.com/1491239): Remove has|had_pointer_
   bool had_pointer_capture = had_pointer_ || had_pointer_grab_;
   bool has_pointer_capture = has_pointer_ || has_pointer_grab_;
+#endif
   if (had_pointer_capture && !has_pointer_capture)
     OnXWindowLostCapture();
 
diff --git a/ui/webui/resources/js/BUILD.gn b/ui/webui/resources/js/BUILD.gn
index 2ba64cc..5dc1289 100644
--- a/ui/webui/resources/js/BUILD.gn
+++ b/ui/webui/resources/js/BUILD.gn
@@ -12,6 +12,7 @@
 
   non_web_component_files = [
     "action_link.ts",
+    "assert.ts",
     "assert_ts.ts",
     "color_utils.ts",
     "cr.ts",
diff --git a/ui/webui/resources/js/assert.ts b/ui/webui/resources/js/assert.ts
new file mode 100644
index 0000000..acb154ab
--- /dev/null
+++ b/ui/webui/resources/js/assert.ts
@@ -0,0 +1,51 @@
+// 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.
+
+/**
+ * Verify |value| is truthy.
+ * @param value A value to check for truthiness. Note that this
+ *     may be used to test whether |value| is defined or not, and we don't want
+ *     to force a cast to boolean.
+ */
+export function assert<T>(value: T, message?: string): asserts value {
+  if (value) {
+    return;
+  }
+
+  throw new Error('Assertion failed' + (message ? `: ${message}` : ''));
+}
+
+export function assertInstanceof<T>(
+    value: unknown, type: {new (...args: any): T},
+    message?: string): asserts value is T {
+  if (value instanceof type) {
+    return;
+  }
+
+  throw new Error(
+      message || `Value ${value} is not of type ${type.name || typeof type}`);
+}
+
+/**
+ * Call this from places in the code that should never be reached.
+ *
+ * For example, handling all the values of enum with a switch() like this:
+ *
+ *   function getValueFromEnum(enum) {
+ *     switch (enum) {
+ *       case ENUM_FIRST_OF_TWO:
+ *         return first
+ *       case ENUM_LAST_OF_TWO:
+ *         return last;
+ *     }
+ *     assertNotReached();
+ *   }
+ *
+ * This code should only be hit in the case of serious programmer error or
+ * unexpected input.
+ */
+export function assertNotReached(message: string = 'Unreachable code hit'):
+    never {
+  assert(false, message);
+}
diff --git a/ui/webui/resources/js/assert_ts.ts b/ui/webui/resources/js/assert_ts.ts
index 269e061..72a0960 100644
--- a/ui/webui/resources/js/assert_ts.ts
+++ b/ui/webui/resources/js/assert_ts.ts
@@ -2,52 +2,6 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-/** @fileoverview A better version of assert.js for TypeScript. */
-
-/**
- * Verify |value| is truthy.
- * @param value A value to check for truthiness. Note that this
- *     may be used to test whether |value| is defined or not, and we don't want
- *     to force a cast to boolean.
- */
-export function assert<T>(value: T, message?: string): asserts value {
-  if (value) {
-    return;
-  }
-
-  throw new Error('Assertion failed' + (message ? `: ${message}` : ''));
-}
-
-export function assertInstanceof<T>(
-    value: unknown, type: {new (...args: any): T},
-    message?: string): asserts value is T {
-  if (value instanceof type) {
-    return;
-  }
-
-  throw new Error(
-      message || `Value ${value} is not of type ${type.name || typeof type}`);
-}
-
-/**
- * Call this from places in the code that should never be reached.
- *
- * For example, handling all the values of enum with a switch() like this:
- *
- *   function getValueFromEnum(enum) {
- *     switch (enum) {
- *       case ENUM_FIRST_OF_TWO:
- *         return first
- *       case ENUM_LAST_OF_TWO:
- *         return last;
- *     }
- *     assertNotReached();
- *   }
- *
- * This code should only be hit in the case of serious programmer error or
- * unexpected input.
- */
-export function assertNotReached(message: string = 'Unreachable code hit'):
-    never {
-  assert(false, message);
-}
+// TODO(crbug.com/1291526): Delete this file once all clients have been updated
+// to use assert.ts directly.
+export {assert, assertInstanceof, assertNotReached} from './assert.js';
diff --git a/v8 b/v8
index c57efa1..b5f6750 160000
--- a/v8
+++ b/v8
@@ -1 +1 @@
-Subproject commit c57efa129901e286f562dccac8c5e77b9517b1fd
+Subproject commit b5f6750fd599671f406a077969c2caf4bd8e2da7