diff -urp webkitgtk-2.51.90.gstreamer1.8/Source/cmake/OptionsGTK.cmake webkitgtk-2.51.90.icu52/Source/cmake/OptionsGTK.cmake
--- webkitgtk-2.51.90.gstreamer1.8/Source/cmake/OptionsGTK.cmake	2026-01-26 16:50:09.076111090 -0600
+++ webkitgtk-2.51.90.icu52/Source/cmake/OptionsGTK.cmake	2026-01-27 03:51:52.902092797 -0600
@@ -13,7 +13,7 @@ find_package(Cairo 1.15.2 REQUIRED)
 find_package(LibGcrypt 1.7.0 REQUIRED)
 find_package(Tasn1 REQUIRED)
 find_package(HarfBuzz 1.4.5 REQUIRED COMPONENTS ICU)
-find_package(ICU 65.1 REQUIRED COMPONENTS data i18n uc)
+find_package(ICU 52.1 REQUIRED COMPONENTS data i18n uc)
 find_package(JPEG REQUIRED)
 find_package(Epoxy 1.3.1 REQUIRED)
 find_package(LibXml2 2.9.4 REQUIRED)
diff -urp webkitgtk-2.51.90.gstreamer1.8/Source/JavaScriptCore/heap/Heap.cpp webkitgtk-2.51.90.icu52/Source/JavaScriptCore/heap/Heap.cpp
--- webkitgtk-2.51.90.gstreamer1.8/Source/JavaScriptCore/heap/Heap.cpp	2026-01-23 02:35:21.955512500 -0600
+++ webkitgtk-2.51.90.icu52/Source/JavaScriptCore/heap/Heap.cpp	2026-01-27 03:49:39.369258100 -0600
@@ -391,12 +391,8 @@ Heap::Heap(VM& vm, HeapType heapType)
     , intlCollatorHeapCellType(IsoHeapCellType::Args<IntlCollator>())
     , intlDateTimeFormatHeapCellType(IsoHeapCellType::Args<IntlDateTimeFormat>())
     , intlDisplayNamesHeapCellType(IsoHeapCellType::Args<IntlDisplayNames>())
-    , intlDurationFormatHeapCellType(IsoHeapCellType::Args<IntlDurationFormat>())
-    , intlListFormatHeapCellType(IsoHeapCellType::Args<IntlListFormat>())
-    , intlLocaleHeapCellType(IsoHeapCellType::Args<IntlLocale>())
     , intlNumberFormatHeapCellType(IsoHeapCellType::Args<IntlNumberFormat>())
     , intlPluralRulesHeapCellType(IsoHeapCellType::Args<IntlPluralRules>())
-    , intlRelativeTimeFormatHeapCellType(IsoHeapCellType::Args<IntlRelativeTimeFormat>())
     , intlSegmentIteratorHeapCellType(IsoHeapCellType::Args<IntlSegmentIterator>())
     , intlSegmenterHeapCellType(IsoHeapCellType::Args<IntlSegmenter>())
     , intlSegmentsHeapCellType(IsoHeapCellType::Args<IntlSegments>())
diff -urp webkitgtk-2.51.90.gstreamer1.8/Source/JavaScriptCore/heap/Heap.h webkitgtk-2.51.90.icu52/Source/JavaScriptCore/heap/Heap.h
--- webkitgtk-2.51.90.gstreamer1.8/Source/JavaScriptCore/heap/Heap.h	2026-01-23 02:35:21.955512500 -0600
+++ webkitgtk-2.51.90.icu52/Source/JavaScriptCore/heap/Heap.h	2026-01-27 03:49:39.371513103 -0600
@@ -245,12 +245,8 @@ class Heap;
     v(intlCollatorSpace, intlCollatorHeapCellType, IntlCollator) \
     v(intlDateTimeFormatSpace, intlDateTimeFormatHeapCellType, IntlDateTimeFormat) \
     v(intlDisplayNamesSpace, intlDisplayNamesHeapCellType, IntlDisplayNames) \
-    v(intlDurationFormatSpace, intlDurationFormatHeapCellType, IntlDurationFormat) \
-    v(intlListFormatSpace, intlListFormatHeapCellType, IntlListFormat) \
-    v(intlLocaleSpace, intlLocaleHeapCellType, IntlLocale) \
     v(intlNumberFormatSpace, intlNumberFormatHeapCellType, IntlNumberFormat) \
     v(intlPluralRulesSpace, intlPluralRulesHeapCellType, IntlPluralRules) \
-    v(intlRelativeTimeFormatSpace, intlRelativeTimeFormatHeapCellType, IntlRelativeTimeFormat) \
     v(intlSegmentIteratorSpace, intlSegmentIteratorHeapCellType, IntlSegmentIterator) \
     v(intlSegmenterSpace, intlSegmenterHeapCellType, IntlSegmenter) \
     v(intlSegmentsSpace, intlSegmentsHeapCellType, IntlSegments) \
@@ -1047,12 +1043,8 @@ public:
     IsoHeapCellType intlCollatorHeapCellType;
     IsoHeapCellType intlDateTimeFormatHeapCellType;
     IsoHeapCellType intlDisplayNamesHeapCellType;
-    IsoHeapCellType intlDurationFormatHeapCellType;
-    IsoHeapCellType intlListFormatHeapCellType;
-    IsoHeapCellType intlLocaleHeapCellType;
     IsoHeapCellType intlNumberFormatHeapCellType;
     IsoHeapCellType intlPluralRulesHeapCellType;
-    IsoHeapCellType intlRelativeTimeFormatHeapCellType;
     IsoHeapCellType intlSegmentIteratorHeapCellType;
     IsoHeapCellType intlSegmenterHeapCellType;
     IsoHeapCellType intlSegmentsHeapCellType;
diff -urp webkitgtk-2.51.90.gstreamer1.8/Source/JavaScriptCore/heap/HeapSubspaceTypes.h webkitgtk-2.51.90.icu52/Source/JavaScriptCore/heap/HeapSubspaceTypes.h
--- webkitgtk-2.51.90.gstreamer1.8/Source/JavaScriptCore/heap/HeapSubspaceTypes.h	2026-01-23 02:35:21.959512500 -0600
+++ webkitgtk-2.51.90.icu52/Source/JavaScriptCore/heap/HeapSubspaceTypes.h	2026-01-27 03:49:39.372610372 -0600
@@ -40,12 +40,8 @@
 #include "IntlCollator.h"
 #include "IntlDateTimeFormat.h"
 #include "IntlDisplayNames.h"
-#include "IntlDurationFormat.h"
-#include "IntlListFormat.h"
-#include "IntlLocale.h"
 #include "IntlNumberFormat.h"
 #include "IntlPluralRules.h"
-#include "IntlRelativeTimeFormat.h"
 #include "IntlSegmentIterator.h"
 #include "IntlSegmenter.h"
 #include "IntlSegments.h"
diff -urp webkitgtk-2.51.90.gstreamer1.8/Source/JavaScriptCore/runtime/IntlCache.cpp webkitgtk-2.51.90.icu52/Source/JavaScriptCore/runtime/IntlCache.cpp
--- webkitgtk-2.51.90.gstreamer1.8/Source/JavaScriptCore/runtime/IntlCache.cpp	2026-01-23 02:35:22.047511000 -0600
+++ webkitgtk-2.51.90.icu52/Source/JavaScriptCore/runtime/IntlCache.cpp	2026-01-27 03:49:39.373358750 -0600
@@ -25,6 +25,7 @@
 
 #include "config.h"
 #include "IntlCache.h"
+#include "IntlDisplayNames.h"
 
 #include <wtf/TZoneMallocInlines.h>
 #include <wtf/Vector.h>
@@ -56,6 +57,7 @@ Vector<char16_t, 32> IntlCache::getBestD
     return patternBuffer;
 }
 
