pkgsrc-WIP-changes archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

firefox128*: Add firefox128{,-l10n}



Module Name:	pkgsrc-wip
Committed By:	Leonardo Taccari <leot%NetBSD.org@localhost>
Pushed By:	leot
Date:		Fri Aug 16 11:34:23 2024 +0200
Changeset:	ca1cf82b83e3be99d6090c9d34949c13a8c01e64

Modified Files:
	Makefile
Added Files:
	firefox128-l10n/DESCR
	firefox128-l10n/Makefile
	firefox128-l10n/PLIST
	firefox128-l10n/distinfo
	firefox128-l10n/list-licenses.mk
	firefox128/DESCR
	firefox128/Makefile
	firefox128/PLIST
	firefox128/PLIST.Linux
	firefox128/distinfo
	firefox128/files/desktop.in
	firefox128/files/firefox.sh
	firefox128/files/node-wrapper.sh
	firefox128/files/replace-moz.build.awk
	firefox128/mozilla-common.mk
	firefox128/options.mk
	firefox128/patches/patch-browser_app_profile_firefox.js
	firefox128/patches/patch-build_moz.configure_init.configure
	firefox128/patches/patch-build_moz.configure_rust.configure
	firefox128/patches/patch-config_gcc-stl-wrapper.template.h
	firefox128/patches/patch-config_makefiles_rust.mk
	firefox128/patches/patch-dom_base_nsAttrName.h
	firefox128/patches/patch-dom_webtransport_api_WebTransportDatagramDuplexStream.cpp
	firefox128/patches/patch-gfx_angle_checkout_src_common_third__party_smhasher_src_PMurHash.cpp
	firefox128/patches/patch-gfx_angle_checkout_src_compiler_translator_InfoSink.h
	firefox128/patches/patch-gfx_wr_swgl_build.rs
	firefox128/patches/patch-intl_lwbrk_LineBreaker.cpp
	firefox128/patches/patch-ipc_chromium_src_base_message__pump__libevent.cc
	firefox128/patches/patch-ipc_chromium_src_base_platform__thread__posix.cc
	firefox128/patches/patch-ipc_glue_GeckoChildProcessHost.cpp
	firefox128/patches/patch-js-src-jit-arm64-vixl-MozCpu-vixl.cpp
	firefox128/patches/patch-js_public_Utility.h
	firefox128/patches/patch-js_src_jit_FlushICache.cpp
	firefox128/patches/patch-js_src_old-configure.in
	firefox128/patches/patch-js_src_util_NativeStack.cpp
	firefox128/patches/patch-media_ffvpx_libavutil_arm_bswap.h
	firefox128/patches/patch-media_libpng_pngpriv.h
	firefox128/patches/patch-media_libtheora_lib_info.c
	firefox128/patches/patch-modules_fdlibm_src_math__private.h
	firefox128/patches/patch-netwerk_protocol_http_nsHttpHandler.cpp
	firefox128/patches/patch-nsprpub_pr_src_pthreads_ptsynch.c
	firefox128/patches/patch-security_nss_lib_freebl_mpi_mpi.c
	firefox128/patches/patch-third__party_js_cfworker_build.sh
	firefox128/patches/patch-third__party_libwebrtc_modules_desktop__capture_desktop__capture__gn_moz.build
	firefox128/patches/patch-third__party_libwebrtc_modules_desktop__capture_linux_wayland_egl__dmabuf.cc
	firefox128/patches/patch-third__party_libwebrtc_modules_video__capture_linux_device__info__v4l2.cc
	firefox128/patches/patch-third__party_libwebrtc_modules_video__capture_linux_video__capture__v4l2.cc
	firefox128/patches/patch-third__party_libwebrtc_rtc__base_physical__socket__server.cc
	firefox128/patches/patch-third__party_libwebrtc_system__wrappers_source_cpu__features__linux.cc
	firefox128/patches/patch-third__party_sqlite3_src_moz.build
	firefox128/patches/patch-third__party_wasm2c_src_prebuilt_wasm2c__source__includes.cc
	firefox128/patches/patch-toolkit_components_terminator_nsTerminator.cpp
	firefox128/patches/patch-toolkit_moz.configure
	firefox128/patches/patch-toolkit_mozapps_installer_packager.mk
	firefox128/patches/patch-xpcom_base_nscore.h
	firefox128/patches/patch-xpcom_reflect_xptcall_md_unix_moz.build

Log Message:
firefox128*: Add firefox128{,-l10n}

Completely copypasted from www/firefox{,-l10n} of 2024-08-02 (before Firefox
129.0 update).

Intended to be imported back in order to track latest Firefox ESR.

(Still incorrect, needs some mechanical adjustments and then update,
beware!)

To see a diff of this commit:
https://wip.pkgsrc.org/cgi-bin/gitweb.cgi?p=pkgsrc-wip.git;a=commitdiff;h=ca1cf82b83e3be99d6090c9d34949c13a8c01e64

Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.

diffstat:
 Makefile                                           |   2 +
 firefox128-l10n/DESCR                              |   1 +
 firefox128-l10n/Makefile                           |  46 ++++
 firefox128-l10n/PLIST                              | 102 +++++++
 firefox128-l10n/distinfo                           | 305 +++++++++++++++++++++
 firefox128-l10n/list-licenses.mk                   |  37 +++
 firefox128/DESCR                                   |  13 +
 firefox128/Makefile                                | 196 +++++++++++++
 firefox128/PLIST                                   |  46 ++++
 firefox128/PLIST.Linux                             |   2 +
 firefox128/distinfo                                |  48 ++++
 firefox128/files/desktop.in                        | 191 +++++++++++++
 firefox128/files/firefox.sh                        |  14 +
 firefox128/files/node-wrapper.sh                   |   9 +
 firefox128/files/replace-moz.build.awk             | 102 +++++++
 firefox128/mozilla-common.mk                       | 272 ++++++++++++++++++
 firefox128/options.mk                              | 103 +++++++
 .../patches/patch-browser_app_profile_firefox.js   |  47 ++++
 .../patch-build_moz.configure_init.configure       |  15 +
 .../patch-build_moz.configure_rust.configure       |  15 +
 .../patch-config_gcc-stl-wrapper.template.h        |  31 +++
 firefox128/patches/patch-config_makefiles_rust.mk  |  29 ++
 firefox128/patches/patch-dom_base_nsAttrName.h     |  18 ++
 ...nsport_api_WebTransportDatagramDuplexStream.cpp |  40 +++
 ...c_common_third__party_smhasher_src_PMurHash.cpp |  17 ++
 ...gle_checkout_src_compiler_translator_InfoSink.h |  16 ++
 firefox128/patches/patch-gfx_wr_swgl_build.rs      |  27 ++
 .../patches/patch-intl_lwbrk_LineBreaker.cpp       |  21 ++
 ...pc_chromium_src_base_message__pump__libevent.cc |  22 ++
 ...pc_chromium_src_base_platform__thread__posix.cc |  17 ++
 .../patch-ipc_glue_GeckoChildProcessHost.cpp       |  21 ++
 .../patch-js-src-jit-arm64-vixl-MozCpu-vixl.cpp    |  15 +
 firefox128/patches/patch-js_public_Utility.h       |  24 ++
 .../patches/patch-js_src_jit_FlushICache.cpp       |  34 +++
 firefox128/patches/patch-js_src_old-configure.in   |  15 +
 .../patches/patch-js_src_util_NativeStack.cpp      |  32 +++
 .../patch-media_ffvpx_libavutil_arm_bswap.h        |  22 ++
 firefox128/patches/patch-media_libpng_pngpriv.h    |  17 ++
 .../patches/patch-media_libtheora_lib_info.c       |  19 ++
 .../patch-modules_fdlibm_src_math__private.h       |  20 ++
 .../patch-netwerk_protocol_http_nsHttpHandler.cpp  |  15 +
 .../patch-nsprpub_pr_src_pthreads_ptsynch.c        | 112 ++++++++
 .../patch-security_nss_lib_freebl_mpi_mpi.c        |  35 +++
 .../patch-third__party_js_cfworker_build.sh        |  20 ++
 ...desktop__capture_desktop__capture__gn_moz.build |  45 +++
 ...s_desktop__capture_linux_wayland_egl__dmabuf.cc |  21 ++
 ...ules_video__capture_linux_device__info__v4l2.cc |  67 +++++
 ...es_video__capture_linux_video__capture__v4l2.cc |  23 ++
 ...libwebrtc_rtc__base_physical__socket__server.cc |  13 +
 ...system__wrappers_source_cpu__features__linux.cc |  25 ++
 .../patch-third__party_sqlite3_src_moz.build       |  15 +
 ...wasm2c_src_prebuilt_wasm2c__source__includes.cc |  13 +
 ...-toolkit_components_terminator_nsTerminator.cpp |  27 ++
 firefox128/patches/patch-toolkit_moz.configure     |  31 +++
 .../patch-toolkit_mozapps_installer_packager.mk    |  15 +
 firefox128/patches/patch-xpcom_base_nscore.h       |  15 +
 .../patch-xpcom_reflect_xptcall_md_unix_moz.build  |  17 ++
 57 files changed, 2532 insertions(+)

diffs:
diff --git a/Makefile b/Makefile
index ebe02063b9..1b9b109fe8 100644
--- a/Makefile
+++ b/Makefile
@@ -933,6 +933,8 @@ SUBDIR+=	fireflysung-ttf
 SUBDIR+=	firefox-hg
 SUBDIR+=	firefox-wrapper
 SUBDIR+=	firefox102
+SUBDIR+=	firefox128
+SUBDIR+=	firefox128-l10n
 SUBDIR+=	firehose
 SUBDIR+=	flag
 SUBDIR+=	flam3-svn
