diff -urp webkitgtk-2.44.2.gstreamer1.8/Source/cmake/OptionsGTK.cmake webkitgtk-2.44.2.icu52/Source/cmake/OptionsGTK.cmake
--- webkitgtk-2.44.2.gstreamer1.8/Source/cmake/OptionsGTK.cmake	2024-05-24 15:49:19.444514924 -0500
+++ webkitgtk-2.44.2.icu52/Source/cmake/OptionsGTK.cmake	2024-05-24 15:50:16.668115526 -0500
@@ -19,7 +19,7 @@ find_package(Freetype 2.6.3 REQUIRED)
 find_package(LibGcrypt 1.7.0 REQUIRED)
 find_package(Libtasn1 REQUIRED)
 find_package(HarfBuzz 1.4.2 REQUIRED COMPONENTS ICU)
-find_package(ICU 61.2 REQUIRED COMPONENTS data i18n uc)
+find_package(ICU 52.1 REQUIRED COMPONENTS data i18n uc)
 find_package(JPEG REQUIRED)
 find_package(Epoxy 1.4.0 REQUIRED)
 find_package(LibXml2 2.8.0 REQUIRED)
diff -urp webkitgtk-2.44.2.gstreamer1.8/Source/JavaScriptCore/heap/Heap.cpp webkitgtk-2.44.2.icu52/Source/JavaScriptCore/heap/Heap.cpp
--- webkitgtk-2.44.2.gstreamer1.8/Source/JavaScriptCore/heap/Heap.cpp	2024-03-16 01:45:47.616676600 -0500
+++ webkitgtk-2.44.2.icu52/Source/JavaScriptCore/heap/Heap.cpp	2024-05-24 15:50:16.671448875 -0500
@@ -337,12 +337,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.44.2.gstreamer1.8/Source/JavaScriptCore/heap/Heap.h webkitgtk-2.44.2.icu52/Source/JavaScriptCore/heap/Heap.h
--- webkitgtk-2.44.2.gstreamer1.8/Source/JavaScriptCore/heap/Heap.h	2024-03-16 01:45:47.620676500 -0500
+++ webkitgtk-2.44.2.icu52/Source/JavaScriptCore/heap/Heap.h	2024-05-24 15:50:16.674782223 -0500
@@ -222,12 +222,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) \
@@ -978,12 +974,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.44.2.gstreamer1.8/Source/JavaScriptCore/heap/HeapSubspaceTypes.h webkitgtk-2.44.2.icu52/Source/JavaScriptCore/heap/HeapSubspaceTypes.h
--- webkitgtk-2.44.2.gstreamer1.8/Source/JavaScriptCore/heap/HeapSubspaceTypes.h	2024-03-16 01:45:47.620676500 -0500
+++ webkitgtk-2.44.2.icu52/Source/JavaScriptCore/heap/HeapSubspaceTypes.h	2024-05-24 15:50:16.674782223 -0500
@@ -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.44.2.gstreamer1.8/Source/JavaScriptCore/runtime/IntlCache.cpp webkitgtk-2.44.2.icu52/Source/JavaScriptCore/runtime/IntlCache.cpp
--- webkitgtk-2.44.2.gstreamer1.8/Source/JavaScriptCore/runtime/IntlCache.cpp	2024-03-16 01:45:47.692676300 -0500
+++ webkitgtk-2.44.2.icu52/Source/JavaScriptCore/runtime/IntlCache.cpp	2024-05-24 15:50:16.674782223 -0500
@@ -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<UChar, 32> IntlCache::getBestDate
     return patternBuffer;
 }
 
+#if HAVE(ICU_U_LOCALE_DISPLAY_NAMES)
 Vector<UChar, 32> IntlCache::getFieldDisplayName(const CString& locale, UDateTimePatternField field, UDateTimePGDisplayWidth width, UErrorCode& status)
 {
     auto sharedGenerator = getSharedPatternGenerator(locale, status);
@@ -67,5 +69,6 @@ Vector<UChar, 32> IntlCache::getFieldDis
         return { };
     return buffer;
 }
+#endif
 
 } // namespace JSC