+#if HAVE(ICU_U_LOCALE_DISPLAY_NAMES)
 Vector<char16_t, 32> IntlCache::getFieldDisplayName(const CString& locale, UDateTimePatternField field, UDateTimePGDisplayWidth width, UErrorCode& status)
 {
     auto sharedGenerator = getSharedPatternGenerator(locale, status);
@@ -67,5 +69,6 @@ Vector<char16_t, 32> IntlCache::getField
         return { };
     return buffer;
 }
+#endif
 
 } // namespace JSC
diff -urp webkitgtk-2.51.90.gstreamer1.8/Source/JavaScriptCore/runtime/IntlCache.h webkitgtk-2.51.90.icu52/Source/JavaScriptCore/runtime/IntlCache.h
--- webkitgtk-2.51.90.gstreamer1.8/Source/JavaScriptCore/runtime/IntlCache.h	2026-01-23 02:35:22.047511000 -0600
+++ webkitgtk-2.51.90.icu52/Source/JavaScriptCore/runtime/IntlCache.h	2026-01-27 03:49:39.373983173 -0600
@@ -25,6 +25,7 @@
 
 #pragma once
 
+#include "IntlDisplayNames.h"
 #include <unicode/udatpg.h>
 #include <wtf/Noncopyable.h>
 #include <wtf/TZoneMalloc.h>
@@ -40,7 +41,9 @@ public:
     IntlCache() = default;
 
     Vector<char16_t, 32> getBestDateTimePattern(const CString& locale, std::span<const char16_t> skeleton, UErrorCode&);
+#if HAVE(ICU_U_LOCALE_DISPLAY_NAMES)
     Vector<char16_t, 32> getFieldDisplayName(const CString& locale, UDateTimePatternField, UDateTimePGDisplayWidth, UErrorCode&);
+#endif
 
 private:
     UDateTimePatternGenerator* getSharedPatternGenerator(const CString& locale, UErrorCode& status)
diff -urp webkitgtk-2.51.90.gstreamer1.8/Source/JavaScriptCore/runtime/IntlCollator.cpp webkitgtk-2.51.90.icu52/Source/JavaScriptCore/runtime/IntlCollator.cpp
--- webkitgtk-2.51.90.gstreamer1.8/Source/JavaScriptCore/runtime/IntlCollator.cpp	2026-01-23 02:35:22.047511000 -0600
+++ webkitgtk-2.51.90.icu52/Source/JavaScriptCore/runtime/IntlCollator.cpp	2026-01-27 03:53:56.272903905 -0600
@@ -92,8 +92,16 @@ Vector<String> IntlCollator::sortLocaleD
                 String collation(unsafeMakeSpan(pointer, static_cast<size_t>(length)));
                 if (collation == "standard"_s || collation == "search"_s)
                     continue;
-                if (auto mapped = mapICUCollationKeywordToBCP47(collation))
-                    keyLocaleData.append(WTF::move(mapped.value()));
+
+                // Map keyword values to BCP 47 equivalents.
+                if (collation == "dictionary"_s)
+                    keyLocaleData.append("dict"_s);
+                else if (collation == "gb2312han"_s)
+                    keyLocaleData.append("gb2312"_s);
+                else if (collation == "phonebook"_s)
+                    keyLocaleData.append("phonebk"_s);
+                else if (collation == "traditional"_s)
+                    keyLocaleData.append("trad"_s);
                 else
                     keyLocaleData.append(WTF::move(collation));
             }
diff -urp webkitgtk-2.51.90.gstreamer1.8/Source/JavaScriptCore/runtime/IntlDateTimeFormat.cpp webkitgtk-2.51.90.icu52/Source/JavaScriptCore/runtime/IntlDateTimeFormat.cpp
--- webkitgtk-2.51.90.gstreamer1.8/Source/JavaScriptCore/runtime/IntlDateTimeFormat.cpp	2026-01-26 13:28:43.007468007 -0600
+++ webkitgtk-2.51.90.icu52/Source/JavaScriptCore/runtime/IntlDateTimeFormat.cpp	2026-01-27 04:02:08.523355390 -0600
@@ -148,17 +148,13 @@ Vector<String> IntlDateTimeFormat::local
             ASSERT(U_SUCCESS(status));
             String calendar = String(unsafeMakeSpan(availableName, static_cast<size_t>(nameLength)));
             // Adding "islamicc" candidate for backward compatibility.
-            if (calendar == "islamic-civil"_s)
+           if (calendar == "gregorian"_s)
+                keyLocaleData.append("gregory"_s);
+            else if (calendar == "islamic-civil"_s)
                 keyLocaleData.append("islamicc"_s);