diff --git a/firefox128-l10n/DESCR b/firefox128-l10n/DESCR
new file mode 100644
index 0000000000..acf7312939
--- /dev/null
+++ b/firefox128-l10n/DESCR
@@ -0,0 +1 @@
+This package contains language packs for www/firefox.
diff --git a/firefox128-l10n/Makefile b/firefox128-l10n/Makefile
new file mode 100644
index 0000000000..c684a54192
--- /dev/null
+++ b/firefox128-l10n/Makefile
@@ -0,0 +1,46 @@
+# $NetBSD: Makefile,v 1.272 2024/08/01 15:41:42 ryoon Exp $
+
+FIREFOX_VER=	128.0.3
+PKGNAME=	firefox-l10n-${FIREFOX_VER:S/b/beta/:S/esr//}
+DISTNAME=	# empty
+CATEGORIES=	www
+#MASTER_SITES=	${MASTER_SITE_MOZILLA_ALL:=firefox/releases/${FIREFOX_VER}/linux-i686/xpi/}
+MASTER_SITES=	${MASTER_SITE_MOZILLA:=firefox/releases/${FIREFOX_VER}/linux-i686/xpi/}
+
+MAINTAINER=	pkgsrc-users%NetBSD.org@localhost
+HOMEPAGE=	https://www.mozilla.com/en-US/firefox/
+COMMENT=	Language packs for www/firefox
+LICENSE=	mpl-2.0 AND mpl-1.1 AND gnu-lgpl-v3 AND gnu-gpl-v2 # as of 96.0.3
+
+DEPENDS+=	firefox>=${PKGVERSION_NOREV}:../../www/firefox
+
+DIST_SUBDIR=	${PKGNAME_NOREV}
+DISTFILES=	${FIREFOX_LOCALES:=.xpi}
+
+NO_BUILD=	yes
+
+INSTALLATION_DIRS=	lib/firefox/distribution/extensions
+
+FIREFOX_LOCALES= \
+	ach af an ar ast az be bg bn br bs ca-valencia ca cak cs cy	\
+	da de dsb	\
+	el en-CA en-GB en-US eo es-AR es-CL es-ES es-MX et eu		\
+	fa ff fi fr fy-NL fur ga-IE gd gl gn gu-IN			\
+	he hi-IN hr hsb hu hy-AM ia id is it ja ka kab kk km kn	ko	\
+	lij lt lv mk mr ms my nb-NO ne-NP nl nn-NO oc			\
+	pa-IN pl pt-BR pt-PT rm ro ru sc sco si sk skr sl son sq sr	\
+	sv-SE szl ta te th tl tr trs uk ur uz vi xh zh-CN zh-TW
+
+EXTENSIONS_DIR=		${PREFIX}/lib/firefox/distribution/extensions
+
+do-install:
+.for locale in ${FIREFOX_LOCALES}
+	${INSTALL_DATA} ${WRKSRC}/${locale}.xpi \
+	${DESTDIR}${EXTENSIONS_DIR}/langpack-${locale}@firefox.mozilla.org.xpi
+.endfor
+
+.if make(list-licenses)
+.include "list-licenses.mk"
+.endif
+
+.include "../../mk/bsd.pkg.mk"
diff --git a/firefox128-l10n/PLIST b/firefox128-l10n/PLIST
new file mode 100644
index 0000000000..4ae3087f20
--- /dev/null
+++ b/firefox128-l10n/PLIST
@@ -0,0 +1,102 @@
+@comment $NetBSD: PLIST,v 1.71 2024/07/13 22:12:16 ryoon Exp $
+lib/firefox/distribution/extensions/langpack-ach%firefox.mozilla.org.xpi@localhost
+lib/firefox/distribution/extensions/langpack-af%firefox.mozilla.org.xpi@localhost
+lib/firefox/distribution/extensions/langpack-an%firefox.mozilla.org.xpi@localhost
+lib/firefox/distribution/extensions/langpack-ar%firefox.mozilla.org.xpi@localhost
+lib/firefox/distribution/extensions/langpack-ast%firefox.mozilla.org.xpi@localhost
+lib/firefox/distribution/extensions/langpack-az%firefox.mozilla.org.xpi@localhost
+lib/firefox/distribution/extensions/langpack-be%firefox.mozilla.org.xpi@localhost
+lib/firefox/distribution/extensions/langpack-bg%firefox.mozilla.org.xpi@localhost
+lib/firefox/distribution/extensions/langpack-bn%firefox.mozilla.org.xpi@localhost
+lib/firefox/distribution/extensions/langpack-br%firefox.mozilla.org.xpi@localhost
+lib/firefox/distribution/extensions/langpack-bs%firefox.mozilla.org.xpi@localhost
+lib/firefox/distribution/extensions/langpack-ca-valencia%firefox.mozilla.org.xpi@localhost
+lib/firefox/distribution/extensions/langpack-ca%firefox.mozilla.org.xpi@localhost
+lib/firefox/distribution/extensions/langpack-cak%firefox.mozilla.org.xpi@localhost
+lib/firefox/distribution/extensions/langpack-cs%firefox.mozilla.org.xpi@localhost
+lib/firefox/distribution/extensions/langpack-cy%firefox.mozilla.org.xpi@localhost
+lib/firefox/distribution/extensions/langpack-da%firefox.mozilla.org.xpi@localhost
+lib/firefox/distribution/extensions/langpack-de%firefox.mozilla.org.xpi@localhost
+lib/firefox/distribution/extensions/langpack-dsb%firefox.mozilla.org.xpi@localhost
+lib/firefox/distribution/extensions/langpack-el%firefox.mozilla.org.xpi@localhost
+lib/firefox/distribution/extensions/langpack-en-CA%firefox.mozilla.org.xpi@localhost
+lib/firefox/distribution/extensions/langpack-en-GB%firefox.mozilla.org.xpi@localhost
+lib/firefox/distribution/extensions/langpack-en-US%firefox.mozilla.org.xpi@localhost
+lib/firefox/distribution/extensions/langpack-eo%firefox.mozilla.org.xpi@localhost
+lib/firefox/distribution/extensions/langpack-es-AR%firefox.mozilla.org.xpi@localhost
+lib/firefox/distribution/extensions/langpack-es-CL%firefox.mozilla.org.xpi@localhost
+lib/firefox/distribution/extensions/langpack-es-ES%firefox.mozilla.org.xpi@localhost
+lib/firefox/distribution/extensions/langpack-es-MX%firefox.mozilla.org.xpi@localhost
+lib/firefox/distribution/extensions/langpack-et%firefox.mozilla.org.xpi@localhost
+lib/firefox/distribution/extensions/langpack-eu%firefox.mozilla.org.xpi@localhost
+lib/firefox/distribution/extensions/langpack-fa%firefox.mozilla.org.xpi@localhost
+lib/firefox/distribution/extensions/langpack-ff%firefox.mozilla.org.xpi@localhost
+lib/firefox/distribution/extensions/langpack-fi%firefox.mozilla.org.xpi@localhost
+lib/firefox/distribution/extensions/langpack-fr%firefox.mozilla.org.xpi@localhost
+lib/firefox/distribution/extensions/langpack-fur%firefox.mozilla.org.xpi@localhost
+lib/firefox/distribution/extensions/langpack-fy-NL%firefox.mozilla.org.xpi@localhost
+lib/firefox/distribution/extensions/langpack-ga-IE%firefox.mozilla.org.xpi@localhost
+lib/firefox/distribution/extensions/langpack-gd%firefox.mozilla.org.xpi@localhost
+lib/firefox/distribution/extensions/langpack-gl%firefox.mozilla.org.xpi@localhost
+lib/firefox/distribution/extensions/langpack-gn%firefox.mozilla.org.xpi@localhost
+lib/firefox/distribution/extensions/langpack-gu-IN%firefox.mozilla.org.xpi@localhost
+lib/firefox/distribution/extensions/langpack-he%firefox.mozilla.org.xpi@localhost
+lib/firefox/distribution/extensions/langpack-hi-IN%firefox.mozilla.org.xpi@localhost
+lib/firefox/distribution/extensions/langpack-hr%firefox.mozilla.org.xpi@localhost
+lib/firefox/distribution/extensions/langpack-hsb%firefox.mozilla.org.xpi@localhost
+lib/firefox/distribution/extensions/langpack-hu%firefox.mozilla.org.xpi@localhost
+lib/firefox/distribution/extensions/langpack-hy-AM%firefox.mozilla.org.xpi@localhost
+lib/firefox/distribution/extensions/langpack-ia%firefox.mozilla.org.xpi@localhost
+lib/firefox/distribution/extensions/langpack-id%firefox.mozilla.org.xpi@localhost
+lib/firefox/distribution/extensions/langpack-is%firefox.mozilla.org.xpi@localhost
+lib/firefox/distribution/extensions/langpack-it%firefox.mozilla.org.xpi@localhost
+lib/firefox/distribution/extensions/langpack-ja%firefox.mozilla.org.xpi@localhost
+lib/firefox/distribution/extensions/langpack-ka%firefox.mozilla.org.xpi@localhost
+lib/firefox/distribution/extensions/langpack-kab%firefox.mozilla.org.xpi@localhost
+lib/firefox/distribution/extensions/langpack-kk%firefox.mozilla.org.xpi@localhost
+lib/firefox/distribution/extensions/langpack-km%firefox.mozilla.org.xpi@localhost
+lib/firefox/distribution/extensions/langpack-kn%firefox.mozilla.org.xpi@localhost
+lib/firefox/distribution/extensions/langpack-ko%firefox.mozilla.org.xpi@localhost
+lib/firefox/distribution/extensions/langpack-lij%firefox.mozilla.org.xpi@localhost
+lib/firefox/distribution/extensions/langpack-lt%firefox.mozilla.org.xpi@localhost
+lib/firefox/distribution/extensions/langpack-lv%firefox.mozilla.org.xpi@localhost
+lib/firefox/distribution/extensions/langpack-mk%firefox.mozilla.org.xpi@localhost
+lib/firefox/distribution/extensions/langpack-mr%firefox.mozilla.org.xpi@localhost
+lib/firefox/distribution/extensions/langpack-ms%firefox.mozilla.org.xpi@localhost
+lib/firefox/distribution/extensions/langpack-my%firefox.mozilla.org.xpi@localhost
+lib/firefox/distribution/extensions/langpack-nb-NO%firefox.mozilla.org.xpi@localhost
+lib/firefox/distribution/extensions/langpack-ne-NP%firefox.mozilla.org.xpi@localhost
+lib/firefox/distribution/extensions/langpack-nl%firefox.mozilla.org.xpi@localhost
+lib/firefox/distribution/extensions/langpack-nn-NO%firefox.mozilla.org.xpi@localhost
+lib/firefox/distribution/extensions/langpack-oc%firefox.mozilla.org.xpi@localhost
+lib/firefox/distribution/extensions/langpack-pa-IN%firefox.mozilla.org.xpi@localhost
+lib/firefox/distribution/extensions/langpack-pl%firefox.mozilla.org.xpi@localhost
+lib/firefox/distribution/extensions/langpack-pt-BR%firefox.mozilla.org.xpi@localhost
+lib/firefox/distribution/extensions/langpack-pt-PT%firefox.mozilla.org.xpi@localhost
+lib/firefox/distribution/extensions/langpack-rm%firefox.mozilla.org.xpi@localhost
+lib/firefox/distribution/extensions/langpack-ro%firefox.mozilla.org.xpi@localhost
+lib/firefox/distribution/extensions/langpack-ru%firefox.mozilla.org.xpi@localhost
+lib/firefox/distribution/extensions/langpack-sc%firefox.mozilla.org.xpi@localhost
+lib/firefox/distribution/extensions/langpack-sco%firefox.mozilla.org.xpi@localhost
+lib/firefox/distribution/extensions/langpack-si%firefox.mozilla.org.xpi@localhost
+lib/firefox/distribution/extensions/langpack-sk%firefox.mozilla.org.xpi@localhost
+lib/firefox/distribution/extensions/langpack-skr%firefox.mozilla.org.xpi@localhost
+lib/firefox/distribution/extensions/langpack-sl%firefox.mozilla.org.xpi@localhost
+lib/firefox/distribution/extensions/langpack-son%firefox.mozilla.org.xpi@localhost
+lib/firefox/distribution/extensions/langpack-sq%firefox.mozilla.org.xpi@localhost
+lib/firefox/distribution/extensions/langpack-sr%firefox.mozilla.org.xpi@localhost
+lib/firefox/distribution/extensions/langpack-sv-SE%firefox.mozilla.org.xpi@localhost
+lib/firefox/distribution/extensions/langpack-szl%firefox.mozilla.org.xpi@localhost
+lib/firefox/distribution/extensions/langpack-ta%firefox.mozilla.org.xpi@localhost
+lib/firefox/distribution/extensions/langpack-te%firefox.mozilla.org.xpi@localhost
+lib/firefox/distribution/extensions/langpack-th%firefox.mozilla.org.xpi@localhost
+lib/firefox/distribution/extensions/langpack-tl%firefox.mozilla.org.xpi@localhost
+lib/firefox/distribution/extensions/langpack-tr%firefox.mozilla.org.xpi@localhost
+lib/firefox/distribution/extensions/langpack-trs%firefox.mozilla.org.xpi@localhost
+lib/firefox/distribution/extensions/langpack-uk%firefox.mozilla.org.xpi@localhost
+lib/firefox/distribution/extensions/langpack-ur%firefox.mozilla.org.xpi@localhost
+lib/firefox/distribution/extensions/langpack-uz%firefox.mozilla.org.xpi@localhost
+lib/firefox/distribution/extensions/langpack-vi%firefox.mozilla.org.xpi@localhost
+lib/firefox/distribution/extensions/langpack-xh%firefox.mozilla.org.xpi@localhost
+lib/firefox/distribution/extensions/langpack-zh-CN%firefox.mozilla.org.xpi@localhost
+lib/firefox/distribution/extensions/langpack-zh-TW%firefox.mozilla.org.xpi@localhost
diff --git a/firefox128-l10n/distinfo b/firefox128-l10n/distinfo
new file mode 100644
index 0000000000..66e165ab40
--- /dev/null
+++ b/firefox128-l10n/distinfo
@@ -0,0 +1,305 @@
+$NetBSD: distinfo,v 1.254 2024/08/01 15:41:42 ryoon Exp $
+
+BLAKE2s (firefox-l10n-128.0.3/ach.xpi) = fa5b827189f348274b176e213d80c6d37bcb9d7fedd9fcb4c18e4c3e44f401b4
+SHA512 (firefox-l10n-128.0.3/ach.xpi) = 8ad9af4e2c693130d471f8bd99f32579cef658317dccb821521069c130647ec7e7a0cfac9d8d82c8f3e3600f22e080ec4174bd8bf7f7cab6107a6a0ecad1936b
+Size (firefox-l10n-128.0.3/ach.xpi) = 464070 bytes
+BLAKE2s (firefox-l10n-128.0.3/af.xpi) = 3f9bb060cc9bcb8c79c6032511541e98bf0f9bc88be9e3a0d34ec22d04b84bcb
+SHA512 (firefox-l10n-128.0.3/af.xpi) = a7d2ee5bed99cc18ed47be14c0421d84a815af7f870b4307517f9ae3929c81d6f2f7d646aedef11a3f91143aeaabd57a7f2386e92bd6e176849356690ba009ce
+Size (firefox-l10n-128.0.3/af.xpi) = 417515 bytes
+BLAKE2s (firefox-l10n-128.0.3/an.xpi) = 25c4e68783b10e74317165a6358a77eeef361e996a297bfb1a1b0095af20fcc1
+SHA512 (firefox-l10n-128.0.3/an.xpi) = b3d16a753b587acddda69fe1e55967c88ccb3624a603be4030c78048385aaeba74f9b2379bba447a5e0495f3d1942fbd6f5ad6c41ce2080ba762493036528266
+Size (firefox-l10n-128.0.3/an.xpi) = 505881 bytes
+BLAKE2s (firefox-l10n-128.0.3/ar.xpi) = 9fa18c9cfd8a70dde5fbd59bc1a2620359b6b6a8eeea8d414ed7466bf986e071
+SHA512 (firefox-l10n-128.0.3/ar.xpi) = 7e3490a77ccf13b0c2f0e625811439e0e4004cf0875b8177822c6fbeb999fe676b24ffc613ce4debcf7ec0ad3fa05dc7b8a2aebccbea41683c6b5c625d640621
+Size (firefox-l10n-128.0.3/ar.xpi) = 610860 bytes
+BLAKE2s (firefox-l10n-128.0.3/ast.xpi) = ac749b3ddd2e952644edd9dba4519e46358aada2889b5a34c160e3cd665312ee
+SHA512 (firefox-l10n-128.0.3/ast.xpi) = 6b9003ff4b47041ddf1622c1b139506472ecc86c3445e36a6936134a04635a7d3f64609e5cd4222757ef7d9b32480b6478477b2dcf8b12a4d4d67514db6d859c
+Size (firefox-l10n-128.0.3/ast.xpi) = 496342 bytes
+BLAKE2s (firefox-l10n-128.0.3/az.xpi) = e4b322a8bd84926d189e141a75ab629f45b387bbce7b628d4c90480235581bb7
+SHA512 (firefox-l10n-128.0.3/az.xpi) = 335d130106fe22c540528ced5f2277d6315cfbe33072a76fbfde3ce225543c3013311aad452ffb187554b575c5f3b656112f343c085b83397d9be8a70dc74b20
+Size (firefox-l10n-128.0.3/az.xpi) = 490772 bytes
+BLAKE2s (firefox-l10n-128.0.3/be.xpi) = a18b684eacef8fb8a5c8a110a00a88fd988077c8b9a8efbe288dff3643af8432
+SHA512 (firefox-l10n-128.0.3/be.xpi) = 5ef69e53b8aa687e05d223df109c84e559095a725524f0d0d23fa1682858072237510e4263af5ecbd4dd7dd28924d9c177bc78db247d2686eb1d8376f71241d6
+Size (firefox-l10n-128.0.3/be.xpi) = 714336 bytes
+BLAKE2s (firefox-l10n-128.0.3/bg.xpi) = df82dec58bad35cb14ad439d51bcca3f3efb20d1ca5e72f7e4b570e4f26a432e
+SHA512 (firefox-l10n-128.0.3/bg.xpi) = 6c79c587e32e57b5640b09736cca745f5e536e115007825de1c14ed822ed5a9a0b212cc760dfffae8cafc6b792b887483afe105a3b1c5aa42df0bde3ad80639d
+Size (firefox-l10n-128.0.3/bg.xpi) = 606582 bytes
+BLAKE2s (firefox-l10n-128.0.3/bn.xpi) = 3a477c3565034884a76b9c1d4af98a6bcf43d477ba86bbf4a441dc4e82703fa9
+SHA512 (firefox-l10n-128.0.3/bn.xpi) = 655bc0615a83481a4803916244d3ba6666501712f8c684a01e51c5118f70d3b5b7a1c8f7658843c554d7849cd56a287a2794ccf4bed28780dd2590e843be17ae
+Size (firefox-l10n-128.0.3/bn.xpi) = 581536 bytes
+BLAKE2s (firefox-l10n-128.0.3/br.xpi) = 197ff3f2f6b15b9b28c3de2cdf4bf9aae7623e3cf986df86eb30f978e10e7b69
+SHA512 (firefox-l10n-128.0.3/br.xpi) = 65e7498f17888ad8352751493d9de6303140dd0a1ddab5336e4fd050975aaf6e97f9234b91642b87de585af19c54e4312e3fb71e3f2cb8af14ca56aad0d96686
+Size (firefox-l10n-128.0.3/br.xpi) = 588930 bytes
+BLAKE2s (firefox-l10n-128.0.3/bs.xpi) = ad38653bcb8914fb2200c65c9add3b2df37756c23781b088fbbd03cd67eeca2d
+SHA512 (firefox-l10n-128.0.3/bs.xpi) = 4875b5a5f46de9325a7ba0973a4ff050704fb99dfd2bf2c196541b7a9b53350fd5216c17711010ec719037b60a4440d4b151c5e6fb3ea8ba33b49005a6d6b639
+Size (firefox-l10n-128.0.3/bs.xpi) = 501988 bytes
+BLAKE2s (firefox-l10n-128.0.3/ca-valencia.xpi) = a3f39d942fdef05d61d4495d738381b96eb7b4b74ade629cb0e5be4720945775
+SHA512 (firefox-l10n-128.0.3/ca-valencia.xpi) = 93c0068c48e44dec07359ea8904d9f6b8254d55544a46f8f814a5f92eaf35b3d860cce864c0a2c60bd95b6cc107fe4beeb5e9aa7d7a746034999dc9681ddd138
+Size (firefox-l10n-128.0.3/ca-valencia.xpi) = 546189 bytes
+BLAKE2s (firefox-l10n-128.0.3/ca.xpi) = 9dd7bc289792f638f6467bd18108752cf3023f64d675c82ef8560e75d791a272
+SHA512 (firefox-l10n-128.0.3/ca.xpi) = c15669049e0b2f62524d5c57af8b8bd48944b299e860b1c2a55cb7c05718a03297fbbbf8b3e4e5bc2292a817048221ef08682b02a9cae485b8c2215db77621eb
+Size (firefox-l10n-128.0.3/ca.xpi) = 597111 bytes
+BLAKE2s (firefox-l10n-128.0.3/cak.xpi) = 65d085de10383f52ffaaf3231af6846c589b11701453e2c232a8b91b2ed666bb
+SHA512 (firefox-l10n-128.0.3/cak.xpi) = 028f61bd1cf887d51ced7e5dc6034db5a4cb50f2c8304dd6d6146550eb9aaea35bb1078e6c29129979a3e1c5e12e9f204101041ffdb57e335ea5120248339b44
+Size (firefox-l10n-128.0.3/cak.xpi) = 593083 bytes
+BLAKE2s (firefox-l10n-128.0.3/cs.xpi) = 33e62b9dc2b5824b525f5a2900c354c649eea12ae87b4a2667bc29c62c5a6f49
+SHA512 (firefox-l10n-128.0.3/cs.xpi) = facad91e1587788e8bb052094690529fd580e6171a0dde9b3c226470acc31717d154a1d1947b004aae7fde2b7f96ecc05a481cc88eb2e3f590fa9bb61b5567ae
+Size (firefox-l10n-128.0.3/cs.xpi) = 658964 bytes
+BLAKE2s (firefox-l10n-128.0.3/cy.xpi) = 0e9461928ba29e0f7e6c5738df5b083642498731895e9a60baf66188314f2430
+SHA512 (firefox-l10n-128.0.3/cy.xpi) = 784cacf3813c3c9c5e1f3febd408d0100f3579d3eaa4a7fc910a6c26a731b3bb36f885df89a58aee291f992e105e231e444a2e3325d4ca56b9dce77b5740b9c9
+Size (firefox-l10n-128.0.3/cy.xpi) = 622920 bytes
+BLAKE2s (firefox-l10n-128.0.3/da.xpi) = dcb9cc286dd3c10393dc059b537f35d32885259b067d7927965531e495e36872
+SHA512 (firefox-l10n-128.0.3/da.xpi) = ea6e6dcc0eecdddd597e94d4400cf4bbe152329b5e5a2b02f61c9962995798ee4f009ec5df709e100c9da4200d98a853cf865bed38e047113f44bffbf20940c0
+Size (firefox-l10n-128.0.3/da.xpi) = 610842 bytes
+BLAKE2s (firefox-l10n-128.0.3/de.xpi) = 60c55b967ef119c23a98c10a1b8601c9d98081d923bf1101d7d8b18dd329c580
+SHA512 (firefox-l10n-128.0.3/de.xpi) = 5a92a77df3466d3604fcf51cf73f6c2b76d64353e81f437413a1d3405ac213c2dc987f77b6efc3b5b048d794884fb08e456a316fc0206ce1f3f13e60aa88c522
+Size (firefox-l10n-128.0.3/de.xpi) = 632474 bytes
+BLAKE2s (firefox-l10n-128.0.3/dsb.xpi) = 758ea89530755ce02e9e16d4d600fcd0134416bdc087024cdf14607c330a5dc0
+SHA512 (firefox-l10n-128.0.3/dsb.xpi) = e4e590209c249797a9accec4e7cb1c74a5c40f33afc217e03d9f2ba0706a15110aca38179e0968d89fbbbfaa2ab1acb6a870d8112c70756ee930c2bd4c0b9433
+Size (firefox-l10n-128.0.3/dsb.xpi) = 650816 bytes
+BLAKE2s (firefox-l10n-128.0.3/el.xpi) = 62b6045ca660772273c182a7452e6ee49ea495fe39bf05bbfe237449387ab804
+SHA512 (firefox-l10n-128.0.3/el.xpi) = d002d58c81cf7de1c54d979ac7423f57e1b581a76f1671e8a74369b78cf70d5937a5ab52bf842ac73846a06ebec5f13c1ae03a9b31b2cad17c95a6a966350c52
+Size (firefox-l10n-128.0.3/el.xpi) = 733070 bytes
+BLAKE2s (firefox-l10n-128.0.3/en-CA.xpi) = bcd5d00131dc31c11f285f5b6750ddaf4cb81f7831c3da08dbce8979084443a0
+SHA512 (firefox-l10n-128.0.3/en-CA.xpi) = f7c5f2aa5f06abc9b01a9ff23983bd66d6ad42388f84b308586b5fd9819d863d525ec28e8657d7e387404fdcb397ea08e71ad850b0e27b8d71f89afae52d02f9
+Size (firefox-l10n-128.0.3/en-CA.xpi) = 584678 bytes
+BLAKE2s (firefox-l10n-128.0.3/en-GB.xpi) = 8e74d533a90d0f4a5fa3a6fe60743c5b9b7788b5068d5dc2d454f3000be9f7da
+SHA512 (firefox-l10n-128.0.3/en-GB.xpi) = cfa76417eab21bd6daefb52c9527838ba18903ed1def71e50a873a038ea947d33acddf3c6f327e0fb82cb30b80440ca7a166ac5f43b0d927465e3f79d046f060
+Size (firefox-l10n-128.0.3/en-GB.xpi) = 585259 bytes
+BLAKE2s (firefox-l10n-128.0.3/en-US.xpi) = b4e52df3fd0e30c5aa64a1ddbdaf4755a0856a2f910bfd3feb8a66db815b03cb
+SHA512 (firefox-l10n-128.0.3/en-US.xpi) = 205ef1067fbd0ec7eb21e80e8cb9a46e96fe84dba9c044dcb9a3316dd931474fdca80674b71dcb7e64b87a96f897e0df07eb12f8143eb4eb68eeca7dd6fdb1b2
+Size (firefox-l10n-128.0.3/en-US.xpi) = 558296 bytes
+BLAKE2s (firefox-l10n-128.0.3/eo.xpi) = f51ec98b859d4eb168d3d49373a4cc9f06fe387f58e938d4ce1eadb4943e78d5
+SHA512 (firefox-l10n-128.0.3/eo.xpi) = 3e68dd24d146cfbfe0e647159dab64b74e772f0978ee0dc2027e2b7c16601da276f50c782a17ae4a0e2c67816bbb372fbc98f1d1d1d08758806589ea86e1ab11
+Size (firefox-l10n-128.0.3/eo.xpi) = 613700 bytes
+BLAKE2s (firefox-l10n-128.0.3/es-AR.xpi) = 060b7197a69a97e9f021ff57a3647bfb6b468e621abdb72d74f40b9047380f71
+SHA512 (firefox-l10n-128.0.3/es-AR.xpi) = 11a5654fb99b6802bc756f2854ef8feec159bc528d7aa4886c94464a072a9c09117effe751446e9788e317f7ce4f782e9b43ceb965261b48d11aee936117b362
+Size (firefox-l10n-128.0.3/es-AR.xpi) = 628031 bytes
+BLAKE2s (firefox-l10n-128.0.3/es-CL.xpi) = b4bf2cbebccf0dc51f738935ff71bf1aa8da8cba0b05c047ac66619b42eeac8a
+SHA512 (firefox-l10n-128.0.3/es-CL.xpi) = 5b549095bf4f7bab34c1b8f275d088db6196a6aac05061125bc8be3dac755eaa3b5756422161b7afec5e47d31a675738ee9421a296909bba8b28a6c055fd8282
+Size (firefox-l10n-128.0.3/es-CL.xpi) = 627301 bytes
+BLAKE2s (firefox-l10n-128.0.3/es-ES.xpi) = 00b6408959f031e3d0e187760cb576f5548ea39c92124ede3185496b0a19a90e
+SHA512 (firefox-l10n-128.0.3/es-ES.xpi) = e9b04d2b405efa09474b9b61ca371eef0d26331de252256ffb92f8a504aafc1466c7463024903e6b918663465afd8535e1e9ee5f238d83cdf011f35ddd62ac34
+Size (firefox-l10n-128.0.3/es-ES.xpi) = 621076 bytes
+BLAKE2s (firefox-l10n-128.0.3/es-MX.xpi) = f91d1d293683b375778a786d94532d28aae2ab93cd6b165489a99451abc43ce3
+SHA512 (firefox-l10n-128.0.3/es-MX.xpi) = 5e0046b8b9da59a3f810c2040e2d4d928d0706e168374d2bfe5970c42e619ceb07d9b4720d53dadc96c47559fee5eda22d8c68c536cb7df4966c825e24eb6457
+Size (firefox-l10n-128.0.3/es-MX.xpi) = 604994 bytes
+BLAKE2s (firefox-l10n-128.0.3/et.xpi) = 1b7f4546a8471035aa1c8a4f11ee4816a8c868f3bbfe798bca3a16a31762652c
+SHA512 (firefox-l10n-128.0.3/et.xpi) = 11cc2db54e703cfe221baad2412dda92603cb7111ce6386e8fc303f20bad116f62490b7bf456a086f0f275475f74e77b605d55787539d33c7d23017fc851031c
+Size (firefox-l10n-128.0.3/et.xpi) = 539535 bytes
+BLAKE2s (firefox-l10n-128.0.3/eu.xpi) = f68efb8227cd47abe0fd15fe7008e8ccd1e596fa2b712e55ea4f0471ac71c9f6
+SHA512 (firefox-l10n-128.0.3/eu.xpi) = 656350dff1b95f1e101ed9be60af3ab0c939d74b7af4f36c2523504c83c0e5cbcb39541ae553d7af69ab2f705b48cb33b9881df6f34568fd7f474d046d0ba651
+Size (firefox-l10n-128.0.3/eu.xpi) = 599329 bytes
+BLAKE2s (firefox-l10n-128.0.3/fa.xpi) = dcacff7421b5557b71cc3f540384540a68852552b16a4251673f39de18011568
+SHA512 (firefox-l10n-128.0.3/fa.xpi) = e2a77e4492e71ef4881b774f5b6e1fa98ca67acd5a8a388c43801c2c15309966bf3539aa2c2f2902ba70707dba1735fc4e4a77343de005bf41e52927bf785862
+Size (firefox-l10n-128.0.3/fa.xpi) = 590030 bytes
+BLAKE2s (firefox-l10n-128.0.3/ff.xpi) = 69dd630dab46ccbe3f49739b618c0ed4ad566718248e1fef48e474299aa8b107
+SHA512 (firefox-l10n-128.0.3/ff.xpi) = 87d744541af7e9a05c843fb7040f30c8b316a41827f152946114e1e63d9fefd47d23b326892266c93bb8bd1c4795ec547049e8a1af843a1614d4a109908c0279
+Size (firefox-l10n-128.0.3/ff.xpi) = 476055 bytes
+BLAKE2s (firefox-l10n-128.0.3/fi.xpi) = 21c56b3e98cbc46453fd44464de11edcf42cf23a36421939787513fa36ff479f
+SHA512 (firefox-l10n-128.0.3/fi.xpi) = e6194ff84a353244861ecff3a5082c1324daa59443f2567db76ff5984b37309889f287e5393a1ab7607bb350b9508b86f842917aad17a3a109731c94f145c839
+Size (firefox-l10n-128.0.3/fi.xpi) = 606457 bytes
+BLAKE2s (firefox-l10n-128.0.3/fr.xpi) = f8b10e89374f6953a9de35be796e3c447f3dd523c20a9f795704394c0a0b10e0
+SHA512 (firefox-l10n-128.0.3/fr.xpi) = 760b277ba49f85b9053ef8eb7d9e6b9a2a8b324f5c74f9d6fa937fb6b8186a7a08816485b324b17807f62155c763b6a6f27587229b562c044216ad538e029513
+Size (firefox-l10n-128.0.3/fr.xpi) = 640303 bytes
+BLAKE2s (firefox-l10n-128.0.3/fur.xpi) = 185615f5302ef8523005250daf7bf980d04d21734312ad0ed70f3b69df321c2a
+SHA512 (firefox-l10n-128.0.3/fur.xpi) = ea394254ca7b055b99f3f057c61345e22d6f23e511d41ae513fa3aa8d77b68de436bff8decef917c211a5b9f26221f520dd7b52a54ae250704b476e0d05d8afc
+Size (firefox-l10n-128.0.3/fur.xpi) = 633990 bytes
+BLAKE2s (firefox-l10n-128.0.3/fy-NL.xpi) = 56e3c5d2371db552f71b7266122875912ac2a781477bd374dc16d725fde38684
+SHA512 (firefox-l10n-128.0.3/fy-NL.xpi) = c6fb36046b321e78e4c59401683f6c9e58c343d20935c29fad34f89a8974591776494ddc78eaa9408a3d6e4303bcbd0f1cb80b131b416dcb1be45860832cb74f
+Size (firefox-l10n-128.0.3/fy-NL.xpi) = 623727 bytes
+BLAKE2s (firefox-l10n-128.0.3/ga-IE.xpi) = 69e3ff8e062ffe07cca0a74004520c8563b627e6dcf95f51760554774b8b0f7d
+SHA512 (firefox-l10n-128.0.3/ga-IE.xpi) = db94156443a1b7b21778ced1e574fbe785013d63ddc186aef0619aeb15839d3d33614e701d5261801819c469490b14950f28da9211f50a90a04a3d70a5eec88c
+Size (firefox-l10n-128.0.3/ga-IE.xpi) = 470992 bytes
+BLAKE2s (firefox-l10n-128.0.3/gd.xpi) = 060934647110db01b3f99e6baea3c9c68d4ff5ffb8b3b5088a1791d6fa07c4df
+SHA512 (firefox-l10n-128.0.3/gd.xpi) = 321075e3b5feb6cbb27b3829837f1fa3d53c59b2012330b8e170e46198da30b181a15d96da403952f9da210e0bf32659c01b46b1cd3744756c6b19b582d7677f
+Size (firefox-l10n-128.0.3/gd.xpi) = 596589 bytes
+BLAKE2s (firefox-l10n-128.0.3/gl.xpi) = 101344a1b02c42dcb46e4cb9da0023608d51119f2727ce9b2afdf8f80a3fe53d
+SHA512 (firefox-l10n-128.0.3/gl.xpi) = b8d450fe80e5ec0ffa0c0090cf62a5ece4e9643ef1d4e7b6052fa7ef3e20a5d2b61b5771f14a990942bb13cfb7cfec9d11a04ea1f578b1875104a7177f8a9789
+Size (firefox-l10n-128.0.3/gl.xpi) = 604094 bytes
+BLAKE2s (firefox-l10n-128.0.3/gn.xpi) = e2678b5126a86d2a80d11d85b01705e7f0363f1e84ca9f0a6e752d1d2f5ed19e
+SHA512 (firefox-l10n-128.0.3/gn.xpi) = 0e7df3485b0168a0b74ca9cb59ed80f633b097f53d1ddee826d95831868cbb887f17e8560cf0ca843ef183760481e57d3dce53966dcc40c2d7d0bb428db4f197
+Size (firefox-l10n-128.0.3/gn.xpi) = 637427 bytes
+BLAKE2s (firefox-l10n-128.0.3/gu-IN.xpi) = c9728387bd8a90e34697dc8c3daed951368b7f8b08cf0c4c2880c044ed65a8bd
+SHA512 (firefox-l10n-128.0.3/gu-IN.xpi) = edf17a82f01afb28aedb484287fb70d35fa62341a2c65dfc2160c8962522b55146bac85f565049343059feed02ce22f067e1217d6ed10071d8a09301f18289bf
+Size (firefox-l10n-128.0.3/gu-IN.xpi) = 527344 bytes
+BLAKE2s (firefox-l10n-128.0.3/he.xpi) = 09ea4487406cede6606d765e9f6125796bf514202892615e6b06a753f31d1535
+SHA512 (firefox-l10n-128.0.3/he.xpi) = 2a2da86b5ed0015f278582dd6c7f61a7966c078cd5af77eeee107ea5e6418914948586659a0786b418fff0f23292404f48165622d9d5e518251c1a15be372364
+Size (firefox-l10n-128.0.3/he.xpi) = 631587 bytes
+BLAKE2s (firefox-l10n-128.0.3/hi-IN.xpi) = 62c611afa4bd9b522c97fa20097523b2ec50c96d9fb9e5bc8879eedba849c3bb
+SHA512 (firefox-l10n-128.0.3/hi-IN.xpi) = 6d1b410f653ea49e3356c73942e8f3b6791e9c74ab54611d1b24a1e49374d67ffceaed239ae90ab580cc02a02925e357a87e780c6a1910b17294eeecb561252a
+Size (firefox-l10n-128.0.3/hi-IN.xpi) = 566770 bytes
+BLAKE2s (firefox-l10n-128.0.3/hr.xpi) = 331195ec28b17954c0f23227dc1b85fac9a082c3ba7c668fbce19f841f7aad20
+SHA512 (firefox-l10n-128.0.3/hr.xpi) = ddfca42876ce1702e1b65754a1411f66392efb9cf7ad474ee892c29a372d5f05d4594d52b3a4609b0f77e7e4eefc8e38c790a462149d34a8b302ae89178925bf
+Size (firefox-l10n-128.0.3/hr.xpi) = 559805 bytes
+BLAKE2s (firefox-l10n-128.0.3/hsb.xpi) = 3e42ce71fbaa95a47f3132a1cacde08cbafc60f9c27971d012e3d3e76d015f5c
+SHA512 (firefox-l10n-128.0.3/hsb.xpi) = 9c3432245bd916f09da1847f3c80291151bbdb4d38926411e672c04609d78c0dd79b625eb8650edd800ab31f0419de261c171709f7c7cc6df6d4ebdd6e82bcaa
+Size (firefox-l10n-128.0.3/hsb.xpi) = 646889 bytes
+BLAKE2s (firefox-l10n-128.0.3/hu.xpi) = 3a71e314d09c23f53265136ca0d2f02573aa4f4db00f1b1a13744bede4baabb3
+SHA512 (firefox-l10n-128.0.3/hu.xpi) = ffd814aedc6e9aebca5c0209ea01d2de21b562734ff2264bf21b45d2c600d7c46d6ff65a6ac2aa250e7fd8e6b7272478af859569fb6a1afba7c893b1099b9cf1
+Size (firefox-l10n-128.0.3/hu.xpi) = 649176 bytes
+BLAKE2s (firefox-l10n-128.0.3/hy-AM.xpi) = ec6eb0974c3ab60b6b559a9cdb430e924fec3f78cc55b6bb37a9be586378940e
+SHA512 (firefox-l10n-128.0.3/hy-AM.xpi) = ee664c2a7a60782f7ea3e32b5e1439b9e4f5b37e8da28f6c05d43779e896e2dcc99505ee34c690b50ae478bee1a5f500c9049ae79fb4475c993c2a1afbb1f3cf
+Size (firefox-l10n-128.0.3/hy-AM.xpi) = 651598 bytes
+BLAKE2s (firefox-l10n-128.0.3/ia.xpi) = b218c7e1bd8734f23e930ba7d3fa6a10dc4202abf491085572dd7739c6ffeb17
+SHA512 (firefox-l10n-128.0.3/ia.xpi) = b7adf46f3a17caeabef6b752f3ae09095bae922cc1646ebe06edfc0cca31c82357ae466ad97603d92e611a5f096ecd6d973cd2a38fbdd7f28d2ebd523a11c61c
+Size (firefox-l10n-128.0.3/ia.xpi) = 611216 bytes
+BLAKE2s (firefox-l10n-128.0.3/id.xpi) = 55671f3c5bb4ece83f3f91556b9ce14cfd76b0de57d899c87e3ac569260d2534
+SHA512 (firefox-l10n-128.0.3/id.xpi) = 43d18cb4d09145675ca816cca910feaa7af41a34cfbf35e42df2d9d3a9b862c5818fa8194ecdf184e4f2ea19e6ef0c553b0145bc19f6368e28ce3e3ec62f8cfe
+Size (firefox-l10n-128.0.3/id.xpi) = 580206 bytes
+BLAKE2s (firefox-l10n-128.0.3/is.xpi) = 81837b510a9da4fbd0c59b372a4d6b8ad8e0585e792ede0e4ce8b218e7d8379f
+SHA512 (firefox-l10n-128.0.3/is.xpi) = 3db273effce357e5bb4916c783b8129e10c976cdab39cf0e0c5b79b59742265ad8f3b477030500de914335ef3df167462d3d687f5bda27023f637e610adf2ca9
+Size (firefox-l10n-128.0.3/is.xpi) = 616485 bytes
+BLAKE2s (firefox-l10n-128.0.3/it.xpi) = 2b243cedd36bee7adff856deff1137d15cacf65b3e3d461ed2be3967fe9f840b
+SHA512 (firefox-l10n-128.0.3/it.xpi) = 25c4765ed40c64ffc550910572e4d01ac39c3aec1d76b5b6527f6c2a48e8854b8e3182154b3a09c6c12ea4dee6389df9e3417ef8084ef96e9a1313a39b58ea53
+Size (firefox-l10n-128.0.3/it.xpi) = 567318 bytes
+BLAKE2s (firefox-l10n-128.0.3/ja.xpi) = 9dd41bc06e7d5ec64aded075634812905eabaee90fae7a81301311ef6b83af5c
+SHA512 (firefox-l10n-128.0.3/ja.xpi) = a409699efa9053660a123fdba9c78969b9771775621549c0ee562f8ee83008b0119e4bb25315325b4e456412569c57d3fba64289a9c614ed5b4de744f8ba50a0
+Size (firefox-l10n-128.0.3/ja.xpi) = 675632 bytes
+BLAKE2s (firefox-l10n-128.0.3/ka.xpi) = 9dc8fa3ca4e18f619eb6b0064ed4c3f4ce3f97228a85a923bef3a8636f8ad8ee
+SHA512 (firefox-l10n-128.0.3/ka.xpi) = 68d45b09e7da2be9a835e75982617c1219bf9ffa4a3990ede1dcb7709d58959741ad78a258082639377f125cb5cb9cc10c619a3697bf367a3e8555f5a1b47d4d
+Size (firefox-l10n-128.0.3/ka.xpi) = 660713 bytes
+BLAKE2s (firefox-l10n-128.0.3/kab.xpi) = dac58ceeeb8c4e13fbc983e3fd26e242773001558006fb4e8f3c69af730ce608
+SHA512 (firefox-l10n-128.0.3/kab.xpi) = 3f5637cd8013626ef3a0cef44f205f021a8eb1e7794e1a84a4afdd836698d72327fb94f4b2c572cc5da94c7f6a40cedff1d573c17a222732f1884f987d4077a5
+Size (firefox-l10n-128.0.3/kab.xpi) = 608748 bytes
+BLAKE2s (firefox-l10n-128.0.3/kk.xpi) = 28bf19c0915ea1a0a398a8db82ccc9c24b67b2a14e012f0508a90e7222ade8ba
+SHA512 (firefox-l10n-128.0.3/kk.xpi) = f4337887809f5f02a7fc229996bc3a15fa77d79ef37463e396eb74c9fe4a56a9677e312ca61e6a80d3b29c7f0111f5b8d0916e59905858682b3dd77f9cb98fa5
+Size (firefox-l10n-128.0.3/kk.xpi) = 707825 bytes
+BLAKE2s (firefox-l10n-128.0.3/km.xpi) = 431de825a29889cf84528d9248c53af2d5219ccf918e6752bad363bb978e366e
+SHA512 (firefox-l10n-128.0.3/km.xpi) = 508fda7db4e760393936493133faf75dbc426fa14f0f13d5084a2d5fd7972eebf2f500eddd567f7eca215d9a638748e1145d7a3c824de15b3679935b412a8aad
+Size (firefox-l10n-128.0.3/km.xpi) = 525884 bytes
+BLAKE2s (firefox-l10n-128.0.3/kn.xpi) = 19dbdf68da5e2d67add12dc6c1638529d8d31ef470a0908ac26a34d21334b1d1
+SHA512 (firefox-l10n-128.0.3/kn.xpi) = c2e1f572ecb7e222d32e498c49421fe4f7837ad1acc4671822a7a54c0191fe9d6d356d8b2b49f607f2319d9bd6155ac6722a4446c95604fce4bff85bd03ef453
+Size (firefox-l10n-128.0.3/kn.xpi) = 491252 bytes
+BLAKE2s (firefox-l10n-128.0.3/ko.xpi) = a2806969a6e38fdd647f1be60b0cebb8aa16155d91c0be3604be2f5eea95e86f
+SHA512 (firefox-l10n-128.0.3/ko.xpi) = 39a3ac1e689d58a016793983659e164073943b850962a72e96f59ac4ba9300b3238aab77366c8497e4a0a1d57cc5936336940d0d123a9e2510c612655e1c03a4
+Size (firefox-l10n-128.0.3/ko.xpi) = 661599 bytes
+BLAKE2s (firefox-l10n-128.0.3/lij.xpi) = 4888b76eaae40b0b7f9e91f3d7483183224357be7f6097583acd365028568dd6
+SHA512 (firefox-l10n-128.0.3/lij.xpi) = a10a2c3e950245f7cfa5ac79d66ee58efb29988eab3f2bb2755ead5eab3287ded6291d3b3e23fc74cdc32f227e4f71eb0525cc46899caad771550ac6a4a60e7b
+Size (firefox-l10n-128.0.3/lij.xpi) = 484092 bytes
+BLAKE2s (firefox-l10n-128.0.3/lt.xpi) = 569b8ad216f87a9d32bfa1c9be28f646c597d8643cdd9dde6fc789b4cfe42588
+SHA512 (firefox-l10n-128.0.3/lt.xpi) = 862131b2bca7a61b11872ff5caf0322b1cb61741ba3927bcbeaea352869a7929949dc93c0a9eeea05b92c0314cffab9a9588087ba04072474fe189e180bff937
+Size (firefox-l10n-128.0.3/lt.xpi) = 572684 bytes
+BLAKE2s (firefox-l10n-128.0.3/lv.xpi) = 7929ac2cd2b9496bce45418ec9893ff0d6f0130f34815ef420ffb764ec271dcd
+SHA512 (firefox-l10n-128.0.3/lv.xpi) = f10537c5997cb222dfa1e23819b2a12f94744748e6c4e7266e0f9cc8ccf56f0fc6011088e223f5bd1a8407451d832acf83bb339b9191223efe7042ca7857d38f
+Size (firefox-l10n-128.0.3/lv.xpi) = 574392 bytes
+BLAKE2s (firefox-l10n-128.0.3/mk.xpi) = c4e4b754606f53f146b018b19fbc2845c2fe6921a371dde4a12b0a4b2f38d7b3
+SHA512 (firefox-l10n-128.0.3/mk.xpi) = b142a6890dc0a53baab76d667e777101ecdc07051a61247a10d8495c56a9966da9893e92a2f4e25a205395bddde12afc621b725a911ffc76cc3459f3252c97bb
+Size (firefox-l10n-128.0.3/mk.xpi) = 493840 bytes
+BLAKE2s (firefox-l10n-128.0.3/mr.xpi) = 008363eebb6fb0b2734e14eeb092a1c62cb9f17ebaa2e1686e00177cd1dd955a
+SHA512 (firefox-l10n-128.0.3/mr.xpi) = 2a89a64657ca0280f6ce854d678c23abbc0f162694a59676998987e7eb80ec7e990984d48e2cffc571f18c9d500e324c77c77e0ce3519c2043ad38d9fadf66d0
+Size (firefox-l10n-128.0.3/mr.xpi) = 532094 bytes
+BLAKE2s (firefox-l10n-128.0.3/ms.xpi) = 904711d2e9ec12b75d67b76a9faf67995f4eca0b402178d5712cc3a3791cf702
+SHA512 (firefox-l10n-128.0.3/ms.xpi) = 58abfe466d93e551029754a31f91a2c2e6a8cdd453efe8e74f602b0a3fca27f80b3c35111d23f930a93d82548b46756cfa8ee1aaec8023aed27ace891e8d60c0
+Size (firefox-l10n-128.0.3/ms.xpi) = 449731 bytes
+BLAKE2s (firefox-l10n-128.0.3/my.xpi) = a372df103caa3266e2cafb03211613c92a85d909b10cbc48bec5e295e8f1e1fe
+SHA512 (firefox-l10n-128.0.3/my.xpi) = 1c3252f76dbdd69de40b23df6645bfaf47970a4088ea48642f6354a87f02cda82d9b05e0413beff6192ef87c497c642d9901e8c836cce626380d0343fb9a066e
+Size (firefox-l10n-128.0.3/my.xpi) = 518622 bytes
+BLAKE2s (firefox-l10n-128.0.3/nb-NO.xpi) = e37455fc448036e6d35381001f35f30c0a7daefea0db4ffb39fbc3b2b5302163
+SHA512 (firefox-l10n-128.0.3/nb-NO.xpi) = a7df37359438c835ccc40749aecae90576cbc3c647fbec7742fd7d510cc84f46a82db8c998098ba96394d8aba12bbb7fac393c3dd12d07e24252b526a854e969
+Size (firefox-l10n-128.0.3/nb-NO.xpi) = 607049 bytes
+BLAKE2s (firefox-l10n-128.0.3/ne-NP.xpi) = bac43ce261c95008ef61db81ee96e7a2ab9618f1289daf96fcc5ddc99afa109f
+SHA512 (firefox-l10n-128.0.3/ne-NP.xpi) = ee082c60f564dab5ef1e83a4e2feb26fc311567254e0b1a8caa74c5ad0179c4bb93ccd541ce05a657a85e04af2d2d13f7e250cfc77174db68f460c7af2b35158
+Size (firefox-l10n-128.0.3/ne-NP.xpi) = 510942 bytes
+BLAKE2s (firefox-l10n-128.0.3/nl.xpi) = 69eae0e62c511a2d257aa3841630d0021004ad1feeb3341377e815937df60daa
+SHA512 (firefox-l10n-128.0.3/nl.xpi) = e883b264861e35a7fc5eaa0da2ac6aa51de858cb3d91a0a3beb1140a4db9bf6bef214362305906f5d9174441aa84728314031994503393d009900681fedac45b
+Size (firefox-l10n-128.0.3/nl.xpi) = 617411 bytes
+BLAKE2s (firefox-l10n-128.0.3/nn-NO.xpi) = 85d3f281a8867671d507139fdf25f08970b1cb8bf113c48ff81eb24b57b0fd88
+SHA512 (firefox-l10n-128.0.3/nn-NO.xpi) = 67fc048770d1957432156ce3fc9c97eb45d22e4fd7aed2f282f12e1d60185b6891ca0ffa21ed0f32a2763cd009e4df338581b2aee36e15258cf350818868c892
+Size (firefox-l10n-128.0.3/nn-NO.xpi) = 610252 bytes
+BLAKE2s (firefox-l10n-128.0.3/oc.xpi) = a7148e3decfb39219c407274a08799bb5f4146deb000a78eda072b3ee78c488e
+SHA512 (firefox-l10n-128.0.3/oc.xpi) = 593b0b6834e7d94189bedc91d77d562e6838edfbeae7cfb4f8bdaf52694b1bd7b0f2ba927f927b27ac8a6489678831ca9298c3b0ec6c1a270379e9c9427dad32
+Size (firefox-l10n-128.0.3/oc.xpi) = 612809 bytes
+BLAKE2s (firefox-l10n-128.0.3/pa-IN.xpi) = 3dfc67fc6fb76b194eb448d0efd576a0dacbaf575b212f4e4b59c49fc8c64f71
+SHA512 (firefox-l10n-128.0.3/pa-IN.xpi) = a8fc7434e7833312ecd263e4f5562bf6fbf5a3025e9575b278db97535ba76740bac2626739c3b58c0b00132d61fd5302621272114c74a60b3def1a3cb8537b90
+Size (firefox-l10n-128.0.3/pa-IN.xpi) = 692032 bytes
+BLAKE2s (firefox-l10n-128.0.3/pl.xpi) = 1dd576bd9b23222f8a098bf5c5b379405431ccb23578f3316e5cbbb3e6052864
+SHA512 (firefox-l10n-128.0.3/pl.xpi) = 5ac939b0081fa7c1415f52f85f89180a96abde40571df0a9a479876e346c4ab758af25e2334d3d9fa5a9c516382f1e8788f7c99409ce7bfacd14b3b67c1388dc
+Size (firefox-l10n-128.0.3/pl.xpi) = 635776 bytes
+BLAKE2s (firefox-l10n-128.0.3/pt-BR.xpi) = 4b2289fb51670a78bc3514f623e6639d849350ca5eb45fcebdc969106ece73fd
+SHA512 (firefox-l10n-128.0.3/pt-BR.xpi) = fbab54fe96f778703ee9ccf5b5c160979171266225c72da30b7a52bb35c7b4274ac3284f72088212ea70da1630d645048231460f409b904ed4b3994e032bd875
+Size (firefox-l10n-128.0.3/pt-BR.xpi) = 622152 bytes
+BLAKE2s (firefox-l10n-128.0.3/pt-PT.xpi) = b1d8be70ce263ae3eaa846b264fb5ab84c93b169b7b07917e9909237406f4e23
+SHA512 (firefox-l10n-128.0.3/pt-PT.xpi) = 98c8416be8020ee5d9240fd04ac653c772b9b98b0aa05f0300445c2dfa858e8c35c5eebe27ac89c3c220be58aac4593e6c3f7136d613e3cc98224cfefba43002
+Size (firefox-l10n-128.0.3/pt-PT.xpi) = 626182 bytes
+BLAKE2s (firefox-l10n-128.0.3/rm.xpi) = 6bbd21612ccd9a34090c78b130e07ec3914880615e8346481f2974157606e61c
+SHA512 (firefox-l10n-128.0.3/rm.xpi) = f18b79781b9fa968ba73451654dec8b942fd501591d6106c5105dc679ec90fdaa93f29c976778aedf9579d4226a760099e18b28eec5a02c14e4b85ed887f65e7
+Size (firefox-l10n-128.0.3/rm.xpi) = 616896 bytes
+BLAKE2s (firefox-l10n-128.0.3/ro.xpi) = fdcced7edc9e8b03819e6875ec20c4cc2d86c0c1a865a1264fa42849720a2301
+SHA512 (firefox-l10n-128.0.3/ro.xpi) = dc73cfde82074a805bb8e7d2c61e5c2de2dce28c5ed9334e5568ea21bfc5a766afd19a0eca576ce64c65d7aa85a34fe8f6099cc32b2c0afa48c62217b0297d69
+Size (firefox-l10n-128.0.3/ro.xpi) = 549799 bytes
+BLAKE2s (firefox-l10n-128.0.3/ru.xpi) = 4a7334572d6ab8fa313d602e34e1e139a0247211e067f49e9c87ba071fc0c383
+SHA512 (firefox-l10n-128.0.3/ru.xpi) = 4f4aee7c7f2a42a0c58f2e8cc6cfaef5a1cbd59332809aeff66735ea11ebcf79b74ee4943c39273d6ab188294e8fff8b7844752fea7848370d852300c958153d
+Size (firefox-l10n-128.0.3/ru.xpi) = 720402 bytes
+BLAKE2s (firefox-l10n-128.0.3/sc.xpi) = 8399bbda13655d82596f8848436c64033cb8065e3b1e61d603976ee56e980cc3
+SHA512 (firefox-l10n-128.0.3/sc.xpi) = e8cf30bc97022c809707ac95b9c15996496487a8a39f84c5b6dd8f00be82ca451ec9d96a779c087b980b19696a807daa672811df76092835b70de46c0cc980f1
+Size (firefox-l10n-128.0.3/sc.xpi) = 588574 bytes
+BLAKE2s (firefox-l10n-128.0.3/sco.xpi) = 652b651723744b142b78340e3b53918c0333fcd3a33ba0954184d3d70fe43934
+SHA512 (firefox-l10n-128.0.3/sco.xpi) = 5f0dcb78644eee646d1bbe3edf86be60cec115cc6524b3700d03bae29998487ab69fe6e3fae6b4375f5c570e667265dd1c7a721182775ae1ea0fb6906fe9f5f5
+Size (firefox-l10n-128.0.3/sco.xpi) = 511285 bytes
+BLAKE2s (firefox-l10n-128.0.3/si.xpi) = a93d47aea1b144abf20ffb4e8d74c6df5d9f0d59a83ccff91061811aa33ab37d
+SHA512 (firefox-l10n-128.0.3/si.xpi) = c85fecc2241629e49158fbdc4aa6312cb9c638984e9772756e65c591bd85b500345848d17f9cb74bde41d997facb40edc982de57f1799c3c48c39039be5005f6
+Size (firefox-l10n-128.0.3/si.xpi) = 611295 bytes
+BLAKE2s (firefox-l10n-128.0.3/sk.xpi) = 70d04cc5fd84d25d6afe4cdc3a8fdf05465a01b9e04f5ddbbae701b152e4e8dd
+SHA512 (firefox-l10n-128.0.3/sk.xpi) = 26b2f72fa22ce32016b4d21a1720170d56f76e969d31b72c9ade58a66cb7390f57083aefc05f5862bbee62a445b05c78ddc510a07277dbb5ec77b9be3f2e35b0
+Size (firefox-l10n-128.0.3/sk.xpi) = 652438 bytes
+BLAKE2s (firefox-l10n-128.0.3/skr.xpi) = 9fd1a94c78797693a884f1b5ee1eedb1609bbdc837a94c5f09dec63d49afe3c0
+SHA512 (firefox-l10n-128.0.3/skr.xpi) = 74c8a291d1f0a18ed23a15921a2ccf398278288a224f399709907bbb16f1d3ddb99ca268a8917edc846ce01b415ddc54305d99a8c53f5cae8514478c86713296
+Size (firefox-l10n-128.0.3/skr.xpi) = 707656 bytes
+BLAKE2s (firefox-l10n-128.0.3/sl.xpi) = f7a8e102f8e98c737148f23a0e32fec816c1670e10b4c87bd7e965a8f8e9e910
+SHA512 (firefox-l10n-128.0.3/sl.xpi) = e63ada63e8218ed4b2fd1c758d2ca8300504e6a5064b80f2b59d0a76fd17b2d11b43b2e5899bfb5bf7a0607971d35ee7b0af2f8d1c9a9486d2588e7cf2d116dd
+Size (firefox-l10n-128.0.3/sl.xpi) = 617396 bytes
+BLAKE2s (firefox-l10n-128.0.3/son.xpi) = 6add007cda883eaba8f29e2f6ab4f209c95aa44f55cf2cdeb9295a5096ca6b03
+SHA512 (firefox-l10n-128.0.3/son.xpi) = 56a350ad3b1ca0b9a5e95c8e0a3af70a7eae12d72a2f2a335d827784941904b94a45373f55a60cd5bd0bcba3fe3532650370d60996169b7ade1b0862fcdbaeb1
+Size (firefox-l10n-128.0.3/son.xpi) = 416404 bytes
+BLAKE2s (firefox-l10n-128.0.3/sq.xpi) = d11cad8f5beb97696a8dd2de473f93e41c6564f9ecc8b5d434ec93d3a5e5f6b0
+SHA512 (firefox-l10n-128.0.3/sq.xpi) = f698b489aca4fc639d3721c2b06111854c7be97672900384e118a25b1273e122b303e607439ccc850946f6bbed0c8f4e801c6cbc48cf953a1f05d8062d7fb8df
+Size (firefox-l10n-128.0.3/sq.xpi) = 636981 bytes
+BLAKE2s (firefox-l10n-128.0.3/sr.xpi) = 23725c561326c96da4e8a9fb4e91d3e237ee18fb75147ea06f98e7ccc2dca009
+SHA512 (firefox-l10n-128.0.3/sr.xpi) = c5f6f347315f789fdce11927a0b139f0a43cfb93289bea7794977f158e4147d5f47c67d5c8c0e3a87e055d92f5b466c9d164aad210bca4d18fe9efb062d156ab
+Size (firefox-l10n-128.0.3/sr.xpi) = 639353 bytes
+BLAKE2s (firefox-l10n-128.0.3/sv-SE.xpi) = e2857e6a9b073c104e9536a4de333d07f9629ba0e89e90f8cc8598462ae86bab
+SHA512 (firefox-l10n-128.0.3/sv-SE.xpi) = b2595d15df36bbc4192c72d274fb1f8511e5098edb8eeaedd26df10059ab542dd5694d1d3bb429b6610badba5c5528059e015a07f41ceee30efca83f65e00cfa
+Size (firefox-l10n-128.0.3/sv-SE.xpi) = 619123 bytes
+BLAKE2s (firefox-l10n-128.0.3/szl.xpi) = 6ac3e9024c96d1a8b7c2fea8adf638acdb519910633e4f6e7ffc12e6f252ec7e
+SHA512 (firefox-l10n-128.0.3/szl.xpi) = 898794f23ae188436d35ff05d5f4c7e817c7f7537c6056952d1a06abd15746628a2841d0933d00fc883cccf2e0268f104c271b873c138593f86373ebbb93bb61
+Size (firefox-l10n-128.0.3/szl.xpi) = 526394 bytes
+BLAKE2s (firefox-l10n-128.0.3/ta.xpi) = 2c1ef2e8182e5c7d639839670e8133edb5aa318a2e9bd8a8f37f4d904821c3b8
+SHA512 (firefox-l10n-128.0.3/ta.xpi) = 2a1fa7ebe9a2043a592e4601a6c300779e7770298d2c2df0a0113cf12bd044cf90c3fa7ffb8eac18260a1ad6b25bb2da66b0ea6a490310958193b25007591d7f
+Size (firefox-l10n-128.0.3/ta.xpi) = 507521 bytes
+BLAKE2s (firefox-l10n-128.0.3/te.xpi) = 4993ad27ac264353ae9e84e0838c6a0870ac0c72ff3163378d52c42f5289d07d
+SHA512 (firefox-l10n-128.0.3/te.xpi) = 0e4d6cebbd33433eceee64eab8b40f1e36bb344e15e55328efe13177fb63fdc275bba266688cb45e8481ac5e713ff3e5317d4daf4ee313e411bf5b79bb0bf854
+Size (firefox-l10n-128.0.3/te.xpi) = 561028 bytes
+BLAKE2s (firefox-l10n-128.0.3/th.xpi) = c25b588d267ca0ce806c3b36778b3440a305cc12270b14f6dd70e19182a3ddff
+SHA512 (firefox-l10n-128.0.3/th.xpi) = f8358f8d5011ae2bef783aa2171b42798eae4dde7f8ef62391769c12c392ebf367c3f9a2a222fde1aab22066e010de7e04ccbc1f660ead14067b2fc944d4808f
+Size (firefox-l10n-128.0.3/th.xpi) = 693562 bytes
+BLAKE2s (firefox-l10n-128.0.3/tl.xpi) = 7218754814f7f43a482d835200e770fea77f02b70c95fdd6e054f7ed0afd40d1
+SHA512 (firefox-l10n-128.0.3/tl.xpi) = 3c44d168d8890390b698383564a8ef9750fbb6fd0caf344c4f3deb91249aa0093b891997657a99b62abb694ba097f305fd65abbbb600f69ac3e653ce5b37230a
+Size (firefox-l10n-128.0.3/tl.xpi) = 534190 bytes
+BLAKE2s (firefox-l10n-128.0.3/tr.xpi) = 412bb8c7d327654d346cc222ddb111ae70bc519a44d6eb6c308f20727cc33b11
+SHA512 (firefox-l10n-128.0.3/tr.xpi) = 2b82e6ff9af985a59eb58da37655064e036211a7d1f1e7edad5c9fe5a898ff30d949bde31a151b0748867c9b6e9811a0f6089322f7f0898a90865d2df966a2b8
+Size (firefox-l10n-128.0.3/tr.xpi) = 632468 bytes
+BLAKE2s (firefox-l10n-128.0.3/trs.xpi) = cb1b6f475c8f68d63f077722799504f8c915acaca117c74a0a71476c394e821e
+SHA512 (firefox-l10n-128.0.3/trs.xpi) = 56d999fa864a8ae752e011b1aca21f68141890d8182af58d03485cc77f35cf257ff3e98b95f1fe4ec096b6ae641729209f04e8fa1f9d3c0b842d264dc0fb7a77
+Size (firefox-l10n-128.0.3/trs.xpi) = 503974 bytes
+BLAKE2s (firefox-l10n-128.0.3/uk.xpi) = 448877a46e1c12f348b76f7615b0e71d2428f0e40cd01df1c3204ade78726afe
+SHA512 (firefox-l10n-128.0.3/uk.xpi) = 200a906734dab6adb054ec835b9cf378fd7edec2021a9979dc7ef910c179ab04434a7941c2b08929a9a7a238e423ba02b167e2673156da66c29f981088df1a32
+Size (firefox-l10n-128.0.3/uk.xpi) = 707283 bytes
+BLAKE2s (firefox-l10n-128.0.3/ur.xpi) = 21e8c9b2ecbadfe061716b0d9610379096364bcb54e22f0f01e0a6ffa6014607
+SHA512 (firefox-l10n-128.0.3/ur.xpi) = 0d30c97debe0bd3690b6938204ee5c079df0df3cac7ce5131bd316b62a048690a3511fe553b44bb6fe0871582c689940f40e5f6e9c1408d8ea739f48af7d4975
+Size (firefox-l10n-128.0.3/ur.xpi) = 560478 bytes
+BLAKE2s (firefox-l10n-128.0.3/uz.xpi) = 7c0363672d87729e8d189eaeb90a89639b74c5ed281654e2966a7a6df08d1dd3
+SHA512 (firefox-l10n-128.0.3/uz.xpi) = 12ca3b256fce234c683d9294dc612dcb50c5d69d2ae98e01d9e5fa91987fcd13f4d08c6be103cd9c76e39f5776f2a8de02c122971e34fcfb0627f38502729bad
+Size (firefox-l10n-128.0.3/uz.xpi) = 478785 bytes
+BLAKE2s (firefox-l10n-128.0.3/vi.xpi) = 2fe6c00ddd38d2379f7f466a210afa2e6e993e453484d5cec574c24c06233529
+SHA512 (firefox-l10n-128.0.3/vi.xpi) = 0d23d23da8cdcbe4005fabf53104d4502cf6bce0e13ea8c9acdab8f5e0dbb01a62e3987ff83fdc0f99a2c8c5b00c6fced52b44878440d5c4a100bef370598220
+Size (firefox-l10n-128.0.3/vi.xpi) = 655581 bytes
+BLAKE2s (firefox-l10n-128.0.3/xh.xpi) = 844a30260de7873ea20254b4d69392eb44f07af2ecd0b4b064b83d89c7a8558e
+SHA512 (firefox-l10n-128.0.3/xh.xpi) = 82504106fb3908a4d8654addad204506a44529658f00cc9f4efdd9fa5bcaccf340642e1f5f5c36353173846eaa9b9c8483b4d59bd7d43c31c6d03c21a650ce54
+Size (firefox-l10n-128.0.3/xh.xpi) = 417171 bytes
+BLAKE2s (firefox-l10n-128.0.3/zh-CN.xpi) = 608b3ae2dc7b2a9d564f3b26c514f4b336755f2d83afcf8ac5c90367fab6c6bb
+SHA512 (firefox-l10n-128.0.3/zh-CN.xpi) = 8ff9a0c898c344182c1e0eca16b3adb47fea59c47a71ce5e1fa12ef02275e9204919eeec552641973704bc4e20b5f405bf6152192f4fce9d756c975b67bcb5e0
+Size (firefox-l10n-128.0.3/zh-CN.xpi) = 657105 bytes
+BLAKE2s (firefox-l10n-128.0.3/zh-TW.xpi) = 44c873cced0787d8fc9822df144742406b45dc038310cbb4782fc9e023f8388f
+SHA512 (firefox-l10n-128.0.3/zh-TW.xpi) = 3afcf932e426fd3673f90fd1f8fb7f974f03d1821da6907768d50f755c5e59a0c80564ba7884a925d07ca2f53ee3980f11e802723c2a07dcc1c731aa650456bf
+Size (firefox-l10n-128.0.3/zh-TW.xpi) = 659225 bytes
diff --git a/firefox128-l10n/list-licenses.mk b/firefox128-l10n/list-licenses.mk
new file mode 100644
index 0000000000..a541893a2e
--- /dev/null
+++ b/firefox128-l10n/list-licenses.mk
@@ -0,0 +1,37 @@
+# $NetBSD: list-licenses.mk,v 1.1 2019/11/30 22:14:39 rillig Exp $
+#
+# list-licenses:
+#	Downloads the addon page of each language pack to determine the
+#	license.
+#
+#	As of Firefox 70, the license information is not included in the
+#	.xpi files themselves, therefore this seemed to be the best
+#	alternative.
+
+TOOL_DEPENDS+=	curl-[0-9]*:../../www/curl
+USE_TOOLS+=	perl
+
+# To declare WRKDIR; WRKSRC is still undefined.
+.include "../../mk/bsd.prefs.mk"
+
+list-licenses: .PHONY
+
+.for locale in ${FIREFOX_LOCALES}
+${WRKDIR}/${locale}.html:
+	${RUN} \
+	url="https://addons.mozilla.org/en-US/firefox/addon/langpack-${locale}@firefox.mozilla.org";; \
+	${PREFIX}/bin/curl -ksSL "$$url" > ${.TARGET}.tmp; \
+	${MV} ${.TARGET}.tmp ${.TARGET}
+
+${WRKDIR}/${locale}.license: ${WRKDIR}/${locale}.html
+	# Cannot use sed here since nbsed cannot handle long lines.
+	# It gets caught in a seemingly endless loop.
+	${RUN} ${PREFIX}/bin/perl -ne 'print "$$1\n" if /class="AddonMoreInfo-license-link" href="([^"]*)"/' \
+		< ${WRKDIR}/${locale}.html > ${.TARGET}.tmp \
+	&& ${MV} ${.TARGET}.tmp ${.TARGET}
+
+list-licenses: show-license-${locale}
+
+show-license-${locale}: .PHONY ${WRKDIR}/${locale}.license
+	${RUN} printf '%s\t%s\n' ${locale:Q} "`${CAT} ${WRKDIR}/${locale}.license`"
+.endfor
diff --git a/firefox128/DESCR b/firefox128/DESCR
new file mode 100644
index 0000000000..6bfb590d10
--- /dev/null
+++ b/firefox128/DESCR
@@ -0,0 +1,13 @@
+Mozilla Firefox is a free, open-source and cross-platform web browser
+for Windows, Linux, MacOS X and many other operating systems.
+
+It is fast and easy to use, and offers many advantages over other web
+browsers, such as tabbed browsing and the ability to block pop-up
+windows.
+
+Firefox also offers excellent bookmark and history management, and it
+can be extended by developers using industry standards such as XML,
+CSS, JavaScript, C++, etc. Many extensions are available.
+
+Note: Due to upstream's trademark policies, this package identifies as
+"Nightly" rather than "Firefox" by default.
diff --git a/firefox128/Makefile b/firefox128/Makefile
new file mode 100644
index 0000000000..ba7d2f249e
--- /dev/null
+++ b/firefox128/Makefile
@@ -0,0 +1,196 @@
+# $NetBSD: Makefile,v 1.605 2024/08/01 15:41:09 ryoon Exp $
+
+FIREFOX_VER=		${MOZ_BRANCH}${MOZ_BRANCH_MINOR}
+MOZ_BRANCH=		128.0
+MOZ_BRANCH_MINOR=	.3
+
+DISTNAME=	firefox-${FIREFOX_VER}.source
+PKGNAME=	${DISTNAME:S/.source//:S/b/beta/:S/esr//}
+CATEGORIES=	www
+MASTER_SITES+=	${MASTER_SITE_MOZILLA:=firefox/releases/${FIREFOX_VER}/source/}
+MASTER_SITES+=	${MASTER_SITE_MOZILLA_ALL:=firefox/releases/${FIREFOX_VER}/source/}
+EXTRACT_SUFX=	.tar.xz
+
+NODEJSKIT=		nodejs-output-128.0.tgz
+DISTFILES=		${DEFAULT_DISTFILES} ${NODEJSKIT}
+SITES.${NODEJSKIT}=	${MASTER_SITE_LOCAL}
+
+MAINTAINER=	ryoon%NetBSD.org@localhost
+HOMEPAGE=	https://www.mozilla.org/en-US/firefox/
+COMMENT=	Web browser with support for extensions (version ${FIREFOX_VER:tu:C/\\.[[:digit:]\.]*//})
+LICENSE=	mpl-1.1
+
+# -------- BEFORE UPDATING THIS PACKAGE PLEASE READ & UNDERSTAND: -------
+#
+# This package works around a (stupid) build time dependency on nodejs
+# (which is not available for all architectures and unnecessary for the
+# real build). To do this, it places some additional burden on the
+# maintainer.
+#
+# While working on the package, please make sure you have
+#
+#	FIREFOX_MAINTAINER=yes
+#
+# set in your build environment.
+# When the package is ready for commit (but before commit), do:
+#
+#	make maintainer-files
+#
+# This will do another round (depending on state of your work dir at this
+# moment) of one or two builds and generate a cache of all output that
+# nodejs generates during a build.
+#
+# When this is done, just commit the results (they will be in the files/
+# directory).
+#
+# -----------------------------------------------------------------------
+
+WRKSRC=		${WRKDIR}/firefox-${FIREFOX_VER:C/b.*//}
+
+MOZILLA_DIR=	# empty
+
+# Note: In --enable-chrome-format=flat case,
+#       when updating remember to conditionalise about-background.png in PLIST
+CONFIGURE_ARGS+=	--enable-application=browser
+
+#CFLAGS+=	-I${PREFIX}/include/nspr
+# for lang/gcc6
+CFLAGS+=	-D_GLIBCXX_INCLUDE_NEXT_C_HEADERS
+CFLAGS.SunOS+=	-D_POSIX_PTHREAD_SEMANTICS
+# Do not use uselocale() in third_party/pipewire.
+CFLAGS.NetBSD+=	-D__LOCALE_C_ONLY
+
+LDFLAGS+=		${COMPILER_RPATH_FLAG}${PREFIX}/lib/${PKGBASE}
+LDFLAGS+=		${COMPILER_RPATH_FLAG}${PREFIX}/lib
+LDFLAGS.DragonFly+=	-lplc4 -lnspr4
+LDFLAGS.FreeBSD+=	-lplc4 -lnspr4
+LDFLAGS.Linux+=		-lnspr4
+LDFLAGS.SunOS+=		-lm
+
+# Should revisit to complete mprotect support.
+NOT_PAX_MPROTECT_SAFE+=	lib/${PKGBASE}/firefox
+NOT_PAX_MPROTECT_SAFE+=	lib/${PKGBASE}/firefox-bin
+
+# Avoid ld "invalid section index" errors.
+BUILDLINK_TRANSFORM.SunOS+=	rm:-fdata-sections
+BUILDLINK_TRANSFORM.SunOS+=	rm:-ffunction-sections
+BUILDLINK_TRANSFORM.SunOS+=	rm:-pie
+
+BUILDLINK_TRANSFORM.SunOS+=	rm:-Wl,-rpath-link,${WRKDIR}/build/dist/bin
+BUILDLINK_TRANSFORM.SunOS+=	rm:-Wl,-rpath-link,${PREFIX}/lib
+
+# Workaround for https://bugs.llvm.org/show_bug.cgi?id=46366
+BUILDLINK_TRANSFORM.NetBSD+=	rm:-fexperimental-new-pass-manager
+
+SUBST_CLASSES+=			dfly_malloc_h
+SUBST_STAGE.dfly_malloc_h=	pre-configure
+SUBST_MESSAGE.dfly_malloc_h=	Dont include malloc.h on dragonflybsd
+SUBST_SED.dfly_malloc_h=	-e 's,HAVE_MALLOC_H,HAVE_MALLOC_H \&\& !defined(__DragonFly__),g'
+SUBST_FILES.dfly_malloc_h+=	media/ffvpx/libavutil/mem.c
+
+SUBST_CLASSES+=			paths
+SUBST_STAGE.paths=		pre-configure
+SUBST_FILES.paths=		../firefox.sh
+SUBST_VARS.paths=		PREFIX MOZILLA
+
+.include "mozilla-common.mk"
+.include "options.mk"
+
+CHECK_INTERPRETER_SKIP+=	lib/firefox-sdk/sdk/bin/header.py
+CHECK_INTERPRETER_SKIP+=	lib/firefox-sdk/sdk/bin/typelib.py
+CHECK_INTERPRETER_SKIP+=	lib/firefox-sdk/sdk/bin/xpidl.py
+CHECK_INTERPRETER_SKIP+=	lib/firefox-sdk/sdk/bin/xpt.py
+
+CHECK_WRKREF_SKIP+=	lib/${MOZILLA}/omni.ja
+
+MOZILLA=	${PKGBASE}
+
+.if !empty(PKG_OPTIONS:Mofficial-mozilla-branding)
+MOZILLA_NAME=		Firefox
+MOZILLA_BRANDING=	official
+.else
+MOZILLA_NAME=		Browser
+MOZILLA_BRANDING=	unofficial
+.endif
+
+pre-configure:
+# As of 106.0, .in template files are not patched.
+#	cd ${WRKSRC} && autoconf
+#	cd ${WRKSRC}/js/src && autoconf
+	cd ${WRKSRC} && mkdir ${OBJDIR}
+	cd ${WRKSRC}/${OBJDIR} && touch old-configure.vars
+#	Do not fetch Rust Cargo file via network during build
+.if !defined(FIREFOX_MAINTAINER)
+	mv ${WRKDIR}/dist ${WRKSRC}/${OBJDIR}
+.endif
+
+.if defined(FIREFOX_MAINTAINER)
+# Create files needed only by the firefox maintainer when updating
+# the package
+# XXX - manually removing the .*_done files is wrong!
+.PHONY: build-list
+build-list:
+	cd ${WRKSRC}/${OBJDIR}/dist/bin/browser/chrome && \
+		find . -type f | sort > ${OUT:Q}
+
+NODE_LIST=	"${WRKDIR}/node.list"
+NO_NODE_LIST=	"${WRKDIR}/no-node.list"
+NODE_FILES=	"${WRKDIR}/node.flist"
+
+.PHONY: maintainer-files
+maintainer-files:
+	rm -f ${FILESDIR}/node-wrapper.sh
+	V=$$( node -v ) && \
+	    printf '#! /bin/sh\n\nVERS=%s\n\nif [ "$$1" = "-v" ] || [ "$$1" = "--version" ]; then\n\tprintf "$${VERS}\\n"\nfi\n\nexit 0\n' $$V \
+	    > ${FILESDIR}/node-wrapper.sh && \
+	    chmod 0755 ${FILESDIR}/node-wrapper.sh
+	rm -f ${WRKDIR}/.build_done ${WRKDIR}/.configure_done
+	${MAKE} MAINTAINER_INTERNAL=yes build
+	${MAKE} MAINTAINER_INTERNAL=yes OUT="${NO_NODE_LIST}" build-list
+	${MAKE} OUT="${NODE_LIST}" build-list
+	${DIFF} -u "${NO_NODE_LIST}" "${NODE_LIST}" | \
+	    ${AWK} \
+	    '/^\+\.\//{ printf("dist/bin/browser/chrome/%s\n", gensub(/^\+\.\//, "", "")) }' \
+	    > "${NODE_FILES}"
+	cd ${WRKSRC}/${OBJDIR} && tar -c -T "${NODE_FILES}" -z \
+	    -f ${FILESDIR}/nodejs-output-${PKGVERSION_NOREV}.tgz
+.endif
+
+pre-patch:
+	for f in $$(find ${WRKSRC}/third_party/libwebrtc -name moz.build -type f) ; \
+	do \
+		${AWK} -f ${FILESDIR}/replace-moz.build.awk $$f > $$f.new; mv $$f.new $$f ; \
+	done
+
+post-build:
+	${SED} -e 's|@MOZILLA@|${MOZILLA}|g'				\
+	  -e 's|@MOZILLA_NAME@|${MOZILLA_NAME}|g'			\
+	  -e 's|@FIREFOX_ICON@|${MOZILLA}|g'				\
+	  < ${FILESDIR}/desktop.in					\
+	  > ${WRKDIR}/desktop
+
+INSTALLATION_DIRS+=	share/applications
+
+post-extract:
+	${CP} ${FILESDIR}/firefox.sh ${WRKDIR}/firefox.sh
+
+post-install:
+.if ${OPSYS} == "NetBSD" && ${X11_TYPE} == "native"
+	${INSTALL_SCRIPT} ${WRKDIR}/firefox.sh ${DESTDIR}${PREFIX}/bin/${MOZILLA}
+.else
+	${ECHO} '#! /bin/sh' > ${DESTDIR}${PREFIX}/bin/${MOZILLA}
+	${ECHO} '${PREFIX}/lib/${MOZILLA}/${MOZILLA} "$$@"' >> \
+		${DESTDIR}${PREFIX}/bin/${MOZILLA}
+	${CHMOD} 755 ${DESTDIR}${PREFIX}/bin/${MOZILLA}
+.endif
+	${INSTALL_DATA} ${WRKDIR}/desktop				\
+	  ${DESTDIR}${PREFIX}/share/applications/${MOZILLA}.desktop
+.for i in 16 22 24 32 48 64 128 256
+	${INSTALL_DATA_DIR} ${DESTDIR}${PREFIX}/share/icons/hicolor/${i}x${i}/apps
+	${INSTALL_DATA} ${WRKSRC}/browser/branding/${MOZILLA_BRANDING}/default${i}.png \
+	  ${DESTDIR}${PREFIX}/share/icons/hicolor/${i}x${i}/apps/${MOZILLA}.png
+.endfor
+
+.include "../../graphics/hicolor-icon-theme/buildlink3.mk"
+.include "../../sysutils/desktop-file-utils/desktopdb.mk"
+.include "../../mk/bsd.pkg.mk"
diff --git a/firefox128/PLIST b/firefox128/PLIST
new file mode 100644
index 0000000000..207539e83a
--- /dev/null
+++ b/firefox128/PLIST
@@ -0,0 +1,46 @@
+@comment $NetBSD: PLIST,v 1.188 2023/11/09 00:04:43 wiz Exp $
+bin/firefox
+lib/firefox/application.ini
+lib/firefox/browser/chrome/icons/default/default128.png
+lib/firefox/browser/chrome/icons/default/default16.png
+lib/firefox/browser/chrome/icons/default/default32.png
+lib/firefox/browser/chrome/icons/default/default48.png
+lib/firefox/browser/chrome/icons/default/default64.png
+lib/firefox/browser/features/formautofill%mozilla.org.xpi@localhost
+lib/firefox/browser/features/pictureinpicture%mozilla.org.xpi@localhost
+lib/firefox/browser/features/screenshots%mozilla.org.xpi@localhost
+lib/firefox/browser/features/webcompat-reporter%mozilla.org.xpi@localhost
+lib/firefox/browser/features/webcompat%mozilla.org.xpi@localhost
+lib/firefox/browser/omni.ja
+lib/firefox/defaults/pref/channel-prefs.js
+lib/firefox/dependentlibs.list
+lib/firefox/firefox
+lib/firefox/firefox-bin
+lib/firefox/fonts/TwemojiMozilla.ttf
+lib/firefox/glxtest
+lib/firefox/gmp-clearkey/0.1/libclearkey.so
+lib/firefox/gmp-clearkey/0.1/manifest.json
+lib/firefox/libgkcodecs.so
+lib/firefox/libipcclientcerts.so
+lib/firefox/liblgpllibs.so
+${PLIST.ffvpx}lib/firefox/libmozavcodec.so
+${PLIST.ffvpx}lib/firefox/libmozavutil.so
+lib/firefox/libmozgtk.so
+lib/firefox/libmozsqlite3.so
+${PLIST.wayland}lib/firefox/libmozwayland.so
+lib/firefox/libxul.so
+lib/firefox/omni.ja
+lib/firefox/pingsender
+lib/firefox/platform.ini
+lib/firefox/removed-files
+${PLIST.v4l2_decode}lib/firefox/v4l2test
+lib/firefox/vaapitest
+share/applications/firefox.desktop
+share/icons/hicolor/128x128/apps/firefox.png
+share/icons/hicolor/16x16/apps/firefox.png
+share/icons/hicolor/22x22/apps/firefox.png
+share/icons/hicolor/24x24/apps/firefox.png
+share/icons/hicolor/256x256/apps/firefox.png
+share/icons/hicolor/32x32/apps/firefox.png
+share/icons/hicolor/48x48/apps/firefox.png
+share/icons/hicolor/64x64/apps/firefox.png
diff --git a/firefox128/PLIST.Linux b/firefox128/PLIST.Linux
new file mode 100644
index 0000000000..5bf6fb813c
--- /dev/null
+++ b/firefox128/PLIST.Linux
@@ -0,0 +1,2 @@
+@comment $NetBSD: PLIST.Linux,v 1.4 2021/08/21 22:53:00 mcf Exp $
+lib/firefox/libmozsandbox.so
diff --git a/firefox128/distinfo b/firefox128/distinfo
new file mode 100644
index 0000000000..b6cfd1afb0
--- /dev/null
+++ b/firefox128/distinfo
@@ -0,0 +1,48 @@
+$NetBSD: distinfo,v 1.535 2024/08/01 15:41:09 ryoon Exp $
+
+BLAKE2s (firefox-128.0.3.source.tar.xz) = 7e30e975b8627c54df7df00dd68afe64cbc8afdf0376f490ea27da52888e0c1f
+SHA512 (firefox-128.0.3.source.tar.xz) = 52a0a1a6fa653f5a621a9e16e1937760c05a5ebc81a058ecc16b2c3d29d09d418dc5129deabed86ad2f82abdb3100969478a67f48b11616dc3b3e3698a1acf51
+Size (firefox-128.0.3.source.tar.xz) = 563698520 bytes
+BLAKE2s (nodejs-output-128.0.tgz) = a55b907ebe308948b99b9150d2530204c8fe2a5fda5ac371dd1163a6db43bcbc
+SHA512 (nodejs-output-128.0.tgz) = fba59ec14c43556749cac7a9233278e8dcd7779d5ba530ede67009bf1887c5d72dd31e3f440164b646738b465d852b882522caf7ed9aa4f81f53e588bdd3adec
+Size (nodejs-output-128.0.tgz) = 227482 bytes
+SHA1 (patch-browser_app_profile_firefox.js) = bc719edef37d18655ba79b030270438ee166fdaf
+SHA1 (patch-build_moz.configure_init.configure) = 65deb3c233df0aab81eb1fca05d708e5a4ed169a
+SHA1 (patch-build_moz.configure_rust.configure) = 25ddfacd29cebbc6db005dbe61a2a7446d480678
+SHA1 (patch-config_gcc-stl-wrapper.template.h) = 9d1f15ff487efa9202114d19ed5668b4e7aa032a
+SHA1 (patch-config_makefiles_rust.mk) = 95184af03c73ac732b6a7377efda8a0c3fc3bff2
+SHA1 (patch-dom_base_nsAttrName.h) = ac7ba441a3b27df2855cf2673eea36b1cb44ad49
+SHA1 (patch-dom_webtransport_api_WebTransportDatagramDuplexStream.cpp) = b93b4c6367bd2fb3d1868ab7d97ca56c100be414
+SHA1 (patch-gfx_angle_checkout_src_common_third__party_smhasher_src_PMurHash.cpp) = e458c9c8dc66edc69c1874734af28a77fc5e3993
+SHA1 (patch-gfx_angle_checkout_src_compiler_translator_InfoSink.h) = b2adce9e65662283a11b6dcff40e95523e940045
+SHA1 (patch-gfx_wr_swgl_build.rs) = df6ebfaabb4d27994e59a9d0eaf12c7cf08415fb
+SHA1 (patch-intl_lwbrk_LineBreaker.cpp) = e2eaf7d66f1255ba5baf7f7edadbb1fa8cb39b13
+SHA1 (patch-ipc_chromium_src_base_message__pump__libevent.cc) = 298642a3527804115b398fb7904a3596962932e3
+SHA1 (patch-ipc_chromium_src_base_platform__thread__posix.cc) = 753bb4e90758f5b42a51bbc073b328de673988cf
+SHA1 (patch-ipc_glue_GeckoChildProcessHost.cpp) = 63fbee04321f7ade20db4ccc1a1218b848344ce1
+SHA1 (patch-js-src-jit-arm64-vixl-MozCpu-vixl.cpp) = d90fca47d79551fd74214d47f8184670b901b792
+SHA1 (patch-js_public_Utility.h) = 0ae3d60c97358791b5d5dc2538f9c5969e06be45
+SHA1 (patch-js_src_jit_FlushICache.cpp) = d1e611eaf7d7be22abfac6b39fbcd99df3570e47
+SHA1 (patch-js_src_old-configure.in) = 589e24765615ede2c3c6abfe0b3529c5645193ed
+SHA1 (patch-js_src_util_NativeStack.cpp) = a0a16d8d8d78d3cc3f4d2a508586f1a7821f7dba
+SHA1 (patch-media_ffvpx_libavutil_arm_bswap.h) = de58daa0fd23d4fec50426602b65c9ea5862558a
+SHA1 (patch-media_libpng_pngpriv.h) = 8320a1f7534ed5c4914b597bb3d6117d0060318f
+SHA1 (patch-media_libtheora_lib_info.c) = f6dbf536d73859a1ff78304c2e9f6a6f74dac01f
+SHA1 (patch-modules_fdlibm_src_math__private.h) = e20b6c23011d7123cbbd64a500eb8ce8c426620e
+SHA1 (patch-netwerk_protocol_http_nsHttpHandler.cpp) = 8e1d9a0746b637f5f4259e448e72172cfb08b23f
+SHA1 (patch-nsprpub_pr_src_pthreads_ptsynch.c) = b0d1f6a6e0eb852b0fd0238ad3f8ed3166c60a50
+SHA1 (patch-security_nss_lib_freebl_mpi_mpi.c) = a7cd867916524770609d1c307a65b315b88456f4
+SHA1 (patch-third__party_js_cfworker_build.sh) = 46cdf97b99cf01080f290ae8d9a33b5f869fc3e4
+SHA1 (patch-third__party_libwebrtc_modules_desktop__capture_desktop__capture__gn_moz.build) = d0454784eb72be49162f619579e060a0de3c480f
+SHA1 (patch-third__party_libwebrtc_modules_desktop__capture_linux_wayland_egl__dmabuf.cc) = 455be625b5de2f6f1f4b2dbb6c8cb33ca16c2583
+SHA1 (patch-third__party_libwebrtc_modules_video__capture_linux_device__info__v4l2.cc) = 4cb0e1c88dc83370024ed1aac7f75445b9f98df8
+SHA1 (patch-third__party_libwebrtc_modules_video__capture_linux_video__capture__v4l2.cc) = 8111952a107eb2cd665525ddd0e27c79eee3c1cd
+SHA1 (patch-third__party_libwebrtc_rtc__base_physical__socket__server.cc) = 6909c4da9e7b3785252e5bce9be0ff47ebb87e01
+SHA1 (patch-third__party_libwebrtc_system__wrappers_source_cpu__features__linux.cc) = b90e22b50879f7adcc1da3a993f52c0701b720f8
+SHA1 (patch-third__party_sqlite3_src_moz.build) = b26856a4b87aa12211575d9982f62dc899474b52
+SHA1 (patch-third__party_wasm2c_src_prebuilt_wasm2c__source__includes.cc) = 99d0db944f0c2d0c623460991efd423d9127c988
+SHA1 (patch-toolkit_components_terminator_nsTerminator.cpp) = e905e38ef1b88d764c695c019f15609350c1c43b
+SHA1 (patch-toolkit_moz.configure) = 1306e7ac3c3939886aff38a58dd3162e6517409b
+SHA1 (patch-toolkit_mozapps_installer_packager.mk) = 706635b76a7b525794aba95e95544f09e18bb662
+SHA1 (patch-xpcom_base_nscore.h) = 1ac4d34d3c9e80bc1ac966c6c84cb320bc0fa1ec
+SHA1 (patch-xpcom_reflect_xptcall_md_unix_moz.build) = 8980398051fa16c7283acb6d323419993cce1420
diff --git a/firefox128/files/desktop.in b/firefox128/files/desktop.in
new file mode 100644
index 0000000000..d72090e1aa
--- /dev/null
+++ b/firefox128/files/desktop.in
@@ -0,0 +1,191 @@
+[Desktop Entry]
+Encoding=UTF-8
+Name=@MOZILLA_NAME@ Web Browser
+Name[am]=
+Name[ar]=
+Name[az]=@MOZILLA_NAME@ Veb Səyyahı
+Name[be]=
+Name[bg]=Интернет браузър @MOZILLA_NAME@
+Name[bn]=
+Name[bs]=@MOZILLA_NAME@ web preglednik
+Name[ca]=Navegador web @MOZILLA_NAME@
+Name[cs]=Prohlížeč WWW @MOZILLA_NAME@
+Name[cy]=Y Porwr Gwe @MOZILLA_NAME@
+Name[da]=@MOZILLA_NAME@ - internetsurfning
+Name[de]=@MOZILLA_NAME@ Webbrowser
+Name[el]=Περιηγητής Διαδικτύου @MOZILLA_NAME@
+Name[en_CA]=@MOZILLA_NAME@ Web Browser
+Name[en_GB]=@MOZILLA_NAME@ Web Browser
+Name[es]=Navegador Web @MOZILLA_NAME@
+Name[et]=@MOZILLA_NAME@ veebibrauser
+Name[eu]=@MOZILLA_NAME@ web arakatzailea
+Name[fi]=@MOZILLA_NAME@, WWW-selain
+Name[fr]=Navigateur Web @MOZILLA_NAME@
+Name[ga]=Brabhsálaí Lín @MOZILLA_NAME@
+Name[gu]=એપીફની વૅબ બ્રાઉઝર
+Name[he]=דפדפן @MOZILLA_NAME@
+Name[hi]=
+Name[hr]=@MOZILLA_NAME@ Web preglednik
+Name[hu]=@MOZILLA_NAME@ webböngésző
+Name[id]=Web Browser @MOZILLA_NAME@
+Name[it]=Browser web @MOZILLA_NAME@
+Name[ja]=@MOZILLA_NAME@ ウェブ・ブラウザ
+Name[ko]=@MOZILLA_NAME@ 웹 브라우저
+Name[li]=@MOZILLA_NAME@ Web Browser
+Name[lt]=@MOZILLA_NAME@ web naršyklė
+Name[mk]=@MOZILLA_NAME@ веб прелистувач
+Name[ml]=എപ്പിഫാനി വെബ്ബ് ബ്രൌസ‌ര്
+Name[mn]=@MOZILLA_NAME@ веб хөтөч
+Name[ms]=Pelungsur Web @MOZILLA_NAME@
+Name[nb]=@MOZILLA_NAME@ nettleser
+Name[nl]=@MOZILLA_NAME@ Webbrowser
+Name[nn]=@MOZILLA_NAME@ nettlesar
+Name[no]=@MOZILLA_NAME@ nettleser
+Name[pa]=ਏਪੀਫਾਨੀ ਵੈੱਬ ਬਰਾਊਜ਼ਰ
+Name[pl]=Przeglądarka WWW @MOZILLA_NAME@
+Name[pt]=Navegador Web @MOZILLA_NAME@
+Name[pt_BR]=Navegador Web @MOZILLA_NAME@
+Name[ro]=Navigatorul @MOZILLA_NAME@
+Name[ru]=Веб-браузер @MOZILLA_NAME@
+Name[sk]=
+Name[sl]=Spletni brskalnik @MOZILLA_NAME@
+Name[sq]=@MOZILLA_NAME@ - Shfletuesi Web
+Name[sr]=
+Name[sr@Latn]=Veb čitač Spoznaja
+Name[sv]=Webbläsaren @MOZILLA_NAME@
+Name[ta]=எபிபனி வலை உலாவி
+Name[tk]=@MOZILLA_NAME@ Web Ahtarçisi
+Name[tr]=@MOZILLA_NAME@ Web Tarayıcı
+Name[uk]=Переглядач web @MOZILLA_NAME@
+Name[vi]=Trình Duyệt Web @MOZILLA_NAME@
+Name[wa]=Betchteu waibe epiphany
+Name[zh_CN]=@MOZILLA_NAME@ Web 浏览器
+Name[zh_TW]=@MOZILLA_NAME@ 網頁瀏覽器
+GenericName=Web Browser
+GenericName[ar]=متصفّح الانترنت
+GenericName[az]=Veb Səyyahı
+GenericName[be]=Вандроўнік па павуціньню
+GenericName[bg]=Браузър
+GenericName[bn]=ওয়েব ব্রাউজার
+GenericName[bs]=Web preglednik
+GenericName[ca]=Navegador web
+GenericName[cs]=Prohlížeč WWW
+GenericName[cy]=Porwr Gwe
+GenericName[da]=Internetsurfning
+GenericName[de]=Webbrowser
+GenericName[el]=Περιηγητής Ιστοσελίδων
+GenericName[en_CA]=Web Browser
+GenericName[en_GB]=Web Browser
+GenericName[es]=Navegador web
+GenericName[et]=Veebilehitseja
+GenericName[eu]=Web arakatzailea
+GenericName[fi]=WWW-selain
+GenericName[fr]=Navigateur Web @MOZILLA_NAME@
+GenericName[ga]=Brabhsálaí Lín
+GenericName[gu]=વેબ બ્રાઉઝર
+GenericName[he]=דפדפן אינטרנט
+GenericName[hi]=वेब ब्राउज़र
+GenericName[hr]=Web preglednik
+GenericName[hu]=Webböngésző
+GenericName[id]=Browser Web
+GenericName[it]=Browser web
+GenericName[ja]=GNOME ウェブ・ブラウザ
+GenericName[ko]=웹 브라우저
+GenericName[li]=Wèb Browser
+GenericName[lt]=Web naršyklė
+GenericName[mk]=Веб прелистувач
+GenericName[mn]=Веб хөтөч
+GenericName[ms]=Pelungsur Web
+GenericName[nb]=Nettleser
+GenericName[nl]=Web-browser
+GenericName[nn]=Nettlesar
+GenericName[no]=Nettleser
+GenericName[pa]=ਵੈਬ ਬਰਾਊਜ਼
+GenericName[pl]=Przeglądarka WWW
+GenericName[pt]=Navegador Web
+GenericName[pt_BR]=Navegador Web
+GenericName[ro]=Navigator Internet
+GenericName[ru]=Веб-браузер
+GenericName[sk]=WWW prehliadač
+GenericName[sl]=Spletni brskalnik
+GenericName[sq]=Shfletuesi Web
+GenericName[sr]=Веб читач
+GenericName[sr@Latn]=Veb čitač
+GenericName[sv]=Webbläsare
+GenericName[ta]=வலை உலாவி
+GenericName[th]=เว็บบราวเซอร์
+GenericName[tk]=Web Ahtarçysy
+GenericName[tr]=Web Tarayıcı
+GenericName[uk]=Переглядач web-сторінок
+GenericName[vi]=Trình duyệt Web
+GenericName[wa]=Betchteu waibe
+GenericName[zh_CN]=Web 浏览器
+GenericName[zh_TW]=網頁瀏覽器
+Comment=Browse the web
+Comment[ar]=تصفح الانترنت
+Comment[az]=Vebi gəzin
+Comment[be]=Вандраваць па павуціньню
+Comment[bg]=Сърфиране в интернет
+Comment[bn]=ওয়েব ব্রাউজ করুন
+Comment[bs]=Pregledaj na internetu
+Comment[ca]=Navegueu per la web
+Comment[cs]=Prohlížet WWW
+Comment[cy]=Pori'r we
+Comment[da]=Surf på internettet
+Comment[de]=Im Web surfen
+Comment[el]=Περιήγηση στον παγκόσμιο ιστό
+Comment[en_CA]=Browse the web
+Comment[en_GB]=Browse the web
+Comment[es]=Navegar por la web
+Comment[et]=Sirvi veebi
+Comment[eu]=Arakatu web-a
+Comment[fi]=Selaa WWW:tä
+Comment[fr]=Naviguer sur Internet
+Comment[ga]=Brabhsáil an Líon
+Comment[gu]=વેબમાં શોધો
+Comment[he]=גלוש ברשת
+Comment[hi]=वेब ब्राउज़ करें
+Comment[hr]=Pregledaj Web
+Comment[hu]=A világháló böngészése
+Comment[id]=Jelajah web
+Comment[it]=Esplora il web
+Comment[ja]=ウェブを閲覧します
+Comment[ko]=웹을 돌아 다닙니다
+Comment[li]=Blajere op internet
+Comment[lt]=Naršyti internete
+Comment[mk]=Прелистувајте на веб
+Comment[ml]=വലക്കെട്ട് തിരയുക
+Comment[mn]=Веб броузе хийх
+Comment[ms]=Layari web
+Comment[nb]=Surf på nettet
+Comment[nl]=Websurfen
+Comment[nn]=Surf på nettet
+Comment[no]=Surf på nettet
+Comment[pa]=ਵੈਬ ਬਰਾਊਜ਼
+Comment[pl]=Przeglądanie stron WWW
+Comment[pt]=Navegar na web
+Comment[pt_BR]=Navegar na web
+Comment[ro]=Navigare Internet
+Comment[ru]=Веб-браузер
+Comment[sk]=Prehliadať internet
+Comment[sl]=Brskaj po spletu
+Comment[sq]=Eksploro web-in
+Comment[sr]=Прегледај веб
+Comment[sr@Latn]=Pregledaj veb
+Comment[sv]=Surfa på nätet
+Comment[ta]=வலையில் உலாவு
+Comment[th]=ใช้งานเว็บบราวเซอร์ @MOZILLA_NAME@
+Comment[tk]=Webi Ahtar
+Comment[tr]=Web'e Gözat
+Comment[uk]=Програма перегляду web-сторінок
+Comment[vi]=Duyệt web
+Comment[wa]=Naivyî avå les waibes
+Comment[zh_CN]=浏览 Web
+Comment[zh_TW]=瀏覽網頁
+Exec=@MOZILLA@ %u
+Icon=@FIREFOX_ICON@
+StartupNotify=false
+Terminal=false
+Type=Application
+Categories=Application;Network;
+MimeType=text/html;text/xml;application/xhtml+xml;application/vnd.mozilla.xul+xml;text/mml;
diff --git a/firefox128/files/firefox.sh b/firefox128/files/firefox.sh
new file mode 100755
index 0000000000..b2b1ab5655
--- /dev/null
+++ b/firefox128/files/firefox.sh
@@ -0,0 +1,14 @@
+#!/bin/sh
+if [ -f /usr/X11R7/lib/libEGL.so ] && [ -z "$LD_PRELOAD" ] && \
+  nm /usr/X11R7/lib/libGL.so | grep -Fq "B _glapi_tls_Dispatch"; then
+    # Workaround for PR#57445/50277 for netbsd-9 & netbsd-10 pre 2023-08-05
+    # This may not avoid a crash 100% of the time, but changes at least some
+    # cases of 100% crash on startup to "have not yet seen crash on startup"
+    echo "Applying libEGL LD_PRELOAD workaround for NetBSD" >&2
+    export LD_PRELOAD=/usr/X11R7/lib/libEGL.so
+    # Note that there is an _additional_ issue with firefox >= 111 that
+    # needs to be addressed, and that is worked around by disabling webgl
+    # by default, but it's not even worth looking at that on a system without
+    # the fixed libGL
+fi
+exec @PREFIX@/lib/@MOZILLA@/@MOZILLA@ "$@"
diff --git a/firefox128/files/node-wrapper.sh b/firefox128/files/node-wrapper.sh
new file mode 100755
index 0000000000..81c6fe3977
--- /dev/null
+++ b/firefox128/files/node-wrapper.sh
@@ -0,0 +1,9 @@
+#! /bin/sh
+
+VERS=v22.4.1
+
+if [ "$1" = "-v" ] || [ "$1" = "--version" ]; then
+	printf "${VERS}\n"
+fi
+
+exit 0
diff --git a/firefox128/files/replace-moz.build.awk b/firefox128/files/replace-moz.build.awk
new file mode 100644
index 0000000000..cd128e2e43
--- /dev/null
+++ b/firefox128/files/replace-moz.build.awk
@@ -0,0 +1,102 @@
+/^if CONFIG\[\"OS_TARGET\"\] == \"Android\":/{
+	flag = 1;
+	print $0;
+	next;
+}
+/^if CONFIG\[\"OS_TARGET\"\] == \"Linux\":/{
+	flag = 0;
+	sub(/^if CONFIG\[\"OS_TARGET\"\] == \"Linux\":/, "if CONFIG[\"OS_TARGET\"] == \"Linux\" or CONFIG[\"OS_TARGET\"] == \"NetBSD\" or CONFIG[\"OS_TARGET\"] == \"OpenBSD\" or CONFIG[\"OS_TARGET\"] == \"FreeBSD\":");
+	print $0;
+	next;
+}
+/^if CONFIG\[\"TARGET_CPU\"\] == \"arm\" and CONFIG\[\"OS_TARGET\"\] == \"Linux\":/{
+	flag = 0;
+	sub(/^if CONFIG\[\"TARGET_CPU\"\] == \"arm\" and CONFIG\[\"OS_TARGET\"\] == \"Linux\":/, "if CONFIG\[\"TARGET_CPU\"\] == \"arm\" and (CONFIG[\"OS_TARGET\"] == \"Linux\" or CONFIG[\"OS_TARGET\"] == \"NetBSD\" or CONFIG[\"OS_TARGET\"] == \"OpenBSD\" or CONFIG[\"OS_TARGET\"] == \"FreeBSD\"):");
+	print $0;
+	next;
+}
+/^if CONFIG\[\"OS_TARGET\"\] == \"Linux\" and CONFIG\[\"TARGET_CPU\"\] == \"arm\":/{
+	flag = 0;
+	sub(/^if CONFIG\[\"OS_TARGET\"\] == \"Linux\" and CONFIG\[\"TARGET_CPU\"\] == \"arm\":/, "if CONFIG\[\"TARGET_CPU\"\] == \"arm\" and (CONFIG[\"OS_TARGET\"] == \"Linux\" or CONFIG[\"OS_TARGET\"] == \"NetBSD\" or CONFIG[\"OS_TARGET\"] == \"OpenBSD\" or CONFIG[\"OS_TARGET\"] == \"FreeBSD\"):");
+	print $0;
+	next;
+}
+/^if CONFIG\[\"TARGET_CPU\"\] == \"aarch64\" and CONFIG\[\"OS_TARGET\"\] == \"Linux\":/{
+	flag = 0;
+	sub(/^if CONFIG\[\"TARGET_CPU\"\] == \"aarch64\" and CONFIG\[\"OS_TARGET\"\] == \"Linux\":/, "if CONFIG\[\"TARGET_CPU\"\] == \"aarch64\" and (CONFIG[\"OS_TARGET\"] == \"Linux\" or CONFIG[\"OS_TARGET\"] == \"NetBSD\" or CONFIG[\"OS_TARGET\"] == \"OpenBSD\" or CONFIG[\"OS_TARGET\"] == \"FreeBSD\"):");
+	print $0;
+	next;
+}
+/^if CONFIG\[\"OS_TARGET\"\] == \"Linux\" and CONFIG\[\"TARGET_CPU\"\] == \"aarch64\":/{
+	flag = 0;
+	sub(/^if CONFIG\[\"OS_TARGET\"\] == \"Linux\" and CONFIG\[\"TARGET_CPU\"\] == \"aarch64\":/, "if CONFIG\[\"TARGET_CPU\"\] == \"aarch64\" and (CONFIG[\"OS_TARGET\"] == \"Linux\" or CONFIG[\"OS_TARGET\"] == \"NetBSD\" or CONFIG[\"OS_TARGET\"] == \"OpenBSD\" or CONFIG[\"OS_TARGET\"] == \"FreeBSD\"):");
+	print $0;
+	next;
+}
+/^if CONFIG\[\"TARGET_CPU\"\] == \"x86\" and CONFIG\[\"OS_TARGET\"\] == \"Linux\":/{
+	flag = 0;
+	sub(/^if CONFIG\[\"TARGET_CPU\"\] == \"x86\" and CONFIG\[\"OS_TARGET\"\] == \"Linux\":/, "if CONFIG\[\"TARGET_CPU\"\] == \"x86\" and (CONFIG[\"OS_TARGET\"] == \"Linux\" or CONFIG[\"OS_TARGET\"] == \"NetBSD\" or CONFIG[\"OS_TARGET\"] == \"OpenBSD\" or CONFIG[\"OS_TARGET\"] == \"FreeBSD\"):");
+	print $0;
+	next;
+}
+/^if CONFIG\[\"OS_TARGET\"\] == \"Linux\" and CONFIG\[\"TARGET_CPU\"\] == \"x86\":/{
+	flag = 0;
+	sub(/^if CONFIG\[\"OS_TARGET\"\] == \"Linux\" and CONFIG\[\"TARGET_CPU\"\] == \"x86\":/, "if CONFIG\[\"TARGET_CPU\"\] == \"x86\" and (CONFIG[\"OS_TARGET\"] == \"Linux\" or CONFIG[\"OS_TARGET\"] == \"NetBSD\" or CONFIG[\"OS_TARGET\"] == \"OpenBSD\" or CONFIG[\"OS_TARGET\"] == \"FreeBSD\"):");
+	print $0;
+	next;
+}
+/^if CONFIG\[\"TARGET_CPU\"\] == \"x86_64\" and CONFIG\[\"OS_TARGET\"\] == \"Linux\":/{
+	flag = 0;
+	sub(/^if CONFIG\[\"TARGET_CPU\"\] == \"x86_64\" and CONFIG\[\"OS_TARGET\"\] == \"Linux\":/, "if CONFIG\[\"TARGET_CPU\"\] == \"x86_64\" and (CONFIG[\"OS_TARGET\"] == \"Linux\" or CONFIG[\"OS_TARGET\"] == \"NetBSD\" or CONFIG[\"OS_TARGET\"] == \"OpenBSD\" or CONFIG[\"OS_TARGET\"] == \"FreeBSD\"):");
+	print $0;
+	next;
+}
+/^if CONFIG\[\"OS_TARGET\"\] == \"Linux\" and CONFIG\[\"TARGET_CPU\"\] == \"x86_64\":/{
+	flag = 0;
+	sub(/^if CONFIG\[\"OS_TARGET\"\] == \"Linux\" and CONFIG\[\"TARGET_CPU\"\] == \"x86_64\":/, "if CONFIG\[\"TARGET_CPU\"\] == \"x86_64\" and (CONFIG[\"OS_TARGET\"] == \"Linux\" or CONFIG[\"OS_TARGET\"] == \"NetBSD\" or CONFIG[\"OS_TARGET\"] == \"OpenBSD\" or CONFIG[\"OS_TARGET\"] == \"FreeBSD\"):");
+	print $0;
+	next;
+}
+/^if CONFIG\[\"MOZ_X11\"\] == \"1\" and CONFIG\[\"OS_TARGET\"\] == \"Linux\" and CONFIG\[\"TARGET_CPU\"\] == \"aarch64\":/{
+	flag = 0;
+	sub(/^if CONFIG\[\"MOZ_X11\"\] == \"1\" and CONFIG\[\"OS_TARGET\"\] == \"Linux\" and CONFIG\[\"TARGET_CPU\"\] == \"aarch64\":/, "if CONFIG\[\"TARGET_CPU\"\] == \"aarch64\" and CONFIG\[\"MOZ_X11\"\] == \"1\" and (CONFIG[\"OS_TARGET\"] == \"Linux\" or CONFIG[\"OS_TARGET\"] == \"NetBSD\" or CONFIG[\"OS_TARGET\"] == \"OpenBSD\" or CONFIG[\"OS_TARGET\"] == \"FreeBSD\"):");
+}
+/^if CONFIG\[\"TARGET_CPU\"\] == \"aarch64\" and CONFIG\[\"MOZ_X11\"\] == \"1\" and CONFIG\[\"OS_TARGET\"\] == \"Linux\":/{
+	flag = 0;
+	sub(/^if CONFIG\[\"TARGET_CPU\"\] == \"aarch64\" and CONFIG\[\"MOZ_X11\"\] == \"1\" and CONFIG\[\"OS_TARGET\"\] == \"Linux\":/, "if CONFIG\[\"TARGET_CPU\"\] == \"aarch64\" and CONFIG\[\"MOZ_X11\"\] == \"1\" and (CONFIG[\"OS_TARGET\"] == \"Linux\" or CONFIG[\"OS_TARGET\"] == \"NetBSD\" or CONFIG[\"OS_TARGET\"] == \"OpenBSD\" or CONFIG[\"OS_TARGET\"] == \"FreeBSD\"):");
+}
+/^if CONFIG\[\"MOZ_X11\"\] == \"1\" and CONFIG\[\"OS_TARGET\"\] == \"Linux\" and CONFIG\[\"TARGET_CPU\"\] == \"arm\":/{
+	flag = 0;
+	sub(/^if CONFIG\[\"MOZ_X11\"\] == \"1\" and CONFIG\[\"OS_TARGET\"\] == \"Linux\" and CONFIG\[\"TARGET_CPU\"\] == \"arm\":/, "if CONFIG\[\"TARGET_CPU\"\] == \"arm\" and CONFIG\[\"MOZ_X11\"\] == \"1\" and (CONFIG[\"OS_TARGET\"] == \"Linux\" or CONFIG[\"OS_TARGET\"] == \"NetBSD\" or CONFIG[\"OS_TARGET\"] == \"OpenBSD\" or CONFIG[\"OS_TARGET\"] == \"FreeBSD\"):");
+}
+/^if CONFIG\[\"TARGET_CPU\"\] == \"arm\" and CONFIG\[\"MOZ_X11\"\] == \"1\" and CONFIG\[\"OS_TARGET\"\] == \"Linux\":/{
+	flag = 0;
+	sub(/^if CONFIG\[\"TARGET_CPU\"\] == \"arm\" and CONFIG\[\"MOZ_X11\"\] == \"1\" and CONFIG\[\"OS_TARGET\"\] == \"Linux\":/, "if CONFIG\[\"TARGET_CPU\"\] == \"arm\" and CONFIG\[\"MOZ_X11\"\] == \"1\" and (CONFIG[\"OS_TARGET\"] == \"Linux\" or CONFIG[\"OS_TARGET\"] == \"NetBSD\" or CONFIG[\"OS_TARGET\"] == \"OpenBSD\" or CONFIG[\"OS_TARGET\"] == \"FreeBSD\"):");
+}
+/^if CONFIG\[\"MOZ_X11\"\] == \"1\" and CONFIG\[\"OS_TARGET\"\] == \"Linux\" and CONFIG\[\"TARGET_CPU\"\] == \"x86\":/{
+	flag = 0;
+	sub(/^if CONFIG\[\"MOZ_X11\"\] == \"1\" and CONFIG\[\"OS_TARGET\"\] == \"Linux\" and CONFIG\[\"TARGET_CPU\"\] == \"x86\":/, "if CONFIG\[\"TARGET_CPU\"\] == \"x86\" and CONFIG\[\"MOZ_X11\"\] == \"1\" and (CONFIG[\"OS_TARGET\"] == \"Linux\" or CONFIG[\"OS_TARGET\"] == \"NetBSD\" or CONFIG[\"OS_TARGET\"] == \"OpenBSD\" or CONFIG[\"OS_TARGET\"] == \"FreeBSD\"):");
+}
+/^if CONFIG\[\"TARGET_CPU\"\] == \"x86\" and CONFIG\[\"MOZ_X11\"\] == \"1\" and CONFIG\[\"OS_TARGET\"\] == \"Linux\":/{
+	flag = 0;
+	sub(/^if CONFIG\[\"TARGET_CPU\"\] == \"x86\" and CONFIG\[\"MOZ_X11\"\] == \"1\" and CONFIG\[\"OS_TARGET\"\] == \"Linux\":/, "if CONFIG\[\"TARGET_CPU\"\] == \"x86\" and CONFIG\[\"MOZ_X11\"\] == \"1\" and (CONFIG[\"OS_TARGET\"] == \"Linux\" or CONFIG[\"OS_TARGET\"] == \"NetBSD\" or CONFIG[\"OS_TARGET\"] == \"OpenBSD\" or CONFIG[\"OS_TARGET\"] == \"FreeBSD\"):");
+}
+/^if CONFIG\[\"MOZ_X11\"\] == \"1\" and CONFIG\[\"OS_TARGET\"\] == \"Linux\" and CONFIG\[\"TARGET_CPU\"\] == \"x86_64\":/{
+	flag = 0;
+	sub(/^if CONFIG\[\"MOZ_X11\"\] == \"1\" and CONFIG\[\"OS_TARGET\"\] == \"Linux\" and CONFIG\[\"TARGET_CPU\"\] == \"x86_64\":/, "if CONFIG\[\"TARGET_CPU\"\] == \"x86_64\" and CONFIG\[\"MOZ_X11\"\] == \"1\" and (CONFIG[\"OS_TARGET\"] == \"Linux\" or CONFIG[\"OS_TARGET\"] == \"NetBSD\" or CONFIG[\"OS_TARGET\"] == \"OpenBSD\" or CONFIG[\"OS_TARGET\"] == \"FreeBSD\"):");
+}
+/^if CONFIG\[\"TARGET_CPU\"\] == \"x86_64\" and CONFIG\[\"MOZ_X11\"\] == \"1\" and CONFIG\[\"OS_TARGET\"\] == \"Linux\":/{
+	flag = 0;
+	sub(/^if CONFIG\[\"TARGET_CPU\"\] == \"x86_64\" and CONFIG\[\"MOZ_X11\"\] == \"1\" and CONFIG\[\"OS_TARGET\"\] == \"Linux\":/, "if CONFIG\[\"TARGET_CPU\"\] == \"x86_64\" and CONFIG\[\"MOZ_X11\"\] == \"1\" and (CONFIG[\"OS_TARGET\"] == \"Linux\" or CONFIG[\"OS_TARGET\"] == \"NetBSD\" or CONFIG[\"OS_TARGET\"] == \"OpenBSD\" or CONFIG[\"OS_TARGET\"] == \"FreeBSD\"):");
+}
+{
+	if (flag != 1) {
+		sub(/^    DEFINES\[\"WEBRTC_LINUX\"\] = True/, "    if CONFIG\[\"OS_TARGET\"\] == \"Linux\":\n        DEFINES\[\"WEBRTC_LINUX\"\] = True\n    else:\n        DEFINES\[\"WEBRTC_BSD\"\] = True");
+		sub(/^if not CONFIG\[\"MOZ_DEBUG\"\] and CONFIG\[\"OS_TARGET\"\] == \"Linux\":/, "if not CONFIG[\"MOZ_DEBUG\"] and (CONFIG[\"OS_TARGET\"] == \"Linux\" or CONFIG[\"OS_TARGET\"] == \"NetBSD\" or CONFIG[\"OS_TARGET\"] == \"OpenBSD\" or CONFIG[\"OS_TARGET\"] == \"FreeBSD\"):");
+		sub(/^if CONFIG\[\"MOZ_DEBUG\"\] == \"1\" and CONFIG\[\"OS_TARGET\"\] == \"Linux\":/, "if CONFIG[\"MOZ_DEBUG\"] == \"1\" and (CONFIG[\"OS_TARGET\"] == \"Linux\" or CONFIG[\"OS_TARGET\"] == \"NetBSD\" or CONFIG[\"OS_TARGET\"] == \"OpenBSD\" or CONFIG[\"OS_TARGET\"] == \"FreeBSD\"):");
+		sub(/^if CONFIG\[\"TARGET_CPU\"\] == \"aarch64\" and CONFIG\[\"OS_TARGET\"\] == \"Linux\":/, "if CONFIG[\"TARGET_CPU\"] == \"aarch64\" and (CONFIG[\"OS_TARGET\"] == \"Linux\" or CONFIG[\"OS_TARGET\"] == \"NetBSD\" or CONFIG[\"OS_TARGET\"] == \"OpenBSD\" or CONFIG[\"OS_TARGET\"] == \"FreeBSD\"):");
+		sub(/^if CONFIG\[\"TARGET_CPU\"\] == \"x86\" and CONFIG\[\"OS_TARGET\"\] == \"Linux\":/, "if CONFIG[\"TARGET_CPU\"] == \"x86\" and (CONFIG[\"OS_TARGET\"] == \"Linux\" or CONFIG[\"OS_TARGET\"] == \"NetBSD\" or CONFIG[\"OS_TARGET\"] == \"OpenBSD\" or CONFIG[\"OS_TARGET\"] == \"FreeBSD\"):");
+		sub(/^if CONFIG\[\"TARGET_CPU\"\] == \"x86_64\" and CONFIG\[\"OS_TARGET\"\] == \"Linux\":/, "if CONFIG[\"TARGET_CPU\"] == \"x86_64\" and (CONFIG[\"OS_TARGET\"] == \"Linux\" or CONFIG[\"OS_TARGET\"] == \"NetBSD\" or CONFIG[\"OS_TARGET\"] == \"OpenBSD\" or CONFIG[\"OS_TARGET\"] == \"FreeBSD\"):");
+	}
+	print $0;
+}
diff --git a/firefox128/mozilla-common.mk b/firefox128/mozilla-common.mk
new file mode 100644
index 0000000000..2d88199344
--- /dev/null
+++ b/firefox128/mozilla-common.mk
@@ -0,0 +1,272 @@
+# $NetBSD: mozilla-common.mk,v 1.285 2024/07/15 00:29:29 gutteridge Exp $
+#
+# common Makefile fragment for mozilla packages based on gecko 2.0.
+#
+# used by www/firefox/Makefile
+
+.include "../../mk/bsd.prefs.mk"
+
+PYTHON_VERSIONS_INCOMPATIBLE=	27
+PYTHON_FOR_BUILD_ONLY=		tool
+ALL_ENV+=			PYTHON3=${PYTHONBIN}
+
+REPLACE_PYTHON=		build/cargo-linker
+
+HAS_CONFIGURE=		yes
+CONFIGURE_ARGS+=	--prefix=${PREFIX}
+USE_TOOLS+=		pkg-config perl gmake gm4 unzip zip # autoconf213
+UNLIMIT_RESOURCES+=	datasize stacksize virtualsize
+
+OVERRIDE_GNU_CONFIG_SCRIPTS=	yes
+OVERRIDE_DIRDEPTH=		4
+
+USE_LANGUAGES+=		c c++
+
+# XXX: As of 114.0.2
+# For nested constant initializer support in rlbox, requires 8.
+GCC_REQD+=		8
+
+TOOL_DEPENDS+=		cbindgen>=0.26.0:../../devel/cbindgen
+
+.if defined(FIREFOX_MAINTAINER) && !defined(MAINTAINER_INTERNAL)
+TOOL_DEPENDS+=		nodejs-[0-9]*:../../lang/nodejs
+USE_TOOLS+=		diff
+.else
+CONFIGURE_ENV+=		NODEJS="${FILESDIR}/node-wrapper.sh"
+.endif
+
+# malloc_usable_size()
+LDFLAGS.NetBSD+=	-ljemalloc
+
+.if ${MACHINE_ARCH} == "i386" || ${MACHINE_ARCH} == "x86_64"
+TOOL_DEPENDS+=		nasm>=2.14:../../devel/nasm
+TOOL_DEPENDS+=		yasm>=1.1:../../devel/yasm
+CFLAGS+=		-msse2
+.endif
+
+# This is to work around build failures where an upstream configuration script
+# is confused by having more than one approximate match to MACHINE_GNU_PLATFORM
+# "i486" when attempting to select the Rust compiler target.
+.if ${MACHINE_PLATFORM:MNetBSD-*-i386}
+CONFIGURE_ARGS+=	--target=i586-unknown-netbsd
+CONFIGURE_ARGS+=	--host=i586-unknown-netbsd
+.elif ${MACHINE_PLATFORM:MSunOS-*-x86_64}
+CONFIGURE_ARGS+=	--host=x86_64-unknown-illumos
+CONFIGURE_ARGS+=	--target=x86_64-unknown-illumos
+.else
+CONFIGURE_ARGS+=	--target=${MACHINE_GNU_PLATFORM}
+CONFIGURE_ARGS+=	--host=${MACHINE_GNU_PLATFORM}
+.endif
+
+CONFIGURE_ENV+=		BINDGEN_CFLAGS="-isystem${PREFIX}/include/nspr \
+			-isystem${X11BASE}/include/pixman-1"
+
+do-test:
+	cd ${WRKSRC}/${OBJDIR}/dist/bin &&	\
+	     ./run-mozilla.sh ${WRKSRC}/mach check-spidermonkey
+
+# tar(1) of OpenBSD 5.5 has no --exclude command line option.
+.if ${OPSYS} == "OpenBSD"
+TOOLS_PLATFORM.tar=	${TOOLS_PATH.bsdtar}
+USE_TOOLS+=		bsdtar
+.else
+USE_TOOLS+=		tar
+.endif
+
+.if ${MACHINE_ARCH} == "i386"
+# This is required for SSE2 code under i386.
+CFLAGS+=	-mstackrealign
+.endif
+
+CHECK_PORTABILITY_SKIP+=	${MOZILLA_DIR}security/nss/tests/*/*.sh
+CHECK_PORTABILITY_SKIP+=	${MOZILLA_DIR}js/src/tests/update-test262.sh
+CHECK_PORTABILITY_SKIP+=	${MOZILLA_DIR}intl/icu/source/configure
+CHECK_PORTABILITY_SKIP+=	${MOZILLA_DIR}browser/components/loop/run-all-loop-tests.sh
+CHECK_PORTABILITY_SKIP+=	${MOZILLA_DIR}browser/extensions/loop/run-all-loop-tests.sh
+CHECK_PORTABILITY_SKIP+=	${MOZILLA_DIR}third_party/libwebrtc/tools_webrtc/iwyu/apply-iwyu
+
+CONFIGURE_ARGS+=	--enable-release
+# Disable Rust SIMD option to fix build with lang/rust-1.33.0
+# This should be enabled later again.
+#CONFIGURE_ARGS+=	--enable-rust-simd
+CONFIGURE_ARGS+=	--disable-tests
+# Mozilla Bug 1432751
+#CONFIGURE_ARGS+=	--enable-system-cairo
+CONFIGURE_ARGS+=	--enable-system-pixman
+CONFIGURE_ARGS+=	--with-system-libvpx
+CONFIGURE_ARGS+=	--enable-system-ffi
+CONFIGURE_ARGS+=	--with-system-icu
+CONFIGURE_ARGS+=	--with-intl-api
+CONFIGURE_ARGS+=	--with-system-nss
+CONFIGURE_ARGS+=	--with-system-nspr
+#CONFIGURE_ARGS+=	--with-system-jpeg
+CONFIGURE_ARGS+=	--with-system-zlib
+CONFIGURE_ARGS+=	--with-system-libevent
+CONFIGURE_ARGS+=	--disable-crashreporter
+CONFIGURE_ARGS+=	--enable-chrome-format=omni
+CONFIGURE_ARGS+=	--with-system-webp
+CONFIGURE_ARGS+=	--enable-forkserver
+
+#CONFIGURE_ARGS+=	--enable-readline
+CONFIGURE_ARGS+=	--disable-icf
+CONFIGURE_ARGS+=	--disable-updater
+
+.include "../../mk/compiler.mk"
+
+.if empty(PKGSRC_COMPILER:Mclang)
+# Set path to "clang for cbindgen" when target compiler is not clang.
+CONFIGURE_ARGS+=	--with-clang-path=${PREFIX}/bin/clang
+.endif
+CONFIGURE_ARGS+=	--with-libclang-path=${PREFIX}/lib
+
+# RLBox WASM sandbox
+.if ${MACHINE_ARCH} == "x86_64" || ${MACHINE_ARCH} == "i386"
+# For wasm-ld command
+TOOL_DEPENDS+=		lld-[0-9]*:../../devel/lld
+.include "../../lang/wasi-libc/buildlink3.mk"
+.include "../../lang/wasi-libcxx/buildlink3.mk"
+.include "../../lang/wasi-compiler-rt/buildlink3.mk"
+CONFIGURE_ARGS+=	--with-wasi-sysroot=${PREFIX}/wasi
+CONFIGURE_ENV+=		WASM_CC=${PREFIX}/bin/clang
+CONFIGURE_ENV+=		WASM_CXX=${PREFIX}/bin/clang++
+.else
+CONFIGURE_ARGS+=	--without-wasm-sandboxed-libraries
+.endif
+
+.include "../../sysutils/pciutils/libname.mk"
+SUBST_CLASSES+=				fix-libpci-soname
+SUBST_STAGE.fix-libpci-soname=		pre-configure
+SUBST_MESSAGE.fix-libpci-soname=	Fixing libpci soname
+SUBST_FILES.fix-libpci-soname+=		${MOZILLA_DIR}toolkit/xre/glxtest/glxtest.cpp
+SUBST_SED.fix-libpci-soname+=		-e 's,"libpci.so, "lib${PCIUTILS_LIBNAME}.so,'
+
+.if ${MACHINE_PLATFORM:MNetBSD-*-i386}
+SQLITE3OPTFLAG=			'-O0',
+.else
+SQLITE3OPTFLAG=			# empty
+.endif
+SUBST_CLASSES+=			sqlite3-opt
+SUBST_STAGE.sqlite3-opt=	pre-configure
+SUBST_MESSAGE.sqlite3-opt=	Fixing segfault in libmozsqlite3.so
+SUBST_FILES.sqlite3-opt+=	${MOZILLA_DIR}third_party/sqlite3/src/moz.build
+SUBST_VARS.sqlite3-opt+=	SQLITE3OPTFLAG
+
+# Do not pass '-j1 -j1' for MAKE_JOBS=1 for NetBSD 9.3 or earlier.
+RUST_MAKE_JOBS=		# empty by default
+.if ${OPSYS} == "NetBSD" && ${OPSYS_VERSION} < 090400
+.  if defined(MAKE_JOBS) && !empty(MAKE_JOBS) && !(defined(MAKE_JOBS_SAFE) && ${MAKE_JOBS_SAFE:U:tl} == no)
+.    if ${MAKE_JOBS} > 1
+RUST_MAKE_JOBS=		-j1 # for MAKE_JOBS=1, RUST_MAKE_JOBS should be empty.
+.    endif
+.  endif
+.endif
+
+SUBST_CLASSES+=		njobs
+SUBST_STAGE.njobs=	pre-configure
+SUBST_MESSAGE.njobs=	Setting MAKE_JOBS for cairo
+SUBST_FILES.njobs+=	${MOZILLA_DIR}config/makefiles/rust.mk
+SUBST_VARS.njobs+=	RUST_MAKE_JOBS
+
+# Workaround for link of libxul.so as of 96.0.
+# There are too many -ldl under third_paty/libwebrtc.
+.include "../../mk/dlopen.buildlink3.mk"
+BUILDLINK_TRANSFORM+=	opt:-ldl:${BUILDLINK_LDADD.dl:Q}
+
+CONFIG_GUESS_OVERRIDE+=		${MOZILLA_DIR}build/autoconf/config.guess
+CONFIG_GUESS_OVERRIDE+=		${MOZILLA_DIR}js/src/build/autoconf/config.guess
+CONFIG_GUESS_OVERRIDE+=		${MOZILLA_DIR}nsprpub/build/autoconf/config.guess
+CONFIG_GUESS_OVERRIDE+=		${MOZILLA_DIR}/js/ctypes/libffi/config.guess
+CONFIG_SUB_OVERRIDE+=		${MOZILLA_DIR}build/autoconf/config.sub
+CONFIG_SUB_OVERRIDE+=		${MOZILLA_DIR}js/src/build/autoconf/config.sub
+CONFIG_SUB_OVERRIDE+=		${MOZILLA_DIR}nsprpub/build/autoconf/config.sub
+CONFIG_SUB_OVERRIDE+=		${MOZILLA_DIR}/js/ctypes/libffi/config.sub
+
+CONFIGURE_ENV+=		CPP=${CPP:Q}
+ALL_ENV+=		SHELL=${CONFIG_SHELL:Q}
+
+# Build outside ${WRKSRC}
+# Try to avoid conflict with config/makefiles/xpidl/Makefile.in
+.if ${MAINTAINER_INTERNAL:Uno} == "yes"
+OBJDIR=			../no-node-build
+.else
+OBJDIR=			../build
+.endif
+CONFIGURE_DIRS=		${OBJDIR}
+CONFIGURE_SCRIPT=	${WRKSRC}/configure
+
+PLIST_VARS+=	v4l2_decode ffvpx
+
+PLIST_VARS+=		v4l2_decode
+.if ${MACHINE_ARCH} == "aarch64" || \
+    ${MACHINE_ARCH:M*arm*} || \
+    ${MACHINE_ARCH} == riscv64
+PLIST.v4l2_decode=	yes	# see toolkit/moz.configure
+.endif
+
+.if ${MACHINE_ARCH} == "aarch64" || \
+    ${MACHINE_ARCH:M*arm*} || \
+    ${MACHINE_ARCH} == "i386" || \
+    ${MACHINE_ARCH} == "x86_64"
+PLIST.ffvpx=	yes	# see media/ffvpx/ffvpxcommon.mozbuild
+.endif
+
+# See ${WRKSRC}/security/sandbox/mac/Sandbox.mm: On Darwin, sandboxing
+# support is only available when the toolkit is cairo-cocoa.
+CONFIGURE_ARGS.Darwin+=	--disable-sandbox
+CONFIGURE_ARGS.NetBSD+=	--disable-sandbox
+
+# Makefiles sometimes call "rm -f" without more arguments. Kludge around ...
+.PHONY: create-rm-wrapper
+pre-configure: create-rm-wrapper
+create-rm-wrapper:
+	printf '#!/bin/sh\n[ "$$*" = "-f" ] && exit 0\nexec /bin/rm $$@\n' > \
+	  ${WRAPPER_DIR}/bin/rm
+	chmod +x ${WRAPPER_DIR}/bin/rm
+
+# The configure test for __thread succeeds, but later we end up with:
+# dist/bin/libxul.so: undefined reference to `__tls_get_addr'
+CONFIGURE_ENV.NetBSD+=	ac_cv_thread_keyword=no
+# In unspecified case, clock_gettime(CLOCK_MONOTONIC, ...) fails.
+CONFIGURE_ENV.NetBSD+=	ac_cv_clock_monotonic=
+
+.include "../../sysutils/pciutils/buildlink3.mk"
+.include "../../mk/atomic64.mk"
+BUILDLINK_API_DEPENDS.libevent+=	libevent>=1.1
+.include "../../devel/libevent/buildlink3.mk"
+.include "../../devel/libffi/buildlink3.mk"
+BUILDLINK_API_DEPENDS.nspr+=	nspr>=4.34
+.include "../../devel/nspr/buildlink3.mk"
+.include "../../textproc/icu/buildlink3.mk"
+BUILDLINK_API_DEPENDS.nss+=	nss>=3.101
+.include "../../devel/nss/buildlink3.mk"
+.include "../../devel/zlib/buildlink3.mk"
+#.include "../../mk/jpeg.buildlink3.mk"
+.include "../../graphics/MesaLib/buildlink3.mk"
+#BUILDLINK_API_DEPENDS.cairo+=	cairo>=1.10.2nb4
+#.include "../../graphics/cairo/buildlink3.mk"
+BUILDLINK_API_DEPENDS.libwebp+=	libwebp>=1.0.2
+.include "../../graphics/libwebp/buildlink3.mk"
+BUILDLINK_DEPMETHOD.clang=	build
+.include "../../lang/clang/buildlink3.mk"
+RUST_REQ=	1.76.0
+.include "../../lang/rust/rust.mk"
+.include "../../multimedia/libvpx/buildlink3.mk"
+.include "../../net/libIDL/buildlink3.mk"
+# TODO: check again, pkgsrc has hunspell 1.7
+# was: textproc/hunspell 1.3 is too old
+#.include "../../textproc/hunspell/buildlink3.mk"
+.include "../../multimedia/ffmpeg7/buildlink3.mk"
+.include "../../x11/libXt/buildlink3.mk"
+.include "../../x11/libXtst/buildlink3.mk"
+BUILDLINK_API_DEPENDS.pixman+= pixman>=0.40
+.include "../../x11/pixman/buildlink3.mk"
+.include "../../x11/gtk3/buildlink3.mk"
+PLIST_VARS+=		wayland
+.if ${PKG_BUILD_OPTIONS.gtk3:Mwayland}
+CONFIGURE_ARGS+=	--enable-default-toolkit=cairo-gtk3-x11-wayland
+PLIST.wayland=		yes
+.else
+CONFIGURE_ARGS+=	--enable-default-toolkit=cairo-gtk3
+.endif
+.include "../../lang/python/batteries-included.mk"
+.include "../../lang/python/application.mk"
diff --git a/firefox128/options.mk b/firefox128/options.mk
new file mode 100644
index 0000000000..a11dd20013
--- /dev/null
+++ b/firefox128/options.mk
@@ -0,0 +1,103 @@
+# $NetBSD: options.mk,v 1.75 2023/08/17 20:43:43 ryoon Exp $
+
+PKG_OPTIONS_VAR=	PKG_OPTIONS.firefox
+
+PKG_SUPPORTED_OPTIONS=	official-mozilla-branding
+PKG_SUPPORTED_OPTIONS+=	debug debug-info mozilla-jemalloc webrtc
+PKG_SUPPORTED_OPTIONS+=	dbus speechd
+PKG_SUPPORTED_OPTIONS+=	alsa pulseaudio sunaudio jack
+
+.if ${OPSYS} == "Linux"
+PKG_SUGGESTED_OPTIONS+=	dbus
+PKG_SUGGESTED_OPTIONS+=	alsa pulseaudio mozilla-jemalloc webrtc
+.endif
+
+.if ${OPSYS} == "NetBSD" || ${OPSYS} == "SunOS"
+PKG_SUGGESTED_OPTIONS+=	sunaudio
+.endif
+
+.if ${OPSYS} == "NetBSD" && ${OPSYS_VERSION} >= 090000
+PKG_SUGGESTED_OPTIONS+=	webrtc
+.endif
+
+.include "../../mk/bsd.options.mk"
+
+.if !empty(PKG_OPTIONS:Malsa)
+AUDIO_BACKENDS+=	alsa
+.include "../../audio/alsa-lib/buildlink3.mk"
+.endif
+
+.if !empty(PKG_OPTIONS:Mmozilla-jemalloc)
+CONFIGURE_ARGS+=	--enable-jemalloc
+CONFIGURE_ARGS+=	--enable-replace-malloc
+.else
+CONFIGURE_ARGS+=	--disable-jemalloc
+.endif
+
+.if !empty(PKG_OPTIONS:Mdebug)
+CONFIGURE_ARGS+=	--enable-debug="-g -Og"
+CONFIGURE_ARGS+=	--disable-optimize
+CONFIGURE_ARGS+=	--enable-debug-js-modules
+CONFIGURE_ARGS+=	--disable-install-strip
+.else
+.  if !empty(PKG_OPTIONS:Mdebug-info)
+CONFIGURE_ARGS+=	--enable-debug-symbols
+CONFIGURE_ARGS+=	--enable-optimize=-O2
+CONFIGURE_ARGS+=	--disable-install-strip
+.  else
+CONFIGURE_ARGS+=	--disable-debug-symbols
+CONFIGURE_ARGS+=	--enable-optimize=-O2
+CONFIGURE_ARGS+=	--enable-install-strip
+.  endif
+CONFIGURE_ARGS+=	--disable-debug
+.endif
+
+.if !empty(PKG_OPTIONS:Mpulseaudio)
+AUDIO_BACKENDS+=	pulseaudio
+.include "../../audio/pulseaudio/buildlink3.mk"
+.endif
+
+.if !empty(PKG_OPTIONS:Mdbus)
+.include "../../sysutils/dbus-glib/buildlink3.mk"
+CONFIGURE_ARGS+=	--enable-dbus
+.else
+CONFIGURE_ARGS+=	--disable-dbus
+.  if ${OPSYS} == "Linux"
+CONFIGURE_ARGS+=	--disable-necko-wifi
+.  endif
+.endif
+
+.if !empty(PKG_OPTIONS:Mofficial-mozilla-branding)
+CONFIGURE_ARGS+=	--enable-official-branding
+LICENSE+=		AND mozilla-trademark-license
+RESTRICTED=		Trademark holder prohibits distribution of modified versions.
+NO_BIN_ON_CDROM=	${RESTRICTED}
+NO_BIN_ON_FTP=		${RESTRICTED}
+.else
+CONFIGURE_ARGS+=	--with-branding=browser/branding/unofficial
+.endif
+
+.if !empty(PKG_OPTIONS:Msunaudio)
+AUDIO_BACKENDS+=	sunaudio
+.endif
+
+.if !empty(PKG_OPTIONS:Mjack)
+AUDIO_BACKENDS+=	jack
+.include "../../audio/jack/buildlink3.mk"
+.endif
+
+.if !empty(PKG_OPTIONS:Mwebrtc)
+.include "../../graphics/libv4l/buildlink3.mk"
+CONFIGURE_ARGS+=	--enable-webrtc
+.else
+CONFIGURE_ARGS+=	--disable-webrtc
+.endif
+
+.if !empty(PKG_OPTIONS:Mspeechd)
+.include "../../audio/speech-dispatcher/buildlink3.mk"
+CONFIGURE_ARGS+=	--enable-synth-speechd
+.else
+CONFIGURE_ARGS+=	--disable-synth-speechd
+.endif
+
+CONFIGURE_ARGS+=	--audio-backends=${AUDIO_BACKENDS:ts,}
diff --git a/firefox128/patches/patch-browser_app_profile_firefox.js b/firefox128/patches/patch-browser_app_profile_firefox.js
new file mode 100644
index 0000000000..7801828de6
--- /dev/null
+++ b/firefox128/patches/patch-browser_app_profile_firefox.js
@@ -0,0 +1,47 @@
+$NetBSD: patch-browser_app_profile_firefox.js,v 1.23 2024/04/06 08:53:35 ryoon Exp $
+
+This patch modifies default Firefox settings - see the comments above
+each one.
+
+--- browser/app/profile/firefox.js.orig	2024-03-08 13:19:26.000000000 +0000
++++ browser/app/profile/firefox.js
+@@ -2461,6 +2461,39 @@ pref("app.normandy.onsync_skew_sec", 600
+ pref("toolkit.coverage.enabled", false);
+ pref("toolkit.coverage.endpoint.base", "https://coverage.mozilla.org";);
+ 
++// Select UI locale from LANG/LC_MESSAGE environmental variables
++pref("intl.locale.requested", "");
++
++// Enable system addons, for example langpacks from www/firefox-l10n
++pref("extensions.autoDisableScopes", 11);
++
++// Firefox includes a complex mechanism for "blacklisting" GPUs that
++// appears to fail on a NetBSD system where the only available OpenGL
++// implementations are all from Mesa.  WebRender was supposed to be
++// enabled by default from Firefox 91 onwards and appears to greatly
++// improve performance even with acceleration disabled at the kernel
++// level.
++pref("gfx.webrender.all", true);
++
++// Disable Web MIDI support
++// NetBSD gets immediate SIGSEGV when Web MIDI is enabled.
++pref("midi.testing", true);
++pref("dom.webmidi.enabled", true);
++pref("midi.prompt.testing", true);
++pref("media.navigator.permission.disabled", true);
++
++// Avoid runtime error from WebGL for NetBSD systems
++pref("webgl.out-of-process", false);
++
++// Avoid unfunctional video and audio codecs
++pref("media.allow-audio-non-utility", true);
++
++// On NetBSD, many web applications (e.g. Telegram, Mastodon, Twitter)
++// will freeze until the service worker is restarted in about:serviceworkers.
++// This is a workaround that makes most of these sites function.
++// The root cause of this should be investigated.
++pref("dom.serviceWorkers.enabled", false);
++
+ // Discovery prefs
+ pref("browser.discovery.enabled", true);
+ pref("browser.discovery.containers.enabled", true);
diff --git a/firefox128/patches/patch-build_moz.configure_init.configure b/firefox128/patches/patch-build_moz.configure_init.configure
new file mode 100644
index 0000000000..93c053da51
--- /dev/null
+++ b/firefox128/patches/patch-build_moz.configure_init.configure
@@ -0,0 +1,15 @@
+$NetBSD: patch-build_moz.configure_init.configure,v 1.5 2024/05/10 09:14:07 jperkin Exp $
+
+Support illumos triple.
+
+--- build/moz.configure/init.configure.orig	2024-05-09 17:11:33.720650056 +0000
++++ build/moz.configure/init.configure
+@@ -535,6 +535,8 @@ def split_triplet(triplet, allow_wasi=Fa
+         canonical_os = canonical_kernel = "OpenBSD"
+     elif os.startswith("solaris"):
+         canonical_os = canonical_kernel = "SunOS"
++    elif os.startswith("illumos"):
++        canonical_os = canonical_kernel = "SunOS"
+     elif os.startswith("wasi") and allow_wasi:
+         canonical_os = canonical_kernel = "WASI"
+     else:
diff --git a/firefox128/patches/patch-build_moz.configure_rust.configure b/firefox128/patches/patch-build_moz.configure_rust.configure
new file mode 100644
index 0000000000..413b542641
--- /dev/null
+++ b/firefox128/patches/patch-build_moz.configure_rust.configure
@@ -0,0 +1,15 @@
+$NetBSD: patch-build_moz.configure_rust.configure,v 1.8 2020/12/17 09:53:15 ryoon Exp $
+
+* Do not match rumprun toolchain for NetBSD,
+  narrowed should be one not two.
+
+--- build/moz.configure/rust.configure.orig	2020-12-03 23:12:39.000000000 +0000
++++ build/moz.configure/rust.configure
+@@ -371,6 +371,7 @@ def detect_rustc_target(
+             for c in candidates
+             if c.target.raw_os == host_or_target.raw_os
+             and c.target.raw_cpu == host_or_target.raw_cpu
++            and not c.rust_target.endswith("-rumprun-netbsd")
+         ]
+         if len(narrowed) == 1:
+             return narrowed[0].rust_target
diff --git a/firefox128/patches/patch-config_gcc-stl-wrapper.template.h b/firefox128/patches/patch-config_gcc-stl-wrapper.template.h
new file mode 100644
index 0000000000..42cf75a664
--- /dev/null
+++ b/firefox128/patches/patch-config_gcc-stl-wrapper.template.h
@@ -0,0 +1,31 @@
+$NetBSD: patch-config_gcc-stl-wrapper.template.h,v 1.4 2021/09/30 14:18:28 ryoon Exp $
+
+--- config/gcc-stl-wrapper.template.h.orig	2021-09-04 13:24:51.000000000 +0000
++++ config/gcc-stl-wrapper.template.h
+@@ -32,8 +32,8 @@
+ // limits) and bug 1694575 (iosfwd).
+ // Please be careful when adding more exceptions, especially regarding
+ // the header not directly or indirectly including <new>.
+-#ifndef moz_dont_include_mozalloc_for_cstdlib
+-#  define moz_dont_include_mozalloc_for_cstdlib
++#ifndef moz_dont_include_mozalloc_for_${HEADER}
++#  define moz_dont_include_mozalloc_for_${HEADER}
+ #endif
+ 
+ #ifndef moz_dont_include_mozalloc_for_cmath
+@@ -55,7 +55,7 @@
+ // Include mozalloc after the STL header and all other headers it includes
+ // have been preprocessed.
+ #if !defined(MOZ_INCLUDE_MOZALLOC_H) && \
+-    !defined(moz_dont_include_mozalloc_for_${HEADER})
++    !defined(moz_dont_include_mozalloc_for_cstdlib)
+ #  define MOZ_INCLUDE_MOZALLOC_H
+ #  define MOZ_INCLUDE_MOZALLOC_H_FROM_${HEADER}
+ #endif
+@@ -84,4 +84,6 @@
+ #  include "mozilla/throw_gcc.h"
+ #endif
+ 
++#undef moz_dont_include_mzalloc_for_${HEADER}
++
+ #endif  // if mozilla_${HEADER}_h
diff --git a/firefox128/patches/patch-config_makefiles_rust.mk b/firefox128/patches/patch-config_makefiles_rust.mk
new file mode 100644
index 0000000000..d81046254d
--- /dev/null
+++ b/firefox128/patches/patch-config_makefiles_rust.mk
@@ -0,0 +1,29 @@
+$NetBSD: patch-config_makefiles_rust.mk,v 1.13 2024/08/01 15:41:09 ryoon Exp $
+
+NetBSD doesn't get along with parallel rust builds (it causes issues
+with ld.so) which are the default. Force -j1.
+
+Use less memory to fix build under NetBSD/i386.
+From: https://bugzilla.mozilla.org/show_bug.cgi?id=1644409
+
+--- config/makefiles/rust.mk.orig	2024-07-04 17:04:12.000000000 +0000
++++ config/makefiles/rust.mk
+@@ -60,6 +60,9 @@ ifdef MOZ_TSAN
+ cargo_build_flags += -Zbuild-std=std,panic_abort
+ RUSTFLAGS += -Zsanitizer=thread
+ endif
++ifeq ($(OS_ARCH),NetBSD)
++cargo_build_flags += @RUST_MAKE_JOBS@
++endif
+ 
+ rustflags_sancov =
+ ifdef LIBFUZZER
+@@ -92,7 +95,7 @@ ifndef rustflags_sancov
+ # Never enable when coverage is enabled to work around https://github.com/rust-lang/rust/issues/90045.
+ ifndef MOZ_CODE_COVERAGE
+ ifeq (,$(findstring gkrust_gtest,$(RUST_LIBRARY_FILE)))
+-cargo_rustc_flags += -Clto$(if $(filter full,$(MOZ_LTO_RUST_CROSS)),=fat)
++cargo_rustc_flags += -Clto=thin
+ endif
+ # We need -Cembed-bitcode=yes for all crates when using -Clto.
+ RUSTFLAGS += -Cembed-bitcode=yes
diff --git a/firefox128/patches/patch-dom_base_nsAttrName.h b/firefox128/patches/patch-dom_base_nsAttrName.h
new file mode 100644
index 0000000000..3eddb89fa0
--- /dev/null
+++ b/firefox128/patches/patch-dom_base_nsAttrName.h
@@ -0,0 +1,18 @@
+$NetBSD: patch-dom_base_nsAttrName.h,v 1.2 2019/01/29 16:28:22 ryoon Exp $
+
+cbindgen gets confused by NetBSD's types being macros too
+https://mail-index.netbsd.org/tech-pkg/2018/10/25/msg020395.html
+
+--- dom/base/nsAttrName.h.orig	2019-01-18 00:20:23.000000000 +0000
++++ dom/base/nsAttrName.h
+@@ -16,6 +16,10 @@
+ #include "mozilla/dom/NodeInfo.h"
+ #include "nsAtom.h"
+ #include "nsDOMString.h"
++#ifdef __NetBSD__
++/* This is also a macro which causes problems with cbindgen */
++#undef uintptr_t
++#endif
+ 
+ #define NS_ATTRNAME_NODEINFO_BIT 1
+ class nsAttrName {
diff --git a/firefox128/patches/patch-dom_webtransport_api_WebTransportDatagramDuplexStream.cpp b/firefox128/patches/patch-dom_webtransport_api_WebTransportDatagramDuplexStream.cpp
new file mode 100644
index 0000000000..947c3f8e23
--- /dev/null
+++ b/firefox128/patches/patch-dom_webtransport_api_WebTransportDatagramDuplexStream.cpp
@@ -0,0 +1,40 @@
+$NetBSD: patch-dom_webtransport_api_WebTransportDatagramDuplexStream.cpp,v 1.1 2023/06/04 09:26:35 ryoon Exp $
+
+--- dom/webtransport/api/WebTransportDatagramDuplexStream.cpp.orig	2023-04-23 21:17:18.000000000 +0000
++++ dom/webtransport/api/WebTransportDatagramDuplexStream.cpp
+@@ -62,7 +62,7 @@ void WebTransportDatagramDuplexStream::S
+                                                          ErrorResult& aRv) {
+   // https://w3c.github.io/webtransport/#dom-webtransportdatagramduplexstream-incomingmaxage
+   // Step 1
+-  if (isnan(aMaxAge) || aMaxAge < 0.) {
++  if (std::isnan(aMaxAge) || aMaxAge < 0.) {
+     aRv.ThrowRangeError("Invalid IncomingMaxAge");
+     return;
+   }
+@@ -78,7 +78,7 @@ void WebTransportDatagramDuplexStream::S
+                                                          ErrorResult& aRv) {
+   // https://w3c.github.io/webtransport/#dom-webtransportdatagramduplexstream-outgoingmaxage
+   // Step 1
+-  if (isnan(aMaxAge) || aMaxAge < 0.) {
++  if (std::isnan(aMaxAge) || aMaxAge < 0.) {
+     aRv.ThrowRangeError("Invalid OutgoingMaxAge");
+     return;
+   }
+@@ -94,7 +94,7 @@ void WebTransportDatagramDuplexStream::S
+     double aWaterMark, ErrorResult& aRv) {
+   // https://w3c.github.io/webtransport/#dom-webtransportdatagramduplexstream-incominghighwatermark
+   // Step 1
+-  if (isnan(aWaterMark) || aWaterMark < 0.) {
++  if (std::isnan(aWaterMark) || aWaterMark < 0.) {
+     aRv.ThrowRangeError("Invalid OutgoingMaxAge");
+     return;
+   }
+@@ -110,7 +110,7 @@ void WebTransportDatagramDuplexStream::S
+     double aWaterMark, ErrorResult& aRv) {
+   // https://w3c.github.io/webtransport/#dom-webtransportdatagramduplexstream-outgoinghighwatermark
+   // Step 1
+-  if (isnan(aWaterMark) || aWaterMark < 0.) {
++  if (std::isnan(aWaterMark) || aWaterMark < 0.) {
+     aRv.ThrowRangeError("Invalid OutgoingHighWaterMark");
+     return;
+   }
diff --git a/firefox128/patches/patch-gfx_angle_checkout_src_common_third__party_smhasher_src_PMurHash.cpp b/firefox128/patches/patch-gfx_angle_checkout_src_common_third__party_smhasher_src_PMurHash.cpp
new file mode 100644
index 0000000000..ecc30d6251
--- /dev/null
+++ b/firefox128/patches/patch-gfx_angle_checkout_src_common_third__party_smhasher_src_PMurHash.cpp
@@ -0,0 +1,17 @@
+$NetBSD: patch-gfx_angle_checkout_src_common_third__party_smhasher_src_PMurHash.cpp,v 1.4 2019/07/11 11:32:40 ryoon Exp $
+
+Fix build where _LITTLE_ENDIAN is not an integer.
+
+--- gfx/angle/checkout/src/common/third_party/smhasher/src/PMurHash.cpp.orig	2019-07-06 01:48:31.000000000 +0000
++++ gfx/angle/checkout/src/common/third_party/smhasher/src/PMurHash.cpp
+@@ -91,8 +91,8 @@ on big endian machines, or a byte-by-byt
+ /* gcc 'may' define __LITTLE_ENDIAN__ or __BIG_ENDIAN__ to 1 (Note the trailing __),
+  * or even _LITTLE_ENDIAN or _BIG_ENDIAN (Note the single _ prefix) */
+ #if !defined(__BYTE_ORDER)
+-#    if defined(__LITTLE_ENDIAN__) && __LITTLE_ENDIAN__ == 1 || \
+-        defined(_LITTLE_ENDIAN) && _LITTLE_ENDIAN == 1
++#    if defined(__LITTLE_ENDIAN__) && __LITTLE_ENDIAN__-0 == 1 || \
++        defined(_LITTLE_ENDIAN) && _LITTLE_ENDIAN-0 == 1
+ #        define __BYTE_ORDER __LITTLE_ENDIAN
+ #    elif defined(__BIG_ENDIAN__) && __BIG_ENDIAN__ == 1 || defined(_BIG_ENDIAN) && _BIG_ENDIAN == 1
+ #        define __BYTE_ORDER __BIG_ENDIAN
diff --git a/firefox128/patches/patch-gfx_angle_checkout_src_compiler_translator_InfoSink.h b/firefox128/patches/patch-gfx_angle_checkout_src_compiler_translator_InfoSink.h
new file mode 100644
index 0000000000..25cc3ee4f9
--- /dev/null
+++ b/firefox128/patches/patch-gfx_angle_checkout_src_compiler_translator_InfoSink.h
@@ -0,0 +1,16 @@
+$NetBSD: patch-gfx_angle_checkout_src_compiler_translator_InfoSink.h,v 1.3 2021/11/11 16:48:04 ryoon Exp $
+
+* isinf/isnan in make.h is defined as macro. Use non-macro version
+  to fix build.
+
+--- gfx/angle/checkout/src/compiler/translator/InfoSink.h.orig	2021-10-28 18:03:11.000000000 +0000
++++ gfx/angle/checkout/src/compiler/translator/InfoSink.h
+@@ -7,7 +7,7 @@
+ #ifndef COMPILER_TRANSLATOR_INFOSINK_H_
+ #define COMPILER_TRANSLATOR_INFOSINK_H_
+ 
+-#include <math.h>
++#include <cmath>
+ #include <stdlib.h>
+ #include "GLSLANG/ShaderLang.h"
+ #include "compiler/translator/Common.h"
diff --git a/firefox128/patches/patch-gfx_wr_swgl_build.rs b/firefox128/patches/patch-gfx_wr_swgl_build.rs
new file mode 100644
index 0000000000..eb55e52ad3
--- /dev/null
+++ b/firefox128/patches/patch-gfx_wr_swgl_build.rs
@@ -0,0 +1,27 @@
+$NetBSD: patch-gfx_wr_swgl_build.rs,v 1.3 2021/08/29 09:36:16 taca Exp $
+
+Work around an internal compiler error on i386 when optimization is enabled:
+
+  cargo:warning=In file included from src/gl.cc:2637:0:
+  cargo:warning=src/rasterize.h: In function 'void draw_quad_spans(int, Point2D*, uint32_t, glsl::Interpolants*, Texture&, Texture&, const ClipRect&) [with P = unsigned char]':
+  cargo:warning=src/rasterize.h:782:20: internal compiler error: in convert_move, at expr.c:231
+  cargo:warning= static inline void draw_quad_spans(int nump, Point2D p[4], uint32_t z,
+  cargo:warning=                    ^~~~~~~~~~~~~~~
+
+
+--- gfx/wr/swgl/build.rs.orig	2021-08-23 14:57:16.000000000 +0000
++++ gfx/wr/swgl/build.rs
+@@ -196,6 +196,13 @@ fn main() {
+         }
+     }
+ 
++    // Work around a compiler bug
++    let target_triple = std::env::var("TARGET").expect("The TARGET environment variable must be set");
++    let target_name = target_triple.split('-').next().unwrap();
++    if ["i386", "i586", "i686"].contains(&target_name) { 
++        build.flag("-O0");
++    }
++
+     build.file("src/gl.cc")
+         .define("_GLIBCXX_USE_CXX11_ABI", Some("0"))
+         .include(shader_dir)
diff --git a/firefox128/patches/patch-intl_lwbrk_LineBreaker.cpp b/firefox128/patches/patch-intl_lwbrk_LineBreaker.cpp
new file mode 100644
index 0000000000..39382b95b1
--- /dev/null
+++ b/firefox128/patches/patch-intl_lwbrk_LineBreaker.cpp
@@ -0,0 +1,21 @@
+$NetBSD: patch-intl_lwbrk_LineBreaker.cpp,v 1.1 2023/11/09 00:04:18 wiz Exp $
+
+icu 74.1 support.
+
+--- intl/lwbrk/LineBreaker.cpp.orig	2023-10-19 19:54:30.000000000 +0000
++++ intl/lwbrk/LineBreaker.cpp
+@@ -448,7 +448,13 @@ static int8_t GetClass(uint32_t u, LineB
+       /* REGIONAL_INDICATOR = 39,           [RI] */ CLASS_CHARACTER,
+       /* E_BASE = 40,                       [EB] */ CLASS_BREAKABLE,
+       /* E_MODIFIER = 41,                   [EM] */ CLASS_CHARACTER,
+-      /* ZWJ = 42,                          [ZWJ]*/ CLASS_CHARACTER};
++      /* ZWJ = 42,                          [ZWJ]*/ CLASS_CHARACTER,
++      /* AKSARA = 43,                       [AK] */ CLASS_CHARACTER,
++      /* AKSARA_PREBASE = 44,               [AP] */ CLASS_CHARACTER,
++      /* AKSARA_START = 45,                 [AS] */ CLASS_CHARACTER,
++      /* VIRAMA_FINAL = 46,                 [VF] */ CLASS_CHARACTER,
++      /* VIRAMA = 47,                       [VI] */ CLASS_CHARACTER,
++};
+ 
+   static_assert(U_LB_COUNT == mozilla::ArrayLength(sUnicodeLineBreakToClass),
+                 "Gecko vs ICU LineBreak class mismatch");
diff --git a/firefox128/patches/patch-ipc_chromium_src_base_message__pump__libevent.cc b/firefox128/patches/patch-ipc_chromium_src_base_message__pump__libevent.cc
new file mode 100644
index 0000000000..44121f6b76
--- /dev/null
+++ b/firefox128/patches/patch-ipc_chromium_src_base_message__pump__libevent.cc
@@ -0,0 +1,22 @@
+$NetBSD: patch-ipc_chromium_src_base_message__pump__libevent.cc,v 1.12 2022/07/04 14:34:08 ryoon Exp $
+
+Allow older libevent
+
+--- ipc/chromium/src/base/message_pump_libevent.cc.orig	2022-06-16 21:32:07.000000000 +0000
++++ ipc/chromium/src/base/message_pump_libevent.cc
+@@ -24,6 +24,7 @@
+ 
+ // This macro checks that the _EVENT_SIZEOF_* constants defined in
+ // ipc/chromiume/src/third_party/<platform>/event2/event-config.h are correct.
++#if 0
+ #if defined(_EVENT_SIZEOF_SHORT)
+ #  define CHECK_EVENT_SIZEOF(TYPE, type)                \
+     static_assert(_EVENT_SIZEOF_##TYPE == sizeof(type), \
+@@ -44,6 +45,7 @@ CHECK_EVENT_SIZEOF(SHORT, short);
+ CHECK_EVENT_SIZEOF(SIZE_T, size_t);
+ CHECK_EVENT_SIZEOF(TIME_T, time_t);
+ CHECK_EVENT_SIZEOF(VOID_P, void*);
++#endif
+ 
+ // Lifecycle of struct event
+ // Libevent uses two main data structures:
diff --git a/firefox128/patches/patch-ipc_chromium_src_base_platform__thread__posix.cc b/firefox128/patches/patch-ipc_chromium_src_base_platform__thread__posix.cc
new file mode 100644
index 0000000000..c6824ec9a4
--- /dev/null
+++ b/firefox128/patches/patch-ipc_chromium_src_base_platform__thread__posix.cc
@@ -0,0 +1,17 @@
+$NetBSD: patch-ipc_chromium_src_base_platform__thread__posix.cc,v 1.13 2023/08/03 22:02:33 ryoon Exp $
+
+* Support NetBSD
+* Support Solaris (we can't rely on pthread_setname_np so ignore it).
+
+--- ipc/chromium/src/base/platform_thread_posix.cc.orig	2023-07-20 18:06:23.000000000 +0000
++++ ipc/chromium/src/base/platform_thread_posix.cc
+@@ -12,7 +12,9 @@
+ #if defined(XP_DARWIN)
+ #  include <mach/mach.h>
+ #elif defined(XP_NETBSD)
++_Pragma("GCC visibility push(default)")
+ #  include <lwp.h>
++_Pragma("GCC visibility pop")
+ #elif defined(XP_LINUX)
+ #  include <sys/syscall.h>
+ #  include <sys/prctl.h>
diff --git a/firefox128/patches/patch-ipc_glue_GeckoChildProcessHost.cpp b/firefox128/patches/patch-ipc_glue_GeckoChildProcessHost.cpp
new file mode 100644
index 0000000000..dc76a80e0b
--- /dev/null
+++ b/firefox128/patches/patch-ipc_glue_GeckoChildProcessHost.cpp
@@ -0,0 +1,21 @@
+$NetBSD: patch-ipc_glue_GeckoChildProcessHost.cpp,v 1.15 2023/09/05 14:08:39 ryoon Exp $
+
+* Support Solaris
+* Fix NetBSD linking
+
+--- ipc/glue/GeckoChildProcessHost.cpp.orig	2023-08-17 21:21:29.000000000 +0000
++++ ipc/glue/GeckoChildProcessHost.cpp
+@@ -4,7 +4,13 @@
+  * License, v. 2.0. If a copy of the MPL was not distributed with this
+  * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+ 
++#if defined(__NetBSD__)
++_Pragma("GCC visibility push(default)")
++#endif
+ #include "GeckoChildProcessHost.h"
++#if defined(__NetBSD__)
++_Pragma("GCC visibility pop")
++#endif
+ 
+ #include "base/command_line.h"
+ #include "base/process.h"
diff --git a/firefox128/patches/patch-js-src-jit-arm64-vixl-MozCpu-vixl.cpp b/firefox128/patches/patch-js-src-jit-arm64-vixl-MozCpu-vixl.cpp
new file mode 100644
index 0000000000..58f337b4e0
--- /dev/null
+++ b/firefox128/patches/patch-js-src-jit-arm64-vixl-MozCpu-vixl.cpp
@@ -0,0 +1,15 @@
+$NetBSD: patch-js-src-jit-arm64-vixl-MozCpu-vixl.cpp,v 1.2 2024/02/22 15:12:50 ryoon Exp $
+
+Add NetBSD support.
+
+--- js/src/jit/arm64/vixl/MozCpu-vixl.cpp.orig	2024-02-13 14:50:57.324257195 +0000
++++ js/src/jit/arm64/vixl/MozCpu-vixl.cpp
+@@ -110,7 +110,7 @@ void CPU::EnsureIAndDCacheCoherency(void
+   FlushInstructionCache(GetCurrentProcess(), address, length);
+ #elif defined(XP_DARWIN)
+   sys_icache_invalidate(address, length);
+-#elif defined(__aarch64__) && (defined(__linux__) || defined(__android__) || defined(__FreeBSD__))
++#elif defined(__aarch64__) && (defined(__linux__) || defined(__android__) || defined(__FreeBSD__) || defined(__NetBSD__))
+   // Implement the cache synchronisation for all targets where AArch64 is the
+   // host, even if we're building the simulator for an AAarch64 host. This
+   // allows for cases where the user wants to simulate code as well as run it
diff --git a/firefox128/patches/patch-js_public_Utility.h b/firefox128/patches/patch-js_public_Utility.h
new file mode 100644
index 0000000000..b606e1eb33
--- /dev/null
+++ b/firefox128/patches/patch-js_public_Utility.h
@@ -0,0 +1,24 @@
+$NetBSD: patch-js_public_Utility.h,v 1.1 2024/08/01 15:41:09 ryoon Exp $
+
+--- js/public/Utility.h.orig	2024-07-04 17:04:15.000000000 +0000
++++ js/public/Utility.h
+@@ -482,9 +482,6 @@ static inline void js_free(void* p) {
+ #define JS_DECLARE_NEW_METHODS(NEWNAME, ALLOCATOR, QUALIFIERS)              \
+   template <class T, typename... Args>                                      \
+   QUALIFIERS T* MOZ_HEAP_ALLOCATOR NEWNAME(Args&&... args) {                \
+-    static_assert(                                                          \
+-        alignof(T) <= alignof(max_align_t),                                 \
+-        "over-aligned type is not supported by JS_DECLARE_NEW_METHODS");    \
+     void* memory = ALLOCATOR(sizeof(T));                                    \
+     return MOZ_LIKELY(memory) ? new (memory) T(std::forward<Args>(args)...) \
+                               : nullptr;                                    \
+@@ -501,9 +498,6 @@ static inline void js_free(void* p) {
+ #define JS_DECLARE_NEW_ARENA_METHODS(NEWNAME, ALLOCATOR, QUALIFIERS)           \
+   template <class T, typename... Args>                                         \
+   QUALIFIERS T* MOZ_HEAP_ALLOCATOR NEWNAME(arena_id_t arena, Args&&... args) { \
+-    static_assert(                                                             \
+-        alignof(T) <= alignof(max_align_t),                                    \
+-        "over-aligned type is not supported by JS_DECLARE_NEW_ARENA_METHODS"); \
+     void* memory = ALLOCATOR(arena, sizeof(T));                                \
+     return MOZ_LIKELY(memory) ? new (memory) T(std::forward<Args>(args)...)    \
+                               : nullptr;                                       \
diff --git a/firefox128/patches/patch-js_src_jit_FlushICache.cpp b/firefox128/patches/patch-js_src_jit_FlushICache.cpp
new file mode 100644
index 0000000000..4d2cf42c43
--- /dev/null
+++ b/firefox128/patches/patch-js_src_jit_FlushICache.cpp
@@ -0,0 +1,34 @@
+$NetBSD: patch-js_src_jit_FlushICache.cpp,v 1.2 2023/08/20 09:31:24 tnn Exp $
+
+NetBSD does not have the Linux-specific membarrier(2) syscall.
+
+--- js/src/jit/FlushICache.cpp.orig	2023-08-15 20:31:19.000000000 +0000
++++ js/src/jit/FlushICache.cpp
+@@ -31,12 +31,18 @@
+ #    elif defined(__android__)
+ #      include <sys/syscall.h>
+ #      include <unistd.h>
++#    elif defined(__NetBSD__)
++       // nothing
+ #    else
+ #      error "Missing platform-specific declarations for membarrier syscall!"
+ #    endif  // __linux__ / ANDROID
+ 
+ static int membarrier(int cmd, int flags) {
++#if defined(__NetBSD__)
++  return ENOSYS;
++#else
+   return syscall(__NR_membarrier, cmd, flags);
++#endif
+ }
+ 
+ // These definitions come from the Linux kernel source, for kernels before 4.16
+@@ -92,6 +98,8 @@ bool CanFlushExecutionContextForAllThrea
+ 
+   computed = true;
+   return kernelHasMembarrier;
++#  elif defined(__NetBSD__)
++  return false;
+ #  else
+   // On other platforms, we assume that the syscall for flushing the icache
+   // will flush the execution context for other cores.
diff --git a/firefox128/patches/patch-js_src_old-configure.in b/firefox128/patches/patch-js_src_old-configure.in
new file mode 100644
index 0000000000..b9a308ce62
--- /dev/null
+++ b/firefox128/patches/patch-js_src_old-configure.in
@@ -0,0 +1,15 @@
+$NetBSD: patch-js_src_old-configure.in,v 1.1 2024/07/14 16:06:00 wiz Exp $
+
+Fix unportable test(1) operator.
+
+--- js/src/old-configure.in.orig	2024-07-14 16:00:40.315149382 +0000
++++ js/src/old-configure.in
+@@ -257,7 +257,7 @@ case "$target" in
+ 
+ *-android*|*-linuxandroid*)
+     MOZ_OPTIMIZE_FLAGS="-O3"
+-    if test "$CC_TYPE" == gcc ; then
++    if test "$CC_TYPE" = gcc ; then
+        MOZ_OPTIMIZE_FLAGS="-fno-reorder-functions $MOZ_OPTIMIZE_FLAGS"
+     fi
+     ;;
diff --git a/firefox128/patches/patch-js_src_util_NativeStack.cpp b/firefox128/patches/patch-js_src_util_NativeStack.cpp
new file mode 100644
index 0000000000..b4d587e1a4
--- /dev/null
+++ b/firefox128/patches/patch-js_src_util_NativeStack.cpp
@@ -0,0 +1,32 @@
+$NetBSD: patch-js_src_util_NativeStack.cpp,v 1.6 2020/04/09 14:01:26 ryoon Exp $
+
+Support SunOS.
+
+--- js/src/util/NativeStack.cpp.orig	2020-04-03 19:34:51.000000000 +0000
++++ js/src/util/NativeStack.cpp
+@@ -13,7 +13,7 @@
+ #  if defined(__FreeBSD__) || defined(__OpenBSD__) || defined(__DragonFly__)
+ #    include <pthread_np.h>
+ #  endif
+-#  if defined(SOLARIS) || defined(AIX)
++#  if defined(__sun) || defined(AIX)
+ #    include <ucontext.h>
+ #  endif
+ #  if defined(ANDROID) && !defined(__aarch64__)
+@@ -40,7 +40,7 @@ void* js::GetNativeStackBaseImpl() {
+   return static_cast<void*>(pTib->StackBase);
+ }
+ 
+-#elif defined(SOLARIS)
++#elif defined(__sun)
+ 
+ static_assert(JS_STACK_GROWTH_DIRECTION < 0);
+ 
+@@ -128,6 +128,7 @@ void* js::GetNativeStackBaseImpl() {
+ #    elif defined(PTHREAD_NP_H) || defined(_PTHREAD_NP_H_) || defined(NETBSD)
+   /* e.g. on FreeBSD 4.8 or newer, neundorf%kde.org@localhost */
+   pthread_attr_get_np(thread, &sattr);
++#    elif defined(__sun)
+ #    else
+   /*
+    * FIXME: this function is non-portable;
diff --git a/firefox128/patches/patch-media_ffvpx_libavutil_arm_bswap.h b/firefox128/patches/patch-media_ffvpx_libavutil_arm_bswap.h
new file mode 100644
index 0000000000..9673599941
--- /dev/null
+++ b/firefox128/patches/patch-media_ffvpx_libavutil_arm_bswap.h
@@ -0,0 +1,22 @@
+$NetBSD: patch-media_ffvpx_libavutil_arm_bswap.h,v 1.1 2019/11/27 15:31:09 jmcneill Exp $
+
+Fix NetBSD aarch64 build.
+
+--- media/ffvpx/libavutil/arm/bswap.h.orig	2019-10-30 17:35:56.000000000 +0000
++++ media/ffvpx/libavutil/arm/bswap.h
+@@ -23,6 +23,8 @@
+ #include "config.h"
+ #include "libavutil/attributes.h"
+ 
++#ifndef __aarch64__
++
+ #ifdef __ARMCC_VERSION
+ 
+ #if HAVE_ARMV6
+@@ -64,4 +66,6 @@ static av_always_inline av_const uint32_
+ 
+ #endif /* __ARMCC_VERSION */
+ 
++#endif /* __aarch64__ */
++
+ #endif /* AVUTIL_ARM_BSWAP_H */
diff --git a/firefox128/patches/patch-media_libpng_pngpriv.h b/firefox128/patches/patch-media_libpng_pngpriv.h
new file mode 100644
index 0000000000..fa64fe119d
--- /dev/null
+++ b/firefox128/patches/patch-media_libpng_pngpriv.h
@@ -0,0 +1,17 @@
+$NetBSD: patch-media_libpng_pngpriv.h,v 1.7 2024/04/16 20:10:33 ryoon Exp $
+
+Fix _POSIX_SOURCE on SunOS.
+
+--- media/libpng/pngpriv.h.orig	2024-04-05 19:49:16.000000000 +0000
++++ media/libpng/pngpriv.h
+@@ -36,8 +36,10 @@
+  * still required (as of 2011-05-02.)
+  */
+ #ifndef _POSIX_SOURCE
++#if !defined(__sun) || (__STDC_VERSION__-0 < 199901L)
+ #  define _POSIX_SOURCE 1 /* Just the POSIX 1003.1 and C89 APIs */
+ #endif
++#endif
+ 
+ #ifndef PNG_VERSION_INFO_ONLY
+ /* Standard library headers not required by png.h: */
diff --git a/firefox128/patches/patch-media_libtheora_lib_info.c b/firefox128/patches/patch-media_libtheora_lib_info.c
new file mode 100644
index 0000000000..ab759002ad
--- /dev/null
+++ b/firefox128/patches/patch-media_libtheora_lib_info.c
@@ -0,0 +1,19 @@
+$NetBSD: patch-media_libtheora_lib_info.c,v 1.4 2020/05/30 08:02:52 rillig Exp $
+
+Fix undefined behavior when calling <ctype.h> functions with illegal values.
+
+media/libtheora/lib/info.c:32:8: error: array subscript is of type 'char' [-Werror,-Wchar-subscripts]
+
+https://bugzilla.mozilla.org/show_bug.cgi?id=1642081
+
+--- media/libtheora/lib/info.c.orig	2020-05-07 18:34:12.000000000 +0000
++++ media/libtheora/lib/info.c
+@@ -29,7 +29,7 @@
+ static int oc_tagcompare(const char *_s1,const char *_s2,int _n){
+   int c;
+   for(c=0;c<_n;c++){
+-    if(toupper(_s1[c])!=toupper(_s2[c]))return !0;
++    if(toupper((unsigned char)_s1[c])!=toupper((unsigned char)_s2[c]))return !0;
+   }
+   return _s1[c]!='=';
+ }
diff --git a/firefox128/patches/patch-modules_fdlibm_src_math__private.h b/firefox128/patches/patch-modules_fdlibm_src_math__private.h
new file mode 100644
index 0000000000..06fcc7bbf3
--- /dev/null
+++ b/firefox128/patches/patch-modules_fdlibm_src_math__private.h
@@ -0,0 +1,20 @@
+$NetBSD: patch-modules_fdlibm_src_math__private.h,v 1.3 2022/12/11 13:49:09 ryoon Exp $
+
+* Fix PR pkg/56457, build failure on NetBSD/i386.
+  Do not use FreeBSD-specific definition.
+
+--- modules/fdlibm/src/math_private.h.orig	2022-11-03 21:19:39.000000000 +0000
++++ modules/fdlibm/src/math_private.h
+@@ -30,9 +30,9 @@
+  * Adapted from https://github.com/freebsd/freebsd-src/search?q=__double_t
+  */
+ 
+-typedef double      __double_t;
+-typedef __double_t  double_t;
+-typedef float       __float_t;
++#include <math.h>
++typedef double_t __double_t;
++typedef float_t __float_t;
+ 
+ /*
+  * The original fdlibm code used statements like:
diff --git a/firefox128/patches/patch-netwerk_protocol_http_nsHttpHandler.cpp b/firefox128/patches/patch-netwerk_protocol_http_nsHttpHandler.cpp
new file mode 100644
index 0000000000..74d9833478
--- /dev/null
+++ b/firefox128/patches/patch-netwerk_protocol_http_nsHttpHandler.cpp
@@ -0,0 +1,15 @@
+$NetBSD: patch-netwerk_protocol_http_nsHttpHandler.cpp,v 1.3 2024/04/06 08:54:54 ryoon Exp $
+
+* Do not freeze user-agent string as Linux under NetBSD.
+
+--- netwerk/protocol/http/nsHttpHandler.cpp.orig	2024-03-12 14:30:47.266423256 +0000
++++ netwerk/protocol/http/nsHttpHandler.cpp
+@@ -903,6 +903,8 @@ void nsHttpHandler::InitUserAgentCompone
+   if (mozilla::StaticPrefs::network_http_useragent_freezeCpu()) {
+ #  ifdef ANDROID
+     mOscpu.AssignLiteral("Linux armv81");
++#  elif defined(__NetBSD__)
++    mOscpu.AssignLiteral("NetBSD x86_64");
+ #  else
+     mOscpu.AssignLiteral("Linux x86_64");
+ #  endif
diff --git a/firefox128/patches/patch-nsprpub_pr_src_pthreads_ptsynch.c b/firefox128/patches/patch-nsprpub_pr_src_pthreads_ptsynch.c
new file mode 100644
index 0000000000..4a6f1daf6d
--- /dev/null
+++ b/firefox128/patches/patch-nsprpub_pr_src_pthreads_ptsynch.c
@@ -0,0 +1,112 @@
+$NetBSD: patch-nsprpub_pr_src_pthreads_ptsynch.c,v 1.2 2023/01/24 18:06:12 nia Exp $
+
+firefox: Workaround broken pthread_equal() usage
+
+Switch to an internal version of pthread_equal() without sanity checks.
+
+Problems detected on NetBSD 9.99.46.
+
+https://bugzilla.mozilla.org/show_bug.cgi?id=1718838
+
+--- nsprpub/pr/src/pthreads/ptsynch.c.orig	2020-01-17 21:34:42.000000000 +0000
++++ nsprpub/pr/src/pthreads/ptsynch.c
+@@ -25,6 +25,13 @@ static pthread_condattr_t _pt_cvar_attr;
+ extern PTDebug pt_debug;  /* this is shared between several modules */
+ #endif  /* defined(DEBUG) */
+ 
++/* XXX, pthread_equal() is misused to compare non-valid thread pointers */
++static int
++pt_pthread_equal(pthread_t t1, pthread_t t2)
++{
++	return t1 == t2;
++}
++
+ #if defined(FREEBSD)
+ /*
+  * On older versions of FreeBSD, pthread_mutex_trylock returns EDEADLK.
+@@ -197,9 +204,9 @@ PR_IMPLEMENT(PRStatus) PR_Unlock(PRLock 
+     PR_ASSERT(lock != NULL);
+     PR_ASSERT(_PT_PTHREAD_MUTEX_IS_LOCKED(lock->mutex));
+     PR_ASSERT(PR_TRUE == lock->locked);
+-    PR_ASSERT(pthread_equal(lock->owner, self));
++    PR_ASSERT(pt_pthread_equal(lock->owner, self));
+ 
+-    if (!lock->locked || !pthread_equal(lock->owner, self)) {
++    if (!lock->locked || !pt_pthread_equal(lock->owner, self)) {
+         return PR_FAILURE;
+     }
+ 
+@@ -225,7 +232,7 @@ PR_IMPLEMENT(void) PR_AssertCurrentThrea
+      * to the correctness of PR_AssertCurrentThreadOwnsLock(), but
+      * this particular order makes the assertion more likely to
+      * catch errors. */
+-    PR_ASSERT(lock->locked && pthread_equal(lock->owner, pthread_self()));
++    PR_ASSERT(lock->locked && pt_pthread_equal(lock->owner, pthread_self()));
+ }
+ 
+ /**************************************************************/
+@@ -281,7 +288,7 @@ static void pt_PostNotifyToCvar(PRCondVa
+     _PT_Notified *notified = &cvar->lock->notified;
+ 
+     PR_ASSERT(PR_TRUE == cvar->lock->locked);
+-    PR_ASSERT(pthread_equal(cvar->lock->owner, pthread_self()));
++    PR_ASSERT(pt_pthread_equal(cvar->lock->owner, pthread_self()));
+     PR_ASSERT(_PT_PTHREAD_MUTEX_IS_LOCKED(cvar->lock->mutex));
+ 
+     while (1)
+@@ -369,7 +376,7 @@ PR_IMPLEMENT(PRStatus) PR_WaitCondVar(PR
+     PR_ASSERT(_PT_PTHREAD_MUTEX_IS_LOCKED(cvar->lock->mutex));
+     PR_ASSERT(PR_TRUE == cvar->lock->locked);
+     /* and it better be by us */
+-    PR_ASSERT(pthread_equal(cvar->lock->owner, pthread_self()));
++    PR_ASSERT(pt_pthread_equal(cvar->lock->owner, pthread_self()));
+ 
+     if (_PT_THREAD_INTERRUPTED(thred)) {
+         goto aborted;
+@@ -582,7 +589,7 @@ PR_IMPLEMENT(PRIntn) PR_GetMonitorEntryC
+ 
+     rv = pthread_mutex_lock(&mon->lock);
+     PR_ASSERT(0 == rv);
+-    if (pthread_equal(mon->owner, self)) {
++    if (pt_pthread_equal(mon->owner, self)) {
+         count = mon->entryCount;
+     }
+     rv = pthread_mutex_unlock(&mon->lock);
+@@ -598,7 +605,7 @@ PR_IMPLEMENT(void) PR_AssertCurrentThrea
+     rv = pthread_mutex_lock(&mon->lock);
+     PR_ASSERT(0 == rv);
+     PR_ASSERT(mon->entryCount != 0 &&
+-              pthread_equal(mon->owner, pthread_self()));
++              pt_pthread_equal(mon->owner, pthread_self()));
+     rv = pthread_mutex_unlock(&mon->lock);
+     PR_ASSERT(0 == rv);
+ #endif
+@@ -614,7 +621,7 @@ PR_IMPLEMENT(void) PR_EnterMonitor(PRMon
+     PR_ASSERT(0 == rv);
+     if (mon->entryCount != 0)
+     {
+-        if (pthread_equal(mon->owner, self)) {
++        if (pt_pthread_equal(mon->owner, self)) {
+             goto done;
+         }
+         while (mon->entryCount != 0)
+@@ -646,8 +653,8 @@ PR_IMPLEMENT(PRStatus) PR_ExitMonitor(PR
+     PR_ASSERT(0 == rv);
+     /* the entries should be > 0 and we'd better be the owner */
+     PR_ASSERT(mon->entryCount > 0);
+-    PR_ASSERT(pthread_equal(mon->owner, self));
+-    if (mon->entryCount == 0 || !pthread_equal(mon->owner, self))
++    PR_ASSERT(pt_pthread_equal(mon->owner, self));
++    if (mon->entryCount == 0 || !pt_pthread_equal(mon->owner, self))
+     {
+         rv = pthread_mutex_unlock(&mon->lock);
+         PR_ASSERT(0 == rv);
+@@ -695,7 +702,7 @@ PR_IMPLEMENT(PRStatus) PR_Wait(PRMonitor
+     /* the entries better be positive */
+     PR_ASSERT(mon->entryCount > 0);
+     /* and it better be owned by us */
+-    PR_ASSERT(pthread_equal(mon->owner, pthread_self()));
++    PR_ASSERT(pt_pthread_equal(mon->owner, pthread_self()));
+ 
+     /* tuck these away 'till later */
+     saved_entries = mon->entryCount;
diff --git a/firefox128/patches/patch-security_nss_lib_freebl_mpi_mpi.c b/firefox128/patches/patch-security_nss_lib_freebl_mpi_mpi.c
new file mode 100644
index 0000000000..cc83a3d42a
--- /dev/null
+++ b/firefox128/patches/patch-security_nss_lib_freebl_mpi_mpi.c
@@ -0,0 +1,35 @@
+$NetBSD: patch-security_nss_lib_freebl_mpi_mpi.c,v 1.1 2020/05/30 08:02:52 rillig Exp $
+
+Fix undefined behavior when calling <ctype.h> functions with illegal values.
+
+security/nss/lib/freebl/mpi/mpi.c:4565:15: error: array subscript is of type 'char' [-Werror,-Wchar-subscripts]
+        xch = toupper(ch);
+
+security/nss/lib/freebl/mpi/mpi.c:4611:14: error: array subscript is of type 'char' [-Werror,-Wchar-subscripts]
+        ch = tolower(ch);
+
+https://bugzilla.mozilla.org/show_bug.cgi?id=1642081
+
+--- security/nss/lib/freebl/mpi/mpi.c.orig	2020-05-07 18:35:01.000000000 +0000
++++ security/nss/lib/freebl/mpi/mpi.c
+@@ -4560,9 +4560,9 @@ s_mp_tovalue(char ch, int r)
+     int val, xch;
+ 
+     if (r > 36)
+-        xch = ch;
++        xch = (unsigned char) ch;
+     else
+-        xch = toupper(ch);
++        xch = toupper((unsigned char) ch);
+ 
+     if (isdigit(xch))
+         val = xch - '0';
+@@ -4608,7 +4608,7 @@ s_mp_todigit(mp_digit val, int r, int lo
+     ch = s_dmap_1[val];
+ 
+     if (r <= 36 && low)
+-        ch = tolower(ch);
++        ch = tolower((unsigned char) ch);
+ 
+     return ch;
+ 
diff --git a/firefox128/patches/patch-third__party_js_cfworker_build.sh b/firefox128/patches/patch-third__party_js_cfworker_build.sh
new file mode 100644
index 0000000000..98e308661a
--- /dev/null
+++ b/firefox128/patches/patch-third__party_js_cfworker_build.sh
@@ -0,0 +1,20 @@
+$NetBSD: patch-third__party_js_cfworker_build.sh,v 1.1 2022/05/14 10:30:26 tnn Exp $
+
+shell portability
+
+--- third_party/js/cfworker/build.sh.orig	2022-04-28 22:03:47.000000000 +0000
++++ third_party/js/cfworker/build.sh
+@@ -4,9 +4,10 @@ set -euo pipefail
+ # Path to mach relative to /third_party/js/cfworker
+ MACH=$(realpath "../../../mach")
+ 
+-if [[ $(uname -a) == *MSYS* ]]; then
+-  MACH="python ${MACH}"
+-fi
++# uname -a is not a good idea here. Someone could have MSYS in the hostname.
++#if uname -a | grep MSYS > /dev/null; then
++#  MACH="python ${MACH}"
++#fi
+ 
+ NODE="${MACH} node"
+ NPM="${MACH} npm"
diff --git a/firefox128/patches/patch-third__party_libwebrtc_modules_desktop__capture_desktop__capture__gn_moz.build b/firefox128/patches/patch-third__party_libwebrtc_modules_desktop__capture_desktop__capture__gn_moz.build
new file mode 100644
index 0000000000..e57a37c1b0
--- /dev/null
+++ b/firefox128/patches/patch-third__party_libwebrtc_modules_desktop__capture_desktop__capture__gn_moz.build
@@ -0,0 +1,45 @@
+$NetBSD: patch-third__party_libwebrtc_modules_desktop__capture_desktop__capture__gn_moz.build,v 1.4 2024/04/06 08:53:35 ryoon Exp $
+
+* Disable Wayland desktop capture for non-Linux platforms.
+  Fix segfault under X11.
+
+--- third_party/libwebrtc/modules/desktop_capture/desktop_capture_gn/moz.build.orig	2024-03-11 10:11:56.287869888 +0000
++++ third_party/libwebrtc/modules/desktop_capture/desktop_capture_gn/moz.build
+@@ -392,7 +392,7 @@ if CONFIG["MOZ_DEBUG"] == "1" and CONFIG
+ 
+     DEFINES["_HAS_ITERATOR_DEBUGGING"] = "0"
+ 
+-if CONFIG["TARGET_CPU"] == "aarch64" and (CONFIG["OS_TARGET"] == "Linux" or CONFIG["OS_TARGET"] == "NetBSD" or CONFIG["OS_TARGET"] == "OpenBSD" or CONFIG["OS_TARGET"] == "FreeBSD"):
++if CONFIG["TARGET_CPU"] == "aarch64" and CONFIG["OS_TARGET"] == "Linux":
+ 
+     DEFINES["WEBRTC_USE_PIPEWIRE"] = True
+     DEFINES["_GNU_SOURCE"] = True
+@@ -449,7 +449,7 @@ if CONFIG["OS_TARGET"] == "Linux" and CO
+         "/third_party/libwebrtc/modules/desktop_capture/linux/x11/x_window_property.cc"
+     ]
+ 
+-if CONFIG["TARGET_CPU"] == "x86" and (CONFIG["OS_TARGET"] == "Linux" or CONFIG["OS_TARGET"] == "NetBSD" or CONFIG["OS_TARGET"] == "OpenBSD" or CONFIG["OS_TARGET"] == "FreeBSD"):
++if CONFIG["TARGET_CPU"] == "x86" and CONFIG["OS_TARGET"] == "Linux":
+ 
+     CXXFLAGS += [
+         "-msse2"
+@@ -482,7 +482,7 @@ if CONFIG["TARGET_CPU"] == "x86" and (CO
+         "/third_party/libwebrtc/modules/desktop_capture/linux/wayland/shared_screencast_stream.cc"
+     ]
+ 
+-if CONFIG["TARGET_CPU"] == "x86_64" and (CONFIG["OS_TARGET"] == "Linux" or CONFIG["OS_TARGET"] == "NetBSD" or CONFIG["OS_TARGET"] == "OpenBSD" or CONFIG["OS_TARGET"] == "FreeBSD"):
++if CONFIG["TARGET_CPU"] == "x86_64" and CONFIG["OS_TARGET"] == "Linux":
+ 
+     DEFINES["WEBRTC_USE_PIPEWIRE"] = True
+     DEFINES["_GNU_SOURCE"] = True
+@@ -628,6 +628,10 @@ if CONFIG["TARGET_CPU"] == "x86" and CON
+     DEFINES["USE_X11"] = "1"
+     DEFINES["WEBRTC_USE_X11"] = True
+ 
++    CXXFLAGS += [
++        "-msse2"
++    ]
++
+     OS_LIBS += [
+         "X11",
+         "Xcomposite",
diff --git a/firefox128/patches/patch-third__party_libwebrtc_modules_desktop__capture_linux_wayland_egl__dmabuf.cc b/firefox128/patches/patch-third__party_libwebrtc_modules_desktop__capture_linux_wayland_egl__dmabuf.cc
new file mode 100644
index 0000000000..c1a71424c0
--- /dev/null
+++ b/firefox128/patches/patch-third__party_libwebrtc_modules_desktop__capture_linux_wayland_egl__dmabuf.cc
@@ -0,0 +1,21 @@
+$NetBSD: patch-third__party_libwebrtc_modules_desktop__capture_linux_wayland_egl__dmabuf.cc,v 1.2 2023/04/18 14:00:11 ryoon Exp $
+
+--- third_party/libwebrtc/modules/desktop_capture/linux/wayland/egl_dmabuf.cc.orig	2023-03-30 21:16:09.000000000 +0000
++++ third_party/libwebrtc/modules/desktop_capture/linux/wayland/egl_dmabuf.cc
+@@ -10,12 +10,16 @@
+ 
+ #include "modules/desktop_capture/linux/wayland/egl_dmabuf.h"
+ 
++#if defined(__linux__)
+ #include <asm/ioctl.h>
++#endif
+ #include <dlfcn.h>
+ #include <fcntl.h>
+ #include <gdk/gdk.h>
+ #include <libdrm/drm_fourcc.h>
++#if defined(__linux__)
+ #include <linux/types.h>
++#endif
+ #include <spa/param/video/format-utils.h>
+ #include <unistd.h>
+ #include <xf86drm.h>
diff --git a/firefox128/patches/patch-third__party_libwebrtc_modules_video__capture_linux_device__info__v4l2.cc b/firefox128/patches/patch-third__party_libwebrtc_modules_video__capture_linux_device__info__v4l2.cc
new file mode 100644
index 0000000000..4ee851b227
--- /dev/null
+++ b/firefox128/patches/patch-third__party_libwebrtc_modules_video__capture_linux_device__info__v4l2.cc
@@ -0,0 +1,67 @@
+$NetBSD: patch-third__party_libwebrtc_modules_video__capture_linux_device__info__v4l2.cc,v 1.3 2023/10/15 07:40:10 ryoon Exp $
+
+* Fix build under NetBSD 9 and older.
+  The older NetBSD's sys/videoio.h does not have v4l2_capability.device_caps.
+
+--- third_party/libwebrtc/modules/video_capture/linux/device_info_v4l2.cc.orig	2023-09-14 21:15:08.000000000 +0000
++++ third_party/libwebrtc/modules/video_capture/linux/device_info_v4l2.cc
+@@ -211,11 +211,13 @@ uint32_t DeviceInfoV4l2::NumberOfDevices
+   for (int n = 0; n < 64; n++) {
+     snprintf(device, sizeof(device), "/dev/video%d", n);
+     if ((fd = open(device, O_RDONLY)) != -1) {
++#if defined(VIDIOC_QUERYCAP)
+       // query device capabilities and make sure this is a video capture device
+       if (ioctl(fd, VIDIOC_QUERYCAP, &cap) < 0 || !IsVideoCaptureDevice(&cap)) {
+         close(fd);
+         continue;
+       }
++#endif
+ 
+       close(fd);
+       count++;
+@@ -242,11 +244,13 @@ int32_t DeviceInfoV4l2::GetDeviceName(ui
+   for (int n = 0; n < 64; n++) {
+     snprintf(device, sizeof(device), "/dev/video%d", n);
+     if ((fd = open(device, O_RDONLY)) != -1) {
++#if defined(VIDIOC_QUERYCAP)
+       // query device capabilities and make sure this is a video capture device
+       if (ioctl(fd, VIDIOC_QUERYCAP, &cap) < 0 || !IsVideoCaptureDevice(&cap)) {
+         close(fd);
+         continue;
+       }
++#endif
+       if (count == deviceNumber) {
+         // Found the device
+         found = true;
+@@ -317,6 +321,7 @@ int32_t DeviceInfoV4l2::CreateCapability
+     if (fd == -1)
+       continue;
+ 
++#if defined(VIDIOC_QUERYCAP)
+     // query device capabilities
+     struct v4l2_capability cap;
+     if (ioctl(fd, VIDIOC_QUERYCAP, &cap) == 0) {
+@@ -341,6 +346,7 @@ int32_t DeviceInfoV4l2::CreateCapability
+         }
+       }
+     }
++#endif
+     close(fd);  // close since this is not the matching device
+   }
+ 
+@@ -386,11 +392,15 @@ bool DeviceInfoV4l2::IsDeviceNameMatches
+ 
+ bool DeviceInfoV4l2::IsVideoCaptureDevice(struct v4l2_capability* cap)
+ {
++#if defined(V4L2_CAP_DEVICE_CAPS)
+   if (cap->capabilities & V4L2_CAP_DEVICE_CAPS) {
+     return cap->device_caps & V4L2_CAP_VIDEO_CAPTURE;
+   } else {
+     return cap->capabilities & V4L2_CAP_VIDEO_CAPTURE;
+   }
++#else
++    return cap->capabilities & V4L2_CAP_VIDEO_CAPTURE;
++#endif
+ }
+ 
+ int32_t DeviceInfoV4l2::FillCapabilities(int fd) {
diff --git a/firefox128/patches/patch-third__party_libwebrtc_modules_video__capture_linux_video__capture__v4l2.cc b/firefox128/patches/patch-third__party_libwebrtc_modules_video__capture_linux_video__capture__v4l2.cc
new file mode 100644
index 0000000000..70dcb7b66d
--- /dev/null
+++ b/firefox128/patches/patch-third__party_libwebrtc_modules_video__capture_linux_video__capture__v4l2.cc
@@ -0,0 +1,23 @@
+$NetBSD: patch-third__party_libwebrtc_modules_video__capture_linux_video__capture__v4l2.cc,v 1.2 2023/01/24 17:57:09 nia Exp $
+
+* Fix build under NetBSD 9 and older.
+  The older NetBSD's sys/videoio.h does not have v4l2_capability.device_caps.
+
+--- third_party/libwebrtc/modules/video_capture/linux/video_capture_v4l2.cc.orig	2022-10-06 21:19:29.000000000 +0000
++++ third_party/libwebrtc/modules/video_capture/linux/video_capture_v4l2.cc
+@@ -77,6 +77,7 @@ int32_t VideoCaptureModuleV4L2::Init(con
+     if ((fd = open(device, O_RDONLY)) != -1) {
+       // query device capabilities
+       struct v4l2_capability cap;
++#if defined(VIDIOC_QUERYCAP)
+       if (ioctl(fd, VIDIOC_QUERYCAP, &cap) == 0) {
+         if (cap.bus_info[0] != 0) {
+           if (strncmp((const char*)cap.bus_info,
+@@ -89,6 +90,7 @@ int32_t VideoCaptureModuleV4L2::Init(con
+           }
+         }
+       }
++#endif
+       close(fd);  // close since this is not the matching device
+     }
+   }
diff --git a/firefox128/patches/patch-third__party_libwebrtc_rtc__base_physical__socket__server.cc b/firefox128/patches/patch-third__party_libwebrtc_rtc__base_physical__socket__server.cc
new file mode 100644
index 0000000000..bb0f288ce6
--- /dev/null
+++ b/firefox128/patches/patch-third__party_libwebrtc_rtc__base_physical__socket__server.cc
@@ -0,0 +1,13 @@
+$NetBSD: patch-third__party_libwebrtc_rtc__base_physical__socket__server.cc,v 1.1 2024/07/13 22:10:30 ryoon Exp $
+
+--- third_party/libwebrtc/rtc_base/physical_socket_server.cc.orig	2024-07-03 20:25:45.412396416 +0000
++++ third_party/libwebrtc/rtc_base/physical_socket_server.cc
+@@ -770,7 +770,7 @@ int PhysicalSocket::TranslateOption(Opti
+       return -1;
+ #endif
+     case OPT_RECV_ECN:
+-#if defined(WEBRTC_POSIX)
++#if defined(WEBRTC_POSIX) && defined(IP_RECVTOS)
+       if (family_ == AF_INET6) {
+         *slevel = IPPROTO_IPV6;
+         *sopt = IPV6_RECVTCLASS;
diff --git a/firefox128/patches/patch-third__party_libwebrtc_system__wrappers_source_cpu__features__linux.cc b/firefox128/patches/patch-third__party_libwebrtc_system__wrappers_source_cpu__features__linux.cc
new file mode 100644
index 0000000000..5ebcd61054
--- /dev/null
+++ b/firefox128/patches/patch-third__party_libwebrtc_system__wrappers_source_cpu__features__linux.cc
@@ -0,0 +1,25 @@
+$NetBSD: patch-third__party_libwebrtc_system__wrappers_source_cpu__features__linux.cc,v 1.2 2022/01/17 10:22:54 tnn Exp $
+
+* Fix build under NetBSD at least.
+
+--- third_party/libwebrtc/system_wrappers/source/cpu_features_linux.cc.orig	2022-01-13 19:26:15.000000000 +0000
++++ third_party/libwebrtc/system_wrappers/source/cpu_features_linux.cc
+@@ -8,7 +8,9 @@
+  *  be found in the AUTHORS file in the root of the source tree.
+  */
+ 
++#if !defined(__NetBSD__)
+ #include <features.h>
++#endif
+ #include <stdlib.h>
+ #include <string.h>
+ 
+@@ -30,7 +32,7 @@
+ #include "rtc_base/system/arch.h"
+ #include "system_wrappers/include/cpu_features_wrapper.h"
+ 
+-#if defined(WEBRTC_ARCH_ARM_FAMILY)
++#if defined(WEBRTC_ARCH_ARM_FAMILY) && defined(__linux__)
+ #include <asm/hwcap.h>
+ 
+ namespace webrtc {
diff --git a/firefox128/patches/patch-third__party_sqlite3_src_moz.build b/firefox128/patches/patch-third__party_sqlite3_src_moz.build
new file mode 100644
index 0000000000..695047fc60
--- /dev/null
+++ b/firefox128/patches/patch-third__party_sqlite3_src_moz.build
@@ -0,0 +1,15 @@
+$NetBSD: patch-third__party_sqlite3_src_moz.build,v 1.2 2023/07/07 13:47:10 ryoon Exp $
+
+* Fix segfault under NetBSD/i386 9 and pkgsrc/lang/gcc8-8.5.0
+  For NetBSD/i386 9, @SQLITE3OPTFLAG@ will be replaced with "'-O0',".
+
+--- third_party/sqlite3/src/moz.build.orig	2023-06-22 21:19:22.000000000 +0000
++++ third_party/sqlite3/src/moz.build
+@@ -108,6 +108,7 @@ if CONFIG['CC_TYPE'] in ('clang', 'gcc')
+     CFLAGS += [
+         '-Wno-sign-compare',
+         '-Wno-type-limits',
++        @SQLITE3OPTFLAG@
+     ]
+ 
+ # Set a default journal size limit. Note an hot journal can grow over this
diff --git a/firefox128/patches/patch-third__party_wasm2c_src_prebuilt_wasm2c__source__includes.cc b/firefox128/patches/patch-third__party_wasm2c_src_prebuilt_wasm2c__source__includes.cc
new file mode 100644
index 0000000000..bfaa06a031
--- /dev/null
+++ b/firefox128/patches/patch-third__party_wasm2c_src_prebuilt_wasm2c__source__includes.cc
@@ -0,0 +1,13 @@
+$NetBSD: patch-third__party_wasm2c_src_prebuilt_wasm2c__source__includes.cc,v 1.1 2023/06/14 16:22:18 ryoon Exp $
+
+--- third_party/wasm2c/src/prebuilt/wasm2c_source_includes.cc.orig	2023-05-25 21:19:41.000000000 +0000
++++ third_party/wasm2c/src/prebuilt/wasm2c_source_includes.cc
+@@ -20,7 +20,7 @@ R"w2c_template(#include <malloc.h>
+ )w2c_template"
+ R"w2c_template(#define alloca _alloca
+ )w2c_template"
+-R"w2c_template(#elif defined(__FreeBSD__) || defined(__OpenBSD__)
++R"w2c_template(#elif defined(__FreeBSD__) || defined(__OpenBSD__) || defined(__NetBSD__)
+ )w2c_template"
+ R"w2c_template(#include <stdlib.h>
+ )w2c_template"
diff --git a/firefox128/patches/patch-toolkit_components_terminator_nsTerminator.cpp b/firefox128/patches/patch-toolkit_components_terminator_nsTerminator.cpp
new file mode 100644
index 0000000000..6eb631a296
--- /dev/null
+++ b/firefox128/patches/patch-toolkit_components_terminator_nsTerminator.cpp
@@ -0,0 +1,27 @@
+$NetBSD: patch-toolkit_components_terminator_nsTerminator.cpp,v 1.8 2023/01/07 23:36:39 ryoon Exp $
+
+* Fix segfault on exit under NetBSD
+
+--- toolkit/components/terminator/nsTerminator.cpp.orig	2022-06-16 21:35:58.000000000 +0000
++++ toolkit/components/terminator/nsTerminator.cpp
+@@ -34,7 +34,7 @@
+ #if defined(XP_WIN)
+ #  include <windows.h>
+ #else
+-#  include <unistd.h>
++#  include <time.h>
+ #endif
+ 
+ #include "mozilla/AppShutdown.h"
+@@ -184,7 +184,10 @@ void RunWatchdog(void* arg) {
+ #if defined(XP_WIN)
+     Sleep(HEARTBEAT_INTERVAL_MS /* ms */);
+ #else
+-    usleep(HEARTBEAT_INTERVAL_MS * 1000 /* usec */);
++    struct timespec tickd;
++    tickd.tv_sec = 0;
++    tickd.tv_nsec = HEARTBEAT_INTERVAL_MS * 1000 * 1000;
++    nanosleep(&tickd, NULL);
+ #endif
+ 
+     if (gHeartbeat++ < timeToLive) {
diff --git a/firefox128/patches/patch-toolkit_moz.configure b/firefox128/patches/patch-toolkit_moz.configure
new file mode 100644
index 0000000000..7bafdf5614
--- /dev/null
+++ b/firefox128/patches/patch-toolkit_moz.configure
@@ -0,0 +1,31 @@
+$NetBSD: patch-toolkit_moz.configure,v 1.17 2023/08/22 13:48:17 tnn Exp $
+
+* Enable ALSA for NetBSD too.
+* Support --enable-forkserver on NetBSD.
+
+--- toolkit/moz.configure.orig	2023-08-15 21:10:03.000000000 +0000
++++ toolkit/moz.configure
+@@ -242,6 +242,7 @@ def imply_alsa(values, target):
+         any("alsa" in value for value in values)
+         and target.kernel != "Linux"
+         and target.os != "FreeBSD"
++        and target.os != "NetBSD"
+     ):
+         die("Cannot enable ALSA on %s", target.os)
+     return any("alsa" in value for value in values) or None
+@@ -2816,6 +2817,7 @@ def forkserver_default(target, build_pro
+         (target.os == "GNU" and target.kernel == "Linux")
+         or target.os == "FreeBSD"
+         or target.os == "OpenBSD"
++        or target.os == "NetBSD"
+     )
+ 
+ 
+@@ -2834,6 +2836,7 @@ def forkserver_flag(value, target):
+         or (target.os == "GNU" and target.kernel == "Linux")
+         or target.os == "FreeBSD"
+         or target.os == "OpenBSD"
++        or target.os == "NetBSD"
+     ):
+         return bool(value)
+     pass
diff --git a/firefox128/patches/patch-toolkit_mozapps_installer_packager.mk b/firefox128/patches/patch-toolkit_mozapps_installer_packager.mk
new file mode 100644
index 0000000000..06a25f04c8
--- /dev/null
+++ b/firefox128/patches/patch-toolkit_mozapps_installer_packager.mk
@@ -0,0 +1,15 @@
+$NetBSD: patch-toolkit_mozapps_installer_packager.mk,v 1.3 2020/02/12 16:36:50 ryoon Exp $
+
+* Symbolic link to lib/firefox/firefox causes 'Couldn't load XPCOM.' error.
+
+--- toolkit/mozapps/installer/packager.mk.orig	2020-01-29 07:05:13.000000000 +0000
++++ toolkit/mozapps/installer/packager.mk
+@@ -145,7 +145,7 @@ endif
+ 	  (cd $(DESTDIR)$(installdir) && tar -xf -)
+ 	$(NSINSTALL) -D $(DESTDIR)$(bindir)
+ 	$(RM) -f $(DESTDIR)$(bindir)/$(MOZ_APP_NAME)
+-	ln -s $(installdir)/$(MOZ_APP_NAME) $(DESTDIR)$(bindir)
++	#ln -s $(installdir)/$(MOZ_APP_NAME) $(DESTDIR)$(bindir)
+ 
+ upload:
+ 	$(PYTHON3) -u $(MOZILLA_DIR)/build/upload.py --base-path $(DIST) $(UPLOAD_FILES)
diff --git a/firefox128/patches/patch-xpcom_base_nscore.h b/firefox128/patches/patch-xpcom_base_nscore.h
new file mode 100644
index 0000000000..da83809add
--- /dev/null
+++ b/firefox128/patches/patch-xpcom_base_nscore.h
@@ -0,0 +1,15 @@
+$NetBSD: patch-xpcom_base_nscore.h,v 1.5 2019/03/19 16:11:28 ryoon Exp $
+
+* Support llvm/clang
+
+--- xpcom/base/nscore.h.orig	2019-03-07 16:53:44.000000000 +0000
++++ xpcom/base/nscore.h
+@@ -76,7 +76,7 @@
+  *           NS_HIDDEN_(int) NS_FASTCALL func2(char *foo);
+  */
+ 
+-#if defined(__i386__) && defined(__GNUC__)
++#if defined(__i386__) && defined(__GNUC__) && !(defined(__clang__) && __clang_major__ == 3 && __clang_minor__ == 4 && __clang_patchlevel__ == 0)
+ #  define NS_FASTCALL __attribute__((regparm(3), stdcall))
+ #  define NS_CONSTRUCTOR_FASTCALL __attribute__((regparm(3), stdcall))
+ #elif defined(XP_WIN) && !defined(_WIN64)
diff --git a/firefox128/patches/patch-xpcom_reflect_xptcall_md_unix_moz.build b/firefox128/patches/patch-xpcom_reflect_xptcall_md_unix_moz.build
new file mode 100644
index 0000000000..c90a2d181f
--- /dev/null
+++ b/firefox128/patches/patch-xpcom_reflect_xptcall_md_unix_moz.build
@@ -0,0 +1,17 @@
+$NetBSD: patch-xpcom_reflect_xptcall_md_unix_moz.build,v 1.15 2024/01/31 15:54:52 ryoon Exp $
+
+Make NetBSD/sparc64 use the same xptcall bindings as all other sparc64 ports
+
+https://bugzilla.mozilla.org/show_bug.cgi?id=1505360
+
+--- xpcom/reflect/xptcall/md/unix/moz.build.orig	2024-01-12 13:20:20.000000000 +0000
++++ xpcom/reflect/xptcall/md/unix/moz.build
+@@ -221,7 +221,7 @@ if CONFIG["OS_ARCH"] == "OpenBSD" and CO
+     ]
+ 
+ if (
+-    CONFIG["OS_ARCH"] in ("OpenBSD", "FreeBSD", "Linux", "SunOS")
++    CONFIG["OS_ARCH"] in ("OpenBSD", "FreeBSD", "Linux", "SunOS", "NetBSD")
+     and CONFIG["TARGET_CPU"] == "sparc64"
+ ):
+     SOURCES += [


Home | Main Index | Thread Index | Old Index