diff -urp webkitgtk-2.44.2.gstreamer1.8/Source/JavaScriptCore/runtime/IntlCache.h webkitgtk-2.44.2.icu52/Source/JavaScriptCore/runtime/IntlCache.h
--- webkitgtk-2.44.2.gstreamer1.8/Source/JavaScriptCore/runtime/IntlCache.h	2024-03-16 01:45:47.692676300 -0500
+++ webkitgtk-2.44.2.icu52/Source/JavaScriptCore/runtime/IntlCache.h	2024-05-24 15:50:16.674782223 -0500
@@ -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<UChar, 32> getBestDateTimePattern(const CString& locale, const UChar* skeleton, unsigned skeletonSize, UErrorCode&);
+#if HAVE(ICU_U_LOCALE_DISPLAY_NAMES)
     Vector<UChar, 32> getFieldDisplayName(const CString& locale, UDateTimePatternField, UDateTimePGDisplayWidth, UErrorCode&);
+#endif
 
 private:
     UDateTimePatternGenerator* getSharedPatternGenerator(const CString& locale, UErrorCode& status)
diff -urp webkitgtk-2.44.2.gstreamer1.8/Source/JavaScriptCore/runtime/IntlCollator.cpp webkitgtk-2.44.2.icu52/Source/JavaScriptCore/runtime/IntlCollator.cpp
--- webkitgtk-2.44.2.gstreamer1.8/Source/JavaScriptCore/runtime/IntlCollator.cpp	2024-03-16 01:45:47.692676300 -0500
+++ webkitgtk-2.44.2.icu52/Source/JavaScriptCore/runtime/IntlCollator.cpp	2024-05-24 15:50:16.678115572 -0500
@@ -91,8 +91,16 @@ Vector<String> IntlCollator::sortLocaleD
                 String collation(pointer, length);
                 if (collation == "standard"_s || collation == "search"_s)
                     continue;
-                if (auto mapped = mapICUCollationKeywordToBCP47(collation))
-                    keyLocaleData.append(WTFMove(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(WTFMove(collation));
             }
diff -urp webkitgtk-2.44.2.gstreamer1.8/Source/JavaScriptCore/runtime/IntlDateTimeFormat.cpp webkitgtk-2.44.2.icu52/Source/JavaScriptCore/runtime/IntlDateTimeFormat.cpp
--- webkitgtk-2.44.2.gstreamer1.8/Source/JavaScriptCore/runtime/IntlDateTimeFormat.cpp	2024-03-16 01:45:47.692676300 -0500
+++ webkitgtk-2.44.2.icu52/Source/JavaScriptCore/runtime/IntlDateTimeFormat.cpp	2024-05-24 15:50:16.678115572 -0500
@@ -161,11 +161,12 @@ Vector<String> IntlDateTimeFormat::local
             ASSERT(U_SUCCESS(status));
             String calendar = String(availableName, nameLength);
             keyLocaleData.append(calendar);
-            // 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))
-                keyLocaleData.append(WTFMove(mapped.value()));
+            else if (calendar == "ethiopic-amete-alem"_s)
+                keyLocaleData.append("ethioaa"_s);
         }
         uenum_close(calendars);
         break;
@@ -716,13 +717,13 @@ void IntlDateTimeFormat::initializeDateT
         return;
     }
 
-    {
-        String calendar = resolved.extensions[static_cast<unsigned>(RelevantExtensionKey::Ca)];
-        if (auto mapped = mapICUCalendarKeywordToBCP47(calendar))
-            m_calendar = WTFMove(mapped.value());
-        else
-            m_calendar = WTFMove(calendar);
-    }
+    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)];
@@ -1267,6 +1268,7 @@ JSValue IntlDateTimeFormat::format(JSGlo
     return jsString(vm, String(WTFMove(result)));
 }
 