-
-            if (auto mapped = mapICUCalendarKeywordToBCP47(calendar)) {
-                // Specially allowing non BCP-47 compliant cases here, e.g. "gregorian"
-                // This is fine because this function's purpose is collecting what calendar strings are accepted by IntlDateTimeFormat.
-                // When "gregorian" is specified, we convert it to "gregory" to make it aligned to BCP-47. Thus we accept non BCP-47 compliant
-                // calendar IDs only when we can convert it to corresponding BCP-47 compliant ID: when mapICUCalendarKeywordToBCP47 returns a mapped value.
-                keyLocaleData.append(WTF::move(calendar));
-                keyLocaleData.append(WTF::move(mapped.value()));
-            } else {
+            else if (calendar == "ethiopic-amete-alem"_s)
+                keyLocaleData.append("ethioaa"_s);
+            else {
                 // Skip if the obtained calendar code is not meeting Unicode Locale Identifier's `type` definition
                 // as whole ECMAScript's i18n is relying on Unicode Local Identifiers.
                 if (isUnicodeLocaleIdentifierType(calendar))
@@ -714,16 +710,13 @@ void IntlDateTimeFormat::initializeDateT
         return;
     }
 
-    {
-        String calendar = resolved.extensions[static_cast<unsigned>(RelevantExtensionKey::Ca)];
-        if (auto mapped = mapICUCalendarKeywordToBCP47(calendar))
-            calendar = WTF::move(mapped.value());
-
-        m_calendar = WTF::move(calendar);
-        // Handling "islamicc" candidate for backward compatibility.
-        if (m_calendar == "islamicc"_s)
-            m_calendar = "islamic-civil"_s;
-    }
+    m_calendar = resolved.extensions[static_cast<unsigned>(RelevantExtensionKey::Ca)];
+    if (m_calendar == "gregorian"_s)
+        m_calendar = "gregory"_s;
+    else if (m_calendar == "islamicc"_s)
+        m_calendar = "islamic-civil"_s;
+    else if (m_calendar == "ethioaa"_s)
+        m_calendar = "ethiopic-amete-alem"_s;
 
     hourCycle = parseHourCycle(resolved.extensions[static_cast<unsigned>(RelevantExtensionKey::Hc)]);
     m_numberingSystem = resolved.extensions[static_cast<unsigned>(RelevantExtensionKey::Nu)];
@@ -1268,6 +1261,7 @@ JSValue IntlDateTimeFormat::format(JSGlo
     return jsString(vm, String(WTF::move(result)));
 }
 
+#if HAVE(ICU_U_DATE_INTERVAL_FORMAT_FORMAT_RANGE_TO_PARTS)
 static ASCIILiteral partTypeString(UDateFormatField field)
 {
     switch (field) {
@@ -1396,6 +1390,7 @@ JSValue IntlDateTimeFormat::formatToPart
 
     return parts;
 }
+#endif
 
 UDateIntervalFormat* IntlDateTimeFormat::createDateIntervalFormatIfNecessary(JSGlobalObject* globalObject)
 {
diff -urp webkitgtk-2.51.90.gstreamer1.8/Source/JavaScriptCore/runtime/IntlDateTimeFormatPrototype.cpp webkitgtk-2.51.90.icu52/Source/JavaScriptCore/runtime/IntlDateTimeFormatPrototype.cpp
--- webkitgtk-2.51.90.gstreamer1.8/Source/JavaScriptCore/runtime/IntlDateTimeFormatPrototype.cpp	2026-01-26 13:28:43.009425456 -0600
+++ webkitgtk-2.51.90.icu52/Source/JavaScriptCore/runtime/IntlDateTimeFormatPrototype.cpp	2026-01-27 03:49:39.377200318 -0600
@@ -40,7 +40,6 @@ namespace JSC {
 static JSC_DECLARE_CUSTOM_GETTER(intlDateTimeFormatPrototypeGetterFormat);
 static JSC_DECLARE_HOST_FUNCTION(intlDateTimeFormatPrototypeFuncFormatRange);
 static JSC_DECLARE_HOST_FUNCTION(intlDateTimeFormatPrototypeFuncFormatRangeToParts);
-static JSC_DECLARE_HOST_FUNCTION(intlDateTimeFormatPrototypeFuncFormatToParts);
 static JSC_DECLARE_HOST_FUNCTION(intlDateTimeFormatPrototypeFuncResolvedOptions);
 static JSC_DECLARE_HOST_FUNCTION(intlDateTimeFormatFuncFormatDateTime);
 
@@ -56,7 +55,6 @@ const ClassInfo IntlDateTimeFormatProtot
 @begin dateTimeFormatPrototypeTable
   format                intlDateTimeFormatPrototypeGetterFormat              DontEnum|ReadOnly|CustomAccessor
   formatRange           intlDateTimeFormatPrototypeFuncFormatRange           DontEnum|Function 2
-  formatToParts         intlDateTimeFormatPrototypeFuncFormatToParts         DontEnum|Function 1
   resolvedOptions       intlDateTimeFormatPrototypeFuncResolvedOptions       DontEnum|Function 0
 @end
 */
@@ -163,6 +161,7 @@ JSC_DEFINE_CUSTOM_GETTER(intlDateTimeFor
     return JSValue::encode(boundFormat);
 }
 
+#if 0
 JSC_DEFINE_HOST_FUNCTION(intlDateTimeFormatPrototypeFuncFormatToParts, (JSGlobalObject* globalObject, CallFrame* callFrame))
 {
     VM& vm = globalObject->vm();
@@ -182,6 +181,7 @@ JSC_DEFINE_HOST_FUNCTION(intlDateTimeFor
 
     RELEASE_AND_RETURN(scope, JSValue::encode(dateTimeFormat->formatToParts(globalObject, value)));
 }
+#endif
 
 // http://tc39.es/proposal-intl-DateTimeFormat-formatRange/#sec-intl.datetimeformat.prototype.formatRange
 JSC_DEFINE_HOST_FUNCTION(intlDateTimeFormatPrototypeFuncFormatRange, (JSGlobalObject* globalObject, CallFrame* callFrame))
diff -urp webkitgtk-2.51.90.gstreamer1.8/Source/JavaScriptCore/runtime/IntlDisplayNames.cpp webkitgtk-2.51.90.icu52/Source/JavaScriptCore/runtime/IntlDisplayNames.cpp
--- webkitgtk-2.51.90.gstreamer1.8/Source/JavaScriptCore/runtime/IntlDisplayNames.cpp	2026-01-23 02:35:22.047511000 -0600
+++ webkitgtk-2.51.90.icu52/Source/JavaScriptCore/runtime/IntlDisplayNames.cpp	2026-01-27 04:04:09.692838355 -0600
@@ -106,6 +106,7 @@ void IntlDisplayNames::initializeDisplay
     m_languageDisplay = intlOption<LanguageDisplay>(globalObject, options, vm.propertyNames->languageDisplay, { { "dialect"_s, LanguageDisplay::Dialect }, { "standard"_s, LanguageDisplay::Standard } }, "languageDisplay must be either \"dialect\" or \"standard\""_s, LanguageDisplay::Dialect);
     RETURN_IF_EXCEPTION(scope, void());
 
+#if HAVE(ICU_U_LOCALE_DISPLAY_NAMES)
     UErrorCode status = U_ZERO_ERROR;
 
     UDisplayContext contexts[] = {
@@ -117,15 +118,6 @@ void IntlDisplayNames::initializeDisplay
         // preferable in Intl.DisplayNames. We use UDISPCTX_CAPITALIZATION_FOR_STANDALONE because it makes standalone date format better (fr "Juillet 2008" in ICU test suites),
         // and DisplayNames will support date formats too.
         UDISPCTX_CAPITALIZATION_FOR_STANDALONE,
-
-        // Narrow becomes UDISPCTX_LENGTH_SHORT. But in currency case, we handle differently instead of using ULocaleDisplayNames.
-        m_style == Style::Long ? UDISPCTX_LENGTH_FULL : UDISPCTX_LENGTH_SHORT,
-
-        // Always disable ICU SUBSTITUTE since it does not match against what the spec defines. ICU has some special substitute rules, for example, language "en-AA"
-        // returns "English (AA)" (while AA country code is not defined), but we would like to return either input value or undefined, so we do not want to have ICU substitute rules.
-        // Note that this is effective after ICU 65.
-        // https://github.com/unicode-org/icu/commit/53dd621e3a5cff3b78b557c405f1b1d6f125b468
-        UDISPCTX_NO_SUBSTITUTE,
     };
     m_localeCString = m_locale.utf8();
     m_displayNames = std::unique_ptr<ULocaleDisplayNames, ULocaleDisplayNamesDeleter>(uldn_openForContext(m_localeCString.data(), contexts, std::size(contexts), &status));
@@ -133,6 +125,10 @@ void IntlDisplayNames::initializeDisplay
         throwTypeError(globalObject, scope, "failed to initialize DisplayNames"_s);
         return;
     }
+#else
+        throwTypeError(globalObject, scope, "failed to initialize Intl.DisplayNames since feature is not supported by the ICU version"_s);
+        return;
+#endif
 }
 
 // https://tc39.es/proposal-intl-displaynames/#sec-Intl.DisplayNames.prototype.of
@@ -142,6 +138,7 @@ JSValue IntlDisplayNames::of(JSGlobalObj
     VM& vm = globalObject->vm();
     auto scope = DECLARE_THROW_SCOPE(vm);
 
+#if HAVE(ICU_U_LOCALE_DISPLAY_NAMES)
     ASSERT(m_displayNames);
     auto code = codeValue.toWTFString(globalObject);
     RETURN_IF_EXCEPTION(scope, { });
@@ -346,6 +343,11 @@ JSValue IntlDisplayNames::of(JSGlobalObj
         return throwTypeError(globalObject, scope, "Failed to query a display name."_s);
     }
     return jsString(vm, String(WTF::move(buffer)));
+#else
+    UNUSED_PARAM(codeValue);
+    throwTypeError(globalObject, scope, "failed to initialize Intl.DisplayNames since feature is not supported by the ICU version"_s);
+    return { };
+#endif
 }
 
 // https://tc39.es/proposal-intl-displaynames/#sec-Intl.DisplayNames.prototype.resolvedOptions
diff -urp webkitgtk-2.51.90.gstreamer1.8/Source/JavaScriptCore/runtime/IntlDisplayNames.h webkitgtk-2.51.90.icu52/Source/JavaScriptCore/runtime/IntlDisplayNames.h
--- webkitgtk-2.51.90.gstreamer1.8/Source/JavaScriptCore/runtime/IntlDisplayNames.h	2026-01-23 02:35:22.047511000 -0600
+++ webkitgtk-2.51.90.icu52/Source/JavaScriptCore/runtime/IntlDisplayNames.h	2026-01-27 03:49:39.378503627 -0600
@@ -29,6 +29,13 @@
 #include <unicode/uldnames.h>
 #include <wtf/unicode/icu/ICUHelpers.h>
 
+#if !defined(HAVE_ICU_U_LOCALE_DISPLAY_NAMES)
+// We need 61 or later since part of implementation uses UCURR_NARROW_SYMBOL_NAME.
+#if U_ICU_VERSION_MAJOR_NUM >= 61
+#define HAVE_ICU_U_LOCALE_DISPLAY_NAMES 1
+#endif
+#endif
+
 namespace JSC {
 
 enum class RelevantExtensionKey : uint8_t;
diff -urp webkitgtk-2.51.90.gstreamer1.8/Source/JavaScriptCore/runtime/IntlNumberFormat.cpp webkitgtk-2.51.90.icu52/Source/JavaScriptCore/runtime/IntlNumberFormat.cpp
--- webkitgtk-2.51.90.gstreamer1.8/Source/JavaScriptCore/runtime/IntlNumberFormat.cpp	2026-01-26 13:28:43.013150311 -0600
+++ webkitgtk-2.51.90.icu52/Source/JavaScriptCore/runtime/IntlNumberFormat.cpp	2026-01-27 03:49:39.379051214 -0600
@@ -1389,6 +1389,7 @@ void IntlNumberFormat::setBoundFormat(VM
     m_boundFormat.set(vm, this, format);
 }
 
+#if 0
 void IntlNumberFormat::formatToPartsInternal(JSGlobalObject* globalObject, Style style, bool sign, IntlMathematicalValue::NumberType numberType, const String& formatted, IntlFieldIterator& iterator, JSArray* parts, JSString* sourceType, JSString* unit)
 {
     VM& vm = globalObject->vm();
@@ -1485,7 +1486,6 @@ JSValue IntlNumberFormat::formatToParts(
     return parts;
 }
 
-#if HAVE(ICU_U_NUMBER_FORMATTER)
 JSValue IntlNumberFormat::formatToParts(JSGlobalObject* globalObject, IntlMathematicalValue&& value, JSString* sourceType) const
 {
     VM& vm = globalObject->vm();
diff -urp webkitgtk-2.51.90.gstreamer1.8/Source/JavaScriptCore/runtime/IntlNumberFormatInlines.h webkitgtk-2.51.90.icu52/Source/JavaScriptCore/runtime/IntlNumberFormatInlines.h
--- webkitgtk-2.51.90.gstreamer1.8/Source/JavaScriptCore/runtime/IntlNumberFormatInlines.h	2026-01-23 02:35:22.051511000 -0600
+++ webkitgtk-2.51.90.icu52/Source/JavaScriptCore/runtime/IntlNumberFormatInlines.h	2026-01-27 03:49:39.379908498 -0600
@@ -317,6 +317,7 @@ void appendNumberFormatNotationOptionsTo
     }
 }
 
+#if 0
 class IntlFieldIterator {
 public:
     WTF_MAKE_NONCOPYABLE(IntlFieldIterator);
@@ -334,6 +335,7 @@ public:
 private:
     UFieldPositionIterator& m_iterator;
 };
+#endif
 
 // https://tc39.es/ecma402/#sec-unwrapnumberformat
 inline IntlNumberFormat* IntlNumberFormat::unwrapForOldFunctions(JSGlobalObject* globalObject, JSValue thisValue)
diff -urp webkitgtk-2.51.90.gstreamer1.8/Source/JavaScriptCore/runtime/IntlNumberFormatPrototype.cpp webkitgtk-2.51.90.icu52/Source/JavaScriptCore/runtime/IntlNumberFormatPrototype.cpp
--- webkitgtk-2.51.90.gstreamer1.8/Source/JavaScriptCore/runtime/IntlNumberFormatPrototype.cpp	2026-01-26 13:28:43.015999639 -0600
+++ webkitgtk-2.51.90.icu52/Source/JavaScriptCore/runtime/IntlNumberFormatPrototype.cpp	2026-01-27 03:49:39.380258307 -0600
@@ -35,7 +35,6 @@
 namespace JSC {
 
 static JSC_DECLARE_CUSTOM_GETTER(intlNumberFormatPrototypeGetterFormat);
-static JSC_DECLARE_HOST_FUNCTION(intlNumberFormatPrototypeFuncFormatToParts);
 static JSC_DECLARE_HOST_FUNCTION(intlNumberFormatPrototypeFuncResolvedOptions);
 static JSC_DECLARE_HOST_FUNCTION(intlNumberFormatFuncFormat);
 
@@ -58,7 +57,6 @@ const ClassInfo IntlNumberFormatPrototyp
 /* Source for IntlNumberFormatPrototype.lut.h
 @begin numberFormatPrototypeTable
   format           intlNumberFormatPrototypeGetterFormat         DontEnum|ReadOnly|CustomAccessor
-  formatToParts    intlNumberFormatPrototypeFuncFormatToParts    DontEnum|Function 1
   resolvedOptions  intlNumberFormatPrototypeFuncResolvedOptions  DontEnum|Function 0
 @end
 */
@@ -176,6 +174,7 @@ JSC_DEFINE_HOST_FUNCTION(intlNumberForma
 }
 #endif
 
+#if 0
 JSC_DEFINE_HOST_FUNCTION(intlNumberFormatPrototypeFuncFormatToParts, (JSGlobalObject* globalObject, CallFrame* callFrame))
 {
     VM& vm = globalObject->vm();
@@ -204,6 +203,7 @@ JSC_DEFINE_HOST_FUNCTION(intlNumberForma
     RELEASE_AND_RETURN(scope, JSValue::encode(numberFormat->formatToParts(globalObject, value)));
 #endif
 }
+#endif
 
 #if HAVE(ICU_U_NUMBER_RANGE_FORMATTER_FORMAT_RANGE_TO_PARTS)
 JSC_DEFINE_HOST_FUNCTION(intlNumberFormatPrototypeFuncFormatRangeToParts, (JSGlobalObject* globalObject, CallFrame* callFrame))
diff -urp webkitgtk-2.51.90.gstreamer1.8/Source/JavaScriptCore/runtime/IntlObject.cpp webkitgtk-2.51.90.icu52/Source/JavaScriptCore/runtime/IntlObject.cpp
--- webkitgtk-2.51.90.gstreamer1.8/Source/JavaScriptCore/runtime/IntlObject.cpp	2026-01-26 13:28:43.016867212 -0600
+++ webkitgtk-2.51.90.icu52/Source/JavaScriptCore/runtime/IntlObject.cpp	2026-01-27 03:49:39.381212799 -0600
@@ -40,13 +40,8 @@
 #include "IntlDisplayNames.h"
 #include "IntlDisplayNamesConstructor.h"
 #include "IntlDisplayNamesPrototype.h"
-#include "IntlDurationFormat.h"
-#include "IntlDurationFormatConstructor.h"
-#include "IntlDurationFormatPrototype.h"
-#include "IntlListFormat.h"
 #include "IntlListFormatConstructor.h"
 #include "IntlListFormatPrototype.h"
-#include "IntlLocale.h"
 #include "IntlLocaleConstructor.h"
 #include "IntlLocalePrototype.h"
 #include "IntlNumberFormatConstructor.h"
@@ -65,7 +60,6 @@
 #include <unicode/ucal.h>
 #include <unicode/ucol.h>
 #include <unicode/ucurr.h>
-#include <unicode/ufieldpositer.h>
 #include <unicode/uloc.h>
 #include <unicode/unumsys.h>
 #include <wtf/Assertions.h>
@@ -107,13 +101,7 @@ static JSValue createDisplayNamesConstru
     return IntlDisplayNamesConstructor::create(vm, IntlDisplayNamesConstructor::createStructure(vm, globalObject, globalObject->functionPrototype()), jsCast<IntlDisplayNamesPrototype*>(globalObject->displayNamesStructure()->storedPrototypeObject()));
 }
 
-static JSValue createDurationFormatConstructor(VM& vm, JSObject* object)
-{
-    IntlObject* intlObject = jsCast<IntlObject*>(object);
-    JSGlobalObject* globalObject = intlObject->globalObject();
-    return IntlDurationFormatConstructor::create(vm, IntlDurationFormatConstructor::createStructure(vm, globalObject, globalObject->functionPrototype()), jsCast<IntlDurationFormatPrototype*>(globalObject->durationFormatStructure()->storedPrototypeObject()));
-}
-
+#if 0
 static JSValue createListFormatConstructor(VM& vm, JSObject* object)
 {
     IntlObject* intlObject = jsCast<IntlObject*>(object);
@@ -127,6 +115,7 @@ static JSValue createLocaleConstructor(V
     JSGlobalObject* globalObject = intlObject->globalObject();
     return IntlLocaleConstructor::create(vm, IntlLocaleConstructor::createStructure(vm, globalObject, globalObject->functionPrototype()), jsCast<IntlLocalePrototype*>(globalObject->localeStructure()->storedPrototypeObject()));
 }
+#endif
 
 static JSValue createNumberFormatConstructor(VM&, JSObject* object)
 {
@@ -142,12 +131,14 @@ static JSValue createPluralRulesConstruc
     return IntlPluralRulesConstructor::create(vm, IntlPluralRulesConstructor::createStructure(vm, globalObject, globalObject->functionPrototype()), jsCast<IntlPluralRulesPrototype*>(globalObject->pluralRulesStructure()->storedPrototypeObject()));
 }
 
+#if 0
 static JSValue createRelativeTimeFormatConstructor(VM& vm, JSObject* object)
 {
     IntlObject* intlObject = jsCast<IntlObject*>(object);
     JSGlobalObject* globalObject = intlObject->globalObject();
     return IntlRelativeTimeFormatConstructor::create(vm, IntlRelativeTimeFormatConstructor::createStructure(vm, globalObject, globalObject->functionPrototype()), jsCast<IntlRelativeTimeFormatPrototype*>(globalObject->relativeTimeFormatStructure()->storedPrototypeObject()));
 }
+#endif
 
 static JSValue createSegmenterConstructor(VM& vm, JSObject* object)
 {
@@ -168,11 +159,8 @@ namespace JSC {
   supportedValuesOf     intlObjectFuncSupportedValuesOf              DontEnum|Function 1
   Collator              createCollatorConstructor                    DontEnum|PropertyCallback
   DateTimeFormat        createDateTimeFormatConstructor              DontEnum|PropertyCallback
-  DisplayNames          createDisplayNamesConstructor                DontEnum|PropertyCallback
-  Locale                createLocaleConstructor                      DontEnum|PropertyCallback
   NumberFormat          createNumberFormatConstructor                DontEnum|PropertyCallback
   PluralRules           createPluralRulesConstructor                 DontEnum|PropertyCallback
-  RelativeTimeFormat    createRelativeTimeFormatConstructor          DontEnum|PropertyCallback
   Segmenter             createSegmenterConstructor                   DontEnum|PropertyCallback
 @end
 */
@@ -185,11 +173,13 @@ struct MatcherResult {
 
 const ClassInfo IntlObject::s_info = { "Intl"_s, &Base::s_info, &intlObjectTable, nullptr, CREATE_METHOD_TABLE(IntlObject) };
 
+#if 0
 void UFieldPositionIteratorDeleter::operator()(UFieldPositionIterator* iterator) const
 {
     if (iterator)
         ufieldpositer_close(iterator);
 }
+#endif
 
 const MeasureUnit simpleUnits[45] = {
     { "area"_s, "acre"_s },
@@ -256,12 +246,16 @@ void IntlObject::finishCreation(VM& vm,
     Base::finishCreation(vm);
     ASSERT(inherits(info()));
     JSC_TO_STRING_TAG_WITHOUT_TRANSITION();
+#if HAVE(ICU_U_LOCALE_DISPLAY_NAMES)
+    putDirectWithoutTransition(vm, vm.propertyNames->DisplayNames, createDisplayNamesConstructor(vm, this), static_cast<unsigned>(PropertyAttribute::DontEnum));
+#else
+    UNUSED_PARAM(&createDisplayNamesConstructor);
+#endif
 #if HAVE(ICU_U_LIST_FORMATTER)
     putDirectWithoutTransition(vm, vm.propertyNames->DurationFormat, createDurationFormatConstructor(vm, this), static_cast<unsigned>(PropertyAttribute::DontEnum));
     putDirectWithoutTransition(vm, vm.propertyNames->ListFormat, createListFormatConstructor(vm, this), static_cast<unsigned>(PropertyAttribute::DontEnum));
 #else
-    UNUSED_PARAM(&createDurationFormatConstructor);
-    UNUSED_PARAM(&createListFormatConstructor);
+    //UNUSED_PARAM(&createListFormatConstructor);
 #endif
 }
 
@@ -750,7 +744,7 @@ Vector<String> canonicalizeLocaleList(JS
         return seen;
 
     JSObject* localesObject;
-    if (locales.isString() || locales.inherits<IntlLocale>()) {
+    if (locales.isString()) {
         JSArray* localesArray = JSArray::tryCreate(vm, globalObject->arrayStructureForIndexingTypeDuringAllocation(ArrayWithContiguous));
         if (!localesArray) {
             throwOutOfMemoryError(globalObject, scope);
@@ -787,15 +781,11 @@ Vector<String> canonicalizeLocaleList(JS
             }
 
             String tag;
-            if (kValue.inherits<IntlLocale>())
-                tag = jsCast<IntlLocale*>(kValue)->toString();
-            else {
-                JSString* string = kValue.toString(globalObject);
-                RETURN_IF_EXCEPTION(scope, Vector<String>());
+            JSString* string = kValue.toString(globalObject);
+            RETURN_IF_EXCEPTION(scope, Vector<String>());
 
-                tag = string->value(globalObject);
-                RETURN_IF_EXCEPTION(scope, Vector<String>());
-            }
+            tag = string->value(globalObject);
+            RETURN_IF_EXCEPTION(scope, Vector<String>());
 
             if (isStructurallyValidLanguageTag(tag)) {
                 ASSERT(tag.containsOnlyASCII());
diff -urp webkitgtk-2.51.90.gstreamer1.8/Source/JavaScriptCore/runtime/IntlObject.h webkitgtk-2.51.90.icu52/Source/JavaScriptCore/runtime/IntlObject.h
--- webkitgtk-2.51.90.gstreamer1.8/Source/JavaScriptCore/runtime/IntlObject.h	2026-01-23 02:35:22.051511000 -0600
+++ webkitgtk-2.51.90.icu52/Source/JavaScriptCore/runtime/IntlObject.h	2026-01-27 03:49:39.381872469 -0600
@@ -161,6 +161,7 @@ bool isWellFormedCurrencyCode(StringView
 
 std::optional<Vector<char, 32>> canonicalizeLocaleIDWithoutNullTerminator(const char* localeID);
 
+#if 0
 struct UFieldPositionIteratorDeleter {
     void operator()(UFieldPositionIterator*) const;
 };
@@ -177,5 +178,6 @@ inline CalendarID utcTimeZoneID()
         return utcTimeZoneIDSlow();
     return value;
 }
+#endif
 
 } // namespace JSC
diff -urp webkitgtk-2.51.90.gstreamer1.8/Source/JavaScriptCore/runtime/IntlPluralRules.cpp webkitgtk-2.51.90.icu52/Source/JavaScriptCore/runtime/IntlPluralRules.cpp
--- webkitgtk-2.51.90.gstreamer1.8/Source/JavaScriptCore/runtime/IntlPluralRules.cpp	2026-01-26 13:28:43.017973288 -0600
+++ webkitgtk-2.51.90.icu52/Source/JavaScriptCore/runtime/IntlPluralRules.cpp	2026-01-27 03:49:39.382218234 -0600
@@ -184,7 +184,6 @@ JSObject* IntlPluralRules::resolvedOptio
     ASSERT(m_pluralRules);
 
     VM& vm = globalObject->vm();
-    auto scope = DECLARE_THROW_SCOPE(vm);
 
     JSObject* options = constructEmptyObject(globalObject);
     options->putDirect(vm, vm.propertyNames->locale, jsNontrivialString(vm, m_locale));
@@ -209,6 +208,7 @@ JSObject* IntlPluralRules::resolvedOptio
         break;
     }
 
+#if 0
     JSArray* categories = JSArray::tryCreate(vm, globalObject->arrayStructureForIndexingTypeDuringAllocation(ArrayWithContiguous), 0);
     if (!categories) [[unlikely]] {
         throwOutOfMemoryError(globalObject, scope);
@@ -243,6 +243,7 @@ JSObject* IntlPluralRules::resolvedOptio
     }
 
     options->putDirect(vm, vm.propertyNames->pluralCategories, categories);
+#endif
     options->putDirect(vm, vm.propertyNames->roundingIncrement, jsNumber(m_roundingIncrement));
     options->putDirect(vm, vm.propertyNames->roundingMode, jsNontrivialString(vm, IntlNumberFormat::roundingModeString(m_roundingMode)));
     options->putDirect(vm, vm.propertyNames->roundingPriority, jsNontrivialString(vm, IntlNumberFormat::roundingPriorityString(m_roundingType)));
@@ -277,12 +278,35 @@ JSValue IntlPluralRules::select(JSGlobal
         return throwTypeError(globalObject, scope, "failed to select plural value"_s);
     return jsString(vm, String(WTF::move(buffer)));
 #else
+#if 0
     Vector<UChar, 8> result(8);
     auto length = uplrules_selectWithFormat(m_pluralRules.get(), value, m_numberFormat.get(), result.data(), result.size(), &status);
     if (U_FAILURE(status))
         return throwTypeError(globalObject, scope, "failed to select plural value"_s);
+#else
+    Vector<UChar, 32> buffer(32);
+    auto length = unum_formatDouble(m_numberFormat.get(), value, buffer.mutableSpan().data(), buffer.size(), nullptr, &status);
+    if (status == U_BUFFER_OVERFLOW_ERROR) {
+        buffer.grow(length);
+        status = U_ZERO_ERROR;
+        unum_formatDouble(m_numberFormat.get(), value, buffer.mutableSpan().data(), length, nullptr, &status);
+    }
+    if (U_FAILURE(status))
+        return throwTypeError(globalObject, scope, "failed to select plural value"_s);
+
+    double formatted = unum_parseDouble(m_numberFormat.get(), buffer.mutableSpan().data(), length, nullptr, &status);
+    if (U_FAILURE(status))
+        return throwTypeError(globalObject, scope, "failed to select plural value"_s);
+
+    // Can only be 'zero', 'one', 'two', 'few', 'many' or 'other'
+    status = U_ZERO_ERROR;
+    Vector<UChar, 8> result(8);
+    length = uplrules_select(m_pluralRules.get(), formatted, result.mutableSpan().data(), result.size(), &status);
+    if (U_FAILURE(status))
+        return throwTypeError(globalObject, scope, "failed to select plural value"_s);
+#endif
 
-    return jsString(vm, String({ result.data(), static_cast<size_t>(length) }));
+    return jsString(vm, String({ result.mutableSpan().data(), static_cast<size_t>(length) }));
 #endif
 }
 
diff -urp webkitgtk-2.51.90.gstreamer1.8/Source/JavaScriptCore/runtime/JSDateMath.cpp webkitgtk-2.51.90.icu52/Source/JavaScriptCore/runtime/JSDateMath.cpp
--- webkitgtk-2.51.90.gstreamer1.8/Source/JavaScriptCore/runtime/JSDateMath.cpp	2026-01-26 13:28:43.020085208 -0600
+++ webkitgtk-2.51.90.icu52/Source/JavaScriptCore/runtime/JSDateMath.cpp	2026-01-27 03:49:39.382999825 -0600
@@ -573,7 +573,7 @@ static std::tuple<String, Vector<char16_
         String canonical;
         UErrorCode status = U_ZERO_ERROR;
         if (timeZoneID.isEmpty()) {
-            status = callBufferProducingFunction(ucal_getHostTimeZone, timeZoneID);
+            status = callBufferProducingFunction(ucal_getDefaultTimeZone, timeZoneID);
             ASSERT_UNUSED(status, U_SUCCESS(status));
         }
         if (U_SUCCESS(status)) {
@@ -610,12 +610,7 @@ void DateCache::timeZoneCacheSlow()
     ucal_setGregorianChange(cache->m_calendar.get(), minECMAScriptTime, &status); // Ignore "unsupported" error.
     m_timeZoneCache = std::unique_ptr<OpaqueICUTimeZone, OpaqueICUTimeZoneDeleter>(cache);
 #else
-    if (!timeZoneID.isEmpty()) {
-        m_timeZoneCache = std::unique_ptr<OpaqueICUTimeZone, OpaqueICUTimeZoneDeleter>(toOpaqueICUTimeZone(icu::TimeZone::createTimeZone(icu::UnicodeString(timeZoneID.mutableSpan().data(), timeZoneID.size()))));
-        return;
-    }
-    // Do not use icu::TimeZone::createDefault. ICU internally has a cache for timezone and createDefault returns this cached value.
-    m_timeZoneCache = std::unique_ptr<OpaqueICUTimeZone, OpaqueICUTimeZoneDeleter>(toOpaqueICUTimeZone(icu::TimeZone::detectHostTimeZone()));
+    m_timeZoneCache = std::unique_ptr<OpaqueICUTimeZone, OpaqueICUTimeZoneDeleter>(toOpaqueICUTimeZone(icu::TimeZone::createDefault()));
 #endif
 }
 
diff -urp webkitgtk-2.51.90.gstreamer1.8/Source/JavaScriptCore/runtime/JSGlobalObject.cpp webkitgtk-2.51.90.icu52/Source/JavaScriptCore/runtime/JSGlobalObject.cpp
--- webkitgtk-2.51.90.gstreamer1.8/Source/JavaScriptCore/runtime/JSGlobalObject.cpp	2026-01-23 02:35:22.059511000 -0600
+++ webkitgtk-2.51.90.icu52/Source/JavaScriptCore/runtime/JSGlobalObject.cpp	2026-01-27 03:49:39.383258363 -0600
@@ -95,20 +95,12 @@
 #include "IntlDateTimeFormatPrototype.h"
 #include "IntlDisplayNames.h"
 #include "IntlDisplayNamesPrototype.h"
-#include "IntlDurationFormat.h"
-#include "IntlDurationFormatPrototype.h"
-#include "IntlListFormat.h"
-#include "IntlListFormatPrototype.h"
-#include "IntlLocale.h"
-#include "IntlLocalePrototype.h"
 #include "IntlNumberFormat.h"
 #include "IntlNumberFormatConstructor.h"
 #include "IntlNumberFormatPrototype.h"
 #include "IntlObject.h"
 #include "IntlPluralRules.h"
 #include "IntlPluralRulesPrototype.h"
-#include "IntlRelativeTimeFormat.h"
-#include "IntlRelativeTimeFormatPrototype.h"
 #include "IntlSegmentIterator.h"
 #include "IntlSegmentIteratorPrototype.h"
 #include "IntlSegmenter.h"
@@ -1572,36 +1564,12 @@ capitalName ## Constructor* lowerName ##
             IntlDisplayNamesPrototype* displayNamesPrototype = IntlDisplayNamesPrototype::create(init.vm, IntlDisplayNamesPrototype::createStructure(init.vm, globalObject, globalObject->objectPrototype()));
             init.set(IntlDisplayNames::createStructure(init.vm, globalObject, displayNamesPrototype));
         });
-    m_durationFormatStructure.initLater(
-        [] (const Initializer<Structure>& init) {
-            JSGlobalObject* globalObject = jsCast<JSGlobalObject*>(init.owner);
-            IntlDurationFormatPrototype* durationFormatPrototype = IntlDurationFormatPrototype::create(init.vm, IntlDurationFormatPrototype::createStructure(init.vm, globalObject, globalObject->objectPrototype()));
-            init.set(IntlDurationFormat::createStructure(init.vm, globalObject, durationFormatPrototype));
-        });
-    m_listFormatStructure.initLater(
-        [] (const Initializer<Structure>& init) {
-            JSGlobalObject* globalObject = jsCast<JSGlobalObject*>(init.owner);
-            IntlListFormatPrototype* listFormatPrototype = IntlListFormatPrototype::create(init.vm, IntlListFormatPrototype::createStructure(init.vm, globalObject, globalObject->objectPrototype()));
-            init.set(IntlListFormat::createStructure(init.vm, globalObject, listFormatPrototype));
-        });
-    m_localeStructure.initLater(
-        [] (const Initializer<Structure>& init) {
-            JSGlobalObject* globalObject = jsCast<JSGlobalObject*>(init.owner);
-            IntlLocalePrototype* localePrototype = IntlLocalePrototype::create(init.vm, IntlLocalePrototype::createStructure(init.vm, globalObject, globalObject->objectPrototype()));
-            init.set(IntlLocale::createStructure(init.vm, globalObject, localePrototype));
-        });
     m_pluralRulesStructure.initLater(
         [] (const Initializer<Structure>& init) {
             JSGlobalObject* globalObject = jsCast<JSGlobalObject*>(init.owner);
             IntlPluralRulesPrototype* pluralRulesPrototype = IntlPluralRulesPrototype::create(init.vm, globalObject, IntlPluralRulesPrototype::createStructure(init.vm, globalObject, globalObject->objectPrototype()));
             init.set(IntlPluralRules::createStructure(init.vm, globalObject, pluralRulesPrototype));
         });
-    m_relativeTimeFormatStructure.initLater(
-        [] (const Initializer<Structure>& init) {
-            JSGlobalObject* globalObject = jsCast<JSGlobalObject*>(init.owner);
-            IntlRelativeTimeFormatPrototype* relativeTimeFormatPrototype = IntlRelativeTimeFormatPrototype::create(init.vm, IntlRelativeTimeFormatPrototype::createStructure(init.vm, globalObject, globalObject->objectPrototype()));
-            init.set(IntlRelativeTimeFormat::createStructure(init.vm, globalObject, relativeTimeFormatPrototype));
-        });
     m_segmentIteratorStructure.initLater(
         [] (const Initializer<Structure>& init) {
             JSGlobalObject* globalObject = jsCast<JSGlobalObject*>(init.owner);
@@ -2839,11 +2807,7 @@ void JSGlobalObject::visitChildrenImpl(J
     thisObject->m_defaultNumberFormat.visit(visitor);
     thisObject->m_collatorStructure.visit(visitor);
     thisObject->m_displayNamesStructure.visit(visitor);
-    thisObject->m_durationFormatStructure.visit(visitor);
-    thisObject->m_listFormatStructure.visit(visitor);
-    thisObject->m_localeStructure.visit(visitor);
     thisObject->m_pluralRulesStructure.visit(visitor);
-    thisObject->m_relativeTimeFormatStructure.visit(visitor);
     thisObject->m_segmentIteratorStructure.visit(visitor);
     thisObject->m_segmenterStructure.visit(visitor);
     thisObject->m_segmentsStructure.visit(visitor);
diff -urp webkitgtk-2.51.90.gstreamer1.8/Source/JavaScriptCore/runtime/JSGlobalObject.h webkitgtk-2.51.90.icu52/Source/JavaScriptCore/runtime/JSGlobalObject.h
--- webkitgtk-2.51.90.gstreamer1.8/Source/JavaScriptCore/runtime/JSGlobalObject.h	2026-01-23 02:35:22.059511000 -0600
+++ webkitgtk-2.51.90.icu52/Source/JavaScriptCore/runtime/JSGlobalObject.h	2026-01-27 03:49:39.385408448 -0600
@@ -264,11 +264,7 @@ public:
     LazyProperty<JSGlobalObject, IntlNumberFormat> m_defaultNumberFormat;
     LazyProperty<JSGlobalObject, Structure> m_collatorStructure;
     LazyProperty<JSGlobalObject, Structure> m_displayNamesStructure;
-    LazyProperty<JSGlobalObject, Structure> m_durationFormatStructure;
-    LazyProperty<JSGlobalObject, Structure> m_listFormatStructure;
-    LazyProperty<JSGlobalObject, Structure> m_localeStructure;
     LazyProperty<JSGlobalObject, Structure> m_pluralRulesStructure;
-    LazyProperty<JSGlobalObject, Structure> m_relativeTimeFormatStructure;
     LazyProperty<JSGlobalObject, Structure> m_segmentIteratorStructure;
     LazyProperty<JSGlobalObject, Structure> m_segmenterStructure;
     LazyProperty<JSGlobalObject, Structure> m_segmentsStructure;
@@ -957,12 +953,8 @@ public:
     Structure* collatorStructure() { return m_collatorStructure.get(this); }
     Structure* dateTimeFormatStructure() { return m_dateTimeFormatStructure.get(this); }
     Structure* displayNamesStructure() { return m_displayNamesStructure.get(this); }
-    Structure* durationFormatStructure() { return m_durationFormatStructure.get(this); }
-    Structure* listFormatStructure() { return m_listFormatStructure.get(this); }
     Structure* numberFormatStructure() { return m_numberFormatStructure.get(this); }
-    Structure* localeStructure() { return m_localeStructure.get(this); }
     Structure* pluralRulesStructure() { return m_pluralRulesStructure.get(this); }
-    Structure* relativeTimeFormatStructure() { return m_relativeTimeFormatStructure.get(this); }
     Structure* segmentIteratorStructure() { return m_segmentIteratorStructure.get(this); }
     Structure* segmenterStructure() { return m_segmenterStructure.get(this); }
     Structure* segmentsStructure() { return m_segmentsStructure.get(this); }
diff -urp webkitgtk-2.51.90.gstreamer1.8/Source/JavaScriptCore/Sources.txt webkitgtk-2.51.90.icu52/Source/JavaScriptCore/Sources.txt
--- webkitgtk-2.51.90.gstreamer1.8/Source/JavaScriptCore/Sources.txt	2026-01-23 02:35:21.808561600 -0600
+++ webkitgtk-2.51.90.icu52/Source/JavaScriptCore/Sources.txt	2026-01-27 03:49:39.386427188 -0600
@@ -853,15 +853,6 @@ runtime/IntlDateTimeFormatPrototype.cpp
 runtime/IntlDisplayNames.cpp
 runtime/IntlDisplayNamesConstructor.cpp
 runtime/IntlDisplayNamesPrototype.cpp
-runtime/IntlDurationFormat.cpp @no-unify // Confine U_HIDE_DRAFT_API's effect in this file.
-runtime/IntlDurationFormatConstructor.cpp
-runtime/IntlDurationFormatPrototype.cpp
-runtime/IntlListFormat.cpp @no-unify // Confine U_HIDE_DRAFT_API's effect in this file.
-runtime/IntlListFormatConstructor.cpp
-runtime/IntlListFormatPrototype.cpp
-runtime/IntlLocale.cpp
-runtime/IntlLocaleConstructor.cpp
-runtime/IntlLocalePrototype.cpp
 runtime/IntlNumberFormat.cpp @no-unify // Confine U_HIDE_DRAFT_API's effect in this file.
 runtime/IntlNumberFormatConstructor.cpp
 runtime/IntlNumberFormatPrototype.cpp
@@ -869,9 +860,6 @@ runtime/IntlObject.cpp
 runtime/IntlPluralRules.cpp @no-unify // Confine U_HIDE_DRAFT_API's effect to this file.
 runtime/IntlPluralRulesConstructor.cpp
 runtime/IntlPluralRulesPrototype.cpp
-runtime/IntlRelativeTimeFormat.cpp
-runtime/IntlRelativeTimeFormatConstructor.cpp
-runtime/IntlRelativeTimeFormatPrototype.cpp
 runtime/IntlSegmentIterator.cpp
 runtime/IntlSegmentIteratorPrototype.cpp
 runtime/IntlSegmenter.cpp
diff -urp webkitgtk-2.51.90.gstreamer1.8/Source/WebCore/dom/TextEncoder.cpp webkitgtk-2.51.90.icu52/Source/WebCore/dom/TextEncoder.cpp
--- webkitgtk-2.51.90.gstreamer1.8/Source/WebCore/dom/TextEncoder.cpp	2026-01-23 02:35:25.507462000 -0600
+++ webkitgtk-2.51.90.icu52/Source/WebCore/dom/TextEncoder.cpp	2026-01-27 03:49:39.386880417 -0600
@@ -55,7 +55,7 @@ auto TextEncoder::encodeInto(String&& in
             break;
         }
         UBool sawError = false;
-        U8_APPEND(destinationBytes, written, destinationBytes.size(), token, sawError);
+        U8_APPEND((unsigned char *)destinationBytes.data(), written, destinationBytes.size(), token, sawError);
         if (sawError)
             break;
         if (U_IS_BMP(token))
diff -urp webkitgtk-2.51.90.gstreamer1.8/Source/WTF/wtf/text/CharacterProperties.h webkitgtk-2.51.90.icu52/Source/WTF/wtf/text/CharacterProperties.h
--- webkitgtk-2.51.90.gstreamer1.8/Source/WTF/wtf/text/CharacterProperties.h	2026-01-23 02:35:25.003469200 -0600
+++ webkitgtk-2.51.90.icu52/Source/WTF/wtf/text/CharacterProperties.h	2026-01-27 03:49:39.387244937 -0600
@@ -46,7 +46,6 @@ static_assert(UBLOCK_SYMBOLS_AND_PICTOGR
     case UBLOCK_MISCELLANEOUS_SYMBOLS_AND_PICTOGRAPHS:
     case UBLOCK_EMOTICONS:
     case UBLOCK_TRANSPORT_AND_MAP_SYMBOLS:
-    case UBLOCK_SUPPLEMENTAL_SYMBOLS_AND_PICTOGRAPHS:
     case UBLOCK_SYMBOLS_AND_PICTOGRAPHS_EXTENDED_A:
         return true;
     default:
@@ -84,18 +83,16 @@ inline bool isEmojiWithPresentationByDef
 {
     // No characters in Latin-1 include "Emoji_Presentation"
     // https://www.unicode.org/Public/UCD/latest/ucd/emoji/emoji-data.txt
-    if (isLatin1(character))
-        return false;
-    return u_hasBinaryProperty(character, UCHAR_EMOJI_PRESENTATION);
+    UNUSED_PARAM(character);
+    return false;
 }
 
 inline bool isEmojiModifierBase(char32_t character)
 {
     // No characters in Latin-1 include "Emoji_Modifier_Base"
     // https://www.unicode.org/Public/UCD/latest/ucd/emoji/emoji-data.txt
-    if (isLatin1(character))
-        return false;
-    return u_hasBinaryProperty(character, UCHAR_EMOJI_MODIFIER_BASE);
+    UNUSED_PARAM(character);
+    return false;
 }
 
 inline bool isDefaultIgnorableCodePoint(char32_t character)
diff -urp webkitgtk-2.51.90.gstreamer1.8/Source/WTF/wtf/unicode/UTF8Conversion.cpp webkitgtk-2.51.90.icu52/Source/WTF/wtf/unicode/UTF8Conversion.cpp
--- webkitgtk-2.51.90.gstreamer1.8/Source/WTF/wtf/unicode/UTF8Conversion.cpp	2026-01-23 02:35:25.011860600 -0600
+++ webkitgtk-2.51.90.icu52/Source/WTF/wtf/unicode/UTF8Conversion.cpp	2026-01-27 03:49:39.387648422 -0600
@@ -51,14 +51,18 @@ template<> char32_t next<Replacement::No
 template<> char32_t next<Replacement::None, char8_t>(std::span<const char8_t> characters, size_t& offset)
 {
     char32_t character;
-    U8_NEXT_SPAN(characters, offset, character);
+    int32_t offset_as_int = (int32_t)offset;
+    U8_NEXT(characters.data(), offset_as_int, characters.size(), character);
+    offset = (size_t)offset_as_int;
     return U_IS_SURROGATE(character) ? sentinelCodePoint : character;
 }
 
 template<> char32_t next<Replacement::ReplaceInvalidSequences, char8_t>(std::span<const char8_t> characters, size_t& offset)
 {
+    int32_t offset_as_int = (int32_t)offset;
     char32_t character;
-    U8_NEXT_OR_FFFD_SPAN(characters, offset, character);
+    U8_NEXT_OR_FFFD(characters.data(), offset_as_int, characters.size(), character);
+    offset = offset_as_int;
     return character;
 }
 
@@ -72,14 +76,17 @@ template<> char32_t next<Replacement::No
 template<> char32_t next<Replacement::ReplaceInvalidSequences, char16_t>(std::span<const char16_t> characters, size_t& offset)
 {
     char32_t character;
-    U16_NEXT_OR_FFFD(characters, offset, characters.size(), character);
+    // TODO: This is wrong -- was U16_NEXT_OR_FFFD
+    U16_NEXT(characters, offset, characters.size(), character);
     return character;
 }
 
 template<> bool append<Replacement::None, char8_t>(std::span<char8_t> characters, size_t& offset, char32_t character)
 {
+    int32_t offset_as_int = (int32_t)offset;
     UBool sawError = false;
-    U8_APPEND(characters, offset, characters.size(), character, sawError);
+    U8_APPEND((unsigned char *)characters.data(), offset_as_int, characters.size(), character, sawError);
+    offset = offset_as_int;
     return sawError;
 }
 
diff -urp webkitgtk-2.51.90.gstreamer1.8/Source/WTF/wtf/URLHelpers.cpp webkitgtk-2.51.90.icu52/Source/WTF/wtf/URLHelpers.cpp
--- webkitgtk-2.51.90.gstreamer1.8/Source/WTF/wtf/URLHelpers.cpp	2026-01-23 02:35:24.947470000 -0600
+++ webkitgtk-2.51.90.icu52/Source/WTF/wtf/URLHelpers.cpp	2026-01-27 03:49:39.388075932 -0600
@@ -866,7 +866,7 @@ static String escapeUnsafeCharacters(con
             std::array<uint8_t, 4> utf8Buffer;
             size_t offset = 0;
             UBool failure = false;
-            U8_APPEND(utf8Buffer, offset, 4, c, failure);
+            U8_APPEND((unsigned char *)utf8Buffer.data(), offset, 4, c, failure);
             ASSERT_UNUSED(failure, !failure);
 
             for (size_t j = 0; j < offset; ++j) {
diff -urp webkitgtk-2.51.90.gstreamer1.8/Source/WTF/wtf/URLParser.cpp webkitgtk-2.51.90.icu52/Source/WTF/wtf/URLParser.cpp
--- webkitgtk-2.51.90.gstreamer1.8/Source/WTF/wtf/URLParser.cpp	2026-01-23 02:35:24.947470000 -0600
+++ webkitgtk-2.51.90.icu52/Source/WTF/wtf/URLParser.cpp	2026-01-27 03:49:39.388258457 -0600
@@ -516,7 +516,7 @@ ALWAYS_INLINE void URLParser::utf8Percen
     std::array<uint8_t, U8_MAX_LENGTH> buffer;
     int32_t offset = 0;
     UBool isError = false;
-    U8_APPEND(buffer, offset, U8_MAX_LENGTH, codePoint, isError);
+    U8_APPEND((unsigned char *)buffer.data(), offset, U8_MAX_LENGTH, codePoint, isError);
     if (isError) {
         appendToASCIIBuffer(replacementCharacterUTF8PercentEncoded.span8());
         return;
@@ -544,7 +544,7 @@ ALWAYS_INLINE void URLParser::utf8QueryE
     std::array<uint8_t, U8_MAX_LENGTH> buffer;
     int32_t offset = 0;
     UBool isError = false;
-    U8_APPEND(buffer, offset, U8_MAX_LENGTH, codePoint, isError);
+    U8_APPEND((unsigned char *)buffer.data(), offset, U8_MAX_LENGTH, codePoint, isError);
     if (isError) {
         appendToASCIIBuffer(replacementCharacterUTF8PercentEncoded.span8());
         return;
@@ -2877,7 +2877,7 @@ auto URLParser::parseHostAndPort(CodePoi
         std::array<uint8_t, U8_MAX_LENGTH> buffer;
         size_t offset = 0;
         UBool isError = false;
-        U8_APPEND(buffer, offset, U8_MAX_LENGTH, *iterator, isError);
+        U8_APPEND((unsigned char *)buffer.data(), offset, U8_MAX_LENGTH, *iterator, isError);
         if (isError)
             return HostParsingResult::InvalidHost;
         utf8Encoded.append(std::span { buffer }.first(offset));