+#if HAVE(ICU_U_DATE_INTERVAL_FORMAT_FORMAT_RANGE_TO_PARTS)
 static ASCIILiteral partTypeString(UDateFormatField field)
 {
     switch (field) {
@@ -1395,6 +1397,7 @@ JSValue IntlDateTimeFormat::formatToPart
 
     return parts;
 }
+#endif
 
 UDateIntervalFormat* IntlDateTimeFormat::createDateIntervalFormatIfNecessary(JSGlobalObject* globalObject)
 {
diff -urp webkitgtk-2.44.2.gstreamer1.8/Source/JavaScriptCore/runtime/IntlDateTimeFormatPrototype.cpp webkitgtk-2.44.2.icu52/Source/JavaScriptCore/runtime/IntlDateTimeFormatPrototype.cpp
--- webkitgtk-2.44.2.gstreamer1.8/Source/JavaScriptCore/runtime/IntlDateTimeFormatPrototype.cpp	2024-03-16 01:47:05.612925000 -0500
+++ webkitgtk-2.44.2.icu52/Source/JavaScriptCore/runtime/IntlDateTimeFormatPrototype.cpp	2024-05-24 15:50:16.681448920 -0500
@@ -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.44.2.gstreamer1.8/Source/JavaScriptCore/runtime/IntlDisplayNames.cpp webkitgtk-2.44.2.icu52/Source/JavaScriptCore/runtime/IntlDisplayNames.cpp
--- webkitgtk-2.44.2.gstreamer1.8/Source/JavaScriptCore/runtime/IntlDisplayNames.cpp	2024-03-16 01:45:47.696676300 -0500
+++ webkitgtk-2.44.2.icu52/Source/JavaScriptCore/runtime/IntlDisplayNames.cpp	2024-05-24 15:50:16.681448920 -0500
@@ -104,6 +104,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[] = {
@@ -115,15 +116,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));
@@ -131,6 +123,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
@@ -140,6 +136,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, { });
@@ -344,6 +341,11 @@ JSValue IntlDisplayNames::of(JSGlobalObj
         return throwTypeError(globalObject, scope, "Failed to query a display name."_s);
     }
     return jsString(vm, String(WTFMove(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.44.2.gstreamer1.8/Source/JavaScriptCore/runtime/IntlDisplayNames.h webkitgtk-2.44.2.icu52/Source/JavaScriptCore/runtime/IntlDisplayNames.h
--- webkitgtk-2.44.2.gstreamer1.8/Source/JavaScriptCore/runtime/IntlDisplayNames.h	2024-03-16 01:45:47.696676300 -0500
+++ webkitgtk-2.44.2.icu52/Source/JavaScriptCore/runtime/IntlDisplayNames.h	2024-05-24 15:50:16.681448920 -0500
@@ -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.44.2.gstreamer1.8/Source/JavaScriptCore/runtime/IntlNumberFormat.cpp webkitgtk-2.44.2.icu52/Source/JavaScriptCore/runtime/IntlNumberFormat.cpp
--- webkitgtk-2.44.2.gstreamer1.8/Source/JavaScriptCore/runtime/IntlNumberFormat.cpp	2024-03-16 01:45:47.696676300 -0500
+++ webkitgtk-2.44.2.icu52/Source/JavaScriptCore/runtime/IntlNumberFormat.cpp	2024-05-24 15:50:16.684782270 -0500
@@ -1388,6 +1388,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();
@@ -1484,7 +1485,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.44.2.gstreamer1.8/Source/JavaScriptCore/runtime/IntlNumberFormatInlines.h webkitgtk-2.44.2.icu52/Source/JavaScriptCore/runtime/IntlNumberFormatInlines.h
--- webkitgtk-2.44.2.gstreamer1.8/Source/JavaScriptCore/runtime/IntlNumberFormatInlines.h	2024-03-16 01:45:47.696676300 -0500
+++ webkitgtk-2.44.2.icu52/Source/JavaScriptCore/runtime/IntlNumberFormatInlines.h	2024-05-24 15:50:16.684782270 -0500
@@ -302,6 +302,7 @@ void appendNumberFormatDigitOptionsToSke
     }
 }
 
+#if 0
 class IntlFieldIterator {
 public:
     WTF_MAKE_NONCOPYABLE(IntlFieldIterator);
@@ -319,6 +320,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.44.2.gstreamer1.8/Source/JavaScriptCore/runtime/IntlNumberFormatPrototype.cpp webkitgtk-2.44.2.icu52/Source/JavaScriptCore/runtime/IntlNumberFormatPrototype.cpp
--- webkitgtk-2.44.2.gstreamer1.8/Source/JavaScriptCore/runtime/IntlNumberFormatPrototype.cpp	2024-03-16 01:47:05.612925000 -0500
+++ webkitgtk-2.44.2.icu52/Source/JavaScriptCore/runtime/IntlNumberFormatPrototype.cpp	2024-05-24 15:50:16.684782270 -0500
@@ -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.44.2.gstreamer1.8/Source/JavaScriptCore/runtime/IntlObject.cpp webkitgtk-2.44.2.icu52/Source/JavaScriptCore/runtime/IntlObject.cpp
--- webkitgtk-2.44.2.gstreamer1.8/Source/JavaScriptCore/runtime/IntlObject.cpp	2024-03-16 01:45:47.696676300 -0500
+++ webkitgtk-2.44.2.icu52/Source/JavaScriptCore/runtime/IntlObject.cpp	2024-05-24 15:50:16.688115618 -0500
@@ -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>
@@ -104,13 +98,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);
@@ -124,6 +112,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)
 {
@@ -139,12 +128,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)
 {
@@ -165,11 +156,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
 */
@@ -182,11 +170,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 },
@@ -253,13 +243,17 @@ 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)
     if (Options::useIntlDurationFormat())
         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
 }
 
@@ -751,7 +745,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);
@@ -788,15 +782,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.44.2.gstreamer1.8/Source/JavaScriptCore/runtime/IntlObject.h webkitgtk-2.44.2.icu52/Source/JavaScriptCore/runtime/IntlObject.h
--- webkitgtk-2.44.2.gstreamer1.8/Source/JavaScriptCore/runtime/IntlObject.h	2024-03-16 01:45:47.696676300 -0500
+++ webkitgtk-2.44.2.icu52/Source/JavaScriptCore/runtime/IntlObject.h	2024-05-24 15:50:16.688115618 -0500
@@ -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.44.2.gstreamer1.8/Source/JavaScriptCore/runtime/IntlPluralRules.cpp webkitgtk-2.44.2.icu52/Source/JavaScriptCore/runtime/IntlPluralRules.cpp
--- webkitgtk-2.44.2.gstreamer1.8/Source/JavaScriptCore/runtime/IntlPluralRules.cpp	2024-03-16 01:45:47.696676300 -0500
+++ webkitgtk-2.44.2.icu52/Source/JavaScriptCore/runtime/IntlPluralRules.cpp	2024-05-24 15:50:16.691448968 -0500
@@ -205,6 +205,7 @@ JSObject* IntlPluralRules::resolvedOptio
         break;
     }
 
+#if 0
     JSArray* categories = JSArray::tryCreate(vm, globalObject->arrayStructureForIndexingTypeDuringAllocation(ArrayWithContiguous), 0);
     if (UNLIKELY(!categories)) {
         throwOutOfMemoryError(globalObject, scope);
@@ -224,6 +225,7 @@ JSObject* IntlPluralRules::resolvedOptio
         RETURN_IF_EXCEPTION(scope, { });
     }
     options->putDirect(vm, Identifier::fromString(vm, "pluralCategories"_s), 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)));
@@ -258,10 +260,33 @@ JSValue IntlPluralRules::select(JSGlobal
         return throwTypeError(globalObject, scope, "failed to select plural value"_s);
     return jsString(vm, String(WTFMove(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.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.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.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.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(), length));
 #endif
diff -urp webkitgtk-2.44.2.gstreamer1.8/Source/JavaScriptCore/runtime/JSDateMath.cpp webkitgtk-2.44.2.icu52/Source/JavaScriptCore/runtime/JSDateMath.cpp
--- webkitgtk-2.44.2.gstreamer1.8/Source/JavaScriptCore/runtime/JSDateMath.cpp	2024-03-16 01:45:47.704676400 -0500
+++ webkitgtk-2.44.2.icu52/Source/JavaScriptCore/runtime/JSDateMath.cpp	2024-05-24 15:50:16.691448968 -0500
@@ -591,12 +591,8 @@ 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.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.44.2.gstreamer1.8/Source/JavaScriptCore/runtime/JSGlobalObject.cpp webkitgtk-2.44.2.icu52/Source/JavaScriptCore/runtime/JSGlobalObject.cpp
--- webkitgtk-2.44.2.gstreamer1.8/Source/JavaScriptCore/runtime/JSGlobalObject.cpp	2024-03-16 01:45:47.704676400 -0500
+++ webkitgtk-2.44.2.icu52/Source/JavaScriptCore/runtime/JSGlobalObject.cpp	2024-05-24 15:50:16.694782316 -0500
@@ -86,20 +86,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"
@@ -1259,36 +1251,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);
@@ -2438,11 +2406,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.44.2.gstreamer1.8/Source/JavaScriptCore/runtime/JSGlobalObject.h webkitgtk-2.44.2.icu52/Source/JavaScriptCore/runtime/JSGlobalObject.h
--- webkitgtk-2.44.2.gstreamer1.8/Source/JavaScriptCore/runtime/JSGlobalObject.h	2024-03-16 01:45:47.704676400 -0500
+++ webkitgtk-2.44.2.icu52/Source/JavaScriptCore/runtime/JSGlobalObject.h	2024-05-24 15:50:16.694782316 -0500
@@ -226,11 +226,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;
@@ -834,12 +830,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.44.2.gstreamer1.8/Source/JavaScriptCore/Sources.txt webkitgtk-2.44.2.icu52/Source/JavaScriptCore/Sources.txt
--- webkitgtk-2.44.2.gstreamer1.8/Source/JavaScriptCore/Sources.txt	2024-03-16 01:45:47.476676700 -0500
+++ webkitgtk-2.44.2.icu52/Source/JavaScriptCore/Sources.txt	2024-05-24 15:50:16.698115665 -0500
@@ -858,15 +858,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
@@ -874,9 +865,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.44.2.gstreamer1.8/Source/WebCore/platform/text/CharacterProperties.h webkitgtk-2.44.2.icu52/Source/WebCore/platform/text/CharacterProperties.h
--- webkitgtk-2.44.2.gstreamer1.8/Source/WebCore/platform/text/CharacterProperties.h	2024-03-16 01:45:50.568671200 -0500
+++ webkitgtk-2.44.2.icu52/Source/WebCore/platform/text/CharacterProperties.h	2024-05-24 15:50:16.698115665 -0500
@@ -44,7 +44,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:
@@ -80,12 +79,14 @@ inline bool isEmojiRegionalIndicator(cha
 
 inline bool isEmojiWithPresentationByDefault(char32_t character)
 {
-    return u_hasBinaryProperty(character, UCHAR_EMOJI_PRESENTATION);
+    UNUSED_PARAM(character);
+    return false;
 }
 
 inline bool isEmojiModifierBase(char32_t character)
 {
-    return u_hasBinaryProperty(character, UCHAR_EMOJI_MODIFIER_BASE);
+    UNUSED_PARAM(character);
+    return false;
 }
 
 inline bool isDefaultIgnorableCodePoint(char32_t character)
diff -urp webkitgtk-2.44.2.gstreamer1.8/Source/WTF/wtf/unicode/UTF8Conversion.cpp webkitgtk-2.44.2.icu52/Source/WTF/wtf/unicode/UTF8Conversion.cpp
--- webkitgtk-2.44.2.gstreamer1.8/Source/WTF/wtf/unicode/UTF8Conversion.cpp	2024-05-16 03:43:04.841887200 -0500
+++ webkitgtk-2.44.2.icu52/Source/WTF/wtf/unicode/UTF8Conversion.cpp	2024-05-24 16:15:32.761919006 -0500
@@ -39,7 +39,7 @@ static constexpr char32_t sentinelCodePo
 bool convertLatin1ToUTF8(const LChar** sourceStart, const LChar* sourceEnd, char** targetStart, const char* targetEnd)
 {
     const LChar* source;
-    char* const target = *targetStart;
+    uint8_t* const target = (uint8_t *)*targetStart;
     const ptrdiff_t targetCapacity = targetEnd - *targetStart;
     ptrdiff_t i = 0;
     bool result = true;
@@ -61,7 +61,7 @@ bool convertLatin1ToUTF8(const LChar** s
         }
     }
     *sourceStart = source;
-    *targetStart = target + i;
+    *targetStart = (char *)target + i;
     return result;
 }
 
@@ -153,7 +153,7 @@ ComputeUTFLengthsResult computeUTFLength
     size_t sourceOffset = 0;
     while (sourceOffset < lengthUTF8) {
         char32_t character;
-        size_t nextSourceOffset = sourceOffset;
+        int32_t nextSourceOffset = (int32_t)sourceOffset;
         U8_NEXT(sourceStart, nextSourceOffset, lengthUTF8, character);
         if (character == sentinelCodePoint) {
             result = nextSourceOffset == lengthUTF8 ? ConversionResult::SourceExhausted : ConversionResult::SourceIllegal;
@@ -170,7 +170,7 @@ unsigned calculateStringHashAndLengthFro
 {
     StringHasher stringHasher;
     utf16Length = 0;
-    size_t inputOffset = 0;
+    int32_t inputOffset = 0;
     size_t inputLength = dataEnd - data;
     while (inputOffset < inputLength) {
         char32_t character;
@@ -196,7 +196,7 @@ bool equalUTF16WithUTF8(const UChar* a,
 {
     // It is the caller's responsibility to ensure a is long enough, which is why it is safe to use U16_NEXT_UNSAFE here.
     size_t offsetA = 0;
-    size_t offsetB = 0;
+    int32_t offsetB = 0;
     size_t lengthB = bEnd - b;
     while (offsetB < lengthB) {
         char32_t characterB;
@@ -214,7 +214,7 @@ bool equalUTF16WithUTF8(const UChar* a,
 bool equalLatin1WithUTF8(const LChar* a, const char* b, const char* bEnd)
 {
     // It is the caller's responsibility to ensure a is long enough, which is why it is safe to use *a++ here.
-    size_t offsetB = 0;
+    int32_t offsetB = 0;
     size_t lengthB = bEnd - b;
     while (offsetB < lengthB) {
         char32_t characterB;
